Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
1f0cd1b
Make head_is_dependent_elsewhere consumers independent of the head label
MaxGhenis Oct 8, 2026
3ecc675
Keep tax units without a filer eligible where only claimed filers are…
MaxGhenis Oct 9, 2026
8da8312
Address review: Hawaii worksheet earnings, NM same-filer age, childle…
MaxGhenis Oct 9, 2026
e838623
Allow a cent of rounding in the Hawaii self-employed joint pair
MaxGhenis Oct 9, 2026
41fb4a5
Address review round 2: worksheet earnings, minors' own status, input…
MaxGhenis Oct 9, 2026
527d47f
Merge remote-tracking branch 'upstream/main' into head-dependent-else…
MaxGhenis Oct 9, 2026
436805e
Merge the Hawaii deductions references after syncing main
MaxGhenis Oct 9, 2026
23c6229
Apply the federal rules for a filer who can be claimed as a dependent
MaxGhenis Oct 9, 2026
4597c55
Address the federal claimable-filer review
MaxGhenis Oct 10, 2026
e4b8f36
Separate dependency facts and fix Hawaii qualified-person counts
MaxGhenis Oct 10, 2026
c7f969f
Clarify claimability outside the current tax unit
MaxGhenis Oct 10, 2026
4c8ed81
Merge commit 'c7f969f872' into claimable-filer-federal
MaxGhenis Oct 10, 2026
3f88702
Read the split dependency inputs from #10024
MaxGhenis Oct 10, 2026
b2771d2
Follow the corrected exemption count in three Hawaii credits
MaxGhenis Oct 10, 2026
163fcd4
Address the second federal claimable-filer review
MaxGhenis Oct 10, 2026
3d0864f
Address the third federal claimable-filer review
MaxGhenis Oct 10, 2026
35a2cbc
Give the spouse without an SSN a card type in the recovery rebate test
MaxGhenis Oct 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/claimable-filer-federal.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Apply the federal rules for a filer who can be claimed as a dependent on another return: no child tax credit, credit for other dependents or under-13 care qualifying child (or that child's care expenses) on such a return (IRC 24, 21, 152(b)(1)), no personal exemption for that filer (IRC 151(d)(2)) in the exemption count Rhode Island, Delaware, Ohio, Wisconsin, Oregon, Hawaii and New Mexico read, no recovery rebate for that filer, including under the Armed Forces exception, no tuition and fees deduction (IRC 222(c)(3)), and no education credits or student loan interest deduction on a return with a claimed filer (IRC 25A(g)(3), 221(c)).
1 change: 1 addition & 0 deletions changelog.d/head-dependent-elsewhere-swap.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The federal standard deduction and the New York, Michigan, Oregon, Virginia, Missouri, New Mexico, Maine and Hawaii rules for a filer claimed as a dependent elsewhere no longer depend on which spouse is labelled head; each follows its jurisdiction's rule for a joint return where one spouse can be claimed. New York's $3,100 dependent standard deduction now applies only to single filers; Hawaii now limits the standard deduction of a filer who can be claimed as a dependent; the federal EITC without a qualifying child now requires that no filer can be claimed as a dependent; and New Mexico's medical care credit requires a filer who is both 65 or older and not a dependent when a filer is a dependent elsewhere. Separate actual dependency claims from claimability and the nonrequired claimant filing exception, preserving dependent deduction limits while restoring EITC and lawful own-dependent counts. Exclude externally claimable children from Hawaii food/excise ordinary exemptions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
description: Hawaii allows for itemized deductions for dependent filers with deductions above this amount.
description: Hawaii limits the standard deduction of a filer who can be claimed as a dependent to the greater of this amount or earned income, and lets such a filer itemize deductions above that limit.
values:
2018-01-01: 500
metadata:
Expand All @@ -16,6 +16,6 @@ metadata:
- title: 2018 Hawaii Resident Income Tax Instructions Itemized Deductions Worksheet
href: https://files.hawaii.gov/tax/forms/2018/n11ins.pdf#page=38
- title: Hawaii Income Tax Law, Chapter 235, Section 235-2.4, (a)(3)
href: https://files.hawaii.gov/tax/legal/hrs/hrs_235.pdf#page=10
href: https://files.hawaii.gov/tax/legal/hrs/hrs_235.pdf#page=11
- title: 2025 Hawaii N-11 Instructions Itemized Deductions
href: https://files.hawaii.gov/tax/forms/current/n11ins.pdf#page=32
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
description: Michigan provides this exemption amount for a taxpayer who can be claimed as a dependent on someone else’s return.
SINGLE:
2021-01-01: 1_500
JOINT:
2021-01-01: 3_000
HEAD_OF_HOUSEHOLD:
2021-01-01: 1_500
SURVIVING_SPOUSE:
2021-01-01: 1_500
SEPARATE:
description: Michigan provides this exemption amount to each individual who can be claimed as a dependent on another taxpayer's return, in place of that individual's personal exemption.
values:
2021-01-01: 1_500
metadata:
propagate_metadata_to_children: true
unit: currency-USD
period: year
breakdown:
- filing_status
label: Michigan dependent on other return exemption amount
label: Michigan exemption amount per individual claimable as a dependent elsewhere
reference:
- title: Michigan Legal Code Section 206.30 - (4)
href: https://www.legislature.mi.gov/Laws/MCL?objectName=mcl-206-30
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
description: New York standard deduction for filers who can be claimed as a dependent elsewhere.
description: New York provides this standard deduction to single filers who can be claimed as a dependent on another taxpayer's federal return.
values:
2020-01-01: 3_100
metadata:
unit: currency-USD
period: year
label: New York standard deduction for dependent filers
label: New York standard deduction for single dependent filers
reference:
- title: 2021 NY Form IT-201 Instructions Line 34
href: https://www.tax.ny.gov/pdf/2021/inc/it201i_2021.pdf#page=19
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class cdcc_relevant_expenses(Variable):
)

