policyengine-us 1.434.0__py3-none-any.whl → 1.435.1__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.
- policyengine_us/reforms/congress/tlaib/__init__.py +4 -3
- policyengine_us/reforms/congress/tlaib/economic_dignity_for_all_agenda/__init__.py +9 -0
- policyengine_us/reforms/congress/tlaib/economic_dignity_for_all_agenda/edaa_end_child_poverty_act.py +237 -0
- policyengine_us/reforms/reforms.py +5 -4
- policyengine_us/tests/policy/baseline/gov/ssa/ssi/integration_tests.yaml +150 -4
- policyengine_us/tests/policy/contrib/congress/tlaib/economic_dignity_for_all_agenda/edaa_end_child_poverty_act.yaml +198 -0
- policyengine_us/variables/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse/is_ssi_spousal_deeming_applies.py +41 -0
- policyengine_us/variables/gov/ssa/ssi/eligibility/income/deemed/from_ineligible_spouse/ssi_income_deemed_from_ineligible_spouse.py +20 -20
- policyengine_us/variables/gov/ssa/ssi/ssi.py +22 -1
- policyengine_us/variables/gov/ssa/ssi/ssi_amount_if_eligible.py +26 -4
- {policyengine_us-1.434.0.dist-info → policyengine_us-1.435.1.dist-info}/METADATA +1 -1
- {policyengine_us-1.434.0.dist-info → policyengine_us-1.435.1.dist-info}/RECORD +24 -36
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/age_limit.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/amount.yaml +0 -13
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/in_effect.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/min_birth_year.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/amount.yaml +0 -13
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/in_effect.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/max_age.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/min_age.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/tax/rate.yaml +0 -8
- policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/tax/threshold.yaml +0 -24
- policyengine_us/reforms/congress/tlaib/income_security_package/__init__.py +0 -17
- policyengine_us/reforms/congress/tlaib/income_security_package/income_security_package.py +0 -453
- policyengine_us/tests/policy/contrib/congress/tlaib/income_security/integration.yaml +0 -154
- policyengine_us/tests/policy/contrib/congress/tlaib/income_security/state_integration.yaml +0 -110
- policyengine_us/tests/policy/contrib/congress/tlaib/income_security/test_individual_acts.yaml +0 -149
- policyengine_us/tests/policy/contrib/congress/tlaib/income_security/unit_tests.yaml +0 -272
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /policyengine_us/parameters/gov/contrib/congress/tlaib/{income_security_package → economic_dignity_for_all_agenda}/end_child_poverty_act/in_effect.yaml +0 -0
- {policyengine_us-1.434.0.dist-info → policyengine_us-1.435.1.dist-info}/WHEEL +0 -0
- {policyengine_us-1.434.0.dist-info → policyengine_us-1.435.1.dist-info}/entry_points.txt +0 -0
- {policyengine_us-1.434.0.dist-info → policyengine_us-1.435.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,453 +0,0 @@
|
|
|
1
|
-
from policyengine_us.model_api import *
|
|
2
|
-
from policyengine_core.periods import period as period_
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
def create_income_security_package() -> Reform:
|
|
6
|
-
class baby_bonus_act_payment(Variable):
|
|
7
|
-
value_type = float
|
|
8
|
-
entity = Person
|
|
9
|
-
definition_period = YEAR
|
|
10
|
-
label = "Baby Bonus Act payment"
|
|
11
|
-
unit = USD
|
|
12
|
-
documentation = (
|
|
13
|
-
"One-time payment for newborns under the Baby Bonus Act"
|
|
14
|
-
)
|
|
15
|
-
reference = "placeholder - bill not yet introduced"
|
|
16
|
-
|
|
17
|
-
def formula(person, period, parameters):
|
|
18
|
-
p = parameters(
|
|
19
|
-
period
|
|
20
|
-
).gov.contrib.congress.tlaib.income_security_package.baby_bonus_act
|
|
21
|
-
|
|
22
|
-
if not p.in_effect:
|
|
23
|
-
return 0
|
|
24
|
-
|
|
25
|
-
# Baby bonus is for those born in 2026 and after, paid in their birth year
|
|
26
|
-
birth_year = person("birth_year", period)
|
|
27
|
-
|
|
28
|
-
age = person("age", period)
|
|
29
|
-
|
|
30
|
-
# Payment only in the birth year for those born 2026+
|
|
31
|
-
is_eligible = (birth_year >= p.min_birth_year) & (
|
|
32
|
-
age < p.age_limit
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
return is_eligible * p.amount
|
|
36
|
-
|
|
37
|
-
class boost_act_payment(Variable):
|
|
38
|
-
value_type = float
|
|
39
|
-
entity = Person
|
|
40
|
-
definition_period = YEAR
|
|
41
|
-
label = "BOOST Act payment"
|
|
42
|
-
unit = USD
|
|
43
|
-
documentation = (
|
|
44
|
-
"Monthly payments under the BOOST Act for eligible adults"
|
|
45
|
-
)
|
|
46
|
-
reference = "placeholder - bill not yet introduced"
|
|
47
|
-
|
|
48
|
-
def formula(person, period, parameters):
|
|
49
|
-
p = parameters(
|
|
50
|
-
period
|
|
51
|
-
).gov.contrib.congress.tlaib.income_security_package.boost_act
|
|
52
|
-
|
|
53
|
-
if not p.in_effect:
|
|
54
|
-
return 0
|
|
55
|
-
|
|
56
|
-
age = person("age", period)
|
|
57
|
-
is_eligible = (age >= p.min_age) & (age <= p.max_age)
|
|
58
|
-
|
|
59
|
-
annual_amount = p.amount * MONTHS_IN_YEAR
|
|
60
|
-
|
|
61
|
-
return is_eligible * annual_amount
|
|
62
|
-
|
|
63
|
-
class boost_act_tax(Variable):
|
|
64
|
-
value_type = float
|
|
65
|
-
entity = TaxUnit
|
|
66
|
-
definition_period = YEAR
|
|
67
|
-
label = "BOOST Act supplemental tax"
|
|
68
|
-
unit = USD
|
|
69
|
-
documentation = "Supplemental tax on AGI to fund the BOOST Act"
|
|
70
|
-
reference = "placeholder - bill not yet introduced"
|
|
71
|
-
|
|
72
|
-
def formula(tax_unit, period, parameters):
|
|
73
|
-
p = parameters(
|
|
74
|
-
period
|
|
75
|
-
).gov.contrib.congress.tlaib.income_security_package.boost_act
|
|
76
|
-
|
|
77
|
-
if not p.in_effect:
|
|
78
|
-
return 0
|
|
79
|
-
|
|
80
|
-
agi = tax_unit("adjusted_gross_income", period)
|
|
81
|
-
filing_status = tax_unit("filing_status", period)
|
|
82
|
-
|
|
83
|
-
excess_agi = max_(agi - p.tax.threshold[filing_status], 0)
|
|
84
|
-
|
|
85
|
-
return excess_agi * p.tax.rate
|
|
86
|
-
|
|
87
|
-
class ecpa_child_benefit(Variable):
|
|
88
|
-
value_type = float
|
|
89
|
-
entity = Person
|
|
90
|
-
definition_period = YEAR
|
|
91
|
-
label = "End Child Poverty Act child benefit"
|
|
92
|
-
unit = USD
|
|
93
|
-
documentation = (
|
|
94
|
-
"Universal child benefit under the End Child Poverty Act"
|
|
95
|
-
)
|
|
96
|
-
reference = "placeholder - bill not yet introduced"
|
|
97
|
-
|
|
98
|
-
def formula(person, period, parameters):
|
|
99
|
-
p = parameters(
|
|
100
|
-
period
|
|
101
|
-
).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
|
|
102
|
-
|
|
103
|
-
if not p.in_effect:
|
|
104
|
-
return 0
|
|
105
|
-
|
|
106
|
-
age = person("age", period)
|
|
107
|
-
is_eligible = age < p.child_benefit.age_limit
|
|
108
|
-
|
|
109
|
-
# Use FPG additional_person amount (CONTIGUOUS_US for all states), rounded to nearest $10
|
|
110
|
-
p_fpg = parameters(period).gov.hhs.fpg
|
|
111
|
-
fpg_amount = p_fpg.additional_person.CONTIGUOUS_US
|
|
112
|
-
amount = round(fpg_amount / 10) * 10
|
|
113
|
-
|
|
114
|
-
return is_eligible * amount
|
|
115
|
-
|
|
116
|
-
class ecpa_adult_dependent_credit(Variable):
|
|
117
|
-
value_type = float
|
|
118
|
-
entity = Person
|
|
119
|
-
definition_period = YEAR
|
|
120
|
-
label = "End Child Poverty Act adult dependent credit"
|
|
121
|
-
unit = USD
|
|
122
|
-
documentation = (
|
|
123
|
-
"Credit for adult dependents under the End Child Poverty Act"
|
|
124
|
-
)
|
|
125
|
-
reference = "placeholder - bill not yet introduced"
|
|
126
|
-
|
|
127
|
-
def formula(person, period, parameters):
|
|
128
|
-
p = parameters(
|
|
129
|
-
period
|
|
130
|
-
).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
|
|
131
|
-
|
|
132
|
-
if not p.in_effect:
|
|
133
|
-
return 0
|
|
134
|
-
|
|
135
|
-
age = person("age", period)
|
|
136
|
-
is_dependent = person("is_tax_unit_dependent", period)
|
|
137
|
-
|
|
138
|
-
is_eligible = (
|
|
139
|
-
age >= p.adult_dependent_credit.min_age
|
|
140
|
-
) & is_dependent
|
|
141
|
-
|
|
142
|
-
return is_eligible * p.adult_dependent_credit.amount
|
|
143
|
-
|
|
144
|
-
class ecpa_filer_credit(Variable):
|
|
145
|
-
value_type = float
|
|
146
|
-
entity = TaxUnit
|
|
147
|
-
definition_period = YEAR
|
|
148
|
-
label = "End Child Poverty Act filer credit"
|
|
149
|
-
unit = USD
|
|
150
|
-
documentation = "Filer credit under the End Child Poverty Act for eligible tax filers"
|
|
151
|
-
reference = "placeholder - bill not yet introduced"
|
|
152
|
-
|
|
153
|
-
def formula(tax_unit, period, parameters):
|
|
154
|
-
p = parameters(
|
|
155
|
-
period
|
|
156
|
-
).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
|
|
157
|
-
|
|
158
|
-
if not p.in_effect:
|
|
159
|
-
return 0
|
|
160
|
-
|
|
161
|
-
person = tax_unit.members
|
|
162
|
-
age = person("age", period)
|
|
163
|
-
|
|
164
|
-
is_head_or_spouse = person("is_tax_unit_head_or_spouse", period)
|
|
165
|
-
|
|
166
|
-
is_eligible_age = (age >= p.filer_credit.eligibility.min_age) & (
|
|
167
|
-
age < p.filer_credit.eligibility.max_age
|
|
168
|
-
)
|
|
169
|
-
is_eligible_filer = is_head_or_spouse & is_eligible_age
|
|
170
|
-
|
|
171
|
-
has_eligible_filer = tax_unit.any(is_eligible_filer)
|
|
172
|
-
|
|
173
|
-
filing_status = tax_unit("filing_status", period)
|
|
174
|
-
amount = p.filer_credit.amount[filing_status]
|
|
175
|
-
|
|
176
|
-
agi = tax_unit("adjusted_gross_income", period)
|
|
177
|
-
excess_agi = max_(
|
|
178
|
-
agi - p.filer_credit.phase_out.start[filing_status], 0
|
|
179
|
-
)
|
|
180
|
-
phase_out = excess_agi * p.filer_credit.phase_out.rate
|
|
181
|
-
|
|
182
|
-
phased_out_amount = max_(amount - phase_out, 0)
|
|
183
|
-
|
|
184
|
-
return has_eligible_filer * phased_out_amount
|
|
185
|
-
|
|
186
|
-
class household_benefits(Variable):
|
|
187
|
-
value_type = float
|
|
188
|
-
entity = Household
|
|
189
|
-
label = "benefits"
|
|
190
|
-
unit = USD
|
|
191
|
-
definition_period = YEAR
|
|
192
|
-
|
|
193
|
-
def formula(household, period, parameters):
|
|
194
|
-
p = parameters(
|
|
195
|
-
period
|
|
196
|
-
).gov.contrib.congress.tlaib.income_security_package
|
|
197
|
-
|
|
198
|
-
BENEFITS = [
|
|
199
|
-
"social_security",
|
|
200
|
-
"ssi",
|
|
201
|
-
"snap",
|
|
202
|
-
"wic",
|
|
203
|
-
"free_school_meals",
|
|
204
|
-
"reduced_price_school_meals",
|
|
205
|
-
"spm_unit_broadband_subsidy",
|
|
206
|
-
"tanf",
|
|
207
|
-
"high_efficiency_electric_home_rebate",
|
|
208
|
-
"residential_efficiency_electrification_rebate",
|
|
209
|
-
"unemployment_compensation",
|
|
210
|
-
# Contributed.
|
|
211
|
-
"basic_income",
|
|
212
|
-
"spm_unit_capped_housing_subsidy",
|
|
213
|
-
"household_state_benefits",
|
|
214
|
-
]
|
|
215
|
-
|
|
216
|
-
# Add Income Security Package benefits if active
|
|
217
|
-
if p.baby_bonus_act.in_effect:
|
|
218
|
-
BENEFITS.append("baby_bonus_act_payment")
|
|
219
|
-
if p.boost_act.in_effect:
|
|
220
|
-
BENEFITS.append("boost_act_payment")
|
|
221
|
-
if p.end_child_poverty_act.in_effect:
|
|
222
|
-
BENEFITS.append("ecpa_child_benefit")
|
|
223
|
-
|
|
224
|
-
return add(household, period, BENEFITS)
|
|
225
|
-
|
|
226
|
-
class spm_unit_benefits(Variable):
|
|
227
|
-
value_type = float
|
|
228
|
-
entity = SPMUnit
|
|
229
|
-
label = "Benefits"
|
|
230
|
-
definition_period = YEAR
|
|
231
|
-
unit = USD
|
|
232
|
-
|
|
233
|
-
def formula(spm_unit, period, parameters):
|
|
234
|
-
p = parameters(
|
|
235
|
-
period
|
|
236
|
-
).gov.contrib.congress.tlaib.income_security_package
|
|
237
|
-
|
|
238
|
-
BENEFITS = [
|
|
239
|
-
"social_security",
|
|
240
|
-
"ssi",
|
|
241
|
-
"ma_state_supplement", # Massachusetts benefits
|
|
242
|
-
# California programs.
|
|
243
|
-
"ca_cvrp", # California Clean Vehicle Rebate Project.
|
|
244
|
-
# Colorado programs.
|
|
245
|
-
"co_ccap_subsidy",
|
|
246
|
-
"co_state_supplement",
|
|
247
|
-
"co_oap",
|
|
248
|
-
"snap",
|
|
249
|
-
"wic",
|
|
250
|
-
"free_school_meals",
|
|
251
|
-
"reduced_price_school_meals",
|
|
252
|
-
"spm_unit_broadband_subsidy",
|
|
253
|
-
"spm_unit_energy_subsidy",
|
|
254
|
-
"tanf",
|
|
255
|
-
"high_efficiency_electric_home_rebate",
|
|
256
|
-
"residential_efficiency_electrification_rebate",
|
|
257
|
-
"unemployment_compensation",
|
|
258
|
-
# Contributed.
|
|
259
|
-
"basic_income",
|
|
260
|
-
"ny_drive_clean_rebate",
|
|
261
|
-
]
|
|
262
|
-
|
|
263
|
-
# Add Income Security Package benefits if active
|
|
264
|
-
if p.baby_bonus_act.in_effect:
|
|
265
|
-
BENEFITS.append("baby_bonus_act_payment")
|
|
266
|
-
if p.boost_act.in_effect:
|
|
267
|
-
BENEFITS.append("boost_act_payment")
|
|
268
|
-
if p.end_child_poverty_act.in_effect:
|
|
269
|
-
BENEFITS.append("ecpa_child_benefit")
|
|
270
|
-
|
|
271
|
-
if parameters(period).gov.contrib.ubi_center.flat_tax.deduct_ptc:
|
|
272
|
-
BENEFITS.append("aca_ptc")
|
|
273
|
-
if not parameters(period).gov.hud.abolition:
|
|
274
|
-
BENEFITS.append("spm_unit_capped_housing_subsidy")
|
|
275
|
-
|
|
276
|
-
return add(spm_unit, period, BENEFITS)
|
|
277
|
-
|
|
278
|
-
class income_tax(Variable):
|
|
279
|
-
value_type = float
|
|
280
|
-
entity = TaxUnit
|
|
281
|
-
label = "federal income tax"
|
|
282
|
-
unit = USD
|
|
283
|
-
definition_period = YEAR
|
|
284
|
-
|
|
285
|
-
def formula(tax_unit, period, parameters):
|
|
286
|
-
p = parameters(
|
|
287
|
-
period
|
|
288
|
-
).gov.contrib.congress.tlaib.income_security_package
|
|
289
|
-
|
|
290
|
-
# Start with income tax after non-refundable credits
|
|
291
|
-
base_tax = tax_unit("income_tax_before_refundable_credits", period)
|
|
292
|
-
|
|
293
|
-
# Subtract refundable credits
|
|
294
|
-
refundable_credits = tax_unit(
|
|
295
|
-
"income_tax_refundable_credits", period
|
|
296
|
-
)
|
|
297
|
-
|
|
298
|
-
reduced_tax = base_tax - refundable_credits
|
|
299
|
-
|
|
300
|
-
# Add BOOST tax only if active
|
|
301
|
-
if p.boost_act.in_effect:
|
|
302
|
-
boost_tax = tax_unit("boost_act_tax", period)
|
|
303
|
-
return reduced_tax + boost_tax
|
|
304
|
-
else:
|
|
305
|
-
return reduced_tax
|
|
306
|
-
|
|
307
|
-
class income_tax_refundable_credits(Variable):
|
|
308
|
-
value_type = float
|
|
309
|
-
entity = TaxUnit
|
|
310
|
-
definition_period = YEAR
|
|
311
|
-
label = "federal refundable income tax credits"
|
|
312
|
-
unit = USD
|
|
313
|
-
|
|
314
|
-
def formula(tax_unit, period, parameters):
|
|
315
|
-
p = parameters(
|
|
316
|
-
period
|
|
317
|
-
).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
|
|
318
|
-
|
|
319
|
-
# Get standard refundable credits, excluding EITC and refundable CTC if ECPA is active
|
|
320
|
-
standard_credits = parameters(period).gov.irs.credits.refundable
|
|
321
|
-
|
|
322
|
-
if p.in_effect:
|
|
323
|
-
# ECPA replaces EITC and refundable CTC
|
|
324
|
-
CREDITS = [
|
|
325
|
-
c
|
|
326
|
-
for c in standard_credits
|
|
327
|
-
if c not in ["eitc", "refundable_ctc"]
|
|
328
|
-
]
|
|
329
|
-
else:
|
|
330
|
-
# Use all standard credits
|
|
331
|
-
CREDITS = list(standard_credits)
|
|
332
|
-
|
|
333
|
-
base_credits = add(tax_unit, period, CREDITS) if CREDITS else 0
|
|
334
|
-
|
|
335
|
-
# Add ECPA credits only if active
|
|
336
|
-
if p.in_effect:
|
|
337
|
-
ecpa_filer = tax_unit("ecpa_filer_credit", period)
|
|
338
|
-
ecpa_adult_dep = add(
|
|
339
|
-
tax_unit, period, ["ecpa_adult_dependent_credit"]
|
|
340
|
-
)
|
|
341
|
-
return base_credits + ecpa_filer + ecpa_adult_dep
|
|
342
|
-
else:
|
|
343
|
-
return base_credits
|
|
344
|
-
|
|
345
|
-
class income_tax_non_refundable_credits(Variable):
|
|
346
|
-
value_type = float
|
|
347
|
-
entity = TaxUnit
|
|
348
|
-
definition_period = YEAR
|
|
349
|
-
label = "federal non-refundable income tax credits"
|
|
350
|
-
unit = USD
|
|
351
|
-
|
|
352
|
-
def formula(tax_unit, period, parameters):
|
|
353
|
-
# Get the base list of non-refundable credits from parameters
|
|
354
|
-
p = parameters(period).gov.irs.credits
|
|
355
|
-
base_credits = list(p.non_refundable)
|
|
356
|
-
|
|
357
|
-
# Check if ECPA is active
|
|
358
|
-
ecpa_params = parameters(
|
|
359
|
-
period
|
|
360
|
-
).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
|
|
361
|
-
ecpa_active = ecpa_params.in_effect
|
|
362
|
-
|
|
363
|
-
# If ECPA is active, remove non_refundable_ctc from the list
|
|
364
|
-
if ecpa_active:
|
|
365
|
-
CREDITS = [
|
|
366
|
-
c for c in base_credits if c != "non_refundable_ctc"
|
|
367
|
-
]
|
|
368
|
-
else:
|
|
369
|
-
CREDITS = base_credits
|
|
370
|
-
|
|
371
|
-
return add(tax_unit, period, CREDITS)
|
|
372
|
-
|
|
373
|
-
class household_tax_before_refundable_credits(Variable):
|
|
374
|
-
value_type = float
|
|
375
|
-
entity = Household
|
|
376
|
-
label = "total tax before refundable credits"
|
|
377
|
-
documentation = "Total tax liability before refundable credits."
|
|
378
|
-
unit = USD
|
|
379
|
-
definition_period = YEAR
|
|
380
|
-
|
|
381
|
-
def formula(household, period, parameters):
|
|
382
|
-
p = parameters(
|
|
383
|
-
period
|
|
384
|
-
).gov.contrib.congress.tlaib.income_security_package
|
|
385
|
-
|
|
386
|
-
base_taxes = add(
|
|
387
|
-
household,
|
|
388
|
-
period,
|
|
389
|
-
[
|
|
390
|
-
"employee_payroll_tax",
|
|
391
|
-
"self_employment_tax",
|
|
392
|
-
"income_tax_before_refundable_credits",
|
|
393
|
-
"flat_tax",
|
|
394
|
-
"household_state_tax_before_refundable_credits",
|
|
395
|
-
],
|
|
396
|
-
)
|
|
397
|
-
|
|
398
|
-
# Add BOOST tax only if active
|
|
399
|
-
if p.boost_act.in_effect:
|
|
400
|
-
boost_tax = add(household, period, ["boost_act_tax"])
|
|
401
|
-
return base_taxes + boost_tax
|
|
402
|
-
else:
|
|
403
|
-
return base_taxes
|
|
404
|
-
|
|
405
|
-
class reform(Reform):
|
|
406
|
-
def apply(self):
|
|
407
|
-
# Update all variables for the Income Security Package
|
|
408
|
-
self.update_variable(baby_bonus_act_payment)
|
|
409
|
-
self.update_variable(boost_act_payment)
|
|
410
|
-
self.update_variable(boost_act_tax)
|
|
411
|
-
self.update_variable(ecpa_child_benefit)
|
|
412
|
-
self.update_variable(ecpa_adult_dependent_credit)
|
|
413
|
-
self.update_variable(ecpa_filer_credit)
|
|
414
|
-
self.update_variable(household_benefits)
|
|
415
|
-
self.update_variable(spm_unit_benefits)
|
|
416
|
-
self.update_variable(income_tax)
|
|
417
|
-
self.update_variable(income_tax_refundable_credits)
|
|
418
|
-
self.update_variable(income_tax_non_refundable_credits)
|
|
419
|
-
self.update_variable(household_tax_before_refundable_credits)
|
|
420
|
-
|
|
421
|
-
return reform
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
def create_income_security_package_reform(
|
|
425
|
-
parameters, period, bypass: bool = False
|
|
426
|
-
):
|
|
427
|
-
if bypass:
|
|
428
|
-
return create_income_security_package()
|
|
429
|
-
|
|
430
|
-
p = parameters.gov.contrib.congress.tlaib.income_security_package
|
|
431
|
-
|
|
432
|
-
reform_active = False
|
|
433
|
-
current_period = period_(period)
|
|
434
|
-
|
|
435
|
-
for i in range(5):
|
|
436
|
-
if (
|
|
437
|
-
p(current_period).baby_bonus_act.in_effect
|
|
438
|
-
or p(current_period).boost_act.in_effect
|
|
439
|
-
or p(current_period).end_child_poverty_act.in_effect
|
|
440
|
-
):
|
|
441
|
-
reform_active = True
|
|
442
|
-
break
|
|
443
|
-
current_period = current_period.offset(1, "year")
|
|
444
|
-
|
|
445
|
-
if reform_active:
|
|
446
|
-
return create_income_security_package()
|
|
447
|
-
else:
|
|
448
|
-
return None
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
income_security_package = create_income_security_package_reform(
|
|
452
|
-
None, None, bypass=True
|
|
453
|
-
)
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
- name: Family with baby, children, and adults receives all benefits
|
|
2
|
-
period: 2026
|
|
3
|
-
reforms: policyengine_us.reforms.congress.tlaib.income_security_package.income_security_package
|
|
4
|
-
input:
|
|
5
|
-
gov.contrib.congress.tlaib.income_security_package.baby_bonus_act.in_effect: true
|
|
6
|
-
gov.contrib.congress.tlaib.income_security_package.boost_act.in_effect: true
|
|
7
|
-
gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act.in_effect: true
|
|
8
|
-
people:
|
|
9
|
-
baby:
|
|
10
|
-
age: 0
|
|
11
|
-
child1:
|
|
12
|
-
age: 5
|
|
13
|
-
child2:
|
|
14
|
-
age: 10
|
|
15
|
-
adult_head:
|
|
16
|
-
age: 35
|
|
17
|
-
adult_spouse:
|
|
18
|
-
age: 33
|
|
19
|
-
adult_dependent:
|
|
20
|
-
age: 20
|
|
21
|
-
is_tax_unit_dependent: true
|
|
22
|
-
tax_units:
|
|
23
|
-
tax_unit:
|
|
24
|
-
members: [adult_head, adult_spouse, baby, child1, child2, adult_dependent]
|
|
25
|
-
filing_status: JOINT
|
|
26
|
-
adjusted_gross_income: 45_000 # 5,000 above phase-out start
|
|
27
|
-
output:
|
|
28
|
-
# Baby Bonus
|
|
29
|
-
baby_bonus_act_payment:
|
|
30
|
-
2026: [2_000, 0, 0, 0, 0, 0] # Only baby gets bonus
|
|
31
|
-
# ECPA Child Benefit
|
|
32
|
-
ecpa_child_benefit:
|
|
33
|
-
2026: [5_630, 5_630, 5_630, 0, 0, 0] # All children under 19
|
|
34
|
-
# ECPA Adult Dependent Credit
|
|
35
|
-
ecpa_adult_dependent_credit:
|
|
36
|
-
2026: [0, 0, 0, 0, 0, 700] # Only adult dependent
|
|
37
|
-
# BOOST Payment
|
|
38
|
-
boost_act_payment:
|
|
39
|
-
2026: [0, 0, 0, 3_000, 3_000, 3_000] # Adults 19-67
|
|
40
|
-
# ECPA Filer Credit (at tax unit level)
|
|
41
|
-
ecpa_filer_credit:
|
|
42
|
-
2026: 1_150 # 1,400 - (5,000 * 0.05)
|
|
43
|
-
# BOOST Tax (at tax unit level)
|
|
44
|
-
boost_act_tax:
|
|
45
|
-
2026: 0 # Below 60,000 threshold for joint
|
|
46
|
-
|
|
47
|
-
- name: Single parent with high income
|
|
48
|
-
period: 2026
|
|
49
|
-
reforms: policyengine_us.reforms.congress.tlaib.income_security_package.income_security_package
|
|
50
|
-
input:
|
|
51
|
-
gov.contrib.congress.tlaib.income_security_package.baby_bonus_act.in_effect: true
|
|
52
|
-
gov.contrib.congress.tlaib.income_security_package.boost_act.in_effect: true
|
|
53
|
-
gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act.in_effect: true
|
|
54
|
-
people:
|
|
55
|
-
parent:
|
|
56
|
-
age: 40
|
|
57
|
-
child:
|
|
58
|
-
age: 8
|
|
59
|
-
tax_units:
|
|
60
|
-
tax_unit:
|
|
61
|
-
members: [parent, child]
|
|
62
|
-
filing_status: HEAD_OF_HOUSEHOLD
|
|
63
|
-
adjusted_gross_income: 80_000
|
|
64
|
-
output:
|
|
65
|
-
# No baby bonus (child too old)
|
|
66
|
-
baby_bonus_act_payment:
|
|
67
|
-
2026: [0, 0]
|
|
68
|
-
# Child benefit
|
|
69
|
-
ecpa_child_benefit:
|
|
70
|
-
2026: [0, 5_630]
|
|
71
|
-
# BOOST payment for parent
|
|
72
|
-
boost_act_payment:
|
|
73
|
-
2026: [3_000, 0]
|
|
74
|
-
# ECPA filer credit fully phased out
|
|
75
|
-
ecpa_filer_credit:
|
|
76
|
-
2026: 0 # 700 - (60,000 * 0.05) = -2,300, max to 0
|
|
77
|
-
# BOOST tax on high income
|
|
78
|
-
boost_act_tax:
|
|
79
|
-
2026: 1_250 # (80,000 - 30,000) * 0.025
|
|
80
|
-
|
|
81
|
-
- name: Senior couple with adult dependent
|
|
82
|
-
period: 2026
|
|
83
|
-
reforms: policyengine_us.reforms.congress.tlaib.income_security_package.income_security_package
|
|
84
|
-
input:
|
|
85
|
-
gov.contrib.congress.tlaib.income_security_package.baby_bonus_act.in_effect: true
|
|
86
|
-
gov.contrib.congress.tlaib.income_security_package.boost_act.in_effect: true
|
|
87
|
-
gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act.in_effect: true
|
|
88
|
-
people:
|
|
89
|
-
senior1:
|
|
90
|
-
age: 68
|
|
91
|
-
senior2:
|
|
92
|
-
age: 70
|
|
93
|
-
adult_dependent:
|
|
94
|
-
age: 40
|
|
95
|
-
is_tax_unit_dependent: true
|
|
96
|
-
tax_units:
|
|
97
|
-
tax_unit:
|
|
98
|
-
members: [senior1, senior2, adult_dependent]
|
|
99
|
-
filing_status: JOINT
|
|
100
|
-
adjusted_gross_income: 35_000
|
|
101
|
-
output:
|
|
102
|
-
# No baby bonus
|
|
103
|
-
baby_bonus_act_payment:
|
|
104
|
-
2026: [0, 0, 0]
|
|
105
|
-
# No child benefit (all adults)
|
|
106
|
-
ecpa_child_benefit:
|
|
107
|
-
2026: [0, 0, 0]
|
|
108
|
-
# Adult dependent credit
|
|
109
|
-
ecpa_adult_dependent_credit:
|
|
110
|
-
2026: [0, 0, 700]
|
|
111
|
-
# BOOST payment only for adult dependent (seniors too old)
|
|
112
|
-
boost_act_payment:
|
|
113
|
-
2026: [0, 0, 3_000]
|
|
114
|
-
# No filer credit (seniors over 64)
|
|
115
|
-
ecpa_filer_credit:
|
|
116
|
-
2026: 0
|
|
117
|
-
# No BOOST tax (below threshold)
|
|
118
|
-
boost_act_tax:
|
|
119
|
-
2026: 0
|
|
120
|
-
|
|
121
|
-
- name: Young adult living alone
|
|
122
|
-
period: 2026
|
|
123
|
-
reforms: policyengine_us.reforms.congress.tlaib.income_security_package.income_security_package
|
|
124
|
-
input:
|
|
125
|
-
gov.contrib.congress.tlaib.income_security_package.baby_bonus_act.in_effect: true
|
|
126
|
-
gov.contrib.congress.tlaib.income_security_package.boost_act.in_effect: true
|
|
127
|
-
gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act.in_effect: true
|
|
128
|
-
people:
|
|
129
|
-
young_adult:
|
|
130
|
-
age: 19
|
|
131
|
-
tax_units:
|
|
132
|
-
tax_unit:
|
|
133
|
-
members: [young_adult]
|
|
134
|
-
filing_status: SINGLE
|
|
135
|
-
adjusted_gross_income: 12_000
|
|
136
|
-
output:
|
|
137
|
-
# No baby bonus
|
|
138
|
-
baby_bonus_act_payment:
|
|
139
|
-
2026: 0
|
|
140
|
-
# No child benefit (19 or over)
|
|
141
|
-
ecpa_child_benefit:
|
|
142
|
-
2026: 0
|
|
143
|
-
# Not a dependent
|
|
144
|
-
ecpa_adult_dependent_credit:
|
|
145
|
-
2026: 0
|
|
146
|
-
# Gets BOOST payment
|
|
147
|
-
boost_act_payment:
|
|
148
|
-
2026: 3_000
|
|
149
|
-
# Gets filer credit
|
|
150
|
-
ecpa_filer_credit:
|
|
151
|
-
2026: 700 # No phase-out
|
|
152
|
-
# No BOOST tax (below threshold)
|
|
153
|
-
boost_act_tax:
|
|
154
|
-
2026: 0
|