Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Add Working Parents Tax Relief Act of 2026 EITC enhancement.
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The Working Parents Tax Relief Act increases the EITC credit percentage by this amount for filers with one qualifying child who has not attained age 4.

values:
2026-01-01: 0.4224

metadata:
label: Working Parents Tax Relief Act credit percentage increase (1 child)
unit: /1
period: year
reference:
- title: IRC §32(b) - Percentages and amounts (baseline structure being amended)
href: https://www.law.cornell.edu/uscode/text/26/32#b
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The Working Parents Tax Relief Act increases the EITC credit percentage by this amount per qualifying young child for filers with two or more qualifying children.

values:
2026-01-01: 0.3007

metadata:
label: Working Parents Tax Relief Act credit percentage increase per young child (2+ children)
unit: /1
period: year
reference:
- title: IRC §32(b) - Percentages and amounts (baseline structure being amended)
href: https://www.law.cornell.edu/uscode/text/26/32#b
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The Working Parents Tax Relief Act uses this indicator to determine whether the EITC enhancement for parents of young children is in effect.

values:
0000-01-01: false

metadata:
label: Working Parents Tax Relief Act in effect
unit: bool
period: year
reference:
- title: IRC §32(b) - Percentages and amounts (baseline structure being amended)
href: https://www.law.cornell.edu/uscode/text/26/32#b
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The Working Parents Tax Relief Act limits the EITC percentage bonus to this many qualifying young children.

values:
2026-01-01: 3

metadata:
label: Working Parents Tax Relief Act maximum young children for bonus
unit: /1
period: year
reference:
- title: IRC §32(b) - Percentages and amounts (baseline structure being amended)
href: https://www.law.cornell.edu/uscode/text/26/32#b
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The Working Parents Tax Relief Act increases the EITC phaseout percentage by this amount per qualifying young child.

values:
2026-01-01: 0.05

metadata:
label: Working Parents Tax Relief Act phaseout percentage increase per young child
unit: /1
period: year
reference:
- title: IRC §32(b) - Percentages and amounts (baseline structure being amended)
href: https://www.law.cornell.edu/uscode/text/26/32#b
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
description: The Working Parents Tax Relief Act sets this age as the threshold below which qualifying children receive the EITC enhancement.

values:
2026-01-01: 4

metadata:
label: Working Parents Tax Relief Act young child age threshold
unit: year
period: year
reference:
- title: IRC §32(b) - Percentages and amounts (baseline structure being amended)
href: https://www.law.cornell.edu/uscode/text/26/32#b
4 changes: 4 additions & 0 deletions policyengine_us/reforms/congress/mcdonald_rivet/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from .working_parents_tax_relief_act import (
create_working_parents_tax_relief_act_reform,
working_parents_tax_relief_act,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from .working_parents_tax_relief_act import (
create_working_parents_tax_relief_act_reform,
working_parents_tax_relief_act,
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
from policyengine_us.model_api import *
from policyengine_core.periods import period as period_


def create_working_parents_tax_relief_act() -> Reform:

class eitc_young_child_count(Variable):
value_type = int
entity = TaxUnit
label = "EITC-qualifying young children"
unit = "/1"
definition_period = YEAR

def formula(tax_unit, period, parameters):
person = tax_unit.members
is_child = person("is_qualifying_child_dependent", period)
meets_eitc_id = person("meets_eitc_identification_requirements", period)
is_eitc_eligible_child = is_child & meets_eitc_id
age = person("age", period)
p = parameters(
period
).gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act
is_young = age < p.young_child_age_threshold
return tax_unit.sum(is_eitc_eligible_child & is_young)

class eitc_phase_in_rate(Variable):
value_type = float
entity = TaxUnit
label = "EITC phase-in rate"
unit = "/1"
definition_period = YEAR

def formula(tax_unit, period, parameters):
child_count = tax_unit("eitc_child_count", period)
eitc = parameters(period).gov.irs.credits.eitc
baseline_rate = eitc.phase_in_rate.calc(child_count)

p = parameters(
period
).gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act
if not p.in_effect:
return baseline_rate

young_child_count = min_(
tax_unit("eitc_young_child_count", period), p.max_young_children
)

bonus = where(
child_count == 1,
where(
young_child_count > 0,
p.credit_percentage_increase_one_child,
0,
),
young_child_count * p.credit_percentage_increase_per_young_child,
)

return baseline_rate + bonus

class eitc_phase_out_rate(Variable):
value_type = float
entity = TaxUnit
label = "EITC phase-out rate"
unit = "/1"
definition_period = YEAR

def formula(tax_unit, period, parameters):
eitc = parameters(period).gov.irs.credits.eitc
num_children = tax_unit("eitc_child_count", period)
baseline_rate = eitc.phase_out.rate.calc(num_children)

p = parameters(
period
).gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act
if not p.in_effect:
return baseline_rate

young_child_count = min_(
tax_unit("eitc_young_child_count", period), p.max_young_children
)

bonus = where(
num_children >= 1,
young_child_count * p.phaseout_percentage_increase_per_young_child,
0,
)

return baseline_rate + bonus

class eitc_maximum(Variable):
value_type = float
entity = TaxUnit
label = "Maximum EITC"
unit = USD
definition_period = YEAR

def formula(tax_unit, period, parameters):
child_count = tax_unit("eitc_child_count", period)
eitc = parameters(period).gov.irs.credits.eitc
baseline_max = eitc.max.calc(child_count)
baseline_rate = eitc.phase_in_rate.calc(child_count)

p = parameters(
period
).gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act
if not p.in_effect:
return baseline_max

# Per IRC §32(b): max = credit_percentage × earned_income_amount
# Scale proportionally: new_max = baseline_max × (new_rate / baseline_rate)
new_rate = tax_unit("eitc_phase_in_rate", period)
ratio = where(baseline_rate > 0, new_rate / baseline_rate, 1)
return baseline_max * ratio

class reform(Reform):
def apply(self):
self.add_variable(eitc_young_child_count)
self.update_variable(eitc_phase_in_rate)
self.update_variable(eitc_phase_out_rate)
self.update_variable(eitc_maximum)

return reform


def create_working_parents_tax_relief_act_reform(
parameters, period, bypass: bool = False
):
if bypass:
return create_working_parents_tax_relief_act()

p = parameters.gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act
reform_active = False
current_period = period_(period)

for i in range(5):
if p(current_period).in_effect:
reform_active = True
break
current_period = current_period.offset(1, "year")

if reform_active:
return create_working_parents_tax_relief_act()
else:
return None


working_parents_tax_relief_act = create_working_parents_tax_relief_act_reform(
None, None, bypass=True
)
7 changes: 7 additions & 0 deletions policyengine_us/reforms/reforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,9 @@
from .congress.watca import (
create_watca_reform,
)
from .congress.mcdonald_rivet import (
create_working_parents_tax_relief_act_reform,
)
from .states.wa.sb6346.sb6346 import (
create_wa_sb6346_reform,
)
Expand Down Expand Up @@ -438,6 +441,9 @@ def create_structural_reforms_from_parameters(parameters, period):
)
nj_stay_nj = create_nj_stay_nj_reform(parameters, period)
nj_anchor = create_nj_anchor_reform(parameters, period)
working_parents_tax_relief_act = create_working_parents_tax_relief_act_reform(
parameters, period
)

reforms = [
afa_reform,
Expand Down Expand Up @@ -544,6 +550,7 @@ def create_structural_reforms_from_parameters(parameters, period):
ut_fully_refundable_eitc,
nj_stay_nj,
nj_anchor,
working_parents_tax_relief_act,
]
reforms = tuple(filter(lambda x: x is not None, reforms))

Expand Down
Loading
Loading