From 054a757a5f6f368286304c909237e04460f55c3c Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Mon, 14 Jul 2025 15:19:02 +0100 Subject: [PATCH 1/6] Lag CPI for benefits correctly --- changelog_entry.yaml | 4 +++ .../parameters/gov/benefit_uprating_cpi.yaml | 2 +- .../gov/economic_assumptions/lag_cpi.py | 27 +++++++++++++++++++ policyengine_uk/system.py | 4 +++ 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb..2577a76f1 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: patch + changes: + fixed: + - Lag CPI correctly for benefit uprating. diff --git a/policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml b/policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml index b803063dc..e46eb35ad 100644 --- a/policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml +++ b/policyengine_uk/parameters/gov/benefit_uprating_cpi.yaml @@ -4,4 +4,4 @@ values: 2010-01-01: 114.48 metadata: label: Benefit uprating index - uprating: gov.economic_assumptions.indices.obr.consumer_price_index + uprating: gov.economic_assumptions.indices.obr.lagged_cpi diff --git a/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py b/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py new file mode 100644 index 000000000..977b79efb --- /dev/null +++ b/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py @@ -0,0 +1,27 @@ +from policyengine_core.parameters import Parameter, ParameterNode + + +def add_lagged_cpi( + parameters: ParameterNode, +) -> ParameterNode: + """ + Add lagged average earnings to the economic assumptions. + """ + obr = parameters.gov.economic_assumptions.yoy_growth.obr + cpi = obr.consumer_price_index + + lagged_cpi = Parameter( + "gov.economic_assumptions.yoy_growth.lagged_cpi", + data={ + "values": { + f"{year}-01-01": cpi(year - 1) for year in range(2022, 2030) + }, + }, + ) + + obr.add_child( + "lagged_cpi", + lagged_cpi, + ) + + return parameters diff --git a/policyengine_uk/system.py b/policyengine_uk/system.py index d31a62bff..a336a7a45 100644 --- a/policyengine_uk/system.py +++ b/policyengine_uk/system.py @@ -20,6 +20,9 @@ from policyengine_uk.parameters.gov.economic_assumptions.lag_average_earnings import ( add_lagged_earnings, ) +from policyengine_uk.parameters.gov.economic_assumptions.lag_cpi import ( + add_lagged_cpi, +) from policyengine_core.reforms import Reform from policyengine_uk.reforms import create_structural_reforms_from_parameters @@ -65,6 +68,7 @@ def process_parameters(self, reform=None): self.apply_reform_set(reform) self.parameters = add_private_pension_uprating_factor(self.parameters) self.parameters = add_lagged_earnings(self.parameters) + self.parameters = add_lagged_cpi(self.parameters) self.parameters = add_triple_lock(self.parameters) self.parameters = create_economic_assumption_indices(self.parameters) self.parameters.add_child("baseline", self.parameters.clone()) From 2f9d3ff13d6fa87753a5c12d66d17a5092d2561c Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Mon, 14 Jul 2025 15:21:23 +0100 Subject: [PATCH 2/6] Fix typo --- policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py b/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py index 977b79efb..a91b0f13f 100644 --- a/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py +++ b/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py @@ -11,7 +11,7 @@ def add_lagged_cpi( cpi = obr.consumer_price_index lagged_cpi = Parameter( - "gov.economic_assumptions.yoy_growth.lagged_cpi", + "gov.economic_assumptions.yoy_growth.obr.lagged_cpi", data={ "values": { f"{year}-01-01": cpi(year - 1) for year in range(2022, 2030) From 53266b5b71235b7ab1aa66b255743dacbbe9ca8f Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Mon, 14 Jul 2025 15:23:39 +0100 Subject: [PATCH 3/6] Add 2010 onwards --- policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py b/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py index a91b0f13f..531300e1b 100644 --- a/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py +++ b/policyengine_uk/parameters/gov/economic_assumptions/lag_cpi.py @@ -14,7 +14,7 @@ def add_lagged_cpi( "gov.economic_assumptions.yoy_growth.obr.lagged_cpi", data={ "values": { - f"{year}-01-01": cpi(year - 1) for year in range(2022, 2030) + f"{year}-01-01": cpi(year - 1) for year in range(2010, 2030) }, }, ) From 1e00d7a5923a565776bd2cac18064e316a292fb3 Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Mon, 14 Jul 2025 15:36:14 +0100 Subject: [PATCH 4/6] Update test --- .../extended_childcare_entitlement.yaml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml b/policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml index feedadbda..f498a1661 100644 --- a/policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/dfe/extended_childcare_entitlement/extended_childcare_entitlement.yaml @@ -10,7 +10,7 @@ members: [child1] extended_childcare_entitlement_eligible: true output: - extended_childcare_entitlement: 6_917.185 + extended_childcare_entitlement: 6857.356 - name: Eligible for 15 hours - All first conditions met period: 2025 @@ -24,7 +24,7 @@ members: [child1] extended_childcare_entitlement_eligible: true output: - extended_childcare_entitlement: 4_870.2627 + extended_childcare_entitlement: 4828.138 - name: Not eligible (one condition not met) period: 2025 @@ -54,7 +54,7 @@ members: [child1, child2] extended_childcare_entitlement_eligible: true output: - extended_childcare_entitlement: 11_787.447 + extended_childcare_entitlement: 11685.494 - name: Not eligible - Family with multiple children but conditions not met period: 2025 @@ -89,7 +89,7 @@ family_type: COUPLE_WITH_CHILDREN extended_childcare_entitlement_eligible: true output: - extended_childcare_entitlement: 18706. + extended_childcare_entitlement: 18542.85 - name: No expenses for zero hours period: 2025 @@ -118,7 +118,7 @@ members: [child1] extended_childcare_entitlement_eligible: true output: - extended_childcare_entitlement: 4_611.457 # 20 hours * 38 weeks * £6.07 per hour (2025 rate) + extended_childcare_entitlement: 4571.5703 # 20 hours * 38 weeks * £6.07 per hour (2025 rate) - name: Child using fewer hours than maximum entitlement - multiple children period: 2025 @@ -136,7 +136,7 @@ members: [child1, child2] extended_childcare_entitlement_eligible: true output: - extended_childcare_entitlement: 6_705.434 # Updated to match actual calculation + extended_childcare_entitlement: 6647.4365 - name: Benefit unit maximum hours cap applied period: 2025 @@ -155,7 +155,7 @@ extended_childcare_entitlement_eligible: true maximum_extended_childcare_hours_usage: 40 output: - extended_childcare_entitlement: 13835.381 + extended_childcare_entitlement: 13714.712 - name: Benefit unit without maximum hours cap applied @@ -172,7 +172,7 @@ extended_childcare_entitlement_eligible: true maximum_extended_childcare_hours_usage: 10 output: - extended_childcare_entitlement: 2_306.6 + extended_childcare_entitlement: 2285.7852 - name: Benefit unit without maximum hours cap applied with 3 years old child @@ -189,4 +189,4 @@ extended_childcare_entitlement_eligible: true maximum_extended_childcare_hours_usage: 18 output: - extended_childcare_entitlement: 3_459.5 \ No newline at end of file + extended_childcare_entitlement: 3428.678 \ No newline at end of file From accb4fe44b8e1a752a11efa651ccf5bba99dccaa Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Mon, 14 Jul 2025 15:43:08 +0100 Subject: [PATCH 5/6] Update basket of reforms --- policyengine_uk/tests/microsimulation/reforms_config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/policyengine_uk/tests/microsimulation/reforms_config.yaml b/policyengine_uk/tests/microsimulation/reforms_config.yaml index 13bdab954..25a17edc1 100644 --- a/policyengine_uk/tests/microsimulation/reforms_config.yaml +++ b/policyengine_uk/tests/microsimulation/reforms_config.yaml @@ -8,7 +8,7 @@ reforms: parameters: gov.hmrc.income_tax.rates.uk[1].rate: 0.42 - name: Raise personal allowance by ~800GBP/year - expected_impact: 0.8 + expected_impact: 0.7 parameters: gov.hmrc.income_tax.allowances.personal_allowance.amount: 13000 - name: Raise child benefit by 25GBP/week per additional child @@ -16,7 +16,7 @@ reforms: parameters: gov.hmrc.child_benefit.amount.additional: 25 - name: Reduce Universal Credit taper rate to 20% - expected_impact: -38.3 + expected_impact: -38.4 parameters: gov.dwp.universal_credit.means_test.reduction_rate: 0.2 - name: Raise Class 1 main employee NICs rate to 10% @@ -28,6 +28,6 @@ reforms: parameters: gov.hmrc.vat.standard_rate: 0.22 - name: Raise additional rate by 3pp - expected_impact: 4.4 + expected_impact: 4.5 parameters: gov.hmrc.income_tax.rates.uk[2].rate: 0.48 From 8d2f06116f40dfa1a81b10d90ace58aedb1b661b Mon Sep 17 00:00:00 2001 From: Nikhil Woodruff Date: Mon, 14 Jul 2025 15:48:17 +0100 Subject: [PATCH 6/6] Update tests --- policyengine_uk/tests/microsimulation/reforms_config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/policyengine_uk/tests/microsimulation/reforms_config.yaml b/policyengine_uk/tests/microsimulation/reforms_config.yaml index 25a17edc1..ba18f3bf3 100644 --- a/policyengine_uk/tests/microsimulation/reforms_config.yaml +++ b/policyengine_uk/tests/microsimulation/reforms_config.yaml @@ -12,11 +12,11 @@ reforms: parameters: gov.hmrc.income_tax.allowances.personal_allowance.amount: 13000 - name: Raise child benefit by 25GBP/week per additional child - expected_impact: -1.3 + expected_impact: -1.2 parameters: gov.hmrc.child_benefit.amount.additional: 25 - name: Reduce Universal Credit taper rate to 20% - expected_impact: -38.4 + expected_impact: -38.7 parameters: gov.dwp.universal_credit.means_test.reduction_rate: 0.2 - name: Raise Class 1 main employee NICs rate to 10%