Skip to content

Split pension-age Housing Benefit allowances by when State Pension age was attained - #1913

Open
MaxGhenis wants to merge 2 commits into
state-pension-age-67-phase-infrom
hb-pension-age-allowance-cohorts
Open

MaxGhenis wants to merge 2 commits into
state-pension-age-67-phase-infrom
hb-pension-age-allowance-cohorts

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Since 1 April 2021 the pension-age Housing Benefit personal allowance has had two rates. The rate depends on when the claimant, or a couple's members, attained State Pension age. PolicyEngine UK applied the higher rate to every pension-age benefit unit, so it overstated the applicable amount by £18.00 a week (£20.10 for a couple) in 2026-27 for everyone who reached State Pension age on or after that date.

2026-27, £ a week Attained State Pension age before 1 April 2021 On or after 1 April 2021
Single claimant or lone parent 256.00 (para 1(1)(b)) 238.00 (para 1(1)(c))
Couple 383.35 (para 1(2)(b): one or both members) 363.25 (para 1(2)(c): both members)

Source: SI 2006/214 Sch 3 para 1, as amended by SI 2021/188, with amounts set by the Social Security Benefits Up-rating Order 2026 (SI 2026/148). The Northern Ireland regulations, SR 2006/406 Sch 4 para 1, carry the same rates. The lower rate equals the Pension Credit standard minimum guarantee. SI 2021/188's explanatory note describes the gap as the "savings credit uplift", kept only for people who already had it.

Reported example (2026): a 70-year-old private renter with a £30,000 State Pension and £9,000 rent gets HB of £656.08 a year on this PR's base and £47.68 here. The difference is 0.65 × (256 − 238) × 52 = £608.40.

Stacked on #1899, which sets State Pension age from date of birth. The cohort test needs the day each person attained State Pension age, and #1899 provides that. Merge #1899 first; this PR's base then becomes main.

Changes

  • state_pension_age_date (new, Person): the day the person attains State Pension age, written as a YYYYMMDD number. It is computed from Set State Pension age from date of birth, including the rise to 67 #1899's timetable and date-of-birth placement, using integer date arithmetic so no rounding can move a day. state_pension_age now derives from it: the timetable logic lives in one place, and results are unchanged (Set State Pension age from date of birth, including the rise to 67 #1899's 24 pytest and 40 YAML tests still pass).
  • housing_benefit_attained_pension_age_before_cutoff (new, BenUnit): whether any member attained State Pension age before the cutoff.
    • Couples follow para 1(2)(b): "one member or both members". The regulations don't cover a couple where one member hasn't reached State Pension age and the other reached it after the cutoff; this PR gives them the lower rate, following SI 2021/188's explanatory note ("where one or more members ... attained pensionable age before 1st April 2021, the benefit unit will continue to receive the uplift").
    • Before April 2021 there was one pension-age rate. The variable is true for every unit then, and the cutoff parameter only starts on 2021-04-01.
  • Parameters in gov.dwp.housing_benefit.allowances:
    • pension_age_cutoff: 20210401.
    • {single,couple,lone_parent}.aged_from_cutoff: the (c) rates for 2021-22 to 2026-27, each year cited to its source. 2021-22 comes from SI 2021/188 reg 2(3). 2022-23 to 2025-26 come from the point-in-time Sch 3, set by the Up-rating Orders SI 2022/292, 2023/316, 2024/242 and 2025/295. 2026-27 comes from SI 2026/148.
    • They are uprated like the existing aged rates.
  • housing_benefit_applicable_amount picks the (b) or (c) rate per unit.
  • Council Tax Reduction (council_tax_reduction_applicable_amount) reuses the HB allowances:
    • England's pensioner scheme has the same split and amounts (SI 2012/2885 Sch 2 para 1, amended by SI 2021/29 for financial years from 2021-22), so England now splits too.
    • Scotland (SSI 2012/319 Sch 1 para 2) and Wales (SI 2013/3029 Sch 2 para 1) have one pension-age rate, the higher one, and are unchanged.
  • The HB docs page explains the split and charts the lower rates.

This PR doesn't touch the existing aged files. Their 2025-26 values and references are corrected in the companion DWP rates PR, #1925.

Invariants (tested)

