Skip to content

Disregard the whole income and capital of Housing Benefit claimants on IS, income-based JSA or income-related ESA - #2000

Merged
MaxGhenis merged 10 commits into
mainfrom
hb-passport-income-related-benefits
Oct 3, 2026
Merged

MaxGhenis merged 10 commits into
mainfrom
hb-passport-income-related-benefits

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #1993.

Merge order. This PR lands after #1896, as the PE-UK merge train set. #1896 merged on 2026-10-02 (3525263). The head (2febacb) is the reviewed b6d45a5 plus #2048's test fixes and merge commits of main (latest 2c94286) and of #1896's head. Against main it changes only the files listed under "Change" and #2048's.

Problem

housing_benefit_applicable_income added income_support, jsa_income and esa_income to a Housing Benefit claimant's income and tapered it, and housing_benefit_assessable_capital counted their capital. In law, a claimant on one of these benefits has the whole of their income and capital disregarded, so an eligible claimant gets maximum Housing Benefit before the benefit cap: the eligible rent, capped at the LHA rate where it applies, less non-dependant deductions, floored at zero (reg 70).

The hand-computed YAML cases below are real runs of this branch and main 8b2e6e1 with #1896 merged in. They gave the same values on main 8b2e6e1 and 7b9fc37 alone. Each is a council tenancy with no non-dependants, so maximum Housing Benefit is the rent.

Case main: capital, applicable income → HB this PR
A. Lone parent aged 30, child aged 3, Income Support £5,000, earnings £3,000, savings £12,000, rent £6,240 (2025) £12,000 (tariff £1,248), £8,836.62 → £3,607.15 £0, £0 → £6,240
B. Single aged 40, income-based JSA £3,500, earnings £1,000, savings £12,000, rent £5,200 (2025) £12,000, £5,394.81 → £4,804.33 £0, £0 → £5,200
C. Single aged 40, income-based JSA £3,500, no earnings, savings £20,000, rent £5,200 (2025) £20,000: over the £16,000 limit, so £0 £0 → £5,200
D. Couple aged 32 and 30, the partner on income-based JSA £4,000, claimant earns £12,000, rent £6,240 (2025) £0, £15,293.61 → £1,189.00 £0, £0 → £6,240
E. Mixed-age couple aged 70 and 60, the younger on income-related ESA £6,000; State Pension £12,000, private pension £15,000, savings £10,000, rent £6,240 (2026) £10,000, £29,635.59 → £0 £0, £0 → £6,240
F. As B, with contribution-based JSA (control) £12,000, £5,488 → £4,232.80 unchanged
G. As E, with contributory ESA only (control) £10,000, £29,635.59 → £0 unchanged

E sets Guarantee Credit to nil, so the result does not come from the Pension Credit passport. F is fully hand-computed with the disregard (£260) and applicable amount (£4,000) given: 5,200 − 0.65 × (3,500 + 1,000 + 1,248 − 260 − 4,000) = £4,232.80.

Law

The texts were read from legislation.gov.uk CLML (/data.xml) on 2026-10-01: the current revised text, and the point-in-time text at 2026-04-06, which is identical for these paragraphs. Copies are in the research folder.

SI 2006/213 (Housing Benefit Regulations 2006).

  • Sch 5 para 4 (sums disregarded in the calculation of income other than earnings): "Where a claimant is on universal credit, income support, an income-based jobseeker's allowance or an income-related employment and support allowance the whole of his income."
  • Sch 5 para 5: "Where the claimant is a member of a joint-claim couple for the purposes of the Jobseekers Act and his partner is on an income-based jobseeker's allowance, the whole of the claimant's income."
  • Sch 6 para 5 (capital to be disregarded): the same four benefits, "the whole of his capital". Sch 6 para 6 is the joint-claim counterpart.
  • The income-related ESA words date from 27.10.2008 (SI 2008/1082 regs 25(a) and 26(a)) and "universal credit," from 28.10.2013 (SI 2013/2070 reg 7(8) and (9)).
  • Reg 2 says what "on" means:
    • "person on income support" means "a person in receipt of income support";
    • reg 2(3) and (3A): a person is on income-based JSA or income-related ESA "on any day in respect of which [it] is payable to him", and also on some days when it is not paid (a sanction or disqualification, a waiting day, a loss-of-benefit restriction);
    • reg 2(3B): a person is on universal credit on any day they are entitled to it, "whether it is in payment or not".
  • Reg 5(1)(b): these regulations apply to a person who "has attained the qualifying age for state pension credit if he, or if he has a partner, his partner, is a person on universal credit, on income support, on an income-based jobseeker's allowance or on an income-related employment and support allowance". SI 2006/214 reg 5(2) disapplies the pension-age regulations in the same case. So a mixed-age couple whose younger member is on income-related ESA is assessed under SI 2006/213 and passported. DWP circular A9/2019 says such a couple "can continue to receive working age HB".
  • Reg 82(1): "In the case of a couple ... a claim shall be made by whichever one of them they agree should so claim".

