Skip to content

Add South Carolina fully refundable EITC contrib reform#8683

Open
DTrim99 wants to merge 2 commits into
PolicyEngine:mainfrom
DTrim99:sc-fully-refundable-eitc-reform
Open

Add South Carolina fully refundable EITC contrib reform#8683
DTrim99 wants to merge 2 commits into
PolicyEngine:mainfrom
DTrim99:sc-fully-refundable-eitc-reform

Conversation

@DTrim99

@DTrim99 DTrim99 commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

What this does

Adds a Child Poverty Impact Dashboard contrib reform that converts South Carolina's nonrefundable EITC to fully refundable for all filers, activated by gov.contrib.states.sc.child_poverty_impact_dashboard.eitc.in_effect. This is the SC half of #8682.

SC's EITC is 125% of the federal EITC, capped per filer at $200 from 2026, and is nonrefundable by default (applied only up to remaining state income tax liability), so zero-liability filers receive nothing today.

Approach

Mirrors the corrected Utah/Missouri/Ohio refundability reforms (#8645 / #8642 / #8657) — same principles, no reintroduced bugs:

  • Pay the potential, not the capped credit. sc_fully_refundable_eitc returns sc_eitc_potential (uncapped at liability), so the full credit is paid as a refund. sc_eitc is capped at liability and zeroes out for exactly the low-liability filers refundability helps.
  • Rebuild the non-refundable bucket correctly. sc_non_refundable_credits re-runs ordered_capped_state_non_refundable_credits over the ordered list with sc_eitc filtered out — no add("<param-path string>") bug, and no sum − sc_eitc overstatement when the bucket binds.
  • Clear inherited adds before adding a formula. sc_refundable_credits sets adds = None; subtracts = None (the baseline computes via adds) and returns the standard refundable credits plus sc_fully_refundable_eitc.

The statutory per-filer cap (gov.states.sc.tax.income.credits.eitc.max) is preserved and remains separately adjustable — the dashboard exposes it as its own lever.

New files

  • policyengine_us/reforms/states/sc/child_poverty_eitc/sc_fully_refundable_eitc_reform.py (+ __init__.py)
  • policyengine_us/parameters/gov/contrib/states/sc/child_poverty_impact_dashboard/eitc/in_effect.yaml
  • policyengine_us/tests/policy/reform/sc_fully_refundable_eitc.yaml
  • registration in policyengine_us/reforms/reforms.py; changelog fragment

Verification

  • 4 YAML cases pass: full potential paid as refundable at zero liability; no double-count when liability is present; the $200 (2026) cap is respected; no effect outside SC.
  • End-to-end: setting …child_poverty_impact_dashboard.eitc.in_effect = true on a 2026 SC filer with a federal EITC of $100 and zero SC liability yields sc_fully_refundable_eitc = $125, sc_refundable_credits = $125, and +$125 household net income (baseline pays $0).

Part of #8682.

DTrim99 and others added 2 commits June 18, 2026 14:34
Adds a Child Poverty Impact Dashboard contrib reform that converts South
Carolina's nonrefundable EITC (125% of the federal EITC, capped per filer at
$200 from 2026) to fully refundable for all filers, activated by
gov.contrib.states.sc.child_poverty_impact_dashboard.eitc.in_effect.

Mirrors the corrected Utah/Missouri/Ohio refundability reforms (PolicyEngine#8645/PolicyEngine#8642/
PolicyEngine#8657): pays sc_eitc_potential (uncapped at liability) so zero-liability
filers receive the credit, rebuilds sc_non_refundable_credits via the ordered
cap walk with sc_eitc filtered out (no add() path-string bug), and clears the
inherited adds/subtracts on sc_refundable_credits before giving it a formula.
The statutory per-filer cap (gov.states.sc.tax.income.credits.eitc.max) is
preserved and remains separately adjustable.

Tested: 4 YAML cases (zero-liability refund, no double-count with liability,
$200 cap respected, SC-only) plus an end-to-end check that the in_effect param
activates the reform and raises a zero-liability filer's net income.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…llowlist

The fully refundable SC EITC reform filters sc_eitc out of the ordered
non-refundable list by name, which the applied-credit downstream-consumer
code-health guardrail flags as a new consumer. Add the reviewed entry, as
done for the UT/OH refundability reforms.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@DTrim99 DTrim99 requested a review from PavelMakarchuk June 19, 2026 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant