From 1cd00ab3a710a808a43210b7744e700564816483 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 17:26:14 -0400 Subject: [PATCH 1/6] Give Scotland and Wales working-age council tax reduction its own rules Working-age families in Scotland and Wales went through the pension-age means test built on Housing Benefit parameters. The whole Universal Credit award counted as income against an HB personal allowance with no children, so UC claimants almost never got CTR. Scotland's working-age scheme (SSI 2021/249) and the Welsh rules for persons who are not pensioners (WSI 2013/3029) now have their own route: - Wales, UC: applicable amount is the UC maximum amount and income is the Secretary of State's UC income plus the award (Sch 6 paras 3, 9). - Scotland, UC: own applicable amount; only the child and childcare elements of UC count as income (regs 35, 42, 57(1)(p), (2)(d)). - IS, income-based JSA and income-related ESA passport to the maximum reduction (SSI 2021/249 reg 13(11); WSI 2013/3029 Sch 9/10 para 8). - Applicable amounts: each country's personal allowances, child amounts, family premium and disabled child premiums, 2013-14 to 2026-27. - Income: Child Benefit disregarded, earnings disregards, childcare charges, closed unearned-income lists and tariff income from capital. Pension-age CTR is unchanged. Carries a byte-identical copy of #1944's council_tax_reduction_pensioner. Fixes #1962 Co-Authored-By: Claude Opus 5.5 --- changelog.d/1962.fixed.md | 1 + .../child_enhanced_disability_premium.yaml | 79 ++++ .../working_age/child_premium.yaml | 69 +++ .../working_age/childcare.yaml | 119 +++++ .../working_age/disabled_child_premium.yaml | 79 ++++ .../working_age/earnings_disregard.yaml | 91 ++++ .../working_age/family_premium.yaml | 21 + .../working_age/personal_allowance.yaml | 269 +++++++++++ .../working_age/tariff_income.yaml | 36 ++ .../working_age/child_amount.yaml | 55 +++ .../child_enhanced_disability_premium.yaml | 82 ++++ .../working_age/childcare.yaml | 25 ++ .../working_age/disabled_child_premium.yaml | 80 ++++ .../working_age/earnings_disregard.yaml | 91 ++++ .../working_age/family_premium.yaml | 51 +++ .../working_age/personal_allowance.yaml | 338 ++++++++++++++ .../working_age/tariff_income.yaml | 36 ++ policyengine_uk/programs.yaml | 2 +- ...il_tax_reduction_devolved_working_age.yaml | 419 ++++++++++++++++++ ...duction_devolved_working_age_properties.py | 158 +++++++ .../test_means_test_income_properties.py | 4 +- .../council_tax_reduction_pensioner.py | 56 +++ ...simulated_council_tax_reduction_benunit.py | 24 +- ...ncil_tax_reduction_devolved_working_age.py | 28 ++ ...tion_relevant_universal_credit_payments.py | 41 ++ ...reduction_working_age_applicable_amount.py | 51 +++ ...reduction_working_age_applicable_income.py | 72 +++ ...uncil_tax_reduction_working_age_capital.py | 42 ++ ...tax_reduction_working_age_child_amounts.py | 70 +++ ...duction_working_age_childcare_deduction.py | 93 ++++ ...tax_reduction_working_age_earned_income.py | 58 +++ ...eduction_working_age_earnings_disregard.py | 88 ++++ ...uction_working_age_has_universal_credit.py | 20 + ...il_tax_reduction_working_age_passported.py | 30 ++ ...eduction_working_age_personal_allowance.py | 70 +++ ...tax_reduction_working_age_tariff_income.py | 42 ++ ...x_reduction_working_age_unearned_income.py | 57 +++ ...tion_working_age_universal_credit_award.py | 24 + 38 files changed, 2966 insertions(+), 5 deletions(-) create mode 100644 changelog.d/1962.fixed.md create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/childcare.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/disabled_child_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/family_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/personal_allowance.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/tariff_income.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_amount.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/disabled_child_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/family_premium.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/personal_allowance.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml create mode 100644 policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml create mode 100644 policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_devolved_working_age.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_relevant_universal_credit_payments.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_capital.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_child_amounts.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_has_universal_credit.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_passported.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_personal_allowance.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_tariff_income.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_universal_credit_award.py diff --git a/changelog.d/1962.fixed.md b/changelog.d/1962.fixed.md new file mode 100644 index 0000000000..1f2cbe1405 --- /dev/null +++ b/changelog.d/1962.fixed.md @@ -0,0 +1 @@ +- Give Scotland's working-age council tax reduction scheme and the Welsh rules for persons who are not pensioners their own route: Universal Credit claimants are means-tested under each country's Universal Credit rules (Wales against the Universal Credit maximum amount; Scotland counting only the child and childcare elements), Income Support, income-based JSA and income-related ESA passport to the maximum reduction, applicable amounts include each country's personal allowances, child amounts, family premium and disabled child premiums (2013-14 to 2026-27), and income follows the law (Child Benefit disregarded, earnings disregards, childcare charges and tariff income from capital). diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml new file mode 100644 index 0000000000..85c798a191 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml @@ -0,0 +1,79 @@ +description: Weekly enhanced disability premium for each child or young person in a working-age applicant's + family who gets the highest rate of the care component of disability living allowance or the enhanced + daily living component of personal independence payment, under the Scottish council tax reduction scheme. +values: + 2013-04-01: + value: 23.45 + reference: + - title: SSI 2013/48 reg 14(f)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 24.08 + reference: + - title: SSI 2014/35 reg 4(d)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 24.43 + reference: + - title: SSI 2015/46 reg 9(c)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 24.78 + reference: + - title: SSI 2017/41 reg 10(a)(vii) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 25.48 + reference: + - title: SSI 2018/69 reg 9(a)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 26.04 + reference: + - title: SSI 2019/29 reg 5(a)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 26.6 + reference: + - title: SSI 2020/25 reg 8(c)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 26.67 + reference: + - title: SSI 2021/51 reg 7(c)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 27.44 + reference: + - title: SSI 2022/52 reg 25(c)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 30.17 + reference: + - title: SSI 2023/38 reg 20(i)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 32.2 + reference: + - title: SSI 2024/35 reg 17(i)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 32.75 + reference: + - title: SSI 2025/24 reg 16(i)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 33.99 + reference: + - title: SSI 2026/56 reg 14(i)(v)(aa) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 +metadata: + label: Scotland working-age CTR child enhanced disability premium + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 3(b), 4(b) and 17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(i)(v) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_premium.yaml new file mode 100644 index 0000000000..25c64fb4ff --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/child_premium.yaml @@ -0,0 +1,69 @@ +description: Weekly child premium for each child or young person in a working-age applicant's family under + the Scottish council tax reduction scheme. Scotland raised it 25% above the Housing Benefit child allowance + from 1 April 2017. +values: + 2013-04-01: + value: 65.62 + reference: + - title: SSI 2013/48 reg 14(c) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 66.33 + reference: + - title: SSI 2014/35 reg 4(b) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 66.9 + reference: + - title: SSI 2015/46 reg 9(b) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 83.63 + reference: + - title: SSI 2016/253 reg 8 + href: https://www.legislation.gov.uk/ssi/2016/253/regulation/8 + 2020-04-01: + value: 85.34 + reference: + - title: SSI 2020/25 reg 8(b) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 85.75 + reference: + - title: SSI 2021/51 reg 7(b) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 88.5 + reference: + - title: SSI 2022/52 reg 25(b) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 97.23 + reference: + - title: SSI 2023/38 reg 20(b) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 104.05 + reference: + - title: SSI 2024/35 reg 17(b) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 105.85 + reference: + - title: SSI 2025/24 reg 16(b) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 109.85 + reference: + - title: SSI 2026/56 reg 14(b) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 +metadata: + label: Scotland working-age CTR child premium + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 35(b) and Sch. 1 para. 2 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/2 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(b) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/childcare.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/childcare.yaml new file mode 100644 index 0000000000..cec753c693 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/childcare.yaml @@ -0,0 +1,119 @@ +description: Weekly caps on the relevant childcare charges deducted from a working-age applicant's income + under the Scottish council tax reduction scheme. +maximum_one_child: + description: Weekly cap on relevant childcare charges for an applicant without Universal Credit whose + family has one child with charges. + values: + 2013-04-01: 175 + metadata: + label: Scotland working-age CTR childcare cap, one child + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 38(4)(a) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/38 +maximum_two_or_more_children: + description: Weekly cap on relevant childcare charges for an applicant without Universal Credit whose + family has more than one child with charges. + values: + 2013-04-01: 300 + metadata: + label: Scotland working-age CTR childcare cap, two or more children + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 38(4)(b) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/38 +universal_credit_maximum_one_child: + description: Weekly cap on relevant childcare charges for an applicant with Universal Credit whose family + has one child with charges. + values: + 2022-04-01: + value: 175.0 + reference: + - title: SSI 2021/249 reg 42(4)(a) as made + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/42/made + 2023-06-28: + value: 258.0 + reference: + - title: SSI 2023/197 reg 2(2)(a) + href: https://www.legislation.gov.uk/ssi/2023/197/regulation/2 + 2024-04-01: + value: 275.0 + reference: + - title: SSI 2024/35 reg 14(a) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/14 + 2025-04-01: + value: 280.0 + reference: + - title: SSI 2025/24 reg 13(a) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/13 + 2026-04-01: + value: 290.0 + reference: + - title: SSI 2026/56 reg 11(a) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/11 + metadata: + label: Scotland working-age CTR UC childcare cap, one child + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 42(4)(a) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/42 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 11(a) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/11 + uprating: gov.benefit_uprating_cpi +universal_credit_maximum_two_or_more_children: + description: Weekly cap on relevant childcare charges for an applicant with Universal Credit whose family + has more than one child with charges. + values: + 2022-04-01: + value: 300.0 + reference: + - title: SSI 2021/249 reg 42(4)(b) as made + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/42/made + 2023-06-28: + value: 442.0 + reference: + - title: SSI 2023/197 reg 2(2)(b) + href: https://www.legislation.gov.uk/ssi/2023/197/regulation/2 + 2024-04-01: + value: 471.0 + reference: + - title: SSI 2024/35 reg 14(b) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/14 + 2025-04-01: + value: 479.0 + reference: + - title: SSI 2025/24 reg 13(b) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/13 + 2026-04-01: + value: 497.0 + reference: + - title: SSI 2026/56 reg 11(b) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/11 + metadata: + label: Scotland working-age CTR UC childcare cap, two or more children + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 42(4)(b) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/42 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 11(b) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/11 + uprating: gov.benefit_uprating_cpi +universal_credit_costs_covered: + description: Share of childcare costs that the Universal Credit childcare costs element covers. Relevant + childcare charges of an applicant with Universal Credit are the childcare costs element divided by + this share. + values: + 2013-04-01: 0.85 + metadata: + label: Scotland working-age CTR UC childcare costs element share + unit: /1 + period: year + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 78(3) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/78 +metadata: + label: Scotland working-age CTR childcare charges diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/disabled_child_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/disabled_child_premium.yaml new file mode 100644 index 0000000000..4fb826763e --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/disabled_child_premium.yaml @@ -0,0 +1,79 @@ +description: Weekly disabled child premium for each disabled child or young person in a working-age applicant's + family under the Scottish council tax reduction scheme. +values: + 2013-04-01: + value: 57.89 + reference: + - title: SSI 2013/48 reg 14(f)(iii) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 59.5 + reference: + - title: SSI 2014/35 reg 4(d)(iii) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 60.06 + reference: + - title: SSI 2015/46 reg 9(c)(iii) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 60.9 + reference: + - title: SSI 2017/41 reg 10(a)(v) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 62.86 + reference: + - title: SSI 2018/69 reg 9(a)(iii) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 64.19 + reference: + - title: SSI 2019/29 reg 5(a)(iii) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 65.52 + reference: + - title: SSI 2020/25 reg 8(c)(iii) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 65.94 + reference: + - title: SSI 2021/51 reg 7(c)(iii) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 68.04 + reference: + - title: SSI 2022/52 reg 25(c)(i) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 74.69 + reference: + - title: SSI 2023/38 reg 20(i)(i) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 80.01 + reference: + - title: SSI 2024/35 reg 17(i)(i) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 81.37 + reference: + - title: SSI 2025/24 reg 16(i)(i) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 84.46 + reference: + - title: SSI 2026/56 reg 14(i)(i) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 +metadata: + label: Scotland working-age CTR disabled child premium + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 35(c) and Sch. 1 paras. 3, 4 and + 17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(c)-(g), (i) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml new file mode 100644 index 0000000000..f18633a526 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml @@ -0,0 +1,91 @@ +description: Weekly earnings disregards for working-age applicants under the Scottish council tax reduction scheme. +single: + description: Weekly earnings disregard for a single applicant to whom no other disregard applies. + values: + 2013-04-01: 5 + metadata: + label: Scotland working-age CTR earnings disregard, single + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 11 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +couple: + description: Weekly earnings disregard for a couple, a member of which is in employment, to whom no higher disregard applies. + values: + 2013-04-01: 10 + metadata: + label: Scotland working-age CTR earnings disregard, couple + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 8 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +lone_parent: + description: Weekly earnings disregard for a lone parent. + values: + 2013-04-01: 25 + metadata: + label: Scotland working-age CTR earnings disregard, lone parent + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 5 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +disability_or_carer: + description: Weekly earnings disregard where the applicable amount includes a disability premium, severe disability premium or carer premium. + values: + 2013-04-01: 20 + metadata: + label: Scotland working-age CTR earnings disregard, disability or carer + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 paras. 4 and 6 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +additional: + description: Additional weekly earnings disregard for applicants without Universal Credit who meet a work condition. + values: + 2013-04-01: 17.10 + metadata: + label: Scotland working-age CTR additional earnings disregard + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 15 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +additional_full_time_hours: + description: Weekly hours of remunerative work from which an applicant aged 25 or over qualifies for the additional earnings disregard. + values: + 2013-04-01: 30 + metadata: + label: Scotland working-age CTR additional earnings disregard full-time hours + unit: hour + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 15(2) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +additional_full_time_age: + description: Age from which an applicant working the full-time hours qualifies for the additional earnings disregard. + values: + 2013-04-01: 25 + metadata: + label: Scotland working-age CTR additional earnings disregard full-time age + unit: year + period: year + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 15(2) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +remunerative_work_hours: + description: Weekly hours from which a person is in remunerative work. + values: + 2013-04-01: 16 + metadata: + label: Scotland working-age CTR remunerative work hours + unit: hour + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 10(1) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/10 +metadata: + label: Scotland working-age CTR earnings disregards diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/family_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/family_premium.yaml new file mode 100644 index 0000000000..503cb981c7 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/family_premium.yaml @@ -0,0 +1,21 @@ +description: Weekly family premium for a working-age applicant whose family includes a child or young person under the Scottish council tax reduction scheme. It was removed for new claims from 1 May 2016; families with an unbroken claim since then keep it as a transitional family premium, which the model does not track, so the model gives it to no one after that date. +values: + 2013-04-01: + value: 17.40 + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2012 Sch. 1 para. 4(1)(b) + href: https://www.legislation.gov.uk/ssi/2012/303/schedule/1/paragraph/4/made + 2014-04-01: + value: 17.45 + reference: + - title: SSI 2014/35 reg 4(c) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2016-05-01: + value: 0 + reference: + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2016 (SSI 2016/81) regs. 2 and 5 + href: https://www.legislation.gov.uk/ssi/2016/81/regulation/5 +metadata: + label: Scotland working-age CTR family premium + unit: currency-GBP + period: week diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/personal_allowance.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/personal_allowance.yaml new file mode 100644 index 0000000000..a0a314701d --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/personal_allowance.yaml @@ -0,0 +1,269 @@ +description: Weekly personal allowances in the applicable amount of a working-age applicant under the + Scottish council tax reduction scheme. +single_under_25: + description: Weekly personal allowance for a single applicant aged under 25 with no child premium. + values: + 2013-04-01: + value: 56.8 + reference: + - title: SSI 2013/48 reg 14(a)(ii) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 57.35 + reference: + - title: SSI 2014/35 reg 4(a)(ii) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 57.9 + reference: + - title: SSI 2015/46 reg 9(a)(ii) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2020-04-01: + value: 58.9 + reference: + - title: SSI 2020/25 reg 8(a)(ii) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 59.2 + reference: + - title: SSI 2021/51 reg 7(a)(ii) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 61.05 + reference: + - title: SSI 2022/52 reg 25(a)(ii) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 67.2 + reference: + - title: SSI 2023/38 reg 20(a)(ii) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 71.7 + reference: + - title: SSI 2024/35 reg 17(a)(i) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 72.9 + reference: + - title: SSI 2025/24 reg 16(a)(i) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 75.65 + reference: + - title: SSI 2026/56 reg 14(a)(i) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR personal allowance, single under 25 + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 para. 1(1) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/1 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(a)(i) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi +single_25_or_over: + description: Weekly personal allowance for a single applicant aged 25 or over, or a single applicant + of any age entitled to main phase employment and support allowance or with an award of Universal Credit + and limited capability for work. + values: + 2013-04-01: + value: 71.7 + reference: + - title: SSI 2013/48 reg 14(a)(i) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 72.4 + reference: + - title: SSI 2014/35 reg 4(a)(i) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 73.1 + reference: + - title: SSI 2015/46 reg 9(a)(i) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2020-04-01: + value: 74.35 + reference: + - title: SSI 2020/25 reg 8(a)(i) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 74.7 + reference: + - title: SSI 2021/51 reg 7(a)(i) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 77.0 + reference: + - title: SSI 2022/52 reg 25(a)(i) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 84.8 + reference: + - title: SSI 2023/38 reg 20(a)(i) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 90.5 + reference: + - title: SSI 2024/35 reg 17(a)(ii) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 92.05 + reference: + - title: SSI 2025/24 reg 16(a)(ii) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 95.55 + reference: + - title: SSI 2026/56 reg 14(a)(ii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR personal allowance, single 25 or over + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 para. 1(1) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/1 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(a)(ii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi +lone_parent: + description: Weekly personal allowance for a lone parent of any age. + values: + 2013-04-01: + value: 71.7 + reference: + - title: SSI 2013/48 reg 14(a)(iii) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 72.4 + reference: + - title: SSI 2014/35 reg 4(a)(iii) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 73.1 + reference: + - title: SSI 2015/46 reg 9(a)(iii) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2020-04-01: + value: 74.35 + reference: + - title: SSI 2020/25 reg 8(a)(i) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 74.7 + reference: + - title: SSI 2021/51 reg 7(a)(i) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 77.0 + reference: + - title: SSI 2022/52 reg 25(a)(i) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 84.8 + reference: + - title: SSI 2023/38 reg 20(a)(i) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 90.5 + reference: + - title: SSI 2024/35 reg 17(a)(ii) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 92.05 + reference: + - title: SSI 2025/24 reg 16(a)(ii) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 95.55 + reference: + - title: SSI 2026/56 reg 14(a)(ii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR personal allowance, lone parent + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 para. 1(1) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/1 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(a)(ii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi +couple: + description: Weekly personal allowance for a couple, whatever their ages. + values: + 2013-04-01: + value: 112.55 + reference: + - title: SSI 2013/48 reg 14(a)(iv) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 113.7 + reference: + - title: SSI 2014/35 reg 4(a)(iv) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 114.85 + reference: + - title: SSI 2015/46 reg 9(a)(iv) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2020-04-01: + value: 116.8 + reference: + - title: SSI 2020/25 reg 8(a)(iii) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 117.4 + reference: + - title: SSI 2021/51 reg 7(a)(iii) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 121.05 + reference: + - title: SSI 2022/52 reg 25(a)(iii) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 133.3 + reference: + - title: SSI 2023/38 reg 20(a)(iii) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 142.25 + reference: + - title: SSI 2024/35 reg 17(a)(iii) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 144.65 + reference: + - title: SSI 2025/24 reg 16(a)(iii) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 150.15 + reference: + - title: SSI 2026/56 reg 14(a)(iii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR personal allowance, couple + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 para. 1(1) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/1 + - title: The Council Tax Reduction (Scotland) Amendment Regulations 2026 reg. 14(a)(iii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + uprating: gov.benefit_uprating_cpi +age_threshold: + description: Age from which a single applicant receives the higher personal allowance. + values: + 2013-04-01: 25 + metadata: + label: Scotland working-age CTR personal allowance age threshold + unit: year + period: year + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 para. 1(1) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/1 +metadata: + label: Scotland working-age CTR personal allowances diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/tariff_income.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/tariff_income.yaml new file mode 100644 index 0000000000..3f3c0b67cf --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/tariff_income.yaml @@ -0,0 +1,36 @@ +description: Tariff income treated as arising from a working-age applicant's capital under the Scottish council tax reduction scheme. +threshold: + description: Capital above which a working-age applicant is treated as having tariff income. + values: + 2013-04-01: 6_000 + metadata: + label: Scotland working-age CTR tariff income threshold + unit: currency-GBP + period: year + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 63(1)(b) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/63 +step: + description: Size of each capital step, or part of one, above the threshold that yields the weekly tariff income amount. + values: + 2013-04-01: 250 + metadata: + label: Scotland working-age CTR tariff income capital step + unit: currency-GBP + period: year + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 63(1)(b) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/63 +amount: + description: Weekly tariff income for each capital step, or part of one, above the threshold. + values: + 2013-04-01: 1 + metadata: + label: Scotland working-age CTR weekly tariff income per step + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 reg. 63(1)(b) + href: https://www.legislation.gov.uk/ssi/2021/249/regulation/63 +metadata: + label: Scotland working-age CTR tariff income diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_amount.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_amount.yaml new file mode 100644 index 0000000000..dad491f329 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_amount.yaml @@ -0,0 +1,55 @@ +description: Weekly amount for each child or young person in the family of an applicant who is not a pensioner + under the Welsh council tax reduction schemes. +values: + 2013-04-01: + value: 65.62 + reference: + - title: W.S.I. 2013/112 reg 10(b) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 66.33 + reference: + - title: W.S.I. 2014/66 reg 10(b) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 66.9 + reference: + - title: W.S.I. 2015/44 reg 11(b) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2022-04-01: + value: 70.8 + reference: + - title: W.S.I. 2022/51 reg 8(b) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 77.78 + reference: + - title: W.S.I. 2023/47 reg 9(b) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 83.24 + reference: + - title: W.S.I. 2024/56 reg 8(b) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 84.66 + reference: + - title: W.S.I. 2025/59 reg 9(b) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 87.88 + reference: + - title: W.S.I. 2026/13 reg 11(b) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 +metadata: + label: Wales working-age CTR child or young person amount + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 1(1)(b) and Sch. 7 para. 3(1) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/3 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(b) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml new file mode 100644 index 0000000000..9887925a20 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/child_enhanced_disability_premium.yaml @@ -0,0 +1,82 @@ +description: Weekly enhanced disability premium for each child or young person in the family of an applicant + who is not a pensioner and who gets the highest rate of the care component of disability living allowance + or the enhanced daily living component of personal independence payment, under the Welsh council tax + reduction schemes. +values: + 2013-04-01: + value: 23.45 + reference: + - title: W.S.I. 2013/112 reg 10(c)(v) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 24.08 + reference: + - title: W.S.I. 2014/66 reg 10(d)(v) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 24.43 + reference: + - title: W.S.I. 2015/44 reg 11(d)(v) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 24.78 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(ee) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 25.48 + reference: + - title: W.S.I. 2018/14 reg 10(c)(v) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 26.04 + reference: + - title: W.S.I. 2019/11 reg 7(b)(v) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 26.6 + reference: + - title: W.S.I. 2020/16 reg 10(b)(v) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 26.67 + reference: + - title: W.S.I. 2021/34 reg 8(b)(v) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 27.44 + reference: + - title: W.S.I. 2022/51 reg 8(d)(v) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 30.17 + reference: + - title: W.S.I. 2023/47 reg 9(d)(v) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 32.2 + reference: + - title: W.S.I. 2024/56 reg 8(d)(v) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 32.75 + reference: + - title: W.S.I. 2025/59 reg 9(d)(v) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 33.99 + reference: + - title: W.S.I. 2026/13 reg 11(d)(v) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 +metadata: + label: Wales working-age CTR child enhanced disability premium + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 paras. 12 and 17(5) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(d) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml new file mode 100644 index 0000000000..b83d15f029 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml @@ -0,0 +1,25 @@ +description: Weekly caps on the relevant childcare charges deducted from the earnings of an applicant who is not a pensioner under the Welsh council tax reduction schemes. +maximum_one_child: + description: Weekly cap on relevant childcare charges where the family has one child with charges. + values: + 2014-04-01: 175 + metadata: + label: Wales working-age CTR childcare cap, one child + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 20(3)(a) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20 +maximum_two_or_more_children: + description: Weekly cap on relevant childcare charges where the family has more than one child with charges. + values: + 2014-04-01: 300 + metadata: + label: Wales working-age CTR childcare cap, two or more children + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 20(3)(b) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20 +metadata: + label: Wales working-age CTR childcare charges diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/disabled_child_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/disabled_child_premium.yaml new file mode 100644 index 0000000000..7bbad6081a --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/disabled_child_premium.yaml @@ -0,0 +1,80 @@ +description: Weekly disabled child premium for each disabled child or young person in the family of an + applicant who is not a pensioner, under the Welsh council tax reduction schemes. +values: + 2013-04-01: + value: 57.89 + reference: + - title: W.S.I. 2013/112 reg 10(c)(iii) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 59.5 + reference: + - title: W.S.I. 2014/66 reg 10(d)(iii) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 60.06 + reference: + - title: W.S.I. 2015/44 reg 11(d)(iii) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 60.9 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(cc) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 62.86 + reference: + - title: W.S.I. 2018/14 reg 10(c)(iii) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 64.19 + reference: + - title: W.S.I. 2019/11 reg 7(b)(iii) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 65.52 + reference: + - title: W.S.I. 2020/16 reg 10(b)(iii) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 65.94 + reference: + - title: W.S.I. 2021/34 reg 8(b)(iii) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 68.04 + reference: + - title: W.S.I. 2022/51 reg 8(d)(iii) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 74.69 + reference: + - title: W.S.I. 2023/47 reg 9(d)(iii) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 80.01 + reference: + - title: W.S.I. 2024/56 reg 8(d)(iii) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 81.37 + reference: + - title: W.S.I. 2025/59 reg 9(d)(iii) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 84.46 + reference: + - title: W.S.I. 2026/13 reg 11(d)(iii) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 +metadata: + label: Wales working-age CTR disabled child premium + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 paras. 13 and 17(3) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(d) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml new file mode 100644 index 0000000000..c8797630c7 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml @@ -0,0 +1,91 @@ +description: Weekly earnings disregards for applicants who are not pensioners under the Welsh council tax reduction schemes. +single: + description: Weekly earnings disregard where no other disregard applies. + values: + 2014-04-01: 5 + metadata: + label: Wales working-age CTR earnings disregard, single + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 11 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +couple: + description: Weekly earnings disregard for a couple, a member of which is in employment, to whom no higher disregard applies. + values: + 2014-04-01: 10 + metadata: + label: Wales working-age CTR earnings disregard, couple + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 8 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +lone_parent: + description: Weekly earnings disregard for a lone parent. + values: + 2014-04-01: 25 + metadata: + label: Wales working-age CTR earnings disregard, lone parent + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 5 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +disability_or_carer: + description: Weekly earnings disregard where the applicable amount includes a disability premium, severe disability premium or carer premium. + values: + 2014-04-01: 20 + metadata: + label: Wales working-age CTR earnings disregard, disability or carer + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 paras. 4 and 6 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +additional: + description: Additional weekly earnings disregard for applicants who meet a work condition. + values: + 2014-04-01: 17.10 + metadata: + label: Wales working-age CTR additional earnings disregard + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 18 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +additional_full_time_hours: + description: Weekly hours of remunerative work from which an applicant aged 25 or over qualifies for the additional earnings disregard. + values: + 2014-04-01: 30 + metadata: + label: Wales working-age CTR additional earnings disregard full-time hours + unit: hour + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 18(2) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +additional_full_time_age: + description: Age from which an applicant working the full-time hours qualifies for the additional earnings disregard. + values: + 2014-04-01: 25 + metadata: + label: Wales working-age CTR additional earnings disregard full-time age + unit: year + period: year + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 18(2) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 +remunerative_work_hours: + description: Weekly hours from which a person is in remunerative work. + values: + 2014-04-01: 16 + metadata: + label: Wales working-age CTR remunerative work hours + unit: hour + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 reg. 10(1) + href: https://www.legislation.gov.uk/wsi/2013/3029/regulation/10 +metadata: + label: Wales working-age CTR earnings disregards diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/family_premium.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/family_premium.yaml new file mode 100644 index 0000000000..ba50cb1dee --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/family_premium.yaml @@ -0,0 +1,51 @@ +description: Weekly family premium for an applicant who is not a pensioner and whose family includes at + least one child or young person, under the Welsh council tax reduction schemes. The higher rate protected + for some lone parents since 1998 is not modelled. +values: + 2013-04-01: + value: 17.4 + reference: + - title: W.S.I. 2012/3144 Sch 7 para 4(1)(b) as made + href: https://www.legislation.gov.uk/wsi/2012/3144/schedule/7/paragraph/4/made + 2015-04-01: + value: 17.45 + reference: + - title: W.S.I. 2015/44 reg 11(c) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2022-04-01: + value: 17.85 + reference: + - title: W.S.I. 2022/51 reg 8(c) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 18.53 + reference: + - title: W.S.I. 2023/47 reg 9(c) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 19.15 + reference: + - title: W.S.I. 2024/56 reg 8(c) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 19.48 + reference: + - title: W.S.I. 2025/59 reg 9(c) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 20.22 + reference: + - title: W.S.I. 2026/13 reg 11(c) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 +metadata: + label: Wales working-age CTR family premium + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 1(1)(c) and Sch. 7 para. 4(1)(b) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/4 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(c) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/personal_allowance.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/personal_allowance.yaml new file mode 100644 index 0000000000..59db1b6272 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/personal_allowance.yaml @@ -0,0 +1,338 @@ +description: Weekly personal allowances in the applicable amount of an applicant who is not a pensioner + under the Welsh council tax reduction schemes. +single_under_25: + description: Weekly personal allowance for a single applicant aged 18 to 24 who is not entitled to main + phase employment and support allowance. + values: + 2013-04-01: + value: 56.8 + reference: + - title: W.S.I. 2013/112 reg 10(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 57.35 + reference: + - title: W.S.I. 2014/66 reg 10(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 57.9 + reference: + - title: W.S.I. 2015/44 reg 11(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 58.5 + reference: + - title: W.S.I. 2017/46 reg 6(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 60.25 + reference: + - title: W.S.I. 2018/14 reg 10(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 61.7 + reference: + - title: W.S.I. 2019/11 reg 7(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 62.75 + reference: + - title: W.S.I. 2020/16 reg 10(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 63.05 + reference: + - title: W.S.I. 2021/34 reg 8(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 65.0 + reference: + - title: W.S.I. 2022/51 reg 8(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 71.55 + reference: + - title: W.S.I. 2023/47 reg 9(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 76.35 + reference: + - title: W.S.I. 2024/56 reg 8(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 77.65 + reference: + - title: W.S.I. 2025/59 reg 9(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 80.6 + reference: + - title: W.S.I. 2026/13 reg 11(a)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR personal allowance, single under 25 + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 para. 1(1) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/1 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(a) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi +single_25_or_over: + description: Weekly personal allowance for a single applicant aged 25 or over, or of any age if entitled + to main phase employment and support allowance. + values: + 2013-04-01: + value: 71.7 + reference: + - title: W.S.I. 2013/112 reg 10(a)(i) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 72.4 + reference: + - title: W.S.I. 2014/66 reg 10(a)(i) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 73.1 + reference: + - title: W.S.I. 2015/44 reg 11(a)(i) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 73.85 + reference: + - title: W.S.I. 2017/46 reg 6(a)(i) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 76.1 + reference: + - title: W.S.I. 2018/14 reg 10(a)(i) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 77.9 + reference: + - title: W.S.I. 2019/11 reg 7(a)(i) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 79.2 + reference: + - title: W.S.I. 2020/16 reg 10(a)(i) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 79.6 + reference: + - title: W.S.I. 2021/34 reg 8(a)(i) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 82.1 + reference: + - title: W.S.I. 2022/51 reg 8(a)(i) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 90.4 + reference: + - title: W.S.I. 2023/47 reg 9(a)(i) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 96.45 + reference: + - title: W.S.I. 2024/56 reg 8(a)(i) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 98.1 + reference: + - title: W.S.I. 2025/59 reg 9(a)(i) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 101.85 + reference: + - title: W.S.I. 2026/13 reg 11(a)(i) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR personal allowance, single 25 or over + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 paras. 1(1) and 2 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/1 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(a) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi +lone_parent: + description: Weekly personal allowance for a lone parent. + values: + 2013-04-01: + value: 71.7 + reference: + - title: W.S.I. 2013/112 reg 10(a)(ii) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 72.4 + reference: + - title: W.S.I. 2014/66 reg 10(a)(ii) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 73.1 + reference: + - title: W.S.I. 2015/44 reg 11(a)(ii) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 73.85 + reference: + - title: W.S.I. 2017/46 reg 6(a)(ii) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 76.1 + reference: + - title: W.S.I. 2018/14 reg 10(a)(ii) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 77.9 + reference: + - title: W.S.I. 2019/11 reg 7(a)(ii) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 79.2 + reference: + - title: W.S.I. 2020/16 reg 10(a)(ii) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 79.6 + reference: + - title: W.S.I. 2021/34 reg 8(a)(ii) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 82.1 + reference: + - title: W.S.I. 2022/51 reg 8(a)(ii) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 90.4 + reference: + - title: W.S.I. 2023/47 reg 9(a)(ii) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 96.45 + reference: + - title: W.S.I. 2024/56 reg 8(a)(ii) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 98.1 + reference: + - title: W.S.I. 2025/59 reg 9(a)(ii) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 101.85 + reference: + - title: W.S.I. 2026/13 reg 11(a)(ii) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR personal allowance, lone parent + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 para. 1(2) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/1 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(a) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi +couple: + description: Weekly personal allowance for a couple. + values: + 2013-04-01: + value: 112.55 + reference: + - title: W.S.I. 2013/112 reg 10(a)(iii) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 113.7 + reference: + - title: W.S.I. 2014/66 reg 10(a)(iii) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 114.85 + reference: + - title: W.S.I. 2015/44 reg 11(a)(iii) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 116.0 + reference: + - title: W.S.I. 2017/46 reg 6(a)(iii) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 119.5 + reference: + - title: W.S.I. 2018/14 reg 10(a)(iii) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 122.35 + reference: + - title: W.S.I. 2019/11 reg 7(a)(iii) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 124.45 + reference: + - title: W.S.I. 2020/16 reg 10(a)(iii) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 125.05 + reference: + - title: W.S.I. 2021/34 reg 8(a)(iii) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 128.95 + reference: + - title: W.S.I. 2022/51 reg 8(a)(iii) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 141.95 + reference: + - title: W.S.I. 2023/47 reg 9(a)(iii) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 151.45 + reference: + - title: W.S.I. 2024/56 reg 8(a)(iii) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 154.0 + reference: + - title: W.S.I. 2025/59 reg 9(a)(iii) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 159.85 + reference: + - title: W.S.I. 2026/13 reg 11(a)(iii) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR personal allowance, couple + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 para. 1(3) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/1 + - title: The Council Tax Reduction Schemes (Prescribed Requirements and Default Scheme) (Miscellaneous + Amendments) (Wales) Regulations 2026 reg. 11(a) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + uprating: gov.benefit_uprating_cpi +age_threshold: + description: Age from which a single applicant receives the higher personal allowance. + values: + 2013-04-01: 25 + metadata: + label: Wales working-age CTR personal allowance age threshold + unit: year + period: year + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 para. 1(1) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/1 +metadata: + label: Wales working-age CTR personal allowances diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml new file mode 100644 index 0000000000..bb8d5c4451 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml @@ -0,0 +1,36 @@ +description: Tariff income treated as arising from the capital of an applicant who is not a pensioner under the Welsh council tax reduction schemes. +threshold: + description: Capital above which an applicant who is not a pensioner is treated as having tariff income. + values: + 2014-04-01: 6_000 + metadata: + label: Wales working-age CTR tariff income threshold + unit: currency-GBP + period: year + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 33 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 +step: + description: Size of each capital step, or part of one, above the threshold that yields the weekly tariff income amount. + values: + 2014-04-01: 250 + metadata: + label: Wales working-age CTR tariff income capital step + unit: currency-GBP + period: year + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 33 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 +amount: + description: Weekly tariff income for each capital step, or part of one, above the threshold. + values: + 2014-04-01: 1 + metadata: + label: Wales working-age CTR weekly tariff income per step + unit: currency-GBP + period: week + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 33 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 +metadata: + label: Wales working-age CTR tariff income diff --git a/policyengine_uk/programs.yaml b/policyengine_uk/programs.yaml index f83e4acdd9..c7a5b587ee 100644 --- a/policyengine_uk/programs.yaml +++ b/policyengine_uk/programs.yaml @@ -521,7 +521,7 @@ programs: variable: council_tax_reduction parameter_prefix: gov.local_authorities verified_start_year: 2013 - notes: First-pass national support for Scotland, Wales, and England pensioner schemes, with reported CTB/CTR retained for unsupported English working-age local schemes. + notes: National support for the Scotland and Wales schemes (working-age rules including the Universal Credit routes, the income-related benefit passport and devolved applicable amounts) and the England pensioner scheme, with reported CTB/CTR retained for unsupported English working-age local schemes. # --- Treasury programs --- - id: cost_of_living_support diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml new file mode 100644 index 0000000000..6c5815ae8e --- /dev/null +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml @@ -0,0 +1,419 @@ +# Scotland's working-age council tax reduction scheme (SSI 2021/249) and the +# Welsh rules for persons who are not pensioners (WSI 2013/3029). Expected +# values are worked from the 2026-27 weekly amounts times 52, the model's +# weeks in a year. Council tax is £1,800 and the taper is 20% of annual +# excess income. + +- name: Wales, Universal Credit, no earnings, gets the maximum reduction + # Sch 6 paras 3 and 9: the applicable amount is the UC maximum amount and + # income is the Secretary of State's income figure (nil) plus the award, + # which equals the maximum amount, so there is no excess income. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 35 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: true + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + council_tax_reduction_devolved_working_age: true + council_tax_reduction_working_age_has_universal_credit: true + simulated_council_tax_reduction_benunit: 1_800 + council_tax_reduction: 1_800 + +- name: Wales, Universal Credit, earnings with no work allowance + # Income = earnings E + award, and award = maximum - 0.55 E, so excess + # income = 0.45 E = 0.45 x 12,000 = 5,400. No income tax or NI below + # £12,570. Award = 1,800 - 0.2 x 5,400 = 720. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 35 + employment_income: 12_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: true + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + council_tax_reduction_working_age_earned_income: 12_000 + council_tax_reduction_working_age_earnings_disregard: 0 + simulated_council_tax_reduction_benunit: 720 + +- name: Wales, Universal Credit award does not depend on the housing costs element + # The same claimant with twice the rent: the housing costs element is in + # both the applicable amount and the award, so it cancels. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 35 + employment_income: 12_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: true + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + rent: 12_000 + savings: 0 + output: + simulated_council_tax_reduction_benunit: 720 + +- name: Wales, couple with a child and no Universal Credit + # Sch 7: 159.85 couple + 87.88 child + 20.22 family premium = 267.95 a week, + # 13,933.40 a year. Earnings 20,000 less income tax 1,234 (1,486 less the + # 252 marriage allowance from the partner's unused personal allowance) and + # NI 594.40 = 18,171.60. Disregards: £10 (couple) + £17.10 (a 25+ member + # works 30 hours) = 27.10 a week, 1,409.20 a year. Child Benefit is + # disregarded (Sch 9 para 66). Income 16,762.40; excess 2,829; award + # 1,800 - 565.80. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 30 + employment_income: 20_000 + weekly_hours: 30 + council_tax_benefit_reported: 100 + partner: + age: 30 + child: + age: 5 + benunits: + benunit: + members: [claimant, partner, child] + would_claim_uc: false + households: + household: + members: [claimant, partner, child] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_applicable_amount: 13_933.40 + income_tax: [1_234, 0, 0] + council_tax_reduction_working_age_earned_income: 18_171.60 + council_tax_reduction_working_age_earnings_disregard: 1_409.20 + council_tax_reduction_working_age_applicable_income: 16_762.40 + simulated_council_tax_reduction_benunit: 1_234.20 + +- name: Scotland, Universal Credit lone parent counts only the child element + # Reg 35: 95.55 lone parent + 109.85 child premium = 205.40 a week, + # 10,680.80 a year. Reg 57(1)(p): only the UC child element is income, + # which is below the applicable amount, so the maximum reduction is due. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + council_tax_benefit_reported: 100 + child: + age: 5 + benunits: + benunit: + members: [parent, child] + would_claim_uc: true + households: + household: + members: [parent, child] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + council_tax_reduction_working_age_applicable_amount: 10_680.80 + simulated_council_tax_reduction_benunit: 1_800 + +- name: Scotland, Universal Credit single earner without children + # No child element, so no UC counts (reg 57(2)(d)). Income = 12,000 less the + # £5 disregard (260 a year; no £17.10 with UC) = 11,740. Applicable amount + # 95.55 x 52 = 4,968.60. Excess 6,771.40; award 1,800 - 1,354.28 = 445.72. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 35 + employment_income: 12_000 + weekly_hours: 30 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: true + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + council_tax_reduction_relevant_universal_credit_payments: 0 + council_tax_reduction_working_age_earnings_disregard: 260 + council_tax_reduction_working_age_applicable_income: 11_740 + simulated_council_tax_reduction_benunit: 445.72 + +- name: Scotland, single aged 20 without Universal Credit gets the under-25 allowance + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 20 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + # 75.65 x 52 + council_tax_reduction_working_age_applicable_amount: 3_933.80 + simulated_council_tax_reduction_benunit: 1_800 + +- name: Wales, income-related ESA passports to the maximum reduction whatever the capital + # Sch 9 para 8 and Sch 10 para 8: the whole of the applicant's income and + # capital is disregarded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + employment_income: 3_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + esa_income: 5_000 + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + savings: 20_000 + output: + council_tax_reduction_working_age_passported: true + council_tax_reduction_working_age_applicable_income: 0 + council_tax_reduction_working_age_capital: 0 + simulated_council_tax_reduction_benunit: 1_800 + +- name: Scotland, income-related ESA passports to the maximum reduction + # Reg 13(11): a qualifying income-related benefit claimant gets the maximum + # reduction whatever their income. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + employment_income: 3_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + esa_income: 5_000 + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_passported: true + simulated_council_tax_reduction_benunit: 1_800 + +- name: Scotland, a passported claimant still faces the capital limit + # Reg 13(1)(a) keeps the capital condition; reg 13(11) deems only the income + # conditions met. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + esa_income: 5_000 + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 20_000 + output: + simulated_council_tax_reduction_benunit: 0 + +- name: Scotland, tariff income of £1 a week for each £250 or part above £6,000 + # Savings 10,100: 4,100 above £6,000 is 16.4 steps, rounded up to 17, so + # £17 a week, 884 a year. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 10_100 + output: + council_tax_reduction_working_age_tariff_income: 884 + +- name: Wales, a mixed-age couple on Universal Credit claims under the working-age rules + # WSI 2013/3029 reg 3(1)(b)(ii): a person over the qualifying age whose + # partner has an award of Universal Credit is not a pensioner. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + older: + age: 70 + council_tax_benefit_reported: 100 + younger: + age: 50 + benunits: + benunit: + members: [older, younger] + would_claim_uc: true + households: + household: + members: [older, younger] + region: WALES + country: WALES + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + council_tax_reduction_devolved_working_age: true + simulated_council_tax_reduction_benunit: 1_800 + +- name: Scotland 2015-16, lone parent without Universal Credit, before the family premium closed + # SSI 2012/303 as amended by SSI 2015/46: lone parent 73.10 + child 66.90 + + # family premium 17.45 (SSI 2014/35) = 157.45 a week, 8,187.40 a year. + period: 2015 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 30 + child: + age: 4 + benunits: + benunit: + members: [parent, child] + would_claim_uc: false + households: + household: + members: [parent, child] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_200 + output: + council_tax_reduction_working_age_applicable_amount: 8_187.40 + +- name: Scotland 2018-19, child premium 25% above Housing Benefit and no family premium + # Lone parent 73.10 + child premium 83.63 (SSI 2016/253 reg 8); the family + # premium closed to new claims on 1 May 2016 (SSI 2016/81). 156.73 x 52. + period: 2018 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 30 + child: + age: 4 + benunits: + benunit: + members: [parent, child] + would_claim_uc: false + households: + household: + members: [parent, child] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_200 + output: + council_tax_reduction_working_age_applicable_amount: 8_149.96 + +- name: Wales 2016-17, couple with a child without Universal Credit + # WSI 2013/3029 as amended by WSI 2015/44 (unchanged in 2016): couple 114.85 + # + child 66.90 + family premium 17.45 = 199.20 a week, 10,358.40 a year. + period: 2016 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 30 + partner: + age: 30 + child: + age: 4 + benunits: + benunit: + members: [claimant, partner, child] + would_claim_uc: false + households: + household: + members: [claimant, partner, child] + region: WALES + country: WALES + council_tax: 1_200 + output: + council_tax_reduction_working_age_applicable_amount: 10_358.40 diff --git a/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py b/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py new file mode 100644 index 0000000000..02e8d58779 --- /dev/null +++ b/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py @@ -0,0 +1,158 @@ +"""Properties of the Scottish and Welsh working-age council tax reduction. + +Invariants, for any working-age family in Scotland or Wales: + +1. The award is between 0 and the council tax liability. +2. Wales, Universal Credit: the award does not depend on the rent. The UC + housing costs element sits in both the applicable amount (the UC maximum + amount, WSI 2013/3029 Sch 6 para 3) and the income (the award, para 9), so + it cancels. Benefit-capped awards are excluded: the cap lowers the award + but not the maximum amount. +3. Universal Credit, both countries: the award never rises with the + claimant's earnings. In Wales excess income is the Secretary of State's + income plus the award less the maximum amount, which rises by at least 45p + for each £1 of net earnings. In Scotland only the child and childcare + elements of the award count (SSI 2021/249 reg 57(1)(p)), so income rises + by at least 45p for each £1 as well. +4. A claimant on income-related ESA and not on Universal Credit gets the + whole liability (SSI 2021/249 reg 13(11); WSI 2013/3029 Sch 9 para 8), + whatever their earnings. + +Each example puts every family and its variants in one simulation, so the +formulas also run on arrays with several benefit units and households. +""" + +import numpy as np +from hypothesis import HealthCheck, given, settings +from hypothesis import strategies as st + +from policyengine_uk import Simulation + +YEAR = 2026 +REGIONS = ["SCOTLAND", "WALES"] + + +@st.composite +def families(draw): + region = draw(st.sampled_from(REGIONS)) + couple = draw(st.booleans()) + children = draw(st.integers(0, 3)) + people = [ + { + "age": draw(st.integers(18, 60)), + "employment_income": draw(st.floats(0, 40_000)), + "weekly_hours": draw(st.sampled_from([0, 10, 20, 35])), + "council_tax_benefit_reported": 100, + } + ] + if couple: + people.append( + { + "age": draw(st.integers(18, 60)), + "employment_income": draw(st.floats(0, 20_000)), + } + ) + for _ in range(children): + people.append({"age": draw(st.integers(0, 15))}) + return { + "region": region, + "people": people, + "would_claim_uc": draw(st.booleans()), + "rent": draw(st.floats(0, 12_000)), + "council_tax": draw(st.floats(500, 3_500)), + "savings": draw(st.floats(0, 15_000)), + "esa_income": 0, + } + + +def situation(units): + people, benunits, households = {}, {}, {} + for i, unit in enumerate(units): + names = [] + for j, inputs in enumerate(unit["people"]): + name = f"p{i}_{j}" + people[name] = {k: {YEAR: v} for k, v in inputs.items()} + names.append(name) + benunits[f"b{i}"] = { + "members": names, + "would_claim_uc": {YEAR: unit["would_claim_uc"]}, + "esa_income": {YEAR: unit["esa_income"]}, + } + households[f"h{i}"] = { + "members": names, + "region": {YEAR: unit["region"]}, + "country": {YEAR: unit["region"]}, + "rent": {YEAR: unit["rent"]}, + "council_tax": {YEAR: unit["council_tax"]}, + "savings": {YEAR: unit["savings"]}, + } + return {"people": people, "benunits": benunits, "households": households} + + +def with_earnings_raised(unit, amount): + people = [dict(p) for p in unit["people"]] + people[0]["employment_income"] = people[0]["employment_income"] + amount + return {**unit, "people": people} + + +SETTINGS = settings( + max_examples=20, + deadline=None, + derandomize=True, + suppress_health_check=[HealthCheck.too_slow, HealthCheck.data_too_large], +) + + +@SETTINGS +@given(st.lists(families(), min_size=1, max_size=5), st.floats(100, 5_000)) +def test_devolved_working_age_award_properties(units, raise_by): + n = len(units) + variants = ( + units + + [{**u, "rent": u["rent"] * 2 + 1_000} for u in units] + + [with_earnings_raised(u, raise_by) for u in units] + ) + sim = Simulation(situation=situation(variants)) + award = sim.calculate("simulated_council_tax_reduction_benunit", YEAR) + working_age = sim.calculate("council_tax_reduction_devolved_working_age", YEAR) + has_uc = sim.calculate( + "council_tax_reduction_working_age_has_universal_credit", YEAR + ) + capped = sim.calculate("benefit_cap_reduction", YEAR) > 0 + liability = sim.calculate( + "council_tax_reduction_maximum_eligible_liability", YEAR, map_to="benunit" + ) + for i in range(n): + assert working_age[i], units[i] + # 1. Bounds. + assert -0.01 <= award[i] <= liability[i] + 0.01, units[i] + # 2. Wales UC: the rent cancels. + rent_i = n + i + if ( + units[i]["region"] == "WALES" + and has_uc[i] + and has_uc[rent_i] + and not capped[i] + and not capped[rent_i] + ): + assert abs(award[i] - award[rent_i]) < 0.01, units[i] + # 3. UC: more earnings never raise the award. + earn_i = 2 * n + i + if has_uc[i] and has_uc[earn_i] and not capped[i] and not capped[earn_i]: + assert award[earn_i] <= award[i] + 0.01, units[i] + + +@SETTINGS +@given(st.lists(families(), min_size=1, max_size=5)) +def test_income_related_esa_passports_to_the_full_liability(units): + passported = [ + {**u, "would_claim_uc": False, "esa_income": 4_000, "savings": 0} for u in units + ] + sim = Simulation(situation=situation(passported)) + award = sim.calculate("simulated_council_tax_reduction_benunit", YEAR) + liability = sim.calculate( + "council_tax_reduction_maximum_eligible_liability", YEAR, map_to="benunit" + ) + flag = sim.calculate("council_tax_reduction_working_age_passported", YEAR) + assert flag.all() + assert np.allclose(award, liability, atol=0.01) diff --git a/policyengine_uk/tests/test_means_test_income_properties.py b/policyengine_uk/tests/test_means_test_income_properties.py index fcfb8f56a2..384059de3e 100644 --- a/policyengine_uk/tests/test_means_test_income_properties.py +++ b/policyengine_uk/tests/test_means_test_income_properties.py @@ -4,7 +4,8 @@ claimant, the partner, nor the programme's own child or young person (for example an 18- or 19-year-old presumed the claimant's child but not in education, or a third adult) never changes a means test's income. The UC, HB, -IS, tax credit, CTR and Pension Credit income totals are covered. +IS, tax credit, CTR (including the Scottish and Welsh working-age income) and +Pension Credit income totals are covered. Each example builds families twice in one simulation: once with the other member's income and once without, in separate households and benefit units. @@ -24,6 +25,7 @@ "income_support_applicable_income", "tax_credits_applicable_income", "council_tax_reduction_applicable_income", + "council_tax_reduction_working_age_applicable_income", "pension_credit_income", ] EDUCATIONS = ["NOT_IN_EDUCATION", "UPPER_SECONDARY", "TERTIARY"] diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.py new file mode 100644 index 0000000000..f2c9d2acbd --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.py @@ -0,0 +1,56 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_pensioner(Variable): + value_type = bool + entity = BenUnit + label = "Pensioner for Council Tax Reduction" + documentation = ( + "Whether the family's claim falls under the pension-age Council Tax " + "Reduction rules: the claimant or partner has reached the qualifying " + "age for State Pension Credit, and neither of them is on " + "Income Support, income-based Jobseeker's Allowance or income-related " + "Employment and Support Allowance, or has an award of Universal Credit. " + "A mixed-age couple on Universal Credit is therefore not a pensioner in " + "England, Wales or Scotland. English schemes are routed on this test, " + "and Welsh and Scottish claims that fail it take the working-age rules." + ) + definition_period = YEAR + reference = ( + "https://www.legislation.gov.uk/uksi/2012/2885/regulation/3", + "https://www.legislation.gov.uk/wsi/2013/3029/regulation/3", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/3", + "https://www.legislation.gov.uk/ssi/2012/319/regulation/12", + "https://www.legislation.gov.uk/ssi/2012/303/regulation/12", + ) + + def formula(benunit, period, parameters): + person = benunit.members + claimant_or_partner = person("is_uc_claimant", period) + # Either member of a couple can claim, so the older one can claim as a + # pensioner. is_SP_age stands in for the qualifying age for State + # Pension Credit, as elsewhere in the model. + over_qualifying_age = person("is_SP_age", period) + attained_qualifying_age = benunit.any(claimant_or_partner & over_qualifying_age) + income_related_benefit = benunit( + "council_tax_reduction_relevant_income_based_benefit", period + ) + # The award before the benefit cap: the cap reduces an award + # (UC Regs 2013 reg 81) rather than removing it. An award counts only + # where a claimant or partner is under the qualifying age, which + # Universal Credit needs (UC Regs 2013 reg 3(2)(a)); is_uc_eligible + # counts any working-age adult, including a qualifying young person. + # This also stands in for the rules that disregard an award held after + # both members reach the qualifying age (SI 2012/2885 reg 3(2); + # WSI 2013/3029 reg 3(2); SSI 2021/249 reg 3(2)). England and Wales + # also disregard a tax credit migrant's award (UC (TP) Regs 2014 reg + # 60A) and Scotland does not; the model has no such awards. The guard + # relies on is_uc_claimant, which needs is_parent to recognise a + # qualifying young person as a dependant. + working_age_claimant = benunit.any(claimant_or_partner & ~over_qualifying_age) + universal_credit_award = ( + benunit("is_uc_entitled", period) & working_age_claimant + ) + return ( + attained_qualifying_age & ~income_related_benefit & ~universal_credit_award + ) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/simulated_council_tax_reduction_benunit.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/simulated_council_tax_reduction_benunit.py index ce3eeb7ee9..749ff4379b 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/simulated_council_tax_reduction_benunit.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/simulated_council_tax_reduction_benunit.py @@ -43,8 +43,21 @@ def formula(benunit, period, parameters): liability = benunit.household( "council_tax_reduction_maximum_eligible_liability", period ) - applicable_amount = benunit("council_tax_reduction_applicable_amount", period) - applicable_income = benunit("council_tax_reduction_applicable_income", period) + # Scotland's working-age scheme and the Welsh rules for persons who + # are not pensioners have their own applicable amounts and income. + devolved_working_age = benunit( + "council_tax_reduction_devolved_working_age", period + ) + applicable_amount = where( + devolved_working_age, + benunit("council_tax_reduction_working_age_applicable_amount", period), + benunit("council_tax_reduction_applicable_amount", period), + ) + applicable_income = where( + devolved_working_age, + benunit("council_tax_reduction_working_age_applicable_income", period), + benunit("council_tax_reduction_applicable_income", period), + ) non_dep_deductions = benunit("council_tax_reduction_non_dep_deductions", period) max_support = select( @@ -82,7 +95,12 @@ def formula(benunit, period, parameters): - excess_income * withdrawal_rate - non_dep_deductions, ) - capital_eligible = benunit.household("savings", period) <= capital_limit + capital = where( + devolved_working_age, + benunit("council_tax_reduction_working_age_capital", period), + benunit.household("savings", period), + ) + capital_eligible = capital <= capital_limit national_ctr = ( national_scheme * is_household_head_benunit diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_devolved_working_age.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_devolved_working_age.py new file mode 100644 index 0000000000..ea5f61a9d9 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_devolved_working_age.py @@ -0,0 +1,28 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, + is_wales_scheme, +) + + +class council_tax_reduction_devolved_working_age(Variable): + value_type = bool + entity = BenUnit + label = "Claims under the Scottish or Welsh working-age council tax reduction rules" + documentation = ( + "Whether the family lives in Scotland or Wales and is not a pensioner " + "for council tax reduction. Scotland's working-age scheme and the " + "Welsh rules for persons who are not pensioners have their own " + "applicable amounts, income rules and Universal Credit route." + ) + definition_period = YEAR + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/3", + "https://www.legislation.gov.uk/wsi/2013/3029/regulation/3", + ) + + def formula(benunit, period, parameters): + country = benunit.household("country", period) + devolved = is_scotland_scheme(country) | is_wales_scheme(country) + pensioner = benunit("council_tax_reduction_pensioner", period) + return devolved & ~pensioner diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_relevant_universal_credit_payments.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_relevant_universal_credit_payments.py new file mode 100644 index 0000000000..f6dfaea86f --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_relevant_universal_credit_payments.py @@ -0,0 +1,41 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_relevant_universal_credit_payments(Variable): + value_type = float + entity = BenUnit + label = "Relevant Universal Credit payments for Scottish council tax reduction" + documentation = ( + "The part of a Universal Credit award that Scotland's working-age " + "council tax reduction scheme counts as income: the child element, " + "including the disabled child additions, plus the childcare costs " + "element, or the whole award if lower. An award with no child element " + "counts nothing. The standard allowance and the housing, carer and " + "limited capability elements are never income." + ) + definition_period = YEAR + unit = GBP + reference = "https://www.legislation.gov.uk/ssi/2021/249/regulation/57" + + def formula(benunit, period, parameters): + child_element = benunit("uc_child_element", period) + disabled_child_additions = add( + benunit, + period, + [ + "uc_individual_disabled_child_element", + "uc_individual_severely_disabled_child_element", + ], + ) + childcare_element = benunit("uc_childcare_element", period) + award = benunit( + "council_tax_reduction_working_age_universal_credit_award", period + ) + has_child_element = child_element > 0 + counted = min_( + child_element + disabled_child_additions + childcare_element, award + ) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + return where(has_universal_credit & has_child_element, counted, 0) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py new file mode 100644 index 0000000000..4edc309476 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py @@ -0,0 +1,51 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_wales_scheme, +) + + +class council_tax_reduction_working_age_applicable_amount(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction applicable amount" + documentation = ( + "Annual applicable amount of a working-age applicant in Scotland or " + "Wales. In Wales, an applicant with an award of Universal Credit uses " + "the Universal Credit maximum amount, including the housing costs " + "element (WSI 2013/3029 Sch 6 para 3; monthly amounts times 12/52 " + "give the same annual total). Otherwise, and for every Scottish " + "applicant including those on Universal Credit, it is the personal " + "allowance, the amounts for children, and the adult disability, " + "severe disability, enhanced disability and carer premiums. The adult " + "premiums use the model's legacy-benefit premium variables, whose " + "amounts equal the Scottish and Welsh amounts. The employment and " + "support allowance components are not modelled." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/35", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/1", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/3", + ) + + def formula(benunit, period, parameters): + wales = is_wales_scheme(benunit.household("country", period)) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + universal_credit_route = wales & has_universal_credit + own_amount = add( + benunit, + period, + [ + "council_tax_reduction_working_age_personal_allowance", + "council_tax_reduction_working_age_child_amounts", + "benefits_premiums", + ], + ) + return where( + universal_credit_route, + benunit("uc_maximum_amount", period), + own_amount, + ) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py new file mode 100644 index 0000000000..7d462c0d2a --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py @@ -0,0 +1,72 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_wales_scheme, +) + + +class council_tax_reduction_working_age_applicable_income(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction income" + documentation = ( + "Annual income of a working-age applicant in Scotland or Wales, " + "compared with the applicable amount. An applicant on Income Support, " + "income-based Jobseeker's Allowance or income-related Employment and " + "Support Allowance, and not on Universal Credit, has no income for " + "this purpose and gets the maximum reduction. A Welsh applicant with " + "Universal Credit counts the Secretary of State's Universal Credit " + "income figure (earnings before the work allowance, plus Universal " + "Credit unearned income) plus the Universal Credit award. Everyone " + "else counts net earnings less disregards and childcare charges, " + "unearned income, tariff income from capital and, in Scotland, the " + "relevant Universal Credit payments." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/13", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/38", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/42", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20", + ) + + def formula(benunit, period, parameters): + wales = is_wales_scheme(benunit.household("country", period)) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + passported = benunit("council_tax_reduction_working_age_passported", period) + earnings = benunit("council_tax_reduction_working_age_earned_income", period) + award = benunit( + "council_tax_reduction_working_age_universal_credit_award", period + ) + wales_universal_credit_income = ( + earnings + benunit("uc_unearned_income", period) + award + ) + disregard = benunit( + "council_tax_reduction_working_age_earnings_disregard", period + ) + childcare = benunit( + "council_tax_reduction_working_age_childcare_deduction", period + ) + own_rules_income = ( + earnings + - disregard + + add( + benunit, + period, + [ + "council_tax_reduction_working_age_unearned_income", + "council_tax_reduction_working_age_tariff_income", + "council_tax_reduction_relevant_universal_credit_payments", + ], + ) + - childcare + ) + income = where( + wales & has_universal_credit, + wales_universal_credit_income, + own_rules_income, + ) + return where(passported, 0, max_(0, income)) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_capital.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_capital.py new file mode 100644 index 0000000000..d13ab89f6e --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_capital.py @@ -0,0 +1,42 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_wales_scheme, +) + + +class council_tax_reduction_working_age_capital(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction capital" + documentation = ( + "Capital tested against the council tax reduction capital limit for a " + "working-age claim in Scotland or Wales. A Welsh applicant with " + "Universal Credit uses the Secretary of State's Universal Credit " + "capital figure, and a Welsh applicant on Income Support, " + "income-based Jobseeker's Allowance or income-related Employment and " + "Support Allowance has all capital disregarded. Otherwise, as for " + "other council tax reduction claims in the model, household savings " + "stand in for the claimant's and partner's capital." + ) + definition_period = YEAR + unit = GBP + quantity_type = STOCK + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/66", + "https://www.legislation.gov.uk/wsi/2013/3029/regulation/30", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/10/paragraph/8", + ) + + def formula(benunit, period, parameters): + wales = is_wales_scheme(benunit.household("country", period)) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + passported = benunit("council_tax_reduction_working_age_passported", period) + savings = benunit.household("savings", period) + return select( + [wales & has_universal_credit, wales & passported], + [benunit("uc_assessable_capital", period), 0], + savings, + ) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_child_amounts.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_child_amounts.py new file mode 100644 index 0000000000..4dca906ef6 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_child_amounts.py @@ -0,0 +1,70 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, +) + + +class council_tax_reduction_working_age_child_amounts(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction amounts for children" + documentation = ( + "Annual amounts in a working-age applicable amount in Scotland or " + "Wales for the children and young persons in the family: the child " + "premium (Scotland) or child or young person amount (Wales) for each " + "one, the family premium, and the disabled child premium and " + "child enhanced disability premium. There is no limit on the number " + "of children. A child or young person with a disability benefit or " + "who is blind gets the disabled child premium; one with the highest " + "rate of the care component of disability living allowance or the " + "enhanced daily living component of personal independence payment " + "also gets the enhanced disability premium, the same test the model " + "uses for Universal Credit's higher disabled child addition. " + "Scotland removed the family premium for new claims from 1 May " + "2016; it survives only as a transitional premium for families with " + "an unbroken claim since then, which the model does not track." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/35", + "https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/2", + "https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/3", + "https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/4", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/1", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/7", + ) + + def formula(benunit, period, parameters): + p = parameters(period).gov.local_authorities + scot = p.scotland.council_tax_reduction.working_age + wales = p.wales.council_tax_reduction.working_age + scotland = is_scotland_scheme(benunit.household("country", period)) + person = benunit.members + child = person("is_child_or_young_person_for_legacy_benefits", period) + disabled = person("is_disabled_for_benefits", period) | person( + "is_blind", period + ) + severely_disabled = person("is_severely_disabled_for_benefits", period) + children = benunit.sum(child) + disabled_children = benunit.sum(child & (disabled | severely_disabled)) + severely_disabled_children = benunit.sum(child & severely_disabled) + per_child = where(scotland, scot.child_premium, wales.child_amount) + family_premium = (children > 0) * where( + scotland, scot.family_premium, wales.family_premium + ) + disabled_child_premium = where( + scotland, scot.disabled_child_premium, wales.disabled_child_premium + ) + child_enhanced_disability_premium = where( + scotland, + scot.child_enhanced_disability_premium, + wales.child_enhanced_disability_premium, + ) + weekly = ( + children * per_child + + family_premium + + disabled_children * disabled_child_premium + + severely_disabled_children * child_enhanced_disability_premium + ) + return weekly * WEEKS_IN_YEAR diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py new file mode 100644 index 0000000000..bbb559d910 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py @@ -0,0 +1,93 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, +) + + +class council_tax_reduction_working_age_childcare_deduction(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction childcare charges deduction" + documentation = ( + "Annual relevant childcare charges deducted from a working-age " + "applicant's income in Scotland or Wales. Without Universal Credit, " + "childcare spending is deducted from earnings, up to a weekly cap for " + "one child or for two or more, where a lone parent, or both members " + "of a couple, are in remunerative work. A Scottish applicant with " + "Universal Credit deducts the Universal Credit childcare costs element " + "grossed up to the full cost, up to higher caps. A Welsh applicant " + "with Universal Credit uses the Secretary of State's income figure, " + "which has no childcare deduction. The number of children in the " + "family stands in for the number with childcare charges, and the " + "incapacity, hospital and prison cases for couples are not modelled." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/38", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/42", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/77", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/78", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/21", + ) + + def formula(benunit, period, parameters): + p = parameters(period).gov.local_authorities + scot = p.scotland.council_tax_reduction.working_age + wales = p.wales.council_tax_reduction.working_age + scotland = is_scotland_scheme(benunit.household("country", period)) + person = benunit.members + claimant_or_partner = person("is_claimant_or_partner", period) + children = benunit.sum( + person("is_child_or_young_person_for_legacy_benefits", period) + ) + two_or_more = children >= 2 + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + # Without Universal Credit: charges paid, capped, where the lone parent + # or both members of the couple are in remunerative work. + hours_threshold = where( + scotland, + scot.earnings_disregard.remunerative_work_hours, + wales.earnings_disregard.remunerative_work_hours, + ) + in_work = person("weekly_hours", period) >= benunit.project(hours_threshold) + all_claimants_in_work = benunit.sum(claimant_or_partner & ~in_work) == 0 + charges = benunit.sum(person("childcare_expenses", period)) + weekly_cap = where( + scotland, + where( + two_or_more, + scot.childcare.maximum_two_or_more_children, + scot.childcare.maximum_one_child, + ), + where( + two_or_more, + wales.childcare.maximum_two_or_more_children, + wales.childcare.maximum_one_child, + ), + ) + earnings = benunit("council_tax_reduction_working_age_earned_income", period) + legacy = where( + (children > 0) & all_claimants_in_work, + min_(min_(charges, weekly_cap * WEEKS_IN_YEAR), earnings), + 0, + ) + # Scotland, with Universal Credit: the childcare costs element grossed + # up to the full charge. + uc_charges = benunit("uc_childcare_element", period) / ( + scot.childcare.universal_credit_costs_covered + ) + uc_weekly_cap = where( + two_or_more, + scot.childcare.universal_credit_maximum_two_or_more_children, + scot.childcare.universal_credit_maximum_one_child, + ) + scotland_uc = min_(uc_charges, uc_weekly_cap * WEEKS_IN_YEAR) + return where( + has_universal_credit, + where(scotland, scotland_uc, 0), + legacy, + ) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py new file mode 100644 index 0000000000..94687ce2db --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py @@ -0,0 +1,58 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_working_age_earned_income(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction net earned income" + documentation = ( + "Annual net earnings of the claimant and partner for a working-age " + "council tax reduction claim in Scotland or Wales, before earnings " + "disregards. With an award of Universal Credit, earnings follow the " + "Universal Credit measure: gross earnings (with any minimum income " + "floor) less income tax, National Insurance and all pension " + "contributions, with no work allowance. Without Universal Credit, " + "earnings are employment and self-employment income and statutory " + "sick and maternity pay, less income tax, National Insurance and half " + "of pension contributions. The earnings of children and young persons " + "do not count. As elsewhere in the model, all of a person's income " + "tax is deducted from earnings." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/49", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/50", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/15", + ) + + def formula(benunit, period, parameters): + person = benunit.members + members = person("is_claimant_or_partner", period) + tax = add_for_members(benunit, period, ["tax"], members) + pension_contributions = add_for_members( + benunit, period, ["pension_contributions"], members + ) + universal_credit_earnings = add_for_members( + benunit, period, ["uc_mif_capped_earned_income"], members + ) + legacy_earnings = add_for_members( + benunit, + period, + [ + "employment_income", + "self_employment_income", + "statutory_sick_pay", + "statutory_maternity_pay", + ], + members, + ) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + return where( + has_universal_credit, + max_(0, universal_credit_earnings - tax - pension_contributions), + max_(0, legacy_earnings - tax - 0.5 * pension_contributions), + ) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py new file mode 100644 index 0000000000..ed61f15e08 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py @@ -0,0 +1,88 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, +) + + +class council_tax_reduction_working_age_earnings_disregard(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction earnings disregard" + documentation = ( + "Annual earnings disregarded in a working-age council tax reduction " + "claim in Scotland or Wales. One weekly disregard applies: £25 for a " + "lone parent; otherwise £20 where the applicable amount includes a " + "disability, severe disability or carer premium; otherwise £10 for a " + "couple and £5 for a single applicant. Applicants without Universal " + "Credit who meet a work condition have £17.10 more disregarded if " + "their earnings cover the other disregards, their childcare charges " + "and the £17.10. Scotland applies the disregards to Universal Credit " + "earnings too, without the £17.10. A Welsh applicant with Universal " + "Credit uses the Secretary of State's income figure, which has no " + "disregards. The disregard is never more than the earnings. The £20 " + "disregards for special occupations and for permitted work are not " + "modelled." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/schedule/3", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/8", + ) + + def formula(benunit, period, parameters): + p = parameters(period).gov.local_authorities + scotland = is_scotland_scheme(benunit.household("country", period)) + scot = p.scotland.council_tax_reduction.working_age.earnings_disregard + wales = p.wales.council_tax_reduction.working_age.earnings_disregard + + def rate(name): + return where(scotland, getattr(scot, name), getattr(wales, name)) + + lone_parent = benunit("is_lone_parent", period) + couple = benunit("is_couple", period) + disability = (benunit("disability_premium", period) > 0) | ( + benunit("severe_disability_premium", period) > 0 + ) + carer = benunit("carer_premium", period) > 0 + base = select( + [lone_parent, disability | carer, couple], + [rate("lone_parent"), rate("disability_or_carer"), rate("couple")], + rate("single"), + ) + + person = benunit.members + claimant_or_partner = person("is_claimant_or_partner", period) + hours = person("weekly_hours", period) + age = person("age", period) + in_work = benunit.any( + claimant_or_partner + & (hours >= benunit.project(rate("remunerative_work_hours"))) + ) + full_time_25_or_over = benunit.any( + claimant_or_partner + & (hours >= benunit.project(rate("additional_full_time_hours"))) + & (age >= benunit.project(rate("additional_full_time_age"))) + ) + children = benunit.sum( + person("is_child_or_young_person_for_legacy_benefits", period) + ) + work_condition = ( + full_time_25_or_over + | (couple & (children > 0) & in_work) + | (lone_parent & in_work) + | ((benunit("disability_premium", period) > 0) & in_work) + ) + earnings = benunit("council_tax_reduction_working_age_earned_income", period) + childcare = benunit( + "council_tax_reduction_working_age_childcare_deduction", period + ) + additional = rate("additional") + covers_additional = earnings >= (base + additional) * WEEKS_IN_YEAR + childcare + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + additional_applies = work_condition & covers_additional & ~has_universal_credit + weekly = base + additional * additional_applies + weekly = where(has_universal_credit & ~scotland, 0, weekly) + return min_(earnings, weekly * WEEKS_IN_YEAR) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_has_universal_credit.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_has_universal_credit.py new file mode 100644 index 0000000000..6f62c76a8a --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_has_universal_credit.py @@ -0,0 +1,20 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_working_age_has_universal_credit(Variable): + value_type = bool + entity = BenUnit + label = "Has a Universal Credit award for working-age council tax reduction" + documentation = ( + "Whether the claimant or partner has an award of Universal Credit, " + "which moves a working-age council tax reduction claim onto the " + "Universal Credit income rules in Scotland and Wales." + ) + definition_period = YEAR + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/42", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", + ) + + def formula(benunit, period, parameters): + return benunit("is_uc_entitled", period) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_passported.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_passported.py new file mode 100644 index 0000000000..af6b286e3c --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_passported.py @@ -0,0 +1,30 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_working_age_passported(Variable): + value_type = bool + entity = BenUnit + label = "Passported to the maximum working-age council tax reduction" + documentation = ( + "Whether the claimant or partner is on Income Support, income-based " + "Jobseeker's Allowance or income-related Employment and Support " + "Allowance and not on Universal Credit. In Scotland such a claimant " + "gets the maximum reduction (SSI 2021/249 reg 13(11)); in Wales the " + "whole of their income and capital is disregarded (WSI 2013/3029 " + "Sch 9 para 8, Sch 10 para 8)." + ) + definition_period = YEAR + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/13", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/9/paragraph/8", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/10/paragraph/8", + ) + + def formula(benunit, period, parameters): + income_related_benefit = benunit( + "council_tax_reduction_relevant_income_based_benefit", period + ) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + return income_related_benefit & ~has_universal_credit diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_personal_allowance.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_personal_allowance.py new file mode 100644 index 0000000000..a68f4b2cba --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_personal_allowance.py @@ -0,0 +1,70 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, +) + + +class council_tax_reduction_working_age_personal_allowance(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction personal allowance" + documentation = ( + "Annual personal allowance in the applicable amount of a working-age " + "applicant in Scotland or Wales. A couple and a lone parent get one " + "rate at any age. A single applicant under 25 gets the lower rate " + "unless entitled to main phase Employment and Support Allowance or, " + "in Scotland, on Universal Credit with limited capability for work. " + "Receipt of Employment and Support Allowance stands in for the main " + "phase, and the model's limited-capability-for-work-related-activity " + "flag for limited capability for work." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/1", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/1", + ) + + def formula(benunit, period, parameters): + p = parameters(period).gov.local_authorities + country = benunit.household("country", period) + scotland = is_scotland_scheme(country) + scot = p.scotland.council_tax_reduction.working_age.personal_allowance + wales = p.wales.council_tax_reduction.working_age.personal_allowance + couple = benunit("is_couple", period) + lone_parent = benunit("is_lone_parent", period) + age = benunit("eldest_claimant_or_partner_age", period) + person = benunit.members + claimant_or_partner = person("is_claimant_or_partner", period) + on_esa = ( + add_for_members( + benunit, period, ["esa_contrib", "esa_income"], claimant_or_partner + ) + > 0 + ) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + limited_capability = benunit.any( + claimant_or_partner & person("uc_limited_capability_for_WRA", period) + ) + scotland_higher_single = ( + (age >= scot.age_threshold) + | on_esa + | (has_universal_credit & limited_capability) + ) + wales_higher_single = (age >= wales.age_threshold) | on_esa + scotland_single = where( + scotland_higher_single, scot.single_25_or_over, scot.single_under_25 + ) + wales_single = where( + wales_higher_single, wales.single_25_or_over, wales.single_under_25 + ) + scotland_amount = select( + [couple, lone_parent], [scot.couple, scot.lone_parent], scotland_single + ) + wales_amount = select( + [couple, lone_parent], [wales.couple, wales.lone_parent], wales_single + ) + pa = where(scotland, scotland_amount, wales_amount) + return pa * WEEKS_IN_YEAR diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_tariff_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_tariff_income.py new file mode 100644 index 0000000000..23b8bfc387 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_tariff_income.py @@ -0,0 +1,42 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, + is_wales_scheme, +) + + +class council_tax_reduction_working_age_tariff_income(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction tariff income" + documentation = ( + "Annual tariff income from capital in a working-age council tax " + "reduction claim in Scotland or Wales: £1 a week for each £250, or " + "part of £250, above £6,000. A Welsh applicant with Universal Credit " + "has none, because the Universal Credit income figure already " + "includes Universal Credit's own assumed yield from capital." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/63", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33", + ) + + def formula(benunit, period, parameters): + p = parameters(period).gov.local_authorities + country = benunit.household("country", period) + scotland = is_scotland_scheme(country) + wales = is_wales_scheme(country) + scot = p.scotland.council_tax_reduction.working_age.tariff_income + welsh = p.wales.council_tax_reduction.working_age.tariff_income + threshold = where(scotland, scot.threshold, welsh.threshold) + step = where(scotland, scot.step, welsh.step) + amount = where(scotland, scot.amount, welsh.amount) + capital = benunit("council_tax_reduction_working_age_capital", period) + steps = np.ceil(max_(0, capital - threshold) / step) + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + applies = ~(wales & has_universal_credit) + return applies * steps * amount * WEEKS_IN_YEAR diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py new file mode 100644 index 0000000000..a6d43be3fb --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py @@ -0,0 +1,57 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_working_age_unearned_income(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction unearned income" + documentation = ( + "Annual unearned income of the claimant and partner counted in a " + "working-age council tax reduction claim in Scotland or Wales, other " + "than Universal Credit and tariff income from capital. Retirement " + "pensions, contributory Jobseeker's Allowance and Employment and " + "Support Allowance, carer's allowance, carer support payment, " + "maternity allowance, industrial injuries benefit, incapacity benefit, " + "severe disablement allowance and working and child tax credits " + "count. Child Benefit, the income-related benefits, disability " + "benefits, Housing Benefit and child maintenance do not. Actual " + "savings interest, dividends and rent are treated as capital, which " + "yields tariff income instead." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/57", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/63", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/17", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/9", + ) + + def formula(benunit, period, parameters): + person = benunit.members + members = person("is_claimant_or_partner", period) + income = add_for_members( + benunit, + period, + [ + "state_pension", + "private_pension_income", + "jsa_contrib", + "esa_contrib", + "carers_allowance", + "carer_support_payment", + "maternity_allowance", + "iidb", + "incapacity_benefit", + "sda", + ], + members, + ) + tax_credits = add(benunit, period, ["working_tax_credit", "child_tax_credit"]) + bi = parameters(period).gov.contrib.ubi_center.basic_income + basic_income = ( + add_for_members(benunit, period, ["basic_income"], members) + if bi.interactions.include_in_means_tests + else 0 + ) + return income + tax_credits + basic_income diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_universal_credit_award.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_universal_credit_award.py new file mode 100644 index 0000000000..3262781744 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_universal_credit_award.py @@ -0,0 +1,24 @@ +from policyengine_uk.model_api import * + + +class council_tax_reduction_working_age_universal_credit_award(Variable): + value_type = float + entity = BenUnit + label = "Universal Credit award for working-age council tax reduction" + documentation = ( + "The Universal Credit award after any benefit cap reduction and before " + "deductions from payment, such as advance or third-party deductions. " + "The benefit cap reduces the award (UC Regs 2013 reg 81), while " + "deductions from payment do not." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/57", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", + ) + + def formula(benunit, period, parameters): + award_before_cap = benunit("universal_credit_pre_benefit_cap", period) + cap_reduction = benunit("benefit_cap_reduction", period) + return max_(0, award_before_cap - cap_reduction) From ee5bd58353aabcf1ed6dff9496cf589a32c7d003 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Wed, 30 Sep 2026 22:13:20 -0400 Subject: [PATCH 2/6] Use devolved CTR premiums and fix earnings, tax and carer rules after review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Adult premiums: Scotland's and Wales's own disability, severe disability, enhanced disability and carer premium amounts (2013-14 to 2026-27), with a carer premium for each qualifying claimant or partner (SSI 2021/249 Sch 1 paras 5, 17; WSI 2013/3029 Sch 7 paras 14, 17). - Carer earnings disregard: £20 of the carers' own earnings plus up to £10 of a non-carer partner's, within £20 (Sch 8 / Sch 3 paras 6-7). - £17.10: a couple's disabled member must be the one in remunerative work; in Scotland from April 2022 only employed earnings qualify (Sch 3 para 15). - Wales: tax on unearned income is disregarded (Sch 9 para 4). - Scotland: only the Carer Support Payment component counts, not the Carer Supplement (reg 4(1), reg 57(1)). - Statutory sick, maternity and paternity pay count as earnings on the UC route too; childcare comes off earnings after the disregards. Co-Authored-By: Claude Opus 5.5 --- .../working_age/adult_premiums.yaml | 544 +++++++++++++++++ .../working_age/earnings_disregard.yaml | 14 + .../working_age/adult_premiums.yaml | 551 ++++++++++++++++++ ...il_tax_reduction_devolved_working_age.yaml | 270 +++++++++ .../working_age/_earnings.py | 34 ++ ...ax_reduction_working_age_adult_premiums.py | 74 +++ ...reduction_working_age_applicable_amount.py | 9 +- ...reduction_working_age_applicable_income.py | 30 +- ...ouncil_tax_reduction_working_age_carers.py | 30 + ...duction_working_age_childcare_deduction.py | 6 +- ...tax_reduction_working_age_earned_income.py | 50 +- ...eduction_working_age_earnings_disregard.py | 98 +++- ...tion_working_age_employed_earned_income.py | 32 + ...uction_working_age_person_earned_income.py | 33 ++ ...ax_reduction_working_age_unabsorbed_tax.py | 29 + ...x_reduction_working_age_unearned_income.py | 12 +- 16 files changed, 1732 insertions(+), 84 deletions(-) create mode 100644 policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/adult_premiums.yaml create mode 100644 policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/adult_premiums.yaml create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_adult_premiums.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/adult_premiums.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/adult_premiums.yaml new file mode 100644 index 0000000000..0e54ef0fcd --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/adult_premiums.yaml @@ -0,0 +1,544 @@ +description: Weekly adult premiums in the applicable amount of a working-age applicant under the Scotland + council tax reduction rules. +disability_premium: + description: Scotland working-age CTR disability premium. + single: + description: Weekly disability premium for a single applicant or lone parent. + values: + 2013-04-01: + value: 31.0 + reference: + - title: SSI 2013/48 reg 14(f)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 31.85 + reference: + - title: SSI 2014/35 reg 4(d)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 32.25 + reference: + - title: SSI 2015/46 reg 9(c)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 32.55 + reference: + - title: SSI 2017/41 reg 10(a)(i) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 33.55 + reference: + - title: SSI 2018/69 reg 9(a)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 34.35 + reference: + - title: SSI 2019/29 reg 5(a)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 34.95 + reference: + - title: SSI 2020/25 reg 8(c)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 35.1 + reference: + - title: SSI 2021/51 reg 7(c)(i)(aa) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 36.2 + reference: + - title: SSI 2022/52 reg 25(c)(iii)(aa) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 39.85 + reference: + - title: SSI 2023/38 reg 20(i)(iii)(aa) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 42.5 + reference: + - title: SSI 2024/35 reg 17(i)(iii)(aa) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 43.2 + reference: + - title: SSI 2025/24 reg 16(i)(iii)(aa) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 44.85 + reference: + - title: SSI 2026/56 reg 14(i)(iii)(aa) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR disability premium, single + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 + couple: + description: Weekly disability premium for a couple. + values: + 2013-04-01: + value: 44.2 + reference: + - title: SSI 2013/48 reg 14(f)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 45.4 + reference: + - title: SSI 2014/35 reg 4(d)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 45.95 + reference: + - title: SSI 2015/46 reg 9(c)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 46.4 + reference: + - title: SSI 2017/41 reg 10(a)(ii) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 47.8 + reference: + - title: SSI 2018/69 reg 9(a)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 48.95 + reference: + - title: SSI 2019/29 reg 5(a)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 49.8 + reference: + - title: SSI 2020/25 reg 8(c)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 50.05 + reference: + - title: SSI 2021/51 reg 7(c)(i)(bb) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 51.6 + reference: + - title: SSI 2022/52 reg 25(c)(iii)(bb) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 56.8 + reference: + - title: SSI 2023/38 reg 20(i)(iii)(bb) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 60.6 + reference: + - title: SSI 2024/35 reg 17(i)(iii)(bb) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 61.65 + reference: + - title: SSI 2025/24 reg 16(i)(iii)(bb) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 64.0 + reference: + - title: SSI 2026/56 reg 14(i)(iii)(bb) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR disability premium, couple + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 +severe_disability_premium: + description: Scotland working-age CTR severe disability premium. + single: + description: Weekly severe disability premium where one person qualifies, or where someone is paid + a carer benefit for caring for a member of the couple. + values: + 2013-04-01: + value: 59.5 + reference: + - title: SSI 2013/48 reg 14(f)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 61.1 + reference: + - title: SSI 2014/35 reg 4(d)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 61.85 + reference: + - title: SSI 2015/46 reg 9(c)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 62.45 + reference: + - title: SSI 2017/41 reg 10(a)(iii) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 64.3 + reference: + - title: SSI 2018/69 reg 9(a)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 65.85 + reference: + - title: SSI 2019/29 reg 5(a)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 66.95 + reference: + - title: SSI 2020/25 reg 8(c)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 67.3 + reference: + - title: SSI 2021/51 reg 7(c)(ii)(aa) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 69.4 + reference: + - title: SSI 2022/52 reg 25(c)(iv)(aa) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 76.4 + reference: + - title: SSI 2023/38 reg 20(i)(iv)(aa) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 81.5 + reference: + - title: SSI 2024/35 reg 17(i)(iv)(aa) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 82.9 + reference: + - title: SSI 2025/24 reg 16(i)(iv)(aa) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 86.05 + reference: + - title: SSI 2026/56 reg 14(i)(iv)(aa) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR severe disability premium, single + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 + couple: + description: Weekly severe disability premium for a couple who both qualify and for whom no one is + paid a carer benefit. + values: + 2013-04-01: + value: 119.0 + reference: + - title: SSI 2013/48 reg 14(f)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 122.2 + reference: + - title: SSI 2014/35 reg 4(d)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 123.7 + reference: + - title: SSI 2015/46 reg 9(c)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 124.9 + reference: + - title: SSI 2017/41 reg 10(a)(iv) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 128.6 + reference: + - title: SSI 2018/69 reg 9(a)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 131.7 + reference: + - title: SSI 2019/29 reg 5(a)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 133.9 + reference: + - title: SSI 2020/25 reg 8(c)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 134.6 + reference: + - title: SSI 2021/51 reg 7(c)(ii)(bb) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 138.8 + reference: + - title: SSI 2022/52 reg 25(c)(iv)(bb) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 152.8 + reference: + - title: SSI 2023/38 reg 20(i)(iv)(bb) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 163.0 + reference: + - title: SSI 2024/35 reg 17(i)(iv)(bb) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 165.8 + reference: + - title: SSI 2025/24 reg 16(i)(iv)(bb) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 172.1 + reference: + - title: SSI 2026/56 reg 14(i)(iv)(bb) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR severe disability premium, couple + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 +enhanced_disability_premium: + description: Scotland working-age CTR enhanced disability premium. + single: + description: Weekly enhanced disability premium for a single applicant or lone parent. + values: + 2013-04-01: + value: 15.15 + reference: + - title: SSI 2013/48 reg 14(f)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 15.55 + reference: + - title: SSI 2014/35 reg 4(d)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 15.75 + reference: + - title: SSI 2015/46 reg 9(c)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 15.9 + reference: + - title: SSI 2017/41 reg 10(a)(viii) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 16.4 + reference: + - title: SSI 2018/69 reg 9(a)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 16.8 + reference: + - title: SSI 2019/29 reg 5(a)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 17.1 + reference: + - title: SSI 2020/25 reg 8(c)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 17.2 + reference: + - title: SSI 2021/51 reg 7(c)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 17.75 + reference: + - title: SSI 2022/52 reg 25(c)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 19.55 + reference: + - title: SSI 2023/38 reg 20(i)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 20.85 + reference: + - title: SSI 2024/35 reg 17(i)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 21.2 + reference: + - title: SSI 2025/24 reg 16(i)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 22.0 + reference: + - title: SSI 2026/56 reg 14(i)(v)(bb) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR enhanced disability premium, single + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 + couple: + description: Weekly enhanced disability premium for a couple. + values: + 2013-04-01: + value: 21.75 + reference: + - title: SSI 2013/48 reg 14(f)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 22.35 + reference: + - title: SSI 2014/35 reg 4(d)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 22.6 + reference: + - title: SSI 2015/46 reg 9(c)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 22.85 + reference: + - title: SSI 2017/41 reg 10(a)(ix) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 23.55 + reference: + - title: SSI 2018/69 reg 9(a)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 24.1 + reference: + - title: SSI 2019/29 reg 5(a)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 24.5 + reference: + - title: SSI 2020/25 reg 8(c)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 24.6 + reference: + - title: SSI 2021/51 reg 7(c)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 25.35 + reference: + - title: SSI 2022/52 reg 25(c)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 27.9 + reference: + - title: SSI 2023/38 reg 20(i)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 29.75 + reference: + - title: SSI 2024/35 reg 17(i)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 30.25 + reference: + - title: SSI 2025/24 reg 16(i)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 31.4 + reference: + - title: SSI 2026/56 reg 14(i)(v)(cc) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR enhanced disability premium, couple + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 +carer_premium: + description: Weekly carer premium for each claimant or partner who qualifies. + values: + 2013-04-01: + value: 33.3 + reference: + - title: SSI 2013/48 reg 14(f)(iv) + href: https://www.legislation.gov.uk/ssi/2013/48/regulation/14 + 2014-04-01: + value: 34.2 + reference: + - title: SSI 2014/35 reg 4(d)(iv) + href: https://www.legislation.gov.uk/ssi/2014/35/regulation/4 + 2015-04-01: + value: 34.6 + reference: + - title: SSI 2015/46 reg 9(c)(iv) + href: https://www.legislation.gov.uk/ssi/2015/46/regulation/9 + 2017-04-01: + value: 34.95 + reference: + - title: SSI 2017/41 reg 10(a)(vi) + href: https://www.legislation.gov.uk/ssi/2017/41/regulation/10 + 2018-04-01: + value: 36.0 + reference: + - title: SSI 2018/69 reg 9(a)(iv) + href: https://www.legislation.gov.uk/ssi/2018/69/regulation/9 + 2019-04-01: + value: 36.85 + reference: + - title: SSI 2019/29 reg 5(a)(iv) + href: https://www.legislation.gov.uk/ssi/2019/29/regulation/5 + 2020-04-01: + value: 37.5 + reference: + - title: SSI 2020/25 reg 8(c)(iv) + href: https://www.legislation.gov.uk/ssi/2020/25/regulation/8 + 2021-04-01: + value: 37.7 + reference: + - title: SSI 2021/51 reg 7(c)(iv) + href: https://www.legislation.gov.uk/ssi/2021/51/regulation/7 + 2022-04-01: + value: 38.85 + reference: + - title: SSI 2022/52 reg 25(c)(ii) + href: https://www.legislation.gov.uk/ssi/2022/52/regulation/25/made + 2023-04-01: + value: 42.75 + reference: + - title: SSI 2023/38 reg 20(i)(ii) + href: https://www.legislation.gov.uk/ssi/2023/38/regulation/20 + 2024-04-01: + value: 45.6 + reference: + - title: SSI 2024/35 reg 17(i)(ii) + href: https://www.legislation.gov.uk/ssi/2024/35/regulation/17 + 2025-04-01: + value: 46.4 + reference: + - title: SSI 2025/24 reg 16(i)(ii) + href: https://www.legislation.gov.uk/ssi/2025/24/regulation/16 + 2026-04-01: + value: 48.15 + reference: + - title: SSI 2026/56 reg 14(i)(ii) + href: https://www.legislation.gov.uk/ssi/2026/56/regulation/14 + metadata: + label: Scotland working-age CTR carer premium + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 1 paras. 5 and 11-17 + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/1 +metadata: + label: Scotland working-age CTR adult premiums diff --git a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml index f18633a526..ce5766be2c 100644 --- a/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml +++ b/policyengine_uk/parameters/gov/local_authorities/scotland/council_tax_reduction/working_age/earnings_disregard.yaml @@ -76,6 +76,20 @@ additional_full_time_age: reference: - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 15(2) href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 +additional_employed_earnings_only: + description: Whether the additional earnings disregard depends on employed earnings only (1) rather than all net earnings (0). From 1 April 2022 it applies where earnings are calculated under regulation 50 (employed earnings) and the employed earnings cover the other disregards, childcare charges and the additional amount. + values: + 2013-04-01: 0 + 2022-04-01: 1 + metadata: + label: Scotland working-age CTR additional disregard on employed earnings only + unit: bool + period: year + reference: + - title: The Council Tax Reduction (Scotland) Regulations 2021 Sch. 3 para. 15(1) + href: https://www.legislation.gov.uk/ssi/2021/249/schedule/3 + - title: The Council Tax Reduction (Scotland) Regulations 2012 Sch. 3 para. 18(1) (net earnings, before 1 April 2022) + href: https://www.legislation.gov.uk/ssi/2012/303/schedule/3 remunerative_work_hours: description: Weekly hours from which a person is in remunerative work. values: diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/adult_premiums.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/adult_premiums.yaml new file mode 100644 index 0000000000..cee373b9c6 --- /dev/null +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/adult_premiums.yaml @@ -0,0 +1,551 @@ +description: Weekly adult premiums in the applicable amount of a working-age applicant under the Wales + council tax reduction rules. +disability_premium: + description: Wales working-age CTR disability premium. + single: + description: Weekly disability premium for a single applicant or lone parent. + values: + 2013-04-01: + value: 31.0 + reference: + - title: W.S.I. 2013/112 reg 10(c)(i) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 31.85 + reference: + - title: W.S.I. 2014/66 reg 10(d)(i) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 32.25 + reference: + - title: W.S.I. 2015/44 reg 11(d)(i) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 32.55 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(aa) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 33.55 + reference: + - title: W.S.I. 2018/14 reg 10(c)(i) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 34.35 + reference: + - title: W.S.I. 2019/11 reg 7(b)(i) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 34.95 + reference: + - title: W.S.I. 2020/16 reg 10(b)(i) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 35.1 + reference: + - title: W.S.I. 2021/34 reg 8(b)(i) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 36.2 + reference: + - title: W.S.I. 2022/51 reg 8(d)(i) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 39.85 + reference: + - title: W.S.I. 2023/47 reg 9(d)(i) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 42.5 + reference: + - title: W.S.I. 2024/56 reg 8(d)(i) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 43.2 + reference: + - title: W.S.I. 2025/59 reg 9(d)(i) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 44.85 + reference: + - title: W.S.I. 2026/13 reg 11(d)(i) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR disability premium, single + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 + Sch. 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 + couple: + description: Weekly disability premium for a couple. + values: + 2013-04-01: + value: 44.2 + reference: + - title: W.S.I. 2013/112 reg 10(c)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 45.4 + reference: + - title: W.S.I. 2014/66 reg 10(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 45.95 + reference: + - title: W.S.I. 2015/44 reg 11(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 46.4 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(aa) (figure 2) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 47.8 + reference: + - title: W.S.I. 2018/14 reg 10(c)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 48.95 + reference: + - title: W.S.I. 2019/11 reg 7(b)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 49.8 + reference: + - title: W.S.I. 2020/16 reg 10(b)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 50.05 + reference: + - title: W.S.I. 2021/34 reg 8(b)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 51.6 + reference: + - title: W.S.I. 2022/51 reg 8(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 56.8 + reference: + - title: W.S.I. 2023/47 reg 9(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 60.6 + reference: + - title: W.S.I. 2024/56 reg 8(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 61.65 + reference: + - title: W.S.I. 2025/59 reg 9(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 64.0 + reference: + - title: W.S.I. 2026/13 reg 11(d)(i) (figure 2) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR disability premium, couple + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 + Sch. 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 +severe_disability_premium: + description: Wales working-age CTR severe disability premium. + single: + description: Weekly severe disability premium where one person qualifies, or where someone is paid + a carer benefit for caring for a member of the couple. + values: + 2013-04-01: + value: 59.5 + reference: + - title: W.S.I. 2013/112 reg 10(c)(ii) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 61.1 + reference: + - title: W.S.I. 2014/66 reg 10(d)(ii) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 61.85 + reference: + - title: W.S.I. 2015/44 reg 11(d)(ii) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 62.45 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(bb) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 64.3 + reference: + - title: W.S.I. 2018/14 reg 10(c)(ii) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 65.85 + reference: + - title: W.S.I. 2019/11 reg 7(b)(ii) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 66.95 + reference: + - title: W.S.I. 2020/16 reg 10(b)(ii) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 67.3 + reference: + - title: W.S.I. 2021/34 reg 8(b)(ii) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 69.4 + reference: + - title: W.S.I. 2022/51 reg 8(d)(ii) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 76.4 + reference: + - title: W.S.I. 2023/47 reg 9(d)(ii) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 81.5 + reference: + - title: W.S.I. 2024/56 reg 8(d)(ii) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 82.9 + reference: + - title: W.S.I. 2025/59 reg 9(d)(ii) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 86.05 + reference: + - title: W.S.I. 2026/13 reg 11(d)(ii) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR severe disability premium, single + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 + Sch. 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 + couple: + description: Weekly severe disability premium for a couple who both qualify and for whom no one is + paid a carer benefit. + values: + 2013-04-01: + value: 119.0 + reference: + - title: W.S.I. 2013/112 reg 10(c)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 122.2 + reference: + - title: W.S.I. 2014/66 reg 10(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 123.7 + reference: + - title: W.S.I. 2015/44 reg 11(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 124.9 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(bb) (figure 2) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 128.6 + reference: + - title: W.S.I. 2018/14 reg 10(c)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 131.7 + reference: + - title: W.S.I. 2019/11 reg 7(b)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 133.9 + reference: + - title: W.S.I. 2020/16 reg 10(b)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 134.6 + reference: + - title: W.S.I. 2021/34 reg 8(b)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 138.8 + reference: + - title: W.S.I. 2022/51 reg 8(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 152.8 + reference: + - title: W.S.I. 2023/47 reg 9(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 163.0 + reference: + - title: W.S.I. 2024/56 reg 8(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 165.8 + reference: + - title: W.S.I. 2025/59 reg 9(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 172.1 + reference: + - title: W.S.I. 2026/13 reg 11(d)(ii) (figure 2) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR severe disability premium, couple + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 + Sch. 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 +enhanced_disability_premium: + description: Wales working-age CTR enhanced disability premium. + single: + description: Weekly enhanced disability premium for a single applicant or lone parent. + values: + 2013-04-01: + value: 15.15 + reference: + - title: W.S.I. 2013/112 reg 10(c)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 15.55 + reference: + - title: W.S.I. 2014/66 reg 10(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 15.75 + reference: + - title: W.S.I. 2015/44 reg 11(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 15.9 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(ee) (figure 2) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 16.4 + reference: + - title: W.S.I. 2018/14 reg 10(c)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 16.8 + reference: + - title: W.S.I. 2019/11 reg 7(b)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 17.1 + reference: + - title: W.S.I. 2020/16 reg 10(b)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 17.2 + reference: + - title: W.S.I. 2021/34 reg 8(b)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 17.75 + reference: + - title: W.S.I. 2022/51 reg 8(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 19.55 + reference: + - title: W.S.I. 2023/47 reg 9(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 20.85 + reference: + - title: W.S.I. 2024/56 reg 8(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 21.2 + reference: + - title: W.S.I. 2025/59 reg 9(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 22.0 + reference: + - title: W.S.I. 2026/13 reg 11(d)(v) (figure 2) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR enhanced disability premium, single + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 + Sch. 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 + couple: + description: Weekly enhanced disability premium for a couple. + values: + 2013-04-01: + value: 21.75 + reference: + - title: W.S.I. 2013/112 reg 10(c)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 22.35 + reference: + - title: W.S.I. 2014/66 reg 10(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 22.6 + reference: + - title: W.S.I. 2015/44 reg 11(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 22.85 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(ee) (figure 3) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 23.55 + reference: + - title: W.S.I. 2018/14 reg 10(c)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 24.1 + reference: + - title: W.S.I. 2019/11 reg 7(b)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 24.5 + reference: + - title: W.S.I. 2020/16 reg 10(b)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 24.6 + reference: + - title: W.S.I. 2021/34 reg 8(b)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 25.35 + reference: + - title: W.S.I. 2022/51 reg 8(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 27.9 + reference: + - title: W.S.I. 2023/47 reg 9(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 29.75 + reference: + - title: W.S.I. 2024/56 reg 8(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 30.25 + reference: + - title: W.S.I. 2025/59 reg 9(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 31.4 + reference: + - title: W.S.I. 2026/13 reg 11(d)(v) (figure 3) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR enhanced disability premium, couple + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 + Sch. 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 +carer_premium: + description: Weekly carer premium for each claimant or partner who qualifies. + values: + 2013-04-01: + value: 33.3 + reference: + - title: W.S.I. 2013/112 reg 10(c)(iv) + href: https://www.legislation.gov.uk/wsi/2013/112/regulation/10 + 2014-04-01: + value: 34.2 + reference: + - title: W.S.I. 2014/66 reg 10(d)(iv) + href: https://www.legislation.gov.uk/wsi/2014/66/regulation/10/made + 2015-04-01: + value: 34.6 + reference: + - title: W.S.I. 2015/44 reg 11(d)(iv) + href: https://www.legislation.gov.uk/wsi/2015/44/regulation/11 + 2017-04-01: + value: 34.95 + reference: + - title: W.S.I. 2017/46 reg 6(c)(ii)(dd) + href: https://www.legislation.gov.uk/wsi/2017/46/regulation/6 + 2018-04-01: + value: 36.0 + reference: + - title: W.S.I. 2018/14 reg 10(c)(iv) + href: https://www.legislation.gov.uk/wsi/2018/14/regulation/10 + 2019-04-01: + value: 36.85 + reference: + - title: W.S.I. 2019/11 reg 7(b)(iv) + href: https://www.legislation.gov.uk/wsi/2019/11/regulation/7 + 2020-04-01: + value: 37.5 + reference: + - title: W.S.I. 2020/16 reg 10(b)(iv) + href: https://www.legislation.gov.uk/wsi/2020/16/regulation/10 + 2021-04-01: + value: 37.7 + reference: + - title: W.S.I. 2021/34 reg 8(b)(iv) + href: https://www.legislation.gov.uk/wsi/2021/34/regulation/8 + 2022-04-01: + value: 38.85 + reference: + - title: W.S.I. 2022/51 reg 8(d)(iv) + href: https://www.legislation.gov.uk/wsi/2022/51/regulation/8 + 2023-04-01: + value: 42.75 + reference: + - title: W.S.I. 2023/47 reg 9(d)(iv) + href: https://www.legislation.gov.uk/wsi/2023/47/regulation/9 + 2024-04-01: + value: 45.6 + reference: + - title: W.S.I. 2024/56 reg 8(d)(iv) + href: https://www.legislation.gov.uk/wsi/2024/56/regulation/8 + 2025-04-01: + value: 46.4 + reference: + - title: W.S.I. 2025/59 reg 9(d)(iv) + href: https://www.legislation.gov.uk/wsi/2025/59/regulation/9 + 2026-04-01: + value: 48.15 + reference: + - title: W.S.I. 2026/13 reg 11(d)(iv) + href: https://www.legislation.gov.uk/wsi/2026/13/regulation/11 + metadata: + label: Wales working-age CTR carer premium + unit: currency-GBP + period: week + uprating: gov.benefit_uprating_cpi + reference: + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 7 paras. 9-17 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/7 +metadata: + label: Wales working-age CTR adult premiums diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml index 6c5815ae8e..e3b7fab53c 100644 --- a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml @@ -417,3 +417,273 @@ council_tax: 1_200 output: council_tax_reduction_working_age_applicable_amount: 10_358.40 + +- name: Wales, carer disregard is £20 of the carer's earnings plus up to £10 of the partner's + # Sch 8 paras 6-7: the carer (Carer's Allowance, no earnings) contributes + # nothing, so only £10 of the working partner's earnings is disregarded + # (520 a year). Partner: 14,000 less tax 34 (after the 252 marriage + # allowance) and NI 114.40 = 13,851.60. Applicable amount (159.85 couple + + # 48.15 carer premium) x 52 = 10,816. Income 13,851.60 - 520 + 4,495.40 + # Carer's Allowance = 17,827; excess 7,011; award 1,800 - 1,402.20. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + carer: + age: 40 + care_hours: 35 + would_claim_carers_allowance: true + council_tax_benefit_reported: 100 + partner: + age: 40 + employment_income: 14_000 + weekly_hours: 20 + benunits: + benunit: + members: [carer, partner] + would_claim_uc: false + households: + household: + members: [carer, partner] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_earnings_disregard: 520 + council_tax_reduction_working_age_applicable_income: 17_827 + simulated_council_tax_reduction_benunit: 397.80 + +- name: Wales, the £17.10 needs the disabled member of a couple to be the one in work + # Sch 8 para 18(2)(b)(v): the disabled claimant does not work, so only the + # £20 disability disregard applies (para 4), 1,040 a year. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + is_disabled_for_benefits: true + council_tax_benefit_reported: 100 + partner: + age: 40 + employment_income: 14_000 + weekly_hours: 20 + benunits: + benunit: + members: [claimant, partner] + would_claim_uc: false + households: + household: + members: [claimant, partner] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_earnings_disregard: 1_040 + simulated_council_tax_reduction_benunit: 1_565.72 + +- name: Wales, tax on unearned income is disregarded + # Sch 9 para 4: income tax of 286 on a 14,000 private pension comes off + # unearned income. Income 13,714; applicable amount 101.85 x 52 = 5,296.20; + # award 2,000 - 0.2 x 8,417.80 = 316.44. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 60 + private_pension_income: 14_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 2_000 + savings: 0 + output: + council_tax_reduction_working_age_unabsorbed_tax: 286 + council_tax_reduction_working_age_applicable_income: 13_714 + simulated_council_tax_reduction_benunit: 316.44 + +- name: Scotland, only the Carer Support Payment component counts, not the Carer Supplement + # SSI 2021/249 reg 4(1) (as amended by SSI 2025/340) and reg 57(1)(b)(iva): + # 86.45 x 52 = 4,495.40. Earnings 5,000 less the £20 carer disregard; + # applicable amount (95.55 + 48.15) x 52 = 7,472.40; income 8,455.40; + # award 1,800 - 196.60. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + carer: + age: 35 + care_hours: 40 + would_claim_carers_allowance: true + employment_income: 5_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [carer] + would_claim_uc: false + households: + household: + members: [carer] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_unearned_income: 4_495.40 + simulated_council_tax_reduction_benunit: 1_603.40 + +- name: Scotland, a carer premium for each partner who is a carer + # Sch 1 para 5(3): 2 x 48.15 x 52 = 5,007.60. Applicable amount 150.15 x 52 + # + 5,007.60 = 12,815.40. Income 6,000 - 1,040 + 2 x 4,495.40 = 13,950.80; + # award 1,800 - 0.2 x 1,135.40 = 1,572.92. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + carer_one: + age: 40 + care_hours: 40 + would_claim_carers_allowance: true + employment_income: 6_000 + weekly_hours: 10 + council_tax_benefit_reported: 100 + carer_two: + age: 40 + care_hours: 40 + would_claim_carers_allowance: true + benunits: + benunit: + members: [carer_one, carer_two] + would_claim_uc: false + households: + household: + members: [carer_one, carer_two] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_adult_premiums: 5_007.60 + council_tax_reduction_working_age_applicable_amount: 12_815.40 + simulated_council_tax_reduction_benunit: 1_572.92 + +- name: Scotland, statutory maternity pay is earnings on the Universal Credit route + # Reg 49(4): SMP counts as employed earnings, which takes this family's + # income well above its applicable amount. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 30 + employment_income: 15_000 + weekly_hours: 30 + council_tax_benefit_reported: 100 + partner: + age: 30 + statutory_maternity_pay: 9_000 + baby: + age: 0 + benunits: + benunit: + members: [claimant, partner, baby] + would_claim_uc: true + households: + household: + members: [claimant, partner, baby] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + simulated_council_tax_reduction_benunit: 0 + +- name: Scotland, the £17.10 needs employed earnings from April 2022 + # Sch 3 para 15(1): a self-employed lone parent gets only the £25 disregard + # (1,300 a year). Applicable amount (95.55 + 109.85) x 52 = 10,680.80. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + self_employment_income: 15_000 + weekly_hours: 30 + council_tax_benefit_reported: 100 + child: + age: 5 + benunits: + benunit: + members: [parent, child] + would_claim_uc: false + households: + household: + members: [parent, child] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_earnings_disregard: 1_300 + simulated_council_tax_reduction_benunit: 1_279.66 + +- name: Scotland, an employed lone parent working 30 hours gets the £17.10 + # (25 + 17.10) x 52 = 2,189.20. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + employment_income: 15_000 + weekly_hours: 30 + council_tax_benefit_reported: 100 + child: + age: 5 + benunits: + benunit: + members: [parent, child] + would_claim_uc: false + households: + household: + members: [parent, child] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_earnings_disregard: 2_189.20 + +- name: Scotland 2025-26, the disability premium is the Scottish amount + # SSI 2025/24: £43.20 a week (2,246.40 a year), not the projected DWP rate. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + is_disabled_for_benefits: true + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_adult_premiums: 2_246.40 diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py new file mode 100644 index 0000000000..c955749df7 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py @@ -0,0 +1,34 @@ +from policyengine_uk.model_api import * + +STATUTORY_PAY = [ + "statutory_sick_pay", + "statutory_maternity_pay", + "statutory_paternity_pay", +] + + +def working_age_earnings_components(person, period): + """Gross earnings, employed earnings, pension deduction and tax per person. + + With an award of Universal Credit, earnings follow the Universal Credit + measure (with any minimum income floor) and all pension contributions are + deducted; otherwise employment and self-employment income count and half + of pension contributions are deducted. Statutory sick, maternity and + paternity pay are employed earnings on both routes (SSI 2021/249 regs + 49(4), 50(2); WSI 2013/3029 Sch 6 para 14(1)). + """ + has_universal_credit = person.benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + statutory_pay = add(person, period, STATUTORY_PAY) + employment = person("employment_income", period) + universal_credit_gross = ( + person("uc_mif_capped_earned_income", period) + statutory_pay + ) + legacy_gross = employment + person("self_employment_income", period) + statutory_pay + gross = where(has_universal_credit, universal_credit_gross, legacy_gross) + employed_gross = min_(employment + statutory_pay, gross) + pension_share = where(has_universal_credit, 1, 0.5) + pension_deduction = person("pension_contributions", period) * pension_share + tax = person("tax", period) + return gross, employed_gross, pension_deduction, tax diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_adult_premiums.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_adult_premiums.py new file mode 100644 index 0000000000..7df38e8f44 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_adult_premiums.py @@ -0,0 +1,74 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, +) + + +class council_tax_reduction_working_age_adult_premiums(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction adult premiums" + documentation = ( + "Annual disability, severe disability, enhanced disability and carer " + "premiums in a working-age applicable amount in Scotland or Wales, at " + "each country's own amounts. Who qualifies follows the model's " + "legacy-benefit premium variables (disability_premium, " + "enhanced_disability_premium, severe_disability_premium), including " + "whether the severe disability premium is at the single or couple " + "rate. The carer premium is paid for each qualifying claimant or " + "partner. The employment and support allowance components, and the " + "disability premium's exclusion for limited capability for work, are " + "not modelled." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/17", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/17", + ) + + def formula(benunit, period, parameters): + p = parameters(period).gov.local_authorities + scotland = is_scotland_scheme(benunit.household("country", period)) + scot = p.scotland.council_tax_reduction.working_age.adult_premiums + wales = p.wales.council_tax_reduction.working_age.adult_premiums + dwp = parameters(period).gov.dwp.disability_premia + + def amount(node, field=None): + s = getattr(scot, node) + w = getattr(wales, node) + if field is not None: + s, w = getattr(s, field), getattr(w, field) + return where(scotland, s, w) + + couple = benunit("is_couple", period) + disability = benunit("disability_premium", period) > 0 + enhanced = benunit("enhanced_disability_premium", period) > 0 + severe_weekly = benunit("severe_disability_premium", period) / WEEKS_IN_YEAR + severe = severe_weekly > 0 + # The legacy variable pays either the single or the double rate; + # follow whichever it chose. + severe_double = severe_weekly > (dwp.severe_single + dwp.severe_couple) / 2 + weekly = ( + disability + * where( + couple, + amount("disability_premium", "couple"), + amount("disability_premium", "single"), + ) + + enhanced + * where( + couple, + amount("enhanced_disability_premium", "couple"), + amount("enhanced_disability_premium", "single"), + ) + + severe + * where( + severe_double, + amount("severe_disability_premium", "couple"), + amount("severe_disability_premium", "single"), + ) + + benunit("council_tax_reduction_working_age_carers", period) + * amount("carer_premium") + ) + return weekly * WEEKS_IN_YEAR diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py index 4edc309476..fa80ffc541 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_amount.py @@ -16,10 +16,9 @@ class council_tax_reduction_working_age_applicable_amount(Variable): "give the same annual total). Otherwise, and for every Scottish " "applicant including those on Universal Credit, it is the personal " "allowance, the amounts for children, and the adult disability, " - "severe disability, enhanced disability and carer premiums. The adult " - "premiums use the model's legacy-benefit premium variables, whose " - "amounts equal the Scottish and Welsh amounts. The employment and " - "support allowance components are not modelled." + "severe disability, enhanced disability and carer premiums at each " + "country's own amounts. The employment and support allowance " + "components are not modelled." ) definition_period = YEAR unit = GBP @@ -41,7 +40,7 @@ def formula(benunit, period, parameters): [ "council_tax_reduction_working_age_personal_allowance", "council_tax_reduction_working_age_child_amounts", - "benefits_premiums", + "council_tax_reduction_working_age_adult_premiums", ], ) return where( diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py index 7d462c0d2a..85c57351bc 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py @@ -18,8 +18,8 @@ class council_tax_reduction_working_age_applicable_income(Variable): "income figure (earnings before the work allowance, plus Universal " "Credit unearned income) plus the Universal Credit award. Everyone " "else counts net earnings less disregards and childcare charges, " - "unearned income, tariff income from capital and, in Scotland, the " - "relevant Universal Credit payments." + "unearned income (in Wales, less tax on it), tariff income from " + "capital and, in Scotland, the relevant Universal Credit payments." ) definition_period = YEAR unit = GBP @@ -50,19 +50,37 @@ def formula(benunit, period, parameters): childcare = benunit( "council_tax_reduction_working_age_childcare_deduction", period ) + # Without Universal Credit, childcare charges come off earnings after + # the disregards (WSI 2013/3029 Sch 6 para 20(1)(c); SSI 2021/249 reg + # 38(2)(c)). A Scottish applicant with Universal Credit deducts them + # from income (reg 42(2)(c)). + earnings_after_deductions = max_( + 0, earnings - disregard - where(has_universal_credit, 0, childcare) + ) + unearned = benunit("council_tax_reduction_working_age_unearned_income", period) + # Wales disregards tax on unearned income (Sch 9 para 4); Scotland + # counts unearned income gross (reg 57). + unearned_tax = where( + wales & ~has_universal_credit, + min_( + benunit("council_tax_reduction_working_age_unabsorbed_tax", period), + unearned, + ), + 0, + ) own_rules_income = ( - earnings - - disregard + earnings_after_deductions + + unearned + - unearned_tax + add( benunit, period, [ - "council_tax_reduction_working_age_unearned_income", "council_tax_reduction_working_age_tariff_income", "council_tax_reduction_relevant_universal_credit_payments", ], ) - - childcare + - where(has_universal_credit, childcare, 0) ) income = where( wales & has_universal_credit, diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py new file mode 100644 index 0000000000..ad0e8b91a6 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py @@ -0,0 +1,30 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_scotland_scheme, +) + + +class council_tax_reduction_working_age_carers(Variable): + value_type = int + entity = BenUnit + label = "Claimants and partners qualifying for the working-age CTR carer premium" + documentation = ( + "The number of claimants and partners who receive Carer's Allowance " + "or, in Scotland, Carer Support Payment. In Scotland an award of " + "Universal Credit with the carer element also qualifies; when no one " + "in the family receives a carer benefit, it counts as one carer." + ) + definition_period = YEAR + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/schedule/1/paragraph/6", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/7/paragraph/14", + ) + + def formula(benunit, period, parameters): + person = benunit.members + claimant_or_partner = person("is_claimant_or_partner", period) + receives = person("receives_carer_benefit", period) + carers = benunit.sum(claimant_or_partner & receives) + scotland = is_scotland_scheme(benunit.household("country", period)) + uc_carer_element = benunit("uc_carer_element", period) > 0 + return carers + (scotland & uc_carer_element & (carers == 0)) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py index bbb559d910..b476cdea4b 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_childcare_deduction.py @@ -11,7 +11,8 @@ class council_tax_reduction_working_age_childcare_deduction(Variable): documentation = ( "Annual relevant childcare charges deducted from a working-age " "applicant's income in Scotland or Wales. Without Universal Credit, " - "childcare spending is deducted from earnings, up to a weekly cap for " + "childcare spending is deducted from earnings after the earnings " + "disregards (never below zero), up to a weekly cap for " "one child or for two or more, where a lone parent, or both members " "of a couple, are in remunerative work. A Scottish applicant with " "Universal Credit deducts the Universal Credit childcare costs element " @@ -69,10 +70,9 @@ def formula(benunit, period, parameters): wales.childcare.maximum_one_child, ), ) - earnings = benunit("council_tax_reduction_working_age_earned_income", period) legacy = where( (children > 0) & all_claimants_in_work, - min_(min_(charges, weekly_cap * WEEKS_IN_YEAR), earnings), + min_(charges, weekly_cap * WEEKS_IN_YEAR), 0, ) # Scotland, with Universal Credit: the childcare costs element grossed diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py index 94687ce2db..be2729f3cc 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py @@ -8,51 +8,11 @@ class council_tax_reduction_working_age_earned_income(Variable): documentation = ( "Annual net earnings of the claimant and partner for a working-age " "council tax reduction claim in Scotland or Wales, before earnings " - "disregards. With an award of Universal Credit, earnings follow the " - "Universal Credit measure: gross earnings (with any minimum income " - "floor) less income tax, National Insurance and all pension " - "contributions, with no work allowance. Without Universal Credit, " - "earnings are employment and self-employment income and statutory " - "sick and maternity pay, less income tax, National Insurance and half " - "of pension contributions. The earnings of children and young persons " - "do not count. As elsewhere in the model, all of a person's income " - "tax is deducted from earnings." + "disregards. Income tax and National Insurance are deducted from each " + "person's earnings up to those earnings; in Wales any tax the earnings " + "cannot absorb is disregarded from unearned income instead (see " + "council_tax_reduction_working_age_unabsorbed_tax)." ) definition_period = YEAR unit = GBP - reference = ( - "https://www.legislation.gov.uk/ssi/2021/249/regulation/49", - "https://www.legislation.gov.uk/ssi/2021/249/regulation/50", - "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", - "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/15", - ) - - def formula(benunit, period, parameters): - person = benunit.members - members = person("is_claimant_or_partner", period) - tax = add_for_members(benunit, period, ["tax"], members) - pension_contributions = add_for_members( - benunit, period, ["pension_contributions"], members - ) - universal_credit_earnings = add_for_members( - benunit, period, ["uc_mif_capped_earned_income"], members - ) - legacy_earnings = add_for_members( - benunit, - period, - [ - "employment_income", - "self_employment_income", - "statutory_sick_pay", - "statutory_maternity_pay", - ], - members, - ) - has_universal_credit = benunit( - "council_tax_reduction_working_age_has_universal_credit", period - ) - return where( - has_universal_credit, - max_(0, universal_credit_earnings - tax - pension_contributions), - max_(0, legacy_earnings - tax - 0.5 * pension_contributions), - ) + adds = ["council_tax_reduction_working_age_person_earned_income"] diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py index ed61f15e08..4f689d53d4 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py @@ -11,17 +11,21 @@ class council_tax_reduction_working_age_earnings_disregard(Variable): documentation = ( "Annual earnings disregarded in a working-age council tax reduction " "claim in Scotland or Wales. One weekly disregard applies: £25 for a " - "lone parent; otherwise £20 where the applicable amount includes a " - "disability, severe disability or carer premium; otherwise £10 for a " - "couple and £5 for a single applicant. Applicants without Universal " - "Credit who meet a work condition have £17.10 more disregarded if " - "their earnings cover the other disregards, their childcare charges " - "and the £17.10. Scotland applies the disregards to Universal Credit " - "earnings too, without the £17.10. A Welsh applicant with Universal " - "Credit uses the Secretary of State's income figure, which has no " - "disregards. The disregard is never more than the earnings. The £20 " - "disregards for special occupations and for permitted work are not " - "modelled." + "lone parent; otherwise £20 of the family's earnings where the " + "applicable amount includes a disability or severe disability " + "premium; otherwise, with a carer premium, £20 of the carers' own " + "earnings, plus up to £10 of a non-carer partner's earnings within the " + "same £20; otherwise £10 for a couple and £5 for a single applicant. " + "Applicants without Universal Credit who meet a work condition have " + "£17.10 more disregarded if their earnings cover the other disregard, " + "their childcare charges and the £17.10; for a couple's disability " + "condition, the disabled member must be the one in remunerative work, " + "and in Scotland from April 2022 only employed earnings count. " + "Scotland applies the disregards to Universal Credit earnings too, " + "without the £17.10. A Welsh applicant with Universal Credit uses the " + "Secretary of State's income figure, which has no disregards. The " + "disregard is never more than the earnings. The £20 disregards for " + "special occupations and permitted work are not modelled." ) definition_period = YEAR unit = GBP @@ -39,31 +43,71 @@ def formula(benunit, period, parameters): def rate(name): return where(scotland, getattr(scot, name), getattr(wales, name)) + person = benunit.members + claimant_or_partner = person("is_claimant_or_partner", period) + weekly_person_earnings = ( + person("council_tax_reduction_working_age_person_earned_income", period) + / WEEKS_IN_YEAR + ) + earnings = benunit("council_tax_reduction_working_age_earned_income", period) + weekly_earnings = earnings / WEEKS_IN_YEAR + lone_parent = benunit("is_lone_parent", period) couple = benunit("is_couple", period) disability = (benunit("disability_premium", period) > 0) | ( benunit("severe_disability_premium", period) > 0 ) - carer = benunit("carer_premium", period) > 0 + carers = benunit("council_tax_reduction_working_age_carers", period) + # Carer disregard: £20 of the carers' own earnings, plus up to £10 of a + # non-carer partner's earnings within the £20 (Wales Sch 8 paras 6-7; + # Scotland Sch 3 paras 6-7). Carers are identified by carer benefit + # receipt; a Scottish UC carer element with no carer benefit in the + # family falls back to the family's earnings. + is_carer = claimant_or_partner & person("receives_carer_benefit", period) + carer_earnings = benunit.sum(is_carer * weekly_person_earnings) + other_earnings = benunit.sum( + (claimant_or_partner & ~is_carer) * weekly_person_earnings + ) + named_carers = benunit.sum(is_carer) + carer_cap = rate("disability_or_carer") + partner_cap = rate("couple") + carer_disregard = where( + named_carers == 0, + min_(carer_cap, weekly_earnings), + where( + couple & (named_carers == 1), + min_(carer_cap, carer_earnings + min_(partner_cap, other_earnings)), + min_(carer_cap, carer_earnings), + ), + ) base = select( - [lone_parent, disability | carer, couple], - [rate("lone_parent"), rate("disability_or_carer"), rate("couple")], - rate("single"), + [lone_parent, disability, carers > 0, couple], + [ + min_(rate("lone_parent"), weekly_earnings), + min_(rate("disability_or_carer"), weekly_earnings), + carer_disregard, + min_(rate("couple"), weekly_earnings), + ], + min_(rate("single"), weekly_earnings), ) - person = benunit.members - claimant_or_partner = person("is_claimant_or_partner", period) hours = person("weekly_hours", period) age = person("age", period) - in_work = benunit.any( - claimant_or_partner - & (hours >= benunit.project(rate("remunerative_work_hours"))) - ) + remunerative = hours >= benunit.project(rate("remunerative_work_hours")) + in_work = benunit.any(claimant_or_partner & remunerative) full_time_25_or_over = benunit.any( claimant_or_partner & (hours >= benunit.project(rate("additional_full_time_hours"))) & (age >= benunit.project(rate("additional_full_time_age"))) ) + # For a couple, the member in remunerative work must be the one who + # meets the disability premium conditions (Wales Sch 8 para + # 18(2)(b)(v); Scotland Sch 3 para 15(2)(b)(iv)). + disabled_worker = benunit.any( + claimant_or_partner + & person("is_disabled_for_benefits", period) + & remunerative + ) children = benunit.sum( person("is_child_or_young_person_for_legacy_benefits", period) ) @@ -71,14 +115,20 @@ def rate(name): full_time_25_or_over | (couple & (children > 0) & in_work) | (lone_parent & in_work) - | ((benunit("disability_premium", period) > 0) & in_work) + | ((benunit("disability_premium", period) > 0) & disabled_worker) ) - earnings = benunit("council_tax_reduction_working_age_earned_income", period) childcare = benunit( "council_tax_reduction_working_age_childcare_deduction", period ) additional = rate("additional") - covers_additional = earnings >= (base + additional) * WEEKS_IN_YEAR + childcare + employed_only = scotland & (scot.additional_employed_earnings_only > 0) + employed = benunit( + "council_tax_reduction_working_age_employed_earned_income", period + ) + tested_earnings = where(employed_only, employed, earnings) + covers_additional = (tested_earnings > 0) & ( + tested_earnings >= (base + additional) * WEEKS_IN_YEAR + childcare + ) has_universal_credit = benunit( "council_tax_reduction_working_age_has_universal_credit", period ) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py new file mode 100644 index 0000000000..da19a41a7d --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py @@ -0,0 +1,32 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( + working_age_earnings_components, +) + + +class council_tax_reduction_working_age_employed_earned_income(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction net employed earnings" + documentation = ( + "The employed part of the claimant's and partner's net earnings: " + "employment income and statutory sick, maternity and paternity pay, " + "with each person's deductions shared pro rata with their " + "self-employed earnings. Scotland's additional £17.10 earnings " + "disregard turns on employed earnings from April 2022." + ) + definition_period = YEAR + unit = GBP + reference = "https://www.legislation.gov.uk/ssi/2021/249/schedule/3" + + def formula(benunit, period, parameters): + person = benunit.members + gross, employed_gross, _, _ = working_age_earnings_components(person, period) + net = person("council_tax_reduction_working_age_person_earned_income", period) + share = np.divide( + employed_gross, + gross, + out=np.zeros_like(gross, dtype=float), + where=gross > 0, + ) + return benunit.sum(net * share) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py new file mode 100644 index 0000000000..22014a4298 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py @@ -0,0 +1,33 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( + working_age_earnings_components, +) + + +class council_tax_reduction_working_age_person_earned_income(Variable): + value_type = float + entity = Person + label = "Working-age council tax reduction net earned income (person)" + documentation = ( + "A claimant's or partner's annual net earnings for a working-age " + "council tax reduction claim in Scotland or Wales, before earnings " + "disregards: gross earnings less pension contributions (all of them " + "with Universal Credit, half otherwise) and the person's income tax " + "and National Insurance, not below zero. Children's and other " + "members' earnings do not count." + ) + definition_period = YEAR + unit = GBP + reference = ( + "https://www.legislation.gov.uk/ssi/2021/249/regulation/49", + "https://www.legislation.gov.uk/ssi/2021/249/regulation/50", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/9", + "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/15", + ) + + def formula(person, period, parameters): + gross, _, pension_deduction, tax = working_age_earnings_components( + person, period + ) + claimant_or_partner = person("is_claimant_or_partner", period) + return claimant_or_partner * max_(0, gross - pension_deduction - tax) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py new file mode 100644 index 0000000000..1cb5767d8d --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py @@ -0,0 +1,29 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( + working_age_earnings_components, +) + + +class council_tax_reduction_working_age_unabsorbed_tax(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction tax not absorbed by earnings" + documentation = ( + "Income tax and National Insurance of the claimant and partner beyond " + "what their earnings (less pension deductions) can absorb, which is " + "tax on unearned income. Wales disregards it from unearned income " + "(WSI 2013/3029 Sch 9 para 4); Scotland counts unearned income gross " + "(SSI 2021/249 reg 57)." + ) + definition_period = YEAR + unit = GBP + reference = "https://www.legislation.gov.uk/wsi/2013/3029/schedule/9/paragraph/4" + + def formula(benunit, period, parameters): + person = benunit.members + gross, _, pension_deduction, tax = working_age_earnings_components( + person, period + ) + claimant_or_partner = person("is_claimant_or_partner", period) + absorbed = max_(0, gross - pension_deduction) + return benunit.sum(claimant_or_partner * max_(0, tax - absorbed)) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py index a6d43be3fb..16d16bf3b5 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py @@ -10,7 +10,8 @@ class council_tax_reduction_working_age_unearned_income(Variable): "working-age council tax reduction claim in Scotland or Wales, other " "than Universal Credit and tariff income from capital. Retirement " "pensions, contributory Jobseeker's Allowance and Employment and " - "Support Allowance, carer's allowance, carer support payment, " + "Support Allowance, carer's allowance, the Carer Support Payment " + "component (not the Scottish Carer Supplement), " "maternity allowance, industrial injuries benefit, incapacity benefit, " "severe disablement allowance and working and child tax credits " "count. Child Benefit, the income-related benefits, disability " @@ -47,6 +48,15 @@ def formula(benunit, period, parameters): ], members, ) + # Only the Carer Support Payment component counts, not the Scottish + # Carer Supplement (SSI 2021/249 reg 4(1), as amended by SSI 2025/340, + # and the closed list in reg 57(1)). + csp = parameters(period).gov.social_security_scotland.carer_support_payment + csp_total = add_for_members(benunit, period, ["carer_support_payment"], members) + csp_rate = csp.rate + csp.supplement + supplement_share = csp.supplement / csp_rate if csp_rate > 0 else 0 + supplement = csp_total * supplement_share + income = income - supplement tax_credits = add(benunit, period, ["working_tax_credit", "child_tax_credit"]) bi = parameters(period).gov.contrib.ubi_center.basic_income basic_income = ( From 8bf733e1443ab5bd1a9d1dc7cac8e15e6d9e2907 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 3 Oct 2026 22:07:08 -0400 Subject: [PATCH 3/6] Update CTR tests for the Welsh working-age rules and main's Class 4 NI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - #1909's Welsh working-age earner now gets the Welsh allowance and the £5 earnings disregard (1,111.24, not the HB-based 993.72). - #1944's capped mixed-age UC couple in Wales gets the maximum reduction under WSI 2013/3029 Sch 6 paras 3 and 9; give it a UC maximum amount consistent with its award. - The Scottish self-employed £17.10 case now pays Class 4 NI on its profits. Co-Authored-By: Claude Opus 5.5 --- ...il_tax_reduction_devolved_working_age.yaml | 6 +++-- .../council_tax_reduction_pension_credit.yaml | 8 +++++-- .../council_tax_reduction_pensioner.yaml | 22 ++++++++++--------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml index e3b7fab53c..84ef38293e 100644 --- a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml @@ -611,7 +611,9 @@ - name: Scotland, the £17.10 needs employed earnings from April 2022 # Sch 3 para 15(1): a self-employed lone parent gets only the £25 disregard - # (1,300 a year). Applicable amount (95.55 + 109.85) x 52 = 10,680.80. + # (1,300 a year). Earnings 15,000 less income tax 461.70 and Class 4 NI + # 145.80 = 14,392.50; income 13,092.50; applicable amount (95.55 + 109.85) + # x 52 = 10,680.80; award 1,800 - 0.2 x 2,411.70 = 1,317.66. period: 2026 absolute_error_margin: 0.01 input: @@ -636,7 +638,7 @@ savings: 0 output: council_tax_reduction_working_age_earnings_disregard: 1_300 - simulated_council_tax_reduction_benunit: 1_279.66 + simulated_council_tax_reduction_benunit: 1_317.66 - name: Scotland, an employed lone parent working 30 hours gets the £17.10 # (25 + 17.10) x 52 = 2,189.20. diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pension_credit.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pension_credit.yaml index 6e52f66d3d..376fbdb565 100644 --- a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pension_credit.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pension_credit.yaml @@ -357,10 +357,14 @@ savings: 0 output: # Working age, so not eligible for Pension Credit: no guarantee credit. + # The Welsh working-age rules apply (WSI 2013/3029 Sch 6-8): applicable + # amount 101.85 x 52 = 5,296.20; income 10,000 less the £5 earnings + # disregard (260) = 9,740; award 2,000 - 0.2 x 4,443.80 = 1,111.24. guarantee_credit: 0 in_receipt_of_guarantee_credit: false - council_tax_reduction_applicable_income: 10_000 - council_tax_reduction: 993.72 + council_tax_reduction_working_age_applicable_amount: 5_296.20 + council_tax_reduction_working_age_applicable_income: 9_740 + council_tax_reduction: 1_111.24 - name: Scotland guarantee credit recipient gets maximum CTR above the capital limit period: 2026 diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.yaml index 444244a941..b1e3b7c2ef 100644 --- a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_pensioner.yaml @@ -304,14 +304,13 @@ council_tax_reduction_scheme_supported: true - name: In Wales the cap reaches Council Tax Reduction through Universal Credit income - # The model's Welsh formula does not route on pensioner status, but it - # counts Universal Credit as income. Capping a mixed-age couple's award - # (cap 22,020 outside London; 30,000 + 3,000 - 22,020 = 10,980) lowers that - # income and so raises the reduction. Without the cap Universal Credit of - # 30,000 would take income far above the applicable amount. 1,582.84 is the - # model's pension-age formula, not the law: the Welsh route for Universal - # Credit applicants (WSI 2013/3029 Sch 6 paras 3 and 9) would give this - # family the maximum reduction, which the model does not yet implement. + # A mixed-age couple on Universal Credit is not a CTR pensioner, so the + # Welsh route for Universal Credit applicants applies (WSI 2013/3029 Sch 6 + # paras 3 and 9): the applicable amount is the UC maximum amount (30,000) + # and income is the Secretary of State's income (nil) plus the award after + # the cap (cap 22,020 outside London; 30,000 + 3,000 - 22,020 = 10,980 off, + # leaving 19,020). Income is below the applicable amount, so the family gets + # the maximum reduction. period: 2026 absolute_error_margin: 0.01 input: @@ -325,6 +324,7 @@ benunits: benunit: members: [older, younger, child] + uc_maximum_amount: 30_000 universal_credit_pre_benefit_cap: 30_000 child_benefit: 3_000 uc_deductions: 0 @@ -339,5 +339,7 @@ output: benefit_cap_reduction: 10_980 universal_credit: 19_020 - council_tax_reduction_applicable_income: 22_020 - council_tax_benefit: 1_582.84 + council_tax_reduction_devolved_working_age: true + council_tax_reduction_working_age_applicable_amount: 30_000 + council_tax_reduction_working_age_applicable_income: 19_020 + council_tax_benefit: 2_000 From e7f7a25c49e21523173d947ef5231ea79ac65a3c Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 06:29:24 -0400 Subject: [PATCH 4/6] Apply tax and NI only to earnings, count carers on entitlement MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Take off earnings only the tax and NI in respect of the employment or trade (the UC split of income tax; Class 1, 2 and 4, not Class 3), and disregard tax on counted unearned income in Wales. - Count the carer premium on entitlement to a carer benefit; give the Scottish UC carer fallback only with an award of UC. - Scotland: the £20 disregard for a UC worker with LCW or LCWRA. - Wales UC: the UC model's own earned income, as the Secretary of State's figure. - Welsh fixed amounts from 1 April 2013 (W.S.I. 2012/3144). Co-Authored-By: Claude Opus 5.5 --- .../working_age/childcare.yaml | 25 +++-- .../working_age/earnings_disregard.yaml | 82 ++++++++++------ .../working_age/tariff_income.yaml | 33 ++++--- .../working_age/_earnings.py | 94 +++++++++++++++---- ...reduction_working_age_applicable_income.py | 4 +- ...ouncil_tax_reduction_working_age_carers.py | 21 +++-- ...tax_reduction_working_age_earned_income.py | 6 +- ...eduction_working_age_earnings_disregard.py | 42 +++++++-- ...tion_working_age_employed_earned_income.py | 22 ++--- ...uction_working_age_person_earned_income.py | 21 +++-- ...ax_reduction_working_age_unabsorbed_tax.py | 32 ------- ...duction_working_age_unearned_income_tax.py | 29 ++++++ 12 files changed, 272 insertions(+), 139 deletions(-) delete mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py create mode 100644 policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income_tax.py diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml index b83d15f029..c0732e9dbb 100644 --- a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/childcare.yaml @@ -1,25 +1,34 @@ -description: Weekly caps on the relevant childcare charges deducted from the earnings of an applicant who is not a pensioner under the Welsh council tax reduction schemes. +description: Weekly caps on the relevant childcare charges deducted from the earnings of an applicant + who is not a pensioner under the Welsh council tax reduction schemes. maximum_one_child: description: Weekly cap on relevant childcare charges where the family has one child with charges. values: - 2014-04-01: 175 + 2013-04-01: 175 metadata: label: Wales working-age CTR childcare cap, one child unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 20(3)(a) - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 20(3)(a) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20 + - &id001 + title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2012 (2013-14 + schemes) + href: https://www.legislation.gov.uk/wsi/2012/3144/contents/made maximum_two_or_more_children: - description: Weekly cap on relevant childcare charges where the family has more than one child with charges. + description: Weekly cap on relevant childcare charges where the family has more than one child with + charges. values: - 2014-04-01: 300 + 2013-04-01: 300 metadata: label: Wales working-age CTR childcare cap, two or more children unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 20(3)(b) - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 20(3)(b) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/20 + - *id001 metadata: label: Wales working-age CTR childcare charges diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml index c8797630c7..b5dfcc158f 100644 --- a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/earnings_disregard.yaml @@ -1,91 +1,115 @@ -description: Weekly earnings disregards for applicants who are not pensioners under the Welsh council tax reduction schemes. +description: Weekly earnings disregards for applicants who are not pensioners under the Welsh council + tax reduction schemes. single: description: Weekly earnings disregard where no other disregard applies. values: - 2014-04-01: 5 + 2013-04-01: 5 metadata: label: Wales working-age CTR earnings disregard, single unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 11 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 para. 11 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - &id001 + title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2012 (2013-14 + schemes) + href: https://www.legislation.gov.uk/wsi/2012/3144/contents/made couple: - description: Weekly earnings disregard for a couple, a member of which is in employment, to whom no higher disregard applies. + description: Weekly earnings disregard for a couple, a member of which is in employment, to whom no + higher disregard applies. values: - 2014-04-01: 10 + 2013-04-01: 10 metadata: label: Wales working-age CTR earnings disregard, couple unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 8 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 para. 8 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - *id001 lone_parent: description: Weekly earnings disregard for a lone parent. values: - 2014-04-01: 25 + 2013-04-01: 25 metadata: label: Wales working-age CTR earnings disregard, lone parent unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 5 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 para. 5 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - *id001 disability_or_carer: - description: Weekly earnings disregard where the applicable amount includes a disability premium, severe disability premium or carer premium. + description: Weekly earnings disregard where the applicable amount includes a disability premium, severe + disability premium or carer premium. values: - 2014-04-01: 20 + 2013-04-01: 20 metadata: label: Wales working-age CTR earnings disregard, disability or carer unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 paras. 4 and 6 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 paras. 4 and 6 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - *id001 additional: description: Additional weekly earnings disregard for applicants who meet a work condition. values: - 2014-04-01: 17.10 + 2013-04-01: 17.1 metadata: label: Wales working-age CTR additional earnings disregard unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 18 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 para. 18 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - *id001 additional_full_time_hours: - description: Weekly hours of remunerative work from which an applicant aged 25 or over qualifies for the additional earnings disregard. + description: Weekly hours of remunerative work from which an applicant aged 25 or over qualifies for + the additional earnings disregard. values: - 2014-04-01: 30 + 2013-04-01: 30 metadata: label: Wales working-age CTR additional earnings disregard full-time hours unit: hour period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 18(2) - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 para. 18(2) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - *id001 additional_full_time_age: - description: Age from which an applicant working the full-time hours qualifies for the additional earnings disregard. + description: Age from which an applicant working the full-time hours qualifies for the additional earnings + disregard. values: - 2014-04-01: 25 + 2013-04-01: 25 metadata: label: Wales working-age CTR additional earnings disregard full-time age unit: year period: year reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 8 para. 18(2) - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 8 para. 18(2) + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/8 + - *id001 remunerative_work_hours: description: Weekly hours from which a person is in remunerative work. values: - 2014-04-01: 16 + 2013-04-01: 16 metadata: label: Wales working-age CTR remunerative work hours unit: hour period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 reg. 10(1) - href: https://www.legislation.gov.uk/wsi/2013/3029/regulation/10 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 reg. + 10(1) + href: https://www.legislation.gov.uk/wsi/2013/3029/regulation/10 + - *id001 metadata: label: Wales working-age CTR earnings disregards diff --git a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml index bb8d5c4451..3fdd064d72 100644 --- a/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml +++ b/policyengine_uk/parameters/gov/local_authorities/wales/council_tax_reduction/working_age/tariff_income.yaml @@ -1,36 +1,47 @@ -description: Tariff income treated as arising from the capital of an applicant who is not a pensioner under the Welsh council tax reduction schemes. +description: Tariff income treated as arising from the capital of an applicant who is not a pensioner + under the Welsh council tax reduction schemes. threshold: description: Capital above which an applicant who is not a pensioner is treated as having tariff income. values: - 2014-04-01: 6_000 + 2013-04-01: 6000 metadata: label: Wales working-age CTR tariff income threshold unit: currency-GBP period: year reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 33 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 33 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 + - &id001 + title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2012 (2013-14 + schemes) + href: https://www.legislation.gov.uk/wsi/2012/3144/contents/made step: - description: Size of each capital step, or part of one, above the threshold that yields the weekly tariff income amount. + description: Size of each capital step, or part of one, above the threshold that yields the weekly tariff + income amount. values: - 2014-04-01: 250 + 2013-04-01: 250 metadata: label: Wales working-age CTR tariff income capital step unit: currency-GBP period: year reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 33 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 33 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 + - *id001 amount: description: Weekly tariff income for each capital step, or part of one, above the threshold. values: - 2014-04-01: 1 + 2013-04-01: 1 metadata: label: Wales working-age CTR weekly tariff income per step unit: currency-GBP period: week reference: - - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. 6 para. 33 - href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 + - title: The Council Tax Reduction Schemes and Prescribed Requirements (Wales) Regulations 2013 Sch. + 6 para. 33 + href: https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/33 + - *id001 metadata: label: Wales working-age CTR tariff income diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py index c955749df7..433fdb8f70 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py @@ -1,4 +1,7 @@ from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.config import ( + is_wales_scheme, +) STATUTORY_PAY = [ "statutory_sick_pay", @@ -6,29 +9,86 @@ "statutory_paternity_pay", ] +# Taxable unearned income the working-age schemes count. Tax on it is the part +# of a person's non-savings income tax that is not tax on their earnings, +# shared pro rata with property income (which the schemes treat as capital). +COUNTED_TAXABLE_UNEARNED = [ + "state_pension", + "private_pension_income", + "carers_allowance", + "carer_support_payment", + "esa_contrib", + "jsa_contrib", + "incapacity_benefit", +] + -def working_age_earnings_components(person, period): - """Gross earnings, employed earnings, pension deduction and tax per person. +def working_age_earnings(person, period): + """Net earnings and the employed part of them, per person. - With an award of Universal Credit, earnings follow the Universal Credit - measure (with any minimum income floor) and all pension contributions are - deducted; otherwise employment and self-employment income count and half - of pension contributions are deducted. Statutory sick, maternity and - paternity pay are employed earnings on both routes (SSI 2021/249 regs - 49(4), 50(2); WSI 2013/3029 Sch 6 para 14(1)). + Tax and National Insurance come off earnings only as far as they are in + respect of the employment or trade: the model's Universal Credit split of + each person's income tax (earnings taken as the lowest slice of + non-savings income) and their Class 1, 2 and 4 contributions, not + voluntary Class 3 (SSI 2021/249 regs 49(6), 50(3); WSI 2013/3029 Sch 6 + paras 15(3), 16). With an award of Universal Credit: + - Wales uses the Secretary of State's figure for the award, which is the + model's Universal Credit earned income before the work allowance + (Sch 6 para 9); + - Scotland uses the Universal Credit measure plus statutory sick, + maternity and paternity pay, which reg 49(4) treats as earnings. + Without Universal Credit, employment and self-employment income and + statutory pay count, less half of pension contributions. + Returns (net earnings, net employed earnings). """ has_universal_credit = person.benunit( "council_tax_reduction_working_age_has_universal_credit", period ) + wales = is_wales_scheme(person.household("country", period)) statutory_pay = add(person, period, STATUTORY_PAY) employment = person("employment_income", period) - universal_credit_gross = ( - person("uc_mif_capped_earned_income", period) + statutory_pay + self_employment = person("self_employment_income", period) + tax_on_earnings = add( + person, + period, + ["uc_income_tax_on_earnings", "uc_national_insurance_on_earnings"], + ) + universal_credit_earnings = person("uc_individual_earned_income", period) + scotland_universal_credit = universal_credit_earnings + statutory_pay + legacy_gross = employment + self_employment + statutory_pay + legacy = max_( + 0, + legacy_gross - 0.5 * person("pension_contributions", period) - tax_on_earnings, + ) + net = where( + has_universal_credit, + where(wales, universal_credit_earnings, scotland_universal_credit), + legacy, + ) + gross = where(has_universal_credit, net, legacy_gross) + employed_gross = employment + statutory_pay + employed_share = np.divide( + min_(employed_gross, gross), + gross, + out=np.zeros_like(gross, dtype=float), + where=gross > 0, + ) + return net, net * employed_share + + +def working_age_unearned_income_tax(person, period): + """Income tax on the person's counted taxable unearned income.""" + counted = add(person, period, COUNTED_TAXABLE_UNEARNED) + property_income = max_(0, person("property_income", period)) + other_non_savings_tax = max_( + 0, + person("earned_income_tax", period) + - person("uc_income_tax_on_earnings", period), + ) + share = np.divide( + counted, + counted + property_income, + out=np.zeros_like(counted, dtype=float), + where=(counted + property_income) > 0, ) - legacy_gross = employment + person("self_employment_income", period) + statutory_pay - gross = where(has_universal_credit, universal_credit_gross, legacy_gross) - employed_gross = min_(employment + statutory_pay, gross) - pension_share = where(has_universal_credit, 1, 0.5) - pension_deduction = person("pension_contributions", period) * pension_share - tax = person("tax", period) - return gross, employed_gross, pension_deduction, tax + return other_non_savings_tax * share diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py index 85c57351bc..de1e520908 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_applicable_income.py @@ -63,7 +63,9 @@ def formula(benunit, period, parameters): unearned_tax = where( wales & ~has_universal_credit, min_( - benunit("council_tax_reduction_working_age_unabsorbed_tax", period), + benunit( + "council_tax_reduction_working_age_unearned_income_tax", period + ), unearned, ), 0, diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py index 0ba18b2d9d..c5e03680e0 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_carers.py @@ -12,10 +12,12 @@ class council_tax_reduction_working_age_carers(Variable): entity = BenUnit label = "Claimants and partners qualifying for the working-age CTR carer premium" documentation = ( - "The number of claimants and partners who receive Carer's Allowance " - "or, in Scotland, Carer Support Payment. In Scotland an award of " - "Universal Credit with the carer element also qualifies; when no one " - "in the family receives a carer benefit, it counts as one carer." + "The number of claimants and partners who qualify for the working-age " + "carer premium: entitled to Carer's Allowance or, in Scotland, Carer " + "Support Payment, whether or not an overlapping benefit reduces the " + "payment to nil. In Scotland an award of Universal Credit that " + "includes the carer element also qualifies; when no one in the family " + "is entitled to a carer benefit, it counts as one carer." ) definition_period = YEAR reference = ( @@ -26,8 +28,13 @@ class council_tax_reduction_working_age_carers(Variable): def formula(benunit, period, parameters): person = benunit.members claimant_or_partner = working_age_applicant_or_partner(person, period) - receives = person("receives_carer_benefit", period) - carers = benunit.sum(claimant_or_partner & receives) + entitled = person("is_entitled_to_carer_benefit", period) + carers = benunit.sum(claimant_or_partner & entitled) scotland = is_scotland_scheme(benunit.household("country", period)) - uc_carer_element = benunit("uc_carer_element", period) > 0 + # An award of Universal Credit that includes the carer element + # (SSI 2021/249 Sch 1 para 6(1)(c)); uc_carer_element alone is the + # potential element. + uc_carer_element = (benunit("uc_carer_element", period) > 0) & benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) return carers + (scotland & uc_carer_element & (carers == 0)) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py index be2729f3cc..692942a246 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earned_income.py @@ -8,10 +8,8 @@ class council_tax_reduction_working_age_earned_income(Variable): documentation = ( "Annual net earnings of the claimant and partner for a working-age " "council tax reduction claim in Scotland or Wales, before earnings " - "disregards. Income tax and National Insurance are deducted from each " - "person's earnings up to those earnings; in Wales any tax the earnings " - "cannot absorb is disregarded from unearned income instead (see " - "council_tax_reduction_working_age_unabsorbed_tax)." + "disregards: the sum of each person's net earnings (see " + "council_tax_reduction_working_age_person_earned_income)." ) definition_period = YEAR unit = GBP diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py index 02944d9970..ea81a325d2 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py @@ -16,7 +16,9 @@ class council_tax_reduction_working_age_earnings_disregard(Variable): "claim in Scotland or Wales. One weekly disregard applies: £25 for a " "lone parent; otherwise £20 of the family's earnings where the " "applicable amount includes a disability or severe disability " - "premium; otherwise, with a carer premium, £20 of the carers' own " + "premium (in Scotland also for a Universal Credit applicant with " + "limited capability for work who is in employment); otherwise, with a " + "carer benefit in payment, £20 of the carers' own " "earnings, plus up to £10 of a non-carer partner's earnings within the " "same £20; otherwise £10 for a couple and £5 for a single applicant. " "Applicants without Universal Credit who meet a work condition have " @@ -57,9 +59,33 @@ def rate(name): lone_parent = benunit("is_lone_parent", period) couple = benunit("is_couple", period) - disability = (benunit("disability_premium", period) > 0) | ( - benunit("severe_disability_premium", period) > 0 + has_universal_credit = benunit( + "council_tax_reduction_working_age_has_universal_credit", period + ) + # Scotland also gives the £20 to a Universal Credit applicant or + # partner with limited capability for work (or for work-related + # activity) where one of them is under pensionable age and in + # employment (SSI 2021/249 Sch 3 para 4(3)). + scottish_uc_limited_capability = ( + scotland + & has_universal_credit + & benunit.any( + claimant_or_partner & person("uc_limited_capability_for_WRA", period) + ) + & benunit.any( + claimant_or_partner + & ~person("is_SP_age", period) + & (weekly_person_earnings > 0) + ) ) + disability = ( + (benunit("disability_premium", period) > 0) + | (benunit("severe_disability_premium", period) > 0) + | scottish_uc_limited_capability + ) + # The carer disregard needs a carer benefit in payment (Wales Sch 8 + # para 6: "in receipt of carer's allowance"); in Scotland an award of + # Universal Credit with the carer element also qualifies. carers = benunit("council_tax_reduction_working_age_carers", period) # Carer disregard: £20 of the carers' own earnings, plus up to £10 of a # non-carer partner's earnings within the £20 (Wales Sch 8 paras 6-7; @@ -84,7 +110,12 @@ def rate(name): ), ) base = select( - [lone_parent, disability, carers > 0, couple], + [ + lone_parent, + disability, + (named_carers > 0) | (scotland & (carers > 0)), + couple, + ], [ min_(rate("lone_parent"), weekly_earnings), min_(rate("disability_or_carer"), weekly_earnings), @@ -132,9 +163,6 @@ def rate(name): covers_additional = (tested_earnings > 0) & ( tested_earnings >= (base + additional) * WEEKS_IN_YEAR + childcare ) - has_universal_credit = benunit( - "council_tax_reduction_working_age_has_universal_credit", period - ) additional_applies = work_condition & covers_additional & ~has_universal_credit weekly = base + additional * additional_applies weekly = where(has_universal_credit & ~scotland, 0, weekly) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py index da19a41a7d..a0b9819ea9 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_employed_earned_income.py @@ -1,6 +1,9 @@ from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._applicant import ( + working_age_applicant_or_partner, +) from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( - working_age_earnings_components, + working_age_earnings, ) @@ -11,9 +14,9 @@ class council_tax_reduction_working_age_employed_earned_income(Variable): documentation = ( "The employed part of the claimant's and partner's net earnings: " "employment income and statutory sick, maternity and paternity pay, " - "with each person's deductions shared pro rata with their " - "self-employed earnings. Scotland's additional £17.10 earnings " - "disregard turns on employed earnings from April 2022." + "sharing each person's deductions pro rata with their self-employed " + "earnings. Scotland's additional £17.10 earnings disregard turns on " + "employed earnings from April 2022." ) definition_period = YEAR unit = GBP @@ -21,12 +24,5 @@ class council_tax_reduction_working_age_employed_earned_income(Variable): def formula(benunit, period, parameters): person = benunit.members - gross, employed_gross, _, _ = working_age_earnings_components(person, period) - net = person("council_tax_reduction_working_age_person_earned_income", period) - share = np.divide( - employed_gross, - gross, - out=np.zeros_like(gross, dtype=float), - where=gross > 0, - ) - return benunit.sum(net * share) + _, employed = working_age_earnings(person, period) + return benunit.sum(working_age_applicant_or_partner(person, period) * employed) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py index 4a5181c578..28311eb1c6 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_person_earned_income.py @@ -3,7 +3,7 @@ working_age_applicant_or_partner, ) from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( - working_age_earnings_components, + working_age_earnings, ) @@ -14,10 +14,14 @@ class council_tax_reduction_working_age_person_earned_income(Variable): documentation = ( "A claimant's or partner's annual net earnings for a working-age " "council tax reduction claim in Scotland or Wales, before earnings " - "disregards: gross earnings less pension contributions (all of them " - "with Universal Credit, half otherwise) and the person's income tax " - "and National Insurance, not below zero. Children's and other " - "members' earnings do not count." + "disregards. Only income tax and National Insurance in respect of the " + "employment or trade are deducted (not tax on pensions, benefits, " + "property, savings or dividends, nor voluntary Class 3 " + "contributions). With Universal Credit, Wales uses the Universal " + "Credit earned income the award is based on, and Scotland adds " + "statutory sick, maternity and paternity pay to it; otherwise half of " + "pension contributions are deducted. Children's and other members' " + "earnings do not count." ) definition_period = YEAR unit = GBP @@ -29,8 +33,5 @@ class council_tax_reduction_working_age_person_earned_income(Variable): ) def formula(person, period, parameters): - gross, _, pension_deduction, tax = working_age_earnings_components( - person, period - ) - claimant_or_partner = working_age_applicant_or_partner(person, period) - return claimant_or_partner * max_(0, gross - pension_deduction - tax) + net, _ = working_age_earnings(person, period) + return working_age_applicant_or_partner(person, period) * net diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py deleted file mode 100644 index 566c6c2457..0000000000 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unabsorbed_tax.py +++ /dev/null @@ -1,32 +0,0 @@ -from policyengine_uk.model_api import * -from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._applicant import ( - working_age_applicant_or_partner, -) -from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( - working_age_earnings_components, -) - - -class council_tax_reduction_working_age_unabsorbed_tax(Variable): - value_type = float - entity = BenUnit - label = "Working-age council tax reduction tax not absorbed by earnings" - documentation = ( - "Income tax and National Insurance of the claimant and partner beyond " - "what their earnings (less pension deductions) can absorb, which is " - "tax on unearned income. Wales disregards it from unearned income " - "(WSI 2013/3029 Sch 9 para 4); Scotland counts unearned income gross " - "(SSI 2021/249 reg 57)." - ) - definition_period = YEAR - unit = GBP - reference = "https://www.legislation.gov.uk/wsi/2013/3029/schedule/9/paragraph/4" - - def formula(benunit, period, parameters): - person = benunit.members - gross, _, pension_deduction, tax = working_age_earnings_components( - person, period - ) - claimant_or_partner = working_age_applicant_or_partner(person, period) - absorbed = max_(0, gross - pension_deduction) - return benunit.sum(claimant_or_partner * max_(0, tax - absorbed)) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income_tax.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income_tax.py new file mode 100644 index 0000000000..1aa79d1a47 --- /dev/null +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income_tax.py @@ -0,0 +1,29 @@ +from policyengine_uk.model_api import * +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._applicant import ( + working_age_applicant_or_partner, +) +from policyengine_uk.variables.gov.local_authorities.council_tax_reduction.working_age._earnings import ( + working_age_unearned_income_tax, +) + + +class council_tax_reduction_working_age_unearned_income_tax(Variable): + value_type = float + entity = BenUnit + label = "Working-age council tax reduction tax on counted unearned income" + documentation = ( + "Income tax of the claimant and partner on the taxable unearned " + "income the working-age schemes count (pensions, State Pension and " + "taxable benefits): their non-savings income tax less the tax on their " + "earnings, shared pro rata with property income. Wales disregards it " + "from unearned income (WSI 2013/3029 Sch 9 para 4); Scotland counts " + "unearned income gross (SSI 2021/249 reg 57)." + ) + definition_period = YEAR + unit = GBP + reference = "https://www.legislation.gov.uk/wsi/2013/3029/schedule/9/paragraph/4" + + def formula(benunit, period, parameters): + person = benunit.members + tax = working_age_unearned_income_tax(person, period) + return benunit.sum(working_age_applicant_or_partner(person, period) * tax) From 1e12d2f32ec2e617545a7209925d8393130dd712 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 06:39:14 -0400 Subject: [PATCH 5/6] Fix round-2 review findings and add their regressions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Count Carer Support Payment before the overlap reduction, as the pension-age route does, in income and in tax on unearned income. - Update main's Carer Support Payment tests for the devolved amounts. - Regression tests: tax on pensions and dividends stays off wages (Wales and Scotland), carer premium on entitlement, no UC carer premium without an award, Scottish UC LCWRA £20 disregard, Class 3 NI, the Welsh UC income figure (differential against the UC variables), a partial Welsh UC award independent of rent, and the Welsh 2013 first dates. Co-Authored-By: Claude Opus 5.5 --- ...l_tax_reduction_carer_support_payment.yaml | 34 ++- ...il_tax_reduction_devolved_working_age.yaml | 270 +++++++++++++++++- ...duction_devolved_working_age_properties.py | 106 +++++++ .../working_age/_earnings.py | 2 +- ...x_reduction_working_age_unearned_income.py | 7 +- 5 files changed, 404 insertions(+), 15 deletions(-) diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_support_payment.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_support_payment.yaml index 83dc25ff15..9ea9fd7d1b 100644 --- a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_support_payment.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_support_payment.yaml @@ -20,8 +20,11 @@ # Weekly rates. 2026: CSP and CA 86.45, Scottish Carer Supplement 11.70, # carer premium 48.15, personal allowance 95.55 (single, 25 or over), 256.00 # (single, pension age) and 383.35 (couple, pension age). 2025: CSP 83.30, no -# supplement, and the model's carer premium 46.38 and personal allowance 92.04 -# (the statutory 2025-26 amounts were 46.40 and 92.05; see #2110). 2024: CA +# supplement, and Scotland's working-age carer premium 46.40 and personal +# allowance 92.05 (SSI 2025/24 reg 16; the Housing Benefit amounts the +# pension-age route reads were 46.38 and 92.04, see #2110). Wales's 2026 +# working-age personal allowance is its own, 101.85 (W.S.I. 2026/13 reg +# 11(a)). 2024: CA # 81.90, carer premium 45.60, personal allowance 90.50. Reduction is withdrawn # at 20% of income above the applicable amount. Council tax is 2,000 # throughout. @@ -85,10 +88,14 @@ savings: 0 output: carer_support_payment: 86.45 * 52 - council_tax_reduction_applicable_income: 7_000 + 86.45 * 52 + council_tax_reduction_working_age_applicable_income: 7_000 + 86.45 * 52 + council_tax_reduction_working_age_applicable_amount: (95.55 + 48.15) * 52 council_tax_reduction: 1_195.40 -- name: A Welsh carer on Carer's Allowance gets the same Council Tax Reduction as the Scottish carer +- name: A Welsh carer on Carer's Allowance has it counted in Council Tax Reduction + # Wales's working-age rules (W.S.I. 2026/13 reg 11): applicable amount + # (101.85 + 48.15 carer premium) x 52 = 7,800; income 7,000 pension + + # 4,495.40 Carer's Allowance; award 2,000 - 0.2 x 3,695.40 = 1,260.92. period: 2026 absolute_error_margin: 0.01 input: @@ -112,8 +119,9 @@ carers_allowance: 86.45 * 52 carer_support_payment: 0 scottish_carer_supplement: 0 - council_tax_reduction_applicable_income: 7_000 + 86.45 * 52 - council_tax_reduction: 1_195.40 + council_tax_reduction_working_age_applicable_income: 7_000 + 86.45 * 52 + council_tax_reduction_working_age_applicable_amount: (101.85 + 48.15) * 52 + council_tax_reduction: 1_260.92 - name: A Scottish carer who does not claim Carer Support Payment has none counted period: 2026 @@ -188,6 +196,10 @@ # applicable amount, and a full award of 2,000. council_tax_reduction_applicable_income: 5_000 + 86.45 * 52 council_tax_reduction_applicable_amount: (95.55 + 48.15) * 52 + # The working-age route counts the same amount. Scotland's 2026-27 + # amounts (SSI 2026/56 reg 14) equal these: 95.55 + 48.15 carer premium. + council_tax_reduction_working_age_applicable_income: 5_000 + 86.45 * 52 + council_tax_reduction_working_age_applicable_amount: (95.55 + 48.15) * 52 # 2,000 - 0.2 x (9,495.40 - 7,472.40) council_tax_reduction: 1_595.40 @@ -215,10 +227,12 @@ carers_allowance: 0 carer_support_payment: 83.30 * 52 scottish_carer_supplement: 0 - council_tax_reduction_applicable_income: 7_000 + 83.30 * 52 - council_tax_reduction_applicable_amount: (92.04 + 46.38) * 52 - # 2,000 - 0.2 x (11,331.60 - 7,197.84) = 1,173.25 - council_tax_reduction: 2_000 - 0.2 * (7_000 + 83.30 * 52 - (92.04 + 46.38) * 52) + council_tax_reduction_working_age_applicable_income: 7_000 + 83.30 * 52 + # Scotland's own 2025-26 working-age amounts (SSI 2025/24 reg 16): personal + # allowance 92.05 and carer premium 46.40 a week. + council_tax_reduction_working_age_applicable_amount: (92.05 + 46.40) * 52 + # 2,000 - 0.2 x (11,331.60 - 7,199.40) = 1,173.56 + council_tax_reduction: 2_000 - 0.2 * (7_000 + 83.30 * 52 - (92.05 + 46.40) * 52) - name: In 2024 the Scottish carer is still on Carer's Allowance, which was already counted period: 2024 diff --git a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml index 84ef38293e..2558661d18 100644 --- a/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml +++ b/policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_devolved_working_age.yaml @@ -508,7 +508,7 @@ council_tax: 2_000 savings: 0 output: - council_tax_reduction_working_age_unabsorbed_tax: 286 + council_tax_reduction_working_age_unearned_income_tax: 286 council_tax_reduction_working_age_applicable_income: 13_714 simulated_council_tax_reduction_benunit: 316.44 @@ -689,3 +689,271 @@ savings: 0 output: council_tax_reduction_working_age_adult_premiums: 2_246.40 + +- name: Wales, tax on a pension does not come off wages + # Only tax "deducted from those earnings" comes off earnings (Sch 6 para + # 15(3)(a)); tax on the pension is disregarded from the pension (Sch 9 para + # 4). Earnings are the lowest slice of income, so the £500 wages bear no tax + # and the 386 = 0.2 x (14,500 - 12,570) is all on the pension. Income: + # 500 - 260 (£5 disregard) + 14,000 - 386 = 13,854; applicable amount + # 101.85 x 52 = 5,296.20; award 1,800 - 0.2 x 8,557.80 = 88.44. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 60 + employment_income: 500 + private_pension_income: 14_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + income_tax: 386 + council_tax_reduction_working_age_earned_income: 500 + council_tax_reduction_working_age_earnings_disregard: 260 + council_tax_reduction_working_age_unearned_income_tax: 386 + council_tax_reduction_working_age_applicable_income: 13_854 + simulated_council_tax_reduction_benunit: 88.44 + +- name: Wales, pension tax survives when childcare absorbs the wages + # Lone parent, child aged 3, £10,000 wages at 16 hours, £13,000 pension, + # £9,000 childcare (under the £175 a week cap). The wages bear no tax; the + # 2,086 = 0.2 x (23,000 - 12,570) is on the pension. Earnings 10,000 - + # 1,300 (£25 disregard) - 9,000 childcare = 0 (the £17.10 needs earnings to + # cover it). Pension 13,000 - 2,086 = 10,914, below the applicable amount + # (101.85 + 87.88 child + 20.22 family premium) x 52 = 10,917.40, so the + # award is the full 1,800. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + parent: + age: 35 + employment_income: 10_000 + weekly_hours: 16 + private_pension_income: 13_000 + childcare_expenses: 9_000 + council_tax_benefit_reported: 100 + child: + age: 3 + benunits: + benunit: + members: [parent, child] + would_claim_uc: false + households: + household: + members: [parent, child] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_earned_income: 10_000 + council_tax_reduction_working_age_earnings_disregard: 1_300 + council_tax_reduction_working_age_childcare_deduction: 9_000 + council_tax_reduction_working_age_unearned_income_tax: 2_086 + council_tax_reduction_working_age_applicable_amount: 10_917.40 + council_tax_reduction_working_age_applicable_income: 10_914 + simulated_council_tax_reduction_benunit: 1_800 + +- name: Scotland, a pension counts gross and its tax does not come off wages + # SSI 2021/249 reg 50(3)(a) deducts tax "deducted from" the earnings; reg 57 + # counts the pension gross. The £4,000 wages bear no tax (the 271.70 is on + # the pension). Income 4,000 - 260 + 10,000 = 13,740; applicable amount + # 95.55 x 52 = 4,968.60; award 1,800 - 0.2 x 8,771.40 = 45.72. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + employment_income: 4_000 + weekly_hours: 20 + private_pension_income: 10_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + income_tax: 271.70 + council_tax_reduction_working_age_earned_income: 4_000 + council_tax_reduction_working_age_applicable_income: 13_740 + simulated_council_tax_reduction_benunit: 45.72 + +- name: Wales, dividend tax does not come off wages + # £15,000 wages and £10,000 dividends. Only the tax and NI on the wages + # come off them: 0.2 x 2,430 = 486 income tax and 0.08 x 2,430 = 194.40 + # Class 1, leaving 14,319.60. The dividend tax (1,021.25) is not deducted + # from earnings, and the dividends are not on the closed income list. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + employment_income: 15_000 + weekly_hours: 37 + dividend_income: 10_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + income_tax: 1_507.25 + council_tax_reduction_working_age_earned_income: 14_319.60 + council_tax_reduction_working_age_unearned_income: 0 + council_tax_reduction_working_age_unearned_income_tax: 0 + +- name: Wales, a carer premium on entitlement when an overlapping benefit takes the payment to nil + # Sch 7 para 14(1) needs the claimant to be "entitled to a carer's + # allowance"; contributory ESA of £6,000 overlaps it to nil. Applicable + # amount (101.85 + 48.15) x 52 = 7,800; income 6,000 ESA + 4,000 pension, + # untaxed; award 1,800 - 0.2 x 2,200 = 1,360. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + care_hours: 40 + esa_contrib_reported: 6_000 + private_pension_income: 4_000 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: WALES + country: WALES + council_tax: 1_800 + savings: 0 + output: + carers_allowance: 0 + council_tax_reduction_working_age_carers: 1 + council_tax_reduction_working_age_applicable_amount: 7_800 + council_tax_reduction_working_age_applicable_income: 10_000 + simulated_council_tax_reduction_benunit: 1_360 + +- name: Scotland, caring hours without a carer benefit or a Universal Credit award give no carer premium + # Sch 1 para 6(1)(c) needs "an award of universal credit which includes the + # carer element"; a potential element is not one. The claimant does not + # claim Carer Support Payment. £5 disregard; income 12,000 - 260 = 11,740; + # award 1,800 - 0.2 x (11,740 - 4,968.60) = 445.72. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 40 + employment_income: 12_000 + weekly_hours: 20 + care_hours: 40 + would_claim_carers_allowance: false + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + council_tax_reduction_working_age_carers: 0 + council_tax_reduction_working_age_earnings_disregard: 260 + simulated_council_tax_reduction_benunit: 445.72 + +- name: Scotland, a Universal Credit worker with LCWRA gets the £20 disregard + # Sch 3 para 4(3): the £20 also applies to a UC applicant with limited + # capability for work-related activity who is in employment and under + # pensionable age, with no disability premium. Earnings 12,000 (no tax or + # NI) - 1,040; no children, so no UC counts. Award 1,800 - 0.2 x (10,960 - + # 4,968.60) = 601.72. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 35 + employment_income: 12_000 + weekly_hours: 30 + uc_limited_capability_for_WRA: true + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: true + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + rent: 6_000 + savings: 0 + output: + council_tax_reduction_working_age_has_universal_credit: true + council_tax_reduction_working_age_earnings_disregard: 1_040 + council_tax_reduction_working_age_applicable_income: 10_960 + simulated_council_tax_reduction_benunit: 601.72 + +- name: Scotland, voluntary Class 3 contributions do not come off earnings + # Reg 50(3)(a) deducts "primary Class 1 contributions"; voluntary Class 3 + # is not deductible. Same award as without them: 445.72. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + claimant: + age: 35 + employment_income: 12_000 + weekly_hours: 20 + ni_class_3: 500 + council_tax_benefit_reported: 100 + benunits: + benunit: + members: [claimant] + would_claim_uc: false + households: + household: + members: [claimant] + region: SCOTLAND + country: SCOTLAND + council_tax: 1_800 + savings: 0 + output: + national_insurance: 500 + council_tax_reduction_working_age_earned_income: 12_000 + simulated_council_tax_reduction_benunit: 445.72 diff --git a/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py b/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py index 02e8d58779..2d88fac200 100644 --- a/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py +++ b/policyengine_uk/tests/test_council_tax_reduction_devolved_working_age_properties.py @@ -156,3 +156,109 @@ def test_income_related_esa_passports_to_the_full_liability(units): flag = sim.calculate("council_tax_reduction_working_age_passported", YEAR) assert flag.all() assert np.allclose(award, liability, atol=0.01) + + +def welsh_universal_credit_family(earnings, rent, statutory_maternity_pay=0): + return { + "region": "WALES", + "people": [ + { + "age": 30, + "employment_income": earnings, + "weekly_hours": 30, + "council_tax_benefit_reported": 100, + }, + {"age": 30, "statutory_maternity_pay": statutory_maternity_pay}, + {"age": 0}, + ], + "would_claim_uc": True, + "rent": rent, + "council_tax": 1_800, + "savings": 0, + "esa_income": 0, + } + + +def test_welsh_universal_credit_uses_the_universal_credit_income_figure(): + """Wales with Universal Credit (WSI 2013/3029 Sch 6 paras 3 and 9). + + The applicable amount is the UC maximum amount, and income is the + Secretary of State's income figure for the award plus the award. Earnings + are therefore whatever the UC model counts, statutory pay included or + not, so CTR and UC can never disagree on them. Differential check against + the UC variables, with and without statutory maternity pay. + """ + units = [ + welsh_universal_credit_family(6_000, 6_000), + welsh_universal_credit_family(6_000, 6_000, statutory_maternity_pay=5_000), + welsh_universal_credit_family(8_000, 6_000), + ] + sim = Simulation(situation=situation(units)) + earnings = sim.calculate("council_tax_reduction_working_age_earned_income", YEAR) + uc_earnings = sim.calculate("uc_individual_earned_income", YEAR, map_to="benunit") + award = sim.calculate( + "council_tax_reduction_working_age_universal_credit_award", YEAR + ) + income = sim.calculate("council_tax_reduction_working_age_applicable_income", YEAR) + applicable_amount = sim.calculate( + "council_tax_reduction_working_age_applicable_amount", YEAR + ) + assert sim.calculate( + "council_tax_reduction_working_age_has_universal_credit", YEAR + ).all() + assert np.allclose(earnings, uc_earnings, atol=0.01) + assert np.allclose( + income, + earnings + sim.calculate("uc_unearned_income", YEAR) + award, + atol=0.01, + ) + assert np.allclose( + applicable_amount, sim.calculate("uc_maximum_amount", YEAR), atol=0.01 + ) + + +def test_welsh_universal_credit_partial_award_does_not_depend_on_rent(): + """A targeted case for property 2, where the award is partial. + + Couple with a baby, £11,000 earnings (above the benefit cap's earnings + exemption) and rent of £6,000 or £13,000. The housing element raises both + the maximum amount and the award, so excess income, 0.45 x 11,000 + 0.55 + x 5,124 work allowance = 7,768.20, and the award, 1,800 - 0.2 x 7,768.20 + = 246.36, are the same at either rent. + """ + units = [ + welsh_universal_credit_family(11_000, 6_000), + welsh_universal_credit_family(11_000, 13_000), + ] + sim = Simulation(situation=situation(units)) + award = sim.calculate("simulated_council_tax_reduction_benunit", YEAR) + assert sim.calculate("benefit_cap_reduction", YEAR).max() == 0 + assert np.allclose(award, 246.36, atol=0.01) + + +def test_welsh_fixed_amounts_start_with_the_2013_scheme(): + """Wales's fixed working-age amounts apply from 1 April 2013, when the + Council Tax Reduction Schemes (Prescribed Requirements) (Wales) + Regulations 2012 (W.S.I. 2012/3144) set them. A parameter read before its + first date takes its earliest value, so check the first dates.""" + from policyengine_uk.system import system + + wales = system.parameters.gov.local_authorities.wales.council_tax_reduction + working_age = wales.working_age + first = { + "earnings_disregard.single": 5, + "earnings_disregard.couple": 10, + "earnings_disregard.lone_parent": 25, + "earnings_disregard.disability_or_carer": 20, + "earnings_disregard.additional": 17.10, + "tariff_income.threshold": 6_000, + "tariff_income.step": 250, + "tariff_income.amount": 1, + "childcare.maximum_one_child": 175, + "childcare.maximum_two_or_more_children": 300, + } + for name, value in first.items(): + parameter = working_age.get_child(name) + earliest = parameter.values_list[-1] + assert earliest.instant_str == "2013-04-01", name + assert earliest.value == value, name diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py index 433fdb8f70..83c3251545 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py @@ -16,7 +16,7 @@ "state_pension", "private_pension_income", "carers_allowance", - "carer_support_payment", + "carer_support_payment_pre_overlap", "esa_contrib", "jsa_contrib", "incapacity_benefit", diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py index d78e74b127..d6632bed91 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_unearned_income.py @@ -14,8 +14,9 @@ class council_tax_reduction_working_age_unearned_income(Variable): "than Universal Credit and tariff income from capital. Retirement " "pensions, contributory Jobseeker's Allowance and Employment and " "Support Allowance, carer's allowance, carer support payment (the " - "Carer Support Payment component; the Scottish Carer Supplement is a " - "separate variable that does not count), " + "Carer Support Payment component before any overlapping-benefit " + "reduction, as the pension-age route counts it; the Scottish Carer " + "Supplement is a separate variable that does not count), " "maternity allowance, industrial injuries benefit, incapacity benefit, " "severe disablement allowance and working and child tax credits " "count. Child Benefit, the income-related benefits, disability " @@ -44,7 +45,7 @@ def formula(benunit, period, parameters): "jsa_contrib", "esa_contrib", "carers_allowance", - "carer_support_payment", + "carer_support_payment_pre_overlap", "maternity_allowance", "iidb", "incapacity_benefit", From 8916273ecdf24972f8f0e826af59e7d545abaa80 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 4 Oct 2026 06:57:09 -0400 Subject: [PATCH 6/6] Document the Scottish carer disregard fallback and the Welsh UC statutory-pay inheritance Co-Authored-By: Claude Opus 5.5 --- .../council_tax_reduction/working_age/_earnings.py | 3 ++- ..._tax_reduction_working_age_earnings_disregard.py | 13 ++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py index 83c3251545..732c4e7f7a 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/_earnings.py @@ -34,7 +34,8 @@ def working_age_earnings(person, period): paras 15(3), 16). With an award of Universal Credit: - Wales uses the Secretary of State's figure for the award, which is the model's Universal Credit earned income before the work allowance - (Sch 6 para 9); + (Sch 6 para 9). It follows the Universal Credit model, which does not + yet count statutory pay as earnings (UC Regs 2013 reg 55(4)); - Scotland uses the Universal Credit measure plus statutory sick, maternity and paternity pay, which reg 49(4) treats as earnings. Without Universal Credit, employment and self-employment income and diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py index ea81a325d2..9f823b1738 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/working_age/council_tax_reduction_working_age_earnings_disregard.py @@ -20,7 +20,13 @@ class council_tax_reduction_working_age_earnings_disregard(Variable): "limited capability for work who is in employment); otherwise, with a " "carer benefit in payment, £20 of the carers' own " "earnings, plus up to £10 of a non-carer partner's earnings within the " - "same £20; otherwise £10 for a couple and £5 for a single applicant. " + "same £20. In Scotland, where the carer premium is included but no " + "one in the family has a carer benefit in payment (an award of " + "Universal Credit with the carer element, or a carer benefit an " + "overlapping benefit reduces to nil), the £20 is approximated against " + "the family's earnings, which can exceed the £10 limit on a non-carer " + "partner's earnings. Otherwise £10 for a couple and £5 for a single " + "applicant. " "Applicants without Universal Credit who meet a work condition have " "£17.10 more disregarded if their earnings cover the other disregard, " "their childcare charges and the £17.10; for a couple's disability " @@ -90,8 +96,9 @@ def rate(name): # Carer disregard: £20 of the carers' own earnings, plus up to £10 of a # non-carer partner's earnings within the £20 (Wales Sch 8 paras 6-7; # Scotland Sch 3 paras 6-7). Carers are identified by carer benefit - # receipt; a Scottish UC carer element with no carer benefit in the - # family falls back to the family's earnings. + # receipt. A Scottish carer premium with no carer benefit in payment + # in the family (a UC carer element, or a benefit overlapped to nil) + # falls back to the family's earnings, an approximation. is_carer = claimant_or_partner & person("receives_carer_benefit", period) carer_earnings = benunit.sum(is_carer * weekly_person_earnings) other_earnings = benunit.sum(