Skip to content

Count UC carer awards for severe disability and Scottish CTR premiums - #2827

Open
MaxGhenis wants to merge 22 commits into
mainfrom
claude/uc-carer-awards-nits-1pezj2
Open

MaxGhenis wants to merge 22 commits into
mainfrom
claude/uc-carer-awards-nits-1pezj2

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #2120
Fixes #2124

What and why

DWP and councils count Universal Credit carer-element awards, as they count Carer's Allowance and Carer Support Payment, when deciding the premiums and additions below. The model left the awards out.

  • Severe disability premium and Pension Credit addition (Count Universal Credit carer-element awards in the severe disability premium and addition carer test #2120). DWP and councils withhold the premium or addition when a carer "has an award of universal credit which includes the carer element in respect of caring for" the claimant (HB Regs 2006 Sch 3 para 14(2)(a)(iii) and (b)(iii); HB(SPC) Regs 2006 Sch 3 para 6(2); IS Regs 1987 Sch 2 para 13(2); SPC Regs 2002 Sch I para 1(1)(a)(iii), (b), (c)(iv) and (4)). Councils apply the same words in England's, Wales's and Scotland's pension-age council tax reduction schemes. is_cared_for_by_carer_benefit_recipient attributed only Carer's Allowance and Carer Support Payment.
  • Scotland's working-age CTR carer premium (Scottish working-age CTR carer premium ignores the UC carer element limb (SSI 2021/249 Sch 1 para 6(1)(c)) #2124). The Scottish Ministers require councils to include the premium for an applicant or partner who has "an award of universal credit which includes the carer element described in regulation 29" (SSI 2021/249 Sch 1 para 6(1)(c)). carer_premium applied limbs (a) and (b) only. No other scheme's carer premium has limb (c): under HB Regs 2006 Sch 3 para 17, HB(SPC) Sch 3 para 9, IS Sch 2 para 14ZA, England SI 2012/2885 Sch 2 para 9, Wales WSI 2013/3029 Sch 2 para 9 and Sch 7 para 14, Scotland SSI 2012/319 Sch 1 para 10 and the pre-2022 SSI 2012/303 Sch 1 para 14, DWP and councils test entitlement to Carer's Allowance or Carer Support Payment.

Changes

  • has_uc_award_with_carer_element (Person) reads the carer's actual award. It counts a claimant in respect of whom the award includes the carer element (uc_carer_element_included_for_claimant) where the family's award before the benefit cap (universal_credit_pre_benefit_cap) comes to more than nil. Parliament makes it a financial condition of an award that the amount payable reach the prescribed minimum (Welfare Reform Act 2012 s.5(1)(b) and (2)(b)), and DWP sets that minimum at one penny (UC Regs 2013 reg 17). SPC Sch I para 1(4) asks whether "the person has an award of universal credit which includes an amount which is the carer element under regulation 29". So a carer whose award comes to nil, however it gets there, has no award and no longer bars the premium or addition. Where an input or a scenario stores universal_credit for the period, or a reform neutralizes it, the test reads the award itself (receives_uc_carer_element): reading a stored award runs no formula, so it cannot cycle. universal_credit joins SUPPLIED_INPUT_VARIABLES for that check.
  • The award before the cap. universal_credit subtracts the benefit cap reduction, which reads Child Tax Credit, whose income reads Pension Credit, whose addition reads the carer test, so a carer test that read universal_credit would cycle. The award before the cap and the final award agree for a family whose award includes the carer element: DWP exempts that award from the cap (UC Regs 2013 reg 83(1)(j); is_uc_benefit_cap_exempt_specified_benefit), and uc_deductions leaves at least one penny payable. Invariant 5 checks that agreement.
  • is_cared_for_by_carer_benefit_recipient counts a carer-element holder as a carer, in the existing attribution order: claimants and partners of the carer's own benefit unit first, then other members, then claimants and partners of other benefit units, eldest unit first. A carer with both Carer's Allowance and a carer element counts once (SSCBA 1992 s.70(7)). Partners caring for the same severely disabled person have one relevant entitlement between them (s.70(7ZA) and (7A)), so where one receives a carer benefit, the other's carer element adds no second carer.
  • New council_tax_reduction_carer_premium (BenUnit). council_tax_reduction_premiums reads it at working age in the same way as council_tax_reduction_severe_disability_premium. Outside Scotland's working-age scheme it equals carer_premium. In Scotland it counts each claimant or partner entitled to Carer's Allowance or Carer Support Payment (limbs (a) and (b), as carer_premium) or with an award of at least one penny that includes the carer element (limb (c), receives_uc_carer_element), in every year from 2022-23. It counts each person once (paras 5(2) and 6(1)), and only one of two partners who care for the same person (para 5(3) and (4)). Councils give the carer-element holder priority under para 5(4), which leaves the amount unchanged.
  • Parameter gov.local_authorities.scotland.council_tax_reduction.working_age.carer_premium_counts_uc_carer_element: false from 1 April 2013, true from 1 April 2022.
  • Documentation of severe_disability_premium, pension_age_severe_disability_premium, severe_disability_minimum_guarantee_addition, carer_premium and council_tax_reduction_premiums now describes the limb. The documentation of uc_non_dep_receives_pension_credit now says when its branch's Pension Credit can differ from the family's own: where the family's severe disability addition reads a renter's carer element, the branch reads that award without housing costs. A household head who applies alone holds no Universal Credit award of their own in the model, so the head branch of council_tax_reduction_premiums keeps its carer test.

Three routes to a nil award, and the executed case

Each of these awards comes to nil, so the carer has no award, and the model now pays the premium or addition. policyengine_uk/tests/test_uc_carer_element_award_properties.py asserts each, after premise checks that raise RuntimeError.

  • A non-dependant deduction (test_a_non_dependant_deduction_that_takes_the_award_to_nil_leaves_no_award). A carer aged 40, not blind, cares 35 hours a week for a disabled person aged 50 on the PIP daily living component and earns £27,000. The carer and the disabled person rent a home privately, each liable for half of £12,000, and a blind non-dependant aged 30 earning £20,000 lives with them. DWP deducts £96.55 × 12 = £1,158.60 a year for the non-dependant (UC Regs 2013 Sch 4 paras 13 and 16; blindness brings no exemption, and para 15 does not exempt the carer: the carer claims alone, and the Schedule reserves "joint renters" for joint claimants (para 1(2)), so the disabled co-tenant's PIP brings the carer no exemption under para 15(1)(b)). The carer's housing costs element falls to £6,000 − £1,158.60 = £4,841.40 and the maximum amount to £12,452.28, which the taper of 0.55 × £22,959.60 = £12,627.78 exceeds, so the award comes to nil. DWP does not count the disabled person, a joint tenant, as the carer's non-dependant (para 9(2)(d)), and the council does not count the carer as the disabled person's (HB Regs 2006 reg 3(2)(d)). A blind non-dependant does not bar the disabled person's premium (Sch 3 para 14(4)). The model now pays the disabled person the premium of £86.05 × 52 = £4,474.60.
  • Tax-Free Childcare (test_a_family_that_takes_tax_free_childcare_instead_has_no_award). A blind carer aged 35, earning £60,000, has a child aged 3 in £12,000 of childcare, and the disabled person aged 60 on the PIP daily living component lives in another benefit unit of the household. The family's award would come to £21,458.16 − £20,260.57 = £1,197.59, and Tax-Free Childcare to £2,000, so the family takes no award (forgoes_universal_credit_for_tax_free_childcare). The model now pays the disabled person the premium of £4,474.60.
  • A small housing costs element with a work allowance (test_small_housing_costs_with_a_work_allowance_leave_no_award). A blind carer aged 35 cares 35 hours a week for a disabled person aged 60 on the PIP daily living component, who lives in another benefit unit of the household and claims no Universal Credit. DWP has determined that the carer has limited capability for work (UC Regs 2013 reg 39(1)(a)), and under reg 41(1A) cannot treat the carer's paid work as a relevant change of circumstances when it decides whether to reassess that determination (reg 41(1)(b)). So the award has a work allowance (reg 22(1)(b)) and the carer element too: DWP puts the LCWRA element in its place only for a claimant who also has limited capability for work-related activity (reg 29(4)). The carer earns £25,000, claims no Carer's Allowance and pays the council £600 a year in rent. After income tax of £2,486.00 and National Insurance of £994.40, the carer keeps earned income of £21,519.60. With a housing costs element of £600, DWP applies the lower work allowance, £427 × 12 = £5,124 (reg 22(2)(b)). DWP's reduction of 0.55 × (£21,519.60 − £5,124) = £9,017.58 exceeds the maximum amount, (£424.90 + £209.34) × 12 + £600 = £8,210.88, so the award comes to nil. The council ignores the blind carer as a resident (HB Regs 2006 Sch 3 para 14(4)(b)), and the model now pays the disabled person the premium of £4,474.60.
  • The executed case (uc_carer_element_carer_test.yaml, the case "A blind carer whose award comes to nil with a small housing costs element does not bar a pensioner's addition"). The carer of the third route, now the household head, cares for a person aged 75 in another benefit unit who receives Attendance Allowance at the higher rate, £114.60 × 52 = £5,959.20, and £10,000 of State Pension. The carer's award comes to nil as above. DWP ignores the blind carer as a resident (SPC Sch I para 2(2)(b)), and no one has an award including the carer element in respect of caring for the pensioner, so DWP includes the addition, £86.05 × 52 = £4,474.60. The minimum guarantee comes to £238.00 × 52 + £4,474.60 = £16,850.60, and against £10,000 of State Pension, guarantee credit comes to £6,850.60; qualifying income of £192.31 a week falls short of the savings credit threshold of £208.07. Household net income comes to £25,000 + £10,000 + £5,959.20 + £6,850.60 + £200 Winter Fuel Payment + £100 Household Energy Payment − £2,486.00 − £994.40 = £44,629.40. Counting the carer would take the addition away and leave Pension Credit at £2,376.00 and household net income at £40,154.80; the model now gives £6,850.60 and £44,629.40.

The cycle and where the model cuts it

The carer test reads the award, and three routes lead from the award back to the carer test:

  • The non-dependant deduction. With the cut removed, a trace runs universal_credit_pre_benefit_cap → uc_maximum_amount → uc_housing_costs_element → uc_non_dep_deductions → uc_individual_non_dep_deduction → uc_individual_non_dep_deduction_eligible → uc_non_dep_deduction_exempt → uc_non_dep_receives_pension_credit → pension_credit → … → severe_disability_minimum_guarantee_addition → is_cared_for_by_carer_benefit_recipient → has_uc_award_with_carer_element.
  • Tax-Free Childcare. forgoes_universal_credit_for_tax_free_childcare reads uc_maximum_amount and uc_income_reduction, and so the same housing costs element.
  • The benefit cap. universal_credit → uc_benefit_cap_reduction_after_floor → uc_benefit_cap_reduction → benefit_cap_welfare_benefits → child_tax_credit → ctc_entitlement → child_tax_credit_pre_minimum → tax_credits_reduction → tax_credits_applicable_income → pension_credit.

uc_non_dep_receives_pension_credit already calculates the non-dependant family's Pension Credit in a branch (simulation.get_branch) with uc_housing_costs_element supplied as nil for every family. In policyengine-core 3.34.1, which uv.lock pins, _check_for_cycle compares only the stack frames whose branch_name matches the calculating simulation's, and in the branch the housing costs element reads no formula. So the branch keeps a carer test that reads the award before the cap from cycling through the first two routes: in the branch, the test reads the award without housing costs. The branch does not cut the third route, which cycles inside the branch, so the carer test reads the award before the cap rather than universal_credit.

The branch's result decides only the exemption in uc_non_dep_deduction_exempt; nothing else reads uc_non_dep_receives_pension_credit. The attribution can change that exemption only through the Pension Credit addition of the non-dependant's own family, which then gets Pension Credit with the addition and none without it (uc_non_dep_receives_pension_credit reads pension_credit for the whole family). The addition needs a claimant or partner with a qualifying benefit in SPC Sch I para 1(1), and the model reads the list from gov.dwp.pension_credit.guarantee_credit.severe_disability.relevant_benefits: Attendance Allowance, the DLA care component at the middle or highest rate, the PIP daily living component and armed forces independence payment. uc_non_dep_deduction_exempt exempts everyone who receives one of the four in their own right: the DLA care component under UC Regs 2013 Sch 4 para 16(2)(c), the PIP daily living component under para 16(2)(e), and Attendance Allowance and armed forces independence payment under para 16(2)(d). Para 16(2)(d) uses "attendance allowance" as reg 2 defines it, with armed forces independence payment at head (f) (uc_receives_attendance_allowance). So the branch's result can change the model's deduction only for a member of that family who receives none of the four and has no other exemption: under head (c) of SPC Sch I para 1(1), a blind partner of a claimant who receives one. Para 16(2) lists no blindness. Where the branch's Pension Credit and the family's own differ, the model then reads that partner's exemption from the counterfactual award.

DWP treats those households differently from the model. The family gets the addition under head (c) only if "no person who has attained the age of 18 is normally residing with the partners, nor are the partners normally residing with such a person, other than a person to whom paragraph 2 applies" (para 1(1)(c)(iii)), and the renter lives with them. DWP ignores, under para 2(2), a person who receives a qualifying benefit (head (a)) or whom a consultant ophthalmologist has certified as severely sight impaired or blind (head (b)). Under UC Sch 4 para 15(1)(a), DWP makes no para 13 deduction at all for a single renter to whom para 15(2) applies. Para 15(2) lists a blind person (a), the DLA care component at the middle or highest rate (b), attendance allowance (c), which reg 2's head (f) extends to armed forces independence payment, the PIP daily living component (d) and the Scottish payments ((bb), (ca) and (da)). So wherever DWP ignores a single renter under para 2(2)(a) or (b), it deducts nothing for any non-dependant, whatever the non-dependant's Pension Credit. A couple who claim jointly both live with the partners, so DWP must ignore both, and para 15(1)(b) then exempts them through either. Two questions stay open. One concerns a renter whom DWP ignores only under heads (c) to (f) of para 2(2) (certified blind until up to 28 weeks earlier, engaged by a charity to care, that carer's partner, or a child or qualifying young person), whom para 15(2) does not list. The other concerns any person under a sub-paragraph of para 2 after (2), which we haven't quoted. The model ignores a resident who is blind, receives a qualifying benefit or counts as a qualifying young person (is_counted_resident_for_severe_disability_addition), so in the model too the addition needs such a renter. The model holds no para 15 exemption, so it deducts for the blind partner unless the branch's result exempts the partner.

test_the_non_dependant_branch_reads_the_award_without_housing_costs pins the branch's reading, whichever of universal_credit, pension_credit and the carer test the simulation requests first. A blind carer aged 40 earning £20,000 rents from the council at £6,000 a year as household head and cares for a veteran aged 70 in another benefit unit, who receives armed forces independence payment and £13,000 of State Pension. The carer's award comes to (£424.90 + £209.34) × 12 + £6,000 − 0.55 × £17,919.60 = £3,755.10, which includes the carer element, so the veteran gets no addition. The veteran keeps £12,914.00 after £86.00 of income tax, which exceeds the standard minimum guarantee of £238.00 × 52 = £12,376.00, so the veteran gets no Pension Credit. In the branch, without housing costs, the carer's award comes to nil, the veteran gets the addition and Pension Credit of (£238.00 + £86.05) × 52 − £12,914.00 = £3,936.60, and the branch returns true. When the test supplies the branch's result as false, its value in law, the model still exempts the veteran through armed forces independence payment, deducts nothing, and leaves the award at £3,755.10 with the carer element and the veteran's Pension Credit at nil. DWP deducts nothing for this household either, on two grounds: para 15(1)(a) and (2)(a) exempt the carer, a blind single renter, from every deduction, and para 16(2)(d), read with head (f) of reg 2's definition of "attendance allowance", exempts the veteran. The model holds the second ground but not the first, so the model's award and the law's agree. The test also runs a counterfactual that neither the law nor the model gives this household. When the test supplies the veteran's exemption as false, the model deducts £96.55 × 12 = £1,158.60 and leaves £2,596.50. That award still includes the carer element, so even a deduction leaves the carer test and the veteran's nil Pension Credit unchanged.

test_the_branch_decides_a_blind_partners_deduction pins a household where the branch's result decides the model's deduction. The veteran now has £21,000 of State Pension and a blind partner aged 68 who receives no disability benefit. After income tax of (£21,000 − £12,570) × 0.20 − £1,260 × 0.20 = £1,434.00, with the partner's marriage allowance, the couple keep £19,566.00, which exceeds the couple's standard minimum guarantee of £363.25 × 52 = £18,889.00, so they get no Pension Credit. In the branch, head (c) gives them the addition and Pension Credit of (£363.25 + £86.05) × 52 − £19,566.00 = £3,797.60, so the branch returns true, and the model exempts the partner, deducts nothing and leaves the carer's award at £3,755.10. When the test supplies the branch's result as false, its value in law, the model deducts £1,158.60 for the partner and leaves £2,596.50. DWP deducts nothing, because para 15(1)(a) and (2)(a) exempt the carer, so the model's result agrees with the law's through the branch, not through para 15.

Scotland's definition by date

Before the scheme started on 1 April 2022, the Scottish Ministers inserted into SSI 2021/249 reg 4(1) (SSI 2022/52 reg 3(b)):

"award of universal credit" includes a universal credit award with a value of zero,

From 1 April 2025, they substituted (SSI 2025/24 reg 8):

"award of universal credit" means an award of universal credit made under Part 1 of the 2012 Act,

and inserted reg 10A (reg 9):

For the purposes of these Regulations an award of universal credit includes—
(a) an award the amount of which is reduced to zero, as a result of a failure by a claimant which is sanctionable under section 26 (higher-level sanctions) or section 27 (other sanctions) of the 2012 Act, and
(b) an award to which entitlement has ceased in terms of regulation 32A(1)(b) of the Universal Credit, Personal Independence Payment, Jobseeker's Allowance and Employment and Support Allowance (Claims and Payments) Regulations 2013 (reclaims of universal credit after nil award due to earnings), but in relation to which the Secretary of State treats the claimant as making a claim under regulation 32A(2) of those Regulations.

UC Claims and Payments Regs 2013 reg 32A(1):

(1) This regulation applies where—
(a) a claim is made for universal credit, but no award is made because the condition in section 5(1)(b) or 5(2)(b) of the 2012 Act (condition that the claimant's income, or joint claimants' combined income is such that the amount payable would not be less than the prescribed minimum) is not met; or
(b) entitlement to an award of universal credit ceases because that condition is not met.

In its policy note to SSI 2025/24, the Scottish Government records the 2022 intention:

When the Working Age Regulations were brought into force in April 2022, the policy intention was to ensure that in instances where a Universal Credit claimant was receiving £0.00 in Universal Credit due to excess earnings in any Universal Credit assessment period their CTR calculation would be carried out as though the person did have an award of Universal Credit.

and describes reg 10A as:

an expansion of the circumstances in which the provisions applicable to a council tax reduction applicant with an award of Universal Credit will be taken to continue to apply - covering the scenario of a council tax reduction applicant who is a Universal Credit claimant falling within regulation 32A(2) of the 2013 Regulations, as well as, as at present, the scenario of a claimant the amount of whose award is reduced to zero. A reduction to zero will take place because of a sanction, rather than because of excess earnings.

From 2022-23 to 2024-25 the Scottish Ministers' definition takes in an award that exists with a value of zero, and in its note the Scottish Government confines that case to a sanction. Earnings that take the amount payable below one penny fail the s.5 financial condition, so DWP makes no award or entitlement to the award ceases, and no award remains to have a value of zero. The Scottish Ministers added reg 10A(b) in 2025 to bring part of that case in. So the model reads limb (c) from the positive award (receives_uc_carer_element) in every year from 2022-23. A council could still read the 2022 definition to take in an award that earnings end, for its last assessment period and any reclaim months from 2022-23 to 2024-25. The model cannot tell that award from a first claim, on which DWP makes no award (reg 32A(1)(a)). The model has no input for a sanction or a reg 32A reclaim, so it pays no premium for reg 10A's awards, nor for a sanctioned nil award before 2025.

For example, take a Scottish carer aged 40 who cares 35 hours a week, claims neither Carer's Allowance nor Carer Support Payment, and earns £20,000:

  • 2024-25. The maximum amount comes to (£393.45 + £198.31) × 12 = £7,101.12. The carer keeps earned income of £17,942.66, and DWP's reduction of 0.55 × £17,942.66 = £9,868.46 takes the award to nil. The carer has no award, and the model pays no carer premium, where an award would bring £45.60 × 52 = £2,371.20.
  • 2025-26. The maximum amount comes to (£400.14 + £201.68) × 12 = £7,221.84. The carer keeps earned income of £17,947.87, and DWP's reduction of £9,871.33 takes the award to nil, which leaves no award and no carer premium.

Northern Ireland

has_uc_award_with_carer_element, is_cared_for_by_carer_benefit_recipient, severe_disability_premium and severe_disability_minimum_guarantee_addition read no country, so the model applies the same rule in Northern Ireland, with the same parameters for the amounts. Northern Ireland's legislation uses the same words:

uc_carer_element_carer_test.yaml adds a Northern Ireland case: a blind son aged 40 with no income, caring for a parent aged 75 on Attendance Allowance at the higher rate, has an award of (£424.90 + £209.34) × 12 = £7,610.88 that includes the carer element, so the Department for Communities includes no addition, which would otherwise come to £86.05 × 52 = £4,474.60. The model reads the Universal Credit amounts from gov.dwp.universal_credit and the addition from gov.dwp.pension_credit.guarantee_credit.severe_disability.addition in every country.

The 2022-23 Scottish amount

The Scottish Ministers left two amounts in force on 1 April 2022. SSI 2021/249 Sch 1 para 5(1) still read £37.70, as made, while the Ministers had replaced £37.70 with £38.85 in para 17's table (SSI 2022/52 reg 25(c)(ii)). They set both to £42.75 from 1 April 2023 (SSI 2023/38 reg 20(h) and (i)). In its Council Tax Reduction in Scotland: 2022-2023 statistics (Table 1), the Scottish Government gives the 2022-23 carer premium as £38.85, the para 17 figure, and the model pays the same amount, reading gov.dwp.carer_premium.single at 30 April 2022.

Which years

  • The model reads each year's parameters at 30 April of that year (policyengine_uk/utils/parameters.py).
  • Severe disability premium and addition. DWP added the limb to HB, HB(SPC), IS, JSA, ESA and SPC through SI 2015/1754, from 4 November 2015. The government added it to England's pension-age CTR for schemes from 1 April 2016 (SI 2015/2041 reg 1(2)). The Scottish Ministers added it to Scotland's from 1 April 2016 (SSI 2016/81), had it in the working-age SSI 2012/303 by 1 April 2021, and included it in SSI 2021/249 from its start on 1 April 2022. The Welsh Ministers added it to Wales's for schemes from 1 April 2017 (WSI 2017/46 reg 1(3)). No parameter gates the limb. The carer element parameter starts on 9 April 2016, and the programmes' verified years start at 2019 (Universal Credit) and 2022 (Housing Benefit, Pension Credit, Income Support). Before them the model applies the limb in Welsh pension-age CTR in model year 2016, a year before WSI 2017/46, and in model year 2015 before SI 2015/1754, wherever a hand-built household has a carer-element award.
  • Scottish working-age carer premium. The model applies limb (c) from model year 2022 and needs an award of at least one penny in every year.

Reforms

A reform that makes is_uc_eligible read Pension Credit, or that makes the award before the cap read it, would cycle through the attribution; the invariants below hold for baseline households and stored awards.

Interaction with #1966

#1966 (draft) gives Scotland's and Wales's working-age CTR their own applicable amount (council_tax_reduction_working_age_applicable_amount), with its own carer count in place of council_tax_reduction_premiums, so it needs no subtraction from the shared premiums. Its council_tax_reduction_working_age_carers adds the carer element as one carer only when neither the claimant nor a partner has a carer benefit entitlement, with no date gate, and reads a positive award (uc_carer_element > 0 with council_tax_reduction_working_age_has_universal_credit). When merging #1966, count each claimant or partner with is_entitled_to_carer_benefit or receives_uc_carer_element before applying the same-person cap, as council_tax_reduction_carer_premium does, and gate limb (c) on carer_premium_counts_uc_carer_element. Its positive award matches this branch's reading in every year from 2022-23.

Overlap with open branches

This branch merges main at 557087da1 (cdf5fbd91), which brought #2815. Since #2815, uc_non_dep_deduction_exempt reads uc_receives_attendance_allowance, which counts armed forces independence payment under head (f) of reg 2's definition of "attendance allowance", the term UC Regs 2013 Sch 4 para 16(2)(d) uses. So the model now exempts the veteran in test_the_non_dependant_branch_reads_the_award_without_housing_costs whatever the branch returns, and the branch's result can decide a deduction only for a blind partner (above). main still holds no para 15 renter exemption.

Against this head, git merge-tree --write-tree --name-only finds:

Invariants

On generated households under baseline law, policyengine_uk/tests/test_uc_carer_element_award_properties.py checks:

  1. No change without a carer element. In a household where no one has has_uc_award_with_carer_element or receives_uc_carer_element, the attribution, the severe disability premium and its CTR and pension-age variants, and the addition equal their values with has_uc_award_with_carer_element supplied as false, and council_tax_reduction_carer_premium equals carer_premium.
  2. A carer element never raises the severe disability premium or addition, and never removes anyone from the cared-for set.
  3. The Scottish carer premium never lowers the carer premium and differs from carer_premium only for a Scottish working-age family.
  4. Bounds. The Scottish premium comes to a whole number of weekly amounts, at most one per claimant or partner, at most one where partners care for the same person.
  5. The carer test matches the award. has_uc_award_with_carer_element equals receives_uc_carer_element for every person. universal_credit_pre_benefit_cap comes to more than nil wherever universal_credit does and, for every family with a carer element, only where universal_credit does. The equality also holds where the simulation stores the award (test_a_stored_award_is_the_award_and_reads_no_cycle, both reader orders).
  6. Attribution. Everyone the attribution counts as cared for meets the Carer's Allowance severe disability test; no household has more people cared for than carers; the attribution never counts a lone carer as cared for.
  7. No cycle. Every reader, with universal_credit_pre_benefit_cap, universal_credit, pension_credit, housing_benefit, income_support, council_tax_reduction and household_net_income, calculates on one simulation in either order, on generated baseline households and where the simulation stores the award.
  8. The cut. In the non-dependant family's Pension Credit branch the carer test reads the award without housing costs; test_the_non_dependant_branch_reads_the_award_without_housing_costs pins the veteran's household above in three request orders, where the branch's result changes no deduction and the model's award matches the law's, and test_the_branch_decides_a_blind_partners_deduction pins the blind partner's household, where the branch's result decides the model's deduction.

Test plan

Runs at f75f41abc unless stated. f8cba9d54 then changes only the documentation and a comment in uc_non_dep_receives_pension_credit.

  • YAML tests whose comments work the arithmetic and cite the provision, amounts from DWP Benefit and pension rates 2026 to 2027 / SI 2026/148 and SSI 2021/249 Sch 1 paras 5(1) and 17 as amended:
    • policyengine_uk/tests/policy/baseline/household/demographic/uc_carer_element_carer_test.yaml: 12 cases, 12 passed. The blind carer; a partner inside the benefit unit (couple rate to single rate); a son outside it (addition and pension-age premium); a carer on Carer's Allowance and Universal Credit (one carer); a partner's carer element beside the other partner's allowance (one carer); a carer whose income tapers the award to nil (premium kept); a council-renting carer whose housing costs element keeps an award (premium withheld); a son whose income tapers the award to nil (addition kept); a stored award with no claim (premium withheld); no claim, no award; the executed case (addition £4,474.60, Pension Credit £6,850.60, household net income £44,629.40); and the Northern Ireland son (addition withheld).
    • policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_premium.yaml: 12 cases, 12 passed. The issue's Scottish carer aged 40 with care_hours: 35; 2022 and 2021; English and Welsh controls; the nil award in 2026, 2024 and 2025 (no premium in each); allowance and carer element together; a couple caring for the same person; a Scottish pensioner; a dependant who receives Carer Support Payment (no premium).
  • Every YAML file under policyengine_uk/tests/policy/baseline/ that names the carer test, the attribution, the severe disability premiums, the addition or the Scottish carer premium, every file in gov/dwp/pension_credit/guarantee_credit/, and every YAML file the branch adds or changes since f9fdc636a (including two that main brought in): 29 files, one policyengine-core test run each, 439 cases passed, none failed. Count AFIP as attendance allowance in UC housing cost contributions #2815's three YAML files (uc_non_dep_deduction_exempt.yaml, uc_receives_attendance_allowance.yaml and integration/uc_afip_housing_contribution.yaml): 24 cases passed, none failed.
  • policyengine_uk/tests/test_uc_carer_element_award_properties.py, 13 tests: 13 passed in one -n 4 run (76 s), with no expected failures. At the merge with main (cdf5fbd91), before the changes to the veteran test, the three runs of test_the_non_dependant_branch_reads_the_award_without_housing_costs failed at the deduction once the test supplied the branch's result as false (assert np.float32(0.0) == 1158.6 ± 0.0011586), and the other 9 passed.
    • test_issue_households_read_the_carer_element_award (the reproducer; reads only variables that predate the fix): passed; on main (557087da1) it fails with assert np.float32(4474.6) == 0, the blind carer's premium.
    • The three nil-award routes: 3 passed, with no expected-failure marker and no allowlist entry.
    • test_a_stored_award_is_the_award_and_reads_no_cycle, forward and reverse reader order: 2 passed.
    • test_a_reform_that_abolishes_universal_credit_leaves_no_carer_element_award: passed.
    • test_the_carer_element_limb_moves_only_its_readers_and_only_one_way (Hypothesis, invariants 1 to 6) and test_every_reader_calculates_on_one_simulation_in_any_order (Hypothesis, invariant 7): passed.
    • test_the_non_dependant_branch_reads_the_award_without_housing_costs (invariant 8), three request orders: 3 passed.
    • test_the_branch_decides_a_blind_partners_deduction (invariant 8): passed.
  • The Python suites on these readers, one -n 4 run each: test_severe_disability_premium_properties.py 6 passed (125 s), test_severe_disability_addition_properties.py 7 passed (230 s), test_legacy_carer_premium_properties.py 4 passed (86 s), test_pension_age_severe_disability_premium_properties.py 3 passed (62 s), test_disable_simulated_benefits_carers.py 18 passed (120 s), test_legacy_award_readers_properties.py 20 passed (189 s), test_council_tax_reduction_severe_disability_family.py 8 passed (17 s), and Count AFIP as attendance allowance in UC housing cost contributions #2815's test_uc_afip_housing_contribution_properties.py 3 passed (21 s).
  • policyengine_uk/tests/code_health -n 4: 3,153 passed.
  • Mutations, each in a copy of the branch: B3 at f75f41abc; B1, B2 and B4 to B7 at b6b1ce7c, which differs from 31139e82 only in Scotland's carer premium; and S1 and S2 at 31139e82:
    • B1, the carer test reads the old bound (uc_award_upper_bound from f9fdc636a, restored, with the claim and eligibility) in place of the award: the three nil-award route tests fail at has_uc_award_with_carer_element, and the executed YAML case fails (carer test true); the mutant gives Pension Credit £2,376 and household net income £40,154.80.
    • B2, the carer test reads universal_credit in place of the award before the cap: 11 of 12 property tests fail with CycleError through the benefit cap route; the abolition test passes.
    • B3, uc_non_dep_receives_pension_credit calculates Pension Credit without the branch: 12 of 13 property tests (all but the abolition test) and 10 of the 12 carer-test YAML cases fail with CycleError ("Circular definition detected on formula has_uc_award_with_carer_element@2026") through the non-dependant deduction route.
    • B4, the attribution ignores the carer element (carer = receives): 6 of the 24 cases in the two new YAML files fail, including the Northern Ireland case.
    • B5, the attribution drops the same-person rule: 1 fails, the partners' case.
    • B6, the carer test ignores a stored award: 1 fails, the stored award.
    • B7, the carer test ignores a neutralized award: the abolition test fails.
    • S1, Scotland counts a nil award from 2022-23 to 2024-25 (the old conditions route): 1 fails, 2024 (£2,371.20 instead of £0).
    • S2, Scotland counts a nil award in every year (uc_carer_element_included_for_claimant in place of the award): 3 fail, 2026 (£2,503.80), 2024 (£2,371.20) and 2025 (£2,412.80).
    • At fff13eda8 (31139e82 keeps the lines these three change): M4, limb (c) from 2013 (the 2021 case fails); M5, council_tax_reduction_premiums drops the carer premium substitution (2 fail); M6, the Scottish premium counts every member (1 fails, the dependant).
  • uvx ruff@0.17.2 format --check ., ruff check ., ruff check --select F811,F821 policyengine_uk and git diff --check 31139e822..HEAD: clean.
  • Not rerun at this head: the 150-household differential against main.
  • .github/check_fix_pr.py on this title and body at f8cba9d54, as pr_fix_evidence.yaml runs it: PASS against main at 5c7744144 (valid reproducer evidence, 3 changed executable tests).
  • Changelog fragment changelog.d/2120.fixed.md.

Reproducer

Reproducer: policyengine_uk/tests/test_uc_carer_element_award_properties.py::test_issue_households_read_the_carer_element_award

axiom: TheAxiomFoundation/rulespec-uk#520 queued, with an addendum for the carer's actual award, Scotland's limb (c) by date and Northern Ireland (TheAxiomFoundation/rulespec-uk#520 (comment))

🤖 Generated with Claude Code

MaxGhenis and others added 15 commits October 31, 2026 20:26
…carer test and Scottish working-age CTR carer premium

The severe disability premium, the pension-age premium and the Pension
Credit severe disability addition now treat a person as cared for when a
carer's Universal Credit award includes the carer element, read from the
claim and the award's conditions (has_uc_award_with_carer_element) because
the award itself depends on Pension Credit.

Scotland's working-age council tax reduction pays the carer premium for an
award of Universal Credit which includes the carer element (SSI 2021/249
Sch 1 para 6(1)(c)) from 1 April 2022, through
council_tax_reduction_carer_premium.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Scottish carer premium

YAML cases with the arithmetic worked from the 2026-27 rates: the blind
carer of #2120, a carer inside and outside the benefit unit, a carer on
Carer's Allowance and Universal Credit, partners caring for the same
person, the nil award, and the Scottish carer of #2124 in 2021, 2022 and
2026 with English and Welsh controls. Property tests check that the limb
changes nothing without a carer element, never raises the severe
disability premium or addition, never lowers the carer premium, and that
every reader calculates on one simulation in any order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…l-award rule

has_uc_award_with_carer_element now also needs a positive uc_award_upper_bound:
the award before any non-dependant deduction, worked in the award's own order of
operations so it never falls below universal_credit_pre_benefit_cap. A carer
whose income tapers the award to nil has no award (Welfare Reform Act 2012
s.5(1)(b); UC Regs 2013 reg 17) and no longer bars the severe disability
premium or the Pension Credit addition. Where universal_credit is stored or
neutralized, the test reads the award itself (receives_uc_carer_element).

Scotland's working-age carer premium counts a nil award with the carer element
from 1 April 2022 to 31 March 2025, when SSI 2021/249 reg 4 defined an award of
universal credit to include one with a value of zero (SSI 2022/52 reg 3), and
reads the positive award from 1 April 2025 (SSI 2025/24 reg 8). The new
parameter uc_award_includes_zero_value_award carries the dates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A traced calculation of uc_award_upper_bound for a pensioner and her blind son,
who rent privately, reaches none of pension_credit, the housing costs element,
the non-dependant deduction or its exemption, the maximum amount, the income
reduction, the award or the attribution. The changelog now gives the Scottish
nil-award dates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Docstrings only: uc_award_upper_bound names who deducts, awards and sets the
minimum, and has_uc_award_with_carer_element states the nil-bound rule plainly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Docstrings and one label only. uc_award_upper_bound's label names it an upper
bound on the award; the attribution, addition, CTR carer premium and CTR
premiums docstrings name who reads or pays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comments only: DWP deducts and the council counts, and the disabled person
keeps the premium in law.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e award

Allowlist the strict expected failures under #2795 so CI's outcome check
accepts them, and add the third route: a carer with limited capability for
work and a £600 council rent, whose award comes to nil under the lower work
allowance while the bound's calculation without housing costs leaves
£461.10. The test asserts the law's £4,474.60 premium and raises
RuntimeError when a premise fails.

test_upper_bound_matches_real_award_endpoints compares the bound exactly
with the larger of two real awards, one with non-dependant deductions
supplied as nil and one with the housing costs element supplied as nil,
before the cap and finally, over every element, both work allowances and
rows within a few float32 steps of a nil award.
test_the_bound_reads_every_component_of_the_maximum_amount checks that the
bound reads each element of uc_maximum_amount in order and every input of
the award's steps apart from the deduction, the Tax-Free Childcare choice
and the claim.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…2-25 reading

The bound's documentation and the readers that cite it now name all three
ways it can exceed a nil award (#2795): a non-dependant deduction,
Tax-Free Childcare, and a small housing costs element with a work
allowance. They limit the upper-bound claim to awards the model's formulas
calculate; a stored award can exceed it, and the carer test then reads it.

The Scottish premium's documentation, parameters, YAML comments and
changelog state the 2022-23 to 2024-25 nil-award rule as the model's
reading of reg 4, which UC Claims and Payments Regs reg 32A(1)(a), the
SSI 2025/24 policy note and Ipswich BC v TD [2024] UKUT 117 (AAC) leave
open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The attribution's documentation, the two YAML files' comments and case
names, the property test's docstring and comments, and the allowlist
reasons now name who acts and use verbs in place of be-verb complements.
No formula or expected value changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…riant

The bound's documentation opens with what never exceeds it and names
has_uc_award_with_carer_element as its reader; the Scottish premium cites
the financial condition reg 32A(1)(a) turns on; the attribution comment
matches its documentation; and the property test's docstring numbers the
trace, parity and component checks 8 to 10, as the pull request does.
No formula changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The bound's housing costs read uc_LHA_cap, and the comparison's only
private renter paid less than the cap, so a copy that used the full rent
passed. A lone parent renting privately for £30,000 a year, capped at
£18,600, now adds 18 rows (126 in all), and the test asserts that the
rows include a housing costs element held to the cap.

The Scottish carer-premium YAML cites paras 5(2) and 6(1) for a single
applicant with two qualifying limbs. Documentation and comments name
their actors; no formula changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Comments, docstrings, YAML notes and the zero-value parameter's
description give each step to DWP, councils, the Scottish Ministers or
the model, and drop sentences about earlier code. No formula or expected
value changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The bound's documentation now compares the deduction with the housing
costs DWP allows, capped at the Local Housing Allowance rate for a
private renter. Three documentation sentences name their actor, and the
YAML comments in the two carer test files wrap without orphaned words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6KFgPgaVD6zHA1bFq9
@github-actions

github-actions Bot commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Aggregate impact on certified data: pass

Base 5c7744144a against head adf42043f4, both on enhanced_frs_2024_25.h5 (policyengine-uk-data 1.58.1, sha256 056e80fd8e91), fiscal years 2025-26 to 2031-32. Each year is a full microsimulation run on each side.

Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in report_spec.yaml; a flag does not fail the job).

Workflow run and full report

Notes

  • In the years a figure from fewer than 10 records is suppressed (spending.disabled_students_allowance), every total containing it, and the decile incomes, are rebuilt from their other components, so no published total includes it. Those totals are marked †. A change is withheld where the two sides leave out different figures and can't be lined up.

Moves flagged for review

None.

Spending by benefit and service

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Caseloads

Measure 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed

Household net income by decile

No household's net income changes in any year.

No change in any year: receipts by tax head; government balance, each component counted once; model totals; household income totals; population; poverty rates; people in poverty; inequality; mean household net income in each side's own deciles; standard reform costings (change in gov_balance); standard reforms: change in each reform's target.

Checks failing on both base and head (1)
  • VAT excluding private school fees is never negative (sign:vat): 2025-26: 76 units below zero, a weighted £-53,888,684 in total; 2026-27: 76 units below zero, a weighted £-55,777,260 in total; 2027-28: 76 units below zero, a weighted £-57,727,917 in total
Counted-once check

Each of 92 components was raised by £1 per unit in 2026-27, and every head of its totals was read household by household: its own head must rise by exactly £1, no other tax head may move, no other benefit may rise, and the model's own total must move by what its heads moved. A head that breaks a rule is measured again twice: with every other head held at its baseline value, and with every other head held at its value after the first £1 while the component rises again. It fails where either still shows the response. 0 failed; 0 were skipped.

  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; gov_spending; not a failure)
  • widowed_parents_allowance: pension_credit responds only through other heads in fewer than 10 households (other heads that moved there: carers_allowance; household_benefits; not a failure)
Provenance
Side Commit Runtime Environment hash Partition hash Time
base main 5c7744144a uk 2.174.7 (files f97351c7e59f), core 3.34.1, py 3.13.18 aarch64 5cc6f6ff0466 3bcfb3473960 2411.03s
head #2827 merged into main adf42043f4 uk 2.174.7 (files 70d805773ba9), core 3.34.1, py 3.13.18 aarch64 5cc6f6ff0466 3bcfb3473960 2429.72s

Dataset: hf://policyengine/policyengine-uk-data-private/enhanced_frs_2024_25.h5@2526edbbb687a3b54dbb11272e5389e4b62d2ac2, sha256 056e80fd8e9151d78f432a25cde863340baee81304c6216a37fb575ce8563784 (verified on both sides), policyengine-uk-data 1.58.1.

Receipts by tax head: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Final charge on cash interest in non-cash ISAs £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Lifetime ISA withdrawal charge £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Income tax £294.46bn £315.23bn £335.82bn £351.28bn £366.96bn £385.36bn £399.99bn
National Insurance (employee and self-employed) £51.70bn £54.14bn £56.13bn £57.73bn £59.76bn £61.64bn £63.51bn
National Insurance (employer) £148.71bn £155.37bn £160.88bn £165.09bn £172.06bn £177.36bn £182.57bn
Employer NI change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Employer NI change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Capital gains tax £12.60bn £13.15bn £13.60bn £14.11bn £14.67bn £15.24bn £15.80bn
Student loan repayments £7.82bn £8.13bn £8.39bn £8.58bn £8.79bn £9.04bn £9.29bn
VAT excluding private school fees £249.37bn £256.87bn £266.33bn £272.70bn £278.97bn £285.24bn £291.59bn
Change in VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
VAT on private school fees £1.95bn £2.01bn £2.09bn £2.14bn £2.20bn £2.26bn £2.31bn
Change in private school VAT from its baseline £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Fuel duties £24.71bn £24.13bn £26.00bn £26.83bn £26.51bn £25.78bn £24.63bn
Alcohol duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tobacco duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Vehicle excise duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Betting and gaming duties £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
TV licence fee £4.26bn £4.40bn £4.41bn £4.42bn £4.43bn £4.44bn £4.45bn
Council tax £49.21bn £52.16bn £54.89bn £57.95bn £61.16bn £64.47bn £67.91bn
High value council tax surcharge £0.00bn £0.00bn £0.00bn £0.48bn £0.49bn £0.50bn £0.51bn
Northern Ireland domestic rates £0.55bn £0.58bn £0.60bn £0.63bn £0.66bn £0.69bn £0.72bn
Business rates £34.68bn £36.20bn £38.00bn £39.46bn £42.27bn £43.25bn £44.29bn
Stamp duty land tax on the household's own purchases £6.88bn £7.32bn £7.66bn £8.06bn £8.47bn £8.91bn £9.35bn
Stamp duty land tax paid by companies £4.72bn £4.57bn £5.29bn £6.03bn £6.37bn £6.92bn £7.45bn
Land transaction tax (Wales) £0.07bn £0.08bn £0.08bn £0.09bn £0.10bn £0.10bn £0.11bn
Land and buildings transaction tax (Scotland) £0.31bn £0.32bn £0.33bn £0.35bn £0.36bn £0.38bn £0.40bn
Unspecified tax change borne by capital £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Unspecified tax change borne by consumers £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Wealth tax excluding the main residence £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Land value tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Carbon tax £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Spending by benefit and service: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Lifetime ISA bonus £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
State Pension £121.68bn £125.92bn £126.72bn £129.48bn £132.98bn £136.65bn £140.41bn
Pension Credit £6.21bn £6.46bn £6.68bn £6.82bn £6.89bn £7.07bn £7.22bn
Winter Fuel Payment £1.86bn £1.85bn £1.79bn £1.77bn £1.78bn £1.78bn £1.78bn
Pension Age Winter Heating Payment (Scotland) £0.19bn £0.20bn £0.20bn £0.21bn £0.21bn £0.22bn £0.22bn
Universal Credit £75.48bn £80.52bn £82.95bn £84.96bn £86.11bn £87.61bn £88.21bn
Housing Benefit £8.56bn £8.89bn £9.23bn £9.46bn £9.69bn £9.99bn £10.27bn
Council Tax Reduction £2.07bn £2.20bn £2.32bn £2.45bn £2.59bn £2.73bn £2.87bn
Employment and Support Allowance (income-related) £0.79bn £0.82bn £0.84bn £0.86bn £0.88bn £0.90bn £0.92bn
Employment and Support Allowance (contribution-based) £5.20bn £5.37bn £5.56bn £5.69bn £5.82bn £5.95bn £6.09bn
Jobseeker's Allowance (income-based) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Jobseeker's Allowance (contribution-based) £0.29bn £0.30bn £0.31bn £0.31bn £0.32bn £0.33bn £0.34bn
Income Support £0.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Working Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Tax Credit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Incapacity Benefit £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Personal Independence Payment £26.95bn £28.03bn £29.05bn £30.09bn £30.75bn £31.51bn £32.21bn
Disability Living Allowance £7.49bn £7.79bn £8.07bn £8.36bn £8.55bn £8.76bn £8.95bn
Attendance Allowance £8.68bn £9.03bn £9.36bn £9.69bn £9.90bn £10.15bn £10.38bn
Carer's Allowance £4.48bn £4.66bn £4.83bn £5.00bn £5.11bn £5.27bn £5.42bn
Carer Support Payment (Scotland) £0.31bn £0.32bn £0.33bn £0.34bn £0.35bn £0.36bn £0.37bn
Carer's Allowance Supplement (Scotland) £0.00bn £0.04bn £0.04bn £0.05bn £0.05bn £0.05bn £0.05bn
Severe Disablement Allowance £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn £0.03bn
Industrial Injuries Disablement Benefit £0.50bn £0.52bn £0.54bn £0.55bn £0.56bn £0.58bn £0.59bn
Armed Forces Compensation Scheme £0.61bn £0.63bn £0.65bn £0.66bn £0.68bn £0.69bn £0.71bn
War Widow's or Widower's Pension £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Child Benefit £16.19bn £16.82bn £17.39bn £18.00bn £18.39bn £18.84bn £19.25bn
Scottish Child Payment £0.49bn £0.52bn £0.53bn £0.55bn £0.56bn £0.57bn £0.56bn
Two Child Limit Payment (Scotland, counterfactual) £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Healthy Start vouchers £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn £0.05bn
Maternity Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Maternity Pay £3.30bn £3.41bn £3.54bn £3.62bn £3.70bn £3.78bn £3.87bn
Statutory Paternity Pay £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Statutory Sick Pay £1.12bn £1.16bn £1.20bn £1.23bn £1.26bn £1.29bn £1.32bn
Sure Start Maternity Grant £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn £0.01bn
Bereavement Support Payment £0.67bn £0.69bn £0.71bn £0.73bn £0.75bn £0.76bn £0.78bn
Widowed Parent's Allowance £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Tax-Free Childcare £0.56bn £0.57bn £0.57bn £0.58bn £0.60bn £0.61bn £0.59bn
Extended childcare entitlement £2.99bn £3.50bn £3.59bn £3.71bn £3.78bn £3.86bn £3.93bn
Universal childcare entitlement £2.06bn £2.22bn £2.29bn £2.37bn £2.43bn £2.48bn £2.53bn
Targeted childcare entitlement £0.50bn £0.51bn £0.52bn £0.54bn £0.55bn £0.57bn £0.56bn
Childcare Offer for Wales £0.26bn £0.28bn £0.28bn £0.29bn £0.30bn £0.31bn £0.32bn
Care to Learn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Childcare Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Parents' Learning Allowance £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn £0.20bn
Adult Dependants' Grant £0.06bn £0.06bn £0.04bn £0.04bn £0.04bn £0.04bn £0.04bn
Travel Grant £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
NHS spending £203.89bn £204.30bn £204.56bn £204.91bn £205.34bn £205.85bn £206.35bn
State education spending £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn £0.02bn
Transport subsidy spending £25.05bn £25.10bn £25.14bn £25.18bn £25.23bn £25.30bn £25.36bn
Cost-of-living support payment £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Bills Rebate £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Household Energy Payment £0.00bn £2.11bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Energy Price Guarantee subsidy £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Disability basic income £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Other public spending budget change £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Caseloads: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Lifetime ISA bonus 0k 0k 0k 0k 0k 0k 0k
State Pension 11,264k 11,145k 10,819k 10,700k 10,723k 10,750k 10,776k
Pension Credit 1,489k 1,484k 1,476k 1,454k 1,452k 1,457k 1,466k
Winter Fuel Payment 7,844k 7,783k 7,473k 7,375k 7,391k 7,409k 7,427k
Pension Age Winter Heating Payment (Scotland) 803k 802k 800k 797k 799k 801k 802k
Universal Credit 6,342k 6,347k 6,336k 6,297k 6,292k 6,271k 6,223k
Housing Benefit 1,249k 1,245k 1,244k 1,227k 1,227k 1,229k 1,232k
Council Tax Reduction 3,180k 3,200k 3,206k 3,219k 3,234k 3,245k 3,252k
Employment and Support Allowance (income-related) 71k 71k 71k 71k 71k 71k 71k
Employment and Support Allowance (contribution-based) 719k 720k 721k 722k 724k 726k 728k
Jobseeker's Allowance (income-based) 0k 0k 0k 0k 0k 0k 0k
Jobseeker's Allowance (contribution-based) 67k 67k 67k 67k 67k 68k 68k
Income Support 25k 0k 0k 0k 0k 0k 0k
Working Tax Credit 0k 0k 0k 0k 0k 0k 0k
Child Tax Credit 0k 0k 0k 0k 0k 0k 0k
Incapacity Benefit 0k 0k 0k 0k 0k 0k 0k
Personal Independence Payment 3,567k 3,575k 3,579k 3,585k 3,593k 3,602k 3,611k
Disability Living Allowance 1,291k 1,294k 1,296k 1,298k 1,300k 1,304k 1,307k
Attendance Allowance 1,695k 1,698k 1,700k 1,703k 1,707k 1,711k 1,715k
Carer's Allowance 1,034k 1,037k 1,038k 1,040k 1,042k 1,060k 1,062k
Carer Support Payment (Scotland) 71k 71k 71k 72k 72k 72k 72k
Carer's Allowance Supplement (Scotland) 0k 71k 71k 72k 72k 72k 72k
Severe Disablement Allowance 4k 4k 4k 4k 4k 4k 4k
Industrial Injuries Disablement Benefit 137k 137k 137k 138k 138k 138k 139k
Armed Forces Compensation Scheme 93k 93k 94k 94k 94k 94k 94k
War Widow's or Widower's Pension 0k 0k 0k 0k 0k 0k 0k
Child Benefit 8,123k 8,120k 8,120k 8,130k 8,145k 8,161k 8,178k
Scottish Child Payment 351k 352k 352k 353k 350k 348k 337k
Two Child Limit Payment (Scotland, counterfactual) 0k 0k 0k 0k 0k 0k 0k
Healthy Start vouchers 200k 200k 200k 201k 201k 201k 202k
Maternity Allowance 0k 0k 0k 0k 0k 0k 0k
Statutory Maternity Pay 333k 333k 334k 334k 335k 336k 337k
Statutory Paternity Pay 0k 0k 0k 0k 0k 0k 0k
Statutory Sick Pay 181k 182k 182k 182k 182k 183k 183k
Sure Start Maternity Grant 26k 26k 26k 26k 26k 26k 26k
Bereavement Support Payment 98k 98k 98k 98k 98k 99k 99k
Widowed Parent's Allowance 0k 0k 0k 0k 0k 0k 0k
Tax-Free Childcare 1,043k 1,027k 1,014k 1,009k 1,011k 1,009k 993k
Extended childcare entitlement 795k 800k 796k 797k 798k 798k 792k
Universal childcare entitlement 1,071k 1,072k 1,072k 1,073k 1,076k 1,079k 1,074k
Targeted childcare entitlement 165k 156k 154k 154k 155k 155k 150k
Childcare Offer for Wales 39k 39k 39k 39k 39k 39k 39k
Care to Learn 0k 0k 0k 0k 0k 0k 0k
Childcare Grant 0k 0k 0k 0k 0k 0k 0k
Parents' Learning Allowance 98k 98k 98k 99k 99k 99k 99k
Adult Dependants' Grant 18k 18k 12k 12k 12k 12k 12k
Travel Grant 0k 0k 0k 0k 0k 0k 0k
Disabled Students' Allowance suppressed suppressed suppressed suppressed suppressed suppressed suppressed
16 to 19 Bursary Fund 0k 0k 0k 0k 0k 0k 0k
Cost-of-living support payment 0k 0k 0k 0k 0k 0k 0k
Energy Bills Rebate 0k 0k 0k 0k 0k 0k 0k
Household Energy Payment 0k 21,065k 0k 0k 0k 0k 0k
Energy Price Guarantee subsidy 0k 0k 0k 0k 0k 0k 0k
Basic income 0k 0k 0k 0k 0k 0k 0k
Disability basic income 0k 0k 0k 0k 0k 0k 0k
Government balance, each component counted once: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Government receipts, each component once £892.00bn £934.66bn £980.50bn £1,015.93bn £1,054.24bn £1,091.56bn £1,124.89bn
Government spending £528.93bn † £545.10bn † £550.16bn † £558.85bn † £566.49bn † £575.19bn † £582.78bn †
Government balance, each receipt once £363.07bn † £389.57bn † £430.34bn † £457.08bn † £487.75bn † £516.37bn † £542.11bn †
Benefits in household_benefits but not in gov_spending £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn £0.00bn
Model totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
gov_tax £892.00bn £934.66bn £980.50bn £1,015.93bn £1,054.24bn £1,091.56bn £1,124.89bn
household_tax £491.97bn £520.41bn £551.21bn £576.00bn £601.00bn £626.69bn £648.42bn
pre_budget_change_household_tax £484.15bn £512.28bn £542.82bn £566.95bn £591.72bn £617.16bn £638.61bn
gov_spending £528.93bn † £545.10bn † £550.16bn † £558.85bn † £566.49bn † £575.19bn † £582.78bn †
household_benefits £528.93bn † £545.10bn † £550.16bn † £558.85bn † £566.49bn † £575.19bn † £582.78bn †
gov_balance £363.07bn † £389.57bn † £430.34bn † £457.08bn † £487.75bn † £516.37bn † £542.11bn †
Household income totals: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Household market income £1,637.96bn £1,702.77bn £1,757.35bn £1,806.41bn £1,855.97bn £1,912.43bn £1,970.44bn
Household net income £1,636.24bn † £1,687.25bn † £1,714.85bn † £1,746.83bn † £1,777.98bn † £1,816.26bn † £1,858.87bn †
Household net income (HBAI definition) £1,449.13bn £1,499.27bn £1,530.25bn £1,564.51bn £1,597.18bn £1,634.83bn £1,675.80bn
Population: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
People 69,245k 69,383k 69,473k 69,592k 69,738k 69,912k 70,080k
Benefit units 35,110k 35,181k 35,226k 35,286k 35,360k 35,449k 35,534k
Households 31,046k 31,108k 31,149k 31,201k 31,267k 31,345k 31,420k
Poverty rates: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 16.3% 15.5% 16.4% 16.3% 16.5% 16.5% 16.6%
Absolute poverty, before housing costs: children 24.7% 22.1% 23.3% 22.9% 23.1% 23.2% 23.5%
Absolute poverty, before housing costs: working-age adults 14.1% 13.8% 14.7% 14.7% 14.8% 14.8% 15.0%
Absolute poverty, before housing costs: pensioners 13.7% 13.4% 14.0% 13.8% 13.9% 14.0% 13.9%
Absolute poverty, after housing costs: everyone 21.6% 21.0% 22.0% 22.6% 22.9% 23.1% 23.4%
Absolute poverty, after housing costs: children 33.3% 31.3% 32.3% 32.5% 32.9% 33.4% 34.2%
Absolute poverty, after housing costs: working-age adults 19.9% 19.8% 20.8% 21.6% 21.9% 22.0% 22.3%
Absolute poverty, after housing costs: pensioners 12.7% 12.4% 13.1% 13.2% 13.3% 13.4% 13.6%
Relative poverty, before housing costs: everyone 17.0% 16.0% 16.4% 16.3% 16.4% 16.3% 16.6%
Relative poverty, before housing costs: children 25.9% 22.9% 23.3% 22.9% 23.0% 22.9% 23.5%
Relative poverty, before housing costs: working-age adults 14.5% 14.1% 14.6% 14.7% 14.7% 14.7% 15.0%
Relative poverty, before housing costs: pensioners 14.5% 14.0% 13.9% 13.8% 13.8% 13.9% 13.9%
Relative poverty, after housing costs: everyone 21.5% 21.0% 21.3% 21.3% 21.3% 21.5% 21.7%
Relative poverty, after housing costs: children 33.1% 31.1% 31.2% 31.0% 31.1% 31.2% 31.8%
Relative poverty, after housing costs: working-age adults 19.9% 19.8% 20.2% 20.4% 20.5% 20.6% 20.8%
Relative poverty, after housing costs: pensioners 12.5% 12.4% 12.2% 11.7% 11.7% 11.8% 12.0%
People in poverty: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Absolute poverty, before housing costs: everyone 11,277k 10,778k 11,402k 11,365k 11,475k 11,514k 11,650k
Absolute poverty, before housing costs: children 3,688k 3,314k 3,496k 3,445k 3,480k 3,502k 3,549k
Absolute poverty, before housing costs: working-age adults 5,965k 5,893k 6,308k 6,362k 6,420k 6,430k 6,521k
Absolute poverty, before housing costs: pensioners 1,624k 1,571k 1,597k 1,558k 1,575k 1,581k 1,580k
Absolute poverty, after housing costs: everyone 14,944k 14,599k 15,310k 15,721k 15,937k 16,140k 16,426k
Absolute poverty, after housing costs: children 4,975k 4,682k 4,837k 4,888k 4,945k 5,040k 5,179k
Absolute poverty, after housing costs: working-age adults 8,463k 8,461k 8,971k 9,344k 9,491k 9,584k 9,706k
Absolute poverty, after housing costs: pensioners 1,506k 1,456k 1,501k 1,489k 1,501k 1,517k 1,541k
Relative poverty, before housing costs: everyone 11,750k 11,084k 11,387k 11,364k 11,416k 11,416k 11,654k
Relative poverty, before housing costs: children 3,872k 3,423k 3,496k 3,445k 3,466k 3,454k 3,551k
Relative poverty, before housing costs: working-age adults 6,159k 6,013k 6,301k 6,362k 6,389k 6,389k 6,523k
Relative poverty, before housing costs: pensioners 1,719k 1,648k 1,590k 1,558k 1,561k 1,573k 1,580k
Relative poverty, after housing costs: everyone 14,864k 14,552k 14,777k 14,809k 14,872k 15,012k 15,232k
Relative poverty, after housing costs: children 4,944k 4,660k 4,673k 4,663k 4,679k 4,707k 4,806k
Relative poverty, after housing costs: working-age adults 8,431k 8,440k 8,711k 8,823k 8,873k 8,967k 9,062k
Relative poverty, after housing costs: pensioners 1,489k 1,452k 1,393k 1,323k 1,321k 1,338k 1,364k
Inequality: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Gini coefficient, equivalised HBAI income before housing costs 0.3078 0.3050 0.3056 0.3055 0.3060 0.3066 0.3082
Mean household net income in each side's own deciles: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Decile 1: mean household_net_income per household £17,681 † £17,998 † £17,916 † £18,152 † £18,308 † £18,533 † £18,718 †
Decile 2: mean household_net_income per household £27,942 † £29,026 † £28,715 † £29,017 † £29,280 † £29,698 † £30,156 †
Decile 3: mean household_net_income per household £34,316 † £35,481 † £36,069 † £36,606 † £37,195 † £37,732 † £38,182 †
Decile 4: mean household_net_income per household £38,934 † £40,684 † £41,726 † £42,728 † £43,331 † £44,130 † £44,432 †
Decile 5: mean household_net_income per household £43,235 † £45,581 † £46,012 † £46,961 † £47,713 † £48,725 † £50,296 †
Decile 6: mean household_net_income per household £47,931 † £49,202 † £50,891 † £51,936 † £52,936 † £53,820 † £54,663 †
Decile 7: mean household_net_income per household £55,659 † £56,569 † £57,437 † £57,642 † £58,733 † £59,661 † £61,087 †
Decile 8: mean household_net_income per household £68,784 † £70,802 † £71,864 † £73,512 † £73,886 † £75,319 † £77,177 †
Decile 9: mean household_net_income per household £78,889 † £81,012 † £80,859 † £82,645 † £85,463 † £86,945 † £89,508 †
Decile 10: mean household_net_income per household £116,861 † £120,161 † £124,545 † £126,420 † £125,753 † £128,368 † £130,693 †
Standard reform costings (change in gov_balance): head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp £6.41bn £6.66bn £6.63bn £6.85bn £7.03bn £7.25bn £7.49bn
Raise higher rate by 1pp £3.61bn £3.87bn £4.00bn £4.22bn £4.44bn £4.71bn £4.83bn
Raise personal allowance by ~800GBP/year £-3.81bn £-3.93bn £-3.99bn £-4.05bn £-4.11bn £-4.24bn £-1.95bn
Raise child benefit by 25GBP/week per additional child £-1.99bn £-1.75bn £-1.55bn £-1.38bn £-1.30bn £-1.18bn £-1.07bn
Reduce Universal Credit taper rate to 20% £-20.77bn £-21.32bn £-21.75bn £-22.00bn £-22.35bn £-22.75bn £-22.94bn
Raise Class 1 main employee NICs rate to 10% £10.89bn £11.30bn £11.71bn £12.01bn £12.31bn £12.62bn £13.00bn
Raise VAT standard rate by 2pp £24.89bn £25.71bn £26.63bn £27.24bn £27.87bn £28.50bn £29.14bn
Raise additional rate by 3pp £2.90bn £3.15bn £3.22bn £3.41bn £3.61bn £3.85bn £4.14bn
Raise the Universal Credit standard allowance by 10% £-3.06bn £-3.18bn £-3.26bn £-3.35bn £-3.44bn £-3.49bn £-3.50bn
Raise the State Pension by 10% £-7.76bn £-7.99bn £-8.22bn £-8.45bn £-8.80bn £-8.53bn £-8.87bn
Standard reforms: change in each reform's target: head levels
Measure (head) 2025-26 2026-27 2027-28 2028-29 2029-30 2030-31 2031-32
Raise basic rate by 1pp: change in income_tax £6.55bn £6.86bn £6.79bn £7.00bn £7.20bn £7.44bn £7.66bn
Raise higher rate by 1pp: change in income_tax £3.61bn £3.92bn £4.01bn £4.23bn £4.45bn £4.72bn £4.84bn
Raise personal allowance by ~800GBP/year: change in income_tax £-3.93bn £-4.07bn £-4.13bn £-4.18bn £-4.22bn £-4.40bn £-1.75bn
Raise child benefit by 25GBP/week per additional child: change in child_benefit £2.33bn £2.14bn £1.94bn £1.76bn £1.65bn £1.52bn £1.40bn
Reduce Universal Credit taper rate to 20%: change in universal_credit £20.74bn £21.31bn £21.79bn £22.05bn £22.37bn £22.78bn £22.99bn
Raise Class 1 main employee NICs rate to 10%: change in national_insurance £11.15bn £11.63bn £12.00bn £12.29bn £12.61bn £12.94bn £13.31bn
Raise VAT standard rate by 2pp: change in vat £24.69bn £25.51bn £26.42bn £27.03bn £27.65bn £28.28bn £28.91bn
Raise additional rate by 3pp: change in income_tax £2.90bn £3.15bn £3.22bn £3.42bn £3.62bn £3.86bn £4.12bn
Raise the Universal Credit standard allowance by 10%: change in universal_credit £3.06bn £3.19bn £3.28bn £3.37bn £3.43bn £3.49bn £3.51bn
Raise the State Pension by 10%: change in state_pension £10.68bn £11.17bn £11.28bn £11.60bn £12.03bn £12.46bn £12.96bn

@MaxGhenis
MaxGhenis marked this pull request as ready for review November 3, 2026 10:42

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed f9fdc636a34ce29e0de508b0b5386ea70175e727. REQUEST_CHANGES: C1 is a confirmed material defect. Overall review PARTIAL because two source questions also remain unresolved.

C1 — A positive hypothetical UC bound is not an actual award. At has_uc_award_with_carer_element.py:65, uc_award_upper_bound > 0 can be true when final UC is zero. The new attribution then wrongly removes the cared-for person's severe disability addition. SPC Schedule I paragraph 1 requires an actual UC award including the carer element; the earnings-nil distinction is supported by WRA section 5, UC regulation 17 and Ipswich BC v TD, paragraphs 36–39.

Executed 2026 example in England: a blind 35-year-old household head has an LCW determination, cares 35 hours, earns £25,000 annually, claims no Carer's Allowance and pays £600 annual council rent. A 75-year-old in a separate benefit unit in the same household receives higher Attendance Allowance and £10,000 State Pension. Both actual UC awards calculate to zero, but the carer's bound is £461.10 and the new predicate reads true. Final Pension Credit is £2,376 instead of £6,850.60; household net income is £40,154.80 instead of £44,629.40. The blind-resident exception is supported by SPC paragraph 2(2)(b). A fresh control setting only the new carer-award limb false isolates the £4,474.60 annual loss; this is not a separately executed base branch.

Please distinguish actual-zero award routes without reintroducing the documented UC/PC dependency cycle. Require the three #2795 legal-outcome tests to pass and remove their xfail/allowlist exceptions. Local validation was 99 passed, three strict expected failures, with no unexpected failures. Those expected failures expose this defect; green CI does not establish those outcomes are correct.

Two additional material evidence gaps remain, independently of C1:

  • The Scottish 2022–2024 earnings-nil interpretation needs authority reconciling the old zero-value-award definition, regulation 32A and the 2025 expansion. I am not asserting that interpretation is wrong.
  • The changed shared severe-disability variables reach Northern Ireland, but the operative NI UC-carer/minimum-award counterparts were not fully established within the bounded source review. GB clauses do not certify NI results.

The actual Axiom #520 dispatch is filed with source excerpts, outputs, companions and approval/ingest blockers. It does not resolve the historical Scottish interpretation or amount to completed parity. Positive-award PC and Scottish final CTR/household-income paths, supplied-input/cache/deletion checks and the other new properties passed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FQc4koGSzCUYko19B
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Picking this up for the UK hub. Reply here if you're mid-change and I'll stop.


Generated by Claude Code

…ty carer test

has_uc_award_with_carer_element now reads the award before the benefit cap
(universal_credit_pre_benefit_cap), so a carer whose award a non-dependant
deduction, the Tax-Free Childcare choice or the taper with a lower work
allowance takes to nil has no award. The non-dependant deduction's Pension
Credit branch keeps that read from cycling; the benefit cap, which reads
Child Tax Credit and so Pension Credit, would not, so the test reads the
award before the cap. Remove uc_award_upper_bound and its tests, the three
expected-failure markers and their allowlist entries, add the executed
English case and a Northern Ireland case, pin the branch's armed forces
independence payment case, and cite Northern Ireland's counterparts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FQc4koGSzCUYko19B
…n every year

An earnings nil case leaves no award to have a value of zero under SSI
2021/249 reg 4 as it stood from 2022 to 2025, so limb (c) of Sch 1 para
6(1) reads the positive award from 2022-23. Remove
uc_award_includes_zero_value_award and update the 2024 case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6FQc4koGSzCUYko19B
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_TITLE.txt

Count UC carer awards for severe disability and Scottish CTR premiums

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_BODY.md

Fixes #2120
Fixes #2124

## What and why

DWP and councils count Universal Credit carer-element awards, as they count Carer's Allowance and Carer Support Payment, when deciding the premiums and additions below. The model left the awards out.

- **Severe disability premium and Pension Credit addition (#2120).** DWP and councils withhold the premium or addition when a carer "has an award of universal credit which includes the carer element in respect of caring for" the claimant (HB Regs 2006 Sch 3 para 14(2)(a)(iii) and (b)(iii); HB(SPC) Regs 2006 Sch 3 para 6(2); IS Regs 1987 Sch 2 para 13(2); [SPC Regs 2002 Sch I para 1(1)(a)(iii), (b), (c)(iv) and (4)](https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/1)). Councils apply the same words in England's, Wales's and Scotland's pension-age council tax reduction schemes. `is_cared_for_by_carer_benefit_recipient` attributed only Carer's Allowance and Carer Support Payment.
- **Scotland's working-age CTR carer premium (#2124).** The Scottish Ministers require councils to include the premium for an applicant or partner who has "an award of universal credit which includes the carer element described in regulation 29" (SSI 2021/249 Sch 1 para 6(1)(c)). `carer_premium` applied limbs (a) and (b) only. No other scheme's carer premium has limb (c): under HB Regs 2006 Sch 3 para 17, HB(SPC) Sch 3 para 9, IS Sch 2 para 14ZA, England SI 2012/2885 Sch 2 para 9, Wales WSI 2013/3029 Sch 2 para 9 and Sch 7 para 14, Scotland SSI 2012/319 Sch 1 para 10 and the pre-2022 SSI 2012/303 Sch 1 para 14, DWP and councils test entitlement to Carer's Allowance or Carer Support Payment.

### Changes

- **`has_uc_award_with_carer_element` (Person)** reads the carer's actual award. It counts a claimant in respect of whom the award includes the carer element (`uc_carer_element_included_for_claimant`) where the family's award before the benefit cap (`universal_credit_pre_benefit_cap`) comes to more than nil. Parliament makes it a financial condition of an award that the amount payable reach the prescribed minimum ([Welfare Reform Act 2012 s.5(1)(b) and (2)(b)](https://www.legislation.gov.uk/ukpga/2012/5/section/5)), and DWP sets that minimum at one penny ([UC Regs 2013 reg 17](https://www.legislation.gov.uk/uksi/2013/376/regulation/17)). SPC Sch I para 1(4) asks whether "the person has an award of universal credit which includes an amount which is the carer element under regulation 29". So a carer whose award comes to nil, however it gets there, has no award and no longer bars the premium or addition. Where an input or a scenario stores `universal_credit` for the period, or a reform neutralizes it, the test reads the award itself (`receives_uc_carer_element`): reading a stored award runs no formula, so it cannot cycle. `universal_credit` joins `SUPPLIED_INPUT_VARIABLES` for that check.
- **Why the award before the cap.** `universal_credit` subtracts the benefit cap reduction, which reads Child Tax Credit, whose income reads Pension Credit, whose addition reads the carer test; the model would cycle. The award before the cap and the final award agree for a family whose award includes the carer element: DWP exempts that award from the cap (UC Regs 2013 reg 83(1)(j); `is_uc_benefit_cap_exempt_specified_benefit`), and `uc_deductions` leaves at least one penny payable. Invariant 5 checks that agreement.
- **`is_cared_for_by_carer_benefit_recipient`** counts a carer-element holder as a carer, in the existing attribution order: claimants and partners of the carer's own benefit unit first, then other members, then claimants and partners of other benefit units, eldest unit first. A carer with both Carer's Allowance and a carer element counts once (SSCBA 1992 s.70(7)). Partners caring for the same severely disabled person have one relevant entitlement between them (s.70(7ZA) and (7A)), so where one receives a carer benefit, the other's carer element adds no second carer.
- **New `council_tax_reduction_carer_premium` (BenUnit).** `council_tax_reduction_premiums` reads it at working age in the same way as `council_tax_reduction_severe_disability_premium`. Outside Scotland's working-age scheme it equals `carer_premium`. In Scotland it counts each claimant or partner entitled to Carer's Allowance or Carer Support Payment (limbs (a) and (b), as `carer_premium`) or with an award of at least one penny that includes the carer element (limb (c), `receives_uc_carer_element`), in every year from 2022-23. It counts each person once (paras 5(2) and 6(1)), and only one of two partners who care for the same person (para 5(3) and (4)). Councils give the carer-element holder priority under para 5(4), which leaves the amount unchanged.
- **Parameter** `gov.local_authorities.scotland.council_tax_reduction.working_age.carer_premium_counts_uc_carer_element`: false from 1 April 2013, true from 1 April 2022.
- Documentation of `severe_disability_premium`, `pension_age_severe_disability_premium`, `severe_disability_minimum_guarantee_addition`, `carer_premium` and `council_tax_reduction_premiums` now describes the limb. A household head who applies alone holds no Universal Credit award of their own in the model, so the head branch of `council_tax_reduction_premiums` keeps its carer test.

### Three routes to a nil award, and the executed case

Each of these awards comes to nil, so the carer has no award, and the model now pays the premium or addition. `policyengine_uk/tests/test_uc_carer_element_award_properties.py` asserts each, after premise checks that raise `RuntimeError`.

- **A non-dependant deduction** (`test_a_non_dependant_deduction_that_takes_the_award_to_nil_leaves_no_award`). A carer aged 40, not blind, cares 35 hours a week for a disabled person aged 50 on the PIP daily living component and earns £27,000. The carer and the disabled person rent a home privately, each liable for half of £12,000, and a blind non-dependant aged 30 earning £20,000 lives with them. DWP deducts £96.55 × 12 = £1,158.60 a year for the non-dependant (UC Regs 2013 Sch 4 paras 13 and 16; blindness brings no exemption, and para 15 does not exempt the carer: she claims alone, and the Schedule's joint renters are joint claimants (para 1(2)), so the disabled co-tenant's PIP gives her no exemption under para 15(1)(b)). Her housing costs element falls to £6,000 − £1,158.60 = £4,841.40 and her maximum amount to £12,452.28, which the taper of 0.55 × £22,959.60 = £12,627.78 exceeds, so the award comes to nil. DWP does not count the disabled person, a joint tenant, as her non-dependant (para 9(2)(d)), and the council does not count her as his (HB Regs 2006 reg 3(2)(d)). A blind non-dependant does not bar his premium (Sch 3 para 14(4)). The model now pays him the premium of £86.05 × 52 = £4,474.60.
- **Tax-Free Childcare** (`test_a_family_that_takes_tax_free_childcare_instead_has_no_award`). A blind carer aged 35, earning £60,000, has a child aged 3 in £12,000 of childcare, and the disabled person aged 60 on the PIP daily living component lives in another benefit unit of the household. The family's award would come to £21,458.16 − £20,260.57 = £1,197.59, and Tax-Free Childcare to £2,000, so the family takes no award (`forgoes_universal_credit_for_tax_free_childcare`). The model now pays the disabled person the premium of £4,474.60.
- **A small housing costs element with a work allowance** (`test_small_housing_costs_with_a_work_allowance_leave_no_award`). A blind carer aged 35 cares 35 hours a week for a disabled person aged 60 on the PIP daily living component, who lives in another benefit unit of the household and claims no Universal Credit. DWP has determined that the carer has limited capability for work (UC Regs 2013 reg 39(1)(a)), and under reg 41(1A) cannot treat the carer's paid work as a relevant change of circumstances when it decides whether to reassess that determination (reg 41(1)(b)). So the award has a work allowance (reg 22(1)(b)) and the carer element too: DWP puts the LCWRA element in its place only for a claimant who also has limited capability for work-related activity (reg 29(4)). The carer earns £25,000, claims no Carer's Allowance and pays the council £600 a year in rent. After income tax of £2,486.00 and National Insurance of £994.40, the carer keeps earned income of £21,519.60. With a housing costs element of £600, DWP applies the lower work allowance, £427 × 12 = £5,124 (reg 22(2)(b)). DWP's reduction of 0.55 × (£21,519.60 − £5,124) = £9,017.58 exceeds the maximum amount, (£424.90 + £209.34) × 12 + £600 = £8,210.88, so the award comes to nil. The council ignores the blind carer as a resident (HB Regs 2006 Sch 3 para 14(4)(b)), and the model now pays the disabled person the premium of £4,474.60.
- **The executed case** (`uc_carer_element_carer_test.yaml`, the case "A blind carer whose award comes to nil with a small housing costs element does not bar a pensioner's addition"). The carer of the third route, now the household head, cares for a person aged 75 in another benefit unit who receives Attendance Allowance at the higher rate, £114.60 × 52 = £5,959.20, and £10,000 of State Pension. The carer's award comes to nil as above. DWP ignores the blind carer as a resident ([SPC Sch I para 2(2)(b)](https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/2)), and no one has an award including the carer element in respect of caring for the pensioner, so DWP includes the addition, £86.05 × 52 = £4,474.60. The minimum guarantee comes to £238.00 × 52 + £4,474.60 = £16,850.60, and against £10,000 of State Pension, guarantee credit comes to £6,850.60; qualifying income of £192.31 a week falls short of the savings credit threshold of £208.07. Household net income comes to £25,000 + £10,000 + £5,959.20 + £6,850.60 + £200 Winter Fuel Payment + £100 Household Energy Payment − £2,486.00 − £994.40 = £44,629.40. Counting the carer would take the addition away and leave Pension Credit at £2,376.00 and household net income at £40,154.80; the model now gives £6,850.60 and £44,629.40.

### The cycle and where the model cuts it

The carer test reads the award, and four routes lead from the award back to the carer test. A trace with the cut removed shows the first:

- **The non-dependant deduction.** `universal_credit_pre_benefit_cap` → `uc_maximum_amount` → `uc_housing_costs_element` → `uc_non_dep_deductions` → `uc_individual_non_dep_deduction` → `uc_individual_non_dep_deduction_eligible` → `uc_non_dep_deduction_exempt` → `uc_non_dep_receives_pension_credit` → `pension_credit` → … → `severe_disability_minimum_guarantee_addition` → `is_cared_for_by_carer_benefit_recipient` → `has_uc_award_with_carer_element`.
- **Tax-Free Childcare.** `forgoes_universal_credit_for_tax_free_childcare` reads `uc_maximum_amount` and `uc_income_reduction`, and so the same housing costs element.
- **The benefit cap.** `universal_credit` → `uc_benefit_cap_reduction_after_floor` → `uc_benefit_cap_reduction` → `benefit_cap_welfare_benefits` → `child_tax_credit` → `ctc_entitlement` → `child_tax_credit_pre_minimum` → `tax_credits_reduction` → `tax_credits_applicable_income` → `pension_credit`.

`uc_non_dep_receives_pension_credit` already calculates the non-dependant family's Pension Credit in a branch (`simulation.get_branch`) with `uc_housing_costs_element` supplied as nil for every family. In policyengine-core 3.34.1, which `uv.lock` pins, `_check_for_cycle` compares only the stack frames whose `branch_name` matches the calculating simulation's, and in the branch the housing costs element reads no formula. So the branch keeps a carer test that reads the award before the cap from cycling through the first two routes: in the branch, the test reads the award without housing costs. The branch does not cut the third route, which cycles inside the branch, so the carer test reads the award before the cap rather than `universal_credit`.

**Whom the cut can affect.** The branch's result decides only the exemption in `uc_non_dep_deduction_exempt`; nothing else reads `uc_non_dep_receives_pension_credit`. The attribution can change that exemption only through the Pension Credit addition of the non-dependant's own family, which then gets Pension Credit with the addition and none without it (`uc_non_dep_receives_pension_credit` reads `pension_credit` for the whole family). The addition needs a partner or claimant with a qualifying benefit in SPC Sch I para 1(1)(a)(i), and the model counts Attendance Allowance, the DLA care component at the middle or highest rate, the PIP daily living component and armed forces independence payment (`gov.dwp.pension_credit.guarantee_credit.severe_disability.relevant_benefits`). `uc_non_dep_deduction_exempt` already exempts everyone who receives one of the first three, as UC Regs 2013 Sch 4 para 16(2)(c), (d) and (e) do, but not armed forces independence payment, which para 16(2) does not list. So the cut can change the deduction only for a member of that family with no other exemption: someone who receives armed forces independence payment and none of the other benefits, or, under head (c) of para 1(1), a blind partner who receives none. The model can then exempt a non-dependant whom the law does not, or the reverse.

`test_the_non_dependant_branch_reads_the_award_without_housing_costs` pins one such case, whichever of `universal_credit`, `pension_credit` and the carer test the simulation requests first. A blind carer aged 40 earning £20,000 rents from the council at £6,000 a year as household head and cares for a veteran aged 70 in another benefit unit, who receives armed forces independence payment and £13,000 of State Pension. The carer's award comes to (£424.90 + £209.34) × 12 + £6,000 − 0.55 × £17,919.60 = £3,755.10, which includes the carer element, so the veteran gets no addition and, with £250 a week against £238.00, no Pension Credit. In the branch, without housing costs, the carer's award comes to nil, the veteran gets Pension Credit, and the model exempts the veteran and deducts nothing. The law deducts £1,158.60 and leaves an award of £2,596.50, which still includes the carer element. The test asserts both sets of figures, the second with the exemption supplied as the law reads it.

### Scotland's definition by date

SSI 2022/52 reg 3(b) inserted into SSI 2021/249 reg 4(1), before the scheme started on 1 April 2022:

> "award of universal credit" includes a universal credit award with a value of zero,

From 1 April 2025, SSI 2025/24 reg 8 substituted:

> "award of universal credit" means an award of universal credit made under Part 1 of the 2012 Act,

and reg 9 inserted reg 10A:

> For the purposes of these Regulations an award of universal credit includes—
> (a) an award the amount of which is reduced to zero, as a result of a failure by a claimant which is sanctionable under section 26 (higher-level sanctions) or section 27 (other sanctions) of the 2012 Act, and
> (b) an award to which entitlement has ceased in terms of regulation 32A(1)(b) of the Universal Credit, Personal Independence Payment, Jobseeker's Allowance and Employment and Support Allowance (Claims and Payments) Regulations 2013 (reclaims of universal credit after nil award due to earnings), but in relation to which the Secretary of State treats the claimant as making a claim under regulation 32A(2) of those Regulations.

UC Claims and Payments Regs 2013 reg 32A(1):

> (1) This regulation applies where—
> (a) a claim is made for universal credit, but no award is made because the condition in section 5(1)(b) or 5(2)(b) of the 2012 Act (condition that the claimant's income, or joint claimants' combined income is such that the amount payable would not be less than the prescribed minimum) is not met; or
> (b) entitlement to an award of universal credit ceases because that condition is not met.

The Scottish Government's policy note to SSI 2025/24 records the 2022 intention:

> When the Working Age Regulations were brought into force in April 2022, the policy intention was to ensure that in instances where a Universal Credit claimant was receiving £0.00 in Universal Credit due to excess earnings in any Universal Credit assessment period their CTR calculation would be carried out as though the person did have an award of Universal Credit.

and describes reg 10A as:

> an expansion of the circumstances in which the provisions applicable to a council tax reduction applicant with an award of Universal Credit will be taken to continue to apply - covering the scenario of a council tax reduction applicant who is a Universal Credit claimant falling within regulation 32A(2) of the 2013 Regulations, as well as, as at present, the scenario of a claimant the amount of whose award is reduced to zero. A reduction to zero will take place because of a sanction, rather than because of excess earnings.

**The reading.** From 2022-23 to 2024-25 the definition reached an award that exists with a value of zero, which the Scottish Government's own note confines to a sanction. Earnings that take the amount payable below one penny fail the s.5 financial condition, so DWP makes no award or the award ends, and there is no award to have a value; the Scottish Ministers needed reg 10A(b) in 2025 to bring part of that case in. So the model reads limb (c) from the positive award (`receives_uc_carer_element`) in every year from 2022-23. One case stays arguable: for an award that earnings end, its last assessment period and any reclaim months from 2022-23 to 2024-25. The model cannot tell that award from a first claim, on which DWP makes no award (reg 32A(1)(a)). The model has no input for a sanction or a reg 32A reclaim, so it pays no premium for reg 10A's awards, nor for a sanctioned nil award before 2025.

A Scottish carer aged 40, caring 35 hours a week, with no Carer's Allowance or Carer Support Payment claim and £20,000 of earnings:

- **2024-25.** The maximum amount comes to (£393.45 + £198.31) × 12 = £7,101.12. The carer keeps earned income of £17,942.66, and DWP's reduction of 0.55 × £17,942.66 = £9,868.46 takes the award to nil. The carer has no award, and the model pays no carer premium, where an award would bring £45.60 × 52 = £2,371.20.
- **2025-26.** The maximum amount comes to (£400.14 + £201.68) × 12 = £7,221.84. The carer keeps earned income of £17,947.87, and DWP's reduction of £9,871.33 takes the award to nil, which leaves no award and no carer premium.

### Northern Ireland

The shared variables reach Northern Ireland: `has_uc_award_with_carer_element`, `is_cared_for_by_carer_benefit_recipient`, `severe_disability_premium` and `severe_disability_minimum_guarantee_addition` read no `country`, so the model applies the same rule there, with the same parameters for the amounts. Northern Ireland's legislation uses the same words:

- [Welfare Reform (Northern Ireland) Order 2015 art. 10](https://www.legislation.gov.uk/nisi/2015/2006/article/10) sets the financial conditions in the words of s.5, and [UC Regs (NI) 2016 reg 17](https://www.legislation.gov.uk/nisr/2016/216/regulation/17) sets the minimum at one penny.
- [UC Regs (NI) 2016 reg 30](https://www.legislation.gov.uk/nisr/2016/216/regulation/30) includes the carer element, and [Sch 4 para 15(2)(b)](https://www.legislation.gov.uk/nisr/2016/216/schedule/4/paragraph/15) exempts a non-dependant "in receipt of state pension credit" from the deduction.
- [SR 2016/236 reg 31(7)](https://www.legislation.gov.uk/nisr/2016/236/regulation/31/made) inserted ", or has an award of universal credit which includes the carer element," into [SPC Regs (NI) 2003 Sch 1 para 1](https://www.legislation.gov.uk/nisr/2003/28/schedule/1/paragraph/1)(1)(a)(iii), (b) and (c)(iv), and added para 1(4), which refers to UC Regs (NI) 2016 reg 30. legislation.gov.uk's revised text of para 1 predates that amendment.
- [HB Regs (NI) 2006 Sch 4 para 14(2)(a)(iii)](https://www.legislation.gov.uk/nisr/2006/405/schedule/4/paragraph/14) withholds the premium where a person "has an award of universal credit which includes the carer element under regulation 30 of the Universal Credit Regulations (Northern Ireland) 2016 in respect of caring for him".
- SR 2016/236 regs 26, 28, 35 and 36 insert the same words in Northern Ireland's Income Support, Jobseeker's Allowance, pension-age Housing Benefit and ESA schemes.

`uc_carer_element_carer_test.yaml` adds a Northern Ireland case: a blind son aged 40 with no income, caring for his mother aged 75 on Attendance Allowance at the higher rate, has an award of (£424.90 + £209.34) × 12 = £7,610.88 that includes the carer element, so DWP includes no addition, which would otherwise come to £86.05 × 52 = £4,474.60. The model reads the Universal Credit amounts from `gov.dwp.universal_credit` and the addition from `gov.dwp.pension_credit.guarantee_credit.severe_disability.addition` in every country.

### The 2022-23 Scottish amount

The Scottish Ministers left two amounts in force on 1 April 2022. SSI 2021/249 Sch 1 para 5(1) still read £37.70, as made, while the Ministers had replaced £37.70 with £38.85 in para 17's table (SSI 2022/52 reg 25(c)(ii)). They set both to £42.75 from 1 April 2023 (SSI 2023/38 reg 20(h) and (i)). In its *Council Tax Reduction in Scotland: 2022-2023* statistics (Table 1), the Scottish Government gives the 2022-23 carer premium as £38.85, the para 17 figure, and the model pays the same amount, reading `gov.dwp.carer_premium.single` at 30 April 2022.

### Which years

- The model reads each year's parameters at 30 April of that year (`policyengine_uk/utils/parameters.py`).
- **Severe disability premium and addition.** DWP added the limb to HB, HB(SPC), IS, JSA, ESA and SPC through SI 2015/1754, from 4 November 2015. The government added it to England's pension-age CTR for schemes from 1 April 2016 (SI 2015/2041 reg 1(2)). The Scottish Ministers added it to Scotland's from 1 April 2016 (SSI 2016/81), had it in the working-age SSI 2012/303 by 1 April 2021, and included it in SSI 2021/249 from its start on 1 April 2022. The Welsh Ministers added it to Wales's for schemes from 1 April 2017 (WSI 2017/46 reg 1(3)). No parameter gates the limb. The carer element parameter starts on 9 April 2016, and the programmes' verified years start at 2019 (Universal Credit) and 2022 (Housing Benefit, Pension Credit, Income Support). Before them the model applies the limb in Welsh pension-age CTR in model year 2016, a year before WSI 2017/46, and in model year 2015 before SI 2015/1754, wherever a hand-built household has a carer-element award.
- **Scottish working-age carer premium.** The model applies limb (c) from model year 2022 and needs an award of at least one penny in every year.

### Reforms

A reform that makes `is_uc_eligible` read Pension Credit, or that makes the award before the cap read it, would cycle through the attribution; the invariants below hold for baseline households and stored awards.

### Interaction with #1966

#1966 (draft) gives Scotland's and Wales's working-age CTR their own applicable amount (`council_tax_reduction_working_age_applicable_amount`), with its own carer count in place of `council_tax_reduction_premiums`, so it needs no subtraction from the shared premiums. Its `council_tax_reduction_working_age_carers` adds the carer element as one carer only when neither the claimant nor a partner has a carer benefit entitlement, with no date gate, and reads a positive award (`uc_carer_element > 0` with `council_tax_reduction_working_age_has_universal_credit`). When merging #1966, count each claimant or partner with `is_entitled_to_carer_benefit` or `receives_uc_carer_element` before applying the same-person cap, as `council_tax_reduction_carer_premium` does, and gate limb (c) on `carer_premium_counts_uc_carer_element`. Its positive award matches this branch's reading in every year from 2022-23.

### Overlap with open branches

Against this head, `git merge-tree --write-tree` finds:

- `main` (`9b456bda6`): merges cleanly (`git merge-tree --write-tree --name-only HEAD origin/main` exits 0).
- `fix-1971-enhanced-disability` (`6563f73e`): one textual conflict in `council_tax_reduction_premiums.py`, where both branches add a substitution term to the working-age premiums (this branch the carer premium, that one the enhanced disability premium). Keep both substitutions when resolving the conflict.
- `fix-1933-ctr-pensioner-children` (`e8831fb6b`): merges cleanly. In the merged tree, all 12 property tests (`-n 4`, 156 s) and the 24 cases of the two new YAML files pass; a check with historical Child Tax Credit households stays pending.
- `hb-ctr-non-dep-exemptions` (`fde435bd`): merges cleanly. Its HB and CTR non-dependant exemptions read `universal_credit_pre_benefit_cap` and Pension Credit, as the carer test now does. In the merged tree, all 12 tests in `test_uc_carer_element_award_properties.py` (`-n 4`, 108 s) and the 24 cases of the two new YAML files pass.
- #1966 (`ctr-working-age-shortfall`, `a013f520a`): merges cleanly.

## Invariants

On generated households under baseline law, `policyengine_uk/tests/test_uc_carer_element_award_properties.py` checks:

1. **No change without a carer element.** In a household where no one has `has_uc_award_with_carer_element` or `receives_uc_carer_element`, the attribution, the severe disability premium and its CTR and pension-age variants, and the addition equal their values with `has_uc_award_with_carer_element` supplied as false, and `council_tax_reduction_carer_premium` equals `carer_premium`, exactly.
2. **A carer element never raises the severe disability premium or addition**, and never removes anyone from the cared-for set.
3. **The Scottish carer premium never lowers the carer premium** and differs from `carer_premium` only for a Scottish working-age family.
4. **Bounds.** The Scottish premium comes to a whole number of weekly amounts, at most one per claimant or partner, at most one where partners care for the same person.
5. **The carer test is the award.** `has_uc_award_with_carer_element` equals `receives_uc_carer_element` for every person. `universal_credit_pre_benefit_cap` comes to more than nil wherever `universal_credit` does, and for every family with a carer element, exactly where `universal_credit` does. The equality also holds where the simulation stores the award (`test_a_stored_award_is_the_award_and_reads_no_cycle`, both reader orders).
6. **Attribution.** Everyone the attribution counts as cared for meets the Carer's Allowance severe disability test; no household has more people cared for than carers; the attribution never counts a lone carer as cared for.
7. **No cycle.** Every reader, with `universal_credit_pre_benefit_cap`, `universal_credit`, `pension_credit`, `housing_benefit`, `income_support`, `council_tax_reduction` and `household_net_income`, calculates on one simulation in either order, on generated baseline households and where the simulation stores the award.
8. **The cut.** In the non-dependant family's Pension Credit branch the carer test reads the award without housing costs; `test_the_non_dependant_branch_reads_the_award_without_housing_costs` pins the armed forces independence payment case above in three request orders.

## Test plan

Runs at `31139e82` unless stated.

- [x] YAML tests with hand-worked arithmetic citing the provision, amounts from DWP Benefit and pension rates 2026 to 2027 / SI 2026/148 and SSI 2021/249 Sch 1 paras 5(1) and 17 as amended:
  - `policyengine_uk/tests/policy/baseline/household/demographic/uc_carer_element_carer_test.yaml`: 12 cases, 12 passed. The blind carer; a partner inside the benefit unit (couple rate to single rate); a son outside it (addition and pension-age premium); a carer on Carer's Allowance and Universal Credit (one carer); a partner's carer element beside the other partner's allowance (one carer); a carer whose income tapers the award to nil (premium kept); a council-renting carer whose housing costs element keeps an award (premium withheld); a son whose income tapers the award to nil (addition kept); a stored award with no claim (premium withheld); no claim, no award; the executed case (addition £4,474.60, Pension Credit £6,850.60, household net income £44,629.40); and the Northern Ireland son (addition withheld).
  - `policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_premium.yaml`: 12 cases, 12 passed. The issue's Scottish carer aged 40 with `care_hours: 35`; 2022 and 2021; English and Welsh controls; the nil award in 2026, 2024 and 2025 (no premium in each); allowance and carer element together; a couple caring for the same person; a Scottish pensioner; a dependant who receives Carer Support Payment (no premium).
- [x] Every YAML file under `policyengine_uk/tests/policy/baseline/` that names the carer test, the attribution, the severe disability premiums, the addition or the Scottish carer premium, every file in `gov/dwp/pension_credit/guarantee_credit/`, and every YAML file the branch adds or changes since `f9fdc636a` (including two that `main` brought in): 29 files, one `policyengine-core test` run each, 439 cases passed, none failed.
- [x] `policyengine_uk/tests/test_uc_carer_element_award_properties.py`, 12 tests: 12 passed in one `-n 4` run (54 s), with no expected failures.
  - `test_issue_households_read_the_carer_element_award` (the reproducer; reads only variables that predate the fix): passed; on `main` (`9b456bda6`) it fails with `assert np.float32(4474.6) == 0`, the blind carer's premium.
  - The three nil-award routes: 3 passed, with no expected-failure marker and no allowlist entry.
  - `test_a_stored_award_is_the_award_and_reads_no_cycle`, forward and reverse reader order: 2 passed.
  - `test_a_reform_that_abolishes_universal_credit_leaves_no_carer_element_award`: passed.
  - `test_the_carer_element_limb_moves_only_its_readers_and_only_one_way` (Hypothesis, invariants 1 to 6) and `test_every_reader_calculates_on_one_simulation_in_any_order` (Hypothesis, invariant 7): passed.
  - `test_the_non_dependant_branch_reads_the_award_without_housing_costs` (invariant 8), three request orders: 3 passed.
- [x] `policyengine_uk/tests/code_health -n 4`: 3,097 passed.
- [x] Mutations, each in a scratch copy of `31139e82` (b6b1ce7c for the carer test, 31139e82 for Scotland):
  - B1, the carer test reads the old bound (`uc_award_upper_bound` from `f9fdc636a`, restored, with the claim and eligibility) in place of the award: the three nil-award route tests fail at `has_uc_award_with_carer_element`, and the executed YAML case fails (carer test true); the mutant gives Pension Credit £2,376 and household net income £40,154.80.
  - B2, the carer test reads `universal_credit` in place of the award before the cap: 11 of 12 property tests fail with `CycleError` through the benefit cap route; the abolition test passes.
  - B3, `uc_non_dep_receives_pension_credit` calculates Pension Credit without the branch: 11 of 12 property tests and 10 of the 12 carer-test YAML cases fail with `CycleError` through the non-dependant deduction route.
  - B4, the attribution ignores the carer element (`carer = receives`): 6 of the 24 cases in the two new YAML files fail, including the Northern Ireland case.
  - B5, the attribution drops the same-person rule: 1 fails, the partners' case.
  - B6, the carer test ignores a stored award: 1 fails, the stored award.
  - B7, the carer test ignores a neutralized award: the abolition test fails.
  - S1, Scotland counts a nil award from 2022-23 to 2024-25 (the old conditions route): 1 fails, 2024 (£2,371.20 instead of £0).
  - S2, Scotland counts a nil award in every year (`uc_carer_element_included_for_claimant` in place of the award): 3 fail, 2026 (£2,503.80), 2024 (£2,371.20) and 2025 (£2,412.80).
  - At `fff13eda8`, unchanged here: M4, limb (c) from 2013 (the 2021 case fails); M5, `council_tax_reduction_premiums` drops the carer premium substitution (2 fail); M6, the Scottish premium counts every member (1 fails, the dependant).
- [x] `uvx ruff@0.17.2 format --check .`, `ruff check .`, `ruff check --select F811,F821 policyengine_uk` and `git diff --check`: clean.
- [ ] Not rerun at this head: the 150-household differential against `main` and the Python suites on these readers (`test_severe_disability_premium_properties.py`, `test_severe_disability_addition_properties.py`, `test_legacy_carer_premium_properties.py`, `test_pension_age_severe_disability_premium_properties.py`, `test_disable_simulated_benefits_carers.py`, `test_legacy_award_readers_properties.py`, `test_council_tax_reduction_severe_disability_family.py`); CI runs the suites.
- [x] Changelog fragment `changelog.d/2120.fixed.md`.

## Reproducer

Reproducer: policyengine_uk/tests/test_uc_carer_element_award_properties.py::test_issue_households_read_the_carer_element_award

axiom: TheAxiomFoundation/rulespec-uk#520 queued

🤖 Generated with [Claude Code](https://claude.com/claude-code)


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

AXIOM_520_ADDENDUM.md

Title: Addendum to TheAxiomFoundation/rulespec-uk#520 for policyengine-uk#2827 at 31139e822c91a1c052eaccd335e1ece0f856797b

Labels: pe-parity

## Modules

This addendum changes required output 4, restates companion case 9 and adds companion case 16 for the modules #520 names:

- SSI 2021/249 reg 4 (versions 2022-04-01 and 2025-04-01) and reg 10A, under `uk/regulations/ssi/2021/249/`.
- SPC Regs 2002 Sch I para 1 at `uk/regulations/uksi/2002/1792/schedule/I/paragraph/1.yaml` (corpus `uk/regulation/uksi/2002/1792/schedule/I/paragraph/1`), with para 2 for companion case 16.
- UC Regs 2013 reg 17 at `uk/regulations/uksi/2013/376/17.yaml`, and UC Claims and Payments Regs 2013 reg 32A at `uk/regulations/uksi/2013/380/32A.yaml`.

It also names Northern Ireland's counterparts as provisions to ingest for Northern Ireland parity (below).

## Law

Welfare Reform Act 2012 s.5(1) (https://www.legislation.gov.uk/ukpga/2012/5/section/5):

> (1) For the purposes of section 3, the financial conditions for a single claimant are that—
> (a) the claimant's capital, or a prescribed part of it, is not greater than a prescribed amount, and
> (b) the claimant's income is such that, if the claimant were entitled to universal credit, the amount payable would not be less than any prescribed minimum.

UC Regs 2013 reg 17 (https://www.legislation.gov.uk/uksi/2013/376/regulation/17):

> For the purposes of section 5(1)(b) and (2)(b) of the Act (financial conditions: amount payable not less than any prescribed minimum) the minimum is one penny.

UC Claims and Payments Regs 2013 reg 32A(1) and (2) (https://www.legislation.gov.uk/uksi/2013/380/regulation/32A):

> (1) This regulation applies where—
> (a) a claim is made for universal credit, but no award is made because the condition in section 5(1)(b) or 5(2)(b) of the 2012 Act (condition that the claimant's income, or joint claimants' combined income is such that the amount payable would not be less than the prescribed minimum) is not met; or
> (b) entitlement to an award of universal credit ceases because that condition is not met.
> (2) The Secretary of State may, subject to any conditions the Secretary of State considers appropriate, treat the claimant (or joint claimants) as making a claim on the first day of each subsequent month, up to a maximum of 5, that would have been an assessment period if an award had been made or, as the case may be, if the award had continued.

SSI 2021/249 reg 4(1), the definition of "award of universal credit", as at 1 April 2022 (https://www.legislation.gov.uk/ssi/2021/249/regulation/4/2022-04-01), inserted by SSI 2022/52 reg 3(b):

> "award of universal credit" includes a universal credit award with a value of zero,

The same definition as at 1 April 2025 (https://www.legislation.gov.uk/ssi/2021/249/regulation/4/2025-04-01), substituted by SSI 2025/24 reg 8:

> "award of universal credit" means an award of universal credit made under Part 1 of the 2012 Act,

SSI 2021/249 reg 10A (https://www.legislation.gov.uk/ssi/2021/249/regulation/10A), inserted by SSI 2025/24 reg 9:

> For the purposes of these Regulations an award of universal credit includes—
> (a) an award the amount of which is reduced to zero, as a result of a failure by a claimant which is sanctionable under section 26 (higher-level sanctions) or section 27 (other sanctions) of the 2012 Act, and
> (b) an award to which entitlement has ceased in terms of regulation 32A(1)(b) of the Universal Credit, Personal Independence Payment, Jobseeker's Allowance and Employment and Support Allowance (Claims and Payments) Regulations 2013 (reclaims of universal credit after nil award due to earnings), but in relation to which the Secretary of State treats the claimant as making a claim under regulation 32A(2) of those Regulations.

Policy Note to SSI 2025/24, section "Award of Universal Credit" (https://www.legislation.gov.uk/ssi/2025/24/pdfs/ssipn_20250024_en_001.pdf):

> When the Working Age Regulations were brought into force in April 2022, the policy intention was to ensure that in instances where a Universal Credit claimant was receiving £0.00 in Universal Credit due to excess earnings in any Universal Credit assessment period their CTR calculation would be carried out as though the person did have an award of Universal Credit. This approach was taken to prevent the local authorities having to apply the regulations that apply to council tax reduction applicants with no Universal Credit award in these instances, given that the minimum amount payable is £0.01.

> To give effect to the policy intent, a new regulation 10A is inserted into the Working Age Regulations. This provides for an expansion of the circumstances in which the provisions applicable to a council tax reduction applicant with an award of Universal Credit will be taken to continue to apply - covering the scenario of a council tax reduction applicant who is a Universal Credit claimant falling within regulation 32A(2) of the 2013 Regulations, as well as, as at present, the scenario of a claimant the amount of whose award is reduced to zero. A reduction to zero will take place because of a sanction, rather than because of excess earnings. A replacement definition of "award of universal credit" is substituted into regulation 4 to clarify that this means an award of Universal Credit made under Part 1 of the Welfare Reform Act 2012.

The Policy Note to SSI 2022/52 does not mention the definition.

SPC Regs 2002 Sch I para 1(1)(a) and (4) (https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/1):

> (1) For the purposes of regulation 6(4) (additional amounts for persons severely disabled), the claimant is to be treated as being severely disabled if, and only if—
> (a) in the case of a claimant who has no partner—
> (i) he is in receipt of attendance allowance , pension age disability payment , the care component of disability living allowance at the highest or middle rate prescribed in accordance with section 72(3) of the 1992 Act , the care component of Scottish adult disability living allowance at the highest or middle rate in accordance with regulation 6(4) of the Disability Assistance (Scottish Adult Disability Living Allowance) Regulations 2025 , the daily living component of personal independence payment at the standard or enhanced rate in accordance with section 78(3) of the 2012 Act , the daily living component of adult disability payment at the standard or enhanced rate in accordance with regulation 5 of the Disability Assistance for Working Age People (Scotland) Regulations 2022 or armed forces independence payment; and
> (ii) no person who has attained the age of 18 is normally residing with the claimant, nor is the claimant normally residing with such a person, other than a person to whom paragraph 2 applies; and
> (iii) no person is entitled to and in receipt of an allowance under section 70 of the 1992 Act (carer's allowance) or carer support payment , or has an award of universal credit which includes the carer element, in respect of caring for him;

> (4) For the purposes of this paragraph, a person has an award of universal credit which includes the carer element if the person has an award of universal credit which includes an amount which is the carer element under regulation 29 of the Universal Credit Regulations 2013.

SPC Regs 2002 Sch I para 2(1) and (2)(b) (https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/2):

> (1) For the purposes of paragraph 1(1)(a)(ii), (b)(ii) and (c)(iii), this paragraph applies to the persons specified in the following sub-paragraphs.
> (2) A person who—
> (b) is certified as severely sight impaired or blind by a consultant ophthalmologist;

UC Regs 2013 reg 22(1)(b)(ii) and (2) (https://www.legislation.gov.uk/uksi/2013/376/regulation/22):

> (ii) in any other case, 55% of the amount by which that earned income exceeds the work allowance specified in the table.
> (2) The amount of the work allowance is—
> (a) if the award contains no amount for the housing costs element, the applicable amount of the higher work allowance specified in the table below; and
> (b) if the award does contain an amount for the housing costs element, the applicable amount of the lower work allowance specified in that table.

UC Regs 2013 reg 29(4) (https://www.legislation.gov.uk/uksi/2013/376/regulation/29):

> (4) Where an amount would, apart from this paragraph, be included in an award in relation to a claimant by virtue of paragraphs (1) to (3), and the claimant has limited capability for work and work-related activity (and, in the case of joint claimants, the LCWRA element has not been included in respect of the other claimant), only the LCWRA element may be included in respect of the claimant.

UC Regs 2013 Sch 4 para 16(1) and (2)(b) and (d) (https://www.legislation.gov.uk/uksi/2013/376/schedule/4/paragraph/16):

> (1) No deduction is to be made under paragraph 13 in respect of any non-dependant who is a member of the renter's extended benefit unit to whom sub-paragraph (2) applies.
> (2) This sub-paragraph applies to—
> (b) a person in receipt of state pension credit;
> (d) a person in receipt of attendance allowance;

## Changes to the required outputs

**Required output 4, `award_of_universal_credit` (SSI 2021/249 reg 4, Family, Judgment, by date).** Replace the last sentence ("For the 2022 version, state in the summary whether its words reach a claim on which DWP makes no award under C&P reg 32A(1)(a): the sources leave that open.") with this reading, and encode it:

- From 1 April 2022 to 31 March 2025, "includes a universal credit award with a value of zero" reaches an award that exists with a value of zero. Earnings that take the amount payable below one penny fail the financial condition in s.5(1)(b) and (2)(b) (reg 17), so DWP makes no award (C&P reg 32A(1)(a)) or the award's entitlement ceases (reg 32A(1)(b)), and there is no award to have a value. The Scottish Government's Policy Note to SSI 2025/24 confines "as at present" to an award "reduced to zero ... because of a sanction, rather than because of excess earnings", and calls reg 10A "an expansion of the circumstances" that gives the 2022 intention effect. The stated intention does not carry the words.
- So `award_of_universal_credit` holds, in every version, only for an award whose amount payable reaches one penny, or for an award a sanction reduces to zero; from 1 April 2025 also for reg 10A(b)'s award. Take the sanction and the reg 32A categories as leaf inputs, as #520 already asks.
- State in the summary the one arguable case: for an award that earnings end, its last assessment period and any reclaim months under reg 32A(2) from 2022-23 to 2024-25. A purposive "nil award" reading would count them, never a first claim under reg 32A(1)(a). Encode the reading above and record that alternative.

## Companion cases

**Case 9, restated.** The same applicant earns £20,000 in 2024-25. The maximum amount comes to (£393.45 + £198.31) × 12 = £7,101.12; after income tax and National Insurance the applicant keeps earned income of £17,942.66, and DWP's reduction of 0.55 × £17,942.66 = £9,868.46 exceeds the maximum amount. The amount payable falls below one penny, so the applicant fails the financial condition in s.5(1)(b) (reg 17) and has no award; reg 4's 2022 words reach only an award that exists with a value of zero, and DWP neither sanctions the applicant nor makes an award. Para 6(1)(c) does not apply, and councils include no carer premium (with an award, £45.60 a week). PolicyEngine now gives £0 (`council_tax_reduction_carer_premium.yaml`, "In 2024 a Scottish carer whose earnings taper the award to nil has no award and no carer premium").

**Case 16, new: a nil award with a small housing costs element.** In England in 2026-27, the household head, aged 35, holds a certificate of blindness from a consultant ophthalmologist, has a limited capability for work determination but not limited capability for work-related activity, cares 35 hours a week for a single woman aged 75 in another benefit unit of the household, claims no Carer's Allowance, earns £25,000 a year and pays the council £600 a year in rent. The woman receives Attendance Allowance at the higher rate and £10,000 a year of State Pension, and has no other income and no capital.

- The carer's award. Income tax (£25,000 − £12,570) × 0.20 = £2,486.00 and National Insurance (£25,000 − £12,570) × 0.08 = £994.40 leave earned income of £21,519.60. The award would include the carer element, since the carer has no limited capability for work-related activity (reg 29(4)), and a housing costs element of £600; the woman, on Attendance Allowance, brings no non-dependant deduction (Sch 4 para 16(2)(d)). The maximum amount comes to (£424.90 + £209.34) × 12 + £600 = £8,210.88. The award contains a housing costs element, so DWP applies the lower work allowance, £427 × 12 = £5,124.00 (reg 22(2)(b)), and deducts 0.55 × (£21,519.60 − £5,124.00) = £9,017.58 (reg 22(1)(b)(ii)), more than the maximum amount. The amount payable falls below one penny, so the carer has no award (s.5(1)(b); reg 17). An award with no housing costs element and the higher work allowance, £710 × 12 = £8,520, would come to £7,610.88 − 0.55 × (£21,519.60 − £8,520.00) = £461.10, but the carer has no such award.
- The addition. The woman receives Attendance Allowance (para 1(1)(a)(i)); the carer, certified blind, is a person to whom para 2 applies (para 2(2)(b)), so no other resident counts (para 1(1)(a)(ii)); and no one has an award including the carer element in respect of caring for her (para 1(1)(a)(iii) and (4)). DWP includes the severe disability addition, £86.05 × 52 = £4,474.60 a year.
- Pension Credit. The standard minimum guarantee of £238.00 a week and the addition give an appropriate minimum guarantee of £238.00 × 52 + £4,474.60 = £16,850.60. Take her income for Pension Credit as the State Pension, £10,000, as a leaf input from the corpus's income provisions, which this packet does not quote. Guarantee credit comes to £16,850.60 − £10,000.00 = £6,850.60. Her qualifying income, £10,000 / 52 = £192.31 a week, falls short of the savings credit threshold of £208.07, so savings credit comes to nil, and Pension Credit to £6,850.60 a year.
- Expected: `claimant_treated_as_severely_disabled` true for the woman; the addition £4,474.60 a year; Pension Credit £6,850.60 a year. Counting the carer as having an award would give no addition and Pension Credit of £2,376.00.
- The amounts come from DWP Benefit and pension rates 2026 to 2027 and SI 2026/148, as PolicyEngine's parameters record them: UC standard allowance £424.90 and carer element £209.34 a month, work allowances £427 and £710 a month, severe disability addition £86.05 and standard minimum guarantee £238.00 a week, savings credit threshold £208.07 a week. PolicyEngine gives the same addition and Pension Credit (`uc_carer_element_carer_test.yaml`, "A blind carer whose award comes to nil with a small housing costs element does not bar a pensioner's addition"), and household net income of £44,629.40.

## Northern Ireland

PolicyEngine applies the same carer test, attribution, premium and addition in Northern Ireland, with the same amount parameters. For Northern Ireland parity, ingest and encode these counterparts, which use the same words:

- Welfare Reform (Northern Ireland) Order 2015 (SI 2015/2006 (N.I. 1)) art. 10, the financial conditions.
- Universal Credit Regulations (Northern Ireland) 2016 (SR 2016/216) reg 17, the one-penny minimum; reg 30, the carer element; and Sch 4 para 15(2)(b), no non-dependant deduction for a person "in receipt of state pension credit".
- State Pension Credit Regulations (Northern Ireland) 2003 (SR 2003/28) Sch 1 para 1, as SR 2016/236 reg 31(7) amended it. legislation.gov.uk's revised text of the paragraph predates that amendment, so ingest SR 2016/236 reg 31(7) as made and apply it: it inserts ", or has an award of universal credit which includes the carer element," into para 1(1)(a)(iii), (b) and (c)(iv), and adds para 1(4), which defines the award by reference to "regulation 30 of the Universal Credit Regulations (Northern Ireland) 2016".
- Housing Benefit Regulations (Northern Ireland) 2006 (SR 2006/405) Sch 4 para 14(2)(a)(iii), which withholds the premium where a person "has an award of universal credit which includes the carer element under regulation 30 of the Universal Credit Regulations (Northern Ireland) 2016 in respect of caring for him".
- SR 2016/236 regs 26, 28, 35 and 36 insert the same words in Northern Ireland's Income Support, Jobseeker's Allowance, pension-age Housing Benefit and ESA schemes. This packet does not quote those paragraphs as amended; ingest them from the corpus.

A Northern Ireland companion case: in 2026-27 a single woman aged 75 receives Attendance Allowance at the higher rate, and her son aged 40, certified blind and in his own family, cares 35 hours a week, claims no Carer's Allowance and has no income. His award comes to (£424.90 + £209.34) × 12 = £7,610.88 and includes the carer element. She fails SPC Regs (NI) 2003 Sch 1 para 1(1)(a)(iii) as amended, so DWP includes no severe disability addition (without the award, £86.05 a week). PolicyEngine gives no addition (`uc_carer_element_carer_test.yaml`, "In Northern Ireland a son's award including the carer element bars a pensioner's addition"), reading the Great Britain amount parameters; check the Northern Ireland amounts against the Department for Communities' uprating before taking them as Northern Ireland's.

### review_finding (paste as-is)

```yaml
review_finding:
  issue: TheAxiomFoundation/rulespec-uk#520
  source: PolicyEngine/policyengine-uk#2827 at 31139e822c91a1c052eaccd335e1ece0f856797b
  kind: addendum
  changes:
    - required_output: 4
      module: uk/regulations/ssi/2021/249/
      output: award_of_universal_credit
      replace: >-
        "For the 2022 version, state in the summary whether its words reach a
        claim on which DWP makes no award under C&P reg 32A(1)(a): the sources
        leave that open."
      with: >-
        In every version, award_of_universal_credit holds only for an award
        whose amount payable reaches one penny (Welfare Reform Act 2012
        s.5(1)(b) and (2)(b); UC Regs 2013 reg 17) or an award a sanction
        reduces to zero; from 1 April 2025 also for reg 10A(b)'s award. The
        2022-04-01 words "includes a universal credit award with a value of
        zero" reach an award that exists with a value of zero, which the
        Policy Note to SSI 2025/24 confines to a sanction; an earnings nil
        case fails s.5(1)(b), so DWP makes no award (C&P reg 32A(1)(a)) or
        entitlement ceases (reg 32A(1)(b)), and reg 10A(b) in 2025 brought
        part of that case in. Record as arguable, unencoded: for an award that
        earnings end, its last assessment period and reg 32A(2) reclaim
        months from 2022-23 to 2024-25.
    - companion_case: 9
      period: 2024-25
      expected:
        award_of_universal_credit: false
        carer_premium_amount_weekly: 0
      reason: >-
        Earnings of £20,000 take the amount payable below one penny (maximum
        amount £7,101.12, reduction 0.55 x £17,942.66 = £9,868.46), so the
        applicant has no award; reg 4's 2022 words do not reach an earnings
        nil case, and Sch 1 para 6(1)(c) does not apply.
    - companion_case: 16
      new: true
      period: 2026-27
      modules:
        - uk/regulations/uksi/2002/1792/schedule/I/paragraph/1.yaml
        - uk/regulations/uksi/2013/376/17.yaml
      facts:
        carer: >-
          household head aged 35, certified blind, limited capability for
          work but not for work-related activity, cares 35 hours a week for
          the woman, no Carer's Allowance claim, earnings £25,000 a year
          (earned income £21,519.60 after income tax £2,486.00 and National
          Insurance £994.40), council rent £600 a year
        woman: >-
          single, aged 75, another benefit unit of the household, Attendance
          Allowance at the higher rate, State Pension £10,000 a year, no
          other income or capital
      expected:
        carer_award_amount_payable: 0
        carer_has_award_including_carer_element: false
        claimant_treated_as_severely_disabled: true
        severe_disability_addition_annual: 4474.60
        appropriate_minimum_guarantee_annual: 16850.60
        pension_credit_annual: 6850.60
      reason: >-
        Maximum amount (£424.90 + £209.34) x 12 + £600 = £8,210.88; lower
        work allowance £5,124 (reg 22(2)(b)); reduction 0.55 x (£21,519.60 -
        £5,124.00) = £9,017.58 exceeds it, so no award (s.5(1)(b); reg 17).
        DWP ignores the blind carer as a resident (para 2(2)(b)), and no one
        has an award with the carer element for the woman (para 1(1)(a)(iii)
        and (4)), so the addition comes to £86.05 x 52 = £4,474.60 and
        guarantee credit to £16,850.60 - £10,000.00 = £6,850.60.
  northern_ireland:
    ingest:
      - Welfare Reform (Northern Ireland) Order 2015 art. 10
      - UC Regs (NI) 2016 (SR 2016/216) regs 17 and 30 and Sch 4 para 15(2)(b)
      - SPC Regs (NI) 2003 (SR 2003/28) Sch 1 para 1, applying SR 2016/236 reg 31(7) as made
      - HB Regs (NI) 2006 (SR 2006/405) Sch 4 para 14(2)(a)(iii)
      - SR 2016/236 regs 26, 28, 35 and 36 (IS, JSA, HB(SPC) and ESA, as amended)
    companion_case: >-
      2026-27: a woman aged 75 on higher-rate Attendance Allowance; her blind
      son aged 40, in his own family, with no income, has an award of
      £7,610.88 including the carer element; no severe disability addition
      under SPC Regs (NI) 2003 Sch 1 para 1(1)(a)(iii) as amended.
```

## Completion boundary

Parity stays pending until an approved signed-encoder run:

- ingests SSI 2021/249 reg 4 (2022-04-01 and 2025-04-01) and reg 10A, SPC Regs 2002 Sch I paras 1 and 2, UC Regs 2013 reg 17 and UC Claims and Payments Regs 2013 reg 32A, and, for Northern Ireland, the counterparts listed above, with SR 2016/236 reg 31(7) applied to SR 2003/28 Sch 1 para 1;
- encodes required output 4 with the reading above, the sanction and reg 32A categories as leaf inputs, and the arguable ended-award case recorded in its summary, and the Northern Ireland modules to the same outputs as their Great Britain counterparts;
- proves companion cases 1 to 15 from #520, with case 9 as restated here, and cases 16 and the Northern Ireland case, each from the encoded law and the stated amounts, not from PolicyEngine.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Ready for hub review

Head: 31139e822c91a1c052eaccd335e1ece0f856797b on branch claude/carer-element-uc-award-vnhbxo. I branched it from f9fdc636a and merged main at 9b456bda6 as its own commit (ee788a33). It has two commits on top: b6b1ce7c (the carer test, removing the bound, Northern Ireland) and 31139e82 (Scotland). No push went to #2827's branch, and no PR exists for this branch. The three hub documents are in the comments above.

Findings and resolutions

C1: the carer test now reads the actual award. policyengine_uk/variables/gov/dwp/universal_credit/carer_element/has_uc_award_with_carer_element.py:85-94.

  • What it reads. uc_carer_element_included_for_claimant & (uc_carer_element > 0) & (universal_credit_pre_benefit_cap > 0). Where universal_credit is stored or neutralized, it reads receives_uc_carer_element instead.
  • Why the award before the cap. The award before the cap carries the Tax-Free Childcare choice and the non-dependant deduction. I didn't use universal_credit because it cycles inside the branch: first trial, trace universal_credit → uc_benefit_cap_reduction_after_floor → uc_benefit_cap_reduction → benefit_cap_welfare_benefits → child_tax_credit → … → tax_credits_applicable_income → pension_credit.
  • Why the two agree for carer awards. DWP exempts a carer-element award from the cap (reg 83(1)(j)), and uc_deductions leaves at least 1p payable. Invariant 5 now asserts has_uc_award_with_carer_element == receives_uc_carer_element on generated and stored-award households.

The cycle and the cut.

  • Housing route trace (cut removed, mutation B3): has_uc_award_with_carer_element → universal_credit_pre_benefit_cap → uc_maximum_amount → uc_housing_costs_element → uc_non_dep_deductions → uc_individual_non_dep_deduction(_eligible) → uc_non_dep_deduction_exempt → uc_non_dep_receives_pension_credit → pension_credit → … → severe_disability_minimum_guarantee_addition → is_cared_for_by_carer_benefit_recipient → has_uc_award_with_carer_element.
  • What core 3.34.1 does (uv.lock). _check_for_cycle filters stack frames by branch_name == self.branch_name, and get_branch makes a lazy copy that starts from the parent's cached values.
  • So yes: the existing branch already keeps a carer test that reads the award before the cap from cycling, through the housing route and the Tax-Free Childcare route. In the branch, the test reads the award without housing costs.
  • Who it can affect. I checked the hub's reading against the code and it holds:
    • only uc_non_dep_deduction_exempt reads uc_non_dep_receives_pension_credit;
    • that variable reads Pension Credit for the whole family;
    • relevant_benefits.yaml lists armed forces independence payment;
    • the exemption covers DLA middle-plus, the PIP daily living component and Attendance Allowance, but not armed forces independence payment.
  • Where it's documented and pinned. I documented this in the variable and the body, and test_the_non_dependant_branch_reads_the_award_without_housing_costs pins it in 3 request orders. The model gives £3,755.10 with no deduction; the law gives £2,596.50 after a £1,158.60 deduction.

The #2795 tests. I removed the strict xfails and the 3 allowlist entries (the allowlist now matches main). All three pass, and their RuntimeError premises no longer read the bound:

  • the non-dependant test checks that the award comes to more than nil with the deduction supplied as 0;
  • the Tax-Free Childcare test checks that the maximum amount exceeds the reduction;
  • the small-housing test keeps its existing premises.

Each now also asserts that the carer test is false.

juaristi22's case. I added it as YAML in uc_carer_element_carer_test.yaml (12 cases now), worked by hand. The model matches their figures: addition £4,474.60, Pension Credit £6,850.60, household net income £44,629.40.

  • I checked the £100 Household Energy Payment (Budget 2026, model default band D) and the £200 Winter Fuel Payment by summing household_benefits.
  • uc_income_reduction caps at the maximum amount (£8,210.88), so the YAML outputs that rather than £9,017.58. The comment gives both.

The bound. I removed it: nothing reads uc_award_upper_bound after the change. git grep uc_award_upper_bound at head finds no match. I removed its 3 tests, its YAML outputs (two became universal_credit_pre_benefit_cap) and every sentence about it in the four docstrings. No shard_durations.toml lines named those tests.

Scotland. council_tax_reduction_carer_premium.py now reads receives_uc_carer_element in every year from 2022-23. I deleted uc_award_includes_zero_value_award.yaml. The docstring and YAML header follow the ruling, with the arguable ended-award sentence. The 2024 case now expects £0 (with uc_maximum_amount 7,101.12 and uc_earned_income 17,942.66). I found no text in the brief that contradicts the ruling.

Northern Ireland.

  • Citations. I cited the counterparts in the reference tuples of the three variables and in a body section.
  • Country handling. None of has_uc_award_with_carer_element, is_cared_for_by_carer_benefit_recipient, severe_disability_premium or severe_disability_minimum_guarantee_addition reads country, so the model applies the same rule in Northern Ireland.
  • Amounts. The Northern Ireland YAML case uses gov.dwp.universal_credit and gov.dwp.pension_credit.guarantee_credit.severe_disability.addition, which I read. The model has no Northern Ireland-specific amount.

Tests at 31139e82

  • test_uc_carer_element_award_properties.py -n 4: 12 passed (54 s).
  • YAML: 29 files from git grep -l plus guarantee_credit/ plus the changed files, one run each: 439 passed, 0 failed.
  • code_health -n 4: 3,097 passed.
  • check_fix_pr.py, run as pr_fix_evidence.yaml runs it: PASS, with 3 changed executable tests.
  • ruff format --check, ruff check . and F811/F821: clean.
  • git diff --check f9fdc636a HEAD: clean.
  • git merge-tree against origin/main (9b456bda6): exits 0.
  • Merged trees: with hb-ctr-non-dep-exemptions (fde435bd) and with fix-1933-ctr-pensioner-children (e8831fb6b), 12 property tests and the 24 new-file YAML cases pass in each.
  • fix-1971-enhanced-disability (6563f73e): still one textual conflict in council_tax_reduction_premiums.py.
  • Give Scotland and Wales working-age CTR their own rules #1966 (a013f520a): merges cleanly.

Mutations (scratch copies)

  • Revert: the reproducer on main fails with assert np.float32(4474.6) == 0.
  • B1, the bound back in the carer test (uc_award_upper_bound restored from f9fdc636a, with claim and eligibility):
  • B2, the carer test reads universal_credit: 11 of 12 property tests fail with CycleError (benefit cap route).
  • B3, the branch removed from uc_non_dep_receives_pension_credit: 11 of 12 property tests and 10 of 12 carer-test YAML cases fail with CycleError (housing route).
  • B4–B7:
    • B4, the attribution ignores the carer element: 6 of 24 cases fail;
    • B5, the same-person rule dropped: 1 fails;
    • B6, a stored award ignored: 1 fails;
    • B7, a neutralized award ignored: the abolition test fails.
  • S1, a nil award counts from 2022-23 to 2024-25: the 2024 case fails (£2,371.20).
  • S2, a nil award counts in every year: 3 cases fail.

Skipped

  • The 150-household differential against main, not rerun.
  • The seven existing Python suites on these readers, not rerun here; CI runs them. The body says so under "Not rerun at this head".
  • Nothing needed survey data.
  • The brief and LAW-2827.md don't carry the Ipswich BC v TD text or the Northern Ireland IS, JSA, HB(SPC) and ESA paragraphs as amended, so I quoted neither. The body and the addendum cite them only by reference.

Judgment calls

  • I kept receives_uc_carer_element on universal_credit rather than moving it to the award before the cap. Invariant 5 shows the two agree.
  • The pin test asserts the model's current (non-legal) exemption for the armed forces independence payment case, with the law's figures beside it, as the brief allows.
  • The addendum's first line is Title: holding the stub's text, with Labels: pe-parity on line 3. I named no corpus IDs that Bump openfisca-tools #520 didn't already give. Companion case 16 takes Pension Credit income as a leaf input, because the brief carries no Pension Credit income-disregard text.
  • PR_TITLE.txt is unchanged (69 characters).

Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Thanks for the review (review). We moved the branch to 31139e822.

  • C1: the carer test now reads the carer's actual award. It counts a claimant whose award includes the carer element (uc_carer_element_included_for_claimant and uc_carer_element > 0) where universal_credit_pre_benefit_cap comes to more than nil, and it reads receives_uc_carer_element where a simulation stores or neutralizes universal_credit. We removed uc_award_upper_bound and its tests. The three Pay the severe disability premium when a carer's award comes to nil #2795 tests now pass with no expected-failure marker and no allowlist entry, and each asserts that the carer test reads false. We added your executed case as a YAML case, and the model gives your figures: an addition of £4,474.60, Pension Credit of £6,850.60 and household net income of £44,629.40.
  • To avoid the cycle, the carer test reads the award before the cap, and the existing branch in uc_non_dep_receives_pension_credit cuts the non-dependant deduction and Tax-Free Childcare routes. In that branch the carer test reads the award without housing costs. That can change the deduction only for a member of the non-dependant's family with no other exemption. Two kinds of member fit: someone on armed forces independence payment alone, and a blind partner on none of the qualifying benefits (SPC Sch I para 1(1)(c)). test_the_non_dependant_branch_reads_the_award_without_housing_costs pins one such case, and the description gives the traces.
  • On Scotland from 2022-23 to 2024-25, we read the 2022 definition as taking in an award that exists with a value of zero. Earnings that take the amount payable below one penny fail the s.5 financial condition, so DWP makes no award or entitlement ceases (UC Claims and Payments Regs 2013 reg 32A(1)). In its policy note to SSI 2025/24, the Scottish Government confines the existing case to a sanction. So the model reads limb (c) from the positive award in every year from 2022-23. The description quotes reg 4 in both versions, reg 10A, reg 32A(1) and the note, and names the case that stays open to argument: an award that earnings end, in its last assessment period and any reclaim months.
  • For Northern Ireland, the description now cites the counterparts, which use the same words: Welfare Reform (Northern Ireland) Order 2015 art. 10, UC Regs (NI) 2016 regs 17 and 30 and Sch 4 para 15(2)(b), SPC Regs (NI) 2003 Sch 1 para 1 as SR 2016/236 reg 31(7) amended it, and HB Regs (NI) 2006 Sch 4 para 14(2)(a)(iii). A new YAML case covers a son in Northern Ireland whose award includes the carer element. The model reads Great Britain's amounts there, and the Axiom addendum asks for a check against the Department for Communities' uprating.
  • We filed the change for Axiom as an addendum to Encode UC carer awards for the severe disability premium and addition and Scotland's working-age CTR carer premium (PE parity: policyengine-uk#2120, #2124) TheAxiomFoundation/rulespec-uk#520: Encode UC carer awards for the severe disability premium and addition and Scotland's working-age CTR carer premium (PE parity: policyengine-uk#2120, #2124) TheAxiomFoundation/rulespec-uk#520 (comment). It replaces required output 4's open sentence with the reading above, restates companion case 9, adds your case as case 16 and lists the Northern Ireland provisions to ingest. Parity stays queued until the signed encoder runs.

At 31139e822, the 12 property tests pass in one -n 4 run, and the 29 YAML files that name these variables or that the branch changes pass all 439 cases. CI's YAML job passed, and the Python and Aggregate impact jobs are running.

@MaxGhenis
MaxGhenis requested a review from juaristi22 November 3, 2026 21:33

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed 31139e822c91a1c052eaccd335e1ece0f856797b. COMPLETE — C1 resolved; one nonblocking finding remains, no material evidence gaps.

The hypothetical UC bound is gone. The original nil-award case now retains the £4,474.60 severe-disability addition, giving Pension Credit £6,850.60 and household net income £44,629.40. Positive-award cases still remove the addition. The Scottish change and new NI primary evidence resolve the previous source gaps within the stated scope. The actual #520 addendum was checked, including its replacement for case9.

A1 — Correct the blind-renter legal comparison. The cycle section and test_uc_carer_element_award_properties.py:744–768 describe the forced-exemption-false control (£1,158.60 contribution; UC £2,596.50) as the legal outcome. This fixture has a blind single renter: UC Schedule4 paragraph15(1)(a),(2)(a) exempts that renter from all paragraph13 contributions. Relabel that control as counterfactual and correct the body/test explanation, or use a coherent separate example. The current £3,755.10 award is not established to be an overpayment.

Validation: 104/104 tests passed, plus native final PC/CTR/net-income and cache/input checks; exact snapshot dependency pins verified. Independent source review checked 50 originals/extracts. No broad main-merge audit or population estimate is claimed.

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Picking this up for the UK hub. Reply here if you're mid-change and I'll stop.


Generated by Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HcTFPvy9Mo5Upj4Rk
After the merge with main, the model exempts the veteran from the
non-dependant deduction through armed forces independence payment, which
UC Regs 2013 reg 2 counts as attendance allowance for Sch 4 para 16(2)(d).
The veteran test now asserts the model's figures with the branch's
Pension Credit result supplied as false, labels the forced-deduction run
a counterfactual, and records that Sch 4 para 15 exempts the blind single
renter from every deduction. A new test pins a blind partner whose
deduction the branch's result decides.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LwQq6HcTFPvy9Mo5Upj4Rk
@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_TITLE.txt

Count UC carer awards for severe disability and Scottish CTR premiums


Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

PR_BODY.md

Fixes #2120
Fixes #2124

## What and why

DWP and councils count Universal Credit carer-element awards, as they count Carer's Allowance and Carer Support Payment, when deciding the premiums and additions below. The model left the awards out.

- **Severe disability premium and Pension Credit addition (#2120).** DWP and councils withhold the premium or addition when a carer "has an award of universal credit which includes the carer element in respect of caring for" the claimant (HB Regs 2006 Sch 3 para 14(2)(a)(iii) and (b)(iii); HB(SPC) Regs 2006 Sch 3 para 6(2); IS Regs 1987 Sch 2 para 13(2); [SPC Regs 2002 Sch I para 1(1)(a)(iii), (b), (c)(iv) and (4)](https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/1)). Councils apply the same words in England's, Wales's and Scotland's pension-age council tax reduction schemes. `is_cared_for_by_carer_benefit_recipient` attributed only Carer's Allowance and Carer Support Payment.
- **Scotland's working-age CTR carer premium (#2124).** The Scottish Ministers require councils to include the premium for an applicant or partner who has "an award of universal credit which includes the carer element described in regulation 29" (SSI 2021/249 Sch 1 para 6(1)(c)). `carer_premium` applied limbs (a) and (b) only. No other scheme's carer premium has limb (c): under HB Regs 2006 Sch 3 para 17, HB(SPC) Sch 3 para 9, IS Sch 2 para 14ZA, England SI 2012/2885 Sch 2 para 9, Wales WSI 2013/3029 Sch 2 para 9 and Sch 7 para 14, Scotland SSI 2012/319 Sch 1 para 10 and the pre-2022 SSI 2012/303 Sch 1 para 14, DWP and councils test entitlement to Carer's Allowance or Carer Support Payment.

### Changes

- **`has_uc_award_with_carer_element` (Person)** reads the carer's actual award. It counts a claimant in respect of whom the award includes the carer element (`uc_carer_element_included_for_claimant`) where the family's award before the benefit cap (`universal_credit_pre_benefit_cap`) comes to more than nil. Parliament makes it a financial condition of an award that the amount payable reach the prescribed minimum ([Welfare Reform Act 2012 s.5(1)(b) and (2)(b)](https://www.legislation.gov.uk/ukpga/2012/5/section/5)), and DWP sets that minimum at one penny ([UC Regs 2013 reg 17](https://www.legislation.gov.uk/uksi/2013/376/regulation/17)). SPC Sch I para 1(4) asks whether "the person has an award of universal credit which includes an amount which is the carer element under regulation 29". So a carer whose award comes to nil, however it gets there, has no award and no longer bars the premium or addition. Where an input or a scenario stores `universal_credit` for the period, or a reform neutralizes it, the test reads the award itself (`receives_uc_carer_element`): reading a stored award runs no formula, so it cannot cycle. `universal_credit` joins `SUPPLIED_INPUT_VARIABLES` for that check.
- **The award before the cap.** `universal_credit` subtracts the benefit cap reduction, which reads Child Tax Credit, whose income reads Pension Credit, whose addition reads the carer test, so a carer test that read `universal_credit` would cycle. The award before the cap and the final award agree for a family whose award includes the carer element: DWP exempts that award from the cap (UC Regs 2013 reg 83(1)(j); `is_uc_benefit_cap_exempt_specified_benefit`), and `uc_deductions` leaves at least one penny payable. Invariant 5 checks that agreement.
- **`is_cared_for_by_carer_benefit_recipient`** counts a carer-element holder as a carer, in the existing attribution order: claimants and partners of the carer's own benefit unit first, then other members, then claimants and partners of other benefit units, eldest unit first. A carer with both Carer's Allowance and a carer element counts once (SSCBA 1992 s.70(7)). Partners caring for the same severely disabled person have one relevant entitlement between them (s.70(7ZA) and (7A)), so where one receives a carer benefit, the other's carer element adds no second carer.
- **New `council_tax_reduction_carer_premium` (BenUnit).** `council_tax_reduction_premiums` reads it at working age in the same way as `council_tax_reduction_severe_disability_premium`. Outside Scotland's working-age scheme it equals `carer_premium`. In Scotland it counts each claimant or partner entitled to Carer's Allowance or Carer Support Payment (limbs (a) and (b), as `carer_premium`) or with an award of at least one penny that includes the carer element (limb (c), `receives_uc_carer_element`), in every year from 2022-23. It counts each person once (paras 5(2) and 6(1)), and only one of two partners who care for the same person (para 5(3) and (4)). Councils give the carer-element holder priority under para 5(4), which leaves the amount unchanged.
- **Parameter** `gov.local_authorities.scotland.council_tax_reduction.working_age.carer_premium_counts_uc_carer_element`: false from 1 April 2013, true from 1 April 2022.
- Documentation of `severe_disability_premium`, `pension_age_severe_disability_premium`, `severe_disability_minimum_guarantee_addition`, `carer_premium` and `council_tax_reduction_premiums` now describes the limb. A household head who applies alone holds no Universal Credit award of their own in the model, so the head branch of `council_tax_reduction_premiums` keeps its carer test.

### Three routes to a nil award, and the executed case

Each of these awards comes to nil, so the carer has no award, and the model now pays the premium or addition. `policyengine_uk/tests/test_uc_carer_element_award_properties.py` asserts each, after premise checks that raise `RuntimeError`.

- **A non-dependant deduction** (`test_a_non_dependant_deduction_that_takes_the_award_to_nil_leaves_no_award`). A carer aged 40, not blind, cares 35 hours a week for a disabled person aged 50 on the PIP daily living component and earns £27,000. The carer and the disabled person rent a home privately, each liable for half of £12,000, and a blind non-dependant aged 30 earning £20,000 lives with them. DWP deducts £96.55 × 12 = £1,158.60 a year for the non-dependant (UC Regs 2013 Sch 4 paras 13 and 16; blindness brings no exemption, and para 15 does not exempt the carer: the carer claims alone, and the Schedule reserves "joint renters" for joint claimants (para 1(2)), so the disabled co-tenant's PIP brings the carer no exemption under para 15(1)(b)). The carer's housing costs element falls to £6,000 − £1,158.60 = £4,841.40 and the maximum amount to £12,452.28, which the taper of 0.55 × £22,959.60 = £12,627.78 exceeds, so the award comes to nil. DWP does not count the disabled person, a joint tenant, as the carer's non-dependant (para 9(2)(d)), and the council does not count the carer as the disabled person's (HB Regs 2006 reg 3(2)(d)). A blind non-dependant does not bar the disabled person's premium (Sch 3 para 14(4)). The model now pays the disabled person the premium of £86.05 × 52 = £4,474.60.
- **Tax-Free Childcare** (`test_a_family_that_takes_tax_free_childcare_instead_has_no_award`). A blind carer aged 35, earning £60,000, has a child aged 3 in £12,000 of childcare, and the disabled person aged 60 on the PIP daily living component lives in another benefit unit of the household. The family's award would come to £21,458.16 − £20,260.57 = £1,197.59, and Tax-Free Childcare to £2,000, so the family takes no award (`forgoes_universal_credit_for_tax_free_childcare`). The model now pays the disabled person the premium of £4,474.60.
- **A small housing costs element with a work allowance** (`test_small_housing_costs_with_a_work_allowance_leave_no_award`). A blind carer aged 35 cares 35 hours a week for a disabled person aged 60 on the PIP daily living component, who lives in another benefit unit of the household and claims no Universal Credit. DWP has determined that the carer has limited capability for work (UC Regs 2013 reg 39(1)(a)), and under reg 41(1A) cannot treat the carer's paid work as a relevant change of circumstances when it decides whether to reassess that determination (reg 41(1)(b)). So the award has a work allowance (reg 22(1)(b)) and the carer element too: DWP puts the LCWRA element in its place only for a claimant who also has limited capability for work-related activity (reg 29(4)). The carer earns £25,000, claims no Carer's Allowance and pays the council £600 a year in rent. After income tax of £2,486.00 and National Insurance of £994.40, the carer keeps earned income of £21,519.60. With a housing costs element of £600, DWP applies the lower work allowance, £427 × 12 = £5,124 (reg 22(2)(b)). DWP's reduction of 0.55 × (£21,519.60 − £5,124) = £9,017.58 exceeds the maximum amount, (£424.90 + £209.34) × 12 + £600 = £8,210.88, so the award comes to nil. The council ignores the blind carer as a resident (HB Regs 2006 Sch 3 para 14(4)(b)), and the model now pays the disabled person the premium of £4,474.60.
- **The executed case** (`uc_carer_element_carer_test.yaml`, the case "A blind carer whose award comes to nil with a small housing costs element does not bar a pensioner's addition"). The carer of the third route, now the household head, cares for a person aged 75 in another benefit unit who receives Attendance Allowance at the higher rate, £114.60 × 52 = £5,959.20, and £10,000 of State Pension. The carer's award comes to nil as above. DWP ignores the blind carer as a resident ([SPC Sch I para 2(2)(b)](https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/2)), and no one has an award including the carer element in respect of caring for the pensioner, so DWP includes the addition, £86.05 × 52 = £4,474.60. The minimum guarantee comes to £238.00 × 52 + £4,474.60 = £16,850.60, and against £10,000 of State Pension, guarantee credit comes to £6,850.60; qualifying income of £192.31 a week falls short of the savings credit threshold of £208.07. Household net income comes to £25,000 + £10,000 + £5,959.20 + £6,850.60 + £200 Winter Fuel Payment + £100 Household Energy Payment − £2,486.00 − £994.40 = £44,629.40. Counting the carer would take the addition away and leave Pension Credit at £2,376.00 and household net income at £40,154.80; the model now gives £6,850.60 and £44,629.40.

### The cycle and where the model cuts it

The carer test reads the award, and three routes lead from the award back to the carer test:

- **The non-dependant deduction.** With the cut removed, a trace runs `universal_credit_pre_benefit_cap` → `uc_maximum_amount` → `uc_housing_costs_element` → `uc_non_dep_deductions` → `uc_individual_non_dep_deduction` → `uc_individual_non_dep_deduction_eligible` → `uc_non_dep_deduction_exempt` → `uc_non_dep_receives_pension_credit` → `pension_credit` → … → `severe_disability_minimum_guarantee_addition` → `is_cared_for_by_carer_benefit_recipient` → `has_uc_award_with_carer_element`.
- **Tax-Free Childcare.** `forgoes_universal_credit_for_tax_free_childcare` reads `uc_maximum_amount` and `uc_income_reduction`, and so the same housing costs element.
- **The benefit cap.** `universal_credit` → `uc_benefit_cap_reduction_after_floor` → `uc_benefit_cap_reduction` → `benefit_cap_welfare_benefits` → `child_tax_credit` → `ctc_entitlement` → `child_tax_credit_pre_minimum` → `tax_credits_reduction` → `tax_credits_applicable_income` → `pension_credit`.

`uc_non_dep_receives_pension_credit` already calculates the non-dependant family's Pension Credit in a branch (`simulation.get_branch`) with `uc_housing_costs_element` supplied as nil for every family. In policyengine-core 3.34.1, which `uv.lock` pins, `_check_for_cycle` compares only the stack frames whose `branch_name` matches the calculating simulation's, and in the branch the housing costs element reads no formula. So the branch keeps a carer test that reads the award before the cap from cycling through the first two routes: in the branch, the test reads the award without housing costs. The branch does not cut the third route, which cycles inside the branch, so the carer test reads the award before the cap rather than `universal_credit`.

The branch's result decides only the exemption in `uc_non_dep_deduction_exempt`; nothing else reads `uc_non_dep_receives_pension_credit`. The attribution can change that exemption only through the Pension Credit addition of the non-dependant's own family, which then gets Pension Credit with the addition and none without it (`uc_non_dep_receives_pension_credit` reads `pension_credit` for the whole family). The addition needs a claimant or partner with a qualifying benefit in SPC Sch I para 1(1), and the model reads the list from `gov.dwp.pension_credit.guarantee_credit.severe_disability.relevant_benefits`: Attendance Allowance, the DLA care component at the middle or highest rate, the PIP daily living component and armed forces independence payment. `uc_non_dep_deduction_exempt` exempts everyone who receives one of the four in their own right: the DLA care component under UC Regs 2013 Sch 4 para 16(2)(c), the PIP daily living component under para 16(2)(e), and Attendance Allowance and armed forces independence payment under para 16(2)(d), which uses "attendance allowance" as reg 2 defines it, with armed forces independence payment at head (f) (`uc_receives_attendance_allowance`). So the branch's result can change the model's deduction only for a member of that family who receives none of the four and has no other exemption: under head (c) of SPC Sch I para 1(1), a blind partner of a claimant who receives one. Para 16(2) lists no blindness. Where the branch's Pension Credit and the family's own differ, the model then reads that partner's exemption from the counterfactual award.

The law treats those households differently from the model. The family gets the addition under head (c) only if "no person who has attained the age of 18 is normally residing with the partners, nor are the partners normally residing with such a person, other than a person to whom paragraph 2 applies" (para 1(1)(c)(iii)), and the renter lives with them. DWP ignores, under para 2(2), a person who receives a qualifying benefit (head (a)) or whom a consultant ophthalmologist has certified as severely sight impaired or blind (head (b)). Under UC Sch 4 para 15(1)(a), DWP makes no para 13 deduction at all for a single renter to whom para 15(2) applies, and para 15(2) lists a blind person (a), the DLA care component at the middle or highest rate (b), attendance allowance (c), which reg 2's head (f) extends to armed forces independence payment, the PIP daily living component (d) and the Scottish payments ((bb), (ca) and (da)). So wherever DWP ignores a single renter under para 2(2)(a) or (b), it deducts nothing for any non-dependant, whatever the non-dependant's Pension Credit. A couple who claim jointly both live with the partners, so DWP must ignore both, and para 15(1)(b) then exempts them through either. The extracts leave two questions open: a renter whom DWP ignores only under heads (c) to (f) of para 2(2) (certified blind until up to 28 weeks earlier, engaged by a charity to care, that carer's partner, or a child or qualifying young person), whom para 15(2) does not list; and any person under a sub-paragraph of para 2 after (2), which the extracts do not hold. The model ignores a resident who is blind, receives a qualifying benefit or counts as a qualifying young person (`is_counted_resident_for_severe_disability_addition`), so in the model too the addition needs such a renter. The model holds no para 15 exemption, so it deducts for the blind partner unless the branch's result exempts the partner.

`test_the_non_dependant_branch_reads_the_award_without_housing_costs` pins the branch's reading, whichever of `universal_credit`, `pension_credit` and the carer test the simulation requests first. A blind carer aged 40 earning £20,000 rents from the council at £6,000 a year as household head and cares for a veteran aged 70 in another benefit unit, who receives armed forces independence payment and £13,000 of State Pension. The carer's award comes to (£424.90 + £209.34) × 12 + £6,000 − 0.55 × £17,919.60 = £3,755.10, which includes the carer element, so the veteran gets no addition and, keeping £12,914.00 after £86.00 of income tax against a standard minimum guarantee of £238.00 × 52 = £12,376.00, no Pension Credit. In the branch, without housing costs, the carer's award comes to nil, the veteran gets the addition and Pension Credit of (£238.00 + £86.05) × 52 − £12,914.00 = £3,936.60, and the branch returns true. With the branch's result supplied as false, its value in law, the model still exempts the veteran through armed forces independence payment, deducts nothing, and leaves the award at £3,755.10 with the carer element and the veteran's Pension Credit at nil. DWP deducts nothing for this household either, on two grounds: para 15(1)(a) and (2)(a) exempt the carer, a blind single renter, from every deduction, and para 16(2)(d), read with head (f) of reg 2's definition of "attendance allowance", exempts the veteran. The model holds the second ground but not the first, so the model's award and the law's agree, and nothing shows the award of £3,755.10 to overpay. The test also runs a counterfactual that neither the law nor the model gives this household: with the veteran's exemption supplied as false, the model deducts £96.55 × 12 = £1,158.60 and leaves £2,596.50, which still includes the carer element, so even a deduction would leave the carer test and the veteran's nil Pension Credit unchanged.

`test_the_branch_decides_a_blind_partners_deduction` pins a household where the branch's result decides the model's deduction. The veteran now has £21,000 of State Pension and a blind partner aged 68 who receives no disability benefit. After income tax of (£21,000 − £12,570) × 0.20 − £1,260 × 0.20 = £1,434.00, with the partner's marriage allowance, the couple keep £19,566.00, which exceeds the couple's standard minimum guarantee of £363.25 × 52 = £18,889.00, so they get no Pension Credit. In the branch, head (c) gives them the addition and Pension Credit of (£363.25 + £86.05) × 52 − £19,566.00 = £3,797.60, so the branch returns true, and the model exempts the partner, deducts nothing and leaves the carer's award at £3,755.10. With the branch's result supplied as false, its value in law, the model deducts £1,158.60 for the partner and leaves £2,596.50. DWP deducts nothing, because para 15(1)(a) and (2)(a) exempt the carer, so the model's result agrees with the law's through the branch, not through para 15.

### Scotland's definition by date

Before the scheme started on 1 April 2022, the Scottish Ministers inserted into SSI 2021/249 reg 4(1) (SSI 2022/52 reg 3(b)):

> "award of universal credit" includes a universal credit award with a value of zero,

From 1 April 2025, they substituted (SSI 2025/24 reg 8):

> "award of universal credit" means an award of universal credit made under Part 1 of the 2012 Act,

and inserted reg 10A (reg 9):

> For the purposes of these Regulations an award of universal credit includes—
> (a) an award the amount of which is reduced to zero, as a result of a failure by a claimant which is sanctionable under section 26 (higher-level sanctions) or section 27 (other sanctions) of the 2012 Act, and
> (b) an award to which entitlement has ceased in terms of regulation 32A(1)(b) of the Universal Credit, Personal Independence Payment, Jobseeker's Allowance and Employment and Support Allowance (Claims and Payments) Regulations 2013 (reclaims of universal credit after nil award due to earnings), but in relation to which the Secretary of State treats the claimant as making a claim under regulation 32A(2) of those Regulations.

UC Claims and Payments Regs 2013 reg 32A(1):

> (1) This regulation applies where—
> (a) a claim is made for universal credit, but no award is made because the condition in section 5(1)(b) or 5(2)(b) of the 2012 Act (condition that the claimant's income, or joint claimants' combined income is such that the amount payable would not be less than the prescribed minimum) is not met; or
> (b) entitlement to an award of universal credit ceases because that condition is not met.

In its policy note to SSI 2025/24, the Scottish Government records the 2022 intention:

> When the Working Age Regulations were brought into force in April 2022, the policy intention was to ensure that in instances where a Universal Credit claimant was receiving £0.00 in Universal Credit due to excess earnings in any Universal Credit assessment period their CTR calculation would be carried out as though the person did have an award of Universal Credit.

and describes reg 10A as:

> an expansion of the circumstances in which the provisions applicable to a council tax reduction applicant with an award of Universal Credit will be taken to continue to apply - covering the scenario of a council tax reduction applicant who is a Universal Credit claimant falling within regulation 32A(2) of the 2013 Regulations, as well as, as at present, the scenario of a claimant the amount of whose award is reduced to zero. A reduction to zero will take place because of a sanction, rather than because of excess earnings.

From 2022-23 to 2024-25 the Scottish Ministers' definition takes in an award that exists with a value of zero, and in its note the Scottish Government confines that case to a sanction. Earnings that take the amount payable below one penny fail the s.5 financial condition, so DWP makes no award or entitlement to the award ceases, and no award remains to have a value of zero. The Scottish Ministers added reg 10A(b) in 2025 to bring part of that case in. So the model reads limb (c) from the positive award (`receives_uc_carer_element`) in every year from 2022-23. A council could still read the 2022 definition to take in an award that earnings end, for its last assessment period and any reclaim months from 2022-23 to 2024-25. The model cannot tell that award from a first claim, on which DWP makes no award (reg 32A(1)(a)). The model has no input for a sanction or a reg 32A reclaim, so it pays no premium for reg 10A's awards, nor for a sanctioned nil award before 2025.

For example, take a Scottish carer aged 40 who cares 35 hours a week, claims neither Carer's Allowance nor Carer Support Payment, and earns £20,000:

- **2024-25.** The maximum amount comes to (£393.45 + £198.31) × 12 = £7,101.12. The carer keeps earned income of £17,942.66, and DWP's reduction of 0.55 × £17,942.66 = £9,868.46 takes the award to nil. The carer has no award, and the model pays no carer premium, where an award would bring £45.60 × 52 = £2,371.20.
- **2025-26.** The maximum amount comes to (£400.14 + £201.68) × 12 = £7,221.84. The carer keeps earned income of £17,947.87, and DWP's reduction of £9,871.33 takes the award to nil, which leaves no award and no carer premium.

### Northern Ireland

`has_uc_award_with_carer_element`, `is_cared_for_by_carer_benefit_recipient`, `severe_disability_premium` and `severe_disability_minimum_guarantee_addition` read no `country`, so the model applies the same rule in Northern Ireland, with the same parameters for the amounts. Northern Ireland's legislation uses the same words:

- [Welfare Reform (Northern Ireland) Order 2015 art. 10](https://www.legislation.gov.uk/nisi/2015/2006/article/10) sets the financial conditions in the words of s.5, and [UC Regs (NI) 2016 reg 17](https://www.legislation.gov.uk/nisr/2016/216/regulation/17) sets the minimum at one penny.
- [UC Regs (NI) 2016 reg 30](https://www.legislation.gov.uk/nisr/2016/216/regulation/30) includes the carer element, and [Sch 4 para 15(2)(b)](https://www.legislation.gov.uk/nisr/2016/216/schedule/4/paragraph/15) exempts a non-dependant "in receipt of state pension credit" from the deduction.
- [SR 2016/236 reg 31(7)](https://www.legislation.gov.uk/nisr/2016/236/regulation/31/made) inserted ", or has an award of universal credit which includes the carer element," into [SPC Regs (NI) 2003 Sch 1 para 1](https://www.legislation.gov.uk/nisr/2003/28/schedule/1/paragraph/1)(1)(a)(iii), (b) and (c)(iv), and added para 1(4), which refers to UC Regs (NI) 2016 reg 30. legislation.gov.uk's revised text of para 1 predates that amendment.
- [HB Regs (NI) 2006 Sch 4 para 14(2)(a)(iii)](https://www.legislation.gov.uk/nisr/2006/405/schedule/4/paragraph/14) withholds the premium where a person "has an award of universal credit which includes the carer element under regulation 30 of the Universal Credit Regulations (Northern Ireland) 2016 in respect of caring for him".
- SR 2016/236 regs 26, 28, 35 and 36 insert the same words in Northern Ireland's Income Support, Jobseeker's Allowance, pension-age Housing Benefit and ESA schemes.

`uc_carer_element_carer_test.yaml` adds a Northern Ireland case: a blind son aged 40 with no income, caring for a parent aged 75 on Attendance Allowance at the higher rate, has an award of (£424.90 + £209.34) × 12 = £7,610.88 that includes the carer element, so the Department for Communities includes no addition, which would otherwise come to £86.05 × 52 = £4,474.60. The model reads the Universal Credit amounts from `gov.dwp.universal_credit` and the addition from `gov.dwp.pension_credit.guarantee_credit.severe_disability.addition` in every country.

### The 2022-23 Scottish amount

The Scottish Ministers left two amounts in force on 1 April 2022. SSI 2021/249 Sch 1 para 5(1) still read £37.70, as made, while the Ministers had replaced £37.70 with £38.85 in para 17's table (SSI 2022/52 reg 25(c)(ii)). They set both to £42.75 from 1 April 2023 (SSI 2023/38 reg 20(h) and (i)). In its *Council Tax Reduction in Scotland: 2022-2023* statistics (Table 1), the Scottish Government gives the 2022-23 carer premium as £38.85, the para 17 figure, and the model pays the same amount, reading `gov.dwp.carer_premium.single` at 30 April 2022.

### Which years

- The model reads each year's parameters at 30 April of that year (`policyengine_uk/utils/parameters.py`).
- **Severe disability premium and addition.** DWP added the limb to HB, HB(SPC), IS, JSA, ESA and SPC through SI 2015/1754, from 4 November 2015. The government added it to England's pension-age CTR for schemes from 1 April 2016 (SI 2015/2041 reg 1(2)). The Scottish Ministers added it to Scotland's from 1 April 2016 (SSI 2016/81), had it in the working-age SSI 2012/303 by 1 April 2021, and included it in SSI 2021/249 from its start on 1 April 2022. The Welsh Ministers added it to Wales's for schemes from 1 April 2017 (WSI 2017/46 reg 1(3)). No parameter gates the limb. The carer element parameter starts on 9 April 2016, and the programmes' verified years start at 2019 (Universal Credit) and 2022 (Housing Benefit, Pension Credit, Income Support). Before them the model applies the limb in Welsh pension-age CTR in model year 2016, a year before WSI 2017/46, and in model year 2015 before SI 2015/1754, wherever a hand-built household has a carer-element award.
- **Scottish working-age carer premium.** The model applies limb (c) from model year 2022 and needs an award of at least one penny in every year.

### Reforms

A reform that makes `is_uc_eligible` read Pension Credit, or that makes the award before the cap read it, would cycle through the attribution; the invariants below hold for baseline households and stored awards.

### Interaction with #1966

#1966 (draft) gives Scotland's and Wales's working-age CTR their own applicable amount (`council_tax_reduction_working_age_applicable_amount`), with its own carer count in place of `council_tax_reduction_premiums`, so it needs no subtraction from the shared premiums. Its `council_tax_reduction_working_age_carers` adds the carer element as one carer only when neither the claimant nor a partner has a carer benefit entitlement, with no date gate, and reads a positive award (`uc_carer_element > 0` with `council_tax_reduction_working_age_has_universal_credit`). When merging #1966, count each claimant or partner with `is_entitled_to_carer_benefit` or `receives_uc_carer_element` before applying the same-person cap, as `council_tax_reduction_carer_premium` does, and gate limb (c) on `carer_premium_counts_uc_carer_element`. Its positive award matches this branch's reading in every year from 2022-23.

### Overlap with open branches

This head merges `main` at `557087da1` (merge commit `cdf5fbd91`), which brought #2815. Since #2815, `uc_non_dep_deduction_exempt` reads `uc_receives_attendance_allowance`, which counts armed forces independence payment under head (f) of reg 2's definition of "attendance allowance", the term UC Regs 2013 Sch 4 para 16(2)(d) uses. So the model now exempts the veteran in `test_the_non_dependant_branch_reads_the_award_without_housing_costs` whatever the branch returns, and the branch's result can decide a deduction only for a blind partner (above). `main` still holds no para 15 renter exemption.

Against this head, `git merge-tree --write-tree --name-only` finds:

- `main` (`557087da1`): merges cleanly (this head contains it).
- #2808 (`fix-1971-enhanced-disability`, `6563f73e5`): one textual conflict in `council_tax_reduction_premiums.py`, where both branches add a substitution term to the working-age premiums (this branch the carer premium, that one the enhanced disability premium). `main` merges #2808 cleanly, so this branch causes the conflict. Keep both substitutions when resolving it.
- #2861 (`claude/pensioner-ctr-disability-premiums-9b4amp`, `6e96ffef8`), which merges #2808: the same conflict in `council_tax_reduction_premiums.py`, with the same resolution, and three conflicts that #2861 also has with `main`: `council_tax_reduction_pension_credit.yaml`, `test_council_tax_reduction_pension_credit_properties.py` and `council_tax_reduction_applicable_income.py`.
- #2826 (`87cbc397e`): merges cleanly. At `31139e82`, in the tree merged with `fix-1933-ctr-pensioner-children` (`e8831fb6b`), which #2826 builds on, all 12 property tests (`-n 4`, 156 s) and the 24 cases of the two new YAML files passed; a check with historical Child Tax Credit households stays pending.
- #2007 (`hb-ctr-non-dep-exemptions`, `fde435bd3`): conflicts in `docs/book/programs/gov/dwp/housing-benefit.ipynb` and `policyengine_uk/tests/shard_durations.toml`, both of which #2007 also has with `main`. Its HB and CTR non-dependant exemptions read `universal_credit_pre_benefit_cap` and Pension Credit, as the carer test does. At `31139e82`, in the merged tree, all 12 tests in `test_uc_carer_element_award_properties.py` (`-n 4`, 108 s) and the 24 cases of the two new YAML files passed.
- #1966 (`ctr-working-age-shortfall`, `a013f520a`): conflicts in `test_council_tax_reduction_pension_credit_properties.py`, `test_means_test_income_properties.py` and `council_tax_reduction_pensioner.py`, all three of which #1966 also has with `main`.
- #2017 (`b3e0d76b8`): conflicts in `housing-benefit.ipynb` and `shard_durations.toml`, both of which #2017 also has with `main`. #2017 adds the para 15 renter exemption, `uc_non_dep_deductions_renter_exempt`, which exempts a renter who is blind or receives Attendance Allowance, the DLA care component at the middle or highest rate or the PIP daily living component; it reads `attendance_allowance`, not `uc_receives_attendance_allowance`, so it leaves out a renter on armed forces independence payment, whom head (f) of reg 2's definition brings into para 15(2)(c). In a scratch merge of #2017 into this head (the two conflicts resolved with this head's side), the model deducts nothing in either test's household, whatever the branch returns and with the veteran's exemption supplied as false, and leaves the award at £3,755.10. So when #2017 lands, the counterfactual in `test_the_non_dependant_branch_reads_the_award_without_housing_costs` and the run with the branch's result supplied as false in `test_the_branch_decides_a_blind_partners_deduction` need the law's figure, no deduction.

## Invariants

On generated households under baseline law, `policyengine_uk/tests/test_uc_carer_element_award_properties.py` checks:

1. **No change without a carer element.** In a household where no one has `has_uc_award_with_carer_element` or `receives_uc_carer_element`, the attribution, the severe disability premium and its CTR and pension-age variants, and the addition equal their values with `has_uc_award_with_carer_element` supplied as false, and `council_tax_reduction_carer_premium` equals `carer_premium`.
2. **A carer element never raises the severe disability premium or addition**, and never removes anyone from the cared-for set.
3. **The Scottish carer premium never lowers the carer premium** and differs from `carer_premium` only for a Scottish working-age family.
4. **Bounds.** The Scottish premium comes to a whole number of weekly amounts, at most one per claimant or partner, at most one where partners care for the same person.
5. **The carer test matches the award.** `has_uc_award_with_carer_element` equals `receives_uc_carer_element` for every person. `universal_credit_pre_benefit_cap` comes to more than nil wherever `universal_credit` does and, for every family with a carer element, only where `universal_credit` does. The equality also holds where the simulation stores the award (`test_a_stored_award_is_the_award_and_reads_no_cycle`, both reader orders).
6. **Attribution.** Everyone the attribution counts as cared for meets the Carer's Allowance severe disability test; no household has more people cared for than carers; the attribution never counts a lone carer as cared for.
7. **No cycle.** Every reader, with `universal_credit_pre_benefit_cap`, `universal_credit`, `pension_credit`, `housing_benefit`, `income_support`, `council_tax_reduction` and `household_net_income`, calculates on one simulation in either order, on generated baseline households and where the simulation stores the award.
8. **The cut.** In the non-dependant family's Pension Credit branch the carer test reads the award without housing costs; `test_the_non_dependant_branch_reads_the_award_without_housing_costs` pins the veteran's household above in three request orders, where the branch's result changes no deduction and the model's award matches the law's, and `test_the_branch_decides_a_blind_partners_deduction` pins the blind partner's household, where the branch's result decides the model's deduction.

## Test plan

Runs at `f75f41abc` unless stated.

- [x] YAML tests with hand-worked arithmetic citing the provision, amounts from DWP Benefit and pension rates 2026 to 2027 / SI 2026/148 and SSI 2021/249 Sch 1 paras 5(1) and 17 as amended:
  - `policyengine_uk/tests/policy/baseline/household/demographic/uc_carer_element_carer_test.yaml`: 12 cases, 12 passed. The blind carer; a partner inside the benefit unit (couple rate to single rate); a son outside it (addition and pension-age premium); a carer on Carer's Allowance and Universal Credit (one carer); a partner's carer element beside the other partner's allowance (one carer); a carer whose income tapers the award to nil (premium kept); a council-renting carer whose housing costs element keeps an award (premium withheld); a son whose income tapers the award to nil (addition kept); a stored award with no claim (premium withheld); no claim, no award; the executed case (addition £4,474.60, Pension Credit £6,850.60, household net income £44,629.40); and the Northern Ireland son (addition withheld).
  - `policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_premium.yaml`: 12 cases, 12 passed. The issue's Scottish carer aged 40 with `care_hours: 35`; 2022 and 2021; English and Welsh controls; the nil award in 2026, 2024 and 2025 (no premium in each); allowance and carer element together; a couple caring for the same person; a Scottish pensioner; a dependant who receives Carer Support Payment (no premium).
- [x] Every YAML file under `policyengine_uk/tests/policy/baseline/` that names the carer test, the attribution, the severe disability premiums, the addition or the Scottish carer premium, every file in `gov/dwp/pension_credit/guarantee_credit/`, and every YAML file the branch adds or changes since `f9fdc636a` (including two that `main` brought in): 29 files, one `policyengine-core test` run each, 439 cases passed, none failed. #2815's three YAML files (`uc_non_dep_deduction_exempt.yaml`, `uc_receives_attendance_allowance.yaml` and `integration/uc_afip_housing_contribution.yaml`): 24 cases passed, none failed.
- [x] `policyengine_uk/tests/test_uc_carer_element_award_properties.py`, 13 tests: 13 passed in one `-n 4` run (76 s), with no expected failures. At the merge with `main` (`cdf5fbd91`), before the changes to the veteran test, the three runs of `test_the_non_dependant_branch_reads_the_award_without_housing_costs` failed at the deduction with the branch's result supplied as false (`assert np.float32(0.0) == 1158.6 ± 0.0011586`), and the other 9 passed.
  - `test_issue_households_read_the_carer_element_award` (the reproducer; reads only variables that predate the fix): passed; on `main` (`557087da1`) it fails with `assert np.float32(4474.6) == 0`, the blind carer's premium.
  - The three nil-award routes: 3 passed, with no expected-failure marker and no allowlist entry.
  - `test_a_stored_award_is_the_award_and_reads_no_cycle`, forward and reverse reader order: 2 passed.
  - `test_a_reform_that_abolishes_universal_credit_leaves_no_carer_element_award`: passed.
  - `test_the_carer_element_limb_moves_only_its_readers_and_only_one_way` (Hypothesis, invariants 1 to 6) and `test_every_reader_calculates_on_one_simulation_in_any_order` (Hypothesis, invariant 7): passed.
  - `test_the_non_dependant_branch_reads_the_award_without_housing_costs` (invariant 8), three request orders: 3 passed.
  - `test_the_branch_decides_a_blind_partners_deduction` (invariant 8): passed.
- [x] The Python suites on these readers, one `-n 4` run each: `test_severe_disability_premium_properties.py` 6 passed (125 s), `test_severe_disability_addition_properties.py` 7 passed (230 s), `test_legacy_carer_premium_properties.py` 4 passed (86 s), `test_pension_age_severe_disability_premium_properties.py` 3 passed (62 s), `test_disable_simulated_benefits_carers.py` 18 passed (120 s), `test_legacy_award_readers_properties.py` 20 passed (189 s), `test_council_tax_reduction_severe_disability_family.py` 8 passed (17 s), and #2815's `test_uc_afip_housing_contribution_properties.py` 3 passed (21 s).
- [x] `policyengine_uk/tests/code_health -n 4`: 3,153 passed.
- [x] Mutations, each in a copy of the branch: B3 at `f75f41abc`; B1, B2 and B4 to B7 at `b6b1ce7c`, which differs from `31139e82` only in Scotland's carer premium; and S1 and S2 at `31139e82`:
  - B1, the carer test reads the old bound (`uc_award_upper_bound` from `f9fdc636a`, restored, with the claim and eligibility) in place of the award: the three nil-award route tests fail at `has_uc_award_with_carer_element`, and the executed YAML case fails (carer test true); the mutant gives Pension Credit £2,376 and household net income £40,154.80.
  - B2, the carer test reads `universal_credit` in place of the award before the cap: 11 of 12 property tests fail with `CycleError` through the benefit cap route; the abolition test passes.
  - B3, `uc_non_dep_receives_pension_credit` calculates Pension Credit without the branch: 12 of 13 property tests (all but the abolition test) and 10 of the 12 carer-test YAML cases fail with `CycleError` ("Circular definition detected on formula has_uc_award_with_carer_element@2026") through the non-dependant deduction route.
  - B4, the attribution ignores the carer element (`carer = receives`): 6 of the 24 cases in the two new YAML files fail, including the Northern Ireland case.
  - B5, the attribution drops the same-person rule: 1 fails, the partners' case.
  - B6, the carer test ignores a stored award: 1 fails, the stored award.
  - B7, the carer test ignores a neutralized award: the abolition test fails.
  - S1, Scotland counts a nil award from 2022-23 to 2024-25 (the old conditions route): 1 fails, 2024 (£2,371.20 instead of £0).
  - S2, Scotland counts a nil award in every year (`uc_carer_element_included_for_claimant` in place of the award): 3 fail, 2026 (£2,503.80), 2024 (£2,371.20) and 2025 (£2,412.80).
  - At `fff13eda8` (`31139e82` keeps the lines these three change): M4, limb (c) from 2013 (the 2021 case fails); M5, `council_tax_reduction_premiums` drops the carer premium substitution (2 fail); M6, the Scottish premium counts every member (1 fails, the dependant).
- [x] `uvx ruff@0.17.2 format --check .`, `ruff check .`, `ruff check --select F811,F821 policyengine_uk` and `git diff --check 31139e822..HEAD`: clean.
- [ ] Not rerun at this head: the 150-household differential against `main`.
- [x] Changelog fragment `changelog.d/2120.fixed.md`.

## Reproducer

Reproducer: policyengine_uk/tests/test_uc_carer_element_award_properties.py::test_issue_households_read_the_carer_element_award

axiom: TheAxiomFoundation/rulespec-uk#520 queued, with an addendum for the carer's actual award, Scotland's limb (c) by date and Northern Ireland (https://github.com/TheAxiomFoundation/rulespec-uk/issues/520#issuecomment-6615915535)

🤖 Generated with [Claude Code](https://claude.com/claude-code)




Generated by Claude Code

@MaxGhenis

Copy link
Copy Markdown
Collaborator Author

Ready for hub review

Head: f75f41abc6637ad2d43912e3c0bdc191c6aff625 on branch claude/veteran-test-law-comparison-9vqlu1. I started it from 31139e822, merged main at 557087da1 with a merge commit (cdf5fbd914903f4ac031a72f5bfc52fdefd5cddc; no conflicts), and added one commit. I opened no PR and left claude/uc-carer-awards-nits-1pezj2 alone. The branch has no PR, so it started no CI.

Step 1: the merge, before any other change

test_uc_carer_element_award_properties.py at cdf5fbd91: 3 failed and 9 passed (-n 4). The three failures are test_the_non_dependant_branch_reads_the_award_without_housing_costs[universal_credit], [pension_credit] and [has_uc_award_with_carer_element]. Each fails at line 766 with assert np.float32(0.0) == 1158.6 ± 0.0011586. That confirms the hub's reading: since #2815, the model exempts the veteran through armed forces independence payment whatever uc_non_dep_receives_pension_credit says.

A1: the veteran test (policyengine_uk/tests/test_uc_carer_element_award_properties.py)

  • veteran_situation (line 692) now takes pension_credit (which supplies the branch's flag), veteran_exempt (which supplies the veteran's uc_non_dep_deduction_exempt) and blind_partner. The docstring states that para 15(1)(a) and (2)(a) exempt the carer, a blind single renter, from every deduction, and that the model holds no such exemption.
  • test_the_non_dependant_branch_reads_the_award_without_housing_costs (line 747). The test keeps the fixture and the assertions on the model's figures in all three request orders, and I checked each figure at the merge: carer test [True, False], Pension Credit [0, 0], branch flag [False, True], deduction 0, award £3,755.10. "The law's figures" has become a run with the flag supplied as false, its value in law. It asserts exemption [False, True], deduction 0, an award of £3,755.10 that still includes the carer element, and nil Pension Credit for the veteran. The forced deduction (£1,158.60, award £2,596.50) stays as a run with veteran_exempt=False, labelled a counterfactual that neither the law nor the model gives this household. The comment says what it shows: even with a deduction, the award keeps the carer element, so the carer test and the veteran's Pension Credit stay unchanged. The comment now gives the law's two grounds (para 15(1)(a) and (2)(a) for the carer; para 16(2)(d) with head (f) of reg 2 for the veteran). It says the model holds the second but not the first, and it no longer contains "names no armed forces independence payment".
  • Arithmetic correction. The old comment gave the branch's Pension Credit as (238.00 + 86.05 − 250.00) × 52 = 3,850.60. That figure ignores the veteran's income tax of £86.00 (£13,000 − £12,570 at 20%). The model's branch gives (238.00 + 86.05) × 52 − 12,914.00 = £3,936.60, which I confirmed with get_branch and with a run that sets every housing costs element to nil. The comment and the body now use £3,936.60. The main run's nil Pension Credit doesn't change: £12,914 exceeds £12,376.
  • New test test_the_branch_decides_a_blind_partners_deduction (line 819). The same household, but the veteran gets £21,000 of State Pension and a blind partner aged 68 who receives no benefit. Income tax comes to £1,434.00, with the partner's marriage allowance of £1,260 (the model gives marriage_allowance [0, 1260, 0]). The couple keep £19,566.00 against a guarantee of £18,889.00, so they get no Pension Credit. In the branch, head (c) gives them the addition and Pension Credit of £3,797.60. With the flag true, the model exempts the partner and deducts nothing, leaving an award of £3,755.10. With the flag supplied as false, it deducts £1,158.60 and leaves £2,596.50. The law's outcome is no deduction, under para 15(1)(a) and (2)(a). I added this test because the law gives its outcome directly.
  • Invariant 8 in the module docstring (lines 50–56) now names both tests.

Step 3: where the cut can still change the deduction

At the merge, relevant_benefits lists attendance_allowance, dla_sc_middle_plus, pip_dl and armed_forces_independence_payment. uc_non_dep_deduction_exempt exempts a person on dla_sc_middle_plus, pip_dl > 0 or uc_receives_attendance_allowance (which reads attendance_allowance and armed_forces_independence_payment). So every member who qualifies for the addition in their own right already holds an exemption. The flag can change the model's deduction only for a blind partner under SPC Sch I para 1(1)(c) who receives none of the four and has no other exemption. The person on armed forces independence payment alone drops out of the list.

The law: the addition under head (c) needs the renter to be someone to whom para 2 applies (para 1(1)(c)(iii)). If DWP ignores the renter under para 2(2)(a) or (b), then para 15(2) lists every one of those benefits (with AFIP through reg 2 head (f) at (c)) and blindness at (a), so para 15(1)(a), or (1)(b) for a joint claim, exempts the renter from every deduction. The extracts leave two cases open: a renter whom DWP ignores only under para 2(2)(c) to (f), and any sub-paragraph of para 2 after (2), which LAW-2827.md does not hold. The body says all of this in the second paragraph of "The cycle and where the model cuts it", and the model's resident test (is_counted_resident_for_severe_disability_addition: blind, a qualifying benefit, or a qualifying young person) matches it.

Step 4: other text

  • Fixed in a file the PR changes: policyengine_uk/variables/gov/dwp/universal_credit/carer_element/has_uc_award_with_carer_element.py documentation. Its list no longer has "someone who receives armed forces independence payment and no other qualifying benefit", and "can exempt a non-dependant whom the law does not, or the reverse" now says that para 15 exempts such a renter and that the model holds no para 15 exemption.
  • uc_non_dep_deduction_exempt.py (not in the PR): I found no statement that the merge or step 3 makes wrong. Its documentation lists the para 16 exemptions and doesn't claim to cover para 15.
  • uc_non_dep_receives_pension_credit.py (not in the PR; I left it alone). Two statements no longer hold once the carer test reads the carer's award, because the branch sets every family's housing costs element to nil, the renter's included:
    • Documentation: "Calculating its Pension Credit in a branch with that element fixed at zero therefore preserves its entitlement, including legacy-closure routing, take-up, explicit inputs and frozen Pension Credit reforms." Suggested replacement: "The formula calculates its Pension Credit in a branch with every family's housing costs element set to nil. That keeps the family's legacy-closure routing, take-up, explicit inputs and frozen Pension Credit reforms. Where the family's severe disability addition reads a renter's Universal Credit award that includes the carer element, the branch reads that award without housing costs, so the branch's Pension Credit can differ from the family's own."
    • Code comment: "This branch keeps their actual Pension Credit calculation while breaking the cycle through the renter's UC entitlement and pension-age route." Suggested replacement: "The branch keeps the family's own Pension Credit calculation and breaks the cycle through the renter's award. Where the family's severe disability addition reads a renter's carer element, the branch reads the renter's award without housing costs."

Tests at f75f41abc (clean runs)

  • policyengine-core test, one run per file. The 29 files that the body's test plan counts all passed, 439 cases in total: finance/benefit/carer_premium.yaml 27; housing_benefit_applicable_income_childcare_element.yaml 50; housing_benefit_special_disregard.yaml 14; housing_benefit_wtc_disregard.yaml 13; housing_benefit_lha_category.yaml 9; pension_age_premiums.yaml 12; pension_age_severe_disability_conditions.yaml 6; income_support/legacy_premiums.yaml 8; rent_of_sharers_boarders_and_lodgers.yaml 19; severe_disability_premium.yaml 39; severe_disability_premium_commencement.yaml 10; severe_disability_premium_joint_occupiers.yaml 15; finance/benefit/general.yaml 5; carers_allowance_overlapping_benefits.yaml 25; guarantee_credit/carer_and_severe_disability_additions.yaml 13; child_amount_tax_credit_award.yaml 10; child_minimum_guarantee_addition.yaml 5; in_receipt_of_guarantee_credit.yaml 7; is_guarantee_credit_eligible.yaml 4; severe_disability_claimant_partner.yaml 4; severe_disability_residence_and_carers.yaml 32; standard_minimum_guarantee.yaml 6; trading_allowance_claim_status.yaml 57; council_tax_reduction_carer_premium.yaml 12 (new); severe_disability_premium_young_person.yaml 3; is_cared_for_by_carer_benefit_recipient.yaml 17; uc_carer_element_carer_test.yaml 12 (new); soc2020_major_group.yaml 3; soc2020_sub_major_group.yaml 2. I rebuilt the list from the body's description (the readers named under tests/policy/baseline/, every file in guarantee_credit/, and every YAML file the diff f9fdc636a..31139e822 touches), and it reproduces the 29 files and 439 cases.
  • Count AFIP as attendance allowance in UC housing cost contributions #2815's three YAML files all passed: uc_non_dep_deduction_exempt.yaml 6, uc_receives_attendance_allowance.yaml 9 and integration/uc_afip_housing_contribution.yaml 9.
  • pytest -n 4, one run per file, all passing: test_uc_carer_element_award_properties.py 13 (76 s); test_severe_disability_premium_properties.py 6 (125 s); test_severe_disability_addition_properties.py 7 (230 s); test_legacy_carer_premium_properties.py 4 (86 s); test_pension_age_severe_disability_premium_properties.py 3 (62 s); test_disable_simulated_benefits_carers.py 18 (120 s); test_legacy_award_readers_properties.py 20 (189 s); test_council_tax_reduction_severe_disability_family.py 8 (17 s); test_uc_afip_housing_contribution_properties.py 3 (21 s); code_health 3,153 (203 s). No file ran past 20 minutes.
  • Reproducer on main at 557087da1, with this head's test file copied in: fails with assert np.float32(4474.6) == 0.
  • Mutation B3, in a copy of f75f41abc, with uc_non_dep_receives_pension_credit returning (benunit("pension_credit") > 0) & ~rent_liable. 12 of 13 property tests fail and only test_a_reform_that_abolishes_universal_credit_leaves_no_carer_element_award passes. The failures are both test_a_stored_award… orders, the three nil-award routes, the reproducer, both Hypothesis tests, the three veteran orders and the blind-partner test. The error is CycleError: Circular definition detected on formula has_uc_award_with_carer_element@2026. In uc_carer_element_carer_test.yaml, 10 of 12 cases fail, with only CycleError in the output.
  • .github/check_fix_pr.py on the final title and body, with the changes file taken from git diff --name-status --no-renames -z $(merge-base main HEAD) HEAD and no labels: Fix evidence: PASS … Changed executable tests: 3.
  • uvx ruff@0.17.2 format --check .: 2,218 files already formatted. ruff check . and ruff check --select F811,F821 policyengine_uk: all checks passed. git diff --check 31139e822..HEAD: clean.
  • Passive-voice grep on PR_BODY.md: the only hits sit in quoted Scottish law and the policy note.

git merge-tree --write-tree --name-only HEAD <head>

PR head conflicts with this head also with main?
#2808 6563f73e5 council_tax_reduction_premiums.py no (main merges #2808 cleanly)
#2861 6e96ffef8 council_tax_reduction_premiums.py; council_tax_reduction_pension_credit.yaml; test_council_tax_reduction_pension_credit_properties.py; council_tax_reduction_applicable_income.py the premiums file no; the other three yes
#2826 87cbc397e none none
#2007 fde435bd3 docs/book/programs/gov/dwp/housing-benefit.ipynb; policyengine_uk/tests/shard_durations.toml yes, both
#1966 a013f520a test_council_tax_reduction_pension_credit_properties.py; test_means_test_income_properties.py; council_tax_reduction_pensioner.py yes, all three
#2017 b3e0d76b8 housing-benefit.ipynb; shard_durations.toml yes, both

#2017. In a scratch merge of #2017 into this head, I resolved the two conflicts with -X ours. There the model deducts nothing in every variant of both households (default, flag false, veteran_exempt=False, blind partner, blind partner with flag false), and the award stays at £3,755.10. So when #2017 lands, two assertion blocks need the law's figure, no deduction: the counterfactual block in the veteran test and the flag-false block in the blind-partner test. #2017's uc_non_dep_deductions_renter_exempt reads attendance_allowance > 0, so it misses a renter on armed forces independence payment, whom para 15(2)(c) covers through reg 2's head (f). The body records both points.

Skipped, and judgment calls

PR_TITLE.txt

Count UC carer awards for severe disability and Scottish CTR premiums

REPLY.md

Thanks for the re-review of `31139e82`. On A1:

- **The test.** `test_the_non_dependant_branch_reads_the_award_without_housing_costs` no longer calls the forced deduction the law's outcome. With `uc_non_dep_receives_pension_credit` supplied as false, its value in law, the test now asserts what the merged code gives: no deduction, an award of £3,755.10 that still includes the carer element, and nil Pension Credit for the veteran. The run with £1,158.60 deducted and an award of £2,596.50 stays as a counterfactual, with the veteran's exemption supplied as false; the comment says that neither the law nor the model gives it and that the award keeps the carer element even then. The comment now gives the law's two grounds for deducting nothing: Sch 4 para 15(1)(a) and (2)(a) exempt the carer, a blind single renter, and para 16(2)(d), read with head (f) of reg 2's definition of "attendance allowance", exempts the veteran. The model holds the second but not the first, so its award and the law's agree. The comment also corrects the branch's Pension Credit to £3,936.60: the veteran pays £86 of income tax.
- **The merge with `main`.** This head merges `main` at `557087da1`, which brought #2815's exemption for armed forces independence payment. At the merge, before any other change, the old assertions failed (`0.0 == 1158.6`). Since #2815, the branch's result can change the model's deduction only for a blind partner under SPC Sch I para 1(1)(c). A new test, `test_the_branch_decides_a_blind_partners_deduction`, pins that case: the branch exempts the partner, and DWP deducts nothing either, through para 15. The body's cycle section explains when para 15 decides these households and where the extracts leave a question open. It also notes that #2017's renter exemption reads Attendance Allowance but not armed forces independence payment.
- **Runs at `f75f41abc`.** All 13 tests in the carer file passed. The 29 YAML files passed 439 cases, and #2815's three YAML files passed 24. The seven reader suites and #2815's property suite all passed, as did `code_health` (3,153 tests). Mutation B3 gives a `CycleError` in 12 of 13 property tests and 10 of 12 YAML cases. Fix evidence, ruff and `git diff --check` came back clean.

PR_BODY.md

Fixes #2120
Fixes #2124

## What and why

DWP and councils count Universal Credit carer-element awards, as they count Carer's Allowance and Carer Support Payment, when deciding the premiums and additions below. The model left the awards out.

- **Severe disability premium and Pension Credit addition (#2120).** DWP and councils withhold the premium or addition when a carer "has an award of universal credit which includes the carer element in respect of caring for" the claimant (HB Regs 2006 Sch 3 para 14(2)(a)(iii) and (b)(iii); HB(SPC) Regs 2006 Sch 3 para 6(2); IS Regs 1987 Sch 2 para 13(2); [SPC Regs 2002 Sch I para 1(1)(a)(iii), (b), (c)(iv) and (4)](https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/1)). Councils apply the same words in England's, Wales's and Scotland's pension-age council tax reduction schemes. `is_cared_for_by_carer_benefit_recipient` attributed only Carer's Allowance and Carer Support Payment.
- **Scotland's working-age CTR carer premium (#2124).** The Scottish Ministers require councils to include the premium for an applicant or partner who has "an award of universal credit which includes the carer element described in regulation 29" (SSI 2021/249 Sch 1 para 6(1)(c)). `carer_premium` applied limbs (a) and (b) only. No other scheme's carer premium has limb (c): under HB Regs 2006 Sch 3 para 17, HB(SPC) Sch 3 para 9, IS Sch 2 para 14ZA, England SI 2012/2885 Sch 2 para 9, Wales WSI 2013/3029 Sch 2 para 9 and Sch 7 para 14, Scotland SSI 2012/319 Sch 1 para 10 and the pre-2022 SSI 2012/303 Sch 1 para 14, DWP and councils test entitlement to Carer's Allowance or Carer Support Payment.

### Changes

- **`has_uc_award_with_carer_element` (Person)** reads the carer's actual award. It counts a claimant in respect of whom the award includes the carer element (`uc_carer_element_included_for_claimant`) where the family's award before the benefit cap (`universal_credit_pre_benefit_cap`) comes to more than nil. Parliament makes it a financial condition of an award that the amount payable reach the prescribed minimum ([Welfare Reform Act 2012 s.5(1)(b) and (2)(b)](https://www.legislation.gov.uk/ukpga/2012/5/section/5)), and DWP sets that minimum at one penny ([UC Regs 2013 reg 17](https://www.legislation.gov.uk/uksi/2013/376/regulation/17)). SPC Sch I para 1(4) asks whether "the person has an award of universal credit which includes an amount which is the carer element under regulation 29". So a carer whose award comes to nil, however it gets there, has no award and no longer bars the premium or addition. Where an input or a scenario stores `universal_credit` for the period, or a reform neutralizes it, the test reads the award itself (`receives_uc_carer_element`): reading a stored award runs no formula, so it cannot cycle. `universal_credit` joins `SUPPLIED_INPUT_VARIABLES` for that check.
- **The award before the cap.** `universal_credit` subtracts the benefit cap reduction, which reads Child Tax Credit, whose income reads Pension Credit, whose addition reads the carer test, so a carer test that read `universal_credit` would cycle. The award before the cap and the final award agree for a family whose award includes the carer element: DWP exempts that award from the cap (UC Regs 2013 reg 83(1)(j); `is_uc_benefit_cap_exempt_specified_benefit`), and `uc_deductions` leaves at least one penny payable. Invariant 5 checks that agreement.
- **`is_cared_for_by_carer_benefit_recipient`** counts a carer-element holder as a carer, in the existing attribution order: claimants and partners of the carer's own benefit unit first, then other members, then claimants and partners of other benefit units, eldest unit first. A carer with both Carer's Allowance and a carer element counts once (SSCBA 1992 s.70(7)). Partners caring for the same severely disabled person have one relevant entitlement between them (s.70(7ZA) and (7A)), so where one receives a carer benefit, the other's carer element adds no second carer.
- **New `council_tax_reduction_carer_premium` (BenUnit).** `council_tax_reduction_premiums` reads it at working age in the same way as `council_tax_reduction_severe_disability_premium`. Outside Scotland's working-age scheme it equals `carer_premium`. In Scotland it counts each claimant or partner entitled to Carer's Allowance or Carer Support Payment (limbs (a) and (b), as `carer_premium`) or with an award of at least one penny that includes the carer element (limb (c), `receives_uc_carer_element`), in every year from 2022-23. It counts each person once (paras 5(2) and 6(1)), and only one of two partners who care for the same person (para 5(3) and (4)). Councils give the carer-element holder priority under para 5(4), which leaves the amount unchanged.
- **Parameter** `gov.local_authorities.scotland.council_tax_reduction.working_age.carer_premium_counts_uc_carer_element`: false from 1 April 2013, true from 1 April 2022.
- Documentation of `severe_disability_premium`, `pension_age_severe_disability_premium`, `severe_disability_minimum_guarantee_addition`, `carer_premium` and `council_tax_reduction_premiums` now describes the limb. A household head who applies alone holds no Universal Credit award of their own in the model, so the head branch of `council_tax_reduction_premiums` keeps its carer test.

### Three routes to a nil award, and the executed case

Each of these awards comes to nil, so the carer has no award, and the model now pays the premium or addition. `policyengine_uk/tests/test_uc_carer_element_award_properties.py` asserts each, after premise checks that raise `RuntimeError`.

- **A non-dependant deduction** (`test_a_non_dependant_deduction_that_takes_the_award_to_nil_leaves_no_award`). A carer aged 40, not blind, cares 35 hours a week for a disabled person aged 50 on the PIP daily living component and earns £27,000. The carer and the disabled person rent a home privately, each liable for half of £12,000, and a blind non-dependant aged 30 earning £20,000 lives with them. DWP deducts £96.55 × 12 = £1,158.60 a year for the non-dependant (UC Regs 2013 Sch 4 paras 13 and 16; blindness brings no exemption, and para 15 does not exempt the carer: the carer claims alone, and the Schedule reserves "joint renters" for joint claimants (para 1(2)), so the disabled co-tenant's PIP brings the carer no exemption under para 15(1)(b)). The carer's housing costs element falls to £6,000 − £1,158.60 = £4,841.40 and the maximum amount to £12,452.28, which the taper of 0.55 × £22,959.60 = £12,627.78 exceeds, so the award comes to nil. DWP does not count the disabled person, a joint tenant, as the carer's non-dependant (para 9(2)(d)), and the council does not count the carer as the disabled person's (HB Regs 2006 reg 3(2)(d)). A blind non-dependant does not bar the disabled person's premium (Sch 3 para 14(4)). The model now pays the disabled person the premium of £86.05 × 52 = £4,474.60.
- **Tax-Free Childcare** (`test_a_family_that_takes_tax_free_childcare_instead_has_no_award`). A blind carer aged 35, earning £60,000, has a child aged 3 in £12,000 of childcare, and the disabled person aged 60 on the PIP daily living component lives in another benefit unit of the household. The family's award would come to £21,458.16 − £20,260.57 = £1,197.59, and Tax-Free Childcare to £2,000, so the family takes no award (`forgoes_universal_credit_for_tax_free_childcare`). The model now pays the disabled person the premium of £4,474.60.
- **A small housing costs element with a work allowance** (`test_small_housing_costs_with_a_work_allowance_leave_no_award`). A blind carer aged 35 cares 35 hours a week for a disabled person aged 60 on the PIP daily living component, who lives in another benefit unit of the household and claims no Universal Credit. DWP has determined that the carer has limited capability for work (UC Regs 2013 reg 39(1)(a)), and under reg 41(1A) cannot treat the carer's paid work as a relevant change of circumstances when it decides whether to reassess that determination (reg 41(1)(b)). So the award has a work allowance (reg 22(1)(b)) and the carer element too: DWP puts the LCWRA element in its place only for a claimant who also has limited capability for work-related activity (reg 29(4)). The carer earns £25,000, claims no Carer's Allowance and pays the council £600 a year in rent. After income tax of £2,486.00 and National Insurance of £994.40, the carer keeps earned income of £21,519.60. With a housing costs element of £600, DWP applies the lower work allowance, £427 × 12 = £5,124 (reg 22(2)(b)). DWP's reduction of 0.55 × (£21,519.60 − £5,124) = £9,017.58 exceeds the maximum amount, (£424.90 + £209.34) × 12 + £600 = £8,210.88, so the award comes to nil. The council ignores the blind carer as a resident (HB Regs 2006 Sch 3 para 14(4)(b)), and the model now pays the disabled person the premium of £4,474.60.
- **The executed case** (`uc_carer_element_carer_test.yaml`, the case "A blind carer whose award comes to nil with a small housing costs element does not bar a pensioner's addition"). The carer of the third route, now the household head, cares for a person aged 75 in another benefit unit who receives Attendance Allowance at the higher rate, £114.60 × 52 = £5,959.20, and £10,000 of State Pension. The carer's award comes to nil as above. DWP ignores the blind carer as a resident ([SPC Sch I para 2(2)(b)](https://www.legislation.gov.uk/uksi/2002/1792/schedule/I/paragraph/2)), and no one has an award including the carer element in respect of caring for the pensioner, so DWP includes the addition, £86.05 × 52 = £4,474.60. The minimum guarantee comes to £238.00 × 52 + £4,474.60 = £16,850.60, and against £10,000 of State Pension, guarantee credit comes to £6,850.60; qualifying income of £192.31 a week falls short of the savings credit threshold of £208.07. Household net income comes to £25,000 + £10,000 + £5,959.20 + £6,850.60 + £200 Winter Fuel Payment + £100 Household Energy Payment − £2,486.00 − £994.40 = £44,629.40. Counting the carer would take the addition away and leave Pension Credit at £2,376.00 and household net income at £40,154.80; the model now gives £6,850.60 and £44,629.40.

### The cycle and where the model cuts it

The carer test reads the award, and three routes lead from the award back to the carer test:

- **The non-dependant deduction.** With the cut removed, a trace runs `universal_credit_pre_benefit_cap` → `uc_maximum_amount` → `uc_housing_costs_element` → `uc_non_dep_deductions` → `uc_individual_non_dep_deduction` → `uc_individual_non_dep_deduction_eligible` → `uc_non_dep_deduction_exempt` → `uc_non_dep_receives_pension_credit` → `pension_credit` → … → `severe_disability_minimum_guarantee_addition` → `is_cared_for_by_carer_benefit_recipient` → `has_uc_award_with_carer_element`.
- **Tax-Free Childcare.** `forgoes_universal_credit_for_tax_free_childcare` reads `uc_maximum_amount` and `uc_income_reduction`, and so the same housing costs element.
- **The benefit cap.** `universal_credit` → `uc_benefit_cap_reduction_after_floor` → `uc_benefit_cap_reduction` → `benefit_cap_welfare_benefits` → `child_tax_credit` → `ctc_entitlement` → `child_tax_credit_pre_minimum` → `tax_credits_reduction` → `tax_credits_applicable_income` → `pension_credit`.

`uc_non_dep_receives_pension_credit` already calculates the non-dependant family's Pension Credit in a branch (`simulation.get_branch`) with `uc_housing_costs_element` supplied as nil for every family. In policyengine-core 3.34.1, which `uv.lock` pins, `_check_for_cycle` compares only the stack frames whose `branch_name` matches the calculating simulation's, and in the branch the housing costs element reads no formula. So the branch keeps a carer test that reads the award before the cap from cycling through the first two routes: in the branch, the test reads the award without housing costs. The branch does not cut the third route, which cycles inside the branch, so the carer test reads the award before the cap rather than `universal_credit`.

The branch's result decides only the exemption in `uc_non_dep_deduction_exempt`; nothing else reads `uc_non_dep_receives_pension_credit`. The attribution can change that exemption only through the Pension Credit addition of the non-dependant's own family, which then gets Pension Credit with the addition and none without it (`uc_non_dep_receives_pension_credit` reads `pension_credit` for the whole family). The addition needs a claimant or partner with a qualifying benefit in SPC Sch I para 1(1), and the model reads the list from `gov.dwp.pension_credit.guarantee_credit.severe_disability.relevant_benefits`: Attendance Allowance, the DLA care component at the middle or highest rate, the PIP daily living component and armed forces independence payment. `uc_non_dep_deduction_exempt` exempts everyone who receives one of the four in their own right: the DLA care component under UC Regs 2013 Sch 4 para 16(2)(c), the PIP daily living component under para 16(2)(e), and Attendance Allowance and armed forces independence payment under para 16(2)(d), which uses "attendance allowance" as reg 2 defines it, with armed forces independence payment at head (f) (`uc_receives_attendance_allowance`). So the branch's result can change the model's deduction only for a member of that family who receives none of the four and has no other exemption: under head (c) of SPC Sch I para 1(1), a blind partner of a claimant who receives one. Para 16(2) lists no blindness. Where the branch's Pension Credit and the family's own differ, the model then reads that partner's exemption from the counterfactual award.

The law treats those households differently from the model. The family gets the addition under head (c) only if "no person who has attained the age of 18 is normally residing with the partners, nor are the partners normally residing with such a person, other than a person to whom paragraph 2 applies" (para 1(1)(c)(iii)), and the renter lives with them. DWP ignores, under para 2(2), a person who receives a qualifying benefit (head (a)) or whom a consultant ophthalmologist has certified as severely sight impaired or blind (head (b)). Under UC Sch 4 para 15(1)(a), DWP makes no para 13 deduction at all for a single renter to whom para 15(2) applies, and para 15(2) lists a blind person (a), the DLA care component at the middle or highest rate (b), attendance allowance (c), which reg 2's head (f) extends to armed forces independence payment, the PIP daily living component (d) and the Scottish payments ((bb), (ca) and (da)). So wherever DWP ignores a single renter under para 2(2)(a) or (b), it deducts nothing for any non-dependant, whatever the non-dependant's Pension Credit. A couple who claim jointly both live with the partners, so DWP must ignore both, and para 15(1)(b) then exempts them through either. The extracts leave two questions open: a renter whom DWP ignores only under heads (c) to (f) of para 2(2) (certified blind until up to 28 weeks earlier, engaged by a charity to care, that carer's partner, or a child or qualifying young person), whom para 15(2) does not list; and any person under a sub-paragraph of para 2 after (2), which the extracts do not hold. The model ignores a resident who is blind, receives a qualifying benefit or counts as a qualifying young person (`is_counted_resident_for_severe_disability_addition`), so in the model too the addition needs such a renter. The model holds no para 15 exemption, so it deducts for the blind partner unless the branch's result exempts the partner.

`test_the_non_dependant_branch_reads_the_award_without_housing_costs` pins the branch's reading, whichever of `universal_credit`, `pension_credit` and the carer test the simulation requests first. A blind carer aged 40 earning £20,000 rents from the council at £6,000 a year as household head and cares for a veteran aged 70 in another benefit unit, who receives armed forces independence payment and £13,000 of State Pension. The carer's award comes to (£424.90 + £209.34) × 12 + £6,000 − 0.55 × £17,919.60 = £3,755.10, which includes the carer element, so the veteran gets no addition and, keeping £12,914.00 after £86.00 of income tax against a standard minimum guarantee of £238.00 × 52 = £12,376.00, no Pension Credit. In the branch, without housing costs, the carer's award comes to nil, the veteran gets the addition and Pension Credit of (£238.00 + £86.05) × 52 − £12,914.00 = £3,936.60, and the branch returns true. With the branch's result supplied as false, its value in law, the model still exempts the veteran through armed forces independence payment, deducts nothing, and leaves the award at £3,755.10 with the carer element and the veteran's Pension Credit at nil. DWP deducts nothing for this household either, on two grounds: para 15(1)(a) and (2)(a) exempt the carer, a blind single renter, from every deduction, and para 16(2)(d), read with head (f) of reg 2's definition of "attendance allowance", exempts the veteran. The model holds the second ground but not the first, so the model's award and the law's agree, and nothing shows the award of £3,755.10 to overpay. The test also runs a counterfactual that neither the law nor the model gives this household: with the veteran's exemption supplied as false, the model deducts £96.55 × 12 = £1,158.60 and leaves £2,596.50, which still includes the carer element, so even a deduction would leave the carer test and the veteran's nil Pension Credit unchanged.

`test_the_branch_decides_a_blind_partners_deduction` pins a household where the branch's result decides the model's deduction. The veteran now has £21,000 of State Pension and a blind partner aged 68 who receives no disability benefit. After income tax of (£21,000 − £12,570) × 0.20 − £1,260 × 0.20 = £1,434.00, with the partner's marriage allowance, the couple keep £19,566.00, which exceeds the couple's standard minimum guarantee of £363.25 × 52 = £18,889.00, so they get no Pension Credit. In the branch, head (c) gives them the addition and Pension Credit of (£363.25 + £86.05) × 52 − £19,566.00 = £3,797.60, so the branch returns true, and the model exempts the partner, deducts nothing and leaves the carer's award at £3,755.10. With the branch's result supplied as false, its value in law, the model deducts £1,158.60 for the partner and leaves £2,596.50. DWP deducts nothing, because para 15(1)(a) and (2)(a) exempt the carer, so the model's result agrees with the law's through the branch, not through para 15.

### Scotland's definition by date

Before the scheme started on 1 April 2022, the Scottish Ministers inserted into SSI 2021/249 reg 4(1) (SSI 2022/52 reg 3(b)):

> "award of universal credit" includes a universal credit award with a value of zero,

From 1 April 2025, they substituted (SSI 2025/24 reg 8):

> "award of universal credit" means an award of universal credit made under Part 1 of the 2012 Act,

and inserted reg 10A (reg 9):

> For the purposes of these Regulations an award of universal credit includes—
> (a) an award the amount of which is reduced to zero, as a result of a failure by a claimant which is sanctionable under section 26 (higher-level sanctions) or section 27 (other sanctions) of the 2012 Act, and
> (b) an award to which entitlement has ceased in terms of regulation 32A(1)(b) of the Universal Credit, Personal Independence Payment, Jobseeker's Allowance and Employment and Support Allowance (Claims and Payments) Regulations 2013 (reclaims of universal credit after nil award due to earnings), but in relation to which the Secretary of State treats the claimant as making a claim under regulation 32A(2) of those Regulations.

UC Claims and Payments Regs 2013 reg 32A(1):

> (1) This regulation applies where—
> (a) a claim is made for universal credit, but no award is made because the condition in section 5(1)(b) or 5(2)(b) of the 2012 Act (condition that the claimant's income, or joint claimants' combined income is such that the amount payable would not be less than the prescribed minimum) is not met; or
> (b) entitlement to an award of universal credit ceases because that condition is not met.

In its policy note to SSI 2025/24, the Scottish Government records the 2022 intention:

> When the Working Age Regulations were brought into force in April 2022, the policy intention was to ensure that in instances where a Universal Credit claimant was receiving £0.00 in Universal Credit due to excess earnings in any Universal Credit assessment period their CTR calculation would be carried out as though the person did have an award of Universal Credit.

and describes reg 10A as:

> an expansion of the circumstances in which the provisions applicable to a council tax reduction applicant with an award of Universal Credit will be taken to continue to apply - covering the scenario of a council tax reduction applicant who is a Universal Credit claimant falling within regulation 32A(2) of the 2013 Regulations, as well as, as at present, the scenario of a claimant the amount of whose award is reduced to zero. A reduction to zero will take place because of a sanction, rather than because of excess earnings.

From 2022-23 to 2024-25 the Scottish Ministers' definition takes in an award that exists with a value of zero, and in its note the Scottish Government confines that case to a sanction. Earnings that take the amount payable below one penny fail the s.5 financial condition, so DWP makes no award or entitlement to the award ceases, and no award remains to have a value of zero. The Scottish Ministers added reg 10A(b) in 2025 to bring part of that case in. So the model reads limb (c) from the positive award (`receives_uc_carer_element`) in every year from 2022-23. A council could still read the 2022 definition to take in an award that earnings end, for its last assessment period and any reclaim months from 2022-23 to 2024-25. The model cannot tell that award from a first claim, on which DWP makes no award (reg 32A(1)(a)). The model has no input for a sanction or a reg 32A reclaim, so it pays no premium for reg 10A's awards, nor for a sanctioned nil award before 2025.

For example, take a Scottish carer aged 40 who cares 35 hours a week, claims neither Carer's Allowance nor Carer Support Payment, and earns £20,000:

- **2024-25.** The maximum amount comes to (£393.45 + £198.31) × 12 = £7,101.12. The carer keeps earned income of £17,942.66, and DWP's reduction of 0.55 × £17,942.66 = £9,868.46 takes the award to nil. The carer has no award, and the model pays no carer premium, where an award would bring £45.60 × 52 = £2,371.20.
- **2025-26.** The maximum amount comes to (£400.14 + £201.68) × 12 = £7,221.84. The carer keeps earned income of £17,947.87, and DWP's reduction of £9,871.33 takes the award to nil, which leaves no award and no carer premium.

### Northern Ireland

`has_uc_award_with_carer_element`, `is_cared_for_by_carer_benefit_recipient`, `severe_disability_premium` and `severe_disability_minimum_guarantee_addition` read no `country`, so the model applies the same rule in Northern Ireland, with the same parameters for the amounts. Northern Ireland's legislation uses the same words:

- [Welfare Reform (Northern Ireland) Order 2015 art. 10](https://www.legislation.gov.uk/nisi/2015/2006/article/10) sets the financial conditions in the words of s.5, and [UC Regs (NI) 2016 reg 17](https://www.legislation.gov.uk/nisr/2016/216/regulation/17) sets the minimum at one penny.
- [UC Regs (NI) 2016 reg 30](https://www.legislation.gov.uk/nisr/2016/216/regulation/30) includes the carer element, and [Sch 4 para 15(2)(b)](https://www.legislation.gov.uk/nisr/2016/216/schedule/4/paragraph/15) exempts a non-dependant "in receipt of state pension credit" from the deduction.
- [SR 2016/236 reg 31(7)](https://www.legislation.gov.uk/nisr/2016/236/regulation/31/made) inserted ", or has an award of universal credit which includes the carer element," into [SPC Regs (NI) 2003 Sch 1 para 1](https://www.legislation.gov.uk/nisr/2003/28/schedule/1/paragraph/1)(1)(a)(iii), (b) and (c)(iv), and added para 1(4), which refers to UC Regs (NI) 2016 reg 30. legislation.gov.uk's revised text of para 1 predates that amendment.
- [HB Regs (NI) 2006 Sch 4 para 14(2)(a)(iii)](https://www.legislation.gov.uk/nisr/2006/405/schedule/4/paragraph/14) withholds the premium where a person "has an award of universal credit which includes the carer element under regulation 30 of the Universal Credit Regulations (Northern Ireland) 2016 in respect of caring for him".
- SR 2016/236 regs 26, 28, 35 and 36 insert the same words in Northern Ireland's Income Support, Jobseeker's Allowance, pension-age Housing Benefit and ESA schemes.

`uc_carer_element_carer_test.yaml` adds a Northern Ireland case: a blind son aged 40 with no income, caring for a parent aged 75 on Attendance Allowance at the higher rate, has an award of (£424.90 + £209.34) × 12 = £7,610.88 that includes the carer element, so the Department for Communities includes no addition, which would otherwise come to £86.05 × 52 = £4,474.60. The model reads the Universal Credit amounts from `gov.dwp.universal_credit` and the addition from `gov.dwp.pension_credit.guarantee_credit.severe_disability.addition` in every country.

### The 2022-23 Scottish amount

The Scottish Ministers left two amounts in force on 1 April 2022. SSI 2021/249 Sch 1 para 5(1) still read £37.70, as made, while the Ministers had replaced £37.70 with £38.85 in para 17's table (SSI 2022/52 reg 25(c)(ii)). They set both to £42.75 from 1 April 2023 (SSI 2023/38 reg 20(h) and (i)). In its *Council Tax Reduction in Scotland: 2022-2023* statistics (Table 1), the Scottish Government gives the 2022-23 carer premium as £38.85, the para 17 figure, and the model pays the same amount, reading `gov.dwp.carer_premium.single` at 30 April 2022.

### Which years

- The model reads each year's parameters at 30 April of that year (`policyengine_uk/utils/parameters.py`).
- **Severe disability premium and addition.** DWP added the limb to HB, HB(SPC), IS, JSA, ESA and SPC through SI 2015/1754, from 4 November 2015. The government added it to England's pension-age CTR for schemes from 1 April 2016 (SI 2015/2041 reg 1(2)). The Scottish Ministers added it to Scotland's from 1 April 2016 (SSI 2016/81), had it in the working-age SSI 2012/303 by 1 April 2021, and included it in SSI 2021/249 from its start on 1 April 2022. The Welsh Ministers added it to Wales's for schemes from 1 April 2017 (WSI 2017/46 reg 1(3)). No parameter gates the limb. The carer element parameter starts on 9 April 2016, and the programmes' verified years start at 2019 (Universal Credit) and 2022 (Housing Benefit, Pension Credit, Income Support). Before them the model applies the limb in Welsh pension-age CTR in model year 2016, a year before WSI 2017/46, and in model year 2015 before SI 2015/1754, wherever a hand-built household has a carer-element award.
- **Scottish working-age carer premium.** The model applies limb (c) from model year 2022 and needs an award of at least one penny in every year.

### Reforms

A reform that makes `is_uc_eligible` read Pension Credit, or that makes the award before the cap read it, would cycle through the attribution; the invariants below hold for baseline households and stored awards.

### Interaction with #1966

#1966 (draft) gives Scotland's and Wales's working-age CTR their own applicable amount (`council_tax_reduction_working_age_applicable_amount`), with its own carer count in place of `council_tax_reduction_premiums`, so it needs no subtraction from the shared premiums. Its `council_tax_reduction_working_age_carers` adds the carer element as one carer only when neither the claimant nor a partner has a carer benefit entitlement, with no date gate, and reads a positive award (`uc_carer_element > 0` with `council_tax_reduction_working_age_has_universal_credit`). When merging #1966, count each claimant or partner with `is_entitled_to_carer_benefit` or `receives_uc_carer_element` before applying the same-person cap, as `council_tax_reduction_carer_premium` does, and gate limb (c) on `carer_premium_counts_uc_carer_element`. Its positive award matches this branch's reading in every year from 2022-23.

### Overlap with open branches

This head merges `main` at `557087da1` (merge commit `cdf5fbd91`), which brought #2815. Since #2815, `uc_non_dep_deduction_exempt` reads `uc_receives_attendance_allowance`, which counts armed forces independence payment under head (f) of reg 2's definition of "attendance allowance", the term UC Regs 2013 Sch 4 para 16(2)(d) uses. So the model now exempts the veteran in `test_the_non_dependant_branch_reads_the_award_without_housing_costs` whatever the branch returns, and the branch's result can decide a deduction only for a blind partner (above). `main` still holds no para 15 renter exemption.

Against this head, `git merge-tree --write-tree --name-only` finds:

- `main` (`557087da1`): merges cleanly (this head contains it).
- #2808 (`fix-1971-enhanced-disability`, `6563f73e5`): one textual conflict in `council_tax_reduction_premiums.py`, where both branches add a substitution term to the working-age premiums (this branch the carer premium, that one the enhanced disability premium). `main` merges #2808 cleanly, so this branch causes the conflict. Keep both substitutions when resolving it.
- #2861 (`claude/pensioner-ctr-disability-premiums-9b4amp`, `6e96ffef8`), which merges #2808: the same conflict in `council_tax_reduction_premiums.py`, with the same resolution, and three conflicts that #2861 also has with `main`: `council_tax_reduction_pension_credit.yaml`, `test_council_tax_reduction_pension_credit_properties.py` and `council_tax_reduction_applicable_income.py`.
- #2826 (`87cbc397e`): merges cleanly. At `31139e82`, in the tree merged with `fix-1933-ctr-pensioner-children` (`e8831fb6b`), which #2826 builds on, all 12 property tests (`-n 4`, 156 s) and the 24 cases of the two new YAML files passed; a check with historical Child Tax Credit households stays pending.
- #2007 (`hb-ctr-non-dep-exemptions`, `fde435bd3`): conflicts in `docs/book/programs/gov/dwp/housing-benefit.ipynb` and `policyengine_uk/tests/shard_durations.toml`, both of which #2007 also has with `main`. Its HB and CTR non-dependant exemptions read `universal_credit_pre_benefit_cap` and Pension Credit, as the carer test does. At `31139e82`, in the merged tree, all 12 tests in `test_uc_carer_element_award_properties.py` (`-n 4`, 108 s) and the 24 cases of the two new YAML files passed.
- #1966 (`ctr-working-age-shortfall`, `a013f520a`): conflicts in `test_council_tax_reduction_pension_credit_properties.py`, `test_means_test_income_properties.py` and `council_tax_reduction_pensioner.py`, all three of which #1966 also has with `main`.
- #2017 (`b3e0d76b8`): conflicts in `housing-benefit.ipynb` and `shard_durations.toml`, both of which #2017 also has with `main`. #2017 adds the para 15 renter exemption, `uc_non_dep_deductions_renter_exempt`, which exempts a renter who is blind or receives Attendance Allowance, the DLA care component at the middle or highest rate or the PIP daily living component; it reads `attendance_allowance`, not `uc_receives_attendance_allowance`, so it leaves out a renter on armed forces independence payment, whom head (f) of reg 2's definition brings into para 15(2)(c). In a scratch merge of #2017 into this head (the two conflicts resolved with this head's side), the model deducts nothing in either test's household, whatever the branch returns and with the veteran's exemption supplied as false, and leaves the award at £3,755.10. So when #2017 lands, the counterfactual in `test_the_non_dependant_branch_reads_the_award_without_housing_costs` and the run with the branch's result supplied as false in `test_the_branch_decides_a_blind_partners_deduction` need the law's figure, no deduction.

## Invariants

On generated households under baseline law, `policyengine_uk/tests/test_uc_carer_element_award_properties.py` checks:

1. **No change without a carer element.** In a household where no one has `has_uc_award_with_carer_element` or `receives_uc_carer_element`, the attribution, the severe disability premium and its CTR and pension-age variants, and the addition equal their values with `has_uc_award_with_carer_element` supplied as false, and `council_tax_reduction_carer_premium` equals `carer_premium`.
2. **A carer element never raises the severe disability premium or addition**, and never removes anyone from the cared-for set.
3. **The Scottish carer premium never lowers the carer premium** and differs from `carer_premium` only for a Scottish working-age family.
4. **Bounds.** The Scottish premium comes to a whole number of weekly amounts, at most one per claimant or partner, at most one where partners care for the same person.
5. **The carer test matches the award.** `has_uc_award_with_carer_element` equals `receives_uc_carer_element` for every person. `universal_credit_pre_benefit_cap` comes to more than nil wherever `universal_credit` does and, for every family with a carer element, only where `universal_credit` does. The equality also holds where the simulation stores the award (`test_a_stored_award_is_the_award_and_reads_no_cycle`, both reader orders).
6. **Attribution.** Everyone the attribution counts as cared for meets the Carer's Allowance severe disability test; no household has more people cared for than carers; the attribution never counts a lone carer as cared for.
7. **No cycle.** Every reader, with `universal_credit_pre_benefit_cap`, `universal_credit`, `pension_credit`, `housing_benefit`, `income_support`, `council_tax_reduction` and `household_net_income`, calculates on one simulation in either order, on generated baseline households and where the simulation stores the award.
8. **The cut.** In the non-dependant family's Pension Credit branch the carer test reads the award without housing costs; `test_the_non_dependant_branch_reads_the_award_without_housing_costs` pins the veteran's household above in three request orders, where the branch's result changes no deduction and the model's award matches the law's, and `test_the_branch_decides_a_blind_partners_deduction` pins the blind partner's household, where the branch's result decides the model's deduction.

## Test plan

Runs at `f75f41abc` unless stated.

- [x] YAML tests with hand-worked arithmetic citing the provision, amounts from DWP Benefit and pension rates 2026 to 2027 / SI 2026/148 and SSI 2021/249 Sch 1 paras 5(1) and 17 as amended:
  - `policyengine_uk/tests/policy/baseline/household/demographic/uc_carer_element_carer_test.yaml`: 12 cases, 12 passed. The blind carer; a partner inside the benefit unit (couple rate to single rate); a son outside it (addition and pension-age premium); a carer on Carer's Allowance and Universal Credit (one carer); a partner's carer element beside the other partner's allowance (one carer); a carer whose income tapers the award to nil (premium kept); a council-renting carer whose housing costs element keeps an award (premium withheld); a son whose income tapers the award to nil (addition kept); a stored award with no claim (premium withheld); no claim, no award; the executed case (addition £4,474.60, Pension Credit £6,850.60, household net income £44,629.40); and the Northern Ireland son (addition withheld).
  - `policyengine_uk/tests/policy/baseline/gov/local_authorities/council_tax_reduction/council_tax_reduction_carer_premium.yaml`: 12 cases, 12 passed. The issue's Scottish carer aged 40 with `care_hours: 35`; 2022 and 2021; English and Welsh controls; the nil award in 2026, 2024 and 2025 (no premium in each); allowance and carer element together; a couple caring for the same person; a Scottish pensioner; a dependant who receives Carer Support Payment (no premium).
- [x] Every YAML file under `policyengine_uk/tests/policy/baseline/` that names the carer test, the attribution, the severe disability premiums, the addition or the Scottish carer premium, every file in `gov/dwp/pension_credit/guarantee_credit/`, and every YAML file the branch adds or changes since `f9fdc636a` (including two that `main` brought in): 29 files, one `policyengine-core test` run each, 439 cases passed, none failed. #2815's three YAML files (`uc_non_dep_deduction_exempt.yaml`, `uc_receives_attendance_allowance.yaml` and `integration/uc_afip_housing_contribution.yaml`): 24 cases passed, none failed.
- [x] `policyengine_uk/tests/test_uc_carer_element_award_properties.py`, 13 tests: 13 passed in one `-n 4` run (76 s), with no expected failures. At the merge with `main` (`cdf5fbd91`), before the changes to the veteran test, the three runs of `test_the_non_dependant_branch_reads_the_award_without_housing_costs` failed at the deduction with the branch's result supplied as false (`assert np.float32(0.0) == 1158.6 ± 0.0011586`), and the other 9 passed.
  - `test_issue_households_read_the_carer_element_award` (the reproducer; reads only variables that predate the fix): passed; on `main` (`557087da1`) it fails with `assert np.float32(4474.6) == 0`, the blind carer's premium.
  - The three nil-award routes: 3 passed, with no expected-failure marker and no allowlist entry.
  - `test_a_stored_award_is_the_award_and_reads_no_cycle`, forward and reverse reader order: 2 passed.
  - `test_a_reform_that_abolishes_universal_credit_leaves_no_carer_element_award`: passed.
  - `test_the_carer_element_limb_moves_only_its_readers_and_only_one_way` (Hypothesis, invariants 1 to 6) and `test_every_reader_calculates_on_one_simulation_in_any_order` (Hypothesis, invariant 7): passed.
  - `test_the_non_dependant_branch_reads_the_award_without_housing_costs` (invariant 8), three request orders: 3 passed.
  - `test_the_branch_decides_a_blind_partners_deduction` (invariant 8): passed.
- [x] The Python suites on these readers, one `-n 4` run each: `test_severe_disability_premium_properties.py` 6 passed (125 s), `test_severe_disability_addition_properties.py` 7 passed (230 s), `test_legacy_carer_premium_properties.py` 4 passed (86 s), `test_pension_age_severe_disability_premium_properties.py` 3 passed (62 s), `test_disable_simulated_benefits_carers.py` 18 passed (120 s), `test_legacy_award_readers_properties.py` 20 passed (189 s), `test_council_tax_reduction_severe_disability_family.py` 8 passed (17 s), and #2815's `test_uc_afip_housing_contribution_properties.py` 3 passed (21 s).
- [x] `policyengine_uk/tests/code_health -n 4`: 3,153 passed.
- [x] Mutations, each in a copy of the branch: B3 at `f75f41abc`; B1, B2 and B4 to B7 at `b6b1ce7c`, which differs from `31139e82` only in Scotland's carer premium; and S1 and S2 at `31139e82`:
  - B1, the carer test reads the old bound (`uc_award_upper_bound` from `f9fdc636a`, restored, with the claim and eligibility) in place of the award: the three nil-award route tests fail at `has_uc_award_with_carer_element`, and the executed YAML case fails (carer test true); the mutant gives Pension Credit £2,376 and household net income £40,154.80.
  - B2, the carer test reads `universal_credit` in place of the award before the cap: 11 of 12 property tests fail with `CycleError` through the benefit cap route; the abolition test passes.
  - B3, `uc_non_dep_receives_pension_credit` calculates Pension Credit without the branch: 12 of 13 property tests (all but the abolition test) and 10 of the 12 carer-test YAML cases fail with `CycleError` ("Circular definition detected on formula has_uc_award_with_carer_element@2026") through the non-dependant deduction route.
  - B4, the attribution ignores the carer element (`carer = receives`): 6 of the 24 cases in the two new YAML files fail, including the Northern Ireland case.
  - B5, the attribution drops the same-person rule: 1 fails, the partners' case.
  - B6, the carer test ignores a stored award: 1 fails, the stored award.
  - B7, the carer test ignores a neutralized award: the abolition test fails.
  - S1, Scotland counts a nil award from 2022-23 to 2024-25 (the old conditions route): 1 fails, 2024 (£2,371.20 instead of £0).
  - S2, Scotland counts a nil award in every year (`uc_carer_element_included_for_claimant` in place of the award): 3 fail, 2026 (£2,503.80), 2024 (£2,371.20) and 2025 (£2,412.80).
  - At `fff13eda8` (`31139e82` keeps the lines these three change): M4, limb (c) from 2013 (the 2021 case fails); M5, `council_tax_reduction_premiums` drops the carer premium substitution (2 fail); M6, the Scottish premium counts every member (1 fails, the dependant).
- [x] `uvx ruff@0.17.2 format --check .`, `ruff check .`, `ruff check --select F811,F821 policyengine_uk` and `git diff --check 31139e822..HEAD`: clean.
- [ ] Not rerun at this head: the 150-household differential against `main`.
- [x] Changelog fragment `changelog.d/2120.fixed.md`.

## Reproducer

Reproducer: policyengine_uk/tests/test_uc_carer_element_award_properties.py::test_issue_households_read_the_carer_element_award

axiom: TheAxiomFoundation/rulespec-uk#520 queued, with an addendum for the carer's actual award, Scotland's limb (c) by date and Northern Ireland (https://github.com/TheAxiomFoundation/rulespec-uk/issues/520#issuecomment-6615915535)

🤖 Generated with [Claude Code](https://claude.com/claude-code)




Generated by Claude Code

…y's own

uc_non_dep_receives_pension_credit calculates a non-dependant family's
Pension Credit in a branch with every family's housing costs element set to
nil. Now that the carer test reads the carer's award, a family whose severe
disability addition reads a renter's carer element sees that award without
housing costs in the branch, so the branch's Pension Credit can differ from
the family's own (the veteran test: £3,936.60 in the branch, nil outside
it). The documentation and the formula's comment said the branch preserved
the family's entitlement; they now say when it doesn't.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed adopted head f8cba9d544a2c493e6388b374b4739d86e43b54f. COMPLETE — C1 and A1 are resolved; no findings or material evidence gaps.

The legal comparison now applies the blind-renter exemption and distinguishes it from person-specific exemptions. Forced-deduction examples are explicitly labelled counterfactual, with the existing fixture/input qualifications retained. The actual nil-award regression also remains correct.

All 33 focused checks passed: 24 YAML cases, eight targeted Python cases and one final benefit/income diagnostic. They cover the veteran request orders, the new blind-partner case and the nil-award behavior on the matching Core 3.34.1 runtime. Earlier validation is retained as historical evidence, not counted as new execution.

The official exemption text and actual Axiom #520 addendum were checked. This review covers the actual head built on main at 557087da; it does not certify the separately described prospective merge with later main. Approval awaits readiness and applicable exact-head CI.

@MaxGhenis
MaxGhenis marked this pull request as ready for review November 4, 2026 20:33
@MaxGhenis
MaxGhenis requested a review from juaristi22 November 4, 2026 20:33

@juaristi22 juaristi22 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approved at f8cba9d544a2c493e6388b374b4739d86e43b54f.

Review status: COMPLETE — no remaining findings or material evidence gaps. The completed review remains valid: the code, description and source evidence are unchanged. Validation retains 33 passing checks at this head: 24 YAML tests, eight Python tests and one final-output diagnostic. No tests were rerun for this readiness-only follow-up.

The PR is now ready for review. All 20 latest CI checks pass at this exact commit. Head, description, human feedback, source-issue evidence and applicable branch rules were refreshed before approval.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants