Add contributed EITC match reforms for 9 states without existing state EITC#7895
Conversation
Adds contributed reforms allowing AL, AR, AZ, GA, ID, KY, MS, ND, and WV
to implement a state EITC as a percentage match of the federal EITC.
These states currently have income tax but no existing state EITC.
Each state reform includes:
- Parameters in gov/contrib/states/{st}/eitc/:
- in_effect.yaml - Boolean toggle (default: false)
- match.yaml - Match rate as fraction of federal EITC (default: 0)
- Reform module in reforms/states/{st}/eitc/
- YAML tests in tests/policy/contrib/states/{st}/eitc/
Usage:
```yaml
gov.contrib.states.{st}.eitc.in_effect: true
gov.contrib.states.{st}.eitc.match: 0.1 # 10% match
```
Closes PolicyEngine#7894
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds contributed reforms allowing Missouri and Ohio to convert their
existing nonrefundable EITCs to refundable credits.
Missouri:
- MO Working Families Tax Credit (mo_wftc) is nonrefundable by default (since 2023)
- Reform adds in_effect toggle to make it refundable
Ohio:
- OH EITC (oh_eitc) is nonrefundable by default
- Reform adds in_effect toggle to make it refundable
Each state reform includes:
- Parameters in gov/contrib/states/{st}/eitc/:
- in_effect.yaml - Boolean toggle (default: false)
- Reform module that moves EITC from nonrefundable to refundable credits
- YAML tests verifying reform behavior
Usage:
```yaml
gov.contrib.states.mo.eitc.in_effect: true # Make MO WFTC refundable
gov.contrib.states.oh.eitc.in_effect: true # Make OH EITC refundable
```
Note: SC and UT already have refundable EITC reforms (sc_h3492, ut_refundable_eitc)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move all parameter files from gov/contrib/states/{st}/eitc/ to
gov/contrib/states/{st}/child_poverty_impact_dashboard/eitc/
- Move all test files to corresponding child_poverty_impact_dashboard folders
- Update all reform Python files to reference new parameter paths
- Add new Utah fully refundable EITC reform for childless filers
(separate from existing ut_refundable_eitc which requires children)
This reorganization prepares for future expansion with additional
child poverty impact dashboard reforms beyond EITCs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The reform now uses federal EITC * match rate (like other state EITC reforms) instead of relying on the baseline ut_eitc variable. This allows users to set both refundability and match rate independently. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Simplify tests to not rely on mo_property_tax_credit which has a complex formula requiring additional inputs. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove separate match parameter from UT cpid reform. Like MO and OH, the UT reform now only toggles refundability. To change the match rate, use the baseline parameter: gov.states.ut.tax.income.credits.earned_income.rate Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The mo_refundable_credits variable depends on mo_property_tax_credit which has complex formula dependencies. Simplify tests to only check the core WFTC refundability (mo_refundable_wftc and mo_non_refundable_wftc). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Following the MT newborn credit reform pattern, moved the in_effect check to the reform factory function (5-year lookahead) instead of inside formulas. When the reform is applied, it now calculates directly without conditional checks. Updated all EITC reforms: AL, AR, AZ, GA, ID, KY, MS, NC, ND, WV (match states), MO, OH (refundable conversions), and UT (fully refundable). Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Program Review: PR #7895 - State EITC Match ReformsOverview
Critical (Must Fix)1. ND Reference Field Missing Commas -
|
| Check | Result |
|---|---|
| Code Patterns | 1 critical (ND commas), 2 should-address (hardcoded lists) |
| Test Coverage | 4 gaps (edge cases, integration) |
| Parameter Metadata | Reference fields missing (should-address for contrib) |
| CI Status | Passing |
Review Severity: COMMENT
Rationale:
- The ND missing commas issue is a real bug that should be fixed, but it only affects the
referencemetadata tuple (not runtime behavior) - The hardcoded credit lists in OH/UT are maintenance concerns but don't break current functionality
- All CI checks are passing
- This is a contributed reform with relaxed standards
For a contributed reform PR with passing CI, COMMENT is appropriate to flag the issues without blocking merge.
Next Steps
To auto-fix issues: /fix-pr 7895
Priority Fixes:
- Add commas to ND reference tuple (Critical)
- Add zero EITC edge case tests (Should Address)
- Add wrong state code tests (Should Address)
Optional Improvements:
4. Refactor OH/UT to use parameter-driven credit aggregation
5. Add reference metadata to parameter files
6. Add integration tests for MO/OH refundable credit flows
Added commas between URL strings in the reference tuple to prevent Python string concatenation from merging them into one invalid URL. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix OH/UT hardcoded credit lists with parameter-driven approach - Add edge case tests (zero EITC, wrong state code) to all 12 test files - Add refundable credits output tests for AR, AZ, ID, WV - Add MO/OH integration tests for non-refundable credits - Add comments to AL, GA, KY, MS about no baseline refundable credits - Rename tests to use numbered case format Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Simplify AR, AZ, ID, WV, OH refundable/non-refundable credits formulas to avoid using add() with parameter paths that don't exist or have unavailable variables. These states don't have baseline refundable credits, so the reform EITC is the only refundable credit. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Summary
Adds contributed EITC reforms for states that either:
Closes #7894
Part 1: EITC Match Reforms (9 states without state EITC)
States: AL, AR, AZ, GA, ID, KY, MS, ND, WV
These states have income tax but no existing state EITC implementation. The reform adds parameters to create a state EITC as a percentage match of the federal EITC.
Each state includes:
gov/contrib/states/{st}/eitc/):in_effect.yaml- Boolean toggle (default: false)match.yaml- Match rate as fraction of federal EITC (default: 0)reforms/states/{st}/eitc/)tests/policy/contrib/states/{st}/eitc/)Usage:
Part 2: Refundable EITC Reforms (2 states with nonrefundable EITCs)
States: MO, OH
These states have existing EITCs that are nonrefundable by default. The reform adds a toggle to convert them to refundable credits.
Each state includes:
gov/contrib/states/{st}/eitc/):in_effect.yaml- Boolean toggle (default: false)Usage:
States NOT included
Already have refundable EITC reforms:
sc_h3492_eitc_refundable(partial refundability)ut_refundable_eitc(age-based refundability)States with no income tax (no EITC needed):
AK, FL, NV, NH, SD, TN, TX, WA, WY
States with existing state EITC implementations:
CA, CO, CT, DC, DE, HI, IA, IL, IN, KS, LA, MA, MD, ME, MI, MN, MO, MT, NC, NE, NJ, NM, NY, OH, OK, OR, PA, RI, SC, UT, VA, VT, WA, WI
Test plan
in_effect: false🤖 Generated with Claude Code