Repository navigation
Add the Warm Home Discount in England and Wales - #2504
vahid-ahmadi wants to merge 6 commits into
Conversation
Add warm_home_discount (Household, YEAR) with gov.ofgem.warm_home_discount amount and qualifying_benefits parameters, from winter 2025-26 when the high-cost-to-heat test was removed. The rebate is supplier-funded, so it stays out of household_benefits, household_net_income and gov_spending. Refs #502 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 103 (thresholds in Notes
Moves flagged for review
63 more flags are in the report artifact. Spending by benefit and service
Caseloads
Household income totals
Poverty rates
People in poverty
Inequality
Mean household net income in each side's own deciles
Standard reform costings (change in gov_balance)
Standard reforms: change in each reform's target
Household net income by decileNo household's net income changes in any year. No change in any year: receipts by tax head; government balance, each component counted once; model totals; population. Checks failing on both base and head (1)
Counted-once checkEach of 84 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped. Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
juaristi22
left a comment
There was a problem hiding this comment.
Reviewed c2cca982933e2d9046d184e2110519dac27f6b16.
The £150 amount and dated eligibility lists match the official statements. In particular, the 2026–27 statement omits income-based JSA and Income Support, while the 2025–26 statement includes them. Supplier/account-holder/property/date limitations and Scotland's separate scheme are disclosed as partial coverage.
Two changes are required:
C1 — Include the rebate's effect in HBAI income. Keeping supplier-funded WHD outside government spending does not settle the official poverty-income treatment. DWP's HBAI methodology explicitly includes WHD as miscellaneous income. The head's HBAI variables claim that definition, but the new rebate has no effect on them.
Executed 2026 household: age 35, London, no earnings, owned-outright home, no supplied miscellaneous income; assume a qualifying account with a participating supplier because those fields are unmodeled. UC is calculated at £5,098.80 and WHD at £150. Setting only the WHD amount to zero removes the rebate, while both HBAI BHC and AHC income remain £5,098.80. The missing official-income effect is £150. Please connect the modeled rebate/change to HBAI income and handle WHD already embedded in supplied miscellaneous income to avoid double counting. Government-spending treatment can remain separate; no private population understatement is asserted.
C2 — Add the required Axiom status record. The description lacks the line required for new programs/parameters by docs/engineering/skills/github-prs.md:111–129 and .github/CONTRIBUTING.md:49–56. State the truthful permitted disposition and supporting reference/reason, including axiom: needed where applicable.
Validation: 46 focused tests passed, including real UC/Pension Credit receipt, take-up, geography and one-rebate-per-household cases. The separate HBAI control confirms C1. Review status: COMPLETE; two confirmed critical findings. Hosted CI remained incomplete in the captured check set.
DWP's HBAI methodology classifies the Warm Home Discount as miscellaneous income, so add warm_home_discount to the HBAI before-housing-costs income list (and so to income after housing costs). The FRS-derived miscellaneous_income (odd jobs, allpay2, royalties, chamtern, chamttst) holds no rebate, so nothing is counted twice; its documentation now says it excludes the rebate. household_net_income, household_benefits and gov_spending are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@juaristi22 thanks. Both changes are in 58b3d5b. C1. You're right: the HBAI methodology says "Income from the Warm Home Discount and the Scottish Winter Heating Payment schemes are classified as miscellaneous income in HBAI". On double counting: policyengine-uk-data builds New YAML cases check HBAI income of £1,150 for a Universal Credit recipient in England (fails at c2cca98 with £1,000), and £1,000 in Scotland and for income-based JSA in 2026-27. The paternity pay case in C2. The description now has 🤖 Generated with Claude Code |
juaristi22
left a comment
There was a problem hiding this comment.
Re-reviewed 58b3d5b8bab24cda205d519f4631473d3b2980db.
The original C1 and C2 are resolved. The real UC household now has HBAI BHC/AHC £5,248.80 with WHD £150 and £5,098.80 with only the rebate amount set to zero. The £150 income effect is correct; government spending remains unchanged. The public FRS mapping and the clarified miscellaneous-income exclusion support the input contract. rulespec-uk#476 satisfies the permitted queued status requirements.
C3 — Update the HBAI channel regression for the new rebate. The required Python 2/4 check fails test_trading_loss_properties.py::test_household_income_moves_only_through_its_channels, and Test / Result consequently fails. HBAI_CHANNELS at line 99 omits warm_home_discount; the unchanged-component assertion at line 748 then rejects the pinned Pension Credit family's legitimate WHD change from 0 to 150 between the loss/control simulations.
Please update the allowed income channels for the new qualifying-benefit-to-WHD dependency and retain the channel-sum identity. The correct HBAI inclusion should remain. This is one new stale-regression/required-CI finding, not a new defect in the rebate calculation.
37 focused local checks pass; the exact-head failed-job trace establishes C3. Review status: COMPLETE. One confirmed critical finding remains, so I am keeping changes requested.
The Pension Credit passport family gains the £150 rebate when the loss brings it onto Pension Credit, so the unchanged-component check rejected a legitimate move. The channel-sum identity is kept. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@juaristi22 C3 is fixed in 7f07a83. I also merged origin/main into the branch (5f6c753). The test failed at 58b3d5b and passes now. The whole trading loss file, the WHD YAML tests and the other HBAI income tests (2,671 pytest cases plus 15 YAML cases) pass locally. I checked the other hard-coded HBAI component lists in the test suite and none of them needed WHD. 🤖 Generated with Claude Code |
|
UK hub (Claude session, for Max). @juaristi22, Vahid fixed C3 in @vahid-ahmadi, this is still a draft. Mark it ready when you're done, or say so here and the hub will. On María's approval, the hub lands it through the merge queue before the Budget. |
|
UK hub (Claude session, for Max): independent review (GPT-6.1 Sol) at [P2] The rebate continues past the scheme's end.
Nonblocking:
@vahid-ahmadi, can you take the P2? It's small. After that and María's re-review, the hub lands this before the Budget. |
The page reached main through #2386 and its changelog line shipped in 2.143.0, so this drops the released .added fragment and corrects main's copy: - Scheme years run 1 April to 31 March (SI 2026/389 reg 3(1)); only the rebates are paid in winter. - Scottish core group per Schedule 1 to SI 2026/488 (adds IS and JSA(IB) routes, the UC not-in-work condition, ESA limited capability; ESA has no plain disability premium); GOV.UK's summary is narrower. - The rebate was £120/£130/£135 then £140 under SI 2011/1033 reg 2. - The high-cost-to-heat test sat in the eligibility statements, and the 2025-26 list also included income-based JSA and Income Support. - Most rebates are automatic; the rest need a helpline call by 26 February 2027. - esa_income is reported receipt, so take-up doesn't carry through. - 6.1 million households is the impact assessment's figure; Ofgem's figures are on its reports-and-data page. - Note draft #2504 implements Phase 1 (not on main). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SI 2026/389 reg 4(2)(b) ends the scheme period on 31 March 2031, after scheme year 20, so the qualifying benefit list is empty from 2031-32. Boundary tests: a UC recipient in London gets 150 in 2030 and 0 in 2031. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@MaxGhenis the P2 is fixed in 20b0384. SI 2026/389 reg 4(2)(b) gives the scheme period as ending on 31 March 2031, and para 10.5 of the explanatory memorandum says an extension needs new regulations. So I merged main in first (fa9cc6d). On the merged tree all 4,360 YAML policy tests pass, as do the trading loss, parameter, build metadata and aggregate impact partition tests (12 and 103 passed, 1 skipped). On the nonblocking points, the PR body's "Not modelled" section now lists the missing WHD take-up and qualifying-date check, and compares the £1.06bn/£1.07bn HBAI effect with the impact assessment's £806m. Adding a WHD take-up rate would change the aggregate, so I have left that for Vahid. @juaristi22 C3 was fixed in 7f07a83, and this adds the scheme end. Could you re-review at 20b0384? It stays in draft. 🤖 Generated with Claude Code |
|
UK hub (Claude session, for Max): the Aggregate impact report ran at this head (re-run of 39981806002): pass, 0 checks broken. With that, the hub's independent review (GPT-6.1 Sol, round 2 at The report matches what the change should do:
@juaristi22, the hub has asked for your re-review, since your changes request is what's left. With your approval, the hub marks this ready and lands it. |
juaristi22
left a comment
There was a problem hiding this comment.
Re-reviewed and approved 20b038415e5b00bc2b58a52dd7b04a82e49cab3c.
C3 is resolved: warm_home_discount is now an allowed HBAI channel, and the exact formerly failing trading-loss property, including the pinned Pension Credit family, passes while retaining the channel-sum identity. The earlier HBAI income correction and queued Axiom record remain resolved.
The added scheme endpoint is also correct: SI 2026/389 regulation 4 ends the scheme period on 31 March 2031. The final 2030–31 award is retained and the model returns zero from 2031–32. The real-UC household still gains £150 in HBAI income without changing government spending.
Validation: 29 focused checks passed, covering the failed regression, final scheme year/end date and actual UC/HBAI path. Nine source/build/queue records validate. Current required CI passes. Review status: COMPLETE; no open critical findings or material evidence gaps.
Fixes #502
Summary
This PR adds the Warm Home Discount (WHD) in England and Wales as
warm_home_discount(Household, YEAR). It implements phase 1 of the plan in #1735. Once this merges, that page can become a program page.Under the Warm Home Discount (England and Wales) Regulations 2026 (SI 2026/389), a scheme electricity supplier gives each core group customer a £150 "prescribed rebate" (reg. 3). The Secretary of State sets the eligibility criteria in an eligibility statement for each scheme year (reg. 10).
Both statements drop the high-cost-to-heat test from scheme year 15 (2025-26). The 2026-27 list matches #1735; income-based JSA and Income Support left the list in 2026-27.
Changes
gov.ofgem.warm_home_discount.amount: £150 (SI 2022/772 and SI 2026/389, reg. 3).gov.ofgem.warm_home_discount.qualifying_benefits: a list of benefit variables by scheme year. Before 2025-26 the list is empty, because the low-income group also had to pass the high-cost-to-heat test, which the model doesn't encode. From 2031-32 the list is empty: SI 2026/389 reg. 4(2)(b) ends the scheme period on 31 March 2031, after scheme year 20 (2030-31), and the explanatory memorandum (para. 10.5) says an extension needs further regulations.warm_home_discount: the amount if the household is in England or Wales and any benefit unit receives a positive amount of a qualifying benefit. Receipt comes from the modelled benefits, so their take-up carries through. The rebate is paid without a claim, so there is no separate take-up flag.programs.yamlentry with statuspartialand coverage England and Wales.Net income and fiscal treatment
HBAI income includes the rebate. DWP's HBAI methodology says "Income from the Warm Home Discount and the Scottish Winter Heating Payment schemes are classified as miscellaneous income in HBAI", so
warm_home_discountis inHBAI_HOUSEHOLD_NET_INCOME_ADDS, and so in HBAI income before and after housing costs and the poverty measures built on them. HBAI income rises by £150 for each qualifying household in England and Wales from 2025-26. Nothing is counted twice: the FRS-derivedmiscellaneous_incomein policyengine-uk-data (odd-job income plusallpay2,royyr2-royyr4,chamternandchamttst) holds no rebate, and its documentation now says it excludes the Warm Home Discount.Suppliers fund the WHD through their customers' bills, so it is not government spending. In the repo, every energy support variable in
household_benefits(energy_bills_rebate,epg_subsidy,cost_of_living_support_payment) is government-funded and also appears ingov_spending. No existing variable follows a supplier-funded convention. This PR therefore leaveswarm_home_discountout ofhousehold_benefits,household_net_incomeandgov_spending. Adding it to household net income without adding it to government spending is a separate decision for maintainers.A taxpayer-funded top-up, such as a contrib parameter that adds to the rebate and counts as spending, can build on this variable in a later PR.
Not modelled
enhanced_frs_2024_25.h5(uk-data 1.58.1), shows HBAI income up £1.06bn and £1.07bn. The 2026 impact assessment estimates £806m of England and Wales core group rebates in 2026-27, with about 85% of Pension Credit recipients and 70% of other qualifying benefit recipients receiving one. Add Warm Home Discount receipt rates by group #2616 (stacked on this PR) adds those receipt rates, which brings the 2026-27 total to £0.727bn.Test evidence
policyengine_uk/tests/policy/baseline/gov/ofgem/warm_home_discount.yaml: 17 cases pass. They cover each 2026-27 qualifying benefit, income-based JSA and Income Support qualifying in 2025-26 but not 2026-27, no qualifying benefit, Scotland, Northern Ireland, 2024-25, and the end of the scheme: a Universal Credit recipient in London gets £150 in 2030 and £0 in 2031 (the 2031 case fails at 7f07a83 with £150). Three cases check HBAI income before and after housing costs: £1,150 for a Universal Credit recipient in England (the first fails at c2cca98 with £1,000), and £1,000 in Scotland and for income-based JSA in 2026-27.uc_statutory_pay.yaml: the paternity pay case now expects HBAI income of £5,428.80, the £150 rebate abovehousehold_net_income.Found during an internal Budget-day rehearsal.
axiom: TheAxiomFoundation/rulespec-uk#476 queued
🤖 Generated with Claude Code