Skip to content

Keep claimable-filer rules in the repeal of state dependent exemptions - #10134

Draft
MaxGhenis wants to merge 1 commit into
claimable-filer-federalfrom
repeal-state-dep-exemptions-claimable-filer
Draft

MaxGhenis wants to merge 1 commit into
claimable-filer-federalfrom
repeal-state-dep-exemptions-claimable-filer

Conversation

@MaxGhenis

Copy link
Copy Markdown
Contributor

WIP draft. This is stacked on #10087 and depends on the rest of the claimable-filer stack (see "Depends on"). I will rebase it onto main and mark it ready after those PRs merge.

Summary

The contributed reform repeal_state_dependent_exemptions overrides state formulas so each keeps the state's personal exemptions and drops dependent exemptions. Several overrides counted personal exemptions with head_spouse_count or is_tax_unit_head_or_spouse, which ignore whether a filer can be claimed as a dependent on another return. Once #10024 and the claimable-filer PRs land, the baseline denies that filer a personal exemption in most of these states (IRC 151(d)(2) and the state rules that follow it). Under the reform, that filer got an exemption the baseline does not allow.

After this PR and the stack, each override matches its baseline's rule for a claimable filer:

State Override Baseline for a claimable head or spouse (after the stack) Reform
DE de_personal_credit no credit (de_personal_credit_potential reads exemptions_count) this PR: head_spouse_count_not_dependent_elsewhere
HI hi_regular_exemptions no exemption and no aged extra this PR: head_spouse_count_not_dependent_elsewhere; the aged extra skips a claimable filer
NE ne_exemptions no credit (exemptions_count, in claimable-filer-ma-mi-mn-ms-mo-mt-ne) this PR: head_spouse_count_not_dependent_elsewhere
RI ri_exemptions no exemption (exemptions_count) this PR: head_spouse_count_not_dependent_elsewhere
VA va_personal_exemption_person no exemption (filer & ~claimable) this PR: head_or_spouse & ~claimable
VT vt_personal_exemptions no exemption (reads head_is_dependent_elsewhere and spouse_is_dependent_elsewhere) this PR: label-free head_spouse_count_not_dependent_elsewhere
WI wi_base_exemption no exemption (exemptions_count) this PR: head_spouse_count_not_dependent_elsewhere
WV wv_personal_exemption no $2,000 exemption; $500 once per return when the count is zero (#10044) this PR: the same on head_spouse_count_not_dependent_elsewhere
MI mi_personal_exemptions, mi_exemptions mi_exemptions computes such a return outside mi_personal_exemptions: $1,500 for the claimable filer, and that return's dependents when the would-be claimant meets the filing exception this PR: also overrides mi_exemptions, without the dependents
CA ca_exemptions no personal, blind or senior credit #10053
MD md_total_personal_exemptions no exemption #10045
KS ks_exemptions before 2024: zero exemptions if a filer is claimed. From 2024: the filing-status amount stays #10045
OK ok_count_exemptions no regular exemption; the 65+ and blind exemptions stay #10043
OH oh_personal_exemptions_eligible_person not eligible #10087 (reads claimable_as_dependent_on_another_return)
GA, IN, IA, MA ga_exemptions, in_base_exemptions, ia_exemption_credit, ma_income_tax_exemption_threshold the filer keeps the exemption unchanged
KY ky_family_size_tax_credit_threshold family size is tax_unit_size unchanged
OK ok_child_care_child_tax_credit not an exemption unchanged

Invariants

For every return and every overridden output, under the reform:

  1. The output does not depend on which spouse is labelled head.
  2. Marking another filer as claimable never raises an exemption.
  3. The reform never exceeds the baseline. For Delaware the comparison is with de_personal_credit_potential: the reform overrides the applied credit with its amount before the tax-liability limit, and the ordered cap applies afterwards.
  4. On a return without dependents, the reform equals the baseline.
  5. On a return with a claimable filer whose would-be claimant does not meet the filing exception, the baseline has no dependents (IRC 152(b)(1)), so the reform equals the baseline. Two outputs are exempt: Kentucky's family size, which still counts that return's dependents, and mi_personal_exemptions, which Michigan's baseline does not read on such a return.

Tests

  • tests/policy/contrib/state_dependent_exemptions/repeal_state_dependent_exemptions_claimable_filer.yaml: 47 cases.
    • For each of DE, HI, NE, RI, VA, VT, WI and WV: a single claimable filer, a joint return with a child and one claimable spouse under both head/spouse labellings, and a control where neither spouse can be claimed.
    • HI aged couples; MI and OH cases; an OK single filer; WV with both spouses claimable.
    • RI and MI cases where the filing exception restores the child in the baseline and the reform still drops it.
    • IN and IA pins, where a claimable filer keeps the exemption.
    • Expected values are hand-computed from 2025 parameters and noted on each case.
  • tests/core/test_repeal_state_dependent_exemptions_claimable_invariants.py: properties 1-5 over Hypothesis-drawn and seeded couples and single filers in the 19 states, in 2023 and 2026. Each filer may be claimable, claimed or not, with or without the filing exception. Each property runs one baseline and one reform simulation over a vectorized batch, comparing the two systems. A YAML case runs one system, so it cannot express these comparisons.

Local results (macOS, on a local merge of this branch with every stack branch): pending. I will add the pass counts, elapsed time and peak memory here.

Plan

  • Align each override with the stack's baseline, with YAML and property tests.
  • Local test results and measurements (running).
  • After the stack merges: rebase onto main, re-check every override against the merged baselines, and rerun the tests.
  • Independent review, then mark ready.

Not in scope (noted)

  • Delaware's combined-separate path (Filing Status 4) reads de_personal_credit_indv, which the reform does not override. On that path, own credits already follow the claimable-filer rule, but dependent credits survive the repeal. de_dependent_credit_reform records the same limitation.

Depends on

#10024, #10087 (base), #10089 (HI), #10091 (VA), #10044 (RI, VT, WV, WI), #10043 (OK), #10045 (KS, MD), #10053 (CA), #10049 (IN), #10050 (GA) and the branch claimable-filer-ma-mi-mn-ms-mo-mt-ne (NE, MA, MI; no PR yet). On #10087 alone, two things fail: the Oklahoma YAML case, which needs #10043's override copy, and the property test's comparisons with the baseline, which need the baselines in the PRs above.

axiom: n/a: contributed reform (hypothetical repeal of state dependent exemptions), not a statutory provision

🤖 Generated with Claude Code

The repeal reform's personal-exemption overrides counted every head and
spouse, so a filer whom another taxpayer can claim kept a personal
exemption under the reform that the baseline denies once #10024 and the
claimable-filer PRs apply IRC 151(d)(2). Delaware, Hawaii, Nebraska,
Rhode Island, West Virginia and Wisconsin now count
head_spouse_count_not_dependent_elsewhere (West Virginia keeps its $500
exemption for a return on which no filer has one), Virginia's per-person
exemption and Hawaii's aged exemption skip a claimable filer, and
Vermont's count no longer depends on which spouse is labelled head.

Michigan's baseline computes a claimable filer's return outside
mi_personal_exemptions and, when the would-be claimant meets the filing
exception, allows that return's dependents. The reform now overrides
mi_exemptions as well, so those dependent exemptions are repealed too.

California, Kansas, Maryland, Ohio and Oklahoma follow their baselines
in the claimable-filer PRs that changed them. Georgia, Indiana, Iowa,
Kansas from 2024, Kentucky and Massachusetts let a claimable filer keep
the exemption, so their overrides are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
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