Northern Ireland: SR 2006/405 has equivalent passport provisions. The paragraphs below use the same words, with "Jobseekers Order" for "Jobseekers Act". Reg 2(3) and (3A) cite the NI sanction and fraud legislation in place of the GB Acts:

  • Sch 6 para 4 and para 5 (income);
  • Sch 7 para 5 and para 6 (capital);
  • reg 2(3) to (3B) and reg 5(1)(b); SR 2006/406 reg 5(2).

The NI ESA words date from 27.10.2008 (SR 2008/378) and "universal credit," from 8.5.2018 (SR 2018/92). NI's Sch 6 para 6, a 2003 rate-rebate saving, has no GB counterpart and is not modelled.

Change

  • in_receipt_of_income_support_jsa_ib_or_esa_ir (new, BenUnit, bool): true when income_support, jsa_income or esa_income is positive. It follows in_receipt_of_guarantee_credit: receipt means a positive amount paid.
  • housing_benefit_applicable_income: nil when that holds (Sch 5 para 4). Adds documentation and reference.
  • housing_benefit_assessable_capital: nil when that holds (Sch 6 para 5). Tariff income is then nil and the capital limit is met, so housing_benefit_tariff_income and housing_benefit_eligible need no change.
  • Docs: one sentence in the "How PolicyEngine computes Housing Benefit" cell of housing-benefit.ipynb.
  • Existing tests: three cases in housing_benefit_applicable_income.yaml used Income Support £2,250 as ordinary income. That income now passports, so the cases are rebuilt on £3,250 of earnings, one also with £2,000 of working tax credit, and no Child Benefit (which Sch 5 para 65 disregards). Their expected values (£2,500, £4,500 and £0) are unchanged, and the tests still check what they were written for (pension contributions halved from earnings and capped, other income added).

Modelling choices

  • Receipt, not "on". An amount paid above zero stands in for "on". The model cannot see the reg 2(3) and (3A) days when nothing is paid.
  • The benefit unit. The model holds these awards for the benefit unit and cannot tell which member claims Housing Benefit, so it applies the passport whichever member is on the benefit. A couple choose who claims (reg 82(1)), and para 5 covers a joint-claim couple.
  • No age condition. This follows reg 5(1)(b). A handful of wholly pension-age benefit units in the Enhanced FRS report income-related ESA or income-based JSA. None of them receives Housing Benefit, so the choice changes nothing there. If any did, the passport would follow the model's award; the age conditions belong in the ESA and JSA variables.
  • The universal credit limb is left out, as in Take Housing Benefit earnings disregards from net earnings only #1908's para 12 branch:
    • the model never pays Housing Benefit and Universal Credit to the same family (housing_benefit_eligible; 0 such benefit units on the Enhanced FRS in 2025, 2026 and 2027);
    • universal_credit depends on Housing Benefit through benefit_cap_reduction, so reading it here would be circular.
  • From 2026-27 only income-related ESA passports. gov.dwp.income_support.active and gov.dwp.JSA.income.active are false from 1 April 2026, so the model pays no Income Support or income-based JSA from 2026-27.

Interplay with open PRs

All figures are real runs of scratch merges on the same Enhanced FRS copy, for 2026 unless stated. They were run on the earlier base (main 7b9fc37, branch b6d45a5), before #1926 changed the LHA order, and have not been re-run on today's main.

Impact (Enhanced FRS 2024-25, real runs)

The base is main 2c94286, the main this head contains (it includes #1896, #1939, #1940, #1944 and #1950); the branch is this PR's head, 2febacb. The two trees differ only in this PR's own files. Re-run on 2026-10-03. The earlier run against main 3c48247 (head 678334c) gave the same changes, gainer counts and poverty figures to the precision shown; only the base totals and the 2027-28 mean gain (£2,048) differed. Runs against main 8b2e6e1 with #1896 merged in also gave the same changes.

2025-26 2026-27 2027-28
Housing Benefit, base £13.498bn £14.219bn £14.593bn
Change +£18.2m +£18.5m +£17.4m
Benefit units gaining 10.5k 9.4k 8.5k
Losing 0 0 0
Mean gain per gaining unit £1,730 £1,982 £2,051
Pension Credit, UC, CTR, benefit cap unchanged unchanged unchanged
AHC poverty, all people −0.0009pp −0.0012pp −0.0009pp
BHC poverty, all people −0.0013pp −0.0013pp −0.0010pp
  • Almost all the gain is to working-age benefit units. In 2026-27 every gaining unit is on income-related ESA; in 2025-26 most are (Income Support is most of the rest).
  • 22.4k working-age HB recipients were on these benefits in 2026. 13.6k of them already had applicable income at or below their applicable amount, so they were at maximum. The other 8.7k had applicable income above it and gain; 0.4k of them also had tariff income from capital.
  • A few mixed-age couples on income-related ESA also gain on this base. They are too few survey records to report separately. Replace generic child and adult flags with each programme's legal definitions #1896 makes guarantee_credit zero for a family that is not eligible for Pension Credit, so main's Guarantee Credit test no longer zeroes their income by accident. This PR's passport does it on the lawful ground (reg 5(1)(b)).
  • The caseload is essentially unchanged: almost every gainer already received some Housing Benefit.
  • Differential check: no benefit unit outside the passport changes (0 of 61,223 records, in each year).
  • The change in household net income equals the Housing Benefit change in each year.
  • Against main alone, without Replace generic child and adult flags with each programme's legal definitions #1896, the working-age effect is the whole effect:

Invariants

Property-tested in test_housing_benefit_income_related_benefit_passport_properties.py: Hypothesis, derandomize=True, 5 examples of up to 20 families each. The families cover single, couple, lone parent, couple with children, mixed-age and pension-age shapes, all three renting tenures and optional non-dependants, with random earnings, pensions, savings and awards.

  1. Receipt: true exactly when Income Support, income-based JSA or income-related ESA is positive.
  2. Passport: a family in receipt has nil applicable income, assessable capital and tariff income, and meets the capital limit.
  3. Maximum: every family's entitlement is at most maximum HB (rent, capped at the LHA rate for LHA tenants, less non-dependant deductions, floored at zero). A family in receipt gets exactly that.
  4. Metamorphic, income and capital: for a family in receipt, raising earnings, pensions and savings by the same amount changes neither entitlement nor eligibility.
  5. Metamorphic, receipt: adding a positive Income Support, income-based JSA or income-related ESA amount never lowers HB before the benefit cap, and never removes eligibility. After the cap it can, because those benefits count towards the cap. That is an intended difference, so the test reads housing_benefit_pre_benefit_cap.
  6. Ages: for social tenants with no non-dependants, a passported couple's entitlement is the rent whether its members are 40 and 35, 70 and 35, or 70 and 68.
  7. Contributory benefits: contribution-based JSA and contributory ESA never set the passport, and the family's savings remain its capital.

Plus the dataset-wide differential check above.

Mutation check. Seven mutations were each applied to a scratch copy of this branch (b6d45a5). Each was run against the new and changed YAML files and the property tests, with Hypothesis shrinking off. The unmutated control passes both. The YAML and the property tests each catch all seven:

  • M1, no income passport;
  • M2, no capital passport;
  • M3, the passport applied only where no one is over State Pension age (as Take Housing Benefit earnings disregards from net earnings only #1908's para 12 does);
  • M4, receipt ignores income-related ESA;
  • M5, receipt ignores Income Support;
  • M6, receipt also counts contribution-based JSA and contributory ESA;
  • M7, receipt needs more than £100 a year of a benefit instead of any amount.

Tests

  • New: housing_benefit_income_related_benefit_passport.yaml, with the seven cases above. A to E fail on main. The controls F and G have the same financial results on main; their files also ask for the new receipt variable, which main does not have.
  • New: in_receipt_of_income_support_jsa_ib_or_esa_ir.yaml, seven cases. They include a reported income-based JSA award screened out by the capital test, which is not receipt.
  • New: the property tests (about 70 s).
  • Run locally on 678334c: all 634 YAML tests under finance/benefit/family, gov/dwp and gov/local_authorities pass (including the new files), and so do the 1,750 tests/code_health tests and the property tests. CI runs the full suite.

Independent reviews (Opus 5.5 on subfleet; files in ~/reviews/uk-hb-ir-passport-2026-10-01/out/):

Research files (law texts, impact harness, scratch-merge runs and aggregate diagnostics) are in ~/reviews/uk-hb-ir-passport-2026-10-01/ on the author's machine. No record-level survey values are reported here.

axiom: uk/regulation/uksi/2006/213/schedule/5/paragraph/4, uk/regulation/uksi/2006/213/schedule/6/paragraph/5 TheAxiomFoundation/rulespec-uk#375 queued (extended with a dispatch-ready section: TheAxiomFoundation/rulespec-uk#375 (comment))

🤖 Generated with Claude Code

MaxGhenis and others added 3 commits October 1, 2026 11:23
…A(IR)

SI 2006/213 Sch 5 para 4 and Sch 6 para 5 (NI: SR 2006/405 Sch 6 para 4
and Sch 7 para 5) disregard the whole income and capital of a Housing
Benefit claimant on income support, income-based JSA or income-related
ESA. PolicyEngine counted these benefits as HB income and tapered them.

Add in_receipt_of_income_support_jsa_ib_or_esa_ir (a positive amount of
any of the three, for the benefit unit) and zero HB applicable income and
assessable capital when it holds. No age condition: reg 5(1)(b) applies
the working-age regulations to a mixed-age couple whose younger member is
on one of these benefits.

Fixes #1993

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>
- The contributory-benefit property control asserted that a family's
  savings stay its capital. A pension-age family with only contributory
  benefits can still be passported by its guarantee credit, so hold
  guarantee_credit at nil there.
- Base the three applicable-income arithmetic fixtures on earnings and
  working tax credit. They no longer rely on Child Benefit (disregarded
  by SI 2006/213 Sch 5 para 65), or on taking pension contributions
  from income other than earnings (reg 36(3)(b) takes them from
  earnings). The expected values are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 6 commits October 2, 2026 08:07
…lated-benefits

# Conflicts:
#	docs/book/programs/gov/dwp/housing-benefit.ipynb
#2000 lands after #1896. Merging #1896's head here lets CI test main,
#1896 and #2000 together and keeps #1896 from conflicting when #2000
merges. One conflict, in housing_benefit_assessable_capital.py: keep
#1896's claimant-and-partner allocation and add this PR's passport
(documentation sentence, the two Sch 6 / Sch 7 para 5 references and
the where condition).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis merged commit 0eccaaa into main Oct 3, 2026
7 checks passed
@MaxGhenis
MaxGhenis deleted the hb-passport-income-related-benefits branch October 3, 2026 15:56
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Merged at exact head 2febacb (gh pr merge --merge --match-head-commit 2febacb771cff99d9f8d89cfc610d72d36270d40); merge commit 0eccaaa.

Gates checked immediately before merging:

The merge follows Max's 2026-10-02 merge-on-gates rule for PE-UK statutory fixes (decision d786): CI green on the head, an independent review approving that exact head, the impact stated in the PR, and stack order allowing it.

MaxGhenis added a commit that referenced this pull request Oct 3, 2026
Resolves the HB docs notebook: main's text with #2000's passport paragraph,
plus this PR's reg 74 description after the reg 70 sentence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 3, 2026
Resolve the conflicts with the income-related benefit passport (#2000)
and the claimant-and-partner capital (#1896): a savings-credit-only
family's capital is the Pension Credit assessment, replacing both the
household share and person-level capital. Drop the note that Pension
Credit income leaves out Carer's Allowance, which main now counts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 8, 2026
Main's Housing Benefit passport (#2000) read the benefit unit's totals, so
another member's own award passported the claimant's earnings, income and
capital (HB Regs 2006 Sch 4 para 12, Sch 5 para 4, Sch 6 para 5). On the
merge with main, test_other_members_awards_never_change_the_readers failed
on housing_benefit_applicable_income, as the review on #2027 found.

- in_receipt_of_income_support_jsa_ib_or_esa_ir reads
  claimant_or_partner_jsa_income and claimant_or_partner_esa_income (the
  switch prepared for #2000 under task_6c880fe4). Main's earnings disregard
  and capital read it through housing_benefit_on_passporting_benefit.
- YAML: the prepared passport and earnings-disregard cases, and the
  review's case of a working mother whose non-dependant son reports ESA.
  The five excluded-member cases fail on the merge commit without this.
- A Merton case for a non-dependant couple whose partner works: only the
  payee is exempt, and the deduction follows joint income.
- Properties: the passport, disregard and capital join the family readers.
  The in-full income test is split: CTR income still adds each award; HB
  income is passported to nil, re-derived from Sch 5 para 4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.

Disregard the whole income and capital of HB claimants on IS, income-based JSA or income-related ESA (HB Regs Sch 5 para 4, Sch 6 para 5)

1 participant