Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
f6bfade
Fix 2025 Pension Credit rates and focus local tests
anth-volk Oct 2, 2026
8d8e018
Strengthen Pension Credit savings credit tests
anth-volk Oct 5, 2026
ddce2b3
Correct Savings Credit threshold projection
anth-volk Oct 5, 2026
a01c49b
Fix issues from review: align pension-age projections
anth-volk Oct 6, 2026
38cf831
Fix Savings Credit threshold projection reforms
anth-volk Oct 6, 2026
c7206b2
Correct protected pension-age Housing Benefit rates for 2025
anth-volk Oct 8, 2026
3c8b9bf
Fix issues from review: locate projected Guarantee Credit cutoffs
anth-volk Oct 12, 2026
782d454
Merge main into feature/pension-credit-2025-rates
MaxGhenis Oct 20, 2026
e615aa8
Keep pension-age projections independent of guarantee reforms
MaxGhenis Oct 20, 2026
559b7ca
Preserve valid joint pension guarantee and Housing Benefit reforms
MaxGhenis Oct 20, 2026
9f6b3c2
Make Savings Credit projection fixtures pension-age eligible
MaxGhenis Oct 20, 2026
edef32c
Recognise pension-age indices in generated parameter inventory
MaxGhenis Oct 20, 2026
107bd83
Merge origin/main into feature/pension-credit-2025-rates
MaxGhenis Oct 23, 2026
695df97
Derive the pension-age projection base year and stop reforms reaching…
MaxGhenis Oct 23, 2026
52c96b1
Project the post-2021 pension-age HB allowances with the guarantee
MaxGhenis Oct 23, 2026
9b0d406
Merge main into Pension Credit projections and reconcile reform safeg…
MaxGhenis Oct 25, 2026
bf041bf
Let maximum Savings Credit reforms reach the threshold and HB forecasts
MaxGhenis Oct 27, 2026
80907e7
Test maximum Savings Credit reform paths against main's builders
MaxGhenis Oct 27, 2026
9d9324b
Test maximum Savings Credit reforms through every public route
MaxGhenis Oct 27, 2026
000f16b
Publish the Pension Credit page and document maximum reforms
MaxGhenis Oct 27, 2026
6dc0a13
Preserve pre-base Savings Credit reforms after rates updates
MaxGhenis Oct 27, 2026
a82e405
Anchor pre-base component reforms at the projection base
MaxGhenis Oct 27, 2026
86502d3
Merge main into feature/pension-credit-2025-rates
MaxGhenis Oct 27, 2026
608fae4
Preserve loaded YAML bases when reprocessing pension reforms
MaxGhenis Oct 28, 2026
11031d1
Distinguish derived Savings Credit eligibility from CPI uprating
MaxGhenis Oct 28, 2026
98d1dc1
WIP: follow the reformed guarantee in the forecast threshold and HB a…
MaxGhenis Oct 28, 2026
e8ffeb7
Format salvaged pension projection fixes
MaxGhenis Oct 28, 2026
d2b1280
Enforce absolute precision in the current-law main differential
MaxGhenis Oct 28, 2026
74a7fd5
Keep modifiers active in composed pension reform regressions
MaxGhenis Oct 28, 2026
2feb475
Preserve zero forecast anchors when component indices rebound
MaxGhenis Oct 28, 2026
897a7a3
Merge main into feature/pension-credit-2025-rates
MaxGhenis Oct 28, 2026
f7d5a21
Keep main's extend_after_last_stated for the Carer's Allowance projec…
MaxGhenis Oct 28, 2026
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/2092.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Made Pension Credit and pension-age Housing Benefit projections non-negative and safe under reforms, validated their common enacted base year from the YAML as loaded, and preserved Guarantee Credit boundary continuity. Forecast thresholds and protected Housing Benefit allowances follow the reformed guarantee and maximum as uprated, as on main.
8 changes: 7 additions & 1 deletion docs/book/programs/gov/dwp/pension-credit.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,19 @@
" additional support to those who have some savings or a second pension.\n",
"\n",
"\n",
"Pension Credit parameters can be found in `policyengine_uk/parameters/gov/dwp/pension_credit` and logic in `policyengine_uk/variables/dwp/pension_credit.py`.\n",
"Pension Credit parameters can be found in `policyengine_uk/parameters/gov/dwp/pension_credit` and logic in `policyengine_uk/variables/gov/dwp/pension_credit/`.\n",
"\n",
"## Legislation\n",
"\n",
"The legal framework for Guarantee Credit is primarily defined in the legislation provided on the [The State Pension Credit Regulations 2002](https://www.legislation.gov.uk/uksi/2002/1792/regulation/6) legislation website. \n",
"The legal framework for Savings Credit is primarily defined in the legislation provided on the [State Pension Credit Act 2002](https://www.legislation.gov.uk/ukpga/2002/16/section/3) legislation website. \n",
"\n",
"## Uprating\n",
"\n",
"After the last enacted rates, the standard minimum guarantee follows the previous May–July earnings increase, with no decrease when earnings fall, under [Social Security Administration Act 1992 section 150A](https://www.legislation.gov.uk/ukpga/1992/5/section/150A). Maximum Savings Credit follows September CPI with a zero floor. The model derives the Savings Credit threshold from these amounts and the live phase-in rate, with a zero floor on the threshold. Each higher pension-age Housing Benefit allowance with an unreformed own base equals the projected guarantee plus projected maximum Savings Credit; the post-April-2021 lower allowances follow earnings. Published amounts, including rounding, remain unchanged in their enacted years.\n",
"\n",
"The projections start from the common last year with enacted guarantees, thresholds and higher Housing Benefit allowances. Forecast thresholds and protected Housing Benefit allowances follow the guarantee and maximum as general uprating projects their reformed paths, as on main, unless their own base-year value is also reformed. Threshold forecasts use the live phase-in rate; a zero rate keeps the preceding threshold and pays no Savings Credit. Explicit threshold and allowance reforms anchor their own projections, and higher allowances at or below the guarantee, including zero, can still be projected. See the [Pension Credit parameter documentation](https://github.com/PolicyEngine/policyengine-uk/blob/main/policyengine_uk/parameters/gov/dwp/pension_credit/README.md) for the base-year checks and reform rules. These are forecast conventions, rather than announced future rates.\n",
"\n",
"## Pension Credit Rate Changes\n",
"\n",
"Some key components of Guarantee Credit include:\n",
Expand Down
6 changes: 6 additions & 0 deletions docs/book/programs/gov/dwp/state-pension.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,6 +257,12 @@ statutory-basis forecast minus the calendar-year growth stored in
OBR does not forecast the ONS AWE series; its measure is wages and
salaries per employee, and Q2 is the quarter nearest May to July.

