Skip to content

Take Housing Benefit earnings disregards from net earnings only - #1908

Open
MaxGhenis wants to merge 4 commits into
mainfrom
hb-earnings-disregards
Open

MaxGhenis wants to merge 4 commits into
mainfrom
hb-earnings-disregards

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #1794.

Problem

housing_benefit_applicable_income_disregard gave every single person £5 a week, every couple £10 and every lone parent £25, whether or not anyone had earnings. housing_benefit_applicable_income then took it off total income, including the State Pension, private pensions and benefits. The amounts carried uprating: gov.benefit_uprating_cpi, so £5 had become £7.02 a week by 2026. The "worker" disregard was £37.10, also uprated (£52.11 a week in 2026). It went to any benefit unit whose members' hours added together exceeded 30 (16 for lone parents), with no age condition, no earnings test and none of the other conditions.

2026, council tenant, rent £6,240 main: disregard → applicable income → HB this PR
A. Single aged 72, State Pension £15,000, no earnings £365.20 → £14,148.80 → £5,696.08 £0 → £14,514.00 → £5,458.70
B. As A, plus earnings £1,000 £365.20 → £14,948.80 → £5,176.08 £260.00 → £15,054.00 → £5,107.70
C. Single aged 40, 30 hours, earnings £10,000 (continuing award) £365.20 → £9,634.80 → £3,206.97 £1,149.20 → £8,850.80 → £3,716.57
D. Single aged 24, 35 hours, earnings £10,000 (continuing award) £3,075.01 → £6,924.99 → £4,295.73 £260.00 → £9,740.00 → £2,465.97
E. Lone parent, 10 hours, earnings £1,040, child aged 5 £1,826.02 → £620.58 → £6,240 £1,040.00 → £1,406.60 → £6,240
F. Childless couple aged 40, 16 hours each, £4,000 each £3,440.22 → £4,559.78 → £6,240 £520.00 → £7,480.00 → £6,240

These are real runs of origin/main (1c5b4d0) and this branch. A, B and C are the three end-to-end YAML cases below. A has no earnings, so the law disregards nothing. C works exactly 30 hours: main required more than 30, so it gave no worker disregard. D is under 25, so the law gives no additional disregard. E's disregard is capped at earnings; HB is at the maximum either way. In F neither partner works 30 hours, but main added their hours together.

The pension-age allowance in A and B (£256 vs £238). The model gives every pension-age single claimant £256 a week (£13,312 a year). In law that is the rate for a claimant "who has attained pensionable age before 1st April 2021"; one who attained it "on or after 1st April 2021" has £238.00 (SI 2006/214 Sch 3 para 1(1), as amended by SI 2021/188). A and B are aged 72, so they reached pensionable age before that date, and £256 is also the law's rate for them. A claimant aged 70 in 2026-27 reached it later: at £238 this branch gives £4,850.30 (A) and £4,499.30 (B), but the change from main is the same (−£237.38 and −£68.38), since both are on the taper either way. #1913 splits the allowance by that date. The end-to-end YAML sets the applicable amount as an input, so it tests the disregard whether or not #1913 lands.

Law

All texts were read from legislation.gov.uk CLML (/data.xml) on 2026-09-30. The current revised texts, point-in-time versions and commentaries are saved in the research folder.

SI 2006/213 (working age), Schedule 4: "Sums to be disregarded in the calculation of earnings" (regs 36(2) and 38(2)).

  • Para 4: "In a case where the claimant is a lone parent, £25."
  • Para 7: "In a case where paragraphs 3, 5, 6 and 8 do not apply to the claimant and he is one of a couple and a member of that couple is in employment, £10; but … if this paragraph applies to a claimant it shall not apply to his partner except where, and to the extent that, the earnings of the claimant which are to be disregarded under this paragraph are less than £10."
  • Para 10: "In a case to which none of the paragraphs 3 to 9 applies, £5."
  • Para 12: "Where a claimant is on universal credit, income support, an income-based jobseeker's allowance or an income-related employment and support allowance, his earnings."
  • Para 17(1): "In a case where the claimant is a person who satisfies at least one of the conditions set out in sub-paragraph (2), and his net earnings equal or exceed the total of the amounts set out in sub-paragraph (3), the amount of his earnings that falls to be disregarded under paragraphs 3 to 10A of this Schedule shall be increased by £17.10."
  • Para 17(2)(b):
    • (i) the claimant "is, or if he is a member of a couple, at least one member of that couple is aged at least 25 and is engaged in remunerative work for on average not less than 30 hours per week";
    • (ii) the claimant "is a member of a couple and— (aa) at least one member of that couple, is engaged in remunerative work for on average not less than 16 hours per week; and (bb) … his family includes at least one child or young person";
    • (iii) the claimant "is a lone parent who is engaged in remunerative work for on average not less than 16 hours per week";
    • (iv) and (v): a single claimant, or a member of a couple, working 16 hours, who has the disability premium or support component or is in the work-related activity group.
  • Para 17(3): "(a) the amount to be disregarded from the claimant's earnings under paragraphs 3 to 10A of this Schedule; (b) the amount of child care charges calculated as deductible under regulation 27(1)(c); and (c) £17.10."

SI 2006/214 (pension age), Schedule 4: "Sums disregarded from claimant's earnings" (reg 36(1)).

  • Para 2: "In a case where a claimant is a lone parent, £25 of earnings."
  • Para 7: "Except where the claimant or his partner qualifies for a £20 disregard under the preceding provisions of this Schedule— (a) £5 shall be disregarded if a claimant who has no partner has earnings; (b) £10 shall be disregarded if a claimant who has a partner has earnings."
  • Para 9(1): the same test as para 17(1), with "the amount of his earnings that falls to be disregarded under this Schedule shall be increased by £17.10".
  • Para 9(2)(b):
    • (i) "is, or any partner of his is, aged at least 25 and is engaged in remunerative work for on average not less than 30 hours per week";
    • (ii) and (iii): as working age;
    • (iv) "is, or if he has a partner, one of them is, engaged in remunerative work for on average not less than 16 hours per week, and paragraph 5(1) above is satisfied in respect of that person".
  • Para 9(3): "(a) any amount disregarded under this Schedule; (b) the amount of child care charges calculated as deductible under regulation 31(1)(c) (treatment of child care charges); and (c) £17.10."
  • The pension-age lone parent: £25, not £25 + £5 (the reading adopted). Para 1 caps the total only "Where two or more of paragraphs 2 to 5 apply", and para 7 is withheld only where the claimant or partner "qualifies for a £20 disregard". Read literally, a lone parent could therefore add para 7(a)'s £5 to para 2's £25. This PR gives £25. DWP's HB guidance manual supports that reading: BP2 (pension age), para P2.159 (Amendment 21, March 2010), citing HB(SPC) Sch 4 para 2, says £25 "is the maximum disregard that can be applied if the claimant is a lone parent", and lists the £5 for "a single person". (BP2 PDF.) The working-age schedule has no such question: para 10's £5 applies only "In a case to which none of the paragraphs 3 to 9 applies".

Net earnings.

  • SI 2006/213 reg 36:
    • (2): "There shall be disregarded from a claimant's net earnings, any sum, where applicable, specified in paragraphs 1 to 14 of Schedule 4."
    • (3): net earnings are "the gross earnings … less— (a) any amount deducted from those earnings by way of— (i) income tax; (ii) primary Class 1 contributions under the Act; (b) one-half of any sum paid by the claimant by way of a contribution towards an occupational pension scheme; (c) one-half of the amount … in respect of any qualifying contribution".
  • Self-employed: reg 38 (net profit less income tax and NI under reg 39, and half of qualifying premiums); reg 38(10): a loss in one employment "shall not be offset against his earnings in any other of his employments".
  • Pension age: SI 2006/214 reg 36(1) ("subject to regulation 33(5) and Schedule 4, be his net earnings") and (2) (same deductions); reg 39 for the self-employed.
  • Children: "The income and capital of a child or young person shall not be treated as the income and capital of the claimant" (213 reg 25(3); 214 reg 23(3)).
  • Hours: reg 6(1) defines remunerative work as "not less than 16 hours a week"; para 17(4) and para 9(4) apply it with 30 hours.

Why para 17(2)(a) and (c) add nothing.

  • (a): the claimant is "a person to whom regulation 20(1)(c) of the Working Tax Credit Regulations applies". That is the 30 hour element, for a single claimant working 30 hours, a couple either of whom works 30, or a couple with a child working 30 hours between them with one working 16 (WTC Regs reg 20(1)(c)). WTC entitlement needs one of the reg 4 second-condition variations: a child, a disability, aged at least 25 and working 30 hours, or aged at least 60 and working 16 hours. Beyond (b), route (a) adds only two cases: a couple whose 30-hour worker is under 25 and whose partner is aged at least 60 and works 16 hours, and a disability that meets the WTC test (reg 9) but not the disability premium test. Neither is modelled. Since SI 2014/1230 reg 6A(9), "a person may not make, or be treated as making, a claim for a tax credit in respect of the whole, or any part, of the tax year beginning on 6th April 2025 or any subsequent tax year".
  • (c): the 50 plus element in WTC Regs reg 18 was "omitted (6.4.2012)" by SI 2012/848.

Amounts over time. I fetched point-in-time versions from legislation.gov.uk.

  • £5, £10 and £25: identical at 6 March 2006 (when the regulations came into force), 5 April 2010, 1 April 2015, 6 April 2020, 5 April 2021 and in the current text. There is no amending annotation on those paragraphs. They have never been uprated.
  • £17.10: £14.50 in 2006, £15.45 from April 2007, £16.05 from April 2008, £16.85 from April 2009, and £17.10 from 1 April 2010. The £17.10 was substituted by the Social Security Benefits Up-rating Order 2010 (SI 2010/793 art 19(10) for 213, art 20(9) for 214). Since then the up-rating orders have only "maintained" it (SI 2020/234, SI 2021/162) or "confirmed" it (SI 2026/148, arts 23(10) and 24(9)).
  • The exception is SI 2020/371 reg 5. It read both schedules "as if, for "£17.10" there were substituted "£37.10"", and "This regulation takes effect on 6th April 2020 and ceases to have effect at the end of 4th April 2021". The model's £37.10 (dated 2015 and uprated with CPI) matches that temporary coronavirus figure.

Northern Ireland. The NI earnings disregards are in Schedule 5, not Schedule 4 (Schedule 4 of both NI instruments is applicable amounts).

  • SR 2006/405 Sch 5: paras 4 (£25), 7 (£10), 10 (£5), 12 and 17 (£17.10).
  • SR 2006/406 Sch 5: paras 2 (£25), 7 (£5/£10) and 9 (£17.10).
  • The wording matches GB, and the coronavirus change is SR 2020/53 reg 5, with the same dates.
  • legislation.gov.uk's current text of SR 2006/406 Sch 5 para 9(1) still displays "£37.10". Its own annotations record the sum as confirmed by every NI up-rating order from 2021 to 2026 (latest SR 2026/59 art 24(8)), and SR 2020/53 reg 5(3) ended the substitution on 4 April 2021. So £17.10 applies.

Change

  • housing_benefit_net_earnings (new, benefit unit), for each claimant or partner (is_adult, the proxy the other HB variables use):
    • employment income plus self-employment profit, each floored at zero (reg 38(10));
    • less income tax attributed to earnings, Class 1, 2 and 4 National Insurance, and half of pension contributions;
    • floored at zero.
    • is_adult excludes the earnings of members under 18. It still counts a qualifying young person aged 18 or 19, whose income the law excludes (213 reg 19(1) and 25(3)). That is a known limitation of the proxy, pinned in the YAML, until Replace generic child and adult flags with each programme's legal definitions #1896's claimant-or-partner variable replaces it.
    • Income tax. The regulations deduct the income tax deducted from an employee's earnings (213 reg 36(3); 214 reg 36(2)). For the self-employed they deduct a notional basic-rate tax on the profit alone, less personal reliefs (213 reg 39(1); 214 reg 40(1)). The model attributes a person's income tax to earnings in proportion to their share of total income.
      • For an employee that is a lower bound on the tax on the earnings taken as the top slice of income. On a grid of 162 combinations of earnings (£500 to £130,000) with State Pension, private pension, savings, dividend and property income, at ages 40 and 70, it never exceeded that.
      • For self-employment profit alongside other income it can exceed the notional tax, which is computed on the profit alone.
      • It is exact for an employee whose earnings are their only taxable income, and whenever no tax is due. The dataset check below shows the choice changes no one's HB in 2026.
  • meets_housing_benefit_additional_earnings_disregard_conditions (new). One of:
    • one claimant or partner aged at least 25 works at least 30 hours;
    • a lone parent, or a couple with a child or young person, with someone working at least 16 hours;
    • a disabled claimant or partner working at least 16 hours. Disability is is_disabled_for_benefits, the input behind disability_premium.
    • Hours are individual, not summed, and "not less than" is >=.
    • The claimant and partner are the same is_adult proxy, so an 18- or 19-year-old young person's hours can meet a condition (Replace generic child and adult flags with each programme's legal definitions #1896).
  • housing_benefit_applicable_income_disregard (rewritten):
    • min(£25 lone parent / £10 couple / £5 otherwise × 52, net earnings);
    • plus £17.10 × 52 where the conditions hold and net earnings ≥ that amount + housing_benefit_applicable_income_childcare_element + £17.10 × 52. "Equal or exceed" is compared in pence. Net earnings are float32, so exactly £1,149.20 is held as £1,149.19995, and an exact comparison failed at equality;
    • or all net earnings for a working-age benefit unit on Income Support, income-based JSA or income-related ESA (213 Sch 4 para 12; there is no pension-age counterpart). "On universal credit" is left out because a family claiming UC is not HB-eligible in the model.
  • Parameters:
    • single, couple, lone_parent: no uprating, dated from 6 March 2006, with references to both instruments and NI and the "disreagrded" typo fixed.
    • worker: £17.10 from 1 April 2010, £37.10 for 2020-21, £17.10 from 5 April 2021, no uprating.
    • worker_hours: 30, with its references corrected.
    • New worker_hours_lower (16) and worker_age (25).
    • New means_test/pension_contribution_deduction_rate (0.5).
  • housing_benefit_applicable_income.py is unchanged, since fix 1 edits it. It still subtracts the disregard from total income; with the disregard now capped at net earnings, that is the same as taking it from earnings.

The pension-age and working-age schedules give the same result in every case the model covers, except para 12 (and given the lone-parent reading above). A property test checks this metamorphically, within the limits stated under Invariants. The branch uses any member over State Pension age, as housing_benefit_tariff_income and the capital limit do.

Invariants

These are property-tested in test_housing_benefit_earnings_disregard_properties.py: Hypothesis, derandomize=True, 5 examples of up to 30 families (single, couple, lone parent, couple with children; ages 18 to 90, including 24 and 25; hours including 15, 16, 29 and 30; earnings £0 to £60,000; disability; pension contributions; childcare). Runtime is 48 s on an idle host (113 s under load in the latest run).

  1. 0 ≤ disregard ≤ min(net earnings, (£25 + £17.10) × 52), and net earnings ≤ the claimant's and partner's gross earnings.
  2. No earnings, no disregard.
  3. The disregard is non-decreasing in employment income, holding IS, JSA and ESA at zero. Leaving Income Support as earnings rise can lower it, because para 12 stops applying. That is an intended violation.
  4. £5, £10 and £25 are the same in every year 2015 to 2030, and £17.10 every year except 2020, which is £37.10. The 2020 value is the intended SI 2020/371 exception, read through the model's 30 April fiscal-year sampling.
  5. The disregard never raises applicable income, and lowers it by no more than the claimant's and partner's gross earnings.
  6. Metamorphic: moving every adult between working age (25 to 60) and pension age (67 to 90), with earnings below the tax and NI thresholds, leaves the disregard unchanged. The test covers only those earnings and adults aged 25 or over. There, nothing age-dependent (para 12, the age-25 test, NI above State Pension age) can differ between the two groups. So it pins the current behaviour; it is weak evidence that the two schedules agree in general.
  7. Differential against the old formula read at its unuprated 2015 values (£5, £10 or £25, plus £37.10 for summed hours over 30, or 16 for lone parents):
    • They agree where net earnings cover the flat amount and neither formula gives the additional disregard.
    • They must differ where there are no earnings (new: 0) and where net earnings are below the flat amount (new: net earnings).
  8. Para 12: with Income Support, a working-age unit's disregard equals its net earnings, and a pension-age unit's disregard is unchanged.

Mutation check. Ten mutations were each applied to a scratch copy of the branch (before the review round) and run against the new YAML and property tests. The unmutated control passed both.

  • The YAML catches all 10.
  • The property tests alone catch 5 of the 10:
    • M1, CPI uprating restored on £5;
    • M2, no cap at net earnings;
    • M5, the net-earnings test dropped;
    • M6, para 12 dropped;
    • M7, the additional amount back at £37.10.
  • They miss the other 5, all of which the YAML catches:
    • M3, > for the 30 hours;
    • M4, the age-25 condition dropped;
    • M8, childcare left out of the earnings test;
    • M9, tax not deducted from net earnings;
    • M10, children's earnings counted.
  • The independent review added M11: para 12 applied at pension age too. The YAML misses it; test_income_support_disregards_all_working_age_earnings catches it.

