Skip to content

Commit bda6d2d

Browse files
Lag CPI for benefits correctly (#1228)
* Lag CPI for benefits correctly * Fix typo * Add 2010 onwards * Update test * Update basket of reforms * Update tests
1 parent aebb209 commit bda6d2d

6 files changed

Lines changed: 49 additions & 14 deletions

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: patch
2+
changes:
3+
fixed:
4+
- Lag CPI correctly for benefit uprating.

policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ values:
44
2010-01-01: 114.48
55
metadata:
66
label: Benefit uprating index
7-
uprating: gov.economic_assumptions.indices.obr.consumer_price_index
7+
uprating: gov.economic_assumptions.indices.obr.lagged_cpi
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
from policyengine_core.parameters import Parameter, ParameterNode
2+
3+
4+
def add_lagged_cpi(
5+
parameters: ParameterNode,
6+
) -> ParameterNode:
7+
"""
8+
Add lagged average earnings to the economic assumptions.
9+
"""
10+
obr = parameters.gov.economic_assumptions.yoy_growth.obr
11+
cpi = obr.consumer_price_index
12+
13+
lagged_cpi = Parameter(
14+
"gov.economic_assumptions.yoy_growth.obr.lagged_cpi",
15+
data={
16+
"values": {
17+
f"{year}-01-01": cpi(year - 1) for year in range(2010, 2030)
18+
},
19+
},
20+
)
21+
22+
obr.add_child(
23+
"lagged_cpi",
24+
lagged_cpi,
25+
)
26+
27+
return parameters

policyengine_uk/system.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
from policyengine_uk.parameters.gov.economic_assumptions.lag_average_earnings import (
2121
add_lagged_earnings,
2222
)
23+
from policyengine_uk.parameters.gov.economic_assumptions.lag_cpi import (
24+
add_lagged_cpi,
25+
)
2326
from policyengine_core.reforms import Reform
2427
from policyengine_uk.reforms import create_structural_reforms_from_parameters
2528

@@ -65,6 +68,7 @@ def process_parameters(self, reform=None):
6568
self.apply_reform_set(reform)
6669
self.parameters = add_private_pension_uprating_factor(self.parameters)
6770
self.parameters = add_lagged_earnings(self.parameters)
71+
self.parameters = add_lagged_cpi(self.parameters)
6872
self.parameters = add_triple_lock(self.parameters)
6973
self.parameters = create_economic_assumption_indices(self.parameters)
7074
self.parameters.add_child("baseline", self.parameters.clone())

policyengine_uk/tests/microsimulation/reforms_config.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ reforms:
88
parameters:
99
gov.hmrc.income_tax.rates.uk[1].rate: 0.42
1010
- name: Raise personal allowance by ~800GBP/year
11-
expected_impact: 0.8
11+
expected_impact: 0.7
1212
parameters:
1313
gov.hmrc.income_tax.allowances.personal_allowance.amount: 13000
1414
- name: Raise child benefit by 25GBP/week per additional child
15-
expected_impact: -1.3
15+
expected_impact: -1.2
1616
parameters:
1717
gov.hmrc.child_benefit.amount.additional: 25
1818
- name: Reduce Universal Credit taper rate to 20%
19-
expected_impact: -38.3
19+
expected_impact: -38.7
2020
parameters:
2121
gov.dwp.universal_credit.means_test.reduction_rate: 0.2
2222
- name: Raise Class 1 main employee NICs rate to 10%
@@ -28,6 +28,6 @@ reforms:
2828
parameters:
2929
gov.hmrc.vat.standard_rate: 0.22
3030
- name: Raise additional rate by 3pp
31-
expected_impact: 4.4
31+
expected_impact: 4.5
3232
parameters:
3333
gov.hmrc.income_tax.rates.uk[2].rate: 0.48

policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
members: [child1]
1111
extended_childcare_entitlement_eligible: true
1212
output:
13-
extended_childcare_entitlement: 6_917.185
13+
extended_childcare_entitlement: 6857.356
1414

1515
- name: Eligible for 15 hours - All first conditions met
1616
period: 2025
@@ -24,7 +24,7 @@
2424
members: [child1]
2525
extended_childcare_entitlement_eligible: true
2626
output:
27-
extended_childcare_entitlement: 4_870.2627
27+
extended_childcare_entitlement: 4828.138
2828

2929
- name: Not eligible (one condition not met)
3030
period: 2025
@@ -54,7 +54,7 @@
5454
members: [child1, child2]
5555
extended_childcare_entitlement_eligible: true
5656
output:
57-
extended_childcare_entitlement: 11_787.447
57+
extended_childcare_entitlement: 11685.494
5858

5959
- name: Not eligible - Family with multiple children but conditions not met
6060
period: 2025
@@ -89,7 +89,7 @@
8989
family_type: COUPLE_WITH_CHILDREN
9090
extended_childcare_entitlement_eligible: true
9191
output:
92-
extended_childcare_entitlement: 18706.
92+
extended_childcare_entitlement: 18542.85
9393

9494
- name: No expenses for zero hours
9595
period: 2025
@@ -118,7 +118,7 @@
118118
members: [child1]
119119
extended_childcare_entitlement_eligible: true
120120
output:
121-
extended_childcare_entitlement: 4_611.457 # 20 hours * 38 weeks * £6.07 per hour (2025 rate)
121+
extended_childcare_entitlement: 4571.5703 # 20 hours * 38 weeks * £6.07 per hour (2025 rate)
122122

123123
- name: Child using fewer hours than maximum entitlement - multiple children
124124
period: 2025
@@ -136,7 +136,7 @@
136136
members: [child1, child2]
137137
extended_childcare_entitlement_eligible: true
138138
output:
139-
extended_childcare_entitlement: 6_705.434 # Updated to match actual calculation
139+
extended_childcare_entitlement: 6647.4365
140140

141141
- name: Benefit unit maximum hours cap applied
142142
period: 2025
@@ -155,7 +155,7 @@
155155
extended_childcare_entitlement_eligible: true
156156
maximum_extended_childcare_hours_usage: 40
157157
output:
158-
extended_childcare_entitlement: 13835.381
158+
extended_childcare_entitlement: 13714.712
159159

160160

161161
- name: Benefit unit without maximum hours cap applied
@@ -172,7 +172,7 @@
172172
extended_childcare_entitlement_eligible: true
173173
maximum_extended_childcare_hours_usage: 10
174174
output:
175-
extended_childcare_entitlement: 2_306.6
175+
extended_childcare_entitlement: 2285.7852
176176

177177

178178
- name: Benefit unit without maximum hours cap applied with 3 years old child
@@ -189,4 +189,4 @@
189189
extended_childcare_entitlement_eligible: true
190190
maximum_extended_childcare_hours_usage: 18
191191
output:
192-
extended_childcare_entitlement: 3_459.5
192+
extended_childcare_entitlement: 3428.678

0 commit comments

Comments
 (0)