def formula(tax_unit, period, parameters):
expenses = tax_unit("tax_unit_childcare_expenses", period)
expenses = tax_unit("cdcc_qualifying_childcare_expenses", period)
cdcc_limit = tax_unit("cdcc_limit", period)
eligible_capped_expenses = min_(expenses, cdcc_limit)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ class watca_alternative_tax_eligible(Variable):
label = "Eligible for WATCA alternative maximum tax"
definition_period = YEAR
reference = WATCA_REFERENCES
documentation = "Section 1A(b): MAGI < 175% of exemption, and not claimed as dependent on another return."
documentation = (
"Section 1A(b): MAGI < 175% of exemption. Retains the reform's "
"modeled actual-dependent-claim restriction, which is not stated "
"in the cited bill's section 1A(b)(2)."
)

def formula(tax_unit, period, parameters):
magi = tax_unit("watca_alternative_tax_magi", period)
Expand All @@ -61,9 +65,10 @@ def formula(tax_unit, period, parameters):
exemption_amount = p.amount[filing_status]
income_limit = exemption_amount * p.income_limit_multiple
income_eligible = magi < income_limit
head_dependent = tax_unit("head_is_dependent_elsewhere", period)
spouse_dependent = tax_unit("spouse_is_dependent_elsewhere", period)
not_dependent = ~head_dependent & ~spouse_dependent
person = tax_unit.members
claimed = person("claimed_as_dependent_on_another_return", period)
filer = person("is_tax_unit_head_or_spouse", period)
not_dependent = ~tax_unit.any(claimed & filer)
return income_eligible & not_dependent

