Skip to content

Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria - #2016

Draft
MaxGhenis wants to merge 15 commits into
lha-bedroom-young-peoplefrom
lha-nondep-children-foster-rooms
Draft

MaxGhenis wants to merge 15 commits into
lha-bedroom-young-peoplefrom
lha-nondep-children-foster-rooms

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2011
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_other_families_children_and_additional_bedrooms.yaml::A non-dependant's foster child raises the renter's final Housing Benefit

axiom: uk/regulations/uksi/2013/376/schedule/4/paragraph/10 (UC Sch 4 para 10(1)(d)-(f), (3)(b)) encoded-correct, companion cases in TheAxiomFoundation/rulespec-uk#412 | UC Sch 4 para 9(2)(c), (g) (non-dependants' children, foster children): TheAxiomFoundation/rulespec-uk#406 queued (addendum: TheAxiomFoundation/rulespec-uk#406 (comment); extension: TheAxiomFoundation/rulespec-uk#406 (comment)) | UC Sch 4 paras 12 and 29(5), (9A), with reg 2 and reg 89(3)(a) "adopter": TheAxiomFoundation/rulespec-uk#411 queued (extension: TheAxiomFoundation/rulespec-uk#411 (comment)) | HB Regs 2006 / HB (SPC) Regs 2006 regs 2(1), 13D(3)(c)-(e), (3A)-(3B), (12), 21(3): TheAxiomFoundation/rulespec-uk#406 and #357 queued (addenda: TheAxiomFoundation/rulespec-uk#406 (comment), TheAxiomFoundation/rulespec-uk#357 (comment); extension: TheAxiomFoundation/rulespec-uk#406 (comment))

Stacked on #2010 (base lha-bedroom-young-people). Retarget to main once it merges.

Problem

The model's LHA size criteria had three gaps:

  1. Other families' children. bedrooms_for_children counted only the claimant's own benefit unit, so a grandchild living with their parent in the renter's home never had a room. Under Housing Benefit, neither did a boarder's or lodger's child.
  2. Foster children. The model gave them a bedroom of their own and gave the foster parent no additional bedroom. lha_renter_has_non_dependant also counted a foster child under 16 as a non-dependant, which took a single foster parent under 35 out of the shared accommodation rate for the wrong reason.
  3. Overnight care. The model gave no additional bedroom for non-resident overnight carers.

The law, and how DWP applies it

We read the provisions on legislation.gov.uk on 2026-10-01, and reg 2 and reg 89(3)(a) of the UC Regs 2013 and HB reg 21(3) again on 2026-11-02.

Universal Credit (UC Regs 2013 Sch 4):

  • In para 9(1), the Secretary of State defines the extended benefit unit as the renter, the children and qualifying young persons they are responsible for, and "any person who is a non-dependant".
  • Anyone who normally lives with the renter counts as a non-dependant, with seven exceptions in para 9(2). Three matter here:
    • (c): the renter's foster child;
    • (d): a person liable on a commercial basis, such as a lodger or joint tenant;
    • (g): "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible".
  • A non-dependant is responsible for their own child (reg 4(2)), so that child also counts as a non-dependant, and DWP includes them under para 10(1)(d)-(f).
    • When the Secretary of State added (g) by SI 2013/2828, DWP said the same in the Explanatory Memorandum (para 7.22).
    • DWP writes in its staff guidance Housing Costs Contributions – non-dependants (V13.0, which it deposited in Parliament as DEP2023-0791): "children can be expected to share rooms together, such as children of the main claimant or claimants with those of non-dependants".
  • A lodger's or joint tenant's child falls outside the extended benefit unit: the parent falls under (d), so the child falls under (g). DWP takes the same view of joint tenants' children in the same memorandum (para 7.6).
  • No one is responsible for a child looked after by a local authority (reg 4(6)(a)), such as a foster child, except a child placed for adoption (reg 4A(1)(c), from 1 April 2024).
  • Under para 12, the renter gets one additional bedroom for each condition they meet (12(9)):
    • Overnight care condition. The renter, a member of the extended benefit unit, or a foster child receives a listed benefit and has carers who do not live in the home, engaged to stay overnight regularly ((A1), (3)).
    • Foster parent condition. The renter is a foster parent, or "an adopter with whom a child has been placed for adoption". The condition continues for 12 months between placements ((4)-(5)).
    • In reg 2, the Secretary of State gives "adopter" the meaning in reg 89(3)(a): "a person who has been matched with a child for adoption and who is, or is intended to be, the responsible carer for the child, but excluding a person who is a foster parent or close relative of the child". The Secretary of State lists the close relatives in reg 2 too: a parent, parent-in-law, son, son-in-law, daughter, daughter-in-law, step-parent, step-son, step-daughter, brother or sister, or the partner of any of them.
    • In ADM F3138, DWP gives one bedroom where two people need overnight care (example 1) and adds the overnight-care and foster rooms together (example 2).
  • In para 29(9A), the Secretary of State excepts from the shared accommodation rate a renter under 35 who "satisfies the foster parent condition (within the meaning of paragraph 12(4))", so the definition of adopter applies there too.
  • A renter who receives armed forces independence payment also meets the para 29(5) disability exception, because the Secretary of State defines "attendance allowance" in reg 2 to include it.

Housing Benefit (HB Regs 2006 and HB (SPC) Regs 2006, reg 13D):

  • The claimant gets one bedroom for each category of "occupier" (13D(3)), and the authority counts as occupiers "the persons whom the relevant authority is satisfied occupy as their home the dwelling ... except for any joint tenant who is not a member of the claimant's household" (13D(12)).
    • In the LHA Guidance Manual (paras 2.030-2.031), DWP lists non-dependants, boarders and sub-tenants as occupiers, and in HB/CTB circular A4/2012 (para 44) it says the same of lodgers.
    • Their children count as occupiers too. In Hockley (quoted at [2019] AACR 27, para 9), the Upper Tribunal put the method as "identify the individuals who occupy the dwelling as their home and then to place them into the categories".
  • Under HB, the authority doesn't count a joint tenant's household: "the calculation is based on each tenant's individual household size" (circular A21/2013 para 25; LHA Guidance Manual para 2.093; A3/2017 example 10).
  • A child or young person placed "with the claimant or his partner" as a foster child, prior to adoption or for adoption doesn't count as a member of the claimant's household, "nor ... occupying the claimant's dwelling" (reg 21(3)(a)-(c)). In each limb, the Secretary of State names the claimant or partner. A child placed with a non-dependant, boarder or lodger therefore occupies the claimant's dwelling as their home and counts in the claimant's size criteria. DWP's guidance doesn't reach a child placed with another family: where DWP writes in the LHA Guidance Manual that foster children "do not occupy the dwelling" (para 2.033), it writes of "the customer's family", and in A21/2013 paras 22 to 25 it writes of joint tenants.
  • A child or young person who lives with the claimant but falls outside the household under reg 21 doesn't count as a non-dependant (reg 3(2)(c)).
  • A "qualifying parent or carer" (reg 2(1)) has one additional bedroom (13D(3A)(b)). So does a claimant where any of "(i) the claimant; (ii) the claimant's partner; (iii) a person (other than the claimant or the claimant's partner) who occupies the claimant's dwelling as their home; (iv) a child or young person in respect of whom the claimant or the claimant's partner is a qualifying parent or carer" requires overnight care (13D(3A)(a)). A claimant who meets both has two (13D(3B)). Neither such claimant counts as a "young individual" for the shared accommodation rate.
  • Under 13D(3), each occupier falls in the "first category only which applies". DWP applies the categories combinatorially: "A child is required to share where there is no combination of sharing consistent with the size criteria which allows them their own bedroom" (A21/2013 para 13). So the model allocates children to the fewest rooms under both schemes.

Change

Universal Credit (LHA_allowed_bedrooms) Housing Benefit (housing_benefit_LHA_allowed_bedrooms)
Children counted own children + non-dependants' children, pooled, in the claim that counts the household's non-dependants (uc_non_dependants_counted) own children + every child of a non-dependant, boarder or lodger, pooled, for a family liable for the rent
Joint tenant's (sharer's) children not counted (para 9(2)(d), (g)) not counted (13D(12); A21/2013 para 25)
Foster child placed with the family no room; carer +1 (lha_renter_meets_foster_parent_condition) not an occupier of the carer's dwelling; carer +1 (is_housing_benefit_qualifying_parent_or_carer)
Foster child placed with a non-dependant, boarder or lodger no room for the renter (para 9(2)(g)) an occupier of the claimant's dwelling (placed with neither the claimant nor partner, reg 21(3); 13D(12))
Child placed for adoption with the family counts as the adopter's child (reg 4A(1)(c)), and adopter +1 unless the adopter is a foster parent or close relative of the child (reg 89(3)(a)) not an occupier of the adopter's dwelling; adopter +1
Child placed for adoption with a non-dependant, boarder or lodger counts for the renter through a non-dependant adopter (reg 4A(1)(c)) an occupier of the claimant's dwelling
Overnight care +1 if the renter, anyone in the extended benefit unit or a foster child meets the condition +1 if the claimant, partner, another occupier (including a child placed with another family) or a child placed with the claimant requires overnight care
Shared accommodation rate foster parent or adopter excepted (29(9A)); AFIP added to 29(5) qualifying parent or carer and a person who requires overnight care don't count as young individuals
Occupier couple from another family (non-dependant, boarder or lodger) one bedroom each (para 10(1)(c); ADM F3112 note 1), unchanged one bedroom between them (13D(3)(a), "a couple"; LHA Guidance Manual para 2.012)

New variables:

  • Additional bedrooms: LHA_additional_bedrooms, housing_benefit_LHA_additional_bedrooms.
  • Conditions: meets_lha_overnight_care_condition, lha_renter_meets_foster_parent_condition, is_housing_benefit_qualifying_parent_or_carer.
  • is_child_or_young_person_placed_with_family: the reg 21(3) placement test. is_child_or_young_person_for_legacy_benefits now uses it, so children placed for adoption also leave the legacy household (IS reg 16(4), JSA reg 78(4), ESA reg 156(5), HB reg 21(3)). housing_benefit_has_non_dependant and the HB severe disability premium's non-dependant test read the placement test too, so a child placed with the claimant does not become a non-dependant (HB reg 3(2)(c)).
  • tax_free_childcare_qualifying_child excludes a child placed for adoption (Childcare Payments (Eligibility) Regs 2015 reg 4(2)(d)). An adoption placement has a different effect in each scheme:
    • For Universal Credit and Pension Credit, the Secretary of State treats the adopter as responsible (UC reg 4A(1)(c); SPC Sch IIA para 4(3)(c)), as the model already did.
    • Under HB, IS, JSA, ESA and four CTR schemes, the child doesn't count in the household: the English default working-age scheme (SI 2012/2886 Sch para 8(2)(b)-(c)), the English pensioner scheme (SI 2012/2885 reg 8(2)(b)-(c)), the Welsh scheme (WSI 2013/3029 reg 8(2)(b)-(c)) and the Scottish pension-age scheme (SSI 2012/319 reg 11(2)(b)-(c)).
    • In Scottish working-age CTR from 1 April 2022 (SSI 2021/249 reg 7(2), (8)), the Scottish Ministers take out only a child placed with a foster carer, so the adopter is responsible for the child. On that branch, the model's CTR flag reads the Universal Credit flag, which keeps a child placed for adoption, so the child counts and the adopter can be a lone parent there.
    • youngest_child_age_for_legacy_benefits, which drives Income Support lone-parent eligibility, reads the legacy flag and so leaves out a child placed with the family (IS reg 16(4)).
    • Under the CTC rules, a child drops out only while the local authority pays for their keep (reg 3, rule 4 case B). The model can't observe that, so its CTC doesn't change.

New inputs, all default false:

  • is_placed_for_adoption;
  • adopter_is_foster_parent_or_close_relative, set on the child: the person the child lives with on an adoption placement is a foster parent or close relative of the child (UC reg 2, reg 89(3)(a)). Only lha_renter_meets_foster_parent_condition reads it;
  • is_approved_foster_parent_without_placement;
  • has_non_resident_overnight_carer.

A user marks a foster child as a household member with the existing is_looked_after_by_local_authority, whose documentation now describes that use.

New parameters:

  • gov.dwp.LHA.overnight_care_benefits lists the qualifying benefits: attendance allowance, AFIP, DLA care at the middle or highest rate, and the PIP daily living component. The Scottish devolved equivalents (child disability payment, adult disability payment, Scottish adult DLA, pension age disability payment) also qualify under the law. The model has no variables for those, so they count only where the data records them as the DWP benefits. The same holds for the para 29(5) list.
  • household.demographic.looked_after_child_age_limit (18).
  • gov.dwp.LHA.overnight_care_beyond_claimant: false before 1 April 2017, true from then (SI 2017/213). Before that date only the renter, or the HB claimant and partner, could meet the overnight care condition.

New variables:

  • is_looked_after_child: is_looked_after_by_local_authority and under 18. A local authority can look after only a child, a person under 18 (Children Act 1989 ss.22(1) and 105(1)), so the flag has no effect at 18 or over.
    • It replaces the raw flag in the UC, CTC and Pension Credit child tests and in is_child_or_young_person_placed_with_family.
    • Without it, a flagged 18- or 19-year-old qualifying young person dropped out of UC while still giving an HB carer room. A single renter under 35 then got the shared rate.
  • is_lha_foster_child: a looked-after child placed with the renter (see judgment call 5).

income_support_eligible now includes Income Support Sch 1B paras 2 and 2A: "a single claimant or a lone parent with whom a child is placed" by a local authority, or placed for adoption by an adoption agency. Without them, leaving placed children out of the youngest-child test would have taken eligibility from a lone parent whose only child under 5 is a foster or adoptive placement.

bedrooms_for_children takes masks for the family's own children and other families' children, and a mask of the families that count the others; #2010's child_bedrooms does the arithmetic for both schemes.

Judgment calls

  1. UC adopters get two rooms.
    • The child counts because, under reg 4A(1)(c), the adopter is responsible for them, and the adopter also gets the para 12(4)(b) room.
    • On the current text, the adopter gets both, and DWP still lists adopters in ADM F3133. We found no guidance on the combination; in the EM to SI 2024/341 (para 7.5), DWP writes about the child element.
    • Two readings compete before 1 April 2024. In the EM to SI 2024/341, DWP implies that it treated these children as looked after. But in the old reg 4A(1)(b), the Secretary of State already excluded placements with "a person who has parental responsibility", and prospective adopters have parental responsibility (Adoption and Children Act 2002 s.25(3)). The model applies the current rule in every year.
    • The para 12(4)(b) room goes only to an "adopter" as the Secretary of State defines the term in reg 89(3)(a), excluding a foster parent or close relative of the child. The model reads that from adopter_is_foster_parent_or_close_relative on the child. Such a person still meets the condition as a foster parent of another child, or within 12 months after their last placement ended or after approval (para 12(4)(a), (5)). In reg 4A(1)(c), the Secretary of State writes of the child being "placed for adoption", without the defined term, so the child still counts. In HB reg 21(3) and the HB definition of a qualifying parent or carer, the Secretary of State doesn't use the term either, so HB doesn't change.
  2. Under HB, a child placed with someone other than the claimant counts as an occupier. The child may be a non-dependant's, boarder's or lodger's foster child or adoption placement.
    • In every limb of reg 21(3), the Secretary of State names a placement "with the claimant or his partner", and under 13D(12) the authority counts everyone else who occupies the dwelling as their home. So such a child takes a room in the host's size criteria, and their overnight care counts for the host under 13D(3A)(a)(iii).
    • In the carer's own claim, the authority leaves the child out and gives the carer the qualifying parent or carer's room. The authority keeps a joint tenant's household out of the other tenant's count (13D(12); A21/2013 para 25).
    • DWP's guidance doesn't reach this case: in LHA Guidance Manual para 2.033, DWP writes of "the customer's family", and in A21/2013 paras 22 to 25, of joint tenants.
    • Universal Credit doesn't change: under para 9(2)(c) and (g), with reg 4(6)(a), a foster child stays out of the extended benefit unit, and under reg 4A(1)(c), a child placed for adoption stays in it.
    • For a renter of 60 with a non-dependant daughter fostering a child of 6, the model gives 3 HB bedrooms and 2 UC bedrooms.
  3. HB reg 21(3)(a) and s.22C(2).
    • Since SI 2017/901, reg 21(3)(a) refers to a placement "under section 22C(2) of the Children Act 1989". Under s.22C(2), a local authority places the child with a parent; it makes foster placements under s.22C(5)-(6), and the earlier text cited s.23(2)(a).
    • The model treats foster placements as within reg 21(3), as the definition of "qualifying parent or carer" presupposes. For English pensioner CTR, the Secretary of State says so expressly ("section 22C", SI 2012/2885 reg 8(2)(a)), and for Welsh CTR the Welsh Ministers do too ("section 22C or 23(2)(a)", WSI 2013/3029 reg 8(2)(a)).
    • On the current text, a looked-after child placed back with a parent also falls outside the HB household. The model can't represent that alongside UC, where, under reg 4A(1)(b), such a child stays in the household. See known gaps.
  4. Not observed.
    • HB's qualifying parent or carer, and the HB overnight-care carer, need a spare bedroom in the dwelling (A3/2017 example 10). The model has no count of the dwelling's bedrooms (no formula reads num_bedrooms, and the data lacks it), so it assumes the dwelling has one.
    • The model also leaves out HB's alternative overnight-care route, where the authority accepts evidence instead of a listed benefit.
  5. The model reads a foster "child" as under 18 for UC.
    • In reg 2, the Secretary of State defines a foster parent as "a person with whom a child is placed" under the care planning regulations, under which local authorities place children under 18. In para 9(3), the Secretary of State defines a foster child as "a child" in relation to whom the renter is a foster parent, and in para 12(A1)(c) writes of "a child".
    • In WRA 2012 s.40, Parliament defines a child as a person under 16, unless the contrary intention appears (Interpretation Act 1978 s.11). In reg 91(2)(b)-(d), the Secretary of State writes of foster parents of qualifying young persons.
    • The model reads "child" as under 18 in all three places (is_lha_foster_child). A looked-after 16- or 17-year-old placed with the renter therefore counts as a foster child: they have no room of their own, the renter has the foster room, and their overnight care counts.
    • Reading "child" as under 16 throughout gives the same total for a looked-after 17-year-old not in education (2). It differs for a looked-after qualifying young person (1 instead of 2), which reverses Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's expected value for that case.
    • We found no guidance or case law on it.
    • The shared lha_renter_has_non_dependant still counts a looked-after 17-year-old not in education as a non-dependant. Its separate age-16 rule catches a 16-year-old. HB treats them the same way; on this reading, UC doesn't. Apply each scheme's own non-dependant test to the LHA shared accommodation rate #2030 splits that variable into UC and HB versions and excludes is_lha_foster_child from the UC one.
  6. HB overnight care for other occupiers.
    • In 13D(3A)(a)(iii), the Secretary of State writes "a person ... who occupies the claimant's dwelling as their home", without the defined term "occupiers", so on the text a joint tenant outside the claimant's household could qualify.
    • The model counts the occupiers of the size criteria: for a family liable for the rent, everyone in the families not liable for it, including a child placed with one of them (judgment call 2). It applies 13D(12)'s exclusion of a joint tenant outside the claimant's household and of that tenant's family. In the private sector, the authority sets each joint tenant's size criteria by their own household (A21/2013 para 25). In A3/2017, DWP also frames the 2017 extension as a room for carers of a disabled child or non-dependant.
  7. Dates.
    • The model gates the overnight-care extension at 1 April 2017. The model reads gov parameters at 30 April of each year (its fiscal-year convention), so the extension applies from model year 2017 (2017-18).
    • UC para 29(9A), the foster parent exception, took effect on 28 November 2018 (SI 2018/1129). The model applies it in every year, because in the EM to SI 2018/1129 (para 7.12), DWP describes it as its existing policy before then.

Invariants

test_lha_bedroom_young_people_properties.py holds 7 Hypothesis properties, with 25 derandomized examples each, plus explicit examples.

  • Generators. They make up to 4 households, each with a head family and up to 2 others (sharers, boarders, lodgers, non-dependants). A family has 1-2 adults and up to 4 children, each the family's own, a foster child or a child placed for adoption. Some people need overnight care, and some carers fall between placements.
  • The added person aged 16 to 19. The generator favours a person looked after, in education and not on benefits in their own right; it sometimes gives them overnight care, and sometimes makes them the household head.
  • Status comes from inputs. The tests work out the added person's status from the inputs alone, using their own predicates: UC reg 5 qualifying young person, the Child Benefit qualifying young person for HB reg 19, and looked after under 18 for a foster child. Which claim counts the non-dependants and which families are liable for the rent come from the model, and other tests cover them.
  1. Monotonicity. Adding a person aged 16 to 19 never lowers any family's UC or HB bedrooms. This holds with the claimant and partner supplied or inferred.

  2. Exact effect of a person aged 16 to 19. This extends Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's property:

    • A qualifying young person no one is responsible for, a foster child under 18, or a household head who is not a qualifying young person has no UC room of their own. A young person placed under reg 21(3) has no HB room in the carer's claim.
    • The family that takes the placement gains the foster or carer room if it did not have it already.
    • If they join a non-dependant's family, the UC claim counting the household's non-dependants gains a room unless no one is responsible for them. If they join a non-dependant's, boarder's or lodger's family, each family liable for the rent gains an HB room, placed or not.
    • No other family's bedrooms change.
  3. Children. Adding a child under 16 who is neither fostered nor placed for adoption raises each family's bedrooms by 0 or 1, under each scheme.

  4. Placed children. Adding a child under 16 placed with a family as a foster child or for adoption gives that family one more bedroom under each scheme if it did not already meet the foster condition, and none otherwise. If that family is a non-dependant's, boarder's or lodger's, each family liable for the rent gains 0 or 1 HB bedrooms. A foster child changes no other family's UC bedrooms; a child placed for adoption adds 0 or 1 to the adopter's family and to the claim counting a non-dependant adopter's household. No joint tenant's bedrooms change.

  5. Reference count. Each family's bedrooms and additional bedrooms equal the test's own count.

    • The test finds the children's rooms by brute force: the fewest rooms that hold the pooled children two to a room. This also checks the greedy arithmetic in child_bedrooms against the optimum.
    • The count applies the same legal readings as the model, including judgment call 2. It checks that the code implements those readings, not whether the readings hold. We worked the YAML cases' legal expectations by hand.
  6. In-unit non-dependants (Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's property). Every benefit-unit member aged 16 or over who is not the claimant or partner, a UC qualifying young person, the household head or the family's foster child has a UC bedroom of their own, and making them qualifying young persons the renter is responsible for leaves every family's UC bedrooms unchanged.

  7. The close-relative input. Setting adopter_is_foster_parent_or_close_relative on every member takes away lha_renter_meets_foster_parent_condition where, and only where, an adoption placement was the family's only route to it, lowers that family's UC bedrooms by one, and leaves UC responsibility, the HB placement test, the qualifying parent or carer and every family's HB bedrooms unchanged.

test_council_tax_reduction_young_person_properties.py adds:
8. Scottish working-age adoption placements. From 2022-23, placing any member of a Scottish working-age family for adoption leaves the CTR child flag, lone-parent status and the applicable amount unchanged.

On 300 generated households (604 benefit units) in Maidstone in 2025, with no placement, overnight-care or between-placements inputs and no children outside the head's family, LHA_allowed_bedrooms and housing_benefit_LHA_allowed_bedrooms agree with #2010's d8c2249 for every benefit unit. Each household has a head family of 1-2 adults aged 20-85 and up to 4 children aged 0-19 (those aged 16 or over with random education and benefits), and up to 2 adult-only sharer, boarder, lodger or non-dependant families.

We ran each mutation as one change to a copy of the branch, against the named tests.

At 1f3ce21 (the earlier head), each made at least one property fail:

  • no pooling of non-dependants' children (UC);
  • foster children given their own UC rooms;
  • one overnight-care room per person instead of one in total;
  • HB counting a joint tenant's children;
  • no mixed-sex sharing for children under 10;
  • adopters without the UC para 12(4)(b) room.

At 1f3ce21, YAML cases also killed four more mutations: "placed" without the Child Benefit young-person test; a non-dependant's foster child's overnight care counting under UC; reverting (A1)(c) for a looked-after qualifying young person; and a looked-after claimant giving the foster room (a case with a 17-year-old looked-after claimant pins it; the property generator supplies claimant roles, so the properties cannot reach it).

At this head:

Mutation YAML (LHA_other_families_…, LHA_young_person_bedroom, council_tax_reduction_young_person) Properties Result
HB others drops placed children again 7 cases fail 2 of 3 fail (exact effect, placed children, reference) killed
HB own keeps placed children 12 cases fail 3 of 3 fail killed
Puts ~placed back in housing_benefit_LHA_additional_bedrooms 1 case fails (the non-dependant's foster child with overnight care) the reference count's explicit example fails killed
Scotland's working-age branch reads the legacy flag 3 cases fail, including Case 12 the adoption property fails killed
Drops adopter_is_foster_parent_or_close_relative 2 cases fail the close-relative property fails killed
Applies the input to HB's qualifying parent or carer 2 cases fail the close-relative property fails killed
Applies the input to is_child_or_qualifying_young_person_for_universal_credit 3 cases fail the close-relative property fails killed
Drops the placed test from housing_benefit_has_non_dependant 1 case fails ("A child placed with the claimant is not a Housing Benefit non-dependant") not run killed

Tests

At 9834880 (this head):

  • YAML, policyengine-core test … -c policyengine_uk: 97 passed.
    • LHA_other_families_children_and_additional_bedrooms.yaml: 44 cases, including a renter of 60 whose non-dependant daughter has a child placed with her, as a foster child and for adoption (HB [3, 2]; UC [2, 2] and [3, 3]), both through final Housing Benefit, a looked-after young person of 17 placed with a non-dependant, a child placed with a lodger, a child placed with a joint tenant, a non-dependant's placed child who needs overnight care (HB [4, 3]), three close-relative adopter cases, and a placed child who is not an HB non-dependant.
    • LHA_young_person_bedroom.yaml: 11. The case of a looked-after qualifying young person in a non-dependant's family now expects the carer's foster room: [2, 2], categories [C, C].
    • LHA_claimant_composition.yaml: 17. income_support.yaml: 7. tax_free_childcare_qualifying_child.yaml: 5.
    • council_tax_reduction_young_person.yaml: 13, including Cases 11-13: in Scotland's working-age scheme, an adopter of 23 with a child of 3 has the same lone-parent status, applicable amount (£4,786.60) and final CTR (£286.40) with and without the adoption placement, and under Scotland's pension-age scheme the child placed for adoption drops out.
  • Python, pytest … -n 4:
    • test_lha_bedroom_young_people_properties.py: 7 passed.
    • test_child_and_adult_definitions_properties.py: 18 passed.
    • test_means_test_income_properties.py: 2 passed.
    • test_rent_of_sharers_boarders_and_lodgers_properties.py: 6 passed. Its no-op bedroom check now covers households with no child outside the head's family.
    • test_council_tax_reduction_young_person_properties.py: 7 passed. Its scheme-selection reference now stops looked-after status at 18.
    • test_household_head_agreement_properties.py: 3 passed, with the two additional-bedroom variables added to its outputs.
    • policyengine_uk/tests/code_health: 3,102 passed.
  • ruff format --check, ruff check and ruff check --select F811,F821 policyengine_uk (0.17.2): all pass.
  • CI runs the full suite once this PR targets main.

The final-HB cases use Maidstone in 2026, where the rent of £300 a week exceeds the D rate: the renter's HB at three bedrooms, £8,889.92, exceeds the HB at two, £5,359.64, by £3,530.28.

Impact (real microsimulation)

We ran these on #2010's earlier head and this PR's earlier head: base 49866c2, branch 500424e (084664c and 9311e4e give identical aggregates). We haven't rerun them at this head; a rerun needs the dataset. They use the enhanced FRS 2024-25 as released (policyengine-uk-data 1.57.4, enhanced_frs_2024_25.h5, sha256 03fe15e4…), for 2026.

We identify a survey household by its rent and its members' ages, which every enhanced-FRS record shares with its FRS 2024-25 source household. We suppress cells built from fewer than 10 survey households, and suppress sub-cells together when any one of them falls short, so no one can recover a hidden cell by subtraction.

At 500424e against 49866c2, we estimate:

  • Children under 16 in a non-dependant's family: 135k (64 survey households).
  • Boarder or lodger families, or sharers' families, with children: 0. The released data has no boarder or lodger rent yet (drafts policyengine-uk-data#506 and Add Energy Bills Rebate #512 add it).
  • UC bedroom counts: rise for 109k benefit units (62 survey households). None falls.
  • HB bedroom counts:
    • fall for 430k benefit units (66 survey households), because an occupier couple now counts once;
    • rise for 66k (47 survey households), because of non-dependants' children.
  • Private renters, the only group whose LHA depends on the bedroom count:
    • UC changes affect fewer than 10 survey households, so we suppress UC categories, the housing costs element and UC paid.
    • HB categories change for 22k benefit units (12 survey households); we suppress each transition.
    • The HB eligible rent under the LHA (LHA_cap, which the model computes for every private renter whether or not they claim) rises by £14.7m net.
    • HB paid does not change: the change reaches no private-renting HB recipient.
  • Poverty (BHC and AHC): no change.
  • Foster, adoption and overnight-care inputs: default false and not in the data, so those changes have no microsimulation effect.
  • AFIP: the data has no recipients.
  • Shared accommodation: UC specified-renter and HB young-individual flags do not change.

Figures this head can move, pending a rerun:

  • Everything Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010 changed since 49866c2, which this head merges (d8c2249): the household head and non-dependant counting (uc_non_dependants_counted, is_resolved_household_head), HB occupiers for sharers' claims, and the merged main.
  • UC non-dependants' children and additional bedrooms now follow uc_non_dependants_counted rather than the household head's family, so a household whose head does not claim UC can give them to a sharer's claim.
  • HB couples now merge into one bedroom only where the family is a couple (is_couple) as well as having two claimants or partners.
  • The placement, close-relative and overnight-care changes read inputs that default to false and that the data lacks, so they move no survey figure.

Known gaps (not changed here)

  • Disabled child and disabled couple rooms (UC para 12(1)(c)-(d), (6), (6A), (8); HB 13D(3)(za), (ba)): the model leaves them out. Branch lha-disabled-cannot-share-rooms adds them.
  • Temporary absence (UC para 11; HB reg 7) and the armed forces rule: the model leaves them out.
  • Shared non-dependants for joint tenants. Under HB, the authority counts a non-dependant shared by joint tenants in each joint tenant's size criteria (LHA Guidance Manual para 2.110). The model gives the household's non-dependants to the families liable for the rent under HB and to one claim under UC; branch hb-joint-tenant-shared-non-dependant (Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria #2029) addresses apportionment.
  • Head family. With no head input, the eldest member becomes the household head (is_resolved_household_head), even if a lodger.
  • Joint tenant in the claimant's household. The model treats a joint tenant who is a member of the claimant's household as a separate sharer (LHA Guidance Manual para 2.100, the Lee example).
  • HB evidence route for overnight care, and the spare-bedroom conditions (judgment call 4).
  • A looked-after child placed back with a parent falls outside the HB household on the current text of reg 21(3)(a). The model keeps them in, as UC does.
  • A lodger's child counts as a non-dependant. In HB reg 3(1), the Secretary of State makes anyone who normally resides with the claimant a non-dependant, so on the text a lodger's or boarder's child counts as one; the model counts only non-dependants' families. Model rent from boarders, lodgers and sub-tenants for the householder #2002 addresses this.
  • Scottish working-age CTR before 1 April 2022. The model applies the Child Benefit test, which leaves out a child placed for adoption, to Scotland's working-age scheme for those years. We haven't read SSI 2012/303's text for this change.
  • Scottish working-age CTR earnings disregard. On Scotland's route, the model counts earnings in working-age CTR applicable income with no earnings disregard; we haven't read the scheme's own disregards for this change.
  • HB "eligible children". In HB reg 19(2)(c), the Secretary of State leaves out of "young person" anyone to whom Children (Leaving Care) Act 2000 s.6 applies, including an eligible child: a 16- or 17-year-old whom a local authority looks after and has looked after for 13 weeks since age 14. Such a person counts as an occupier with a room, and gives no carer room. The model has no input for it and treats every looked-after qualifying young person as placed. Totals usually match, because an occupier room replaces the carer room.
  • Scottish devolved disability benefits: the model has no separate variables for them (see New parameters; Include the Scottish devolved disability benefits in the LHA size-criteria benefit lists #2041).

Documentation

The variables' documentation fields describe the rules. No docs notebook covers the size criteria.

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 1, 2026 14:30
…bedrooms in the LHA size criteria

Universal Credit (UC Regs 2013 Sch 4 paras 9-12): the household head's
non-dependants' children are in the extended benefit unit and share rooms
with the renter's children; foster children are in no one's extended benefit
unit; foster parents and adopters with a child placed (para 12(4)-(5)) and
renters whose household includes someone with non-resident overnight care
(para 12(A1), (3)) get one additional bedroom for each condition (12(9)).
Foster parents are excepted from the shared accommodation rate (29(9A)), and
armed forces independence payment counts in the para 29(5) exception.

Housing Benefit (HB Regs 2006 and HB (SPC) Regs 2006 reg 13D): the children
of non-dependants, boarders and lodgers are occupiers (13D(12)); a child
placed with the claimant as a foster child or for adoption is not (reg
21(3)); a qualifying parent or carer and a person who requires overnight care
give one additional bedroom each (13D(3A)-(3B)) and are not young
individuals.

New inputs: is_placed_for_adoption, is_approved_foster_parent_without_placement,
has_non_resident_overnight_carer.

Fixes #2011

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HB reg 21(3) names only children placed with the claimant or partner, but
DWP treats foster children as not occupying the dwelling (LHA Guidance
Manual para 2.033; HB circular A21/2013 para 22), as Universal Credit does
(UC Sch 4 para 9(2)(g)). The household head's Housing Benefit size criteria
and overnight-care bedroom now leave out a child placed with a non-dependant,
boarder or lodger as a foster child or for adoption. Adds a YAML case and
tightens the foster-child Hypothesis property to an exact effect on every
family.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 1, 2026 16:01
HB Regs 2006 reg 13D(3)(a) puts any occupier couple in "a couple" (one
bedroom; LHA Guidance Manual para 2.012), so a non-dependant's, boarder's or
lodger's couple adds one bedroom to the household head's HB size criteria,
not two. Universal Credit is unchanged: each non-dependant who is not a
child has a bedroom (UC Sch 4 para 10(1)(c); ADM F3112 note 1). Reported by
the disabled-rooms session (chip task_cc724597).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Childcare Payments (Eligibility) Regs 2015 reg 4(2)(d): no one is
responsible for a child placed for adoption by an adoption agency in the
home of a person proposing to adopt them. The new is_placed_for_adoption
input is documented for each scheme it touches: Universal Credit and
Pension Credit treat the adopter as responsible (UC reg 4A(1)(c); SPC Sch
IIA para 4(3)(c)); HB, the legacy schemes and English pensioner CTR do not
count the child in the household; CTC's rule 4 case B depends on local
authority payments and is not modelled. Changelog covers the HB occupier
couple rule too. Found by the first review attempt's probes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt test predicates

- HB occupier couple: count the half rooms only when both members are
  counted, so a benefit unit flagged as a couple without two adults no
  longer produces a fractional bedroom (and an enum error downstream).
- UC: read "child" as under 18 for foster children throughout
  (is_lha_foster_child; parameter gov.dwp.LHA.foster_child_age_limit): a
  looked-after 16- or 17-year-old placed with the renter has no room of
  their own, and their overnight care counts under para 12(A1)(c).
- Overnight care beyond the renter or HB claimant and partner applies from
  1 April 2017 (SI 2017/213; parameter overnight_care_beyond_claimant).
- youngest_child_age_for_legacy_benefits leaves out a child placed with
  the family (IS reg 16(4)).
- Property tests derive the added person's status from the inputs (UC
  reg 5, Child Benefit QYP, looked after under 18) instead of the model,
  bias the generator towards looked-after young people, and give the added
  person overnight care in the reference property.
- YAML: 13 new cases pinning the reviewer's surviving mutants and probes,
  a case with an inconsistent couple flag, and a 2016 date-gate case; the
  fostering-couple case now uses ages that detect counting the foster
  child; corrected citations.
- Documentation: Scottish working-age CTR adoption gap, Scottish devolved
  disability benefits, HB 13D(3A)(a)(iii) reading, reg 21(3)(a) and
  s.22C, and the overnight-carer and adoption inputs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Follows #2016's reading of "foster child" (UC Sch 4 para 9(3), with the
reg 2 foster parent definition) as a looked-after person under 18 placed
with the renter (is_lha_foster_child), so a looked-after 16- or 17-year-old
who is not a qualifying young person is excluded by para 9(2)(c) rather
than counted as a non-dependant. The WRA 2012 s.40 reading (a child is
under 16) would count them; the code records both. HB is unchanged: such a
person is not a young person (reg 19), so reg 21(3) does not apply and they
are a non-dependant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
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>
…tering

- is_looked_after_child: the looked-after flag applies only under 18
  (Children Act 1989 ss.22(1), 105(1)). It replaces the raw flag in the UC,
  CTC and Pension Credit child tests and in the legacy placement test, so a
  flagged 18- or 19-year-old qualifying young person keeps their UC room
  and gives no HB carer room. The looked-after age limit moves to
  household.demographic.looked_after_child_age_limit.
- HB occupier couples need is_couple as well as two counted claimant or
  partner members, so relation_type SINGLE is respected again.
- Income Support Sch 1B para 2: a single claimant or lone parent with whom
  a child is placed by a local authority is a prescribed category.
- YAML: a looked-after 17-year-old claimant (pins the claimant-guard
  mutant), a looked-after 18-year-old with a single renter of 30, a
  non-dependant pair entered as single, two IS para 2 cases.
- Property predicates apply the under-18 limit and accept any non-tertiary
  education; P5 renamed to a reference count. The child-definition
  property reference applies the same under-18 limit.
- Documentation: HB reg 19(2)(c) eligible children; looked-after flag
  under 18 only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Follows #2016's reading of "foster child" (UC Sch 4 para 9(3), with the
reg 2 foster parent definition) as a looked-after person under 18 placed
with the renter (is_lha_foster_child), so a looked-after 16- or 17-year-old
who is not a qualifying young person is excluded by para 9(2)(c) rather
than counted as a non-dependant. The WRA 2012 s.40 reading (a child is
under 16) would count them; the code records both. HB is unchanged: such a
person is not a young person (reg 19), so reg 21(3) does not apply and they
are a non-dependant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
… deduction code

Follows #2017 at 2d54628 (review r2 F3/F4): a non-dependant normally
resides with each joint occupier whichever family they belong to (HB reg
3(1), (4); reg 74(5)), including a joint tenant's own adult son and a
lodger's adult son (reg 3(2)(e)(i) excludes only the person liable to pay
the claimant). A boarder or lodger keeps only their own family's.

Both flags now count the same people the deduction formulas charge, so a
deduction always implies a non-dependant, including for a family with no
claimant or partner (review r1 finding 3). "Joint renter" in the UC
docstring becomes "sharer of the rent" (in UC Sch 4 it means a joint
claimant; review r1 finding 6).

New YAML cases: a lodger's adult son (HB non-dependant of the householder
and the lodger; UC counts him in the lodger's claim only, para 9(2)(f)),
and a looked-after 16-year-old school leaver with a young single HB
claimant (C, not A; #2016 review r2 N9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
Follows #2016's reading of "foster child" (UC Sch 4 para 9(3), with the
reg 2 foster parent definition) as a looked-after person under 18 placed
with the renter (is_lha_foster_child), so a looked-after 16- or 17-year-old
who is not a qualifying young person is excluded by para 9(2)(c) rather
than counted as a non-dependant. The WRA 2012 s.40 reading (a child is
under 16) would count them; the code records both. HB is unchanged: such a
person is not a young person (reg 19), so reg 21(3) does not apply and they
are a non-dependant.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis added a commit that referenced this pull request Oct 2, 2026
… deduction code

Follows #2017 at 2d54628 (review r2 F3/F4): a non-dependant normally
resides with each joint occupier whichever family they belong to (HB reg
3(1), (4); reg 74(5)), including a joint tenant's own adult son and a
lodger's adult son (reg 3(2)(e)(i) excludes only the person liable to pay
the claimant). A boarder or lodger keeps only their own family's.

Both flags now count the same people the deduction formulas charge, so a
deduction always implies a non-dependant, including for a family with no
claimant or partner (review r1 finding 3). "Joint renter" in the UC
docstring becomes "sharer of the rent" (in UC Sch 4 it means a joint
claimant; review r1 finding 6).

New YAML cases: a lodger's adult son (HB non-dependant of the householder
and the lodger; UC counts him in the lodger's claim only, para 9(2)(f)),
and a looked-after 16-year-old school leaver with a young single HB
claimant (C, not A; #2016 review r2 N9).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits October 2, 2026 05:24
… single case

- Income Support Sch 1B para 2A: a single claimant or lone parent with
  whom a child is placed for adoption by an adoption agency is a
  prescribed category, so leaving the placed child out of the para 1
  youngest-child test no longer removes eligibility. Two YAML cases.
- The relation_type SINGLE YAML case now marks the parent and son's roles
  explicitly, so it asserts the legally correct [3, 2]; a separate case
  pins the is_couple guard on the renter's count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…euse placement test

- Two Income Support cases that must be ineligible: a couple with a child
  placed for adoption, and a placement aged 16 (para 2A needs a single
  claimant or lone parent, and a child under 16).
- The is_couple guard case asserts only the renter's bedrooms.
- income_support_eligible reuses is_child_or_young_person_placed_with_family
  (under 16) instead of re-deriving it; renamed has_placed_child.
- is_placed_for_adoption documentation mentions IS Sch 1B para 2A.

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 LHA_additional_bedrooms, LHA_allowed_bedrooms and housing_benefit_LHA_additional_bedrooms 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.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

#2062 is now on main (merge commit c4659aa). main has one resolved household head: is_resolved_household_head (Person: the eldest member the is_household_head input flags, else the eldest member) and benunit_contains_household_head (BenUnit, defined from it). No formula outside is_resolved_household_head reads is_household_head, and test_only_the_resolved_head_reads_the_flag in policyengine_uk/tests/test_household_head_agreement_properties.py enforces that.

This PR still adds formulas that read the raw flag:

  • policyengine_uk/variables/gov/dwp/LHA_additional_bedrooms.py: head_family = benunit.any(person("is_household_head", period))
  • policyengine_uk/variables/gov/dwp/LHA_allowed_bedrooms.py: head_family = benunit.any(person("is_household_head", period))
  • policyengine_uk/variables/gov/dwp/housing_benefit_LHA_additional_bedrooms.py: head_family = person.benunit.any(person("is_household_head", period)); is_head_family = benunit.any(person("is_household_head", period))

Each needs to read the resolved head instead:

  • 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, only where the formula needs the head as a person: person("is_household_head", period) becomes person("is_resolved_household_head", period).

test_only_the_resolved_head_reads_the_flag fails until every such read is moved. Please also add each variable you move to OUTPUTS in that test file, so its metamorphic test (flags matter only through the resolved head) computes it. Test inputs that set is_household_head are fine as they are.

@juaristi22 juaristi22 left a comment •

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed 1f3ce21a08e8341b25af524bc04d3c940ad844bd, scoped to this PR’s delta on #2010. Three blockers remain.

C1 — Count a non-dependant’s adoption placement in the host’s HB rooms. housing_benefit_LHA_allowed_bedrooms.py:52 excludes the placement globally. HB regulation21(3) limits that fiction to a placement with the claimant or partner; 13D(12) otherwise counts residents. A native host aged 60, daughter aged 32 and child aged six case, with the child placed only with the non-joint-tenant daughter, gives the host two rooms and HB £11,892.40. The source-backed three-room control gives HB £14,200.68: £2,308.28 more at the snapshot’s rates. Keep the host-relative exclusion separate from the daughter’s own claim. The manual’s foster-child passage does not establish this third-party adoption exclusion.

C2 — Preserve adoption responsibility in Scottish working-age CTR. The new exclusion at is_child_or_young_person_for_legacy_benefits.py:41 also reaches Scotland’s working-age CTR, whose regulation7(2),(8) excludes foster placements, not adoption placements. In 2025, for a 23-year-old Scottish adopter with a normally resident three-year-old, £11,000 earnings and a £1,800 CT bill, toggling only the adoption flag incorrectly removes lone-parent status. Modelled final CTR falls £286.30→£87.45 (−£198.85) at identical income. Use the scheme’s own responsibility rule while preserving the appropriate HB/IS exclusions. These figures demonstrate the new classification’s incidence, rather than certify the old stack’s whole allowance schedule.

C3 — Apply the statutory adopter qualification to the extra UC room. lha_renter_meets_foster_parent_condition.py:36–46 accepts any under-18 adoption placement. UC regulation2 imports 89(3)(a), which excludes close-relative/foster-parent adopters from this defined category. A close-relative prospective adopter who is not separately a foster parent gets the new room by code flow despite failing Sch4 paragraph12(4)(b). Apply that qualification separately from the general placement input. This finding is statutory/code-traced; no monetary or SAR effect is claimed.

Review COMPLETE: 68 repository tests and native final-award controls passed. The final CTC control also passed after correcting the diagnostic’s claim-premise setup; earlier harness failures are retained and are not reported as model defects. Local Core 3.33.2 differs from the lock’s 3.32.9, so no frozen full-suite certification is claimed. The draft and its parent-merge/retarget conditions remain.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Picking this up for the UK hub. Reply here if you're mid-change and I'll stop.


Generated by Claude Code

Resolves the 12 conflicts on #2010's rewritten size criteria: child_bedrooms
is the arithmetic, the head-family tests read benunit_contains_household_head
and uc_non_dependants_counted, and Housing Benefit counts occupiers through
occupiers_total. #2016's own/other child masks, foster and adoption
exclusions, additional bedrooms and Income Support paras 2 and 2A sit on top.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FYBy8zKExK1r9z9fW
The legacy child flag now leaves out every child placed with the family, so
housing_benefit_has_non_dependant and the severe disability premium's
non-dependant test read such a child as a non-dependant. HB reg 3(2)(c) says
otherwise; both now apply the placement test.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FYBy8zKExK1r9z9fW
SSI 2021/249 reg 7(8) takes out only a child placed with a foster carer. On
that branch the CTR flag reads the Universal Credit flag, which keeps a child
placed for adoption, so the adopter stays a lone parent. Adds the review's
family through final CTR, the pension-age contrast and a property over
Scottish working-age families from 2022-23.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FYBy8zKExK1r9z9fW
…y the UC adopter definition

HB reg 21(3) names only a placement with the claimant or partner, so a child
placed with a non-dependant, boarder or lodger occupies the claimant's dwelling
(13D(12)) and counts in the host's size criteria and under 13D(3A)(a)(iii).
The carer's own claim still leaves the child out.

UC Sch 4 para 12(4)(b) applies to an adopter as reg 89(3)(a) defines it, which
excludes a foster parent or close relative of the child. The new child-level
input adopter_is_foster_parent_or_close_relative feeds only the foster parent
condition, and so para 29(9A).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FYBy8zKExK1r9z9fW
The CTR scheme-selection reference now stops looked-after status at 18, as
is_looked_after_child does. The sharers' no-op bedroom check covers
households with no child outside the head's family, since non-dependants'
children now share the head's children's rooms.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FYBy8zKExK1r9z9fW
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_TITLE.txt

Count other families' children and add LHA foster and care bedrooms


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_BODY.md

Fixes #2011
Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/LHA_other_families_children_and_additional_bedrooms.yaml::A non-dependant's foster child raises the renter's final Housing Benefit

axiom: uk/regulations/uksi/2013/376/schedule/4/paragraph/10 (UC Sch 4 para 10(1)(d)-(f), (3)(b)) encoded-correct, companion cases in TheAxiomFoundation/rulespec-uk#412 | UC Sch 4 para 9(2)(c), (g) (non-dependants' children, foster children): TheAxiomFoundation/rulespec-uk#406 queued (addendum: https://github.com/TheAxiomFoundation/rulespec-uk/issues/406#issuecomment-5938349255; extension: <406 extension URL>) | UC Sch 4 paras 12 and 29(5), (9A), with reg 2 and reg 89(3)(a) "adopter": TheAxiomFoundation/rulespec-uk#411 queued (extension: <411 extension URL>) | HB Regs 2006 / HB (SPC) Regs 2006 regs 2(1), 13D(3)(c)-(e), (3A)-(3B), (12), 21(3): TheAxiomFoundation/rulespec-uk#406 and #357 queued (addenda: https://github.com/TheAxiomFoundation/rulespec-uk/issues/406#issuecomment-5938349255, https://github.com/TheAxiomFoundation/rulespec-uk/issues/357#issuecomment-5938349612; extension: <406 extension URL>)

Stacked on #2010 (base `lha-bedroom-young-people`). Retarget to `main` once it merges.

## Problem

The LHA size criteria had three gaps:

1. **Other families' children.** `bedrooms_for_children` counted only the claimant's own benefit unit, so a grandchild living with their parent in the renter's home never had a room. Under Housing Benefit, neither did a boarder's or lodger's child.
2. **Foster children.** They had a bedroom of their own, and the foster parent had no additional bedroom. `lha_renter_has_non_dependant` also counted a foster child under 16 as a non-dependant, which took a single foster parent under 35 out of the shared accommodation rate for the wrong reason.
3. **Overnight care.** There was no additional bedroom for non-resident overnight carers.

## The law, and how DWP applies it

Provisions were read on legislation.gov.uk on 2026-10-01; reg 2 and reg 89(3)(a) of the UC Regs 2013 and HB reg 21(3) again on 2026-11-02.

**Universal Credit** ([UC Regs 2013 Sch 4](https://www.legislation.gov.uk/uksi/2013/376/schedule/4)):
- The extended benefit unit is the renter, the children and qualifying young persons they are responsible for, and "any person who is a non-dependant" ([para 9(1)](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/9)).
- A non-dependant is anyone who normally lives with the renter, with seven exceptions in para 9(2). Three matter here:
  - (c): the renter's foster child;
  - (d): a person liable on a commercial basis, such as a lodger or joint tenant;
  - (g): "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible".
- A non-dependant is responsible for their own child ([reg 4(2)](https://www.legislation.gov.uk/uksi/2013/376/regulation/4)), so that child is a non-dependant and counts under [para 10(1)(d)-(f)](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/10).
  - The Explanatory Memorandum to SI 2013/2828, which inserted (g), says the same (para 7.22).
  - DWP's staff guidance *Housing Costs Contributions – non-dependants* (V13.0, deposited in Parliament as DEP2023-0791) says: "children can be expected to share rooms together, such as children of the main claimant or claimants with those of non-dependants".
- A lodger's or joint tenant's child is outside the extended benefit unit: (d) excludes the parent, so (g) excludes the child. EM 2013/2828 para 7.6 says the same of joint tenants' children.
- No one is responsible for a child looked after by a local authority ([reg 4(6)(a)](https://www.legislation.gov.uk/uksi/2013/376/regulation/4)), such as a foster child. The exception is a child placed for adoption ([reg 4A(1)(c)](https://www.legislation.gov.uk/uksi/2013/376/regulation/4A), from 1 April 2024).
- [Para 12](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/12) gives one additional bedroom for each condition met (12(9)):
  - **Overnight care condition.** The renter, a member of the extended benefit unit, or a foster child receives a listed benefit and has carers who do not live in the home, engaged to stay overnight regularly ((A1), (3)).
  - **Foster parent condition.** The renter is a foster parent, or "an adopter with whom a child has been placed for adoption". This continues for 12 months between placements ((4)-(5)).
  - [Reg 2](https://www.legislation.gov.uk/uksi/2013/376/regulation/2) gives "adopter" the meaning in [reg 89(3)(a)](https://www.legislation.gov.uk/uksi/2013/376/regulation/89): "a person who has been matched with a child for adoption and who is, or is intended to be, the responsible carer for the child, but excluding a person who is a foster parent or close relative of the child". Reg 2 lists the close relatives: a parent, parent-in-law, son, son-in-law, daughter, daughter-in-law, step-parent, step-son, step-daughter, brother or sister, or the partner of any of them.
  - ADM F3138 example 1 confirms that two people needing overnight care still give one bedroom; example 2 confirms that the overnight-care and foster rooms are cumulative.
- [Para 29(9A)](https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/29) excepts from the shared accommodation rate a renter under 35 who "satisfies the foster parent condition (within the meaning of paragraph 12(4))", so the adopter definition carries through.
- The para 29(5) disability exception includes armed forces independence payment, because reg 2 defines "attendance allowance" to include it.

**Housing Benefit** (HB Regs 2006 and HB (SPC) Regs 2006, [reg 13D](https://www.legislation.gov.uk/uksi/2006/213/regulation/13D)):
- One bedroom for each category of "occupier": "the persons whom the relevant authority is satisfied occupy as their home the dwelling ... except for any joint tenant who is not a member of the claimant's household" (13D(12)).
  - [LHA Guidance Manual](https://assets.publishing.service.gov.uk/media/5a758238ed915d6faf2b38a2/lha-guidance-manual.pdf) paras 2.030-2.031 list non-dependants, boarders and sub-tenants as occupiers. HB/CTB circular A4/2012 para 44 says the same of lodgers.
  - Their children are occupiers too. The Upper Tribunal in *Hockley* (quoted at [2019] AACR 27, para 9) put the method as "identify the individuals who occupy the dwelling as their home and then to place them into the categories".
- HB does not count a joint tenant's household: "the calculation is based on each tenant's individual household size" (circular A21/2013 para 25; LHA Guidance Manual para 2.093; A3/2017 example 10).
- A child or young person is not a member of the claimant's household, "nor ... occupying the claimant's dwelling", where they are placed "with the claimant or his partner" as a foster child, prior to adoption or for adoption ([reg 21(3)](https://www.legislation.gov.uk/uksi/2006/213/regulation/21)(a)-(c)). Every limb names the claimant or partner. A child placed with a non-dependant, boarder or lodger therefore occupies the claimant's dwelling as their home and counts in the claimant's size criteria. The LHA Guidance Manual's statement that foster children "do not occupy the dwelling" (para 2.033) speaks of "the customer's family", and A21/2013 paras 22 to 25 concern joint tenants, so neither reaches a child placed with another family.
- A child or young person living with the claimant who is not a member of the household by virtue of reg 21 is not a non-dependant ([reg 3(2)(c)](https://www.legislation.gov.uk/uksi/2006/213/regulation/3)).
- A "qualifying parent or carer" ([reg 2(1)](https://www.legislation.gov.uk/uksi/2006/213/regulation/2)) has one additional bedroom (13D(3A)(b)). So does a claimant where any of "(i) the claimant; (ii) the claimant's partner; (iii) a person (other than the claimant or the claimant's partner) who occupies the claimant's dwelling as their home; (iv) a child or young person in respect of whom the claimant or the claimant's partner is a qualifying parent or carer" requires overnight care (13D(3A)(a)). Both together give two (13D(3B)). Neither such claimant is a "young individual" for the shared accommodation rate.
- 13D(3) puts each occupier in the "first category only which applies". DWP applies them combinatorially: "A child is required to share where there is no combination of sharing consistent with the size criteria which allows them their own bedroom" (A21/2013 para 13). So the fewest-rooms allocation serves both schemes.

## Change

| | Universal Credit (`LHA_allowed_bedrooms`) | Housing Benefit (`housing_benefit_LHA_allowed_bedrooms`) |
|---|---|---|
| Children counted | own children + non-dependants' children, pooled, in the claim that counts the household's non-dependants (`uc_non_dependants_counted`) | own children + every child of a non-dependant, boarder or lodger, pooled, for a family liable for the rent |
| Joint tenant's (sharer's) children | not counted (para 9(2)(d), (g)) | not counted (13D(12); A21/2013 para 25) |
| Foster child placed with the family | no room; carer +1 (`lha_renter_meets_foster_parent_condition`) | not an occupier of the carer's dwelling; carer +1 (`is_housing_benefit_qualifying_parent_or_carer`) |
| Foster child placed with a non-dependant, boarder or lodger | no room for the renter (para 9(2)(g)) | an occupier of the claimant's dwelling (reg 21(3) names only the claimant or partner; 13D(12)) |
| Child placed for adoption with the family | counts as the adopter's child (reg 4A(1)(c)), **and** adopter +1 unless the adopter is a foster parent or close relative of the child (reg 89(3)(a)) | not an occupier of the adopter's dwelling; adopter +1 |
| Child placed for adoption with a non-dependant, boarder or lodger | counts for the renter through a non-dependant adopter (reg 4A(1)(c)) | an occupier of the claimant's dwelling |
| Overnight care | +1 if the renter, anyone in the extended benefit unit or a foster child meets the condition | +1 if the claimant, partner, another occupier (including a child placed with another family) or a child placed with the claimant requires overnight care |
| Shared accommodation rate | foster parent or adopter excepted (29(9A)); AFIP added to 29(5) | qualifying parent or carer and a person who requires overnight care are not young individuals |
| Occupier couple from another family (non-dependant, boarder or lodger) | one bedroom each (para 10(1)(c); ADM F3112 note 1), unchanged | one bedroom between them (13D(3)(a), "a couple"; LHA Guidance Manual para 2.012) |

New variables:
- Additional bedrooms: `LHA_additional_bedrooms`, `housing_benefit_LHA_additional_bedrooms`.
- Conditions: `meets_lha_overnight_care_condition`, `lha_renter_meets_foster_parent_condition`, `is_housing_benefit_qualifying_parent_or_carer`.
- `is_child_or_young_person_placed_with_family`: the reg 21(3) placement test. `is_child_or_young_person_for_legacy_benefits` now uses it, so children placed for adoption also leave the legacy household (IS reg 16(4), JSA reg 78(4), ESA reg 156(5), HB reg 21(3)). `housing_benefit_has_non_dependant` and the HB severe disability premium's non-dependant test read the placement test too, so a child placed with the claimant does not become a non-dependant (HB reg 3(2)(c)).
- `tax_free_childcare_qualifying_child` excludes a child placed for adoption (Childcare Payments (Eligibility) Regs 2015 reg 4(2)(d)). Each scheme treats an adoption placement differently:
  - Universal Credit and Pension Credit treat the adopter as responsible (UC reg 4A(1)(c); SPC Sch IIA para 4(3)(c)), which the model already did.
  - Under HB, IS, JSA, ESA and four CTR schemes, the child is not in the household. The CTR schemes are the English default working-age scheme (SI 2012/2886 Sch para 8(2)(b)-(c)), English pensioner (SI 2012/2885 reg 8(2)(b)-(c)), Welsh (WSI 2013/3029 reg 8(2)(b)-(c)) and Scottish pension-age (SSI 2012/319 reg 11(2)(b)-(c)).
  - Scottish working-age CTR from 1 April 2022 (SSI 2021/249 reg 7(2), (8)) takes out only a child placed with a foster carer, so the adopter is responsible for the child. The model's CTR flag reads the Universal Credit flag on that branch, which keeps a child placed for adoption, so the child counts and the adopter can be a lone parent there.
  - `youngest_child_age_for_legacy_benefits`, which drives Income Support lone-parent eligibility, reads the legacy flag and so leaves out a child placed with the family (IS reg 16(4)).
  - CTC excludes the child only while the local authority pays for their keep (reg 3, rule 4 case B). The model can't observe that, so CTC does not change.

New inputs, all default false:
- `is_placed_for_adoption`;
- `adopter_is_foster_parent_or_close_relative`, set on the child: the person with whom the child is placed for adoption is a foster parent or close relative of the child (UC reg 2, reg 89(3)(a)). Only `lha_renter_meets_foster_parent_condition` reads it;
- `is_approved_foster_parent_without_placement`;
- `has_non_resident_overnight_carer`.

A foster child is a household member with the existing `is_looked_after_by_local_authority`, now documented for that use.

New parameters:
- `gov.dwp.LHA.overnight_care_benefits` lists the qualifying benefits: attendance allowance, AFIP, DLA care at the middle or highest rate, and the PIP daily living component. The law also lists the Scottish devolved equivalents (child disability payment, adult disability payment, Scottish adult DLA, pension age disability payment). The model has no variables for those, so they count only where the data records them as the DWP benefits. The same holds for the para 29(5) list, a gap that predates this PR.
- `household.demographic.looked_after_child_age_limit` (18).
- `gov.dwp.LHA.overnight_care_beyond_claimant`: false before 1 April 2017, true from then (SI 2017/213). Before that date only the renter, or the HB claimant and partner, could meet the overnight care condition.

New variables:
- `is_looked_after_child`: `is_looked_after_by_local_authority` and under 18. Only a child, a person under 18, can be looked after (Children Act 1989 ss.22(1) and 105(1)), so the flag has no effect at 18 or over.
  - It replaces the raw flag in the UC, CTC and Pension Credit child tests and in `is_child_or_young_person_placed_with_family`.
  - Without it, a flagged 18- or 19-year-old qualifying young person dropped out of UC while still giving an HB carer room. A single renter under 35 then got the shared rate.
- `is_lha_foster_child`: a looked-after child placed with the renter (see judgment call 5).

Income Support: `income_support_eligible` now includes Sch 1B paras 2 and 2A: "a single claimant or a lone parent with whom a child is placed" by a local authority, or placed for adoption by an adoption agency. Without them, leaving placed children out of the youngest-child test would have taken eligibility from a lone parent whose only child under 5 is a foster or adoptive placement.

`bedrooms_for_children` takes masks for the family's own children and other families' children, and a mask of the families that count the others; #2010's `child_bedrooms` does the arithmetic for both schemes.

### Judgment calls for review

1. **UC adopters get two rooms.**
   - The child counts because reg 4A(1)(c) makes the adopter responsible, and the adopter also gets the para 12(4)(b) room.
   - The current text gives both, and ADM F3133 still lists adopters. No guidance addresses the combination; EM to SI 2024/341 para 7.5 is about the child element.
   - Before 1 April 2024 the position is unclear. EM 2024/341 implies DWP treated these children as looked after. But the old reg 4A(1)(b) already excluded placements with "a person who has parental responsibility", and prospective adopters have parental responsibility (Adoption and Children Act 2002 s.25(3)). The model applies the current rule in every year.
   - Para 12(4)(b) applies only to an "adopter" as reg 89(3)(a) defines it, which leaves out a foster parent or close relative of the child. The model reads that from `adopter_is_foster_parent_or_close_relative` on the child. Such a person still meets the condition as a foster parent of another child or within 12 months of a placement or approval (para 12(4)(a), (5)). Reg 4A(1)(c) speaks of the child being "placed for adoption" and carries no such words, so the child still counts; HB reg 21(3) and HB's qualifying parent or carer carry none either, so HB does not change.
2. **HB: a child placed with someone other than the claimant is an occupier.** This covers a non-dependant's, boarder's or lodger's foster child or adoption placement.
   - Every limb of reg 21(3) names a placement "with the claimant or his partner", and 13D(12) counts everyone else who occupies the dwelling as their home. So such a child takes a room in the host's size criteria, and their overnight care counts for the host under 13D(3A)(a)(iii).
   - The carer's own claim leaves the child out and has the qualifying parent or carer's room. A joint tenant's household stays out of the other tenant's count (13D(12); A21/2013 para 25).
   - LHA Guidance Manual para 2.033 speaks of "the customer's family", and A21/2013 paras 22 to 25 concern joint tenants, so neither reaches this case.
   - Universal Credit does not change: para 9(2)(c) and (g) with reg 4(6)(a) keep out a foster child, and reg 4A(1)(c) keeps in a child placed for adoption.
   - For a renter of 60 with a non-dependant daughter fostering a child of 6, the model gives 3 HB bedrooms and 2 UC bedrooms.
3. **HB reg 21(3)(a) and s.22C(2).**
   - Since SI 2017/901, reg 21(3)(a) refers to a placement "under section 22C(2) of the Children Act 1989". That is placement with a parent; foster placements are s.22C(5)-(6), and the earlier text cited s.23(2)(a).
   - The model treats foster placements as within reg 21(3), as the "qualifying parent or carer" definition presupposes. The English pensioner CTR rule says so expressly ("section 22C", SI 2012/2885 reg 8(2)(a)), as does the Welsh one ("section 22C or 23(2)(a)", WSI 2013/3029 reg 8(2)(a)).
   - On the current text, a looked-after child placed back with a parent is also outside the HB household. The model can't represent that alongside UC's reg 4A(1)(b), which keeps such a child in the household. Listed under known gaps.
4. **Not observed.**
   - HB's qualifying parent or carer, and the HB overnight-care carer, need a spare bedroom in the dwelling (A3/2017 example 10). The model has no count of the dwelling's bedrooms (no formula reads `num_bedrooms`, and the data lacks it), so it assumes there is one.
   - The model also leaves out HB's alternative overnight-care route, where the authority accepts evidence instead of a listed benefit.
5. **UC "child" means under 18 for foster children.**
   - Reg 2 makes a foster parent "a person with whom a child is placed" under the care planning regulations, which place children under 18. Para 9(3) defines a foster child as "a child" in relation to whom the renter is a foster parent, and para 12(A1)(c) refers to "a child".
   - WRA 2012 s.40 defines a child as under 16, unless the contrary intention appears (Interpretation Act 1978 s.11). Reg 91(2)(b)-(d) speaks of foster parents of qualifying young persons.
   - The model reads "child" as under 18 in all three places (`is_lha_foster_child`). A looked-after 16- or 17-year-old placed with the renter is therefore a foster child: they have no room of their own, the renter has the foster room, and their overnight care counts.
   - Reading "child" as under 16 throughout gives the same total for a looked-after 17-year-old not in education (2). It differs for a looked-after qualifying young person (1 instead of 2), which reverses #2010's expected value for that case.
   - No guidance or case law addresses it.
   - The shared `lha_renter_has_non_dependant` still counts a looked-after 17-year-old not in education as a non-dependant. A 16-year-old is caught by its separate age-16 rule. That is right for HB and, on this reading, wrong for UC. PolicyEngine/policyengine-uk#2030 splits that variable into UC and HB versions and excludes `is_lha_foster_child` from the UC one.
6. **HB overnight care for other occupiers.**
   - 13D(3A)(a)(iii) reads "a person ... who occupies the claimant's dwelling as their home", without the defined term "occupiers". On the text, it could reach a joint tenant outside the claimant's household.
   - The model counts the occupiers of the size criteria: for a family liable for the rent, everyone in the families not liable for it, including a child placed with one of them (judgment call 2). It applies 13D(12)'s exclusion of a joint tenant outside the claimant's household and of that tenant's family. In the private sector, joint tenants' size criteria rest on each tenant's own household (A21/2013 para 25). A3/2017 also frames the 2017 extension as a room for carers of a disabled child or non-dependant.
7. **Dates.**
   - The model gates the overnight-care extension at 1 April 2017. The model reads `gov` parameters at 30 April of each year (its fiscal-year convention), so the extension applies from model year 2017, which is 2017-18.
   - UC para 29(9A), the foster parent exception, has been in law since 28 November 2018 (SI 2018/1129). The model applies it in every year, because EM 2018/1129 para 7.12 describes it as DWP's existing policy before then.

## Invariants

The Hypothesis properties are in `test_lha_bedroom_young_people_properties.py`: 7 properties, 25 derandomized examples each, plus explicit examples.
- **Generators.** They make up to 4 households, each with a head family and up to 2 others (sharers, boarders, lodgers, non-dependants). A family has 1-2 adults and up to 4 children; children are own, fostered or placed for adoption. Overnight care and between-placements carers also appear.
- **The added person aged 16 to 19.** The generator favours a person looked after, in education and not on benefits in their own right; it sometimes gives them overnight care, and sometimes makes them the household head.
- **Status comes from inputs.** The tests work out the added person's status from the inputs alone, using their own predicates: UC reg 5 qualifying young person, the Child Benefit qualifying young person for HB reg 19, and looked after under 18 for a foster child. Which claim counts the non-dependants and which families are liable for the rent come from the model, and other tests cover them.

1. **Monotonicity.** Adding a person aged 16 to 19 never lowers any family's UC or HB bedrooms. This holds with the claimant and partner supplied or inferred.
2. **Exact effect of a person aged 16 to 19.** This extends #2010's property:
   - A qualifying young person no one is responsible for, a foster child under 18, or a household head who is not a qualifying young person has no UC room of their own. A young person placed under reg 21(3) has no HB room in the carer's claim.
   - The family they are placed with gains the foster or carer room if it did not have it already.
   - If they join a non-dependant's family, the UC claim counting the household's non-dependants gains a room unless no one is responsible for them. If they join a non-dependant's, boarder's or lodger's family, each family liable for the rent gains an HB room, placed or not.
   - No other family's bedrooms change.
3. **Children.** Adding a child under 16 who is neither fostered nor placed for adoption raises each family's bedrooms by 0 or 1, under each scheme.
4. **Placed children.** Adding a child under 16 placed with a family as a foster child or for adoption gives that family exactly one more bedroom under each scheme if it did not already meet the foster condition, and none otherwise. If that family is a non-dependant's, boarder's or lodger's, each family liable for the rent gains 0 or 1 HB bedrooms. A foster child changes no other family's UC bedrooms; a child placed for adoption adds 0 or 1 to the adopter's family and to the claim counting a non-dependant adopter's household. No joint tenant's bedrooms change.
5. **Reference count.** Each family's bedrooms and additional bedrooms equal a count made by the test.
   - Children's rooms are the fewest rooms holding the pooled children two to a room, found by brute force. This also checks the greedy arithmetic in `child_bedrooms` against the optimum.
   - The count applies the same legal readings as the model, including judgment call 2. It checks that the code implements those readings, not that the readings are right. The YAML cases carry the hand-derived legal expectations.
6. **In-unit non-dependants** (#2010's property). Every benefit-unit member aged 16 or over who is not the claimant or partner, a UC qualifying young person, the household head or the family's foster child has a UC bedroom of their own, and making them qualifying young persons the renter is responsible for leaves every family's UC bedrooms unchanged.

7. **The close-relative input.** Setting `adopter_is_foster_parent_or_close_relative` on every member takes away `lha_renter_meets_foster_parent_condition` exactly where an adoption placement was the family's only route to it, lowers that family's UC bedrooms by one, and leaves UC responsibility, the HB placement test, the qualifying parent or carer and every family's HB bedrooms unchanged.

`test_council_tax_reduction_young_person_properties.py` adds:
8. **Scottish working-age adoption placements.** From 2022-23, placing any member of a Scottish working-age family for adoption leaves the CTR child flag, lone-parent status and the applicable amount unchanged.

**Differential against #2010.** On 300 generated households (604 benefit units) with no placement, overnight-care or between-placements inputs and no children outside the head's family, Maidstone, 2025, `LHA_allowed_bedrooms` and `housing_benefit_LHA_allowed_bedrooms` agree with d8c224979 for every benefit unit. Each household has a head family of 1-2 adults aged 20-85 and up to 4 children aged 0-19 (those aged 16 or over with random education and benefits), and up to 2 adult-only sharer, boarder, lodger or non-dependant families.

**Mutation checks.** Each mutation ran in a scratch copy against the named tests.

At 1f3ce21a0 (the earlier head), each made at least one property fail:
- no pooling of non-dependants' children (UC);
- foster children given their own UC rooms;
- one overnight-care room per person instead of one in total;
- HB counting a joint tenant's children;
- no mixed-sex sharing for children under 10;
- adopters without the UC para 12(4)(b) room.

Earlier rounds also pinned, at 1f3ce21a0: "placed" without the Child Benefit young-person test; a non-dependant's foster child's overnight care counting under UC; reverting (A1)(c) for a looked-after qualifying young person (each fails a YAML case); and a looked-after claimant giving the foster room (a 17-year-old looked-after claimant case pins it; the property generator supplies claimant roles, so the properties cannot reach it).

At this head:

| Mutation | YAML (`LHA_other_families_…`, `LHA_young_person_bedroom`, `council_tax_reduction_young_person`) | Properties | Result |
|---|---|---|---|
| HB `others` drops placed children again | 7 cases fail | 2 of 3 fail (exact effect, placed children, reference) | killed |
| HB `own` keeps placed children | 12 cases fail | 3 of 3 fail | killed |
| `~placed` back in `housing_benefit_LHA_additional_bedrooms` | 1 case fails (the non-dependant's foster child with overnight care) | the reference count's explicit example fails | killed |
| Scotland's working-age branch reads the legacy flag | 3 cases fail, including Case 12 | the adoption property fails | killed |
| `adopter_is_foster_parent_or_close_relative` dropped | 2 cases fail | the close-relative property fails | killed |
| The input applied to HB's qualifying parent or carer | 2 cases fail | the close-relative property fails | killed |
| The input applied to `is_child_or_qualifying_young_person_for_universal_credit` | 3 cases fail | the close-relative property fails | killed |
| `housing_benefit_has_non_dependant` without the placed test | 1 case fails ("A child placed with the claimant is not a Housing Benefit non-dependant") | not run | killed |

## Tests

At 983488065 (this head):
- **YAML**, `policyengine-core test … -c policyengine_uk`: 97 passed.
  - `LHA_other_families_children_and_additional_bedrooms.yaml`: 44 cases, including the review's family as a foster placement and as an adoption placement (HB `[3, 2]`; UC `[2, 2]` and `[3, 3]`), both through final Housing Benefit, a looked-after young person of 17 placed with a non-dependant, a child placed with a lodger, a child placed with a joint tenant, a non-dependant's placed child who needs overnight care (HB `[4, 3]`), three close-relative adopter cases, and a placed child who is not an HB non-dependant.
  - `LHA_young_person_bedroom.yaml`: 11. The case of a looked-after qualifying young person in a non-dependant's family now expects the carer's foster room: `[2, 2]`, categories `[C, C]`.
  - `LHA_claimant_composition.yaml`: 17. `income_support.yaml`: 7. `tax_free_childcare_qualifying_child.yaml`: 5.
  - `council_tax_reduction_young_person.yaml`: 13, including Cases 11-13: the review's Scottish family with and without the adoption placement gives the same lone-parent status, applicable amount (£4,786.60) and final CTR (£286.40), and Scotland's pension-age scheme leaves the child out.
- **Python**, `pytest … -n 4`:
  - `test_lha_bedroom_young_people_properties.py`: 7 passed.
  - `test_child_and_adult_definitions_properties.py`: 18 passed.
  - `test_means_test_income_properties.py`: 2 passed.
  - `test_rent_of_sharers_boarders_and_lodgers_properties.py`: 6 passed. Its no-op bedroom check now covers households with no child outside the head's family.
  - `test_council_tax_reduction_young_person_properties.py`: 7 passed. Its scheme-selection reference now stops looked-after status at 18.
  - `test_household_head_agreement_properties.py`: 3 passed, with the two additional-bedroom variables added to its outputs.
  - `policyengine_uk/tests/code_health`: 3,102 passed.
- `ruff format --check`, `ruff check` and `ruff check --select F811,F821 policyengine_uk` (0.17.2): clean.
- CI runs the full suite.

The review's figures (£11,892.40 and £14,200.68 a year, £228.70 and £273.09 a week) match no BRMA in the model's LHA tables for 2024 to 2028. The final-HB cases use Maidstone in 2026 instead, where the rent of £300 a week exceeds the D rate: the renter's HB comes to £8,889.92 at three bedrooms against £5,359.64 at two, £3,530.28 more. The Scottish CTR figure comes to £286.40 against the review's £286.30 on the old stack.

## Impact (real microsimulation)

These runs used #2010's earlier head and this PR's earlier head: base 49866c284, branch 500424e0e (084664c5c and 9311e4e99 give identical aggregates). They have not been rerun at this head, which needs the dataset. Data: the enhanced FRS 2024-25 as released (policyengine-uk-data 1.57.4, `enhanced_frs_2024_25.h5`, sha256 `03fe15e4…`), year 2026.

The runs identify a survey household by its rent and its members' ages, which every enhanced-FRS record shares with its FRS 2024-25 source household. They suppress cells built from fewer than 10 survey households, and suppress sub-cells together when any one of them falls short, so no one can recover a hidden cell by subtraction.

At 500424e0e against 49866c284:
- **Children under 16 in a non-dependant's family:** 135k (64 survey households).
- **Boarder or lodger families, or sharers' families, with children:** 0. The released data has no boarder or lodger rent yet (policyengine-uk-data#506 and #512 are drafts).
- **UC bedroom counts:** rise for 109k benefit units (62 survey households). None falls.
- **HB bedroom counts:**
  - fall for 430k benefit units (66 survey households), because an occupier couple now counts once;
  - rise for 66k (47 survey households), because of non-dependants' children.
- **Private renters**, the only group whose LHA depends on the bedroom count:
  - UC changes affect fewer than 10 survey households, so the runs suppress UC categories, the housing costs element and UC paid.
  - HB categories change for 22k benefit units (12 survey households); the runs suppress each transition.
  - The HB eligible rent under the LHA (`LHA_cap`, computed for every private renter whether or not they claim) rises by £14.7m net.
  - HB paid does not change: the change reaches no private-renting HB recipient.
- **Poverty (BHC and AHC):** no change.
- **Foster, adoption and overnight-care inputs:** default false and not in the data, so those changes have no microsimulation effect.
- **AFIP:** the data has no recipients.
- **Shared accommodation:** UC specified-renter and HB young-individual flags do not change.

Figures this head can move, pending a rerun:
- Everything #2010 changed since 49866c284, which this head merges (d8c224979): the household head and non-dependant counting (`uc_non_dependants_counted`, `is_resolved_household_head`), HB occupiers for sharers' claims, and the merged `main`.
- UC non-dependants' children and additional bedrooms now follow `uc_non_dependants_counted` rather than the household head's family, so a household whose head does not claim UC can give them to a sharer's claim.
- HB couples now merge into one bedroom only where the family is a couple (`is_couple`) as well as having two claimants or partners.
- The placement, close-relative and overnight-care changes read inputs that default to false and are not in the data, so they move no survey figure.

## Known gaps (not changed here)

- **Disabled child and disabled couple rooms** (UC para 12(1)(c)-(d), (6), (6A), (8); HB 13D(3)(za), (ba)): the model leaves them out. Branch `lha-disabled-cannot-share-rooms` adds them.
- **Temporary absence** (UC para 11; HB reg 7) and the armed forces rule: the model leaves them out.
- **Shared non-dependants for joint tenants.** HB counts a non-dependant shared by joint tenants in each joint tenant's size criteria (LHA Guidance Manual para 2.110). The model gives the household's non-dependants to the families liable for the rent under HB and to one claim under UC; branch `hb-joint-tenant-shared-non-dependant` (#2029) addresses apportionment.
- **Head family.** With no head input, the eldest member becomes the household head (`is_resolved_household_head`), even if a lodger.
- **Joint tenant in the claimant's household.** The model treats a joint tenant who is a member of the claimant's household as a separate sharer (LHA Guidance Manual para 2.100, the Lee example).
- **HB evidence route for overnight care, and the spare-bedroom conditions** (judgment call 4).
- **A looked-after child placed back with a parent** is outside the HB household on the current text of reg 21(3)(a). The model keeps them in, as UC does.
- **A lodger's child is a non-dependant.** HB reg 3(1) makes a non-dependant anyone who normally resides with the claimant, so on its text a lodger's or boarder's child is one; the model counts only non-dependants' families. #2002 addresses this.
- **Scottish working-age CTR before 1 April 2022.** The model applies the Child Benefit test, which leaves out a child placed for adoption, to Scotland's working-age scheme for those years. SSI 2012/303's text was not read for this change.
- **Scottish working-age CTR earnings disregard.** The model's working-age CTR applicable income counts earnings with no earnings disregard on Scotland's route; the scheme's own disregards were not read for this change.
- **HB "eligible children".** HB reg 19(2)(c) excludes from "young person" anyone covered by Children (Leaving Care) Act 2000 s.6. That covers an eligible child: a looked-after 16- or 17-year-old who has been looked after for 13 weeks since age 14. Such a person is an occupier with a room, and gives no carer room. The model has no input for it and treats every looked-after qualifying young person as placed. Totals usually match, because an occupier room replaces the carer room.
- **Scottish devolved disability benefits**: the model has no separate variables for them (see New parameters; PolicyEngine/policyengine-uk#2041).

## Documentation

The variables' `documentation` fields describe the rules. No docs notebook covers the size criteria.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_406_EXTENSION.md

## Extension: a child placed with someone other than the claimant (PE parity: PolicyEngine/policyengine-uk#2011, PR PolicyEngine/policyengine-uk#2016)

This corrects one row of the addendum above and adds 13D(3A)(a)(iii) for a child placed with another family. The other rows, and the UC para 9 reading, stand.

PolicyEngine-UK now counts a child or young person placed with a non-dependant, boarder or lodger as an occupier of the claimant's dwelling under HB reg 13D. The carer's own claim still leaves the child out and has the qualifying parent or carer's room. A joint tenant's household stays out of the other tenant's count. Universal Credit does not change.

### The law (verbatim, legislation.gov.uk, fetched 2026-11-02)

**HB Regs 2006 (SI 2006/213) reg 21(3)**; HB (SPC) Regs 2006 (SI 2006/214) reg 21(3) is the same:

> (3) A child or young person shall not be treated as a member of the claimant's household, nor as occupying the claimant's dwelling, where he is— (a) placed with the claimant or his partner by a local authority under section 22C(2) of the Children Act 1989 or section 81(2) of the Social Services and Well-being (Wales) Act 2014 or by a voluntary organisation under section 59(1)(a) of that Act, or in Scotland boarded out or placed with the claimant or his partner under a relevant enactment; or (b) placed, or in Scotland boarded out, with the claimant or his partner prior to adoption; or (c) placed for adoption with the claimant or his partner in accordance with the Adoption and Children Act 2002 or the Adoption Agencies (Scotland) Regulations 2009.

**Reg 13D(12), "occupiers"**:

> "occupiers" means— (a) 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(3A)(a)**:

> (3A) The claimant is entitled to one additional bedroom in any case where— (a) one or more of the following persons is a person who requires overnight care— (i) the claimant; (ii) the claimant's partner; (iii) a person (other than the claimant or the claimant's partner) who occupies the claimant's dwelling as their home; (iv) a child or young person in respect of whom the claimant or the claimant's partner is a qualifying parent or carer; ...

**Reg 2(1), "qualifying parent or carer"**:

> "qualifying parent or carer" means a person who has a bedroom in the dwelling they occupy as their home additional to those used by the persons who occupy the dwelling as their home and who— (a) has a child or qualifying young person placed with them as mentioned in regulation 21(3) who by virtue of that provision is not treated as occupying their dwelling; ...

**Guidance.**
- LHA Guidance Manual (April 2014) para 2.033: "Foster children cannot be a member of the customer's family and therefore do not occupy the dwelling for the purposes per HB and HB (SPC) Reg 21(3)." It speaks of the customer's family, so it does not reach a child placed with a non-dependant, boarder or lodger.
- Circular A21/2013 paras 22 to 25 concern joint tenants. Para 25: "the calculation is based on each tenant's individual household size". 13D(12)(a) also leaves out a joint tenant outside the claimant's household.

### What the judgment must do

Every limb of reg 21(3) names a placement "with the claimant or his partner". A child placed with anyone else in the dwelling is one of "the persons whom the relevant authority is satisfied occupy as their home the dwelling" (13D(12)(a)), unless they belong to a joint tenant's household outside the claimant's. So:
- in the claimant's size criteria, a child placed with a non-dependant, boarder or lodger falls in the first 13D(3) category that applies, like any other occupier;
- such a child who requires overnight care is "a person ... who occupies the claimant's dwelling as their home" (13D(3A)(a)(iii));
- in the carer's own claim, reg 21(3) applies: the child does not occupy the carer's dwelling, the carer is a qualifying parent or carer (reg 2(1)(a)) with the 13D(3A)(b) bedroom, and the child's overnight care counts under (3A)(a)(iv).

`review_finding` (paste as-is; it replaces the sentence of the step 2 addendum that begins "DWP treats any foster child as not occupying"):

> Reg 21(3) takes out of the claimant's household and dwelling only a child or young person placed with the claimant or the claimant's partner. A child or young person placed with a non-dependant, boarder or lodger occupies the claimant's dwelling as their home and is an occupier under 13D(12)(a): count them in the claimant's 13D(3) categories, and under 13D(3A)(a)(iii) if they require overnight care. In the carer's own claim the child is not an occupier, and the carer is a qualifying parent or carer (reg 2(1)(a)) with one additional bedroom (13D(3A)(b)) and, if the child requires overnight care, another (13D(3A)(a)(iv), (3B)). A joint tenant who is not a member of the claimant's household, and that tenant's household, are not occupiers, whether or not a child is placed with them. The LHA Guidance Manual's para 2.033 concerns the customer's own family and does not decide this case.

### Companion tests

Period 2026, Maidstone. The row this corrects:

| Case | UC (para 10 + 12) | HB (13D) |
|---|---|---|
| Renter 60; non-dependant daughter 32 with a foster child 6 placed with her | 2 | **3** (reg 21(3) names only a placement with the claimant or partner, so the child occupies the renter's dwelling, 13D(12)) |

Further cases. Each figure is worked from the provisions above.

| Case | Renter's UC | Renter's HB | Carer's own UC | Carer's own HB |
|---|---|---|---|---|
| Renter 60; non-dependant daughter 32 with a child 6 placed for adoption with her | 3: renter, daughter, child (reg 4A(1)(c), para 9(1)(c), 10(1)(f)) | 3: renter, daughter, child (13D(3)(b), (b), (e)) | 3: daughter, child, adopter's room (para 12(4)(b)) | 2: daughter and the (3A)(b) room |
| Renter 50; non-dependant daughter 35 with a looked-after young person 17 in full-time non-advanced education placed with her | 2: the young person is no one's responsibility (reg 4(6)(a)), so not a non-dependant (para 9(2)(g)) | 3: renter, daughter, young person (13D(3)(b)) | 2: daughter and the foster room (para 12(4)(a)) | 2: daughter and the (3A)(b) room |
| Householder 60; lodger 30 with a foster child 5 placed with the lodger | 1: lodger excluded (9(2)(d)), child excluded (9(2)(g)) | 3: householder, lodger, child | 2: lodger and the foster room | 2: lodger and the (3A)(b) room |
| Joint tenants 40 and 38; a foster child 7 placed with the second | 1 for the first tenant (9(2)(d)) | 1 for the first tenant (13D(12)(a); A21/2013 para 25) | 2 | 2 |
| Renter 60; non-dependant daughter 32 with a foster child 6 placed with her who requires overnight care (DLA care at the middle rate and non-resident overnight carers) | 2: no overnight room, since the child is outside the renter's extended benefit unit | 4: renter, daughter, child, and the (3A)(a)(iii) room | 3: daughter, foster room, overnight room (12(A1)(c), (9)) | 3: daughter, (3A)(b) and (3A)(a)(iv) rooms (3B) |
| Single 45 with foster children 12 and 11 placed with them (no other occupiers) | 2: foster room only | 2: (3A)(b) room only | — | — |

Final Housing Benefit for the corrected row. Renter 60 with no income; daughter 32 working 35 hours on £20,000 a year; rent £300 a week; Maidstone rates for 2026-27 (the VOA April 2024 rates, frozen): C £208.27, D £276.16.
- Eligible rent at three bedrooms: £276.16 a week, below the rent.
- Non-dependant deduction (reg 74(1)(a), in remunerative work): £20,000 / 52 = £384.62 a week, in the £365 to £485 band, £105.20 a week.
- The renter's income of nil falls below the applicable amount, so no taper.
- HB: (276.16 − 105.20) × 52 = £8,889.92 a year. At two bedrooms it would be (208.27 − 105.20) × 52 = £5,359.64. The placed child adds £67.89 a week, £3,530.28 a year.
- The same figures hold where the child is placed for adoption with the daughter (reg 21(3)(c)).

No separately approved billed signed-encoder run exists for this work.


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_411_EXTENSION.md

## Extension: who is an "adopter" for the foster parent condition (PE parity: PolicyEngine/policyengine-uk#2011, PR PolicyEngine/policyengine-uk#2016)

This adds to steps 1 and 2 above. Para 12(4)(b) uses "adopter", which reg 2 defines by reference to reg 89(3)(a), and that definition leaves out a foster parent or close relative of the child. Para 29(9A) takes the foster parent condition from para 12(4), so it follows. PolicyEngine-UK now reads a child-level input, `adopter_is_foster_parent_or_close_relative`, in the foster parent condition only.

### The law (verbatim, legislation.gov.uk, fetched 2026-11-02)

**UC Regs 2013 (SI 2013/376) reg 2**:

> "adopter" has the meaning in regulation 89(3)(a);

> "close relative", in relation to a person, means— (a) a parent, parent-in-law, son, son-in-law, daughter, daughter-in-law, step-parent, step-son, step-daughter, brother or sister; and (b) if any of the above is a member of a couple, the other member of the couple;

> "foster parent" means— (a) in relation to England, a person with whom a child is placed under the Care Planning, Placement and Case Review (England) Regulations 2010; (b) in relation to Wales, a person with whom a child is placed under the Care Planning, Placement and Case Review (Wales) Regulations 2015; (c) in relation to Scotland, a foster carer or kinship carer with whom a child is placed under the Looked After Children (Scotland) Regulations 2009;

**Reg 89(3)(a)**:

> (3) In paragraph (1)(d)— (a) "adopter" means a person who has been matched with a child for adoption and who is, or is intended to be, the responsible carer for the child, but excluding a person who is a foster parent or close relative of the child; and

**Sch 4 para 12(4) and (5)**:

> (4) A renter satisfies the foster parent condition if the renter is— (a) a foster parent; or (b) an adopter with whom a child has been placed for adoption.
>
> (5) For the purposes of sub-paragraph (4) "foster parent" includes a person who would be a foster parent, but for the fact that they do not currently have any child placed with them, provided that any period since the date when their last placement ended (or, if they have not yet had a child placed with them, since the date when they were approved to be a foster parent) does not exceed 12 months.

**Sch 4 para 29(9A)**:

> (9A) E is under 35 years old and satisfies the foster parent condition (within the meaning of paragraph 12(4)).

**Reg 4A(1)(c)**:

> (c) any period during which the child or qualifying young person is placed for adoption under the Adoption and Children Act 2002 or the Adoption and Children (Scotland) Act 2007.

### What the judgment must do

- An "adopter" (reg 2, reg 89(3)(a)) with whom a child has been placed for adoption meets para 12(4)(b). A person with whom a child is placed for adoption, but who is a foster parent or close relative of that child, is not an "adopter" and does not meet (4)(b) through that placement.
- Such a person still meets para 12(4)(a) if they are a foster parent (reg 2) of another child placed with them, or (5) if they are within 12 months of a placement ending or of approval.
- Para 29(9A) follows para 12(4): it does not except a close-relative adopter under 35 who is not a foster parent.
- Responsibility does not change. Reg 4A(1)(c) speaks of the child being "placed for adoption", without the defined term, so the child placed with a close relative is still the renter's responsibility, in the extended benefit unit (para 9(1)(b)) and counted under para 10(1)(d)-(f).
- The HB size criteria do not change. HB reg 21(3)(b)-(c) and the reg 2(1) "qualifying parent or carer" speak of a child "placed ... prior to adoption" or "placed for adoption", with no definition of adopter.

`review_finding` (paste as-is; it adds to step 1's and step 2's):

> Para 12(4)(b) "adopter" takes reg 2's meaning, which is reg 89(3)(a): a person matched with a child for adoption who is, or is intended to be, the responsible carer, excluding a foster parent or close relative (reg 2) of the child. Take whether the person with whom the child is placed is a foster parent or close relative of that child as an input. Such a person does not satisfy the foster parent condition through that placement; they still satisfy it under (4)(a) or (5) if they are a foster parent of another child or within 12 months of a placement ending or of approval. Para 29(9A) reads para 12(4), so the same person under 35 is excepted only through (4)(a) or (5). The exclusion does not reach reg 4A(1)(c): the child remains the renter's responsibility and is counted under para 10(1)(d)-(f).

### Companion tests

Period 2026. Each is a single renter whose child of 4 is placed for adoption with them, with no other members unless stated. Each figure is worked from the provisions above.

| Case | Foster parent condition | Para 12 count | Para 10 total | Excepted person (29(9A)) |
|---|---|---|---|---|
| Adopter 40, not a foster parent or close relative of the child | met (12(4)(b)) | 1 | 1 + 1 (child) + 1 = 3 | — |
| Adopter 40 who is the child's sister (a close relative, reg 2(a)) | not met: not an "adopter" (reg 89(3)(a)) | 0 | 1 + 1 (child, reg 4A(1)(c)) = 2 | — |
| Adopter 30 who is a close relative of the child | not met | 0 | 2 | not excepted under (9A) |
| Adopter 30 who is a close relative of the child and an approved foster parent whose last placement ended within 12 months | met (12(4)(a) with (5)) | 1 | 1 + 1 + 1 = 3 | excepted (9A) |

The HB size criteria are the same in all four cases: the child does not occupy the claimant's dwelling (HB reg 21(3)(c)), and the claimant is a qualifying parent or carer (reg 2(1)(a)) with one additional bedroom (13D(3A)(b)): 1 + 1 = 2.

Invariant to pin: setting the close-relative input changes only the foster parent condition and what follows from it (para 12(9)(b) and para 29(9A)). It lowers the para 12 count by at most one and leaves responsibility (reg 4A(1)(c)) and the HB size criteria unchanged.

No separately approved billed signed-encoder run exists for this work.


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Ready for hub review

Head: 983488065231c5eaa10850196c9df25cfb17d2e2 on branch claude/lha-placement-adopter-findings-v9sk0t (the session pins pushes to this name). Built from 1f3ce21a0. No PR is open on it, and I pushed to neither lha-nondep-children-foster-rooms nor lha-bedroom-young-people.

Commits:

  • 65cddf8c merges Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's d8c224979 as its own commit. Parents are 1f3ce21a0 and d8c224979.
  • 5445e798 keeps placed children out of the HB non-dependant readers.
  • c7f9dfa0 C2: Scottish CTR cases, docstring and property.
  • 02125f5d C1 and C3, plus the changelog.
  • 9931ec1f formatting.
  • a04bc25e updates two older properties that the merge broke.
  • 983488065 adds an explicit Hypothesis example.

Merge (12 conflicts)

Resolved as the brief says. LHA_allowed_bedrooms.py now keeps #2010's child_bedrooms as the arithmetic, and rooms_for_children is gone. bedrooms_for_children(benunit, period, own_child, other_child, counts_other_children) takes the own and other masks; other_child counts only where uc_non_dependants_counted holds. The formula keeps no_one_responsible (children and QYPs), the is_lha_foster_child exclusion, is_resolved_household_head and LHA_additional_bedrooms. LHA_additional_bedrooms's others now follow uc_non_dependants_counted.

HB is rebuilt on occupiers_total and max_(adult_units, 1), plus housing_benefit_LHA_additional_bedrooms. Both additional-bedroom variables no longer read is_household_head; I added them to OUTPUTS in test_household_head_agreement_properties.py.

Judgment call in the merge: #2010's HB couple test counted two claimant-or-partners as a couple. #2016's YAML case "An explicit single relationship stops the Housing Benefit couple rule" (review round 2) needs is_couple as well. So adult_units now halves only where sum(cp) == 2 & is_couple (housing_benefit_LHA_allowed_bedrooms.py:71-77).

Other readers the merge broke:

  • housing_benefit_has_non_dependant.py:30-38 and housing_benefit_severe_disability_premium_applies.py:46-51 now apply the placed test (HB reg 3(2)(c)). The new YAML case "A child placed with the claimant is not a Housing Benefit non-dependant" covers the first.
  • LHA_young_person_bedroom.yaml: the case of a looked-after QYP in a non-dependant's family now gives the carer the foster room, [2, 1] → [2, 2], categories [C, C].
  • The CTR scheme-selection property's reference now stops looked-after status at 18.
  • The sharers no-op property's bedroom check now covers only households with no child outside the head's family.
  • income_support.yaml had a trailing blank line, which I removed.

I read the other legacy-flag readers: housing_benefit_maintenance_disregard, meets_housing_benefit_additional_earnings_disregard_conditions, is_housing_benefit_benefit_cap_exempt_specified_benefit, housing_benefit_child_disability_premiums, housing_benefit_family_premium, num_relevant_children_for_housing_benefit_childcare and is_responsible_for_child_or_young_person_for_legacy_benefits. Each tests membership of the claimant's family or household. On reg 21(3) none should keep a placed child, so I changed none. I have not read their own provisions (Sch 5 para 47, Sch 4 para 17, reg 75F, Sch 3, reg 28), which the law file doesn't quote, so that conclusion is pending a reading of those texts.

C1

  • housing_benefit_LHA_allowed_bedrooms.py:51-64: in occupiers_total, own leaves out is_child_or_young_person_placed_with_family and others keeps it.
  • housing_benefit_LHA_additional_bedrooms.py: ~placed is dropped from other, which now reads ~liable_family and counts only on an is_liable_for_household_rent claim.
  • Comments are rewritten in both variables, the property docstring and the YAML header and cases.
  • The case at old line 262 is now [3, 2]. The adoption version is [3, 2]. The overnight-care version is HB [4, 3] with additional [1, 2].

New cases, each worked by hand in its comment:

  • The review's family through final HB, as a foster placement and as an adoption placement.
  • A looked-after young person of 17 in education placed with a non-dependant: HB [3, 2], UC [2, 2].
  • A child placed with a lodger: HB [3, 2], UC [1, 2].
  • A child placed with a joint tenant: HB [1, 2].
  • The host's own foster child stays the existing case "Foster children have no bedrooms of their own…" (2 rooms, carer room).

UC for the review's family: foster [2, 2], adoption [3, 3].

Figures differ from the review. No BRMA in the model's tables for 2024-2028 has £228.70 or £273.09 as an HB C or D rate (I searched every BRMA). I used Maidstone 2026 with rent £300 a week and a working daughter (£20,000, 35 hours), so the non-dependant deduction is £105.20 a week. HB is £8,889.92 at 3 rooms against £5,359.64 at 2, £3,530.28 more. The review had £2,308.28.

C2

No code change was needed: the merge closes it. is_child_or_young_person_for_council_tax_reduction reads the UC flag on Scotland's working-age branch.

New cases in council_tax_reduction_young_person.yaml:

  • Cases 11-12 (2025, Edinburgh): toggling is_placed_for_adoption leaves lone-parent status, the applicable amount (£4,786.60) and CTR (£286.40) unchanged. The review had £286.30 on the old stack. Case 12 also shows the legacy, HB and IS flags still leave the child out.
  • Case 13: the pension-age scheme leaves the child out.

The new property is invariant 7 in the CTR properties file.

I read council_tax_reduction_applicable_amount, is_council_tax_reduction_lone_parent, is_responsible_for_child_or_young_person_for_council_tax_reduction, council_tax_reduction_premiums (working_age_benefits_premiums: disability, enhanced, severe and carer premiums read is_single/is_couple, not children), council_tax_reduction_applicable_income (maintenance reads the CTR responsibility flag) and council_tax_reduction_pensioner_earnings_disregard (it reads is_lone_parent, but only on the pension-age route). None needed a fix.

I updated the docstring of is_child_or_young_person_for_council_tax_reduction, and removed the gap from is_placed_for_adoption and the body. Two known gaps remain: pre-2022 Scotland (SSI 2012/303 not read), and the model applies no working-age earnings disregard on Scotland's CTR route (the scheme text was not read).

C3

  • New household/demographic/adopter_is_foster_parent_or_close_relative.py (child-level, default false, reg 2 close-relative list).
  • lha_renter_meets_foster_parent_condition.py reads it only as placed_for_adoption & ~adopter_is_foster_parent_or_close_relative.
  • Para 29(9A) follows through is_lha_shared_accommodation_rate_specified_renter's excepted_foster_parent, which reads that variable. I confirmed this by reading the code. The YAML can't isolate it, because a responsible renter isn't a specified renter anyway, so the case asserts the condition.

Three YAML cases:

  • Close-relative adopter 40: UC 2 (one fewer), the child counted, HB 2.
  • Close-relative adopter 30: condition false, HB 2.
  • Close-relative adopter between placements: condition true, UC 3, HB 2.

The property is invariant 7 in the LHA properties file. I updated is_placed_for_adoption's documentation and judgment call 1.

Tests (at 9834880, or a04bc25 for the unchanged files)

  • YAML: 97 passed. By file: LHA_other_families 44, LHA_young_person_bedroom 11, LHA_claimant_composition 17, income_support 7, tax_free_childcare_qualifying_child 5, council_tax_reduction_young_person 13.
  • test_lha_bedroom_young_people_properties.py 7 passed, and the reference test passes again with the new example.
  • test_child_and_adult_definitions_properties.py 18 passed.
  • test_means_test_income_properties.py 2 passed.
  • test_rent_of_sharers_boarders_and_lodgers_properties.py 6 passed (1 failed before the fix in a04bc25e).
  • test_council_tax_reduction_young_person_properties.py 7 passed (1 failed before the fix).
  • test_household_head_agreement_properties.py 3 passed.
  • code_health 3,102 passed.
  • check_fix_pr.py on the final title and body against d8c224979..HEAD: PASS, 10 changed executable tests.
  • ruff format --check, check, and F811/F821: clean.
  • git diff --check 1f3ce21a0..HEAD flags only files the merge brought in from Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010 and main: lha_published_rates_sources.csv (CRLF), couple_carer_award.yaml, housing_benefit_family_premium.yaml, severe_disability_premium_joint_occupiers.yaml and care_to_learn_history.yaml. git diff --check d8c224979..HEAD is clean.

Differential

I generated 300 households (604 benefit units), Maidstone, 2025, with no placement, overnight-care or between-placements inputs and no children outside the head's family. Each household has a head family of 1-2 adults and up to 4 children aged 0-19, plus up to 2 adult-only sharer, boarder, lodger or non-dependant families. Both schemes' rooms match d8c224979 for every benefit unit: 0 differences.

Mutations (scratch worktree at the head)

All 8 were killed:

  • others drops placed: 7 YAML cases fail, 2 of 3 properties fail.
  • own keeps placed: 12 YAML cases fail, 3 of 3 properties fail.
  • ~placed back in the additional bedrooms: 1 YAML case fails. The properties survived at first (3 passed), so 983488065 adds an explicit example to the reference count. That example fails on the mutant and passes on the head.
  • Scotland's branch reads the legacy flag: 3 YAML cases fail, and the property fails.
  • New input dropped: 2 YAML cases fail, and the property fails.
  • Input applied to the HB carer: 2 YAML cases fail, and the property fails.
  • Input applied to UC responsibility: 3 YAML cases fail, and the property fails.
  • housing_benefit_has_non_dependant without the placed test: 1 YAML case fails.

Skipped

  • I did not rerun the Impact microsimulation (no dataset access). The body labels the old figures by commit and names which figures this head can move.
  • No full suite run: CI covers it.
  • I did not edit .github/test_outcome_allowlist.toml or shard_durations.toml. No test was renamed or removed.

Judgment calls

Hub documents are posted above: PR_TITLE.txt, PR_BODY.md, AXIOM_406_EXTENSION.md and AXIOM_411_EXTENSION.md. The body keeps <406 extension URL> and <411 extension URL> for you to fill in.


Generated by Claude Code

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed exact head 983488065231c5eaa10850196c9df25cfb17d2e2. C1, C2, C3 and A1 are resolved: the host's HB placement count, Scottish CTR responsibility and statutory UC adopter qualifier now have source-backed final-result checks, and the description correction has landed.

The actual description now reflects the adopted fixes and child-bound adopter input. The supplied extensions on rulespec-uk #406 and #411 were checked against the previously verified primary rules.

Review PARTIAL: 101 selected tests passed before the bounded runner timed out; 15 selected checks remain unfinished, and there are no hosted checks at this head. The close-relative control also passed through final UC and household net income.

This head still contains the older #2010 parent rather than its latest 2d362d2 fix. Approval remains withheld pending parent integration and required checks on the resulting head. The prior findings are closed; this does not approve a future integration tree.

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.

3 participants