Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/pension-credit-earnings-uprating.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Uprate the Pension Credit standard minimum guarantee and the lower Housing Benefit pension-age personal allowances by the previous May-July earnings increase, meeting the SSAA 1992 s150A earnings floor after the last published rates. Derive projected Savings Credit thresholds from the guarantee and a September-CPI-uprated maximum award, keeping the threshold in force when a reform sets a zero phase-in rate, and the higher pension-age allowances as the guarantee plus that maximum. April 2027's single guarantee rises from £238 to £247.282 before rounding, rather than £243.47.
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ metadata:
period: week
unit: currency-GBP
label: Housing Benefit couple pension-age personal allowance
# Not uprated by September CPI: the pension-age personal allowances rose 4.75%
# in April 2026 (£244.40 to £256.00 single), when September CPI was 3.8%, and
# 2.3% in April 2017, when it was 1.0% (Benefit and pension rates 2026 to
# 2027, 2017 to 2018). Keeps the lagged calendar-year CPI projection it had
# through gov.benefit_uprating_cpi until its own basis is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Not uprated as a whole: the allowance is the Pension Credit standard
# minimum guarantee plus the maximum Savings Credit (HB A3/2021), which
# rise by earnings and September CPI. create_pension_age_allowances.py
# derives the years after the published amounts as that sum.
reference:
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) Regulations 2006 (SI 2006/214), Schedule 3, paragraph 1(2)(b)
href: https://www.legislation.gov.uk/uksi/2006/214/schedule/3
- title: DWP Housing Benefit circular A3/2021, paragraphs 3-5 (the allowance is the standard minimum guarantee plus the maximum Savings Credit)
href: https://www.gov.uk/government/publications/housing-benefit-adjudication-circulars-2021/a32021-housing-benefit-person-who-have-attained-the-qualifying-age-for-state-pension-credit-amendment-regulations-2021
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) Regulations (Northern Ireland) 2006 (SR 2006/406), Schedule 4, paragraph 1 (the same amounts)
href: https://www.legislation.gov.uk/nisr/2006/406/schedule/4
- title: Benefit and pension rates 2024 to 2025 - Policy paper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ metadata:
period: week
unit: currency-GBP
label: Housing Benefit couple personal allowance, State Pension age reached from April 2021
# Not uprated by September CPI: the post-April 2021 pension-age personal
# allowances equal the Pension Credit standard minimum guarantee in every year
# from 2021-22 to 2026-27, which is reviewed against earnings under Social
# Security Administration Act 1992 s150A(1)(d). Keeps the lagged calendar-year
# CPI projection it had through gov.benefit_uprating_cpi until its own basis
# is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Equal to the Pension Credit standard minimum guarantee in 2021-2026;
# project at its earnings floor (SSAA 1992 s150A(2)). The HB allowance is
# set in Schedule 3 below.
uprating: gov.economic_assumptions.indices.earnings_uprating
reference:
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) (Amendment) Regulations 2021 (SI 2021/188), regulation 2(3), inserting paragraph 1(2)(c) of Schedule 3 to SI 2006/214 from 1 April 2021
href: https://www.legislation.gov.uk/uksi/2021/188/regulation/2/made
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""Project the higher pension-age Housing Benefit personal allowances.

For claimants who reached State Pension age before 1 April 2021, SI 2006/214
Schedule 3 paragraph 1(1)(b) and (2)(b) set a personal allowance made up of
the Pension Credit standard minimum guarantee plus the maximum Savings Credit
(DWP circular HB A3/2021, paragraphs 3-5). Every published amount from
2019-20 to 2026-27 is that sum rounded up to the next 5p. The guarantee rises
with earnings and the maximum with September CPI, so neither index alone
projects the allowance. Keep the published allowances and derive later years
as the guarantee plus the maximum, each already uprated by its own index.

Run after general uprating and before fiscal-year conversion, on both the
main tree and its baseline copy, as the Savings Credit threshold projection
is. Reprocessing a reform then reads its changed guarantee and maximum.
"""

from policyengine_core.parameters import ParameterNode

from policyengine_uk.parameters.gov.dwp.pension_credit.savings_credit.create_savings_credit_threshold import (
extend_after_last_stated,
last_projected_year,
)

# The Pension Credit amounts each allowance is built from: a lone parent's
# are a single person's.
RELATIONS = {"single": "SINGLE", "couple": "COUPLE", "lone_parent": "SINGLE"}


def project_pension_age_allowances(parameters: ParameterNode) -> ParameterNode:
"""Fill the years after each higher allowance's last stated value."""
pc = parameters.gov.dwp.pension_credit
allowances = parameters.gov.dwp.housing_benefit.allowances
last_year = last_projected_year(parameters)
for kind, relation in RELATIONS.items():
guarantee = pc.guarantee_credit.minimum_guarantee.children[relation]
maximum = pc.savings_credit.maximum.children[relation]

def derive(sample, previous):
return guarantee(sample) + maximum(sample)

extend_after_last_stated(allowances.children[kind].aged, last_year, derive)
allowances.clear_parent_cache()
return parameters
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ metadata:
period: week
unit: currency-GBP
label: Housing Benefit lone parent pension-age personal allowance
# Not uprated by September CPI: the pension-age personal allowances rose 4.75%
# in April 2026 (£244.40 to £256.00 single), when September CPI was 3.8%, and
# 2.3% in April 2017, when it was 1.0% (Benefit and pension rates 2026 to
# 2027, 2017 to 2018). Keeps the lagged calendar-year CPI projection it had
# through gov.benefit_uprating_cpi until its own basis is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Not uprated as a whole: the allowance is the Pension Credit standard
# minimum guarantee plus the maximum Savings Credit (HB A3/2021), which
# rise by earnings and September CPI. create_pension_age_allowances.py
# derives the years after the published amounts as that sum.
reference:
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) Regulations 2006 (SI 2006/214), Schedule 3, paragraph 1(1)(b)
href: https://www.legislation.gov.uk/uksi/2006/214/schedule/3
- title: DWP Housing Benefit circular A3/2021, paragraphs 3-5 (the allowance is the standard minimum guarantee plus the maximum Savings Credit)
href: https://www.gov.uk/government/publications/housing-benefit-adjudication-circulars-2021/a32021-housing-benefit-person-who-have-attained-the-qualifying-age-for-state-pension-credit-amendment-regulations-2021
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) Regulations (Northern Ireland) 2006 (SR 2006/406), Schedule 4, paragraph 1 (the same amounts)
href: https://www.legislation.gov.uk/nisr/2006/406/schedule/4
- title: Benefit and pension rates 2024 to 2025 - Policy paper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ metadata:
period: week
unit: currency-GBP
label: Housing Benefit lone parent personal allowance, State Pension age reached from April 2021
# Not uprated by September CPI: the post-April 2021 pension-age personal
# allowances equal the Pension Credit standard minimum guarantee in every year
# from 2021-22 to 2026-27, which is reviewed against earnings under Social
# Security Administration Act 1992 s150A(1)(d). Keeps the lagged calendar-year
# CPI projection it had through gov.benefit_uprating_cpi until its own basis
# is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Equal to the Pension Credit standard minimum guarantee in 2021-2026;
# project at its earnings floor (SSAA 1992 s150A(2)). The HB allowance is
# set in Schedule 3 below.
uprating: gov.economic_assumptions.indices.earnings_uprating
reference:
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) (Amendment) Regulations 2021 (SI 2021/188), regulation 2(3), inserting paragraph 1(1)(c) of Schedule 3 to SI 2006/214 from 1 April 2021
href: https://www.legislation.gov.uk/uksi/2021/188/regulation/2/made
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@ metadata:
period: week
unit: currency-GBP
label: Housing Benefit single pension-age personal allowance
# Not uprated by September CPI: the pension-age personal allowances rose 4.75%
# in April 2026 (£244.40 to £256.00 single), when September CPI was 3.8%, and
# 2.3% in April 2017, when it was 1.0% (Benefit and pension rates 2026 to
# 2027, 2017 to 2018). Keeps the lagged calendar-year CPI projection it had
# through gov.benefit_uprating_cpi until its own basis is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Not uprated as a whole: the allowance is the Pension Credit standard
# minimum guarantee plus the maximum Savings Credit (HB A3/2021), which
# rise by earnings and September CPI. create_pension_age_allowances.py
# derives the years after the published amounts as that sum.
reference:
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) Regulations 2006 (SI 2006/214), Schedule 3, paragraph 1(1)(b)
href: https://www.legislation.gov.uk/uksi/2006/214/schedule/3
- title: DWP Housing Benefit circular A3/2021, paragraphs 3-5 (the allowance is the standard minimum guarantee plus the maximum Savings Credit)
href: https://www.gov.uk/government/publications/housing-benefit-adjudication-circulars-2021/a32021-housing-benefit-person-who-have-attained-the-qualifying-age-for-state-pension-credit-amendment-regulations-2021
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) Regulations (Northern Ireland) 2006 (SR 2006/406), Schedule 4, paragraph 1 (the same amounts)
href: https://www.legislation.gov.uk/nisr/2006/406/schedule/4
- title: Benefit and pension rates 2024 to 2025 - Policy paper
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,10 @@ metadata:
period: week
unit: currency-GBP
label: Housing Benefit single personal allowance, State Pension age reached from April 2021
# Not uprated by September CPI: the post-April 2021 pension-age personal
# allowances equal the Pension Credit standard minimum guarantee in every year
# from 2021-22 to 2026-27, which is reviewed against earnings under Social
# Security Administration Act 1992 s150A(1)(d). Keeps the lagged calendar-year
# CPI projection it had through gov.benefit_uprating_cpi until its own basis
# is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Equal to the Pension Credit standard minimum guarantee in 2021-2026;
# project at its earnings floor (SSAA 1992 s150A(2)). The HB allowance is
# set in Schedule 3 below.
uprating: gov.economic_assumptions.indices.earnings_uprating
reference:
- title: The Housing Benefit (Persons who have attained the qualifying age for state pension credit) (Amendment) Regulations 2021 (SI 2021/188), regulation 2(3), inserting paragraph 1(1)(c) of Schedule 3 to SI 2006/214 from 1 April 2021
href: https://www.legislation.gov.uk/uksi/2021/188/regulation/2/made
Expand Down
25 changes: 25 additions & 0 deletions policyengine_uk/parameters/gov/dwp/pension_credit/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,26 @@
# Pension Credit