The State Pension triple lock consumes both statutory inputs. The shared
`indices.earnings_uprating` series also projects the Pension Credit standard
minimum guarantee, with a zero floor on earnings growth. See
[Pension Credit uprating](./pension-credit.ipynb#uprating) for its Savings Credit
and pension-age Housing Benefit projections and reform behaviour.

After the EFO horizon the gap is zero, so the inputs follow calendar-year
growth. Smooth forecasts pay the higher of earnings, CPI and 2.5% each year,
so the baseline has none of the extra cost the triple lock builds up when
Expand Down
1 change: 1 addition & 0 deletions myst.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ project:
- title: Programmes
children:
- file: docs/book/programs/contrib/ubi-center/carbon-tax.ipynb
- file: docs/book/programs/gov/dwp/pension-credit.ipynb
- pattern: docs/book/programs/gov/*/*.md
site:
options:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,39 @@
"""

import math
from typing import Any, Callable

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

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


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 national_living_wage_limit(hours: float, national_living_wage: float) -> float:
"""``hours`` at the national living wage, rounded up to the next pound.

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
description: Personal allowance for Housing Benefit for a couple where one or both members attained State Pension age before 1 April 2021 (before that date, every couple with a member over State Pension age except, until 6 December 2018, one where both members were under 65).
description: >-
Personal allowance for Housing Benefit for a couple where one or both members attained State Pension age before 1 April 2021 (before that date, every couple with a member over State Pension age except, until 6 December 2018, one where both members were under 65).
Values after the last enacted rate are forecasts, not enacted future rates.
values:
# 2015-16 to 2019-20: the rate set by the instrument cited at each value
# (to 2018-19, the aged-65-or-over rate; younger claimants got
Expand Down Expand Up @@ -36,17 +38,27 @@ values:
2022-04-06: 294.9
2023-04-01: 324.7
2024-04-01: 352
2025-04-01: 366
2025-04-01:
value: 366
metadata:
reference:
- title: The Social Security Benefits Up-rating Order 2025, Schedule 6 paragraph 1(2)(b)
href: https://www.legislation.gov.uk/uksi/2025/295/schedule/6/made
- title: The Social Security Benefits Up-rating Order (Northern Ireland) 2025, Schedule 6 paragraph 1(2)(b)
href: https://www.legislation.gov.uk/nisr/2025/64/schedule/6/made
- title: Benefit and pension rates 2025 to 2026, Housing Benefit personal allowances
href: https://www.gov.uk/government/publications/benefit-and-pension-rates-2025-to-2026/benefit-and-pension-rates-2025-to-2026
2026-04-01: 383.35

metadata:
period: week
unit: currency-GBP
label: Housing Benefit couple pension-age personal allowance
# Not uprated as a whole: the allowance is the Pension Credit standard
# Component-weighted forecast: 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.
# builds an allowance-specific index from that sum after published amounts.
uprating: gov.dwp.housing_benefit.allowances.protected_pension_age_uprating.couple
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
Expand Down
Loading
Loading