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/uc-state-pension-unearned-income.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Count State Pension as Universal Credit unearned income (retirement pension income, UC Regs 2013 regs 66(1)(a) and 67). Mixed-age couples on UC were having their State Pension ignored.
2 changes: 1 addition & 1 deletion docs/book/programs/gov/dwp/universal-credit.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
{
"cell_type": "markdown",
"metadata": {},
"source": "## How PolicyEngine computes Universal Credit\n\nPolicyEngine computes Universal Credit at the benefit-unit level in three stages:\n\n1. **Maximum entitlement** (`uc_maximum_amount`): sum the elements the benunit qualifies for — `uc_standard_allowance`, `uc_child_element`, `uc_disability_elements`, `uc_carer_element`, `uc_housing_costs_element`, and `uc_childcare_element`.\n2. **Means test**: the maximum entitlement is reduced by the benunit's countable earnings above its work allowance (`uc_work_allowance`) at the published taper rate (the `gov.dwp.universal_credit.means_test.reduction_rate` parameter, currently 55%), plus its unearned income. Asset rules apply on top of this — capital above the lower threshold deems a tariff income, and capital above the upper threshold disqualifies the benunit entirely.\n3. **Benefit cap**: the post-means-test award (`universal_credit_pre_benefit_cap`) is finally reduced by `benefit_cap_reduction` to produce `universal_credit`. The benefit cap only applies to benunits without a benefit-cap exemption (working enough hours, having a qualifying disability benefit, etc.).\n\nThe take-up step is handled by the input variable `would_claim_uc`, which is populated stochastically when the dataset is built so that PolicyEngine's caseload aggregates match published DWP claimant numbers rather than the full eligible population.\n\nParameters live in `policyengine_uk/parameters/gov/dwp/universal_credit/` and the per-element formulas in `policyengine_uk/variables/gov/dwp/universal_credit/`."
"source": "## How PolicyEngine computes Universal Credit\n\nPolicyEngine computes Universal Credit at the benefit-unit level in three stages:\n\n1. **Maximum entitlement** (`uc_maximum_amount`): sum the elements the benunit qualifies for — `uc_standard_allowance`, `uc_child_element`, `uc_disability_elements`, `uc_carer_element`, `uc_housing_costs_element`, and `uc_childcare_element`.\n2. **Means test**: the maximum entitlement is reduced by the benunit's countable earnings above its work allowance (`uc_work_allowance`) at the published taper rate (the `gov.dwp.universal_credit.means_test.reduction_rate` parameter, currently 55%), plus all of its unearned income (`uc_unearned_income`), pound for pound. Unearned income is the list in `gov.dwp.universal_credit.means_test.income_definitions.unearned`: retirement pension income (State Pension and private pensions, UC Regulations 2013 regs 66(1)(a) and 67), Carer's Allowance, carer support payment (up to the Carer's Allowance rate, from November 2023), contribution-based JSA and ESA, maternity allowance, industrial injuries benefit, savings, dividend and property income, and the tariff income deemed from capital (reg 72), which replaces the actual yield of the capital it is charged on. Asset rules apply on top of this — capital above the lower threshold deems a tariff income, and capital above the upper threshold disqualifies the benunit entirely.\n3. **Benefit cap**: the post-means-test award (`universal_credit_pre_benefit_cap`) is finally reduced by `benefit_cap_reduction` to produce `universal_credit`. The benefit cap only applies to benunits without a benefit-cap exemption (working enough hours, having a qualifying disability benefit, etc.).\n\nThe take-up step is handled by the input variable `would_claim_uc`, which is populated stochastically when the dataset is built so that PolicyEngine's caseload aggregates match published DWP claimant numbers rather than the full eligible population.\n\nParameters live in `policyengine_uk/parameters/gov/dwp/universal_credit/` and the per-element formulas in `policyengine_uk/variables/gov/dwp/universal_credit/`."
},
{
"cell_type": "code",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ metadata:
reference:
- title: The Universal Credit Regulations 2013 reg. 66
href: https://www.legislation.gov.uk/uksi/2013/376/regulation/66
- title: The Universal Credit Regulations 2013 reg. 67 (retirement pension income)
href: https://www.legislation.gov.uk/uksi/2013/376/regulation/67
- title: State Pension Credit Act 2002 s. 16(1)(za), (a) (State Pension counts as retirement pension income)
href: https://www.legislation.gov.uk/ukpga/2002/16/section/16
- title: The Universal Credit Regulations 2013 reg. 66(1)(b)(ii), (viii) and (ix) (contributory ESA, maternity allowance, industrial injuries benefit)
href: https://www.legislation.gov.uk/uksi/2013/376/regulation/66
- title: The Universal Credit Regulations 2013 reg. 2 (employment and support allowance and jobseeker's allowance mean the contributory allowances; industrial injuries benefit means benefit under SSCBA 1992 Part 5)
Expand All @@ -28,6 +32,7 @@ values:
- maternity_allowance
- iidb
- private_pension_income
- state_pension
- uc_tariff_income
- savings_interest_income
- dividend_income
Expand All @@ -40,6 +45,7 @@ values:
- maternity_allowance
- iidb
- private_pension_income
- state_pension
- uc_tariff_income
- savings_interest_income
- dividend_income
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
# State Pension is retirement pension income, which counts in full as
# Universal Credit unearned income: UC Regs 2013 reg. 66(1)(a), with the
# meaning in reg. 67(1) taken from State Pension Credit Act 2002 s. 16(1)(za)
# (new State Pension) and (a) (Category A or B retirement pension). Only a
# mixed-age couple can have both a UC award and a State Pension, because UC
# needs a member under State Pension age.
#
# Hand calculations use the 2026-27 rates read in April 2026:
# - couple standard allowance (one over 25): 666.97 a month = 8,003.64 a year;
# - earned income reduction rate: 55%;
# - council rent of 6,240 a year is met in full by the housing costs element.
# So the maximum amount is 8,003.64 + 6,240 = 14,243.64.

- name: State Pension counts as unearned income
period: 2026
absolute_error_margin: 0.01
input:
state_pension: 9_000
output:
uc_unearned_income: 9_000

- name: State Pension adds to private pension income
period: 2026
absolute_error_margin: 0.01
input:
state_pension: 9_000
private_pension_income: 1_000
output:
uc_unearned_income: 10_000

- name: Reported new State Pension flows through to unearned income
period: 2026
absolute_error_margin: 0.01
input:
people:
pensioner:
age: 70
state_pension_type: NEW
# 9,000 / 52 = 173.08 a week, under the full new State Pension, so
# all of it is new_state_pension and none is a protected payment.
state_pension_reported: 9_000
partner:
age: 60
benunits:
benunit:
members: [pensioner, partner]
households:
household:
members: [pensioner, partner]
output:
state_pension: [9_000, 0]
uc_unearned_income: 9_000

- name: Mixed-age couple renting from the council, State Pension reduces UC pound for pound
period: 2026
absolute_error_margin: 0.01
input:
people:
pensioner:
age: 70
state_pension: 9_000
partner:
age: 60
benunits:
benunit:
members: [pensioner, partner]
households:
household:
members: [pensioner, partner]
tenure_type: RENT_FROM_COUNCIL
rent: 6_240
council_tax: 1_500
output:
uc_standard_allowance: 8_003.64
uc_housing_costs_element: 6_240
uc_maximum_amount: 14_243.64
uc_unearned_income: 9_000
uc_income_reduction: 9_000
# 14,243.64 - 9,000. Before this fix the award was 14,243.64.
universal_credit: 5_243.64
# The pension-age CTR income is State Pension plus UC:
# 9,000 + 5,243.64 = 14,243.64, below the applicable amount of
# 383.35 x 52 = 19,934.20, so council tax is met in full. Before this fix
# the inflated UC gave an income of 23,243.64 and CTR of
# 1,500 - 20% x (23,243.64 - 19,934.20) = 838.11.
council_tax_benefit: 1_500

- name: Same couple with the same amount of private pension instead gets the same UC
period: 2026
absolute_error_margin: 0.01
input:
people:
pensioner:
age: 70
private_pension_income: 9_000
partner:
age: 60
benunits:
benunit:
members: [pensioner, partner]
households:
household:
members: [pensioner, partner]
tenure_type: RENT_FROM_COUNCIL
rent: 6_240
council_tax: 1_500
output:
uc_unearned_income: 9_000
universal_credit: 5_243.64

- name: State Pension above the maximum amount removes UC entirely
period: 2026
absolute_error_margin: 0.01
input:
people:
pensioner:
age: 70
state_pension: 20_000
partner:
age: 60
benunits:
benunit:
members: [pensioner, partner]
households:
household:
members: [pensioner, partner]
tenure_type: RENT_FROM_COUNCIL
rent: 6_240
output:
uc_unearned_income: 20_000
# The reduction is capped at the maximum amount.
uc_income_reduction: 14_243.64
universal_credit: 0

- name: State Pension and the younger partner's earnings both reduce UC
period: 2026
absolute_error_margin: 0.01
input:
people:
pensioner:
age: 70
state_pension: 9_000
partner:
age: 60
# Below the personal allowance and the NI primary threshold, so net
# earnings equal gross earnings.
employment_income: 6_000
benunits:
benunit:
members: [pensioner, partner]
households:
household:
members: [pensioner, partner]
tenure_type: RENT_FROM_COUNCIL
rent: 6_240
output:
uc_earned_income: 6_000
# No children and no limited capability for work, so no work allowance:
# 55% x 6,000 = 3,300 of earnings plus 9,000 of State Pension.
uc_income_reduction: 12_300
# 14,243.64 - 12,300.
universal_credit: 1_943.64

- name: State Pension also counts in 2020-21
period: 2020
absolute_error_margin: 0.01
input:
people:
pensioner:
age: 70
state_pension: 9_000
partner:
age: 60
benunits:
benunit:
members: [pensioner, partner]
households:
household:
members: [pensioner, partner]
tenure_type: RENT_FROM_COUNCIL
rent: 6_240
output:
# Couple standard allowance 596.58 a month (with the 2020 uplift):
# 7,158.96 + 6,240 = 13,398.96; less 9,000 of State Pension.
uc_maximum_amount: 13_398.96
uc_unearned_income: 9_000
universal_credit: 4_398.96
Loading
Loading