Skip to content

Means-test the Council Tax Reduction applicant and partner, not the benefit unit's claimant - #2078

Merged
MaxGhenis merged 25 commits into
mainfrom
ctr-applicant-means-test
Oct 20, 2026
Merged

MaxGhenis merged 25 commits into
mainfrom
ctr-applicant-means-test

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Against main. #2006, #2009, #2015 and #2062 have merged, so this PR targets main (last merged at c281c2e, merge 38a251c, which brings in #2516). main already has the two identity variables (council_tax_reduction_head_applies_alone, is_council_tax_reduction_applicant_or_partner, which arrived with #2015 and now read #2062's is_resolved_household_head), and its per-family pensioner and exemption flags read them. This PR applies the same identity to the rest of the means test.

Summary

Council Tax Reduction (CTR) is means-tested on the applicant's own income and their partner's. The applicant is the person liable for the council tax. The model means-tested the benefit unit's claimant and partner (is_claimant_or_partner) instead, and the two are not always the same people.

The case that shows it (#2009 review r3, finding N3): an 80-year-old grandmother heads a household in Scotland and shares a benefit unit with two 17-year-old parents and their baby. #1896's parent-couple rule makes the young parents the benefit unit's claimant and partner. #2009 makes the grandmother the liable person, so the family claims through her, and #2015 puts the claim on her pensioner scheme. The means test on main still reads the young couple:

Grandmother's private pension CTR on main CTR with this PR
£0 £1,800 £1,800
£100,000 £1,800 £0

Who is assessed

Two variables on main say who the applicant is:

  • council_tax_reduction_head_applies_alone (BenUnit): the household head is liable for the council tax but is not the benefit unit's claimant or partner.
  • is_council_tax_reduction_applicant_or_partner (Person):
    • where the family's liable person is the benefit unit's claimant or partner, the claimant and partner, whatever their ages (a partner under 18 is not liable, but their income counts);
    • where the head applies alone, the head only;
    • for a family with no liable person, which cannot claim, the claimant and partner.

What changes

Part of the assessment On main, for the grandmother With this PR
Applicable income the young couple's income, plus their Child Benefit and other awards her own income
Personal allowance a couple's, on the young couple's ages, plus the pension-age couple rate: (114.35 + 383.35) × 52 = £25,880.40, a double count a single pensioner's (£13,312)
Premiums the benefit unit's, on the couple's circumstances her own, at the single rates (council_tax_reduction_premiums)
Pensioner earnings disregard on the couple's earnings, at the couple rate on her own net earnings (council_tax_reduction_net_earnings), at the single rate
Pension Credit routes (income and capital) the benefit unit's guarantee or savings credit not hers, so not applied
Income-based benefit passport the couple's Income Support, JSA or ESA passported her not passported by their award
Universal Credit route (Merton, Kingston, Newham, Westminster, Oxford) the couple's award put her on the Universal Credit figures her own income and allowance
Kingston and Westminster tariff income the couple's award removed her tariff income from capital her tariff income counts
Oxford's Child Benefit deduction took the couple's Child Benefit off her income nothing to take off

Where the head applies alone, she is assessed as a single person with no partner or children. The benefit unit's own awards (Child Benefit, Income Support, income-based JSA, income-related ESA, Universal Credit, tax credits, Pension Credit) and its children belong to its claimant and partner.

Her premiums follow main's rules for a single claimant: the pension-age schedule for a pensioner, otherwise the working-age one. Her severe disability premium needs a qualifying benefit, no carer benefit paid for caring for her, and no non-dependant. Her non-dependants are every other resident aged 18 or over who neither receives a qualifying benefit nor is blind, since she has no partner or children, so adult parents in her benefit unit bar it (HB Regs 2006 Sch 3 para 14(2)(a)(ii), which the model applies to CTR too). Who is paid a carer benefit for caring for her comes from main's is_cared_for_by_carer_benefit_recipient. It finds a carer in her own benefit unit, but gives a carer in another benefit unit only to that unit's claimant and partner. So a carer outside her benefit unit does not end her severe disability premium, though in law it would (see Not in this PR).

Her net earnings come from #2516's council_tax_reduction_net_earnings. It applies Housing Benefit's per-person rules (_net_earnings.py:person_net_earnings) at the scheme's own pension contribution share. This PR sums it over is_council_tax_reduction_applicant_or_partner, not is_claimant_or_partner. Housing Benefit is unchanged.

For a family whose applicant is the benefit unit's claimant, every part of the assessment is unchanged.

Law

Invariants

These are stated for every input. The property tests check them on generated households (20 examples per test, across all eight modelled schemes), and YAML cases pin the ones a generator rarely reaches.

  1. The liable head is assessed. A liable household head is always an applicant or partner of their own family. Raising the head's own private pension raises their family's applicable income.
  2. Monotone. Raising the head's pension never raises any family's simulated reduction.
  3. High income. With £250,000 more pension the head's family gets no simulated reduction, unless an income-based benefit passports it or its applicant has a Universal Credit award.
  4. Identity. Where the head does not apply alone, the applicant and partner are exactly the benefit unit's claimant and partner. Where the head applies alone, the head is the only applicant, and a young parent's earnings do not move the family's applicable income.
  5. Two inputs, one answer (differential). A head of any age who shares a benefit unit with parents aged 16 or 17 and their baby gets the same assessment as the same head entered as her own benefit unit, with the young family as another, in all eight schemes. "The same assessment" covers applicable income, applicable amount, premiums, passport, per-family pensioner flag and exemption, and reduction. The head's disability, Attendance Allowance, Carer's Allowance and blindness vary. Two limits keep the inputs comparable:
    • nobody takes up Universal Credit, Income Support or Pension Credit (a head inside another couple's benefit unit cannot be given her own award; the couple's JSA and Universal Credit are supplied as inputs);
    • the parents are under 18 (adult ones would be her non-dependants, and the model charges a deduction for them only when they are in another benefit unit).
  6. Another family's exemption never reaches a claim (the English working-age local schemes, which apply the exemption). A blind head who applies alone has no deduction; a sharer's claim in the same home still bears its share of a non-dependant's deduction. The national schemes do not yet apply the exemption at all (main's gap, Apply Housing Benefit and national Council Tax Reduction non-dependant deductions as legislated #2007).

Tests

  • YAML, applicant_or_partner.yaml: 19 end-to-end cases, none of which sets applicable income. 14 fail on main (47642d1). The other 5 pass there too: the two couple cases, the two Merton exemption cases and the pension-age relative case, which main's per-family flags already get right.
    • The grandmother with no income gets £1,800, and with a £100,000 pension gets £0.
    • In England her £20,000 pension gives £759.60: 1,800 − (20,000 − 1,486 tax − 13,312) × 20%.
    • The young couple's income-based JSA does not passport her.
    • Her premiums follow her own disability, at the single rates, and adult parents in her benefit unit bar her severe disability premium.
    • A disabled pensioner head who applies alone gets the pension-age schedule: no disability premium, and the severe disability premium (£4,474.60) when she receives Attendance Allowance.
    • A blind grandmother head has no non-dependant deduction in Merton, and her exemption does not reach a sharer's claim (the sharer still bears £345.80 and gets £554.20).
    • The young couple's Universal Credit does not put her on Newham's Universal Credit route, and does not remove her tariff income from capital in Kingston upon Thames.
    • A pension-age relative who is not the applicant or partner does not make a young couple's claim a pensioner's.
    • A partner under 18's income counts, whether the head is the adult or the minor.
  • test_legacy_award_readers_properties.py (Count only the claimant's and partner's legacy awards in means tests and passports #2027's): an intended change, now labelled. Its families flag no household head, so an added member older than the claimant becomes the head, who is liable and applies alone. That changes the CTR applicant, and with it council_tax_reduction_applicable_income and the passport (CI found an 18-year-old joined by a 19-year-old). The two CTR readers (CTR_APPLICANT_READERS) are left out of the with-and-without comparison only for those families, which must have the added member as the resolved household head. The comparison of a silent added member with the member as drawn still runs for every family, so what the member reports never counts.
  • claimant_family_scheme.yaml (Assess each Council Tax Reduction claim under its own family's scheme and exemption #2015's): one output changes. The young parents' Income Support no longer passports the grandmother (council_tax_reduction_relevant_income_based_benefit false); her pensioner status and award are unchanged.
  • Hypothesis, test_council_tax_reduction_applicant_properties.py: 2 tests covering invariants 1-5.
  • Mutation checks. On the October 3 base, ten mutations each put back one piece of the old behaviour, and every one made a test fail. Review r3 ran 11 more at 47c525c. Five of them got through: the head's carer condition, her own additional-disregard test, the couple disregard rate, and the Pension Credit income and capital gates. Four YAML cases now pin them, and each mutation fails one (tests/mutations_r4.out in the notes). Review r4 re-applied all five at d61a973a8, and each failed exactly its intended case.
  • Regression at 38a251c (Give Council Tax Reduction and Income Support their own pension contribution shares #2516 merged in), all at -n 4:
    • all 240 CTR YAML cases pass;
    • all 1,493 YAML cases under finance/benefit/family/ and gov/dwp/pension_credit/ pass;
    • all 166 tests in the 23 CTR, Housing Benefit, pension-share and legacy-reader property files pass.

Enhanced FRS impact

The Aggregate impact check ran the certified dataset (enhanced_frs_2024_25.h5, policyengine-uk-data 1.58.1) on main (e2ea328) against this head's merge commit, a full microsimulation for each fiscal year 2025-26 to 2031-32: 0 checks broken by this change and no moves flagged for review (run 39315538002). Earlier local Microsimulation runs, main (6d89338) against this branch (8b6d819), on the same file each time (aggregates only):

Dataset Year CTR, main CTR, branch Households that change
Enhanced FRS 2024-25 (e433e532) 2026 £2,336.58m £2,336.58m none
Enhanced FRS 2024-25 (e433e532) 2025 £2,270.52m £2,270.52m none
Payer build (ed1a2991, uk-data#512) 2026 £2,164.94m £2,164.94m none

The reduction is identical for every household in all three runs. So are these, along with household net income (and so Housing Benefit) and poverty status:

  • applicable income and amount;
  • the passport;
  • the per-family pensioner and exemption flags;
  • assessable capital;
  • the pensioner earnings disregard.

No household in the microdata has a head who applies alone. The FRS forms a benefit unit from one adult or a couple and their dependent children, so it does not put parents into a grandparent's benefit unit. The fix therefore changes household calculations entered that way, and no population estimate.

Not in this PR

  • Non-dependant deductions for adults in the applicant's own benefit unit. Where the head applies alone and the young couple are 18 or over, they are her non-dependants. This PR stops counting their income, and bars her severe disability premium on their account, but charges no deduction for them. Charge non-dependant deductions for non-dependants within the claimant's benefit unit #2017 and Charge in-unit non-dependants in the local Council Tax Reduction schemes, and exclude a lodger personally only outside the head's family #2077 (open) add in-unit non-dependants (see Coordination). The three YAML cases with 19-year-old parents say they are provisional until then.
  • A head's partner or child who is not the benefit unit's claimant, partner or child. The model has no relationship input to find them, so a head who applies alone is single.
  • The head's own means-tested benefits. A head who applies alone may have her own Universal Credit or Pension Credit, which the model does not calculate inside another couple's benefit unit.
  • Children's income. The means test still counts the income of the applicant's children, as before (SSI 2012/319 reg 21(3) and SSI 2021/249 reg 36(2) exclude it).
  • Inherited simplifications this PR does not touch, for every applicant: the national schemes test capital against household savings; the working-age personal allowances in Wales are Housing Benefit's (£95.55 single aged 25 or over, £150.15 couple), not the £101.85 and £159.85 of WSI 2013/3029 Sch 7 para 1 for 2026-27 (Give Scotland and Wales working-age council tax reduction their own rules (UC routes, passport, child amounts) #1966; Scotland's SSI 2021/249 Sch 1 para 1 amounts are the ones the model uses); a carer in another benefit unit is attributed only to that unit's claimant and partner, so it does not end the severe disability premium of a head who applies alone (an ordinary claimant's carer in another unit does count). That last case needs a carer who is under 18, blind or on a qualifying benefit (any other carer is a resident aged 18 or over who is her non-dependant and bars the premium anyway). It never occurs in the Enhanced FRS, where no household head applies alone.

Coordination

Test plan

  • YAML tests whose expected values come from the regulations and published rates (applicant_or_partner.yaml).
  • ruff format
  • Changelog fragment changelog.d/ctr-applicant-means-test.fixed.md

Reproducer: policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/applicant_or_partner.yaml; policyengine_uk/tests/test_council_tax_reduction_applicant_properties.py::test_head_applying_alone_matches_her_own_benefit_unit

axiom: uk/regulations/uksi/2012/2885/schedule/1/paragraph/11 encoded-correct (tests applicant_income_and_capital_are_calculated, partner_income_and_capital_are_calculated, household_member_is_not_treated_without_polygamous_marriage) | Scotland and Wales (SSI 2012/319 reg 21, SSI 2021/249 reg 36, WSI 2013/3029 Sch 1 para 5 and Sch 6 para 7) TheAxiomFoundation/rulespec-uk#427 queued

🤖 Generated with Claude Code

MaxGhenis and others added 9 commits October 1, 2026 14:30
… and exemption

In a shared-rent household every family liable for the rent claims, but the
pensioner scheme and the non-dependant exemption were picked once per
household from the head's family. SI 2012/2885 reg 3 (and SI 2012/2886 Sch
para 3, SI 2013/3029 reg 3, SSI 2021/249 reg 3, SSI 2012/319 reg 12) define
"pensioner" per person and partner, and the exemption applies where "the
applicant or his partner" is blind or gets a listed benefit (SI 2012/2885 Sch 1
para 8(6) and equivalents).

