Skip to content

Count joint tenants who form a single household in each other's Housing Benefit size criteria - #2055

Draft
MaxGhenis wants to merge 2 commits into
hb-joint-tenant-shared-non-dependantfrom
hb-joint-tenants-single-household
Draft

MaxGhenis wants to merge 2 commits into
hb-joint-tenant-shared-non-dependantfrom
hb-joint-tenants-single-household

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 2, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2046

Stacked on #2035 (hb-joint-tenant-shared-non-dependant, merged in at its head 559b85b) → #2016 → #2010 → #2006 → #1896. It gets CI once retargeted to main.

What changes

HB Regs 2006 reg 13D(12) excludes from the size criteria's occupiers only "any joint tenant who is not a member of the claimant's household". The model counted no joint tenant in another's HB size criteria. That is right for joint tenants in separate households (LHA Guidance Manual 2.093; A21/2013 para 25), but not for one who shares the claimant's household. LHA Guidance Manual 2.100: Lee, his partner and two children under 10 are joint tenants with Lee's mother, and "the three bedroom LHA rate applies to both Lee and his mother because they form a single household". The model gave Lee two bedrooms and his mother the shared accommodation rate.

  • New input. BenUnit bool joint_tenant_in_household_head_household (household/consumption/rent/), default false.
    • It marks a family sharing the rent (liable_for_share_of_household_rent) that forms a single household with the household head's family.
    • It has no effect on any other family.
    • Helper in_joint_tenants_single_household(benunit, period): the head's family and every flagged sharer, once there is one.
  • Size criteria (13D(3)) and additional bedrooms (13D(3A)(a)(iii)). housing_benefit_other_occupiers now takes weights for every person and decides who is an occupier of whose dwelling.
    • Families of a single household count each other's members: a couple one bedroom (13D(3)(a)), other adults one each, and children sharing rooms.
    • Each also counts every occupier counted for any of them: the head's boarders and lodgers, and non-dependants residing with any of them (new non_dependants_residing_with_any). So all families of the household have the same occupiers.
    • Everyone else is counted as before.
    • The claimant-specific rooms (13D(3A)(a)(iv) and (b), for a qualifying parent or carer) stay with the claimant. A child placed under reg 21(3) occupies no one's dwelling.
  • Exclusive use (13D(2)(b)). "room" excludes only a room shared with someone "other than a member of his household, a non-dependant of his, or a person who pays rent to him or his partner". So housing_benefit_shares_accommodation marks the families of a single household only if a sharer outside that household exists, or on the existing grounds.
  • Unchanged:
    • non-dependant status, the deductions (reg 74(5); CTR para 8(5)) and the young individual's test (13D(2)(a)(i)): a joint tenant is never a non-dependant (reg 3(2)(d)), and non_dependant_normally_resides_with still decides who a non-dependant resides with;
    • Universal Credit: separately liable joint tenants (Sch 4 para 24(1); ADM F3031) are not in each other's extended benefit unit (para 9(1)), and para 10(1) counts "persons in their extended benefit unit";
    • Council Tax Reduction, which has no size criteria.

Law and guidance (verbatim)

  • HB Regs 2006 reg 13D(12) (SPC reg 13D(12) the same; legislation.gov.uk, valid 2026-07-16): "“occupiers” means— the persons whom the relevant authority is satisfied occupy as their home the dwelling to which the claim or award relates except for any joint tenant who is not a member of the claimant’s household".
  • Reg 13D(2)(b): "“room” means a bedroom or room suitable for living in except for a room which the claimant shares with any person other than a member of his household, a non-dependant of his, or a person who pays rent to him or his partner".
  • Reg 13D(3A)(a)(iii): "a person (other than the claimant or the claimant’s partner) who occupies the claimant’s dwelling as their home"; (iv) and (b) concern a child for whom, or a claimant or partner who is, "a qualifying parent or carer".
  • LHA Guidance Manual (April 2014):
    • 2.030: occupiers include "joint-tenants who are a member of the customer’s household, for example their partner or children who are now adults".
    • 2.031: do not treat as occupying "joint-tenants who are not a member of the customer’s household (household is not defined but should be given its everyday meaning)".
    • 2.100: "In some cases joint tenants may be part of the same household but are not treated as members of the same family. For example, the customer may have a non-dependent son or daughter who is a joint tenant but they maintain a common household." In the Lee example, "the three bedroom LHA rate applies to both Lee and his mother because they form a single household".
    • 2.123 example 3: Andrew, his wife and three children under 10, and his father George, "form a single household"; "The four bedroom LHA rate of £210 applies to both Andrew and George."
  • HB circular A21/2013 para 25: the private-sector calculation "is based on each tenant’s individual household size, not on the overall number of occupants in the property". A4/2012 para 40 (social sector, by analogy): "All occupants will be taken into account".

Judgment call: one set of occupiers per single household. No guidance or decision found addresses another joint tenant's lodger or non-dependant within a single household. An independent research memo (Subfleet) searched the LHA and HB/CTB manuals, the circulars and Upper Tribunal decisions. The model gives the families of a single household the union of their occupiers, for three reasons:

  • the literal 13D(12) counts every person who is not a joint tenant;
  • 2.100 and 2.123 ex 3 give every joint tenant of one household the same rate;
  • DWP's narrower reading for separate households (2.093) rests on each tenant's own household, which here is shared.

The alternative, counting only the joint-tenant families in each other's criteria, would give Lee's mother a different rate from Lee whenever she had a lodger. That contradicts 2.100.

Invariants (Hypothesis, test_joint_tenants_single_household_properties.py)

  1. Reference (differential). Every family's HB bedrooms and additional bedrooms equal an independent count made by the test.
  2. No-op. The input false everywhere gives exactly the default's results. Set true on a family that does not share the rent (the head's, a non-dependant's, a lodger's), it changes nothing. This covers HB bedrooms, category, exclusive use, HB and CTR deductions, UC bedrooms and HB.
  3. Symmetry. Every family in a single household has the same 13D(3) bedrooms, and the same total where no foster child is placed in the household.
  4. Monotonicity. Forming a single household never lowers any family's bedrooms or additional bedrooms, and changes nothing for a family outside it.
  5. Exclusive use. Where every sharer is in the head's household, no joint occupier lacks exclusive use because of the sharing. Where one is not, every rent-liable joint occupier does.
  6. Invariance. UC bedrooms and additional bedrooms, UC and HB/CTR non-dependant deductions, the HB and UC non-dependant tests, and the young individual never depend on the input.

Tests

  • New YAML LHA_joint_tenants_single_household.yaml, 12 cases:
    • Lee and his mother (2.100), with each in turn as the household head: three bedrooms and category D for both; exclusive use not lacking; UC bedrooms unchanged (2 and 1);
    • the same family not flagged (2.093): 2 and 1 bedrooms, categories C and A;
    • Andrew and George (2.123 example 3): four bedrooms and category E for both, with the 0.75 / 0.25 rent shares supplied;
    • a single 25-year-old joint tenant in his mother's household: each has two bedrooms, and he keeps the shared accommodation rate as a young individual with no non-dependant (13D(2)(a)(i));
    • three joint tenants with one outside the household, and two sharers both in it;
    • the union: the head's lodger and a non-dependant who resides with the flagged sharer only count for both families (4 bedrooms each), while the deduction (HB £1,000, CTR £300) and the non-dependant test stay with the sharer; the same household not flagged gives 2 and 2;
    • overnight care for the joint tenant: one additional bedroom on each claim, under (3A)(a)(iii) and (a)(i);
    • a foster child placed with the head: the carer's bedroom is the head's alone, and the child is no one's occupier;
    • the input set on the head's and a non-dependant's family: no effect.
  • On the base (Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria #2035 head 68647f9), with the input lines stripped because the base does not have the variable: the 9 single-household cases fail, and the 3 that pin unchanged behaviour pass.
  • Policy YAML suite: 1,575 passed (1,563 before, plus these 12).
  • Hypothesis properties: 6 passed at 7d90c5c, and again at 148a988 (after merging Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria #2035's head 559b85b). 10 derandomised examples each, up to 4 households of up to 7 families.
  • Cross-version differential. A fixed-seed generator built 40 situations (320 households, 1,106 families) covering sharers, non-dependants with every residence value, lodgers, couples, children, foster children, overnight care, zero rent and supplied rent shares. I computed them with the base's own code and with this branch, the input left at its default: 68647f9 against 7d90c5c, and again 559b85b against 148a988. All 14 compared variables are identical: HB bedrooms, additional bedrooms, category, exclusive use, the non-dependant test, HB and CTR deductions, HB, CTR, UC bedrooms and deductions, UC, and household net income.

Impact (real microsimulation, released enhanced FRS 2024-25, uk-data 1.57.4, sha256 03fe15e40a4c, 2026)

Two real runs of the released dataset, 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, impact/sharers_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 and none can form a single household. Every output in the comparison is identical between the two runs:
    • HB bedrooms, additional bedrooms, category, exclusive use and the HB non-dependant test;
    • HB, national and local CTR non-dependant deductions;
    • UC bedrooms and deductions;
    • HB (£13.997bn), CTR (£2.360bn), UC (£80.572bn), household benefits, household net income and HBAI incomes;
    • BHC and AHC poverty.
  • On data that carries sharers. These are real runs of an unreleased production-settings enhanced FRS 2024-25, built from policyengine-uk-data#522 (frs-non-dependant-residence at db02d65, stacked on Add Energy Bills Rebate #512; sha256 78cbcb44100a, 2026). In that data, 97 survey households (158k weighted families) share the rent.
    • Input unset (base Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria #2035 head 559b85b against this branch at 148a988): no change in any output listed above, including HB bedrooms, category and exclusive use, HB £14.181bn, CTR £2.174bn, UC £80.267bn, household net income and poverty.
    • Illustrative upper bound: every sharer flagged. This branch, with the input set to true for every family. It has no effect except on sharers. Results:
      • HB bedrooms rise for 227k weighted families (head's and sharers') in 97 survey households, 0.68m weighted bedrooms in all, and never fall.
      • 223k weighted families (91 survey households) no longer lack exclusive use.
      • 67k weighted families (35 survey households) change LHA category.
      • HB paid, CTR, UC, household net income and poverty do not change, because no affected family receives HB in this data.
      • This is not an estimate of the change. The data does not set the input, and the FRS proxy (a sharer related to the head's family) would flag fewer than 10 of those 97 households.
  • When this starts to bite. Two things must happen first: the data must carry sharers (policyengine-uk-data#512), and it must set this input. A separate session measured the FRS: fewer than 10 survey households (suppressed) have a sharer family related to someone in the household head's family, out of 97 sharer households in 2024-25. So the aggregate effect will stay very small.

Follow-ups

axiom: TheAxiomFoundation/rulespec-uk#406 queued (addendum TheAxiomFoundation/rulespec-uk#406 (comment): HB reg 13D(12) occupiers per claimant for joint tenants in the claimant's household, 13D(3)/(3A)(a)(iii) single-household size criteria, 13D(2)(b) "member of his household"; companion cases from LHA Guidance Manual 2.100 and 2.123 example 3)

🤖 Generated with Claude Code

…ze criteria

HB Regs 2006 reg 13D(12) excludes from occupiers only "any joint tenant who
is not a member of the claimant's household", so a joint tenant in the
claimant's household counts (LHA Guidance Manual 2.030, 2.100, 2.123 ex 3).

New BenUnit input joint_tenant_in_household_head_household marks a sharer
family that forms a single household with the household head's family.
The head's family and every such sharer count each other's members in the
size criteria and additional bedrooms (13D(3), (3A)(a)(iii)), and each
counts every occupier counted for any of them, so they share one set of
occupiers. Rooms shared with them still count as exclusive (13D(2)(b)).
Deductions, the young individual's test, CTR and UC are unchanged.

Fixes #2046

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, housing_benefit_shares_accommodation and joint_tenant_in_household_head_household 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.

…dant' into hb-joint-tenants-single-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