Repository navigation
Count UC carer awards for severe disability and Scottish CTR premiums - #2827
Conversation
…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
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 0 (thresholds in Notes
Moves flagged for reviewNone. Spending by benefit and service
Caseloads
Household net income by decileNo 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)
Counted-once checkThe check raised each of 92 components by £1 per unit in 2026-27 and read every head of its totals 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 response that is not finite breaks every rule. The check measures a head that breaks a rule twice more: once holding every other head at its baseline value, and once holding every other head at its value after the first £1 while the component rises again. The head fails where either measurement still shows the response. The check cannot hold a head at a value that is not finite. In each unit where another head is not finite after the first £1, it holds that head at its baseline value, and the second measurement judges no household the unit belongs to. There a head fails wherever it first broke a rule, or wherever the check could not confirm whether its response contains the component. 0 failed and the check skipped 0.
Provenance
Dataset: Receipts by tax head: head levels
Spending by benefit and service: head levels
Caseloads: head levels
Government balance, each component counted once: head levels
Model totals: head levels
Household income totals: head levels
Population: head levels
Poverty rates: head levels
People in poverty: head levels
Inequality: head levels
Mean household net income in each side's own deciles: head levels
Standard reform costings (change in gov_balance): head levels
Standard reforms: change in each reform's target: head levels
|
juaristi22
left a comment
There was a problem hiding this comment.
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
|
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
|
Generated by Claude Code |
|
Generated by Claude Code |
juaristi22
left a comment
There was a problem hiding this comment.
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.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
#2002's landing put a conflict in |
juaristi22
left a comment
There was a problem hiding this comment.
Incremental review at 835fab99c9f02efdb6a1caaee407728a48127dec: COMPLETE, no remaining findings or material evidence gaps. Prior C1 and A1 remain resolved.
The main-merge conflict correctly adopts benunit_is_liable_for_household_rent in the Pension Credit non-dependant exemption. Fourteen of the fifteen authored feature paths are unchanged from the approved head; the affected composition was checked against the retained UC rules.
22 current tests passed (15 YAML and 7 Python), plus a final UC/net-income accounting control for the actual-input lodger case. The earlier 33 outcomes remain separate historical evidence. All 51 source originals and their extracts passed integrity checks. A reviewer-only period-mapping error was corrected and retained in the diagnostic history.
Exact-head CI is still pending, so this is a completed review comment. The completed code/source review can be retained when CI is checked again.
|
CI passes at |
juaristi22
left a comment
There was a problem hiding this comment.
Approved at 835fab99c9f02efdb6a1caaee407728a48127dec. The completed independent review has no remaining findings or material evidence gaps; C1 and A1 remain resolved. A targeted exact-head check confirms all 20 latest checks pass, including Aggregate impact, Lint and Test / Result.
This closes the pending-CI approval hold. The reviewed code and description are unchanged, and all 51 retained source pairs were integrity-checked. No code review, tests or model calculations were repeated.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rom 1 April 2022 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
left a comment
There was a problem hiding this comment.
Completed incremental review at 649d3ad8fd7aa71b165d4b50032f2bb4fb815d88: no open findings or material evidence gaps. Both earlier findings remain resolved. Approval is deferred until the pending exact-head CI checks complete. All 38 targeted tests passed.
Program review
Base repository: PolicyEngine/policyengine-uk
PR number: 2827
Reviewed head SHA: 649d3ad
Merge base SHA: 0520d96
Mode: incremental from 835fab9
Scope: Authored changes since approved835fab: merge-main conflict resolution, veteran-renter tests and Scottishworking-agecarer count; reuse unaffected main/parent behavior and recheck affected final results.
Source manifest: /privateretained review artifacts/pr-2827-sweep20261109-1259-review-sources.json
Review status: COMPLETE
Source Documents
- 000-original-retained-000-original-0.xml — cached original (retained review artifact).
- 001-original-retained-001-original-0.xml — cached original (retained review artifact).
- 002-original-retained-002-original-0.xml — cached original (retained review artifact).
- 003-original-retained-003-original-0.xml — cached original (retained review artifact).
- 004-original-retained-004-original-0.xml — cached original (retained review artifact).
- 005-original-retained-005-original-0.xml — cached original (retained review artifact).
- 006-original-retained-006-original-0.xml — cached original (retained review artifact).
- 007-original-retained-007-original-0.xml — cached original (retained review artifact).
- 008-original-retained-008-original-0.xml — cached original (retained review artifact).
- 009-original-retained-009-original-0.xml — cached original (retained review artifact).
- 010-original-retained-010-original-0.xml — cached original (retained review artifact).
- 011-original-retained-011-original-0.xml — cached original (retained review artifact).
- 012-original-retained-012-original-0.xml — cached original (retained review artifact).
- 013-original-retained-013-original-0.xml — cached original (retained review artifact).
- 014-original-retained-014-original-0.xml — cached original (retained review artifact).
- 015-original-retained-015-original-0.xml — cached original (retained review artifact).
- 016-original-retained-016-original-0.xml — cached original (retained review artifact).
- 017-original-retained-017-original-0.xml — cached original (retained review artifact).
- 018-original-retained-018-original-0.xml — cached original (retained review artifact).
- 019-original-retained-019-original-0.xml — cached original (retained review artifact).
- 020-original-retained-020-original-0.xml — cached original (retained review artifact).
- 021-original-retained-021-original-0.xml — cached original (retained review artifact).
- 022-original-retained-022-original-0.xml — cached original (retained review artifact).
- 023-original-retained-023-original-0.xml — cached original (retained review artifact).
- 024-original-retained-024-original-0.html — cached original (retained review artifact).
- 025-original-retained-025-original-0.pdf — cached original (retained review artifact).
- 026-original-retained-026-original-0.pdf — cached original (retained review artifact).
- 027-original-retained-027-original-0.html — cached original (retained review artifact).
- 028-original-retained-028-original-0.xml — cached original (retained review artifact).
- 029-original-retained-029-original-0.xml — cached original (retained review artifact).
- 030-original-retained-030-original-0.xml — cached original (retained review artifact).
- 031-original-retained-031-original-0.xml — cached original (retained review artifact).
- 032-original-retained-032-original-0.xml — cached original (retained review artifact).
- 033-original-retained-033-original-0.xml — cached original (retained review artifact).
- 034-original-retained-034-original-0.xml — cached original (retained review artifact).
- 035-original-retained-035-original-0.xml — cached original (retained review artifact).
- 036-original-retained-036-original-0.xml — cached original (retained review artifact).
- 037-original-retained-037-original-0.xml — cached original (retained review artifact).
- 038-original-retained-038-original-0.xml — cached original (retained review artifact).
- 039-original-retained-039-original-0.xml — cached original (retained review artifact).
- 040-original-retained-040-original-0.html — cached original (retained review artifact).
- 041-original-retained-041-original-0.xml — cached original (retained review artifact).
- 042-original-retained-042-original-0.xml — cached original (retained review artifact).
- 043-original-retained-043-original-0.xml — cached original (retained review artifact).
- 044-original-retained-044-original-0.xml — cached original (retained review artifact).
- 045-original-retained-045-original-0.xml — cached original (retained review artifact).
- 046-original-retained-046-original-0.xml — cached original (retained review artifact).
- 047-original-retained-047-original-0.html — cached original (retained review artifact).
- 048-original-retained-048-original-0.xml — cached original (retained review artifact).
- 049-original-retained-049-original-0.json — cached original (retained review artifact).
- 050-original-retained-050-original-0.json — cached original (retained review artifact).
Critical
C1 — A positive hypothetical UC bound wrongly removes support when the actual award is nil (RESOLVED)
Prior C1 remains RESOLVED. The award gate and severe-disability consumer functions are unchanged from the approved feature. The current selected suite again passes actual-nil UC, non-dependant deduction, Tax-Free Childcare, request-order, stored-input and reader-order regressions; a positive potential carer element is not substituted for an actual award. The veteran tests now retain the blind renter's own paragraph 15 exemption even when a veteran exemption input is false. A1 remains resolved in the sole current policy-role selector; it is not duplicated as a new code finding.
Should Address
A1 — Apply the blind-renter exemption to the stated legal comparison (RESOLVED)
The adopted veteran comparisons now apply both the blind single renter’s UC Schedule4para15(1)(a)/(2)(a) exemption and the veteran’s separate para16/AFIP exemption. Supplying the veteran’s exemption as false still leaves the renter exemption: no housing contribution, rather than a purported lawful£1,158.60 deduction. Renaming the blind partner test to “exemption” preserves the distinction between the Pension Credit branch predicate and the final deduction. No statutory overpayment or general branch-equivalence claim is alleged. PriorC1’s actual-nil-award correction remains resolved; current execution is code-owned.
Suggestions
None.
Evidence Gaps
No material gaps reported.
Notes
- Both prior findings remain resolved. The incremental review covers the authored Scottish working-age count, updated veteran renter tests and merge conflict resolution; unchanged imported main behavior reuses prior evidence.
- Approval deferred while exact-head hosted Python tests and aggregate impact remain pending. A later CI check can complete the approval gate without repeating this completed code and source review.
- 51 cached primary originals and 51 text extracts validated; no new source acquisition or rendering. 73 immutable technical evidence members validated. The detached snapshot was removed normally after both roles completed.
- The repository campaign passed all 38 selected outcomes. One native positive-UC Scottish couple witness reached final CTR and household net income; failed diagnostic setup and an excluded nil-UC control are preserved and are not passes.
Validation Summary
38 current targeted passes (25 YAML and 13 Python), serial campaign exit0; exact snapshot/runtime pins verified. Scottish two-carer native witness: actual UC £1,932.4004; current CTR £1,368 versus previous-helper control £867.2399, household net income £18,224.1992 versus £17,723.4414, with float32 qualification. No population simulation, private data, install or dependency sync.
Timing
setup seconds: 278.45s; parallel review seconds: 521.55s; consolidation cleanup seconds: 333.07s; elapsed seconds: 1133.07s
Review Severity
APPROVE. Open findings: 0 critical, 0 should address, 0 suggestions.
juaristi22
left a comment
There was a problem hiding this comment.
Approve at 649d3ad8fd7aa71b165d4b50032f2bb4fb815d88. The pending-CI gate from the completed incremental review has cleared: all 20 latest exact-head contexts passed, including Lint and Test / Result. The completed code/source review has no open findings or material gaps; its 38 targeted passes are retained, with no repeated code review or model execution.
The current head, description, human activity, source dependencies, readiness and applicable required checks are refreshed before this approval.
Merge main at 5800015, which brings #2808's enhanced disability premium condition into council_tax_reduction_premiums.py. Both sides add a term to the working-age premiums and rewrite the comment above them. The merge keeps both terms, the scheme's enhanced disability premium from #2808 and this branch's carer premium, and both comments. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
left a comment
There was a problem hiding this comment.
Review status: COMPLETE at 99b2847831b494c6fe648cee253faa888b6411ed. No new findings or material evidence gaps. C1 and A1 remain resolved. Approval is deferred while exact-head CI finishes.
The incremental review checked the merge with main at 5800015f2, particularly the supplied-UC input helper and the combined Scottish CTR premiums. Both the enhanced disability premium from #2808 and this branch's carer premium survive the integration. The source review confirms that the Scottish enhanced disability premium can accompany the carer premium under the stated conditions.
29 targeted tests passed (13 YAML, 16 Python; 54.76s pytest), covering UC awards/cycles and readers, stored inputs and carer premiums, with the locked Core 3.34.9. A two-household standard/enhanced-PIP comparison also passed through final CTR and household net income: actual UC and both carer counts remain positive; the enhanced case adds £1,632.80 to the £5,007.60 carer premiums, with final CTR £1,694.56 versus £1,368.00. This isolates the premium composition; it does not certify general ordinary-disability-premium coverage.
The prior 38 passing tests and native evidence are retained for unchanged behavior and are not counted as new executions. All 51 cached source/extract pairs and the unchanged RuleSpec #520 packet/addendum were validated. No dependencies were installed or private population data used. The initial reviewer-only native component expectation was corrected within the original test window; it is excluded from PR failures and test counts.
Seven Python shards and Aggregate impact are still running in the refreshed CI capture, with no failed latest check. A later run can check CI and approve without repeating the completed code/source review, provided the head, description and relevant activity remain unchanged.
juaristi22
left a comment
There was a problem hiding this comment.
Approve at 99b2847831b494c6fe648cee253faa888b6411ed. The pending-CI gate from the completed incremental review has cleared: all 21 latest exact-head CI contexts passed, including Lint and Test / Result.
The completed review has no open findings or material evidence gaps; C1 and A1 remain resolved. Its 29 passing targeted tests and two final-output household checks are retained without repeating code review, tests or model runs. The 51 cached source pairs, 264 technical receipt members and durable custody archive were integrity-checked.
The current head, description, human activity, source dependencies, readiness and applicable required checks are refreshed before this approval.
Fixes #2120
Fixes #2124
Since the approval at
649d3ad8f99b284783mergesmainat5800015f2, which has taken in 15 pull requests since0520d9646. Two files changed on both sides. Inutils/supplied_inputs.py, the merge adds this branch'suniversal_creditentry to the module as Count only supplied inputs that are still stored in their tier #2308 and Bar income-related ESA at pensionable age and on Pension Credit #2807 rewrote it, with no conflict. Incouncil_tax_reduction_premiums.py, Count enhanced PIP daily living and AFIP for the enhanced premium #2808 and this branch each add a term to the working-age premiums and rewrite the comment above them. The merge keeps both terms, Count enhanced PIP daily living and AFIP for the enhanced premium #2808's enhanced disability premium and this branch's carer premium, and one comment now describes all three substitutions. The merge also brings Require policyengine-core 3.34.9 #2897'spolicyengine-core>=3.34.9, whose cycle check matches 3.34.1's (The cycle and where the model cuts it).Between the approvals at
835fab99cand649d3ad8fc14d6a79dmergesmainat0520d9646. It resolves one conflict, in the documentation ofuc_non_dep_receives_pension_credit.f43bdd292updates the two veteran tests for the para 15 renter exemption thatmainnow holds.649d3ad8fapplies this branch's reading of para 6(1)(c) tocouncil_tax_reduction_working_age_carers, which Scotland's working-age award has read since Give Scotland and Wales working-age CTR their own rules #1966 (Scotland's working-age award).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.
is_cared_for_by_carer_benefit_recipientattributed only Carer's Allowance and Carer Support Payment.carer_premiumapplied 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 storesuniversal_creditfor 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_creditjoinsSUPPLIED_INPUT_VARIABLESfor that check.universal_creditsubtracts 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 readuniversal_creditwould 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), anduc_deductionsleaves at least one penny payable. Invariant 5 checks that agreement.is_cared_for_by_carer_benefit_recipientcounts 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.council_tax_reduction_carer_premium(BenUnit).council_tax_reduction_premiumsreads it at working age in the same way ascouncil_tax_reduction_severe_disability_premium. Outside Scotland's working-age scheme it equalscarer_premium. In Scotland it counts each claimant or partner entitled to Carer's Allowance or Carer Support Payment (limbs (a) and (b), ascarer_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.council_tax_reduction_working_age_carers(BenUnit). Scotland's working-age award and earnings disregard read this count. In Scotland from 1 April 2022 it counts each applicant or partner entitled to a carer benefit or with an award that includes the carer element (receives_uc_carer_element), where it used to add one carer for any award with the element when no one had a carer benefit.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.severe_disability_premium,pension_age_severe_disability_premium,severe_disability_minimum_guarantee_addition,carer_premiumandcouncil_tax_reduction_premiumsnow describes the limb. The documentation ofuc_non_dep_receives_pension_creditnow 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 ofcouncil_tax_reduction_premiumskeeps 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.pyasserts each, after premise checks that raiseRuntimeError.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.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.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.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:
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.forgoes_universal_credit_for_tax_free_childcarereadsuc_maximum_amountanduc_income_reduction, and so the same housing costs element.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_creditalready calculates the non-dependant family's Pension Credit in a branch (simulation.get_branch) withuc_housing_costs_elementsupplied as nil for every family. In policyengine-core 3.34.9, whichuv.lockpins,_check_for_cyclecompares only the stack frames whosebranch_namematches the calculating simulation's, as 3.34.1 does, 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 thanuniversal_credit.The branch's result decides only the exemption in
uc_non_dep_deduction_exempt; nothing else readsuc_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_creditreadspension_creditfor 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 fromgov.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_exemptexempts 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 exemption 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.uc_non_dep_deductions_renter_exemptapplies para 15 where a claimant is blind or receives one of the four benefits, so the model deducts nothing from that claimant's award, whatever the branch returns.test_the_non_dependant_branch_reads_the_award_without_housing_costspins the branch's reading, whichever ofuniversal_credit,pension_creditand 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 both grounds, so the model's award and the law's agree. When the test supplies the veteran's exemption as false, the carer's own exemption still leaves no deduction, an award of £3,755.10 that includes the carer element, and nil Pension Credit for the veteran.test_the_branch_decides_a_blind_partners_exemptionpins a household where the branch's result decides an exemption. 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. When the test supplies the branch's result as false, its value in law, the model no longer exempts the partner. DWP and the model deduct nothing either way, because para 15(1)(a) and (2)(a) exempt the carer, and the carer's award stays at £3,755.10.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)):
From 1 April 2025, they substituted (SSI 2025/24 reg 8):
and inserted reg 10A (reg 9):
UC Claims and Payments Regs 2013 reg 32A(1):
In its policy note to SSI 2025/24, the Scottish Government records the 2022 intention:
and describes reg 10A as:
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:
Northern Ireland
has_uc_award_with_carer_element,is_cared_for_by_carer_benefit_recipient,severe_disability_premiumandsevere_disability_minimum_guarantee_additionread nocountry, 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.yamladds 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 fromgov.dwp.universal_creditand the addition fromgov.dwp.pension_credit.guarantee_credit.severe_disability.additionin 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.singleat 30 April 2022.Which years
policyengine_uk/utils/parameters.py).Reforms
A reform that makes
is_uc_eligibleread 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.Scotland's working-age award
Since #1966, Scotland's and Wales's working-age CTR has its own applicable amount (
council_tax_reduction_working_age_applicable_amount), which readscouncil_tax_reduction_working_age_carersin place ofcouncil_tax_reduction_premiums. So Scotland's award takes limb (c) through that count, and this branch applies the reading above there too. The count takes each applicant or partner withis_entitled_to_carer_benefitorreceives_uc_carer_elementbefore the same-person cap, andcarer_premium_counts_uc_carer_elementgates limb (c). Where one partner has a carer benefit and the other has a carer element for a different person, the model now includes two premiums (£5,007.60 in 2026-27), as councils do under para 5(2). Before 1 April 2022 it includes none for a carer element. The earnings disregard reads the same count, so a carer element brings no carer disregard before that date.Overlap with open branches
This branch merges
mainat5800015f2. Its earlier merge, ofmainat0520d9646, brought #2010 and, through it, #2007 and #2017. Since #2815,uc_non_dep_deduction_exemptreadsuc_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 exempts the veteran intest_the_non_dependant_branch_reads_the_award_without_housing_costswhatever the branch returns. #2017 added the para 15 renter exemption,uc_non_dep_deductions_renter_exempt, which exempts the carer in both veteran tests, so those tests now expect no deduction and an award of £3,755.10 in every run.With explicit SHAs,
git merge-tree --write-tree --name-onlyfinds that each of the other 52 open pull requests merges with99b284783as it merges withmainat5800015f2: 34 cleanly, #2861 among them, and 18 with conflicts in the same files. So this branch adds no conflict.Invariants
On generated households under baseline law,
policyengine_uk/tests/test_uc_carer_element_award_properties.pychecks:has_uc_award_with_carer_elementorreceives_uc_carer_element, the attribution, the severe disability premium and its CTR and pension-age variants, and the addition equal their values withhas_uc_award_with_carer_elementsupplied as false, andcouncil_tax_reduction_carer_premiumequalscarer_premium.carer_premiumonly for a Scottish working-age family.council_tax_reduction_working_age_carers, which Scotland's working-age award reads, gives the same number for every Scottish working-age family unless the household head applies alone.has_uc_award_with_carer_elementequalsreceives_uc_carer_elementfor every person.universal_credit_pre_benefit_capcomes to more than nil whereveruniversal_creditdoes and, for every family with a carer element, only whereuniversal_creditdoes. The equality also holds where the simulation stores the award (test_a_stored_award_is_the_award_and_reads_no_cycle, both reader orders).universal_credit_pre_benefit_cap,universal_credit,pension_credit,housing_benefit,income_support,council_tax_reductionandhousehold_net_income, calculates on one simulation in either order, on generated baseline households and where the simulation stores the award.test_the_non_dependant_branch_reads_the_award_without_housing_costspins the veteran's household above in three request orders, where the branch's result changes no exemption and the model's award matches the law's, andtest_the_branch_decides_a_blind_partners_exemptionpins the blind partner's household, where the branch's result decides the partner's exemption.Test plan
CI runs the suite at
99b284783. The first item lists the runs at99b284783. The rest ran atf75f41abcunless they say otherwise, beforef8cba9d54(documentation and a comment inuc_non_dep_receives_pension_credit), the merge835fab99cand the three commits under Between the approvals at835fab99cand649d3ad8f.99b284783, one single-process run each, on policyengine-core 3.34.1:gov/local_authorities/council_tax_reduction/, 525 cases, among them this branch'scouncil_tax_reduction_carer_premium.yamland Count enhanced PIP daily living and AFIP for the enhanced premium #2808'senhanced_disability_premium.yamlandapplicant_or_partner.yaml;uc_carer_element_carer_test.yaml, 12 cases; andgov/dwp/housing_benefit_pre_cutoff_period.yaml, 4 cases. All passed.test_uc_carer_element_award_properties.py: 13 passed (241 s). Count enhanced PIP daily living and AFIP for the enhanced premium #2808'stest_enhanced_disability_premium_properties.py: 4 passed (51 s).test_council_tax_reduction_applicant_properties.py, which Count enhanced PIP daily living and AFIP for the enhanced premium #2808 changed: 2 passed (214 s).test_housing_benefit_pension_age_cohorts.py: 80 passed (381 s).test_supplied_inputs.pyandtest_subsample.py, which came with Count only supplied inputs that are still stored in their tier #2308 and test the module both sides changed: 61 passed (149 s), and 58 of 60 passed (521 s). The other two, the cases oftest_neutralized_inputs_and_model_values_survive_subsampling, fail the same way onmainat5800015f2under 3.34.1: Count only supplied inputs that are still stored in their tier #2308 marked them as expected failures ("needs policyengine-core holder resync"), and Require policyengine-core 3.34.9 #2897 removed the mark when it raised the requirement topolicyengine-core>=3.34.9.ruff0.17.2format --check .,check .andcheck --select F811,F821 policyengine_uk, andgit diff --check 649d3ad8f 99b284783: clean.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 withcare_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).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 ingov/dwp/pension_credit/guarantee_credit/, and every YAML file the branch adds or changes sincef9fdc636a(including two thatmainbrought in): 29 files, onepolicyengine-core testrun 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.yamlandintegration/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 4run (76 s), with no expected failures. At the merge withmain(cdf5fbd91), before the changes to the veteran test, the three runs oftest_the_non_dependant_branch_reads_the_award_without_housing_costsfailed 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; onmain(557087da1) it fails withassert np.float32(4474.6) == 0, the blind carer's premium.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) andtest_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, since renamedtest_the_branch_decides_a_blind_partners_exemption): passed.-n 4run each:test_severe_disability_premium_properties.py6 passed (125 s),test_severe_disability_addition_properties.py7 passed (230 s),test_legacy_carer_premium_properties.py4 passed (86 s),test_pension_age_severe_disability_premium_properties.py3 passed (62 s),test_disable_simulated_benefits_carers.py18 passed (120 s),test_legacy_award_readers_properties.py20 passed (189 s),test_council_tax_reduction_severe_disability_family.py8 passed (17 s), and Count AFIP as attendance allowance in UC housing cost contributions #2815'stest_uc_afip_housing_contribution_properties.py3 passed (21 s).policyengine_uk/tests/code_health -n 4: 3,153 passed.f75f41abc; B1, B2 and B4 to B7 atb6b1ce7c, which differs from31139e82only in Scotland's carer premium; and S1 and S2 at31139e82:uc_award_upper_boundfromf9fdc636a, restored, with the claim and eligibility) in place of the award: the three nil-award route tests fail athas_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.universal_creditin place of the award before the cap: 11 of 12 property tests fail withCycleErrorthrough the benefit cap route; the abolition test passes.uc_non_dep_receives_pension_creditcalculates 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 withCycleError("Circular definition detected on formula has_uc_award_with_carer_element@2026") through the non-dependant deduction route.carer = receives): 6 of the 24 cases in the two new YAML files fail, including the Northern Ireland case.uc_carer_element_included_for_claimantin place of the award): 3 fail, 2026 (£2,503.80), 2024 (£2,371.20) and 2025 (£2,412.80).fff13eda8(31139e82keeps the lines these three change): M4, limb (c) from 2013 (the 2021 case fails); M5,council_tax_reduction_premiumsdrops 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_ukandgit diff --check 31139e822..HEAD: clean.main..github/check_fix_pr.pyon this title and body at99b284783, aspr_fix_evidence.yamlruns it: PASS againstmainat5800015f2.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