For every pension-age single person or couple, in every year:

  1. Differential against the statute. The allowance is the higher rate exactly when a member's attainment day is before 1 April 2021, where that day is read from the Pensions Act 1995 timetable by Set State Pension age from date of birth, including the rise to 67 #1899's independent reference_attainment_day. Otherwise it's the lower rate. This is checked for single people of each sex born every fifth day from 1938, and on both sides of 1 April 1955, in each year 2019-2030. It is also checked for random singles and couples, mixed-age included, under Hypothesis.
  2. Bounds. The lower rate is below the higher rate in every year 2021-2040, including uprated years. Lone parents get the single rates.
  3. Monotonicity. Among pension-age single people of one sex in one year, an earlier date of birth never gives a lower allowance.
  4. One rate before April 2021. Every pension-age unit gets the higher rate in 2019 and 2020.
  5. Council Tax Reduction. England's pension-age CTR allowance equals HB's. Scotland's and Wales's equal the one higher rate. This is tested with Hypothesis over regions and units.
  6. Attainment date. state_pension_age_date equals the statute's day for every birth date in Set State Pension age from date of birth, including the rise to 67 #1899's differential set, in each of its 13 years. It is also invariant to the year the person is placed from.

YAML tests cover:

  • the boundaries: attained on 31 March 2021 vs 1 April 2021, for singles, couples, a lone parent and mixed-age couples;
  • 2021-22 and 2026-27 amounts;
  • the reported household;
  • CTR in England, Scotland and Wales;
  • state_pension_age_date at each rule of the timetable, including rule (7A).

Impact (Enhanced FRS 2024-25)

These are two real runs over the same dataset, fiscal years 2025-26 to 2030-31. The base is #1899 merged with main plus the DWP rates fix #1925 (2019d867), so the 2025-26 higher rates are the enacted £244.40 / £366.00. The fixed run adds this PR (99cd1a69). Nothing is scaled or interpolated. On the uncorrected base (2466f44), the totals are within £1m a year of these and the 2025-26 mean loss is £173.

Fiscal year 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31
Housing Benefit (£m) -2.2 -2.1 -3.2 -6.6 -23.8 -25.6
Council Tax Reduction, England (£m) -1.2 -1.5 -1.8 -3.0 -3.9 -4.2
Household net income (£m) -3.4 -3.6 -4.9 -9.6 -27.7 -29.8
Pension-age HB units in the later cohort (k) 209 215 231 247 364 466
Benefit units with lower HB (k) 10.6 10.5 13.1 18.7 45.1 47.5
Mean HB change among them (£ a year) -208 -196 -242 -350 -528 -539
Pensioners in poverty AHC (k) +1.6 +0.4 +0.4 +1.2 +0.9 +1.1
Pensioners in poverty BHC (k) +0.0 +0.0 +0.5 +0.3 +0.5 +0.5

The allowance only matters for a tapered claim. Of the 215k later-cohort pension-age HB units in 2026-27, 88% have Guarantee Credit and 95% have applicable income at or below the applicable amount, so they get maximum HB at either rate. The remaining 10.5k tapered claims are the units with lower HB. In the microdata, #1899 spreads birthdays within each year of age, so 48.4% of 71-year-olds in 2026-27 attained State Pension age before 1 April 2021. The statute implies 48%: those born 7 October 1954 to 31 March 1955. Totals grow as later cohorts make up more of the pension-age population. Pension-age HB levels on this dataset await the HB calibration rebuild after #1901 (policyengine-uk-data#490), and the size of this change scales with those levels.

Axiom

axiom: uk/regulation/uksi/2006/214/schedule/3 queued TheAxiomFoundation/rulespec-uk#108 | uk/regulation/uksi/2012/2885/schedule/2 queued TheAxiomFoundation/rulespec-uk#378

  • The HB pipeline (uk/policies/housing_benefit_composed_entitlement_pipeline.yaml) encodes only the (b) rates, from 2026-04-01, and has no cohort input. rulespec-uk#108 is now dispatch-ready with the verbatim law, required outputs and companion tests.
  • England's CTR Schedule 2 is not encoded; it's queued in the issue named above.
  • Both citations are in the served corpus with the split and the 2026-27 amounts. The signed encodes are OpenAI-billed and need approval.

🤖 Generated with Claude Code

