Repository navigation
Conversation
…ze criteria Universal Credit: a qualifying young person the renter is responsible for has a bedroom (UC Regs 2013 Sch 4 para 10(1)(b)), and any other member aged 16 or over is a non-dependant with one (para 9(2), 10(1)(c)), except a qualifying young person no one is responsible for (para 9(2)(g)). Housing Benefit: every member aged 16 or over other than the claimant or partner is a person who is not a child (HB Regs 2006 and HB (SPC) Regs 2006 reg 13D(3)(b); reg 2(1)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
YAML cases for a qualifying young person aged 17 and 19, an 18-year-old non-dependant, a looked-after qualifying young person (no UC bedroom), a couple with a young person and two younger children (category E), a partner aged 19 (no extra bedroom) and a pensioner couple's grandchild under HB (SPC). Two LHA_claimant_composition cases asserted the old one-bedroom count for an apprentice non-dependant and an 18-year-old qualifying young person; both are now two bedrooms (Sch 4 para 10(1)(c) and (b)). Hypothesis properties: bedrooms never fall when a person aged 16-19 joins any family; the exact change when they do; and agreement with an independent count of the size criteria, children's rooms found by brute force. Fixes #2008 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o lha-bedroom-young-people
…t's benefit unit A member of a benefit unit aged 16 or over who is not the claimant, partner or a qualifying young person (UC) or child or young person (HB, CTR) is a non-dependant of the renter (UC Regs 2013 Sch 4 para 9; HB Regs 2006 and HB (SPC) Regs 2006 reg 3; SI 2012/2885 reg 9 and the Welsh and Scottish equivalents). The deductions now charge them: - UC: to the renter's own claim; non-dependants in other families stay with the household head's claim (para 9(2)(f)). Adds the para 15 renter exemption and limits the para 16 Pension Credit exemption to the claimant or partner who receives it. - HB: apportioned between joint occupiers by rent share (reg 74(5)); a boarder or lodger bears their own. - National CTR: pooled across the claiming families by joint-liability share; only claiming families bear deductions. Fixes #2014. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… cost contributions UC Regs 2013 Sch 4 para 15(1)(a) turns on the renter's own circumstances; found by a mutation that applied the exemption to every family member. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation testing (15 one-line mutations of the new logic) left the in-unit age floor surviving the YAML tests, and dropping in-unit non-dependants from HB or CTR eligibility surviving the properties. The YAML case now checks a child's classification, and the oracle checks HB and CTR eligibility independently. All 15 mutations are now killed by both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A non-dependant in a family's own benefit unit is that family's alone, not shared between joint occupiers: DWP guidance treats a joint tenant's sister as "Sarah's non-dependant" only (LHA Guidance Manual 2.093, example 2) and says "if a person is a non-dependant of only one of the joint occupiers, take the whole of the deduction from that joint occupier's entitlement" (HBGM A5 5.622). Reg 74(5) and CTR Sch 1 para 8(5) apportionment now apply only to non-dependants from other families. A lodger's family is one commercial arrangement for CTR too, so its adult son is no one's non-dependant there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ions say Review r2 (F3, F4, F5) found three departures from the text. F3. 155766b charged a joint occupier's own adult son wholly to that occupier, citing LHA Guidance Manual 2.093 example 2 and HBGM A5 5.622. HB reg 3(1) and (4) and CTR reg 9(1) make him a non-dependant of every joint occupier he shares accommodation with: none of reg 3(2)(a)-(f) excludes him in relation to the other occupier. Reg 74(5) and CTR Sch 1 para 8(5) then apportion him. The LHA example concerns the size criteria and a sister, whom the model already treats as another family's non-dependant and apportions; 5.622 is conditional. The old rule also made the result depend on whether the survey codes the son in his parent's benefit unit or his own. HB and national CTR now pool every non-dependant, in any family, and apportion by rent share (HB) or joint-liability share (CTR). F4. A lodger's adult son was no one's non-dependant for CTR. Reg 9(2)(e) excludes only the person liable to pay the applicant, as HB reg 3(2)(e)(i) does; the household extension in (iii) is for the landlord's side. He is now eligible and is the householder's non-dependant for CTR and HB, and still the lodger's own for HB, in full, since they are not joint occupiers. F5. Widening the shared CTR eligibility made a jointly liable sharer's local claim bear the head's own son (Newham: £489.84 in 2025). The local aggregation now counts only other families' non-dependants, as before, so this change is neutral for the five local schemes until each council's aggregation is brought into line. YAML: joint tenants share one tenant's son by rent share (and get the same result with him coded in his own unit); jointly liable applicants share one's son equally; a lodger's son is the householder's non-dependant (HB and CTR) and the lodger's (HB); Newham sharer does not bear the head's son. Property oracle and conservation invariants restated for pooling. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The local schemes' aggregation masks the shared individual deductions to members of other families not liable for rent, so it stays as on base while the national eligibility also covers in-unit non-dependants. That mask must be exactly the eligibility's other-family term. #2009 changes the term to the claimant family, so that a sharer with no rent is a claimant and not a non-dependant (reg 9(2)(d)). in_other_non_liable_family now holds the term once, and both the eligibility and local_non_dep_deductions call it, so composing with #2009 is one edit. No change in behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation check v3 found that dropping the applicant's own-family subtraction survived every test: with formula-computed eligibility the applicant's family never has an eligible member. An individual deduction set directly as an input does, and reg 9(2)(a) still keeps the applicant's own family out of its non-dependants, as base did. The YAML case pins it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review r3: - R3-6: in_other_non_liable_family's docstring stated the proxy as if it were reg 9(2)(a), (d)-(e). It is a proxy: a family jointly liable for the council tax but paying no rent is wrongly included, which #2009's claimant-family test fixes. - R3-3: an in-unit non-dependant's own benefit awards are not modelled, so the HB reg 74(8) and CTR Sch 1 para 8(8) exemptions for a non-dependant on an income-related benefit or on UC with no earned income never apply to them. The documentation of is_benefit_unit_non_dependant_for_legacy_benefits now says so. No change in behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…milies; one HB bedroom for an occupier couple Review findings on #2010: - UC Sch 4 para 9(2)(g) applies to the whole extended benefit unit, so a qualifying young person no one is responsible for (reg 4(6)) in a non-dependant's family adds no bedroom for the household head. - HB reg 13D(3)(a): an ordinary occupier couple outside the claimant's family shares one bedroom (DWP circular HB A3/2017); only non-couple occupiers aged 16 or over take one each under (b). The property oracles encoded both errors as law; they now count the law, and two YAML cases pin the cross-family results. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Take #2006's housing_benefit_LHA_allowed_bedrooms.py whole: its rewrite over the claim's occupiers already gives the benefit unit's own members aged 16 or over a bedroom (reg 13D(3)(b)) and an occupier couple one bedroom (13D(3)(a)), so #2010's HB change is dropped and its HB YAML cases stay as tests. Keep #2010's UC change on top of #2006's LHA_allowed_bedrooms.py: the family term (para 10(1)(b), (c)) and the para 9(2)(g) exclusion on the non-dependant count, which now goes to uc_non_dependants_counted's claim. The exclusion stays in the UC formula, not in is_non_dependant_of_household_head, because that variable also feeds HB and CTR, where para 9(2)(g) does not apply. The property oracles follow #2006's claim rules: UC non-dependants count in the uc_non_dependants_counted claim, and every family liable for the rent counts the HB occupiers, with their children pooled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o lha-bedroom-young-people
Housing Benefit (SI 2006/213 reg 74; SI 2006/214 reg 55): - bands include their lower edge, and only a non-dependant in remunerative work (16+ hours, reg 6(1)) is banded, on the couple's joint income; anyone else pays the reg 74(1)(b) amount; - one deduction per couple, the higher (reg 74(3)); - no deduction for full-time students, State Pension Credit recipients, or under-25s on IS, income-based JSA or UC without earned income (reg 74(7), (8), (10)), nor for any non-dependant when the claimant or partner is blind or on AA, DLA care, PIP daily living or AFIP (reg 74(6)). Council Tax Reduction (SI 2012/2885 Sch 1 para 8; WSI 2013/3029 Sch 1 para 3 and Sch 6 para 5; SSI 2012/319 reg 48; SSI 2012/303 reg 67 and SSI 2021/249 reg 90): - each national scheme's own weekly scale for 2013-14 to 2026-27, instead of the Housing Benefit amounts; - the same banding and couple rules, with Wales's working-age exception for couples on UC; - the schemes' any-age exemptions, the UC limb from the year each scheme added it, and the existing applicant exemption. Fixes #2004; the non-dependant half of #1934. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, gross income - Identify the claimant or partner as the benefit unit's head or any member who is not an SSCBA s.142 child or qualifying young person (HB Regs 2006 regs 2(1) and 19; CTR regs 2(1)), replacing is_adult in the HB and CTR claimant exemptions. - Band a couple on the couple's joint income only, give the couple one deduction and any other adult in the family their own, and count benefit receipt (IS, JSA(IB), ESA(IR), SPC, UC) only for the award's claimant or partner. - Treat a non-dependant on IS, JSA(IB) or ESA(IR) as not in remunerative work for HB (reg 6(6)). - Take self-employed losses as nil in the UC no-earned-income test (UC reg 57(2)). - Add the family's UC (before the cap), tax credits and child benefit to gross income. - Tests: the review's counterexamples, a non-vacuous SPC exemption case, and property-test generators and oracles for dependent young people and losses. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…A disregard - "No earned income" follows UC Regs 2013 regs 52-62: employment income plus SSP and SMP less relievable pension contributions (reg 55(4)-(5)), self-employed earnings with losses nil and the minimum income floor where the UC model applies it (regs 57(2), 62), and other paid work. - IS, JSA(IB), ESA(IR) and SPC count only for the person they are payable to (HB Regs 2006 reg 2(3)-(3A)): the member reporting the award, or the head; used for the exemptions and HB reg 6(6). UC still counts for both joint claimants. - Gross income uses UC after the benefit cap (UC reg 81), applying the cap to the capped benefits other than HB, which a non-dependant family does not receive. - CTR exempts an adult for whom another person is entitled to child benefit (LGFA 1992 Sch 1 para 3, via para 8(8)(b) and equivalents). - Tests: the review's counterexamples, and property oracles for the payee and the child benefit disregard. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replaces the local claimant-or-partner helper (benefit unit head, or anyone not a child benefit child or qualifying young person) with the is_claimant_or_partner variable: the SSCBA s.137 couple, at most two people. A partner at school is now a partner, and a third adult in a benefit unit is deducted separately. Adds the round-2 review cases: a blind 16-year-old partner (Wales), a non-dependant couple with a partner at school, and a 17-year-old partner's PIP in Merton. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The changelog and the property generator's comment now name is_claimant_or_partner instead of the SSCBA s.142 definitions, and is_award_payee says that both members of a joint-claim jobseeker's allowance couple are on it (HB reg 2(3)(c)), which the model cannot identify. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ap childcare, child benefit claims - Gross income adds statutory sick, maternity and paternity pay (earnings, HB reg 35(1)(i)) and Maternity Allowance to each person's taxable income, and the family's IS, JSA(IB), ESA(IR) and Pension Credit to a couple's. - Earned income for the UC limb adds statutory paternity pay (UC reg 55(4)(c)), and relievable pension contributions come off self-employed earnings when there are no employed earnings (reg 57(2), step 4). - Scotland's working-age scheme exempts a non-dependant whose partner is on IS, JSA(IB) or ESA(IR) and who is not on Universal Credit, from April 2022 (SSI 2021/249 reg 90(8)(a), reg 4(1)). - The after-cap UC in gross income keeps the cap's childcare protection (UC reg 81(1)-(2)). - The LGFA 1992 Sch 1 para 3 disregard needs a child benefit claim. - The property oracle derives the claimant and applicant exemptions from the generated inputs, and the generator varies statutory pay, pension contributions, the start-up period, the award's reporter and child benefit claims. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Takes main's uv.lock, which drops an unintended one-line lock change from this branch's first commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
left a comment
There was a problem hiding this comment.
Incremental review COMPLETE at 56de9a6932317724a4c9a31eb10fc70256483d6c. C1, C2, C3 and A1 remain resolved; one new test-fixture finding remains.
A2 — Keep the ESA recipient fixture off the automatic migration claim. In non_dependant_deduction_review_cases.yaml, lines 323–336, “Income-related ESA is payable to the recipient, not the working partner” sets would_claim_uc: false but leaves would_claim_uc_at_legacy_closure at its default. After the integrated ESA abolition, the case claims UC £1,997.64. Its HB/CTR deductions become £3,346.20/£551.20, while the fixture still expects £2,436.20/£270.40. A minimal external copy changing only would_claim_uc_at_legacy_closure: false gives UC £0 and restores both expected deductions. Please explicitly decline that migration claim if the case is intended to isolate the held ESA award. This finding concerns the stale integration fixture; it does not establish a wrong statutory payment.
Current validation: 121 YAML cases passed, one failed, plus two native final-result cases passed. The corrected causal-control copy above is recorded separately. The prior 42 checks were retained rather than added to those counts. The current combined tree contains #2017 at 109fe2d; its excluded-partner blind case still yields two bedrooms, UC £14,340.20 and household net income £14,350.20. Source/queue checks are complete. Approval is withheld while A2 remains open.
esa_income_abolition_reached moves a couple reporting income-related ESA to Universal Credit in 2026, and the award moves the working partner's band. These cases test how income-related ESA counts in the band, so the couples stay on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
left a comment
There was a problem hiding this comment.
Incremental review COMPLETE at 1bda5418d591c63c9e9c93d29d9f6ff91c97988c. C1, C2, C3, A1 and A2 are resolved; no open findings or material evidence gaps remain.
A2 is fixed by explicitly setting would_claim_uc_at_legacy_closure: false alongside the ordinary no-claim preference in both held-ESA recipient fixtures. The changed YAML file passed 32 current cases, with no failures or skips. The previously failing recipient case now produces the expected HB/CTR deductions of £2,436.20/£270.40. Production formulas, dependencies and lock inputs are unchanged from the completed review. The earlier 121 passes, one stale-fixture failure and two native cases remain separate historical evidence.
Current #2010 contains current #2017 at ae2be5f; the retained combined bedroom/contribution final-result proof remains applicable. Source/queue records were rechecked with 35 source pairs hash-validated. No model or broad test suite was repeated beyond the changed fixture file.
This completed review is retained pending applicable exact-head hosted checks. Approval can be considered after they clear without repeating the code/source review. #2017's explicit standalone-delivery restriction remains intact.
juaristi22
left a comment
There was a problem hiding this comment.
Approving unchanged current head 1bda5418d591c63c9e9c93d29d9f6ff91c97988c. Review COMPLETE; C1, C2, C3, A1 and A2 remain resolved, with no findings or material evidence gaps.
The retained code/source evidence, corrected ESA fixtures and current combined-delivery scope remain applicable. The prior 32-case fixture run is retained; no code tests or model calculations were repeated. The updated aggregate claims were checked against the current CI report and its head/base/dataset provenance, and all 35 retained source pairs and actual source-queue records were revalidated.
Readiness, human feedback, current head/description, source guards and applicable required checks were refreshed immediately before approval; all latest exact-head checks pass. This approval applies to the combined #2010 delivery. #2017's restriction against standalone approval remains intact.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I merged main into this at
I restated I'll ask you to look again when CI passes at this head. |
#2002 says a non-paying adult counts the same in or out of the payer's unit. #2007 exempts an adult on their own family's Universal Credit with no earned income, and the model reads no award for an adult in another family's unit, so the adult's own family forgoes Universal Credit in this comparison. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I pushed I found this in a batch run at |
#2845's first-day education test reads housing_benefit_report_is_rate_rebate_only, so the cycle test now allows any housing_benefit_report variable. #2301 makes a 16-year-old outside education a Child Benefit qualifying young person, and that Child Benefit lowers a capped family's Universal Credit, so invariant 6 now covers people aged 20 or over. Both properties hold with or without those pull requests on the tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
I pushed
Both properties hold with or without #2845 and #2301 on the tree, so they don't depend on the order those land in. |
juaristi22
left a comment
There was a problem hiding this comment.
Incremental review at e2376fed08ffa9dc19314531ed735eecd7bd4c3e: PARTIAL, one nonblocking wording finding and one material source-interpretation gap. Prior C1, C2, C3, A1 and A2 remain resolved.
HB_APPORTIONMENT — Establish the lodger-son deduction denominator. The current person-level payer/in-unit composition and the new lodger-own-claim case apply a full Housing Benefit deduction for the lodger's non-paying adult son. The payer exclusions in HB reg. 3(2)(d)/(e) do not establish whether that son is a non-dependant of multiple joint occupiers for reg. 74(5). DWP guidance, physical page 23 restates apportionment for multiple joint occupiers and a full deduction for one; the material landlord/lodger denominator premise remains unverified. Please provide authoritative support or a qualified, source-backed explanation of that assessment unit. This is an evidence gap, not a confirmed wrong-cash finding.
A3 — Bind the impact estimate to the scored head. The Impact paragraph calls run42049553084/synthetic merge2f07e5125 a merge of “this head,” but its verified provenance is the earlier 1bda5418 revision. Please date/name that scored revision and retain the figures as historical evidence, or supply a current-head score. The figures have not been shown numerically wrong; the current attribution is unsupported after the meaningful merge changes.
60 current tests passed (48 YAML, 12 Python), with no failures/skips. They exercise final UC/HB/CTR paths; the full lodger-son HB amounts remain conditional on the unresolved legal denominator. All nine feature parameter files are unchanged, and all 38 source originals/extracts passed integrity checks. No additional population simulation was run. Current-head CI is pending.
Approval is held for the source gap and wording finding. The earlier approval covered 1bda5418; the changed merged scope is not covered by a current approval. PR2016's unchanged child head still awaits actual integration of this parent head, and PR2017 remains combined-delivery-only.
Superseded for current readiness by #2010 (review) . These approvals covered earlier captured heads; the changed merged scope has an unresolved HB apportionment source premise and impact-attribution wording finding. Approval is withheld for the current head.
HB_APPORTIONMENTI found no decision on a householder and lodger under reg 74(5), and the regulations don't define "joint occupier", so the model's reading stays a qualified one. DWP's manuals point towards it, and one C1 passage points against part of it. I read a lodger as outside reg 74(5)'s joint occupiers for three reasons:
C1 para 1.185 (p19) also excludes any person, or a member of that person's household, who makes or receives commercial payments to or from the claimant. Reg 3(2)(e)(iii) reaches only the household of the person the claimant pays. A council following C1 would charge the householder nothing for the son. The model follows the regulation here, as The reading rests on structure and on 2009 and 2014 guidance, with no holding behind it. Reg 3(2)(d)'s "jointly occupies… and is either" can also read wider than co-owners and co-liable occupiers. A split, or C1's reading, takes one deduction off the two claims: £20.40 to £131.45 a week in 2026-27. The double charge arises only where the son sits in the lodger's own benefit unit and the lodger claims. A son in his own benefit unit costs the householder the whole deduction and the lodger nothing. My next push puts this reading and these sources in the variable's documentation and references, and the description now lists it as an open reading. A3The Impact section now names I also corrected the merge order. #2007 now conflicts with |
juaristi22
left a comment
There was a problem hiding this comment.
Review status: PARTIAL — REQUEST_CHANGES
Reviewed head: e2376fed08ffa9dc19314531ed735eecd7bd4c3e
C4 — Fix the intended family roles or oracle in the ESA-passport property. The required Python 7/7 job fails test_council_tax_reduction_devolved_working_age_properties.py::test_income_related_esa_passports_to_the_full_liability at line 177. Its Scottish 32/52-year-old fixture omits explicit couple roles: the older adult becomes claimant and the younger a non-dependant. The passport flag is true, but a £288.60 deduction gives £211.40 CTR against the unconditional £500 oracle. The recorded case reproduces on the raw PR head; setting the intended claimant/partner roles explicitly makes the same property body pass. Please repair the generated household roles or account for actual non-dependants, then obtain passing required CI.
A3 is resolved: the description now dates the old 1bda5418d impact comparison. The new A4/C1/LHA/regulation 12 evidence strengthens the documented argument but leaves HB_APPORTIONMENT unverified for the householder/lodger/adult-son full-versus-apportioned deduction. The qualified interpretation remains a material evidence gap.
Prior C1/C2/C3/A1/A2 remain resolved. Validation reused the unchanged review and added one 8.224-second diagnostic campaign with an expected failing recorded case and passing role control; these are diagnostic calls, not a newly passed generated test suite. Hosted checkout was synthetic merge 7c2d70eb72; the local reproduction used the raw reviewed head.
Fixes #2008
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_young_person_bedroom.yaml::A qualifying young person has their own bedroom;
policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/housing_costs_element/non_dep_deduction/uc_non_dep_deductions_renter_exempt.yaml::UC Sch 4 para 15, a partner whom reg 3(3) excludes from the claim brings no exemption by being blind; policyengine_uk/tests/test_uc_renter_exemption_properties.py::test_the_single_claimants_afip_removes_the_deductionsaxiom: TheAxiomFoundation/rulespec-uk#527 queued; UC Sch 4 para 13 encoded-correct; TheAxiomFoundation/rulespec-uk#413 queued (UC Sch 4 paras 15-16); TheAxiomFoundation/rulespec-uk#406 queued (UC Sch 4 para 9, HB reg 3, CTR reg 9: who is a non-dependant, joint occupiers, lodgers, the household head); TheAxiomFoundation/rulespec-uk#407 queued (HB reg 74, SPC reg 55, CTR Sch 1 para 8)
Merge order
This PR contains #2007 and #2017 by merge.
0198ce4c9mergesmainat5c7744144into #2007's headfde435bd3, and6900b88b7supplies Housing Benefit withmain's supplied benefit cap totals.9f951ed43merges that into #2017's headb3e0d76b8; #2017 then limits the renter exemption to the claimants and counts reg 2's attendance allowance (866d0941f,65009ed34,33cd8db44) and moves two ofmain's CTR cases for its deduction (d2faa3bc9).7a99a5953merges #2017's headd2faa3bc9into this branch. Git reported no conflict in the last two merges.af54f8fecmoves the renter exemption cases to the 2 bedrooms this PR gives the son, and135b41ef8lets property 4's test readmain's new qualifying young person route (UC reg 5(1)(a)). #2007'sce2aef8c6then mergesmainatfed9bcabe,109fe2dd4merges that into #2017, and56de9a693merges that into this branch. #2007'sae4721f24then keeps two ESA band cases off the legacy closure claim,ae2be5fbemerges that into #2017, and1bda5418dmerges that into this branch. Git reported no conflict in those merges; #2007's description covers its own.c536e7bd0then mergesmainatd60944e9einto this branch and resolves its conflicts, and7ff98b0b0ande2376fed0adjust two properties.#2007 and #2017 land through this PR. #2007 now conflicts with
main, and this branch has resolved those conflicts. #2017 charges an in-unit non-dependant's housing cost contribution, and this PR gives them their bedroom, so #2017 stays a draft and reachesmaininside this PR. This PR's diff againstmainshows #2007's and #2017's changes too. #2017's branch carriesb3e0d76b8, which updates amainCTR case for #2017's deduction (see Tests).What the code does now
LHA_allowed_bedrooms(Universal Credit size criteria) gives a bedroom to each member of the benefit unit aged 16 or over who is not the claimant or partner:is_child_or_qualifying_young_person_for_universal_credit), under UC Regs 2013 Sch 4 para 10(1)(b);is_benefit_unit_non_dependant_for_universal_creditfor this, the variable Charge non-dependant deductions within the claimant's benefit unit #2017 adds and the oneuc_individual_non_dep_deduction_eligiblereads, so the bedroom and the housing cost contribution follow one definition.uc_non_dep_deductions(from #2017) charges a housing cost contribution for each such non-dependant aged 21 or over who is not exempt (paras 13, 16), in their own family's claim if it makes one, and otherwise in the claim thatuc_non_dependants_countedselects (para 9(2)(f)). The bedroom follows the same routing: an in-unit non-dependant of a family that makes no Universal Credit claim of its own also has a bedroom in the claim that counts the household's non-dependants. Where that claim is the non-dependant's own family (a family the model counts as the claim althoughbenunit_is_rent_liablereads false, for example with no rent input), the family's own bedroom already covers them, and the formula adds none. So a joint tenant who claims, sharing with a pensioner head who does not, has 2 bedrooms and pays £1,158.60 a year for the head's son aged 30, as when the son has his own benefit unit; without that routing, the joint tenant would pay the contribution with 1 bedroom.An adult son in the claimant's benefit unit now has a bedroom and bears the contribution. A claimant aged 45, renting privately at £10,400 a year in Maidstone in 2026, with a son aged 22 who is not in education and has no income, has 2 bedrooms (category C, whose £208.85 weekly rate exceeds the rent), a contribution of £96.55 a month (£1,158.60 a year), a housing costs element of £9,241.40 and Universal Credit of £14,340.20. Household net income comes to £14,260.20: the award, plus the £100 Household Energy Payment, less the £180 TV Licence. Coding the son, not claiming, in a benefit unit of his own gives the same bedrooms, contribution, award and household income.
A qualifying young person no one is responsible for (
is_qualifying_young_person_for_universal_creditbut notis_child_or_qualifying_young_person_for_universal_credit, so one looked after by a local authority) gets no bedroom. The formula applies this para 9(2)(g) exclusion both to the family's own members and to the household's non-dependants from other families, which count in the claim thatuc_non_dependants_countedselects.The exclusion sits in the UC formula, not in
is_non_dependant_of_household_head, because that variable also feeds the Housing Benefit non-dependant rules (housing_benefit_has_non_dependant,housing_benefit_non_dep_deductions), where para 9(2)(g) does not apply.The formula reads the household head (
is_resolved_household_head), whose documentation describes the householder who owns or rents the accommodation in their name, as liable to make payments on a commercial basis for their occupation. A member who heads the household but does not claim then counts as neither a renter (paras 1(2) and 9(1)(a)) nor, under para 9(2)(d), a non-dependant, so the formula gives them no para 10(1)(c) bedroom, anduc_non_dep_deductionscharges no contribution for them. A woman aged 45 who claims has 1 bedroom at 2025 if her son, aged 20, not in education and in her benefit unit, heads the household. Liability takes no one out of para 9(1)(b), so a head who is a qualifying young person the renter is responsible for stays in the extended benefit unit and keeps the para 10(1)(b) bedroom. The same woman has 2 bedrooms at 2025 if instead her daughter, aged 17 and in upper secondary education, heads the household. Members of other families never count the head as a non-dependant, becauseis_non_dependant_of_household_headexcludes the head's family.On
mainthe formula counts only the renter or couple, non-dependants from other families, and children under 16. So a lone parent with a 17-year-old at college gets one bedroom (category B) instead of two (C). Onmainat 6c6e229, that household (rent £10,400 a year, Maidstone, 2026) hasLHA_allowed_bedrooms1 and auc_housing_costs_elementof £9,000; on this branch it has 2 bedrooms and £10,400.The renter exemption (from #2017)
uc_non_dep_deductions_renter_exempt(UC Sch 4 para 15) readsis_uc_single_or_joint_claimant, the single claimant or each joint claimant, less a partner whomuc_is_ineligible_partnerflags under reg 3(3). Para 1(2) makes the claimants the renters, so a partner who stays in the couple for capital and income but makes no claim brings no exemption. For para 15(2)(c) the formula readsuc_receives_attendance_allowance, reg 2's attendance allowance, which counts head (a), Attendance Allowance, and head (f), armed forces independence payment; the model holds no separate amount for heads (b), (d) and (e).At
135b41ef8, a claimant aged 45 in Maidstone in 2026 heads the household and pays £10,400 of rent. Reg 3(3) excludes the partner, aged 43, and a son aged 22 shares their benefit unit, with no income and not in education. The model gives the claim 2 bedrooms (category C, whose £208.85 weekly rate exceeds the rent) and a claimant mask of[true, false, false]. With nobody blind, or with only the partner blind, DWP deducts £96.55 × 12 = £1,158.60 for the son, and Universal Credit comes to £5,098.80 + (£10,400 − £1,158.60) = £14,340.20. With the claimant blind, or receiving £5,000 of armed forces independence payment and no Attendance Allowance, the claim pays no contribution and Universal Credit comes to £15,498.80. #2017's head alone gives the son no room, 1 bedroom at the model's £9,000.00, and £12,940.20 with the contribution.Housing Benefit needs no size-criteria change.
housing_benefit_LHA_allowed_bedroomsonmainalready gives each couple or single adult among the occupiers one bedroom (the formula cites reg 13D(3)(zb) and (a)), and each other occupier aged 16 or over one bedroom under reg 13D(3)(b). That includes a member who heads the household but does not claim: Housing Benefit counts occupiers, not non-dependants (reg 13D(3)), and leaves out of them only "any joint tenant who is not a member of the claimant's household" (reg 13D(12)). The model records joint tenancy only for a whole family (liable_for_share_of_household_rent) and leaves such a family out of the claimant's occupiers. This PR adds HB cases that pin those counts. The HB and CTR non-dependant deductions come from #2017 and #2007; this PR's own code reads neither, and neither readsLHA_allowed_bedrooms.The law
Universal Credit. Under UC Regs 2013 Sch 4 para 10(1), "A renter is entitled to one bedroom for each of the following categories of persons in their extended benefit unit":
Claimants to whom reg 26(2) applies count as "renters", and joint claimants as "joint renters" (para 1(2)). The extended benefit unit takes in the renter (or joint renters), any child or qualifying young person the renter is responsible for, and any non-dependant (para 9(1)). Anyone else who normally lives with the renter counts as a non-dependant, with exceptions (para 9(2)). Three matter here:
Under para 13(1), "a deduction is to be made in respect of each non-dependant who is a member of the renter's extended benefit unit". The Secretary of State exempts a renter to whom para 15(2) applies, and each non-dependant on para 16's list, which includes "(a) a person who is under 21 years old".
Parliament defines a child as a person under 16 (WRA 2012 s.40), and the Secretary of State defines a qualifying young person in reg 5.
For the renter exemption, para 1(2) says: "Claimants who fall within sub-paragraph (1) are referred to in this Schedule as “renters” (and references to “joint renters” are to joint claimants to whom regulation 26(2) applies)." Para 15(1): "No deduction is to be made under paragraph 13 in the case of— (a) any renter who is a single person to whom sub-paragraph (2) applies; or (b) any joint renter where at least one joint renter is a person to whom sub-paragraph (2) applies." Para 15(2) includes "(a) a person who is ... blind" and "(c) a person in receipt of attendance allowance". Reg 2 defines "attendance allowance" by six heads, including "(a) an attendance allowance under section 64 of the Contributions and Benefits Act" and "(f) armed forces independence payment under the Armed Forces and Reserve Forces (Compensation Scheme) Order 2011". Under reg 3(3), "A person who is a member of a couple may make a claim as a single person if the other member of the couple—" has not reached 18 and falls outside reg 8, lives outside Great Britain, serves as a prisoner, has no entitlement under reg 19, or falls within section 115 of the Immigration and Asylum Act 1999.
Housing Benefit. Under reg 13D(3) of the HB Regs 2006 and the HB (SPC) Regs 2006 (SI 2006/213, SI 2006/214), a claimant has "one bedroom for each of the following categories of occupier", including "(a) a couple" and "(b) a person who is not a child". "Occupiers" takes in the persons who occupy the dwelling as their home, "except for any joint tenant who is not a member of the claimant's household" (reg 13D(12)).
Invariants
The Hypothesis properties in
policyengine_uk/tests/test_lha_bedroom_young_people_properties.pyeach run 25 derandomized examples over populations of up to 4 households (up to 3 for properties 5 and 6), with sharers, boarders, lodgers and non-dependant families. On some draws the generator makes the person it adds to the head's family the household head in place of that family's first adult, who stays the claimant. Properties 5 and 6 also draw whether each family would claim Universal Credit.Monotonicity. Adding a person aged 16 to 19 to any family never lowers any family's UC or HB bedrooms, whether the test supplies the claimant and partner or the model infers them.
Exact effect. When the added person is not the claimant or partner, only these changes happen:
Two explicit
@examples add a qualifying young person a local authority looks after (aged 17, in upper secondary education, started at 16, before the terminal date), one to a single renter's family and one to a non-dependant's family, so the property always checks the para 9(2)(g) exclusion in both places.Reference agreement. Every family's bedrooms equal an independent count of the size criteria under both schemes, including the routing in 2. Children's rooms are the fewest that hold them two to a room (same sex, or both under 10), found by brute force, pooled across the HB occupiers.
In-unit non-dependants have a bedroom. Every benefit-unit member aged 16 or over who is not the claimant, partner, a UC qualifying young person or the household head (
is_resolved_household_head, whom the formula reads as liable, and so not a non-dependant under para 9(2)(d)) counts as a non-dependant with a bedroom. The test computes that set fromage,is_claimant_or_partner,is_qualifying_young_person_for_universal_creditandis_resolved_household_head, and asserts thatis_benefit_unit_non_dependant_for_universal_credit, which the formula reads, marks the same people. The bedroom goes to their family, and also to the claim counting the household's non-dependants where their family makes no claim and is not that claim. Making every such member a qualifying young person the renter is responsible for leaves every family'sLHA_allowed_bedroomsunchanged, except that the counting claim loses the bedroom of one whose family makes no claim: another family's qualifying young person is not that renter's non-dependant (para 9(2)(g)).Rooms and contributions. Nobody owes a housing cost contribution without being a non-dependant. When the test adds an adult aged 16 to 64, not in education, with or without Attendance Allowance, to any family as an in-unit non-dependant, they owe a contribution unless aged under 21 or receiving Attendance Allowance (para 16(2)). The claim that bears it (their own family's if it makes a claim, otherwise the counting claim) gains that contribution unless its renter is exempt under para 15, and gains one bedroom; no other family's contributions change.
Coding. Moving such an adult, not claiming, between a family and a benefit unit of their own leaves every claiming family's UC bedrooms, contributions and award unchanged.
test_uc_renter_exemption_properties.py(from #2017) checks two more, with 10 derandomized examples each over 8 households of a renting claimant aged 18 to 64, a partner whomuc_is_ineligible_partnerflags, an adult son in their benefit unit and an adult in a non-claiming family of their own:The formula computes a fixed expression of its inputs, with no randomness, so it gives the same result for the same inputs.
Tests
LHA_young_person_bedroom.yaml, 14 cases:universal_credit(£14,340.20) andhousehold_net_income(£14,260.20), with the arithmetic in the comments;The £ expectations use a rent of £200 a week, between the model's Maidstone one-bedroom (B, £173.08 a week) and two-bedroom (C, £208.85 a week) rates, the same in 2025 and 2026.
uc_non_dep_deductions_renter_exempt.yaml(from Charge non-dependant deductions within the claimant's benefit unit #2017), six cases throughuniversal_creditandhousehold_net_incomein the household above, each with 2 bedrooms, category C, at135b41ef8:Household net income adds the £100 Household Energy Payment and takes off the £180 TV Licence, which the model halves where a household member is blind.
household_benefitslistsafcsbut notarmed_forces_independence_payment, so household net income leaves out the £5,000 payment, as onmain.test_lha_bedroom_young_people_properties.py, property 5's test:mainadded UC reg 5(1)(a), under which a 16-year-old outside education counts as a qualifying young person before the 1 September after their 16th birthday. Without135b41ef8the test, which assumed the added member never qualifies, fails on a 16-year-old added to a household headed by a 20-year-old; that commit readsis_qualifying_young_person_for_universal_creditfor the added member, and the file reports 6 passed.LHA_claimant_composition.yaml: two cases, a 17-year-old apprentice non-dependant and an 18-year-old qualifying young person, now assert UC category C (para 10(1)(c) and (b)) besidemain's HB category C.Against d8c2249 (with fa6ddae's YAML, less the one output that names Charge non-dependant deductions within the claimant's benefit unit #2017's variable): the adult son's case fails (
uc_non_dep_deductions0, expected £1,158.60), and so does the joint tenant's (uc_non_dep_deductions0 for the joint tenant, expected £1,158.60); the other 12 cases pass.Against
main(6c6e229, with d8c2249's test files copied in; the YAML gives the same result at 0080274): 8 of the 28 cases in the two YAML files then failed, all on the UC bedroom count or category. Three of the first four properties failed (exact effect, reference agreement, in-unit non-dependants).Mutations at e700316 (the same model code as d8c2249) of
LHA_allowed_bedrooms, each run against the two YAML files (28 cases) and the first four properties:family_rooms = benunit.sum(qualifying_young_person)) failed two YAML cases (A member aged 18 who is not a qualifying young person is a non-dependant with a bedroomandA 17-year-old apprentice in the renter's benefit unit is a non-dependant) and properties 2, 3 and 4.& ~no_one_responsible) failed one YAML case (A qualifying young person no one is responsible for in a non-dependant's family adds no Universal Credit bedroom) and property 2.family_non_dependant = family_member) failed three YAML cases and properties 2 and 3.family_non_dependant = family_member & ~qualifying) failed one YAML case (A member who heads the household but does not claim adds no Universal Credit bedroom) and properties 2 and 3.Mutations at 50e2e44, each run against
LHA_young_person_bedroom.yaml,LHA_claimant_composition.yamlandbenefit_unit_non_dependants.yaml(76 cases; 2d362d2 changes only the property file). The first four ran against the six properties at fa6ddae, whose model differs only by the guard the sixth mutation drops; the last two ran against the six properties at 2d362d2.is_benefit_unit_non_dependant_for_universal_credit, which the bedroom now reads (& ~household_head): killed. It fails two YAML cases (A member who heads the household but does not claim adds no Universal Credit bedroomandUC and HB, a head who applies for CTR alone is not her benefit unit's non-dependant) and properties 2, 3 and 4.is_benefit_unit_non_dependant_for_universal_creditfrom the UC gate (uc_individual_non_dep_deduction_eligiblereads onlyis_non_dependant_of_household_head): killed. It fails 10 YAML cases, among themAn adult son in the renter's benefit unit has a bedroom and bears a housing cost contributionandA claiming joint tenant has the bedroom of the non-claiming head's adult son whose contribution it bears, and property 5.is_benefit_unit_non_dependant_for_legacy_benefitsfrom the HB gate (housing_benefit_individual_non_dep_deduction_eligible): killed. It fails 8 HB cases inbenefit_unit_non_dependants.yamlandtest_benefit_unit_non_dependant_properties.py::test_deductions_match_the_oracle. The six properties here pass, as they check UC only.council_tax_reduction_individual_non_dep_deduction_eligiblereturnsage >= 18 & other_family): killed. It fails 3 CTR cases inbenefit_unit_non_dependants.yamlandtest_deductions_match_the_oracle. The six properties here pass.person.household.sum(non_dependant)without| passed_on): killed. It fails one YAML case (A claiming joint tenant has the bedroom of the non-claiming head's adult son whose contribution it bears) and properties 2, 3 and 5.~benunit.project(own_claim)without| counted): killed. It fails one YAML case (A 17-year-old apprentice in the renter's benefit unit is a non-dependant, UC category D instead of C) and none of the six properties, whose generator always sets a rent, so no family is the counting claim without being liable for the rent.council_tax_reduction_prescribed_benefits.yaml:main's caseWhere a household head applies alone, her own IIDB counts with her State Pension, and the father's does notpredates Charge non-dependant deductions within the claimant's benefit unit #2017 and expected no deduction for the couple in her benefit unit. Under Charge non-dependant deductions within the claimant's benefit unit #2017 they are her non-dependants, one deduction of £5.20 a week (£270.40 a year), so the case now expectscouncil_tax_reduction_non_dep_deductions£270.40 andcouncil_tax_benefit£1,195.968 (1,466.368 − 270.40). It fails at 9c6a994 without that change and passes with it.test_benefit_cap_lha_scheme_split_properties.py:mainadded an example of a lone parent with a 19-year-old in full-time education who is past UC's terminal date, and asserted that the UC and HB bedroom counts differ. Under para 10(1)(c) that young person counts as a non-dependant with a UC bedroom, so the test now asserts 2 bedrooms under each scheme. Invariant 3's docstring now says where the two counts still differ: a qualifying young person a local authority looks after, and other occupiers' children.Mutations at
135b41ef8, each run againstuc_non_dep_deductions_renter_exempt.yamlandtest_uc_renter_exemption_properties.py: puttingis_claimant_or_partnerback as the renter fails the excluded partner's blindness and armed forces independence payment cases and invariant 7; puttingattendance_allowance > 0back fails the single claimant's armed forces independence payment case and invariant 8. Both mutants die, as at Charge non-dependant deductions within the claimant's benefit unit #2017's headd2faa3bc9.At
135b41ef842e87947da3e8ec0fdb13e2648cbd23, locally with no survey data, each run under-n 4:policyengine-core testonfinance/benefit/family1,878 passed,gov/dwp968 passed andgov/local_authorities/council_tax_reduction391 passed, none failing;test_lha_bedroom_young_people_properties.py6 passed;test_benefit_unit_non_dependant_properties.py3,test_council_tax_reduction_claimant_properties.py3,test_household_head_agreement_properties.py3,test_non_dependant_deduction_properties.py10,test_uc_afip_housing_contribution_properties.py3 andtest_uc_renter_exemption_properties.py2 passed; the other files that readuc_non_dep_deductions,uc_receives_attendance_allowanceoruc_is_ineligible_partner:test_benefit_cap_lha_scheme_split_properties.py7,test_rent_of_sharers_boarders_and_lodgers_properties.py6,test_uc_legacy_closure_properties.py4,test_uc_non_dep_pension_credit.py3,test_uc_receiving_education_properties.py5,test_uc_single_claim_properties.py8 andtest_uc_work_related_groups_properties.py14 passed;policyengine_uk/tests/code_health3,172 passed. The other property files ran on a build of this head whose tree differs only in the three test files6900b88b7,d2faa3bc9and135b41ef8change;uvx ruff@0.17.2 format --check .,ruff check .andruff check --select F811,F821 policyengine_ukreport nothing;git diff --checkover this branch's new commits reports nothing;git merge-tree --write-tree --name-only HEAD origin/mainagainstmainat5c7744144reports no conflict;.github/check_fix_pr.pypasses on this title and body.At 2d362d2 (the YAML and the model code match 50e2e44, where the YAML ran):
policyengine-core testonfinance/benefit/family(1,840 passed),gov/dwp(806 passed) andgov/local_authorities/council_tax_reduction(376 passed), none failing;test_lha_bedroom_young_people_properties.py6 passed;test_benefit_unit_non_dependant_properties.py3 passed,test_council_tax_reduction_claimant_properties.py3 passed andtest_household_head_agreement_properties.py3 passed (at 50e2e44, the same model);policyengine_uk/tests/code_health3,110 passed;ruff format --check,ruff check,ruff check --select F811,F821 policyengine_ukandgit diff --check d8c224979..HEADclean;.github/check_fix_pr.pypasses on this title and body.Open reading: a lodger's adult son
Where a lodger's non-paying adult son sits in the lodger's own benefit unit and the lodger claims Housing Benefit, the model charges the householder and the lodger one full deduction each. I found no decision on this under HB reg 74(5), and the regulations don't define "joint occupier". This comment sets out the sources on each side. Apportioning between them, or following C1 para 1.185's wider exclusion, takes one deduction off the two claims: £20.40 to £131.45 a week in 2026-27.
Impact
CI's Aggregate impact report for
1bda5418d, this PR's head on 5 November (run 42049553084), compared maine3765cb61with2f07e5125, its merge of that revision into that main, onenhanced_frs_2024_25.h5(policyengine-uk-data 1.58.1), a full microsimulation for each side and year. The report counts #2007 and #2017, which that revision contains. It broke no check and flagged 53 moves, among them Universal Credit spending in every year and child poverty.We estimate that Universal Credit spending rises by £224.2m in 2025-26, £246.9m in 2026-27, £261.3m in 2027-28, £274.6m in 2028-29, £287.0m in 2029-30, £300.7m in 2030-31 and £313.0m in 2031-32. Household net income rises by £246.4m, £264.6m, £279.7m, £293.9m, £307.8m, £322.6m and £334.8m in those years. Each year 0.8% of people gain over £1, and 0.0% lose over £1. Absolute child poverty before housing costs falls by 0.05 points (7,100 children) in 2025-26, 0.24 points (35,500) in 2026-27, and 0.22 to 0.23 points (33,000 to 33,900) in each later year.
#2007's own report at
ae4721f24moves Housing Benefit and Council Tax Reduction and leaves Universal Credit alone, so the Universal Credit rise comes from #2017 and this PR. For #2017 at 89beee8 (base #2007 at 0b6c3db), we estimate that Universal Credit paid rises by £59.9m in 2026, all from the para 15 renter exemption.Known gaps (other PRs)
gov.dwp.universal_credit.elements.child.eligibility.child_age_limit) above 16 makesis_benefit_unit_non_dependant_for_universal_credittreat a 16- or 17-year-old as a child, whilebedrooms_for_childrencounts only those under 16, so such a member gets no UC bedroom under that reform. Under the enacted parameter (16) the two agree.🤖 Generated with Claude Code