Skip to content

No take-up modeling on state credits: flat per-return credits overshoot actuals by the full take-up gap (CA YCTC +39%) #341

Description

@PavelMakarchuk

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions