diff --git a/changelog.d/followups-1909-1945.changed.md b/changelog.d/followups-1909-1945.changed.md new file mode 100644 index 0000000000..3a3dae0686 --- /dev/null +++ b/changelog.d/followups-1909-1945.changed.md @@ -0,0 +1 @@ +- Note that the council tax reduction (CTR) capital-route loss in #1909 is an artefact of the `corporate_wealth` proxy, so CTR offsets in pension costings that rest on it should not be read as real effects. A pensioner whose Pension Credit award is savings credit only is tested against the CTR capital limit on Pension Credit's capital (`council_tax_reduction_assessable_capital`), and Pension Credit's capital sources count `corporate_wealth` but not `private_pension_wealth`. In datasets built before the `private_pension_wealth` split, `corporate_wealth` also holds imputed pension wealth, which Pension Credit disregards (State Pension Credit Regulations 2002 Sch V paras 22 and 23), so these pensioners can fail the £16,000 limit on pension wealth that is not countable capital. A benefit unit that records `pension_credit_reported_capital` bypasses the proxy. See #1837 and #1936. Two CTR test cases pin the route, and a new Housing Benefit case pins the savings-credit-only route of #1945 for a household built from age, pensions, rent, tenure and capital alone. diff --git a/policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/housing_benefit_savings_credit_only.yaml b/policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/housing_benefit_savings_credit_only.yaml index 1c45251f4f..bc8af60aad 100644 --- a/policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/housing_benefit_savings_credit_only.yaml +++ b/policyengine_uk/tests/policy/baseline/finance/benefit/family/housing_benefit/housing_benefit_savings_credit_only.yaml @@ -25,12 +25,13 @@ # reached it before April 2016, so can have savings credit, and pays no # National Insurance. # -# Robustness to the other open Housing Benefit fixes: the tenants rent from -# the council, so the Local Housing Allowance order cannot apply; every case -# sets housing_benefit_applicable_income_disregard to the value the earnings -# disregard fix (PolicyEngine/policyengine-uk#1908) gives, 0 for a family with -# no earnings; and no claimant has a disability benefit, so the severe -# disability premium fix (#1938) does not change the applicable amount. +# Robustness to the other Housing Benefit fixes: the tenants rent from the +# council, so the Local Housing Allowance order cannot apply; cases 1 to 8 +# set housing_benefit_applicable_income_disregard to the value the earnings +# disregard fix (PolicyEngine/policyengine-uk#1908, merged) gives, 0 for a +# family with no earnings, and case 9 leaves it to the model; and no claimant +# has a disability benefit, so the severe disability premium fix (#1938) does +# not change the applicable amount. - name: Case 1, savings credit only, the savings credit payable is added to the Pension Credit income. period: 2026 @@ -325,3 +326,78 @@ # 12,914, below the applicable amount of 13,312. housing_benefit_applicable_income: 12_914 housing_benefit: 7_800 + +- name: Case 9, savings credit only, no earnings, built from age, pensions, rent, tenure and capital alone, with nothing overridden. + period: 2026 + absolute_error_margin: 0.01 + # A regression guard for the integrated route (reviewer request on #1945, 1 + # and 5 October 2026). The inputs are only age, pensions, rent, tenure and + # savings: no Housing Benefit disregard, no childcare, and no Pension Credit + # or Housing Benefit income intermediate is set, so every figure below is + # the model's own. Cases 1 to 8 set the earnings disregard directly. + # + # Law, SI 2006/214 reg 27 (NI: SR 2006/406 reg 25), read on + # legislation.gov.uk on 5 October 2026: (1) the authority uses the Secretary + # of State's calculation of income and capital for the savings-credit-only + # award; (4) it modifies the net income "only in so far as necessary to take + # into account" (a) the savings credit payable, (b) childcare charges, (c) + # and (d) the higher earnings and additional disregards, (e) to (g) items + # outside this household; (5) its own income rules, tariff income included, + # do not apply to the Secretary of State's figure; (6) capital is the + # Secretary of State's, with the £16,000 limit applied to it. + # + # 2026 parameters, as in the cases above: minimum guarantee £238.00 a week + # single (12,376 a year); savings credit threshold £208.07 (10,819.64), + # phase-in 60% and withdrawal 40%; Housing Benefit aged personal allowance + # £256.00 (13,312); taper 65%; personal allowance 12,570 and basic rate 20%. + input: + people: + person1: + age: 83 + state_pension: 10_200 + private_pension_income: 3_100 + benunits: + benunit: + members: [person1] + households: + household: + members: [person1] + rent: 6_240 + tenure_type: RENT_FROM_COUNCIL + savings: 13_900 + output: + # (10,200 + 3,100 - 12,570) x 0.2 = 730 x 0.2 = 146. + income_tax: 146 + # (13,900 - 10,000) / 500 = 7.8, so 8 steps of £1 a week; 8 x 52 = 416. + pension_credit_assessable_capital: 13_900 + pension_credit_deemed_income: 416 + # The Secretary of State's net income: 13,300 - 146 + 416 = 13,570. Above + # the minimum guarantee of 12,376, so no guarantee credit. + pension_credit_income: 13_570 + guarantee_credit: 0 + # Savings credit payable: the maximum is 0.6 x (12,376 - 10,819.64) = + # 933.816, below 0.6 x (13,570 - 10,819.64) = 1,650.216, so it is the + # maximum; less 0.4 x (13,570 - 12,376) = 477.60; 933.816 - 477.60 = + # 456.216. + savings_credit: 456.22 + pension_credit: 456.22 + in_receipt_of_savings_credit_only: true + # The reg 27(4) modification to the net income of 13,570: (a) adds the + # savings credit payable, 456.216. There is no (b) childcare, and with no + # earnings no (c) or (d) disregard, so the modification is +456.216. + housing_benefit_applicable_income_childcare_element: 0 + housing_benefit_applicable_income_disregard: 0 + # 13,570 + 456.216 - 0 - 0 = 14,026.216. Without (a) it would be 13,570. + housing_benefit_savings_credit_only_income: 14_026.22 + # Reg 27(5): no Housing Benefit tariff income on top of the deemed income + # inside the 13,570. + housing_benefit_tariff_income: 0 + housing_benefit_applicable_income: 14_026.22 + housing_benefit_applicable_amount: 13_312 + # Reg 27(6): the Secretary of State's capital, 13,900, within the limit. + housing_benefit_assessable_capital: 13_900 + housing_benefit_eligible: true + # 6,240 - 0.65 x (14,026.216 - 13,312) = 6,240 - 0.65 x 714.216 = + # 6,240 - 464.2404 = 5,775.7596. Without (a), 6,240 - 0.65 x (13,570 - + # 13,312) = 6,240 - 167.70 = 6,072.30. + housing_benefit: 5_775.76 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..e07ff2f6f8 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 @@ -616,3 +616,91 @@ in_receipt_of_savings_credit_only: true council_tax_reduction_assessable_capital: 16_000.01 council_tax_reduction: 0 + +# The next two cases pin the route behind the capital-route loss of #1909, so +# that the loss is not read as a real effect (see also #1837 and #1936). A +# savings-credit-only recipient is tested against the CTR capital limit on the +# Pension Credit figure, and Pension Credit's capital sources count +# `corporate_wealth` but not `private_pension_wealth`: State Pension Credit +# Regulations 2002 Sch V paras 22 and 23 disregard the value of a right to +# receive income from an occupational or personal pension scheme or under a +# retirement annuity contract. In datasets built before the +# `private_pension_wealth` split, `corporate_wealth` also holds imputed pension +# wealth, so there the first case's exclusion rests on pension wealth that +# Pension Credit does not count. The rule in the first case counts +# `corporate_wealth` whatever it holds, and stays as written once a dataset +# splits the column; what changes is the value the dataset gives +# `corporate_wealth`. + +- name: Savings credit only, corporate_wealth counts as Pension Credit capital, so a pensioner with nil household savings is over the CTR capital limit + period: 2026 + absolute_error_margin: 0.01 + input: + people: + pensioner: + age: 90 + state_pension: 12_000 + private_pension_income: 1_500 + benunits: + benunit: + members: [pensioner] + claims_all_entitled_benefits: true + households: + household: + members: [pensioner] + country: ENGLAND + local_authority: MAIDSTONE + tenure_type: OWNED_OUTRIGHT + council_tax: 2_000 + savings: 0 + corporate_wealth: 20_000 + output: + # (12,000 + 1,500 - 12,570) x 0.2 = 186. (20,000 - 10,000) / 500 = 20 + # steps of £1 a week; 20 x 52 = 1,040 of deemed income. + pension_credit_assessable_capital: 20_000 + pension_credit_deemed_income: 1_040 + # 13,500 - 186 + 1,040 = 14,354, above the minimum guarantee of 12,376. + pension_credit_income: 14_354 + guarantee_credit: 0 + # 933.816 - 0.4 x (14,354 - 12,376) = 933.816 - 791.20 = 142.616. + savings_credit: 142.62 + in_receipt_of_savings_credit_only: true + # The Pension Credit capital is 20,000, over 16,000, with nil savings in + # the household. The same pensioner with 20,000 of private_pension_wealth + # keeps CTR in the next case. + council_tax_reduction_assessable_capital: 20_000 + council_tax_reduction: 0 + +- name: Savings credit only, private_pension_wealth is not Pension Credit capital, so it does not take the pensioner over the CTR capital limit + period: 2026 + absolute_error_margin: 0.01 + input: + people: + pensioner: + age: 90 + state_pension: 12_000 + private_pension_income: 1_500 + benunits: + benunit: + members: [pensioner] + claims_all_entitled_benefits: true + households: + household: + members: [pensioner] + country: ENGLAND + local_authority: MAIDSTONE + tenure_type: OWNED_OUTRIGHT + council_tax: 2_000 + savings: 0 + private_pension_wealth: 20_000 + output: + # No capital counts, so no deemed income: as with no wealth at all, + # 13,500 - 186 = 13,314 and 933.816 - 0.4 x (13,314 - 12,376) = 558.616. + pension_credit_assessable_capital: 0 + pension_credit_deemed_income: 0 + pension_credit_income: 13_314 + savings_credit: 558.62 + in_receipt_of_savings_credit_only: true + council_tax_reduction_assessable_capital: 0 + # 2,000 - 0.2 x (13,314 + 558.616 - 13,312) = 2,000 - 112.1232 = 1,887.8768. + council_tax_reduction: 1_887.88