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, |
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 for non-dependants 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 in the LHA size criteria #2010 counts them: only in their own family's size criteria. Whichever of Charge non-dependant deductions for non-dependants 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