- council_tax_reduction_pensioner (BenUnit) replaces the household flag; the
  name and entity match #1944 and #1966, which extend the same definition.
- council_tax_reduction_applicant_has_non_dep_exemption (BenUnit) replaces
  the household exemption; the councils' schemes apply it per claim.
- council_tax_reduction_scheme_supported is per family, so each family falls
  back to its reported reduction only where its own scheme is unmodelled.
- Councils' person-level non-dependant deductions no longer depend on the
  head's family; each claimant's own scheme decides whether to use them.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the scheme chosen per family, one household can hold a simulated claim
and a family whose scheme is not simulated. Review r1 found that a family
that cannot claim then kept its reported reduction beside a head whose
simulated award already covered the whole bill: £3,000 against £1,800.

- A family that cannot claim keeps a reported reduction only where no claim
  in its household is simulated (new household flag
  council_tax_reduction_household_has_simulated_claim). Without sharers this
  is the base behaviour.
- A jointly liable claimant's reported reduction is limited to its own share
  of the council tax (SI 2012/2885 Sch 1 para 7(3)-(4)), the most any scheme
  could give it.

Tests: three YAML cases; the property tests now generate reported
reductions, check the fallback and the household bound, and toggle one
claimant's exempting benefit to show it leaves the other claim unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2009 now names the liable people directly. A household head can be liable
without being the claimant or partner of their family (a grandparent heading
a family formed around a young couple), so "the applicant or his partner"
(SI 2012/2885 reg 3, Sch 1 para 8(6)) is not always the family's claimant and
partner. New person-level council_tax_reduction_applicant_or_partner: the
liable member, and the other member of the couple where the liable member is
the claimant or partner, whatever the partner's age; in a family that cannot
claim, its claimant and partner. The pensioner flag and the applicant
exemption read it.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gston's tariff income

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#2078 (also stacked on #2009) adds
is_council_tax_reduction_applicant_or_partner and
council_tax_reduction_head_applies_alone for the CTR means test. They define
the same people as this PR's council_tax_reduction_applicant_or_partner: the
claimant and partner where the liable person is one of them, the liable head
alone otherwise, and the claimant and partner in a family that cannot claim.
Take #2078's two files byte for byte, so whichever PR lands second merges
without conflict, and point the pensioner flag and the applicant exemption
at it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 3, 2026 07:47
…cant-means-test

