diff --git a/changelog.d/2820.fixed.md b/changelog.d/2820.fixed.md new file mode 100644 index 0000000000..1c274f9489 --- /dev/null +++ b/changelog.d/2820.fixed.md @@ -0,0 +1 @@ +Scottish working-age Council Tax Reduction counts Carer Support Payment after the overlapping-benefit reduction, so a carer whose contributory ESA or another overlapping benefit reduces it to nil has none counted. 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 45a9f2ec1f..6613b39b05 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 @@ -155,19 +155,18 @@ # 2,000 - 0.2 x (7,000 - 4,968.60) council_tax_reduction: 2_000 - 0.2 * (7_000 - 95.55 * 52) -- name: A working-age carer on contributory ESA above the Carer Support Payment rate has it counted in Council Tax Reduction +- name: A working-age carer whose contributory ESA reduces Carer Support Payment to nil has none counted in Council Tax Reduction # Contributory ESA (96.15 a week here) is an overlapping benefit, so CSP - # Regs (SSI 2023/302) reg 16(2)(b) reduces the CSP given to nil. Until it is - # decided which amount CTR counts, CTR counts the 86.45 x 52 before the - # reduction (carer_support_payment_pre_overlap). - # SSI 2021/249 reg 57(1)(b) counts CSP "to which the applicant is entitled, - # subject to any adjustment ... in accordance with Regulations under - # section 73 of the Social Security Administration Act 1992"; reg 16(2) is - # made under the Social Security (Scotland) Act 2018, not section 73. - # Whoever settles which amount CTR counts must update this case; it fails - # if CTR income silently drops the CSP. Taxable income, - # 5,000 + 4,495.40 + 608.40 = 10,103.80, is below the personal allowance - # either way. + # Regs (SSI 2023/302) reg 16(2)(b) reduces the CSP given to nil. SSI + # 2021/249 reg 57(1)(b) counts benefits "to which the applicant is + # entitled". We read that as the CSP the carer "is entitled to be given + # under a determination" (Social Security (Scotland) Act 2018 s. 24), + # which reg 16(2) sets at nil here. Counting the 86.45 x 52 before the + # reduction would count both the ESA and the CSP it replaces. The carer + # premium still applies: Sch 1 para 6(1)(b) covers a carer who would be in + # receipt of CSP but for reg 16. The case fails if the working-age route + # counts CSP before the reduction. The personal allowance covers the + # taxable income of 5,000. period: 2026 absolute_error_margin: 0.01 input: @@ -192,16 +191,16 @@ carer_support_payment: 0 carer_support_payment_pre_overlap: 86.45 * 52 income_tax: 0 - # 5,000 + 4,495.40. Leaving the CSP out would give 5,000, below the - # 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 + # The ESA alone. Counting the CSP before the reduction would give + # 5,000 + 4,495.40 = 9,495.40 and an award of + # 2,000 - 0.2 x (9,495.40 - 7,472.40) = 1,595.40. Scotland's 2026-27 + # working-age amounts (SSI 2026/56 reg 14): 95.55 plus the 48.15 carer + # premium. + council_tax_reduction_working_age_applicable_income: 5_000 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 + # The applicable amount of 7,472.40 exceeds the income, so the award is + # the whole bill. + council_tax_reduction: 2_000 - name: Carer Support Payment counts in 2025, before the Scottish Carer Supplement period: 2025 diff --git a/policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py b/policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py index b27915d2ef..681fac487a 100644 --- a/policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py +++ b/policyengine_uk/tests/test_council_tax_reduction_carer_income_properties.py @@ -72,16 +72,18 @@ 5. Counts the component on the devolved route: claiming Carer Support Payment raises the working-age unearned income by exactly the Carer Support Payment - component before any overlapping-benefit reduction (SSI 2021/249 reg + paid after any overlapping-benefit reduction (SSI 2021/249 reg 57(1)(b)(iva)), and, where the claim is not passported, raises the working-age income less net earnings after the disregard by the same amount: without children or Universal Credit that income is net earnings less the disregard (never more than the earnings), plus unearned income, plus tariff income, and the claim changes no capital. The working-age applicable amount rises by exactly one Scottish carer premium (Sch 1 para - 6(1)). The reduction never rises, and where both awards are partial it - falls by 20% of the rise in working-age income less the rise in the - working-age applicable amount. + 6(1)), even where an overlapping benefit reduces the payment to nil. + Where the claim is not passported, the reduction moves against the rise + in working-age income less the rise in the working-age applicable amount: + it never rises where that difference is positive, never falls where it is + negative, and where both awards are partial it falls by 20% of it. 6. The supplement on the devolved route: setting the Scottish Carer Supplement to zero leaves the working-age unearned income, the working-age applicable amount, and the working-age income less net earnings after the @@ -103,10 +105,12 @@ benefit the model pays. The model reduces Carer Support Payment by overlapping benefits such as State Pension (the Carer's Assistance (Carer Support Payment) (Scotland) Regulations 2023 reg 16(2)), and the supplement -with it. Whether Council Tax Reduction counts the payment before or after -that reduction is unsettled; until it is decided the model counts -carer_support_payment_pre_overlap. It applies the Housing Benefit applicable -amounts to every nation's Council Tax Reduction. +with it. The devolved working-age route counts the payment after that +reduction (carer_support_payment). Whether the shared formula, which +pension-age Scottish claims follow, counts it before or after stays open; +until a ruling settles it, that formula counts +carer_support_payment_pre_overlap. The model applies the Housing Benefit +applicable amounts to every nation's Council Tax Reduction. """ import numpy as np @@ -198,6 +202,17 @@ country="SCOTLAND", council_tax=2_000.0, ) +# A Scottish working-age carer whose contributory ESA (96.15 a week) reduces +# Carer Support Payment to nil: on the devolved route the claim brings only +# the carer premium, so it can raise the reduction. +ESA_OVERLAP_CARER = dict( + pension_age=False, + adults=[dict(age=40, employment_income=0.0, esa_contrib_reported=5_000.0)], + carer=0, + by_hours=True, + country="SCOTLAND", + council_tax=2_000.0, +) def money(high): @@ -252,6 +267,10 @@ def situation(families): # All private pension goes to the first adult. "private_pension_income": {YEAR: float(pension) * (j == 0)}, } + if "esa_contrib_reported" in a: + person["esa_contrib_reported"] = { + YEAR: a["esa_contrib_reported"] + } if j == fam["carer"]: # Keep the carer's pay within the Carer's Allowance # earnings limit (£204 a week in 2026-27), so the @@ -338,24 +357,24 @@ def check_devolved_carer_claim(g, i, fam): # The scheme follows the family's ages, not the claim. assert np.all(g["devolved"][i, :, 0] == g["devolved"][i, :, 1]), fam unearned = g["council_tax_reduction_working_age_unearned_income"][i] + paid = g["carer_support_payment"][i, :, 0] + pre_overlap = g["carer_support_payment_pre_overlap"][i, :, 0] assert np.allclose( - (unearned[:, 0] - unearned[:, 1])[devolved], - g["carer_support_payment_pre_overlap"][i, :, 0][devolved], - atol=0.01, + (unearned[:, 0] - unearned[:, 1])[devolved], paid[devolved], atol=0.01 ), (fam, unearned) - assert np.allclose( - g["carer_support_payment_pre_overlap"][i, :, 0][devolved], - CARER_SUPPORT_PAYMENT, - atol=0.01, - ), fam + # The claim is a full award before any overlapping-benefit reduction, + # which never adds to it. + assert np.allclose(pre_overlap[devolved], CARER_SUPPORT_PAYMENT, atol=0.01), fam + assert np.all((paid <= pre_overlap + 0.01)[devolved]), fam income = g["council_tax_reduction_working_age_applicable_income"][i] passported = g["council_tax_reduction_working_age_passported"][i].astype(bool) assessed = devolved & ~passported[:, 0] & ~passported[:, 1] other_income = income_other_than_earnings(g)[i] other_income_rise = other_income[:, 0] - other_income[:, 1] - assert np.allclose(other_income_rise[assessed], CARER_SUPPORT_PAYMENT, atol=0.05), ( + assert np.allclose(other_income_rise[assessed], paid[assessed], atol=0.05), ( fam, other_income_rise[assessed], + paid[assessed], ) amount = g["council_tax_reduction_working_age_applicable_amount"][i] amount_rise = amount[:, 0] - amount[:, 1] @@ -364,10 +383,14 @@ def check_devolved_carer_claim(g, i, fam): amount_rise[devolved], ) award = g["council_tax_benefit"][i] - assert np.all((award[:, 0] <= award[:, 1] + 0.01)[devolved]), fam - both_partial = partial(g, i)[:, 0] & partial(g, i)[:, 1] & assessed excess_rise = (income[:, 0] - amount[:, 0]) - (income[:, 1] - amount[:, 1]) fall = award[:, 1] - award[:, 0] + # The award moves against the excess of working-age income over the + # applicable amount. Where an overlapping benefit cuts the payment below + # the carer premium, claiming raises the reduction. + assert np.all((fall >= -0.01)[assessed & (excess_rise > 0)]), fam + assert np.all((fall <= 0.01)[assessed & (excess_rise < 0)]), fam + both_partial = partial(g, i)[:, 0] & partial(g, i)[:, 1] & assessed assert np.allclose( fall[both_partial], WITHDRAWAL_RATE * excess_rise[both_partial], atol=0.05 ), (fam, fall[both_partial], excess_rise[both_partial]) @@ -376,6 +399,7 @@ def check_devolved_carer_claim(g, i, fam): @PROPERTY_SETTINGS @given(st.lists(family(), min_size=1, max_size=3)) @example([SAVINGS_CREDIT_CARER]) +@example([ESA_OVERLAP_CARER]) def test_council_tax_reduction_income_counts_the_carer_support_payment_component( families, ): diff --git a/policyengine_uk/tests/test_pension_credit_carer_income_properties.py b/policyengine_uk/tests/test_pension_credit_carer_income_properties.py index be33c492f2..f3dafb623a 100644 --- a/policyengine_uk/tests/test_pension_credit_carer_income_properties.py +++ b/policyengine_uk/tests/test_pension_credit_carer_income_properties.py @@ -4,7 +4,7 @@ although the State Pension Credit Regulations 2002 reg 15(1) prescribe "all social security benefits" as income except those they list, and neither is listed. Pension-age Housing Benefit counted both, and Council Tax Reduction -counted Carer's Allowance (it does not yet count Carer Support Payment: #1955). +counted Carer's Allowance (it did not yet count Carer Support Payment, #1955). While Guarantee Credit was paid, both were passported to their maximum and hid the difference; when Guarantee Credit ended, both were assessed on the Carer's Allowance that Pension Credit had ignored, so a pensioner couple whose diff --git a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_applicable_income.py b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_applicable_income.py index 5af65bdeab..18d8d81c89 100644 --- a/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_applicable_income.py +++ b/policyengine_uk/variables/gov/local_authorities/council_tax_reduction/council_tax_reduction_applicable_income.py @@ -85,6 +85,9 @@ class council_tax_reduction_applicable_income(Variable): "https://www.legislation.gov.uk/ssi/2012/319/regulation/25", "https://www.legislation.gov.uk/ssi/2012/319/regulation/27", "https://www.legislation.gov.uk/ssi/2021/249/regulation/57", + "https://www.legislation.gov.uk/ssi/2023/302/regulation/16", + "https://www.legislation.gov.uk/uksi/2002/1792/regulation/15", + "https://www.legislation.gov.uk/uksi/2006/214/regulation/29", "https://www.legislation.gov.uk/uksi/2012/2885/schedule/5/paragraph/7", "https://www.legislation.gov.uk/uksi/2012/2885/schedule/5/paragraph/20", "https://www.legislation.gov.uk/uksi/2012/2886/appendix/8/paragraph/21", @@ -162,13 +165,17 @@ def formula(benunit, period, parameters): # reg 27(1)(j) at pension age. Neither counts the Scottish Carer # Supplement (reg 57(1) does not list it; reg 27(1)(j)(xxib) # excepts it), so scottish_carer_supplement is not listed. - # Whether CTR counts CSP before or after the CSP Regs reg 16(2) - # overlapping-benefit reduction is unsettled: SSI 2012/319 reg - # 27(3) grosses up deductions other than the reg 27(5) - # adjustments, which do not list reg 16(2), while SSI 2021/249 reg - # 57(1)(b) counts the amount the applicant is entitled to. Until - # that is decided, the amount before the reduction is counted, as - # it was before the reduction was modelled. + # Scottish working-age claims follow the devolved route, which + # counts CSP after the CSP Regs (SSI 2023/302) reg 16(2) + # overlapping-benefit reduction + # (council_tax_reduction_working_age_unearned_income). For the + # pension-age scheme the question stays open: SSI 2012/319 reg + # 27(3) counts a benefit before any deduction other than the reg + # 27(5) adjustments, and reg 27(5) doesn't list reg 16(2), while + # the Pension Credit and pension-age Housing Benefit regulations + # do (SI 2002/1792 reg 15(4)(g); SI 2006/214 reg 29(4)(g)). Until + # a ruling settles it, this formula counts the amount before the + # reduction, as it did before the model applied the reduction. "carer_support_payment_pre_overlap", "esa_contrib", "jsa_contrib", 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 562b8f868a..41979be5e7 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 @@ -15,9 +15,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 before any overlapping-benefit " - "reduction, as the pension-age route counts it; the Scottish Carer " - "Supplement is a separate variable that does not count), " + "Carer Support Payment component after any overlapping-benefit " + "reduction; the Scottish Carer Supplement is a separate variable " + "that does not count), " "maternity allowance, industrial injuries benefit, incapacity benefit, " "severe disablement allowance, Part 5 miscellaneous income and " "working and child tax credits count. Child Benefit, the " @@ -33,6 +33,9 @@ class council_tax_reduction_working_age_unearned_income(Variable): 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/ssi/2023/302/regulation/16", + "https://www.legislation.gov.uk/asp/2018/9/section/24", + "https://www.socialsecurity.gov.scot/publications/2017/07/carer-support-payment-decision-making-guide/pages/payment-of-carer-support-payment/effect-on-other-benefits-for-carer-support-payment-clients", "https://www.legislation.gov.uk/wsi/2013/3029/schedule/6/paragraph/17", "https://www.legislation.gov.uk/wsi/2013/3029/schedule/9", ) @@ -49,7 +52,14 @@ def formula(benunit, period, parameters): "jsa_contrib", "esa_contrib", "carers_allowance", - "carer_support_payment_pre_overlap", + # Carer Support Payment after the CSP Regs (SSI 2023/302) reg + # 16(2) overlapping-benefit reduction. Reg 57(1)(b) counts + # benefits "to which the applicant is entitled". We read that + # as the CSP the carer "is entitled to be given under a + # determination" (Social Security (Scotland) Act 2018 s. 24), + # the amount reg 16(2) reduces. Social Security Scotland's + # guidance also takes the CSP a carer receives into account. + "carer_support_payment", "maternity_allowance", "iidb", "incapacity_benefit",