From 2bdb860a86859fad2de0c693a30427f8356f460d Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Fri, 2 Oct 2026 15:30:16 -0400 Subject: [PATCH] Uprate the Scottish Carer Supplement with the benefit uprating index The supplement had no uprating metadata, so the model held it at 11.70 a week from 2027 while the Carer Support Payment component kept rising. Social Security (Scotland) Act 2018 s.86B requires Scottish Ministers to bring forward legislation raising each relevant figure, which includes both components (carer's assistance is s.28, in Part 2 Chapter 2), to at least its s.86A inflation-adjusted level. Their measure is the 12 months to September CPI, rounded to the nearest 5p (s.86A report for 2026-27, sections 1.6, 2.1, 3.1 and 6.1). SSI 2026/170 reg 12(3) raised both components by the 3.8% September 2025 rate: 83.30 to 86.45 and 11.29 to 11.70. The supplement now uprates with gov.benefit_uprating_cpi, as the Carer Support Payment component and Carer's Allowance already do. That index lags OBR calendar-year CPI by a year, so it approximates rather than reproduces September CPI. As for every other uprated parameter, the model does not round projected rates to 5p: 2027-28 is 11.969 a week. Also cite s.86B and the s.86A report on rate.yaml, and replace the supplement's dead socialsecurity.gov.scot news link with the report's table of 2026-27 rates. Fixes #1957 Co-Authored-By: Claude Opus 5.5 --- changelog.d/1957.fixed.md | 1 + .../carer_support_payment/rate.yaml | 4 + .../carer_support_payment/supplement.yaml | 11 ++- .../scottish_carer_supplement.yaml | 56 ++++++++++++ ...test_scottish_carer_supplement_uprating.py | 91 +++++++++++++++++++ 5 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 changelog.d/1957.fixed.md create mode 100644 policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_carer_supplement.yaml create mode 100644 policyengine_uk/tests/test_scottish_carer_supplement_uprating.py diff --git a/changelog.d/1957.fixed.md b/changelog.d/1957.fixed.md new file mode 100644 index 0000000000..00de766f20 --- /dev/null +++ b/changelog.d/1957.fixed.md @@ -0,0 +1 @@ +- Uprate the Scottish Carer Supplement from 2027-28 with `gov.benefit_uprating_cpi`, the benefit uprating index the Carer Support Payment component already uses as its proxy for the previous September's CPI, instead of holding it at £11.70 a week. diff --git a/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/rate.yaml b/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/rate.yaml index 1aee85e056..c3efc0c2be 100644 --- a/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/rate.yaml +++ b/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/rate.yaml @@ -13,3 +13,7 @@ metadata: href: https://www.mygov.scot/carer-support-payment - title: The Social Security (Up-rating) (Miscellaneous Amendments) (Scotland) Regulations 2026 reg. 12(3)(a) href: https://www.legislation.gov.uk/ssi/2026/170/regulation/12/made + - title: Social Security (Scotland) Act 2018 s. 86B (duty to uprate assistance) + href: https://www.legislation.gov.uk/asp/2018/9/section/86B + - title: Social Security Assistance in Scotland - up-rating for inflation in 2026-27, section 3 (12 months to September CPI) + href: https://www.gov.scot/publications/social-security-assistance-scotland-up-rating-inflation-2026-27/pages/4/ diff --git a/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/supplement.yaml b/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/supplement.yaml index d375e1ac37..79e97cf390 100644 --- a/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/supplement.yaml +++ b/policyengine_uk/parameters/gov/social_security_scotland/carer_support_payment/supplement.yaml @@ -7,10 +7,17 @@ metadata: period: week unit: currency-GBP label: Scottish Carer Supplement rate + uprating: gov.benefit_uprating_cpi reference: - - title: New rates for carer and disability payments in 2026 - href: https://www.socialsecurity.gov.scot/news-events/news/new-payment-rates-from-april-2026 - title: The Carer's Assistance (Miscellaneous and Consequential Amendments, Revocation, Transitional and Saving Provisions) (Scotland) Regulations 2025 reg. 3 href: https://www.legislation.gov.uk/ssi/2025/340/made - title: The Social Security (Up-rating) (Miscellaneous Amendments) (Scotland) Regulations 2026 reg. 12(3)(b) href: https://www.legislation.gov.uk/ssi/2026/170/regulation/12/made + - title: Social Security (Scotland) Act 2018 s. 86A (inflation-adjusted level) + href: https://www.legislation.gov.uk/asp/2018/9/section/86A + - title: Social Security (Scotland) Act 2018 s. 86B (duty to uprate assistance) + href: https://www.legislation.gov.uk/asp/2018/9/section/86B + - title: Social Security Assistance in Scotland - up-rating for inflation in 2026-27, section 3 (12 months to September CPI) + href: https://www.gov.scot/publications/social-security-assistance-scotland-up-rating-inflation-2026-27/pages/4/ + - title: Social Security Assistance in Scotland - up-rating for inflation in 2026-27, table 5 (2026-27 rates) + href: https://www.gov.scot/publications/social-security-assistance-scotland-up-rating-inflation-2026-27/pages/7/ diff --git a/policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_carer_supplement.yaml b/policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_carer_supplement.yaml new file mode 100644 index 0000000000..0a2765052b --- /dev/null +++ b/policyengine_uk/tests/policy/baseline/gov/social_security_scotland/scottish_carer_supplement.yaml @@ -0,0 +1,56 @@ +# Social Security (Scotland) Act 2018 s.86B requires Scottish Ministers to +# bring forward legislation raising the Scottish Carer Supplement and the +# Carer Support Payment component to at least their s.86A inflation-adjusted +# levels; their measure is the 12 months to September CPI (Social Security +# Assistance in Scotland: up-rating for inflation in 2026-27, section 3). +# From 2027 the model uprates both with gov.benefit_uprating_cpi, its proxy +# for that measure, which is 184.3803432 in 2026, 188.6206824 in 2027 and +# 192.3927984 in 2028 under the OBR March 2026 EFO. The model does not round +# to the nearest 5p as Ministers do. + +- name: Scottish Carer Supplement is 11.70 a week in 2026 + period: 2026 + absolute_error_margin: 0.01 + input: + age: 35 + care_hours: 40 + country: SCOTLAND + output: + # SSI 2026/170 reg. 12(3)(b): 11.70 x 52. + scottish_carer_supplement: 608.40 + carer_support_payment: 86.45 * 52 + +- name: Scottish Carer Supplement rises with gov.benefit_uprating_cpi in 2027 + period: 2027 + absolute_error_margin: 0.01 + input: + age: 35 + care_hours: 40 + country: SCOTLAND + output: + # 11.70 x 188.6206824 / 184.3803432 x 52 = 622.39, up from 608.40. + scottish_carer_supplement: 11.70 * 188.6206824 / 184.3803432 * 52 + # The Carer Support Payment component rises by the same factor. + carer_support_payment: 86.45 * 188.6206824 / 184.3803432 * 52 + +- name: Scottish Carer Supplement keeps rising in 2028 + period: 2028 + absolute_error_margin: 0.01 + input: + age: 35 + care_hours: 40 + country: SCOTLAND + output: + # 11.70 x 192.3927984 / 184.3803432 x 52 = 634.84. + scottish_carer_supplement: 11.70 * 192.3927984 / 184.3803432 * 52 + +- name: Carer in England gets no Scottish Carer Supplement in 2027 + period: 2027 + absolute_error_margin: 0 + input: + age: 35 + care_hours: 40 + country: ENGLAND + output: + scottish_carer_supplement: 0 + carer_support_payment: 0 diff --git a/policyengine_uk/tests/test_scottish_carer_supplement_uprating.py b/policyengine_uk/tests/test_scottish_carer_supplement_uprating.py new file mode 100644 index 0000000000..802c0a8451 --- /dev/null +++ b/policyengine_uk/tests/test_scottish_carer_supplement_uprating.py @@ -0,0 +1,91 @@ +"""Uprating of the Scottish Carer Supplement. + +Social Security (Scotland) Act 2018 s.86B requires Scottish Ministers to bring +forward legislation raising each figure of assistance given under Chapter 2 of +Part 2, carer's assistance included, to at least its s.86A inflation-adjusted +level. Their measure is the 12 months to September CPI, rounded to the nearest +5p (Social Security Assistance in Scotland: up-rating for inflation in +2026-27, sections 2 and 3). SSI 2026/170 reg 12(3) raised the Carer Support +Payment component from 83.30 to 86.45 and the Scottish Carer Supplement from +11.29 to 11.70: both are the 3.8% September 2025 rate, rounded to 5p. The +supplement had no uprating metadata, so the model froze it at 11.70 a week from +2027 while the Carer Support Payment component kept rising. + +Invariants, for every year from 2027 to 2039, the last year of the uprating +index: + +1. Differential: the supplement and the Carer Support Payment component grow + by the same factor from their April 2026 rates. +2. That factor is gov.benefit_uprating_cpi relative to 2026, so the supplement + never falls while the index does not. +3. Metamorphic: setting CPI growth in the year before to g scales both + components by 1 + g on the year, to within the rounding of the index. + +The YAML tests in tests/policy/baseline/gov/social_security_scotland check +that a Carer Support Payment recipient in Scotland gets 52 weeks of the rate. +""" + +import pytest +from hypothesis import HealthCheck, given, settings +from hypothesis import strategies as st + +from policyengine_uk import CountryTaxBenefitSystem + +BASE_YEAR = 2026 +YEARS = range(BASE_YEAR + 1, 2040) +SUPPLEMENT_2026 = 11.70 +CSP_RATE_2026 = 86.45 + + +@pytest.fixture(scope="module") +def parameters(): + return CountryTaxBenefitSystem().parameters + + +@pytest.mark.parametrize("year", YEARS) +def test_supplement_uprates_with_carer_support_payment(parameters, year): + csp = parameters.gov.social_security_scotland.carer_support_payment + index = parameters.gov.benefit_uprating_cpi + factor = index(str(year)) / index(str(BASE_YEAR)) + + assert csp.supplement(str(BASE_YEAR)) == SUPPLEMENT_2026 + assert csp.rate(str(BASE_YEAR)) == CSP_RATE_2026 + assert csp.supplement(str(year)) / SUPPLEMENT_2026 == pytest.approx( + csp.rate(str(year)) / CSP_RATE_2026, rel=1e-12 + ) + assert csp.supplement(str(year)) == pytest.approx( + SUPPLEMENT_2026 * factor, rel=1e-12 + ) + if index(str(year)) >= index(str(year - 1)): + assert csp.supplement(str(year)) >= csp.supplement(str(year - 1)) + + +@settings( + max_examples=8, + deadline=None, + derandomize=True, + suppress_health_check=[HealthCheck.too_slow], +) +@given( + year=st.integers(min_value=BASE_YEAR + 1, max_value=2035), + growth=st.floats(min_value=0, max_value=0.12), +) +def test_supplement_follows_prior_year_cpi(year, growth): + system = CountryTaxBenefitSystem() + system.reset_parameters() + cpi = system.parameters.gov.economic_assumptions.yoy_growth.obr + shocked = [ + value_at_instant + for value_at_instant in cpi.consumer_price_index.values_list + if value_at_instant.instant_str == f"{year - 1}-01-01" + ] + assert len(shocked) == 1 + shocked[0].value = growth + system.process_parameters() + + csp = system.parameters.gov.social_security_scotland.carer_support_payment + supplement_growth = csp.supplement(str(year)) / csp.supplement(str(year - 1)) + rate_growth = csp.rate(str(year)) / csp.rate(str(year - 1)) + + assert supplement_growth == pytest.approx(1 + growth, abs=1e-4) + assert supplement_growth == pytest.approx(rate_growth, rel=1e-12)