Skip to content
Open
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/1957.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Uprate the Scottish Carer Supplement each April by the previous September's CPI, rounded to the nearest 5p, instead of holding it at £11.70 a week from 2027-28, and round the Carer Support Payment component's projected rate to the nearest 5p in the same way.
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,26 @@ metadata:
period: week
unit: currency-GBP
label: Carer Support Payment rate
uprating: gov.benefit_uprating_cpi
# September CPI and nearest-5p rounding follow Scottish Ministers' current
# policy; s86A leaves the choice of relevant prices to Ministers.
# Apply each year's rise to the previous rounded rate each April.
uprating:
parameter: gov.benefit_uprating_cpi
at_defined_interval:
start: "0001-01-01"
end: "0002-01-01"
enactment: "0002-04-01"
rounding:
type: nearest
interval: 0.05
reference:
- title: Carer Support Payment - mygov.scot
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 2.1 (12 months to September CPI, rounded to the nearest five pence)
href: https://www.gov.scot/publications/social-security-assistance-scotland-up-rating-inflation-2026-27/pages/3/
- 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/
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,30 @@ metadata:
period: week
unit: currency-GBP
label: Scottish Carer Supplement rate
# September CPI and nearest-5p rounding follow Scottish Ministers' current
# policy; s86A leaves the choice of relevant prices to Ministers.
# Apply each year's rise to the previous rounded rate each April.
uprating:
parameter: gov.benefit_uprating_cpi
at_defined_interval:
start: "0001-01-01"
end: "0002-01-01"
enactment: "0002-04-01"
rounding:
type: nearest
interval: 0.05
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 2.1 (12 months to September CPI, rounded to the nearest five pence)
href: https://www.gov.scot/publications/social-security-assistance-scotland-up-rating-inflation-2026-27/pages/3/
- 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/
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# 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, rounded to the
# nearest 5p (Social Security Assistance in Scotland: up-rating for inflation
# in 2026-27, sections 2 and 3). From April 2027 the model raises both each
# April by the previous September's CPI (gov.benefit_uprating_cpi) and rounds
# to the nearest 5p: 3.5% for April 2027 (ONS, 21 October 2026) and the OBR
# March 2026 EFO forecast of 2.1% for April 2028.

- 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 by September CPI in 2027
period: 2027
absolute_error_margin: 0.01
input:
age: 35
care_hours: 40
country: SCOTLAND
output:
# 11.70 x 1.035 = 12.1095, to the nearest 5p 12.10; x 52 = 629.20.
scottish_carer_supplement: 12.10 * 52
# 86.45 x 1.035 = 89.47575, to the nearest 5p 89.50.
carer_support_payment: 89.50 * 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:
# 12.10 x 1.021 = 12.3541, to the nearest 5p 12.35; x 52 = 642.20.
scottish_carer_supplement: 12.35 * 52
# 89.50 x 1.021 = 91.3795, to the nearest 5p 91.40.
carer_support_payment: 91.40 * 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
136 changes: 136 additions & 0 deletions policyengine_uk/tests/test_scottish_carer_supplement_uprating.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
"""Uprating of the Scottish Carer Supplement and Carer Support Payment.

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.

Both rates now rise as Scottish Child Payment and Pension Age Winter Heating
Payment do: each April by the previous September's CPI
(gov.benefit_uprating_cpi), rounded to the nearest 5p. Invariants, for every
year from 2027 to 2039, the last year of the uprating index:

1. Each April's rate is the previous rounded rate times one plus the
September CPI rise, rounded to the nearest 5p. The reference here compounds
the published 2026 rates in Decimal, independently of the index.
2. Neither rate falls, since the rise is never negative.
3. Metamorphic: setting the previous September's CPI to a published rate g
moves that April's rates to the previous rates times 1 + g, rounded to 5p,
and leaves the year before alone.

The YAML tests in tests/policy/baseline/gov/social_security_scotland check
that a Carer Support Payment recipient in Scotland gets 52 weeks of each rate.
"""

from decimal import ROUND_HALF_UP, Decimal

