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
This branch has not been deployed
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 they get maximum Housing Benefit: the eligible rent, less non-dependant deductions.The hand-computed YAML cases below are real runs of origin/main (7b9fc37) and this branch. 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 the same wording, with "Jobseekers Order" for "Jobseekers Act":
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 £2,250 moves to private pension income. Their expected values are unchanged, and the tests still check what they were written for (pension contributions halved and capped, tax and 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. Once Replace generic child and adult flags with each programme's legal definitions #1896 lands, the sums can be restricted tois_claimant_or_partner.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.
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.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, origin/main 7b9fc37 against this branch)
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 pass on both.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 property tests. CI runs the full suite.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