policyengine-us 1.433.0__py3-none-any.whl → 1.435.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. policyengine_us/parameters/gov/contrib/states/ri/ctc/young_child_boost/age_limit.yaml +9 -0
  2. policyengine_us/parameters/gov/contrib/states/ri/ctc/young_child_boost/amount.yaml +9 -0
  3. policyengine_us/reforms/congress/tlaib/__init__.py +4 -3
  4. policyengine_us/reforms/congress/tlaib/economic_dignity_for_all_agenda/__init__.py +9 -0
  5. policyengine_us/reforms/congress/tlaib/economic_dignity_for_all_agenda/edaa_end_child_poverty_act.py +237 -0
  6. policyengine_us/reforms/reforms.py +5 -4
  7. policyengine_us/reforms/states/ri/ctc/ri_ctc_reform.py +32 -1
  8. policyengine_us/tests/policy/contrib/congress/tlaib/economic_dignity_for_all_agenda/edaa_end_child_poverty_act.yaml +198 -0
  9. policyengine_us/tests/policy/contrib/states/ri/ctc_reform_test.yaml +144 -0
  10. {policyengine_us-1.433.0.dist-info → policyengine_us-1.435.0.dist-info}/METADATA +1 -1
  11. {policyengine_us-1.433.0.dist-info → policyengine_us-1.435.0.dist-info}/RECORD +23 -34
  12. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/age_limit.yaml +0 -8
  13. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/amount.yaml +0 -13
  14. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/in_effect.yaml +0 -8
  15. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/min_birth_year.yaml +0 -8
  16. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/amount.yaml +0 -13
  17. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/in_effect.yaml +0 -8
  18. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/max_age.yaml +0 -8
  19. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/min_age.yaml +0 -8
  20. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/tax/rate.yaml +0 -8
  21. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/tax/threshold.yaml +0 -24
  22. policyengine_us/reforms/congress/tlaib/income_security_package/__init__.py +0 -17
  23. policyengine_us/reforms/congress/tlaib/income_security_package/income_security_package.py +0 -453
  24. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/integration.yaml +0 -154
  25. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/state_integration.yaml +0 -110
  26. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/test_individual_acts.yaml +0 -149
  27. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/unit_tests.yaml +0 -272
  28. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/adult_dependent_credit/amount.yaml +0 -0
  29. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/adult_dependent_credit/min_age.yaml +0 -0
  30. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/child_benefit/age_limit.yaml +0 -0
  31. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/filer_credit/amount.yaml +0 -0
  32. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/filer_credit/eligibility/max_age.yaml +0 -0
  33. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/filer_credit/eligibility/min_age.yaml +0 -0
  34. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/filer_credit/phase_out/rate.yaml +0 -0
  35. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/filer_credit/phase_out/start.yaml +0 -0
  36. /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/in_effect.yaml +0 -0
  37. {policyengine_us-1.433.0.dist-info → policyengine_us-1.435.0.dist-info}/WHEEL +0 -0
  38. {policyengine_us-1.433.0.dist-info → policyengine_us-1.435.0.dist-info}/entry_points.txt +0 -0
  39. {policyengine_us-1.433.0.dist-info → policyengine_us-1.435.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,9 @@
1
+ description: Rhode Island limits the Child Tax Credit young child boost to children under this age.
2
+
3
+ values:
4
+ 2025-01-01: 6
5
+
6
+ metadata:
7
+ label: Rhode Island Child Tax Credit young child boost age limit
8
+ period: year
9
+ unit: year
@@ -0,0 +1,9 @@
1
+ description: Rhode Island provides this additional boost to the Child Tax Credit per eligible young child.
2
+
3
+ values:
4
+ 2025-01-01: 0
5
+
6
+ metadata:
7
+ label: Rhode Island Child Tax Credit young child boost amount
8
+ period: year
9
+ unit: currency-USD
@@ -1,7 +1,8 @@
1
1
  from .end_child_poverty_act import (
2
2
  create_end_child_poverty_act_reform,
3
+ end_child_poverty_act,
3
4
  )
4
- from .income_security_package import (
5
- income_security_package,
6
- create_income_security_package_reform,
5
+ from .economic_dignity_for_all_agenda import (
6
+ end_child_poverty_act as edaa_end_child_poverty_act,
7
+ create_end_child_poverty_act_reform as create_edaa_end_child_poverty_act_reform,
7
8
  )
@@ -0,0 +1,9 @@
1
+ from .edaa_end_child_poverty_act import (
2
+ end_child_poverty_act,
3
+ create_end_child_poverty_act_reform,
4
+ )
5
+
6
+ __all__ = [
7
+ "end_child_poverty_act",
8
+ "create_end_child_poverty_act_reform",
9
+ ]
@@ -0,0 +1,237 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ def create_ecpa_only() -> Reform:
5
+ class ecpa_child_benefit(Variable):
6
+ value_type = float
7
+ entity = Person
8
+ definition_period = YEAR
9
+ label = "End Child Poverty Act child benefit"
10
+ unit = USD
11
+ documentation = (
12
+ "Universal child benefit under the End Child Poverty Act"
13
+ )
14
+ reference = "placeholder - bill not yet introduced"
15
+
16
+ def formula(person, period, parameters):
17
+ p = parameters(
18
+ period
19
+ ).gov.contrib.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
20
+
21
+ age = person("age", period)
22
+ is_eligible = age < p.child_benefit.age_limit
23
+
24
+ # Use FPG additional_person amount (CONTIGUOUS_US for all states), rounded to nearest $10
25
+ p_fpg = parameters(period).gov.hhs.fpg
26
+ fpg_amount = p_fpg.additional_person.CONTIGUOUS_US
27
+ amount = round(fpg_amount / 10) * 10
28
+
29
+ return is_eligible * amount
30
+
31
+ class ecpa_adult_dependent_credit(Variable):
32
+ value_type = float
33
+ entity = Person
34
+ definition_period = YEAR
35
+ label = "End Child Poverty Act adult dependent credit"
36
+ unit = USD
37
+ documentation = (
38
+ "Credit for adult dependents under the End Child Poverty Act"
39
+ )
40
+ reference = "placeholder - bill not yet introduced"
41
+
42
+ def formula(person, period, parameters):
43
+ p = parameters(
44
+ period
45
+ ).gov.contrib.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
46
+
47
+ age = person("age", period)
48
+ is_dependent = person("is_tax_unit_dependent", period)
49
+
50
+ is_eligible = (
51
+ age >= p.adult_dependent_credit.min_age
52
+ ) & is_dependent
53
+
54
+ return is_eligible * p.adult_dependent_credit.amount
55
+
56
+ class ecpa_filer_credit(Variable):
57
+ value_type = float
58
+ entity = TaxUnit
59
+ definition_period = YEAR
60
+ label = "End Child Poverty Act filer credit"
61
+ unit = USD
62
+ documentation = "Filer credit under the End Child Poverty Act for eligible tax filers"
63
+ reference = "placeholder - bill not yet introduced"
64
+
65
+ def formula(tax_unit, period, parameters):
66
+ p = parameters(
67
+ period
68
+ ).gov.contrib.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
69
+
70
+ person = tax_unit.members
71
+ age = person("age", period)
72
+
73
+ is_head_or_spouse = person("is_tax_unit_head_or_spouse", period)
74
+
75
+ is_eligible_age = (age >= p.filer_credit.eligibility.min_age) & (
76
+ age < p.filer_credit.eligibility.max_age
77
+ )
78
+ is_eligible_filer = is_head_or_spouse & is_eligible_age
79
+
80
+ has_eligible_filer = tax_unit.any(is_eligible_filer)
81
+
82
+ filing_status = tax_unit("filing_status", period)
83
+ amount = p.filer_credit.amount[filing_status]
84
+
85
+ agi = tax_unit("adjusted_gross_income", period)
86
+ excess_agi = max_(
87
+ agi - p.filer_credit.phase_out.start[filing_status], 0
88
+ )
89
+ phase_out = excess_agi * p.filer_credit.phase_out.rate
90
+
91
+ phased_out_amount = max_(amount - phase_out, 0)
92
+
93
+ return has_eligible_filer * phased_out_amount
94
+
95
+ class household_benefits(Variable):
96
+ value_type = float
97
+ entity = Household
98
+ label = "benefits"
99
+ unit = USD
100
+ definition_period = YEAR
101
+
102
+ def formula(household, period, parameters):
103
+ # Start with baseline benefits from parameters
104
+ BENEFITS = list(
105
+ parameters(period).gov.household.household_benefits
106
+ )
107
+
108
+ # Add ECPA child benefit
109
+ BENEFITS.append("ecpa_child_benefit")
110
+
111
+ return add(household, period, BENEFITS)
112
+
113
+ class spm_unit_benefits(Variable):
114
+ value_type = float
115
+ entity = SPMUnit
116
+ label = "Benefits"
117
+ definition_period = YEAR
118
+ unit = USD
119
+
120
+ def formula(spm_unit, period, parameters):
121
+ BENEFITS = [
122
+ "social_security",
123
+ "ssi",
124
+ "ma_state_supplement",
125
+ "ca_cvrp",
126
+ "co_ccap_subsidy",
127
+ "co_state_supplement",
128
+ "co_oap",
129
+ "snap",
130
+ "wic",
131
+ "free_school_meals",
132
+ "reduced_price_school_meals",
133
+ "spm_unit_broadband_subsidy",
134
+ "spm_unit_energy_subsidy",
135
+ "tanf",
136
+ "high_efficiency_electric_home_rebate",
137
+ "residential_efficiency_electrification_rebate",
138
+ "unemployment_compensation",
139
+ "ak_energy_relief",
140
+ "basic_income",
141
+ "ny_drive_clean_rebate",
142
+ ]
143
+
144
+ # Add ECPA child benefit
145
+ BENEFITS.append("ecpa_child_benefit")
146
+
147
+ if parameters(period).gov.contrib.ubi_center.flat_tax.deduct_ptc:
148
+ BENEFITS.append("aca_ptc")
149
+ if not parameters(period).gov.hud.abolition:
150
+ BENEFITS.append("spm_unit_capped_housing_subsidy")
151
+
152
+ return add(spm_unit, period, BENEFITS)
153
+
154
+ class income_tax_refundable_credits(Variable):
155
+ value_type = float
156
+ entity = TaxUnit
157
+ definition_period = YEAR
158
+ label = "federal refundable income tax credits"
159
+ unit = USD
160
+
161
+ def formula(tax_unit, period, parameters):
162
+ # Get standard refundable credits, excluding EITC and refundable CTC (ECPA replaces them)
163
+ standard_credits = parameters(period).gov.irs.credits.refundable
164
+
165
+ CREDITS = [
166
+ c
167
+ for c in standard_credits
168
+ if c not in ["eitc", "refundable_ctc"]
169
+ ]
170
+
171
+ base_credits = add(tax_unit, period, CREDITS) if CREDITS else 0
172
+
173
+ # Add ECPA credits
174
+ ecpa_filer = tax_unit("ecpa_filer_credit", period)
175
+ ecpa_adult_dep = add(
176
+ tax_unit, period, ["ecpa_adult_dependent_credit"]
177
+ )
178
+ return base_credits + ecpa_filer + ecpa_adult_dep
179
+
180
+ class income_tax_non_refundable_credits(Variable):
181
+ value_type = float
182
+ entity = TaxUnit
183
+ definition_period = YEAR
184
+ label = "federal non-refundable income tax credits"
185
+ unit = USD
186
+
187
+ def formula(tax_unit, period, parameters):
188
+ # Get the base list of non-refundable credits from parameters
189
+ p = parameters(period).gov.irs.credits
190
+ base_credits = list(p.non_refundable)
191
+
192
+ # ECPA removes non_refundable_ctc from the list
193
+ CREDITS = [c for c in base_credits if c != "non_refundable_ctc"]
194
+
195
+ return add(tax_unit, period, CREDITS)
196
+
197
+ class reform(Reform):
198
+ def apply(self):
199
+ # Update only ECPA variables
200
+ self.update_variable(ecpa_child_benefit)
201
+ self.update_variable(ecpa_adult_dependent_credit)
202
+ self.update_variable(ecpa_filer_credit)
203
+ self.update_variable(household_benefits)
204
+ self.update_variable(spm_unit_benefits)
205
+ self.update_variable(income_tax_refundable_credits)
206
+ self.update_variable(income_tax_non_refundable_credits)
207
+
208
+ return reform
209
+
210
+
211
+ end_child_poverty_act = create_ecpa_only()
212
+
213
+
214
+ def create_end_child_poverty_act_reform(
215
+ parameters, period, bypass: bool = False
216
+ ):
217
+ """Auto-application function for structural reforms."""
218
+ if bypass:
219
+ return create_ecpa_only()
220
+
221
+ from policyengine_core.periods import period as period_
222
+
223
+ p = parameters.gov.contrib.congress.tlaib.economic_dignity_for_all_agenda
224
+
225
+ reform_active = False
226
+ current_period = period_(period)
227
+
228
+ for i in range(5):
229
+ if p(current_period).end_child_poverty_act.in_effect:
230
+ reform_active = True
231
+ break
232
+ current_period = current_period.offset(1, "year")
233
+
234
+ if reform_active:
235
+ return create_ecpa_only()
236
+ else:
237
+ return None
@@ -28,8 +28,9 @@ from .harris.rent_relief_act.rent_relief_tax_credit import (
28
28
  )
29
29
  from .congress.tlaib import (
30
30
  create_end_child_poverty_act_reform,
31
- income_security_package,
32
- create_income_security_package_reform,
31
+ )
32
+ from .congress.tlaib.economic_dignity_for_all_agenda import (
33
+ create_end_child_poverty_act_reform as create_edaa_end_child_poverty_act_reform,
33
34
  )
34
35
  from .congress.tlaib.boost import (
35
36
  create_boost_middle_class_tax_credit_reform,
@@ -170,7 +171,7 @@ def create_structural_reforms_from_parameters(parameters, period):
170
171
  end_child_poverty_act = create_end_child_poverty_act_reform(
171
172
  parameters, period
172
173
  )
173
- income_security_package_reform = create_income_security_package_reform(
174
+ edaa_end_child_poverty_act = create_edaa_end_child_poverty_act_reform(
174
175
  parameters, period
175
176
  )
176
177
  boost_middle_class_tax_credit = (
@@ -288,7 +289,7 @@ def create_structural_reforms_from_parameters(parameters, period):
288
289
  middle_class_tax_credit,
289
290
  rent_relief_tax_credit,
290
291
  end_child_poverty_act,
291
- income_security_package_reform,
292
+ edaa_end_child_poverty_act,
292
293
  boost_middle_class_tax_credit,
293
294
  mn_walz_hf1938,
294
295
  or_rebate_state_tax_exempt,
@@ -24,6 +24,30 @@ def create_ri_ctc() -> Reform:
24
24
  eligible = is_dependent & meets_age
25
25
  return tax_unit.sum(eligible)
26
26
 
27
+ class ri_ctc_young_child_boost(Variable):
28
+ value_type = float
29
+ entity = TaxUnit
30
+ label = "Rhode Island CTC young child boost"
31
+ unit = USD
32
+ definition_period = YEAR
33
+ defined_for = StateCode.RI
34
+
35
+ def formula(tax_unit, period, parameters):
36
+ p = parameters(period).gov.contrib.states.ri.ctc
37
+
38
+ person = tax_unit.members
39
+ age = person("age", period)
40
+ is_dependent = person("is_tax_unit_dependent", period)
41
+
42
+ # Check both general CTC eligibility and young child age limit
43
+ meets_age = age < p.age_limit
44
+ meets_young_child_age = age < p.young_child_boost.age_limit
45
+
46
+ eligible_young_children = tax_unit.sum(
47
+ is_dependent & meets_age & meets_young_child_age
48
+ )
49
+ return eligible_young_children * p.young_child_boost.amount
50
+
27
51
  class ri_ctc_maximum(Variable):
28
52
  value_type = float
29
53
  entity = TaxUnit
@@ -35,8 +59,14 @@ def create_ri_ctc() -> Reform:
35
59
  def formula(tax_unit, period, parameters):
36
60
  p = parameters(period).gov.contrib.states.ri.ctc
37
61
 
62
+ # Base credit for all eligible children
38
63
  eligible_children = tax_unit("ri_ctc_eligible_children", period)
39
- return eligible_children * p.amount
64
+ base_credit = eligible_children * p.amount
65
+
66
+ # Young child boost
67
+ young_child_boost = tax_unit("ri_ctc_young_child_boost", period)
68
+
69
+ return base_credit + young_child_boost
40
70
 
41
71
  class ri_ctc_phaseout(Variable):
42
72
  value_type = float
@@ -142,6 +172,7 @@ def create_ri_ctc() -> Reform:
142
172
  class reform(Reform):
143
173
  def apply(self):
144
174
  self.update_variable(ri_ctc_eligible_children)
175
+ self.update_variable(ri_ctc_young_child_boost)
145
176
  self.update_variable(ri_ctc_maximum)
146
177
  self.update_variable(ri_ctc_phaseout)
147
178
  self.update_variable(ri_total_ctc)
@@ -0,0 +1,198 @@
1
+ # End Child Poverty Act tests
2
+
3
+ - name: ECPA child benefit for eligible child
4
+ period: 2026
5
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
6
+ input:
7
+ people:
8
+ parent:
9
+ age: 30
10
+ child:
11
+ age: 5
12
+ tax_units:
13
+ tax_unit:
14
+ members: [parent, child]
15
+ filing_status: SINGLE
16
+ adjusted_gross_income: 20_000
17
+ households:
18
+ household:
19
+ members: [parent, child]
20
+ output:
21
+ ecpa_child_benefit: [0, 5_630]
22
+ ecpa_filer_credit: 700
23
+
24
+ - name: ECPA adult dependent credit
25
+ period: 2026
26
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
27
+ input:
28
+ people:
29
+ parent:
30
+ age: 45
31
+ adult_dependent:
32
+ age: 20
33
+ is_tax_unit_dependent: true
34
+ tax_units:
35
+ tax_unit:
36
+ members: [parent, adult_dependent]
37
+ filing_status: SINGLE
38
+ adjusted_gross_income: 15_000
39
+ output:
40
+ ecpa_adult_dependent_credit: [0, 700]
41
+ ecpa_filer_credit: 700
42
+
43
+ - name: ECPA filer credit with phase out
44
+ period: 2026
45
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
46
+ input:
47
+ people:
48
+ filer:
49
+ age: 40
50
+ tax_units:
51
+ tax_unit:
52
+ members: [filer]
53
+ filing_status: SINGLE
54
+ adjusted_gross_income: 24_000
55
+ output:
56
+ ecpa_filer_credit: 500 # 700 - (4,000 * 0.05)
57
+
58
+ - name: ECPA household with children and adult dependent
59
+ period: 2026
60
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
61
+ input:
62
+ people:
63
+ parent:
64
+ age: 45
65
+ child1:
66
+ age: 5
67
+ child2:
68
+ age: 10
69
+ adult_dependent:
70
+ age: 20
71
+ is_tax_unit_dependent: true
72
+ tax_units:
73
+ tax_unit:
74
+ members: [parent, child1, child2, adult_dependent]
75
+ filing_status: SINGLE
76
+ adjusted_gross_income: 30_000
77
+ output:
78
+ ecpa_child_benefit: [0, 5_630, 5_630, 0]
79
+ ecpa_adult_dependent_credit: [0, 0, 0, 700]
80
+ ecpa_filer_credit: 200 # 700 - (10,000 * 0.05)
81
+
82
+ - name: ECPA joint filers with children and adult dependent
83
+ period: 2026
84
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
85
+ input:
86
+ people:
87
+ parent1:
88
+ age: 40
89
+ parent2:
90
+ age: 38
91
+ child:
92
+ age: 8
93
+ adult_dependent:
94
+ age: 22
95
+ is_tax_unit_dependent: true
96
+ tax_units:
97
+ tax_unit:
98
+ members: [parent1, parent2, child, adult_dependent]
99
+ filing_status: JOINT
100
+ adjusted_gross_income: 45_000
101
+ output:
102
+ ecpa_child_benefit: [0, 0, 5_630, 0]
103
+ ecpa_adult_dependent_credit: [0, 0, 0, 700]
104
+ ecpa_filer_credit: 1_150 # 1,400 - (5,000 * 0.05)
105
+
106
+ - name: Oklahoma family - state credits reference federal calculations
107
+ period: 2026
108
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
109
+ absolute_error_margin: 1
110
+ input:
111
+ people:
112
+ parent1:
113
+ age: 35
114
+ employment_income: 30_000
115
+ parent2:
116
+ age: 33
117
+ employment_income: 20_000
118
+ newborn:
119
+ age: 0
120
+ birth_year: 2026
121
+ child:
122
+ age: 8
123
+ birth_year: 2018
124
+ adult_dependent:
125
+ age: 19
126
+ birth_year: 2007
127
+ is_full_time_student: true
128
+ tax_units:
129
+ tax_unit:
130
+ members: [parent1, parent2, newborn, child, adult_dependent]
131
+ filing_status: JOINT
132
+ households:
133
+ household:
134
+ members: [parent1, parent2, newborn, child, adult_dependent]
135
+ state_code: OK
136
+ output:
137
+ # Federal CTC/EITC calculated for state reference
138
+ ctc: 4_900
139
+ eitc: 4_244
140
+
141
+ # Oklahoma credits (5% of federal)
142
+ ok_child_care_child_tax_credit:
143
+ 2026: 245 # 5% of $4,900
144
+ ok_eitc:
145
+ 2026: 72.07
146
+
147
+ # ECPA benefits
148
+ ecpa_child_benefit:
149
+ 2026: [0, 0, 5_630, 5_630, 0]
150
+ ecpa_adult_dependent_credit:
151
+ 2026: [0, 0, 0, 0, 700]
152
+ ecpa_filer_credit:
153
+ 2026: 900 # $1,400 - ($50k - $40k) * 0.05
154
+
155
+ # Federal refundable credits exclude CTC/EITC
156
+ income_tax_refundable_credits:
157
+ 2026: 1_600 # ECPA filer ($900) + adult dependent ($700)
158
+
159
+ - name: Maine single parent - state EITC percentage of federal
160
+ period: 2026
161
+ reforms: policyengine_us.reforms.congress.tlaib.economic_dignity_for_all_agenda.end_child_poverty_act
162
+ absolute_error_margin: 1
163
+ input:
164
+ people:
165
+ parent:
166
+ age: 28
167
+ employment_income: 25_000
168
+ child1:
169
+ age: 3
170
+ birth_year: 2023
171
+ child2:
172
+ age: 10
173
+ birth_year: 2016
174
+ tax_units:
175
+ tax_unit:
176
+ members: [parent, child1, child2]
177
+ filing_status: HEAD_OF_HOUSEHOLD
178
+ households:
179
+ household:
180
+ members: [parent, child1, child2]
181
+ state_code: ME
182
+ output:
183
+ # Federal calculations
184
+ ctc: 4_400
185
+ eitc: 7_071
186
+
187
+ # Maine EITC is 25% of federal
188
+ me_eitc: 1_767
189
+
190
+ # ECPA benefits
191
+ ecpa_child_benefit:
192
+ 2026: [0, 5_630, 5_630]
193
+ ecpa_filer_credit:
194
+ 2026: 450 # $700 - ($25k - $20k) * 0.05
195
+
196
+ # Federal credits exclude EITC/CTC
197
+ income_tax_refundable_credits:
198
+ 2026: 450