From the 2026-07 external-benchmark audit: the state-program validation suite exposes a systematic overshoot on flat per-return credits, with take-up as the proven mechanism.
Evidence (release populace-us-2024-sparse-l0-refit-57k-71a0887-national-only-20260701)
CA YCTC: sim $572.9M vs FTB TY2023 actual $413M (+38.7%), decomposed on the same data:
- ~6pp benchmark vintage (max $1,117→$1,154, phase-out start $25,775→$26,626: +6.2% measured)
- ~30pp take-up: the model pays every eligible unit — 546-559k eligible units vs FTB's 398,059 actual returns (claim/eligible 0.71-0.73, consistent with published take-up: CalEITC 54% among SNAP-enrolled, CPL/JPubE 2023; federal EITC ~75% in CA, PPIC)
- Per-unit amounts align ($1,025 sim vs $1,037 actual) — the gap is purely excess unit count
- Demographics ruled out: weighted CA under-6 is 6.2% below ACS 2024 (2.350M vs 2,504,028), which actually masks ~6pp of the take-up gap
No take-up gate exists anywhere on the CA/CO state-credit path (ca_yctc.py pays eligible × amount), and the release H5's tax_unit table carries only takes_up_aca_if_eligible — populace's take_up.py seeds only federal EITC/TANF flags and none are in this artifact.
Why flat credits are the exposure class
Amount-driven credits partially self-correct: CalEITC itself runs −12.9% with no take-up because over-counted marginal claimants carry tiny average amounts (5.78M eligible-proxy units at ~$142 avg vs 3,340,639 actual claims at $282 avg) — over-counting and under-concentration roughly cancel on a hump-shaped schedule. A flat ~$1.1k-per-return credit has no such cancellation: every excess eligible unit adds full dollars, so the take-up gap passes straight to the total.
Contrast case: CO CTC +30.4% is NOT take-up — replicating pre-HB23-1112 TY2023 law on the same data reproduces the DOR actual to the dollar ($89.2M); that row's gap is entirely benchmark vintage (flat-amount restructure effective TY2024). Documented in the spec.
Suggested action
Seed take-up flags for state credits (parity with the federal EITC/TANF pattern in take_up.py), prioritizing flat per-return credits — the class where absence of take-up binds one-for-one. Candidate rates from published sources per state (CA YCTC implied 0.71-0.73). The state-program validation suite gives an immediate before/after scorecard.
🤖 Generated with Claude Code
From the 2026-07 external-benchmark audit: the state-program validation suite exposes a systematic overshoot on flat per-return credits, with take-up as the proven mechanism.
Evidence (release
populace-us-2024-sparse-l0-refit-57k-71a0887-national-only-20260701)CA YCTC: sim $572.9M vs FTB TY2023 actual $413M (+38.7%), decomposed on the same data:
No take-up gate exists anywhere on the CA/CO state-credit path (
ca_yctc.pypayseligible × amount), and the release H5's tax_unit table carries onlytakes_up_aca_if_eligible— populace'stake_up.pyseeds only federal EITC/TANF flags and none are in this artifact.Why flat credits are the exposure class
Amount-driven credits partially self-correct: CalEITC itself runs −12.9% with no take-up because over-counted marginal claimants carry tiny average amounts (5.78M eligible-proxy units at ~$142 avg vs 3,340,639 actual claims at $282 avg) — over-counting and under-concentration roughly cancel on a hump-shaped schedule. A flat ~$1.1k-per-return credit has no such cancellation: every excess eligible unit adds full dollars, so the take-up gap passes straight to the total.
Contrast case: CO CTC +30.4% is NOT take-up — replicating pre-HB23-1112 TY2023 law on the same data reproduces the DOR actual to the dollar ($89.2M); that row's gap is entirely benchmark vintage (flat-amount restructure effective TY2024). Documented in the spec.
Suggested action
Seed take-up flags for state credits (parity with the federal EITC/TANF pattern in
take_up.py), prioritizing flat per-return credits — the class where absence of take-up binds one-for-one. Candidate rates from published sources per state (CA YCTC implied 0.71-0.73). The state-program validation suite gives an immediate before/after scorecard.🤖 Generated with Claude Code