Repository navigation
Use UC earned income before the work allowance in targeted childcare and local CTR - #2552
Conversation
…and local CTR Part of #1986 (items 2 and 3; item 1, the benefit cap earnings exception, is in #1820 and #2536). SI 2014/2147 reg 1(3)(a) tests targeted (two-year-old) childcare on earned income "for the purposes of Chapter 2 of Part 6" of the UC Regulations 2013, and the Kingston upon Thames, Merton, Newham and Westminster Council Tax Reduction schemes take the Secretary of State's calculation of income (Default Scheme para 37). Neither deducts the work allowance, which is a step in the award (reg 22). Both read the new uc_earned_income_before_work_allowance; uc_earned_income is that less the work allowance, as before. Ported from #1999. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aggregate impact on certified data: passBase Checks: 0 broken by this change, 1 failing on both sides, 0 fixed. Moves flagged for review: 18 (thresholds in Notes
Moves flagged for review
Spending by benefit and service
Caseloads
Government balance, each component counted once
Model totals
Household income totals
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
Household net income by decileMean change in household net income per household, and as a share of the decile's base income; households stay in the base run's deciles.
No change in any year: receipts by tax head; components the model counts twice; population; poverty rates; people in poverty. Checks failing on both base and head (1)
Counted-once checkEach of 84 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.
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
Components the model counts twice: 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.
Review status: COMPLETE
Review severity: APPROVE
Reviewed head: e37efb7
The childcare and four local Council Tax Reduction consumers now use UC earnings before the work allowance, consistent with SI 2014/2147 reg. 1, UC reg. 22, and the current Kingston, Merton, Newham and Westminster schemes. Claimant filtering, deductions, the minimum income floor and the UC award calculation remain intact.
Validation: 312 affected YAML tests and all 4 new property tests pass; Ruff passes on the 5 changed Python files. A full childcare-path check crosses the limit at £16,500/£16,501 of pay while UC remains positive. The existing working-parent entitlement covers the resulting change in the targeted entitlement where it applies. Official source checks found no material gap. The annual assessment-period approximation remains disclosed and unchanged; full microsimulation and docs were not rerun locally.
No blocking findings. This approval covers the reviewed commit; the PR remains draft.
Since #2177 targeted_childcare_entitlement_eligible is legal eligibility: standalone take-up (would_claim_targeted_childcare) and eligibility for the working parent entitlement no longer remove it. The route-identity and differential oracles still required both, so they failed on every family that does not claim targeted childcare on its own or is eligible for the extended hours. The oracles are now England and at least one route open. The Universal Credit criterion reads earned income before the work allowance since #2552 (SI 2014/2147 reg 1(3)(a)); the union property now checks the criterion against that rule for every generated family, and two known families pin both changes: a Universal Credit claimant also eligible for working parent hours qualifies, and a £20,000 earner on Universal Credit (£17,920 before the work allowance) does not. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refs #1986 (items 2 and 3; item 1 is in #1820 and #2536)
Targeted (two-year-old) childcare and four London boroughs' Council Tax Reduction schemes compared Universal Credit earned income after the work allowance with their limits. The law takes it before the work allowance. This replaces the childcare and CTR parts of draft #1999, cut down to these two items on current main as María asked there.
The third part of #1986, the benefit cap earnings exception, is now covered elsewhere. Main split the benefit cap by scheme (#2089). Vahid Ahmadi's #1820 measures the cap's earned income per claimant, and María Juaristi's #2536 sets the reg 82(1)(a) threshold from the national living wage. This PR doesn't touch either.
Law
Change
uc_earned_income_before_work_allowance(BenUnit): the sum ofuc_individual_earned_incomeover theis_uc_assessed_claimantmembers. This is the Part 6 Chapter 2 figure, net of each claimant's own tax, NI and relievable pension contributions, with the minimum income floor.uc_earned_incomeis now that figure less the work allowance, floored at 0. It is the same value as before, from one sum. The UC award (uc_income_reduction) is its only reader.meets_universal_credit_criteria_for_targeted_childcare_entitlementand the shared local CTR helper (council_tax_reduction/_legacy.py) readuc_earned_income_before_work_allowance.Not modelled, as before: the two- and three-assessment-period look-back in SI 2014/2147 reg 1(5)-(6). The model tests a year's earned income against 12 times the monthly limit.
Tests
YAML from the law:
meets_universal_credit_criteria_for_targeted_childcare_entitlement.yaml(new, 9 cases):council_tax_reduction.yaml: the Benefit cap, targeted childcare and local CTR use the wrong UC earned income figure #1986 counterexamples in Kingston upon Thames, Merton, Westminster and Newham. Three existing cases that input the old variable now input the new one, with the same expectations.Fail on main, pass on head. With only these two YAML files copied into a tree at main
ecd531776, they give 14 failed, 35 passed: the seven new childcare cases that test earned income and the seven CTR UC cases. On this head they give 49 passed. The childcare, CTR and UC YAML folders give 790 passed.Mutation check. Restoring the after-work-allowance figure in the childcare rule fails 5 YAML cases and 2 property tests. The CTR cases fail on main in the same way.
Invariants (
test_uc_earned_income_before_work_allowance_properties.py, Hypothesis)Families of one or two adults with a child aged 2, earnings, self-employment and pension contributions, in council, housing association and private rented homes, in 2025, 2026 and 2027:
uc_earned_income == max(0, uc_earned_income_before_work_allowance − uc_work_allowance), and the figure before the work allowance is never lower.Impact on the certified pair
IMPACT
Overlaps
council_tax_reduction/_legacy.py: Charge in-unit non-dependants in the local Council Tax Reduction schemes, and exclude a lodger personally only outside the head's family #2077, Count a non-dependant shared by joint tenants in each tenant's Housing Benefit size criteria #2035, Charge non-dependant deductions for non-dependants within the claimant's benefit unit #2017, Treat income derived from capital as capital in the legacy means tests #1995. Each changes other parts of the scheme, so a conflict would be textual.uc_earned_income.py; keep this PR's single sum when merging.axiom: TheAxiomFoundation/rulespec-uk#400 queued (SI 2014/2147 reg 1); TheAxiomFoundation/rulespec-uk#401 queued (the four borough CTR schemes)
Reproducer:
policyengine_uk/tests/policy/baseline/gov/dfe/targeted_childcare_entitlement/meets_universal_credit_criteria_for_targeted_childcare_entitlement.yaml,policyengine_uk/tests/test_uc_earned_income_before_work_allowance_properties.py::test_crossing_the_limit_by_one_pound_of_pay🤖 Generated with Claude Code