Skip to content

Apply Housing Benefit and national Council Tax Reduction non-dependant deductions as legislated - #2007

Draft
MaxGhenis wants to merge 16 commits into
mainfrom
hb-ctr-non-dep-exemptions
Draft

MaxGhenis wants to merge 16 commits into
mainfrom
hb-ctr-non-dep-exemptions

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2004. Also fixes the non-dependant half of #1934; its pensioner-gate half stays open.

Summary

Housing Benefit and the national Council Tax Reduction schemes now make non-dependant deductions the way the regulations set them. Law was read on legislation.gov.uk at the 7 April 2025 point in time, plus each year's version for the CTR scales.

Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55 is the same for these rules):

Rule Before Now
Banding, reg 74(2) right=True, so £192.00 a week fell in the band below and £0 paid nothing Bands include their lower edge ("not less than"). An in-work non-dependant with no income pays the reg 74(1)(b) amount
Remunerative work, reg 74(1)-(2), reg 6(1) and (6) Everyone banded on their own income Only a non-dependant working 16+ hours, and not on IS, JSA(IB) or ESA(IR), is banded. Anyone else pays the (1)(b) amount (£20.40 a week in 2026-27)
Couples, reg 74(3)-(4) Each member charged, on their own income One deduction for the couple, the higher, banded on the couple's joint income. Any other adult in the family (for example a young person on approved training) is a separate non-dependant on their own income
Non-dependant exemptions, reg 74(7), (8), (10) None Full-time students; State Pension Credit recipients; under-25s on Income Support, income-based JSA, or Universal Credit calculated on no earned income
Claimant exemption, reg 74(6) None No deduction for anyone if the claimant or partner is blind or receives AA, the DLA care component, the PIP daily living component or AFIP

Council Tax Reduction: the England pensioner (SI 2012/2885 Sch 1 para 8), Welsh (WSI 2013/3029 Sch 1 para 3 and Sch 6 para 5) and Scottish (SSI 2012/319 reg 48; SSI 2012/303 reg 67, then SSI 2021/249 reg 90) schemes.

  • Scales. These used the Housing Benefit scale. Each scheme now has its own weekly scale for 2013-14 to 2026-27, with the amending instrument cited for every year.
    • 2026-27: England £5.20 to £15.95 on £279/£485/£605; Wales £6.70 to £20.05 on the same bands; Scotland £5.55 to £16.55 on £286/£497/£614. The HB scale was £20.40 to £131.45.
    • Pensioner and working-age scales are identical in Wales and in Scotland in every year.
    • From 2027-28 the scales are uprated by gov.benefit_uprating_cpi, as Set DWP benefit rates to the announced amounts, not CPI projections #1925 does for the HB scale.
  • Banding and couples. As for HB. In addition, Wales's working-age scheme deducts for both members of a couple with a Universal Credit award (Sch 6 para 5(3), "other than where there is an award of universal credit"). I read that award as the non-dependant couple's.
  • Exemptions, at any age (para 8(7)-(8) and equivalents):
    • full-time students;
    • non-dependants on IS, income-based JSA, income-related ESA or State Pension Credit. Scotland's working-age scheme, from 1 April 2022, also exempts one whose partner is on IS, income-based JSA or income-related ESA and who is not on Universal Credit. SSI 2021/249 reg 90(8)(a) exempts a "qualifying income-related benefit claimant", which reg 4(1) defines as one "who is, or who has a partner who is," on one of them. The definition opens with "an applicant", but read that way the limb could never apply to a non-dependant, so it is read for the non-dependant. Before April 2022 (SSI 2012/303 reg 67(8)(a)), and in Scotland's pension-age scheme (SSI 2012/319 reg 48(8)(a)), only the person on the benefit is exempt;
    • an adult for whom someone else is entitled to child benefit (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents). Entitlement needs a claim (SSAA 1992 s.1(1)), so the family must claim child benefit (would_claim_child_benefit). An election not to be paid keeps entitlement (s.13A), so the opt-out flag is not read;
    • from the year each scheme added it, Universal Credit calculated on no earned income: England 2015-16 (SI 2014/3312), Wales 2015-16 (WSI 2015/44), Scotland 2016-17 (SSI 2016/81).
  • Applicant exemption (para 8(6)): council_tax_reduction_household_has_non_dep_exemption existed but only the local schemes used it. It now applies to the national schemes too.
  • English working-age local schemes (Merton, Kingston, Newham, Westminster, Oxford) keep their own variables. They share council_tax_reduction_individual_non_dep_deduction_eligible, so the national exemptions are applied inside council_tax_reduction_individual_non_dep_deduction, not there.

New variables:

  • housing_benefit_non_dep_deduction_exempt (Person)
  • housing_benefit_non_dep_deductions_claimant_exempt (BenUnit)
  • council_tax_reduction_non_dep_deduction_exempt (Person)

New parameters:

  • HB remunerative_work_hours (16)
  • HB income_related_benefit_age_limit (25)
  • per CTR scheme, non_dep_deduction/{amount, remunerative_work_hours, exempt_universal_credit_without_earned_income}

HB age_threshold (18) now starts in 2006, when the 2006 Regulations were made, not 2019.