Stack #2078 on #2015 so each claim's non-dependant exemption is its own
applicant's or partner's (review r1, P1). Keeps #2015's deletion of the
household pensioner and exemption flags; #2015 already reads
is_council_tax_reduction_applicant_or_partner. Repoints three
applicant_or_partner.yaml cases and the differential property at the
per-family flags, and adds the review's two-claimant Merton regression:
a blind grandmother head applying alone is exempt, the sharer's claim
still bears half the son's deduction (£554.20).

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

Review r2 found that capping every jointly liable claimant's reported
reduction at its share could discard a lawful report: the model's divisor
(#2006's joint-liability share) counts students that SI 2012/2885 Sch 1
para 7(5) leaves out. The cap exists to stop a reported claim and a simulated
claim together exceeding the bill, so it now applies only where another claim
in the household is simulated, on the share that claim uses. Where nothing is
simulated, reports are kept as reported, as on the base.

Tests:
- YAML: a jointly liable claimant keeps its whole report where nothing is
  simulated; a pension-age grandmother in working-age applicants' family does
  not make their claim a pensioner's (an intended change under reg 3(1): the
  base paid £1,800 on the pensioner scheme).
- Properties: the fallback oracle follows the narrowed cap, and property 4
  compares council_tax_benefit wherever the household's reconciliation is
  unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis changed the base branch from ctr-claimant-household-head to ctr-per-family-scheme October 3, 2026 11:51
MaxGhenis and others added 2 commits October 3, 2026 08:01
On the payer build, the only remaining change came from heads whose reported
reduction was capped beside a sharer whose simulated claim paid nothing. With
no simulated reduction competing for the bill there is nothing to reconcile,
so the cap now applies only where the simulated claims in the household pay
something. The household bound still holds: each simulated award is within
its share, and a capped report within its own.

Tests: a YAML case where the simulated claim beside a report pays nothing;
the fallback oracle, the bound and property 4's comparison follow the paid
condition.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 4, 2026
Resolve conflicts with #1909 (capital routing), #1944 (council_tax_reduction_pensioner;
keep main's file with the Welsh/Scottish sentence updated) and programs.yaml.
After #1952 carer_support_payment is the CSP component only, so drop the
supplement subtraction. Route every working-age person mask through one
helper (working_age_applicant_or_partner) so #2078 can swap the applicant
identity in one place.

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

Copy link
Copy Markdown
Collaborator Author

Composition note from #1966 (Scotland/Wales working-age CTR), now based on main at a5e5a73.

Every working-age person mask in #1966 goes through one helper, council_tax_reduction/working_age/_applicant.py::working_age_applicant_or_partner. It reads is_claimant_or_partner today. Whichever of #1966 and this PR lands second should:

  1. point the helper at is_council_tax_reduction_applicant_or_partner;
  2. move the benunit-level family reads (is_couple, is_lone_parent, the legacy child flag, the legacy premium variables) to the applicant's own view for council_tax_reduction_head_applies_alone;
  3. run test_head_applying_alone_matches_her_own_benefit_unit, plus your Scottish case: a 40-year-old head with a £100k pension, two 17-year-old parents and a baby, and a £1,800 bill, which should give £0.

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

#2001 merged first, on 2026-10-04 as 3518331b4. Under the composition note on #2001, this PR therefore carries #2001's rules into the head-alone path of council_tax_reduction_premiums.

On main, the carer premium is is_claimant_or_partner & is_entitled_to_carer_benefit, counted per person, times gov.dwp.carer_premium.single times 52, capped at one when partners_care_for_same_severely_disabled_person is true. A head who applies alone counts as one person: single × 52 if they are entitled to a carer benefit.

Main also now chooses the CTR premium schedule with council_tax_reduction_pensioner, between working_age_benefits_premiums and pension_age_benefits_premiums (from #1907). test_head_applying_alone_matches_her_own_benefit_unit should check the head-alone path against those.

@vahid-ahmadi vahid-ahmadi left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Max. Reviewed at c5905b4: request changes.

Means-testing the liable applicant and their partner follows SI 2012/2885 Sch 1 para 11 ("The income and capital of— (a) an applicant; and (b) any partner of that applicant"). The grandmother case now gets her own income, the pensioner amount and £1,800.

  1. Blocking: this needs the same rebase as #2015, and it is behind its own base.
    • It merged #2015 at 9efdea22d, so it lacks 35ca533 and cc4d9ae.
    • In the council_tax_reduction_applicable_amount.py conflict, keep main's council_tax_reduction_pensioner (:31 uses any_over_SP_age now) and main's split of premiums into pension-age and working-age.
    • Update the stale "Stacked on #2009 at 4b84ea0" line.
  2. Blocking: a pension-age head who applies alone gets working-age premiums.
    • council_tax_reduction_premiums.py:39-50 hardcodes the working-age disability, enhanced and severe disability, and carer premiums, and applicable_amount.py:66 adds them.
    • A disabled 80-year-old gets £15,644.20 instead of £13,312: that is +£2,332.20 a year (£44.85 × 52).
    • The pension-age schedule has no disability premium.
    • Add a test for a disabled, pension-age head applying alone. The only premium case uses a 60-year-old in Scotland.
  3. Should fix: the passport and capital tests read the wrong people.
    • After the rebase, main's GC passport reads benunit("in_receipt_of_guarantee_credit"), which for a head applying alone is the young couple's unit.
    • Capital is still household savings (simulated_council_tax_reduction_benunit.py:86, _legacy.py:56-60), although the body says it tests "income and capital".
    • Route both through the applicant, or list them under "Not in this PR".
  4. Should fix: young parents aged 18 or over in a family whose head applies alone are neither counted nor deducted as non-dependants. This affects the 19-year-old JSA, Newham and Kingston cases. Link #2017 and mark those expectations as provisional.

Verified:

  • Tests at c5905b4: 51/51 YAML, 5/5 property tests and 91/91 local-authority YAML pass.
  • 9 of the 12 new cases fail on the current base, so the core fix is still needed.
  • No income is counted twice across claims (applicable_income.py:36-42).
  • The body gives aggregates only.

Council Tax Reduction reads the applicant and partner (#2078), and the
applicant is the liable household head. These generated families flag no
head, so an added member older than the claimant becomes the head, applies
alone, and changes the applicant: intended. The two CTR readers are left out
of the with/without comparison for those families only, which must have the
added member as the resolved household head; the silent/as-drawn comparison
still checks that the member's own reports never count.

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

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base c281c2e96b against head 5c057ef02a, 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: 0 (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

None.

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
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
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Household net income by decile

No household's net income changes in any year.

No change in any year: receipts by tax head; government balance, each component counted once; model totals; components the model counts twice; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles; standard reform costings (change in gov_balance); 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 c281c2e96b uk 2.141.2 (files 3de7a8d273f3), core 3.33.2, py 3.13.16 aarch64 e4bd31f5fe63 0d0426ee9e38 935.4s
head #2078 merged into main 5c057ef02a uk 2.141.2 (files 04451415385b), core 3.33.2, py 3.13.16 aarch64 e4bd31f5fe63 0d0426ee9e38 925.07s

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.29bn £318.98bn £336.45bn £351.55bn £367.04bn £385.12bn £403.42bn
National Insurance (employee and self-employed) £52.58bn £54.94bn £56.75bn £58.48bn £60.51bn £62.45bn £64.90bn
National Insurance (employer) £152.64bn £159.18bn £164.14bn £168.73bn £175.57bn £181.08bn £188.22bn
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.59bn £8.92bn £9.19bn £9.33bn £9.61bn £9.87bn £10.15bn
Council Tax Reduction £1.99bn £2.03bn £2.08bn £2.13bn £2.18bn £2.23bn £2.28bn
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,244k 1,247k 1,249k
Council Tax Reduction 3,185k 3,210k 3,223k 3,244k 3,262k 3,280k 3,293k
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.39bn £939.21bn £976.17bn £1,009.31bn £1,044.89bn £1,081.66bn £1,122.50bn
Government spending £536.58bn † £550.92bn † £557.25bn † £564.32bn † £572.87bn † £582.12bn † £591.28bn †
Government balance, each receipt once £362.81bn † £388.29bn † £418.91bn † £445.00bn † £472.02bn † £499.54bn † £531.22bn †
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.52bn £942.34bn £979.30bn £1,012.44bn £1,048.02bn £1,084.79bn £1,125.63bn
household_tax £496.17bn £522.63bn £548.43bn £570.57bn £592.62bn £617.00bn £643.70bn
pre_budget_change_household_tax £488.34bn £514.51bn £540.08bn £561.53bn £583.34bn £607.46bn £633.81bn
gov_spending £536.58bn † £550.92bn † £557.25bn † £564.32bn † £572.87bn † £582.12bn † £591.28bn †
household_benefits £536.58bn † £550.92bn † £557.25bn † £564.32bn † £572.87bn † £582.12bn † £591.28bn †
gov_balance £365.94bn † £391.42bn † £422.04bn † £448.13bn † £475.15bn † £502.67bn † £534.35bn †
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,887.41bn £1,945.59bn £2,017.37bn
Household net income £1,658.19bn † £1,706.78bn † £1,738.62bn † £1,772.80bn † £1,809.05bn † £1,850.77bn † £1,902.51bn †
Household net income (HBAI definition) £1,466.75bn £1,513.56bn £1,545.81bn £1,578.85bn £1,613.04bn £1,652.17bn £1,702.61bn
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 20.9% 20.4% 21.0% 21.2% 21.5% 21.7% 21.8%
Absolute poverty, after housing costs: children 31.8% 30.0% 30.7% 31.0% 31.2% 31.6% 31.8%
Absolute poverty, after housing costs: working-age adults 19.4% 19.2% 20.0% 20.2% 20.5% 20.7% 20.8%
Absolute poverty, after housing costs: pensioners 12.6% 12.3% 12.0% 12.2% 12.3% 12.3% 12.4%
Relative poverty, before housing costs: everyone 16.9% 16.4% 16.4% 16.5% 16.6% 16.7% 16.7%
Relative poverty, before housing costs: children 25.6% 23.5% 23.2% 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.1% 14.3% 14.2% 14.2% 14.4%
Relative poverty, after housing costs: everyone 21.5% 21.1% 21.3% 21.3% 21.6% 21.5% 21.8%
Relative poverty, after housing costs: children 32.6% 31.3% 31.1% 31.1% 31.4% 31.3% 31.8%
Relative poverty, after housing costs: working-age adults 19.8% 19.8% 20.2% 20.3% 20.5% 20.6% 20.7%
Relative poverty, after housing costs: pensioners 13.4% 12.8% 12.6% 12.4% 12.4% 12.3% 12.4%
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,427k 10,848k 10,947k 11,079k 11,209k 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,070k 6,165k 6,237k 6,315k 6,319k
Absolute poverty, before housing costs: pensioners 1,627k 1,549k 1,517k 1,529k 1,544k 1,561k 1,565k
Absolute poverty, after housing costs: everyone 14,541k 14,217k 14,696k 14,937k 15,157k 15,396k 15,530k
Absolute poverty, after housing costs: children 4,767k 4,515k 4,643k 4,699k 4,756k 4,835k 4,896k
Absolute poverty, after housing costs: working-age adults 8,277k 8,253k 8,666k 8,844k 8,994k 9,142k 9,203k
Absolute poverty, after housing costs: pensioners 1,497k 1,449k 1,386k 1,394k 1,408k 1,419k 1,431k
Relative poverty, before housing costs: everyone 11,760k 11,456k 11,504k 11,625k 11,706k 11,868k 11,914k
Relative poverty, before housing costs: children 3,840k 3,538k 3,514k 3,525k 3,546k 3,582k 3,602k
Relative poverty, before housing costs: working-age adults 6,154k 6,160k 6,365k 6,465k 6,537k 6,651k 6,651k
Relative poverty, before housing costs: pensioners 1,766k 1,758k 1,625k 1,634k 1,623k 1,634k 1,661k
Relative poverty, after housing costs: everyone 14,916k 14,721k 14,905k 15,007k 15,225k 15,288k 15,517k
Relative poverty, after housing costs: children 4,889k 4,715k 4,697k 4,719k 4,791k 4,799k 4,891k
Relative poverty, after housing costs: working-age adults 8,435k 8,497k 8,758k 8,878k 9,019k 9,074k 9,197k
Relative poverty, after housing costs: pensioners 1,591k 1,508k 1,451k 1,410k 1,415k 1,415k 1,429k
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.3052 0.3065 0.3072 0.3078 0.3084 0.3094
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,707 † £17,997 † £17,941 † £17,992 † £18,326 † £18,522 † £18,686 †
Decile 2: mean household_net_income per household £28,362 † £29,040 † £28,672 † £29,013 † £29,374 † £29,780 † £30,330 †
Decile 3: mean household_net_income per household £34,607 † £35,901 † £36,507 † £37,008 † £37,263 † £37,949 † £38,656 †
Decile 4: mean household_net_income per household £39,329 † £40,908 † £41,942 † £42,838 † £43,195 † £43,846 † £44,955 †
Decile 5: mean household_net_income per household £44,874 † £46,151 † £46,931 † £47,446 † £48,380 † £49,253 † £50,077 †
Decile 6: mean household_net_income per household £47,931 † £49,321 † £50,272 † £51,051 † £52,161 † £52,926 † £54,242 †
Decile 7: mean household_net_income per household £56,322 † £57,584 † £58,472 † £59,449 † £60,165 † £61,636 † £62,887 †
Decile 8: mean household_net_income per household £69,252 † £70,364 † £71,639 † £72,874 † £74,337 † £75,704 † £77,574 †
Decile 9: mean household_net_income per household £79,674 † £82,009 † £83,247 † £84,449 † £86,137 † £87,749 † £89,958 †
Decile 10: mean household_net_income per household £117,666 † £120,533 † £122,448 † £124,609 † £126,968 † £129,679 † £132,877 †
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.46bn £12.80bn £13.28bn
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.26bn £3.46bn £3.66bn £3.89bn £4.21bn
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.03bn £-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.54bn £3.83bn £4.06bn £4.28bn £4.50bn £4.77bn £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.77bn £13.12bn £13.61bn
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.26bn £3.46bn £3.66bn £3.89bn £4.21bn
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 and others added 2 commits October 20, 2026 02:53
Folds #2479's CTR-specific severe disability premium into the ordinary
branch of council_tax_reduction_premiums, and limits #2470's pensioner
Child Benefit exclusion to families whose applicant is the benefit unit's
claimant (a head who applies alone counts none of its awards).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…; document the carer-attribution limit

Review r3 (APPROVE at 47c525c):
- P3-2: four YAML cases pin the head-alone carer condition, her own single
  earnings disregards and additional-disregard test, and the gated Pension
  Credit income and capital routes; each catches its mutation.
- P2-3: the under-18-head couple case moves from Cardiff to Edinburgh,
  whose working-age scheme pays the flat couple rate the model uses.
- P2-1/P3-1: council_tax_reduction_premiums documents that a carer outside
  a lone-applying head's benefit unit does not end her severe disability
  premium (inherited attribution).

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

Copy link
Copy Markdown
Collaborator Author

Independent review r3 (GPT-6.1 Sol, Subfleet 20261020-025728-ctr-applicant-review-r3): APPROVE at 47c525c.

Vahid's approval at 8b6d819 also stands. The remaining step is #2516, which lands first; I've rehearsed that resolution and will follow it with a delta review.

MaxGhenis and others added 3 commits October 20, 2026 06:46
…eans-test

Resolution, as set out in #2516's "Merge order" section:
- housing_benefit_net_earnings: #2516's version (person_net_earnings with
  Housing Benefit's own share); housing_benefit_person_net_earnings removed.
- council_tax_reduction_net_earnings: person_net_earnings at
  council_tax_reduction_pension_contribution_deduction_rate, summed over
  is_council_tax_reduction_applicant_or_partner.
- council_tax_reduction_pensioner_earnings_disregard: reads
  council_tax_reduction_net_earnings, keeping the head-alone rates and
  conditions.
- council_tax_reduction_applicable_income: #2516's scheme share applied to
  the applicant-and-partner members (auto-merged).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ra 8(a)

Review r4 P3-1: a carer under 18 in another benefit unit also leaves a
head who applies alone with her severe disability premium. P3-2: the £5
single earnings disregard is SI 2012/2885 Sch 4 para 8(a), not para 2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis added this pull request to the merge queue Oct 20, 2026
Merged via the queue into main with commit 79fa317 Oct 20, 2026
15 of 16 checks passed
@MaxGhenis
MaxGhenis deleted the ctr-applicant-means-test branch October 20, 2026 20:59
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Merge audit (merged through the merge queue at head 38a251c5e…, pinned with expectedHeadOid)

MaxGhenis added a commit that referenced this pull request Oct 20, 2026
…l-derived-income

Resolve the CTR conflicts with #2078's applicant model:
- applicant_has_universal_credit (#2078's helper in _legacy.py) now reads
  council_tax_reduction_universal_credit_award, so the local schemes, Oxford
  and this PR's capital, tariff and home-letting routes share one award test,
  including an award the benefit cap or deductions reduce to nil;
- Kingston and Westminster keep this PR's capital
  (council_tax_reduction_assessable_capital) with #2078's helper;
- council_tax_reduction_applicable_income keeps both documentations and
  reference lists;
- drop this PR's head-applies-alone checks on the passport, which #2078 now
  builds into council_tax_reduction_relevant_income_based_benefit.

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

Conflicts:
- council_tax_reduction_pensioner.py: main's per-claim flag (#2078);
  its docstring now says Welsh and Scottish claims that fail it take
  the working-age route.
- CSP and pensioner tests: keep main's statutory 2025-26 amounts
  (#2110) and the working-age route's outputs; the capped Welsh
  mixed-age UC couple gets the maximum reduction under Sch 6 paras 3, 9.

Composition:
- Route on council_tax_reduction_pensioner (claim_pensioner is gone).
- #2078: every person mask reads is_council_tax_reduction_applicant_or_partner;
  where the head applies alone she is single, and the benefit unit's
  UC, income-related benefits, tax credits and children are not hers
  (working_age/_applicant.py helpers). Premium conditions follow
  council_tax_reduction_premiums for a head alone, and the severe
  disability premium uses CTR's own family test.
- #2288: children and lone parents follow the scheme's own young
  person (is_child_or_young_person_for_council_tax_reduction,
  is_council_tax_reduction_lone_parent).
- UC now counts statutory pay itself, so Scotland's UC route uses
  uc_individual_earned_income_before_mif (no minimum income floor in
  SSI 2021/249 regs 49-51) without adding it again.
- Main's tests that pinned Scottish and Welsh working-age awards under
  the shared formula are re-derived under the devolved rules.

Review r3:
- R3-1: tax disregarded from Welsh unearned income is shared only with
  taxable non-earnings the schemes do not count; property income is
  outside earned_income_tax already.
- R3-2: the Scottish LCW/LCWRA £20 tests "under pensionable age" and
  "in employment" separately (Sch 3 para 4(3)).
- R3-3: without UC, self-employed profit takes the prescribed notional
  basic-rate tax and Class 4 (Class 2 before April 2024), not the tax
  paid (SSI 2012/303 reg 38 via SSI 2021/249 reg 51(9); WSI 2013/3029
  Sch 6 para 25). Employed earnings deduct the tax and Class 1 on the
  employment only.
- R3-4: the CSP test header's tax note is pension-age only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 20, 2026
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>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
F1. Where a liable household head is not her benefit unit's claimant or
partner, she applies for Council Tax Reduction alone (#2078), but the UC and
HB in-unit helpers made her a non-dependant of her own benefit unit's couple.
She is the householder in whose name the accommodation is rented: UC Sch 4
para 9(2)(d) and HB reg 3(2)(d)-(e) exclude her. Both helpers now exclude
is_resolved_household_head. A YAML case pins UC and HB at 0 while CTR keeps
the couple as her non-dependants.

F2. uc_non_dep_deductions' documentation states that "makes a claim" is the
claims_universal_credit flag, so a family flagged as claiming counts its own
non-dependants even with a nil award, and says where other families' go.
A YAML case pins a non-claiming lodger's son in the householder's claim.

F5. The changelog names the household head rule, joint-occupier
apportionment and the narrowed para 16(2)(b) Pension Credit limb. The
property oracle checks all three in-unit sets (UC, HB, CTR); the generator
now states the child's Child Benefit status, since inputs set for some
members are inputs for all.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
#2078 and this PR both edit council_tax_reduction_applicable_income.py.
Kept #2078's member mask, its applicant_family gating and its comments,
and this PR's IIDB, SDA and IB block, which stays masked by
is_council_tax_reduction_applicant_or_partner so a child's benefits never
count. The documentation joins both paragraphs, #2078's first, and the
reference list is the union of both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
Under the merged code the head's State Pension counts through #2078's
member mask and her IIDB through this PR's applicant-and-partner mask,
while the father's IIDB in her benefit unit does not count. The case
fails on each parent: 2,432.56 on f120163 and 12,547.60 on main
76cfc9e, against 14,980.16.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
Main moved to #2078 (Council Tax Reduction applicant means test) while the
previous merge was being resolved. No conflicts: CTR applicable income
still deducts income tax before the winter fuel payment charge, and CTR
net earnings still go through person_net_earnings, which does too.

Main: 79fa317

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 21, 2026
The full Python suite at 2e37b1e failed test_claimant_invariants: it
pinned that no member of a sharer family is a CTR non-dependant, but an
18-year-old presumed the 66-year-old sharer's child, not in education, is
outside the sharer's family and a non-dependant (SI 2012/2885 reg 9(1),
(2)(a)). The assertion now excludes is_benefit_unit_non_dependant_for_
council_tax_reduction members, and "no claimant or partner is a
non-dependant" now reads #2078's applicant identity, so a head applying
alone may have her benefit unit's couple as non-dependants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 22, 2026
Main has moved the tax credit member mask into tax_credits_current_year_income
and, through #2078, means-tests the Council Tax Reduction applicant and
partner. Both conflicts take main's code and re-apply this PR's change
where the masks now live: the tax credit income counts the claimants
alone, and the CTR income the applicant and partner alone, dropping the
family's children and young persons that #2078 still counted.

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

Each case said it was provisional until #2017: the 19-year-old parents are
the grandmother's non-dependants, but the model charged none in her benefit
unit. They passed only because the couple defaulted to tertiary education,
so the full-time student exemption applied (maintainer review point 3). The
couple are now not in education, and the Newham father works 37.5 hours:

- England pensioner (JSA): the payee is exempt, the other pays the lowest
  amount, 270.40, so the reduction is 489.20, not 759.60.
- Newham (UC): one deduction, the father's 22.61 a week on £576.92
  (1,175.72); the mother has no earned income of her own, so is exempt.
  The reduction is 84.28, as the maintainer's probe gave.
- Kingston upon Thames (UC): both on UC with no earned income, so both are
  exempt; the reduction is unchanged at 1,627.32.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants