Skip to content

Give Scotland and Wales working-age council tax reduction their own rules (UC routes, passport, child amounts) - #1966

Draft
MaxGhenis wants to merge 9 commits into
mainfrom
ctr-working-age-shortfall
Draft

MaxGhenis wants to merge 9 commits into
mainfrom
ctr-working-age-shortfall

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #1962. Also closes #1935 for Scotland and Wales.

axiom: SSI 2021/249 regs 13(11), 35, 42, 49(6), 50(3), 57(1)(p), Sch 1 para 6(1), Sch 3 para 4(3); WSI 2013/3029 Sch 6 paras 3, 9, 15(3), Sch 7 paras 1-4 and 14, Sch 9 para 4, Sch 9 and 10 para 8 | TheAxiomFoundation/rulespec-uk#393 queued (extended for the review fixes in this comment)

What was wrong

Working-age households in Scotland and Wales ran through the pension-age means test, built on Housing Benefit parameters. On main (41a996e) in 2026, simulated working-age CTR was:

  • Scotland: £0.045bn (0.056m households), against £0.134bn (0.343m) reported in the FRS;
  • Wales: £0.000bn (0.001m), against £0.072bn (0.111m) reported.

Four legal defects caused it:

  1. Universal Credit. The whole UC award, including the housing costs element, counted as income against a Housing Benefit personal allowance with no children in it. The law is different in each country:
    • Wales (WSI 2013/3029 Sch 6 paras 3 and 9) compares the Secretary of State's UC income plus the award with the UC maximum amount. The housing and child elements cancel, and a UC claimant with no earnings gets the maximum reduction.
    • Scotland (SSI 2021/249 regs 35, 42, 57(1)(p) and (2)(d)) keeps its own applicable amount. It counts as income only the UC child element (with disabled-child additions) plus the childcare costs element, capped at the award. Earnings are measured on the UC basis with the CTR earnings disregards and no work allowance.
  2. No passport. Claimants on Income Support, income-based JSA or income-related ESA were means-tested. The law gives them the maximum reduction: SSI 2021/249 reg 13(11); WSI 2013/3029 Sch 9 para 8 and Sch 10 para 8.
  3. Applicable amounts.
    • There were no child amounts: Scotland's child premium is £109.85 per child (25% above Housing Benefit since 2017), Wales's child amount £87.88.
    • There was no family premium: £20.22 in Wales, and in Scotland until it closed to new claims on 1 May 2016.
    • There was no disabled child premium or child enhanced disability premium.
    • Welsh personal allowances were Housing Benefit's (£95.55 / £75.65 / £150.15) instead of Wales's own (£101.85 / £80.60 / £159.85).
    • The adult premiums were the projected DWP amounts, not the devolved ones, which differ in most years (2025-26 disability premium: £47.48 projected against £43.20 in law).
    • The carer premium was paid once for a couple even when both qualify.
  4. Income.
    • Child Benefit was counted; both countries disregard it.
    • There were no earnings disregards (£5, £10, £20 or £25, plus £17.10), no childcare deduction and no tariff income from capital.
    • Actual interest, dividends and rent were counted, where the law treats them as capital.

What this changes