Inputs and choices

  • Full-time student: current_education != NOT_IN_EDUCATION or in_HE, the helper the local schemes already use. In the Enhanced FRS, current_education comes from FTED/EDUCFT ("in full-time education"), so it is the full-time flag. Note the age-based default: with no input, an 18- or 19-year-old is in tertiary education and so exempt.

  • Claimant or partner: is_claimant_or_partner (Replace generic child and adult flags with each programme's legal definitions #1896), the SSCBA s.137 couple a benefit unit is formed around: the claimant and at most one partner, supplied by the dataset or inferred from the benefit unit. That matches the HB Regs 2006 (regs 2(1), 19) and the CTR regulations (reg 2(1)), where a family's other members are the children and young persons. It is used for:

    • the claimant exemption (HB, and council_tax_reduction_household_has_non_dep_exemption, which the English local schemes also read);
    • joint income, which counts only the couple;
    • the one-deduction-per-couple rule, which covers only the couple, while any other member is deducted separately;
    • benefit-receipt exemptions, which count only for the claimant or partner of the award.
  • Gross income: a person's own income is their taxable income (total_income, floored at zero) plus statutory sick, maternity and paternity pay, which are earnings (HB reg 35(1)(i)) that the model keeps outside total_income, and Maternity Allowance. A claimant or partner of the non-dependant's family is banded on the couple's own income plus the family's UC, CTC, WTC, child benefit, Income Support, income-based JSA, income-related ESA and Pension Credit. Anyone else in the family is banded on their own income.

    • UC is taken after the benefit cap. The cap is applied to the capped benefits other than Housing Benefit, which a non-dependant family does not receive, and reduces the award by the excess less the childcare costs element, or not at all where that element is greater (UC reg 81(1)-(2)). universal_credit itself depends on HB through the cap, so using it would be circular.
    • The disability benefits disregarded by reg 74(9) are untaxed and not added.
    • Other untaxed income the regulations count, such as maintenance and student support, is not added. The income-related awards are read from the benefit unit's total, which on main includes any other member's report (see "On a benefit").
  • On a benefit: the IS, JSA(IB), ESA(IR) and SPC exemptions, and HB reg 6(6), apply only to the person the award is payable to (HB reg 2(3)-(3A), "payable to him"). That is the member who reports the award, or the benefit unit's head where none does. UC counts for both joint claimants (reg 2(3B), entitlement). The award is read from the benefit unit's total, which on main includes any other member's report. Count only the claimant's and partner's legacy awards in means tests and passports #2027 adds payee-only is_on_income_support, is_on_income_based_jsa and is_on_income_related_esa, which read the couple's own award. A follow-up (task_6c880fe4) switches these exemptions to them once both PRs are on main. In the Enhanced FRS, no member outside the couple reports these awards (Count only the claimant's and partner's legacy awards in means tests and passports #2027's analysis), so the interim reading changes nothing in the data.

  • HB reg 6(6): the person an IS, JSA(IB) or ESA(IR) award is payable to is treated as not in remunerative work, so pays the lowest amount whatever their hours.

  • UC entitlement: universal_credit_pre_benefit_cap > 0, because universal_credit depends on Housing Benefit through the benefit cap and would be circular.

  • "Earned income" in the UC limb (UC regs 52-62):

    • employment income plus statutory sick, maternity and paternity pay, less relievable pension contributions (reg 55(4)-(5)). Statutory adoption, shared parental, parental bereavement and neonatal care pay have no input;
    • self-employed earnings, with a loss counting as nil and less any relievable pension contributions not already deducted from employed earnings (reg 57(2), steps 3-4). The minimum income floor applies where the UC model applies it (reg 62); it doesn't apply in the start-up period (reg 62(5));
    • other paid work.

    Testing the person's own earnings rather than a joint award's is an interpretation. The limb reads "the award is calculated on the basis that the non-dependant does not have any earned income", and a joint award is calculated on combined earnings (UC reg 22(1)(b)). I found no DWP guidance that settles it. The local-scheme work on Charge non-dependant deductions for non-dependants within the claimant's benefit unit #2017 keeps the couple reading for the five English local schemes.

Not modelled

  • Pension-age HB's 26-week deferral of a deduction increase (SI 2006/214 reg 59(10)-(13)), and the CTR applicant exemption's protection while AA, DLA or PIP is suspended in hospital (para 8(6)).
  • HB: a working full-time student's summer vacation (reg 74(7)(d)), and under-25s on assessment-phase income-related ESA (no ESA group input).
  • Wales: ESA(IR) recipients in the work-related activity group, who are not exempt. They are treated as exempt.
  • CTR: persons disregarded for council tax discounts (LGFA 1992 Sch 1) other than students and, under para 3, adults for whom someone else is entitled to child benefit, which is modelled. is_apprentice has no £195 earnings cap, so it isn't used.
  • All schemes: youth training allowances, a normal home elsewhere, long hospital stays, prison, armed forces operations, and joint-occupier apportionment (reg 74(5), para 8(5)). Apportionment is Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006.
  • Gross income:
    • maintenance and student support are not added, though inputs exist (a follow-up);
    • other untaxed income besides statutory pay, Maternity Allowance and the family benefits listed above is not added;
    • statutory adoption, shared parental, parental bereavement and neonatal care pay have no inputs;
    • a self-employed non-dependant's gross income uses profit, with any loss floored at zero, because turnover has no input (DWP HB guidance A5.551 counts total income with no deduction for business expenses).
  • The benefit cap basket in the after-cap UC leaves out bereavement allowance and the widow's benefits (no inputs). Main's benefit_cap_reduction also leaves out Maternity Allowance, which this PR's helper now counts (a follow-up).
  • Joint-claim JSA couples. Both members are on income-based JSA (HB reg 2(3)(c)), but the model has no joint-claim input, so only the payee is treated as on it.
  • Scottish disability assistance (ADP, PADP, CDP, Scottish adult DLA) for the claimant exemption, which has no separate input.
  • Before 2015 the model reads parameters at 1 January, not in fiscal years. That is unchanged.

Review

  • Round 1 (independent Subfleet review of 59c7082, Opus 5.5 after a rate-limited first attempt) asked for changes.

    • It found five P1s:
      1. is_adult as claimant or partner;
      2. a dependent child's income counted as the couple's;
      3. HB reg 6(6);
      4. self-employed losses cancelling wages in the UC test;
      5. UC, tax credits and child benefit missing from gross income.
    • It also found two omissions to disclose.
    • All are fixed in this head, each with a test that fails on 59c7082 (non_dependant_deduction_review_cases.yaml and new cases in household_benefits_individual_non_dep_deduction.yaml). The response is in the PR thread.
  • What round 1 confirmed: 288 CTR fixture and parameter comparisons and the 11 HB 2026-27 values; no leak into the five English local schemes; no dependency cycle in 48 household-years; the full HB, UC and local-authority YAML suites passing.

  • Round 2 (Subfleet review of 6257277) asked for changes. Fixed in b7f9763 (e92b5d1 before the rebase), each with a test that fails on 6257277 (the "Round 2" section of non_dependant_deduction_review_cases.yaml):

    • UC earned income per regs 55 and 62: SMP, pension contributions and the minimum income floor;
    • benefit awards counted only for the person they are payable to;
    • UC after the benefit cap in gross income;
    • the LGFA Sch 1 para 3 disregard.
  • Explicit young partners (round 2's identity finding): fixed by adopting Replace generic child and adult flags with each programme's legal definitions #1896's is_claimant_or_partner after rebasing onto it. The local helper is gone. The "Round 3" section of non_dependant_deduction_review_cases.yaml adds round 2's three cases: a blind 16-year-old partner of a Welsh 19-year-old applicant (HB and CTR £0), a non-dependant couple with a partner at school banded on joint income (HB £3,346.20, CTR £551.20), and a 17-year-old partner's PIP in Merton (deduction £0). Each fails with the partner's is_claimant_or_partner set to false.

  • The round 1 and round 2 responses are in the PR thread.

  • Round 3 (Subfleet review of 452d6bb, the content rebased on Replace generic child and adult flags with each programme's legal definitions #1896) asked for changes. It confirmed every round-2 finding resolved. Fixed in 084e1f9, each with a case in the "Round 3 of the independent review" section of non_dependant_deduction_review_cases.yaml that fails without the fix:

    • P1: statutory sick, maternity and paternity pay, Maternity Allowance and the family's income-related benefits now count in gross income;
    • P1: statutory paternity pay is earned income for the UC limb (reg 55(4)(c));
    • P1: relievable pension contributions come off self-employed earnings when there are no employed earnings (reg 57(2), step 4);
    • P2: Scotland's working-age scheme exempts the partner of an IS, JSA(IB) or ESA(IR) claimant from April 2022 (SSI 2021/249 reg 90(8)(a), reg 4(1)). Contrast cases cover 2021-22 and the pension-age scheme;
    • P2: the after-cap UC in gross income keeps the cap's childcare protection (UC reg 81(1)-(2));
    • P2: the LGFA para 3 disregard needs a child benefit claim, not just qualifying young person status.
    • Tests: the property oracle now derives the claimant and applicant exemptions from the generated disability inputs and checks the model's flags against them, instead of trusting them. The generator now varies statutory pay, pension contributions, the start-up period, which member reports the award, and whether child benefit is claimed.
    • Wording: the impact narrative is rederived from the new runs (explain.py), the CTR recipient metric now counts national-scheme households only, and three YAML comments are corrected.
    • The review was cancelled by Subfleet a minute after it wrote its report; the report and the response are in the PR thread.
  • Round 4 (Subfleet review of 7a5cbe2, GPT-6.1 Sol) asked for changes. It confirmed every round-3 finding resolved, the Scottish reading defensible and disclosed, all 72 impact-table cells, and no new cycles or local-scheme leaks. Fixed in the round-4 commit, each with a case in the "Round 4 of the independent review" section that fails without the fix:

    • P1: Maternity Allowance is a capped benefit (Welfare Reform Act 2012 s.96(10)(i)), so it now counts in the after-cap UC used for gross income;
    • P1: a self-employment or property loss no longer cancels other gross income (DWP HB guidance A5.551);
    • P3: wording in the impact and mutation sections, and the "not modelled" list.
  • Round 5 (a delta review of the round-4 fixes on the final head) gates the merge.

Invariants

These hold for every input:

  1. An exempt non-dependant's deduction is zero, for HB and for CTR.
  2. An eligible, non-exempt non-dependant pays between the scale's lowest and highest amounts. The national CTR deduction is zero in English working-age households.
  3. A non-dependant working under 16 hours pays the lowest amount, whatever their income.
  4. A claimant or applicant exemption zeroes the family's deductions.
  5. A family's deductions are the sum over the other families in the household of their higher member's amount (both members for a Welsh working-age UC couple), recomputed independently.
  6. Monotonicity: raising a non-dependant's income never lowers any deduction.
  7. Exhaustively, in every year 2015-2030 (2019-2030 for HB), uprated years included: an income at a band's lower edge pays that band's amount, and the next lower representable income pays the band below's.
  8. Differential: every CTR parameter value equals the enacted sums in tests/fixtures/council_tax_reduction_non_dependant_deductions.yaml.
  9. Differential: the exemption flags equal a reading of the provisions computed straight from the inputs.

Tests

  • YAML (all with hand-worked expectations from the law):

  • test_non_dependant_deduction_properties.py: Hypothesis populations for invariants 1-6 and 9 (with explicit examples for the rare Welsh-couple and under-25 cases), the exhaustive edge check (7), and the fixture differential (8).

  • Scale verification: an independent check (Subfleet, GPT-6.1 Sol) of all 294 CTR scale values against the amending instruments as made returned ALL MATCH, 42 scheme-years. It also confirmed that every instrument applies from 1 April, and that Wales's and Scotland's pensioner and working-age scales are identical. Three drafting points don't change any value:

    • the Welsh-language text of WSI 2016/50 has £195 where the English has £194 (the parameter uses the English text and says so);
    • SI 2012/3085 left "x 1/7" off two 2013-14 English band amounts;
    • SSI 2021/249 saves the 2021-22 working-age scale for 1-3 April 2022.
  • Mutation testing (on 7a5cbe2, mutate3.py): 31 hand-made mutations, each reverting one rule. They cover HB banding, exemptions, couples, the claimant exemption, reg 6(6) and the under-25 limit; CTR banding, exemptions, the Welsh and Scottish couple rules, the applicant exemption, the UC limb and LGFA para 3; and the shared gross-income, earned-income, cap and claimant-or-partner rules.

    • The YAML suites kill 30. The 31st, the Scottish rule's "not on Universal Credit" condition, was killed by the property tests, and the round-4 commit adds a YAML case that kills it too.
    • The property tests kill 21. The ten survivors change specific amounts or inputs the generator doesn't vary: family benefits, statutory pay, the cap and its childcare protection, the floor, self-employed pensions, the child benefit claim, and the any-adult couple and claimant mutations. YAML cases kill all ten.
  • Commands:

    Targeted tests only. The full suite is left to CI.

Impact (Enhanced FRS 2024-25)

Real runs of main (9eccc54) and this branch (d872f57) on the same dataset. Every row equals the run of 7a5cbe2 against main 6fa14dc, before the round-4 fixes; the fixes change no aggregate in this dataset. Nothing is scaled. compare.py and decompose.py produce the tables; explain.py and explain_ctr.py produce the figures in the bullets (weighted aggregates only).

Change 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31
Housing Benefit (£m) +17.3 +7.5 +7.5 +8.1 +8.8 +8.9
Council Tax Reduction (£m) +3.1 +3.1 +3.3 +3.6 +3.8 +4.0
Household net income (£m) +20.3 +10.5 +10.9 +11.6 +12.6 +12.9
HB families gaining (k) 5.9 4.2 4.2 4.2 4.5 4.5
HB mean gain (£ a year) 3,341 2,394 2,408 2,415 2,378 2,385
HB families losing (k) 2.2 2.2 2.2 1.8 1.6 1.6
HB mean loss (£ a year) 1,074 1,136 1,136 1,155 1,162 1,162
CTR families gaining (k) 2.9 3.1 3.1 3.1 3.1 3.7
CTR mean gain (£ a year) 1,041 999 1,083 1,150 1,210 1,093
CTR caseload (k) +2.2 +2.3 +2.3 +2.3 +2.4 +2.9
People in poverty, BHC (k) +0.0 +0.0 +0.9 +0.9 +0.9 +0.9
People in poverty, AHC (k) +0.0 +0.0 +0.0 +0.0 -0.0 +0.0
  • CTR losers, and the changes in Universal Credit and Pension Credit, round to zero (under 0.05k families; under £0.05m).

  • 2025-26 is larger. That year 15.7k non-dependants live with HB recipients (14.1k in 2026-27), and HB recipients' non-dependant deductions are £23.6m (£14.1m in 2026-27). The effect grew with main, not with this branch:

    • against main 3c48247 (1 October) it was +£7.0m (compare4.md);
    • between that main and this one, the 2025-26 HB caseload rose from 1,663.5k to 1,671.1k (base4.json, base6.json).

    2025-26 also uses main's 2025 HB scale, which Set DWP benefit rates to the announced amounts, not CPI projections #1925 corrects.

  • Housing Benefit, decomposed. Separate real runs of this branch for 2026-27, adding one part at a time (variable overrides in a separate process per run):

    Step HB (£m)
    Inclusive bands alone, everyone banded on their own taxable income -7.4
    Only remunerative work banded (reg 6(6) included), on the couple's gross income (statutory pay, family UC after the cap, tax credits, child benefit and income-related benefits) +0.4
    One deduction per couple, other members separate 0.0
    Non-dependant exemptions +4.2
    Claimant exemption +10.2
    Total +7.5
  • Who is affected (2026-27). 14.1k non-dependants live with HB recipients:

    • 3.6k are now exempt;
    • 11.3k work under 16 hours a week, and the 8.0k of them who are not exempt pay the lowest amount whatever their income;
    • the deductions taken from HB recipients fall from £14.1m to £6.0m.
  • HB losers (2026-27). All 2.2k losing families live with a charged non-dependant who has no taxable income, and who now pays the lowest amount (£20.40 a week); before, zero income paid nothing. Losers with a charged non-dependant who has positive income round to zero (under 0.05k). 2.0k lose exactly £20.40 a week. In 2027-28, 0.9k people move below the BHC poverty line, all in households whose HB falls, and under 0.05k move above it; 2028-29 to 2030-31 show the same net +0.9k.

  • Council Tax Reduction.

    • Almost all in England's pensioner scheme: £3.04m of the £3.06m in 2026-27. The rest is in Scotland (£0.02m), and by 2030-31 Wales adds £0.05m. Very few applicant families with a non-dependant deduction receive CTR in either run: 3.0k of 621k in England's pensioner scheme, and under 0.05k of 122k in Wales and 167k in Scotland (2026-27). So lower deductions rarely change an award outside England.
    • Where deductions disappear. Among national-scheme CTR recipients, non-dependant deductions fall from £14.9m to under £0.1m (2026-27). Of the 13.6k recipient households with a non-dependant, 86% have an applicant or partner who is blind or on AA, DLA care, PIP daily living or AFIP. In the rest, 1.9k of the 2.2k non-dependants are exempt themselves.

Merge order and overlaps

Axiom

axiom: uk/regulation/uksi/2006/213/74, uksi/2006/214/55, uksi/2012/2885/schedule/1/paragraph/8, wsi/2013/3029/schedule/1/paragraph/3 and schedule/6/paragraph/5, ssi/2012/319/48, ssi/2021/249/90 queued TheAxiomFoundation/rulespec-uk#407

  • HB. rulespec-uk's HB pipeline (uk/policies/housing_benefit_composed_entitlement_pipeline.yaml) has the reg 74 bands for 2026-27 only, with inclusive >= edges. But it bands every non-dependant, multiplies one amount by a non-dependant count, and has no couple rule or exemptions. The 2025-26 amounts are in rulespec-uk#382.
  • CTR. Every CTR spine takes non-dependant deductions as a supplied input.
  • The issue. All seven provisions are in axiom-corpus. rulespec-uk#407 is dispatch-ready: module paths, verbatim law, required outputs, a pasteable review_finding, and companion tests from the same 2026-27 law as this PR's YAML tests. It carries the pe-parity label.
  • Why queued. The signed encodes are OpenAI-billed, so they need Max's approval.

🤖 Generated with Claude Code

Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/household_benefits_individual_non_dep_deduction.yaml, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_individual_non_dep_deduction_eligible.yaml::Eligible, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_individual_non_dep_deduction_eligible.yaml::Exempt non-dependant is ineligible, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_non_dep_deduction_chain.yaml::A zero-income full-time student does not reduce the claimant's HB, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_non_dep_deduction_chain.yaml::A zero-income non-student non-dependant pays the lowest deduction, policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/non_dep_deduction/housing_benefit_non_dep_deduction_exempt.yaml

@MaxGhenis

MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator Author

Composition note: #2015 (stacked on #2009 → #2006) deletes the two household flags this PR reads. council_tax_reduction_household_has_pensioner becomes council_tax_reduction_pensioner and council_tax_reduction_household_has_non_dep_exemption becomes council_tax_reduction_applicant_has_non_dep_exemption; both are BenUnit, so each jointly liable claimant uses its own family. #2015 does not add the national applicant exemption; that stays here. Whichever lands second should do three things:

  1. Read the applicant's own exemption flag for applicant_exempt.
  2. Do not substitute the family flag into each_member_deducted: that is evaluated on the non-dependant family, and Sch 6 para 5(3) turns on the applicant's scheme. Instead build two household pools of non-dependant families' deductions, the higher member's and the sum for a non-dependant couple on UC. Each claimant takes the sum pool when it is in Wales and its own council_tax_reduction_pensioner is false, and the higher-member pool otherwise.
  3. Pick England's pensioner scale in the person-level variables by country only. Each claim's own scheme already decides whether its award uses it. The two tests that pin "no national deduction in English working-age households" then check that the working-age award is unaffected instead.

See the "National schemes and the exemption" section of #2015. (Corrected per this PR's author.)

MaxGhenis added a commit that referenced this pull request Oct 1, 2026
Cherry-picks #2007 (59c7082: HB reg 74 / SPC
reg 55 bands, remunerative-work test, couple rule and exemptions; national
CTR own scales and exemptions) onto the in-unit non-dependant change (#2014)
and the #2006 rent shares, as agreed with #2007's author:

- HB and national CTR aggregation: one deduction for a non-dependant couple
  (the claimant and partner of a non-dependant family, the higher amount;
  both for a Welsh working-age couple on UC), any other adult in that family
  counted separately, in-unit non-dependants pooled and apportioned by rent
  share (HB) or joint-liability share (CTR), and the claimant's exemption.
- Joint income for the bands is the couple's only (reg 74(4), para 8(4));
  another adult is banded on their own income.
- The IS, income-based JSA, income-related ESA, Pension Credit and UC
  exemptions apply only to the award's claimant and partner.
- The HB claimant exemption reads is_claimant_or_partner, not is_adult.

Drops council_tax_reduction_pension_credit.yaml and the
in_receipt_of_guarantee_credit output, which depend on #1909 (main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 1, 2026
Cherry-picks #2007 (59c7082: HB reg 74 / SPC
reg 55 bands, remunerative-work test, couple rule and exemptions; national
CTR own scales and exemptions) onto the in-unit non-dependant change (#2014)
and the #2006 rent shares, as agreed with #2007's author:

- HB and national CTR aggregation: one deduction for a non-dependant couple
  (the claimant and partner of a non-dependant family, the higher amount;
  both for a Welsh working-age couple on UC), any other adult in that family
  counted separately, in-unit non-dependants pooled and apportioned by rent
  share (HB) or joint-liability share (CTR), and the claimant's exemption.
- Joint income for the bands is the couple's only (reg 74(4), para 8(4));
  another adult is banded on their own income.
- The IS, income-based JSA, income-related ESA, Pension Credit and UC
  exemptions apply only to the award's claimant and partner.
- The HB claimant exemption reads is_claimant_or_partner, not is_adult.

Drops council_tax_reduction_pension_credit.yaml and the
in_receipt_of_guarantee_credit output, which depend on #1909 (main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Response to review r1 of #2007 (59c7082)

The review asked for changes and was right on all five P1s. Each is fixed below with the law, the change, and a test that fails on 59c7082 and passes now.

# Finding Disposition Change Test
1 is_adult is not "claimant or partner" (an 18-year-old dependant's PIP exempted the claimant; a 17-year-old claimant's PIP did not) Fixed New helper is_claimant_or_partner: the benefit unit's head, or any member who is not an SSCBA s.142 child or qualifying young person (is_child_or_qualifying_young_person_for_child_benefit, already on main). That is how HB Regs 2006 regs 2(1) and 19 and the English and Welsh CTR regs (reg 2(1)) define a family's members other than claimant and partner. It is used in the HB claimant exemption and in council_tax_reduction_household_has_non_dep_exemption (which the local schemes also read) non_dependant_deduction_review_cases.yaml: "A dependent 18-year-old's PIP does not exempt the claimant" (HB £6,232.20, CTR £691.60); "A 17-year-old claimant's PIP exempts their family"
2 A dependent child's income was added to the couple's Fixed Joint income (reg 74(4), para 8(4)) sums only the claimant and partner of the non-dependant's family. Other members are banded on their own income. One deduction per couple (reg 74(3)) covers only the couple; each other member is deducted separately "A parent non-dependant is banded on their own income…" (HB £1,060.80, CTR £270.40); household_benefits_individual_non_dep_deduction.yaml "A dependent young person in the family is banded on their own income"
3 HB reg 6(6): a person on IS, JSA(IB) or ESA(IR) is not in remunerative work Fixed The HB individual deduction treats the claimant or partner of an IS, JSA(IB) or ESA(IR) award as not in remunerative work. CTR exempts those recipients outright, so it needs no equivalent "On income-related ESA, 16 hours is not remunerative work" (£1,060.80)
4 A self-employment loss cancelled wages in the UC no-earned-income test Fixed has_earned_income: employment income plus self-employed earnings floored at nil (UC reg 57(2) step 3) "A self-employed loss does not cancel wages…" (both exemptions false; HB £1,060.80, CTR £270.40)
5 Taxable total_income omits UC, tax credits and child benefit Fixed Gross income for a claimant or partner adds the family's UC (before the benefit cap, which would be circular through HB), CTC, WTC and child benefit to the couple's taxable income. The disability benefits disregarded by reg 74(9) are still excluded, since they are untaxed and not added "Universal Credit counts towards gross income" (£290 a week, £3,346.20)

Also from the review:

  • Benefit receipt (IS, JSA(IB), ESA(IR), SPC, UC) now exempts only the claimant or partner of the award, in both exemption variables.
  • Two omissions are now listed as not modelled, because no input exists:
    • pension-age HB's 26-week deferral of a deduction increase (SI 2006/214 reg 59(10)-(13));
    • the CTR applicant exemption's protection while AA, DLA or PIP is suspended in hospital (para 8(6)).
  • The property tests' generator now includes dependent young people with their own income (in full-time education, or on approved training and so not exempt) and self-employed losses. The oracles use the claimant-or-partner rule, reg 6(6) and the floored earnings.
  • The Welsh "award of universal credit" reading stays as stated in the PR description, an interpretation.

Not changed: the review's UNVERIFIED items on impact (exact zeros, decomposition, poverty causation). The impact is rerun on the new head after the host is free (the Axiom build has priority until about 10:00Z). The PR description's impact section is replaced with the rerun.

MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Applies #2007 at 6257277 (59c7082 plus the
r1 review commit) onto #2017 (in-unit non-dependants, #2006 rent shares):

- One definition of claimant or partner: #1896's is_claimant_or_partner
  variable. #2007's proxy helper (benefit-unit head or any member who is not
  a Child Benefit child or QYP) is removed and its call sites read the
  variable.
- HB and national CTR aggregation: another family's non-dependants per
  deduction_per_family (the couple's higher amount, both for a Welsh
  working-age UC couple, and each other member's own), counted once per
  family and apportioned by rent share (HB) or joint-liability share (CTR);
  a family's own in-unit non-dependants in full (LHA Guidance Manual 2.093;
  HBGM A5 5.622); the claimant exemptions. charged_to_other_families
  ("household minus own family") is no longer used and is removed.
- #2007's property oracle reads is_claimant_or_partner; the in-unit
  property oracle counts a couple once and applies the claimant exemptions.
- Drops council_tax_reduction_pension_credit.yaml and the
  in_receipt_of_guarantee_credit output (#1909, main only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Carries 2d54628 (review r2 F3-F5) onto the composition with #2007:
- HB pools every non-dependant family amount, in-unit ones included, through
  #2007's deduction_per_family and apportions it by rent share; a boarder or
  lodger also bears its own in full; the claimant exemption still zeroes the
  claim.
- National CTR pools every family's amount (one per couple, the higher, or
  both for a Welsh working-age UC couple), replaces the applicant's own
  family amount with its in-unit non-dependants only, and apportions by
  joint-liability share; the per-applicant exemption still zeroes the claim.
- CTR eligibility includes a lodger's adult son; the local schemes stay
  neutral.

The blind-sharer case now expects the non-exempt head to bear half of the
sharer's son (para 8(5)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Response to review r2 of #2007 (6257277)

The review asked for changes again and was right on all five P1s. Findings 2-5 are fixed in the next commit, each with a YAML test that fails on 6257277 (non_dependant_deduction_review_cases.yaml, "Round 2" section). Finding 1 is fixed by adopting #1896's is_claimant_or_partner when #1896 lands; it is about to merge, and its owner asked #2007 to use it.

# Finding Disposition Change Test
1 Claimant or partner via "head or not a child benefit QYP" misclassifies explicit young partners (HB reg 2(1) "partner"), and in the reverse direction a third adult; this reaches the English local schemes through the shared exemption flag Fixed with #1896 The helper is replaced by #1896's is_claimant_or_partner, which caps the set at the head and one partner (SSCBA s.137 couple) and can be supplied as an input for explicit couples. The r1 original student case also resolves, since #1896 presumes a 19-year-old 26 years younger than the parent is their child The r2 explicit-couple cases are added after the rebase, along with the r1 cases
2 "No earned income" missed SMP, relievable pension contributions and the minimum income floor (UC regs 55 and 62) Fixed has_earned_income: employment income plus SSP and SMP, less relievable pension contributions (reg 55(4)-(5)); self-employed earnings, a loss nil (reg 57(2)), with the minimum income floor where the UC model applies it (reg 62); and other paid work SMP £8,000 → not exempt (£1,060.80/£270.40); wages all paid into a pension → exempt (£0/£0); MIF applies → not exempt (£1,060.80/£270.40)
3 ESA(IR) receipt was extended to the working partner (HB reg 2(3A): "payable to him") Fixed is_award_payee: IS, JSA(IB), ESA(IR) and SPC count only for the member who reports the award, or the head where none does; UC still counts for both joint claimants (HB reg 2(3B): entitlement). Used for the exemptions and for HB reg 6(6) Recipient and partner earning £210 a week at 16 hours → HB £2,436.20, CTR £270.40
4 Pre-cap UC overstated gross income (UC reg 81) Fixed Gross income now uses UC after the benefit cap. The cap is applied to the capped benefits other than Housing Benefit, which a non-rent-liable family does not receive; this avoids the HB → UC → cap → HB cycle Pre-cap £30,000, cap £20,000 → HB £5,470.40 (365 band), CTR £551.20
5 CTR's LGFA 1992 Sch 1 para 3 disregard (an adult for whom another person is entitled to child benefit) was omitted although inputs exist Fixed The CTR exemption adds an adult qualifying young person (child benefit, s.142) who is not the claimant or partner of their family 19-year-old on approved training with child benefit → CTR exempt, parent alone £270.40; HB still charges both (£3,497.00)

On the property tests, the review said the oracles repeat the implementation's classification. They now take the payee as the head (the generator reports no awards) and read the child benefit QYP flag from the model. After the #1896 rebase they read is_claimant_or_partner from the model, which is not code under test. The generator now draws dependent young people and losses. SMP, pension and MIF cases are pinned in YAML rather than generated.

@juaristi22

Copy link
Copy Markdown
Collaborator

Codex review — changes required

Reviewed commit e92b5d107d48fe6d6cd62927059e092a75d585c2. 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] Replace the QYP-complement helper with actual claimant/partner roles

The current helper _non_dependants.py:28–36 still defines the claimant/partner set as the head or anybody who is not a Child Benefit child/qualifying young person. That is neither a relationship test nor a two-person limit. It can exclude an actual young partner in education and include a third adult. The helper controls the new disability exemptions, joint gross income and one-deduction-per-couple aggregation, so this is a material remaining integration blocker. The author's latest response also explicitly defers this finding to adoption of #1896; the captured head has not adopted it.

Executed illustration: a reported continuing HB award for an intended couple aged70/19, both parent-flagged, with the19-year-old in qualifying education and receiving standard PIP daily living, plus a separate40-year-old working non-dependant earning£30,000. The QYP complement excludes the young partner and sets the claimant exemption false. With £10,000 council rent and HB assessable income isolated at zero, the deduction is£6,232.20 and final HB£3,767.80. A control supplying the legally appropriate claimant/partner disability exemption gives deduction£0 and final HB£10,000. This snapshot lacks the canonical explicit claimant/partner input; the diagnostic's relationship is stated as the intended premise, while the code defect is the inability of this helper to honor that premise.

Adopt the canonical relationship/role variable after the prerequisite lands, then add explicit young-partner and third-adult regression cases through final awards. Do not repeat the other four r2 findings: the current tree now includes statutory sick/maternity pay, employed pension deductions and MIF; the benefit-payee test; UC after the benefit cap; and CTR's adult Child Benefit QYP exemption. Confidence: high for the current unresolved helper/integration defect.

Independent source review corroborates the actual-couple and claimant/partner conditions in HB regulation 74(3)–(6), HB interpretation and England CTR paragraph 8. The overlapping code and policy finding is counted once.

The current tree addresses round-two findings 2–5; this review does not repeat those stale blockers. Current 2026 scale values were corroborated. The remaining confirmed blocker is adoption of the canonical claimant/partner roles and coverage of their downstream HB/CTR behavior.

Outstanding evidence/decision:

  • The prerequisite claimant/partner implementation is absent, so the eventual composed behavior cannot yet be tested.
  • Historical CTR rates/dates for 2013–2025 were not all corroborated. Complete UC net-earnings treatment, including self-employed pension contributions, remains source-unresolved and is not asserted as a second confirmed defect.

Validation: 123 focused tests passed, including round-two regression tests. An executed controlled diagnostic isolates the missing partner disability exemption's final-HB effect. The intended relationship is an explicit scenario premise, and supplied benefits/HB assessable income isolate this path; the run does not establish any actual data record's demographics. Six official source originals were inspected and their cached bytes verified.

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:41:08.415704+00:00): same commit, UNSTABLE; 0 failed checks; 1 pending checks.

