Ohio: `oh_eitc` is applied before the credits that R.C. 5747.98 and the Schedule of Credits place ahead of it
Maintainers usually reply within 2 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 52/100
Research direction
Start with policyengine_us/parameters/gov/states/oh/tax/income/credits/non_refundable.yaml and compare its Ohio credit ordering with the cited R.C. 5747.98 and Schedule of Credits. Then read tests/policy/baseline/gov/states/oh/tax/income/credits/oh_non_refundable_credit_order.yaml and add the described household case. Done means the parameter ordering and tests reflect the stated statutory order and expected credit amounts.
Written by the indexing model from the issue text.
Description
Found by the policyengine-scorecard reform-validation diagnosis (batch 2), PolicyEngine/policyengine-scorecard#146. Memo: diagnosis/batch2/D.md, item D4.
Related: #7984 (merged; introduced ordered per-credit application).
What the engine does (main @ 6b80a8e = 2.2.1 for these files)
policyengine_us/parameters/gov/states/oh/tax/income/credits/non_refundable.yaml:2-19values: 2021-01-01: - oh_adoption_credit - oh_eitc - oh_cdcc - oh_senior_citizen_credit - oh_retirement_credit - oh_non_public_school_credits - oh_exemption_credit - oh_joint_filing_credit 2023-01-01: - oh_eitc - oh_cdcc - oh_senior_citizen_credit - oh_retirement_credit - oh_non_public_school_credits - oh_exemption_credit - oh_joint_filing_credit
oh_eitc (variables/gov/states/oh/tax/income/credits/oh_eitc.py:19-30) is capped by applied_state_non_refundable_credit, which subtracts only the credits listed before it (variables/gov/states/tax/income/non_refundable_credit_cap.py:31-43). With oh_eitc first, nothing precedes it. The joint filing credit base ("line 11") is liability minus the applied CDCC, senior, retirement and exemption credits (variables/gov/states/oh/tax/income/credits/joint_filing_credit/oh_tax_before_joint_filing_credit.py:18-23; parameters/gov/states/oh/tax/income/credits/joint_filing/other_non_refundable_credits.yaml:3-7), and those are already reduced by the EITC.
The existing test tests/policy/baseline/gov/states/oh/tax/income/credits/oh_non_refundable_credit_order.yaml ("Applied non-refundable credits follow filing order") encodes the EITC-first order (oh_eitc: 80, oh_cdcc: 20 on $100 of liability), so it would need to change.
What the law and form say
R.C. 5747.71 (codes.ohio.gov; effective July 3, 2019):
"There is hereby allowed a nonrefundable credit against a taxpayer's aggregate tax liability under section 5747.02 of the Revised Code for a taxpayer who is an "eligible individual" as defined in section 32 of the Internal Revenue Code. The credit shall equal thirty per cent of the federal credit allowed for the taxable year. The credit shall not exceed the aggregate amount of tax otherwise due under section 5747.02 of the Revised Code after deducting any other nonrefundable credits that precede the credit allowed under this section in the order prescribed by section 5747.98 of the Revised Code."
R.C. 5747.98(A), version effective October 3, 2023 (H.B. 33), in force for TY2024, first eight items:
"(A) To provide a uniform procedure for calculating a taxpayer's aggregate tax liability under section 5747.02 of the Revised Code, a taxpayer shall claim any credits to which the taxpayer is entitled in the following order:
Either the retirement income credit under division (B) of section 5747.055 of the Revised Code or the lump sum retirement income credits under divisions (C), (D), and (E) of that section;
Either the senior citizen credit under division (F) of section 5747.055 of the Revised Code or the lump sum distribution credit under division (G) of that section;
The dependent care credit under section 5747.054 of the Revised Code;
The credit for displaced workers who pay for job training under section 5747.27 of the Revised Code;
The campaign contribution credit under section 5747.29 of the Revised Code;
The twenty-dollar personal exemption credit under section 5747.022 of the Revised Code;
The joint filing credit under division (G) of section 5747.05 of the Revised Code;
The earned income credit under section 5747.71 of the Revised Code;"
The September 30, 2021, March 23, 2022 and September 30, 2025 versions list the same eight credits in the same order (the 2025 version drops the campaign contribution credit and cites division (E) for the joint filing credit). In the 2021 and 2022 versions the adoption credit (5747.37) comes after the nonchartered nonpublic school tuition credit, not first.
2024 Ohio Schedule of Credits (2024 Ohio IT 1040 bundle, PDF p. 7), Nonrefundable Credits [dot leaders removed]:
" 1. Tax liability before credits (from Ohio IT 1040, line 8c)
2. Retirement income credit (include 1099-R forms)
3. Lump sum retirement credit (include a copy of the worksheet and 1099-R forms)
4. Senior citizen credit (must be 65 or older to claim this credit)
5. Lump sum distribution credit (include a copy of the worksheet and 1099-R forms).
6. Child care & dependent care credit (include a copy of the worksheet)
7. Displaced worker training credit (include a copy of the worksheet and all required documentation).
8. Campaign contribution credit for Ohio statewide office or General Assembly
9. Exemption credit
10. Total (add lines 2 through 9)
11. Tax less credits (line 1 minus line 10; if negative, enter zero).
12. Joint filing credit (see instructions for table). % times line 11, up to $650
13. Earned income credit"
2024 Ohio IT 1040 instructions (PDF p. 30), "Line 13 – Earned Income Credit": "Your nonrefundable Ohio earned income credit (EIC) equals 30% of your federal EIC (federal 1040 and 1040-SR, line 27). See R.C. 5747.71."
Example (policyengine-us 2.2.1, TY2024, Ohio, married filing jointly, wages $30,000 + $6,000, children 4 and 2, child care $4,000)
Engine values: tax before nonrefundable credits $370.32; oh_eitc_potential $1,686.18; oh_cdcc_potential $170.00; oh_exemption_credit_potential $80.00; joint filing rate 15% (the rate the engine applies to this household).
| Line | Schedule of Credits order (hand computed) | Engine today |
|---|---|---|
| 1 Tax before credits | 370.32 | 370.32 |
| 6 CDCC | 170.00 | 0.00 |
| 9 Exemption credit | 80.00 | 0.00 |
| 11 Tax less credits | 120.32 | 370.32 (oh_tax_before_joint_filing_credit) |
| 12 Joint filing credit (15% of line 11) | 18.05 | 0.00 |
| 13 EITC (capped at 120.32 - 18.05) | 102.27 | 370.32 |
| Ohio income tax | 0.00 | 0.00 |
Reordering the parameter list to the statutory order reproduces the hand-computed column exactly.
Impact
- Total Ohio income tax: unchanged in every case traced. The ordered aggregate (
oh_non_refundable_credits) is still capped at liability, so the total of applied credits is min(sum, liability) in either order. (Reasoning plus three household checks; not proven for every input.) - Changed: the applied amounts of
oh_eitc,oh_cdcc,oh_exemption_credit,oh_joint_filing_credit,oh_retirement_creditandoh_senior_citizen_credit, and anything that reads them, including thestate_eitcaggregates (parameters/gov/states/household/state_eitcs.yamllistsoh_eitc). - Validation (certified bundle us-6.2.1): PE's 2024
oh_eitctotal is $108.9M. Applying it after the preceding credits in the form order gives $95.9M (first order), so the ordering explains $13.0M of the gap to the scorecard's Ohio benchmark row ($59.3M, an ODT estimate the registry labels approximation; we did not re-extract that document).
Proposed change
For 2021-01-01 and 2023-01-01, reorder gov.states.oh.tax.income.credits.non_refundable to R.C. 5747.98: oh_retirement_credit, oh_senior_citizen_credit, oh_cdcc, oh_exemption_credit, oh_joint_filing_credit, oh_eitc, oh_non_public_school_credits, then oh_adoption_credit for 2021-2022. Update oh_non_refundable_credit_order.yaml, and add the household above as a test (expected values from the Schedule of Credits arithmetic).
- Dominant language
- Python
- Stars
- 168
- Forks
- 216
- Avg merge
- 3d 11h
- Merged PRs (30d)
- 337
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PolicyEngine/policyengine-us
-
Florida School Readiness counts tips twice (employment_income already includes tip_income)Possibly taken @hermes-agent-909 claimed this 3 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
PolicyEngine/policyengine-us#10262 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
PolicyEngine/policyengine-us#10179 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 82/100
PolicyEngine/policyengine-us#10073 ·
Maintainers usually reply within 2 days
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PolicyEngine/policyengine-us#10072 ·
Maintainers usually reply within 2 days
-
bug state-income-tax states/vt
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
PolicyEngine/policyengine-us#9996 ·
Maintainers usually reply within 2 days
All issues in PolicyEngine/policyengine-us
Similar issues
-
changelog investigate
Difficulty 2/5 1-3 hours Newbie friendliness 65/100
ramnes/notion-sdk-py#423 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 77/100
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
Difficulty 1/5 1-3 hours Newbie friendliness 89/100
duckdb/duckdb-web#7514 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
jbacalso24/mimry#525 ·
Maintainers usually reply within 1 day