simulated_council_tax_reduction_benunit sends a claim down a new working-age route when the household is in Scotland or Wales and council_tax_reduction_claim_pensioner (the per-claim scheme flag the national formula routes on, from #1944 and #2006) is false. Every person mask in the route goes through working_age/_applicant.py, so #2078's applicant identity is a one-line swap. The new variables are in council_tax_reduction/working_age/:

Variable Rule
council_tax_reduction_devolved_working_age Scotland or Wales, not a CTR pensioner. Mixed-age UC couples take this route (WSI 2013/3029 reg 3; SSI 2021/249 reg 3).
council_tax_reduction_working_age_applicable_amount Wales with UC: uc_maximum_amount. Otherwise: personal allowance, child amounts, and the devolved adult premiums (council_tax_reduction_working_age_adult_premiums).
council_tax_reduction_working_age_personal_allowance Couple / lone parent / single 25+ / single under 25. The higher single rate also applies on main-phase ESA and, in Scotland, on UC with LCW.
council_tax_reduction_working_age_child_amounts Per-child amount, family premium, disabled child premium, child enhanced disability premium.
council_tax_reduction_working_age_adult_premiums, _carers Disability, severe disability, enhanced disability premiums at the devolved amounts (who qualifies follows the legacy premium variables), and a carer premium for each claimant or partner entitled to Carer's Allowance or Carer Support Payment, including an entitlement an overlapping benefit reduces to nil (WSI 2013/3029 Sch 7 para 14(1); SSI 2021/249 Sch 1 para 6(1)(a)-(b)). Scotland also counts an award of UC that includes the carer element (para 6(1)(c)), as one carer when no one in the family is entitled to a carer benefit.
council_tax_reduction_working_age_applicable_income Passported: 0. Wales with UC: UC earnings before the work allowance + UC unearned income + the award. Otherwise: net earnings − disregards − childcare + unearned income + tariff income (+ relevant UC payments in Scotland).
council_tax_reduction_working_age_person_earned_income, _earned_income, _employed_earned_income Per claimant/partner. Only the tax and NI in respect of the employment or trade come off earnings (SSI 2021/249 regs 49(6)(b), 50(3)(a); WSI 2013/3029 Sch 6 para 15(3)(a)): the UC model's split of each person's income tax (uc_income_tax_on_earnings, earnings as the lowest slice of non-savings income) and their Class 1, 2 and 4 NI (uc_national_insurance_on_earnings), never Class 3, tax on pensions or tax on dividends. Wales with UC: the UC model's own earned income before the work allowance (uc_individual_earned_income), the Secretary of State's figure (Sch 6 para 9). Scotland with UC: that figure plus SSP/SMP/SPP (reg 49(4)). Without UC: employment and self-employment income plus SSP/SMP/SPP, less half of pension contributions. Employed earnings feed Scotland's £17.10 test.
council_tax_reduction_working_age_unearned_income_tax Income tax on the counted taxable unearned income: non-savings tax less tax on earnings, shared pro rata with property income. Wales without UC disregards it (Sch 9 para 4); Scotland counts unearned income gross (reg 57).
council_tax_reduction_working_age_earnings_disregard £25 lone parent; else £20 with a disability premium, or in Scotland for a UC applicant with LCW or LCWRA where one of the couple is under pensionable age and in employment (Sch 3 para 4(3)); else, for a carer, £20 of the carers' own earnings plus up to £10 of a non-carer partner's (paras 6-7; carers identified by a carer benefit in payment); else £10 couple, £5 single. Plus £17.10 on the work conditions (not with UC): a couple's disabled member must be the one in work, and in Scotland from April 2022 only employed earnings qualify. Never more than earnings.
council_tax_reduction_working_age_unearned_income The closed lists in reg 57(1) and Sch 6 para 17 / Sch 9: pensions, contributory ESA and JSA, carer's allowance, the Carer Support Payment component before the overlapping-benefit reduction, as the pension-age route counts it (not the Scottish Carer Supplement), MA, IIB, IB, SDA, tax credits.
council_tax_reduction_relevant_universal_credit_payments Scotland: min(child element + disabled-child additions + childcare element, award).
council_tax_reduction_working_age_childcare_deduction Legacy: charges up to £175 / £300 a week when the lone parent, or both of a couple, work 16 hours or more, taken off earnings after the disregards. Scotland with UC: childcare element ÷ 0.85, up to £290 / £497, taken off income.
council_tax_reduction_working_age_capital, _tariff_income Wales with UC: UC capital. Wales passported: 0. Otherwise household savings. £1 a week per £250 or part above £6,000.
council_tax_reduction_working_age_passported, _has_universal_credit, _universal_credit_award IS / JSA(IB) / ESA(IR) without UC; UC entitlement; the award after the benefit cap and before deductions from payment.

The new parameters are under gov.local_authorities.{scotland,wales}.council_tax_reduction.working_age. Every uprated amount has its full history from 2013-14 to 2026-27, and each change cites the amending instrument and provision. The history was compiled from legislation.gov.uk and chain-checked: each year's "for £X" equals the previous year's value. Welsh 2013-14 values, including the fixed disregards, tariff income and childcare caps (from 1 April 2013), come from the revoked WSI 2012/3144, which then applied.

Pension-age CTR, the English schemes and the Housing Benefit parameters are unchanged. Outside the new working_age/ folders, the model code touched is the Scotland/Wales hook in simulated_council_tax_reduction_benunit.py, one docstring in council_tax_reduction_pensioner.py, and the CTR notes in programs.yaml.

council_tax_reduction_pensioner.py is main's file (#1944), with one documentation sentence changed: "the Welsh and Scottish formulas do not yet use it" is no longer true.

Composition with main

The PR is based on main. #1896 has merged, and main has been merged in three times, most recently at 41a996e (main has since gained only a version bump).

Impact (Enhanced FRS 2024-25, real microsimulation runs)

CTR in £bn (recipient households, millions). Base = main 41a996e; this PR = 1e12d2f (the later 8916273 changes only documentation). Enhanced FRS 2024-25 (release 1.56.16), real microsimulation runs. Groups are by the household-head benefit unit's pension status.

Group 2025 base → PR 2026 base → PR 2027 base → PR 2029 base → PR
Scotland, working age 0.044 (0.056) → 0.131 (0.185) 0.045 (0.056) → 0.134 (0.183) 0.048 (0.057) → 0.140 (0.187) 0.052 (0.056) → 0.154 (0.188)
Wales, working age 0.000 (0.001) → 0.009 (0.009) 0.000 (0.001) → 0.009 (0.009) 0.001 (0.003) → 0.010 (0.009) 0.001 (0.003) → 0.012 (0.009)
Scotland, pension age 0.190 (0.237) → 0.190 (0.237) 0.200 (0.239) → 0.200 (0.239) 0.208 (0.239) → 0.208 (0.239) 0.225 (0.241) → 0.225 (0.241)
Wales, pension age 0.014 (0.018) → 0.014 (0.018) 0.016 (0.019) → 0.016 (0.019) 0.017 (0.019) → 0.017 (0.019) 0.021 (0.019) → 0.021 (0.019)
England, pension age 0.654 (0.637) → 0.654 (0.637) 0.696 (0.641) → 0.696 (0.641) 0.738 (0.640) → 0.738 (0.640) 0.839 (0.649) → 0.839 (0.649)
England, working age (reported) 1.346 (2.497) → 1.346 (2.497) 1.357 (2.520) → 1.357 (2.520) 1.371 (2.544) → 1.371 (2.544) 1.387 (2.574) → 1.387 (2.574)
Northern Ireland 0.008 (0.013) → 0.008 (0.013) 0.008 (0.013) → 0.008 (0.013) 0.008 (0.013) → 0.008 (0.013) 0.008 (0.013) → 0.008 (0.013)
UK total CTR 2.256 (3.459) → 2.351 (3.596) 2.322 (3.488) → 2.420 (3.622) 2.390 (3.516) → 2.493 (3.651) 2.533 (3.555) → 2.646 (3.693)
  • Change in CTR by year:

    • 2025: £+0.095bn; 0.184m households gain (mean £516 a year); none lose; net income change £+0.095bn
    • 2026: £+0.098bn; 0.156m households gain (mean £627 a year); none lose; net income change £+0.098bn
    • 2027: £+0.102bn; 0.160m households gain (mean £640 a year); under 100 weighted households lose (1 survey record); net income change £+0.102bn
    • 2029: £+0.113bn; 0.160m households gain (mean £705 a year); under 100 weighted households lose (2 survey records); net income change £+0.113bn
  • Household net income rises by the same amount as CTR.

  • Pension-age CTR in all three countries, English working-age CTR and Northern Ireland are identical to main in every year run.

  • Losers. Fewer than 100 weighted households lose in 2027 and 2029, each by under £70 a year. They are Scottish working-age couples without UC who get a disability premium. main's DWP premium parameters project from a 2015 base (uprating.start_instant: 2015-04-01), which overstates 2027 and later amounts. The devolved amounts here project from the 2026-27 law. Set DWP benefit rates to the announced amounts, not CPI projections #1925 removes that start_instant, after which these losses go away.

  • Earlier years. The base Enhanced FRS has no weights before 2024. Three YAML cases check the 2015, 2016 and 2018 amounts instead.

Why the gap to reported and official figures remains (data, not law)

Filed as PolicyEngine/policyengine-uk-data#496 and #497 (the fix, policyengine-uk-data#499, lands with the next data release):

  • council_tax is the FRS bill net of CTR. DWP defines the FRS 2024-25 CTANNUAL as "Annual CT amount after discounts/reduction", derived from CTREB and CTREBAMT. The model treats it as the gross liability, so each reported recipient's liability is already reduced by its own CTR. 41.5% of Welsh working-age reported recipients have a £0 bill.
    • A diagnostic dataset copy (not a release) adds reported CTR back to FRS-original rows. With this PR on that copy, 2026 CTR is:
      • Scotland working-age: £0.202bn (0.192m households);
      • Wales working-age: £0.045bn (0.036m).
    • On the same copy, main gives £0.075bn and £0.007bn.
  • SPI-synthetic rows carry imputed "reported" CTR from the stage-2 QRF. That imputed CTR sits on £78k-£90k earners, and every person in the household carries it.
  • Take-up. Only FRS reporters claim CTR in survey runs (Evaluate claims_all_entitled_benefits per benefit unit #1831, d046). Wales has 0.056m FRS-original working-age reporters, against 157k working-age CTR households in March 2026.
Group, 2026 This PR, release data This PR, gross-bill diagnostic data FRS reported Official
Scotland, working age £0.134bn (0.183m) £0.202bn (0.192m) £0.134bn (0.343m) about £0.276bn and 306,740 recipients (March 2026)¹
Wales, working age £0.009bn (0.009m) £0.045bn (0.036m) £0.072bn (0.111m) 157,021 households (March 2026); all ages £347.4m (2025-26), £336.0m budgeted (2026-27)²
England, pension age £0.696bn (0.641m) £0.998bn (0.784m) £0.518bn (1.169m) £1.816bn forgone (2025-26), 1,349,524 claimants (31 March 2026)³
  1. Council Tax Reduction in Scotland, 2025-26 (gov.scot):
    • £425.1m provisional income forgone in 2025-26; 458,950 recipients in March 2026.
    • Working-age recipients = the total less pension-age recipients (sheet 2.6).
    • £0.276bn is the under-65 share of the £425.1m, derived from the average weekly awards by age (sheet 3.3). No split by age is published.
  2. Welsh Government, Council Tax Reduction Scheme annual report 2025 to 2026; StatsWales revenue budget (CTRS) 2026-27.
  3. MHCLG Council Taxbase 2025, CT Support sheet; Local Council Tax Support claimants live table, Q1 2026-27.

Not modelled (documented in the variables)

  • Components and premium conditions. The ESA work-related activity and support components are not modelled, and the disability premium's LCW/LCWRA exclusion is not applied. Who qualifies for the adult premiums follows the model's legacy premium variables (Give pension-age HB and CTR the severe disability premium Pension Credit uses #1938 and Give the legacy severe disability premium its statutory conditions (stacked on #1896) #1946 are revising their conditions); the amounts are the devolved ones.
  • Tax credits. The childcare deduction's extension to earnings plus WTC/CTC, and the up-to-£17.10 WTC disregard, are not modelled; tax credits ended in April 2025.
  • Mid-year changes. Amounts that change mid-year (for example the Scottish UC childcare caps from 28 June 2023) apply from the next model year, because the model samples one value a year.
  • Scottish fixed amounts before SSI 2021/249. Scotland's disregards, tariff income, childcare caps and hours parameters cite SSI 2021/249 from 2013; the predecessor SSI 2012/303 is not separately cited, and Scotland's April-September 2013 tariff-income threshold for applicants aged 60 or over is not modelled. (Wales's fixed amounts cite WSI 2012/3144 for 2013-14.)
  • Statutory pay on the Welsh UC route. The Welsh UC route uses the UC model's own earned income, as Sch 6 para 9 requires, so it inherits that model's omission of SSP/SMP/SPP from UC earnings (UC Regs 2013 reg 55(4)); both the UC award and CTR leave them out. A separate fix to the UC model will carry through automatically, and a differential test keeps the two in step.
  • Scottish carer premium with no carer benefit in payment. The carer earnings disregard identifies carers by a carer benefit in payment (Sch 3 para 6(1)(a)). Where a Scottish family has the carer premium but no one receives Carer's Allowance or Carer Support Payment (an award of UC with the carer element, or a carer benefit overlapped to nil), the £20 is approximated against the family's earnings. That can exceed Sch 3 para 7's £10 limit on a non-carer partner's earnings.
  • Transitional family premium. Scotland's is not modelled, because the model cannot see an unbroken claim since May 2016.
  • Scotland-only routes. The band E-H alternative maximum (reg 14) and the second adult rebate are not modelled.
  • Scotland before April 2022. Its UC rules under SSI 2012/303 are approximated with the 2021 scheme's structure. The UC childcare caps before 2022 take the 2022 value (£175 / £300), the same as the non-UC caps.
  • Exclusions. Students and persons from abroad are not excluded.
  • Non-dependant deductions still use Housing Benefit amounts, with no exemptions. That is National council tax reduction: non-dependant deductions use Housing Benefit amounts and skip exemptions; pensioner gate ignores benefit exclusions #1934, a separate PR to follow.
  • Capital is household savings (Pensioners without Pension Credit are tested on household savings only for the council tax reduction capital limit #1936).

Tests

  • YAML. council_tax_reduction_devolved_working_age.yaml has 32 cases. Expected values are worked by hand from the law's amounts:
    • Wales UC with no earnings: full award;
    • Wales UC excess income = 0.45 × earnings with no work allowance;
    • the Wales UC award is the same at double the rent;
    • a Welsh couple with a child and no UC (Sch 7 amounts, disregards, Child Benefit ignored);
    • a Scottish UC lone parent counting only the child element;
    • a Scottish UC single earner (the £5 disregard, and no UC counted);
    • the Scottish under-25 allowance;
    • the ESA passport in both countries;
    • Scotland's capital limit for a passported claimant;
    • tariff income;
    • a mixed-age UC couple in Wales on the working-age route;
    • 2015-16, 2016-17 and 2018-19 amounts;
    • regressions for the first review round: the carer disregard, the £17.10 conditions, Welsh tax on unearned income, the CSP component, a carer premium per partner, SMP on the Scottish UC route, the 2025 Scottish disability premium;
    • regressions for the second review round: tax on a pension or on dividends never comes off wages (three Welsh cases, one Scottish), a Welsh carer premium on entitlement when contributory ESA overlaps Carer's Allowance to nil, no Scottish carer premium from a potential UC carer element, the Scottish UC LCWRA £20 disregard, and voluntary Class 3 NI.
  • Property and differential tests. test_council_tax_reduction_devolved_working_age_properties.py runs many households in one simulation:
    • Hypothesis: 0 ≤ award ≤ liability; the Wales UC award does not depend on rent (uncapped awards); the UC award never rises with earnings; IS/JSA/ESA passported claimants get the full liability.
    • Differential: on the Welsh UC route, CTR earnings equal the UC model's uc_individual_earned_income, income equals earnings + uc_unearned_income + the award, and the applicable amount equals uc_maximum_amount, with and without SMP.
    • A targeted partial Welsh UC award (£246.36) that is the same at £6,000 and £13,000 rent.
    • Wales's fixed amounts start on 1 April 2013 with the WSI 2012/3144 values.
  • Mutation checks, each run against these tests:
    • Removing the Welsh UC income route fails the differential test and the targeted partial-award test. The 20 derandomised Hypothesis examples alone do not catch it, which is why the targeted case was added.
    • Removing the passport fails the passport property.
    • Reverting each second-round fix fails its regression: all tax off wages (4 cases fail), Class 3 off wages, the carer premium on receipt, the potential UC carer element, dropping the LCWRA limb, and adding statutory pay to Welsh UC earnings (the differential test fails).
  • Outsider income. test_means_test_income_properties.py now also checks that the new working-age income never counts income from people outside the family.
  • Suites. Locally at 8916273: the CTR YAML directory, 149 passed; the two property files, 6 passed. CI runs the full suite on this PR.

Invariants

  • 0 ≤ award ≤ liability.
  • The award is non-increasing in earnings on the UC route.
  • A Welsh UC award is independent of the housing costs element when there is no benefit cap.
  • A passported claimant gets the full liability less non-dependant deductions.
  • On the Welsh UC route, CTR earnings equal the UC model's earned income, so CTR and UC never disagree on earnings.
  • Pension-age CTR is identical to the base in every year run.

Effect on pensioner CTR (uk-triple-lock)

None. Pension-age CTR in England, Scotland and Wales is identical to main (41a996e) in every year run (2025, 2026, 2027 and 2029), so uk-triple-lock's pensioner offsets are unaffected.

The one legal change on the pension side is that a mixed-age couple on UC in Scotland or Wales takes the working-age route, keyed on main's council_tax_reduction_claim_pensioner (WSI 2013/3029 reg 3; SSI 2021/249 reg 3). The pension-age totals above are unchanged with it.

🤖 Generated with Claude Code

Working-age families in Scotland and Wales went through the pension-age
means test built on Housing Benefit parameters. The whole Universal Credit
award counted as income against an HB personal allowance with no children,
so UC claimants almost never got CTR.

Scotland's working-age scheme (SSI 2021/249) and the Welsh rules for
persons who are not pensioners (WSI 2013/3029) now have their own route:
- Wales, UC: applicable amount is the UC maximum amount and income is the
  Secretary of State's UC income plus the award (Sch 6 paras 3, 9).
- Scotland, UC: own applicable amount; only the child and childcare
  elements of UC count as income (regs 35, 42, 57(1)(p), (2)(d)).
- IS, income-based JSA and income-related ESA passport to the maximum
  reduction (SSI 2021/249 reg 13(11); WSI 2013/3029 Sch 9/10 para 8).
- Applicable amounts: each country's personal allowances, child amounts,
  family premium and disabled child premiums, 2013-14 to 2026-27.
- Income: Child Benefit disregarded, earnings disregards, childcare
  charges, closed unearned-income lists and tariff income from capital.

Pension-age CTR is unchanged. Carries a byte-identical copy of #1944's
council_tax_reduction_pensioner.

Fixes #1962

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

- Adult premiums: Scotland's and Wales's own disability, severe disability,
  enhanced disability and carer premium amounts (2013-14 to 2026-27), with a
  carer premium for each qualifying claimant or partner (SSI 2021/249 Sch 1
  paras 5, 17; WSI 2013/3029 Sch 7 paras 14, 17).
- Carer earnings disregard: £20 of the carers' own earnings plus up to £10
  of a non-carer partner's, within £20 (Sch 8 / Sch 3 paras 6-7).
- £17.10: a couple's disabled member must be the one in remunerative work;
  in Scotland from April 2022 only employed earnings qualify (Sch 3 para 15).
- Wales: tax on unearned income is disregarded (Sch 9 para 4).
- Scotland: only the Carer Support Payment component counts, not the Carer
  Supplement (reg 4(1), reg 57(1)).
- Statutory sick, maternity and paternity pay count as earnings on the UC
  route too; childcare comes off earnings after the disregards.

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

Copy link
Copy Markdown
Collaborator Author

Coordination note from #1992 (Scottish CTR counts Carer Support Payment, stacked on #1952).

council_tax_reduction_working_age_unearned_income here subtracts carer_support_payment × supplement / (rate + supplement). That assumes carer_support_payment includes the Scottish Carer Supplement, which is true on main today. #1952 makes carer_support_payment the CSP component only (csp.rate × 52) and adds a separate scottish_carer_supplement.

Once #1952 is in, this subtraction would remove £535.88 a year of genuine CSP in 2026 (4,495.40 × 11.70 / 98.15), understating income for every Scottish working-age carer. Whichever of #1952 and this PR merges second should drop the subtraction and count carer_support_payment as it stands.

The carers overlapping-benefits work (#1953) will also make carer_support_payment the amount payable after CSP Regs reg 16(2). SSI 2021/249 reg 57(1)(b) counts benefits "subject to any adjustment … under section 73 of the Social Security Administration Act 1992"; whether that covers a reg 16(2) reduction is being checked in #1992.

🤖 Generated with Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Composition note: #2015 (stacked on #2009 → #2006) adds council_tax_reduction_pensioner (BenUnit) with the same name, entity and meaning as this PR, but only the age test, and deletes council_tax_reduction_household_has_pensioner. Every CTR scheme now reads the per-family flag: national, the four _legacy councils, Oxford and council_tax_reduction_scheme_supported. Whichever lands second: keep this PR's formula for council_tax_reduction_pensioner.py (add/add), delete council_tax_reduction_household_has_pensioner.py (modify/delete), and change any remaining benunit.household("council_tax_reduction_household_has_pensioner", period) to benunit("council_tax_reduction_pensioner", period).

@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 adds is_council_tax_reduction_applicant_or_partner (Person): the benefit unit's claimant and partner where the liable person is one of them, and the household head alone where the head is liable but is not the benefit unit's claimant or partner (council_tax_reduction_head_applies_alone; for example, a grandmother head sharing a benefit unit with a young couple who are its claimant and partner).

council_tax_reduction_pensioner here reads the generic claimant identity. Whichever of the two PRs lands second should make it read is_council_tax_reduction_applicant_or_partner. Otherwise the 80-year-old grandmother above, whose benefit unit's claimant and partner are 17, is not a pensioner and goes on a working-age scheme. SI 2012/2885 reg 3(1)(a)(i): "he has attained the qualifying age for state pension credit", where "he" is the applicant. #2078 already does this for council_tax_reduction_household_has_pensioner; its YAML case "A pensioner who is not the applicant or partner does not make a young couple's claim a pensioner's" pins it.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Correction to my earlier note, from #2078's review r1. A pensioner-flag swap is not enough for #1966, because it adds its own working-age assessment.

#2078 (now stacked on #2015) makes the CTR means test assess the applicant and partner (is_council_tax_reduction_applicant_or_partner), not the benefit unit's claimant and partner. Where the household head is liable but is not the benefit unit's claimant or partner (council_tax_reduction_head_applies_alone; for example a grandmother sharing a benefit unit with a young couple), the head applies alone: a single person, with the benefit unit's awards and children belonging to the couple.

#1966's working-age assessment has its own person masks and family tests. Whichever of #1966 and #2078 lands second must move all of them onto the applicant identity:

  • unearned income (council_tax_reduction_working_age_unearned_income) and earned income;
  • family status and children;
  • premiums;
  • the passport;
  • the Universal Credit route.

Then run #2078's differential property (test_head_applying_alone_matches_her_own_benefit_unit) on the composed tree, plus one case: Scotland 2026, a 40-year-old head with a £100,000 private pension, sharing a benefit unit with two 17-year-old parents and their baby, £1,800 council tax. SSI 2021/249 reg 36 counts her pension, so she gets no reduction. With only the pensioner swap, #1966's reader would leave it out and pay £1,800.

MaxGhenis and others added 3 commits October 3, 2026 22:02
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>
- #1909's Welsh working-age earner now gets the Welsh allowance and the £5
  earnings disregard (1,111.24, not the HB-based 993.72).
- #1944's capped mixed-age UC couple in Wales gets the maximum reduction
  under WSI 2013/3029 Sch 6 paras 3 and 9; give it a UC maximum amount
  consistent with its award.
- The Scottish self-employed £17.10 case now pays Class 4 NI on its profits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keep main's joint-liability share on the liability, and route the Scottish
and Welsh working-age rules on council_tax_reduction_claim_pensioner, the
per-claim scheme flag the national formula uses.

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

Copy link
Copy Markdown
Collaborator Author

Status, paused by Fleet ops (overnight session cap): head a5e5a73 is based on main, MERGEABLE, CI running. CTR YAML 129 passed; property tests pass.

Pending:

  • Review. Hard-tier review, subfleet run 20261003-221336-ctr1966-review-r2. Output goes to ~/reviews/uk-ctr-shortfall-2026-09-30/out/review_r2_a5e5a73.md.
  • Impact. The rerun against main 7fee075 is impact/branch_a5e5a73.json beside impact/base_main_2efc8d8.json.

Next: read the review and fix anything it finds, update the PR's impact table, mark ready, and merge on gates or hand off to the UK hub.

🤖 Generated with Claude Code

MaxGhenis and others added 4 commits October 4, 2026 06:29
- Take off earnings only the tax and NI in respect of the employment or
  trade (the UC split of income tax; Class 1, 2 and 4, not Class 3), and
  disregard tax on counted unearned income in Wales.
- Count the carer premium on entitlement to a carer benefit; give the
  Scottish UC carer fallback only with an award of UC.
- Scotland: the £20 disregard for a UC worker with LCW or LCWRA.
- Wales UC: the UC model's own earned income, as the Secretary of State's
  figure.
- Welsh fixed amounts from 1 April 2013 (W.S.I. 2012/3144).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Count Carer Support Payment before the overlap reduction, as the
  pension-age route does, in income and in tax on unearned income.
- Update main's Carer Support Payment tests for the devolved amounts.
- Regression tests: tax on pensions and dividends stays off wages (Wales
  and Scotland), carer premium on entitlement, no UC carer premium without
  an award, Scottish UC LCWRA £20 disregard, Class 3 NI, the Welsh UC
  income figure (differential against the UC variables), a partial Welsh
  UC award independent of rent, and the Welsh 2013 first dates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tory-pay inheritance

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
vahid-ahmadi pushed a commit that referenced this pull request Oct 8, 2026
… and exemption (#2015)

* Assess each Council Tax Reduction claim under its own family's scheme 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>

* Reconcile reported and simulated reductions within a household

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>

* Set a claim's scheme and exemption from the applicant and their partner

#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>

* Use #2078's CTR applicant-or-partner variable

#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>

* Cap a reported reduction at the claimant's share only beside a simulated 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>

* Apply the reported-reduction cap only beside a simulated claim that pays

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>

* Test the per-family pensioner flag against #1944's reg 3 conditions

council_tax_reduction_pensioner is now #1944's SI 2012/2885 reg 3 test
on this PR's members: the qualifying age for State Pension Credit, and no
Income Support, income-based JSA, income-related ESA or Universal Credit
award. Property 1's oracle computes that directly. A family's own Universal
Credit award depends on the rent it pays, which changes when it lives
alone, so property 2 compares the families whose own awards are the same
either way (and checks there are some).

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

* Address the after-merge review: student share, head's own awards, P5

- council_tax_benefit: the share leaves out only people in higher
  education, so where a jointly liable person it counts is in other
  education (who may be a student SI 2012/2885 Sch 1 para 7(5) leaves out),
  the share may be too small; a report is then kept rather than capped.
- council_tax_reduction_pensioner: where the household head applies alone,
  the benefit unit's Income Support, income-based JSA, income-related ESA
  and Universal Credit are its claimant and partner's, not the applicant's
  (as #2078 does for council_tax_reduction_relevant_income_based_benefit).
- Two YAML regressions: a report beside a paying simulated claim where a
  further-education student is counted in the share, and a grandmother
  head who stays a pensioner when the young parents get Income Support.
- Property test: the alone simulation is given each family's own awards
  instead of filtering; some generated adults are further-education
  students, and properties 5 and 6 follow the new rule.
- test_benefit_cap_and_ctr_pension_age_properties P5 compares against a
  reform of the cap exception alone, so the CTR pensioner test (which also
  sets the applicable amount) is held fixed.

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

* Hold the means test fixed in property 4

CI found that swapping the other claiming families' ages and disability
benefits can move a family's simulated award through its applicable
amount: the model's severe disability premium counts the other adults in
the household (has_non_dependant_for_severe_disability_premium), joint
occupiers included. That is main's means test, not the scheme or the
exemption, so the perturbed run is given each family's applicable amount
and income from the unperturbed one.

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

* Read the student test and in_FE for the cap's student guard

The re-review of 38364ca found that the guard missed in_FE, and that
current_education's age default (tertiary at 18 and 19) turns it on with
no education input. The guard now uses the model's student test for
non-dependants (_legacy.is_full_time_student_non_dep) or in_FE, for a
jointly liable person the share counts. The age default is kept
deliberately: in the enhanced FRS current_education is an observed input,
and the same test already treats an 18- or 19-year-old non-dependant as a
student. The documentation says so, including that part-time students and
students para 75(2) brings back in are treated the same way.

Regressions: the student shown by in_FE (fails on 38364ca), and a
jointly liable sharer with no education input at 19 (report kept) and 20
(capped). The property generator makes students by current_education or
by in_FE.

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

* Hold each family's own awards fixed in property 4

CI on d988725 (run 37383946508) failed property 4 on a Newham household:
a working-age head (47) claiming Universal Credit, a sharer couple aged 100
and 63 with earnings, and a non-dependant. Perturbing the head to 85 moves
the non-dependant into the sharer's claim (uc_non_dependants_counted: the
household's non-dependants count in one claim only, UC Regs 2013 Sch 4 para
9(2), the head family's where it claims). The sharer's size criteria rise
from one bedroom to two, its LHA cap from 9,000 to 10,860 and its award
from 0 to 1,288.29, and reg 3(1)(a)(ii) then makes it not a pensioner.

That is the family's own award, which the pensioner test is meant to follow,
so the change is intended. Property 4 now holds each family's own UC, IS,
JSA and ESA awards fixed, as property 2 already does, along with its means
test. The same population fails on a9466b8, so this predates the merge
of main; CI on a9466b8 did not generate it. With the awards held, a
household-level pensioner flag still fails property 4.

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

* Hold the household allocations, not the awards, in property 4

The review of 94041e9 found that holding every family's own awards still
let property 4 fail through the same channel, and hid cross-family reads of
awards:
- In Newham, when the head's family stops claiming Universal Credit, the
  non-dependant moves into the sharer's claim and raises its
  uc_maximum_amount, which the four _legacy councils use as a UC family's
  applicable amount. The sharer's council award moved from 241.67 to 417.02
  with its awards held.
- Holding every family's awards also gives a perturbed 85-year-old head the
  award of the 47-year-old it replaced, and a mutant that read another
  family's UC survived.

Property 4 now holds, with each family's CTR means test, the two household
allocations through which other families reach a family's own awards:
uc_non_dependants_counted (UC Regs 2013 Sch 4 para 9(2)) and
has_non_dependant_for_severe_disability_premium. Each family's awards are
computed. The body passes on CI's population, its minimal household and
the reviewer's counterexample, and catches all five mutants the reviewer
and author built.

The generator also sets is_claimant_or_partner on every family's adults, so
wide-gap couples stay couples once #2082 presumes a member 20 or more years
younger to be a child. build() keeps each held value's own type.

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

* Hold the CTR capital in property 4 and pin its counterexamples

Pension Credit's guarantee credit sets a family's CTR capital to nil, and
the model lets other families reach that guarantee credit twice: the
severe disability addition's residence condition counts every other adult
in the household, and pension_credit_assessable_capital divides the
household's savings among its pension-age adults. Property 4 held the CTR
applicable amount and income but not the capital, so a head reaching
pension age, or gaining Attendance Allowance, could move a pension-age
sharer's award from nil to its £900 share of an £1,800 bill (review r5,
finding 1).

Hold council_tax_reduction_assessable_capital with the rest of the means
test, name the two Pension Credit routes in the docstring, and pin as
Hypothesis examples the four populations that broke earlier versions of
the property: CI's Universal Credit non-dependant move, the
uc_maximum_amount move, and the two Pension Credit routes.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

A note from #2288, which gives Scotland's working-age Council Tax Reduction scheme its own "young person" (SSI 2021/249 reg. 6(1): the Universal Credit qualifying young person, UC Regs 2013 reg. 5) and leaves England, Wales and Scotland's pension-age scheme on the Child Benefit one.

When this PR is rebased after #2288 lands, five reads in the new working-age variables use the legacy flags, which follow the Child Benefit definition:

File (at this PR's head) Line Reads
working_age/council_tax_reduction_working_age_child_amounts.py 44 is_child_or_young_person_for_legacy_benefits
working_age/council_tax_reduction_working_age_childcare_deduction.py 47 is_child_or_young_person_for_legacy_benefits
working_age/council_tax_reduction_working_age_earnings_disregard.py 66 is_lone_parent
working_age/council_tax_reduction_working_age_earnings_disregard.py 153 is_child_or_young_person_for_legacy_benefits
working_age/council_tax_reduction_working_age_personal_allowance.py 38 is_lone_parent

For Scotland these should read is_child_or_young_person_for_council_tax_reduction and is_council_tax_reduction_lone_parent from #2288. Those already choose the definition by scheme (Universal Credit for Scottish working-age families from 2022-23, Child Benefit everywhere else), so Wales is unaffected by switching to them. The two definitions differ for a 19-year-old on a course begun before 19 who is past the 1 September after their 19th birthday: a Child Benefit young person until 20, not a Universal Credit one.

#2288 also edits council_tax_reduction_applicable_amount (lines 25 to 27 here) and the income mask in council_tax_reduction_applicable_income (line 43 here), so those two files will conflict. The severe disability premium has the same issue through a shared helper: #2295.

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

1 participant