Skip to content

Model rent from boarders, lodgers and sub-tenants for the householder - #2002

Open
MaxGhenis wants to merge 16 commits into
mainfrom
boarder-lodger-rent
Open

MaxGhenis wants to merge 16 commits into
mainfrom
boarder-lodger-rent

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

This PR builds on #1995, which stops counting income from capital in the legacy means tests and adds legacy_benefits_home_letting_income for rent from letting part of the home. #1995 landed in main at 7ba0ea7af.

Stack and readiness. This PR targets main, and this head merges main at 5c7744144.

This PR models the rent a householder receives from boarders and lodgers who live in the household. The Family Resources Survey records that rent only on the payer, as CVPAY (PolicyEngine/policyengine-uk-data#506 adds it as rent_paid_as_boarder and rent_paid_as_lodger). This PR also routes sublet_income (rent from a sub-tenant outside the household) through income tax.

What changes

  • Who receives it. rent_from_boarders_and_lodgers gives the household head (is_resolved_household_head) the rent that household members outside the head's benefit unit pay.

  • Income tax: rent-a-room relief. PolicyEngine charges no income tax on receipts up to £7,500 a year. Above that, it charges the excess as property income, assuming the s. 800 election. The limit halves where someone else in the household also receives rent from the home. The receipts get no £1,000 property allowance.

  • Legacy means tests. Income Support, Housing Benefit, Pension Credit and council tax reduction count the rent less these statutory disregards:

    • boarders: £20 a week plus half the excess, for each boarder;
    • lodgers: £20 a week, per person at pension age and per lodger family at working age (£4 before April 2008).

    They deduct the tax on counted letting income like the tax on other counted income: legacy_means_test_income_tax puts the rent-a-room share of property income tax on the counted side. Treat income derived from capital as capital in the legacy means tests #1995's home_letting_income now holds both the sub-tenant rule and this PR's boarder and lodger rules, and each reader passes the people whose receipts count: legacy_benefits_home_letting_income the benefit unit's claimant and partner, under the State Pension age test; council_tax_reduction_home_letting_income (Treat income derived from capital as capital in the legacy means tests #1995) the council tax reduction applicant and partner, under council_tax_reduction_pensioner. So councils count the rent boarders and lodgers pay a household head who applies alone, though the legacy measure of the head's benefit unit counts none of it.

  • Where a programme doesn't count the rent. Universal Credit doesn't count it, and deducts only the tax on earnings (uc_income_tax_on_earnings, which takes earnings as the lowest slice). The rent changes that deduction only through the cap on property finance-cost relief. Council tax reduction leaves the rent out on the Universal Credit route (Treat income derived from capital as capital in the legacy means tests #1995's universal_credit_route) and in the Scottish working-age scheme. There PolicyEngine treats the rent as uncounted income, as Treat income derived from capital as capital in the legacy means tests #1995 treats income from capital. It leaves out of the deducted tax the tax the rent would bear without earnings (rent_a_room_income_tax_without_earnings), and keeps the extra tax that earnings cause on it. The formula subtracts that tax from the counted members' deducted income tax and then applies Treat income derived from capital as capital in the legacy means tests #1995's floor at nil, so the deduction never adds tax to income.

  • Tax credits count the taxable rent-a-room income (tax_credits_current_year_income).

  • Non-dependants. A boarder or lodger pays the householder on a commercial basis, so PolicyEngine leaves them out of the householder's non-dependants for UC, HB and CTR (every local CTR scheme in the model reads this flag). PolicyEngine decides that liability person by person. The payer and the payer's partner leave the non-dependant count, and anyone else in their benefit unit who pays nothing, such as an adult son, stays in it (pays_rent_to_householder, benunit_is_liable_for_household_rent).

  • Universal Credit's extended benefit unit. For Universal Credit, PolicyEngine also leaves out of the householder's non-dependants a boarder's or lodger's child or qualifying young person, for whom nobody in the householder's extended benefit unit has responsibility (UC Sch 4 para 9(2)(g); is_uc_non_dependant_of_household_head). Such a child supplies no bedroom (LHA_allowed_bedrooms), no housing cost contribution (uc_non_dep_deductions), and doesn't take a householder under 35 off the shared accommodation rate (lha_renter_has_non_dependant). A child whose parent pays nothing stays a non-dependant. lha_renter_has_non_dependant now counts every Universal Credit non-dependant of another family, not only its claimants and partners, so a lodger's non-paying adult son takes a single householder under 35 off the UC shared accommodation rate, as he already did for Housing Benefit. The Housing Benefit and CTR formulas keep is_non_dependant_of_household_head.

  • Household income. Household market and net income leave out rent that members of a household pay each other. Market income, household market income and HBAI net income now count sublet_income, which comes from outside the household, alongside property_income_after_finance_costs.

The law

We read these provisions in their revised text on legislation.gov.uk on 1 October 2026, the non-dependant provisions on 2 November 2026, and UC Sch 4 paras 8 to 10 and SSI 2012/319 reg 3 (as in force from 1 April 2026) on 3 November 2026.

Regime Rule Provisions
Income tax Rent-a-room receipts are "in respect of the use of furnished accommodation in a residence ... or in respect of goods or services supplied in connection with that use", in the individual's only or main residence. Not charged up to the limit. Above it, on an election, income tax charges the receipts less the limit, with no expenses deducted. Limit: £3,250 from 1992-93, £4,250 from 1997-98, £7,500 from 2016-17; halved where the exclusive receipts condition fails. They don't count as relievable receipts for the property allowance. ITTOIA 2005 ss. 784-802, 783BB(2); SI 2015/1539 arts. 1(2), 2; SI 1996/2953 art. 2; F(No. 2)A 1992 Sch. 10
Universal Credit Reg 66(1) does not list rent as unearned income. It gives a closed list, and (m) covers only income taxable under ITTOIA Part 5. ADM H5112: rent from "a sub-tenant or boarder is not defined as income for the purposes of UC". SI 2013/376 regs 66, 72(3)
Housing Benefit, working age Counted as income other than earnings, less: per boarder, £20 plus 50% of the excess (Sch 5 para 42); other occupier, £20 on the aggregate paid by "that person or a member of his family" (para 22, £20 from 7 April 2008, SI 2007/2618 reg 11(12)). Para 1 disregards tax on counted income. SI 2006/213 reg 40, Sch 5 paras 1, 21, 22, 42
Housing Benefit, pension age Counts as income board and lodging, and "any payment of rent made to a claimant who ... occupies part of the property". Disregards: per boarder £20 plus 50%; £20 of "the amount paid by that person". SI 2006/214 reg 29(1)(p), (v), Sch 5 paras 9, 10
Pension Credit Prescribed income, with the same disregards as pension-age HB. SPCA 2002 s. 15(1)(j); SI 2002/1792 reg 15(5)(e), (i), reg 17, Sch IV paras 8, 9
Council tax reduction The same words in England (pensioners, and the working-age default), Wales and Scotland (pension age). The Scottish working-age scheme's closed income list has no such income. SI 2012/2885 Sch 1 para 16(1)(p), (v), Sch 5 paras 9, 10; SI 2012/2886; WSI 2013/3029; SSI 2012/319; SSI 2021/249 reg 57
Income Support £20 plus 50% per boarder since 9 April 1990 (SI 1990/547 reg 22(c); current words SI 1994/527 reg 9(4)); £20 per occupier and family (£4 before April 2008). SI 1987/1967 Sch 9 paras 1, 19, 20
Tax credits Property income disregards profits sheltered by rent-a-room relief. SI 2002/2006 reg 11(2)
UC earned income Deducts "income tax ... paid in respect of the employment", not tax on property receipts. SI 2013/376 reg 55(5)(b)
CTR, UC recipients For a working-age applicant with a UC award, the schemes take income from the Secretary of State's UC assessment; the Welsh scheme doesn't treat a person with a UC award as a pensioner. SI 2012/2886 Sch para 37(1); WSI 2013/3029 reg 3, Sch 6 para 9; SSI 2012/303 reg 26(1)
Non-dependants Each scheme leaves out a person who pays on a commercial basis. UC's words: "a person who is liable to make payments on a commercial basis in respect of the person's occupation of the accommodation". HB treats "a person who is a partner of the person to whom sub-paragraph (a) applies" as liable (reg 8(1)(b)); UC and the CTR schemes have no such words. Reg 3(2)(e)(iii) concerns "the household of the person to whom ... the claimant ... is liable to make payments", the landlord's household, not the payer's. SI 2013/376 Sch 4 para 9(2)(d); SI 2006/213 reg 3(2)(e)(i), (3), reg 8(1); SI 2006/214 reg 3, reg 8(1); SI 2012/2885 reg 9(2)(e), (3); SI 2012/2886 Sch para 9; WSI 2013/3029 reg 9; SSI 2021/249 reg 8(2)(d)
UC extended benefit unit The renter's extended benefit unit holds "the renter (or joint renters)", "any child or qualifying young person for whom the renter or either joint renter is responsible" and "any person who is a non-dependant". A non-dependant is none of the listed people, among them "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible". The renter gets one bedroom for "a non-dependant who is not a child", among others. SI 2013/376 Sch 4 paras 8, 9(1), 9(2)(d), (g), 10(1)
Non-dependants, Scotland at pension age A non-dependant is "any person, except someone to whom paragraph (2) applies, who normally resides with the applicant". Paragraph (2) covers "any member of the applicant's family" and "any person who is liable to make payments on a commercial basis to the applicant or any partner of the applicant in respect of the person's occupation of the dwelling". Under reg 3(3)(a), a payer who "resides with another person to whom the first mentioned person is liable to make payments" stays a non-dependant where that person is "a close relative of the first mentioned person or of the first mentioned person's partner", or the agreement runs "other than on a commercial basis". SSI 2012/319 reg 3(1), (2)(a), (2)(e), (3)(a)

Modelling choices

  • The receipt goes to the household head (is_resolved_household_head: the FRS household reference person in the data). The FRS asks the CVPAY questions only about people not related to the HRP, so payers have no family relation to the householder. The model treats every such arrangement as commercial.
  • Person-by-person liability, with an assumed partner rule. pays_rent_to_householder holds for a person outside the head's benefit unit who pays, and for a claimant or partner in a benefit unit where a claimant or partner pays. HB Regs 2006 and HB (SPC) Regs 2006 reg 8(1)(b) treat the partner of a liable person as liable. UC and the CTR schemes have no such words, and the data hold no agreement, so PolicyEngine applies the same rule in every scheme, assuming a couple's room binds both members. A payer other than a claimant or partner, such as a qualifying young person, makes nobody else liable.
  • Who has responsibility for a child, for Universal Credit. PolicyEngine takes the claimant and partner of a child's own benefit unit as the people responsible for the child, as uc_non_dep_deduction_exempt already does. Where that benefit unit has no claimant or partner, PolicyEngine can't tell who has responsibility, and keeps the child a non-dependant. A claimant or partner never counts as anyone's child.
  • Above the limit, PolicyEngine assumes the s. 800 election. Without it, the taxable profit equals receipts less actual expenses, which the data can't measure. PolicyEngine treats all receipts as payments for furnished accommodation.
  • The exclusive receipts condition fails, in the model, when two members of a household both receive rent-a-room receipts.
  • Tax on counted letting income. PolicyEngine sets rent_a_room_income_tax to the pro rata share of property income tax that falls on taxable rent-a-room income, because nothing in the law orders the two. legacy_means_test_income_tax (Treat income derived from capital as capital in the legacy means tests #1995) takes the residential finance-cost reduction off the tax on property income first and shares the other Step 6 reductions pro rata. This PR moves the rent-a-room share from the capital side to the counted side.
  • Finance-cost cap. By convention, PolicyEngine takes the finance-cost reduction off no more than the property income tax left on the capital side (property_income_tax − rent_a_room_income_tax), so the capital side never goes negative. Any excess joins the reductions shared pro rata. ITTOIA 2005 s. 274AA limits the relief by property profits, which include taxable rent-a-room income, so it can exceed the tax on the rest of the property income.
  • Tax after reductions. rent_a_room_income_tax_after_reductions reads the same split as legacy_means_test_income_tax (legacy_means_test_tax_split), after the finance-cost reduction, so for a person whose only counted income comes from rent-a-room receipts, the two give the same figure.
  • Uncounted rent in CTR. On the routes that do not count the rent, rent_a_room_income_tax_without_earnings reads rent_a_room_income_tax_after_reductions on the same branch without earnings, with the same earnings sources and early return, as Treat income derived from capital as capital in the legacy means tests #1995's legacy_means_test_uncounted_income_tax_without_earnings.
  • Uprating. The two inputs use per-capita GDP, as property_income and sublet_income do. PolicyEngine has no national private rent index among its parameters.
  • Weeks per year. The inputs hold annual amounts, and the weekly disregards divide them by 52. policyengine-uk-data annualises weekly FRS amounts with 365.25 / 7, so a weekly payment reaches the disregards about 0.34% higher. The same gap applies to every weekly-tested FRS amount (Weekly FRS amounts are annualised with 365.25/7 but policyengine-uk's weekly rules divide by 52 policyengine-uk-data#531).
  • Sub-tenants. sublet_income keeps Treat income derived from capital as capital in the legacy means tests #1995's single-occupier disregard.

Invariants and tests

test_boarder_lodger_rent_properties.py (Hypothesis) generates households with one or two members in the head's unit and up to two paying units. A paying unit holds one or two claimants or partners and possibly a third adult, neither claimant nor partner, each paying or not, with roles supplied (is_claimant_or_partner). It varies working and pension age, earnings, sublet income, tenure, region and a Housing Benefit claim, for 2025 and 2026. It checks:

  1. Conservation. The head receives what members outside the head's unit pay, and nobody else receives anything.
  2. Rent-a-room bounds. 0 ≤ relief ≤ receipts; the limit equals £3,750 when the person and someone else in the household both have receipts, and £7,500 otherwise; taxable income = max(0, receipts − limit).
  3. Closed form for the disregards. Counted home-letting income equals the statutory arithmetic, which the test computes independently, and lies between nil and the rent received.
  4. Monotone. More rent from an existing payer never lowers taxable rent-a-room income or counted home-letting income, and never raises IS, HB, Pension Credit or CTR.
  5. Boarders keep more. At pension age, the same amount counts no more as board and lodging than as lodging only.
  6. Invariance. UC unearned income and household market income do not depend on rent that household members pay each other.
  7. Rent a programme doesn't count. Without property finance costs, UC earned income does not change with the rent. On the two CTR routes that leave the rent out (the Universal Credit route, and the Scottish working-age scheme), income does not change with the rent where the applicant and partner have no earnings. With earnings, it falls by between nil and the top rate (48%) on the change in taxable rent-a-room income.
  8. Tax bounds. 0 ≤ legacy_means_test_income_tax ≤ income tax; 0 ≤ rent_a_room_income_tax_after_reductions ≤ rent_a_room_income_tax; the capital side after reductions inside legacy_means_test_income_tax never goes negative (read through legacy_means_test_tax_split); and for a person whose only counted income comes from rent-a-room receipts, rent_a_room_income_tax_after_reductions equals legacy_means_test_income_tax (a separate generator varies savings, dividends, property income, finance costs and other tax credits in England and Scotland).
  9. Person-level liability. pays_rent_to_householder equals, for every person, the predicate the test computes from the inputs.
  10. Where a non-paying adult lives. Moving a non-paying adult, neither claimant nor partner, out of the payer's unit into one of their own leaves the head's HB and CTR non-dependant deductions unchanged.
  11. Adding a non-paying adult. Adding such an adult never lowers the head's HB non-dependant deductions, and never raises the head's HB unless it raises the head's bedroom count. PolicyEngine gives a non-dependant a bedroom under the size criteria, so they can take a young single head off the shared accommodation rate: a 25-year-old head's HB rises from £4,925.44 to £8,000.

test_uc_lodger_child_extended_benefit_unit_properties.py (Hypothesis, 15 examples) generates a household head who claims Universal Credit, with possibly a partner and children of their own, one or two commercial lodger units (each with possibly a partner, a non-paying adult and a child), and possibly a non-paying family with a child, across four regions, two tenures and 2025 and 2026. It keeps everyone in the lodger units under State Pension age, so no lodger family receives Pension Credit. It checks:

  1. A commercial lodger's child. Adding a child under 16, or a qualifying young person aged 16 to 18 in non-advanced education, to the first lodger unit leaves the head's UC bedrooms (LHA_allowed_bedrooms), housing element (uc_housing_costs_element) and non-dependant deductions (uc_non_dep_deductions) unchanged, and the added person never counts as the head's UC non-dependant.

test_household_head_agreement_properties.py and test_rent_of_sharers_boarders_and_lodgers_properties.py pin the non-dependant flag against the families liable for rent. Each now computes liability to the householder person by person from the inputs, in test_every_programme_reads_one_head and test_non_dependants respectively; nothing else in those files changes.

The YAML cases cover:

  • Income tax: within and above the limit; the 2015-16 limit; the halved limit; the property allowance not applying; a payer inside the head's unit; tax credits; taxable rent-a-room income reaching total income, adjusted net income and post-tax income once.
  • Disregards: a lodger, a boarder, a boarder under £20, a lodger couple at pension age (£40 disregarded) and working age (£20); a boarder and a lodger together; the 2007 £4 lodger disregard; UC unchanged; household market income unchanged; tax on counted letting income deducted, including when the formula shares a tax reduction pro rata with tax on capital income; the finance-cost reduction capped at the property tax on income from capital; UC earned income not reduced by tax on the rent.
  • Council tax reduction: the Universal Credit route and the Scottish working-age scheme, each with pay of £30,000 and a lodger paying £15,000 (income falls by the rent's whole tax, £1,500 at the 20% basic rate in England and £1,575 at Scotland's 21% intermediate rate, because without the pay the £7,500 taxable falls inside the personal allowance), and each without pay (no change); Welsh CTR for a UC recipient without the rent; a household head of 70 who applies alone, sharing a benefit unit with a young couple and their baby, with a lodger couple each paying £3,640 (councils count £5,200 after the per-person pension-age disregard, and award CTR of £1,035.20, while the couple's legacy measure counts nothing), and the same head in a benefit unit of their own (£5,200 in both measures).
  • Non-dependants: a solitary paying lodger and a solitary adult paying nothing, under UC, HB and CTR; the adult-son case below through final Housing Benefit, and the same family through UC and CTR; a lodger couple where only one pays, at working age (per-family disregard) and pension age (per-person disregard); a son who pays and his claimant mother who does not; a lodger's son keeping the Pension Credit exemption from the UC housing cost contribution; rent entered for a member of the head's benefit unit; Scottish pension-age CTR, where the lodger and partner leave the non-dependants and the lodger's son and child stay (SSI 2012/319 reg 3).
  • Universal Credit's extended benefit unit: the lodger's qualifying young person below through final Universal Credit; the adult-son household, where the son stays the head's UC non-dependant and HB stays at £7,053.80 with a deduction of £3,346.20; a non-paying daughter whose qualifying young person (17) stays a non-dependant, giving the head three bedrooms, a housing element of £18,841.40 and UC of £16,064.42; a lodger's non-paying adult son taking a head of 25 off the shared accommodation rate (two bedrooms, housing element £16,841.40, UC £14,064.42); and a lodger's child (10) leaving that head on it (housing element £7,800, UC £5,023.02).

The adult-son case (Scotland, 2026-27). A household head of 60 has eligible rent of £10,400 a year. An unrelated lodger of 50 pays the head £5,200, and the lodger's son of 30, in the lodger's benefit unit, pays nothing and earns £15,600 over 20 hours. The son counts as the head's non-dependant, with an HB deduction of £64.35 a week, £3,346.20 a year. Counted home-letting income comes to £4,160, and final Housing Benefit to £7,053.80. Before the person-level rule, PolicyEngine read the whole family as commercial payers and paid Housing Benefit of £10,400.

The lodger's qualifying young person (London, Inner South East London, 2026-27). A private tenant of 40 earns £15,000, pays rent of £18,000 and claims Universal Credit. An unrelated commercial lodger of 40 earns £20,000 and pays the tenant £5,200; the lodger's son of 18, a qualifying young person in non-advanced education, lives in the lodger's benefit unit. Nobody in the tenant's extended benefit unit has responsibility for him, so the tenant gets one bedroom, a housing element of £15,546 (the one-bedroom rate) and Universal Credit of £12,769.02. At f7788dc97, PolicyEngine counted him as a non-dependant aged 16 or over and gave two bedrooms, a housing element of £18,000 and Universal Credit of £15,223.02; the case fails there on all three.

Tests at 3995b274f. This head merges main at 5c7744144 into 25535f380, and no file changed on both sides since 7ba0ea7af.

  • CI's Code changes run 41889276464 passed every job at this head, Lint among them. YAML: 5,812 passed. Python, over seven shards: 12,218 passed, 2 xfailed and 61 skipped (60 in test_dwp_published_rates.py, 1 in test_build_metadata.py). All of policyengine_uk/tests/code_health passed (3,165), and so did the six property files: test_boarder_lodger_rent_properties.py 12, test_legacy_means_test_income_from_capital_properties.py 9, test_rent_of_sharers_boarders_and_lodgers_properties.py 6, test_household_head_agreement_properties.py 3, test_council_tax_reduction_claimant_properties.py 3 and test_uc_lodger_child_extended_benefit_unit_properties.py 1. The run's second attempt reran shard 5, whose first attempt passed every test but failed to upload its outcome log.
  • YAML, run at 685544ff2 with uv sync --frozen --extra dev: gov/dwp/legacy_means_tests/ 115 passed (boarders_and_lodgers.yaml 22 and boarders_and_lodgers_non_dependants.yaml 15 among them); gov/hmrc/income_tax/rent_a_room/ 7; rent_of_sharers_boarders_and_lodgers.yaml 19; resolved_household_head.yaml 9; HB non_dep_deduction/ 53; UC housing_costs_element/ 20 (UC non_dep_deduction/ 13 of them); council_tax_reduction/ 331; housing_benefit_meals_deduction.yaml 8. Since then, a107b225c has reworded one YAML comment and 25535f380 has changed one property test.
  • At a107b225c, uvx ruff@0.17.2 format --check . (2,200 files already formatted), ruff check . and ruff check --select F811,F821 policyengine_uk: clean. git diff --check 7ba0ea7af..HEAD: clean.
  • .github/check_fix_pr.py on this title and body at 3995b274f, as pr_fix_evidence.yaml runs it: PASS against main at 5c7744144 (no fixed fragment in this PR's own diff).

Mutation check at 298a8ccba (before the merge of #1995's 89bdbeed9; the rules it mutates did not change in that merge). We applied each mutant below to a copy of this branch and ran the 32 YAML cases and the property tests, with shrinking off.

Mutant YAML cases failing Property tests
Count all of a boarder's excess (drop the 50%) 3 caught
Lodger disregard per person at working age 2 not caught
Lodger disregard per family at pension age 1 not caught
Never halve the rent-a-room limit 1 not caught
Apply the property allowance to rent-a-room receipts 1 not run
Keep boarders and lodgers as UC non-dependants 1 not caught
Keep boarders and lodgers as HB non-dependants 1 not caught
Keep boarders and lodgers as CTR non-dependants 1 not caught
Do not deduct tax on counted letting income 1 not caught
Give the receipt to everyone in the household 7 caught
Count rent between members as household market income 1 caught
Tax credits count all rent-a-room receipts 1 not caught

At 298a8ccba the YAML cases caught all 12. At 10 examples per test, the property tests caught the three mutants that break an invariant on most households. The other nine change a rule only for particular household shapes, so the YAML cases cover those.

Mutation check at f7788dc97. We applied each mutant to a copy of the branch and ran the 29 YAML cases in boarders_and_lodgers.yaml and boarders_and_lodgers_non_dependants.yaml and the 12 property tests (10 examples each, seed 0).

Mutant YAML cases failing Property tests failing
Liability back to the whole benefit unit (person.benunit.any(paid > 0)) 4 2 (person-level predicate; in or out of the payer's unit)
Drop the partner rule 2 1 (person-level predicate)
HB individual gate reads benunit_is_rent_liable 2 1 (in or out of the payer's unit)
UC individual gate reads benunit_is_rent_liable 2 0
is_non_dependant_of_household_head reads benunit_is_rent_liable 4 1 (in or out of the payer's unit)
uc_non_dep_receives_pension_credit reads benunit_is_rent_liable 1 0
Rent-a-room tax back on the capital side 3 2 (counted tax equals rent-a-room tax; CTR routes)
Subtract the with-earnings tax on the CTR routes 3 0
Subtract nothing on the Universal Credit route 1 0
Drop the finance-cost cap 1 0

The YAML cases catch all 10. Only the case with a lodger paying £30,000 catches the UC-route mutant: in the others, the rent falls inside the personal allowance without pay, so nothing comes off either way. We ran the properties at 8410e1161, whose property tests match f7788dc97's. The property tests miss the mutants that only change particular household shapes: the generator has no finance costs, no Pension Credit families among the payers and few UC-route applicants with rent above the personal allowance.

Mutation check of this head's changes. We applied each mutant to a copy of the branch at the commit that added the rule it mutates, and ran the YAML files named in each row; for the first, also invariant 12 (15 examples, with shrinking). The first three rows ran at 8236c3a1c, the deduction row at 685544ff2, and the last four at 8d494ab9d; none of the mutated formulas changed after.

Mutant YAML cases run YAML cases failing Invariant 12
No para 9(2)(g): is_uc_non_dependant_of_household_head returns is_non_dependant_of_household_head 14 in boarders_and_lodgers_non_dependants.yaml 2 (the lodger's qualifying young person; the lodger's child and the shared rate) fails (bedrooms, and the added person's flag)
Para 9(2)(g) for every other family's child or qualifying young person, whoever has responsibility the same 14 1 (the non-paying daughter's qualifying young person) not run
lha_renter_has_non_dependant counts only other families' claimants and partners the same 14 1 (the lodger's son and the shared rate) not run
uc_non_dep_deductions reads is_non_dependant_of_household_head 154 (legacy_means_tests/, UC housing_costs_element/, rent_of_sharers_boarders_and_lodgers.yaml) 0 not run
council_tax_reduction_home_letting_income counts only sublet income (#1995's helper as it stood) 105 (boarders_and_lodgers.yaml, boarders_and_lodgers_non_dependants.yaml, income_from_capital.yaml) 2 (the head applying alone; the same head in a unit of their own) not run
council_tax_reduction_home_letting_income takes the legacy State Pension age test the same 105 1 (the head applying alone: £6,240 against £5,200) not run
legacy_benefits_home_letting_income counts the head's receipt whatever the head's role the same 105 1 (the head applying alone: £6,240 against nil) not run
CTR subtracts the rent's tax without earnings after #1995's floor, not before it 445 (council_tax_reduction/, legacy_means_tests/) 0 not run

The YAML cases catch the first seven. The deduction mutant survives because no child or qualifying young person reaches the UC deduction age of 21, so the two flags give the same deductions. The floor-order mutant survives because the order matters only where one member's earnings move a Step 7 charge off another and the counted members' deducted income tax, less the rent's tax without earnings, falls below nil; no case builds that household.

Measured impact

CI's Aggregate impact run 41889276386 compared this head with main at 5c7744144 on the certified enhanced FRS 2024-25 (policyengine-uk-data 1.58.1), for 2025-26 to 2031-32. It found no change in any year: no household's net income changed, and neither did any tax receipt, poverty rate or inequality measure. That dataset doesn't carry the boarder and lodger rent yet: PolicyEngine/policyengine-uk-data#506 adds rent_paid_as_boarder and rent_paid_as_lodger.

We measured these at 6df59cdb4 against #1995's 89bdbeed9, and haven't rerun them on this head. We ran one 2026 Microsimulation per model version on the same dataset:

Disclosure. We matched each enhanced-FRS record of a paying household to its survey household by its members' ages and FRS rent amounts. Every change falls inside those households. Each figure below rests on at least 10 survey households. We report no figure resting on fewer, nor any that would reveal one by subtraction, and no survey-household counts.

2026-27, at 6df59cdb4 against 89bdbeed9 Change
Rent received from boarders and lodgers +£185m
of which relieved by rent-a-room relief £149m
Taxable rent-a-room income +£36m
Income tax +£8.5m
Home-letting income counted by the legacy means tests +£135m
  • Low weights in the calibrated data. The survey-weighted FRS has £0.81bn of this rent a year. The calibrated enhanced FRS gives the paying households low weights, so it carries £0.19bn.
  • No change at 6df59cdb4 in Housing Benefit, council tax reduction, Income Support or tax credit awards, Universal Credit unearned income, household market income, AHC poverty, or child poverty (BHC or AHC).
  • Not reported. Each of these changes in fewer than 10 survey households: UC and Pension Credit awards, Guarantee Credit entitlement, total household benefits, and BHC poverty for all people. We leave out household net income, because together with income tax it would reveal the benefit change.

What this head can move. The rent, rent-a-room relief, taxable income and income tax rows depend on rules this head leaves unchanged, apart from giving the rent to the resolved household head, the household reference person in the data. This head can move:

  • non-dependant deductions and the awards that carry them (HB, UC, CTR), and HB's shared accommodation rate through housing_benefit_has_non_dependant, wherever a paying benefit unit holds someone other than the payer, a claimant or a partner. FRS benefit units hold one adult or a couple plus dependent children, so this reaches a payer's dependent children and qualifying young people (aged up to 19), and a couple 20 or more years apart where the dataset does not supply is_claimant_or_partner;
  • UC bedrooms and the UC shared accommodation rate of a householder claiming Universal Credit, where a paying benefit unit holds a non-paying member who is neither a child nor a qualifying young person, such as the younger of a couple 20 or more years apart without is_claimant_or_partner. A payer's children and qualifying young people stay out of the UC extended benefit unit, as at 6df59cdb4;
  • CTR income on the Universal Credit route and in the Scottish working-age scheme, where the head's earnings raise the tax on the rent, and for a household head who applies alone and receives this rent;
  • counted tax in the legacy means tests where rent-a-room income and property finance costs meet (the cap);
  • tax credit income, now through tax_credits_current_year_income;
  • every figure through Treat income derived from capital as capital in the legacy means tests #1995's changes from 89bdbeed9 to 7ba0ea7af, which the baseline would need too.

Not in this PR

  • The payer's own housing costs. Main now gives a boarder's or lodger's family the rent it pays the householder (personal_rent); this PR does not change that.
  • SUBRENT. policyengine-uk-data still puts SUBRENT in property_income; moving it to sublet_income takes a change there.
  • Second adult rebate and Pension Credit housing costs. The same commercial-occupier rules apply to both, and this PR leaves them unchanged.

Known interactions

axiom: TheAxiomFoundation/rulespec-uk#402 queued, with an addendum for person-level commercial liability (TheAxiomFoundation/rulespec-uk#402 (comment)); rulespec-uk already encodes UC reg 66 (uk/regulations/uksi/2013/376/66.test.yaml rent_from_a_lodger_in_the_home_is_not_unearned_income)

Reproducer: policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/boarders_and_lodgers_non_dependants.yaml::A commercial lodger's qualifying young person gives the householder no Universal Credit bedroom; policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/boarders_and_lodgers_non_dependants.yaml::A lodger's non-paying adult son is the householder's non-dependant for Housing Benefit

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits October 1, 2026 11:31
The Family Resources Survey records the rent a boarder or lodger pays the
householder only on the payer (CVPAY). New person inputs
`rent_paid_as_boarder` and `rent_paid_as_lodger` carry it, and
`rent_from_boarders_and_lodgers` gives it to the household head.

- Income tax: rent-a-room relief (ITTOIA 2005 ss. 784-802). Receipts up
  to the limit (£3,250 from 1992-93, £4,250 from 1997-98, £7,500 from
  2016-17; halved where someone else in the household also receives
  rent from the home) are not taxed; above it the excess is property
  income (the s. 800 election), with no property allowance
  (s. 783BB(2)). `sublet_income` counts as rent-a-room receipts too.
- Legacy means tests: `legacy_benefits_home_letting_income` (#1995) now
  also counts lodger rent less £20 a week (per person at pension age,
  per lodger family at working age) and board and lodging less £20 and
  half the excess per boarder (IS Sch 9 paras 19-20; HB Sch 5 paras 22,
  42; HB (SPC) Sch 5 paras 9-10; SPC Sch IV paras 8-9; CTR Sch 5
  paras 9-10). Tax on counted letting income is deducted
  (`rent_a_room_income_tax`).
- Tax credits count the taxable rent-a-room income (SI 2002/2006
  reg 11(2)); Universal Credit counts none of it (reg 66(1)).
- People paying the householder rent are not non-dependants for UC, HB
  or CTR (UC Sch 4 para 9(2)(d); HB reg 3(2)(e)(i); CTR reg 9(2)(e)).
- Rent paid between household members is not household income;
  `sublet_income`, from outside the household, now is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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 legacy_benefits_home_letting_income, rent_from_boarders_and_lodgers and pays_rent_to_householder 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 and others added 3 commits October 2, 2026 10:04
Rent-a-room tax moves from capital-source tax to counted tax in the
rewritten legacy_means_test_income_tax; lodger and boarder receipts use
the claimant-or-partner pension-age switch and count for the head's
benefit unit when the head is its claimant or partner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Review of #2002:
- UC earned income stops deducting the tax on rent-a-room income: UC
  does not count the rent (reg 66(1)) and reg 55(5)(b) allows only tax
  in respect of the employment. New
  rent_a_room_income_tax_after_reductions is that tax less its pro-rata
  share of Step 6 reductions.
- Council tax reduction does the same where it excludes the rent: the
  Scottish working-age scheme and Welsh applicants with a UC award,
  whose income is the UC assessment (WSI 2013/3029 reg 3, Sch 6
  para 9); home-letting income is no longer added for the latter.
- Property tests: the rent-a-room limit must be halved exactly when two
  people in the household receive rent; uncounted rent leaves UC earned
  income and the excluded CTR routes unchanged; partner sublet income in
  the closed form; no lambda (ruff E731).
- YAML: UC earned income with a lodger above the limit; Welsh CTR for a
  UC recipient.
- Documentation: commercial and non-relative assumption for the
  non-dependant exclusion, multiple heads, annual inputs over 52 weeks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@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/legacy_benefits_home_letting_income.py: head = person("is_household_head", period)
  • policyengine_uk/variables/household/income/pays_rent_to_householder.py: in_head_benunit = person.benunit.any(person("is_household_head", period))
  • policyengine_uk/variables/household/income/rent_from_boarders_and_lodgers.py: head = 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.

rent_from_boarders_and_lodgers and legacy_benefits_home_letting_income read
is_resolved_household_head and benunit_contains_household_head, as every
other programme does on main, instead of is_household_head.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KubCAd9d7yLvRkRTg
Hand-worked cases: the finance-cost reduction capped at the property tax on
income from capital; taxable rent-a-room income reaching total income,
adjusted net income and post-tax income once; UC's tax on earnings unchanged
by the rent; and council tax reduction on the Universal Credit route and the
Scottish working-age scheme, with and without pay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KubCAd9d7yLvRkRTg
pays_rent_to_householder holds for the boarder or lodger who pays and, as an
assumption across schemes (HB Regs 2006 reg 8(1)(b)), for their partner;
nobody else in their benefit unit. The HB, UC and household-head
non-dependant gates and the UC Pension Credit exemption read the new
benunit_is_liable_for_household_rent, which is false for a family whose only
rent is paid to the householder. Adds the review's case through final
Housing Benefit, UC and CTR cases, and person-level properties.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KubCAd9d7yLvRkRTg
A lodger paying 30,000 leaves 22,500 taxable, above the personal allowance,
so council tax reduction on the Universal Credit route leaves its 1,986
without earnings out of the deducted tax.

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

Copy link
Copy Markdown
Collaborator Author

PR_TITLE.txt

Model rent from boarders, lodgers and sub-tenants for the householder

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_BODY.md

## Summary

Stacked on #1995 (merged here at its head `7381a46c7`), which stops counting income from capital in the legacy means tests and adds `legacy_benefits_home_letting_income` for rent from letting part of the home.

This PR models the rent a householder receives from boarders and lodgers who live in the household. The Family Resources Survey records that rent only on the payer, as CVPAY (PolicyEngine/policyengine-uk-data#506 adds it as `rent_paid_as_boarder` and `rent_paid_as_lodger`). It also routes `sublet_income` (rent from a sub-tenant outside the household) through income tax.

What changes:

- **Who receives it.** `rent_from_boarders_and_lodgers` gives the household head (`is_resolved_household_head`) the rent paid by household members outside the head's benefit unit.
- **Income tax: rent-a-room relief.** Income tax does not charge receipts up to £7,500 a year. Above that, it charges the excess as property income, assuming the s. 800 election. The limit halves where someone else in the household also receives rent from the home. The receipts get no £1,000 property allowance.
- **Legacy means tests.** Income Support, Housing Benefit, Pension Credit and council tax reduction count the rent less the statutory disregards:
  - boarders: £20 a week plus half the excess, for each boarder;
  - lodgers: £20 a week, per person at pension age and per lodger family at working age (£4 before April 2008).
  The tests deduct the tax on counted letting income, like the tax on other counted income: `legacy_means_test_income_tax` puts the rent-a-room share of property income tax on the counted side.
- **Rent a programme does not count.** Universal Credit deducts only the tax on earnings (`uc_income_tax_on_earnings`, which takes earnings as the lowest slice), so the rent's tax never comes off UC earned income. Council tax reduction excludes the rent on the Universal Credit route (#1995's `universal_credit_route`) and in the Scottish working-age scheme. There the formula treats the rent as uncounted income, as #1995 treats income from capital: it leaves out of the deducted tax the tax the rent would bear without earnings (`rent_a_room_income_tax_without_earnings`), and keeps the extra tax that earnings cause on it.
- **Tax credits** count the taxable rent-a-room income (`tax_credits_current_year_income`).
- **Universal Credit does not count it.** Nothing changes there.
- **Non-dependants.** A boarder or lodger pays the householder on a commercial basis, so is not a non-dependant for UC, HB or CTR (all local CTR schemes take this flag). The model takes that liability person by person: the payer, and the payer's partner, leave the non-dependant count; anyone else in their benefit unit who pays nothing, such as an adult son, stays in it (`pays_rent_to_householder`, `benunit_is_liable_for_household_rent`).
- **Household income.** Household market and net income leave out rent paid between members of a household. Market income, household market income and HBAI net income now count `sublet_income`, which comes from outside the household, alongside `property_income_after_finance_costs`.

## The law

Read from the revised text on legislation.gov.uk on 1 October 2026, and the non-dependant provisions on 2 November 2026. An independent legal memo, which checked 284 quotations against saved sources, agrees with every income and disregard rule below.

| Regime | Rule | Provisions |
|---|---|---|
| Income tax | Rent-a-room receipts are "in respect of the use of furnished accommodation in a residence ... or in respect of goods or services supplied in connection with that use", in the individual's only or main residence. Not charged up to the limit. Above it, on an election, income tax charges the receipts less the limit, with no expenses deducted. Limit: £3,250 from 1992-93, £4,250 from 1997-98, £7,500 from 2016-17; halved where the exclusive receipts condition fails. The receipts are not relievable receipts for the property allowance. | ITTOIA 2005 ss. 784-802, 783BB(2); SI 2015/1539 arts. 1(2), 2; SI 1996/2953 art. 2; F(No. 2)A 1992 Sch. 10 |
| Universal Credit | Reg 66(1) does not list rent as unearned income. It gives a closed list, and (m) covers only income taxable under ITTOIA Part 5. ADM H5112: rent from "a sub-tenant or boarder is not defined as income for the purposes of UC". | SI 2013/376 regs 66, 72(3) |
| Housing Benefit, working age | Counted as income other than earnings, less: per boarder, £20 plus 50% of the excess (Sch 5 para 42); other occupier, £20 on the aggregate paid by "that person or a member of his family" (para 22, £20 from 7 April 2008, SI 2007/2618 reg 11(12)). Para 1 disregards tax on counted income. | SI 2006/213 reg 40, Sch 5 paras 1, 21, 22, 42 |
| Housing Benefit, pension age | Board and lodging, and "any payment of rent made to a claimant who ... occupies part of the property", are income. Disregards: per boarder £20 plus 50%; £20 of "the amount paid by that person". | SI 2006/214 reg 29(1)(p), (v), Sch 5 paras 9, 10 |
| Pension Credit | Prescribed income, with the same disregards as pension-age HB. | SPCA 2002 s. 15(1)(j); SI 2002/1792 reg 15(5)(e), (i), reg 17, Sch IV paras 8, 9 |
| Council tax reduction | The same words in England (pensioners, and the working-age default), Wales and Scotland (pension age). The Scottish working-age scheme's closed income list has no such income. | SI 2012/2885 Sch 1 para 16(1)(p), (v), Sch 5 paras 9, 10; SI 2012/2886; WSI 2013/3029; SSI 2012/319; SSI 2021/249 reg 57 |
| Income Support | £20 plus 50% per boarder since 9 April 1990 (SI 1990/547 reg 22(c); current words SI 1994/527 reg 9(4)); £20 per occupier and family (£4 before April 2008). | SI 1987/1967 Sch 9 paras 1, 19, 20 |
| Tax credits | Property income disregards profits sheltered by rent-a-room relief. | SI 2002/2006 reg 11(2) |
| UC earned income | Deducts "income tax ... paid in respect of the employment", not tax on property receipts. | SI 2013/376 reg 55(5)(b) |
| CTR, UC recipients | Income is the Secretary of State's UC assessment for a working-age applicant with a UC award; a person with a UC award is not a pensioner in Wales. | SI 2012/2886 Sch para 37(1); WSI 2013/3029 reg 3, Sch 6 para 9; SSI 2012/303 reg 26(1) |
| Non-dependants | "a person who is liable to make payments on a commercial basis in respect of the person's occupation of the accommodation" is not a non-dependant. HB treats "a person who is a partner of the person to whom sub-paragraph (a) applies" as liable (reg 8(1)(b)); UC and the CTR schemes have no such words. Reg 3(2)(e)(iii) concerns "the household of the person to whom ... the claimant ... is liable to make payments", the landlord's household, not the payer's. | SI 2013/376 Sch 4 para 9(2)(d); SI 2006/213 reg 3(2)(e)(i), (3), reg 8(1); SI 2006/214 reg 3, reg 8(1); SI 2012/2885 reg 9(2)(e), (3); SI 2012/2886 Sch para 9; WSI 2013/3029 reg 9; SSI 2021/249 reg 8(2)(d) |

## Modelling choices

- **The receipt goes to the household head** (`is_resolved_household_head`: the FRS household reference person in the data). The FRS asks the CVPAY questions only about people not related to the HRP, so payers have no family relation to the householder. The model treats every such arrangement as commercial.
- **Liability is person by person, and the partner rule is an assumption.** `pays_rent_to_householder` holds for a person outside the head's benefit unit who pays, and for a claimant or partner in a benefit unit where a claimant or partner pays. HB Regs 2006 and HB (SPC) Regs 2006 reg 8(1)(b) treat the partner of a liable person as liable. UC and the CTR schemes have no such words, and the data hold no agreement; the model applies the same rule across the schemes, assuming a couple's room binds both members. A payer who is not a claimant or partner makes nobody else liable.
- **Rent-a-room above the limit assumes the s. 800 election.** The alternative is receipts less actual expenses, which the data cannot measure. The model treats all receipts as furnished accommodation.
- **The exclusive receipts condition** fails, in the model, when two members of a household both receive rent-a-room receipts.
- **Tax on counted letting income** (`rent_a_room_income_tax`) is the share of property income tax that falls on taxable rent-a-room income, pro rata, because nothing in the law orders the two. `legacy_means_test_income_tax` (#1995) takes the residential finance-cost reduction off the tax on property income first and shares the other Step 6 reductions pro rata. This PR moves the rent-a-room share from the capital side to the counted side.
- **Finance-cost cap.** As a stated convention, the finance-cost reduction comes off no more than the property income tax left on the capital side (`property_income_tax − rent_a_room_income_tax`), so the capital side never goes negative. Any excess joins the reductions shared pro rata. ITTOIA 2005 s. 274AA limits the relief by property profits, which include taxable rent-a-room income, so it can exceed the tax on the rest of the property income.
- **Tax after reductions.** `rent_a_room_income_tax_after_reductions` reads the same split as `legacy_means_test_income_tax` (`legacy_means_test_tax_split`), after the finance-cost reduction, so the two cannot disagree: for a person whose only counted income is rent-a-room income, they give the same figure.
- **Uncounted rent in CTR.** On the routes that do not count the rent, `rent_a_room_income_tax_without_earnings` reads `rent_a_room_income_tax_after_reductions` on the same branch without earnings, with the same earnings sources and early return, as #1995's `legacy_means_test_uncounted_income_tax_without_earnings`.
- **Uprating.** The two inputs use per-capita GDP, as `property_income` and `sublet_income` do. No national private rent index exists as a parameter.
- **Weeks per year.** The inputs are annual; the weekly disregards divide them by 52. policyengine-uk-data annualises weekly FRS amounts with 365.25 / 7, so a weekly payment reaches the disregards about 0.34% higher. The same gap applies to every weekly-tested FRS amount (PolicyEngine/policyengine-uk-data#531).
- **Sub-tenants.** `sublet_income` keeps #1995's single-occupier disregard. The policyengine-uk-data change that moves SUBRENT out of `property_income` and into `sublet_income` is separate work.

## Invariants and tests

`test_boarder_lodger_rent_properties.py` (Hypothesis) generates households with one or two members in the head's unit and up to two paying units. A paying unit holds one or two claimants or partners and possibly an adult who is neither, each paying or not, with roles supplied (`is_claimant_or_partner`). It varies working and pension age, earnings, sublet income, tenure, region and a Housing Benefit claim, for 2025 and 2026. It checks:

1. **Conservation.** The head receives exactly what members outside the head's unit pay, and nobody else receives anything.
2. **Rent-a-room bounds.** 0 ≤ relief ≤ receipts; the limit is £3,750 exactly when the person and someone else in the household both have receipts, and £7,500 otherwise; taxable income = max(0, receipts − limit).
3. **Closed form for the disregards.** Counted home-letting income equals the statutory arithmetic, computed independently in the test, and lies between nil and the rent received.
4. **Monotone.** More rent from an existing payer never lowers taxable rent-a-room income or counted home-letting income, and never raises IS, HB, Pension Credit or CTR.
5. **Boarders keep more.** At pension age, the same amount counts no more as board and lodging than as lodging only.
6. **Invariance.** UC unearned income and household market income do not depend on rent paid between household members.
7. **Rent a programme does not count.** UC earned income does not change with the rent. On the two CTR routes that exclude it (the Universal Credit route, and the Scottish working-age scheme), income does not change with the rent where the applicant and partner have no earnings; with earnings it falls by the extra tax earnings cause on the rent, and by nothing else, so by no more than the top rate on the change in taxable rent-a-room income.
8. **Tax bounds.** 0 ≤ `legacy_means_test_income_tax` ≤ income tax; 0 ≤ `rent_a_room_income_tax_after_reductions` ≤ `rent_a_room_income_tax`; the capital side after reductions inside `legacy_means_test_income_tax` never goes negative (read through `legacy_means_test_tax_split`); and for a person whose only counted income is rent-a-room income, `rent_a_room_income_tax_after_reductions` equals `legacy_means_test_income_tax` (a separate generator varies savings, dividends, property income, finance costs and other tax credits in England and Scotland).
9. **Person-level liability.** `pays_rent_to_householder` equals, for every person, the predicate computed from the inputs.
10. **Where a non-paying adult lives.** Moving a non-paying adult who is not a claimant or partner out of the payer's unit into one of their own leaves the head's HB and CTR non-dependant deductions unchanged.
11. **Adding a non-paying adult.** Adding such an adult never lowers the head's HB non-dependant deductions, and never raises the head's HB unless it raises the head's bedroom count. A non-dependant occupies a bedroom under the size criteria, so it can take a young single head off the shared accommodation rate; Hypothesis found that case (a 25-year-old head, HB £4,925.44 rising to £8,000), and the property states it.

`test_household_head_agreement_properties.py` and `test_rent_of_sharers_boarders_and_lodgers_properties.py` pin the non-dependant flag against the families liable for rent. Each now computes liability to the householder person by person from the inputs, in the pin at `test_every_programme_reads_one_head` and `test_non_dependants`; the rest stays as it was.

YAML tests (hand-worked from the provisions) cover:
- **Income tax:** within and above the limit; the 2015-16 limit; the halved limit; the property allowance not applying; a payer inside the head's unit; tax credits; taxable rent-a-room income reaching total income, adjusted net income and post-tax income once.
- **Disregards:** a lodger, a boarder, a boarder under £20, a lodger couple at pension age (£40 disregarded) and working age (£20); a boarder and a lodger together; the 2007 £4 lodger disregard; UC unchanged; household market income unchanged; tax on counted letting income deducted, including when the formula shares a tax reduction pro rata with tax on capital income; the finance-cost reduction capped at the property tax on income from capital; UC earned income not reduced by tax on the rent.
- **Council tax reduction:** the Universal Credit route and the Scottish working-age scheme, each with pay of £30,000 and a lodger paying £15,000 (income falls by the rent's whole tax, £1,500 at UK rates and £1,575 at the Scottish 21% rate, because without the pay the £7,500 taxable falls inside the personal allowance), and each without pay (no change); Welsh CTR for a UC recipient without the rent.
- **Non-dependants:** a solitary paying lodger and a solitary adult paying nothing, under UC, HB and CTR; the review's case below through final Housing Benefit, and the same family through UC and CTR; a lodger couple where only one pays, at working age (per-family disregard) and pension age (per-person disregard); a son who pays and his claimant mother who does not; a lodger's son keeping the Pension Credit exemption from the UC housing cost contribution; rent entered for a member of the head's benefit unit.

The review's case (Scotland, 2026-27): a household head of 60 with eligible rent of £10,400 a year; an unrelated lodger of 50 paying £5,200; her son of 30, in her benefit unit, paying nothing and earning £15,600 over 20 hours. The son is a non-dependant: HB deduction £64.35 a week, £3,346.20 a year; counted home-letting income £4,160; final Housing Benefit £7,053.80. With the whole family read as commercial payers, as before, Housing Benefit was £10,400.

#1995's tests (YAML and property) pass on the merged head, as do the CTR claimant property tests.

**Mutation check at `298a8ccba`** (before the merge of #1995's `89bdbeed9`; the rules it mutates did not change in that merge). Each mutant below went into a copy of this branch, which then ran the 32 YAML cases and the property tests (property tests with shrinking off).

| Mutant | YAML cases failing | Property tests |
|---|---|---|
| Count all of a boarder's excess (drop the 50%) | 3 | caught |
| Lodger disregard per person at working age | 2 | not caught |
| Lodger disregard per family at pension age | 1 | not caught |
| Never halve the rent-a-room limit | 1 | not caught |
| Apply the property allowance to rent-a-room receipts | 1 | not run |
| Keep boarders and lodgers as UC non-dependants | 1 | not caught |
| Keep boarders and lodgers as HB non-dependants | 1 | not caught |
| Keep boarders and lodgers as CTR non-dependants | 1 | not caught |
| Do not deduct tax on counted letting income | 1 | not caught |
| Give the receipt to everyone in the household | 7 | caught |
| Count rent between members as household market income | 1 | caught |
| Tax credits count all rent-a-room receipts | 1 | not caught |

At `298a8ccba` the YAML cases caught all 12. At 10 examples per test, the property tests caught the three mutants that break an invariant on most households. The other nine change a rule only for particular household shapes, so the YAML cases cover those. A twelfth mutant first tried, moving the rent-a-room term inside the `max` in `taxable_property_income`, turned out to be equivalent to the original, because `property_allowance_deduction` never exceeds `property_income`. The property-allowance mutant above replaced it.

**Mutation check at `f7788dc97`** (this head). Each mutant went into a scratch copy, which then ran the 29 YAML cases in `boarders_and_lodgers.yaml` and `boarders_and_lodgers_non_dependants.yaml` and the 12 property tests (10 examples each, seed 0).

| Mutant | YAML cases failing | Property tests failing |
|---|---|---|
| Liability back to the whole benefit unit (`person.benunit.any(paid > 0)`) | 4 | 2 (person-level predicate; in or out of the payer's unit) |
| Drop the partner rule | 2 | 1 (person-level predicate) |
| HB individual gate reads `benunit_is_rent_liable` | 2 | 1 (in or out of the payer's unit) |
| UC individual gate reads `benunit_is_rent_liable` | 2 | 0 |
| `is_non_dependant_of_household_head` reads `benunit_is_rent_liable` | 4 | 1 (in or out of the payer's unit) |
| `uc_non_dep_receives_pension_credit` reads `benunit_is_rent_liable` | 1 | 0 |
| Rent-a-room tax back on the capital side | 3 | 2 (counted tax equals rent-a-room tax; CTR routes) |
| Subtract the with-earnings tax on the CTR routes | 3 | 0 |
| Subtract nothing on the Universal Credit route | 1 | 0 |
| Drop the finance-cost cap | 1 | 0 |

The YAML cases catch all 10. The UC-route mutant first survived, because in the earlier cases the rent fell inside the personal allowance without pay, so nothing came off either way; the case with a lodger paying £30,000 catches it. The property runs used `8410e1161`, whose property tests match this head's. The property tests miss the mutants that only change particular household shapes: the generator has no finance costs, no Pension Credit families among the payers and few UC-route applicants with rent above the personal allowance.

## Measured impact

These runs are as at `6df59cdb4` on #1995's `89bdbeed9`. They have not been rerun on this head, because the build has no dataset with these inputs.

One real 2026 Microsimulation per model version, on the same dataset:

- **Dataset.** An enhanced FRS 2024-25 built at policyengine-uk-data#506 `87a5f50` with production settings and seed 0. It is identical, in every column of every table including household weights, to a seed-0 build of its parent (#503 head `0812cd1`), apart from the two new inputs. Its later commit `ee40d7a` adds uprating rows and tests and changes nothing the locked build model reads.
- **Models.** Baseline: #1995 head `89bdbeed9`. This PR: `6df59cdb4`.

**Disclosure.** The analysis matched each enhanced-FRS record of a paying household to its survey household by its members' ages and FRS rent amounts. Every change falls inside those households. Each figure below rests on at least 10 survey households. This body reports no figure resting on fewer, nor any that would reveal one by subtraction, and for the same reason gives no survey-household counts.

| 2026-27, at `6df59cdb4` against `89bdbeed9` | Change |
|---|---|
| Rent received from boarders and lodgers | +£185m |
| of which relieved by rent-a-room relief | £149m |
| Taxable rent-a-room income | +£36m |
| Income tax | +£8.5m |
| Home-letting income counted by the legacy means tests | +£135m |

- **Low weights in the calibrated data.** The survey-weighted FRS has £0.81bn of this rent a year. The calibrated enhanced FRS gives the paying households low weights, so it carries £0.19bn.
- **No change** at `6df59cdb4` in Housing Benefit, council tax reduction, Income Support or tax credit awards, Universal Credit unearned income, household market income, AHC poverty, or child poverty (BHC or AHC).
- **Not reported.** Each of these changes in fewer than 10 survey households: UC and Pension Credit awards, Guarantee Credit entitlement, total household benefits, and BHC poverty for all people. This body leaves out household net income, because together with income tax it would reveal the benefit change. The model computes non-dependant deductions for every family whether or not it claims; their award effects are the ones above.

**What this head can move.** The rent, rent-a-room relief, taxable income and income tax rows depend on rules this head leaves as they were, apart from giving the rent to the resolved household head, which is the household reference person in the data. This head can move:
- **non-dependant deductions and the awards that carry them** (HB, UC, CTR), and HB's shared accommodation rate through `housing_benefit_has_non_dependant`, wherever a paying benefit unit holds someone who is neither the payer nor a claimant or partner. FRS benefit units hold one adult or a couple plus dependent children, so this reaches a payer's dependent children and qualifying young people (aged up to 19), and a couple 20 or more years apart where the dataset does not supply `is_claimant_or_partner`;
- **CTR income** on the Universal Credit route and in the Scottish working-age scheme, where the head's earnings raise the tax on the rent;
- **counted tax in the legacy means tests** where rent-a-room income and property finance costs meet (the cap);
- **tax credit income**, now through `tax_credits_current_year_income`;
- every figure through #1995's changes from `89bdbeed9` to `7381a46c7`, which the baseline would need too.

## Not in this PR

- **The payer's own housing costs.** Main now gives a boarder's or lodger's family the rent it pays the householder (`personal_rent`); this PR does not change that.
- **SUBRENT.** Moving SUBRENT into `sublet_income` in the data is separate.
- **Second adult rebate and Pension Credit housing costs**, where the same commercial-occupier rules apply: this PR does not model them.

## Known interactions

- **Who claims CTR.** #2062 has merged. This PR gives the rent to the resolved household head, and the CTR award gates and non-dependant rules find the claimant through the same head (`benunit_contains_household_head`), so the two agree.
- **UC tax deduction.** UC deducts `uc_income_tax_on_earnings`, which takes earnings as the lowest slice, so the taxable rent raises `earned_taxable_income` and the income above earnings alike and the deduction does not move. One route remains: the slice adds back the finance-cost reduction in excess of `property_income_tax`, and the relief's cap includes taxable rent-a-room income. In Scotland, where finance costs exceed property profits and the taxable rent falls in the 19% starter band, the relief rises by 20% of it and the tax by 19%, so each £1 of taxable rent lowers UC's tax deduction by 1p (pay £13,000, finance costs £10,000, a lodger paying £9,500: the deduction falls from £81.70 to £61.70). At 20% or more the excess does not rise.
- **Children in a payer's family.** The model already counts every member of a non-paying family, children included, in `is_non_dependant_of_household_head`. A payer's children now join it too. The deductions start at 18 (HB, CTR) or 21 (UC) and UC's bedroom count at 16, so the effect falls on `housing_benefit_has_non_dependant`: a single head under 35 with a lodger's child in the home no longer gets the shared accommodation rate. UC Sch 4 para 9(2)(g) excludes "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible", which the flag does not apply to any family.
- **Close relatives.** The non-dependant exclusion assumes every payment is commercial and the payer is not a close relative living there. That holds for the survey data, which asks about this rent only for people unrelated to the household reference person; the model does not check inputs set by hand.

axiom: TheAxiomFoundation/rulespec-uk#402 queued, with an addendum for person-level commercial liability (rulespec-uk encodes UC reg 66 correctly: uk/regulations/uksi/2013/376/66.test.yaml `rent_from_a_lodger_in_the_home_is_not_unearned_income`)

Reproducer: policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/boarders_and_lodgers_non_dependants.yaml::A lodger's non-paying adult son is the householder's non-dependant for Housing Benefit

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


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_ADDENDUM.md

## Addendum: person-level commercial liability (Step 3)

PolicyEngine/policyengine-uk#2002 now takes commercial liability person by person. A boarder or lodger, and their partner, leaves the non-dependant count; nobody else in their benefit unit does. This addendum changes Step 3 and adds two companion cases. The issue body above stays as it is.

### Module paths and corpus citations

Corpus provisions (legislation.gov.uk, revised text):

- SI 2006/213 (HB Regs 2006) reg 3(1)-(3): https://www.legislation.gov.uk/uksi/2006/213/regulation/3
- SI 2006/213 reg 8(1): https://www.legislation.gov.uk/uksi/2006/213/regulation/8
- SI 2006/214 (HB (SPC) Regs 2006) reg 3(1)-(3): https://www.legislation.gov.uk/uksi/2006/214/regulation/3
- SI 2006/214 reg 8(1): https://www.legislation.gov.uk/uksi/2006/214/regulation/8
- SI 2013/376 (UC Regs 2013) Sch 4 para 9: https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/9
- SI 2013/376 Sch 2 para 1: https://www.legislation.gov.uk/uksi/2013/376/schedule/2/paragraph/1
- SI 2012/2885 reg 9(1)-(3): https://www.legislation.gov.uk/uksi/2012/2885/regulation/9
- SI 2012/2886 Schedule para 9(1)-(3): https://www.legislation.gov.uk/uksi/2012/2886/schedule/paragraph/9
- WSI 2013/3029 reg 9(1)-(3): https://www.legislation.gov.uk/wsi/2013/3029/regulation/9
- SSI 2021/249 reg 8(1)-(3): https://www.legislation.gov.uk/ssi/2021/249/regulation/8

Modules, one per instrument, following the issue's layout:

- `uk/regulations/uksi/2006/213/3.yaml` and `uk/regulations/uksi/2006/213/8.yaml`
- `uk/regulations/uksi/2006/214/3.yaml` and `uk/regulations/uksi/2006/214/8.yaml`
- `uk/regulations/uksi/2013/376/schedule-4/9.yaml`
- `uk/regulations/uksi/2012/2885/9.yaml`, `uk/regulations/uksi/2012/2886/schedule/9.yaml`, `uk/regulations/wsi/2013/3029/9.yaml`, `uk/regulations/ssi/2021/249/8.yaml`

This addendum does not quote the SSI 2012/319 non-dependant regulation (Scottish pension-age CTR); that module waits until someone ingests and quotes it.

### What changes from Step 3

Step 3 encodes the exclusion as a judgment on "a person who is liable to make payments on a commercial basis". It should take that judgment person by person, not for a whole benefit unit:

1. **The payer.** A person who pays the householder for board and lodging or for lodging, under a commercial agreement, is not a non-dependant (HB reg 3(2)(e)(i); HB (SPC) reg 3(2)(e)(i); UC Sch 4 para 9(2)(d); SI 2012/2885 reg 9(2)(e); SI 2012/2886 Sch para 9(2)(e); WSI 2013/3029 reg 9(2)(e); SSI 2021/249 reg 8(2)(d)).
2. **The payer's partner.** HB reg 8(1)(b) and HB (SPC) reg 8(1)(b) treat "a person who is a partner of the person to whom sub-paragraph (a) applies" as liable to make payments in respect of a dwelling. Read with reg 3(2)(e)(i), the partner of a liable boarder or lodger is not the householder's non-dependant for Housing Benefit.
3. **Named assumption, UC and CTR: `partner_of_commercial_payer_is_liable`.** UC Sch 4 para 9 and the CTR regulations above contain no words treating a liable person's partner as liable (UC Sch 2 para 1 treats a claimant as liable for payments by a responsible child or a partner, which concerns the claimant's own liability, not a non-dependant's). The corpus does not compel the partner rule for UC or CTR. Encode it as a stated assumption, separate from the HB judgment, so a reviewer can switch it off: a couple's room usually binds both members, and the data record no agreement.
4. **Nobody else in the payer's family.** A non-paying adult son or daughter of a boarder or lodger is not liable on a commercial basis, so HB reg 3(2)(e)(i) does not exclude them. HB reg 3(2)(e)(iii) does not reach them either: it concerns "any other member of the household of the person to whom or to whose partner the claimant or the claimant's partner is liable to make payments", that is, the landlord's household where the claimant pays rent, not the payer's family. Such a person normally resides with the claimant and is a non-dependant (reg 3(1)), unless another sub-paragraph of reg 3(2) applies.
5. **A payer who is not a claimant or partner** (for example a young person in the lodger's benefit unit) makes nobody else in that unit liable.
6. **Close relatives and non-commercial agreements.** Unchanged from the issue: reg 3(3) with reg 9(1) (HB), and reg 9(3) (CTR), keep such a person a non-dependant.

### Law (verbatim)

Source: legislation.gov.uk revised text, fetched 2 November 2026, amendment markers removed. Text © Crown copyright, reproduced under the Open Government Licence v3.0.

**HB Regs 2006 (SI 2006/213) reg 3(1), (2)(e) and (3):**

> 3.—(1) In these Regulations, “non-dependant” means any person, except someone to whom paragraph (2) applies, who normally resides with a claimant or with whom a claimant normally resides.

> (e)subject to paragraph (3)—
> (i)any person who is liable to make payments on a commercial basis to the claimant or the claimant's partner in respect of the occupation of the dwelling;
> (ii)any person to whom or to whose partner the claimant or the claimant's partner is liable to make payments on a commercial basis in respect of the occupation of the dwelling; or
> (iii)any other member of the household of the person to whom or to whose partner the claimant or the claimant's partner is liable to make payments on a commercial basis in respect of the occupation of the dwelling;

> (3) Sub-paragraphs (d) and (e) of paragraph (2) shall not apply to any person who is treated as if he were not liable to make payments in respect of a dwelling under paragraph (1) of regulation 9 (circumstances in which a person is to be treated as not liable to make payments in respect of a dwelling).

HB (SPC) Regs 2006 (SI 2006/214) reg 3(1) to (3) have the same words.

**HB Regs 2006 reg 8(1)(a) and (b):**

> 8.—(1) Subject to regulation 9 (circumstances in which a person is to be treated as not liable to make payments in respect of a dwelling), the following persons shall be treated as if they were liable to make payments in respect of a dwelling—
> (a)the person who is liable to make those payments;
> (b)a person who is a partner of the person to whom sub-paragraph (a) applies;

HB (SPC) Regs 2006 reg 8(1)(a) and (b) have the same words.

**UC Regs 2013 (SI 2013/376) Sch 4 para 9(2)(a) and (d):**

> (2) A person is a non-dependant if the person normally lives in the accommodation with the renter (or joint renters) and is none of the following—
> (a)a person within sub-paragraph (1)(a) or (b);

> (d)a person who is liable to make payments on a commercial basis in respect of the person's occupation of the accommodation (whether to the renter, joint renters or another person);

**UC Regs 2013 Sch 2 para 1(1):**

> 1.—(1) A claimant is to be treated as liable to make payments where the person who is liable to make the payments is—
> (a)any child or qualifying young person for whom the claimant (or if the claimant is a member of a couple, either member) is responsible; or
> (b)in the case of a claimant who is a member of a couple claiming as a single person, the other member of the couple.

**SI 2012/2885 reg 9(1) and (2)(e):**

> 9.—(1) In these Regulations, “non-dependant” means any person, except someone to whom paragraph (2) applies, who normally resides with an applicant or with whom an applicant normally resides.

> (e)subject to paragraph (3), any person who is liable to make payments on a commercial basis to the applicant or the applicant’s partner in respect of the occupation of the dwelling;

SI 2012/2886 Schedule para 9(2)(e) and WSI 2013/3029 reg 9(2)(e) have the same words. SSI 2021/249 reg 8(2)(d):

> (d)subject to paragraph (3), any person who is liable to make payments on a commercial basis to the applicant or any partner of the applicant in respect of the occupation of the dwelling, ...

### Required outputs for the person-level test

For each person who normally resides with the claimant (applicant) and is outside the claimant's family:

1. `liable_on_commercial_basis` (judgment, per person): true for a person liable under a commercial agreement to pay the claimant or the claimant's partner for their occupation.
2. `treated_as_liable` (HB and HB (SPC) only, per person): true for a person within reg 8(1)(a), or for the partner of such a person (reg 8(1)(b)).
3. `partner_of_commercial_payer_is_liable` (UC and CTR, named assumption, per person): true for the partner of a person for whom output 1 holds. Not derived from the corpus.
4. `excluded_from_non_dependants` (per person, per scheme): output 1, or output 2 (HB), or output 3 (UC and CTR, under the assumption); none of them where reg 3(3) / reg 9(3) applies.
5. `non_dependant` (per person, per scheme): normally resides with the claimant, and outputs 4 and the other reg 3(2) / para 9(2) exclusions are all false.

Every output is per person. None describes a benefit unit as a whole.

### Companion cases

These expectations come by hand from the provisions above. The deduction figures take the 2026-27 Housing Benefit non-dependant deduction bands as PolicyEngine records them from DWP's published rates (£64.35 a week for gross weekly income from £279 to under £365); this addendum does not quote reg 74 itself.

| Case | Expected |
|---|---|
| HB, Scotland, 2026-27. Claimant (60) with an eligible rent of £10,400 a year. Unrelated lodger (50) pays £5,200 a year (£100 a week) under a commercial agreement. Her son (30), in her family, pays nothing, earns £15,600 a year (£300 a week) over 20 hours a week, and has no exemption. | Lodger: `liable_on_commercial_basis` true; not a non-dependant. Son: `liable_on_commercial_basis` false, `treated_as_liable` false (he is not her partner); reg 3(2)(e)(iii) does not apply (it concerns the landlord's household); `non_dependant` true. Deduction £64.35 a week, £3,346.20 a year. Countable income from the lodger (Sch 5 para 22): (100 − 20) × 52 = £4,160 a year. |
| UC, the same household, claimant renting. | Lodger: excluded (Sch 4 para 9(2)(d)). Son: `non_dependant` true. |
| HB, working age. A lodger couple: one member pays £120 a week, the other nothing. | Payer: excluded (reg 3(2)(e)(i)). Partner: `treated_as_liable` true (reg 8(1)(b)); excluded. Neither is a non-dependant. Countable (Sch 5 para 22, aggregate of "that person or a member of his family"): 120 − 20 = £100 a week. |
| HB (SPC), PC and CTR pensioner. The same couple. | Neither is a non-dependant (HB (SPC) reg 8(1)(b); CTR under the named assumption). Disregard on "the amount paid by that person" (HB (SPC) Sch 5 para 10; SPC Regs Sch IV para 9): payer 120 − 20 = £100 a week; the partner pays nothing and adds no disregard. Countable £100 a week. |
| UC and CTR. The same couple. | Payer excluded. Partner excluded only under `partner_of_commercial_payer_is_liable`; with the assumption off, the partner is a non-dependant. |

### `review_finding`

```yaml
review_finding:
  scope: commercial-liability non-dependant exclusion (Step 3)
  instruments:
    - SI 2006/213 regs 3, 8
    - SI 2006/214 regs 3, 8
    - SI 2013/376 Sch 4 para 9
    - SI 2012/2885 reg 9
    - SI 2012/2886 Sch para 9
    - WSI 2013/3029 reg 9
    - SSI 2021/249 reg 8
  finding: >
    Take commercial liability per person. A boarder or lodger who is liable
    to pay the claimant on a commercial basis is not a non-dependant. Under
    HB and HB (SPC) reg 8(1)(b) their partner counts as liable and is not
    one either. For UC and CTR, treat the partner as liable only under the
    named assumption partner_of_commercial_payer_is_liable, which the corpus
    does not compel. The exclusion reaches no one else in the payer's family: a
    non-paying adult son or daughter is a non-dependant (reg 3(1)); reg
    3(2)(e)(iii) concerns the landlord's household, not the payer's.
  required_outputs:
    - liable_on_commercial_basis (per person, judgment)
    - treated_as_liable (per person, HB and HB (SPC) reg 8(1)(a)-(b))
    - partner_of_commercial_payer_is_liable (per person, UC and CTR, assumption)
    - excluded_from_non_dependants (per person, per scheme)
    - non_dependant (per person, per scheme)
  companion_cases:
    - lodger_with_non_paying_adult_son_scotland_2026
    - lodger_couple_one_pays_working_age
    - lodger_couple_one_pays_pension_age
  pending:
    - SSI 2012/319 non-dependant regulation (not yet quoted)
```

### Completion boundary

This addendum's part of #402 is complete when:

- the modules above give the five outputs for each person, with verbatim proof excerpts from the quoted text;
- the partner rule for UC and CTR exists only as the named assumption, and the companion cases pass with it on and show the partner as a non-dependant with it off;
- the five companion cases above pass, including the son as the claimant's non-dependant with a £64.35 weekly deduction band;
- the SSI 2012/319 module stays open until someone quotes its non-dependant regulation.

Outside this addendum: the deduction amounts themselves (HB reg 74, the UC housing cost contribution and the CTR schemes' deduction rules), which the issue's plan does not cover.

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


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Ready for hub review

Head f7788dc97a8d1ad4dc7aa136281ec0abadcaaf3e on branch claude/commercial-liability-person-level-q2nta8 (the harness pins pushes to this name). It starts from 6df59cdb4. No PR is open for it, and I pushed nothing to boarder-lodger-rent or legacy-capital-derived-income. The hub documents (PR_TITLE.txt, PR_BODY.md, AXIOM_ADDENDUM.md) are the three comments above. The title is unchanged.

Commits on top of 6df59cdb4:

  • 25bb191a0: merge of Treat income derived from capital as capital in the legacy means tests #1995's 7381a46c7, a commit of its own;
  • 4fd88bd67: boarders' and lodgers' rent goes to the resolved household head (a merge follow-up, see M1 below);
  • a7d14c243: tax-side YAML cases;
  • 8410e1161: C1, with its YAML cases and properties;
  • f7788dc97: one more UC-route CTR case, added because a mutant survived.

Restart check

C1: person-level liability

  • The rule. variables/household/income/pays_rent_to_householder.py:45 is true for anyone outside the head's benefit unit who pays, and for a claimant or partner in a unit where a claimant or partner pays. The label and documentation are rewritten, with HB reg 8 (2006/213 and 2006/214) added to the references.

  • The new family flag. variables/household/consumption/rent/benunit_is_liable_for_household_rent.py:29 is benunit_is_rent_liable & ~benunit.any(pays_rent_to_householder). It replaces the family gate in:

    • is_non_dependant_of_household_head.py:34;
    • housing_benefit_individual_non_dep_deduction_eligible.py:12;
    • uc_individual_non_dep_deduction_eligible.py:13;
    • uc_non_dep_receives_pension_credit.py:65.

    The three person-level readers also exclude pays_rent_to_householder. benunit_is_rent_liable itself is unchanged.

  • uc_non_dep_receives_pension_credit for a lodger's family. The branch fixes the family's UC housing element at nil and computes its Pension Credit there. For a family whose members are all over the qualifying age, that is its actual award. The YAML case A lodger's son keeps the Pension Credit exemption from the UC housing cost contribution pins it: PC £6,376 = 238 × 52 − 6,000, so the son is exempt and the deduction is nil.

  • Family-level readers. benunit_tenure_type and housing_benefit_shares_accommodation still take benunit.any(pays_rent_to_householder). test_council_tax_reduction_claimant_properties.py (3) and resolved_household_head.yaml (9) pass unchanged.

  • Property pins I changed. test_household_head_agreement_properties.py::test_every_programme_reads_one_head and test_rent_of_sharers_boarders_and_lodgers_properties.py::test_non_dependants asserted that the non-dependant flag equals, or excludes, every member of a rent-liable family. Both now compute liability to the householder person by person from the inputs. Hypothesis found the case that needed this: a boarder family of two 16-year-olds whose second member pays nothing. Nothing else in those files changed.

  • The review's case. boarders_and_lodgers_non_dependants.yaml::A lodger's non-paying adult son is the householder's non-dependant for Housing Benefit. My figures match the review's: deduction £64.35 a week, £3,346.20 a year; counted home-letting income £4,160; final HB £7,053.80. Under the old rule (mutant M1 below) the case fails, with HB £10,400.

Who now sees the non-payer

I read each reader and left each one as the law has it.

  • housing_benefit_non_dep_deductions, uc_non_dep_deductions and the CTR deductions now carry the non-payer's deduction.
  • LHA_allowed_bedrooms (UC) counts them from age 16, where the head's claim counts non-dependants.
  • housing_benefit_has_non_dependant becomes true, which takes a single head under 35 off the shared accommodation rate. Hypothesis found this: a head of 25 with HB £4,925.44 rising to £8,000. I restated property 11 to allow for it.
  • housing_benefit_severe_disability_premium_applies loses the premium where the non-payer is 18 or over and receives no qualifying benefit.

For the hub to decide. The ruling keeps everyone in the payer's family except the payer and partner, so a lodger's dependent child now counts too. A lodger's 10-year-old turns housing_benefit_has_non_dependant true and lifts a 30-year-old head's HB from £4,925.44 to £9,000 (scratch run). The model already treats the children of a non-paying family this way. UC Sch 4 para 9(2)(g), which is in the law file, excludes "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible". The flag applies that to no family. I didn't guard it; the body's "Known interactions" says so.

The merge

All 14 conflicts are resolved as the brief says:

  • legacy_means_test_income_tax and rent_a_room_income_tax_after_reductions now share utils/legacy_means_test_tax.py. The rent-a-room tax sits on the counted side (line 26), and the finance-cost relief is capped at the property tax left on the capital side (lines 27 and 36).
  • rent_a_room_income_tax_without_earnings is new, and council_tax_reduction_applicable_income.py:368 subtracts it.
  • The is_wales_scheme import is gone.
  • taxable_rent_a_room_income is added to tax_credits_current_year_income and gross_taxable_inputs.
  • taxable_property_income keeps both documentation sentences and all three references.

What else the merge moved:

  • M1. The auto-merged rent_from_boarders_and_lodgers and legacy_benefits_home_letting_income still read is_household_head. That failed main's test_household_head_agreement_properties.py::test_only_the_resolved_head_reads_the_flag and test_flags_matter_only_through_the_head. Both now read is_resolved_household_head and benunit_contains_household_head (4fd88bd67), and the "split between flagged heads" text is gone.
  • M2. Main's winter fuel payment charge (£200 at pension age with income over £35,000) now lands in income_tax. The case Tax on counted rent-a-room income shares a tax reduction pro rata now checks income_tax_before_winter_fuel_payment_charge.
  • M3. Main's personal_rent gives a lodger's family its payment to the householder as rent. That family now has its own UC housing element (£5,200 in the review's household). The "Not in this PR" bullet says so.
  • rent_paid_as_* keep Model rent from boarders, lodgers and sub-tenants for the householder #2002's documentation; the weekly rules still divide by 52.

UC finance-cost route. The rent reaches uc_income_tax_on_earnings_slice only through the excess of the finance-cost reduction over property_income_tax. The relief's cap includes taxable rent-a-room income. In Scotland, with finance costs above property profits and the taxable rent in the 19% starter band, the relief rises by 20% of that rent and the tax by 19%. So each £1 of taxable rent lowers UC's deduction by 1p: pay £13,000, finance costs £10,000 and a lodger paying £9,500 take it from £81.70 to £61.70. At 20% or more, the excess does not rise; I checked England and Scotland at pay of £20k, £30k and £60k. The body's "Known interactions" states this. Invariant 7 holds because the generator has no finance costs.

Hand-worked CTR cases (pay £30,000, a lodger paying £15,000):

  • UC route (England): income £23,619.60, £1,500 below the case without the lodger.
  • Scottish working-age scheme: income £23,579.53, £1,575 below (21% intermediate rate).
  • Without pay: no change on either route.
  • A £30,000 lodger case shows £1,986 left out of the deducted tax without earnings.

Other auto-merged formulas. None read wrongly.

Tests (this head unless stated)

  • YAML:

    • legacy_means_tests/ 99 passed (including income_from_capital.yaml and income_tax_caused_by_earnings.yaml);
    • gov/hmrc/income_tax/rent_a_room/ 7;
    • rent_of_sharers_boarders_and_lodgers.yaml 19;
    • resolved_household_head.yaml 9;
    • HB non_dep_deduction/ 53;
    • UC non_dep_deduction/ 13;
    • council_tax_reduction/ 331;
    • housing_benefit_meals_deduction.yaml 8.

    I ran everything except legacy_means_tests/ at 8410e1161. The last commit touches only boarders_and_lodgers.yaml.

  • Python (-n 4, uv sync --frozen, at 8410e1161; the last commit is YAML only):

    • test_boarder_lodger_rent_properties.py 12 passed;
    • test_legacy_means_test_income_from_capital_properties.py 7;
    • test_rent_of_sharers_boarders_and_lodgers_properties.py 6;
    • test_household_head_agreement_properties.py 3;
    • test_council_tax_reduction_claimant_properties.py 3;
    • policyengine_uk/tests/code_health 3,135 passed.
  • Checks:

    • check_fix_pr.py on the final title and body: PASS (17 changed executable tests);
    • ruff format --check ., ruff check . and ruff check --select F811,F821 policyengine_uk: clean;
    • git diff --check 6df59cdb4..HEAD: 86 trailing-whitespace hits, all in files Treat income derived from capital as capital in the legacy means tests #1995 brings from main (82 in parameters/gov/dwp/LHA/lha_published_rates_sources.csv, 4 in other YAML). 6df59cdb4..7381a46c7 has the same 86, and 7381a46c7..HEAD is clean.

Differentials (scratch)

  • Against 7381a46c7: 150 random households (538 people, 293 benefit units), no boarder or lodger rent and no sublet_income. They vary earnings, hours, pensions, savings, dividends, property income, finance costs, regions, tenure, HB claims and children. All 18 outputs agree exactly, including:
    • legacy_means_test_deducted_income_tax, pension_credit_income, housing_benefit_applicable_income, income_support_applicable_income and council_tax_reduction_applicable_income;
    • the HB, UC and CTR non-dependant deductions;
    • the HB, UC, CTR and PC awards, income tax and household net income.
  • Against 25bb191a0 (the merge without C1): 150 households (514 people, 304 benefit units). Paying units hold only the payer and maybe a partner, with is_claimant_or_partner supplied. All outputs agree.
  • The same run with inferred roles gave 25 people different values. Those two-adult paying units hold an adult the inference doesn't treat as a partner (couples 20 or more years apart, or adults presumed the claimant's child).
  • What real data reaches. FRS benefit units hold one adult or a couple plus dependants. C1 can reach a payer's dependent children and qualifying young people up to 19. It can also reach a couple the inference splits, where the dataset does not supply is_claimant_or_partner.

Mutations (scratch copy; the 29 YAML cases in the two boarder and lodger files, and the 12 properties at 10 examples)

Mutant YAML Properties
person.benunit.any(paid > 0) killed (4) killed (2)
drop the partner rule killed (2) killed (1)
HB family gate killed (2) killed (1)
UC family gate killed (2) survived
is_non_dependant_of_household_head family gate killed (4) killed (1)
uc_non_dep_receives_pension_credit family gate killed (1) survived
rent-a-room tax back on the capital side killed (3) killed (2)
with-earnings tax on the CTR routes killed (3) survived
nothing subtracted on the UC route killed (1) survived
drop the finance-cost cap killed (1) survived

The UC-route mutant first survived both: in the earlier cases the rent fell inside the personal allowance without pay. f7788dc97 adds the £30,000 lodger case, which kills it.

Judgment calls

  • Property 11 restated. "Adding a non-paying adult never raises the head's HB" is false in law, because of the bedroom and shared-accommodation effect above. The property now says that the deductions never fall, and that HB never rises unless the head's bedroom count does.
  • Property 7 with earnings checks the fall against a bound: between nil and 48% of the change in taxable rent-a-room income, computed from the inputs. Computing the exact extra tax from inputs alone would mean reimplementing income tax.
  • rent_a_room_income_tax_without_earnings returns nil early when no one has taxable rent-a-room income, so it skips the earnings branch. That is exact, because the income does not depend on earnings.
  • Module paths in the addendum follow the issue's layout. I guessed the schedule paths.

Skipped

  • Measured impact. No dataset here has these inputs, so the body labels the old figures with their commits and says what this head can move.
  • SSI 2012/319's non-dependant regulation. The law file doesn't hold it, so I quoted nothing from it.

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Thanks for this case. f7788dc97 takes liability to the householder person by person: the payer and the payer's partner leave the non-dependant count, and everyone else in their benefit unit stays in it. Your household now gives the son an HB non-dependant deduction of £64.35 a week, counted home-letting income of £4,160 and final Housing Benefit of £7,053.80, as you worked out (boarders_and_lodgers_non_dependants.yaml).

A lodger's children now count as the householder's non-dependants too, so in PolicyEngine they can take a head under 35 off HB's shared accommodation rate. Universal Credit's Sch 4 para 9(2)(g) leaves them out, and #2016, the fix for #2011, needs to apply that here. GitHub shows a conflict because #1995's branch has four newer commits, which we'll merge in next.

@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 adopted head f7788dc97a8d1ad4dc7aa136281ec0abadcaaf3e. C1 is resolved, but new C2 requires changes. Overall review remains PARTIAL because of the completion gaps below.

C2 — Exclude the commercial lodger's qualifying young person from the host's UC bedrooms. The new person-level rule in is_non_dependant_of_household_head.py includes the lodger's non-paying child/QYP. UC Schedule 4 paragraph 9(2)(d)/(g) excludes the commercial lodger and their child/QYP where nobody in the host's extended benefit unit is responsible. That young person therefore supplies no extra UC bedroom under paragraphs 8/10.

Executed 2026 case: private London tenant aged 40, wages £15,000, rent £18,000; unrelated commercial lodger aged 40, wages £20,000, paying the host £5,200, with their 18-year-old qualifying young person in their own benefit unit. The lodger parent has main responsibility; the host has none. Actual code counts two bedrooms, housing element £18,000, final UC £15,223.02. An otherwise identical source-rule-only child exclusion gives one bedroom, housing element £15,546, UC £12,769.02. Household income changes by the same £2,454/year. Host earnings avoid a benefit-cap-masked comparison.

Preserve the corrected non-paying-adult result, apply UC's child/QYP membership rule at the appropriate UC reader, and add a final-UC regression for this case. The deferred #2016 interaction does not resolve the current head. HB uses its own definition; I am not asserting the separate HB child observation is wrong using UC law.

Validation: the corrected adult-son case now gives HB £7,053.80 and deduction £3,346.20, resolving C1. 87 of 88 selected checks passed, with zero failures; one changed HB property was unfinished at the single 540-second timeout, and no exact-head hosted test completion is available. Scottish pension-age person-level parity corroboration also remains incomplete: the actual #402 addendum explicitly leaves the SSI 2012/319 module pending/unquoted, without supported encoded-correct corroboration. This is an evidence gap, not proof that an existing module is absent or wrong.

Only #1995's older 7381a46c7 is integrated here; its current fixes and the declared stack/readiness conditions also need to be accounted for before final approval.

@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

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Picking this up for the UK hub as brief 1016, which replaces brief 989. Reply here if you're mid-change and I'll stop.


Generated by Claude Code

…it unit

UC Regs 2013 Sch 4 para 9(2)(g) leaves out of the renter's non-dependants a
child or qualifying young person for whom no one in the renter's extended
benefit unit is responsible. A boarder or lodger and, in the model, their
partner leave that unit under para 9(2)(d), so their children and qualifying
young people leave it too.

is_uc_non_dependant_of_household_head applies that rule on top of
is_non_dependant_of_household_head, taking the claimant and partner of a
child's own benefit unit as responsible for them. LHA_allowed_bedrooms,
lha_renter_has_non_dependant and uc_non_dep_deductions read it; Housing
Benefit and council tax reduction keep the shared flag.
lha_renter_has_non_dependant now counts every Universal Credit non-dependant
of another family, not only its claimants and partners, so a lodger's
non-paying adult son takes a householder under 35 off the shared
accommodation rate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QmsZJW5Q229j9RMjeKuoC2
Two files conflicted.

legacy_benefits_home_letting_income.py: #1995 moved the sub-tenant rule
into a helper, home_letting_income, so that council tax reduction can apply
it to its own applicant and partner (council_tax_reduction_home_letting_income).
This branch had added the rent boarders and lodgers pay the household head.
The helper now holds both parts, and each reader passes the people whose
receipts count and its pension-age test: the legacy reader the benefit
unit's claimant and partner with State Pension age, the council tax
reduction reader the applicant and partner with council_tax_reduction_pensioner.
A household head who applies alone for council tax reduction therefore
counts the rent boarders and lodgers pay her there, but not in her benefit
unit's legacy measure.

council_tax_reduction_applicable_income.py: #1995 floors the counted
members' deducted income tax at nil; this branch subtracts, where the scheme
does not count the rent, the tax the rent would bear without earnings. The
formula subtracts first and floors the result, so the deduction never adds
tax to income.

Two YAML cases pin the council tax reduction reader: a head applying alone
with a lodger couple, and the same head in her own benefit unit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QmsZJW5Q229j9RMjeKuoC2
In Scottish council tax reduction for people over the qualifying age for
State Pension Credit, a lodger liable on a commercial basis falls within reg
3(2)(e); the model treats the lodger's partner as liable too. The lodger's
son and child, who pay nothing and belong to no family of the head's, count
as non-dependants under reg 3(1), and the model flags the son, aged 18 or
over, for a deduction.

Also name the actors in the new YAML comments.

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

Copy link
Copy Markdown
Collaborator Author

PR_TITLE.txt

Model rent from boarders, lodgers and sub-tenants for the householder

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_ADDENDUM.md

## Addendum: person-level commercial liability (Step 3)

PolicyEngine/policyengine-uk#2002 now takes commercial liability person by person. A boarder or lodger and their partner leave the non-dependant count, and nobody else in their benefit unit does. We change Step 3 below and add companion cases for the households below; the rest of the issue body still applies.

### Module paths and corpus citations

Corpus provisions (legislation.gov.uk, revised text):

- SI 2006/213 (HB Regs 2006) reg 3(1)-(3): https://www.legislation.gov.uk/uksi/2006/213/regulation/3
- SI 2006/213 reg 8(1): https://www.legislation.gov.uk/uksi/2006/213/regulation/8
- SI 2006/214 (HB (SPC) Regs 2006) reg 3(1)-(3): https://www.legislation.gov.uk/uksi/2006/214/regulation/3
- SI 2006/214 reg 8(1): https://www.legislation.gov.uk/uksi/2006/214/regulation/8
- SI 2013/376 (UC Regs 2013) Sch 4 para 9: https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/9
- SI 2013/376 Sch 4 para 10: https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/10
- SI 2013/376 Sch 2 para 1: https://www.legislation.gov.uk/uksi/2013/376/schedule/2/paragraph/1
- SI 2012/2885 reg 9(1)-(3): https://www.legislation.gov.uk/uksi/2012/2885/regulation/9
- SI 2012/2886 Schedule para 9(1)-(3): https://www.legislation.gov.uk/uksi/2012/2886/schedule/paragraph/9
- WSI 2013/3029 reg 9(1)-(3): https://www.legislation.gov.uk/wsi/2013/3029/regulation/9
- SSI 2021/249 reg 8(1)-(3): https://www.legislation.gov.uk/ssi/2021/249/regulation/8
- SSI 2012/319 (Council Tax Reduction (State Pension Credit) (Scotland) Regulations 2012) reg 3, as in force from 1 April 2026: https://www.legislation.gov.uk/ssi/2012/319/regulation/3

Modules, one per provision, in rulespec-uk's layout:

- `uk/regulations/uksi/2006/213/3.yaml` and `uk/regulations/uksi/2006/213/8.yaml`
- `uk/regulations/uksi/2006/214/3.yaml` and `uk/regulations/uksi/2006/214/8.yaml`
- `uk/regulations/uksi/2013/376/schedule/4/paragraph/9.yaml`
- `uk/regulations/uksi/2012/2885/9.yaml`, `uk/regulations/uksi/2012/2886/schedule/paragraph/9.yaml`, `uk/regulations/wsi/2013/3029/9.yaml`, `uk/regulations/ssi/2021/249/8.yaml`, `uk/regulations/ssi/2012/319/3.yaml`

The SSI 2012/319 module (Scottish pension-age CTR) encodes reg 3, quoted below.

### What changes from Step 3

Step 3 encodes the exclusion as a judgment on "a person who is liable to make payments on a commercial basis". It should take that judgment person by person, not for a whole benefit unit:

1. **The payer.** Each scheme leaves out of the non-dependants a person who pays the householder for board and lodging or for lodging under a commercial agreement (HB reg 3(2)(e)(i); HB (SPC) reg 3(2)(e)(i); UC Sch 4 para 9(2)(d); SI 2012/2885 reg 9(2)(e); SI 2012/2886 Sch para 9(2)(e); WSI 2013/3029 reg 9(2)(e); SSI 2021/249 reg 8(2)(d); SSI 2012/319 reg 3(2)(e)).
2. **The payer's partner.** HB reg 8(1)(b) and HB (SPC) reg 8(1)(b) treat "a person who is a partner of the person to whom sub-paragraph (a) applies" as liable to make payments in respect of a dwelling. Read with reg 3(2)(e)(i), that leaves the partner of a liable boarder or lodger out of the householder's non-dependants for Housing Benefit.
3. **Named assumption, UC and CTR: `partner_of_commercial_payer_is_liable`.** UC Sch 4 para 9 and the CTR regulations above contain no words treating a liable person's partner as liable (UC Sch 2 para 1 treats a claimant as liable for payments that a child they're responsible for, or the other member of a couple claiming as a single person, must make; it concerns the claimant's own liability, not a non-dependant's). The corpus does not compel the partner rule for UC or CTR. Encode it as a named assumption, separate from the HB judgment, so the encoding can run with it on or off. PolicyEngine makes the assumption because a couple's room usually binds both members and the data record no agreement.
4. **Nobody else in the payer's family.** A boarder's or lodger's non-paying adult son or daughter has no commercial liability, so HB reg 3(2)(e)(i) doesn't exclude them. HB reg 3(2)(e)(iii) doesn't reach them either: it covers "any other member of the household of the person to whom or to whose partner the claimant or the claimant's partner is liable to make payments", the household of the claimant's own landlord, not the payer's family. If they normally reside with the claimant, reg 3(1) makes them a non-dependant unless another sub-paragraph of reg 3(2) applies.
5. **A payer other than a claimant or partner**, such as a young person in the lodger's benefit unit, makes nobody else in that unit liable.
6. **Close relatives and non-commercial agreements.** As the issue says, reg 3(3) with reg 9(1) (HB), and reg 9(3) (CTR), keep such a person a non-dependant. In Scotland's pension-age scheme, SSI 2012/319 reg 3(3)(a) has the same effect.
7. **A payer's child or qualifying young person, for UC.** Under UC Sch 4 para 9(2)(g), DWP leaves out of the renter's non-dependants "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible". The payer leaves the extended benefit unit under para 9(2)(d), and so does the payer's partner under the named assumption. Where the payer or partner alone has responsibility for a child or qualifying young person, nobody in the extended benefit unit has, and the child is not the renter's non-dependant, so the renter gets no bedroom for them under para 10. A child whose responsible adult pays nothing, such as a non-paying daughter's son, stays a non-dependant, because that adult belongs to the extended benefit unit (para 9(1)(c)). None of the HB or CTR provisions quoted here has words like para 9(2)(g).

### Law (verbatim)

Source: legislation.gov.uk revised text, fetched 2 November 2026, amendment markers removed; UC Sch 4 paras 9 and 10 and SSI 2012/319 reg 3 fetched 3 November 2026, SSI 2012/319 as in force from 1 April 2026. Text © Crown copyright, reproduced under the Open Government Licence v3.0.

**HB Regs 2006 (SI 2006/213) reg 3(1), (2)(e) and (3):**

> 3.—(1) In these Regulations, “non-dependant” means any person, except someone to whom paragraph (2) applies, who normally resides with a claimant or with whom a claimant normally resides.

> (e)subject to paragraph (3)—
> (i)any person who is liable to make payments on a commercial basis to the claimant or the claimant's partner in respect of the occupation of the dwelling;
> (ii)any person to whom or to whose partner the claimant or the claimant's partner is liable to make payments on a commercial basis in respect of the occupation of the dwelling; or
> (iii)any other member of the household of the person to whom or to whose partner the claimant or the claimant's partner is liable to make payments on a commercial basis in respect of the occupation of the dwelling;

> (3) Sub-paragraphs (d) and (e) of paragraph (2) shall not apply to any person who is treated as if he were not liable to make payments in respect of a dwelling under paragraph (1) of regulation 9 (circumstances in which a person is to be treated as not liable to make payments in respect of a dwelling).

HB (SPC) Regs 2006 (SI 2006/214) reg 3(1) to (3) have the same words.

**HB Regs 2006 reg 8(1)(a) and (b):**

> 8.—(1) Subject to regulation 9 (circumstances in which a person is to be treated as not liable to make payments in respect of a dwelling), the following persons shall be treated as if they were liable to make payments in respect of a dwelling—
> (a)the person who is liable to make those payments;
> (b)a person who is a partner of the person to whom sub-paragraph (a) applies;

HB (SPC) Regs 2006 reg 8(1)(a) and (b) have the same words.

**UC Regs 2013 (SI 2013/376) Sch 4 para 9(1), (2)(a), (d) and (g):**

> (1) For the purposes of this Schedule, the members of a renter's extended benefit unit are—
> (a)the renter (or joint renters);
> (b)any child or qualifying young person for whom the renter or either joint renter is responsible; and
> (c)any person who is a non-dependant.

> (2) A person is a non-dependant if the person normally lives in the accommodation with the renter (or joint renters) and is none of the following—
> (a)a person within sub-paragraph (1)(a) or (b);

> (d)a person who is liable to make payments on a commercial basis in respect of the person's occupation of the accommodation (whether to the renter, joint renters or another person);

> (g)a child or qualifying young person for whom no-one in the renter’s extended benefit unit is responsible.

**UC Regs 2013 Sch 4 para 10(1)(a) and (c):**

> (1) A renter is entitled to one bedroom for each of the following categories of persons in their extended benefit unit—
> (a)the renter (or joint renters);

> (c)a non-dependant who is not a child;

**UC Regs 2013 Sch 2 para 1(1):**

> 1.—(1) A claimant is to be treated as liable to make payments where the person who is liable to make the payments is—
> (a)any child or qualifying young person for whom the claimant (or if the claimant is a member of a couple, either member) is responsible; or
> (b)in the case of a claimant who is a member of a couple claiming as a single person, the other member of the couple.

**SI 2012/2885 reg 9(1) and (2)(e):**

> 9.—(1) In these Regulations, “non-dependant” means any person, except someone to whom paragraph (2) applies, who normally resides with an applicant or with whom an applicant normally resides.

> (e)subject to paragraph (3), any person who is liable to make payments on a commercial basis to the applicant or the applicant’s partner in respect of the occupation of the dwelling;

SI 2012/2886 Schedule para 9(2)(e) and WSI 2013/3029 reg 9(2)(e) have the same words. SSI 2021/249 reg 8(2)(d):

> (d)subject to paragraph (3), any person who is liable to make payments on a commercial basis to the applicant or any partner of the applicant in respect of the occupation of the dwelling, ...

**SSI 2012/319 reg 3(1), (2)(a), (2)(e) and (3)(a):**

> (1) In these Regulations, “non-dependant” means any person, except someone to whom paragraph (2) applies, who normally resides with the applicant or with whom the applicant normally resides.
> (2) This paragraph applies to—
> (a)any member of the applicant's family;

> (e)subject to paragraph (3), any person who is liable to make payments on a commercial basis to the applicant or any partner of the applicant in respect of the person's occupation of the dwelling;

> (3) Excepting persons to whom paragraph (2)(a) to (c) and (f) to (h) refer, a person to whom any of the following sub-paragraphs applies is a non-dependant for the purpose of these Regulations—
> (a)a person who resides with another person to whom the first mentioned person is liable to make payments in respect of the dwelling and either—
> (i)that other person is a close relative of the first mentioned person or of the first mentioned person's partner; or
> (ii)the tenancy or other agreement between them is other than on a commercial basis;

### Required outputs for the person-level test

For each person who normally resides with the claimant (applicant) but belongs to another family:

1. `liable_on_commercial_basis` (judgment, per person): true for a person liable under a commercial agreement to pay the claimant or the claimant's partner for their occupation.
2. `treated_as_liable` (HB and HB (SPC) only, per person): true for a person within reg 8(1)(a), or for the partner of such a person (reg 8(1)(b)).
3. `partner_of_commercial_payer_is_liable` (UC and CTR, named assumption, per person): true for the partner of a person for whom output 1 holds. The corpus doesn't give it.
4. `excluded_from_non_dependants` (per person, per scheme): output 1, or output 2 (HB), or output 3 (UC and CTR, under the assumption); none of them where reg 3(3) / reg 9(3) applies.
5. `non_dependant` (per person, per scheme): normally resides with the claimant, and outputs 4 and the other reg 3(2) / para 9(2) exclusions are all false.
6. `no_one_in_extended_benefit_unit_responsible` (UC only, per person, Sch 4 para 9(2)(g)): true for a child or qualifying young person for whom no member of the renter's extended benefit unit is responsible, such as one for whom only a person excluded by output 4 has responsibility.

Every output describes one person, and none describes a benefit unit as a whole.

### Companion cases

We worked these expectations by hand from the provisions above. The deduction figures take the 2026-27 Housing Benefit non-dependant deduction bands as PolicyEngine records them from DWP's published rates (£64.35 a week for gross weekly income from £279 to under £365); we haven't quoted reg 74 itself.

| Case | Expected |
|---|---|
| HB, Scotland, 2026-27. Claimant (60) with an eligible rent of £10,400 a year. Unrelated lodger (50) pays £5,200 a year (£100 a week) under a commercial agreement. The lodger's son (30), in the lodger's family, pays nothing, earns £15,600 a year (£300 a week) over 20 hours a week, and has no exemption. | Lodger: `liable_on_commercial_basis` true; not a non-dependant. Son: `liable_on_commercial_basis` false, `treated_as_liable` false (he isn't the lodger's partner); reg 3(2)(e)(iii) does not apply (it concerns the landlord's household); `non_dependant` true. Deduction £64.35 a week, £3,346.20 a year. Countable income from the lodger (Sch 5 para 22): (100 − 20) × 52 = £4,160 a year. |
| UC, the same household, claimant renting. | Lodger: excluded (Sch 4 para 9(2)(d)). Son: `non_dependant` true. |
| HB, working age. A lodger couple: one member pays £120 a week, the other nothing. | Payer: excluded (reg 3(2)(e)(i)). Partner: `treated_as_liable` true (reg 8(1)(b)); excluded. Neither counts as a non-dependant. Countable (Sch 5 para 22, aggregate of "that person or a member of his family"): 120 − 20 = £100 a week. |
| HB (SPC), PC and CTR pensioner. The same couple. | Neither counts as a non-dependant (HB (SPC) reg 8(1)(b); CTR under the named assumption). Disregard on "the amount paid by that person" (HB (SPC) Sch 5 para 10; SPC Regs Sch IV para 9): payer 120 − 20 = £100 a week; the partner pays nothing and adds no disregard. Countable £100 a week. |
| UC and CTR. The same couple. | Payer excluded. Partner excluded only under `partner_of_commercial_payer_is_liable`; with the assumption off, the partner counts as a non-dependant. |
| UC, London (Inner South East London), 2026-27. Renter (40) with a private rent of £18,000 a year and earnings of £15,000. Unrelated lodger (40) earns £20,000 and pays the renter £5,200 a year under a commercial agreement. The lodger's son (18), a qualifying young person in non-advanced education, lives in the lodger's family; the lodger has main responsibility for him. | Lodger: excluded (Sch 4 para 9(2)(d)). Son: `liable_on_commercial_basis` false; `no_one_in_extended_benefit_unit_responsible` true (the lodger, who alone has responsibility for him, falls outside the extended benefit unit); `non_dependant` false (para 9(2)(g)). The extended benefit unit holds the renter alone, so one bedroom (para 10(1)(a)). PolicyEngine gives a housing element of £15,546 and Universal Credit of £12,769.02; counting the son as a non-dependant would give two bedrooms, a housing element of £18,000 and Universal Credit of £15,223.02. |
| UC, London, 2026-27. Renter (62) with a private rent of £20,000 a year. The renter's daughter (36) pays nothing and lives there with her son (17), a qualifying young person, in her own family. | Daughter: `non_dependant` true. Grandson: `no_one_in_extended_benefit_unit_responsible` false (his mother belongs to the extended benefit unit as a non-dependant, para 9(1)(c)); `non_dependant` true. Three bedrooms (para 10(1)(a) and (c)). |
| CTR, Scotland, pension age (SSI 2012/319), 2026-27. Applicant (70) with a State Pension of £10,000. Unrelated lodger (50) pays £5,200 a year under a commercial agreement; the lodger's partner (50) pays nothing; their son (30) pays nothing and earns £5,200 over 20 hours a week; their child (10). | Lodger: `liable_on_commercial_basis` true; excluded (reg 3(2)(e)). Partner: excluded only under `partner_of_commercial_payer_is_liable`. Son and child: `liable_on_commercial_basis` false; they sit in the lodger's family, not the applicant's (reg 3(2)(a)); `non_dependant` true (reg 3(1)). |

### `review_finding`

```yaml
review_finding:
  scope: commercial-liability non-dependant exclusion (Step 3)
  instruments:
    - SI 2006/213 regs 3, 8
    - SI 2006/214 regs 3, 8
    - SI 2013/376 Sch 4 paras 9, 10
    - SI 2012/2885 reg 9
    - SI 2012/2886 Sch para 9
    - WSI 2013/3029 reg 9
    - SSI 2021/249 reg 8
    - SSI 2012/319 reg 3
  finding: >
    Take commercial liability per person. The schemes leave out of the
    non-dependants a boarder or lodger liable to pay the claimant on a
    commercial basis. Under HB and HB (SPC) reg 8(1)(b), their partner counts
    as liable and leaves too. For UC and CTR, treat the partner as liable only
    under the named assumption partner_of_commercial_payer_is_liable, which
    the corpus does not compel. The exclusion reaches no one else in the
    payer's family: reg 3(1) makes a non-paying adult son or daughter a
    non-dependant, and reg 3(2)(e)(iii) concerns the landlord's household,
    not the payer's. For UC only, Sch 4 para 9(2)(g) also leaves out a child
    or qualifying young person for whom only such a payer or partner has
    responsibility, since nobody in the renter's extended benefit unit then
    has any.
  required_outputs:
    - liable_on_commercial_basis (per person, judgment)
    - treated_as_liable (per person, HB and HB (SPC) reg 8(1)(a)-(b))
    - partner_of_commercial_payer_is_liable (per person, UC and CTR, assumption)
    - excluded_from_non_dependants (per person, per scheme)
    - non_dependant (per person, per scheme)
    - no_one_in_extended_benefit_unit_responsible (per person, UC Sch 4 para 9(2)(g))
  companion_cases:
    - lodger_with_non_paying_adult_son_scotland_2026
    - lodger_couple_one_pays_working_age
    - lodger_couple_one_pays_pension_age
    - lodger_with_qualifying_young_person_london_2026
    - non_paying_daughter_with_qualifying_young_person_london_2026
    - lodger_family_scotland_pension_age_2026
  pending: []
```

### Completion boundary

The encoding finishes this addendum's part of #402 when:

- the modules above give the five outputs for each person, with verbatim proof excerpts from the quoted text;
- the partner rule for UC and CTR exists only as the named assumption, and the companion cases pass with it on and show the partner as a non-dependant with it off;
- the companion cases above pass, including the son as the claimant's non-dependant with a £64.35 weekly deduction band;
- the UC module gives `no_one_in_extended_benefit_unit_responsible`, leaves the lodger's qualifying young person out of the extended benefit unit and keeps the non-paying daughter's son in it;
- the SSI 2012/319 module gives the five outputs from reg 3's quoted words and passes the Scottish pension-age companion case.

Neither this addendum nor the issue's plan covers the deduction amounts themselves (HB reg 74, the UC housing cost contribution and the CTR schemes' deduction rules).

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

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_BODY.md

## Summary

This PR stacks on #1995, which stops counting income from capital in the legacy means tests and adds `legacy_benefits_home_letting_income` for rent from letting part of the home. It includes #1995's head `7ba0ea7af`.

**Stack and readiness.** `main` ← #1995 (`legacy-capital-derived-income`, `7ba0ea7af`) ← this PR. This PR lands after #1995; its base then moves to `main`.

This PR models the rent a householder receives from boarders and lodgers who live in the household. The Family Resources Survey records that rent only on the payer, as CVPAY (PolicyEngine/policyengine-uk-data#506 adds it as `rent_paid_as_boarder` and `rent_paid_as_lodger`). This PR also routes `sublet_income` (rent from a sub-tenant outside the household) through income tax.

## What changes

- **Who receives it.** `rent_from_boarders_and_lodgers` gives the household head (`is_resolved_household_head`) the rent that household members outside the head's benefit unit pay.
- **Income tax: rent-a-room relief.** PolicyEngine charges no income tax on receipts up to £7,500 a year. Above that, it charges the excess as property income, assuming the s. 800 election. The limit halves where someone else in the household also receives rent from the home. The receipts get no £1,000 property allowance.
- **Legacy means tests.** Income Support, Housing Benefit, Pension Credit and council tax reduction count the rent less these statutory disregards:
  - boarders: £20 a week plus half the excess, for each boarder;
  - lodgers: £20 a week, per person at pension age and per lodger family at working age (£4 before April 2008).

  They deduct the tax on counted letting income like the tax on other counted income: `legacy_means_test_income_tax` puts the rent-a-room share of property income tax on the counted side. #1995's `home_letting_income` now holds both the sub-tenant rule and this PR's boarder and lodger rules, and each reader passes the people whose receipts count: `legacy_benefits_home_letting_income` the benefit unit's claimant and partner, under the State Pension age test; `council_tax_reduction_home_letting_income` (#1995) the council tax reduction applicant and partner, under `council_tax_reduction_pensioner`. So councils count the rent boarders and lodgers pay a household head who applies alone, though her benefit unit's legacy measure holds none of it.
- **Where a programme doesn't count the rent.** Universal Credit doesn't count it, and deducts only the tax on earnings (`uc_income_tax_on_earnings`, which takes earnings as the lowest slice). The rent changes that deduction only through the cap on property finance-cost relief. Council tax reduction leaves the rent out on the Universal Credit route (#1995's `universal_credit_route`) and in the Scottish working-age scheme. There PolicyEngine treats the rent as uncounted income, as #1995 treats income from capital. It leaves out of the deducted tax the tax the rent would bear without earnings (`rent_a_room_income_tax_without_earnings`), and keeps the extra tax that earnings cause on it. The formula subtracts that tax from the counted members' deducted income tax and then applies #1995's floor at nil, so the deduction never adds tax to income.
- **Tax credits** count the taxable rent-a-room income (`tax_credits_current_year_income`).
- **Non-dependants.** A boarder or lodger pays the householder on a commercial basis, so PolicyEngine leaves them out of the householder's non-dependants for UC, HB and CTR (every local CTR scheme in the model reads this flag). PolicyEngine decides that liability person by person. The payer and the payer's partner leave the non-dependant count, and anyone else in their benefit unit who pays nothing, such as an adult son, stays in it (`pays_rent_to_householder`, `benunit_is_liable_for_household_rent`).
- **Universal Credit's extended benefit unit.** For Universal Credit, PolicyEngine also leaves out of the householder's non-dependants a boarder's or lodger's child or qualifying young person, for whom nobody in the householder's extended benefit unit has responsibility (UC Sch 4 para 9(2)(g); `is_uc_non_dependant_of_household_head`). Such a child supplies no bedroom (`LHA_allowed_bedrooms`), no housing cost contribution (`uc_non_dep_deductions`), and doesn't take a householder under 35 off the shared accommodation rate (`lha_renter_has_non_dependant`). A child whose parent pays nothing stays a non-dependant. `lha_renter_has_non_dependant` now counts every Universal Credit non-dependant of another family, not only its claimants and partners, so a lodger's non-paying adult son takes a single householder under 35 off the UC shared accommodation rate, as he already did for Housing Benefit. The Housing Benefit and CTR formulas keep `is_non_dependant_of_household_head`.
- **Household income.** Household market and net income leave out rent that members of a household pay each other. Market income, household market income and HBAI net income now count `sublet_income`, which comes from outside the household, alongside `property_income_after_finance_costs`.

## The law

We read these provisions in their revised text on legislation.gov.uk on 1 October 2026, the non-dependant provisions on 2 November 2026, and UC Sch 4 paras 8 to 10 and SSI 2012/319 reg 3 (as in force from 1 April 2026) on 3 November 2026.

| Regime | Rule | Provisions |
|---|---|---|
| Income tax | Rent-a-room receipts are "in respect of the use of furnished accommodation in a residence ... or in respect of goods or services supplied in connection with that use", in the individual's only or main residence. Not charged up to the limit. Above it, on an election, income tax charges the receipts less the limit, with no expenses deducted. Limit: £3,250 from 1992-93, £4,250 from 1997-98, £7,500 from 2016-17; halved where the exclusive receipts condition fails. They don't count as relievable receipts for the property allowance. | ITTOIA 2005 ss. 784-802, 783BB(2); SI 2015/1539 arts. 1(2), 2; SI 1996/2953 art. 2; F(No. 2)A 1992 Sch. 10 |
| Universal Credit | Reg 66(1) does not list rent as unearned income. It gives a closed list, and (m) covers only income taxable under ITTOIA Part 5. ADM H5112: rent from "a sub-tenant or boarder is not defined as income for the purposes of UC". | SI 2013/376 regs 66, 72(3) |
| Housing Benefit, working age | Counted as income other than earnings, less: per boarder, £20 plus 50% of the excess (Sch 5 para 42); other occupier, £20 on the aggregate paid by "that person or a member of his family" (para 22, £20 from 7 April 2008, SI 2007/2618 reg 11(12)). Para 1 disregards tax on counted income. | SI 2006/213 reg 40, Sch 5 paras 1, 21, 22, 42 |
| Housing Benefit, pension age | Counts as income board and lodging, and "any payment of rent made to a claimant who ... occupies part of the property". Disregards: per boarder £20 plus 50%; £20 of "the amount paid by that person". | SI 2006/214 reg 29(1)(p), (v), Sch 5 paras 9, 10 |
| Pension Credit | Prescribed income, with the same disregards as pension-age HB. | SPCA 2002 s. 15(1)(j); SI 2002/1792 reg 15(5)(e), (i), reg 17, Sch IV paras 8, 9 |
| Council tax reduction | The same words in England (pensioners, and the working-age default), Wales and Scotland (pension age). The Scottish working-age scheme's closed income list has no such income. | SI 2012/2885 Sch 1 para 16(1)(p), (v), Sch 5 paras 9, 10; SI 2012/2886; WSI 2013/3029; SSI 2012/319; SSI 2021/249 reg 57 |
| Income Support | £20 plus 50% per boarder since 9 April 1990 (SI 1990/547 reg 22(c); current words SI 1994/527 reg 9(4)); £20 per occupier and family (£4 before April 2008). | SI 1987/1967 Sch 9 paras 1, 19, 20 |
| Tax credits | Property income disregards profits sheltered by rent-a-room relief. | SI 2002/2006 reg 11(2) |
| UC earned income | Deducts "income tax ... paid in respect of the employment", not tax on property receipts. | SI 2013/376 reg 55(5)(b) |
| CTR, UC recipients | For a working-age applicant with a UC award, the schemes take income from the Secretary of State's UC assessment; the Welsh scheme doesn't treat a person with a UC award as a pensioner. | SI 2012/2886 Sch para 37(1); WSI 2013/3029 reg 3, Sch 6 para 9; SSI 2012/303 reg 26(1) |
| Non-dependants | Each scheme leaves out a person who pays on a commercial basis. UC's words: "a person who is liable to make payments on a commercial basis in respect of the person's occupation of the accommodation". HB treats "a person who is a partner of the person to whom sub-paragraph (a) applies" as liable (reg 8(1)(b)); UC and the CTR schemes have no such words. Reg 3(2)(e)(iii) concerns "the household of the person to whom ... the claimant ... is liable to make payments", the landlord's household, not the payer's. | SI 2013/376 Sch 4 para 9(2)(d); SI 2006/213 reg 3(2)(e)(i), (3), reg 8(1); SI 2006/214 reg 3, reg 8(1); SI 2012/2885 reg 9(2)(e), (3); SI 2012/2886 Sch para 9; WSI 2013/3029 reg 9; SSI 2021/249 reg 8(2)(d) |
| UC extended benefit unit | The renter's extended benefit unit holds "the renter (or joint renters)", "any child or qualifying young person for whom the renter or either joint renter is responsible" and "any person who is a non-dependant". A non-dependant is none of the listed people, among them "a child or qualifying young person for whom no-one in the renter's extended benefit unit is responsible". The renter gets one bedroom for "a non-dependant who is not a child", among others. | SI 2013/376 Sch 4 paras 8, 9(1), 9(2)(d), (g), 10(1) |
| Non-dependants, Scotland at pension age | A non-dependant is "any person, except someone to whom paragraph (2) applies, who normally resides with the applicant". Paragraph (2) covers "any member of the applicant's family" and "any person who is liable to make payments on a commercial basis to the applicant or any partner of the applicant in respect of the person's occupation of the dwelling". Under reg 3(3)(a), a payer who "resides with another person to whom the first mentioned person is liable to make payments" stays a non-dependant where that person is "a close relative of the first mentioned person or of the first mentioned person's partner", or the agreement runs "other than on a commercial basis". | SSI 2012/319 reg 3(1), (2)(a), (2)(e), (3)(a) |

## Modelling choices

- **The receipt goes to the household head** (`is_resolved_household_head`: the FRS household reference person in the data). The FRS asks the CVPAY questions only about people not related to the HRP, so payers have no family relation to the householder. The model treats every such arrangement as commercial.
- **Person-by-person liability, with an assumed partner rule.** `pays_rent_to_householder` holds for a person outside the head's benefit unit who pays, and for a claimant or partner in a benefit unit where a claimant or partner pays. HB Regs 2006 and HB (SPC) Regs 2006 reg 8(1)(b) treat the partner of a liable person as liable. UC and the CTR schemes have no such words, and the data hold no agreement, so PolicyEngine applies the same rule in every scheme, assuming a couple's room binds both members. A payer other than a claimant or partner, such as a qualifying young person, makes nobody else liable.
- **Who has responsibility for a child, for Universal Credit.** PolicyEngine takes the claimant and partner of a child's own benefit unit as the people responsible for the child, as `uc_non_dep_deduction_exempt` already does. Where that benefit unit has no claimant or partner, PolicyEngine can't tell who has responsibility, and keeps the child a non-dependant. A claimant or partner never counts as anyone's child.
- **Above the limit, PolicyEngine assumes the s. 800 election.** Without it, the taxable profit equals receipts less actual expenses, which the data can't measure. PolicyEngine treats all receipts as payments for furnished accommodation.
- **The exclusive receipts condition** fails, in the model, when two members of a household both receive rent-a-room receipts.
- **Tax on counted letting income.** PolicyEngine sets `rent_a_room_income_tax` to the pro rata share of property income tax that falls on taxable rent-a-room income, because nothing in the law orders the two. `legacy_means_test_income_tax` (#1995) takes the residential finance-cost reduction off the tax on property income first and shares the other Step 6 reductions pro rata. This PR moves the rent-a-room share from the capital side to the counted side.
- **Finance-cost cap.** By convention, PolicyEngine takes the finance-cost reduction off no more than the property income tax left on the capital side (`property_income_tax − rent_a_room_income_tax`), so the capital side never goes negative. Any excess joins the reductions shared pro rata. ITTOIA 2005 s. 274AA limits the relief by property profits, which include taxable rent-a-room income, so it can exceed the tax on the rest of the property income.
- **Tax after reductions.** `rent_a_room_income_tax_after_reductions` reads the same split as `legacy_means_test_income_tax` (`legacy_means_test_tax_split`), after the finance-cost reduction, so for a person whose only counted income comes from rent-a-room receipts, the two give the same figure.
- **Uncounted rent in CTR.** On the routes that do not count the rent, `rent_a_room_income_tax_without_earnings` reads `rent_a_room_income_tax_after_reductions` on the same branch without earnings, with the same earnings sources and early return, as #1995's `legacy_means_test_uncounted_income_tax_without_earnings`.
- **Uprating.** The two inputs use per-capita GDP, as `property_income` and `sublet_income` do. PolicyEngine has no national private rent index among its parameters.
- **Weeks per year.** The inputs hold annual amounts, and the weekly disregards divide them by 52. policyengine-uk-data annualises weekly FRS amounts with 365.25 / 7, so a weekly payment reaches the disregards about 0.34% higher. The same gap applies to every weekly-tested FRS amount (PolicyEngine/policyengine-uk-data#531).
- **Sub-tenants.** `sublet_income` keeps #1995's single-occupier disregard.

## Invariants and tests

`test_boarder_lodger_rent_properties.py` (Hypothesis) generates households with one or two members in the head's unit and up to two paying units. A paying unit holds one or two claimants or partners and possibly a third adult, neither claimant nor partner, each paying or not, with roles supplied (`is_claimant_or_partner`). It varies working and pension age, earnings, sublet income, tenure, region and a Housing Benefit claim, for 2025 and 2026. It checks:

1. **Conservation.** The head receives exactly what members outside the head's unit pay, and nobody else receives anything.
2. **Rent-a-room bounds.** 0 ≤ relief ≤ receipts; the limit equals £3,750 exactly when the person and someone else in the household both have receipts, and £7,500 otherwise; taxable income = max(0, receipts − limit).
3. **Closed form for the disregards.** Counted home-letting income equals the statutory arithmetic, which the test computes independently, and lies between nil and the rent received.
4. **Monotone.** More rent from an existing payer never lowers taxable rent-a-room income or counted home-letting income, and never raises IS, HB, Pension Credit or CTR.
5. **Boarders keep more.** At pension age, the same amount counts no more as board and lodging than as lodging only.
6. **Invariance.** UC unearned income and household market income do not depend on rent that household members pay each other.
7. **Rent a programme doesn't count.** Without property finance costs, UC earned income does not change with the rent. On the two CTR routes that leave the rent out (the Universal Credit route, and the Scottish working-age scheme), income does not change with the rent where the applicant and partner have no earnings. With earnings, it falls by between nil and the top rate (48%) on the change in taxable rent-a-room income.
8. **Tax bounds.** 0 ≤ `legacy_means_test_income_tax` ≤ income tax; 0 ≤ `rent_a_room_income_tax_after_reductions` ≤ `rent_a_room_income_tax`; the capital side after reductions inside `legacy_means_test_income_tax` never goes negative (read through `legacy_means_test_tax_split`); and for a person whose only counted income comes from rent-a-room receipts, `rent_a_room_income_tax_after_reductions` equals `legacy_means_test_income_tax` (a separate generator varies savings, dividends, property income, finance costs and other tax credits in England and Scotland).
9. **Person-level liability.** `pays_rent_to_householder` equals, for every person, the predicate the test computes from the inputs.
10. **Where a non-paying adult lives.** Moving a non-paying adult, neither claimant nor partner, out of the payer's unit into one of their own leaves the head's HB and CTR non-dependant deductions unchanged.
11. **Adding a non-paying adult.** Adding such an adult never lowers the head's HB non-dependant deductions, and never raises the head's HB unless it raises the head's bedroom count. PolicyEngine gives a non-dependant a bedroom under the size criteria, so they can take a young single head off the shared accommodation rate: a 25-year-old head's HB rises from £4,925.44 to £8,000.

`test_uc_lodger_child_extended_benefit_unit_properties.py` (Hypothesis, 15 examples) generates a household head who claims Universal Credit, with possibly a partner and children of their own, one or two commercial lodger units (each with possibly a partner, a non-paying adult and a child), and possibly a non-paying family with a child, across four regions, two tenures and 2025 and 2026. It keeps everyone in the lodger units under State Pension age, so no lodger family receives Pension Credit. It checks:

12. **A commercial lodger's child.** Adding a child under 16, or a qualifying young person aged 16 to 18 in non-advanced education, to the first lodger unit leaves the head's UC bedrooms (`LHA_allowed_bedrooms`), housing element (`uc_housing_costs_element`) and non-dependant deductions (`uc_non_dep_deductions`) unchanged, and the added person never counts as the head's UC non-dependant.

`test_household_head_agreement_properties.py` and `test_rent_of_sharers_boarders_and_lodgers_properties.py` pin the non-dependant flag against the families liable for rent. Each now computes liability to the householder person by person from the inputs, in `test_every_programme_reads_one_head` and `test_non_dependants` respectively; nothing else in those files changes.

We worked the YAML cases by hand from the provisions. They cover:
- **Income tax:** within and above the limit; the 2015-16 limit; the halved limit; the property allowance not applying; a payer inside the head's unit; tax credits; taxable rent-a-room income reaching total income, adjusted net income and post-tax income once.
- **Disregards:** a lodger, a boarder, a boarder under £20, a lodger couple at pension age (£40 disregarded) and working age (£20); a boarder and a lodger together; the 2007 £4 lodger disregard; UC unchanged; household market income unchanged; tax on counted letting income deducted, including when the formula shares a tax reduction pro rata with tax on capital income; the finance-cost reduction capped at the property tax on income from capital; UC earned income not reduced by tax on the rent.
- **Council tax reduction:** the Universal Credit route and the Scottish working-age scheme, each with pay of £30,000 and a lodger paying £15,000 (income falls by the rent's whole tax, £1,500 at the 20% basic rate in England and £1,575 at Scotland's 21% intermediate rate, because without the pay the £7,500 taxable falls inside the personal allowance), and each without pay (no change); Welsh CTR for a UC recipient without the rent; a household head of 70 who applies alone, sharing a benefit unit with a young couple and their baby, with a lodger couple each paying £3,640 (councils count £5,200, the per-person pension-age disregard, and award CTR of £1,035.20, while the couple's legacy measure counts nothing), and the same head in her own benefit unit (£5,200 in both measures).
- **Non-dependants:** a solitary paying lodger and a solitary adult paying nothing, under UC, HB and CTR; the adult-son case below through final Housing Benefit, and the same family through UC and CTR; a lodger couple where only one pays, at working age (per-family disregard) and pension age (per-person disregard); a son who pays and his claimant mother who does not; a lodger's son keeping the Pension Credit exemption from the UC housing cost contribution; rent entered for a member of the head's benefit unit; Scottish pension-age CTR, where the lodger and partner leave the non-dependants and the lodger's son and child stay (SSI 2012/319 reg 3).
- **Universal Credit's extended benefit unit:** the lodger's qualifying young person below through final Universal Credit; the adult-son household, where the son stays the head's UC non-dependant and HB stays at £7,053.80 with a deduction of £3,346.20; a non-paying daughter whose qualifying young person (17) stays a non-dependant, giving the head three bedrooms, a housing element of £18,841.40 and UC of £16,064.42; a lodger's non-paying adult son taking a head of 25 off the shared accommodation rate (two bedrooms, housing element £16,841.40, UC £14,064.42); and a lodger's child (10) leaving that head on it (housing element £7,800, UC £5,023.02).

**The adult-son case** (Scotland, 2026-27). A household head of 60 has eligible rent of £10,400 a year. An unrelated lodger of 50 pays the head £5,200, and the lodger's son of 30, in the lodger's benefit unit, pays nothing and earns £15,600 over 20 hours. The son counts as the head's non-dependant, with an HB deduction of £64.35 a week, £3,346.20 a year. Counted home-letting income comes to £4,160, and final Housing Benefit to £7,053.80. Before the person-level rule, PolicyEngine read the whole family as commercial payers and paid Housing Benefit of £10,400.

**The lodger's qualifying young person** (London, Inner South East London, 2026-27). A private tenant of 40 earns £15,000, pays rent of £18,000 and claims Universal Credit. An unrelated commercial lodger of 40 earns £20,000 and pays the tenant £5,200; the lodger's son of 18, a qualifying young person in non-advanced education, lives in the lodger's benefit unit. Nobody in the tenant's extended benefit unit has responsibility for him, so the tenant gets one bedroom, a housing element of £15,546 (the one-bedroom rate) and Universal Credit of £12,769.02. At `f7788dc97`, PolicyEngine counted him as a non-dependant aged 16 or over and gave two bedrooms, a housing element of £18,000 and Universal Credit of £15,223.02; the case fails there on all three.

**Tests at this head** (`a107b225c`), from clean runs with `uv sync --frozen --extra dev`:
- YAML: `gov/dwp/legacy_means_tests/` 115 passed (`boarders_and_lodgers.yaml` 22 and `boarders_and_lodgers_non_dependants.yaml` 15 among them); `gov/hmrc/income_tax/rent_a_room/` 7; `rent_of_sharers_boarders_and_lodgers.yaml` 19; `resolved_household_head.yaml` 9; HB `non_dep_deduction/` 53; UC `housing_costs_element/` 20 (UC `non_dep_deduction/` 13 of them); `council_tax_reduction/` 331; `housing_benefit_meals_deduction.yaml` 8.
- Python (`-n 4`): `test_boarder_lodger_rent_properties.py` 12 passed (303 s); `test_legacy_means_test_income_from_capital_properties.py`, `test_rent_of_sharers_boarders_and_lodgers_properties.py`, `test_household_head_agreement_properties.py`, `test_council_tax_reduction_claimant_properties.py` and `test_uc_lodger_child_extended_benefit_unit_properties.py` still running at posting, each capped at 40 minutes; the hand-off comment carries their counts. At `8236c3a1c`, `test_uc_lodger_child_extended_benefit_unit_properties.py` passed (1 test, 156 s).
- `policyengine_uk/tests/code_health`: still running at posting; the hand-off comment carries the count.
- `uvx ruff@0.17.2 format --check .` (2,200 files already formatted), `ruff check .` and `ruff check --select F811,F821 policyengine_uk`: clean. `git diff --check 7ba0ea7af..HEAD`: clean.
- `.github/check_fix_pr.py` on this title and body, as `pr_fix_evidence.yaml` runs it: PASS against `7ba0ea7af` (no fixed fragment in this PR's own diff), and PASS against `main` (valid reproducer evidence, 20 changed executable tests).

**Mutation check at `298a8ccba`** (before the merge of #1995's `89bdbeed9`; the rules it mutates did not change in that merge). We applied each mutant below to a copy of this branch and ran the 32 YAML cases and the property tests, with shrinking off.

| Mutant | YAML cases failing | Property tests |
|---|---|---|
| Count all of a boarder's excess (drop the 50%) | 3 | caught |
| Lodger disregard per person at working age | 2 | not caught |
| Lodger disregard per family at pension age | 1 | not caught |
| Never halve the rent-a-room limit | 1 | not caught |
| Apply the property allowance to rent-a-room receipts | 1 | not run |
| Keep boarders and lodgers as UC non-dependants | 1 | not caught |
| Keep boarders and lodgers as HB non-dependants | 1 | not caught |
| Keep boarders and lodgers as CTR non-dependants | 1 | not caught |
| Do not deduct tax on counted letting income | 1 | not caught |
| Give the receipt to everyone in the household | 7 | caught |
| Count rent between members as household market income | 1 | caught |
| Tax credits count all rent-a-room receipts | 1 | not caught |

At `298a8ccba` the YAML cases caught all 12. At 10 examples per test, the property tests caught the three mutants that break an invariant on most households. The other nine change a rule only for particular household shapes, so the YAML cases cover those.

**Mutation check at `f7788dc97`.** We applied each mutant to a scratch copy and ran the 29 YAML cases in `boarders_and_lodgers.yaml` and `boarders_and_lodgers_non_dependants.yaml` and the 12 property tests (10 examples each, seed 0).

| Mutant | YAML cases failing | Property tests failing |
|---|---|---|
| Liability back to the whole benefit unit (`person.benunit.any(paid > 0)`) | 4 | 2 (person-level predicate; in or out of the payer's unit) |
| Drop the partner rule | 2 | 1 (person-level predicate) |
| HB individual gate reads `benunit_is_rent_liable` | 2 | 1 (in or out of the payer's unit) |
| UC individual gate reads `benunit_is_rent_liable` | 2 | 0 |
| `is_non_dependant_of_household_head` reads `benunit_is_rent_liable` | 4 | 1 (in or out of the payer's unit) |
| `uc_non_dep_receives_pension_credit` reads `benunit_is_rent_liable` | 1 | 0 |
| Rent-a-room tax back on the capital side | 3 | 2 (counted tax equals rent-a-room tax; CTR routes) |
| Subtract the with-earnings tax on the CTR routes | 3 | 0 |
| Subtract nothing on the Universal Credit route | 1 | 0 |
| Drop the finance-cost cap | 1 | 0 |

The YAML cases catch all 10. Only the case with a lodger paying £30,000 catches the UC-route mutant: in the others, the rent falls inside the personal allowance without pay, so nothing comes off either way. We ran the properties at `8410e1161`, whose property tests match `f7788dc97`'s. The property tests miss the mutants that only change particular household shapes: the generator has no finance costs, no Pension Credit families among the payers and few UC-route applicants with rent above the personal allowance.

**Mutation check of this head's changes.** We applied each mutant to a scratch worktree at the commit that added the rule it mutates, and ran the YAML files named in each row; for the first, also invariant 12 (15 examples, with shrinking). The first three rows ran at `8236c3a1c`, the deduction row at `685544ff2`, and the last four at `8d494ab9d`; none of the mutated formulas changed after.

| Mutant | YAML cases run | YAML cases failing | Invariant 12 |
|---|---|---|---|
| No para 9(2)(g): `is_uc_non_dependant_of_household_head` returns `is_non_dependant_of_household_head` | 14 in `boarders_and_lodgers_non_dependants.yaml` | 2 (the lodger's qualifying young person; the lodger's child and the shared rate) | fails (bedrooms, and the added person's flag) |
| Para 9(2)(g) for every other family's child or qualifying young person, whoever has responsibility | the same 14 | 1 (the non-paying daughter's qualifying young person) | not run |
| `lha_renter_has_non_dependant` counts only other families' claimants and partners | the same 14 | 1 (the lodger's son and the shared rate) | not run |
| `uc_non_dep_deductions` reads `is_non_dependant_of_household_head` | 154 (`legacy_means_tests/`, UC `housing_costs_element/`, `rent_of_sharers_boarders_and_lodgers.yaml`) | 0 | not run |
| `council_tax_reduction_home_letting_income` counts only sublet income (#1995's helper as it stood) | 105 (`boarders_and_lodgers.yaml`, `boarders_and_lodgers_non_dependants.yaml`, `income_from_capital.yaml`) | 2 (the head applying alone; the same head in her own unit) | not run |
| `council_tax_reduction_home_letting_income` takes the legacy State Pension age test | the same 105 | 1 (the head applying alone: £6,240 against £5,200) | not run |
| `legacy_benefits_home_letting_income` counts the head's receipt whatever her role | the same 105 | 1 (the head applying alone: £6,240 against nil) | not run |
| CTR subtracts the rent's tax without earnings after #1995's floor, not before it | 445 (`council_tax_reduction/`, `legacy_means_tests/`) | 0 | not run |

The YAML cases catch the first seven. The deduction mutant survives because no child or qualifying young person reaches the UC deduction age of 21, so the two flags give the same deductions. The floor-order mutant survives because the order matters only where one member's earnings move a Step 7 charge off another and the counted members' deducted income tax, less the rent's tax without earnings, falls below nil; no case builds that household.

## Measured impact

We measured these at `6df59cdb4` against #1995's `89bdbeed9`, and haven't rerun them on this head. We ran one 2026 Microsimulation per model version on the same dataset:

- **Dataset.** An enhanced FRS 2024-25 built at policyengine-uk-data#506 `87a5f50` with production settings and seed 0. It matches a seed-0 build of its parent (#503 head `0812cd1`) in every column of every table, household weights included, apart from the two new inputs. Its later commit `ee40d7a` adds uprating rows and tests, and changes nothing that the data build's pinned model reads.
- **Models.** Baseline: #1995 head `89bdbeed9`. This PR: `6df59cdb4`.

**Disclosure.** We matched each enhanced-FRS record of a paying household to its survey household by its members' ages and FRS rent amounts. Every change falls inside those households. Each figure below rests on at least 10 survey households. We report no figure resting on fewer, nor any that would reveal one by subtraction, and no survey-household counts.

| 2026-27, at `6df59cdb4` against `89bdbeed9` | Change |
|---|---|
| Rent received from boarders and lodgers | +£185m |
| of which relieved by rent-a-room relief | £149m |
| Taxable rent-a-room income | +£36m |
| Income tax | +£8.5m |
| Home-letting income counted by the legacy means tests | +£135m |

- **Low weights in the calibrated data.** The survey-weighted FRS has £0.81bn of this rent a year. The calibrated enhanced FRS gives the paying households low weights, so it carries £0.19bn.
- **No change** at `6df59cdb4` in Housing Benefit, council tax reduction, Income Support or tax credit awards, Universal Credit unearned income, household market income, AHC poverty, or child poverty (BHC or AHC).
- **Not reported.** Each of these changes in fewer than 10 survey households: UC and Pension Credit awards, Guarantee Credit entitlement, total household benefits, and BHC poverty for all people. We leave out household net income, because together with income tax it would reveal the benefit change.

**What this head can move.** The rent, rent-a-room relief, taxable income and income tax rows depend on rules this head leaves unchanged, apart from giving the rent to the resolved household head, the household reference person in the data. This head can move:
- **non-dependant deductions and the awards that carry them** (HB, UC, CTR), and HB's shared accommodation rate through `housing_benefit_has_non_dependant`, wherever a paying benefit unit holds someone other than the payer, a claimant or a partner. FRS benefit units hold one adult or a couple plus dependent children, so this reaches a payer's dependent children and qualifying young people (aged up to 19), and a couple 20 or more years apart where the dataset does not supply `is_claimant_or_partner`;
- **UC bedrooms and the UC shared accommodation rate** of a householder claiming Universal Credit, where a paying benefit unit holds a non-paying member who is neither a child nor a qualifying young person, such as the younger of a couple 20 or more years apart without `is_claimant_or_partner`. A payer's children and qualifying young people stay out of the UC extended benefit unit, as at `6df59cdb4`;
- **CTR income** on the Universal Credit route and in the Scottish working-age scheme, where the head's earnings raise the tax on the rent, and for a household head who applies alone and receives this rent;
- **counted tax in the legacy means tests** where rent-a-room income and property finance costs meet (the cap);
- **tax credit income**, now through `tax_credits_current_year_income`;
- every figure through #1995's changes from `89bdbeed9` to `7ba0ea7af`, which the baseline would need too.

## Not in this PR

- **The payer's own housing costs.** Main now gives a boarder's or lodger's family the rent it pays the householder (`personal_rent`); this PR does not change that.
- **SUBRENT.** policyengine-uk-data still puts SUBRENT in `property_income`; moving it to `sublet_income` takes a change there.
- **Second adult rebate and Pension Credit housing costs.** The same commercial-occupier rules apply to both, and this PR leaves them unchanged.

## Known interactions

- **Who claims CTR.** #2062 has merged. This PR gives the rent to the resolved household head, and the CTR award gates and non-dependant rules find the claimant through the same head (`benunit_contains_household_head`), so the two agree.
- **#1995's head.** This PR merges #1995 at `7ba0ea7af` (`8d494ab9d`). Two files conflicted. In `legacy_benefits_home_letting_income.py`, #1995 had moved the sub-tenant rule into `home_letting_income` for its CTR reader, and this PR had added the boarder and lodger rules beside it; the helper now holds both, and each reader keeps its own people and pension-age test (What changes, "Legacy means tests"). In `council_tax_reduction_applicable_income.py`, #1995 floors the counted members' deducted income tax at nil, and this PR subtracts the uncounted rent's tax without earnings; the formula subtracts first and then floors. The two head-alone cases pin the CTR reader, and the adult-son Housing Benefit case and #1995's own cases pin the legacy one. No other file changed on both sides.
- **UC tax deduction.** UC deducts `uc_income_tax_on_earnings`, which takes earnings as the lowest slice. The taxable rent raises `earned_taxable_income` and the income above earnings alike, so the deduction doesn't move, with one exception. The slice adds back the finance-cost reduction in excess of `property_income_tax`, and the relief's cap includes taxable rent-a-room income. In Scotland, where finance costs exceed property profits and the taxable rent falls in the 19% starter band, the relief rises by 20% of that rent and the tax by 19%, so each £1 of taxable rent lowers UC's tax deduction by 1p. With pay of £13,000, finance costs of £10,000 and a lodger paying £9,500, the deduction falls from £81.70 to £61.70. At rates of 20% or more, the excess doesn't rise.
- **Children in a payer's family.** For Universal Credit, this head applies Sch 4 para 9(2)(g): a boarder's or lodger's child or qualifying young person falls outside the householder's extended benefit unit, and supplies no bedroom, housing cost contribution or exception from the shared accommodation rate. For Housing Benefit and CTR, which each define non-dependants for themselves, PolicyEngine still counts a payer's children in `is_non_dependant_of_household_head`. The HB and CTR deductions start at 18, so for children the HB change shows up in bedrooms and the shared accommodation rate: in the North West, with rent of £9,000, a lodger's 10-year-old lifts a 30-year-old head's HB from £4,925.44 to £9,000, while the same head on Universal Credit keeps the shared rate and a housing element of £4,938.96 either way.
- **#2016 and the size criteria.** #2016 (`983488065`, the fix for #2011) applies para 9(2)(g) inside `LHA_allowed_bedrooms` to a child or qualifying young person for whom no one is responsible at all (`is_child_for_universal_credit | is_qualifying_young_person_for_universal_credit`, less `is_child_or_qualifying_young_person_for_universal_credit`), such as one looked after by a local authority, and gives non-dependants' children under 16 bedrooms. This head applies the same paragraph, from the same two inputs, to a child whose family's claimant and partner sit outside the extended benefit unit, in one flag that every UC reader takes. `git merge-tree` against `983488065` conflicts in `LHA_allowed_bedrooms.py` and `lha_renter_has_non_dependant.py`, both from this head's edits (at `f7788dc97` it merged cleanly). On merge, #2016's line `non_dependant = is_non_dependant_of_household_head & ~no_one_responsible` would read `is_uc_non_dependant_of_household_head` instead, so a lodger's children get no bedroom of their own and no shared bedroom with the head's children; #2016's looked-after rule could then move into the flag.
- **#2010, #2007 and #2017.** `git merge-tree` against #2010 (`2d362d2fc`) conflicts in nine files, against #2007 (`fde435bd3`) in six and against #2017 (`b3e0d76b8`) in eight. Five of them in each come from #1995 at `7ba0ea7af`, which conflicts with all three by itself (`CHANGELOG.md`, `pyproject.toml`, `docs/book/programs/gov/dwp/housing-benefit.ipynb`, `pension_credit_income.py`, `trading_allowance_deduction.py`). This PR adds `housing_benefit_individual_non_dep_deduction_eligible.py` with all three, `uc_individual_non_dep_deduction_eligible.py` and `uc_non_dep_deductions.py` with #2010 and #2017, and `LHA_allowed_bedrooms.py` with #2010. Against `7ba0ea7af` and `main` (`9b456bda6`) this head merges cleanly.
- **Scottish pension-age CTR (SSI 2012/319 reg 3).** We ran a household head of 70 in Edinburgh with a State Pension of £10,000 and council tax of £1,800 (CTR £1,800 alone), and a lodger paying £5,200 (counted home-letting income £4,160, CTR £1,630.40). Each non-paying member who earns has £5,200 over 20 hours. The model's CTR flag (`council_tax_reduction_individual_non_dep_deduction_eligible`) and award:
  - the payer: no non-dependant, CTR £1,630.40, as reg 3(2)(e) has it;
  - the payer's partner, who pays nothing: no non-dependant, CTR £1,630.40. Reg 3(2)(e) excepts the partner only if the partner is liable; the model assumes so (Modelling choices), and the data record no agreement;
  - the payer's child of 10: no deduction (the model flags only people aged 18 or over), CTR £1,630.40. The child sits in the lodger's benefit unit, not the head's (reg 3(2)(a)), and owes her nothing, so the child counts as a non-dependant under reg 3(1); the deduction rules, which we haven't quoted, decide whether a child carries a deduction. The payer's child of 18 who earns carries a deduction of £1,060.80, CTR £569.60;
  - a non-paying adult son of 30 in the payer's family: a non-dependant with a deduction of £1,060.80, CTR £569.60, as reg 3(1) and (2)(a) have it;
  - a payer who is a close relative, the head's daughter of 40 paying £5,200: no non-dependant, CTR £1,630.40. Under reg 3(3)(a) she stays a non-dependant (paying nothing, she carries a deduction of £1,060.80, CTR £739.20). The model has no input for a close relative or a non-commercial agreement, so it can't apply reg 3(3)(a), and a fix needs a new input outside the CTR readers. The survey asks about this rent only for people unrelated to the household reference person, so the data meet the model's assumption; PolicyEngine doesn't check inputs set by hand.
- **A household head who applies alone (reg 3(2)(a)).** With the same head of 70 sharing a benefit unit with a couple of 25 (one earning £5,200 over 20 hours) and their baby, the head applies alone, and PolicyEngine's means test treats her as a single person with no partner or children. Yet PolicyEngine flags nobody in her benefit unit for a non-dependant deduction: CTR £1,800. Under reg 3(2)(a), only "any member of the applicant's family" leaves the non-dependants. `test_household_head_agreement_properties.py` pins the current rule for every CTR scheme in the model (no one in the head's family is a non-dependant), so this PR leaves it.

axiom: TheAxiomFoundation/rulespec-uk#402 queued, with an addendum for person-level commercial liability (https://github.com/TheAxiomFoundation/rulespec-uk/issues/402#issuecomment-6600384053); rulespec-uk already encodes UC reg 66 (uk/regulations/uksi/2013/376/66.test.yaml `rent_from_a_lodger_in_the_home_is_not_unearned_income`)

Reproducer: `policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/boarders_and_lodgers_non_dependants.yaml::A commercial lodger's qualifying young person gives the householder no Universal Credit bedroom`; `policyengine_uk/tests/policy/baseline/gov/dwp/legacy_means_tests/boarders_and_lodgers_non_dependants.yaml::A lodger's non-paying adult son is the householder's non-dependant for Housing Benefit`

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

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Ready for hub review

Head a107b225c23f305bb14a11547f55b9fb270d1dac on branch claude/lodger-child-uc-benefit-0qxsky (the harness pins pushes to this name). It starts from f7788dc97. No PR is open for it, so its pushes started no CI, and I pushed nothing to boarder-lodger-rent or legacy-capital-derived-income. The hub documents are the three comments above: PR_TITLE.txt (unchanged), AXIOM_ADDENDUM.md and PR_BODY.md. I posted the addendum before the body; the order differs from the brief's.

Commits on top of f7788dc97:

Restart check

C2: a commercial lodger's child and the UC extended benefit unit

  • The rule. variables/gov/dwp/universal_credit/housing_costs_element/non_dep_deduction/is_uc_non_dependant_of_household_head.py:54-59 is is_non_dependant_of_household_head less a UC child or qualifying young person (is_child_for_universal_credit | is_qualifying_young_person_for_universal_credit, not a claimant or partner) whose benefit unit has a claimant or partner and none of them is a non-dependant, that is, every one of them pays the head or is the payer's partner. The model takes the claimant and partner of a child's own benefit unit as responsible for them, as uc_non_dep_deduction_exempt already does.
  • The UC readers. LHA_allowed_bedrooms.py:68, lha_renter_has_non_dependant.py:44 and uc_non_dep_deductions.py:25 read the new flag. No other UC formula reads is_non_dependant_of_household_head; uc_individual_non_dep_deduction_eligible has its own gates, and no child or qualifying young person reaches its age of 21. LHA_allowed_bedrooms serves only UC: Housing Benefit uses housing_benefit_LHA_allowed_bedrooms, and LHA_allowed_bedrooms feeds LHA_category, uc_LHA_cap and the display rates BRMA_LHA_rate and uncapped_BRMA_LHA_rate. Housing Benefit (housing_benefit_has_non_dependant, housing_benefit_severe_disability_premium_applies, housing_benefit_non_dep_deductions) and CTR keep the shared flag, so the adult son's HB of £7,053.80 and deduction of £3,346.20 stand.
  • Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016. Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016 applies para 9(2)(g) inside LHA_allowed_bedrooms as (is_child_for_universal_credit | is_qualifying_young_person_for_universal_credit) & ~is_child_or_qualifying_young_person_for_universal_credit: a child for whom no one is responsible at all, such as one looked after by a local authority. I used the same two inputs and the same reader position (non_dependant = flag & ...), and added the part Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016 lacks: responsible adults outside the extended benefit unit. I left out Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016's looked-after part, because it rests on UC reg 4(6)(a), which nobody quoted for this brief. On merge, Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016's line would read the new flag, and its looked-after rule could move into it. git merge-tree against 983488065 conflicts in LHA_allowed_bedrooms.py and lha_renter_has_non_dependant.py (clean at f7788dc97); against Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010's 2d362d2fc this head adds LHA_allowed_bedrooms.py and uc_non_dep_deductions.py to the conflicts.
  • Judgment call: lha_renter_has_non_dependant. It counted only other families' claimants and partners. After C1, that missed a lodger's non-paying adult son: at f7788dc97, a single head of 25 in London (rent £18,000, pay £15,000) with a lodger and the lodger's son of 30 had two UC bedrooms and the son's £1,158.60 housing cost contribution, yet is_lha_shared_accommodation_rate_specified_renter held, so the shared rate applied: housing element £6,641.40, UC £3,864.42. The reader now counts every UC non-dependant of another family. The head gets the two-bedroom rate: housing element £16,841.40, UC £14,064.42 (YAML case at line 561). For HB, housing_benefit_has_non_dependant already counted the son. Without para 9(2)(g), the wider reader would let a lodger's child take that head off the shared rate; the flag stops it (case at line 616). I didn't quote UC Sch 4 para 28 (nobody supplied it); the change keeps the model's existing reading that a renter with a non-dependant is no specified renter.
  • Judgment call: a child whose benefit unit has no claimant or partner stays a non-dependant, because the model can't tell who is responsible; a claimant or partner never counts as anyone's child. This keeps test_no_op_without_sharers_boarders_or_lodgers and the head-agreement generator's families of a child alone unchanged.
  • The reviewer's case (boarders_and_lodgers_non_dependants.yaml:395, through final UC): one bedroom, housing element £15,546, UC £12,769.02, and household net income £2,454 lower than at f7788dc97. The QYP needs current_education: UPPER_SECONDARY: with no input, the model imputes tertiary education at 18, and he isn't a QYP. At f7788dc97, split into one output per case, it fails on all three: bedrooms 2, housing element £18,000, UC £15,223.02 (the deduction, nil either way, passes).
  • Controls. Line 459: the adult son stays the UC non-dependant, HB £7,053.80, deduction £3,346.20. Line 506: a non-paying daughter (36) and her QYP son (17): both non-dependants, three bedrooms, housing element £18,841.40, UC £16,064.42.
  • Property (test_uc_lodger_child_extended_benefit_unit_properties.py, 15 examples, derandomised): adding a child or QYP to the first commercial lodger unit never changes the head's UC bedrooms, housing element or non-dependant deductions, and the added person never gets the flag. The generator keeps the lodger families under State Pension age, because a lodger family's Pension Credit can change with a child and exempt the family's non-paying adult from the housing cost contribution.

Mutation and revert checks

Mutant YAML run YAML failing Property
No para 9(2)(g) (flag = shared flag), at 8236c3a1c 14 2 (lines 395, 616) fails, 394 s with shrinking: bedrooms, and the added person's flag
Para 9(2)(g) for every other family's child or QYP 14 1 (line 506) not run
Shared-rate reader counts only claimants and partners 14 1 (line 561) not run
uc_non_dep_deductions reads the shared flag, at 685544ff2 154 0 (equivalent: nobody under 21) not run
CTR reader without the boarder and lodger part (#1995's helper as it stood), at 8d494ab9d 105 2 (boarders_and_lodgers.yaml lines 662, 732) not run
CTR reader on the legacy State Pension age test 105 1 (line 662: £6,240 against £5,200) not run
Legacy reader counts the head's receipt whatever her role 105 1 (line 662: £6,240 against nil) not run
CTR subtracts the rent's tax after #1995's floor 445 0 not run

The floor-order mutant survives: the order matters only where one member's earnings move a Step 7 charge off another and the counted members' deducted income tax, less the rent's tax without earnings, falls below nil. No case builds that, and I didn't find one in the time.

The #1995 merge (8d494ab9d)

  • legacy_benefits_home_letting_income.py. Treat income derived from capital as capital in the legacy means tests #1995's C1 had moved the sub-tenant rule into home_letting_income for its new CTR reader; this PR had added the boarder and lodger rules to the shared reader, gated on the resolved head (4fd88bd67). The helper (:4-56) now holds both, with the head's receipt counting where the head is one of the counted members (:55). legacy_benefits_home_letting_income passes the claimant and partner and the State Pension age test (:108); council_tax_reduction_home_letting_income passes the CTR applicant and partner and council_tax_reduction_pensioner (:44). So a household head who applies alone counts lodger rent in CTR, and her benefit unit's legacy measure doesn't. Cases: boarders_and_lodgers.yaml:662 (head alone with a lodger couple each paying £3,640: CTR letting income £5,200 per person, legacy nil, CTR £1,035.20) and :732 (the same head in her own unit: £5,200 in both). The adult-son HB case and Treat income derived from capital as capital in the legacy means tests #1995's cases pin the legacy reader.
  • council_tax_reduction_applicable_income.py. Treat income derived from capital as capital in the legacy means tests #1995 floors the counted members' deducted income tax at nil; this PR subtracts the uncounted rent's tax without earnings. The formula subtracts first (:367) and floors after (:379), so the deduction never adds tax to income. The UC-route and Scottish working-age cases (£1,500, £1,575, and £1,986 left out) still pass.
  • No other file changed on both sides. Treat income derived from capital as capital in the legacy means tests #1995's changes since 7381a46c7 to the IS, HB and Pension Credit tax floors, uses_property_allowance (documentation only) and the rest don't touch the boarder and lodger rules. uv.lock moved policyengine-core to 3.34.1, and I re-synced before the tests.

SSI 2012/319 reg 3 (Scottish pension-age CTR)

Edinburgh, 2026-27: a head of 70 with a State Pension of £10,000 and council tax of £1,800 (CTR £1,800 alone; £1,630.40 once a lodger's £5,200 counts as £4,160 of income). Non-paying earners have £5,200 over 20 hours (deduction £1,060.80 on the model's HB scale).

Person Model Reg 3 Agree
The payer no non-dependant; CTR £1,630.40 excepted, (2)(e) yes
The payer's partner, paying nothing no non-dependant; CTR £1,630.40 excepted only if liable, (2)(e) only under the model's partner assumption
The payer's child of 10 no deduction (the flag starts at 18); £1,630.40 a non-dependant, (1) and (2)(a); unquoted rules set the deduction age status yes, deduction not checked
The payer's earning child of 18 deduction £1,060.80; CTR £569.60 a non-dependant yes
A non-paying adult son of 30 deduction £1,060.80; CTR £569.60 a non-dependant yes
The head's daughter of 40 paying £5,200 (close relative) no non-dependant; CTR £1,630.40 a non-dependant, (3)(a)(i); paying nothing she carries £1,060.80, CTR £739.20 no

I fixed nothing here. The partner turns on the agreement, which the words don't settle. The close-relative and non-commercial departure needs an input the model lacks, so the fix falls outside the CTR readers. I also found a reg 3(2)(a) departure outside the five runs. A head of 70 who applies alone, sharing a benefit unit with a couple of 25 (one earning £5,200 over 20 hours) and their baby, gets CTR of £1,800 with no deduction, although her means test treats her as single. test_household_head_agreement_properties.py pins that rule, so I left it. "Known interactions" lists all three. boarders_and_lodgers_non_dependants.yaml:678 pins the agreeing statuses (flags only, so #2007's CTR scale can't break it).

Tests at a107b225c

  • YAML (policyengine-core test): gov/dwp/legacy_means_tests/ 115 passed (boarders_and_lodgers.yaml 22, boarders_and_lodgers_non_dependants.yaml 15); gov/hmrc/income_tax/rent_a_room/ 7 (includes rent_a_room_relief.yaml, the third YAML file this PR changes); rent_of_sharers_boarders_and_lodgers.yaml 19; resolved_household_head.yaml 9; HB non_dep_deduction/ 53; UC housing_costs_element/ 20 (UC non_dep_deduction/ 13 of them); council_tax_reduction/ 331; housing_benefit_meals_deduction.yaml 8. At 8236c3a1c, all of finance/benefit/family/ passed (1,690). I ran these at 685544ff2; a107b225c changes one YAML comment.
  • Python (-n 4, uv sync --frozen --extra dev): test_boarder_lodger_rent_properties.py 12 passed (303 s). The other five (test_legacy_means_test_income_from_capital_properties.py, test_rent_of_sharers_boarders_and_lodgers_properties.py, test_household_head_agreement_properties.py, test_council_tax_reduction_claimant_properties.py, test_uc_lodger_child_extended_benefit_unit_properties.py) were still running when I posted this; I'll edit this comment with their counts if they finish before the session ends. The new property passed at 8236c3a1c (1 test, 156 s).
  • policyengine_uk/tests/code_health -n 4: still running when I posted this; I'll edit in the count.
  • Checks: uvx ruff@0.17.2 format --check . 2,200 files already formatted; ruff check . and ruff check --select F811,F821 policyengine_uk clean; git diff --check 7ba0ea7af..HEAD clean. .github/check_fix_pr.py on the posted title and body, as pr_fix_evidence.yaml runs it: PASS against 7ba0ea7af (not a fix PR there) and PASS against main (valid reproducer evidence, 20 changed executable tests).
  • git merge-tree --write-tree --name-only HEAD: 7ba0ea7af clean; origin/main (9b456bda6) clean; Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016 983488065: LHA_allowed_bedrooms.py, lha_renter_has_non_dependant.py; Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010 2d362d2fc: 9 files (CHANGELOG.md, pyproject.toml, housing-benefit.ipynb, pension_credit_income.py, trading_allowance_deduction.py, all also conflicting with 7ba0ea7af alone, plus LHA_allowed_bedrooms.py, housing_benefit_individual_non_dep_deduction_eligible.py, uc_individual_non_dep_deduction_eligible.py, uc_non_dep_deductions.py); Fix HB and national CTR non-dependant deductions #2007 fde435bd3: the same five from Treat income derived from capital as capital in the legacy means tests #1995 plus housing_benefit_individual_non_dep_deduction_eligible.py; Charge non-dependant deductions within the claimant's benefit unit #2017 b3e0d76b8: the five plus housing_benefit_individual_non_dep_deduction_eligible.py, uc_individual_non_dep_deduction_eligible.py, uc_non_dep_deductions.py. At f7788dc97, Count other families' children and add the foster and overnight-care bedrooms in the LHA size criteria #2016 merged cleanly; C2 adds LHA_allowed_bedrooms.py and lha_renter_has_non_dependant.py there, LHA_allowed_bedrooms.py and uc_non_dep_deductions.py with Give benefit-unit members aged 16 or over a bedroom under LHA rules #2010, and uc_non_dep_deductions.py with Charge non-dependant deductions within the claimant's benefit unit #2017.

Skipped

Judgment calls

  • Going ahead despite pensioner-ctr-disability-premiums-9b4amp (Restart check).
  • Widening lha_renter_has_non_dependant to every UC non-dependant of another family (C2 above).
  • Keeping a child whose benefit unit has no claimant or partner as a non-dependant.
  • Subtracting the uncounted rent's tax before Treat income derived from capital as capital in the legacy means tests #1995's floor.
  • The CTR reader takes this PR's lodger rules under council_tax_reduction_pensioner, not State Pension age.
  • In the addendum, beyond quoting reg 3 and adding para 9(2)(g), I rewrote the lines that called SSI 2012/319 unquoted or pending, added two companion cases (the non-paying daughter control and the Scottish pension-age family) and output 6, and changed "two households" in the opening. Each follows from the two additions.
  • In the body I replaced the reviewer's name in the case labels with descriptions of the households.

Generated by Claude Code

#1995's head-alone property asserted that the couple's rent never moves the
household head's council tax reduction income. With this branch's rent-a-room
relief, the couple's first receipts halve the head's limit, so part of her
own letting rent becomes taxable and the tax the scheme deducts rises:
Hypothesis found a head of 65 in the North East with £5,254.85 of rent whose
income fell by £300.97 when the couple's rent rose from nil to £1. The
equalities now hold where her taxable rent-a-room income stays the same, the
couple's rent never raises her income, and an example pins that household.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QmsZJW5Q229j9RMjeKuoC2
Base automatically changed from legacy-capital-derived-income to main November 4, 2026 02:50
No file changed on both sides since #1995's head 7ba0ea7, which main
merged as 8717d5a.

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

@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 adopted head 3995b274fa19fd5df0a84f420b4fe404b19c4634, including the #1995/main integration. COMPLETE — C1 and C2 are resolved; no findings or material evidence gaps.

The new UC-specific selector excludes a commercial lodger’s qualifying young person from the renter’s UC bedrooms while preserving the generic Housing Benefit/CTR classification. The positive-UC final-result regression confirms the £2,454 correction through UC and household net income; the non-paying adult Housing Benefit case remains correct.

All 80 selected checks passed: 72 YAML cases, seven properties and one final-output diagnostic, with no failures or skips. The previously unfinished Housing Benefit property now passes. These are current-head results on the matching Core 3.34.1 environment, distinct from historical validation.

The actual Axiom #402 addendum now supplies the missing Scottish pensioner definition and the UC bedroom provisions; official text was independently checked. Existing input/relationship assumptions and data-release limitations remain qualified. Approval awaits readiness and applicable exact-head CI.

@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 5c7744144a against head 339df86075, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

None.

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Household net income by decile

No household's net income changes in any year.

No change in any year: receipts by tax head; government balance, each component counted once; model totals; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles; standard reform costings (change in gov_balance); standard reforms: change in each reform's target.

Checks failing on both base and head (1)
  • VAT excluding private school fees is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-53,888,684 in total; 2026-27: 76 units below zero, a weighted £-55,777,260 in total; 2027-28: 76 units below zero, a weighted £-57,727,917 in total
Counted-once check

Each of 92 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.

  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; gov_spending; not a failure)
  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; household_benefits; not a failure)
Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 5c7744144a uk 2.174.7 (files f97351c7e59f), core 3.34.1, py 3.13.18 aarch64 5cc6f6ff0466 3bcfb3473960 2487.4s
head #2002 merged into main 339df86075 uk 2.174.7 (files f314e8519453), core 3.34.1, py 3.13.18 aarch64 5cc6f6ff0466 3bcfb3473960 2502.66s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Final charge on cash interest in non-cash ISAs £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Lifetime ISA withdrawal charge £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Income tax £294.46bn £315.23bn £335.82bn £351.28bn £366.96bn £385.36bn £399.99bn
National Insurance (employee and self-employed) £51.70bn £54.14bn £56.13bn £57.73bn £59.76bn £61.64bn £63.51bn
National Insurance (employer) £148.71bn £155.37bn £160.88bn £165.09bn £172.06bn £177.36bn £182.57bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.60bn £13.15bn £13.60bn £14.11bn £14.67bn £15.24bn £15.80bn
Student loan repayments £7.82bn £8.13bn £8.39bn £8.58bn £8.79bn £9.04bn £9.29bn
VAT excluding private school fees £249.37bn £256.87bn £266.33bn £272.70bn £278.97bn £285.24bn £291.59bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £1.95bn £2.01bn £2.09bn £2.14bn £2.20bn £2.26bn £2.31bn
Change in private school VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.71bn £24.13bn £26.00bn £26.83bn £26.51bn £25.78bn £24.63bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Betting and gaming duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.26bn £4.40bn £4.41bn £4.42bn £4.43bn £4.44bn £4.45bn
Council tax £49.21bn £52.16bn £54.89bn £57.95bn £61.16bn £64.47bn £67.91bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.50bn £0.51bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.60bn £0.63bn £0.66bn £0.69bn £0.72bn
Business rates £34.68bn £36.20bn £38.00bn £39.46bn £42.27bn £43.25bn £44.29bn
Stamp duty land tax on the household's own purchases £6.88bn £7.32bn £7.66bn £8.06bn £8.47bn £8.91bn £9.35bn
Stamp duty land tax paid by companies £4.72bn £4.57bn £5.29bn £6.03bn £6.37bn £6.92bn £7.45bn
Land transaction tax (Wales) £0.07bn £0.08bn £0.08bn £0.09bn £0.10bn £0.10bn £0.11bn
Land and buildings transaction tax (Scotland) £0.31bn £0.32bn £0.33bn £0.35bn £0.36bn £0.38bn £0.40bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Lifetime ISA bonus £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
State Pension £121.68bn £125.92bn £126.72bn £129.48bn £132.98bn £136.65bn £140.41bn
Pension Credit £6.21bn £6.46bn £6.68bn £6.82bn £6.89bn £7.07bn £7.22bn
Winter Fuel Payment £1.86bn £1.85bn £1.79bn £1.77bn £1.78bn £1.78bn £1.78bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £75.48bn £80.52bn £82.95bn £84.96bn £86.11bn £87.61bn £88.21bn
Housing Benefit £8.56bn £8.89bn £9.23bn £9.46bn £9.69bn £9.99bn £10.27bn
Council Tax Reduction £2.07bn £2.20bn £2.32bn £2.45bn £2.59bn £2.73bn £2.87bn
Employment and Support Allowance (income-related) £0.79bn £0.82bn £0.84bn £0.86bn £0.88bn £0.90bn £0.92bn
Employment and Support Allowance (contribution-based) £5.20bn £5.37bn £5.56bn £5.69bn £5.82bn £5.95bn £6.09bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.31bn £0.31bn £0.32bn £0.33bn £0.34bn
Income Support £0.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £26.95bn £28.03bn £29.05bn £30.09bn £30.75bn £31.51bn £32.21bn
Disability Living Allowance £7.49bn £7.79bn £8.07bn £8.36bn £8.55bn £8.76bn £8.95bn
Attendance Allowance £8.68bn £9.03bn £9.36bn £9.69bn £9.90bn £10.15bn £10.38bn
Carer's Allowance £4.48bn £4.66bn £4.83bn £5.00bn £5.11bn £5.27bn £5.42bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.36bn £0.37bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.04bn £0.04bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.50bn £0.52bn £0.54bn £0.55bn £0.56bn £0.58bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.63bn £0.65bn £0.66bn £0.68bn £0.69bn £0.71bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.19bn £16.82bn £17.39bn £18.00bn £18.39bn £18.84bn £19.25bn
Scottish Child Payment £0.49bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.56bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.30bn £3.41bn £3.54bn £3.62bn £3.70bn £3.78bn £3.87bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.12bn £1.16bn £1.20bn £1.23bn £1.26bn £1.29bn £1.32bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.71bn £0.73bn £0.75bn £0.76bn £0.78bn
Widowed Parent's Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tax-Free Childcare £0.56bn £0.57bn £0.57bn £0.58bn £0.60bn £0.61bn £0.59bn
Extended childcare entitlement £2.99bn £3.50bn £3.59bn £3.71bn £3.78bn £3.86bn £3.93bn
Universal childcare entitlement £2.06bn £2.22bn £2.29bn £2.37bn £2.43bn £2.48bn £2.53bn
Targeted childcare entitlement £0.50bn £0.51bn £0.52bn £0.54bn £0.55bn £0.57bn £0.56bn
Childcare Offer for Wales £0.26bn £0.28bn £0.28bn £0.29bn £0.30bn £0.31bn £0.32bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £203.89bn £204.30bn £204.56bn £204.91bn £205.34bn £205.85bn £206.35bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.05bn £25.10bn £25.14bn £25.18bn £25.23bn £25.30bn £25.36bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Household Energy Payment £0.00bn £2.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Lifetime ISA bonus 0k 0k 0k 0k 0k 0k 0k
State Pension 11,264k 11,145k 10,819k 10,700k 10,723k 10,750k 10,776k
Pension Credit 1,489k 1,484k 1,476k 1,454k 1,452k 1,457k 1,466k
Winter Fuel Payment 7,844k 7,783k 7,473k 7,375k 7,391k 7,409k 7,427k
Pension Age Winter Heating Payment (Scotland) 803k 802k 800k 797k 799k 801k 802k
Universal Credit 6,342k 6,347k 6,336k 6,297k 6,292k 6,271k 6,223k
Housing Benefit 1,249k 1,245k 1,244k 1,227k 1,227k 1,229k 1,232k
Council Tax Reduction 3,180k 3,200k 3,206k 3,219k 3,234k 3,245k 3,252k
Employment and Support Allowance (income-related) 71k 71k 71k 71k 71k 71k 71k
Employment and Support Allowance (contribution-based) 719k 720k 721k 722k 724k 726k 728k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 67k 67k 67k 68k 68k
Income Support 25k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,567k 3,575k 3,579k 3,585k 3,593k 3,602k 3,611k
Disability Living Allowance 1,291k 1,294k 1,296k 1,298k 1,300k 1,304k 1,307k
Attendance Allowance 1,695k 1,698k 1,700k 1,703k 1,707k 1,711k 1,715k
Carer's Allowance 1,034k 1,037k 1,038k 1,040k 1,042k 1,060k 1,062k
Carer Support Payment (Scotland) 71k 71k 71k 72k 72k 72k 72k
Carer's Allowance Supplement (Scotland) 0k 71k 71k 72k 72k 72k 72k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 137k 137k 138k 138k 138k 139k
Armed Forces Compensation Scheme 93k 93k 94k 94k 94k 94k 94k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,123k 8,120k 8,120k 8,130k 8,145k 8,161k 8,178k
Scottish Child Payment 351k 352k 352k 353k 350k 348k 337k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 200k 200k 201k 201k 201k 202k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 333k 333k 334k 334k 335k 336k 337k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 181k 182k 182k 182k 182k 183k 183k
Sure Start Maternity Grant 26k 26k 26k 26k 26k 26k 26k
Bereavement Support Payment 98k 98k 98k 98k 98k 99k 99k
Widowed Parent's Allowance 0k 0k 0k 0k 0k 0k 0k
Tax-Free Childcare 1,043k 1,027k 1,014k 1,009k 1,011k 1,009k 993k
Extended childcare entitlement 795k 800k 796k 797k 798k 798k 792k
Universal childcare entitlement 1,071k 1,072k 1,072k 1,073k 1,076k 1,079k 1,074k
Targeted childcare entitlement 165k 156k 154k 154k 155k 155k 150k
Childcare Offer for Wales 39k 39k 39k 39k 39k 39k 39k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 98k 98k 99k 99k 99k 99k
Adult Dependants' Grant 18k 18k 12k 12k 12k 12k 12k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Household Energy Payment 0k 21,065k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £892.00bn £934.66bn £980.50bn £1,015.93bn £1,054.24bn £1,091.56bn £1,124.89bn
Government spending £528.93bn † £545.10bn † £550.16bn † £558.85bn † £566.49bn † £575.19bn † £582.78bn †
Government balance, each receipt once £363.07bn † £389.57bn † £430.34bn † £457.08bn † £487.75bn † £516.37bn † £542.11bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £892.00bn £934.66bn £980.50bn £1,015.93bn £1,054.24bn £1,091.56bn £1,124.89bn
household_tax £491.97bn £520.41bn £551.21bn £576.00bn £601.00bn £626.69bn £648.42bn
pre_budget_change_household_tax £484.15bn £512.28bn £542.82bn £566.95bn £591.72bn £617.16bn £638.61bn
gov_spending £528.93bn † £545.10bn † £550.16bn † £558.85bn † £566.49bn † £575.19bn † £582.78bn †
household_benefits £528.93bn † £545.10bn † £550.16bn † £558.85bn † £566.49bn † £575.19bn † £582.78bn †
gov_balance £363.07bn † £389.57bn † £430.34bn † £457.08bn † £487.75bn † £516.37bn † £542.11bn †
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,637.96bn £1,702.77bn £1,757.35bn £1,806.41bn £1,855.97bn £1,912.43bn £1,970.44bn
Household net income £1,636.24bn † £1,687.25bn † £1,714.85bn † £1,746.83bn † £1,777.98bn † £1,816.26bn † £1,858.87bn †
Household net income (HBAI definition) £1,449.13bn £1,499.27bn £1,530.25bn £1,564.51bn £1,597.18bn £1,634.83bn £1,675.80bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,245k 69,383k 69,473k 69,592k 69,738k 69,912k 70,080k
Benefit units 35,110k 35,181k 35,226k 35,286k 35,360k 35,449k 35,534k
Households 31,046k 31,108k 31,149k 31,201k 31,267k 31,345k 31,420k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 16.3% 15.5% 16.4% 16.3% 16.5% 16.5% 16.6%
Absolute poverty, before housing costs: children 24.7% 22.1% 23.3% 22.9% 23.1% 23.2% 23.5%
Absolute poverty, before housing costs: working-age adults 14.1% 13.8% 14.7% 14.7% 14.8% 14.8% 15.0%
Absolute poverty, before housing costs: pensioners 13.7% 13.4% 14.0% 13.8% 13.9% 14.0% 13.9%
Absolute poverty, after housing costs: everyone 21.6% 21.0% 22.0% 22.6% 22.9% 23.1% 23.4%
Absolute poverty, after housing costs: children 33.3% 31.3% 32.3% 32.5% 32.9% 33.4% 34.2%
Absolute poverty, after housing costs: working-age adults 19.9% 19.8% 20.8% 21.6% 21.9% 22.0% 22.3%
Absolute poverty, after housing costs: pensioners 12.7% 12.4% 13.1% 13.2% 13.3% 13.4% 13.6%
Relative poverty, before housing costs: everyone 17.0% 16.0% 16.4% 16.3% 16.4% 16.3% 16.6%
Relative poverty, before housing costs: children 25.9% 22.9% 23.3% 22.9% 23.0% 22.9% 23.5%
Relative poverty, before housing costs: working-age adults 14.5% 14.1% 14.6% 14.7% 14.7% 14.7% 15.0%
Relative poverty, before housing costs: pensioners 14.5% 14.0% 13.9% 13.8% 13.8% 13.9% 13.9%
Relative poverty, after housing costs: everyone 21.5% 21.0% 21.3% 21.3% 21.3% 21.5% 21.7%
Relative poverty, after housing costs: children 33.1% 31.1% 31.2% 31.0% 31.1% 31.2% 31.8%
Relative poverty, after housing costs: working-age adults 19.9% 19.8% 20.2% 20.4% 20.5% 20.6% 20.8%
Relative poverty, after housing costs: pensioners 12.5% 12.4% 12.2% 11.7% 11.7% 11.8% 12.0%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,277k 10,778k 11,402k 11,365k 11,475k 11,514k 11,650k
Absolute poverty, before housing costs: children 3,688k 3,314k 3,496k 3,445k 3,480k 3,502k 3,549k
Absolute poverty, before housing costs: working-age adults 5,965k 5,893k 6,308k 6,362k 6,420k 6,430k 6,521k
Absolute poverty, before housing costs: pensioners 1,624k 1,571k 1,597k 1,558k 1,575k 1,581k 1,580k
Absolute poverty, after housing costs: everyone 14,944k 14,599k 15,310k 15,721k 15,937k 16,140k 16,426k
Absolute poverty, after housing costs: children 4,975k 4,682k 4,837k 4,888k 4,945k 5,040k 5,179k
Absolute poverty, after housing costs: working-age adults 8,463k 8,461k 8,971k 9,344k 9,491k 9,584k 9,706k
Absolute poverty, after housing costs: pensioners 1,506k 1,456k 1,501k 1,489k 1,501k 1,517k 1,541k
Relative poverty, before housing costs: everyone 11,750k 11,084k 11,387k 11,364k 11,416k 11,416k 11,654k
Relative poverty, before housing costs: children 3,872k 3,423k 3,496k 3,445k 3,466k 3,454k 3,551k
Relative poverty, before housing costs: working-age adults 6,159k 6,013k 6,301k 6,362k 6,389k 6,389k 6,523k
Relative poverty, before housing costs: pensioners 1,719k 1,648k 1,590k 1,558k 1,561k 1,573k 1,580k
Relative poverty, after housing costs: everyone 14,864k 14,552k 14,777k 14,809k 14,872k 15,012k 15,232k
Relative poverty, after housing costs: children 4,944k 4,660k 4,673k 4,663k 4,679k 4,707k 4,806k
Relative poverty, after housing costs: working-age adults 8,431k 8,440k 8,711k 8,823k 8,873k 8,967k 9,062k
Relative poverty, after housing costs: pensioners 1,489k 1,452k 1,393k 1,323k 1,321k 1,338k 1,364k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3078 0.3050 0.3056 0.3055 0.3060 0.3066 0.3082
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £17,681 † £17,998 † £17,916 † £18,152 † £18,308 † £18,533 † £18,718 †
Decile 2: mean household_net_income per household £27,942 † £29,026 † £28,715 † £29,017 † £29,280 † £29,698 † £30,156 †
Decile 3: mean household_net_income per household £34,316 † £35,481 † £36,069 † £36,606 † £37,195 † £37,732 † £38,182 †
Decile 4: mean household_net_income per household £38,934 † £40,684 † £41,726 † £42,728 † £43,331 † £44,130 † £44,432 †
Decile 5: mean household_net_income per household £43,235 † £45,581 † £46,012 † £46,961 † £47,713 † £48,725 † £50,296 †
Decile 6: mean household_net_income per household £47,931 † £49,202 † £50,891 † £51,936 † £52,936 † £53,820 † £54,663 †
Decile 7: mean household_net_income per household £55,659 † £56,569 † £57,437 † £57,642 † £58,733 † £59,661 † £61,087 †
Decile 8: mean household_net_income per household £68,784 † £70,802 † £71,864 † £73,512 † £73,886 † £75,319 † £77,177 †
Decile 9: mean household_net_income per household £78,889 † £81,012 † £80,859 † £82,645 † £85,463 † £86,945 † £89,508 †
Decile 10: mean household_net_income per household £116,861 † £120,161 † £124,545 † £126,420 † £125,753 † £128,368 † £130,693 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.41bn £6.66bn £6.63bn £6.85bn £7.03bn £7.25bn £7.49bn
Raise higher rate by 1pp £3.61bn £3.87bn £4.00bn £4.22bn £4.44bn £4.71bn £4.83bn
Raise personal allowance by ~800GBP/year £-3.81bn £-3.93bn £-3.99bn £-4.05bn £-4.11bn £-4.24bn £-1.95bn
Raise child benefit by 25GBP/week per additional child £-1.99bn £-1.75bn £-1.55bn £-1.38bn £-1.30bn £-1.18bn £-1.07bn
Reduce Universal Credit taper rate to 20% £-20.77bn £-21.32bn £-21.75bn £-22.00bn £-22.35bn £-22.75bn £-22.94bn
Raise Class 1 main employee NICs rate to 10% £10.89bn £11.30bn £11.71bn £12.01bn £12.31bn £12.62bn £13.00bn
Raise VAT standard rate by 2pp £24.89bn £25.71bn £26.63bn £27.24bn £27.87bn £28.50bn £29.14bn
Raise additional rate by 3pp £2.90bn £3.15bn £3.22bn £3.41bn £3.61bn £3.85bn £4.14bn
Raise the Universal Credit standard allowance by 10% £-3.06bn £-3.18bn £-3.26bn £-3.35bn £-3.44bn £-3.49bn £-3.50bn
Raise the State Pension by 10% £-7.76bn £-7.99bn £-8.22bn £-8.45bn £-8.80bn £-8.53bn £-8.87bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.55bn £6.86bn £6.79bn £7.00bn £7.20bn £7.44bn £7.66bn
Raise higher rate by 1pp: change in income_tax £3.61bn £3.92bn £4.01bn £4.23bn £4.45bn £4.72bn £4.84bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.93bn £-4.07bn £-4.13bn £-4.18bn £-4.22bn £-4.40bn £-1.75bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.33bn £2.14bn £1.94bn £1.76bn £1.65bn £1.52bn £1.40bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.74bn £21.31bn £21.79bn £22.05bn £22.37bn £22.78bn £22.99bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.15bn £11.63bn £12.00bn £12.29bn £12.61bn £12.94bn £13.31bn
Raise VAT standard rate by 2pp: change in vat £24.69bn £25.51bn £26.42bn £27.03bn £27.65bn £28.28bn £28.91bn
Raise additional rate by 3pp: change in income_tax £2.90bn £3.15bn £3.22bn £3.42bn £3.62bn £3.86bn £4.12bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.06bn £3.19bn £3.28bn £3.37bn £3.43bn £3.49bn £3.51bn
Raise the State Pension by 10%: change in state_pension £10.68bn £11.17bn £11.28bn £11.60bn £12.03bn £12.46bn £12.96bn

@MaxGhenis
MaxGhenis marked this pull request as ready for review November 4, 2026 21:25
@MaxGhenis
MaxGhenis requested a review from juaristi22 November 4, 2026 21:25

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

Approved at 3995b274fa19fd5df0a84f420b4fe404b19c4634.

Review status: COMPLETE — no remaining findings or material evidence gaps. C1 and C2 remain resolved. The preceding review’s 80 passing local checks at this head remain valid; no local tests or models were rerun.

The updated description was checked independently against primary CI evidence:

  • Code changes run 41889276464: 5,812 YAML passes; 12,218 Python passes, two expected failures and 61 skips. The code-health/property counts and shard 5 retry explanation are supported: its first test step passed before the outcome-log upload failed.
  • Aggregate impact run 41889276386: zero reported changes for 2025–2031 in the comparable metrics on the named certified dataset. This comparison uses the report’s DSA privacy adjustments; the unchanged VAT level check remains a limitation. The pending boarder/lodger input mapping and the qualifications on historical population estimates remain explicit.

The PR is ready for review and all 20 latest CI checks pass at this exact commit. Head, description, human feedback, source dependencies and applicable branch rules were refreshed before approval.

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