@vahid-ahmadi

Copy link
Copy Markdown
Collaborator

Review pass (Claude Code, on Vahid's behalf) at e92b5d10

Short version: the rules match the law I read, and the tests pass locally. Two things before merge: the claimant-or-partner helper still needs #1896's role variable (the Codex review's P1, which I agree with and won't repeat), and one new should-fix on the student exemption's age default in the household calculator.

1. Should-fix: with no education input, every 18- or 19-year-old non-dependant counts as a full-time student and is exempt. housing_benefit_non_dep_deduction_exempt and the CTR equivalent use is_full_time_student_non_dep, which reads current_education. That variable's formula defaults ages 18–19 to TERTIARY when nothing is supplied (variables/household/demographic/current_education.py:36). The PR body notes this, but the effect in the household calculator is large. Probe at this head, 2026, a 45-year-old HB claimant (council rent £10,000) with a 19-year-old non-dependant earning £30,000 at 37.5 hours a week:

Non-dependant current_education Exempt HB deduction
age 18, no input TERTIARY (default) yes £0
age 19, no input TERTIARY (default) yes £0
age 20, no input NOT_IN_EDUCATION no £6,232.20
age 19, NOT_IN_EDUCATION supplied NOT_IN_EDUCATION no £6,232.20

On main this non-dependant is charged, so the PR introduces the gap for HB and the national CTR schemes (the English local schemes already had it through the same helper). Datasets are unaffected, since the Enhanced FRS stores current_education. Suggested fix: base the student exemption on a stored or supplied education value only, not the age default. Alternatively, don't treat the default as full-time study for someone in remunerative work (16+ hours). Either way, add the 19-year-old case above as a test.

2. The claimant-or-partner helper (Codex P1). _non_dependants.py:28-36 is still "head or not a child-benefit QYP". The author has said it will switch to #1896's is_claimant_or_partner, and #1896 is still open, so this PR should wait for that rebase and add the explicit young-partner and third-adult cases the r2 response lists.

Checked and correct:

  • Law: I read HB Regs 2006 reg 74 and HB (SPC) Regs reg 55 on legislation.gov.uk.
    • The bands are "not less than" at the lower edge, and the 2026-27 amounts are £20.40 to £131.45 on £192/£279/£365/£485/£605.
    • Couples get one deduction, the higher, on joint income (reg 74(3)-(4)).
    • The claimant exemption covers blindness, AA, the DLA care component, the PIP daily living component and AFIP (reg 74(6)).
    • The student exemption is reg 74(7)(c)-(e); the under-25 IS/JSA(IB)/ESA(IR)/UC-no-earned-income exemption is reg 74(8); SPC is reg 74(10) (reg 55(9) for pension age).
    • England CTR Sch 1 para 8 has £5.20/£10.60/£13.30/£15.95 on £279/£485/£605, with its own para 8(7)-(8) exemptions, including the LGFA Sch 1 disregard and the UC limb.
  • Remunerative work: banding applies only at 16+ hours and not on an income-related benefit (reg 6(6)); anyone else pays the (1)(b) amount.
  • has_earned_income counts miscellaneous_income, the same as the UC model's own uc_mif_capped_earned_income, so it is consistent within the model.
  • Tests at this head: the HB and local-authority YAML suites pass 205/205, and test_non_dependant_deduction_properties.py passes 6/6. CI's Test job was still running when I checked; the other six checks pass.

MaxGhenis added a commit that referenced this pull request Oct 2, 2026
A person is on income-based JSA or income-related ESA on a day it "is
payable to him" (reg 2(3), (3A)), and a person on income support is one "in
receipt of" it (reg 2(1)). A couple's award is paid to the claimant, not the
partner. is_on_income_related_esa, is_on_income_based_jsa and
is_on_income_support now hold, of the claimant and partner, only for the
payee: the one who reports the award, or the claimant where neither does
(is_payee_of_couple_award). Another member's report never moves the payee.
Anyone else is unchanged (their own report while the award is modelled as
paid).

Agreed with #2007, whose round-2 review raised the same point and which
applies the same reading through its is_award_payee helper; the codebase now
reads "who is on" one way.

Effects: in the local working-age CTR schemes a non-dependant couple on one
of these benefits pays the partner's deduction (one deduction per couple, the
higher: Default Scheme Sch para 30(3)); the maintenance-loan ESA proxy follows
the student's own award, not their partner's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the hb-ctr-non-dep-exemptions branch from e92b5d1 to f5aae26 Compare October 2, 2026 14:09
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Composition note from #2078 (stacked on #2009), which makes the CTR means test assess the applicant and partner rather than the benefit unit's claimant and partner.

#2078 changes council_tax_reduction_household_has_non_dep_exemption to read is_council_tax_reduction_applicant_or_partner (new Person variable) in place of is_claimant_or_partner, following "the applicant or his partner" in SI 2012/2885 Sch 1 para 8(6). The two differ where the household head is liable but is not the benefit unit's claimant or partner. Example: a blind grandmother head sharing a benefit unit with a young couple, who were not exempt before.

When this PR's national exemption (council_tax_reduction_non_dep_deduction_exempt) composes with #2078, it should use the same identity for the applicant or partner. #2015 replaces the household flag with a per-family one and gets the same note.

MaxGhenis and others added 6 commits October 3, 2026 07:47
Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55):
- bands include their lower edge, and only a non-dependant in remunerative
  work (16+ hours, reg 6(1)) is banded, on the couple's joint income; anyone
  else pays the reg 74(1)(b) amount;
- one deduction per couple, the higher (reg 74(3));
- no deduction for full-time students, State Pension Credit recipients, or
  under-25s on IS, income-based JSA or UC without earned income
  (reg 74(7), (8), (10)), nor for any non-dependant when the claimant or
  partner is blind or on AA, DLA care, PIP daily living or AFIP (reg 74(6)).

Council Tax Reduction (SI 2012/2885 Sch 1 para 8; WSI 2013/3029 Sch 1
para 3 and Sch 6 para 5; SSI 2012/319 reg 48; SSI 2012/303 reg 67 and
SSI 2021/249 reg 90):
- each national scheme's own weekly scale for 2013-14 to 2026-27, instead
  of the Housing Benefit amounts;
- the same banding and couple rules, with Wales's working-age exception for
  couples on UC;
- the schemes' any-age exemptions, the UC limb from the year each scheme
  added it, and the existing applicant exemption.

Fixes #2004; the non-dependant half of #1934.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, gross income

- Identify the claimant or partner as the benefit unit's head or any member
  who is not an SSCBA s.142 child or qualifying young person (HB Regs 2006
  regs 2(1) and 19; CTR regs 2(1)), replacing is_adult in the HB and CTR
  claimant exemptions.
- Band a couple on the couple's joint income only, give the couple one
  deduction and any other adult in the family their own, and count benefit
  receipt (IS, JSA(IB), ESA(IR), SPC, UC) only for the award's claimant or
  partner.
- Treat a non-dependant on IS, JSA(IB) or ESA(IR) as not in remunerative work
  for HB (reg 6(6)).
- Take self-employed losses as nil in the UC no-earned-income test
  (UC reg 57(2)).
- Add the family's UC (before the cap), tax credits and child benefit to gross
  income.
- Tests: the review's counterexamples, a non-vacuous SPC exemption case, and
  property-test generators and oracles for dependent young people and losses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…A disregard

- "No earned income" follows UC Regs 2013 regs 52-62: employment income plus
  SSP and SMP less relievable pension contributions (reg 55(4)-(5)),
  self-employed earnings with losses nil and the minimum income floor where
  the UC model applies it (regs 57(2), 62), and other paid work.
- IS, JSA(IB), ESA(IR) and SPC count only for the person they are payable to
  (HB Regs 2006 reg 2(3)-(3A)): the member reporting the award, or the head;
  used for the exemptions and HB reg 6(6). UC still counts for both joint
  claimants.
- Gross income uses UC after the benefit cap (UC reg 81), applying the cap to
  the capped benefits other than HB, which a non-dependant family does not
  receive.
- CTR exempts an adult for whom another person is entitled to child benefit
  (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents).
- Tests: the review's counterexamples, and property oracles for the payee and
  the child benefit disregard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the local claimant-or-partner helper (benefit unit head, or anyone
not a child benefit child or qualifying young person) with the
is_claimant_or_partner variable: the SSCBA s.137 couple, at most two people.
A partner at school is now a partner, and a third adult in a benefit unit is
deducted separately. Adds the round-2 review cases: a blind 16-year-old
partner (Wales), a non-dependant couple with a partner at school, and a
17-year-old partner's PIP in Merton.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The changelog and the property generator's comment now name
is_claimant_or_partner instead of the SSCBA s.142 definitions, and
is_award_payee says that both members of a joint-claim jobseeker's allowance
couple are on it (HB reg 2(3)(c)), which the model cannot identify.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap childcare, child benefit claims

- Gross income adds statutory sick, maternity and paternity pay (earnings,
  HB reg 35(1)(i)) and Maternity Allowance to each person's taxable income,
  and the family's IS, JSA(IB), ESA(IR) and Pension Credit to a couple's.
