Skip to content

Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) - #1910

Open
MaxGhenis wants to merge 4 commits into
mainfrom
abolish-working-age-housing-benefit
Open

MaxGhenis wants to merge 4 commits into
mainfrom
abolish-working-age-housing-benefit

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Working-age Housing Benefit awards outside specified and temporary accommodation were abolished from 1 July 2026 in Great Britain and 1 October 2026 in Northern Ireland. PolicyEngine UK still paid them 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 the abolition, and keeps the awards the law saves.

Law

All texts were read on legislation.gov.uk on 2026-09-29 and 2026-09-30.

  • GB. SI 2025/1148 art 7 was inserted by SI 2026/409 (made 15 April 2026). It brings WRA 2012 s.33(1)(d) (abolition of HB) into force on 1 July 2026 for every HB award not already terminated under TP Regs 7(2), 8(2A) or 46(1)(a) or in a two-week run-on. The last day of entitlement is 30 June 2026. There are three exceptions:
    • art 7(4)(a): claimants within SI 2014/1230 reg 6A(2)-(5) keep HB. These are specified or temporary accommodation, pension age, and mixed-age couples protected by SI 2019/37 art 4.
    • art 7(4)(b): claimants on income-related ESA with an appointee, or a likely need for one (art 3A(2)), keep HB.
    • art 7(2): prisoners barred from UC by UC Regs reg 19(1)(b)/(c) keep HB until the day after that bar ends.
  • NI. SR 2025/176 art 7 was inserted by SR 2026/115. It applies Welfare Reform (NI) Order 2015 art 39(1)(d) from 1 October 2026, with the same savings (NI TP reg 4A(2)-(5)).
  • Guidance. DWP circular A6/2026 says the same.
  • Scotland and Wales. HB is reserved, so the GB order applies.

Change

  • New parameter gov.dwp.housing_benefit.working_age_awards_payable, with children great_britain and northern_ireland. Each is 1 while working-age awards are payable and 0 from its abolition date.
  • New variable housing_benefit_payable_share (BenUnit, YEAR). It is 1 for any benefit unit with a member over State Pension age, and the country's parameter value otherwise.
  • housing_benefit_eligible: the continuing-award route now also needs the share to be above 0.
  • housing_benefit_pre_benefit_cap: the award is the entitlement times the share. The benefit cap applies afterwards, as before.

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) rewrites every gov.* parameter for each year 2015-2040 as its value on 30 April. A 1 July change would therefore first apply in PE 2027, leaving all of 2026-27 on prior law. That includes a 1/0 flag whether it is stored as a bool or as a number.

Parameters with fiscal_year_blend: true are instead day-weighted over 6 April to 5 April, but only if they are numeric: fiscal_year_average rejects booleans and falls back to the 30 April value. So the parameter is numeric 1/0 with the flag set on each child. PE 2026 then reads:

  • 86/365 = 0.2356 in GB, for 6 April to 30 June;
  • 178/365 = 0.4877 in NI, for 6 April to 30 September.

From 2027 it reads 0, and before 2026 it reads 1. The day-weighted share is a convention for the annual amount; the HB part-week rules for the week containing the abolition date are not modelled.

Reforms. A reform= dict is applied after the fiscal-year conversion, so a year reads whatever value the reform sets at its start. Verified with real runs:

  • to keep awards, set whole years: {"...great_britain": {"2026": 1, "2027": 1}} or a range covering them;
  • to model a different date, give that year's share directly, e.g. {"...great_britain": {"2026": 178/365}} for 1 October;
  • a key dated inside the year ("2026-07-01", or a range starting 1 July) leaves that year's value unchanged.

Savings: what is modelled and what is approximated

Saving Modelled as
Pension age (reg 6A(4)) Any member over State Pension age: share 1.
Protected mixed-age couple (reg 6A(5), SI 2019/37 art 4) Also covered by "any member over State Pension age". In law the older member must claim under the HB (SPC) Regs and the couple must have been entitled since 14 May 2019, which the data cannot show. Such couples report a continuing award (£0.20bn HB in 2026), and 2.2k of them (£0.011bn) also report income-related ESA, which suggests their award was a working-age one. Intended approximation.
Pensioner with an 18-19-year-old dependant Keeps the award. The single pensioner claims under reg 6A(4).
Specified or temporary accommodation (reg 6A(2)) Not modelled (no input). Follow-up issue.
Income-related ESA appointee (art 7(4)(b)) Not modelled (no input).
Prisoners (art 7(2)) Not modelled. The FRS excludes prisons.

