Repository navigation
Keep UC advance repayments fixed under allowance reforms - #2574
Conversation
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
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 decileNo household's net income changes in any year. No change in any year: receipts by tax head; population; poverty rates; people in poverty. Checks failing on both base and head (1)
Counted-once checkEach of 91 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
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
|
|
UK hub independent review (GPT-6.1 Sol) at
As with #2573, and at the coordinator's request so nobody waits, the hub is opening this fix as a separate PR stacked on your branch; it won't push to yours. @juaristi22, cherry-pick it if you'd rather fold it in. Both land together once you mark this ready or say the hub may. |
|
UC advance missingness fix is pushed as draft #2581, stacked on #2574's
Workspace-local |
|
Focused validation of the existing #2581 repair is complete at The single serial run covered all seven new population cases and the Hypothesis peer-independence property, both deduction YAML files, Execution used an existing Python 3.13.14 / policyengine-core 3.33.2 / NumPy 2.5.4 environment, with imports verified against the exact detached checkout. Core's actual This supplies the missing focused execution evidence for the parent repair. The hub's independent final-head review remains pending. #2574 remains draft; the repair still needs adoption and validation of the resulting upstream head before readiness and Vahid's review request. |
|
UK hub: the stack is approved. The independent review (GPT-6.1 Sol) of this PR with the fix #2581 approves at @juaristi22: as with #2580, merge #2581 into this branch (it fast-forwards), and mark this ready. Or tell the hub it may, and it'll do both and land this through the merge queue. |
|
Can you link the full independent review report and result JSON for |
|
Round 1 at Verdict: the approach is right and baseline is unchanged, but this head still has the hub's mixed-population bug; fold in #2581 before marking ready. Comment only, as it is a draft. Findings
Law
Current with main: yes. The branch is 765 commits behind What I ran (fresh worktree, this head merged with main
Not run or read: no full microsimulation or aggregate run (I relied on the CI aggregate report); #2581's diff only as far as its description and the hub's notes; the documentation build; the full YAML and Python suites. 🤖 Generated with Claude Code |
|
Round 2 at Verdict: the must is fixed, the body is corrected, and the branch merges cleanly with main. Two nits remain, neither blocking, so I am approving. Status of round 1 findings:
New findings:
Current with main: yes. What I ran, at this head merged with main
Not run: no microsimulation or aggregate run (I relied on the CI aggregate report, which ran against an older main), the docs build, or the full test suites. I did not repeat the round 1 baseline grid, but with no input the new code path gives the same value as before, since the fallback is never negative. 🤖 Generated with Claude Code |
vahid-ahmadi
left a comment
There was a problem hiding this comment.
Approving at 5220120; see the comment above.
Refs #2410
Advance repayment demand currently rises with the Universal Credit standard allowance. For a single claimant aged 30 in 2025, a legacy 10% advance represents £40.014/month at the unreformed £400.14 allowance. Raising the allowance to £440 makes the old demand £44. This change keeps demand at £40.014, subject to the existing cap and available award.
uc_advance_repayment_amountaccepts known annual cash repayments, including explicit zero. This PR adopts the per-benefit-unit missingness repair from #2581 at52201202239dfb73ddb5224ceff0753cdc2e4787: each omitted unit retains its fallback when another unit supplies cash or zero. The fallback retains the existing type-share estimate and uses the same year's unreformed allowance. The existing deduction-rate input, abolition switches, cap, penny floor and protected-floor allocation retain their behavior. SI 2013/383 reg. 10 provides for cash advance recovery. Recovery can still rise when a higher allowance releases a binding cap.This fixes allowance reform responses within an annual cross-section. Cohort repayments across years, family-status changes, maintenance priority and coarse non-advance estimates remain unresolved under #2410; no maintenance or last-resort interface is added.
Validation:
52201202239dfb73ddb5224ceff0753cdc2e4787(81 Python items and 18 YAML cases), with 0 failures and 0 skips. These execution results were reused; no model tests were rerun for this adoption.fba0c0a5, all 19 applicable head-52201202CI contexts succeeded. Aggregate run40317148188(attempt 1) compared FBA with synthetic merge362d4571(fba0c0a5,52201202) on pinned FRS 1.58.1: PASS, with 384 check classifications (360 pass, 22 warnings, one pre-existing VAT issue and one skipped check). Relative to FBA’s reform response, the 10% UC standard-allowance reform increased the UC spending response by £30.7m–£37.6m/year over 2025–2031; the government-balance response fell by the same rounded range. The direction is consistent with fixed advance cash demand; exact weighted attribution was not established. The VAT issue remains; DSA suppression and 18 withheld comparisons do not establish equality or zero national impact. Separately, one local compatibility batch passed three deterministic items on prospective main944238d2+ head52201202, public-source treede968ba38bd7748171d6c707e1ba05050d0de052, using actual CPython 3.13.15 and Core 3.33.2. This targeted constructor/reform check is separate from the 99 historical passes and establishes no new population result or main-944 CI run. The documentation build was not run locally.Reproducer: policyengine_uk/tests/policy/baseline/finance/benefit/family/universal_credit/uc_fixed_deductions.yaml::A legacy advance rate uses the same year's unreformed allowance
axiom: TheAxiomFoundation/rulespec-uk#486 queued (cash advance recovery; signed encoder blocked pending separate per-run approval)