…e was attained

Since 1 April 2021, SI 2006/214 Sch 3 para 1 (as amended by SI 2021/188; NI:
SR 2006/406 Sch 4 para 1) gives the lower pension-age personal allowance to a
single claimant or lone parent who attained pensionable age on or after that
date, and to a couple both of whom did: £238.00 and £363.25 a week in 2026-27,
against £256.00 and £383.35 for earlier cohorts. PolicyEngine applied the
higher rate to everyone.

- state_pension_age_date: the day each person attains State Pension age, as a
  YYYYMMDD number, from the Pensions Act 1995 timetable. state_pension_age now
  derives from it (same results; the timetable logic lives in one place).
- housing_benefit_attained_pension_age_before_cutoff and the cutoff and
  lower-rate parameters (2021-22 to 2026-27 from SI 2021/188 and the Up-rating
  Orders 2022-2026).
- England's pensioner Council Tax Reduction has the same split (SI 2012/2885
  Sch 2 para 1, amended by SI 2021/29); Scotland and Wales keep one rate.
- YAML boundary tests, a differential test of the attainment day against the
  statute for every birth date, and property tests of the cohort rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Explain why the mixed-age couple gap cannot arise for pension-age Housing
  Benefit in law, and why PolicyEngine gives such units the lower rate; add the
  same note for England's CTR rows (2) and (5).
- Cite where "pensionable age" is defined (SSCBA 1992 s.122(1), applied by the
  Interpretation Act 1978 s.11) and why dates are compared as integers.
- CTR reads the country from the benefit unit's household, as the CTR award
  formula does.
- Test the lower rates and cutoff against the statute's table for 2021-22 to
  2026-27, and England's CTR rate for a mixed-age couple.

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

Copy link
Copy Markdown
Collaborator Author

Response to the independent review (Opus, subfleet job 20260930-083145-review-1913), addressed in f159ff4:

  1. 2025-26 higher rates wrong in aged.yaml (should-fix). Agreed. The fix belongs to the companion DWP rates PR, Set DWP benefit rates to the announced amounts, not CPI projections #1925. It sets the 2025-26 (b) rates to the enacted £244.40 / £366.00 (and 2020-21 to £187.75 / £280.85), cites SI 2006/214 in place of 2006/213, and tests the values against the published tables. This PR keeps the lower (c) rates, now also checked against a hard-coded statute table for 2021-22 to 2026-27 (test_lower_rates_and_cutoff_match_the_statute). I re-ran the impact on a base that includes Set DWP benefit rates to the announced amounts, not CPI projections #1925. The 2025-26 mean loss is now £208 (it was £173 on the uncorrected base), and totals move by less than £1m a year. The PR body table is the corrected one.
  2. "The boundary cohort always gets the lower rate" (should-fix): the data refute this. In simulations built from data, Set State Pension age from date of birth, including the rise to 67 #1899 spreads birthdays within each single year of age with a weight-stratified draw. months_since_last_birthday is not the mid-year default there. On the Enhanced FRS, 48.4% of 71-year-olds in 2026-27 attained State Pension age before 1 April 2021 (state_pension_age_date < 20210401); the statute implies 48% (born 7 October 1954 to 31 March 1955). Household situations with a whole age use the middle of the year of age, which is Set State Pension age from date of birth, including the rise to 67 #1899's documented default; a fractional age or months_since_last_birthday pins the date. I reworded the YAML header ("measured at 6 October") so it doesn't read as "born on 6 October".
  3. Mixed-age couples (should-fix). Done. The HB comment now says that in law this couple can't be on pension-age HB, since mixed-age couples keep it only under the savings for awards before 15 May 2019 (SI 2019/37 art 4), when the older member had already reached State Pension age. It also explains that PE can still reach it through a reported continuing award. The CTR formula has its own note for England's rows (2) and (5). Added a CTR YAML test for this couple in England (lower rate, £363.25).
  4. Which definition of "pensionable age" (nit). The definition is SSCBA 1992 s.122(1) (Pensions Act 1995 Sch 4 para 1), which the Interpretation Act 1978 s.11 applies to these regulations. The Interpretation Act's Schedule 1 doesn't define it. Now cited in the variable.
  5. Date precision (nit). Added a comment that dates are compared as YYYYMMDD integers, which are exact.
  6. Country lookup (nit). Now benunit.household("country", period), as in the CTR award formula.
  7. Narrow property tests (nit). Added the hard-coded statute table test (invariant 5). The differential and Hypothesis tests compare against Set State Pension age from date of birth, including the rise to 67 #1899's independent reference_attainment_day.
  8. Unverified figures. Re-run and verified. The 47.68 in the YAML is a passing test. For the "why small" explanation: of 215k later-cohort pension-age HB units in 2026-27, 88% have Guarantee Credit, 95% have applicable income at or below the applicable amount, and the remaining 10.5k tapered claims are exactly the units with lower HB. All three figures come from a run.

