Skip to content
Merged
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/ca-earnings-limit-nlw-projection.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Project the Carer's Allowance earnings limit after its last legislated amount as 16 hours at the national living wage, rounded up to the next pound, as the Government sets it from April 2025, instead of holding £204 in every later year.
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
"""Project the Carer's Allowance earnings limit from the national living wage.

Regulation 8(1) of the Social Security (Invalid Care Allowance) Regulations
1976 states the limit as a fixed sum, which each year's up-rating regulations
replace. From April 2025 the Government sets it at 16 times the hourly
national living wage, rounded up to the nearest pound, "from April 2025 and in
future years" (Explanatory Memorandum to SI 2025/352, paragraph 5.6): £196
from 16 x £12.21 = £195.36, and £204 from 16 x £12.71 = £203.36 (SI 2026/218).
Keep the legislated amounts and derive only later years, from the national
living wage in force on 30 April, as the April up-rating sets the limit.

Each projected year is the rule alone. A reform that lowers the national
living wage or the hours lowers the limit, and one that changes a single year
changes that year only. While the national living wage stays at or above its
April 2026 rate and the hours at or above 16, no projected year is below £204.

Run after general uprating and before fiscal-year conversion, on both the
main tree and its baseline copy, as the Savings Credit threshold projection
is. Reprocessing a reform then reads its changed national living wage or
hours. The exceptions edit the processed parameters, so they do not move the
limit: ``Scenario.apply`` on an already-built simulation, and a reform-dict
key naming a single day or month.
"""

import math

from policyengine_core.parameters import ParameterNode
from policyengine_core.periods import instant

from policyengine_uk.parameters.gov.dwp.pension_credit.savings_credit.create_savings_credit_threshold import (
extend_after_last_stated,
last_projected_year,
)


def national_living_wage_limit(hours: float, national_living_wage: float) -> float:
"""``hours`` at the national living wage, rounded up to the next pound.

Rounding to six places first keeps an exact amount from rounding up when
the float product sits just above it: 20 x (1,020 x 0.01) is
204.00000000000003, which must give £204, not £205.
"""
return float(math.ceil(round(hours * national_living_wage, 6)))


def project_carers_allowance_earnings_limit(
parameters: ParameterNode,
) -> ParameterNode:
"""Fill the years after the earnings limit's last stated value."""
carers_allowance = parameters.gov.dwp.carers_allowance
wage = parameters.gov.hmrc.minimum_wage.non_apprentice

def derive(sample, previous):
# The scale orders brackets by age, so its last amount is the adult
# rate: the national living wage, as in
# esa_exempt_work_higher_earnings_limit.
national_living_wage = wage.get_at_instant(instant(sample)).amounts[-1]
hours = carers_allowance.earnings_limit_national_living_wage_hours(sample)
return national_living_wage_limit(hours, national_living_wage)

