Repository navigation
Apply Ohio's business income deduction and 3% business tax; add both deductions back in modified AGI - #9876
Conversation
Ohio deducts the first $250,000 ($125,000 married filing separately) of business income (R.C. 5747.01(A)(28)) and taxes the rest at a flat 3% (R.C. 5747.02(A)(4)). The model taxed all business income at the graduated rates. Modified AGI is Ohio AGI plus the (A)(28) deduction and, from 2026, the (A)(34) qualifying capital gain deduction (R.C. 5747.01(II), 5747.79(B)). Personal exemptions and the exemption credit now use modified AGI (R.C. 5747.025, 5747.022). Fixes #4056 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…GI in the dependent exemption reform TAXSIM35 does not apply R.C. 5747.01(A)(28); the two 2021 integration cases now carry the form-line derivation with the deduction. The contrib dependent exemption reform's no-op schedule mirrors the baseline, which is stepped by modified AGI (R.C. 5747.025). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sclose conventions - Joint filing credit qualifying income excludes capital gains only to the extent they are still in Ohio AGI; a gain deducted under R.C. 5747.01(A)(34) is not excluded again (R.C. 5747.05(E)(1)). 2026 test. - The qualifying capital gain deduction cannot exceed the capital gains reported, and its documentation states the per-entity rule of R.C. 5747.79(C)(2). - Label the per-spouse split of a joint business income deduction as a modeling convention; disclose farm rent, Form 4797 gains and 20%-owner compensation as nonbusiness; describe the TAXSIM cases' line 8a as model values; move the MAGI test out of business_income/. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…come; quote 5747.79(A)(1) A directly set multi-entity deduction above the capital gains reported can no longer cancel the interest, dividend and rent exclusions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #9876 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 4 17 +13
Lines 76 245 +169
Branches 2 1 -1
==========================================
+ Hits 76 245 +169
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
|
Interaction with #9939, which leaves a tax unit dependent's own items out of
Suggested fix in this PR: zero Found by the independent review of #9939 (round 1, finding 4); I checked it against this branch's source. |
Zero the qualifying capital gain deduction for dependent members whose income is excluded from the filers' federal AGI, retaining the existing filer gain/payroll limits and filer-only business deduction. Pin federal, Ohio and modified AGI using actual dependent gain inputs. Add a generated twin comparison for single/joint returns with dependents. Addresses the PR #9876 interaction identified with #9939.
|
US + core hub merge audit, us#9876 at
|
Summary
oh_modified_agiequalled Ohio AGI. R.C. 5747.01(II) (effective March 5, 2026) defines modified AGI as "Ohio adjusted gross income plus any amount deducted under divisions (A)(28) and (34) of this section". The model never took either deduction, so the add-back alone would have changed nothing. In the modeled filer cases, MAGI came out numerically right while Ohio AGI and the tax were wrong. The dependent-gain interaction with #9939 needs the repair described below. This PR implements the deductions the definition refers to, and the tax structure that goes with them (closes #4056):(A)(28) business income deduction. This is the 2024 Ohio Schedule of Business Income (1040 bundle PDF p. 5):
It is entered on Schedule of Adjustments line 13.
Taxable business income and the 3% tax. These are R.C. 5747.02(A)(4) and schedule lines 14–16:
IT 1040 line 7 (taxable nonbusiness income) is line 5 − line 6. It goes through the graduated brackets (line 8a). The $26,050 no-tax threshold in (A)(3) applies to that nonbusiness balance only.
(A)(34) qualifying capital gain deduction, from 2026. R.C. 5747.79(B) allows the lesser of the qualifying capital gain or the deductible payroll. It is driven by two new person-level inputs and is zero unless they are set.
MAGI consumers. Personal exemptions now use MAGI, as R.C. 5747.025(A) and the 2024 instructions (p. 17) require; they used Ohio AGI. So does the exemption credit (R.C. 5747.022; "modified adjusted gross income less exemptions", 2024 instructions p. 29). The joint filing credit, senior, retirement, lump-sum and child care credits and the homestead exemption already read
oh_modified_agi. The contrib dependent-exemption reform's baseline-mirroring schedule now reads MAGI too.The deduction also flows to each spouse's Ohio AGI (
oh_business_income_deduction_person), so it reaches joint filing credit qualifying income. The 2025 instructions (PDF p. 29) give the example: "Krysten has no qualifying income because her business income and taxable Social Security benefits were both deducted in calculating their Ohio AGI. Therefore, they are not entitled to the joint filing credit."Tests
Expectations follow the Schedule of Business Income lines, IT 1040 lines 1–8c, the 2024 bracket table (instructions p. 18), the MAGI worksheet (p. 40) and the 2025 joint filing credit example. The original 12 new cases passed at
f96ba752aeand failed on itsmainbase (the 2025 and 2026 qualifying capital gain cases fail there because the variables do not exist):The whole
oh/folder ran at 01218d5 (test_batched --mode per-subdir --workers 1). Its only failures were the two TAXSIM cases below, now updated. Every test file changed since then was re-run on its own and passed atf96ba752ae. The fresh repair checks after reconciling current main are listed below.policy/contrib/states/oh(dependent exemption reforms, refundable EITC),policy/reform/oh_refundable_eitc.yaml,gov/states/tax/income/state_agi.yaml,code_health/test_non_refundable_credit_downstream_consumers.pyandcontrib/states/test_dependent_exemption_reform_activation.pypass.Two TAXSIM-derived integration cases changed. TAXSIM35 gives 13,756.36 and 2,818.55, but it does not apply Ohio's business income deduction to the Schedule C income. With the deduction the values are 7,620.86 and 1,850.54. The form-line derivation is in each test's comment, and I checked it by hand against the 2021 brackets.
Independent review
Round 1 of an Opus review (Subfleet, read-only) recomputed every expectation and requested changes, all addressed in 35ee5d9:
Round 2 at 35ee5d9 found the code ready. It asked for the remaining results to be filled in here, and for two nits, which are fixed in f96ba75: the deducted gain is capped at reported capital gains inside the qualifying-income formula, and the 5747.79(A)(1) comment now quotes the statute.
Dependent qualifying gain accounting repair
The interaction with #9939 is fixed here:
oh_qualifying_capital_gain_deductionis zero for a dependent member of the filers' tax unit. R.C. 5747.79(A)(1), (B)
ties the deduction to the taxpayer's gain in federal AGI; R.C. 5747.01(II)
adds back actual deductions. This concerns the filers' return; it does not
disqualify a dependent taxpayer on their own separate return. The existing
filer-only business income deduction is preserved.
Two cases use actual dependent gain inputs and pin federal / Ohio / modified
AGI at 60,000 / 60,000 / 60,000 and, with simultaneous filer business and gain
deductions, 150,000 / 90,000 / 150,000. A Hypothesis differential test checks
single and joint tax units with one to three dependent children against twins
with the dependent business/gain inputs zeroed. Independent input-based sums
verify filer deduction caps and AGI accounting.
The new Python case covers generated-family and twin-comparison behavior
that YAML examples cannot exercise. It remains in the existing
rest-python-coregroup; no jobs or concurrent runner budget were added.On this local macOS/Python 3.13.9/Core 3.32.15 environment it passed five
examples in 274.106 seconds including startup, with 1,244,135,424 bytes
(1.16 GiB) peak RSS; the pytest call took 29.06 seconds. The original
f96ba752aeLinux CI Core group took 461.44 seconds and peaked at5,663,716 KiB (5.40 GiB); analogous five-example dependent properties took
8.41 and 8.73 seconds. The local standalone measurement is not an
incremental Linux group measurement; fresh-head CI resource results remain
pending.
Reconciled main with history-preserving merges
bb9b46f47eb8andec1637b5b413; the latest main verified during the repair is7b956eb4014e3a189075c79f9b1f0a8f1d3b02ab. Repair commit:e38e81a591aae7d5eddb85f586cf17d68afc3979.Fresh targeted results, one foreground file at a time:
oh_modified_agi.yamlon reconciled branchtime -lsubsequently exited 1 because the sandbox deniedsysctloh_business_income_deduction.yamltest_oh_filer_deduction_invariants.pyoh_modified_agi.yamlwith exact #9939 Ohio changes and helperoh_deductions.yamlin that temporary combinationmake formatbefore every implementation/merge commitThe full #9939 stack has unrelated MA/MN merge conflicts. The interaction
checks used its clean Ohio delta and exact
person_non_dep_addhelper,then reversed both patches before committing. No #9939 changes or partner
contract expectations are included in the repair. #9939 remains stacked
on #9894, which must land first per its existing dependency.
A fresh independent read-only review approved exact repair head
e38e81a591aae7d5eddb85f586cf17d68afc3979, with no unresolved P1/P2 within this assigned interaction. This code approval does not establish fresh CI or microsim readiness.Fresh-head CI is required before readiness; historical green checks at
f96ba752aedo not establish the repair head is green. This bounded buildran no whole folders, full suites, or microsims.
The existing Axiom queue is rulespec-us#1511. A local update draft supplies
the dependent accounting companion cases for the hub; no external issue was
posted by this repair. Source-ingestion and signed-encoder blockers remain.
Hub microsimulation impact (current head)
A real microsimulation on the default dataset, main at the merge base
7b956eb401against this PR's heade38e81a591, for 2025 and 2026. The runs went one at a time under the shared heavy-job lock. Sums are weighted.oh_agioh_income_taxstate_income_taxincome_taxhousehold_net_incomehousehold_benefitsComparison files are in
fixes/9876-impact/on the hub host.Microsim impact
The 2024 and 2026 main-versus-branch microsim comparisons remain hub-owned follow-up work. This bounded repair ran no microsims and did not verify the prior queue status; fresh results are still required.
Invariants
oh_business_income_deduction≤ min(max(min(business income, federal AGI), 0), cap).oh_taxable_income) whenever line 5 is positive.oh_modified_agi=oh_agi+ business income deduction + qualifying capital gain deduction. The business and qualifying gain deductions on the filers' return are added back once. A dependent's business-sale gain contributes neither a deduction nor an addback to that return.(checked on the microsim data when the runs finish)
Methodology note
What counts as business income. R.C. 5747.01(B) turns on facts the model cannot see (a trade or business, functional and transactional tests). The 2024 instructions (p. 11) say: "Generally, income recognized by a sole proprietorship or pass-through entity is business income. However, determining if income is business income is highly dependent upon the specific facts and circumstances."
business_income/sources): Schedule C (self_employment_income,sstb_self_employment_income), Schedule F (farm_operations_income), and partnership and S corporation income (partnership_s_corp_income).other_net_gain), and wages a 20%-or-more owner receives from a pass-through. The instructions treat these as business income only in a trade or business, or with ownership data the model lacks.This understates the deduction for landlords in the rental business and for owner-employees, and is right for passive investors.
Splitting a joint deduction between spouses. The joint $250,000 deduction is split between spouses in proportion to each spouse's positive business income. The statute deducts it from "the portion of an individual's federal adjusted gross income that is business income" but does not say how to divide a joint cap. This only matters for joint filing credit qualifying income.
Qualifying capital gain inputs. The deduction is the lesser of the qualifying gain and the deductible payroll, capped at the capital gains reported. It is computed for one entity; for sales in several entities, the variable must be set directly to the sum of the per-entity lesser amounts (5747.79(C)(2)).
Known gaps left for follow-ups. The lump-sum distribution credit tests MAGI rather than MAGI less exemptions, and
us_govt_interest_personandinterest_incomeare both excluded from joint filing credit qualifying income. Both predate this PR, and their formula code is unchanged. In combination with Leave dependents' own items out of DC, Delaware and Ohio subtractions #9939, removing the dependent qualifying-gain addback can change MAGI and therefore its downstream consumers.The contrib reform. The dependent-exemption reform's own phase-out still reads Ohio AGI; only its baseline-mirroring schedule now reads MAGI.
Bracket precision. The two TAXSIM-derived integration values (7,620.86 and 1,850.54) carry the model's existing 2021 first-bracket approximation, about $0.09 above the printed bracket base. This PR does not change that.
Ordering of the two deductions. (A)(34) gains that are business income must be deducted before (A)(28). The model counts capital gains as nonbusiness, so the two never overlap.
axiom: R.C. 5747.02(A)(4) encoded-correct (us-oh/statutes/5747/02.yaml#individual_taxable_business_income_tax; companion "excess exemptions reduce individual taxable business income before three percent tax"); R.C. 5747.01(A)(28), (A)(34), (II), 5747.79, 5747.022, 5747.05(E) TheAxiomFoundation/rulespec-us#1511 queued
🤖 Generated with Claude Code