Skip to content

Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria - #2035

Draft
MaxGhenis wants to merge 11 commits into
lha-nondep-children-foster-roomsfrom
hb-joint-tenant-shared-non-dependant
Draft

MaxGhenis wants to merge 11 commits into
lha-nondep-children-foster-roomsfrom
hb-joint-tenant-shared-non-dependant

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2029

Stacked on #2016 (lha-nondep-children-foster-rooms, merged at e5c36dc) → #2010 → #2006 → #1896. It gets CI once retargeted to main.

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:

  • the size criteria (13D(3), (3A)) counted the non-dependant only for the household head's family;
  • so did the young individual's shared accommodation test (13D(2)(a)(i));
  • but the HB and CTR deductions were apportioned across every joint tenant.

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:

Value Meaning Source
EVERY_JOINT_OCCUPIER (default) shared: counts for the head's family and every sharer; deduction apportioned LHA Guidance Manual 2.110, 2.123 ex 4; literal reg 3(1), (4)
HOUSEHOLD_HEAD_FAMILY the head's family only; it bears the whole deduction 2.093 ex 2 (Sarah's sister); HBGM A5 5.622
OTHER_JOINT_OCCUPIERS the sharer families only (the head's family when there are none) 2.093 ex 2 with the head's roles swapped

Consumers:

  • HB size criteria. 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 new housing_benefit_other_occupiers helper; bedrooms_for_children gains count_other=.
  • HB additional bedrooms. housing_benefit_LHA_additional_bedrooms (13D(3A)(a)(iii), an occupier who requires overnight care).
  • HB young individual. The new housing_benefit_claimant_has_non_dependant (13D(2)(a)(i)) is now used by housing_benefit_LHA_category. lha_renter_has_non_dependant becomes UC-only. Its formula is unchanged; the within-benefit-unit part is factored into has_non_dependant_in_benefit_unit.
  • Deductions. 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 shared apportioned_non_dependant_deductions helper.
    • HB splits by the joint occupiers' shares of the rent.
      • A non-dependant of every joint occupier is split by share_of_household_rent exactly as before, supplied shares included.
      • One of some joint occupiers is split by their shares over the subset's total, or by liable persons where those shares sum to zero.
    • CTR splits equally per liable person.
      • A non-dependant of every joint occupier takes council_tax_reduction_joint_liability_share as before, overrides included.
      • One of some joint occupiers is split one over the liable persons among them, or taken whole where only the family is liable.
      • Couples. A couple whose only co-host is each other bears the whole deduction, as it does when no one else is liable. The model cannot tell whether both partners are named tenants (LGFA s.6). If they were, the literal para 8(5) would split the deduction between them.
    • Apportionment applies only between the joint occupiers the non-dependant resides with; one joint occupier's non-dependant is deducted in full from that occupier.
  • CTR outside shared households. Where no family shares the rent, CTR keeps the previous formula: the claimant (the family of the household's oldest adult, 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 the is_household_head family. Both national and local schemes now go through council_tax_reduction_joint_liability_non_dep_deductions, and a Hypothesis differential pins the no-sharer case for every family.
  • Joint occupiers are never non-dependants through this path. Both helpers exclude members of the head's and the sharers' families, whatever their own rent (reg 3(2)(a), (d)). On the base, a sharer with no rent was classed as a non-dependant, because benunit_is_rent_liable is 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.
  • Boarders and lodgers pay the household head and stay with the head's family.
  • Universal Credit is unchanged. Sch 4 para 9(2)(f) means a non-dependant counts in one UC claim only, which the model keeps giving to the household head's family. DWP's UC joint-tenancies guidance says the same: "a non-dependent living in the property can only be linked to one Universal Credit award".

Law and guidance (verbatim)

  • HB Regs 2006 reg 3(1) (SPC reg 3(1) the same): a non-dependant "normally resides with a claimant or with whom a claimant normally resides".
    • 3(2)(d) excludes joint occupiers.
    • 3(4): "a person resides with another only if they share any accommodation except a bathroom, a lavatory or a communal area".
  • Reg 74(5) (SPC 55(5) identical): "Where a person is a non-dependant in respect of more than one joint occupier of a dwelling (except where the joint occupiers are a couple or members of a polygamous marriage), the deduction in respect of that non-dependant shall be apportioned between the joint occupiers ... having regard to the number of joint occupiers and the proportion of the payments in respect of the dwelling payable by each of them."
  • CTR Sch 1 para 8(5)(c): "the person to whom paragraph (a) refers is a non-dependant of two or more of the liable persons, the deduction in respect of that non-dependant must be apportioned equally between those liable persons."
  • UC Sch 4 para 9(2)(f): "a person who has already been treated as a non-dependant in relation to a claim for universal credit by another person liable to make relevant payments in respect of the accommodation occupied by the renter."
  • LHA Guidance Manual (April 2014):
    • 2.110: "Joint tenants who have a shared non-dependant have the person counted for the size criteria, but only have an apportioned non-dependant deduction." In the example, "John and Alex will each be allowed the two bedroom rate LHA. This is because Peter is counted in each of the size criteria calculations."
    • 2.093 example 2: "Susan is treated as Sarah's non-dependant so Sarah is allowed the two bedroom LHA rate. Rachel is allowed the shared room rate."
    • 2.050: points to 2.110 for young individuals.
  • HB/CTB Guidance Manual A5 para 5.622: "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."
  • JP v Bournemouth BC (HB) [2018] UKUT 75 (AAC), [2018] AACR 30, para 34: reg 3(1) is a three-stage factual test. It quotes AM v SSWP (IS) [2011] UKUT 387 (AAC) para 16 on RK v SSWP [2008] UKUT 34 (AAC): residing with means "sharing accommodation in a way that is consistent with living in the same household". That is why the attribution is a household fact (an input), not a rule the model can derive.

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_OCCUPIERS means 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)

  1. Conservation (reg 74(5)): in every household, the families' HB non-dependant deductions sum to the household's individual deductions for its non-dependants, for any mix of residence values.
  2. Bounds (para 8(5)): each family's CTR part is between 0 and the household's deductions, and the parts sum to at most the household's deductions. A non-dependant or lodger family bears none.
  3. Differential. With the default, HB deductions equal Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006's share_of_household_rent × household total, and CTR deductions equal the previous (household − own) × council_tax_reduction_joint_liability_share.
  4. Attribution. A shared non-dependant counts:
    • in the head's HB size criteria exactly as when they are the head family's only;
    • in a sharer's exactly as when they are the other joint occupiers' only.
  5. No-op. Without sharers, every residence value gives identical HB bedrooms, additional bedrooms, HB/CTR deductions and the HB non-dependant test.
  6. UC invariance. LHA_allowed_bedrooms, uc_non_dep_deductions and lha_renter_has_non_dependant never depend on the input.
  7. Monotonicity. Marking a non-dependant as one joint occupier's only never raises another joint occupier's bedrooms or deductions.

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).

  • No change. The released data has no liable_for_share_of_household_rent input (0 sharer families), so no household has joint occupiers. Every output in the comparison is identical between the two runs:
    • HB bedrooms, additional bedrooms, category and the HB non-dependant test;
    • HB, national and local CTR non-dependant deductions;
    • HB, CTR, UC, household benefits, household net income, HBAI incomes;
    • BHC and AHC poverty.
  • Regression caught. The first branch run (921dca4) changed CTR in fewer than 10 survey households (figures suppressed). Where no family shares the rent, the CTR claimant is the oldest adult's family, which need not be the is_household_head family. 691d168 keeps the previous formula there, and the reruns show no change.
  • With sharers in the data. I also ran a local, unreleased enhanced-FRS build from policyengine-uk-data#522 (on Add Energy Bills Rebate #512), which fills liable_for_share_of_household_rent and 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:
    • The data has 97 survey households with a family sharing the rent (158k weighted), and 11 survey households where a non-dependant lives with joint tenants.
    • housing_benefit_claimant_has_non_dependant changes for 43k weighted families (10 survey households).
    • HB bedrooms, the HB LHA category and the HB and CTR non-dependant deductions change in fewer than 10 survey households, so they are suppressed.
    • HB, CTR, UC, household benefits, household net income, HBAI incomes and poverty do not change.
  • When this starts to bite. The change matters once the data carries sharers (policyengine-uk-data#512). Setting non_dependant_normally_resides_with from the FRS relationship grid is a separate data follow-up.

Coordination

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

MaxGhenis and others added 6 commits October 1, 2026 16:01
…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>
MaxGhenis and others added 3 commits October 2, 2026 03:15
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>
…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>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Coordination note from #2062 (issue #2059), which makes every programme read one household head.

This PR's housing_benefit_LHA_allowed_bedrooms and non_dependant_normally_resides_with read the raw is_household_head input. That input can flag several members of a household, or none, and programmes reading it directly then disagree about whose household it is. #2062 adds is_resolved_household_head (exactly one per household) and defines benunit_contains_household_head from it.

Whichever of the two PRs lands second needs these readers switched:

  • family level: benunit.any(person("is_household_head", period)) becomes benunit("benunit_contains_household_head", period), and person.benunit.any(person("is_household_head", period)) becomes person.benunit("benunit_contains_household_head", period);
  • person level: person("is_household_head", period) becomes person("is_resolved_household_head", period).

#2062 adds a test, test_only_the_resolved_head_reads_the_flag, that fails while any module other than is_resolved_household_head reads the raw flag. If this PR lands first, #2062 makes the switch when it merges main. If #2062 lands first, the switch belongs here. Survey results do not change either way: the Enhanced FRS has exactly one flagged head per household.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant