Skip to content

Give benefit-unit members aged 16 or over a bedroom in the LHA size criteria - #2010

Draft
MaxGhenis wants to merge 6 commits into
mainfrom
lha-bedroom-young-people
Draft

MaxGhenis wants to merge 6 commits into
mainfrom
lha-bedroom-young-people

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2008

Stacked on #2006 (base benefit-unit-rent-liability, at 7769fa3, which includes main and #1896). Retarget to main once #2006 merges.

Problem

The LHA size criteria gave no bedroom to a member of the benefit unit aged 16 or over who is not the claimant or partner. The commonest case is a young person at school or college living with a parent.

LHA_allowed_bedrooms (Universal Credit) counted:

  • the renter or couple;
  • non-dependants aged 16 or over from other families;
  • children's rooms for members under 16.

So a lone parent with a 17-year-old at college was assessed for one bedroom (category B) instead of two (C). main subtracts every benefit-unit member aged 16 or over from the household count, which has the same effect. Housing Benefit had the same gap until #2006's rewrite of housing_benefit_LHA_allowed_bedrooms over the claim's occupiers, which this PR now builds on.

The law

Universal Credit. UC Regs 2013 Sch 4 para 10(1) says "A renter is entitled to one bedroom for each of the following categories of persons in their extended benefit unit". The categories are:

  • (a) the renter (or joint renters);
  • (b) "a qualifying young person for whom the renter or either joint renter is responsible";
  • (c) "a non-dependant who is not a child";
  • (d)-(f) children.

Para 9(2) makes anyone else aged 16 or over who normally lives with the renter a non-dependant. The exception relevant here is (g): "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible", such as a young person looked after by a local authority (reg 4(6)). It applies across the whole extended benefit unit, so it covers a looked-after young person in a non-dependant's family too.

A child is a person under 16 (WRA 2012 s.40). A qualifying young person is defined in reg 5.

Housing Benefit. HB Regs 2006 and HB (SPC) Regs 2006 reg 13D(3) (SI 2006/213, SI 2006/214) give "one bedroom for each of the following categories of occupier", including "(a) a couple" and "(b) a person who is not a child", where a child is "a person under the age of 16" (reg 2(1)). An ordinary couple shares one bedroom; DWP circular HB A3/2017 confirms that only a couple who cannot share because of disability has an extra one.

Change

UC (LHA_allowed_bedrooms). Each member of the benefit unit aged 16 or over who is not the claimant or partner gets a bedroom:

  • a qualifying young person the renter is responsible for (is_child_or_qualifying_young_person_for_universal_credit), under para 10(1)(b);
  • any other such member, as a non-dependant under para 10(1)(c).

A qualifying young person no one is responsible for is not a non-dependant (para 9(2)(g)). This exclusion also applies to the count of non-dependants from other families, which now goes to the claim in #2006's uc_non_dependants_counted.

The exclusion is in the UC formula, not in is_non_dependant_of_household_head, because that variable also feeds Housing Benefit's non-dependant tests and deductions, where para 9(2)(g) does not apply. (Council Tax Reduction classifies non-dependants separately.)

HB. No code change here: #2006's rewrite already gives the benefit unit's own members aged 16 or over a bedroom under reg 13D(3)(b), and gives an occupier couple one bedroom under (a). This PR adds HB test cases and properties for both.

Why the UC rule covers non-dependants as well as qualifying young people. The issue's UC example is the qualifying young person. A benefit-unit member aged 16 or over who is not a qualifying young person is, in law, a non-dependant with their own bedroom. On the enhanced FRS that group is 19k people in 20 survey households, against 1.95m qualifying young people.

Invariants

The Hypothesis properties are in test_lha_bedroom_young_people_properties.py. Each runs 25 derandomized examples over populations of up to 4 households with sharers, boarders, lodgers and non-dependant families.

  1. Monotonicity. Adding a person aged 16 to 19 to any family never lowers any family's UC or HB bedrooms. This holds whether the claimant and partner are supplied or inferred.

  2. Exact effect. When the added person is not the claimant or partner, these changes happen and nothing else:

    • Their family gains one HB bedroom, and one UC bedroom unless they are a qualifying young person no one is responsible for.
    • If they join a non-dependant's family, the claim counting the household's non-dependants gains one UC bedroom (with the same exception), and every family liable for the rent gains one HB bedroom.
    • If they join a boarder's or lodger's family, every family liable for the rent gains one HB bedroom.
  3. Reference agreement (differential). Every family's bedrooms equal an independent count of the size criteria under both schemes:

    • a couple among the HB occupiers counts once;
    • 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.

    This also checks child_bedrooms' greedy pairing against the optimum on every generated family.

The corrected reference property fails on #2010's previous formulas, which counted an occupier couple as two HB bedrooms.

Tests

  • LHA_young_person_bedroom.yaml, 9 cases at 2026:

    • qualifying young people 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, a boy of 12 and a girl of 8 (4 bedrooms, E);
    • a partner aged 19 (no extra bedroom);
    • a pension-age couple's grandchild at college under HB (SPC), where HB meets a £200-a-week rent in full;
    • a looked-after young person in a non-dependant's family (adds no UC bedroom for the household head);
    • a non-dependant couple (UC 3 bedrooms, HB 2).

    The £ expectations use a rent of £200 a week. That sits between the published Maidstone one- and two-bedroom rates (VOA LHA April 2024, held for 2025-26: B £172.60, C £208.27), so the expectations do not depend on the model's rate table.

  • LHA_claimant_composition.yaml: two cases asserted "existing bedroom formula = 1: B", for a 17-year-old apprentice non-dependant and an 18-year-old qualifying young person. Both are now C, citing para 10(1)(c) and (b).

  • Full YAML suite (policyengine-core test policyengine_uk/tests/policy -c policyengine_uk): 1,518 passed on 6e6234d. On 2a88024, which adds only Give sharers, boarders and lodgers their own rent, tenure and LHA category #2006's merge of main, the three bedroom and rent files (40 cases) pass, and CI runs the full suite once this PR targets main.

  • Full pytest (pytest policyengine_uk/tests --ignore=policyengine_uk/tests/microsimulation) on 6e6234d: every one of the 2,069 collected tests ran, with 0 failures and 0 errors (19 skipped). It took three invocations, because the host's tool time limit cut off the first two.

  • Hypothesis properties (pytest policyengine_uk/tests/test_lha_bedroom_young_people_properties.py) on 2a88024: 3 passed.

  • Formatting: ruff format and ruff check on the changed files are clean.

Impact (real microsimulation)

The data is the released enhanced FRS 2024-25 (policyengine-uk-data 1.57.4, enhanced_frs_2024_25.h5, sha256 03fe15e4…), for 2026. The base is #2006's head, 7769fa3; the branch is 2a88024. Both runs use the same dataset. Earlier runs against #2006's pre-main heads gave the same bedroom counts and UC within £1m.

Every figure below has at least 10 distinct survey households contributing to it, and no suppressed cell can be recovered by subtracting published ones.

  • Survey households are counted by their rent and members' ages. Every enhanced-FRS record shares these with its FRS 2024-25 source household.
  • Collisions only merge households, so the counts are lower bounds.
  • Money is rounded to whole £m.
2026
Benefit-unit members aged 16+ who are not the claimant or partner 1.97m people, of whom 1.95m are UC qualifying young people and 19k are non-dependants
Benefit units whose UC bedrooms rise 1.80m; none falls
… of which privately renting 363k: B→C 56k, C→D 216k, D→E 58k, other 34k
UC housing costs element, as computed for every renting benefit unit +£577m
Universal Credit paid (151k benefit units gain) +£272m
Housing Benefit no change (#2006 already gives the HB bedroom)
Household net income +£272m
People in poverty (BHC and AHC) changes in fewer than 10 survey households: suppressed

About half of the element's rise is in benefit units with no UC award, where it changes nothing. Within UC awards, the remaining gap reflects income means-testing for newly positive awards, the benefit cap and UC deductions.

In fewer than 10 survey households, the LHA cap falls when the bedroom count rises. This is because in 5 of 200 BRMAs the model's rate table prices a larger category below a smaller one; #2022 (published LHA rates) addresses that.

Known gaps (other PRs)

Review

The first independent review (Subfleet, Codex lane) of 7c6f5f3 requested changes, and all five findings are fixed:

  • the PR text published cells that could be recovered by subtraction from groups of fewer than 10 survey households;
  • the UC property oracle counted a looked-after young person in a non-dependant's family;
  • the HB oracle counted an occupier couple as two bedrooms;
  • two corrections to the rulespec-uk#406 dispatch note.

The model now matches the first two oracle findings: a code fix for UC, and #2006's HB rewrite for the couple. A second review of 2a88024 is running.

Documentation

The variable's documentation field describes the new rule. The Housing Benefit docs notebook does not cover the size criteria.

axiom: uk/regulations/uksi/2013/376/schedule/4/paragraph/10 (UC Sch 4 para 10(1)(b), (c)) encoded-correct, companion cases in TheAxiomFoundation/rulespec-uk#408 (merged) | HB Regs 2006 / HB (SPC) Regs 2006 reg 13D(3)(a), (b): TheAxiomFoundation/rulespec-uk#406 queued (addendum: TheAxiomFoundation/rulespec-uk#406 (comment))

🤖 Generated with Claude Code

Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_claimant_composition.yaml::A 17-year-old apprentice in the renter's benefit unit is a non-dependant, policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_claimant_composition.yaml::Lone parent with an 18-year-old qualifying young person, policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_young_person_bedroom.yaml, policyengine_uk/tests/test_lha_bedroom_young_people_properties.py::test_adding_a_person_aged_16_to_19_never_lowers_bedrooms, policyengine_uk/tests/test_lha_bedroom_young_people_properties.py::test_exact_effect_of_adding_a_person_aged_16_to_19, policyengine_uk/tests/test_lha_bedroom_young_people_properties.py::test_bedrooms_match_an_independent_count_of_the_size_criteria

MaxGhenis and others added 3 commits October 1, 2026 13:23
…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>
MaxGhenis and others added 2 commits October 2, 2026 08:28
…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>
Base automatically changed from benefit-unit-rent-liability to main October 4, 2026 02:05
MaxGhenis added a commit that referenced this pull request Oct 20, 2026
#2017 was stacked on #2010 (lha-bedroom-young-people), which has not moved
since 2026-10-02 and is 1,651 commits behind main. #2017 needs nothing of
#2010's: #2010 changes only the LHA size criteria. #2017 needs #2007's HB and
CTR claimant exemptions (review r2, F2), and #2007 lands first. So this
merges hb-ctr-non-dep-exemptions (#2007 at 0b6c3db, with main) and puts
#2010's own files back to main's versions; the bedroom differential property
that needed #2010 moves to #2010.

Composition with main and #2007:
- UC: other families' non-dependants follow uc_non_dependants_counted (the
  first liable family that claims UC). A family's own in-unit non-dependant
  counts in its own claim if it makes one, otherwise in that counted claim
  (Sch 4 para 9(2)(f); review r3, R3-7). The para 16(2)(b) Pension Credit
  limb is gated to the claimant or partner. Para 15 renter exemption kept.
- HB: every family's per-couple amount (#2007's deduction_per_family over
  other families' and in-unit non-dependants) pooled and apportioned by rent
  share; a boarder or lodger also bears its own in full; #2007's claimant
  exemption zeroes the claim. HB eligibility adds #2007's exemption.
- CTR: #2007's two-scheme structure. Each scheme pools every family's amount,
  replaces the applicant's own family amount with its in-unit non-dependants,
  apportions by joint-liability share, and charges claiming families only.
  The applicant exemption zeroes the claim. Eligibility is 18+ and either
  outside every claiming, sharing or lodging family (#2007's claimant-family
  test, now in in_other_non_liable_family) or an in-unit non-dependant for
  CTR. New is_benefit_unit_non_dependant_for_council_tax_reduction uses
  #2078's is_council_tax_reduction_applicant_or_partner, so where a household
  head applies alone, her benefit unit's couple are her non-dependants.
- Local schemes: masked to the same other-family term, so unchanged.

Tests: the composition's YAML and property oracle (couple-once, exemptions,
per-applicant CTR exemption), with the oracle's UC attribution following the
counted claim. Three new YAML cases: a head applying alone charged once for
her benefit unit's couple; a non-claiming head's son counted in the sharer's
claim; a pensioner's Pension Credit not exempting her adult son. Two cases
adjusted: a pension-age head has no UC claim to count non-dependants in, and
a 19-year-old on UC with no earnings is exempt under reg 74(8)(b).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Stacking change from #2017 (in-unit non-dependant deductions). #2017 is no longer stacked on this PR. It now sits on #2007 (hb-ctr-non-dep-exemptions), because it needs #2007's HB and CTR claimant exemptions and nothing of #2010's. Merge commit 7f9ef1a restores #2010's own files to main's versions on #2017's branch.

There is one cross-PR invariant that whichever of #2010 and #2017 lands second should carry. #2017's property file had it until 7f9ef1a:

  • every member that is_benefit_unit_non_dependant_for_universal_credit marks (16+, not claimant or partner, not a UC qualifying young person) has a bedroom in the size criteria (UC Sch 4 para 10(1)(c));
  • so turning those members into qualifying young persons leaves LHA_allowed_bedrooms unchanged.

This ties the deduction and the bedroom to one definition. The test body (Hypothesis, population generator from test_benefit_unit_non_dependant_properties.py) is saved at ~/reviews/in-unit-non-dep-deductions-2026-10-01/handover/bedroom_invariant_for_2010.py:

in_unit = calc(sim, "is_benefit_unit_non_dependant_for_universal_credit")
rooms = calc(sim, "LHA_allowed_bedrooms")
as_dependants, *_ = run(population, {"non_dependant": "dependant"})
assert np.array_equal(rooms, calc(as_dependants, "LHA_allowed_bedrooms"))

If #2010 lands first, #2017 will add it back. If #2017 lands first, #2010 should add it, since test_benefit_unit_non_dependant_properties.py will be on main by then.

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.

Give benefit-unit members aged 16 or over a bedroom in the LHA size criteria

1 participant