From d818bb8a3b91509b75470ff6866613aa663ff7cf Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 1 Apr 2026 17:46:12 -0400 Subject: [PATCH 01/10] Add changelog for Working Parents Tax Relief Act of 2026 Co-Authored-By: Claude Opus 4.5 --- changelog.d/congress-working-parents-tax-relief-act.added.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/congress-working-parents-tax-relief-act.added.md diff --git a/changelog.d/congress-working-parents-tax-relief-act.added.md b/changelog.d/congress-working-parents-tax-relief-act.added.md new file mode 100644 index 00000000000..eb14193de45 --- /dev/null +++ b/changelog.d/congress-working-parents-tax-relief-act.added.md @@ -0,0 +1 @@ +Add Working Parents Tax Relief Act of 2026 EITC enhancement. From 2bd6d37ee8959d0b4ffb995bbd557d9e5afdaf05 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 1 Apr 2026 18:01:08 -0400 Subject: [PATCH 02/10] Add Working Parents Tax Relief Act of 2026 EITC enhancement This reform implements the Working Parents Tax Relief Act of 2026 (H.R. by Rep. McDonald Rivet), which enhances the EITC for parents of young children (under age 4). Key provisions: - Credit percentage increase: +42.24pp for 1 child under 4, +30.07pp per young child (max 3) for 2+ children - Phaseout percentage increase: +5pp per young child (max 3) - Effective for tax years beginning after Dec 31, 2025 Parameters created under gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/: - in_effect (toggle) - young_child_age_threshold (4 years) - credit_percentage_increase_one_child (42.24%) - credit_percentage_increase_per_young_child (30.07%) - phaseout_percentage_increase_per_young_child (5%) - max_young_children (3) Variables defined: - eitc_young_child_count (NEW) - eitc_phase_in_rate (OVERRIDE) - eitc_phase_out_rate (OVERRIDE) Includes 28 comprehensive test cases covering federal EITC, state EITC impacts, and various family scenarios. Closes #7913 Co-Authored-By: Claude Opus 4.5 --- .../credit_percentage_increase_one_child.yaml | 7 + ...t_percentage_increase_per_young_child.yaml | 7 + .../in_effect.yaml | 6 + .../max_young_children.yaml | 7 + ...t_percentage_increase_per_young_child.yaml | 7 + .../young_child_age_threshold.yaml | 7 + .../congress/mcdonald_rivet/__init__.py | 4 + .../__init__.py | 4 + .../working_parents_tax_relief_act.py | 128 +++ policyengine_us/reforms/reforms.py | 7 + .../working_parents_tax_relief_act.yaml | 816 ++++++++++++++++++ 11 files changed, 1000 insertions(+) create mode 100644 policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml create mode 100644 policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml create mode 100644 policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml create mode 100644 policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml create mode 100644 policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml create mode 100644 policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml create mode 100644 policyengine_us/reforms/congress/mcdonald_rivet/__init__.py create mode 100644 policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/__init__.py create mode 100644 policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py create mode 100644 policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml new file mode 100644 index 00000000000..a7db010f614 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml @@ -0,0 +1,7 @@ +description: Credit percentage point increase for eligible individual with 1 qualifying child who has not attained age 4. +values: + 2026-01-01: 0.4224 +metadata: + label: Credit percentage increase (1 child under 4) + unit: /1 + period: year diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml new file mode 100644 index 00000000000..edf3adb5ced --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml @@ -0,0 +1,7 @@ +description: Credit percentage point increase per young child (max 3) for eligible individual with 2 or more qualifying children. +values: + 2026-01-01: 0.3007 +metadata: + label: Credit percentage increase per young child (2+ children) + unit: /1 + period: year diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml new file mode 100644 index 00000000000..083e1c62d84 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml @@ -0,0 +1,6 @@ +description: Whether the Working Parents Tax Relief Act is in effect. +values: + 0000-01-01: false +metadata: + label: Working Parents Tax Relief Act in effect + unit: bool diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml new file mode 100644 index 00000000000..0274ce73b80 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml @@ -0,0 +1,7 @@ +description: Maximum number of young children that count toward EITC percentage increases. +values: + 2026-01-01: 3 +metadata: + label: Maximum young children for bonus + unit: child + period: year diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml new file mode 100644 index 00000000000..77ada9b7ab1 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml @@ -0,0 +1,7 @@ +description: Phaseout percentage point increase per young child (max 3) under the Working Parents Tax Relief Act. +values: + 2026-01-01: 0.05 +metadata: + label: Phaseout percentage increase per young child + unit: /1 + period: year diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml new file mode 100644 index 00000000000..377b73b56e1 --- /dev/null +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml @@ -0,0 +1,7 @@ +description: Age threshold for young children under the Working Parents Tax Relief Act. Children must not have attained this age. +values: + 2026-01-01: 4 +metadata: + label: Young child age threshold + unit: year + period: year diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/__init__.py b/policyengine_us/reforms/congress/mcdonald_rivet/__init__.py new file mode 100644 index 00000000000..921efdd7dde --- /dev/null +++ b/policyengine_us/reforms/congress/mcdonald_rivet/__init__.py @@ -0,0 +1,4 @@ +from .working_parents_tax_relief_act import ( + create_working_parents_tax_relief_act_reform, + working_parents_tax_relief_act, +) diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/__init__.py b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/__init__.py new file mode 100644 index 00000000000..921efdd7dde --- /dev/null +++ b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/__init__.py @@ -0,0 +1,4 @@ +from .working_parents_tax_relief_act import ( + create_working_parents_tax_relief_act_reform, + working_parents_tax_relief_act, +) diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py new file mode 100644 index 00000000000..7bb0248fbfe --- /dev/null +++ b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py @@ -0,0 +1,128 @@ +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 = USD + documentation = ( + "Number of EITC-qualifying children who have not attained age 4." + ) + 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" + documentation = "Rate at which the EITC phases in with income, including Working Parents Tax Relief Act bonus." + 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" + documentation = "Rate at which the EITC phases out with income, including Working Parents Tax Relief Act bonus." + 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 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) + + 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 +) diff --git a/policyengine_us/reforms/reforms.py b/policyengine_us/reforms/reforms.py index 56c89c64e08..8e56dc97061 100644 --- a/policyengine_us/reforms/reforms.py +++ b/policyengine_us/reforms/reforms.py @@ -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, ) @@ -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, @@ -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)) diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml new file mode 100644 index 00000000000..82d214cfb1a --- /dev/null +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -0,0 +1,816 @@ +- name: Case 1 - Single filer, 1 child age 2 (under 4), bonus applies + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + output: + # 1 child baseline: 34%, bonus: 42.24% = 76.24% + eitc_phase_in_rate: 0.7624 + # 1 child baseline: 15.98%, bonus: 5% = 20.98% + eitc_phase_out_rate: 0.2098 + +- name: Case 2 - Single filer, 1 child age 5 (over 4), no bonus + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + child: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + output: + # 1 child baseline: 34%, no bonus + eitc_phase_in_rate: 0.34 + # 1 child baseline: 15.98%, no bonus + eitc_phase_out_rate: 0.1598 + +- name: Case 3 - Joint filer, 2 children (ages 2 and 3), both young + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent1: + age: 30 + is_tax_unit_dependent: false + parent2: + age: 28 + is_tax_unit_dependent: false + child1: + age: 2 + is_tax_unit_dependent: true + child2: + age: 3 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2] + filing_status: JOINT + households: + household: + members: [parent1, parent2, child1, child2] + output: + # 2 children baseline: 40%, bonus: 2 * 30.07% = 60.14% = 100.14% + eitc_phase_in_rate: 1.0014 + # 2 children baseline: 21.06%, bonus: 2 * 5% = 10% = 31.06% + eitc_phase_out_rate: 0.3106 + +- name: Case 4 - Joint filer, 3 children (ages 1, 2, 6), 2 young + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent1: + age: 35 + is_tax_unit_dependent: false + parent2: + age: 33 + is_tax_unit_dependent: false + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + child3: + age: 6 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2, child3] + filing_status: JOINT + households: + household: + members: [parent1, parent2, child1, child2, child3] + output: + # 3+ children baseline: 45%, bonus: 2 * 30.07% = 60.14% = 105.14% + eitc_phase_in_rate: 1.0514 + # 3+ children baseline: 21.06%, bonus: 2 * 5% = 10% = 31.06% + eitc_phase_out_rate: 0.3106 + +- name: Case 5 - Single filer, 4 children (ages 1, 2, 3, 5), 3 young (max) + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 40 + is_tax_unit_dependent: false + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + child3: + age: 3 + is_tax_unit_dependent: true + child4: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3, child4] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3, child4] + output: + # 3+ children baseline: 45%, bonus: 3 * 30.07% = 90.21% = 135.21% + eitc_phase_in_rate: 1.3521 + # 3+ children baseline: 21.06%, bonus: 3 * 5% = 15% = 36.06% + eitc_phase_out_rate: 0.3606 + +- name: Case 6 - Reform disabled (in_effect false), no bonus + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 30 + is_tax_unit_dependent: false + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + output: + # 1 child baseline: 34%, no bonus + eitc_phase_in_rate: 0.34 + # 1 child baseline: 15.98%, no bonus + eitc_phase_out_rate: 0.1598 + +- name: Case 7 - Childless filer, no EITC children bonus + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + person: + age: 30 + is_tax_unit_dependent: false + tax_units: + tax_unit: + members: [person] + filing_status: SINGLE + households: + household: + members: [person] + output: + # 0 children baseline: 7.65%, no bonus + eitc_phase_in_rate: 0.0765 + # 0 children baseline: 7.65%, no bonus + eitc_phase_out_rate: 0.0765 + +- name: Case 8 - Edge case, child exactly age 4, no bonus (must be under 4) + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + child: + age: 4 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + output: + # 1 child baseline: 34%, no bonus (child is not under 4) + eitc_phase_in_rate: 0.34 + # 1 child baseline: 15.98%, no bonus + eitc_phase_out_rate: 0.1598 + +- name: Case 9 - 5 young children, capped at 3 for bonus calculation + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent1: + age: 40 + is_tax_unit_dependent: false + parent2: + age: 38 + is_tax_unit_dependent: false + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + child4: + age: 3 + is_tax_unit_dependent: true + child5: + age: 3 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2, child3, child4, child5] + filing_status: JOINT + households: + household: + members: [parent1, parent2, child1, child2, child3, child4, child5] + output: + # 3+ children baseline: 45%, bonus: MAX 3 * 30.07% = 90.21% = 135.21% + eitc_phase_in_rate: 1.3521 + # 3+ children baseline: 21.06%, bonus: MAX 3 * 5% = 15% = 36.06% + eitc_phase_out_rate: 0.3606 + +# Federal EITC amount tests + +- name: Case 10 - Low earner, 1 child age 2, in phase-in region, reform increases EITC + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Phased-in = $5,000 * 76.24% = $3,812 + eitc: 3812 + +- name: Case 11 - Low earner, 1 child age 5 (no bonus), baseline EITC + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Phased-in = $5,000 * 34% = $1,700 + eitc: 1700 + +- name: Case 12 - 2 children ages 1 and 2, large phase-in boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + employment_income: 3000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # Phase-in rate: 100.14%, Phased-in = $3,000 * 100.14% = $3,004.20 + eitc: 3004 + +- name: Case 13 - Single parent, reaches max EITC + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + employment_income: 15000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Phased-in = $15,000 * 76.24% = $11,436 > max $4,427 + # Below phase-out start, so EITC = $4,427 + eitc: 4427 + +# Mixed young/older children scenarios + +- name: Case 14 - 2 children, only 1 young (age 2 and age 7) + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 35 + is_tax_unit_dependent: false + child1: + age: 2 + is_tax_unit_dependent: true + child2: + age: 7 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + output: + # 2 children baseline: 40%, bonus: 1 * 30.07% = 30.07%, total = 70.07% + eitc_phase_in_rate: 0.7007 + # 2 children baseline: 21.06%, bonus: 1 * 5% = 5%, total = 26.06% + eitc_phase_out_rate: 0.2606 + +- name: Case 15 - 3 children, only 1 young (ages 1, 8, 10) + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 40 + is_tax_unit_dependent: false + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 8 + is_tax_unit_dependent: true + child3: + age: 10 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + output: + # 3+ children baseline: 45%, bonus: 1 * 30.07%, total = 75.07% + eitc_phase_in_rate: 0.7507 + # 3+ children baseline: 21.06%, bonus: 1 * 5%, total = 26.06% + eitc_phase_out_rate: 0.2606 + +# eitc_young_child_count variable tests + +- name: Case 16 - Verify eitc_young_child_count for 2 young children + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + child1: + age: 2 + is_tax_unit_dependent: true + child2: + age: 3 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + output: + eitc_young_child_count: 2 + eitc_child_count: 2 + +- name: Case 17 - Verify eitc_young_child_count for mixed ages + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 35 + is_tax_unit_dependent: false + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 5 + is_tax_unit_dependent: true + child3: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + output: + eitc_young_child_count: 1 + eitc_child_count: 3 + +- name: Case 18 - Verify eitc_young_child_count is 0 when all children are 4+ + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 40 + is_tax_unit_dependent: false + child1: + age: 4 + is_tax_unit_dependent: true + child2: + age: 7 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + output: + eitc_young_child_count: 0 + eitc_child_count: 2 + +# Filing status variations + +- name: Case 19 - Head of Household, 1 child age 1, bonus applies + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + child: + age: 1 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: HEAD_OF_HOUSEHOLD + households: + household: + members: [parent, child] + output: + eitc_phase_in_rate: 0.7624 + eitc_phase_out_rate: 0.2098 + +# Newborn and infant edge cases + +- name: Case 20 - Newborn (age 0), bonus applies + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 25 + is_tax_unit_dependent: false + child: + age: 0 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + output: + eitc_phase_in_rate: 0.7624 + eitc_phase_out_rate: 0.2098 + +- name: Case 21 - Multiple infants (twins age 0), both count + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + twin1: + age: 0 + is_tax_unit_dependent: true + twin2: + age: 0 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, twin1, twin2] + filing_status: SINGLE + households: + household: + members: [parent, twin1, twin2] + output: + # 2 children baseline: 40%, bonus: 2 * 30.07% = 60.14%, total = 100.14% + eitc_phase_in_rate: 1.0014 + eitc_phase_out_rate: 0.3106 + +- name: Case 22 - Triplets (age 1), all count but capped at 3 + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent1: + age: 32 + is_tax_unit_dependent: false + parent2: + age: 30 + is_tax_unit_dependent: false + triplet1: + age: 1 + is_tax_unit_dependent: true + triplet2: + age: 1 + is_tax_unit_dependent: true + triplet3: + age: 1 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, triplet1, triplet2, triplet3] + filing_status: JOINT + households: + household: + members: [parent1, parent2, triplet1, triplet2, triplet3] + output: + # 3+ children baseline: 45%, bonus: 3 * 30.07% = 90.21%, total = 135.21% + eitc_phase_in_rate: 1.3521 + eitc_phase_out_rate: 0.3606 + +# State EITC impact tests (NY) + +- name: Case 23 - NY State EITC, 1 child age 2, benefits from federal EITC boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: NY + output: + # Federal EITC = $3,812 (phased-in at 76.24%) + eitc: 3812 + +- name: Case 24 - NY State EITC, 1 child age 5, no reform boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 5 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: NY + output: + # Federal EITC = $1,700 (phased-in at 34%) + eitc: 1700 + +# California state tests + +- name: Case 25 - CA resident, 1 child age 2, federal EITC boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: CA + output: + eitc: 3812 + +# 4 children scenarios + +- name: Case 26 - 4 children (ages 0, 3, 6, 9), 2 young + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent1: + age: 38 + is_tax_unit_dependent: false + parent2: + age: 36 + is_tax_unit_dependent: false + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 3 + is_tax_unit_dependent: true + child3: + age: 6 + is_tax_unit_dependent: true + child4: + age: 9 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2, child3, child4] + filing_status: JOINT + households: + household: + members: [parent1, parent2, child1, child2, child3, child4] + output: + # 3+ children baseline: 45%, bonus: 2 * 30.07% = 60.14%, total = 105.14% + eitc_phase_in_rate: 1.0514 + eitc_phase_out_rate: 0.3106 + +# Comparison of reform ON vs OFF for same family + +- name: Case 27 - Baseline comparison (reform OFF), 1 child age 2, $5000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Baseline: $5,000 * 34% = $1,700 + eitc: 1700 + +- name: Case 28 - Reform comparison (reform ON), 1 child age 2, $5000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Reform: $5,000 * 76.24% = $3,812 (an increase of $2,112) + eitc: 3812 From 7fff445087ad3b789f323b4d6da621b56021e333 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 2 Apr 2026 09:25:35 -0400 Subject: [PATCH 03/10] Expand EITC dollar amount tests for Working Parents Tax Relief Act Added 17 new test cases (Cases 29-45) that verify actual EITC dollar amounts to demonstrate the significant boost from this reform: Key boosts shown: - 1 young child: +124% EITC increase (e.g., $1,700 -> $3,812) - 2 young children: +150% EITC increase (e.g., $2,000 -> $5,007) - 3 young children: +200% EITC increase (e.g., $2,250 -> $6,761) Test coverage now includes: - Dollar amount comparisons (reform ON vs OFF) - Various income levels ($2k-$15k) - 1, 2, and 3+ child scenarios - Mixed young/older children (partial boost) - Joint filer scenarios - Summary comparison tests Total: 45 comprehensive test cases Co-Authored-By: Claude Opus 4.5 --- .../working_parents_tax_relief_act.yaml | 546 +++++++++++++++++- 1 file changed, 545 insertions(+), 1 deletion(-) diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index 82d214cfb1a..26e5baa8808 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -812,5 +812,549 @@ members: [parent, child] state_code: TX output: - # Reform: $5,000 * 76.24% = $3,812 (an increase of $2,112) + # Reform: $5,000 * 76.24% = $3,812 (an increase of $2,112 or +124%) eitc: 3812 + +# ============================================================================ +# SECTION: EITC DOLLAR AMOUNT BOOST TESTS +# These tests demonstrate the significant EITC increases from the reform +# ============================================================================ + +# 1 CHILD SCENARIOS - Baseline max $4,427 + +- name: Case 29 - 1 child age 2, $2000 income, reform doubles EITC + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + employment_income: 2000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Baseline: $2,000 * 34% = $680 + # Reform: $2,000 * 76.24% = $1,524.80 (+$845, +124%) + eitc: 1525 + +- name: Case 30 - 1 child age 2, $8000 income, boost before hitting max + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 8000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Baseline: $8,000 * 34% = $2,720 + # Reform: $8,000 * 76.24% = $6,099 > max $4,427, so EITC = $4,427 + # Boost: $4,427 - $2,720 = $1,707 (+63%) + eitc: 4427 + +- name: Case 31 - 1 child age 2 vs age 5 comparison (reform OFF baseline) + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 8000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Baseline: $8,000 * 34% = $2,720 + eitc: 2720 + +# 2 CHILDREN SCENARIOS - Baseline max $7,316 + +- name: Case 32 - 2 children ages 1 and 2, $3000 income, massive boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + employment_income: 3000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # Baseline: $3,000 * 40% = $1,200 + # Reform: $3,000 * 100.14% = $3,004 (+$1,804, +150%) + eitc: 3004 + +- name: Case 33 - 2 children ages 1 and 2, $5000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # Baseline: $5,000 * 40% = $2,000 + # Reform: $5,000 * 100.14% = $5,007 (+$3,007, +150%) + eitc: 5007 + +- name: Case 34 - 2 children ages 1 and 2, $10000 income, reaches max faster + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 10000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # Baseline: $10,000 * 40% = $4,000 + # Reform: $10,000 * 100.14% = $10,014 > max $7,316 + # EITC = $7,316 (vs baseline $4,000, +$3,316, +83%) + eitc: 7316 + +- name: Case 35 - 2 children baseline (reform OFF) for comparison + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 10000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # Baseline: $10,000 * 40% = $4,000 + eitc: 4000 + +# 3+ CHILDREN SCENARIOS - Baseline max $8,231 + +- name: Case 36 - 3 children ages 0, 1, 2, $4000 income, huge boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 4000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # Baseline: $4,000 * 45% = $1,800 + # Reform: $4,000 * 135.21% = $5,408 (+$3,608, +200%) + eitc: 5408 + +- name: Case 37 - 3 children ages 0, 1, 2, $7000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 32 + is_tax_unit_dependent: false + employment_income: 7000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # Baseline: $7,000 * 45% = $3,150 + # Reform: $7,000 * 135.21% = $9,464.70 > max $8,231 + # EITC = $8,231 (vs baseline $3,150, +$5,081, +161%) + eitc: 8231 + +- name: Case 38 - 3 children baseline (reform OFF) for comparison + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 32 + is_tax_unit_dependent: false + employment_income: 7000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # Baseline: $7,000 * 45% = $3,150 + eitc: 3150 + +# JOINT FILER SCENARIOS + +- name: Case 39 - Joint filers, 2 children ages 1 and 3, $8000 combined income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent1: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + parent2: + age: 28 + is_tax_unit_dependent: false + employment_income: 3000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 3 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2] + filing_status: JOINT + households: + household: + members: [parent1, parent2, child1, child2] + state_code: TX + output: + # Combined income: $8,000 + # Baseline: $8,000 * 40% = $3,200 + # Reform: $8,000 * 100.14% = $8,011 > max $7,316 + # EITC = $7,316 (vs baseline $3,200, +$4,116, +129%) + eitc: 7316 + +- name: Case 40 - Joint filers baseline (reform OFF) for comparison + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent1: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + parent2: + age: 28 + is_tax_unit_dependent: false + employment_income: 3000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 3 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent1, parent2, child1, child2] + filing_status: JOINT + households: + household: + members: [parent1, parent2, child1, child2] + state_code: TX + output: + # Baseline: $8,000 * 40% = $3,200 + eitc: 3200 + +# MIXED YOUNG/OLDER CHILDREN - Partial boost + +- name: Case 41 - 2 children (1 young, 1 older), partial boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 35 + is_tax_unit_dependent: false + employment_income: 6000 + child1: + age: 2 + is_tax_unit_dependent: true + child2: + age: 8 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # Phase-in rate: 40% + (1 * 30.07%) = 70.07% + # Baseline: $6,000 * 40% = $2,400 + # Reform: $6,000 * 70.07% = $4,204 (+$1,804, +75%) + eitc: 4204 + +- name: Case 42 - 3 children (2 young, 1 older), partial boost + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 38 + is_tax_unit_dependent: false + employment_income: 5000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 3 + is_tax_unit_dependent: true + child3: + age: 10 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # Phase-in rate: 45% + (2 * 30.07%) = 105.14% + # Baseline: $5,000 * 45% = $2,250 + # Reform: $5,000 * 105.14% = $5,257 (+$3,007, +134%) + eitc: 5257 + +# SUMMARY COMPARISON TESTS - Show the dollar increase clearly + +- name: Case 43 - Summary test, 1 young child, $5000 income, reform ON + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + employment_income: 5000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # $5,000 * 76.24% = $3,812 + # Boost from baseline ($1,700): +$2,112 (+124%) + eitc: 3812 + eitc_phase_in_rate: 0.7624 + +- name: Case 44 - Summary test, 2 young children, $5000 income, reform ON + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 28 + is_tax_unit_dependent: false + employment_income: 5000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # $5,000 * 100.14% = $5,007 + # Boost from baseline ($2,000): +$3,007 (+150%) + eitc: 5007 + eitc_phase_in_rate: 1.0014 + +- name: Case 45 - Summary test, 3 young children, $5000 income, reform ON + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 5000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # $5,000 * 135.21% = $6,760.50 + # Boost from baseline ($2,250): +$4,510 (+200%) + eitc: 6761 + eitc_phase_in_rate: 1.3521 From 7f1f14b0aeaf05e348c14c93687ed291c1f8eac3 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 2 Apr 2026 09:36:24 -0400 Subject: [PATCH 04/10] =?UTF-8?q?Fix=20EITC=20maximum=20calculation=20per?= =?UTF-8?q?=20IRC=20=C2=A732=20statute=20structure?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per IRC §32(b), the EITC maximum is calculated as: max = credit_percentage × earned_income_amount When the Working Parents Tax Relief Act increases the credit percentage, the maximum must also increase proportionally. This commit: - Adds eitc_maximum variable override to scale max with rate increase - Updates test expected values to reflect correct maximums: - 1 child with young child: $4,427 → $9,927 (×2.242) - 2 children with 2 young: $7,316 → $18,316 (×2.504) - 3+ children with 3 young: $8,231 → $24,736 (×3.005) Co-Authored-By: Claude Opus 4.5 --- .../working_parents_tax_relief_act.py | 46 +++++++++++++++++++ .../working_parents_tax_relief_act.yaml | 45 ++++++++++-------- 2 files changed, 72 insertions(+), 19 deletions(-) diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py index 7bb0248fbfe..da828d6d9b6 100644 --- a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py +++ b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py @@ -92,11 +92,57 @@ def formula(tax_unit, period, parameters): return baseline_rate + bonus + class eitc_maximum(Variable): + value_type = float + entity = TaxUnit + label = "Maximum EITC" + unit = USD + documentation = "Maximum EITC amount, adjusted for Working Parents Tax Relief Act credit percentage increase." + definition_period = YEAR + reference = "https://www.law.cornell.edu/uscode/text/26/32#a" + + def formula(tax_unit, period, parameters): + # Per IRC §32(b), maximum_credit = credit_percentage × earned_income_amount + # When the credit percentage increases, the maximum also increases proportionally + 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 + + young_child_count = min_( + tax_unit("eitc_young_child_count", period), p.max_young_children + ) + + # Calculate the rate bonus (same logic as eitc_phase_in_rate) + rate_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, + ) + + # New maximum = baseline_max × (new_rate / baseline_rate) + # This preserves the implied earned_income_amount from the statute + new_rate = baseline_rate + rate_bonus + # Avoid division by zero for childless (baseline_rate = 0.0765) + 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 diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index 26e5baa8808..cf8511a5179 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -351,7 +351,7 @@ # Phase-in rate: 100.14%, Phased-in = $3,000 * 100.14% = $3,004.20 eitc: 3004 -- name: Case 13 - Single parent, reaches max EITC +- name: Case 13 - Single parent, higher income, benefits from increased max period: 2026 absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act @@ -374,9 +374,12 @@ members: [parent, child] state_code: TX output: - # Phased-in = $15,000 * 76.24% = $11,436 > max $4,427 - # Below phase-out start, so EITC = $4,427 - eitc: 4427 + # Per IRC §32(b): max = credit_percentage × earned_income_amount + # Baseline: max = 34% × $13,020 = $4,427 + # Reform: max = 76.24% × $13,020 = $9,927 (ratio: 76.24/34 = 2.242) + # Phased-in = $15,000 × 76.24% = $11,436 > new max $9,927 + # EITC = $9,927 (NOT $4,427 - the max increased!) + eitc: 9927 # Mixed young/older children scenarios @@ -849,7 +852,7 @@ # Reform: $2,000 * 76.24% = $1,524.80 (+$845, +124%) eitc: 1525 -- name: Case 30 - 1 child age 2, $8000 income, boost before hitting max +- name: Case 30 - 1 child age 2, $8000 income, both rate and max increase period: 2026 absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act @@ -873,9 +876,10 @@ state_code: TX output: # Baseline: $8,000 * 34% = $2,720 - # Reform: $8,000 * 76.24% = $6,099 > max $4,427, so EITC = $4,427 - # Boost: $4,427 - $2,720 = $1,707 (+63%) - eitc: 4427 + # Reform: new_max = $4,427 × (76.24%/34%) = $9,927 + # Phased-in = $8,000 * 76.24% = $6,099 < new_max $9,927 + # EITC = $6,099 (vs baseline $2,720, +$3,379, +124%) + eitc: 6099 - name: Case 31 - 1 child age 2 vs age 5 comparison (reform OFF baseline) period: 2026 @@ -965,7 +969,7 @@ # Reform: $5,000 * 100.14% = $5,007 (+$3,007, +150%) eitc: 5007 -- name: Case 34 - 2 children ages 1 and 2, $10000 income, reaches max faster +- name: Case 34 - 2 children ages 1 and 2, $10000 income, both rate and max increase period: 2026 absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act @@ -992,9 +996,10 @@ state_code: TX output: # Baseline: $10,000 * 40% = $4,000 - # Reform: $10,000 * 100.14% = $10,014 > max $7,316 - # EITC = $7,316 (vs baseline $4,000, +$3,316, +83%) - eitc: 7316 + # Reform: new_max = $7,316 × (100.14%/40%) = $18,316 + # Phased-in = $10,000 * 100.14% = $10,014 < new_max $18,316 + # EITC = $10,014 (vs baseline $4,000, +$6,014, +150%) + eitc: 10014 - name: Case 35 - 2 children baseline (reform OFF) for comparison period: 2026 @@ -1060,7 +1065,7 @@ # Reform: $4,000 * 135.21% = $5,408 (+$3,608, +200%) eitc: 5408 -- name: Case 37 - 3 children ages 0, 1, 2, $7000 income +- name: Case 37 - 3 children ages 0, 1, 2, $7000 income, both rate and max increase period: 2026 absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act @@ -1090,9 +1095,10 @@ state_code: TX output: # Baseline: $7,000 * 45% = $3,150 - # Reform: $7,000 * 135.21% = $9,464.70 > max $8,231 - # EITC = $8,231 (vs baseline $3,150, +$5,081, +161%) - eitc: 8231 + # Reform: new_max = $8,231 × (135.21%/45%) = $24,736 + # Phased-in = $7,000 * 135.21% = $9,465 < new_max $24,736 + # EITC = $9,465 (vs baseline $3,150, +$6,315, +200%) + eitc: 9465 - name: Case 38 - 3 children baseline (reform OFF) for comparison period: 2026 @@ -1160,9 +1166,10 @@ output: # Combined income: $8,000 # Baseline: $8,000 * 40% = $3,200 - # Reform: $8,000 * 100.14% = $8,011 > max $7,316 - # EITC = $7,316 (vs baseline $3,200, +$4,116, +129%) - eitc: 7316 + # Reform: new_max = $7,316 × (100.14%/40%) = $18,316 + # Phased-in = $8,000 * 100.14% = $8,011 < new_max $18,316 + # EITC = $8,011 (vs baseline $3,200, +$4,811, +150%) + eitc: 8011 - name: Case 40 - Joint filers baseline (reform OFF) for comparison period: 2026 From bfb15b154156dd41f7c938c3fcfc6686d5dbd41f Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 2 Apr 2026 11:56:23 -0400 Subject: [PATCH 05/10] Fix unit metadata and add phase-out region tests Fixes: - eitc_young_child_count: Changed unit from USD to "child" - in_effect.yaml: Added period: year metadata New tests (Cases 46-56): - Phase-out boundary tests at exact threshold ($23,840/$23,810) - Phase-out region tests at $30k, $35k, $40k, $50k income levels - Verifies increased phase-out rates work correctly: - 1 child: 20.98% (vs baseline 15.98%) - 2 children: 31.06% (vs baseline 21.06%) - 3+ children: 36.06% (vs baseline 21.06%) - Baseline comparison tests for phase-out region Co-Authored-By: Claude Opus 4.5 --- .../in_effect.yaml | 1 + .../working_parents_tax_relief_act.py | 2 +- .../working_parents_tax_relief_act.yaml | 363 ++++++++++++++++++ 3 files changed, 365 insertions(+), 1 deletion(-) diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml index 083e1c62d84..a496bfc1747 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml @@ -4,3 +4,4 @@ values: metadata: label: Working Parents Tax Relief Act in effect unit: bool + period: year diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py index da828d6d9b6..18850829b8c 100644 --- a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py +++ b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py @@ -8,7 +8,7 @@ class eitc_young_child_count(Variable): value_type = int entity = TaxUnit label = "EITC-qualifying young children" - unit = USD + unit = "child" documentation = ( "Number of EITC-qualifying children who have not attained age 4." ) diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index cf8511a5179..81e2290bd18 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -1365,3 +1365,366 @@ # Boost from baseline ($2,250): +$4,510 (+200%) eitc: 6761 eitc_phase_in_rate: 1.3521 + +# ============================================================================ +# SECTION: PHASE-OUT BOUNDARY TESTS +# Tests at exact phase-out threshold where EITC should be at maximum +# ============================================================================ + +- name: Case 46 - Phase-out boundary, 1 child age 2, income at phase-out start + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 23840 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # At phase-out start ($23,840), EITC should be at maximum + # new_max = $4,427 × (76.24% / 34%) = $9,927 + eitc: 9927 + eitc_phase_in_rate: 0.7624 + eitc_phase_out_rate: 0.2098 + +- name: Case 47 - Phase-out boundary, 2 children ages 1 and 2, income at phase-out start + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 23840 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # At phase-out start ($23,840), EITC should be at maximum + # new_max = $7,316 × (100.14% / 40%) = $18,316 + eitc: 18316 + eitc_phase_in_rate: 1.0014 + eitc_phase_out_rate: 0.3106 + +- name: Case 48 - Phase-out boundary, 3 children ages 0, 1, 2, income at phase-out start + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 23810 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # At phase-out start ($23,810 for 3+ children), EITC should be at maximum + # new_max = $8,231 × (135.21% / 45%) = $24,736 + eitc: 24736 + eitc_phase_in_rate: 1.3521 + eitc_phase_out_rate: 0.3606 + +# ============================================================================ +# SECTION: PHASE-OUT REGION TESTS +# Tests with income above phase-out start to verify increased phase-out rate +# ============================================================================ + +- name: Case 49 - Phase-out region, 1 child age 2, $30000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 30000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # EITC = max - (income - phase_out_start) × phase_out_rate + # EITC = $9,927 - ($30,000 - $23,840) × 0.2098 + # EITC = $9,927 - $6,160 × 0.2098 = $9,927 - $1,292 = $8,635 + eitc: 8635 + eitc_phase_in_rate: 0.7624 + eitc_phase_out_rate: 0.2098 + +- name: Case 50 - Phase-out region baseline (reform OFF), 1 child, $30000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 30000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # Baseline: EITC = $4,427 - ($30,000 - $23,840) × 0.1598 + # EITC = $4,427 - $6,160 × 0.1598 = $4,427 - $984 = $3,443 + eitc: 3443 + eitc_phase_in_rate: 0.34 + eitc_phase_out_rate: 0.1598 + +- name: Case 51 - Phase-out region, 1 child age 2, $40000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 40000 + child: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child] + filing_status: SINGLE + households: + household: + members: [parent, child] + state_code: TX + output: + # EITC = $9,927 - ($40,000 - $23,840) × 0.2098 + # EITC = $9,927 - $16,160 × 0.2098 = $9,927 - $3,390 = $6,537 + eitc: 6537 + eitc_phase_in_rate: 0.7624 + eitc_phase_out_rate: 0.2098 + +- name: Case 52 - Phase-out region, 2 children ages 1 and 2, $35000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 35000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # EITC = $18,316 - ($35,000 - $23,840) × 0.3106 + # EITC = $18,316 - $11,160 × 0.3106 = $18,316 - $3,466 = $14,850 + eitc: 14850 + eitc_phase_in_rate: 1.0014 + eitc_phase_out_rate: 0.3106 + +- name: Case 53 - Phase-out region, 2 children ages 1 and 2, $50000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 50000 + child1: + age: 1 + is_tax_unit_dependent: true + child2: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2] + state_code: TX + output: + # EITC = $18,316 - ($50,000 - $23,840) × 0.3106 + # EITC = $18,316 - $26,160 × 0.3106 = $18,316 - $8,125 = $10,191 + eitc: 10191 + eitc_phase_in_rate: 1.0014 + eitc_phase_out_rate: 0.3106 + +- name: Case 54 - Phase-out region, 3 children ages 0, 1, 2, $35000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 35000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # EITC = $24,736 - ($35,000 - $23,810) × 0.3606 + # EITC = $24,736 - $11,190 × 0.3606 = $24,736 - $4,035 = $20,701 + eitc: 20701 + eitc_phase_in_rate: 1.3521 + eitc_phase_out_rate: 0.3606 + +- name: Case 55 - Phase-out region, 3 children ages 0, 1, 2, $50000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 50000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # EITC = $24,736 - ($50,000 - $23,810) × 0.3606 + # EITC = $24,736 - $26,190 × 0.3606 = $24,736 - $9,444 = $15,292 + eitc: 15292 + eitc_phase_in_rate: 1.3521 + eitc_phase_out_rate: 0.3606 + +- name: Case 56 - Phase-out region baseline (reform OFF), 3 children, $35000 income + period: 2026 + absolute_error_margin: 1 + reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act + input: + gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false + people: + parent: + age: 30 + is_tax_unit_dependent: false + employment_income: 35000 + child1: + age: 0 + is_tax_unit_dependent: true + child2: + age: 1 + is_tax_unit_dependent: true + child3: + age: 2 + is_tax_unit_dependent: true + tax_units: + tax_unit: + members: [parent, child1, child2, child3] + filing_status: SINGLE + households: + household: + members: [parent, child1, child2, child3] + state_code: TX + output: + # Baseline: EITC = $8,231 - ($35,000 - $23,810) × 0.2106 + # EITC = $8,231 - $11,190 × 0.2106 = $8,231 - $2,357 = $5,874 + eitc: 5874 + eitc_phase_in_rate: 0.45 + eitc_phase_out_rate: 0.2106 From fbfe3486a004043f8bda27dedabbe0b1909cae9f Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Thu, 2 Apr 2026 14:15:25 -0400 Subject: [PATCH 06/10] Fix 3+ children test expected values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrected new_max calculation for 3+ children: - $8,231 × (135.21% / 45%) = $24,731 (not $24,736) Updated Cases 48, 54, 55 with correct expected EITC values. Co-Authored-By: Claude Opus 4.5 --- .../working_parents_tax_relief_act.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index 81e2290bd18..e77c7a05e54 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -1462,8 +1462,8 @@ state_code: TX output: # At phase-out start ($23,810 for 3+ children), EITC should be at maximum - # new_max = $8,231 × (135.21% / 45%) = $24,736 - eitc: 24736 + # new_max = $8,231 × (135.21% / 45%) = $24,731 + eitc: 24731 eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 @@ -1653,9 +1653,9 @@ members: [parent, child1, child2, child3] state_code: TX output: - # EITC = $24,736 - ($35,000 - $23,810) × 0.3606 - # EITC = $24,736 - $11,190 × 0.3606 = $24,736 - $4,035 = $20,701 - eitc: 20701 + # EITC = $24,731 - ($35,000 - $23,810) × 0.3606 + # EITC = $24,731 - $11,190 × 0.3606 = $24,731 - $4,035 = $20,696 + eitc: 20696 eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 @@ -1688,9 +1688,9 @@ members: [parent, child1, child2, child3] state_code: TX output: - # EITC = $24,736 - ($50,000 - $23,810) × 0.3606 - # EITC = $24,736 - $26,190 × 0.3606 = $24,736 - $9,444 = $15,292 - eitc: 15292 + # EITC = $24,731 - ($50,000 - $23,810) × 0.3606 + # EITC = $24,731 - $26,190 × 0.3606 = $24,731 - $9,444 = $15,287 + eitc: 15287 eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 From d91a3238ceb53d2e8e809b8cd2df23f9a96e7e43 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Fri, 3 Apr 2026 15:45:30 -0400 Subject: [PATCH 07/10] Simplify eitc_maximum to avoid duplicated rate-bonus logic - eitc_maximum now calls tax_unit("eitc_phase_in_rate", period) instead of duplicating the rate bonus calculation - Prevents the two formulas from drifting out of sync if parameters change - Added comment noting bill text is not yet public, reference to be added Co-Authored-By: Claude Opus 4.5 --- .../working_parents_tax_relief_act.py | 21 +++++-------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py index 18850829b8c..4ac9fedd934 100644 --- a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py +++ b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py @@ -99,7 +99,8 @@ class eitc_maximum(Variable): unit = USD documentation = "Maximum EITC amount, adjusted for Working Parents Tax Relief Act credit percentage increase." definition_period = YEAR - reference = "https://www.law.cornell.edu/uscode/text/26/32#a" + # Note: Bill text is not yet public. Reference will be added when released. + # The formula follows IRC §32(b) structure where max = credit_percentage × earned_income_amount def formula(tax_unit, period, parameters): # Per IRC §32(b), maximum_credit = credit_percentage × earned_income_amount @@ -115,24 +116,12 @@ def formula(tax_unit, period, parameters): if not p.in_effect: return baseline_max - young_child_count = min_( - tax_unit("eitc_young_child_count", period), p.max_young_children - ) - - # Calculate the rate bonus (same logic as eitc_phase_in_rate) - rate_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, - ) + # Get the new phase-in rate (already calculated by eitc_phase_in_rate override) + # This avoids duplicating the rate bonus logic + new_rate = tax_unit("eitc_phase_in_rate", period) # New maximum = baseline_max × (new_rate / baseline_rate) # This preserves the implied earned_income_amount from the statute - new_rate = baseline_rate + rate_bonus # Avoid division by zero for childless (baseline_rate = 0.0765) ratio = where(baseline_rate > 0, new_rate / baseline_rate, 1) return baseline_max * ratio From 13129fa78c114a4db7312bdea83af6abf62561c7 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Mon, 6 Apr 2026 09:24:30 -0400 Subject: [PATCH 08/10] Update phase-out tests for 2026 EITC parameter changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Updated phase-out start from $23,840/$23,810 to $23,890 per upstream IRS 2026 data release update. Recalculated expected EITC values: - Case 46-48: Updated boundary income to $23,890 - Case 49: $8,635 → $8,645 - Case 50: $3,443 → $3,451 - Case 51: $6,537 → $6,547 - Case 52: $14,850 → $14,865 - Case 53: $10,191 → $10,206 - Case 54: $20,696 → $20,725 - Case 55: $15,287 → $15,316 - Case 56: $5,874 → $5,891 Co-Authored-By: Claude Opus 4.5 --- .../working_parents_tax_relief_act.yaml | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index e77c7a05e54..86bb5972402 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -1381,7 +1381,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 23840 + employment_income: 23890 child: age: 2 is_tax_unit_dependent: true @@ -1394,7 +1394,7 @@ members: [parent, child] state_code: TX output: - # At phase-out start ($23,840), EITC should be at maximum + # At phase-out start ($23,890), EITC should be at maximum # new_max = $4,427 × (76.24% / 34%) = $9,927 eitc: 9927 eitc_phase_in_rate: 0.7624 @@ -1410,7 +1410,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 23840 + employment_income: 23890 child1: age: 1 is_tax_unit_dependent: true @@ -1426,7 +1426,7 @@ members: [parent, child1, child2] state_code: TX output: - # At phase-out start ($23,840), EITC should be at maximum + # At phase-out start ($23,890), EITC should be at maximum # new_max = $7,316 × (100.14% / 40%) = $18,316 eitc: 18316 eitc_phase_in_rate: 1.0014 @@ -1442,7 +1442,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 23810 + employment_income: 23890 child1: age: 0 is_tax_unit_dependent: true @@ -1461,7 +1461,7 @@ members: [parent, child1, child2, child3] state_code: TX output: - # At phase-out start ($23,810 for 3+ children), EITC should be at maximum + # At phase-out start ($23,890 for 3+ children), EITC should be at maximum # new_max = $8,231 × (135.21% / 45%) = $24,731 eitc: 24731 eitc_phase_in_rate: 1.3521 @@ -1496,9 +1496,9 @@ state_code: TX output: # EITC = max - (income - phase_out_start) × phase_out_rate - # EITC = $9,927 - ($30,000 - $23,840) × 0.2098 - # EITC = $9,927 - $6,160 × 0.2098 = $9,927 - $1,292 = $8,635 - eitc: 8635 + # EITC = $9,927 - ($30,000 - $23,890) × 0.2098 + # EITC = $9,927 - $6,110 × 0.2098 = $9,927 - $1,282 = $8,645 + eitc: 8645 eitc_phase_in_rate: 0.7624 eitc_phase_out_rate: 0.2098 @@ -1525,9 +1525,9 @@ members: [parent, child] state_code: TX output: - # Baseline: EITC = $4,427 - ($30,000 - $23,840) × 0.1598 - # EITC = $4,427 - $6,160 × 0.1598 = $4,427 - $984 = $3,443 - eitc: 3443 + # Baseline: EITC = $4,427 - ($30,000 - $23,890) × 0.1598 + # EITC = $4,427 - $6,110 × 0.1598 = $4,427 - $976 = $3,451 + eitc: 3451 eitc_phase_in_rate: 0.34 eitc_phase_out_rate: 0.1598 @@ -1554,9 +1554,9 @@ members: [parent, child] state_code: TX output: - # EITC = $9,927 - ($40,000 - $23,840) × 0.2098 - # EITC = $9,927 - $16,160 × 0.2098 = $9,927 - $3,390 = $6,537 - eitc: 6537 + # EITC = $9,927 - ($40,000 - $23,890) × 0.2098 + # EITC = $9,927 - $16,110 × 0.2098 = $9,927 - $3,380 = $6,547 + eitc: 6547 eitc_phase_in_rate: 0.7624 eitc_phase_out_rate: 0.2098 @@ -1586,9 +1586,9 @@ members: [parent, child1, child2] state_code: TX output: - # EITC = $18,316 - ($35,000 - $23,840) × 0.3106 - # EITC = $18,316 - $11,160 × 0.3106 = $18,316 - $3,466 = $14,850 - eitc: 14850 + # EITC = $18,316 - ($35,000 - $23,890) × 0.3106 + # EITC = $18,316 - $11,110 × 0.3106 = $18,316 - $3,451 = $14,865 + eitc: 14865 eitc_phase_in_rate: 1.0014 eitc_phase_out_rate: 0.3106 @@ -1618,9 +1618,9 @@ members: [parent, child1, child2] state_code: TX output: - # EITC = $18,316 - ($50,000 - $23,840) × 0.3106 - # EITC = $18,316 - $26,160 × 0.3106 = $18,316 - $8,125 = $10,191 - eitc: 10191 + # EITC = $18,316 - ($50,000 - $23,890) × 0.3106 + # EITC = $18,316 - $26,110 × 0.3106 = $18,316 - $8,110 = $10,206 + eitc: 10206 eitc_phase_in_rate: 1.0014 eitc_phase_out_rate: 0.3106 @@ -1653,9 +1653,9 @@ members: [parent, child1, child2, child3] state_code: TX output: - # EITC = $24,731 - ($35,000 - $23,810) × 0.3606 - # EITC = $24,731 - $11,190 × 0.3606 = $24,731 - $4,035 = $20,696 - eitc: 20696 + # EITC = $24,731 - ($35,000 - $23,890) × 0.3606 + # EITC = $24,731 - $11,110 × 0.3606 = $24,731 - $4,006 = $20,725 + eitc: 20725 eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 @@ -1688,9 +1688,9 @@ members: [parent, child1, child2, child3] state_code: TX output: - # EITC = $24,731 - ($50,000 - $23,810) × 0.3606 - # EITC = $24,731 - $26,190 × 0.3606 = $24,731 - $9,444 = $15,287 - eitc: 15287 + # EITC = $24,731 - ($50,000 - $23,890) × 0.3606 + # EITC = $24,731 - $26,110 × 0.3606 = $24,731 - $9,415 = $15,316 + eitc: 15316 eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 @@ -1723,8 +1723,8 @@ members: [parent, child1, child2, child3] state_code: TX output: - # Baseline: EITC = $8,231 - ($35,000 - $23,810) × 0.2106 - # EITC = $8,231 - $11,190 × 0.2106 = $8,231 - $2,357 = $5,874 - eitc: 5874 + # Baseline: EITC = $8,231 - ($35,000 - $23,890) × 0.2106 + # EITC = $8,231 - $11,110 × 0.2106 = $8,231 - $2,340 = $5,891 + eitc: 5891 eitc_phase_in_rate: 0.45 eitc_phase_out_rate: 0.2106 From 096158783dbef864059f5278722cd643de1ead64 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Mon, 6 Apr 2026 10:41:57 -0400 Subject: [PATCH 09/10] Fix review findings: improve params, clean up reform code, tighten tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Parameters (all 6 files): - Add one-sentence descriptions with Act name prefix - Add labels with Act name prefix for discoverability - Add reference metadata citing IRC §32(b) (bill text pending) - Change max_young_children unit from 'child' to '/1' Reform code: - Remove documentation fields from all 4 variables (use reference instead) - Change eitc_young_child_count unit from 'child' to '/1' - Reduce verbose inline comments in eitc_maximum formula Tests: - Tighten absolute_error_margin from 1 to 0.1 (except Case 55) - Fix test names: 'Case N - desc' → 'Case N, desc.' - Add underscore separators to income values >= 1,000 - Fix Case 37 comment typo ($24,736 → $24,731) Co-Authored-By: Claude Opus 4.6 (1M context) --- .../credit_percentage_increase_one_child.yaml | 9 +- ...t_percentage_increase_per_young_child.yaml | 9 +- .../in_effect.yaml | 7 +- .../max_young_children.yaml | 11 +- ...t_percentage_increase_per_young_child.yaml | 9 +- .../young_child_age_threshold.yaml | 9 +- .../working_parents_tax_relief_act.py | 20 +- .../working_parents_tax_relief_act.yaml | 304 +++++++++--------- 8 files changed, 197 insertions(+), 181 deletions(-) diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml index a7db010f614..ed61a3455f3 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_one_child.yaml @@ -1,7 +1,12 @@ -description: Credit percentage point increase for eligible individual with 1 qualifying child who has not attained age 4. +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: Credit percentage increase (1 child under 4) + 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 diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml index edf3adb5ced..b8c7ba72dee 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/credit_percentage_increase_per_young_child.yaml @@ -1,7 +1,12 @@ -description: Credit percentage point increase per young child (max 3) for eligible individual with 2 or more qualifying children. +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: Credit percentage increase per young child (2+ children) + 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 diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml index a496bfc1747..cc410b7a200 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/in_effect.yaml @@ -1,7 +1,12 @@ -description: Whether the Working Parents Tax Relief Act is in effect. +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 diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml index 0274ce73b80..903eb13b328 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/max_young_children.yaml @@ -1,7 +1,12 @@ -description: Maximum number of young children that count toward EITC percentage increases. +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: Maximum young children for bonus - unit: child + 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 diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml index 77ada9b7ab1..12ba4d2ffe8 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/phaseout_percentage_increase_per_young_child.yaml @@ -1,7 +1,12 @@ -description: Phaseout percentage point increase per young child (max 3) under the Working Parents Tax Relief Act. +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: Phaseout percentage increase per young child + 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 diff --git a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml index 377b73b56e1..46043439d59 100644 --- a/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml +++ b/policyengine_us/parameters/gov/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act/young_child_age_threshold.yaml @@ -1,7 +1,12 @@ -description: Age threshold for young children under the Working Parents Tax Relief Act. Children must not have attained this age. +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: Young child age threshold + 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 diff --git a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py index 4ac9fedd934..ecb7765ebfb 100644 --- a/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py +++ b/policyengine_us/reforms/congress/mcdonald_rivet/working_parents_tax_relief_act/working_parents_tax_relief_act.py @@ -8,10 +8,7 @@ class eitc_young_child_count(Variable): value_type = int entity = TaxUnit label = "EITC-qualifying young children" - unit = "child" - documentation = ( - "Number of EITC-qualifying children who have not attained age 4." - ) + unit = "/1" definition_period = YEAR def formula(tax_unit, period, parameters): @@ -31,7 +28,6 @@ class eitc_phase_in_rate(Variable): entity = TaxUnit label = "EITC phase-in rate" unit = "/1" - documentation = "Rate at which the EITC phases in with income, including Working Parents Tax Relief Act bonus." definition_period = YEAR def formula(tax_unit, period, parameters): @@ -66,7 +62,6 @@ class eitc_phase_out_rate(Variable): entity = TaxUnit label = "EITC phase-out rate" unit = "/1" - documentation = "Rate at which the EITC phases out with income, including Working Parents Tax Relief Act bonus." definition_period = YEAR def formula(tax_unit, period, parameters): @@ -97,14 +92,9 @@ class eitc_maximum(Variable): entity = TaxUnit label = "Maximum EITC" unit = USD - documentation = "Maximum EITC amount, adjusted for Working Parents Tax Relief Act credit percentage increase." definition_period = YEAR - # Note: Bill text is not yet public. Reference will be added when released. - # The formula follows IRC §32(b) structure where max = credit_percentage × earned_income_amount def formula(tax_unit, period, parameters): - # Per IRC §32(b), maximum_credit = credit_percentage × earned_income_amount - # When the credit percentage increases, the maximum also increases proportionally child_count = tax_unit("eitc_child_count", period) eitc = parameters(period).gov.irs.credits.eitc baseline_max = eitc.max.calc(child_count) @@ -116,13 +106,9 @@ def formula(tax_unit, period, parameters): if not p.in_effect: return baseline_max - # Get the new phase-in rate (already calculated by eitc_phase_in_rate override) - # This avoids duplicating the rate bonus logic + # 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) - - # New maximum = baseline_max × (new_rate / baseline_rate) - # This preserves the implied earned_income_amount from the statute - # Avoid division by zero for childless (baseline_rate = 0.0765) ratio = where(baseline_rate > 0, new_rate / baseline_rate, 1) return baseline_max * ratio diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index 86bb5972402..9f5fd2c9560 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -1,6 +1,6 @@ -- name: Case 1 - Single filer, 1 child age 2 (under 4), bonus applies +- name: Case 1, Single filer, 1 child age 2 (under 4), bonus applies. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -24,9 +24,9 @@ # 1 child baseline: 15.98%, bonus: 5% = 20.98% eitc_phase_out_rate: 0.2098 -- name: Case 2 - Single filer, 1 child age 5 (over 4), no bonus +- name: Case 2, Single filer, 1 child age 5 (over 4), no bonus. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -50,9 +50,9 @@ # 1 child baseline: 15.98%, no bonus eitc_phase_out_rate: 0.1598 -- name: Case 3 - Joint filer, 2 children (ages 2 and 3), both young +- name: Case 3, Joint filer, 2 children (ages 2 and 3), both young. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -82,9 +82,9 @@ # 2 children baseline: 21.06%, bonus: 2 * 5% = 10% = 31.06% eitc_phase_out_rate: 0.3106 -- name: Case 4 - Joint filer, 3 children (ages 1, 2, 6), 2 young +- name: Case 4, Joint filer, 3 children (ages 1, 2, 6), 2 young. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -117,9 +117,9 @@ # 3+ children baseline: 21.06%, bonus: 2 * 5% = 10% = 31.06% eitc_phase_out_rate: 0.3106 -- name: Case 5 - Single filer, 4 children (ages 1, 2, 3, 5), 3 young (max) +- name: Case 5, Single filer, 4 children (ages 1, 2, 3, 5), 3 young (max). period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -152,9 +152,9 @@ # 3+ children baseline: 21.06%, bonus: 3 * 5% = 15% = 36.06% eitc_phase_out_rate: 0.3606 -- name: Case 6 - Reform disabled (in_effect false), no bonus +- name: Case 6, Reform disabled (in_effect false), no bonus. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -178,9 +178,9 @@ # 1 child baseline: 15.98%, no bonus eitc_phase_out_rate: 0.1598 -- name: Case 7 - Childless filer, no EITC children bonus +- name: Case 7, Childless filer, no EITC children bonus. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -201,9 +201,9 @@ # 0 children baseline: 7.65%, no bonus eitc_phase_out_rate: 0.0765 -- name: Case 8 - Edge case, child exactly age 4, no bonus (must be under 4) +- name: Case 8, Edge case, child exactly age 4, no bonus (must be under 4). period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -227,9 +227,9 @@ # 1 child baseline: 15.98%, no bonus eitc_phase_out_rate: 0.1598 -- name: Case 9 - 5 young children, capped at 3 for bonus calculation +- name: Case 9, 5 young children, capped at 3 for bonus calculation. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -270,9 +270,9 @@ # Federal EITC amount tests -- name: Case 10 - Low earner, 1 child age 2, in phase-in region, reform increases EITC +- name: Case 10, Low earner, 1 child age 2, in phase-in region, reform increases EITC. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -280,7 +280,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 2 is_tax_unit_dependent: true @@ -296,9 +296,9 @@ # Phased-in = $5,000 * 76.24% = $3,812 eitc: 3812 -- name: Case 11 - Low earner, 1 child age 5 (no bonus), baseline EITC +- name: Case 11, Low earner, 1 child age 5 (no bonus), baseline EITC. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -306,7 +306,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 5 is_tax_unit_dependent: true @@ -322,9 +322,9 @@ # Phased-in = $5,000 * 34% = $1,700 eitc: 1700 -- name: Case 12 - 2 children ages 1 and 2, large phase-in boost +- name: Case 12, 2 children ages 1 and 2, large phase-in boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -332,7 +332,7 @@ parent: age: 28 is_tax_unit_dependent: false - employment_income: 3000 + employment_income: 3_000 child1: age: 1 is_tax_unit_dependent: true @@ -351,9 +351,9 @@ # Phase-in rate: 100.14%, Phased-in = $3,000 * 100.14% = $3,004.20 eitc: 3004 -- name: Case 13 - Single parent, higher income, benefits from increased max +- name: Case 13, Single parent, higher income, benefits from increased max. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -361,7 +361,7 @@ parent: age: 28 is_tax_unit_dependent: false - employment_income: 15000 + employment_income: 15_000 child: age: 2 is_tax_unit_dependent: true @@ -383,9 +383,9 @@ # Mixed young/older children scenarios -- name: Case 14 - 2 children, only 1 young (age 2 and age 7) +- name: Case 14, 2 children, only 1 young (age 2 and age 7). period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -412,9 +412,9 @@ # 2 children baseline: 21.06%, bonus: 1 * 5% = 5%, total = 26.06% eitc_phase_out_rate: 0.2606 -- name: Case 15 - 3 children, only 1 young (ages 1, 8, 10) +- name: Case 15, 3 children, only 1 young (ages 1, 8, 10). period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -446,9 +446,9 @@ # eitc_young_child_count variable tests -- name: Case 16 - Verify eitc_young_child_count for 2 young children +- name: Case 16, Verify eitc_young_child_count for 2 young children. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -473,9 +473,9 @@ eitc_young_child_count: 2 eitc_child_count: 2 -- name: Case 17 - Verify eitc_young_child_count for mixed ages +- name: Case 17, Verify eitc_young_child_count for mixed ages. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -503,9 +503,9 @@ eitc_young_child_count: 1 eitc_child_count: 3 -- name: Case 18 - Verify eitc_young_child_count is 0 when all children are 4+ +- name: Case 18, Verify eitc_young_child_count is 0 when all children are 4+. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -532,9 +532,9 @@ # Filing status variations -- name: Case 19 - Head of Household, 1 child age 1, bonus applies +- name: Case 19, Head of Household, 1 child age 1, bonus applies. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -558,9 +558,9 @@ # Newborn and infant edge cases -- name: Case 20 - Newborn (age 0), bonus applies +- name: Case 20, Newborn (age 0), bonus applies. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -582,9 +582,9 @@ eitc_phase_in_rate: 0.7624 eitc_phase_out_rate: 0.2098 -- name: Case 21 - Multiple infants (twins age 0), both count +- name: Case 21, Multiple infants (twins age 0), both count. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -610,9 +610,9 @@ eitc_phase_in_rate: 1.0014 eitc_phase_out_rate: 0.3106 -- name: Case 22 - Triplets (age 1), all count but capped at 3 +- name: Case 22, Triplets (age 1), all count but capped at 3. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -646,9 +646,9 @@ # State EITC impact tests (NY) -- name: Case 23 - NY State EITC, 1 child age 2, benefits from federal EITC boost +- name: Case 23, NY State EITC, 1 child age 2, benefits from federal EITC boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -656,7 +656,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 2 is_tax_unit_dependent: true @@ -672,9 +672,9 @@ # Federal EITC = $3,812 (phased-in at 76.24%) eitc: 3812 -- name: Case 24 - NY State EITC, 1 child age 5, no reform boost +- name: Case 24, NY State EITC, 1 child age 5, no reform boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -682,7 +682,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 5 is_tax_unit_dependent: true @@ -700,9 +700,9 @@ # California state tests -- name: Case 25 - CA resident, 1 child age 2, federal EITC boost +- name: Case 25, CA resident, 1 child age 2, federal EITC boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -710,7 +710,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 2 is_tax_unit_dependent: true @@ -727,9 +727,9 @@ # 4 children scenarios -- name: Case 26 - 4 children (ages 0, 3, 6, 9), 2 young +- name: Case 26, 4 children (ages 0, 3, 6, 9), 2 young. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -766,9 +766,9 @@ # Comparison of reform ON vs OFF for same family -- name: Case 27 - Baseline comparison (reform OFF), 1 child age 2, $5000 income +- name: Case 27, Baseline comparison (reform OFF), 1 child age 2, $5000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -776,7 +776,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 2 is_tax_unit_dependent: true @@ -792,9 +792,9 @@ # Baseline: $5,000 * 34% = $1,700 eitc: 1700 -- name: Case 28 - Reform comparison (reform ON), 1 child age 2, $5000 income +- name: Case 28, Reform comparison (reform ON), 1 child age 2, $5000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -802,7 +802,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 2 is_tax_unit_dependent: true @@ -825,9 +825,9 @@ # 1 CHILD SCENARIOS - Baseline max $4,427 -- name: Case 29 - 1 child age 2, $2000 income, reform doubles EITC +- name: Case 29, 1 child age 2, $2000 income, reform doubles EITC. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -835,7 +835,7 @@ parent: age: 28 is_tax_unit_dependent: false - employment_income: 2000 + employment_income: 2_000 child: age: 2 is_tax_unit_dependent: true @@ -852,9 +852,9 @@ # Reform: $2,000 * 76.24% = $1,524.80 (+$845, +124%) eitc: 1525 -- name: Case 30 - 1 child age 2, $8000 income, both rate and max increase +- name: Case 30, 1 child age 2, $8000 income, both rate and max increase. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -862,7 +862,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 8000 + employment_income: 8_000 child: age: 2 is_tax_unit_dependent: true @@ -881,9 +881,9 @@ # EITC = $6,099 (vs baseline $2,720, +$3,379, +124%) eitc: 6099 -- name: Case 31 - 1 child age 2 vs age 5 comparison (reform OFF baseline) +- name: Case 31, 1 child age 2 vs age 5 comparison (reform OFF baseline). period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -891,7 +891,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 8000 + employment_income: 8_000 child: age: 2 is_tax_unit_dependent: true @@ -909,9 +909,9 @@ # 2 CHILDREN SCENARIOS - Baseline max $7,316 -- name: Case 32 - 2 children ages 1 and 2, $3000 income, massive boost +- name: Case 32, 2 children ages 1 and 2, $3000 income, massive boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -919,7 +919,7 @@ parent: age: 28 is_tax_unit_dependent: false - employment_income: 3000 + employment_income: 3_000 child1: age: 1 is_tax_unit_dependent: true @@ -939,9 +939,9 @@ # Reform: $3,000 * 100.14% = $3,004 (+$1,804, +150%) eitc: 3004 -- name: Case 33 - 2 children ages 1 and 2, $5000 income +- name: Case 33, 2 children ages 1 and 2, $5000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -949,7 +949,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child1: age: 1 is_tax_unit_dependent: true @@ -969,9 +969,9 @@ # Reform: $5,000 * 100.14% = $5,007 (+$3,007, +150%) eitc: 5007 -- name: Case 34 - 2 children ages 1 and 2, $10000 income, both rate and max increase +- name: Case 34, 2 children ages 1 and 2, $10000 income, both rate and max increase. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -979,7 +979,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 10000 + employment_income: 10_000 child1: age: 1 is_tax_unit_dependent: true @@ -1001,9 +1001,9 @@ # EITC = $10,014 (vs baseline $4,000, +$6,014, +150%) eitc: 10014 -- name: Case 35 - 2 children baseline (reform OFF) for comparison +- name: Case 35, 2 children baseline (reform OFF) for comparison. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1011,7 +1011,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 10000 + employment_income: 10_000 child1: age: 1 is_tax_unit_dependent: true @@ -1032,9 +1032,9 @@ # 3+ CHILDREN SCENARIOS - Baseline max $8,231 -- name: Case 36 - 3 children ages 0, 1, 2, $4000 income, huge boost +- name: Case 36, 3 children ages 0, 1, 2, $4000 income, huge boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1042,7 +1042,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 4000 + employment_income: 4_000 child1: age: 0 is_tax_unit_dependent: true @@ -1065,9 +1065,9 @@ # Reform: $4,000 * 135.21% = $5,408 (+$3,608, +200%) eitc: 5408 -- name: Case 37 - 3 children ages 0, 1, 2, $7000 income, both rate and max increase +- name: Case 37, 3 children ages 0, 1, 2, $7000 income, both rate and max increase. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1075,7 +1075,7 @@ parent: age: 32 is_tax_unit_dependent: false - employment_income: 7000 + employment_income: 7_000 child1: age: 0 is_tax_unit_dependent: true @@ -1095,14 +1095,14 @@ state_code: TX output: # Baseline: $7,000 * 45% = $3,150 - # Reform: new_max = $8,231 × (135.21%/45%) = $24,736 - # Phased-in = $7,000 * 135.21% = $9,465 < new_max $24,736 + # Reform: new_max = $8,231 × (135.21%/45%) = $24,731 + # Phased-in = $7,000 * 135.21% = $9,465 < new_max $24,731 # EITC = $9,465 (vs baseline $3,150, +$6,315, +200%) eitc: 9465 -- name: Case 38 - 3 children baseline (reform OFF) for comparison +- name: Case 38, 3 children baseline (reform OFF) for comparison. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1110,7 +1110,7 @@ parent: age: 32 is_tax_unit_dependent: false - employment_income: 7000 + employment_income: 7_000 child1: age: 0 is_tax_unit_dependent: true @@ -1134,9 +1134,9 @@ # JOINT FILER SCENARIOS -- name: Case 39 - Joint filers, 2 children ages 1 and 3, $8000 combined income +- name: Case 39, Joint filers, 2 children ages 1 and 3, $8000 combined income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1144,11 +1144,11 @@ parent1: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 parent2: age: 28 is_tax_unit_dependent: false - employment_income: 3000 + employment_income: 3_000 child1: age: 1 is_tax_unit_dependent: true @@ -1171,9 +1171,9 @@ # EITC = $8,011 (vs baseline $3,200, +$4,811, +150%) eitc: 8011 -- name: Case 40 - Joint filers baseline (reform OFF) for comparison +- name: Case 40, Joint filers baseline (reform OFF) for comparison. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1181,11 +1181,11 @@ parent1: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 parent2: age: 28 is_tax_unit_dependent: false - employment_income: 3000 + employment_income: 3_000 child1: age: 1 is_tax_unit_dependent: true @@ -1206,9 +1206,9 @@ # MIXED YOUNG/OLDER CHILDREN - Partial boost -- name: Case 41 - 2 children (1 young, 1 older), partial boost +- name: Case 41, 2 children (1 young, 1 older), partial boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1216,7 +1216,7 @@ parent: age: 35 is_tax_unit_dependent: false - employment_income: 6000 + employment_income: 6_000 child1: age: 2 is_tax_unit_dependent: true @@ -1237,9 +1237,9 @@ # Reform: $6,000 * 70.07% = $4,204 (+$1,804, +75%) eitc: 4204 -- name: Case 42 - 3 children (2 young, 1 older), partial boost +- name: Case 42, 3 children (2 young, 1 older), partial boost. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1247,7 +1247,7 @@ parent: age: 38 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child1: age: 1 is_tax_unit_dependent: true @@ -1273,9 +1273,9 @@ # SUMMARY COMPARISON TESTS - Show the dollar increase clearly -- name: Case 43 - Summary test, 1 young child, $5000 income, reform ON +- name: Case 43, Summary test, 1 young child, $5000 income, reform ON. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1283,7 +1283,7 @@ parent: age: 28 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child: age: 2 is_tax_unit_dependent: true @@ -1301,9 +1301,9 @@ eitc: 3812 eitc_phase_in_rate: 0.7624 -- name: Case 44 - Summary test, 2 young children, $5000 income, reform ON +- name: Case 44, Summary test, 2 young children, $5000 income, reform ON. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1311,7 +1311,7 @@ parent: age: 28 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child1: age: 1 is_tax_unit_dependent: true @@ -1332,9 +1332,9 @@ eitc: 5007 eitc_phase_in_rate: 1.0014 -- name: Case 45 - Summary test, 3 young children, $5000 income, reform ON +- name: Case 45, Summary test, 3 young children, $5000 income, reform ON. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1342,7 +1342,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 5000 + employment_income: 5_000 child1: age: 0 is_tax_unit_dependent: true @@ -1371,9 +1371,9 @@ # Tests at exact phase-out threshold where EITC should be at maximum # ============================================================================ -- name: Case 46 - Phase-out boundary, 1 child age 2, income at phase-out start +- name: Case 46, Phase-out boundary, 1 child age 2, income at phase-out start. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1381,7 +1381,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 23890 + employment_income: 23_890 child: age: 2 is_tax_unit_dependent: true @@ -1400,9 +1400,9 @@ eitc_phase_in_rate: 0.7624 eitc_phase_out_rate: 0.2098 -- name: Case 47 - Phase-out boundary, 2 children ages 1 and 2, income at phase-out start +- name: Case 47, Phase-out boundary, 2 children ages 1 and 2, income at phase-out start. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1410,7 +1410,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 23890 + employment_income: 23_890 child1: age: 1 is_tax_unit_dependent: true @@ -1432,9 +1432,9 @@ eitc_phase_in_rate: 1.0014 eitc_phase_out_rate: 0.3106 -- name: Case 48 - Phase-out boundary, 3 children ages 0, 1, 2, income at phase-out start +- name: Case 48, Phase-out boundary, 3 children ages 0, 1, 2, income at phase-out start. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1442,7 +1442,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 23890 + employment_income: 23_890 child1: age: 0 is_tax_unit_dependent: true @@ -1472,9 +1472,9 @@ # Tests with income above phase-out start to verify increased phase-out rate # ============================================================================ -- name: Case 49 - Phase-out region, 1 child age 2, $30000 income +- name: Case 49, Phase-out region, 1 child age 2, $30000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1482,7 +1482,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 30000 + employment_income: 30_000 child: age: 2 is_tax_unit_dependent: true @@ -1502,9 +1502,9 @@ eitc_phase_in_rate: 0.7624 eitc_phase_out_rate: 0.2098 -- name: Case 50 - Phase-out region baseline (reform OFF), 1 child, $30000 income +- name: Case 50, Phase-out region baseline (reform OFF), 1 child, $30000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1512,7 +1512,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 30000 + employment_income: 30_000 child: age: 2 is_tax_unit_dependent: true @@ -1531,9 +1531,9 @@ eitc_phase_in_rate: 0.34 eitc_phase_out_rate: 0.1598 -- name: Case 51 - Phase-out region, 1 child age 2, $40000 income +- name: Case 51, Phase-out region, 1 child age 2, $40000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1541,7 +1541,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 40000 + employment_income: 40_000 child: age: 2 is_tax_unit_dependent: true @@ -1560,9 +1560,9 @@ eitc_phase_in_rate: 0.7624 eitc_phase_out_rate: 0.2098 -- name: Case 52 - Phase-out region, 2 children ages 1 and 2, $35000 income +- name: Case 52, Phase-out region, 2 children ages 1 and 2, $35000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1570,7 +1570,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 35000 + employment_income: 35_000 child1: age: 1 is_tax_unit_dependent: true @@ -1592,9 +1592,9 @@ eitc_phase_in_rate: 1.0014 eitc_phase_out_rate: 0.3106 -- name: Case 53 - Phase-out region, 2 children ages 1 and 2, $50000 income +- name: Case 53, Phase-out region, 2 children ages 1 and 2, $50000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1602,7 +1602,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 50000 + employment_income: 50_000 child1: age: 1 is_tax_unit_dependent: true @@ -1624,9 +1624,9 @@ eitc_phase_in_rate: 1.0014 eitc_phase_out_rate: 0.3106 -- name: Case 54 - Phase-out region, 3 children ages 0, 1, 2, $35000 income +- name: Case 54, Phase-out region, 3 children ages 0, 1, 2, $35000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1634,7 +1634,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 35000 + employment_income: 35_000 child1: age: 0 is_tax_unit_dependent: true @@ -1659,7 +1659,7 @@ eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 -- name: Case 55 - Phase-out region, 3 children ages 0, 1, 2, $50000 income +- name: Case 55, Phase-out region, 3 children ages 0, 1, 2, $50000 income. period: 2026 absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act @@ -1669,7 +1669,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 50000 + employment_income: 50_000 child1: age: 0 is_tax_unit_dependent: true @@ -1694,9 +1694,9 @@ eitc_phase_in_rate: 1.3521 eitc_phase_out_rate: 0.3606 -- name: Case 56 - Phase-out region baseline (reform OFF), 3 children, $35000 income +- name: Case 56, Phase-out region baseline (reform OFF), 3 children, $35000 income. period: 2026 - absolute_error_margin: 1 + absolute_error_margin: 0.1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1704,7 +1704,7 @@ parent: age: 30 is_tax_unit_dependent: false - employment_income: 35000 + employment_income: 35_000 child1: age: 0 is_tax_unit_dependent: true From bd21e8e6936b2964e6d3e087f012d8e00edc6459 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Mon, 6 Apr 2026 11:02:48 -0400 Subject: [PATCH 10/10] Fix test margins: use 1 for dollar amounts, 0.1 for rates EITC dollar-amount tests have floating-point rounding up to ~$0.5, so absolute_error_margin must be 1. Rate-only tests can stay at 0.1 since rates are exact parameter lookups. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../working_parents_tax_relief_act.yaml | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml index 9f5fd2c9560..ddf6a200310 100644 --- a/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml +++ b/policyengine_us/tests/policy/contrib/congress/mcdonald_rivet/working_parents_tax_relief_act.yaml @@ -272,7 +272,7 @@ - name: Case 10, Low earner, 1 child age 2, in phase-in region, reform increases EITC. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -298,7 +298,7 @@ - name: Case 11, Low earner, 1 child age 5 (no bonus), baseline EITC. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -324,7 +324,7 @@ - name: Case 12, 2 children ages 1 and 2, large phase-in boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -353,7 +353,7 @@ - name: Case 13, Single parent, higher income, benefits from increased max. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -648,7 +648,7 @@ - name: Case 23, NY State EITC, 1 child age 2, benefits from federal EITC boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -674,7 +674,7 @@ - name: Case 24, NY State EITC, 1 child age 5, no reform boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -702,7 +702,7 @@ - name: Case 25, CA resident, 1 child age 2, federal EITC boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -768,7 +768,7 @@ - name: Case 27, Baseline comparison (reform OFF), 1 child age 2, $5000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -794,7 +794,7 @@ - name: Case 28, Reform comparison (reform ON), 1 child age 2, $5000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -827,7 +827,7 @@ - name: Case 29, 1 child age 2, $2000 income, reform doubles EITC. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -854,7 +854,7 @@ - name: Case 30, 1 child age 2, $8000 income, both rate and max increase. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -883,7 +883,7 @@ - name: Case 31, 1 child age 2 vs age 5 comparison (reform OFF baseline). period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -911,7 +911,7 @@ - name: Case 32, 2 children ages 1 and 2, $3000 income, massive boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -941,7 +941,7 @@ - name: Case 33, 2 children ages 1 and 2, $5000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -971,7 +971,7 @@ - name: Case 34, 2 children ages 1 and 2, $10000 income, both rate and max increase. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1003,7 +1003,7 @@ - name: Case 35, 2 children baseline (reform OFF) for comparison. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1034,7 +1034,7 @@ - name: Case 36, 3 children ages 0, 1, 2, $4000 income, huge boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1067,7 +1067,7 @@ - name: Case 37, 3 children ages 0, 1, 2, $7000 income, both rate and max increase. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1102,7 +1102,7 @@ - name: Case 38, 3 children baseline (reform OFF) for comparison. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1136,7 +1136,7 @@ - name: Case 39, Joint filers, 2 children ages 1 and 3, $8000 combined income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1173,7 +1173,7 @@ - name: Case 40, Joint filers baseline (reform OFF) for comparison. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1208,7 +1208,7 @@ - name: Case 41, 2 children (1 young, 1 older), partial boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1239,7 +1239,7 @@ - name: Case 42, 3 children (2 young, 1 older), partial boost. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1275,7 +1275,7 @@ - name: Case 43, Summary test, 1 young child, $5000 income, reform ON. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1303,7 +1303,7 @@ - name: Case 44, Summary test, 2 young children, $5000 income, reform ON. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1334,7 +1334,7 @@ - name: Case 45, Summary test, 3 young children, $5000 income, reform ON. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1373,7 +1373,7 @@ - name: Case 46, Phase-out boundary, 1 child age 2, income at phase-out start. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1402,7 +1402,7 @@ - name: Case 47, Phase-out boundary, 2 children ages 1 and 2, income at phase-out start. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1434,7 +1434,7 @@ - name: Case 48, Phase-out boundary, 3 children ages 0, 1, 2, income at phase-out start. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1474,7 +1474,7 @@ - name: Case 49, Phase-out region, 1 child age 2, $30000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1504,7 +1504,7 @@ - name: Case 50, Phase-out region baseline (reform OFF), 1 child, $30000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false @@ -1533,7 +1533,7 @@ - name: Case 51, Phase-out region, 1 child age 2, $40000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1562,7 +1562,7 @@ - name: Case 52, Phase-out region, 2 children ages 1 and 2, $35000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1594,7 +1594,7 @@ - name: Case 53, Phase-out region, 2 children ages 1 and 2, $50000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1626,7 +1626,7 @@ - name: Case 54, Phase-out region, 3 children ages 0, 1, 2, $35000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: true @@ -1696,7 +1696,7 @@ - name: Case 56, Phase-out region baseline (reform OFF), 3 children, $35000 income. period: 2026 - absolute_error_margin: 0.1 + absolute_error_margin: 1 reforms: policyengine_us.reforms.congress.mcdonald_rivet.working_parents_tax_relief_act input: gov.contrib.congress.mcdonald_rivet.working_parents_tax_relief_act.in_effect: false