Repository navigation
Conversation
…eria Adds the non_dependant_normally_resides_with input (default: every joint occupier, LHA Guidance Manual 2.110; head-only or other joint occupiers for 2.093 example 2) and routes HB 13D(3) other occupiers through it. Still to do: 13D(2)(a)(i), 13D(3A), reg 74(5) and CTR para 8(5) apportionment, tests, impact. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…' into hb-joint-tenant-shared-non-dependant # Conflicts: # policyengine_uk/variables/gov/dwp/housing_benefit_LHA_allowed_bedrooms.py
A non-dependant who normally resides with several joint occupiers is each one's non-dependant (HB Regs 2006 reg 3; LHA Guidance Manual 2.110): they count in each joint tenant's size criteria (reg 13D(3), (3A)) and keep each from the young individual's shared accommodation rate (13D(2)(a)(i)), and their deduction is apportioned (reg 74(5); CTR Sch 1 para 8(5)). One who lives with only one joint tenant counts for that tenant alone, who bears the whole deduction (2.093 example 2; HBGM A5 5.622). The new BenUnit input non_dependant_normally_resides_with records which, by default every joint occupier. Universal Credit is unchanged (Sch 4 para 9(2)(f)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without sharers the CTR claimant is the family of the household's oldest adult (council_tax_reduction_claimant_benunit), which need not be the is_household_head family that the joint-occupier split targets; the first real enhanced FRS run moved CTR in fewer than 10 survey households. The joint-occupier apportionment (SI 2012/2885 Sch 1 para 8(5)) now applies only where the rent is shared; otherwise the claimant keeps every other family's deductions as before. Adds a Hypothesis differential for the no-sharer case and tightens the CTR bounds to shared households. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The model's amounts are float32, so household sums taken in different orders differ by up to about 1e-3; a 1e-6 bound failed on rounding alone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps #2016's paired couple weights and April 2017 overnight-care gate, routes the weights through housing_benefit_other_occupiers, and updates the #2016 independent reference so a non-dependant counts for every joint occupier by default (sharers included) and boarders and lodgers for the household head only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…' into hb-joint-tenant-shared-non-dependant
…' into hb-joint-tenant-shared-non-dependant
…pendants - A non-dependant of every joint occupier is split exactly as before by share_of_household_rent (HB) and council_tax_reduction_joint_liability_share (CTR), honouring supplied values; one of some joint occupiers is split by their supplied HB shares over the subset's total (reg 74(5)). - Members of the head's and sharers' families are never anyone's non-dependant through the other-family path, whatever their rent (HB reg 3(2)(a), (d); CTR reg 9(2)(a), (d)). - Documentation of the HB size criteria for sharers. - YAML regressions: supplied shares, subset shares, a zero-rent sharer, CTR without sharers (national and Merton), the CTR couple convention. - Properties cover zero rent and supplied shares; the generator supplies formula shares to every household when any household supplies them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…' into hb-joint-tenant-shared-non-dependant
|
Coordination note from #2062 (issue #2059), which makes every programme read one household head. This PR's Whichever of the two PRs lands second needs these readers switched:
#2062 adds a test, |
…rers - rent_shared_with_another_family: a sharer flag on the household head's own family shares the rent with no one; the residence helper and the CTR wrapper both use it, so the no-sharer CTR formula holds there. - Without another family sharing the rent, every residence value takes the caller's part, so supplied rent shares give one result. - Document the CTR convention: several jointly liable families each bear one person's part; a non-dependant's only host family, a couple included, bears the whole deduction (s.6 vs s.9 liability not observed). - Properties: supplied zero shares; the old-formula differential compares households where every joint occupier has rent of its own. - YAML regressions for both fixes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
#2062 is now on This PR still adds formulas that read the raw flag:
Each needs to read the resolved head instead:
|
juaristi22
left a comment
There was a problem hiding this comment.
Reviewed b435c91e2fee7f6834264f307e653905e5f14e15 against the pinned #2016 parent (1f3ce21a08e8341b25af524bc04d3c940ad844bd). The review of this PR's changes is complete, with no additional findings.
The shared/non-shared residence routing agrees with the DWP joint-tenant examples and the HB/CTR deduction rules. All 29 focused repository tests passed, together with a native six-world diagnostic through final Housing Benefit and CTR routing. The diagnostic also confirmed that changing this HB/CTR residence input leaves final Universal Credit and household income unchanged in the UC control. Local validation used Core 3.33.2 rather than the snapshot lock's 3.32.9; it is not a full-suite or population validation.
I am leaving a comment rather than approving: the three findings on parent #2016 remain open, this PR is still a draft on that stack, and there are no passing checks at this exact head. In particular, the parent fix for the adoption-placement mask must compose with this PR's new claimant-specific callback. Please carry the parent fixes through the stack, then retarget after the parent merges and run the required checks. This review does not clear the parent findings or certify that future combined head.
Fixes #2029
Stacked on #2016 (
lha-nondep-children-foster-rooms, merged at e5c36dc) → #2010 → #2006 → #1896. It gets CI once retargeted tomain.What changes
When joint tenants share a household's rent (
liable_for_share_of_household_rent, from #2006), Housing Benefit and Council Tax Reduction now treat a non-dependant who lives with them as the non-dependant of each joint tenant they normally reside with.Before, the HB treatment was inconsistent:
So a sharer bore part of the deduction without getting the bedroom.
A new BenUnit input,
non_dependant_normally_resides_with, is set on the non-dependant's family and records the household fact:EVERY_JOINT_OCCUPIER(default)HOUSEHOLD_HEAD_FAMILYOTHER_JOINT_OCCUPIERSConsumers:
housing_benefit_LHA_allowed_bedrooms, with other occupiers aged 16+ (couples one bedroom, from Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016) and their children. These go through a newhousing_benefit_other_occupiershelper;bedrooms_for_childrengainscount_other=.housing_benefit_LHA_additional_bedrooms(13D(3A)(a)(iii), an occupier who requires overnight care).housing_benefit_claimant_has_non_dependant(13D(2)(a)(i)) is now used byhousing_benefit_LHA_category.lha_renter_has_non_dependantbecomes UC-only. Its formula is unchanged; the within-benefit-unit part is factored intohas_non_dependant_in_benefit_unit.housing_benefit_non_dep_deductions(reg 74(5), SPC 55(5)),council_tax_reduction_non_dep_deductions(SI 2012/2885 Sch 1 para 8(5); WSI 2013/3029 Sch 1 para 3(5), Sch 6 para 5(5); SSI 2021/249 reg 90(5); SSI 2012/319 reg 48(5)), and the local schemes via_legacy.local_non_dep_deductions. All use the sharedapportioned_non_dependant_deductionshelper.share_of_household_rentexactly as before, supplied shares included.council_tax_reduction_joint_liability_shareas before, overrides included.council_tax_reduction_claimant_benunit) bears every other family's deductions. The first real microsim run caught that applying the joint-occupier split everywhere moved this case: CTR changed in fewer than 10 survey households where the oldest adult's family is not theis_household_headfamily. Both national and local schemes now go throughcouncil_tax_reduction_joint_liability_non_dep_deductions, and a Hypothesis differential pins the no-sharer case for every family.benunit_is_rent_liableis rent-based. In such households this PR stops counting it in the deduction pools and in the HB non-dependant test. Those households have no HB to pay.Law and guidance (verbatim)
Text fetched from legislation.gov.uk (valid 2026-07-16 for the HB regulations, 2026-02-13 for SI 2012/2885).
Divergence, recorded. Literally, 13D(12) counts every occupier who is not a joint tenant, including another joint tenant's own non-dependant. The model follows DWP (2.093, A21/2013 para 25: "each tenant's individual household size"), as #2016 does for joint tenants' children.
Limitation. With three or more joint-tenant families,
OTHER_JOINT_OCCUPIERSmeans all the sharer families together. A non-dependant of exactly one of several sharers cannot be expressed.Invariants (Hypothesis,
test_joint_tenant_shared_non_dependant_properties.py)share_of_household_rent × household total, and CTR deductions equal the previous(household − own) × council_tax_reduction_joint_liability_share.LHA_allowed_bedrooms,uc_non_dep_deductionsandlha_renter_has_non_dependantnever depend on the input.Tests
LHA_joint_tenants_shared_non_dependant.yaml, 16 cases (11 plus 5 regressions from review r1: supplied rent shares, shares within a subset, a zero-rent sharer, CTR without sharers (national and Merton), and the couple convention):-m "not microsimulation") at 69df794: 2,064 passed, 15 skipped, 1 failed. The failure was Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016's independent size-criteria reference, which counted non-dependants for the household head only. It is updated in e63dabb: a non-dependant counts for every joint occupier by default, and boarders and lodgers for the head. The three property files (Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016, Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006 and this PR) then pass: 17 tests.Impact (real microsimulation, released enhanced FRS 2024-25, uk-data 1.57.4, sha256 03fe15e40a4c, 2026)
Two real runs of the released enhanced FRS 2024-25 (uk-data 1.57.4, sha256 03fe15e40a4c), 2026, each with its own worktree's virtualenv:
Scripts and outputs are in the session's review folder (
impact/dump_sim.py,impact/compare.py,impact/efrs_compare_2026.out).liable_for_share_of_household_rentinput (0 sharer families), so no household has joint occupiers. Every output in the comparison is identical between the two runs:is_household_headfamily. 691d168 keeps the previous formula there, and the reruns show no change.liable_for_share_of_household_rentand this PR's input from the FRS relationship grid. Base Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016 1f3ce21 against this branch at 559b85b, 2026:housing_benefit_claimant_has_non_dependantchanges for 43k weighted families (10 survey households).non_dependant_normally_resides_withfrom the FRS relationship grid is a separate data follow-up.Coordination
apportioned_non_dependant_deductions(HB) andcouncil_tax_reduction_joint_liability_non_dep_deductions(CTR). At 2d54628, Charge non-dependant deductions within the claimant's benefit unit #2017 treats a joint occupier's in-unit non-dependant as shared by every joint occupier for the deductions. This PR leaves in-unit members as Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010 counts them: only in their own family's size criteria. Whichever of Charge non-dependant deductions within the claimant's benefit unit #2017 and this PR lands second must make the two agree: either count them for every joint occupier's HB size criteria too, throughhousing_benefit_other_occupiers, with a YAML case, or make both own-family only.is_benunit_head * benunit.project(deduction_per_family(...))to the helper, then apply the claimant-side exemptions per family on the result.lha-disabled-cannot-share-rooms, also on Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016):bedrooms_for_childrengainscannot_share=there andcount_other=here; whichever lands second rebases.lha_renter_has_non_dependantby scheme: an open session is doing this. My HB variable uses the factored within-unit function, so the split drops in.axiom: TheAxiomFoundation/rulespec-uk#406 queued (addendum TheAxiomFoundation/rulespec-uk#406 (comment): HB reg 3(1)/(4), 13D(2)(a)(i), 13D(3)/(3A)/(12) per joint occupier, reg 74(5)/SPC 55(5), CTR Sch 1 para 8(5) and equivalents; companion cases from the same LHA Guidance Manual examples)
🤖 Generated with Claude Code