Repository navigation
Means-test the Council Tax Reduction applicant and partner, not the benefit unit's claimant - #2078
Conversation
… 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>
…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>
#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>
…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>
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>
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>
|
Composition note from #1966 (Scotland/Wales working-age CTR), now based on Every working-age person mask in #1966 goes through one helper,
🤖 Generated with Claude Code |
|
#2001 merged first, on 2026-10-04 as On main, the carer premium is Main also now chooses the CTR premium schedule with |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
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.
- Blocking: this needs the same rebase as #2015, and it is behind its own base.
- It merged #2015 at
9efdea22d, so it lacks35ca533andcc4d9ae. - In the
council_tax_reduction_applicable_amount.pyconflict, keep main'scouncil_tax_reduction_pensioner(:31usesany_over_SP_agenow) and main's split of premiums into pension-age and working-age. - Update the stale "Stacked on #2009 at 4b84ea0" line.
- It merged #2015 at
- Blocking: a pension-age head who applies alone gets working-age premiums.
council_tax_reduction_premiums.py:39-50hardcodes the working-age disability, enhanced and severe disability, and carer premiums, andapplicable_amount.py:66adds 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.
- 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".
- After the rebase, main's GC passport reads
- 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>
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in Notes
Moves flagged for reviewNone. Spending by benefit and service
Caseloads
Household net income by decileNo 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)
Counted-once checkEach 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
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Components the model counts twice: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
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>
|
Independent review r3 (GPT-6.1 Sol, Subfleet
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. |
…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>
|
Merge audit (merged through the merge queue at head
|
…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>
… 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>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#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>
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>
#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>
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>
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>
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>
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>
…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>
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
mainstill reads the young couple:Who is assessed
Two variables on
mainsay 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):What changes
council_tax_reduction_premiums)council_tax_reduction_net_earnings), at the single rateWhere 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 frommain'sis_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 overis_council_tax_reduction_applicant_or_partner, notis_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.
main's gap, Apply Housing Benefit and national Council Tax Reduction non-dependant deductions as legislated #2007).Tests
applicant_or_partner.yaml: 19 end-to-end cases, none of which sets applicable income. 14 fail onmain(47642d1). The other 5 pass there too: the two couple cases, the two Merton exemption cases and the pension-age relative case, whichmain's per-family flags already get right.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 itcouncil_tax_reduction_applicable_incomeand 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_benefitfalse); her pensioner status and award are unchanged.test_council_tax_reduction_applicant_properties.py: 2 tests covering invariants 1-5.tests/mutations_r4.outin the notes). Review r4 re-applied all five at d61a973a8, and each failed exactly its intended case.-n 4:finance/benefit/family/andgov/dwp/pension_credit/pass;Enhanced FRS impact
The Aggregate impact check ran the certified dataset (
enhanced_frs_2024_25.h5, policyengine-uk-data 1.58.1) onmain(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 localMicrosimulationruns,main(6d89338) against this branch (8b6d819), on the same file each time (aggregates only):e433e532)e433e532)ed1a2991, uk-data#512)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:
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
Coordination
is_council_tax_reduction_applicant_or_partner(noted on Charge non-dependant deductions for non-dependants within the claimant's benefit unit #2017; Vahid's review of Charge in-unit non-dependants in the local Council Tax Reduction schemes, and exclude a lodger personally only outside the head's family #2077 found the same).Test plan
applicant_or_partner.yaml).ruff formatchangelog.d/ctr-applicant-means-test.fixed.mdReproducer: 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/11encoded-correct (testsapplicant_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