Repository navigation
Conversation
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>
3cecb6b to
1cd00ab
Compare
… 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>
|
Coordination note from #1992 (Scottish CTR counts Carer Support Payment, stacked on #1952).
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 The carers overlapping-benefits work (#1953) will also make 🤖 Generated with Claude Code |
|
Composition note: #2015 (stacked on #2009 → #2006) adds |
|
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
|
|
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 ( #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:
Then run #2078's differential property ( |
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>
|
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:
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 |
- 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>
… 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>
|
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:
For Scotland these should read #2288 also edits |
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:Four legal defects caused it:
What this changes
simulated_council_tax_reduction_benunitsends a claim down a new working-age route when the household is in Scotland or Wales andcouncil_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 throughworking_age/_applicant.py, so #2078's applicant identity is a one-line swap. The new variables are incouncil_tax_reduction/working_age/:council_tax_reduction_devolved_working_agecouncil_tax_reduction_working_age_applicable_amountuc_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_allowancecouncil_tax_reduction_working_age_child_amountscouncil_tax_reduction_working_age_adult_premiums,_carerscouncil_tax_reduction_working_age_applicable_incomecouncil_tax_reduction_working_age_person_earned_income,_earned_income,_employed_earned_incomeuc_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_taxcouncil_tax_reduction_working_age_earnings_disregardcouncil_tax_reduction_working_age_unearned_incomecouncil_tax_reduction_relevant_universal_credit_paymentscouncil_tax_reduction_working_age_childcare_deductioncouncil_tax_reduction_working_age_capital,_tariff_incomecouncil_tax_reduction_working_age_passported,_has_universal_credit,_universal_credit_awardThe 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 insimulated_council_tax_reduction_benunit.py, one docstring incouncil_tax_reduction_pensioner.py, and the CTR notes inprograms.yaml.council_tax_reduction_pensioner.pyis 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, andmainhas been merged in three times, most recently at 41a996e (mainhas since gained only a version bump).main'scouncil_tax_reduction_joint_liability_share. The working-age route keys oncouncil_tax_reduction_claim_pensioner, the same flag that picks each claim's scheme.council_tax_reduction_assessable_capital.carer_support_paymentis now the Carer Support Payment component only, so the earlier supplement subtraction is gone. Likemain's CTR income, the working-age route countscarer_support_payment_pre_overlapuntil it is settled which amount CTR counts.main's Carer Support Payment cases now run on the devolved route. The Scottish cases also assert the working-age income and amount. The Welsh carer case gets Wales's own £101.85 allowance (W.S.I. 2026/13 reg 11), so £1,260.92 instead of the HB-based £1,195.40. The 2025 Scottish case uses the statutory 2025-26 amounts (SSI 2025/24 reg 16: £92.05 and £46.40, not HB's £92.04 and £46.38; see 2025-26 legacy carer premium and HB personal allowance are extrapolated, not statutory #2110), so £1,173.56 instead of £1,173.25.mainyet. Whichever lands second editsworking_age/_applicant.pyto readis_council_tax_reduction_applicant_or_partner, then runs its differential property and the Scottish grandmother-head case from its 3 October comment.Impact (Enhanced FRS 2024-25, real microsimulation runs)
CTR in £bn (recipient households, millions). Base =
main41a996e; 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.Change in CTR by year:
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
mainin 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 thatstart_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_taxis the FRS bill net of CTR. DWP defines the FRS 2024-25CTANNUALas "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.maingives £0.075bn and £0.007bn.Not modelled (documented in the variables)
Tests
council_tax_reduction_devolved_working_age.yamlhas 32 cases. Expected values are worked by hand from the law's amounts:test_council_tax_reduction_devolved_working_age_properties.pyruns many households in one simulation:uc_individual_earned_income, income equals earnings +uc_unearned_income+ the award, and the applicable amount equalsuc_maximum_amount, with and without SMP.test_means_test_income_properties.pynow also checks that the new working-age income never counts income from people outside the family.Invariants
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'scouncil_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