Repository navigation
Conversation
SI 2025/1148 art 7, inserted by SI 2026/409, brings WRA 2012 s.33(1)(d) into force on 1 July 2026 for every Housing Benefit award not already terminated. It saves claimants within SI 2014/1230 reg 6A(2)-(5) (specified or temporary accommodation, pension age, protected mixed-age couples), income-related ESA appointee cases and prisoners until release. Northern Ireland: SR 2025/176 art 7, inserted by SR 2026/115, from 1 October 2026. gov.dwp.housing_benefit.working_age_awards_payable holds 1/0 per jurisdiction (great_britain, northern_ireland). PE-UK samples gov.* parameters at 30 April of each fiscal year, which would have left all of 2026-27 unaffected, so the parameter is day-weighted with fiscal_year_blend: 2026 takes 86/365 in GB and 178/365 in NI, and 0 from 2027. housing_benefit_payable_share is 1 for any benefit unit with a member over State Pension age and the country share otherwise; the continuing-award route needs it above 0 and the pre-cap award is scaled by it. Also make housing_benefit_eligible.yaml's boolean checks non-vacuous (margin 0, would_claim_uc false), and update the docs, programs.yaml and the take-up description. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ction A mutation check showed the mixed-population differential missed two breakages (no proration; NI given the GB date), because random populations rarely hold a working-age continuing award in 2026. The new property test builds only those families, for 2025-2027 in GB and NI, and fails on both mutations. Also drop dataset-specific take-up shares from the docs page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review follow-up: specified and temporary accommodation HB is not modelled, so programs.yaml lists Housing Benefit as partial. Comment that Great Britain's date applies to an unknown country, and use Stat-Xplore's own "Employment and Support Allowance" label in the docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Overlap with #1940: it replaces the pension-age new-claim test in |
Para 17(1) and 9(1) add £17.10 where net earnings "equal or exceed" the other disregards, the childcare charges and £17.10. Net earnings are float32, so exactly £1,149.20 (£5 + £17.10 a week) was held as £1,149.19995 and failed the test. The comparison is now in pence, and new cases pin £1,149.20 (single, 30 hours) and £2,189.20 (lone parent, 16 hours) as granted and a penny below each as not. The end-to-end pension-age cases are aged 72 and set the applicable amount (£256 x 52) as an input. SI 2006/214 Sch 3 para 1(1) gives £256 only to a claimant who reached pensionable age before 1 April 2021, and £238 to one who reached it later; #1913 models that split. The working-age case asserts housing_benefit_entitlement, which #1910's 2026 abolition scaling does not change. The disabled-worker case is labelled as a model limitation: the disability premium also brings in Sch 4 para 3's £20 in place of £5, which is not modelled. A new case pins the is_adult proxy counting an 18-year-old young person's earnings and hours (the law excludes them) until #1896 replaces it. The net earnings documentation names the provisions that set the tax deducted (213 regs 36(3) and 39(1); 214 regs 36(2) and 40(1)), calls the proportional attribution a lower bound for employees, and says what the proxy counts. The changelog fragment is a bullet. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Reviewed: request changes (sequencing only; the law is right). The dates and savings are correct. GB is 1 July 2026 under SI 2025/1148 art 7, inserted by SI 2026/409, and NI is 1 October 2026 under SR 2025/176 art 7, inserted by SR 2026/115. Specified or temporary accommodation, pension age, protected mixed-age couples, ESA(IR) appointees and prisoners are saved. The 86/365 and 178/365 day counts are right.
Verified: I read SI 2025/1148 art 7 (revised), SI 2026/409, SR 2026/115 (sealed 17 June 2026), TP Regs reg 6A and DWP circular A6/2026 (in force 1 July 2026). In a fresh environment the abolition and eligibility YAML passed 16/16 and the two property files passed 38/38. CI: all 7 checks pass, including the docs build. |
Codex review — changes requiredReviewed commit code-1 — [P1] Preserve working-age awards covered by the abolition exceptions
Executed2027 case: age40, reported HB £5,200, would_claim_uc false, council rent £5,200 and assessable HB income held at zero. The model calculates HB entitlement £5,200, payable share0, HB £0 and UC £0. Protection status cannot be supplied at this head, so an otherwise identical protected continuing award necessarily gets the same exclusion. This is a confirmed missing condition with an executed downstream path; it is not a claim that the diagnostic encoded a protection variable that does not exist. Add a supported protection input/path, or coordinate the data/migration work so protected cases are retained before applying the blanket ending rule. Cover protected working-age awards through final payment after2026. Confidence: high on the universal-zero code path and statutory omission; population incidence is unverified. The source review independently confirms the continuing-award protections in GB article 7, NI article 7 and transitional regulation 6A. The overlapping code and policy findings are counted once. Appointee/prisoner savings also need an explicit treatment. The GB/NI commencement dates and annual shares are corroborated. The migration concern is separate from the confirmed missing protection: an absent UC award alone does not establish UC entitlement or take-up. The PR's population cost/poverty estimates remain author-reported. Outstanding evidence/decision:
Validation: 54 focused tests passed. An additional executed diagnostic traced the new payment-share path from £5,200 HB entitlement to £0 paid HB in 2027. Four official source originals were inspected and their cached bytes verified. Protection itself cannot be supplied as an input at this head; the finding combines the universal code path with the statutory exception, rather than claiming a fully represented protected household was simulated. Focused tests used an existing cached Python 3.13 environment (Core 3.32.9, NumPy 2.1.3, pandas 2.3.1, microdf-python 1.2.1, Hypothesis 6.168.2, pytest 8.4.2) with this PR’s isolated source snapshot. No dependencies were installed; this was not a freshly synced lock environment or a full-suite/population run. This is a review comment, not a formal GitHub review vote. Live check before posting (2026-10-02T10:39:08.735058+00:00): same commit, CLEAN; all reported CI checks pass. |
|
Review pass (Claude Code, on Vahid's behalf) at Short version: no new commits since my round 1 (head still
Checked again at this head:
|
|
@vahid-ahmadi — response to your 1 October and 2 October reviews:
Follow-up validation: the full Housing Benefit YAML directory plus the affected UC housing-cost and HB/UC mutual-exclusion YAML files passed: 101 passed in 211.90s. Notebook JSON and Publication status: these fixes are prepared locally, but the live PR branch does not yet contain them. The filesystem sandbox rejects writes to the worktree's Git metadata outside the assigned writable directory, preventing fetch/merge, staging, commit and push. The existing checkpoint merge Final lint: |
|
@juaristi22 — response to the Codex review:
Follow-up validation: the full Housing Benefit YAML directory plus the affected UC housing-cost and HB/UC mutual-exclusion YAML files passed: 101 passed in 211.90s. Notebook JSON and Publication status: the changes remain local. Sandbox restrictions prevent writes to the external Git metadata needed by fetch/merge, staging, commit and push, so the live PR branch has not received this fix and code-1 cannot yet be closed there. The existing checkpoint merge is preserved; the PR has not been merged or marked ready. Final lint: |
…bolition Adds the benefit-unit input in_specified_or_temporary_accommodation (default False; SI 2025/1148 art 7 and TP Regs reg 6A(2), NI equivalents): such awards stay payable after 1 July 2026 (NI 1 October 2026), new claims remain open, and the UC housing costs element excludes that rent. Other saved classes (pension-age switchers, ESA(IR) appointees, restricted prisoners) are documented as not modelled. The parameter description now says how reforms dated inside a year are read. With the input absent every existing result is unchanged. Addresses Vahid's items 2-3 and the Codex P1 on bd9272a. Item 1 (data migration onto UC) is held for Max (d837). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The pension-age route now reads the claimant and partner (is_claimant_or_partner, from #1896) in place of the age-18 approximation. A reform key dated inside a year leaves that model year's payable share unchanged (86/365 for Great Britain in 2026): the test, the parameter description and the notebook now say so; the earlier text claimed it added one day. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Cross-reference from #2123, the HB Sch 4 para 18 specified or temporary accommodation earnings disregard. It is in force on 5 October 2026 and reads the same status input as this PR.
|
Working-age Housing Benefit awards end on 1 July 2026 (NI 1 October 2026). The abolition now prompts the same claim as a legacy benefit closure (claims_uc_at_legacy_closure), at the rate datasets supply in would_claim_uc_at_legacy_closure (PolicyEngine/policyengine-uk-data#492). - A family that claims is on Universal Credit for the whole year of the abolition and loses its Housing Benefit continuing award; its claim also ends income-related ESA, Income Support and income-based JSA. - A family that does not claim keeps its award for the part of the year before abolition (housing_benefit_payable_share) and its other legacy awards; unlike a migration notice the abolition ends no other award. - Tests: the abolition cases about a continuing award now say the family does not claim at the abolition; new cases cover a claiming family in 2026 and 2027. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t the abolition claim Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Status 02:45Z: this PR now belongs to the uk-data#492 session. A local branch has main merged (housing_benefit_eligible and notebook conflicts resolved) and #2119 merged. On it, the abolition prompts the closure claim: a family that claims Universal Credit at the abolition moves for the whole year, and one that does not claim keeps its award until the abolition date. All 2,043 policy YAML and 53 property tests pass. It is not pushed yet, because it would carry #2119's diff. It will be pushed once #2119 merges, then reviewed. It merges only after PolicyEngine/policyengine-uk-data#534 is released (d837). |
|
Coordination: the universal credit limb of the HB passport (#2133, fixes #2132). That PR targets
"On universal credit" is entitlement, whether in payment or not (reg 2(3B)). The model reads it as What changes for this PR once both land:
Checked on a local merge of this head (06ef074),
Two things for this PR:
🤖 Generated with Claude Code |
… local/1910-on-2119 # Conflicts: # policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/housing_benefit_eligible.yaml # policyengine_uk/variables/gov/dwp/housing_benefit/housing_benefit_eligible.py # policyengine_uk/variables/gov/dwp/housing_benefit/in_specified_or_temporary_accommodation.py
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Needs changes before merge. The law is right and enacted, but the branch conflicts with main and one saving is wider than the statute.
@MaxGhenis, round 3, at 06ef0744. This covers the accommodation follow-up (0d7df47d) and where the branch now stands against main 714b1438.
The law. I re-read both instruments today. Both are made and in force, so this is law, not a policy assumption.
- GB: SI 2025/1148 art 7, inserted on 15 April 2026 by SI 2026/409 art 2(6). Art 7(3) appoints 1 July 2026. Art 7(2) delays it for the reg 19(1)(b)/(c) prisoner cases. Art 7(4)(a) saves reg 6A(2)-(5) and art 7(4)(b) saves the ESA(IR) art 3A(2) cases.
- NI: SR 2025/176 art 7, inserted on 17 June 2026 by SR 2026/115 art 2(6). Same structure, with 1 October 2026 and reg 4A(2)-(5).
- The 86/365 and 178/365 shares are right.
-
must (merge with main).
git merge-treeagainst main714b1438conflicts in four files:housing_benefit_eligible.pyhousing_benefit_eligible.yamlin_specified_or_temporary_accommodation.py(add/add with #2123)docs/book/programs/gov/dwp/housing-benefit.ipynb
Main's eligibility has moved on. It now uses
meets_pension_credit_age_conditions,left_pension_route_at_legacy_closure,claims_universal_creditandlegacy_benefits_closed(#1940, #2119). This head'scontinuing_awardstill readswould_claim_uc, and so do the new YAML cases. Your 4 October comment says a merged local branch exists. Please push it so the abolition can be reviewed on main's rules. Everything below is at this head. -
must (merge order, still open from round 1). The 28k working-age units whose HB ends still get no UC in the data. The PR body says the PR is on hold until policyengine-uk-data#492 (and #534) is released. That hold should stay in place until the data change lands.
-
should
housing_benefit_payable_share.py:59-63.any_over_SP_agegives a share of 1 to any family with a member over State Pension age. That includes mixed-age couples who don't have the SI 2019/37 art 4 saving. Art 7(4)(a) saves only those within reg 6A(4) (both members over the qualifying age) or 6A(5) (mixed-age couples with the art 4 saving). At this head, a couple aged 68 and 50 with a reported HB award,would_claim_uc: false, £5,200 council rent and no saving gets a share of 1 and £5,200 of HB in 2027. The same couple aged 40 and 38 gets £0. The PR body lists this as a retained approximation. Main now has #1940, so the exact test is cheap. Fix: use main'smeets_pension_credit_age_conditions, which already encodes 6A(4) and the art 4 saving. Add a 2027 YAML case for an unsaved mixed-age couple (share 0) next to a saved one (share 1). -
should (HB and UC both paid, under the cap). On main,
housing_benefit.py:14-15anduniversal_credit.py:14both subtract the fullbenefit_cap_reduction. This PR is the first to let a family get both HB and non-housing UC, so a capped family in protected accommodation loses the reduction twice. The law gives three rules:- UC Regs 2013 reg 80(2A): HB counts as nil in the UC cap.
- HB Regs 2006 reg 75F(1)(g): the HB cap doesn't apply to someone on UC.
- Reg 75C(2)(a): specified-accommodation HB counts as nil in the HB cap.
The PR body leaves this to #1911. #2089 splits the cap by scheme. Either merge this after #2089 and add one capped joint-award YAML case, or state in the merge plan that capped joint awards are wrong until #1911.
-
nit
housing_benefit_payable_share.py:7-29. The documentation lists the unmodelled savings well. It would help to add one line on the direction of error: the ESA(IR) appointee and prisoner savings are not modelled, so their awards wrongly end on the abolition date.
Round-1 nit 3 (dated reform keys) is done: the parameter description now covers it, and there is a Simulation regression for it.
What I checked
- I read both art 7 texts (GB as revised 15 April 2026, NI as revised 17 June 2026) on legislation.gov.uk.
- I hand-checked the abolition YAML: £5,200 × 86/365 = £1,225.21.
- I set up a fresh uv env at this head and ran:
housing_benefit_eligible.yamlandhousing_benefit_working_age_abolition.yaml: 25 passed.- The two property files: 42 passed.
ruff checkandruff format --checkon the 7 changed Python files: clean.
- I ran the mixed-age case in item 3 with a
Simulationat this head. - I ran
git merge-treeagainst main714b1438. - CI at this head: Lint, docs, smoke-import and Fix evidence pass. Test shows as failed after 6h0m, which looks like the job timeout. I didn't see its log.
- I couldn't check: behaviour on main's eligibility rules, because there's no merged head. I also didn't run a dataset.
🤖 Generated with Claude Code
…reg 75F(1)(g)) UC Regs 2013 reg 80(2A) counts Housing Benefit as nil in the Universal Credit total, so uc_benefit_cap_reduction takes it out of benefit_cap_welfare_benefits, which keeps it for the Housing Benefit cap (HB Regs 2006 reg 75C(2)(b)). HB reg 75F(1)(g) lifts the Housing Benefit cap where the claimant is receiving Universal Credit: is_housing_benefit_benefit_cap_exempt_specified_benefit now includes a family with Housing Benefit and Universal Credit before the cap. housing_benefit_eligible rules out a family that claims Universal Credit, so no computed family gets both today and no baseline result changes; the rules matter once a family is paid both (specified or temporary accommodation, #1910). Reg 75C(2)(a) (specified-accommodation HB counted as nil) is not applied: in_specified_or_temporary_accommodation does not separate specified from temporary accommodation. Vahid Ahmadi's finding 3 on #2089. Tests: two YAML cases (each fails on the previous formulas), a property file (test_benefit_cap_uc_and_hb_properties.py), and the split property file's reduction invariant now checks reg 80(2A) and 75F(1)(g) in place of asserting that no family gets both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
UK hub takeover for the Budget fix sprint (Max, 21 Oct). The owner session If the owner session wakes, please don't push to this branch; comment here instead, so there's only one writer. 🤖 Generated with Claude Code |
|
UK hub: takeover withdrawn. The owner session has been woken (22 Oct 01:25Z) and is finishing this PR itself, so the hub's build is cancelled. One writer: the owner session. 🤖 Generated with Claude Code |
…ousing-benefit Brings in the merged #2119 (fa4389d) and three weeks of main. Conflicts in esa_income_eligible and jsa_income_eligible: keep main's claimant and work tests and this PR's abolition-claim gate. The HB eligibility documentation no longer says Universal Credit is unavailable to wholly pension-age families, since a Working Tax Credit migrant can claim it (left_pension_route_at_legacy_closure). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng-age-housing-benefit #2549 moved the ESA and JSA closure out of their eligibility screens into person_legacy_benefits_closed, scoped to each award's owner. Take main's screens, and put this PR's abolition-claim gate in the claimant-and-partner branch of person_legacy_benefits_closed, so a member claiming in their own right keeps their award when the family claims Universal Credit at the Housing Benefit abolition. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A family that claims Universal Credit when its working-age Housing Benefit is abolished ends the claimant's and partner's income-related ESA; an adult claiming in their own right keeps theirs (#2395), and a family that does not claim keeps both. Dropping the gate in person_legacy_benefits_closed fails it. 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: 79 (thresholds in Notes
Moves flagged for review
39 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; components the model counts twice; 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
Components the model counts twice: 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
|
… cases Vahid's round 3, item 3: the payable share kept every family with a member over State Pension age, including mixed-age couples without the SI 2019/37 art. 4 saving, which art. 7(4)(a) does not save. It now reads meets_pension_credit_age_conditions (reg 6A(4), and 6A(5) through the art. 4 saving). New YAML: an unsaved mixed-age couple (68 and 50) gets nothing in 2027; the saved couple's older member is 75, so born before 6 February 1954. Item 4: a capped joint HB/UC award (protected accommodation) is capped once: main's 75F specified-benefit exemption already lifts the HB cap for a UC recipient, and UC's cap counts HB as nil (reg 80(2A)); one YAML case checks it. Item 5: the documentation says the unmodelled savings end too early. Main's 2026 legacy HB cases now meet the abolition: the AFIP cap case (CI failure) and three unsaved mixed-age couples pin would_claim_uc_at_legacy_closure false and expect the 86/365 award. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@vahid-ahmadi, thanks for round 3. Here is where each item stands at
Locally at 🤖 Generated with Claude Code |
|
On hold until after the Budget (UK hub, 22 October 04:10Z). This PR lands after Microcosm UK supplies Why. From 1 July 2026 this PR keeps working-age Housing Benefit only for families flagged as in specified or temporary accommodation (reg 6A(2)), and on families meeting the Pension Credit age conditions (reg 6A(4)–(5)). No dataset sets the accommodation flag yet. Microcosm lists it under inputs no concept covers. So every working-age continuing award ends, including the supported and temporary accommodation awards that law saves. Those families can't get their rent through Universal Credit instead, because UC excludes those rent payments. Size at the previous head. Measured at
The UC rise comes from the claim at abolition, with its flag at the default (true). The report for State at To land.
🤖 Generated with Claude Code |
Status (22 October, head
2d0e49417): on hold. The UK hub (04:10Z) holds this until Microcosm UK suppliesin_specified_or_temporary_accommodation, after 28 October: no dataset sets it yet, so landing now would end the supported and temporary accommodation awards that law saves. Currentmainis merged in, including #2119 (the Universal Credit claim when legacy benefits close) and #2549 (legacy closure scoped to each award's owner). Max's hold d837 (merge after PolicyEngine/policyengine-uk-data#492 is released) also still applies.Summary
Working-age Housing Benefit awards were abolished from 1 July 2026 in Great Britain and 1 October 2026 in Northern Ireland, subject to statutory savings. PolicyEngine UK still paid unprotected awards in every year through the continuing-award route (reported HB and not claiming UC). This PR ends that route on the statutory dates, pays 2026-27 for the part of the year before abolition, and lets a family whose award is abolished claim Universal Credit through #2119's closure claim.
It also adds
in_specified_or_temporary_accommodation: a boolean benunit input that preserves a payable share of 1 and permits new Housing Benefit claims, including alongside UC with no UC housing costs element. It defaults toFalse, and no current dataset supplies it.Law
The dates were checked again on legislation.gov.uk and in DWP's circular on 22 October 2026.
Change
gov.dwp.housing_benefit.working_age_awards_payable, with childrengreat_britainandnorthern_ireland: each is 1 while unprotected working-age awards are payable and 0 from its abolition date, blended over the fiscal year.in_specified_or_temporary_accommodation(BenUnit, YEAR, boolean, defaultFalse): a supplied statutory accommodation status. It setshousing_benefit_payable_shareto 1 in every year and opens the new-claim route inhousing_benefit_eligible. Existing rental, capital, entitlement and take-up checks still apply.housing_benefit_payable_share(BenUnit, YEAR): 1 for the accommodation input or a family meeting the Pension Credit age conditions (meets_pension_credit_age_conditions: reg 6A(4), and 6A(5) through the SI 2019/37 art. 4 saving); otherwise the country's parameter value. A mixed-age couple without the saving is not saved.housing_benefit_eligible: the continuing-award route needs the share above 0; the accommodation input adds a new-claim route.housing_benefit_pre_benefit_cap: entitlement is multiplied by the share; the benefit cap applies afterwards.uc_housing_costs_element: 0 when the accommodation input isTrue.claims_uc_at_legacy_closure: also true when a family reporting HB has a payable share below 1 (its award is abolished in the year) andwould_claim_uc_at_legacy_closureis true.person_legacy_benefits_closed(from Scope legacy-benefit closure to each award's owners #2549): for the claimant and partner, also true when the family makes that claim and was not already claiming UC (would_claim_ucfalse). Their income-related ESA ends by the claim; an adult claiming in their own right keeps theirs.income_supporthas the same gate, but Income Support and income-based JSA are already closed in the model from 2026, so under current law the claim ends only income-related ESA.partialinprograms.yaml.How a mid-year date applies to a YEAR period
PE-UK period 2026 means FY 2026-27.
convert_to_fiscal_year_parameters(utils/parameters.py) normally samples each parameter on 30 April. Parameters markedfiscal_year_blend: trueinstead use a day-weighted average over 6 April to 5 April. PE 2026 therefore reads:From 2027 they read 0, and before 2026 they read 1. HB part-week rules for the week containing abolition are not modelled.
Reforms. A bare-year value, for example
{"...great_britain": {"2026": 1}}, sets that fiscal year's share; a key dated inside the year (2026-07-01) leaves the 2026 share at 86/365 (tested). Use whole-year values or a date range for annual reform scenarios.Savings: modelled, approximated and unmodelled
Truepreserves share 1 in every year and allows a new HB claim, including alongside non-housing UC. Accommodation-specific eligible-rent and benefit-cap rules are not modelled, and capped joint HB/UC awards have the reduction-coordination issue in the notes. No current dataset supplies the status.meets_pension_credit_age_conditions, which reads the claimant and partner.has_mixed_age_couple_pension_credit_saving): the older member reached the qualifying age by 14 May 2019, and the couple reports Pension Credit or pension-age HB and no UC. An unsaved mixed-age couple loses its award like a working-age family.What happens to families that lose HB
When a working-age family's award is abolished, it claims Universal Credit if
would_claim_uc_at_legacy_closureis true. This is the same closure claim #2119 added for families moved off other legacy benefits.would_claim_uc) is unchanged: it already gets UC instead of HB. Its income-related ESA is left to the overlap rules in Abolish income-related ESA from 1 July 2026 (NI 1 October 2026) and stop paying it alongside UC #1914.would_claim_uc_at_legacy_closuredefaults to true, and no released dataset supplies it yet. PolicyEngine/policyengine-uk-data#534 (for #492) will draw it at DWP's Move to UC claim rates. Until then every unprotected working-age HB reporter not already claiming UC claims at the abolition. That is an upper bound: DWP's rates after a migration notice are 74.8% for HB-only households and 97.4% for HB with another legacy benefit (Stat-Xplore "Households invited to Move to Universal Credit", tables MtUC Households 3 and 6, to end of March 2026). Transitional protection is not modelled (#1912); an art. 7 termination carries none.Invariants
Property-tested in
test_housing_benefit_working_age_abolition_properties.py:False.person_legacy_benefits_closedfails this test.Tests
Locally:
2d0e49417, the full YAML suite: 4,106 passed. It includes 3 new cases: an unsaved mixed-age couple, the 75-year-old saved couple, and a capped joint award. It also includes 4 ofmain's 2026 legacy HB cases, which now pinwould_claim_uc_at_legacy_closure: falseand expect the 86/365 award. They are the AFIP benefit-cap case (the CI failure atc64d1421d) and three unsaved mixed-age couples.2d0e49417, the two HB property files: 54 passed.c64d1421d, before the pension-age change, the UC legacy closure, closure scope (Scope legacy-benefit closure to each award's owners #2549), report-only reform, legacy-award readers and work, and dated reform route property files: 258 passed. The new owner-scope test passes (6), and 2 fail with the gate removed.CI runs the full Python suite.
Dataset impact
Pending: the Aggregate impact CI job measures this head against
mainon the certified dataset (uk-data 1.58.1), and its report will be quoted here. Earlier figures in this PR (uk-data 1.56.16) predate the claim at abolition and are withdrawn.Follow-ups
would_claim_uc_at_legacy_closureat Move to UC claim rates.Notes for the reviewer
benefit_cap_reductionincludes bothhousing_benefit_pre_benefit_capanduniversal_credit_pre_benefit_cap, and the finalhousing_benefitanduniversal_crediteach subtract that reduction. The accommodation input permits joint awards, so a binding cap can subtract it from both. This PR does not choose a cap method; the defaultFalseleaves existing outputs unchanged.06ef0744) is answered in this comment: items 1, 3 and 5 are fixed, item 4 is correct onmain, and item 2 is d837.esa_income_eligibleandjsa_income_eligibletakemain's version; the abolition-claim gate moved from them into the claimant-and-partner branch ofperson_legacy_benefits_closed, so it follows Scope legacy-benefit closure to each award's owners #2549's owner scoping.in_specified_or_temporary_accommodationkeeps both docstring sentences (this PR's and Add the Housing Benefit earnings disregard for specified or temporary accommodation (Sch 4 para 18, from 5 October 2026) #2123's).axiom: TheAxiomFoundation/rulespec-uk#376 queued (SI 2025/1148 arts 3A, 7; SR 2025/176 arts 3A, 7; SR 2016/226 reg 4A); TheAxiomFoundation/rulespec-uk#433 queued (the UC claim at legacy closure)
Reproducer:
policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/housing_benefit_working_age_abolition.yaml,policyengine_uk/tests/test_housing_benefit_working_age_abolition_properties.py::test_payable_share_is_the_day_share_before_the_statutory_date,policyengine_uk/tests/test_housing_benefit_working_age_abolition_properties.py::test_abolition_matches_the_pre_abolition_rule_scaled_by_the_payable_share,policyengine_uk/tests/test_housing_benefit_working_age_abolition_properties.py::test_the_abolition_claim_ends_only_the_couples_legacy_awards🤖 Generated with Claude Code