Repository navigation
Disregard the whole income and capital of Housing Benefit claimants on IS, income-based JSA or income-related ESA - #2000
Merged
Conversation
…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>
This was referenced Oct 1, 2026
- 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>
…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>
Collaborator
Author
|
Merged at exact head 2febacb ( 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>
This was referenced Oct 4, 2026
Closed
8 tasks
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1993.
Problem
housing_benefit_applicable_incomeaddedincome_support,jsa_incomeandesa_incometo a Housing Benefit claimant's income and tapered it, andhousing_benefit_assessable_capitalcounted 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.
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).
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:
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 whenincome_support,jsa_incomeoresa_incomeis positive. It followsin_receipt_of_guarantee_credit: receipt means a positive amount paid.housing_benefit_applicable_income: nil when that holds (Sch 5 para 4). Addsdocumentationandreference.housing_benefit_assessable_capital: nil when that holds (Sch 6 para 5). Tariff income is then nil and the capital limit is met, sohousing_benefit_tariff_incomeandhousing_benefit_eligibleneed no change.housing-benefit.ipynb.housing_benefit_applicable_income.yamlused 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
jsa_incomeandesa_incomeadd up the members' reported awards, so a dependant's own award would count. But in the Enhanced FRS every member who reports Income Support, income-based JSA or income-related ESA is a claimant or partner (is_uc_claimant), in 2025 and 2026. Restricting the sums tois_claimant_or_partneris a follow-up (Count only the claimant's and partner's legacy awards in means tests and passports #2027 scopes these award readers).housing_benefit_eligible; 0 such benefit units on the Enhanced FRS in 2025, 2026 and 2027);universal_creditdepends on Housing Benefit throughbenefit_cap_reduction, so reading it here would be circular.gov.dwp.income_support.activeandgov.dwp.JSA.income.activeare 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.
Take Housing Benefit earnings disregards from net earnings only #1908 (earnings disregards; Sch 4 para 12). The two PRs merge cleanly in either order.
add(IS, JSA, ESA) > 0 & ~pension_age. It could usein_receipt_of_income_support_jsa_ib_or_esa_irand drop~pension_age, since reg 5(1)(b) puts a mixed-age couple on these benefits under SI 2006/213. That changes only the reported disregard, not Housing Benefit.Key the Housing Benefit Guarantee Credit passport on receipt #1927 (Guarantee Credit passport on receipt). Both PRs edit the same two passport lines, so whichever lands second has a small conflict.
passported = any_over_SP_age & benunit("in_receipt_of_guarantee_credit", period)block, then this PR's block, and returnwhere(passported | on_income_related_benefit, 0, ...)in both files. This was resolved and run.any_over_SP_age & guarantee_credit > 0) reads a guarantee credit computed for families who cannot get Pension Credit. So this PR changes no mixed-age family against main.guarantee_creditzero outside Pension Credit eligibility (see Impact).Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910 (working-age HB abolished from 1 July 2026 in GB). Clean merge. On Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910's branch this PR adds +£4.01m in 2026 (awards are paid for the part of the year before abolition) and £0 in 2027.
Same-line edits elsewhere:
documentationandreferencetohousing_benefit_applicable_income;housing_benefit_assessable_capital;Each resolution keeps both sides.
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.
guarantee_creditzero 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)).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.housing_benefit_pre_benefit_cap.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:
Tests
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.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.finance/benefit/family,gov/dwpandgov/local_authoritiespass (including the new files), and so do the 1,750tests/code_healthtests 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