class watca_alternative_max_tax(Variable):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,15 @@ def formula(tax_unit, period, parameters):
is_aoc_eligible = person(
"is_eligible_for_american_opportunity_credit", period
)
# This reform leaves the dependency rules of IRC 25A(g)(3) and
# 25A(f)(1)(A)(iii) in place.
barred_by_dependency = person(
"is_barred_from_education_credits_by_dependency", period
)
eligible_expenses = tax_unit.sum(
person("qualified_tuition_expenses", period) * ~is_aoc_eligible
person("qualified_tuition_expenses", period)
* ~is_aoc_eligible
* ~barred_by_dependency
)
capped_expenses = min_(llc.expense_limit, eligible_expenses)
maximum_amount = llc.rate * capped_expenses
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ def formula(person, period, parameters):
# if they are not claimed as a dependent elsewhere
head_or_spouse = person("is_tax_unit_head_or_spouse", period)
dependent_on_another_return = person(
"claimed_as_dependent_on_another_return", period
"claimable_as_dependent_on_another_return", period
)
# The personal exemption is also provided to dependents
return ~dependent_on_another_return & head_or_spouse
Expand Down
11 changes: 6 additions & 5 deletions policyengine_us/reforms/states/ct/hb5114/ct_hb5114.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@ def formula(tax_unit, period, parameters):
rent = add(tax_unit, period, ["rent"])
pays_rent = rent > 0

# Must not be claimed as a dependent on another return
head_is_dependent_elsewhere = tax_unit(
"head_is_dependent_elsewhere", period
)
not_dependent = ~head_is_dependent_elsewhere
# Preserve the modeled actual-claim gate; the cited bill does
# not state this restriction.
person = tax_unit.members
claimed = person("claimed_as_dependent_on_another_return", period)
head = person("is_tax_unit_head", period)
not_dependent = ~tax_unit.any(claimed & head)

# Income eligibility
filing_status = tax_unit("filing_status", period)
Expand Down
7 changes: 1 addition & 6 deletions policyengine_us/reforms/states/ga/ctc/ga_ctc_reform.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,7 @@ def formula(tax_unit, period, parameters):
unused_credit = max_(potential - non_refundable, 0)
# Cap the refund at amount per eligible child (same child count as
# ga_ctc_potential: qualifying children under the age threshold).
baseline = parameters(period).gov.states.ga.tax.income.credits.ctc
person = tax_unit.members
age = person("age", period)
ctc_eligible_child = person("ctc_qualifying_child", period)
ga_child_age_eligible = age < baseline.age_threshold
eligible_children = tax_unit.sum(ctc_eligible_child & ga_child_age_eligible)
eligible_children = add(tax_unit, period, ["ga_ctc_eligible_child"])
refund_limit = p.refundable.amount * eligible_children
refundable_credit = min_(unused_credit, refund_limit)
# Only pay the refund in periods where the reform is in effect. The
Expand Down
8 changes: 2 additions & 6 deletions policyengine_us/reforms/states/ga/sb520/ga_sb520_reform.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,8 @@ def formula(tax_unit, period, parameters):

sb520_active = p_sb520.in_effect

person = tax_unit.members
age = person("age", period)
ctc_eligible_child = person("ctc_qualifying_child", period)
# SB 520 preserves baseline GA CTC age threshold (under 6)
ga_child_age_eligible = age < p.age_threshold
eligible_children = tax_unit.sum(ctc_eligible_child & ga_child_age_eligible)
# SB 520 preserves the baseline GA CTC child test (under 6)
eligible_children = add(tax_unit, period, ["ga_ctc_eligible_child"])

sb520_amount = p_sb520.credits.ctc.amount
baseline_amount = p.amount
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ def formula(tax_unit, period, parameters):

person = tax_unit.members
age = person("age", period)
is_dependent = person("is_tax_unit_dependent", period)
# A return on which the filer (or, if joint, either spouse) can be
# claimed as a dependent has no dependents (IRC 152(b)(1)).
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)

# Apply age limit if in effect
if p.age_limit.in_effect:
Expand Down Expand Up @@ -49,7 +53,11 @@ class hi_older_dependents_count(Variable):

