Count contributory ESA, Maternity Allowance, industrial injuries benefit and capped Carer Support Payment as UC unearned income - #1958
Merged
Conversation
UC Regs 2013 reg 66(1)(b) counts contributory ESA (ii), carer support payment up to the Carer's Allowance amount (iiia, from 19 November 2023), maternity allowance (viii) and industrial injuries benefit (ix) as unearned income. PolicyEngine counted none of them. Add esa_contrib, maternity_allowance and iidb to the unearned list from 2013-04-29, and a new uc_unearned_carer_support_payment (the carer support payment component, without the Scottish Carer Supplement, capped at a year of Carer's Allowance) from 2023-11-19. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1942 case carer_support_payment is about to become the carer support payment component only (the Scottish Carer Supplement moves to its own variable on branch pension-credit-carers-income), so scaling it by the component's share would remove the supplement twice. The component is paid at the Carer's Allowance rate, so the reg 66(1)(b)(iiia) cap alone gives the component for a full year either way. Property tests: the award after the benefit cap is non-increasing only for families already receiving the benefit (receipt of contributory ESA, industrial injuries benefit or CSP can exempt a family from the cap); explicit capped-family examples; CSP monotonicity restricted to families without earnings, with a strict xfail pinning #1942 (the carer's tax on CSP above the cap lowers the partner's UC earned income). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Sep 30, 2026
- 2020-21: assert only unearned income and the reduction; the 2020-21 standard allowance parameter holds the 2021-22 figures (S.I. 2020/371 gives 594.04 for a couple aged 25 or over, not 596.58). - Add a 2023-24 case: the yearly model takes the list in force at the start of the fiscal year, so CSP first counts in 2024-25. - Draw contributory ESA as esa_contrib_reported so tests with earnings exercise the income tax path. - Add the pound-for-pound property for counted Carer Support Payment. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
convert_to_fiscal_year_parameters samples each parameter on 30 April of the fiscal year, not at its start. Comment only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Collaborator
Author
|
Merged on green CI at dfffc19 (all six checks pass; mergeable and clean).
|
This was referenced Oct 1, 2026
MaxGhenis
added a commit
that referenced
this pull request
Oct 1, 2026
#1958 split the list into 2013-04-29 and 2023-11-19 blocks. The rebase removed interest, dividends and rent from the later block only, so remove them from the earlier one too. The single-count property now reads the listed sources from the parameter and asserts none of the three is on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 1, 2026
After merging main (#1958), carer_support_payment in the Scottish UC case is the component alone, 4,495.40, with scottish_carer_supplement 608.40 asserted beside it. uc_unearned_carer_support_payment and universal_credit are unchanged. Refreshes the wording that said carer_support_payment includes the supplement. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 1, 2026
#1958 split the UC unearned income list into two dated blocks (2013-04-29 and 2023-11-19, when carer support payment starts to count). State Pension goes in both: retirement pension income has counted since 29 April 2013 (reg 66(1)(a) as made). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 1, 2026
MaxGhenis
added a commit
that referenced
this pull request
Oct 1, 2026
Resolve council_tax_reduction_applicable_income: keep #1909's guarantee credit and savings-credit-only rules and this branch's income-from-capital rules, documentation and references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 2, 2026
…nd partners The property tests merged from #1958 and #1909 build couples such as 42 and 18 or 67 and 18 without relationship inputs, which this branch's presumption reads as a parent and child. Set is_claimant_or_partner from each generated role (adults True, children False, a separate non-dependant True for their own benefit unit), as the FRS supplies it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
pushed a commit
that referenced
this pull request
Oct 2, 2026
#1958 split the list into 2013-04-29 and 2023-11-19 blocks. The rebase removed interest, dividends and rent from the later block only, so remove them from the earlier one too. The single-count property now reads the listed sources from the parameter and asserts none of the three is on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
added a commit
that referenced
this pull request
Oct 2, 2026
…iew's counterexamples - test_uc_unearned_benefits_properties.py (added on main by #1958) had a strict xfail pinned to #1942, which this fix turns into a pass. Remove it and widen the earnings-free invariants to all families, with Marriage Allowance off as in the State Pension file (#1947). - The tests review found that random draws missed two mutations. Pin its minimized counterexamples as @example cases: a pound of State Pension for a pensioner just above the personal allowance with an earning partner, and a pound of pension for an earner just above it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
juaristi22
pushed a commit
that referenced
this pull request
Oct 2, 2026
#1958 split the list into 2013-04-29 and 2023-11-19 blocks. The rebase removed interest, dividends and rent from the later block only, so remove them from the earlier one too. The single-count property now reads the listed sources from the parameter and asserts none of the three is on it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Universal Credit unearned income now counts four benefits that UC Regs 2013 reg. 66(1)(b) lists and PolicyEngine left out:
esa_contribuc_unearned_carer_support_paymentmaternity_allowanceiidbReg. 22(1)(a) deducts all unearned income from the maximum amount, so each counts pound for pound.
Law (verified verbatim on legislation.gov.uk, 2026-09-30)
Carer Support Payment
uc_unearned_carer_support_payment= min(carer_support_payment, Carer's Allowance rate × 52).carer_support_paymenttoday is (CSP rate + Scottish Carer Supplement) × 52. The CSP component is paid at the Carer's Allowance rate (£86.45 a week in 2026-27 for both), so for a full year the cap is the component and the supplement drops out.carer_support_paymentbecomes the component only. The pension-credit-carers-income branch moves the supplement toscottish_carer_supplement; a rescaling formula would have removed it twice.carers_allowanceis 0 and CSP replaces it, and elsewhere CSP is 0. The tests check a Scottish carer and the same carer in England get the same UC.Enhanced FRS impact
Real runs on a private copy of the Enhanced FRS 2024-25 (
enhanced_frs_2024_25.h5, sha256e433e532…68712):uc_unearned_carer_support_paymentdiagnostic excluded), in every year 2025-2030.The one-at-a-time rows interact and don't sum to the combined row (−£1.980bn against −£1.944bn), because some benefit units hold more than one of the benefits and UC can't fall below zero.
uc_deductionsare capped at the award less the 1p-a-month minimum payable (uc_deductions.py; SI 2013/380 Sch 6), so they fall as awards fall. Of the 17.1k units affected (22 records), 15.8k see the pre-cap award fall to zero and 1.2k are left with the £0.12-a-year minimum. The benefit cap reduction doesn't change for any unit (impact/precap_gap.py, outputprecap_gap_2026.txt).maternity_allowance_reported: FRS code 21 was dropped fromBENEFIT_CODESin 2024. It matters for household calculations now and for the microsim once the data is fixed.impact/overlap_prevalence.py, outputoverlap_prevalence_2026.txt), so the missing overlapping-benefits reduction of CA/CSP doesn't affect these figures. See the known limits below.~/reviews/uc-unearned-reg66-benefits-2026-09-30/impact/(dataset_impact.py,compare_impact.py).Invariants
These hold for every input and are tested with Hypothesis in
test_uc_unearned_benefits_properties.py:is_benefit_cap_exempt_*). An explicit capped lone-parent example exercises this every run.Invariants 2 and 3, and invariant 1 for CSP, are restricted to families without earnings. The reason is #1942:
uc_earned_incomededucts the whole benefit unit's income tax (the fix is in #1949).test_carer_support_payment_above_the_cap_does_not_change_uc, hand-computed at £1,060.32) pins it and will flip when Deduct only each person's own tax and NI on earnings from UC earned income #1949 merges.Differential check (one-off, not in CI). The branch package with main's list, swapped in memory, reproduces every model output of the main package's Enhanced FRS run exactly (28 arrays), in every year 2025-2030.
Tests
uc_unearned_benefits.yaml: 17 cases, expected values hand-computed from 2026-27 and 2024-25 rates. The 2020-21 case asserts only the unearned income and the reduction, because PolicyEngine's 2020-21 standard allowance holds the 2021-22 figures (596.58 for a couple aged 25 or over, where S.I. 2020/371 gives £594.04; follow-up tracked). A 2023-24 case pins that CSP first counts in 2024-25: the yearly model takes each parameter's value on 30 April of the fiscal year (convert_to_fiscal_year_parameters), and (iiia) begins 19.11.2023. On main, 16 fail and the private-pension control passes.esa_contrib_reported, so families with earnings exercise the income tax path.test_uc_unearned_benefits_properties.py: the invariants above, plus the strict xfail.Known limits (follow-ups tracked)
bsp_reportedsums FRS codes 6 (BSP / Widowed Parent's Allowance) and 9 (War Widow's Pension, about 90% of the money).bspcorrectly stays out.iidb(=iidb_reported). All 116 FRS 2024-25 code-15 amounts sit on the disablement-pension rate grid, and none is above the 100% rate, so the data carry no constant attendance or exceptionally severe disablement increases.carers_allowanceandcarer_support_payment.benefit_cap_reductionomits them. Follow-up; check against Fix benefit cap exemption defects (#1818) #1820.uc_unearned_incomesums the list over every benefit-unit member, so a child's or qualifying young person's CSP, ESA, MA or IIB now reduces the parents' UC. Reg. 22(1)(a) deducts only the claimant's (or joint claimants') unearned income. The pattern already applied to Carer's Allowance and every other listed income; this PR extends it to four more benefits. The Enhanced FRS effect is unmeasured. Follow-up tracked: restrict UC unearned income to claimants, alongside the Replace generic child and adult flags with each programme's legal definitions #1896 dependant definitions.esa_contribdoesn't distinguish old-style from new-style.Coordination
state_pensiongoes into both dated blocks.household_benefits) doesn't touch UC.carer_support_paymentthe component only and moves the supplement toscottish_carer_supplement.uc_unearned_carer_support_paymentis unchanged either way (checked: with Count Carer's Allowance and Carer Support Payment as Pension Credit income #1952 applied, the only failing assertion iscarer_support_payment= 5,103.80). If Count Carer's Allowance and Carer Support Payment as Pension Credit income #1952 merges first, this PR sets that output to 4,495.40, addsscottish_carer_supplement= 608.40, and drops the "currently includes" wording from the variable docstring, the YAML header (the 5,103.80 line) and the property-file comment oncarer_support_payment. If it merges second, Count Carer's Allowance and Carer Support Payment as Pension Credit income #1952 does the same.axiom: uk:regulations/uksi/2013/376/66 (b)(ii), (viii) and the base limb of (ix) (s.104/105 exclusion deferred, TheAxiomFoundation/rulespec-uk#392) encoded-correct via TheAxiomFoundation/rulespec-uk#391 (companion cases contributory_esa_counts_in_full, maternity_allowance_counts_in_full, industrial_injuries_benefit_counts_in_full) | TheAxiomFoundation/rulespec-uk#392 queued ((iiia) is dated 2013-04-29 but inserted 19.11.2023; reg 2 definitions; s.104/105 exclusion)
🤖 Generated with Claude Code