- Earned income for the UC limb adds statutory paternity pay (UC reg
  55(4)(c)), and relievable pension contributions come off self-employed
  earnings when there are no employed earnings (reg 57(2), step 4).
- Scotland's working-age scheme exempts a non-dependant whose partner is on
  IS, JSA(IB) or ESA(IR) and who is not on Universal Credit, from April 2022
  (SSI 2021/249 reg 90(8)(a), reg 4(1)).
- The after-cap UC in gross income keeps the cap's childcare protection (UC
  reg 81(1)-(2)).
- The LGFA 1992 Sch 1 para 3 disregard needs a child benefit claim.
- The property oracle derives the claimant and applicant exemptions from
  the generated inputs, and the generator varies statutory pay, pension
  contributions, the start-up period, the award's reporter and child
  benefit claims.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis force-pushed the hb-ctr-non-dep-exemptions branch from f5aae26 to 084e1f9 Compare October 3, 2026 12:19
MaxGhenis added a commit that referenced this pull request Oct 3, 2026
HB(SPC) Sch 3 para 6 has the working-age premium's conditions and para
12 its amounts, so the pension-age premium is severe_disability_premium
for a family over State Pension age. A Pension Credit reform no longer
moves pension-age HB or CTR. The schedule property keeps the Pension
Credit addition as a cross-check. References add the CTR nomination
rule and the other premium schedules; the conditions YAML notes the
three income-rule defects its awards include (#1908, #2112, #2007).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes main's uv.lock, which drops an unintended one-line lock change from
this branch's first commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 3, 2026 12:10
… in gross income

- The after-cap UC used in a couple's gross income counts Maternity
  Allowance among the capped benefits (Welfare Reform Act 2012
  s.96(10)(i)).
- A self-employment or property loss no longer cancels other gross income:
  it is added back to taxable income (DWP HB guidance A5.551).
- A YAML case for the Scottish partner rule's "not on Universal Credit"
  condition.

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

Copy link
Copy Markdown
Collaborator Author

Independent review, round 4 (7a5cbe2)

Review text

VERDICT: REQUEST CHANGES

Reviewed exact head 7a5cbe28c2af against main 6fa14dc0e, including the round-3 fix diff and the whole PR. All amounts below are annual 2026 deductions.

  1. P1 wrong result — Maternity Allowance is omitted from the UC cap basket. File: _non_dependants.py:39, applied at line 85.

    Welfare Reform Act 2012 s.96(10)(i) includes “maternity allowance under section 35 or 35B” among capped welfare benefits. UC regs 79–81 implement the cap.

    Fresh input: England applicant 80; explicit non-dependant couple: worker 20 earning £9,200 at 16 hours/week, partner 38 receiving MA £6,000 at zero hours; children 16/15/13/11/0; UC before cap £14,000; Child Benefit £5,129.80; cap £22,020; childcare and other awards zero.

    Actual: helper UC £14,000; HB £6,835.40, CTR £829.40.
    Expected: UC £10,890.20; HB £6,232.20, CTR £691.60.

    Capped benefits total £25,129.80, giving excess £3,109.80. Correct joint income is £600.38/week; the helper bands £660.19/week. The PR explicitly supports MA in gross income without disclosing its cap omission.

  2. P1 wrong result — a business loss cancels known gross wages. File: _non_dependants.py:64.

    Pension-age HB reg 55(2) requires “normal weekly gross income”; England pensioner CTR para 8(2) uses the same test. DWP Guidance A5, paragraph 5.551 specifies “total income with no deductions for business expenses”.

    Fresh input: England applicant 80; non-dependant 30, outside education, 16 hours/week, wages £15,600 (£300/week), self_employment_income: -10400, all awards zero. The specified business has no receipts and £10,400 costs.

    Actual: HB £1,060.80, CTR £270.40.
    Expected: HB £3,346.20, CTR £551.20.

    total_income nets the business loss against wages before the helper floors it, leaving £100/week. Known gross wages establish £300/week independently of missing turnover information. The PR describes its taxable-income method but does not disclose this loss cancellation or the net-profit versus gross-receipts limitation. Round 1 fixed losses in the UC earned-income test only.

  3. P3 wording — impact and mutation statements need qualification. Supplied pr-body.md:198, :140–147, :176–199, and :73.

    • HB recipient deductions should round to £6.0m, rather than £5.9m: decomposition E reports £5.968834307m.
    • The body says 23 exact-head mutations; mutate3.py defines 31. Its explanation that SMP and pensions are absent from the generator is stale. The exact-head mutation log was absent; outcome counts are UNVERIFIED.
    • Older-main +£7.0m and 1,663.5k→1,671.1k caseload claims are unsupported by the supplied named aggregates.
    • Penny-exact reproduction and “no non-dependant couples” are UNVERIFIED. Zero incremental couple impact does not prove zero couples.
    • Exact unchanged UC/PC awards, zero CTR losers, and universal claims about HB losers are not established by rounded aggregates. Later poverty entry/exit claims have individual evidence for 2027, but only net totals for 2028–2030.
    • “Not modelled (no input)” is too broad for expressly omitted existing maintenance/student-support inputs.

    These are nonblocking wording points; legal quotes and failing household inputs are not applicable. All 72 main impact-table cells match. The decomposition increments and corrected CTR country split, recipient filter, and exemption counts are supported.

Round-3 findings

Finding Disposition and evidence
1. Gross statutory pay and family awards RESOLVED. SMP partner: £3,346.20/£551.20. ESA(IR) £100/week plus partner £180/week at 16h: £3,346.20/£551.20.
2. SPP earned income RESOLVED. £300 SPP, UC £2,000, age 24: £1,060.80/£270.40.
3. Self-employed pensions RESOLVED. £6,000 profit less £6,000 pension, start-up period, UC £2,000, age 24: £0/£0.
4. Scottish partner rule RESOLVED. Working-age CTR £0 in 2022/2026. In 2021 only the payee is exempt, deduction £223.60; pension-age 2026 likewise, deduction £288.60. Eight amount/flag checks pass.
5. Childcare protection RESOLVED. Original case: £6,835.40/£829.40. Fresh partial-reduction control also passes, including UC £21,520.
6. Child Benefit entitlement RESOLVED. No claim for the 19-year-old trainee: CTR £540.80. Payment opt-out control correctly retains the disregard, giving parent-only £270.40.
Claimant-exemption oracle RESOLVED. Expectations derive from generated disability inputs. Both incorrect HB/CTR exemption mutants are rejected: 2 killed, 0 survived.

The Scottish reading is defensible and adequately disclosed. Reg 90(8)(a) applies the defined category to a non-dependant; the context-dependent reg 4(1) reading makes that limb operative while retaining partner inclusion. The temporal and pension-age distinctions are tested. Settled administrative guidance remains UNVERIFIED.

Round-2 preserved probes pass 21/21 comparisons across 10 households. Earlier-round policy regressions also pass.

No automatic double counting or entity projection error was found. The newly added income classes are outside total_income/social_security_income. The live smoke completes 39 calculations without cycles. Both fresh local-scheme probes pass across all five English schemes.

The claimant oracle is now independent where required. Remaining upstream identity/QYP/MIF classifications are unchanged. Coverage still omits generated binding caps and MA; the generator also pins total_income without its separately generated self-employment income, so it cannot catch the gross-loss failure.

The scope list is incomplete for the two findings above and should explicitly identify the net-profit/gross-receipts limitation. Actual-period tax/NI, carried losses, surplus/notional income and mixed-employment excess-pension offsets remain UNVERIFIED, without additional established failures from matching inputs.

Commands and results

All uv commands used the requested repository-local cache and Python-install directories.

  • uv sync --extra dev: PASS, 150 packages resolved, 144 installed. Original uv.lock restored after normalization; dependency versions unchanged.
  • uv run policyengine-core test policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit policyengine_uk/tests/policy/baseline/gov/local_authorities -c policyengine_uk: 458 passed, 0 failed, 366.68 seconds.
  • Same runner on LHA_claimant_composition.yaml and gov/dwp/benefit_cap.yaml: 31 passed, 0 failed; combined 489 passed.
  • uv run pytest -q -p no:cacheprovider policyengine_uk/tests/test_non_dependant_deduction_properties.py: 6 passed, 0 failed, one Pydantic deprecation warning, 37:22. Allowed to finish.
  • uv run python review-artifacts/preserved/root/rerun_round2.py: 21 passed, 0 failed.
  • Preserved root fresh_probes.py and valid_spp_probe.py: 4/4 and 2/2 comparisons passed.
  • Preserved tests and law fresh_probes.py: 4/4 and 12/12 passed.
  • uv run python review-artifacts/scotland_controls.py: 8 passed, 0 failed.
  • Preserved cycles.py: 3 household-years, 39 calculations, 0 errors/cycles.
  • uv run python review-artifacts/r4-fresh-code-probes.py: 9 checks passed, 5 failed across six households. Failures are three MA-cap checks and two gross-loss checks.
  • uv run python review-artifacts/oracle_mutants.py: 2 killed, 0 survived.
  • Local isolation probe: 15 passed, 0 failed. Local differential smoke: 120 passed, 0 failed, 30 households.
  • Scoped Ruff formatting/lint: PASS. Production format check: 10 files already formatted.

Full model suite, survey reproduction, CI status, independent legislative scale re-verification, and author mutation outcomes: UNVERIFIED / not run. No individual survey records were printed.

Saved full review and verified commit bundle, containing commits 34ac57aaa and 6297631a3.

Direct commits were blocked because the worktree’s Git index is outside the writable workspace. Production files remain unchanged at 7a5cbe28c; no push, GitHub comment or PR edit was made.

Response to review r4 of #2007 (7a5cbe2)

The review asked for changes. It confirmed:

  • every round-3 finding resolved;
  • the Scottish reading defensible and disclosed;
  • all 72 impact-table cells;
  • no new cycles or local-scheme leaks.

Its two P1s are fixed in aa44a1a, each with a YAML case in the "Round 4 of the independent review" section that fails on 7a5cbe2 and passes now. The P3 wording points are addressed in the PR body. Main is merged in as d872f57; the only conflict was the HB docs notebook.

# Finding Change Test (2026)
1 P1: Maternity Allowance missing from the cap basket (WRA 2012 s.96(10)(i)) CAPPED_BENEFITS_EXCEPT_HOUSING_BENEFIT adds maternity_allowance, summed over members with add "Maternity Allowance counts towards the benefit cap on a non-dependant's Universal Credit": UC 10,890.20 after the cap, HB £6,232.20, CTR £691.60
2 P1: a business loss cancels gross wages non_dependant_weekly_gross_income adds any self-employment or property loss back to taxable income. DWP HB guidance A5.551 (read in the source PDF): gross income for self-employed non-dependants is "their total income with no deductions for business expenses, or tax and national insurance contributions". Turnover has no input, so profit floored at zero is used; this is disclosed "A self-employment loss does not cancel a non-dependant's gross wages": HB £3,346.20, CTR £551.20
3 P3: wording £6.0m (not £5.9m); mutation section rewritten from the 31-mutation log on 7a5cbe2; the 2025-26 claims now cite compare4.md and base4.json/base6.json; the couple step is described as changing no deduction, not as "no couples"; HB losers and poverty movers stated as measured, with zero rows given as "under 0.05k"; "Not modelled" no longer says "no input" for maintenance and student support, which have inputs —

Mutation: the YAML suites killed 30 of 31 on 7a5cbe2. The survivor was the Scottish rule's "not on Universal Credit" condition, which the property tests killed. aa44a1a adds a YAML case that kills it ("Scotland's partner rule does not cover a couple on Universal Credit", CTR £288.60).

Tests on d872f57: targeted YAML 499 passed, properties 6 passed.

MaxGhenis added a commit that referenced this pull request Oct 4, 2026
Review r5 (P3-3): the case is Scottish, so cite SSI 2021/249 reg 20(2)
and reg 79(4) for the student exclusion and the divisor, and note that
reg 90(7)(c) makes no deduction for a full-time student non-dependant.
The model's national deduction is nil there only because the head has no
income; #2007 adds the student exemption. Comment only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vahid-ahmadi added a commit that referenced this pull request Oct 12, 2026
… at £35,000

Review of 21bb4dd (hub findings 1-3): the remunerative-work gate gave
the reg 74(1)(b) minimum to non-dependants the regulations exempt (full-time
students, reg 74(7)(c)-(e) / SPC reg 55(7)(e)) and charged a non-dependant
couple twice (reg 74(3)-(4)). Doing that properly is #2007's work, so this
drops the gate, the minimum and the claimant exemption from this PR.

Housing Benefit and national CTR non-dependant deductions now band on
total_income less other_investment_income, so they are unchanged from main
for every household until #2007 models the remunerative-work test. That
also stops the national CTR deduction banding a non-worker whose only
income is investment income (hub finding 3, review C1).

Winter Fuel Payment (hub finding 4): ITEPA 2003 s.681I(1)(b) charges only
total income that "exceeds £35,000", so the income test is now inclusive.
The property-test oracle and the 2024 reform case are updated to match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 20, 2026 17:08
…2015, #2027, #2089

- HB: each non-dependant family's amount (one per couple, exemptions,
  claimant exemption) now composes with #2006: only non-dependants of the
  household head count, and each family liable for the rent bears its
  share_of_household_rent.
- CTR: each applicant's scheme follows its own family (#2015,
  council_tax_reduction_pensioner). The scheme-dependent rules move to
  _national_non_dependants.py, taking the applicant's scheme as an argument.
  Person-level variables report the household head's family's scheme;
  council_tax_reduction_non_dep_deductions recomputes under an applicant's
  own scheme where it differs, then applies the joint-liability share and
  the per-family applicant exemption, which now applies in the national
  schemes too.
- The UC after the cap uses #2089's uc_benefit_cap; main's
  uc_benefit_cap_reduction counts Housing Benefit and would be circular.
- Tests: main's stopgap investment-income cases are rewritten under reg
  74(1)(b) / para 8(2); main's cannot-claim case now carries the lowest
  deduction; the 2014 cases are removed (main lacks 2014 parameters).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 20, 2026
#2017 was stacked on #2010 (lha-bedroom-young-people), which has not moved
since 2026-10-02 and is 1,651 commits behind main. #2017 needs nothing of
#2010's: #2010 changes only the LHA size criteria. #2017 needs #2007's HB and
CTR claimant exemptions (review r2, F2), and #2007 lands first. So this
merges hb-ctr-non-dep-exemptions (#2007 at 0b6c3db, with main) and puts
#2010's own files back to main's versions; the bedroom differential property
that needed #2010 moves to #2010.

Composition with main and #2007:
- UC: other families' non-dependants follow uc_non_dependants_counted (the
  first liable family that claims UC). A family's own in-unit non-dependant
  counts in its own claim if it makes one, otherwise in that counted claim
  (Sch 4 para 9(2)(f); review r3, R3-7). The para 16(2)(b) Pension Credit
  limb is gated to the claimant or partner. Para 15 renter exemption kept.
- HB: every family's per-couple amount (#2007's deduction_per_family over
  other families' and in-unit non-dependants) pooled and apportioned by rent
  share; a boarder or lodger also bears its own in full; #2007's claimant
  exemption zeroes the claim. HB eligibility adds #2007's exemption.
- CTR: #2007's two-scheme structure. Each scheme pools every family's amount,
  replaces the applicant's own family amount with its in-unit non-dependants,
  apportions by joint-liability share, and charges claiming families only.
  The applicant exemption zeroes the claim. Eligibility is 18+ and either
  outside every claiming, sharing or lodging family (#2007's claimant-family
  test, now in in_other_non_liable_family) or an in-unit non-dependant for
  CTR. New is_benefit_unit_non_dependant_for_council_tax_reduction uses
  #2078's is_council_tax_reduction_applicant_or_partner, so where a household
  head applies alone, her benefit unit's couple are her non-dependants.
- Local schemes: masked to the same other-family term, so unchanged.

Tests: the composition's YAML and property oracle (couple-once, exemptions,
per-applicant CTR exemption), with the oracle's UC attribution following the
counted claim. Three new YAML cases: a head applying alone charged once for
her benefit unit's couple; a non-claiming head's son counted in the sharer's
claim; a pensioner's Pension Credit not exempting her adult son. Two cases
adjusted: a pension-age head has no UC claim to count non-dependants in, and
a 19-year-old on UC with no earnings is exempt under reg 74(8)(b).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 07985ed615 against head 7a8627e921, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 3 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

Measure Year Base Head Change
Relative poverty, before housing costs: pensioners 2027-28 1,625k 1,650k +25.3k
Relative poverty, before housing costs: pensioners 2027-28 14.1% 14.3% +0.22pp
Decile 1: mean household_net_income per household 2028-29 £17,992 £18,018 +£26

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Housing Benefit +£17.3m +£18.0m +£18.5m +£19.0m +£19.5m +£20.0m +£20.4m
Council Tax Reduction +£6.5m +£6.9m +£7.3m +£7.8m +£9.2m +£9.7m +£10.4m
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Housing Benefit +239 +240 +240 +241 +242 +244 +245
Council Tax Reduction +6.9k +7.0k +7.2k +7.3k +6.9k +7.0k +7.3k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Government balance, each component counted once

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government spending +£23.8m † +£24.9m † +£25.8m † +£26.8m † +£28.7m † +£29.7m † +£30.8m †
Government balance, each receipt once -£23.8m † -£24.9m † -£25.8m † -£26.8m † -£28.7m † -£29.7m † -£30.8m †

Model totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_spending +£23.8m † +£24.9m † +£25.8m † +£26.8m † +£28.7m † +£29.7m † +£30.8m †
household_benefits +£23.8m † +£24.9m † +£25.8m † +£26.8m † +£28.7m † +£29.7m † +£30.8m †
gov_balance -£23.8m † -£24.9m † -£25.8m † -£26.8m † -£28.7m † -£29.7m † -£30.8m †

Household income totals

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household net income +£23.8m † +£24.9m † +£25.8m † +£26.8m † +£28.7m † +£29.7m † +£30.8m †
Household net income (HBAI definition) +£23.8m +£24.9m +£25.8m +£26.8m +£28.7m +£29.7m +£30.8m

Poverty rates

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 0 +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, before housing costs: working-age adults 0 +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, before housing costs: pensioners 0 +0.01pp +0.01pp +0.00pp +0.00pp +0.00pp +0.00pp
Absolute poverty, after housing costs: everyone -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Absolute poverty, after housing costs: working-age adults -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Absolute poverty, after housing costs: pensioners -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Relative poverty, before housing costs: everyone -0.00pp +0.00pp +0.04pp +0.00pp +0.00pp +0.00pp +0.00pp
Relative poverty, before housing costs: children 0 0 +0.01pp 0 +0.00pp 0 0
Relative poverty, before housing costs: working-age adults -0.00pp -0.00pp +0.00pp -0.00pp +0.00pp -0.00pp +0.00pp
Relative poverty, before housing costs: pensioners -0.00pp +0.00pp +0.22pp +0.00pp +0.01pp +0.00pp +0.01pp
Relative poverty, after housing costs: everyone -0.00pp -0.00pp +0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Relative poverty, after housing costs: children 0 0 +0.01pp 0 +0.00pp 0 0
Relative poverty, after housing costs: working-age adults -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp -0.00pp
Relative poverty, after housing costs: pensioners -0.00pp -0.00pp +0.00pp -0.00pp -0.00pp -0.00pp -0.00pp

People in poverty

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 0 +1.3k +1.3k +234 +235 +236 +237
Absolute poverty, before housing costs: working-age adults 0 +644 +646 +117 +118 +118 +119
Absolute poverty, before housing costs: pensioners 0 +644 +646 +117 +118 +118 +119
Absolute poverty, after housing costs: everyone -2.5k -2.5k -2.5k -2.5k -2.5k -2.5k -2.6k
Absolute poverty, after housing costs: working-age adults -2.0k -2.0k -2.0k -2.0k -2.0k -2.0k -2.0k
Absolute poverty, after housing costs: pensioners -498 -500 -502 -504 -506 -508 -510
Relative poverty, before housing costs: everyone -1.1k +191 +28.3k +192 +1.9k +194 +1.3k
Relative poverty, before housing costs: children 0 0 +859 0 +167 0 0
Relative poverty, before housing costs: working-age adults -874 -234 +2.1k -236 +117 -238 +658
Relative poverty, before housing costs: pensioners -219 +425 +25.3k +428 +1.6k +432 +658
Relative poverty, after housing costs: everyone -2.3k -2.5k +245 -2.5k -2.2k -2.5k -2.6k
Relative poverty, after housing costs: children 0 0 +1.7k 0 +19 0 0
Relative poverty, after housing costs: working-age adults -1.8k -2.0k -1.5k -2.0k -2.0k -2.0k -2.0k
Relative poverty, after housing costs: pensioners -498 -500 +49 -504 -182 -508 -510

Inequality

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000

Mean household net income in each side's own deciles

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household -£0.41 † +£0.29 † -£0.20 † +£26 † +£0.36 † -£1.10 † -£2.50 †
Decile 2: mean household_net_income per household -£4.65 † -£5.47 † -£3.38 † -£23 † +£0.10 † +£1.25 † +£2.26 †
Decile 3: mean household_net_income per household +£1.60 † +£2.34 † +£1.38 † +£2.52 † -£2.26 † -£2.24 † -£1.69 †
Decile 4: mean household_net_income per household +£3.82 † +£0.25 † +£2.12 † +£0.43 † +£0.41 † +£0.60 † +£5.27 †
Decile 5: mean household_net_income per household +£1.70 † +£1.85 † +£13 † +£1.42 † +£4.69 † +£1.38 † -£1.80 †
Decile 6: mean household_net_income per household +£1.75 † +£1.74 † -£5.67 † +£13 † -£3.73 † +£0.38 † +£0.77 †
Decile 7: mean household_net_income per household +£0.27 † -£0.19 † -£0.67 † -£15 † +£2.82 † +£3.10 † +£5.83 †
Decile 8: mean household_net_income per household +£0.46 † -£0.90 † +£2.70 † +£7.68 † -£3.36 † -£0.86 † -£0.39 †
Decile 9: mean household_net_income per household -£1.28 † -£1.43 † -£3.82 † -£0.23 † +£3.41 † -£1.41 † -£1.61 †
Decile 10: mean household_net_income per household +£0.06 † +£0.06 † +£0.06 † +£0.07 † +£0.07 † +£0.06 † +£0.07 †

Standard reform costings (change in gov_balance)

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp -£22,705 -£31,190 -£36,198 -£39,808 -£42,486 -£54,059 -£56,939
Raise higher rate by 1pp 0 0 0 0 +£0 -£0 0
Raise personal allowance by ~800GBP/year +£39,902 +£48,200 +£61,461 +£66,457 +£63,649 +£60,930 +£24,958
Raise child benefit by 25GBP/week per additional child -£0 0 0 0 0 0 +£0
Reduce Universal Credit taper rate to 20% +£39,887 +£41,585 +£42,698 +£43,726 +£44,798 +£45,899 +£47,020
Raise Class 1 main employee NICs rate to 10% +£0 -£0 -£1 -£1 -£0 -£1 +£1
Raise VAT standard rate by 2pp -£1 +£3 -£2 -£4 +£1 -£7 +£2
Raise additional rate by 3pp -£0 -£0 +£0 -£0 0 -£0 +£0
Raise the Universal Credit standard allowance by 10% +£0.3m +£0.3m +£0.3m +£0.3m +£0.3m +£0.3m +£0.3m
Raise the State Pension by 10% +£0.7m +£0.8m +£0.8m +£0.9m +£0.9m +£1.0m +£1.1m

Household net income by decile

Mean 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.

Base decile 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1 0 0 0 0 0 0 0
Decile 2 +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%)
Decile 3 +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£2 (+0.0%)
Decile 4 +£1 (+0.0%) +£1 (+0.0%) +£2 (+0.0%) +£2 (+0.0%) +£2 (+0.0%) +£2 (+0.0%) +£2 (+0.0%)
Decile 5 +£2 (+0.0%) +£3 (+0.0%) +£3 (+0.0%) +£3 (+0.0%) +£3 (+0.0%) +£3 (+0.0%) +£3 (+0.0%)
Decile 6 +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%)
Decile 7 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
Decile 8 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
Decile 9 0 0 0 0 0 0 0
Decile 10 fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change fewer than 10 households change
all +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%) +£1 (+0.0%)
Year People gaining over £1 People losing over £1
2025-26 0.1% 0.0%
2026-27 0.1% 0.0%
2027-28 0.1% 0.0%
2028-29 0.1% 0.0%
2029-30 0.1% 0.0%
2030-31 0.1% 0.0%
2031-32 0.1% 0.0%

No change in any year: receipts by tax head; components the model counts twice; population; standard reforms: change in each reform's target.

Checks failing on both base and head (1)
  • VAT is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-54,797,972 in total; 2026-27: 76 units below zero, a weighted £-56,271,349 in total; 2027-28: 76 units below zero, a weighted £-57,609,146 in total
Counted-once check

Each 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
Side Commit Runtime Environment hash Partition hash Time
base main 07985ed615 uk 2.141.7 (files 99e44f4ad991), core 3.33.2, py 3.13.16 aarch64 9432d584e851 f210f83d5be4 904.59s
head #2007 merged into main 7a8627e921 uk 2.141.7 (files fac97cc5120a), core 3.33.2, py 3.13.16 aarch64 9432d584e851 f210f83d5be4 942.19s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Income tax £299.38bn £319.14bn £336.66bn £351.81bn £367.35bn £385.48bn £403.83bn
National Insurance (employee and self-employed) £52.58bn £54.94bn £56.75bn £58.48bn £60.62bn £62.57bn £65.03bn
National Insurance (employer) £152.64bn £159.18bn £164.14bn £168.73bn £176.11bn £181.72bn £188.90bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.62bn £13.06bn £13.55bn £14.04bn £14.54bn £15.09bn £15.65bn
Student loan repayments £7.83bn £8.12bn £8.35bn £8.56bn £8.79bn £9.04bn £9.38bn
VAT £253.71bn £260.53bn £266.72bn £273.14bn £279.83bn £286.71bn £293.71bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.53bn £24.64bn £26.64bn £26.69bn £26.42bn £25.76bn £26.35bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.28bn £4.43bn £4.44bn £4.46bn £4.49bn £4.51bn £4.53bn
Council tax £49.56bn £52.45bn £55.78bn £59.39bn £62.98bn £66.74bn £70.70bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.51bn £0.52bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.61bn £0.63bn £0.67bn £0.70bn £0.73bn
Business rates £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn £31.73bn
Stamp duty land tax (own purchases, and corporate until the £10.06bn £10.56bn £10.98bn £11.40bn £11.81bn £12.23bn £12.64bn
Land transaction tax (Wales) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land and buildings transaction tax (Scotland) £0.01bn £0.01bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension £122.50bn £127.12bn £128.28bn £130.21bn £134.05bn £138.02bn £142.08bn
Pension Credit £6.66bn £7.04bn £7.02bn £7.09bn £7.21bn £7.34bn £7.44bn
Winter Fuel Payment £1.70bn £1.68bn £1.59bn £1.57bn £1.57bn £1.55bn £1.52bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £78.78bn £83.09bn £84.89bn £86.65bn £87.58bn £89.00bn £90.33bn
Housing Benefit £8.60bn £8.94bn £9.21bn £9.35bn £9.63bn £9.89bn £10.17bn
Council Tax Reduction £1.99bn £2.04bn £2.08bn £2.13bn £2.19bn £2.24bn £2.29bn
Employment and Support Allowance (income-related) £2.12bn £2.18bn £2.23bn £2.28bn £2.33bn £2.39bn £2.45bn
Employment and Support Allowance (contribution-based) £5.22bn £5.36bn £5.49bn £5.62bn £5.76bn £5.90bn £6.04bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.30bn £0.31bn £0.32bn £0.33bn £0.33bn
Income Support £0.12bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £27.05bn £28.19bn £28.94bn £29.64bn £30.37bn £31.11bn £31.87bn
Disability Living Allowance £7.52bn £7.83bn £8.04bn £8.24bn £8.44bn £8.65bn £8.86bn
Attendance Allowance £8.71bn £9.08bn £9.32bn £9.55bn £9.78bn £10.02bn £10.26bn
Carer's Allowance £4.50bn £4.69bn £4.81bn £4.93bn £5.05bn £5.17bn £5.29bn
Carer Support Payment (Scotland) £0.35bn £0.37bn £0.38bn £0.39bn £0.40bn £0.41bn £0.41bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.51bn £0.52bn £0.53bn £0.54bn £0.56bn £0.57bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.62bn £0.64bn £0.65bn £0.67bn £0.69bn £0.70bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.23bn £16.91bn £17.32bn £17.73bn £18.16bn £18.60bn £19.04bn
Scottish Child Payment £0.50bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.58bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.32bn £3.41bn £3.49bn £3.57bn £3.66bn £3.75bn £3.84bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.13bn £1.16bn £1.19bn £1.22bn £1.25bn £1.28bn £1.31bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.70bn £0.72bn £0.74bn £0.76bn £0.78bn
Tax-Free Childcare £0.55bn £0.56bn £0.57bn £0.58bn £0.60bn £0.61bn £0.59bn
Extended childcare entitlement £2.66bn £3.14bn £3.23bn £3.30bn £3.38bn £3.47bn £3.55bn
Universal childcare entitlement £3.32bn £3.59bn £3.69bn £3.78bn £3.88bn £3.99bn £4.08bn
Targeted childcare entitlement £0.57bn £0.60bn £0.62bn £0.63bn £0.65bn £0.66bn £0.67bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £204.68bn £205.46bn £206.22bn £207.04bn £207.96bn £208.89bn £209.79bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.15bn £25.25bn £25.34bn £25.44bn £25.55bn £25.67bn £25.78bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
State Pension 11,308k 11,208k 10,906k 10,812k 10,860k 10,908k 10,955k
Pension Credit 1,490k 1,489k 1,477k 1,455k 1,457k 1,454k 1,450k
Winter Fuel Payment 7,091k 7,008k 6,593k 6,509k 6,491k 6,377k 6,242k
Pension Age Winter Heating Payment (Scotland) 806k 807k 807k 805k 809k 812k 816k
Universal Credit 6,371k 6,379k 6,409k 6,419k 6,395k 6,387k 6,371k
Housing Benefit 1,254k 1,252k 1,254k 1,240k 1,245k 1,247k 1,249k
Council Tax Reduction 3,191k 3,217k 3,230k 3,251k 3,268k 3,287k 3,300k
Employment and Support Allowance (income-related) 187k 188k 188k 189k 190k 190k 191k
Employment and Support Allowance (contribution-based) 722k 724k 727k 730k 733k 737k 740k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 68k 68k 68k 69k 69k
Income Support 25k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,581k 3,595k 3,608k 3,623k 3,639k 3,655k 3,671k
Disability Living Allowance 1,296k 1,301k 1,306k 1,311k 1,317k 1,323k 1,329k
Attendance Allowance 1,701k 1,708k 1,714k 1,721k 1,729k 1,736k 1,744k
Carer's Allowance 1,038k 1,042k 1,046k 1,050k 1,055k 1,059k 1,064k
Carer Support Payment (Scotland) 81k 82k 82k 82k 83k 83k 83k
Carer's Allowance Supplement (Scotland) 0k 82k 82k 82k 83k 83k 83k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 138k 139k 139k 140k 140k 141k
Armed Forces Compensation Scheme 94k 94k 94k 95k 95k 95k 96k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,136k 8,165k 8,185k 8,215k 8,249k 8,282k 8,314k
Scottish Child Payment 352k 354k 355k 356k 357k 358k 357k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 201k 202k 203k 204k 204k 205k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 334k 335k 336k 338k 339k 341k 342k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 182k 183k 183k 184k 185k 186k 186k
Sure Start Maternity Grant 26k 26k 26k 27k 27k 27k 27k
Bereavement Support Payment 98k 98k 99k 99k 100k 100k 101k
Tax-Free Childcare 1,017k 1,028k 1,028k 1,033k 1,034k 1,038k 1,023k
Extended childcare entitlement 665k 671k 675k 677k 682k 686k 687k
Universal childcare entitlement 986k 989k 992k 997k 1,002k 1,013k 1,015k
Targeted childcare entitlement 119k 120k 120k 121k 121k 122k 121k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 99k 99k 100k 100k 100k 101k
Adult Dependants' Grant 18k 18k 12k 13k 13k 13k 13k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £899.48bn £939.37bn £976.38bn £1,009.57bn £1,045.85bn £1,082.80bn £1,123.71bn
Government spending £536.60bn † £550.95bn † £557.28bn † £564.34bn † £572.90bn † £582.15bn † £591.31bn †
Government balance, each receipt once £362.88bn † £388.43bn † £419.10bn † £445.23bn † £472.95bn † £500.65bn † £532.40bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £902.61bn £942.50bn £979.51bn £1,012.70bn £1,048.98bn £1,085.93bn £1,126.84bn
household_tax £496.26bn £522.79bn £548.64bn £570.82bn £593.03bn £617.49bn £644.24bn
pre_budget_change_household_tax £488.43bn £514.67bn £540.29bn £561.78bn £583.75bn £607.95bn £634.34bn
gov_spending £536.60bn † £550.95bn † £557.28bn † £564.34bn † £572.90bn † £582.15bn † £591.31bn †
household_benefits £536.60bn † £550.95bn † £557.28bn † £564.34bn † £572.90bn † £582.15bn † £591.31bn †
gov_balance £366.01bn † £391.56bn † £422.23bn † £448.36bn † £476.08bn † £503.78bn † £535.53bn †
Components the model counts twice: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
corporate_sdlt, counted again inside expected_sdlt £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn £3.13bn
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,657.06bn £1,719.25bn £1,771.68bn £1,821.99bn £1,872.88bn £1,930.99bn £2,001.98bn
Household net income £1,658.13bn † £1,706.64bn † £1,738.43bn † £1,772.57bn † £1,808.67bn † £1,850.31bn † £1,902.01bn †
Household net income (HBAI definition) £1,466.69bn £1,513.43bn £1,545.63bn £1,578.62bn £1,612.66bn £1,651.70bn £1,702.11bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,514k 69,778k 70,036k 70,316k 70,626k 70,944k 71,249k
Benefit units 35,247k 35,381k 35,512k 35,654k 35,811k 35,972k 36,127k
Households 31,167k 31,285k 31,401k 31,526k 31,665k 31,808k 31,944k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 15.9% 14.9% 15.5% 15.6% 15.7% 15.8% 15.7%
Absolute poverty, before housing costs: children 23.7% 20.9% 21.6% 21.4% 21.6% 21.8% 21.7%
Absolute poverty, before housing costs: working-age adults 13.8% 13.4% 14.0% 14.1% 14.2% 14.3% 14.3%
Absolute poverty, before housing costs: pensioners 13.7% 13.1% 13.2% 13.4% 13.5% 13.6% 13.6%
Absolute poverty, after housing costs: everyone 21.1% 20.6% 21.3% 21.5% 21.9% 22.2% 22.3%
Absolute poverty, after housing costs: children 32.1% 30.3% 30.9% 31.1% 31.7% 32.3% 32.5%
Absolute poverty, after housing costs: working-age adults 19.6% 19.4% 20.2% 20.4% 20.8% 21.0% 21.0%
Absolute poverty, after housing costs: pensioners 12.7% 12.5% 12.6% 12.9% 13.0% 13.1% 13.4%
Relative poverty, before housing costs: everyone 16.9% 16.4% 16.5% 16.5% 16.6% 16.7% 16.7%
Relative poverty, before housing costs: children 25.6% 23.5% 23.3% 23.2% 23.3% 23.4% 23.4%
Relative poverty, before housing costs: working-age adults 14.4% 14.4% 14.7% 14.8% 14.9% 15.1% 15.0%
Relative poverty, before housing costs: pensioners 14.8% 14.9% 14.3% 14.3% 14.2% 14.2% 14.4%
Relative poverty, after housing costs: everyone 21.7% 21.3% 21.4% 21.5% 21.7% 21.8% 22.0%
Relative poverty, after housing costs: children 33.0% 31.6% 31.2% 31.1% 31.5% 31.6% 32.0%
Relative poverty, after housing costs: working-age adults 20.0% 19.9% 20.3% 20.4% 20.6% 20.8% 20.9%
Relative poverty, after housing costs: pensioners 13.5% 13.1% 12.7% 12.8% 12.7% 12.7% 12.8%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,051k 10,428k 10,849k 10,947k 11,079k 11,210k 11,218k
Absolute poverty, before housing costs: children 3,560k 3,141k 3,261k 3,253k 3,298k 3,334k 3,334k
Absolute poverty, before housing costs: working-age adults 5,864k 5,737k 6,071k 6,165k 6,237k 6,315k 6,320k
Absolute poverty, before housing costs: pensioners 1,627k 1,550k 1,518k 1,529k 1,544k 1,561k 1,565k
Absolute poverty, after housing costs: everyone 14,657k 14,360k 14,897k 15,114k 15,436k 15,721k 15,867k
Absolute poverty, after housing costs: children 4,809k 4,556k 4,676k 4,719k 4,832k 4,939k 4,994k
Absolute poverty, after housing costs: working-age adults 8,331k 8,324k 8,773k 8,929k 9,118k 9,273k 9,327k
Absolute poverty, after housing costs: pensioners 1,517k 1,479k 1,448k 1,466k 1,486k 1,509k 1,547k
Relative poverty, before housing costs: everyone 11,759k 11,456k 11,532k 11,625k 11,708k 11,868k 11,916k
Relative poverty, before housing costs: children 3,840k 3,538k 3,515k 3,525k 3,546k 3,582k 3,602k
Relative poverty, before housing costs: working-age adults 6,154k 6,160k 6,367k 6,465k 6,537k 6,651k 6,652k
Relative poverty, before housing costs: pensioners 1,766k 1,758k 1,650k 1,635k 1,625k 1,635k 1,662k
Relative poverty, after housing costs: everyone 15,062k 14,861k 14,993k 15,087k 15,312k 15,487k 15,651k
Relative poverty, after housing costs: children 4,948k 4,756k 4,713k 4,715k 4,795k 4,840k 4,919k
Relative poverty, after housing costs: working-age adults 8,510k 8,557k 8,821k 8,915k 9,066k 9,190k 9,258k
Relative poverty, after housing costs: pensioners 1,604k 1,547k 1,460k 1,458k 1,451k 1,457k 1,474k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3074 0.3051 0.3064 0.3071 0.3077 0.3083 0.3093
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £17,706 † £17,997 † £17,941 † £18,018 † £18,326 † £18,521 † £18,683 †
Decile 2: mean household_net_income per household £28,358 † £29,035 † £28,669 † £28,990 † £29,373 † £29,781 † £30,331 †
Decile 3: mean household_net_income per household £34,608 † £35,904 † £36,509 † £37,011 † £37,261 † £37,823 † £38,513 †
Decile 4: mean household_net_income per household £39,333 † £40,909 † £41,810 † £42,696 † £43,186 † £43,985 † £45,134 †
Decile 5: mean household_net_income per household £44,873 † £46,149 † £47,090 † £47,611 † £48,384 † £49,253 † £50,071 †
Decile 6: mean household_net_income per household £47,932 † £49,326 † £50,266 † £51,083 † £52,166 † £52,939 † £54,222 †
Decile 7: mean household_net_income per household £56,320 † £57,578 † £58,468 † £59,399 † £60,127 † £61,610 † £63,198 †
Decile 8: mean household_net_income per household £69,251 † £70,360 † £71,638 † £72,876 † £74,324 † £75,789 † £77,562 †
Decile 9: mean household_net_income per household £79,669 † £82,007 † £83,239 † £84,444 † £86,088 † £87,569 † £90,638 †
Decile 10: mean household_net_income per household £117,649 † £120,458 † £122,406 † £124,560 † £126,772 † £129,080 † £131,872 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.22bn £6.50bn £6.71bn £6.90bn £7.11bn £7.35bn £7.62bn
Raise higher rate by 1pp £3.54bn £3.82bn £4.05bn £4.27bn £4.49bn £4.76bn £4.96bn
Raise personal allowance by ~800GBP/year £-3.83bn £-3.96bn £-4.03bn £-4.10bn £-4.20bn £-4.30bn £-2.02bn
Raise child benefit by 25GBP/week per additional child £-2.00bn £-1.76bn £-1.64bn £-1.54bn £-1.44bn £-1.34bn £-1.24bn
Reduce Universal Credit taper rate to 20% £-20.54bn £-21.10bn £-21.45bn £-21.88bn £-21.96bn £-22.33bn £-22.81bn
Raise Class 1 main employee NICs rate to 10% £11.06bn £11.51bn £11.83bn £12.14bn £12.47bn £12.81bn £13.29bn
Raise VAT standard rate by 2pp £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10% £-3.04bn £-3.17bn £-3.24bn £-3.32bn £-3.37bn £-3.43bn £-3.47bn
Raise the State Pension by 10% £-8.92bn £-9.13bn £-9.02bn £-9.06bn £-9.26bn £-9.51bn £-9.78bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.36bn £6.65bn £6.87bn £7.07bn £7.29bn £7.53bn £7.81bn
Raise higher rate by 1pp: change in income_tax £3.55bn £3.83bn £4.06bn £4.28bn £4.50bn £4.78bn £4.97bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.96bn £-4.11bn £-4.19bn £-4.27bn £-4.36bn £-4.47bn £-1.77bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.34bn £2.15bn £2.03bn £1.92bn £1.82bn £1.71bn £1.59bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.53bn £21.09bn £21.44bn £21.87bn £21.95bn £22.32bn £22.80bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.33bn £11.79bn £12.13bn £12.44bn £12.78bn £13.13bn £13.62bn
Raise VAT standard rate by 2pp: change in vat £25.01bn £25.68bn £26.29bn £26.92bn £27.58bn £28.26bn £28.95bn
Raise additional rate by 3pp: change in income_tax £2.83bn £3.07bn £3.27bn £3.47bn £3.67bn £3.91bn £4.23bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.04bn £3.17bn £3.25bn £3.32bn £3.38bn £3.43bn £3.48bn
Raise the State Pension by 10%: change in state_pension £12.25bn £12.71bn £12.83bn £13.02bn £13.41bn £13.80bn £14.21bn

MaxGhenis added a commit that referenced this pull request Oct 20, 2026
…ed claim

Since #2015 each Council Tax Reduction claim is assessed under its own
family's scheme, and #2007 recomputes a jointly liable applicant's deductions
under the other scheme. The oracle and the conservation and no-op invariants
charged every claiming family the head's-scheme amounts, so a pensioner head
with working-age sharers in England (no national working-age scale) failed
against a correct model. They now take each family's own-scheme amounts,
other-scheme amounts from the aggregator's helper, and each family's scheme
from the model.

UC attribution follows main's uc_non_dependants_counted: other families'
non-dependants count in the first liable claiming family's claim, and a
family's own in-unit non-dependant in its own claim if it claims UC. The
no-op invariant uses the counted claim instead of the head's family.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's HB conservation check asserted that families' deductions sum to the
household total of individual deductions. #2007 makes a non-dependant couple
pay one deduction, the higher (HB Regs 2006 reg 74(3)), and charges nothing
to a family whose claimant or partner is exempt (reg 74(6)). The check now
expects the pool of per-family amounts times the share of the rent borne by
families that are not exempt, and keeps an upper bound at the household
total.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
…4(6)

Brings #2007's test-only fix: the sharers conservation check counts a
couple once and leaves out an exempt joint occupier's share, which made
test_non_dependants fail on #2007 and #2017 alike. 6 of 6 pass here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 20, 2026 22:11
Round 6 of the independent review:

- The after-cap UC used in a non-dependant family's gross income counts a
  person's own capped benefits (contribution-based JSA and ESA, incapacity
  benefit, SDA, Maternity Allowance) only for the claimant or partner. UC
  Regs 2013 reg 79(1) caps the benefits "to which a single person or
  couple is entitled". A YAML case gives a 17-year-old in the family her own
  Maternity Allowance; it fails on the previous head (HB 5,470.40, CTR
  551.20 instead of 6,232.20 and 691.60).
- New council_tax_reduction_non_dep_deductions_mixed_schemes.yaml covers
  jointly liable applicants under different national schemes in England,
  Wales and Scotland, including the recompute path where the applicant's
  scheme differs from the household head's.
- 2025-26 second- and middle-band HB cases (45.15 and 101.35 a week).
- The sharers property test's docstring states invariant 4 as tested.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's case "Other investment income does not move a worker's band" pinned
the stopgap that left investment income out of the band until the reg 74(2)
remunerative-work test was modelled. With the test in place, a worker is
banded on all gross income: 739.02 a week, the 2025-26 top band.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
…ixed-scheme CTR tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The 70-year-old applicant in each Scottish case is on Pension Credit, so
their own council_tax_reduction_non_dep_deduction_exempt is true. The flag
matters only for a non-dependant, so the cases now also assert who is
eligible as a non-dependant. The deductions are unchanged. Reported by the
#2017 session.

The non-dependant property test's docstring now states that invariant 5
multiplies by the rent share (reg 74(5)) or the joint-liability share
(Sch 1 para 8(5)), as its oracle already does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
…with investment income)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A family liable for a share of the rent is a joint occupier, not a
non-dependant (HB Regs 2006 reg 3(2)(d)). is_non_dependant_of_household_head
tests the family's own rent, which is nil whenever the household's is, so a
sharer of a nil rent was both a non-dependant and a bearer of a share. Main's
aggregation charged that family part of its own deduction. This PR's never
charges a family for its own members, so the household's total fell short
of the pool times the shares borne.

The CI example (Hypothesis, derandomized) is a council tenancy at nil rent
with a sharer: HB deductions 510.90 against a pool of 1,021.80 borne in
full. The sharer is now left out of the pool, as in the HB aggregation
itself. HB is nil at nil rent, so no award changes.

A YAML case pins it, and main's sharers property test treats a sharer as
never a non-dependant for the HB pool. Both the replayed CI example and the
YAML case fail on the previous head and pass here.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
… a non-dependant

#2007 masks HB's other-family non-dependants to families with no share of the
rent (a joint occupier, reg 3(2)(d)), since at nil rent a sharer is not
benunit_is_rent_liable. Composed with #2017's pool: the mask applies to the
other-family term only, so a nil-rent sharer's own in-unit non-dependants are
still pooled and apportioned between the joint occupiers (reg 74(5)). A YAML
case pins it: sharer charged nothing, its adult son split [500, 500].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

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.

Housing Benefit non-dependant deductions: exclusive band edges, no remunerative-work test, one deduction per person, no exemptions

3 participants