extend_after_last_stated(
carers_allowance.earnings_limit, last_projected_year(parameters), derive
)
carers_allowance.clear_parent_cache()
return parameters
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
description: Weekly earnings above which a person is treated as gainfully employed and so is not entitled to Carer's Allowance. The test uses net earnings in the preceding week.
# Each value is the amount the up-rating regulations set. From April 2025 the
# Government sets it at 16 times the hourly national living wage, rounded up
# to the nearest pound (Explanatory Memorandum to SI 2025/352, paragraph 5.6).
# Years after the last value here are projected that way, from the national
# living wage and gov.dwp.carers_allowance.earnings_limit_national_living_wage_hours,
# by create_earnings_limit_projection.py.
metadata:
economy: false
period: week
Expand All @@ -9,6 +15,8 @@ metadata:
href: https://www.legislation.gov.uk/uksi/1976/409/regulation/8
- title: Social Security Contributions and Benefits Act 1992 s. 70(1)(b)
href: https://www.legislation.gov.uk/ukpga/1992/4/section/70
- title: Explanatory Memorandum to the Social Security Benefits Up-rating Regulations 2025 (SI 2025/352), paragraphs 5.3 and 5.6
href: https://www.legislation.gov.uk/uksi/2025/352/pdfs/uksiem_20250352_en_001.pdf
values:
2015-04-06:
value: 110
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
description: >-
Hours a week at the national living wage that set the Carer's Allowance
earnings limit in the years after its last legislated amount. Regulation 8(1)
of the Social Security (Invalid Care Allowance) Regulations 1976 states the
limit as a fixed sum, which the annual up-rating regulations replace. From
April 2025 the Government sets that sum at 16 times the hourly national living
wage, rounded up to the nearest pound, "from April 2025 and in future years"
(Explanatory Memorandum to SI 2025/352, paragraph 5.6). The model keeps each
legislated amount and projects later years as this many hours at the national
living wage in force on 30 April, rounded up to the next pound. A change
made by Scenario.apply to an already-built simulation, or by a reform-dict
key naming a single day or month, edits the processed parameters and so does
not move the limit.
values:
2025-04-07:
value: 16
reference:
- title: Explanatory Memorandum to the Social Security Benefits Up-rating Regulations 2025 (SI 2025/352), paragraphs 5.3 and 5.6
href: https://www.legislation.gov.uk/uksi/2025/352/pdfs/uksiem_20250352_en_001.pdf
metadata:
economy: false
unit: hour
period: week
label: Carer's Allowance earnings limit national living wage hours
reference:
- title: Explanatory Memorandum to the Social Security Benefits Up-rating Regulations 2025 (SI 2025/352), paragraphs 5.3 and 5.6
href: https://www.legislation.gov.uk/uksi/2025/352/pdfs/uksiem_20250352_en_001.pdf
- title: Explanatory Memorandum to the Social Security Benefits Up-rating Regulations 2026 (SI 2026/218), paragraph 5.3
href: https://www.legislation.gov.uk/uksi/2026/218/pdfs/uksiem_20260218_en_001.pdf
- title: Autumn Budget 2024 (HM Treasury, 30 October 2024)
href: https://www.gov.uk/government/publications/autumn-budget-2024/autumn-budget-2024-html
8 changes: 8 additions & 0 deletions policyengine_uk/tax_benefit_system.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@
from policyengine_uk.parameters.gov.dwp.state_pension.triple_lock.create_triple_lock import (
add_triple_lock,
)
from policyengine_uk.parameters.gov.dwp.carers_allowance.create_earnings_limit_projection import (
project_carers_allowance_earnings_limit,
)
from policyengine_uk.parameters.gov.dwp.housing_benefit.allowances.create_pension_age_allowances import (
project_pension_age_allowances,
)
Expand Down Expand Up @@ -187,6 +190,9 @@ def process_parameter_tree(
- Universal Credit standard allowance uprating (UC Act 2025 s. 1)
- Universal Credit LCWRA element uprating (UC Act 2025 s. 3 freeze)
- parameter uprating and backdating
- projections derived from other parameters after uprating: the
Savings Credit threshold, the pension-age Housing Benefit allowances
and the Carer's Allowance earnings limit
- conversion to fiscal year parameters

Returns the tree and each parameter's timeline after projection (for gov
Expand Down Expand Up @@ -222,9 +228,11 @@ def process_parameter_tree(
uprate_parameters(parameters)
project_savings_credit_threshold(parameters)
project_pension_age_allowances(parameters)
project_carers_allowance_earnings_limit(parameters)
if annualise:
project_savings_credit_threshold(parameters.baseline)
project_pension_age_allowances(parameters.baseline)
project_carers_allowance_earnings_limit(parameters.baseline)
parameters = backdate_parameters(parameters, BACKDATED_FROM)
# Prior law's projected path for every parameter a reform can change: the
# gov tree, before annualisation, and the trees outside it (household),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
# Carer's Allowance earnings limit after its last legislated amount (£204 a
# week from 6 April 2026, SI 2026/218). From April 2025 the Government sets
# the limit at 16 times the hourly national living wage, rounded up to the
# nearest pound (Explanatory Memorandum to SI 2025/352, paragraph 5.6), and
# the model projects later years that way. The model's national living wage
# holds at £12.71 after April 2026, so each later limit is 16 x £12.71 =
# £203.36, rounded up to £204. Earnings are entered net, as
# carers_allowance_earnings, so the cases do not depend on tax or NI.

- name: 2027-28, net earnings of exactly £204 a week have not exceeded the limit.
period: 2027
input:
age: 45
carers_allowance_earnings: 204 * 52
care_hours: 40
country: ENGLAND
output:
is_gainfully_employed_for_carers_allowance: false

- name: 2027-28, net earnings of £205 a week are over the limit.
period: 2027
input:
age: 45
carers_allowance_earnings: 205 * 52
care_hours: 40
country: ENGLAND
output:
is_gainfully_employed_for_carers_allowance: true
carers_allowance: 0

- name: 2028-29, net earnings of exactly £204 a week have not exceeded the limit.
period: 2028
input:
age: 45
carers_allowance_earnings: 204 * 52
care_hours: 40
country: ENGLAND
output:
is_gainfully_employed_for_carers_allowance: false

- name: 2028-29, net earnings of £205 a week are over the limit.
period: 2028
input:
age: 45
carers_allowance_earnings: 205 * 52
care_hours: 40
country: ENGLAND
output:
is_gainfully_employed_for_carers_allowance: true
carers_allowance: 0

- name: 2030-31, net earnings of exactly £204 a week have not exceeded the limit.
period: 2030
input:
age: 45
carers_allowance_earnings: 204 * 52
care_hours: 40
country: ENGLAND
output:
is_gainfully_employed_for_carers_allowance: false

- name: 2030-31, net earnings of £205 a week are over the limit.
period: 2030
input:
age: 45
carers_allowance_earnings: 205 * 52
care_hours: 40
country: ENGLAND
output:
is_gainfully_employed_for_carers_allowance: true
carers_allowance: 0
Loading
Loading