Tests after the changes: the cohort property file (40), #1899's attainment-date differential (13 years), and the HB, CTR, PC and SPA YAML folders (130 in the last run) all pass.

MaxGhenis added a commit that referenced this pull request Sep 30, 2026
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: not ready (stacked on #1899, no CI). The code itself is approve-with-nits.

The split matches the law. HB has the (b) and (c) rates in SI 2006/214 Sch 3 para 1, and Northern Ireland's SR 2006/406 Sch 4 Part I has the same rates. England's CTR splits the same way (SI 2012/2885 Sch 2 para 1, amended by SI 2021/29 for schemes from 2021-22). Scotland (SSI 2012/319 Sch 1 para 2) and Wales (WSI 2013/3029 Sch 2 para 1) keep the single £256 / £383.35 rate.

  1. Should fix: the base is state-pension-age-67-phase-in (Set State Pension age from date of birth, including the rise to 67 #1899, still open and behind main), so no CI has run on this branch. Rebase onto main once Set State Pension age from date of birth, including the rise to 67 #1899 merges, and get CI green.
  2. Should fix (coordination): merging this first breaks 4 YAML cases in Disregard guarantee credit recipients' income and capital in pensioner council tax reduction #1909 and 1 in Give pension-age HB and CTR the severe disability premium Pension Credit uses #1938, all with 70-year-old claimants. The fixes belong in those PRs; say so in the merge order.
  3. Nit: housing_benefit_attained_pension_age_before_cutoff.py:49. In the household calculator, a whole age of 71 in 2026 gives an attainment date of 6 April 2021, so that age always gets the lower rate, although about 48% of that cohort attained before the cutoff. Add this to the variable's documentation, and point users to months_since_last_birthday.
  4. Nit: council_tax_reduction_applicable_amount.py:31-33 gives the reason "as for Housing Benefit". But the pensioner test in SI 2012/2885 reg 3 has no 2019-style mixed-age restriction, only the exclusion for claimants on IS, JSA, ESA or UC, so this gap in the law affects real claimants there. Say that the lower rate is a choice.
  5. Nit: couple/aged_from_cutoff.yaml:7 (346.60) differs from the repo's 2025 couple minimum guarantee (338.61). So "the lower rate equals the minimum guarantee" holds only once Set DWP benefit rates to the announced amounts, not CPI projections #1925 lands.

Verified: I read the current Sch 3 para 1 HB text and the England, Scotland, Wales and NI equivalents, and checked the SI 2021/29 and SI 2021/188 commencement. Tests at f159ff4: 32 new YAML; 77 pytest (cohorts and State Pension age); 174 YAML across the HB, CTR and Pension Credit folders. All pass. CI: none reported.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Follow-up review (GPT-6.1 Sol, subfleet job 20260930-114706-rereview2-1925-1913) at f159ff4:

  • Resolved: findings 2-6, plus finding 8 with limits. It independently reproduced the microdata figure (48.39% of 71-year-olds in 2026-27 attained State Pension age before the cutoff). All 48 impact-table cells reconcile with the saved runs. It ran the cohort pytest file (40 passed) and the HB and CTR YAML folders (76 and 43 passed). It found no behavioural regression.
  • Partly resolved: findings 1 and 7.

Plan once #1899 and #1925 have merged:

  1. Rebase this PR onto main.
  2. Add a hard-coded statute table for the higher rates, 2021-22 to 2026-27, alongside the existing lower-rate one.
  3. Re-run CI and the impact on that single tree.

The current impact table already uses a base that includes #1925's rates (stated in the body).

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.

2 participants