Repository navigation
Take Housing Benefit earnings disregards from net earnings only - #1908
Conversation
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>
|
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.
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>
|
Thanks, Vahid. All four points are handled:
An independent round-2 review is running. |
|
Cross-reference from #2000 (fixes #1993, the SI 2006/213 Sch 5 para 4 / Sch 6 para 5 passport).
🤖 Generated with Claude Code |
|
Main merged in, and the parameter values re-checked against the law (2026-10-02).
|
From the round-2 review: - Para 12 has no age condition: SI 2006/213 applies to a claimant over the qualifying age whose partner is on IS, income-based JSA or income-related ESA (reg 5(1)(b); SI 2006/214 reg 5(2)). - Statutory sick and maternity pay are earnings (SI 2006/213 reg 35(1)(i); SI 2006/214 reg 35(1)(h)). - Income tax is attributed by the earnings' share of income before employment and self-employment losses, so a loss set against other income no longer drops the tax on the earnings. - The additional sum was £14.90 from April 2006 (SI 2006/645; SI 2007/688 arts 19(9) and 20(9) replace "£14.90"). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1896 made is_claimant_or_partner the claimant-and-partner variable, so: - housing_benefit_net_earnings and the additional-disregard conditions read is_claimant_or_partner (and the legacy child-or-young-person definition for "family includes a child") in place of the is_adult proxy. An 18-year-old qualifying young person's earnings and hours no longer count, as SI 2006/213 regs 19(1) and 25(3) require; that YAML case now expects the law's 0. - #1896's legacy_claimant_relationships cases asserted the old flat disregard with no earnings; each claimant now has £2,000 of earnings so the cases still test the lone-parent/couple/single rate. Also, from the round-3 review notes: the model taxes statutory sick and maternity pay as employment income (employment_benefits) but leaves them out of total_income, so they now enter both sides of the income tax share, and the "does not tax statutory pay" comments are corrected. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- means_test_income_members.yaml (new on main) expected the old uprated flat disregard (£344.58 in 2024), which SI 2006/213 Sch 4 gives only against earnings: the claimant-alone pair now expects 10,000 - £5 x 52 = 9,740, and the non-member-hours pair gives the claimant £10,000 of earnings so £260 (not £1,149.20) still shows the 19-year-old's hours do not count. - The income tax share adds back every negative total_income component (read from total_income's own adds), so a property or other loss can no longer inflate it; a YAML case pins it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HB(SPC) Sch 3 para 6 has the working-age premium's conditions and para 12 its amounts, so the pension-age premium is severe_disability_premium for a family over State Pension age. A Pension Credit reform no longer moves pension-age HB or CTR. The schedule property keeps the Pension Credit addition as a cross-check. References add the CTR nomination rule and the other premium schedules; the conditions YAML notes the three income-rule defects its awards include (#1908, #2112, #2007). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
#2000 merged into main on 2026-10-03 (0eccaaa). Main now has |
|
Merging on gates (2026-10-03).
|
Main's #1908 takes the Housing Benefit earnings disregards from net earnings only, so State Pension income is no longer reduced by them. The six final awards here fall by 65% of the old disregard; the premium and applicable-amount assertions are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's #1908 no longer deducts earnings disregards from State Pension income, so the case's HB income is 16,914 (18,000 less 20% tax above the personal allowance), still below the applicable amount. The expected award is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… household Main's new Pension Credit carer-income and England CTR tests use pensioners aged 70 in 2026, who reached State Pension age after 1 April 2021 and so get the lower allowance under this PR. Their arithmetic assumes the higher rate, so they now use pensioners aged 72 (State Pension age reached in 2019). The reported household's £47.68 relied on a £365.20 income disregard that main's Housing Benefit earnings-disregard fix (#1908) removed: with no earnings there is no disregard. Its HB at the lower rate is now nil; a council-tenant case with £12,000 rent shows the 608.40 gap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #1794.
Review rounds
Round 1 (Opus) and Vahid Ahmadi: resolved; see the comments.
Round 2 (Opus, 10/2): five minors, fixed in 97705be:
Round 3 (10/2-10/3, partial; two lane cut-offs). Fixed:
total_incomeomits it, so statutory pay now enters the tax share (156f03a);total_incomecomponent is added back in the tax share, not just employment and self-employment losses (008d2d3);Also new law, not modelled here: HB Sch 4 para 18, in force 5 October 2026 (see Not in this PR).
Main merged at 008d2d3. It includes Replace generic child and adult flags with each programme's legal definitions #1896 (see the end of the body) and
means_test_income_members.yaml, whose four HB disregard cases had expected the old uprated flat amount.Main merged at 156f03a, with Replace generic child and adult flags with each programme's legal definitions #1896: see the end of the body.
Problem
housing_benefit_applicable_income_disregardgave every single person £5 a week, every couple £10 and every lone parent £25, whether or not anyone had earnings.housing_benefit_applicable_incomethen took it off total income, including the State Pension, private pensions and benefits. The amounts carrieduprating: 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.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)).
SI 2006/214 (pension age), Schedule 4: "Sums disregarded from claimant's earnings" (reg 36(1)).
Net earnings.
Why para 17(2)(a) and (c) add nothing.
Amounts over time. I fetched point-in-time versions from legislation.gov.uk.
Northern Ireland. The NI earnings disregards are in Schedule 5, not Schedule 4 (Schedule 4 of both NI instruments is applicable amounts).
Change
housing_benefit_net_earnings(new, benefit unit), for each claimant or partner (is_claimant_or_partner, from Replace generic child and adult flags with each programme's legal definitions #1896):employment_benefits) but leaves them out oftotal_income, so they are added to both sides of the income tax share below;meets_housing_benefit_additional_earnings_disregard_conditions(new). One of:is_disabled_for_benefits, the input behinddisability_premium.>=.is_claimant_or_partner). "Family includes a child or young person" usesis_child_or_young_person_for_legacy_benefits.housing_benefit_applicable_income_disregard(rewritten):min(£25 lone parent / £10 couple / £5 otherwise × 52, net earnings);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;single,couple,lone_parent: nouprating, dated from 6 March 2006, with references to both instruments and NI and the "disreagrded" typo fixed.worker: £14.50 from 6 March 2006, £14.90 from 1 April 2006, £15.45 (2007), £16.05 (2008), £16.85 (2009), £17.10 from 1 April 2010, £37.10 for 2020-21, £17.10 from 5 April 2021, nouprating.worker_hours: 30, with its references corrected.worker_hours_lower(16) andworker_age(25).means_test/pension_contribution_deduction_rate(0.5).housing_benefit_applicable_income.pyis 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, given the lone-parent reading above. Para 12 is not an exception, because it applies at any age where its benefits are in payment. A property test checks this metamorphically, within the limits stated under Invariants. The disregard has no age condition of its own.
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).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.
>for the 30 hours;test_income_support_disregards_all_earnings_at_any_agecatch the old pension-age exclusion.Tests
applicable_income/housing_benefit_applicable_income_disregard.yaml(30, including a mixed-age couple whose partner is on income-related ESA → all £3,000 of earnings, para 12 via reg 5(1)(b)):is_adultproxy until Replace generic child and adult flags with each programme's legal definitions #1896 merged.applicable_income/housing_benefit_net_earnings.yaml(11):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):housing_benefit_applicable_amountto £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.guarantee_credit: 0as 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.housing_benefit_entitlement, nothousing_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, inhousing_benefit_pre_benefit_cap, and leaves the entitlement unchanged.uc_legacy_mutual_exclusion.yamlYAML: 161 passed, 0 failed (113 existing, all unchanged, + 48 new);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).ruff format --checkis clean on every changed Python file.legacy_claimant_relationships.yaml(6 cases): each claimant now has £2,000 of earnings, so the lone-parent, couple and single rates are still tested;means_test_income_members.yaml(4 cases):test_carer_support_payment.pycheckshb_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)
Current (2026-10-03): main bfc5fea against this branch at 728fb30, which contains that main. HB falls by £22.3m in 2026:
The same comparison at 156f03a against main 3c48247 (10/2) gave the same changes, to the £0.1m and 0.1k.
10/1 run (main 1c5b4d0): HB fell by £21.7m in 2026, in two parts that move in opposite directions relative to the law:
87.7k benefit units lose. None gain, and none lose all their HB. No unit can lose more than 65% of its old disregard, because the new disregard is never negative and HB tapers at 65%. The old disregard was largest for a lone parent who passed the old summed-hours test, so the bound is 0.65 × (£35.12 + £52.11) × 52 = £2,948.37 a year. Case D above, a single worker aged 24, loses £1,829.76. A lone parent without earnings, on the taper, loses the whole old flat disregard: 0.65 × £1,826.02 (the uprated £25, unrounded, × 52) = £1,186.91. 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).
Who moves, and why:
housing_benefit_net_earningsto 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:
policyengine-uk-datarebuild will move these numbers.impact/diag_disregard.pyandimpact/diag_disregard_2026.json: the breakdown above;impact/diag_disregard_final.pyandimpact/diag_disregard_final_2026.json: the IS/JSA/ESA split and the largest loss.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
New law from 5 October 2026: HB Sch 4 para 18 (SI 2026/753, reg 2(4) as substituted by SI 2026/978 reg 2(2)).
NI on statutory paternity pay. The model charges Class 1 NI on SPP, and net earnings deduct all of a person's Class 1 NI, though SPP is not counted as HB income or earnings. This is a minor over-deduction for SPP recipients.
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_premium> 0 andcarer_premium> 0 exist for working age (213 paras 3(2) and 5(1)), andis_disabled_for_benefits(orattendance_allowance> 0) can stand in for 214 para 5(1). The occupations are not observable.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_elementhas three problems:childcare_1/childcare_2parameters uprated by CPI (£322.67 and £553.14 in 2026), where reg 27(3) and 214 reg 30(3) fix £175 and £300.Income tax. The model deducts every member's income tax from HB 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 and the disregard count only the claimant's and partner's earnings. In the 10/1 run no HB unit had a child with earnings, and none (to the nearest 0.01k) had 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_incomeapplies 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.5pension-contribution factor inhousing_benefit_applicable_incomecould 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.
#1896 merged (3525263) and is merged into this branch (156f03a).
housing_benefit_applicable_income_disregard.pyreplaces Replace generic child and adult flags with each programme's legal definitions #1896's version of the old formula.is_claimant_or_partner, so the 18-year-old case now expects the law's 0.legacy_claimant_relationships.yamlasserted the old flat disregard for families with no earnings, which is 0 under this PR. Each of those 6 cases now gives the claimant £2,000 of earnings, so they still test the lone-parent/couple/single rate.axiom: SI 2006/213 Sch 4 and SI 2006/214 Sch 4 — TheAxiomFoundation/rulespec-uk#375 queued
🤖 Generated with Claude Code