Repository navigation
Open
Description
Context
Ofgem announces the January–March 2027 cap by 25 November 2026 (checklist: PolicyEngine/uk-energy-price-cap-jan-2027#10). 2.174.1 already carries what the event needs for current law:
- the retail energy price indices (Project household energy spending with retail energy price indices, not CPI #2727, from 2.168.1);
- the Household Energy Payment, and the electricity zero rate to 30 June 2027 (2.170.0);
- the Warm Home Discount (Add the Warm Home Discount in England and Wales #2504 and Add Warm Home Discount receipt rates by group #2616).
Already open
- Let electricity and gas prices grow at their own rates #2883 (draft): electricity and gas prices grow at their own rates (
energy_prices.fuel_growth), for Separate electricity and gas price growth: one utilities rate moves both fuels, and 2027Q1 is the OBR path uk-energy-price-cap-jan-2027#2. - Add a VAT rate for domestic gas #2884 (draft): a VAT rate for domestic gas, for Add a VAT rate for domestic gas: gas reads the shared reduced rate uk-energy-price-cap-jan-2027#6.
- Correct the prepayment meter input's description #2882 (draft): the prepayment meter input's description, part of Northern Ireland moved by the GB cap index and carrying council tax bands; no Cold Weather Payment; stale prepayment docstring uk-energy-price-cap-jan-2027#8.
- Energy spending projection: add an energy-specific price index and a Microcosm release that writes energy_price_basis #2526: the energy-specific projection index. Its two remaining items are done: the index itself (Project household energy spending with retail energy price indices, not CPI #2727), and Microcosm releases that declare
energy_price_basis(Lock policyengine-uk 2.151.0 and write the UK inputs it reads (#1095, #1278) microcosm#1383). - Cold Weather Payment #435: Cold Weather Payment.
1. kWh, a mains gas flag, and standing charge and unit rate parameters
Tariff reforms need consumption in kWh and the two charges by fuel (PolicyEngine/uk-energy-price-cap-jan-2027#4). Examples are removing standing charges, moving cost between standing charges and unit rates, or a social tariff.
- Annual kWh inputs.
electricity_consumption_kwhandgas_consumption_kwh(variables/input/consumption/) are monthly inputs, default -1, which no dataset fills. Microcosm prices annual kWh to spending in its build. Annual inputs, or a documented split of an annual value into months, would let a dataset supply them. - A mains gas flag.
has_mains_gaswould be a household input defaulting togas_consumption > 0. - Tariff parameters. Standing charges (pence a day) and unit rates (pence per kWh), by fuel, payment method and region, with a bill split: spending = standing charge × days + unit rate × kWh.
- Chronicle's
ofgem-energy-price-cap-levels-2024-2026holds the cap's nil and benchmark levels by region and payment method. - From those, the standing charge = nil level / 365, and the unit rate = (benchmark level − nil level) / benchmark consumption.
- Chronicle's
2. The cap parameter on one consumption basis
gov.ofgem.energy_price_cap mixes typical-consumption bases around July 2026. #2098 documented the break in comments but kept both bases (PolicyEngine/uk-energy-price-cap-jan-2027#3).
Either option would put it on one basis:
- restate the series on one typical-consumption basis;
- add a
typical_consumptionsibling, and haveepg_subsidy(variables/gov/treasury/price_cap_subsidy/epg_subsidy.py) use a ratio on the same basis.
3. Northern Ireland
- Energy projection.
uprate_energy(data/economic_assumptions.py) moves every household's energy spending by the Great Britain indices. Northern Ireland's tariffs sit outside Ofgem's cap. The options are a Northern Ireland index, or a documented choice to keep Northern Ireland on the OBR path. - An unbanded council tax member. Northern Ireland has domestic rates, not council tax.
CouncilTaxBand(variables/input/council_tax_band.py) has no unbanded member, so datasets give Northern Ireland households a placeholder band. An unbanded member would keep them out of band-based results. - Cold Weather Payment: Cold Weather Payment #435.
- An unused parameter. No variable reads
gov.contrib.policyengine.economy.energy_bills(parameters/gov/contrib/policyengine/economy/energy_bills.yaml). Either wire it up or remove it.
Relationship to data work
None of Microcosm's data work for this event is decided. If any goes ahead:
- A kWh export. Microcosm already computes kWh in its build. Exporting them would need item 1's annual inputs, or the monthly split, first. Until then, the event repository can recover kWh from spending.
- A payment-method draw beyond prepayment would need a payment-method input here, and new published facts (requested in UK facts for four November events: young people and work, the PIP review, the January 2027 price cap and the Scottish Budget 2027-28 chronicle#420).
- Northern Ireland's placeholder council tax band goes away only once item 3's unbanded member exists for a dataset to write.
- No data work needed:
has_mains_gas(item 1) defaults from spending, and the tariff parameters and item 2 involve no data. - Gas spending at the ONS level is data work that needs nothing from this issue.
Not in this issue
- Payment methods beyond prepayment: data, needing Chronicle and Microcosm first.
- Which income measure carries the Warm Home Discount (Warm Home Discount counts in hbai_household_net_income but not household_net_income: choose the income measure uk-energy-price-cap-jan-2027#5): a choice for the event repository.
Metadata
Metadata
Assignees
Labels
No labels
Activity
vahid-ahmadi commentedon Nov 6, 2026
Thanks, María. This is a clear map of the gaps. I checked it against main at
a866277(2.175.8).Checks
domestic_electricity_rate/great_britain.yamlholds 0% from 1 October 2026 and 5% from 1 July 2027.policyengine6.15.0 on PyPI pinspolicyengine-uk==2.151.0, somanaged_microsimulation()cannot see any of this yet. This is Certify a Microcosm build for policyengine-uk 2.175+ and bump the policyengine.py pin before 20 November uk-energy-price-cap-jan-2027#1. Until a certified Microcosm build and a pin bump land, any pe-uk change below will not reach the event's managed runs.has_mains_gas: an input cannot default to an expression, so it would be a formula variable with an override.gas_consumptionis spending on all gas, and COICOP 04.5.2 includes bottled gas. We need to check that LPG homes do not read as on the mains before we use> 0.domestic_energy_vatcan apply the rate without counting it twice.epg_subsidy.pydoes not read the cap.monthly_epg_consumption_level.pytakesprice_guarantee / price_cap, and only whileenergy_price_guarantee_in_effectis true (1 October 2022 to 31 March 2024). So no current-law output crosses the July 2026 break. It matters only for a reform that brings back a price guarantee.uprate_energyuses ONS CPI D7DT and D7DU and the OBR utilities path. These are UK series, not Great Britain ones, so Northern Ireland already moves on a UK index that includes it at its weight. The open question is whether Northern Ireland's tariffs track that index.simulated_council_taxalready returns 0 for Northern Ireland, and the Household Energy Payment is England-only. Today the placeholder band reaches no amount; an unbanded member protects future band-keyed payments. Add it at the end of the enum (see Integer arrays passed to enum inputs are read as 0-based positions with no range check #2602).gov.contrib.policyengine.economy, onlygdp_per_capitahas a reader (household_market_income.py).rent.yamlandtransport.yamlare unread too, so we can settle all three together.Overlap
.fixed.mdfragment makes it a fix PR, andReproducer: n/ais refused because it touches model source. It only changes a description, so I will retype the fragment as.changed.md.CouncilTaxBand. One enum change should cover both.cap.py, and leaves Northern Ireland out of the cap shock. So none of these items blocks the event's own figures.Plan
has_mains_gasgov.contribwithin_effect, current law unchangedtypical_consumptionsibling, only if a price-guarantee lever is plannedeconomyparametersCold Weather Payment stays with #435 unless a change is announced.
Please say if you disagree with this order.