tariffkit 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tariffkit/__init__.py +52 -0
- tariffkit/account/__init__.py +41 -0
- tariffkit/account/cli.py +493 -0
- tariffkit/account/errors.py +25 -0
- tariffkit/account/model.py +641 -0
- tariffkit/account/rates.py +61 -0
- tariffkit/account/repository.py +329 -0
- tariffkit/billing/__init__.py +56 -0
- tariffkit/billing/engine.py +505 -0
- tariffkit/billing/ledger.py +365 -0
- tariffkit/billing/models.py +274 -0
- tariffkit/billing/netting.py +137 -0
- tariffkit/billing/trueup.py +498 -0
- tariffkit/cca.py +122 -0
- tariffkit/cli.py +809 -0
- tariffkit/config.py +296 -0
- tariffkit/data/__init__.py +40 -0
- tariffkit/data/cca/mce/2023-01-01.toml +61 -0
- tariffkit/data/cca/mce/2026-04-01.toml +152 -0
- tariffkit/data/export/pge/acc_plus/2023-04-15.toml +43 -0
- tariffkit/data/export/pge/nbt00.json.gz +0 -0
- tariffkit/data/export/pge/nbt23.json.gz +0 -0
- tariffkit/data/export/pge/nbt24.json.gz +0 -0
- tariffkit/data/export/pge/nbt25.json.gz +0 -0
- tariffkit/data/export/pge/nbt26.json.gz +0 -0
- tariffkit/data/holidays.toml +36 -0
- tariffkit/data/manifest.json +56 -0
- tariffkit/data/nsc/pge.toml +57 -0
- tariffkit/data/tariff/pge/eelec/2025-01-01.toml +151 -0
- tariffkit/data/tariff/pge/eelec/2025-03-01.toml +150 -0
- tariffkit/data/tariff/pge/eelec/2025-09-01.toml +150 -0
- tariffkit/data/tariff/pge/eelec/2026-01-01.toml +153 -0
- tariffkit/data/tariff/pge/eelec/2026-03-01.toml +157 -0
- tariffkit/data/tariff/pge/etouc/2025-01-01.toml +222 -0
- tariffkit/data/tariff/pge/etouc/2025-03-01.toml +221 -0
- tariffkit/data/tariff/pge/etouc/2025-09-01.toml +221 -0
- tariffkit/data/tariff/pge/etouc/2026-01-01.toml +224 -0
- tariffkit/data/tariff/pge/etouc/2026-03-01.toml +231 -0
- tariffkit/data/tariff/pge/ev2a/2025-01-01.toml +144 -0
- tariffkit/data/tariff/pge/ev2a/2025-03-01.toml +143 -0
- tariffkit/data/tariff/pge/ev2a/2025-09-01.toml +143 -0
- tariffkit/data/tariff/pge/ev2a/2026-01-01.toml +146 -0
- tariffkit/data/tariff/pge/ev2a/2026-03-01.toml +153 -0
- tariffkit/data/tax/ca_energy_resources/2025-01-01.toml +27 -0
- tariffkit/data/tax/ca_energy_resources/2026-01-01.toml +27 -0
- tariffkit/data/versioned.py +118 -0
- tariffkit/engine.py +82 -0
- tariffkit/errors.py +19 -0
- tariffkit/export/__init__.py +5 -0
- tariffkit/export/nbt.py +207 -0
- tariffkit/interop/__init__.py +21 -0
- tariffkit/interop/emhass.py +79 -0
- tariffkit/interop/predbat.py +102 -0
- tariffkit/interop/slots.py +63 -0
- tariffkit/models.py +164 -0
- tariffkit/mqtt/__init__.py +6 -0
- tariffkit/mqtt/discovery.py +84 -0
- tariffkit/mqtt/publisher.py +305 -0
- tariffkit/providers/__init__.py +1 -0
- tariffkit/providers/pge/__init__.py +33 -0
- tariffkit/providers/pge/reconcile.py +828 -0
- tariffkit/providers/pge/statements/__init__.py +26 -0
- tariffkit/providers/pge/statements/errors.py +20 -0
- tariffkit/providers/pge/statements/model.py +320 -0
- tariffkit/providers/pge/statements/ocr.py +193 -0
- tariffkit/providers/pge/statements/parse.py +813 -0
- tariffkit/py.typed +0 -0
- tariffkit/secrets.py +164 -0
- tariffkit/sources/__init__.py +71 -0
- tariffkit/sources/greenbutton.py +318 -0
- tariffkit/sources/homeassistant.py +342 -0
- tariffkit/sources/influx.py +359 -0
- tariffkit/sources/pge.py +1153 -0
- tariffkit/tariff/__init__.py +5 -0
- tariffkit/tariff/retail.py +271 -0
- tariffkit/timeutil.py +120 -0
- tariffkit/web/__init__.py +5 -0
- tariffkit/web/app.py +220 -0
- tariffkit-0.2.0.dist-info/METADATA +260 -0
- tariffkit-0.2.0.dist-info/RECORD +83 -0
- tariffkit-0.2.0.dist-info/WHEEL +4 -0
- tariffkit-0.2.0.dist-info/entry_points.txt +2 -0
- tariffkit-0.2.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"archive_sha256": "9b554698025ed0cdaea0d48ab1ed1a58834f30d4af4e2cad2b879349626356d3",
|
|
3
|
+
"source_url": "https://www.pge.com/assets/pge/docs/vanities/PGE-Solar-Billing-Plan-Export-Rates.zip",
|
|
4
|
+
"vintages": {
|
|
5
|
+
"NBT00": {
|
|
6
|
+
"exact_through": 2035,
|
|
7
|
+
"file": "export/pge/nbt00.json.gz",
|
|
8
|
+
"member": "PG&E NBT EEC Values Floating Vintage.csv",
|
|
9
|
+
"member_sha256": "6e93d289a54c0d0f253bdaa2c7560555047cf91db85dc1810cc9ec1e9a003f6d",
|
|
10
|
+
"years": [
|
|
11
|
+
2025,
|
|
12
|
+
2044
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
"NBT23": {
|
|
16
|
+
"exact_through": 2043,
|
|
17
|
+
"file": "export/pge/nbt23.json.gz",
|
|
18
|
+
"member": "PG&E NBT EEC Values 2023 Vintage.csv",
|
|
19
|
+
"member_sha256": "d1d26b9ba0f7e89ed2b494c1b3b0ba49c3a3a23aa705af4d5ef0f90015136a14",
|
|
20
|
+
"years": [
|
|
21
|
+
2024,
|
|
22
|
+
2043
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"NBT24": {
|
|
26
|
+
"exact_through": 2043,
|
|
27
|
+
"file": "export/pge/nbt24.json.gz",
|
|
28
|
+
"member": "PG&E NBT EEC Values 2024 Vintage.csv",
|
|
29
|
+
"member_sha256": "e5740de7b9e19d05d59ac06640544de4fdf8aa74b8f9b87fd061b9de7efa4b16",
|
|
30
|
+
"years": [
|
|
31
|
+
2024,
|
|
32
|
+
2043
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"NBT25": {
|
|
36
|
+
"exact_through": 2035,
|
|
37
|
+
"file": "export/pge/nbt25.json.gz",
|
|
38
|
+
"member": "PG&E NBT EEC Values 2025 Vintage.csv",
|
|
39
|
+
"member_sha256": "5886394c72b435d899083a5ed86f8f33a3344909057bf395ad607b57559dfb85",
|
|
40
|
+
"years": [
|
|
41
|
+
2025,
|
|
42
|
+
2044
|
|
43
|
+
]
|
|
44
|
+
},
|
|
45
|
+
"NBT26": {
|
|
46
|
+
"exact_through": 2036,
|
|
47
|
+
"file": "export/pge/nbt26.json.gz",
|
|
48
|
+
"member": "PG&E NBT EEC Values 2026 Vintage.csv",
|
|
49
|
+
"member_sha256": "a288b8124939b0a87ba8f56ef01973d9dae75d9974288ee260585d737d617fa3",
|
|
50
|
+
"years": [
|
|
51
|
+
2026,
|
|
52
|
+
2045
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Pacific Gas and Electric Net Surplus Compensation (NSC) rates, by true-up month.
|
|
2
|
+
#
|
|
3
|
+
# Source: https://www.pge.com/assets/pge/docs/clean-energy/solar/AB920-RateTable.pdf
|
|
4
|
+
#
|
|
5
|
+
# GENERATED by `python -m tools.regen nsc` -- do not hand-edit.
|
|
6
|
+
#
|
|
7
|
+
# Definition, from the table's own footnote: per D.11-06-016, the
|
|
8
|
+
# electricity portion of the NSC rate is the simple rolling average of the
|
|
9
|
+
# utility's default load aggregation point price from 7 a.m. to 5 p.m.,
|
|
10
|
+
# corresponding to the customer's 12-month true-up period. Schedule NBT
|
|
11
|
+
# adds the mechanics: the rate is calculated monthly, effective the first
|
|
12
|
+
# of that month, and applies to any Net Surplus Generator whose Relevant
|
|
13
|
+
# Period completed in it.
|
|
14
|
+
#
|
|
15
|
+
# READ THIS BEFORE USING IT FOR A CCA ACCOUNT. Schedule NBT, Special
|
|
16
|
+
# Condition 5.a bars net surplus generators taking Direct Access or
|
|
17
|
+
# Community Choice Aggregation service from receiving NSC from the utility,
|
|
18
|
+
# and applicability is limited to bundled generators. For a CCA account
|
|
19
|
+
# this table is NOT the rate that will be paid -- the CCA's own tariff
|
|
20
|
+
# governs, and MCE determines its rate at cash-out rather than publishing
|
|
21
|
+
# it ahead. It is vendored because it is the only published, auditable NSC
|
|
22
|
+
# series there is, which makes it a usable stand-in until a real cash-out
|
|
23
|
+
# statement exists. Anything computed from it for a CCA account is an
|
|
24
|
+
# estimate and is flagged as one.
|
|
25
|
+
#
|
|
26
|
+
# A row is added each month; the series here ends at 2026-08. A true-up
|
|
27
|
+
# month later than that has no published rate yet, which is the normal
|
|
28
|
+
# case rather than an edge one.
|
|
29
|
+
|
|
30
|
+
schema = 1
|
|
31
|
+
utility = "PGE"
|
|
32
|
+
currency = "USD/kWh"
|
|
33
|
+
source_url = "https://www.pge.com/assets/pge/docs/clean-energy/solar/AB920-RateTable.pdf"
|
|
34
|
+
decision = "D.11-06-016"
|
|
35
|
+
|
|
36
|
+
# Keyed by true-up month: the month in which a Relevant Period completes.
|
|
37
|
+
[rates]
|
|
38
|
+
"2025-01" = 0.03396
|
|
39
|
+
"2025-02" = 0.03087
|
|
40
|
+
"2025-03" = 0.03043
|
|
41
|
+
"2025-04" = 0.03041
|
|
42
|
+
"2025-05" = 0.02919
|
|
43
|
+
"2025-06" = 0.02965
|
|
44
|
+
"2025-07" = 0.03089
|
|
45
|
+
"2025-08" = 0.03040
|
|
46
|
+
"2025-09" = 0.02999
|
|
47
|
+
"2025-10" = 0.03130
|
|
48
|
+
"2025-11" = 0.03094
|
|
49
|
+
"2025-12" = 0.03145
|
|
50
|
+
"2026-01" = 0.03116
|
|
51
|
+
"2026-02" = 0.03025
|
|
52
|
+
"2026-03" = 0.02962
|
|
53
|
+
"2026-04" = 0.02860
|
|
54
|
+
"2026-05" = 0.02897
|
|
55
|
+
"2026-06" = 0.02862
|
|
56
|
+
"2026-07" = 0.03089
|
|
57
|
+
"2026-08" = 0.02684
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# Pacific Gas and Electric Schedule E-ELEC -- retail time-of-use rates.
|
|
2
|
+
#
|
|
3
|
+
# Source: https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf
|
|
4
|
+
#
|
|
5
|
+
# GENERATED by `python -m tools.regen tariff` -- do not hand-edit the rate tables.
|
|
6
|
+
# Regenerate with:
|
|
7
|
+
# python -m tools.regen tariff --provider eelec
|
|
8
|
+
#
|
|
9
|
+
# A tariff book's sheets revise independently, so each carries its own
|
|
10
|
+
# advice letter and effective date. The snapshot is dated from the sheet
|
|
11
|
+
# carrying the unbundled rate table, which is when these values took
|
|
12
|
+
# force -- not the latest date in the book. Sheets read:
|
|
13
|
+
# Sheet 2: Advice 7469-E, effective 2025-01-01
|
|
14
|
+
# Sheet 4: Advice 7469-E, effective 2025-01-01
|
|
15
|
+
#
|
|
16
|
+
# The unbundled components below sum exactly to the published totals in
|
|
17
|
+
# [totals]; regeneration refuses to write unless they do, which is what
|
|
18
|
+
# makes a silent mis-parse essentially impossible.
|
|
19
|
+
|
|
20
|
+
schema = 1
|
|
21
|
+
utility = "PGE"
|
|
22
|
+
tariff = "E-ELEC"
|
|
23
|
+
effective = "2025-01-01"
|
|
24
|
+
advice_letter = "7469-E"
|
|
25
|
+
source_url = "https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf"
|
|
26
|
+
currency = "USD/kWh"
|
|
27
|
+
|
|
28
|
+
# Structure the sheet does not publish, carried forward from the previous
|
|
29
|
+
# snapshot. Changing any of it is a deliberate human edit.
|
|
30
|
+
has_baseline = false
|
|
31
|
+
|
|
32
|
+
[seasons]
|
|
33
|
+
summer_start = "06-01"
|
|
34
|
+
summer_end = "09-30"
|
|
35
|
+
|
|
36
|
+
[periods]
|
|
37
|
+
peak = [[16, 21]]
|
|
38
|
+
part_peak = [[15, 16], [21, 24]]
|
|
39
|
+
|
|
40
|
+
# Season- and period-dependent components.
|
|
41
|
+
|
|
42
|
+
[energy.summer.peak]
|
|
43
|
+
generation = 0.31659
|
|
44
|
+
distribution = 0.23528
|
|
45
|
+
|
|
46
|
+
[energy.summer.part_peak]
|
|
47
|
+
generation = 0.21748
|
|
48
|
+
distribution = 0.17251
|
|
49
|
+
|
|
50
|
+
[energy.summer.off_peak]
|
|
51
|
+
generation = 0.17238
|
|
52
|
+
distribution = 0.16093
|
|
53
|
+
|
|
54
|
+
[energy.winter.peak]
|
|
55
|
+
generation = 0.15446
|
|
56
|
+
distribution = 0.1659
|
|
57
|
+
|
|
58
|
+
[energy.winter.part_peak]
|
|
59
|
+
generation = 0.13449
|
|
60
|
+
distribution = 0.16378
|
|
61
|
+
|
|
62
|
+
[energy.winter.off_peak]
|
|
63
|
+
generation = 0.12114
|
|
64
|
+
distribution = 0.16327
|
|
65
|
+
|
|
66
|
+
# Flat riders applied to all usage in every period and season.
|
|
67
|
+
[adders]
|
|
68
|
+
transmission = 0.05122
|
|
69
|
+
transmission_rate_adjustments = -0.01509
|
|
70
|
+
reliability_services = 0.00032
|
|
71
|
+
public_purpose_programs = 0.02644
|
|
72
|
+
nuclear_decommissioning = -0.00013
|
|
73
|
+
competition_transition_charges = -0.00072
|
|
74
|
+
energy_cost_recovery = 0.00001
|
|
75
|
+
wildfire_fund_charge = 0.00595
|
|
76
|
+
new_system_generation = 0.00574
|
|
77
|
+
wildfire_hardening = 0.00494
|
|
78
|
+
recovery_bond_charge = 0.0065
|
|
79
|
+
recovery_bond_credit = -0.0065
|
|
80
|
+
bundled_pcia = -0.02327
|
|
81
|
+
|
|
82
|
+
# Riders a CCA or Direct Access customer does not pay, because PG&E is not
|
|
83
|
+
# supplying their generation.
|
|
84
|
+
[cca]
|
|
85
|
+
drop_components = ["generation", "bundled_pcia"]
|
|
86
|
+
|
|
87
|
+
# Vintaged PCIA a CCA/DA customer pays instead of the bundled PCIA, keyed
|
|
88
|
+
# by the year their generation service began.
|
|
89
|
+
[cca.pcia_vintages]
|
|
90
|
+
2009 = 0.01071
|
|
91
|
+
2010 = 0.01149
|
|
92
|
+
2011 = 0.01161
|
|
93
|
+
2012 = 0.01169
|
|
94
|
+
2013 = 0.01125
|
|
95
|
+
2014 = 0.01119
|
|
96
|
+
2015 = 0.01111
|
|
97
|
+
2016 = 0.0111
|
|
98
|
+
2017 = 0.01073
|
|
99
|
+
2018 = 0.0067
|
|
100
|
+
2019 = 0.00337
|
|
101
|
+
2020 = 0.00324
|
|
102
|
+
2021 = -0.01908
|
|
103
|
+
2022 = -0.01926
|
|
104
|
+
2023 = -0.02202
|
|
105
|
+
2024 = -0.02756
|
|
106
|
+
2025 = -0.02327
|
|
107
|
+
|
|
108
|
+
# Franchise fee surcharge, which a CCA/DA customer pays and a bundled one
|
|
109
|
+
# does not. Published in a separate schedule (E-FFS) and read from it,
|
|
110
|
+
# because carrying it forward would let that schedule be reissued without
|
|
111
|
+
# anything noticing -- it is live rate data on every CCA price.
|
|
112
|
+
[cca.franchise_fee_vintages]
|
|
113
|
+
2009 = 0.00105
|
|
114
|
+
2010 = 0.00105
|
|
115
|
+
2011 = 0.00105
|
|
116
|
+
2012 = 0.00104
|
|
117
|
+
2013 = 0.00105
|
|
118
|
+
2014 = 0.00105
|
|
119
|
+
2015 = 0.00105
|
|
120
|
+
2016 = 0.00105
|
|
121
|
+
2017 = 0.00105
|
|
122
|
+
2018 = 0.00108
|
|
123
|
+
2019 = 0.00111
|
|
124
|
+
2020 = 0.00111
|
|
125
|
+
2021 = 0.00127
|
|
126
|
+
2022 = 0.00127
|
|
127
|
+
2023 = 0.00129
|
|
128
|
+
2024 = 0.00133
|
|
129
|
+
2025 = 0.0013
|
|
130
|
+
|
|
131
|
+
[base_services_charge]
|
|
132
|
+
unit = "USD/day"
|
|
133
|
+
tier_1 = 0.49281
|
|
134
|
+
tier_2 = 0.49281
|
|
135
|
+
tier_3 = 0.49281
|
|
136
|
+
|
|
137
|
+
[discounts]
|
|
138
|
+
care = 0.35
|
|
139
|
+
fera = 0.18
|
|
140
|
+
care_excludes = ["wildfire_fund_charge"]
|
|
141
|
+
|
|
142
|
+
# The sheet's own published totals; the components above sum to these.
|
|
143
|
+
[totals.summer]
|
|
144
|
+
peak = 0.60728
|
|
145
|
+
part_peak = 0.4454
|
|
146
|
+
off_peak = 0.38872
|
|
147
|
+
|
|
148
|
+
[totals.winter]
|
|
149
|
+
peak = 0.37577
|
|
150
|
+
part_peak = 0.35368
|
|
151
|
+
off_peak = 0.33982
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Pacific Gas and Electric Schedule E-ELEC -- retail time-of-use rates.
|
|
2
|
+
#
|
|
3
|
+
# Source: https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf
|
|
4
|
+
#
|
|
5
|
+
# GENERATED by `python -m tools.regen tariff` -- do not hand-edit the rate tables.
|
|
6
|
+
# Regenerate with:
|
|
7
|
+
# python -m tools.regen tariff --provider eelec
|
|
8
|
+
#
|
|
9
|
+
# A tariff book's sheets revise independently, so each carries its own
|
|
10
|
+
# advice letter and effective date. The snapshot is dated from the sheet
|
|
11
|
+
# carrying the unbundled rate table, which is when these values took
|
|
12
|
+
# force -- not the latest date in the book. Sheets read:
|
|
13
|
+
# Sheet 2: Advice 7516-E, effective 2025-03-01
|
|
14
|
+
#
|
|
15
|
+
# The unbundled components below sum exactly to the published totals in
|
|
16
|
+
# [totals]; regeneration refuses to write unless they do, which is what
|
|
17
|
+
# makes a silent mis-parse essentially impossible.
|
|
18
|
+
|
|
19
|
+
schema = 1
|
|
20
|
+
utility = "PGE"
|
|
21
|
+
tariff = "E-ELEC"
|
|
22
|
+
effective = "2025-03-01"
|
|
23
|
+
advice_letter = "7516-E"
|
|
24
|
+
source_url = "https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf"
|
|
25
|
+
currency = "USD/kWh"
|
|
26
|
+
|
|
27
|
+
# Structure the sheet does not publish, carried forward from the previous
|
|
28
|
+
# snapshot. Changing any of it is a deliberate human edit.
|
|
29
|
+
has_baseline = false
|
|
30
|
+
|
|
31
|
+
[seasons]
|
|
32
|
+
summer_start = "06-01"
|
|
33
|
+
summer_end = "09-30"
|
|
34
|
+
|
|
35
|
+
[periods]
|
|
36
|
+
peak = [[16, 21]]
|
|
37
|
+
part_peak = [[15, 16], [21, 24]]
|
|
38
|
+
|
|
39
|
+
# Season- and period-dependent components.
|
|
40
|
+
|
|
41
|
+
[energy.summer.peak]
|
|
42
|
+
generation = 0.31659
|
|
43
|
+
distribution = 0.23953
|
|
44
|
+
|
|
45
|
+
[energy.summer.part_peak]
|
|
46
|
+
generation = 0.21748
|
|
47
|
+
distribution = 0.17676
|
|
48
|
+
|
|
49
|
+
[energy.summer.off_peak]
|
|
50
|
+
generation = 0.17238
|
|
51
|
+
distribution = 0.16518
|
|
52
|
+
|
|
53
|
+
[energy.winter.peak]
|
|
54
|
+
generation = 0.15446
|
|
55
|
+
distribution = 0.17014
|
|
56
|
+
|
|
57
|
+
[energy.winter.part_peak]
|
|
58
|
+
generation = 0.13449
|
|
59
|
+
distribution = 0.16802
|
|
60
|
+
|
|
61
|
+
[energy.winter.off_peak]
|
|
62
|
+
generation = 0.12114
|
|
63
|
+
distribution = 0.16751
|
|
64
|
+
|
|
65
|
+
# Flat riders applied to all usage in every period and season.
|
|
66
|
+
[adders]
|
|
67
|
+
transmission = 0.05122
|
|
68
|
+
transmission_rate_adjustments = -0.01213
|
|
69
|
+
reliability_services = 0.00032
|
|
70
|
+
public_purpose_programs = 0.02644
|
|
71
|
+
nuclear_decommissioning = -0.00024
|
|
72
|
+
competition_transition_charges = -0.00072
|
|
73
|
+
energy_cost_recovery = 0.00001
|
|
74
|
+
wildfire_fund_charge = 0.00595
|
|
75
|
+
new_system_generation = 0.00574
|
|
76
|
+
wildfire_hardening = 0.00474
|
|
77
|
+
recovery_bond_charge = 0.00647
|
|
78
|
+
recovery_bond_credit = -0.00647
|
|
79
|
+
bundled_pcia = -0.02327
|
|
80
|
+
|
|
81
|
+
# Riders a CCA or Direct Access customer does not pay, because PG&E is not
|
|
82
|
+
# supplying their generation.
|
|
83
|
+
[cca]
|
|
84
|
+
drop_components = ["generation", "bundled_pcia"]
|
|
85
|
+
|
|
86
|
+
# Vintaged PCIA a CCA/DA customer pays instead of the bundled PCIA, keyed
|
|
87
|
+
# by the year their generation service began.
|
|
88
|
+
[cca.pcia_vintages]
|
|
89
|
+
2009 = 0.01071
|
|
90
|
+
2010 = 0.01149
|
|
91
|
+
2011 = 0.01161
|
|
92
|
+
2012 = 0.01169
|
|
93
|
+
2013 = 0.01125
|
|
94
|
+
2014 = 0.01119
|
|
95
|
+
2015 = 0.01111
|
|
96
|
+
2016 = 0.0111
|
|
97
|
+
2017 = 0.01073
|
|
98
|
+
2018 = 0.0067
|
|
99
|
+
2019 = 0.00337
|
|
100
|
+
2020 = 0.00324
|
|
101
|
+
2021 = -0.01908
|
|
102
|
+
2022 = -0.01926
|
|
103
|
+
2023 = -0.02202
|
|
104
|
+
2024 = -0.02756
|
|
105
|
+
2025 = -0.02327
|
|
106
|
+
|
|
107
|
+
# Franchise fee surcharge, which a CCA/DA customer pays and a bundled one
|
|
108
|
+
# does not. Published in a separate schedule (E-FFS) and read from it,
|
|
109
|
+
# because carrying it forward would let that schedule be reissued without
|
|
110
|
+
# anything noticing -- it is live rate data on every CCA price.
|
|
111
|
+
[cca.franchise_fee_vintages]
|
|
112
|
+
2009 = 0.00105
|
|
113
|
+
2010 = 0.00105
|
|
114
|
+
2011 = 0.00105
|
|
115
|
+
2012 = 0.00104
|
|
116
|
+
2013 = 0.00105
|
|
117
|
+
2014 = 0.00105
|
|
118
|
+
2015 = 0.00105
|
|
119
|
+
2016 = 0.00105
|
|
120
|
+
2017 = 0.00105
|
|
121
|
+
2018 = 0.00108
|
|
122
|
+
2019 = 0.00111
|
|
123
|
+
2020 = 0.00111
|
|
124
|
+
2021 = 0.00127
|
|
125
|
+
2022 = 0.00127
|
|
126
|
+
2023 = 0.00129
|
|
127
|
+
2024 = 0.00133
|
|
128
|
+
2025 = 0.0013
|
|
129
|
+
|
|
130
|
+
[base_services_charge]
|
|
131
|
+
unit = "USD/day"
|
|
132
|
+
tier_1 = 0.49281
|
|
133
|
+
tier_2 = 0.49281
|
|
134
|
+
tier_3 = 0.49281
|
|
135
|
+
|
|
136
|
+
[discounts]
|
|
137
|
+
care = 0.35
|
|
138
|
+
fera = 0.18
|
|
139
|
+
care_excludes = ["wildfire_fund_charge"]
|
|
140
|
+
|
|
141
|
+
# The sheet's own published totals; the components above sum to these.
|
|
142
|
+
[totals.summer]
|
|
143
|
+
peak = 0.61418
|
|
144
|
+
part_peak = 0.4523
|
|
145
|
+
off_peak = 0.39562
|
|
146
|
+
|
|
147
|
+
[totals.winter]
|
|
148
|
+
peak = 0.38266
|
|
149
|
+
part_peak = 0.36057
|
|
150
|
+
off_peak = 0.34671
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Pacific Gas and Electric Schedule E-ELEC -- retail time-of-use rates.
|
|
2
|
+
#
|
|
3
|
+
# Source: https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf
|
|
4
|
+
#
|
|
5
|
+
# GENERATED by `python -m tools.regen tariff` -- do not hand-edit the rate tables.
|
|
6
|
+
# Regenerate with:
|
|
7
|
+
# python -m tools.regen tariff --provider eelec
|
|
8
|
+
#
|
|
9
|
+
# A tariff book's sheets revise independently, so each carries its own
|
|
10
|
+
# advice letter and effective date. The snapshot is dated from the sheet
|
|
11
|
+
# carrying the unbundled rate table, which is when these values took
|
|
12
|
+
# force -- not the latest date in the book. Sheets read:
|
|
13
|
+
# Sheet 2: Advice 7684-E, effective 2025-09-01
|
|
14
|
+
#
|
|
15
|
+
# The unbundled components below sum exactly to the published totals in
|
|
16
|
+
# [totals]; regeneration refuses to write unless they do, which is what
|
|
17
|
+
# makes a silent mis-parse essentially impossible.
|
|
18
|
+
|
|
19
|
+
schema = 1
|
|
20
|
+
utility = "PGE"
|
|
21
|
+
tariff = "E-ELEC"
|
|
22
|
+
effective = "2025-09-01"
|
|
23
|
+
advice_letter = "7684-E"
|
|
24
|
+
source_url = "https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf"
|
|
25
|
+
currency = "USD/kWh"
|
|
26
|
+
|
|
27
|
+
# Structure the sheet does not publish, carried forward from the previous
|
|
28
|
+
# snapshot. Changing any of it is a deliberate human edit.
|
|
29
|
+
has_baseline = false
|
|
30
|
+
|
|
31
|
+
[seasons]
|
|
32
|
+
summer_start = "06-01"
|
|
33
|
+
summer_end = "09-30"
|
|
34
|
+
|
|
35
|
+
[periods]
|
|
36
|
+
peak = [[16, 21]]
|
|
37
|
+
part_peak = [[15, 16], [21, 24]]
|
|
38
|
+
|
|
39
|
+
# Season- and period-dependent components.
|
|
40
|
+
|
|
41
|
+
[energy.summer.peak]
|
|
42
|
+
generation = 0.31659
|
|
43
|
+
distribution = 0.231
|
|
44
|
+
|
|
45
|
+
[energy.summer.part_peak]
|
|
46
|
+
generation = 0.21748
|
|
47
|
+
distribution = 0.16823
|
|
48
|
+
|
|
49
|
+
[energy.summer.off_peak]
|
|
50
|
+
generation = 0.17238
|
|
51
|
+
distribution = 0.15665
|
|
52
|
+
|
|
53
|
+
[energy.winter.peak]
|
|
54
|
+
generation = 0.15446
|
|
55
|
+
distribution = 0.16162
|
|
56
|
+
|
|
57
|
+
[energy.winter.part_peak]
|
|
58
|
+
generation = 0.13449
|
|
59
|
+
distribution = 0.1595
|
|
60
|
+
|
|
61
|
+
[energy.winter.off_peak]
|
|
62
|
+
generation = 0.12114
|
|
63
|
+
distribution = 0.15899
|
|
64
|
+
|
|
65
|
+
# Flat riders applied to all usage in every period and season.
|
|
66
|
+
[adders]
|
|
67
|
+
transmission = 0.05122
|
|
68
|
+
transmission_rate_adjustments = -0.01213
|
|
69
|
+
reliability_services = 0.00032
|
|
70
|
+
public_purpose_programs = 0.02644
|
|
71
|
+
nuclear_decommissioning = -0.00024
|
|
72
|
+
competition_transition_charges = -0.00072
|
|
73
|
+
energy_cost_recovery = 0.00001
|
|
74
|
+
wildfire_fund_charge = 0.00595
|
|
75
|
+
new_system_generation = 0.00574
|
|
76
|
+
wildfire_hardening = 0.00339
|
|
77
|
+
recovery_bond_charge = 0.00778
|
|
78
|
+
recovery_bond_credit = -0.00778
|
|
79
|
+
bundled_pcia = -0.02327
|
|
80
|
+
|
|
81
|
+
# Riders a CCA or Direct Access customer does not pay, because PG&E is not
|
|
82
|
+
# supplying their generation.
|
|
83
|
+
[cca]
|
|
84
|
+
drop_components = ["generation", "bundled_pcia"]
|
|
85
|
+
|
|
86
|
+
# Vintaged PCIA a CCA/DA customer pays instead of the bundled PCIA, keyed
|
|
87
|
+
# by the year their generation service began.
|
|
88
|
+
[cca.pcia_vintages]
|
|
89
|
+
2009 = 0.01071
|
|
90
|
+
2010 = 0.01149
|
|
91
|
+
2011 = 0.01161
|
|
92
|
+
2012 = 0.01169
|
|
93
|
+
2013 = 0.01125
|
|
94
|
+
2014 = 0.01119
|
|
95
|
+
2015 = 0.01111
|
|
96
|
+
2016 = 0.0111
|
|
97
|
+
2017 = 0.01073
|
|
98
|
+
2018 = 0.0067
|
|
99
|
+
2019 = 0.00337
|
|
100
|
+
2020 = 0.00324
|
|
101
|
+
2021 = -0.01908
|
|
102
|
+
2022 = -0.01926
|
|
103
|
+
2023 = -0.02202
|
|
104
|
+
2024 = -0.02756
|
|
105
|
+
2025 = -0.02327
|
|
106
|
+
|
|
107
|
+
# Franchise fee surcharge, which a CCA/DA customer pays and a bundled one
|
|
108
|
+
# does not. Published in a separate schedule (E-FFS) and read from it,
|
|
109
|
+
# because carrying it forward would let that schedule be reissued without
|
|
110
|
+
# anything noticing -- it is live rate data on every CCA price.
|
|
111
|
+
[cca.franchise_fee_vintages]
|
|
112
|
+
2009 = 0.00105
|
|
113
|
+
2010 = 0.00105
|
|
114
|
+
2011 = 0.00105
|
|
115
|
+
2012 = 0.00104
|
|
116
|
+
2013 = 0.00105
|
|
117
|
+
2014 = 0.00105
|
|
118
|
+
2015 = 0.00105
|
|
119
|
+
2016 = 0.00105
|
|
120
|
+
2017 = 0.00105
|
|
121
|
+
2018 = 0.00108
|
|
122
|
+
2019 = 0.00111
|
|
123
|
+
2020 = 0.00111
|
|
124
|
+
2021 = 0.00127
|
|
125
|
+
2022 = 0.00127
|
|
126
|
+
2023 = 0.00129
|
|
127
|
+
2024 = 0.00133
|
|
128
|
+
2025 = 0.0013
|
|
129
|
+
|
|
130
|
+
[base_services_charge]
|
|
131
|
+
unit = "USD/day"
|
|
132
|
+
tier_1 = 0.49281
|
|
133
|
+
tier_2 = 0.49281
|
|
134
|
+
tier_3 = 0.49281
|
|
135
|
+
|
|
136
|
+
[discounts]
|
|
137
|
+
care = 0.35
|
|
138
|
+
fera = 0.18
|
|
139
|
+
care_excludes = ["wildfire_fund_charge"]
|
|
140
|
+
|
|
141
|
+
# The sheet's own published totals; the components above sum to these.
|
|
142
|
+
[totals.summer]
|
|
143
|
+
peak = 0.6043
|
|
144
|
+
part_peak = 0.44242
|
|
145
|
+
off_peak = 0.38574
|
|
146
|
+
|
|
147
|
+
[totals.winter]
|
|
148
|
+
peak = 0.37279
|
|
149
|
+
part_peak = 0.3507
|
|
150
|
+
off_peak = 0.33684
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# Pacific Gas and Electric Schedule E-ELEC -- retail time-of-use rates.
|
|
2
|
+
#
|
|
3
|
+
# Source: https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf
|
|
4
|
+
#
|
|
5
|
+
# GENERATED by `python -m tools.regen tariff` -- do not hand-edit the rate tables.
|
|
6
|
+
# Regenerate with:
|
|
7
|
+
# python -m tools.regen tariff --provider eelec
|
|
8
|
+
#
|
|
9
|
+
# A tariff book's sheets revise independently, so each carries its own
|
|
10
|
+
# advice letter and effective date. The snapshot is dated from the sheet
|
|
11
|
+
# carrying the unbundled rate table, which is when these values took
|
|
12
|
+
# force -- not the latest date in the book. Sheets read:
|
|
13
|
+
# Sheet 2: Advice 7797-E, effective 2026-01-01
|
|
14
|
+
# Sheet 4: Advice 7797-E, effective 2026-01-01
|
|
15
|
+
#
|
|
16
|
+
# The unbundled components below sum exactly to the published totals in
|
|
17
|
+
# [totals]; regeneration refuses to write unless they do, which is what
|
|
18
|
+
# makes a silent mis-parse essentially impossible.
|
|
19
|
+
|
|
20
|
+
schema = 1
|
|
21
|
+
utility = "PGE"
|
|
22
|
+
tariff = "E-ELEC"
|
|
23
|
+
effective = "2026-01-01"
|
|
24
|
+
advice_letter = "7797-E"
|
|
25
|
+
source_url = "https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_E-ELEC.pdf"
|
|
26
|
+
currency = "USD/kWh"
|
|
27
|
+
|
|
28
|
+
# Structure the sheet does not publish, carried forward from the previous
|
|
29
|
+
# snapshot. Changing any of it is a deliberate human edit.
|
|
30
|
+
has_baseline = false
|
|
31
|
+
|
|
32
|
+
[seasons]
|
|
33
|
+
summer_start = "06-01"
|
|
34
|
+
summer_end = "09-30"
|
|
35
|
+
|
|
36
|
+
[periods]
|
|
37
|
+
peak = [[16, 21]]
|
|
38
|
+
part_peak = [[15, 16], [21, 24]]
|
|
39
|
+
|
|
40
|
+
# Season- and period-dependent components.
|
|
41
|
+
|
|
42
|
+
[energy.summer.peak]
|
|
43
|
+
generation = 0.26299
|
|
44
|
+
distribution = 0.23076
|
|
45
|
+
|
|
46
|
+
[energy.summer.part_peak]
|
|
47
|
+
generation = 0.16388
|
|
48
|
+
distribution = 0.16799
|
|
49
|
+
|
|
50
|
+
[energy.summer.off_peak]
|
|
51
|
+
generation = 0.11878
|
|
52
|
+
distribution = 0.15641
|
|
53
|
+
|
|
54
|
+
[energy.winter.peak]
|
|
55
|
+
generation = 0.10086
|
|
56
|
+
distribution = 0.16137
|
|
57
|
+
|
|
58
|
+
[energy.winter.part_peak]
|
|
59
|
+
generation = 0.08089
|
|
60
|
+
distribution = 0.15925
|
|
61
|
+
|
|
62
|
+
[energy.winter.off_peak]
|
|
63
|
+
generation = 0.06754
|
|
64
|
+
distribution = 0.15874
|
|
65
|
+
|
|
66
|
+
# Flat riders applied to all usage in every period and season.
|
|
67
|
+
[adders]
|
|
68
|
+
transmission = 0.04638
|
|
69
|
+
transmission_rate_adjustments = 0.00315
|
|
70
|
+
reliability_services = 0.00013
|
|
71
|
+
public_purpose_programs = 0.02829
|
|
72
|
+
nuclear_decommissioning = -0.00002
|
|
73
|
+
competition_transition_charges = 0.00027
|
|
74
|
+
energy_cost_recovery = 0.00002
|
|
75
|
+
wildfire_fund_charge = 0.00591
|
|
76
|
+
new_system_generation = 0.00792
|
|
77
|
+
wildfire_hardening = 0.00339
|
|
78
|
+
recovery_bond_charge = 0.00778
|
|
79
|
+
recovery_bond_credit = -0.00778
|
|
80
|
+
bundled_pcia = -0.01011
|
|
81
|
+
|
|
82
|
+
# Riders a CCA or Direct Access customer does not pay, because PG&E is not
|
|
83
|
+
# supplying their generation.
|
|
84
|
+
[cca]
|
|
85
|
+
drop_components = ["generation", "bundled_pcia"]
|
|
86
|
+
|
|
87
|
+
# Vintaged PCIA a CCA/DA customer pays instead of the bundled PCIA, keyed
|
|
88
|
+
# by the year their generation service began.
|
|
89
|
+
[cca.pcia_vintages]
|
|
90
|
+
2009 = 0.02973
|
|
91
|
+
2010 = 0.03366
|
|
92
|
+
2011 = 0.03492
|
|
93
|
+
2012 = 0.03676
|
|
94
|
+
2013 = 0.03708
|
|
95
|
+
2014 = 0.03686
|
|
96
|
+
2015 = 0.0368
|
|
97
|
+
2016 = 0.03687
|
|
98
|
+
2017 = 0.03661
|
|
99
|
+
2018 = 0.03679
|
|
100
|
+
2019 = 0.03725
|
|
101
|
+
2020 = 0.03632
|
|
102
|
+
2021 = 0.05264
|
|
103
|
+
2022 = 0.05272
|
|
104
|
+
2023 = 0.0538
|
|
105
|
+
2024 = 0.05066
|
|
106
|
+
2025 = -0.01011
|
|
107
|
+
2026 = -0.01011
|
|
108
|
+
|
|
109
|
+
# Franchise fee surcharge, which a CCA/DA customer pays and a bundled one
|
|
110
|
+
# does not. Published in a separate schedule (E-FFS) and read from it,
|
|
111
|
+
# because carrying it forward would let that schedule be reissued without
|
|
112
|
+
# anything noticing -- it is live rate data on every CCA price.
|
|
113
|
+
[cca.franchise_fee_vintages]
|
|
114
|
+
2009 = 0.00064
|
|
115
|
+
2010 = 0.00061
|
|
116
|
+
2011 = 0.0006
|
|
117
|
+
2012 = 0.00059
|
|
118
|
+
2013 = 0.00059
|
|
119
|
+
2014 = 0.00059
|
|
120
|
+
2015 = 0.00059
|
|
121
|
+
2016 = 0.00059
|
|
122
|
+
2017 = 0.00059
|
|
123
|
+
2018 = 0.00059
|
|
124
|
+
2019 = 0.00059
|
|
125
|
+
2020 = 0.00059
|
|
126
|
+
2021 = 0.00048
|
|
127
|
+
2022 = 0.00048
|
|
128
|
+
2023 = 0.00047
|
|
129
|
+
2024 = 0.00049
|
|
130
|
+
2025 = 0.00093
|
|
131
|
+
2026 = 0.00093
|
|
132
|
+
|
|
133
|
+
[base_services_charge]
|
|
134
|
+
unit = "USD/day"
|
|
135
|
+
tier_1 = 0.49281
|
|
136
|
+
tier_2 = 0.49281
|
|
137
|
+
tier_3 = 0.49281
|
|
138
|
+
|
|
139
|
+
[discounts]
|
|
140
|
+
care = 0.35
|
|
141
|
+
fera = 0.18
|
|
142
|
+
care_excludes = ["wildfire_fund_charge"]
|
|
143
|
+
|
|
144
|
+
# The sheet's own published totals; the components above sum to these.
|
|
145
|
+
[totals.summer]
|
|
146
|
+
peak = 0.57908
|
|
147
|
+
part_peak = 0.4172
|
|
148
|
+
off_peak = 0.36052
|
|
149
|
+
|
|
150
|
+
[totals.winter]
|
|
151
|
+
peak = 0.34756
|
|
152
|
+
part_peak = 0.32547
|
|
153
|
+
off_peak = 0.31161
|