Skip to content

Commit dc7a315

Browse files
authored
Apply Savings Credit to people reaching SPA before 2016 (#1126)
* Add 2016 condition * add changelog * apply comments * apply comments
1 parent 12cc572 commit dc7a315

6 files changed

Lines changed: 187 additions & 1 deletion

File tree

changelog_entry.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
- bump: minor
2+
changes:
3+
fixed:
4+
- Implemented 2016 Savings Credit eligibility restriction in Pension Credit.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
description: People reaching State Pension age after this year are not eligible for Savings Credit.
2+
metadata:
3+
label: Savings Credit eligibility cutoff year
4+
reference:
5+
- title: State Pension Credit Act 2002
6+
href: https://www.legislation.gov.uk/ukpga/2002/16/section/3
7+
values:
8+
2002-01-01: 2016
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
- name: No one reached SPA before the cutoff year, ineligible for savings credit
2+
period: 2023
3+
input:
4+
people:
5+
person:
6+
age: 68
7+
is_male: true
8+
state_pension_age: 66
9+
benunits:
10+
benunit:
11+
members: [person]
12+
savings_credit_income: 10000
13+
output:
14+
is_savings_credit_eligible: false
15+
16+
- name: Has pre-cutoff year SPA member and income above threshold (single), eligible
17+
period: 2023
18+
input:
19+
people:
20+
person:
21+
age: 78
22+
is_male: false
23+
state_pension_age: 60
24+
benunits:
25+
benunit:
26+
members: [person]
27+
relation_type: SINGLE
28+
savings_credit_income: 10200
29+
output:
30+
is_savings_credit_eligible: true
31+
32+
- name: One member reached SPA before cutoff year and income above threshold (couple), eligible
33+
period: 2023
34+
input:
35+
people:
36+
person:
37+
age: 73
38+
is_male: true
39+
state_pension_age: 65
40+
spouse:
41+
age: 66
42+
is_male: false
43+
state_pension_age: 66
44+
benunits:
45+
benunit:
46+
members: [person, spouse]
47+
relation_type: COUPLE
48+
savings_credit_income: 16000
49+
output:
50+
is_savings_credit_eligible: true
51+
52+
- name: No pre-cutoff year SPA member and income above threshold (couple), ineligible
53+
period: 2023
54+
input:
55+
people:
56+
person:
57+
age: 67
58+
is_male: true
59+
state_pension_age: 66
60+
spouse:
61+
age: 65
62+
is_male: false
63+
state_pension_age: 66
64+
benunits:
65+
benunit:
66+
members: [person, spouse]
67+
relation_type: COUPLE
68+
savings_credit_income: 16000
69+
output:
70+
is_savings_credit_eligible: false
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
- name: Person born in 1948 reaches SPA before cutoff year
2+
period: 2023
3+
input:
4+
people:
5+
person:
6+
age: 75 # Born in 1948, reached SPA around 2013-2014
7+
state_pension_age: 65
8+
benunits:
9+
benunit:
10+
members: [person]
11+
output:
12+
meets_savings_credit_age_requirement: true
13+
14+
- name: Person born in 1952 reaches SPA before cutoff year
15+
period: 2023
16+
input:
17+
people:
18+
person:
19+
age: 71 # Born in 1952, reached SPA around 2015
20+
state_pension_age: 63
21+
benunits:
22+
benunit:
23+
members: [person]
24+
output:
25+
meets_savings_credit_age_requirement: true
26+
27+
- name: Person born in 1954 reaches SPA after cutoff year
28+
period: 2023
29+
input:
30+
people:
31+
person:
32+
age: 69 # Born in 1954, reached SPA around 2017-2018
33+
state_pension_age: 63.5
34+
benunits:
35+
benunit:
36+
members: [person]
37+
output:
38+
meets_savings_credit_age_requirement: false
39+
40+
- name: Person born in 1960 reaches SPA after cutoff year
41+
period: 2023
42+
input:
43+
people:
44+
person:
45+
age: 63 # Born in 1960, will reach SPA around 2026-2027
46+
state_pension_age: 66
47+
benunits:
48+
benunit:
49+
members: [person]
50+
output:
51+
meets_savings_credit_age_requirement: false
52+
53+
- name: Test in 2015 - Person born in 1950 reaches SPA before cutoff year
54+
period: 2015
55+
input:
56+
people:
57+
person:
58+
age: 65 # Born in 1950, reached SPA around 2013
59+
state_pension_age: 63
60+
benunits:
61+
benunit:
62+
members: [person]
63+
output:
64+
meets_savings_credit_age_requirement: true
65+
66+
- name: Test in 2017 - Person who reached SPA in 2015 is eligible
67+
period: 2017
68+
input:
69+
people:
70+
person:
71+
age: 65 # Born in 1952, reached SPA in 2015
72+
state_pension_age: 63
73+
benunits:
74+
benunit:
75+
members: [person]
76+
output:
77+
meets_savings_credit_age_requirement: true

policyengine_uk/variables/gov/dwp/pension_credit/savings_credit/is_savings_credit_eligible.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,13 @@ class is_savings_credit_eligible(Variable):
1010
reference = "https://www.legislation.gov.uk/ukpga/2002/16/section/3"
1111

1212
def formula(benunit, period, parameters):
13+
# Check if any member reached SPA before the cutoff year
14+
has_pre_cutoff_spa_member = benunit.any(
15+
benunit.members("meets_savings_credit_age_requirement", period)
16+
)
1317
income = benunit("savings_credit_income", period)
1418
sc = parameters(period).gov.dwp.pension_credit.savings_credit
1519
relation_type = benunit("relation_type", period)
1620
threshold = sc.threshold[relation_type]
17-
return income >= threshold
21+
meets_income_threshold = income >= threshold
22+
return has_pre_cutoff_spa_member & meets_income_threshold
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from policyengine_uk.model_api import *
2+
3+
4+
class meets_savings_credit_age_requirement(Variable):
5+
value_type = bool
6+
entity = Person
7+
label = "whether the person reached State Pension Age before the Savings Credit cutoff year"
8+
definition_period = YEAR
9+
10+
def formula(person, period, parameters):
11+
# https://www.legislation.gov.uk/ukpga/2002/16/section/3
12+
p = parameters(period).gov.dwp.pension_credit.savings_credit
13+
current_age = person("age", period)
14+
# State pension age
15+
spa = person("state_pension_age", period)
16+
# The year we're evaluating
17+
evaluation_year = period.start.year
18+
# Calculate what year the person reached/will reach SPA
19+
birth_year = evaluation_year - current_age
20+
spa_year = birth_year + spa
21+
# Get the cutoff year from parameters
22+
return spa_year < p.cutoff_year

0 commit comments

Comments
 (0)