Tests

  • New YAML files (48 cases). Every expectation is hand-computed in a comment from the law and the 2026 parameters (personal allowance £12,570, basic rate 20%, Class 1 primary threshold £241.73 × 52, 8%; HB allowances £95.55 and £256 a week; taper 65%). Two cases pin known model limitations and say so; their comments give the law's value too.
    • applicable_income/housing_benefit_applicable_income_disregard.yaml (29):
      • pensioner with only a State Pension → 0; £3 a week → £156; £100 a week → £260 in 2026 and 2030;
      • couple £520; couple earning £3 + £4 → £364; lone parent £20 a week → £1,040, £100 a week → £1,300;
      • 30 hours aged 30 → £1,149.20; exactly 25 and exactly 30 hours → £1,149.20; aged 24 → £260; 29 hours → £260;
      • the para 17(1) earnings test ("equal or exceed"): net earnings £1,149 → £260, a penny below (£1,149.19) → £260, exactly £1,149.20 → £1,149.20, £1,150 → £1,149.20;
      • lone parent 16 hours → £2,189.20, but £1,300 at £40 a week; a penny below (£2,189.19) → £1,300, exactly £2,189.20 → £2,189.20;
      • childcare £80 a week defeats the test (£5,200 < £6,349.20) → £1,300, childcare £20 a week does not → £2,189.20;
      • couple with child, 16 hours → £1,409.20; childless couple 16 + 16 hours → £520;
      • Income Support → all £1,040; child aged 17's earnings → 0; 2020 → £2,189.20 (£5 + £37.10);
      • model limitation: disabled single person working 20 hours → £1,149.20 (£5 + £17.10). The law gives £1,929.20 (£20 + £17.10): 213 Sch 4 para 3(2), "This paragraph applies where the claimant's applicable amount includes an amount by way of the disability premium". The £20 disregards are out of scope here and tracked as a follow-up;
      • model limitation: a non-earning lone parent with an 18-year-old qualifying young person who earns £8,000 on 16 hours → net earnings £8,000 and £1,409.20, because is_adult treats the young person as a partner. The law gives 0 (213 regs 19(1) and 25(3)). Pinned until Replace generic child and adult flags with each programme's legal definitions #1896.
    • applicable_income/housing_benefit_net_earnings.yaml (6): below thresholds; half of £400 pension contributions; £20,000 → £17,919.60 (tax £1,486, NI £594.40); pensioner with State Pension £15,000 + earnings £1,000 → £957.13 (tax £686 × 1/16); self-employment loss not offset; couple added.
    • applicable_income/meets_housing_benefit_additional_earnings_disregard_conditions.yaml (10): each route and its boundary, including "the 25-year-old must be the 30-hour worker" and "the disabled partner must be the one working".
    • housing_benefit_earnings_disregards.yaml (3 end-to-end; cases A, B and C above):
      • All are council tenants with Guarantee Credit £0, so the LHA-order and Guarantee Credit passport fixes cannot change them.
      • A and B (aged 72) set housing_benefit_applicable_amount to £13,312 (£256 × 52) as an input, the rate for a claimant who reached pensionable age before 1 April 2021. So they test the disregard independently of the allowance, which Split pension-age Housing Benefit allowances by when State Pension age was attained #1913 splits by that date.
      • C sets guarantee_credit: 0 as an input. It is working age, but the model computes £2,376 of Guarantee Credit for it, so the input keeps any form of the passport out.
      • C asserts housing_benefit_entitlement, not housing_benefit. Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910 multiplies the entitlement by the share of 2026 before working-age HB is abolished, in housing_benefit_pre_benefit_cap, and leaves the entitlement unchanged.
  • On origin/main all 48 new cases fail: 27 on values, 21 because the new variables do not exist.
  • On this branch (68c9df2):
    • the HB, Pension Credit and uc_legacy_mutual_exclusion.yaml YAML: 161 passed, 0 failed (113 existing, all unchanged, + 48 new);
    • the property tests: 7 passed;
    • with the old exact comparison restored, the two exact-equality cases fail (£260 and £1,300) and the other 27 disregard cases pass.
  • Before the review round (the branch at 6737dd5 and 8bed988; 8bed988 changed only a documentation string):
    • the full YAML suite: 1,319 passed, 0 failed (on 6737dd5);
    • the non-microsimulation pytest suite (pytest policyengine_uk/tests -m "not microsimulation"): 325 passed, 15 skipped, 30 deselected, 0 failed. The log records no commit. The run started at 07:49 and ended at 09:17, so it began on 6737dd5 (committed 07:44), before 8bed988 (08:08).
    • CI on 8bed988 passed. CI on this head: see the checks.
  • ruff format --check is clean on every changed Python file.
  • No existing expectation changed. The existing tests that touch the disregard set it as an input, have no earnings, or are consistent with the new behaviour (test_carer_support_payment.py checks hb_income == max(0, csp - disregard), which still holds with a disregard of 0).

Dataset impact (Enhanced FRS 2024-25, current weights, real runs of main vs this branch)

HB falls by £21.7m in 2026, in two parts that move in opposite directions relative to the law:

  • pension-age units −£18.0m, towards the law: the flat, uprated disregard no longer comes off non-earners' pensions, and earners get the statutory £5 or £10;
  • working-age units −£3.7m, away from the law until the Sch 5 para 4 passport is added. Almost all of these families are on Income Support, income-based JSA or income-related ESA, and the law gives them maximum HB (see below).
2026 main this PR change
Housing Benefit £14.227bn £14.205bn −£21.7m
HB caseload (benefit units) 1,711.7k 1,711.7k 0
wholly pension-age units £13.843bn £13.825bn −£18.0m (towards the law)
mixed-age units £0.200bn £0.200bn 0
working-age units £0.184bn £0.181bn −£3.7m (away from the law, pending the passport)
UC / Pension Credit / Council Tax Reduction / benefit cap £79.32bn / £6.99bn / £2.35bn / £1.18bn unchanged 0
Household net income −£21.7m (= HB change)
AHC poverty, all / pensioners 18.664% / 10.814% 18.665% / 10.821% +0.001 pp / +0.006 pp

87.7k benefit units lose. None gain, and none lose all their HB. The largest possible loss is the whole of the old lone-parent disregard tapered at 65%: 0.65 × £35.12 a week (the uprated £25) × 52 = £1,186.91 a year, for a lone parent without earnings whose income is above the applicable amount. Working-age losers of this kind are almost all on Income Support, income-based JSA or income-related ESA, so the law gives them maximum HB (see below).

HB recipients, 2026 recipients Guarantee Credit passport changed HB change mean change
pension-age, no earnings 1,661.3k 1,519.6k 71.6k −£17.75m −£247.78
pension-age, with earnings 3.1k 0 2.8k −£0.26m −£93.54
mixed-age (none have earnings) 19.3k 19.3k 0 0
working-age, no earnings 27.4k 0 13.3k −£3.66m −£275.64
working-age, with earnings 0.6k 0 0 0

Who moves, and why:

  • Most recipients do not move. 1,539k of the 1,712k have their applicable income zeroed by the Guarantee Credit passport. Many others are below their applicable amount, so they get maximum HB either way.
  • The £21.4m that non-earners lose is the old disregard (£365.20 a year single, £730.41 couple, £1,826.02 lone parent) no longer coming off their pensions and benefits. On the taper that costs 65% of it (0.65 × £365.20 = £237.38 for a single person).
    • For 73.2k of the 87.7k changed units, the HB change equals −0.65 × the change in applicable income exactly.
    • 14.1k were below their applicable amount on main and cross onto the taper.
  • The working-age losers are passported to maximum HB in law.
    • 13.26k of the 13.28k working-age losers (−£3.64m of −£3.66m) receive Income Support, income-based JSA or income-related ESA. So do 22.4k of the 28.0k working-age HB recipients.
    • SI 2006/213 Sch 5 para 4 disregards, among "Sums to be disregarded in the calculation of income other than earnings": "Where a claimant is on universal credit, income support, an income-based jobseeker's allowance or an income-related employment and support allowance the whole of his income." With no income counted, they get maximum HB in law, on main and on this branch.
    • The model has no such passport and counts IS, JSA and ESA as income. The flat disregard this PR removes was partly offsetting that error. So this PR moves these families' modelled HB £3.64m further below the law's value until the passport is added (see Not in this PR).
    • The other 0.02k working-age losers (−£0.02m) are not on those benefits; for them the change moves towards the law.
  • Earners. Only 3.7k HB recipients have earnings.
    • Pension-age earners lose the uprated £7.02 (now £5) or £14.05 (now £10).
    • The 0.6k working-age earners are couples with a child and one person working 16 hours. Their disregard rises to £1,409.20, but they are below their applicable amount, so HB does not move.
    • No HB recipient in 2026 has net earnings below the flat amount, the para 12 route, or a failed earnings test.
  • Income-tax attribution. 2.8k recipients have earnings and taxable income, where the attribution could matter. Two further real branch runs set housing_benefit_net_earnings to each bound: no income tax attributed to earnings, and all of each person's income tax attributed. Both give exactly the same HB for every record (0 records differ), so the proportional attribution does not affect the 2026 results.

Caveats:

  • The current weights were calibrated to an HB total under the old code, so a policyengine-uk-data rebuild will move these numbers.
  • This is measured against main alone. Fix 1 (Guarantee Credit passport keyed on receipt) makes more pensioners' applicable income positive, and those without earnings would then also lose the old disregard. After fix 3 (LHA cap before the taper), 1.2k units currently held at the LHA cap become sensitive to applicable income. No combined run is included.
  • Diagnostics in the research folder:
    • impact/diag_disregard.py and impact/diag_disregard_2026.json: the breakdown above;
    • impact/diag_disregard_final.py and impact/diag_disregard_final_2026.json: the IS/JSA/ESA split and the largest loss.
  • The dataset run was repeated on the final code (impact/disregard-final*). Every per-unit and per-person array and every total is identical to the first run, so the change to the earnings-test comparison moves no record.

Not in this PR

  • The £20 disregards (213 Sch 4 paras 3, 5, 6, 8 and 9; 214 paras 1 and 3 to 5): disability, carers and part-time firefighters, coastguards, lifeboat crew and reserve forces.
    • Disability and carers are feasible: disability_premium > 0 and carer_premium > 0 exist for working age (213 paras 3(2) and 5(1)), and is_disabled_for_benefits (or attendance_allowance > 0) can stand in for 214 para 5(1). The occupations are not observable.
    • 214 para 1 caps the total at £20 (£25 for a lone parent), and 214 para 7 withholds the £5/£10 from anyone who gets a £20 disregard.
    • Until then, disabled people and carers with earnings get £5 or £10 instead of £20. The YAML pins this for a disabled single worker as an intended limitation: £5 + £17.10 where the law gives £20 + £17.10 (213 Sch 4 para 3(2)).
  • Exempt (permitted) work (213 Sch 4 para 10A; 214 Sch 4 para 5A). Where the claimant or partner receives contributory ESA, incapacity benefit or severe disablement allowance (or is credited with earnings for incapacity) and the Secretary of State "is satisfied that that person is undertaking exempt work", "the specified amount" is disregarded: the amount named in the ESA or incapacity provision that makes the work exempt (para 10A(7); para 5A(7)). Under 213 para 10A(2), "paragraphs 3 to 10 do not apply"; under 214 para 5A(2), "paragraphs 1 to 5 and 7 do not apply". A lone parent keeps £25 where the specified amount is less. Not modelled.
  • Childcare charges. housing_benefit_applicable_income_childcare_element has three problems:
    • It is subtracted from total income. The law deducts it "from any earnings" (213 reg 27(1)(c); 214 reg 30(1)(c)), or from earnings plus the WTC or CTC, where reg 27(2) / 30(2) applies.
    • It has no work test. 213 reg 28(1) and 214 reg 31(1) require a lone parent in remunerative work, or a couple both working (or one working and the other incapacitated, in hospital or in prison).
    • Its weekly maxima are the WTC childcare_1/childcare_2 parameters uprated by CPI (£322.67 and £553.14 in 2026), where reg 27(3) and 214 reg 30(3) fix £175 and £300.
    • The new earnings test uses this same variable, so it tests against the charges the model actually deducts.
  • Income tax. The model deducts every member's income tax from HB income.
    • Tax on income that HB counts is disregarded in law (213 Sch 5 para 1; 214 reg 33(12): "there shall be disregarded any amount payable by way of tax"), so that part matches.
    • Tax on savings interest and dividends is also deducted, although HB does not count that income (it uses tariff income from capital). That over-deducts for claimants with taxable savings or dividend income.
  • Children's earnings still count in housing_benefit_applicable_income, although 213 reg 25(3) and Sch 4 para 15 and 214 reg 23(3) exclude them. The new net earnings exclude members under 18 but not a qualifying young person aged 18 or 19 (the is_adult proxy; see the overlap with Replace generic child and adult flags with each programme's legal definitions #1896 below). In 2026 no HB unit has a child with earnings, and none (to the nearest 0.01k) has an 18- or 19-year-old young person with earnings.
  • Child Benefit counts as HB income, although 213 Sch 5 para 65 disregards "Any payment of child benefit" and 214 reg 29(1)(j)(vi) excludes it (case E above includes £1,406.60 of it).
  • The working-age income passport (follow-up: Disregard the whole income and capital of HB claimants on IS, income-based JSA or income-related ESA (HB Regs Sch 5 para 4, Sch 6 para 5) #1993). 213 Sch 5 para 4 disregards "the whole of his income" for a claimant on UC, IS, income-based JSA or income-related ESA. The model counts IS, JSA and ESA as income and has no such passport; this PR implements only the earnings part (Sch 4 para 12). The passport would raise these families' HB, the opposite direction to this PR's effect on them (its size is not measured here). Until it is added, this PR moves 13.26k working-age families on those benefits £3.64m a year further below the law (see Dataset impact). It is being filed as a follow-up.
  • 213 Sch 5 para 56 / 214 Sch 5 para 21 disregard Working Tax Credit up to £17.10 where a para 17(2) condition is met but the earnings test is not. No tax credit can be claimed for 2025-26 onwards (SI 2014/1230 reg 6A(9)), so this matters only for earlier years, and it is not modelled.
  • The work-related activity group and the support component (213 para 17(2)(b)(iv)-(v)) are not modelled.
  • income_support_applicable_income applies its own flat disregards to all income, in the same way this PR fixes for HB. It was not checked against the IS Regulations.
  • The 0.5 pension-contribution factor in housing_benefit_applicable_income could use the new parameter. It is left alone to keep this PR out of that file.
  • The Housing Benefit docs page does not describe the disregards, so it is unchanged.

Overlap with #1896 (remove-is-child-flags, open, conflicting):

  • It edits a comment and adds a reference in housing_benefit_applicable_income_disregard.py, which this PR rewrites. When it rebases, it should drop those two lines.
  • Its code-health test lists is_adult as deprecated. The two new variables each read is_adult once, as the claimant-and-partner proxy, and Replace generic child and adult flags with each programme's legal definitions #1896 should switch those reads to is_claimant_or_partner. That also fixes the 18-year-old young person case, whose YAML expectation (£1,409.20; law 0) should then change to 0.

axiom: SI 2006/213 Sch 4 and SI 2006/214 Sch 4 — TheAxiomFoundation/rulespec-uk#375 queued

🤖 Generated with Claude Code

MaxGhenis and others added 2 commits September 30, 2026 07:44
housing_benefit_applicable_income_disregard gave every single person, couple
and lone parent £5, £10 or £25 a week, and housing_benefit_applicable_income
took it off total income, so pensioners with only a State Pension had £5 a
week of it disregarded. The amounts were uprated with CPI (£5 became £7.02 a
week in 2026). The additional earnings disregard was £37.10, also uprated,
and went to anyone whose benefit unit's summed hours exceeded 30 (16 for lone
parents).

SI 2006/213 Sch 4 and SI 2006/214 Sch 4 (NI: SR 2006/405 and SR 2006/406
Sch 5) are "sums to be disregarded in the calculation of earnings". The
disregards are now taken from the claimant's and partner's net earnings
(housing_benefit_net_earnings: earnings less income tax, National Insurance
and half of pension contributions, regs 36 and 38/39) and capped at them.
The £5, £10 and £25 amounts have not changed since 2006 and are no longer
uprated. The additional earnings disregard is £17.10 (£37.10 from 6 April
2020 to 4 April 2021 under SI 2020/371 reg 5), and it needs one of the work
conditions in para 17(2) / 9(2) (one person aged at least 25 working at
least 30 hours; 16 hours for lone parents, couples with a child and disabled
workers) and net earnings at least equal to the other disregards, the
childcare charges deducted and £17.10. A working-age claimant on Income
Support, income-based JSA or income-related ESA has all earnings disregarded
(SI 2006/213 Sch 4 para 12).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The work-conditions variable said paragraph 17(2)(a) and 9(2)(a) need
Working Tax Credit entitlement, which requires one of the modelled
conditions. WTC Regs reg 4 also entitles a couple through a partner aged 60
working 16 hours, and its disability test differs from the disability
premium's, so the route adds two narrow cases. Neither is modelled, and no
tax credit can be claimed for 2025-26 onwards (SI 2014/1230 reg 6A(9)).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Para 17(1) and 9(1) add £17.10 where net earnings "equal or exceed" the
other disregards, the childcare charges and £17.10. Net earnings are
float32, so exactly £1,149.20 (£5 + £17.10 a week) was held as £1,149.19995
and failed the test. The comparison is now in pence, and new cases pin
£1,149.20 (single, 30 hours) and £2,189.20 (lone parent, 16 hours) as
granted and a penny below each as not.

The end-to-end pension-age cases are aged 72 and set the applicable amount
(£256 x 52) as an input. SI 2006/214 Sch 3 para 1(1) gives £256 only to a
claimant who reached pensionable age before 1 April 2021, and £238 to one
who reached it later; #1913 models that split. The working-age case asserts
housing_benefit_entitlement, which #1910's 2026 abolition scaling does not
change.

The disabled-worker case is labelled as a model limitation: the disability
premium also brings in Sch 4 para 3's £20 in place of £5, which is not
modelled. A new case pins the is_adult proxy counting an 18-year-old young
person's earnings and hours (the law excludes them) until #1896 replaces
it. The net earnings documentation names the provisions that set the tax
deducted (213 regs 36(3) and 39(1); 214 regs 36(2) and 40(1)), calls the
proportional attribution a lower bound for employees, and says what the
proxy counts. The changelog fragment is a bullet.

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

Copy link
Copy Markdown
Collaborator

Reviewed: approve with nits (the one Should fix is a description edit).

The disregards are now taken from net earnings and capped by them, with the correct non-uprated amounts and the correct £17.10 conditions. This fixes #1794.

  1. Should fix (description). The "largest loss" bullet describes a single survey record. Replace it with aggregates.
  2. Nit housing_benefit_applicable_income_disregard.py:58-65. Sch 4 para 12 is implemented, but its partner rule SI 2006/213 Sch 5 para 4 is not: "the whole of his income" is disregarded on IS/JSA(IB)/ESA(IR). That gap already exists on main, but this PR moves about 13k working-age units £3.6m further from the law. File the follow-up and link it before merging. After Abolish working-age Housing Benefit from 1 July 2026 (NI 1 October 2026) #1910 it only affects years up to 2026-27.
  3. Nit worker.yaml:3. The series starts at 2010-04-01. Add the 2006–09 values from the description (£14.50, £15.45, £16.05, £16.85).
  4. Nit. Two YAML cases pin values the PR knows are wrong (the disabled worker's £20, and the 18-year-old young person). Label them # KNOWN LIMITATION: law gives X.

Verified: I read on legislation.gov.uk SI 2006/213 reg 36(3), Sch 4 paras 4, 10 and 17 and Sch 5 para 4; SI 2006/214 Sch 4 paras 1, 2, 7 and 9; and SI 2020/371 reg 5 (£37.10 from 6 April 2020 to 4 April 2021). The 30 hours, age 25 and "equal or exceed" wording matches. In a fresh environment the new YAML passed 48/48 and the property tests passed 7/7. CI: all 6 checks pass.

…imitations

The £17.10 series started in 2010. Add the earlier sums from the
point-in-time texts of SI 2006/213 Sch 4 para 17 and SI 2006/214 Sch 4
para 9: £14.50 as made, then £15.45, £16.05 and £16.85 from 1 April 2007,
2008 and 2009 (SI 2007/688, 2008/632, 2009/497), with the orders cited.

Mark the two YAML cases that pin known model limitations with the value
the law gives.

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

Copy link
Copy Markdown
Collaborator Author

Thanks, Vahid. All four points are handled:

  1. Largest-loss bullet: replaced with the generic arithmetic (the whole old lone-parent disregard, tapered). There is no single-record description now. Deleting the old revisions is queued for Max.
  2. Sch 5 para 4: filed as Disregard the whole income and capital of HB claimants on IS, income-based JSA or income-related ESA (HB Regs Sch 5 para 4, Sch 6 para 5) #1993 and linked from "Not in this PR", with the split showing −£3.7m away from the law for IS/JSA/ESA families.
  3. worker.yaml: now runs from 2006 using the point-in-time texts. The values are £14.50 as made, then £15.45, £16.05 and £16.85 from 1 April 2007, 2008 and 2009, then £17.10 from 1 April 2010 (SI 2007/688, 2008/632, 2009/497, 2010/793), plus the SI 2020/371 £37.10 window.
  4. Known limitations: both cases are labelled KNOWN LIMITATION:, with the value the law gives (£1,929.20 and 0).

An independent round-2 review is running.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Cross-reference from #2000 (fixes #1993, the SI 2006/213 Sch 5 para 4 / Sch 6 para 5 passport).

🤖 Generated with Claude Code

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.

Housing Benefit earnings disregard stacks the base disregard on top of the worker disregard (over-disregard vs SI 2006/213 Sch 4)

2 participants