What happens to families that lose HB

would_claim_uc (a take-up input drawn in policyengine-uk-data) decides it. Families that claim UC already get UC instead of HB in every year and are unaffected. Families that do not claim it lose HB and get no UC. On the current Enhanced FRS that group is 28.0k working-age benefit units paid HB through the continuing-award route.

In reality most of them moved to UC. DWP's Move to UC statistics (Stat-Xplore "Households invited to Move to Universal Credit", tables MtUC Households 3 and 6, to end of March 2026) give these claim rates after a migration notice:

Cohort (GB) Claim rate Share of claimants with transitional protection
HB and income-related ESA 98.1% 63.4%
HB and any other legacy benefit 97.4% 58.5%
HB only 74.8% 22.3%
All cohorts 86.7% 51.6%

Rows overlap: the second includes the first. "ESA" is Stat-Xplore's label (migration notices go only to claimants of an "existing benefit", which covers income-related ESA), and the first row includes families also on Child Tax Credit. DWP's own headline for the same period is 87% claimed, with 814,703 households given transitional protection (53% of those eligible). The protection column here is of all claimants.

In the dataset (2026 weights), 82% of working-age HB reporters who do not also report UC have would_claim_uc True. The share is 79% for the largest cohort, HB plus income-related ESA (184k units, 633 records). The draw does not look at legacy receipt, so the weighted shares most likely come from calibration. Across all working-age HB reporters the share is 72%. It is pulled down by 35.5k units (SPI-synthetic records and their clones) that report both HB and UC but lost their UC anchor in stage-2 imputation (PolicyEngine/policyengine-uk-data#491).

Decision: model-side, this PR only ends the award; it does not create UC claims. The reasons:

  1. Take-up randomness, and so the cohort claim rates, belongs in policyengine-uk-data. The dataset stores would_claim_uc as an input for every year. A PE-UK variable could route former HB claimants to UC, but only by making a take-up assumption the model deliberately leaves to the data.
  2. The same stranding already applies to tax-credit reporters since 2025-26 (62.7k units) and to IS/JSA reporters since 2026-27. It needs one data-side fix for all legacy cohorts.
  3. PE-UK still pays income-related ESA to 137k benefit units that also get UC. That benefit was also abolished on 1 July 2026 (SI 2025/1148 art 3A), but the model does not end it yet, and 73.9k of the 81.3k working-age HB reporters who drew would_claim_uc False also report it. Moving more of them onto UC before that is fixed would widen the double payment.

Two follow-ups are planned, in this order:

  1. The income-related ESA abolition and UC exclusivity in PE-UK (Abolish income-related ESA from 1 July 2026 (NI 1 October 2026) and stop paying it alongside UC #1914).
  2. A uk-data take-up change that anchors legacy reporters to UC at these cohort claim rates (Move working-age legacy-benefit reporters onto UC at Move to UC claim rates (stranded after HB, tax credit, IS and JSA closure) policyengine-uk-data#492).

Transitional protection is not modelled for anyone (#1912). An art 7 termination carries none: protection needs a qualifying claim after a migration notice (TP Regs 44(6), 48, 50).

Sensitivity (real runs on this branch, 2027: the abolition reversed, current law, and current law with would_claim_uc set True for the group). The 28.0k working-age units whose HB this PR ends lose £0.192bn. If they all claimed UC:

  • they would get £0.456bn of UC;
  • 26.2k would get some UC, and 1.8k would get less UC than their former HB;
  • their net change against main would be +£0.264bn.

PE-UK would also keep paying them £0.249bn of income-related ESA. UC's means test does not count it, so the UC figure stands, but the net income effect would overstate reality, where ESA(IR) ends too.

Invariants (property-tested in test_housing_benefit_working_age_abolition_properties.py)

  1. Parameter. For every fiscal year 2015-2040, each jurisdiction's value equals the share of 6 April to 5 April before its statutory date, counted independently in the test from the two dates.
  2. Bounds. 0 ≤ housing_benefit_payable_share ≤ 1, and it is 1 for every benefit unit with a member over State Pension age.
  3. Abolition. From 2027, no benefit unit without a member over State Pension age receives HB, in any country or claim mode.
  4. Differential against the pre-abolition rule. A reform that keeps working-age awards payable reproduces the old rule. Pre-cap HB under current law is exactly that amount times the country's share for working-age units, and exactly equal to it for all others. A targeted test builds working-age continuing awards for each year and jurisdiction, so the share is always exercised.
  5. Monotonic. The abolition never raises HB and never changes UC.
  6. Structural (unchanged). No benefit unit receives both HB and UC, and 0 ≤ HB ≤ rent.

Tests

  • New housing_benefit_working_age_abolition.yaml has 12 hand-checked cases (rent £5,200, applicable income 0):

    • GB in 2025, 2026 and 2027: £5,200.00, £1,225.21 (= 5,200 × 86/365), £0;
    • Scotland and Wales on the GB date;
    • NI in 2026 and 2027: £2,535.89 (= 5,200 × 178/365), £0;
    • a working-age couple (£0 from 2027);
    • a protected mixed-age couple, a pensioner with an 18-year-old dependant, and an NI pension-age new claim (£5,200 in 2027);
    • a family claiming UC (HB £0).

    With the housing_benefit_payable_share assertions removed (that variable does not exist on main), 7 of the 12 fail on main. The 5 that pass are the cases whose outcome does not change.

  • housing_benefit_eligible.yaml was vacuous. It compared booleans with absolute_error_margin: 5, so every expectation passed even when flipped. It now uses margin 0 and would_claim_uc: false for its continuing-award cases.

  • Mutation check. Each of these deliberate breakages fails at least one new test:

    • dropping the proration;
    • dropping the eligibility gate;
    • giving NI the GB date;
    • saving only wholly pension-age units;
    • turning the blend off.
  • Suites. The full YAML suite passes (1,288 cases), as does the non-microsimulation pytest suite (346 passed, 15 skipped).

Dataset impact

Enhanced FRS 2024-25 (uk-data 1.56.16), current weights. These are real runs of main (1c5b4d0) and this branch in separate environments. A third run of this branch with the abolition reversed reproduced main exactly in every aggregate metric and year.

2025 2026 2027 2028 2029
HB change 0 −£0.139bn −£0.192bn −£0.199bn −£0.198bn
Working-age HB, main → branch £0.184bn → £0.045bn £0.192bn → 0 £0.199bn → 0 £0.198bn → 0
Benefit units losing HB 0 28.0k (part-year) 28.1k 28.3k 27.7k
Mean loss per losing household £4,962 £6,832 £7,026 £7,130
People in poverty AHC 0 +7.8k +13.2k +13.7k +14.1k
Of which children 0 +0.2k +0.2k +0.2k +0.2k

Read these as the model's current take-up gap, not as the abolition's effect. The HB saving and the poverty rise come from 28k units that lose HB and, because their would_claim_uc draw is False, get no UC. In reality most of them moved to UC, which on the sensitivity above would more than replace the HB. Once PolicyEngine/policyengine-uk-data#492 lands, these families should mostly move to UC and the sign of the income effect may reverse.

  • By country (2027): England −£0.178bn, Scotland −£0.004bn, Wales −£0.003bn, NI −£0.007bn.
  • Other programmes: UC, Pension Credit, Council Tax Reduction, the benefit-cap reduction and income-related ESA are unchanged in every year. Mixed-age and pension-age HB are unchanged, and no benefit unit gains.
  • Government balance: improves by the HB change, for the take-up reason above.
  • Relative poverty: the relative poverty line moves with median income, so these counts are noisy. AHC relative poverty moves by +8.6k, +12.1k, −40.8k and +13.8k in 2026-2029.
  • Calibration: uk-data calibrates only at FY 2025-26, and both abolition dates fall after it, so this PR needs no dataset rebuild. The weights were calibrated to an OBR HB total that includes specified and temporary accommodation HB. DWP's Spring 2026 forecast for Great Britain puts that at £1.64bn (temporary) and £3.94bn (supported) in 2026-27, all ages. The model cannot produce it, which may be part of why PE's pension-age HB (£13.8bn, UK) runs far above DWP's £7.27bn (GB; PE's NI HB is £1.39bn in total). That mismatch predates this PR, and the mechanism is not verified.

Follow-ups

Notes for the reviewer

axiom: TheAxiomFoundation/rulespec-uk#376 queued (SI 2025/1148 arts 3A, 7; SR 2025/176 arts 3A, 7; SR 2016/226 reg 4A; depends on rulespec-uk#370)

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits September 30, 2026 07:54
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>
MaxGhenis and others added 2 commits September 30, 2026 08:43
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>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Overlap with #1940: it replaces the pension-age new-claim test in housing_benefit_eligible with meets_pension_credit_age_conditions, which adds mixed-age couples keeping the SI 2019/37 art. 4 saving (TP Regs reg 6A(5)) and those before 15 May 2019. It leaves your continuing-award line alone, so the conflict should be textual only. It also extends test_dataset_take_up_stays_anchored_to_reported_claims: a saved mixed-age couple is eligible on the new-claim route as well as the continuing-award route.

MaxGhenis added a commit that referenced this pull request Sep 30, 2026
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>
@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

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.

  1. Blocking (merge order). In the dataset, the 28k working-age units whose HB ends have would_claim_uc = False and get nothing. That produces a £0.19bn saving and about 13k more people in AHC poverty, which the PR itself says may have the wrong sign (DWP's Move to UC claim rates are 75–97%). Fix: merge together with, or after, policyengine-uk-data#492, and ideally Abolish income-related ESA from 1 July 2026 (NI 1 October 2026) and stop paying it alongside UC #1914 (ESA(IR) abolition), so live results never show this.
  2. Should fix housing_benefit_payable_share.py:44-45 and housing_benefit_eligible.py:56-57. Nothing can mark specified or temporary accommodation (reg 6A(2)), so in the household calculator such tenants get £0 from July 2026. The PR cites a DWP figure of £5.6bn for this HB in GB (I didn't verify it). Fix: add a bool input in_specified_or_temporary_accommodation (default False) that sets the share to 1 and opens the new-claim route. Model Housing Benefit for specified (supported) and temporary accommodation at any age #1911 can then do the data.
  3. Nit. A reform dated inside a year (e.g. "2026-07-01") is silently ignored. Say so in the parameter description.

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.

@juaristi22

Copy link
Copy Markdown
Collaborator

Codex review — changes required

Reviewed commit bd9272a88ee1198eacd2a2da9cb5abf30e4be01c. PARTIAL; 1 confirmed blocking finding(s). Independent code/test and policy/source reviews were consolidated for the changed behavior and affected dependencies.

code-1 — [P1] Preserve working-age awards covered by the abolition exceptions

housing_benefit_payable_share.py:30–45 assigns the abolition share to every family without a pension-age member. The code comments acknowledge that specified/temporary accommodation and other saved cases have no input, so the new multiplier nonetheless sets all of those working-age awards to zero from2027. The independently checked article7/regulation6A exceptions preserve qualifying continuing awards; the model needs to distinguish them before zeroing this entire population.

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.

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Review pass (Claude Code, on Vahid's behalf) at bd9272a8 — round 2

Short version: no new commits since my round 1 (head still bd9272a8), so my three items stand as they were. The branch still merges cleanly onto today's main (30 commits ahead of its base) and its tests pass on the merged tree. The Codex review's P1 is my item 2; I agree with it and won't repeat it.

Item from round 1 Status
1. Blocking (merge order): the 28k working-age units whose HB ends have would_claim_uc = False, so the abolition shows a £0.19bn saving and ~13k more people in AHC poverty that the PR itself says may have the wrong sign Open. policyengine-uk-data#492 and #1914 are both still open issues, with no PR yet. Holding this until #492 lands (or merging them together) is still my ask.
2. Should-fix: no input for specified or temporary accommodation (reg 6A(2)), so those tenants get £0 from July 2026 in the household calculator Open, and independently confirmed by the Codex review's P1. A single bool input (default False) that sets the share to 1 and opens the new-claim route is enough here; #1911 can supply the data. The ESA(IR) appointee (art 7(4)(b)) and prisoner (art 7(2)) savings could ride on the same input or be documented as not modelled, as now.
3. Nit: a reform key dated inside a year ("2026-07-01") is silently ignored Open. One sentence in the parameter description would do.

Checked again at this head:

  • git merge-tree against main 1c9bb5c2 reports no conflicts (only programs.yaml auto-merges). On the merged tree, the Housing Benefit YAML directory passes 74/74, and test_housing_benefit_working_age_abolition_properties.py plus test_housing_benefit_pension_age_properties.py pass 38/38.
  • Day counts: 6 April–30 June is 86 days and 6 April–30 September is 178, so the 0.2356 and 0.4877 shares are right.
  • CI at this head: all 7 checks pass.
  • Date the mixed-age couple Pension Credit exclusion and model the SI 2019/37 saving #1940 (mixed-age couples) is still open; the overlap with housing_benefit_eligible remains textual only.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants