|
7 | 7 |
|
8 | 8 |
|
9 | 9 | GENERATION_COMPONENT_MARKERS = ("capacity_energy", "non_capacity_energy") |
| 10 | +DISTRIBUTION_TRANSMISSION_COMPONENT_MARKERS = ("distribution", "transmission") |
10 | 11 |
|
11 | 12 |
|
12 | 13 | def _is_hour_in_range(start_hour: int, end_hour: int, hour: int) -> bool: |
@@ -65,22 +66,37 @@ def current_import_rate_cents(period: SeasonalPeriodRate) -> Decimal: |
65 | 66 | return period.components.per_kwh_total |
66 | 67 |
|
67 | 68 |
|
68 | | -def current_export_rate_cents( |
69 | | - period: SeasonalPeriodRate, |
70 | | - net_metering: bool, |
71 | | - rider18_export_cents: Decimal | None = None, |
72 | | -) -> Decimal: |
| 69 | +def _component_total(period: SeasonalPeriodRate, markers: tuple[str, ...]) -> Decimal: |
| 70 | + total = Decimal("0") |
| 71 | + for key, value in period.components.per_kwh.items(): |
| 72 | + if any(marker in key for marker in markers): |
| 73 | + total += value |
| 74 | + return total |
| 75 | + |
| 76 | + |
| 77 | +def _has_component(period: SeasonalPeriodRate, markers: tuple[str, ...]) -> bool: |
| 78 | + return any(any(marker in key for marker in markers) for key in period.components.per_kwh) |
| 79 | + |
| 80 | + |
| 81 | +def rider18_export_rate_cents(period: SeasonalPeriodRate) -> Decimal: |
| 82 | + return _component_total(period, GENERATION_COMPONENT_MARKERS) + _component_total( |
| 83 | + period, |
| 84 | + DISTRIBUTION_TRANSMISSION_COMPONENT_MARKERS, |
| 85 | + ) |
| 86 | + |
| 87 | + |
| 88 | +def rider18_export_formula_available(period: SeasonalPeriodRate) -> bool: |
| 89 | + return _has_component(period, GENERATION_COMPONENT_MARKERS) and _has_component( |
| 90 | + period, |
| 91 | + DISTRIBUTION_TRANSMISSION_COMPONENT_MARKERS, |
| 92 | + ) |
| 93 | + |
| 94 | + |
| 95 | +def current_export_rate_cents(period: SeasonalPeriodRate, net_metering: bool) -> Decimal: |
73 | 96 | if net_metering: |
74 | 97 | return period.components.per_kwh_total |
75 | 98 |
|
76 | | - if rider18_export_cents is not None: |
77 | | - return rider18_export_cents |
78 | | - |
79 | | - generation_only = Decimal("0") |
80 | | - for key, value in period.components.per_kwh.items(): |
81 | | - if any(marker in key for marker in GENERATION_COMPONENT_MARKERS): |
82 | | - generation_only += value |
83 | | - return generation_only |
| 99 | + return rider18_export_rate_cents(period) |
84 | 100 |
|
85 | 101 |
|
86 | 102 | def period_display_name(period: SeasonalPeriodRate) -> str: |
|
0 commit comments