After the last published rates, the standard minimum guarantee rises each
April with the previous May-July total-pay average weekly earnings increase,
using the same statutory input and published precision as the State Pension
triple lock. This models the earnings minimum in
[SSAA 1992 s150A(2)](https://www.legislation.gov.uk/ukpga/1992/5/section/150A),
with no decrease when earnings fall. There is no CPI or 2.5% floor in this
projection. The three lower Housing Benefit pension-age personal
allowances, which equal the guarantee, follow the same increase.

The Savings Credit maximum rises with September CPI, following
[HCWS1101](https://questions-statements.parliament.uk/written-statements/detail/2025-11-26/hcws1101).
Projected thresholds are derived after uprating:
`threshold = standard minimum guarantee - maximum / phase_in`.
At the 60% phase-in rate, this ensures that the formula's maximum award
follows prices even when the guarantee follows earnings. Published
thresholds are retained, including their rounding. A zero phase-in rate pays
no Savings Credit at any threshold, so that year keeps the threshold in force
before it.

The three higher Housing Benefit pension-age personal allowances, for those
who reached State Pension age before April 2021, are the guarantee plus the
maximum Savings Credit (HB A3/2021). After their published amounts they are
derived as that sum, so the guarantee part follows earnings and the maximum
follows September CPI.
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,9 @@ SINGLE:
2025-04-01: 227.1
2026-04-01: 238
metadata:
# Not uprated by September CPI: the standard minimum guarantee is reviewed
# against earnings under Social Security Administration Act 1992 s150A(1)(d)
# (4.8% in April 2026, written statement HCWS1101). Keeps the lagged
# calendar-year CPI projection it had through gov.benefit_uprating_cpi until
# its own basis is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Project at the earnings floor in Social Security Administration Act 1992
# s150A(2), using the same May-July AWE input as the State Pension review.
uprating: gov.economic_assumptions.indices.earnings_uprating
COUPLE:
values:
2015-04-06: 230.85
Expand All @@ -35,18 +32,17 @@ COUPLE:
2025-04-01: 346.6
2026-04-01: 363.25
metadata:
# Not uprated by September CPI: the standard minimum guarantee is reviewed
# against earnings under Social Security Administration Act 1992 s150A(1)(d)
# (4.8% in April 2026, written statement HCWS1101). Keeps the lagged
# calendar-year CPI projection it had through gov.benefit_uprating_cpi until
# its own basis is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Project at the earnings floor in Social Security Administration Act 1992
# s150A(2), using the same May-July AWE input as the State Pension review.
uprating: gov.economic_assumptions.indices.earnings_uprating
metadata:
period: week
label: Pension Credit minimum guarantee
unit: currency-GBP
propagate_metadata_to_children: true
reference:
- title: Social Security Administration Act 1992, section 150A(2)
href: https://www.legislation.gov.uk/ukpga/1992/5/section/150A
- title: The State Pension Credit Regulations 2002 reg. 6
href: https://www.legislation.gov.uk/uksi/2002/1792/regulation/6/2021-04-12
- title: Benefit and pension rates 2026 to 2027
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
"""Project Savings Credit thresholds from the guarantee and maximum award.

The standard minimum guarantee rises with earnings, while the Savings Credit
maximum rises with September CPI (HCWS1101). Under the 60% phase-in rule,
maximum = phase_in * (standard minimum guarantee - threshold), so the
threshold is the guarantee less maximum / phase_in. Keep the published
thresholds, including their rounding, and derive only subsequent years.

A zero phase-in rate pays no Savings Credit at any threshold, and the
maximum fixes none, so a year with a zero rate keeps the threshold in force
before it.

Run after general uprating and before fiscal-year conversion, on both the
main tree and its baseline copy. Reprocessing a reform then reads its changed
guarantee, maximum and phase-in rate.
"""

from typing import Any, Callable

from policyengine_core.parameters import Parameter, ParameterNode
from policyengine_core.parameters.parameter_at_instant import ParameterAtInstant


def last_projected_year(parameters: ParameterNode) -> int:
"""The last year of the earnings index, which the projections run to."""
index = parameters.gov.economic_assumptions.indices.earnings_uprating
return max(int(entry.instant_str[:4]) for entry in index.values_list)


def extend_after_last_stated(
parameter: Parameter,
last_year: int,
derive: Callable[[str, Any], Any],
) -> None:
"""Add a value for each year after the parameter's last stated value.

``derive(sample, previous)`` gives the year's value from the other
parameters at its 30 April ``sample``; ``previous`` is the value in force
before it. Each value applies from 1 January, as uprating's do.
"""
last = max(parameter.values_list, key=lambda entry: entry.instant_str)
previous = last.value
for year in range(int(last.instant_str[:4]) + 1, last_year + 1):
previous = derive(f"{year}-04-30", previous)
parameter.values_list.append(
ParameterAtInstant(parameter.name, f"{year}-01-01", data=previous)
)
parameter.values_list.sort(key=lambda entry: entry.instant_str, reverse=True)
parameter.mark_as_modified()


def project_savings_credit_threshold(parameters: ParameterNode) -> ParameterNode:
"""Fill the years after each threshold's last stated value."""
pc = parameters.gov.dwp.pension_credit
sc = pc.savings_credit
last_year = last_projected_year(parameters)
for relation, threshold in sc.threshold.children.items():
guarantee = pc.guarantee_credit.minimum_guarantee.children[relation]
maximum = sc.maximum.children[relation]

def derive(sample, previous):
phase_in = sc.rate.phase_in(sample)
if phase_in == 0:
return previous
return guarantee(sample) - maximum(sample) / phase_in

extend_after_last_stated(threshold, last_year, derive)
sc.threshold.clear_parent_cache()
return parameters
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
description: Maximum weekly Savings Credit, used to derive projected income thresholds.
SINGLE:
values:
2026-04-01: 17.96
COUPLE:
values:
2026-04-01: 20.10
metadata:
unit: currency-GBP
period: week
label: Pension Credit Savings Credit maximum
uprating: gov.benefit_uprating_cpi
propagate_metadata_to_children: true
reference:
- title: Benefit and pension rates 2026 to 2027 (DWP, gov.uk), Pension Credit
href: https://www.gov.uk/government/publications/benefit-and-pension-rates-2026-to-2027/proposed-benefit-and-pension-rates-2026-to-2027#pension-credit
- title: Statutory Review of State Pension and Benefit Rates 2026/27, HCWS1101 (Savings Credit maximum increases by September CPI)
href: https://questions-statements.parliament.uk/written-statements/detail/2025-11-26/hcws1101
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,9 @@ COUPLE:
metadata:
unit: currency-GBP
period: week
# Not uprated by September CPI: the threshold rose 4.9% in April 2026, when
# September CPI was 3.8% (Benefit and pension rates 2026 to 2027). Keeps the
# lagged calendar-year CPI projection it had through gov.benefit_uprating_cpi
# until its own basis is modelled.
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
# Projected after uprating by create_savings_credit_threshold.py:
# standard minimum guarantee - Savings Credit maximum / phase-in rate.
# Published thresholds keep their own rounding; only projections are derived.
propagate_metadata_to_children: true
reference:
- title: The State Pension Credit Regulations 2002 reg. 7
Expand Down
Loading
Loading