Repository navigation
Conversation
Add gov.dwp.ESA.income.awards_payable, a 1/0 flag per jurisdiction with fiscal_year_blend, so income-related ESA awards end on 1 July 2026 in Great Britain and 1 October 2026 in Northern Ireland. esa_income pays each award for esa_income_payable_share of the year, and esa_income_report_closed ends the report once none of the year is payable. esa_income_appointee_saving keeps an award saved under art. 3A(2). own_report_is_paid reads the same closure as the award. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… a UC claim Hand-worked YAML cases for 2025-26, 2026-27 (86/365 in Great Britain, 178/365 in Northern Ireland) and 2027-28, the appointee saving, a saved award with a Universal Credit claim, contributory-only and mixed awards, a family the legacy closure already moved and a non-dependent adult's own award. forgoes_universal_credit_for_tax_free_childcare counts an ESA report as a legacy award a claim would end only while some of the year is payable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Thirteen YAML cases in 2026-27 and 2027-28 test capital, work, passports, Housing Benefit regulations and the Pension Credit disregard on an income-related ESA award. The abolition now ends or shortens those awards, so each reporter gets esa_income_appointee_saving (SI 2025/1148 art. 3A(2)), which keeps the award payable all year; expected values are unchanged. The UC-claim property test saves every award, so 2027 still tests art. 3A(3). Add the abolition property tests. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bolition Python tests that read income-related ESA in 2026-27 or 2027-28 for another rule give their reporters esa_income_appointee_saving (SI 2025/1148 art. 3A(2)): the NLW permitted-work reform, the Merton non-dependant properties and the legacy-closure scope cases. Under disable_simulated_benefits an outside adult's own income-related ESA now ends with the abolition, as income-based JSA ends with its scheme, so that test expects it. The property test runs each population once with three copies (saving as drawn, every award saved, none saved) and checks that a reform keeping the parameter at 1 equals saving every award. Add the changelog fragment and a paragraph on the abolition to docs/engineering/esa-jsa-report-screening.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mber's status Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ordinary parameters take their 30 April value; the flag's fiscal_year_blend day-weights each fiscal year. Drop a sentence about dated reform keys that the current reform routes no longer follow, and say plainly that the appointee saving is off in dataset runs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lose it from 2027-28 - esa_income_abolition_reached: the claimant's or partner's unsaved income-related ESA claim is payable for less than the whole year; it joins legacy_benefits_closed in claims_uc_at_legacy_closure. - legacy_award_is_closed closes an ESA report whose claim has nothing payable, under the Income Support and JSA Pension Credit guard. - esa_income_payable_share is the claim's share: a couple's claim is saved when either member who reports it is saved. - own_report_is_paid lets a stored award, not the abolition closure, decide an outside member's status, so disable_simulated_benefits keeps them on the award it pays; the reform holds the new claim term. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… claim - esa_income_abolition.yaml: share cases opt out of the claim; new cases for the claim (GB, NI, couples, a protected mixed-age couple), the 2027-28 move off legacy benefits, saved claims, a saved partner who reports nothing, and the Pension Credit age guard. - Property tests: an independent reading of each award from the regulations, one share per couple, saving a non-reporter changes nothing, and the claim path never gives income-related ESA. - The UC closure and work-screen references model the claim; families in tests about other rules set would_claim_uc_at_legacy_closure false or the saving. - disable_simulated_benefits keeps an outside adult on the ESA it pays. - own_report_is_paid reads the benefit unit population for the award. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…aid's signature Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… a legacy closure A family that supplies in_specified_or_temporary_accommodation keeps an existing Housing Benefit award when DWP moves it off a closed legacy benefit: SI 2014/1230 reg 46(2) (NI: SR 2016/226 reg 47(2)) keeps such an award at the deadline whichever legacy benefit closed, and SI 2025/1148 art. 7(4)(a) reaches the same cases through reg 6A(2). A Universal Credit claim still ends the award, because the model's Universal Credit pays a housing costs element for these homes. Tests cover the ESA closure and the tax credit closure, each with a control that leaves the status unset, and a family with the status that claims. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… amounts are the formula's own_report_is_paid now applies the abolition's report closure to an outside member's status only when the stored esa_income and the claimant's and partner's part (claimant_or_partner_esa_income) both match the formula on open reports (holds_formula_award). Under disable_simulated_benefits, an entered award or a replacing reform, a held couple part of £5,000 against a formula's £5,200 identifies the outside adult's held £200, so their status no longer depends on whether the claimant's own report happens to give the held total. The new test holds the awards three ways and varies the claimant's 2027-28 report across £5,199, £5,200 and £5,201. Invariant 12 checks that without a reform both amounts match the formula for every generated benefit unit, so the extra comparison changes no baseline result. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e who acts in its documentation esa_income_abolition_reached lists every input it reads: the claimant's and partner's ESA and Pension Credit reports, the household's country, the saving, the Pension Credit age conditions and mixed-age couple status. would_claim_uc_at_legacy_closure says the certified data (1.58.1) carry no draw and that PolicyEngine/policyengine-uk-data#534 plans one. Documentation and comments introduce the Department for Communities by name and give the model, not a share or a year, the paying verbs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gelog Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…in active voice Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Name the benefit cap and the nil claim where the docs say Housing Benefit beside a claim would pay the rent twice, and state that the benefit unit's held award decides an outside member's status. Words only. 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: 44 (thresholds in New warnings
Notes
Moves flagged for review
4 more flags are in the report artifact. Spending by benefit and service
Caseloads
Government balance, each component counted once
Model totals
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 decileMean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.
No change in any year: receipts by tax head; population. Checks failing on both base and head (1)
Counted-once checkEach of 92 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
|
Fixes #2562
What and why
The Secretary of State appointed 1 July 2026 for the remaining old style income-related ESA awards in Great Britain to end under Welfare Reform Act 2012 s.33(1)(b) (SI 2025/1148 art. 3A, inserted by SI 2026/409). The Department for Communities appointed 1 October 2026 in Northern Ireland (SR 2025/176 art. 3A, inserted by SR 2026/115). Under each article, an appointee saving keeps an award in payment, and an award already due to end after a two-week run-on ends on that schedule. DWP had sent migration notices to 879,000 households on income-related ESA by December 2025, and most of them had claimed Universal Credit (LA Welfare Direct 6/2026, paras 51 to 54). At
main(2da212a) the model pays an award in full every year unless the family claims Universal Credit or DWP closes another of its legacy benefits, and nothing in the model prompts a claim on the award's appointed day.This PR:
gov.dwp.ESA.income.awards_payable.{great_britain,northern_ireland}, a 1/0 flag for each jurisdiction withfiscal_year_blend: true, so the model day-weights the date across each fiscal year from 6 April to 5 April;esa_income_appointee_saving(person input, default false) for the art. 3A(2) saving. The saving applies when someone holds an appointment under reg 57 of the Claims and Payments Regulations 2013 immediately before the date, or the Secretary of State determined in the preceding six months that an appointment was likely to be needed. In Northern Ireland, the Department for Communities makes that determination and reg 52 of the 2016 Regulations governs the appointment. The claimant and partner share one award, so when either of them reports the award and has the saving, the model keeps the whole claim payable; it ignores a saving for a member who reports nothing;esa_income_payable_share(person), the share of the year the person's claim stays payable: 1 for a saved claim, otherwise the household's jurisdiction value.esa_incomepays each claim for its share, one share for the couple's claim and one for each member outside it;esa_income_abolition_reached(benefit unit): the claimant or partner reports an unsaved award with less than the whole year payable, from 2026-27.claims_uc_at_legacy_closurenow reads it besidelegacy_benefits_closed, so the family claims Universal Credit when the abolition reaches its award ifwould_claim_uc_at_legacy_closure. The claim ends the income-related ESA award (esa_income_report_closed) and the Housing Benefit award (housing_benefit_eligible), through the rulesmainalready has;legacy_award_is_closedclose an income-related ESA report once none of its claim stays payable, from 2027-28, under the same Pension Credit and pension-age conditions as Income Support and income-based JSA. DWP's move then ends the family's other legacy awards whether or not it claims, apart from the Housing Benefit exception below. The model neither prompts a claim for a saved award nor moves its family;housing_benefit_eligiblekeep an existing Housing Benefit award through the move off legacy benefits, whichever legacy benefit closed, when the user setsin_specified_or_temporary_accommodationfor the family. Such an award doesn't terminate when the migration notice's deadline passes without a claim (SI 2014/1230 reg 46(2); Northern Ireland: SR 2016/226 reg 47(2)), and the 1 July 2026 abolition of Housing Benefit doesn't reach it (SI 2025/1148 art. 7(4)(a), through reg 6A(2)). A Universal Credit claim still ends the award (see below);left_pension_route_at_legacy_closurecount a protected mixed-age couple whose award the abolition reaches, so a couple that claims and has a Universal Credit award stops getting pension-age Housing Benefit beside it;own_report_is_paidapply the abolition's report closure to a member outside the couple only when both held amounts match the formula on open reports:esa_incomeand the claimant's and partner's part of it,claimant_or_partner_esa_income(holds_formula_award). Either amount can differ when a user entersesa_income, a reform replaces it, ordisable_simulated_benefitsholds it;own_report_is_paidthen applies only the person's legacy closure and reads the benefit unit's held award. That award covers the whole unit, so an outside member with an open report stays paid while the unit's award stays positive, even if it leaves them nothing.holds_formula_awardcan't separate two or more outside reporters in one benefit unit when the held total and the couple's part both equal the formula's:own_report_is_paidthen applies each one's report closure;disable_simulated_benefitsholdesa_income_abolition_reachedfalse with the other closures, so the reform prompts no claim.Contributory ESA continues as new style ESA, and
esa_contribkeeps its formula.Which years change
In 2026-27 a family whose award the abolition reaches claims Universal Credit if
would_claim_uc_at_legacy_closure, and the claim ends the award for the year. A family that doesn't claim keeps £5,000 x 86/365 = £1,178.08 of a £5,000 award in Great Britain (£2,438.36 in Northern Ireland) and its Housing Benefit. From 2027-28 every unsaved award has ended, and the model moves each affected family off its legacy benefits. Scotland and Wales follow the Great Britain date.Under art. 3A(1)(b), an award already due to end at the end of a two-week run-on ends on that schedule. A claimant whose migration notice deadline falls on 22 June 2026 and who makes no claim keeps the award until 5 July, the last day of the two weeks beginning with the deadline day (SI 2014/1230 reg 46(1)(a)). The model has no deadline or claim dates, so it pays every unsaved award to 30 June (30 September in Northern Ireland).
Worked household
A single claimant aged 40 in a London council tenancy (rent £5,200 a year, council tax £1,500) reports £5,000 a year of income-related ESA and £4,000 of Housing Benefit, and
would_claim_ucis false. The Housing Benefit means test pays £5,200 from the rent. Onmainevery row below pays £5,000 of ESA and £5,200 of Housing Benefit, and no Universal Credit or Council Tax Reduction.The ESA abolition doesn't end Housing Benefit by itself. The Secretary of State appointed 1 July 2026 for the remaining working-age Housing Benefit awards to end without a Universal Credit claim (SI 2025/1148 art. 7), and the Department for Communities appointed 1 October 2026 in Northern Ireland (SR 2025/176 art. 7), except in specified or temporary accommodation. So under the law this tenant has neither benefit in 2027-28 without a claim, as the model gives. The model doesn't apply art. 7's date: in 2026-27 it pays a family that doesn't claim a full year of Housing Benefit, an approximation that #1910 replaces.
Each cell gives the amount here and, in brackets, the change from
main, in pounds. Council Tax Reduction stays £0 in every row.would_claim_uc_at_legacy_closureWith the flag at its default, true, the model gives the true rows' amounts, and every output matches
mainin 2025-26. Within_specified_or_temporary_accommodation, the tenant who doesn't claim keeps their £5,200 of Housing Benefit in 2027-28, for £3,520.00 of net income. The tenant who claims gets the same £10,518.52 of Universal Credit and no Housing Benefit.Data
The certified data (policyengine-uk-data 1.58.1) supply no draw for
would_claim_uc_at_legacy_closure, so the model uses its default, true. The model therefore has each affected family claim Universal Credit in 2026-27. In an affected family the claimant or partner reports an unsaved income-related ESA award, and the family neither reports Pension Credit nor consists of a single claimant, or joint claimants both, over the qualifying age for State Pension Credit. A family whose only report belongs to a member outside the couple makes no claim through this path. PolicyEngine/policyengine-uk-data#534, a draft pull request, would draw the flag at DWP's Move to Universal Credit claim rates. No dataset identifies appointees or specified or temporary accommodation, so the saving and the Housing Benefit exception stay off in dataset runs.What else changes
mainan income-related ESA report counted as an award the claim would end, so the family kept its claim; now it counts only while some of the year stays payable (forgoes_universal_credit_for_tax_free_childcare). With a £21,993 maximum award and a £20,000 income reduction, Universal Credit would pay £1,993 against £2,400 of Tax-Free Childcare, so the family now forgoes it.in_specified_or_temporary_accommodationnow keeps its Housing Benefit when any legacy closure moves it, the tax credit closure from 2025-26 and the Income Support and income-based JSA closures from 2026-27 included.has_own_esa_award, the support component default, the Universal Credit LCWRA default, the mixed-age Pension Credit saving andclaims_all_entitled_benefitsread the raw report as before. Their documentation now treats the report as the award's history: the work capability assessment behind an ended award still stands, and the report still records the family's claiming.What the model doesn't do
policyengine_uk/variables/gov/dwp/universal_credit/readsin_specified_or_temporary_accommodation, so the model's Universal Credit pays a housing costs element for these homes, subject to the benefit cap, and Housing Benefit beside an uncapped award would pay the rent twice. A claim ends the award even when it brings no Universal Credit, so that family gets no help with this rent, atmainand on this branch. Rent for these homes doesn't count towards the housing costs element (UC Regs 2013 Sch 1 paras 3(h), 3(i), 3A and 3B); Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910 models both rules, and Model Housing Benefit for specified (supported) and temporary accommodation at any age #1911 tracks them.Invariants
The property tests (
policyengine_uk/tests/test_esa_income_abolition_properties.py) check these for generated reported-award situations: working-age families of one to three adults, with or without a child, in five regions, with reports of £0 to £6,000, capital around the tariff threshold and limit, and every combination of saving and claim flags, in 2025-26 to 2027-28.awards_payablevalue equals the share of 6 April to 5 April before the statutory date, counted from the two dates (2015 to 2040).esa_income_payable_share<= 1; the claimant and partner share one value; it equals 1 for every member of a saved claim.esa_incomeoresa.would_claim_uc_at_legacy_closureon never raisesesa_income, and a family that claims when the abolition reaches its award has noclaimant_or_partner_esa_incomethat year.esa_income_abolition_reachedandlegacy_benefits_closedstay false for the family, and a member outside the couple with a saved claim keeps their legacy benefits open.esa_income,claims_universal_creditand each outside member's status match amounts worked in the test from the regulations (the £6,000 tariff threshold, £1 a week for each £250 or part above it and the £16,000 limit; ESA Regs 2008 regs 110 and 118), the dates and the saving, without the model's code. The test's reference gives a couple's claim one share and pays a saved claim in full.esa_income,holds_formula_awardis true for every benefit unit in every mode and year, so the comparison of the claimant's and partner's part changes no baseline result.test_keeping_awards_payable_is_saving_every_awardchecks that a reform keepingawards_payableat 1 gives the same outputs as saving every award.Invariant 12 also follows from the code.
esa_incomeappliesincome_related_esa_award_on_reportsto open reports, so the first comparison matches.claimant_or_partner_awardthen finds thatesa_incomeholds the formula's value and takes the same function on the claimant's and partner's open reports, so the second comparison matches unless it sets that part to zero. It does so only where the part, or the stored total that bounds it, falls within half a penny of zero, and then the formula's part also falls within half a penny of zero.is_on_income_related_esaalready readsclaimant_or_partner_esa_incomefor the claimant and partner, so the new read adds no cycle.Test plan
Each file or test ran alone at
a3f8b1104, with-n 0, no survey data and a 4 GB memory cap (2 GB for mutants); the cap stopped any run that exceeded its time limit. Later commits change only documentation, comments and the changelog.YAML policy tests (
policyengine-core test):esa_income/esa_income_abolition.yaml: 36 passed. Three cases are new: the 2027-28 ESA closure keeps Housing Benefit for a family within_specified_or_temporary_accommodation, the same family without the status loses it, and a family with the status that claims Universal Credit gets none.housing_benefit/housing_benefit_eligible.yaml: 6 passed. Two cases are new: the tax credit closure keeps Housing Benefit with the status and ends it without.Python tests (
pytest):test_esa_income_held_outside_award.py(new): 3 passed, one for each way of holding the award.test_esa_income_abolition_properties.py: the 29 parameter and fixed-case tests passed in one run.test_abolition_invariants, which now checks invariant 12, andtest_awards_match_an_independent_readingdidn't run on the host, where disk stayed below the run floor. CI runs them on this PR.test_uc_legacy_closure_properties.py:test_the_closure_flag_only_decides_closure_claimspassed (357 s) andtest_a_closure_claim_pays_the_universal_credit_of_any_claimpassed (617 s), each at full size with a 3,400 s cap.test_disable_simulated_benefits.pydidn't run on the host, where disk stayed below the run floor. CI runs it on this PR.Fails on
origin/main(2da212a): with the reproducer's inputs (a single claimant aged 40 in London reporting £5,000),mainpays £5,000 of income-related ESA in 2027-28 against £0 here, and £5,000 in 2026-27 against £1,178.08 without a claim.Each mutant ran in a scratch copy against
esa_income_abolition.yamlunless the row names another test. The first row ran ata3f8b1104. The rest ran on the branch's earlier code, up to68ccc0856, and the later commits leave their mutated lines unchanged.holds_formula_awarddrops the claimant's and partner's comparison (test_esa_income_held_outside_award.py)claims_uc_at_legacy_closurelegacy_award_is_closedignores income-related ESAbenunit.sumfor the couple's sharetest_disable_simulated_benefits.py -k no_family_is_moved)Existing tests changed
No expected value in a test on
mainchanges. Two property-test reference calculations now include Universal Credit claims prompted by the ESA abolition. Cases about other rules opt out of that claim.test_uc_legacy_closure_properties.py:expected_closurecloses an unsaved income-related ESA report from 2027-28 under the Pension Credit conditions; a newexpected_reachedgives the abolition's reach from 2026-27; a family claims on either; and a claiming family gets no income-related ESA. The flag property and the closure-claim differential treat a reached family as moved.test_legacy_award_work_properties.pyandlegacy_award_work_reference.py: in 2026-27 the couple's ESA reports close when the abolition reaches them, because the family claims withwould_claim_uc_at_legacy_closureat its default.test_disable_simulated_benefits.py: new assertions that the abolition reaches the claimant's own award from 2026-27 without the reform, and that the reform prompts no claim.Cases about other rules set
would_claim_uc_at_legacy_closurefalse, so the family keeps the award they test:esa_income_remunerative_work.yaml, the two 2026-27 limit cases: they test the permitted-work limit, and a claim would close the report.pension_credit/mixed_age_couples.yaml, "HB alongside income-related ESA is working-age HB, so no saving": it tests the saving inference and the continuing Housing Benefit award, which a claim would end.test_mixed_age_couple_properties.py, every generated family: its reference formulas from before the mixed-age couple rules readwould_claim_ucalone.universal_credit/person_legacy_benefits_closed.yamlCase 1 gives the claimantesa_income_appointee_savinginstead: it tests that an outside member's closed report leaves the couple open, and from 2027-28 the claimant's own unsaved report would close the couple.Thirteen existing YAML cases and four Python files test another rule on an income-related ESA award in 2026-27 or 2027-28, so each ESA reporter there gets
esa_income_appointee_saving: true, which keeps the award payable for the whole year (inputs only):esa_income/esa_income_capital.yaml: "has no tariff income at the lower capital threshold", "tariff income rounds incomplete capital steps up" and "remains eligible at the upper capital limit" (2026);esa_income/esa_income_remunerative_work.yaml: "Issue 2395 outside closed IS report leaves the couple ESA award open" (2027);legacy_award_readers/council_tax_reduction_passports.yaml: the five non-dependant cases (2027);legacy_award_readers/housing_benefit_pension_age_regulations.yaml: the two ESA cases (2026);legacy_award_readers/pension_credit_earnings_disregard.yaml: "Another member's income-related ESA leaves a single pensioner with the £5 earnings disregard" and "The partner's income-related ESA gives the couple the £20 earnings disregard" (2026);test_esa_permitted_work_nlw_reforms.py(2026), the two 2027 Merton non-dependant tests intest_legacy_award_readers_properties.py, the 2027 cases oftest_legacy_closure_scope.py, and every award intest_esa_income_universal_credit_claim_properties.py, whose 2027 cases test the Universal Credit claim under art. 3A(3).Overlap
Bar income-related ESA at pensionable age and on entitlement to Pension Credit #2807 (
fix-2565-esa-pension-credit, head1d6df1a43) merges cleanly. Whichever branch merges second addsesa_income_appointee_saving: trueto the ESA reporters of Cases 4, 5 and 6 (the member who reports), Case 12 (the member outside the couple) and Cases 13 and 14 (both members) ofesa_income_pension_age.yaml, because each asserts a full-year income-related ESA award in 2026-27. The six additions apply cleanly to the merged tree.Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910 (working-age Housing Benefit, head
2d0e49417) adds the same kind of term for Housing Benefit toclaims_uc_at_legacy_closure, and the same flag line to themixed_age_couples.yamlcase. Beyond its existing conflicts withmain(housing_benefit_eligible.pyandhousing_benefit/takeup.yaml), it conflicts with this branch in those two files; a merge ORs both abolition terms and keeps one copy of the flag line. Inhousing_benefit_eligible.py, Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910 adds its own route for specified or temporary accommodation and takes those homes out of the Universal Credit housing costs element, so a merge keeps Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910's route, which covers this branch's exception. SI 2025/1148 art. 7(4)(b) and SR 2025/176 art. 7(4)(b) keep Housing Benefit for an appointee-saved income-related ESA claimant, andhousing_benefit_payable_shareat Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910's head has no input for that saving. Whichever PR lands second makes it readesa_income_appointee_saving, or the merged model ends that Housing Benefit on the appointed day.Add overseas and other real estate as property components, and count UK land once in household land #2688, Fix structural reforms for their requested periods #2670, End the Pension Credit, Child Benefit and CTC qualifying young person status for Income Support in own right #2302, Add the Child Tax Credit qualifying young person period after leaving education #2301 and Place the Universal Credit and Pension Credit qualifying young person terminal date from the date of birth #2300 conflict with this branch only where they already conflict with
main. Count 16-year-olds outside education as UC and Pension Credit qualifying young persons until the 1 September after their 16th birthday #2279, Value means-tested capital less 10% sale expenses and secured debt (UC reg 49 and legacy equivalents) #1969, Apply Housing Benefit and national Council Tax Reduction non-dependant deductions as legislated #2007 and Derive economic assumption index horizon from the growth series #2756 merge cleanly.For policy changes: YAML tests whose expected values come from an external source:
esa_income_abolition.yamlworks each amount by hand from art. 3A's dates and ESA Regs 2008 reg 118, and the Housing Benefit cases from SI 2014/1230 reg 46(2) and the means test with no income.make formatequivalent on the changed Python files:ruff format --check,ruff check,ruff check --select F811,F821 policyengine_uk,git diff --check(ruff 0.17.2).Changelog fragment
changelog.d/2562.fixed.md.Reproducer
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/esa_income/esa_income_abolition.yaml::Great Britain 2027-28 pays no income-related ESA
axiom: TheAxiomFoundation/rulespec-uk#518 queued
🤖 Generated with Claude Code