import pytest
from hypothesis import HealthCheck, assume, given, settings
from hypothesis import strategies as st

from policyengine_uk import Simulation
from policyengine_uk.model_api import Scenario
from policyengine_uk.system import system

CARER = "gov.social_security_scotland.carer_support_payment"
CPI_SEPTEMBER = "gov.economic_assumptions.statutory_uprating_inputs.cpi_september"
# SSI 2026/170 reg 12(3)(a) and (b).
RATES_2026 = {
f"{CARER}.supplement": Decimal("11.70"),
f"{CARER}.rate": Decimal("86.45"),
}
# Hand calculations: the 2026 rate x 1.035 (September 2026 CPI, ONS release
# of 21 October 2026), to the nearest 5p: 11.70 -> 12.1095; 86.45 -> 89.47575.
APRIL_2027 = {f"{CARER}.supplement": 12.10, f"{CARER}.rate": 89.50}
YEARS = range(2027, 2040)
FIVE_PENCE = Decimal("0.05")

PERSON = {
"people": {"person": {"age": {2026: 40}}},
"benunits": {"benunit": {"members": ["person"]}},
"households": {"household": {"members": ["person"]}},
}


def nearest_5p(amount: Decimal) -> Decimal:
return (amount / FIVE_PENCE).quantize(Decimal(1), ROUND_HALF_UP) * FIVE_PENCE


def weekly_rate(parameters, name, year):
return parameters.get_child(name)(f"{year}-04-30")


@pytest.mark.parametrize("name", RATES_2026)
def test_2026_rates_are_the_enacted_ones(name):
assert weekly_rate(system.parameters, name, 2026) == float(RATES_2026[name])


@pytest.mark.parametrize("name, expected", APRIL_2027.items())
def test_april_2027_rates_use_september_2026_cpi(name, expected):
assert weekly_rate(system.parameters, name, 2027) == pytest.approx(
expected, abs=1e-9
)


@pytest.mark.parametrize("name", RATES_2026)
def test_each_april_compounds_the_previous_rounded_rate(name):
parameters = system.parameters
rise = parameters.gov.economic_assumptions.yoy_growth.september_cpi_uprating
previous = RATES_2026[name]
for year in YEARS:
growth = 1 + Decimal(str(rise(f"{year}-01-01")))
expected = nearest_5p(previous * growth)
actual = weekly_rate(parameters, name, year)
assert actual == pytest.approx(float(expected), abs=1e-9), year
assert actual >= weekly_rate(parameters, name, year - 1), year
previous = expected


def parameters_under(changes):
simulation = Simulation(
situation=PERSON,
scenario=Scenario(parameter_changes=changes, applied_before_data_load=True),
)
return simulation.tax_benefit_system.parameters


@settings(
max_examples=8,
deadline=None,
derandomize=True,
suppress_health_check=[HealthCheck.too_slow],
)
@given(
year=st.integers(min_value=YEARS.start, max_value=2035),
september_permille=st.integers(min_value=0, max_value=120),
)
def test_rates_follow_the_previous_september_cpi(year, september_permille):
september = Decimal(september_permille) / 1000
expected = {}
for name in RATES_2026:
before = Decimal(f"{weekly_rate(system.parameters, name, year - 1):.2f}")
unrounded = before * (1 + september)
# The index is stored to 5 decimal places, so skip rises that land
# within a tenth of a step of a 5p half-way point.
steps = unrounded / FIVE_PENCE
remainder = abs(steps - steps.to_integral_value())
assume(Decimal("0.5") - remainder > Decimal("0.1"))
expected[name] = (before, nearest_5p(unrounded))

parameters = parameters_under(
{CPI_SEPTEMBER: {f"year:{year - 1}-09-01:1": float(september)}}
)

for name, (before, after) in expected.items():
assert weekly_rate(parameters, name, year - 1) == pytest.approx(
float(before), abs=1e-9
)
assert weekly_rate(parameters, name, year) == pytest.approx(
float(after), abs=1e-9
)
Loading