def formula(tax_unit, period, parameters):
person = tax_unit.members
is_dependent = person("is_tax_unit_dependent", period)
# A return on which the filer (or, if joint, either spouse) can be
# claimed as a dependent has no dependents (IRC 152(b)(1)).
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)
total_dependents = tax_unit.sum(is_dependent)
eligible_dependent_exemptions = tax_unit(
"hi_eligible_dependents_count", period
Expand All @@ -66,14 +74,16 @@ class hi_regular_exemptions(Variable):
defined_for = StateCode.HI

def formula(tax_unit, period, parameters):
exemptions_count = tax_unit("exemptions_count", period)
p = parameters(period).gov.states.hi.tax.income.exemptions

# Personal exemptions exclude the dependent portion. Over-age
# dependents fall back to the personal count.
dependents = tax_unit("tax_unit_dependents", period)
# Personal exemptions exclude the dependent portion: the filers'
# own exemptions (none for a filer who can be claimed as a
# dependent). Over-age dependents fall back to the personal count.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
older_dependents = tax_unit("hi_older_dependents_count", period)
personal_count = exemptions_count - dependents + older_dependents
personal_count = own_exemptions + older_dependents

# Aged heads and spouses get an extra base exemption (preserved
# exactly as the baseline computes it).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,11 @@ def formula(tax_unit, period, parameters):

person = tax_unit.members
age = person("age", period)
is_dependent = person("is_tax_unit_dependent", period)
# A return on which the filer (or, if joint, either spouse) can be
# claimed as a dependent has no dependents (IRC 152(b)(1)).
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)

# Apply age limit if in effect
if p.age_limit.in_effect:
Expand Down Expand Up @@ -49,7 +53,11 @@ class wi_older_dependents_count(Variable):

def formula(tax_unit, period, parameters):
person = tax_unit.members
is_dependent = person("is_tax_unit_dependent", period)
# A return on which the filer (or, if joint, either spouse) can be
# claimed as a dependent has no dependents (IRC 152(b)(1)).
is_dependent = person("is_tax_unit_dependent", period) & ~person.tax_unit(
"head_or_spouse_is_dependent_elsewhere_without_filing_exception", period
)
total_dependents = tax_unit.sum(is_dependent)
eligible_dependent_exemptions = tax_unit(
"wi_eligible_dependents_count", period
Expand All @@ -68,12 +76,13 @@ def formula(tax_unit, period, parameters):
p_base = parameters(period).gov.states.wi.tax.income

# Personal exemptions exclude the dependent portion.
total_exemptions_count = tax_unit("exemptions_count", period)
dependents = tax_unit("tax_unit_dependents", period)
older_dependents = tax_unit("wi_older_dependents_count", period)
personal_exemptions_count = (
total_exemptions_count - dependents + older_dependents
# These are the filers' own exemptions (none for a filer who can
# be claimed as a dependent) plus over-age dependents.
own_exemptions = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
older_dependents = tax_unit("wi_older_dependents_count", period)
personal_exemptions_count = own_exemptions + older_dependents
personal_exemption_amount = (
personal_exemptions_count * p_base.exemption.base
)
Expand Down
10 changes: 9 additions & 1 deletion policyengine_us/reforms/treasury/repeal_dependent_exemptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,15 @@ class exemptions_count(Variable):
def formula(tax_unit, period, parameters):
total_unit_size = tax_unit("tax_unit_size", period)
dependents = tax_unit("tax_unit_dependents", period)
return total_unit_size - dependents
# Only the filers' own exemptions remain; a filer who can be
# claimed as a dependent has none (IRC 151(d)(2)).
dependent_filer = tax_unit("head_or_spouse_is_dependent_elsewhere", period)
independent_filers = tax_unit(
"head_spouse_count_not_dependent_elsewhere", period
)
return where(
dependent_filer, independent_filers, total_unit_size - dependents
)

class reform(Reform):
def apply(self):
Expand Down
Loading