policyengine-us 1.413.3__py3-none-any.whl → 1.418.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.

Potentially problematic release.


This version of policyengine-us might be problematic. Click here for more details.

Files changed (62) hide show
  1. policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/brackets.yaml +6 -6
  2. policyengine_us/parameters/gov/contrib/aca/ptc_simplified_bracket/income_eligibility.yaml +6 -6
  3. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/age_limit.yaml +8 -0
  4. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/amount.yaml +13 -0
  5. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/in_effect.yaml +8 -0
  6. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/baby_bonus_act/min_birth_year.yaml +8 -0
  7. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/amount.yaml +13 -0
  8. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/in_effect.yaml +8 -0
  9. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/max_age.yaml +8 -0
  10. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/min_age.yaml +8 -0
  11. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/tax/rate.yaml +8 -0
  12. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/boost_act/tax/threshold.yaml +24 -0
  13. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/adult_dependent_credit/amount.yaml +9 -0
  14. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/adult_dependent_credit/min_age.yaml +8 -0
  15. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/child_benefit/age_limit.yaml +8 -0
  16. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/filer_credit/amount.yaml +20 -0
  17. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/filer_credit/eligibility/max_age.yaml +10 -0
  18. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/filer_credit/eligibility/min_age.yaml +8 -0
  19. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/filer_credit/phase_out/rate.yaml +8 -0
  20. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/filer_credit/phase_out/start.yaml +20 -0
  21. policyengine_us/parameters/gov/contrib/congress/tlaib/income_security_package/end_child_poverty_act/in_effect.yaml +8 -0
  22. policyengine_us/parameters/gov/local/tx/harris/rides/age_threshold.yaml +13 -0
  23. policyengine_us/parameters/gov/local/tx/harris/rides/customer_payment_rate.yaml +12 -0
  24. policyengine_us/parameters/gov/states/tx/fpp/age_threshold.yaml +10 -0
  25. policyengine_us/parameters/gov/states/tx/fpp/annual_benefit.yaml +12 -0
  26. policyengine_us/parameters/gov/states/tx/fpp/fpg_percentage.yaml +15 -0
  27. policyengine_us/reforms/congress/tlaib/__init__.py +4 -0
  28. policyengine_us/reforms/congress/tlaib/income_security_package/__init__.py +17 -0
  29. policyengine_us/reforms/congress/tlaib/income_security_package/income_security_package.py +402 -0
  30. policyengine_us/reforms/ctc/ctc_minimum_refundable_amount.py +11 -0
  31. policyengine_us/reforms/reforms.py +6 -0
  32. policyengine_us/tests/policy/baseline/gov/local/tx/harris/in_harris_county_tx.yaml +27 -0
  33. policyengine_us/tests/policy/baseline/gov/local/tx/harris/rides/tx_harris_rides_eligible.yaml +35 -0
  34. policyengine_us/tests/policy/baseline/gov/local/tx/harris/rides/tx_harris_rides_subsidy.yaml +32 -0
  35. policyengine_us/tests/policy/baseline/gov/states/tx/fpp/integration.yaml +133 -0
  36. policyengine_us/tests/policy/baseline/gov/states/tx/fpp/tx_fpp_age_eligible.yaml +39 -0
  37. policyengine_us/tests/policy/baseline/gov/states/tx/fpp/tx_fpp_benefit.yaml +39 -0
  38. policyengine_us/tests/policy/baseline/gov/states/tx/fpp/tx_fpp_income_eligible.yaml +53 -0
  39. policyengine_us/tests/policy/baseline/gov/states/tx/fpp/tx_fpp_income_limit.yaml +44 -0
  40. policyengine_us/tests/policy/baseline/household/demographic/geographic/in_nyc.yaml +20 -0
  41. policyengine_us/tests/policy/contrib/aca/ptc_simplified_bracket.yaml +12 -12
  42. policyengine_us/tests/policy/contrib/congress/tlaib/end_child_poverty_act/integration.yaml +0 -42
  43. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/integration.yaml +154 -0
  44. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/state_integration.yaml +115 -0
  45. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/test_individual_acts.yaml +149 -0
  46. policyengine_us/tests/policy/contrib/congress/tlaib/income_security/unit_tests.yaml +272 -0
  47. policyengine_us/variables/gov/local/tx/harris/in_harris_county_tx.py +12 -0
  48. policyengine_us/variables/gov/local/tx/harris/rides/tx_harris_rides_eligible.py +22 -0
  49. policyengine_us/variables/gov/local/tx/harris/rides/tx_harris_rides_subsidy.py +26 -0
  50. policyengine_us/variables/gov/states/tx/fpp/tx_fpp_age_eligible.py +16 -0
  51. policyengine_us/variables/gov/states/tx/fpp/tx_fpp_benefit.py +15 -0
  52. policyengine_us/variables/gov/states/tx/fpp/tx_fpp_eligible.py +18 -0
  53. policyengine_us/variables/gov/states/tx/fpp/tx_fpp_income_eligible.py +18 -0
  54. policyengine_us/variables/gov/states/tx/fpp/tx_fpp_income_limit.py +24 -0
  55. policyengine_us/variables/household/demographic/geographic/in_nyc.py +12 -3
  56. policyengine_us/variables/household/expense/person/pre_subsidy_transportation_expense.py +9 -0
  57. {policyengine_us-1.413.3.dist-info → policyengine_us-1.418.0.dist-info}/METADATA +1 -1
  58. {policyengine_us-1.413.3.dist-info → policyengine_us-1.418.0.dist-info}/RECORD +61 -14
  59. policyengine_us/parameters/gov/states/tx/index.yaml +0 -4
  60. {policyengine_us-1.413.3.dist-info → policyengine_us-1.418.0.dist-info}/WHEEL +0 -0
  61. {policyengine_us-1.413.3.dist-info → policyengine_us-1.418.0.dist-info}/entry_points.txt +0 -0
  62. {policyengine_us-1.413.3.dist-info → policyengine_us-1.418.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,402 @@
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
+ # Baby bonus is for those born in 2026 and after, paid in their birth year
23
+ birth_year = person("birth_year", period)
24
+
25
+ age = person("age", period)
26
+
27
+ # Payment only in the birth year for those born 2026+
28
+ is_eligible = (birth_year >= p.min_birth_year) & (
29
+ age < p.age_limit
30
+ )
31
+
32
+ return is_eligible * p.amount
33
+
34
+ class boost_act_payment(Variable):
35
+ value_type = float
36
+ entity = Person
37
+ definition_period = YEAR
38
+ label = "BOOST Act payment"
39
+ unit = USD
40
+ documentation = (
41
+ "Monthly payments under the BOOST Act for eligible adults"
42
+ )
43
+ reference = "placeholder - bill not yet introduced"
44
+
45
+ def formula(person, period, parameters):
46
+ p = parameters(
47
+ period
48
+ ).gov.contrib.congress.tlaib.income_security_package.boost_act
49
+
50
+ age = person("age", period)
51
+ is_eligible = (age >= p.min_age) & (age <= p.max_age)
52
+
53
+ annual_amount = p.amount * MONTHS_IN_YEAR
54
+
55
+ return is_eligible * annual_amount
56
+
57
+ class boost_act_tax(Variable):
58
+ value_type = float
59
+ entity = TaxUnit
60
+ definition_period = YEAR
61
+ label = "BOOST Act supplemental tax"
62
+ unit = USD
63
+ documentation = "Supplemental tax on AGI to fund the BOOST Act"
64
+ reference = "placeholder - bill not yet introduced"
65
+
66
+ def formula(tax_unit, period, parameters):
67
+ p = parameters(
68
+ period
69
+ ).gov.contrib.congress.tlaib.income_security_package.boost_act
70
+
71
+ agi = tax_unit("adjusted_gross_income", period)
72
+ filing_status = tax_unit("filing_status", period)
73
+
74
+ excess_agi = max_(agi - p.tax.threshold[filing_status], 0)
75
+
76
+ return excess_agi * p.tax.rate
77
+
78
+ class ecpa_child_benefit(Variable):
79
+ value_type = float
80
+ entity = Person
81
+ definition_period = YEAR
82
+ label = "End Child Poverty Act child benefit"
83
+ unit = USD
84
+ documentation = (
85
+ "Universal child benefit under the End Child Poverty Act"
86
+ )
87
+ reference = "placeholder - bill not yet introduced"
88
+
89
+ def formula(person, period, parameters):
90
+ p = parameters(
91
+ period
92
+ ).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
93
+
94
+ age = person("age", period)
95
+ is_eligible = age < p.child_benefit.age_limit
96
+
97
+ # Use FPG additional_person amount (CONTIGUOUS_US for all states), rounded to nearest $10
98
+ p_fpg = parameters(period).gov.hhs.fpg
99
+ fpg_amount = p_fpg.additional_person.CONTIGUOUS_US
100
+ amount = round(fpg_amount / 10) * 10
101
+
102
+ return is_eligible * amount
103
+
104
+ class ecpa_adult_dependent_credit(Variable):
105
+ value_type = float
106
+ entity = Person
107
+ definition_period = YEAR
108
+ label = "End Child Poverty Act adult dependent credit"
109
+ unit = USD
110
+ documentation = (
111
+ "Credit for adult dependents under the End Child Poverty Act"
112
+ )
113
+ reference = "placeholder - bill not yet introduced"
114
+
115
+ def formula(person, period, parameters):
116
+ p = parameters(
117
+ period
118
+ ).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
119
+
120
+ age = person("age", period)
121
+ is_dependent = person("is_tax_unit_dependent", period)
122
+
123
+ is_eligible = (
124
+ age >= p.adult_dependent_credit.min_age
125
+ ) & is_dependent
126
+
127
+ return is_eligible * p.adult_dependent_credit.amount
128
+
129
+ class ecpa_filer_credit(Variable):
130
+ value_type = float
131
+ entity = TaxUnit
132
+ definition_period = YEAR
133
+ label = "End Child Poverty Act filer credit"
134
+ unit = USD
135
+ documentation = "Filer credit under the End Child Poverty Act for eligible tax filers"
136
+ reference = "placeholder - bill not yet introduced"
137
+
138
+ def formula(tax_unit, period, parameters):
139
+ p = parameters(
140
+ period
141
+ ).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
142
+
143
+ person = tax_unit.members
144
+ age = person("age", period)
145
+
146
+ is_head_or_spouse = person("is_tax_unit_head_or_spouse", period)
147
+
148
+ is_eligible_age = (age >= p.filer_credit.eligibility.min_age) & (
149
+ age < p.filer_credit.eligibility.max_age
150
+ )
151
+ is_eligible_filer = is_head_or_spouse & is_eligible_age
152
+
153
+ has_eligible_filer = tax_unit.any(is_eligible_filer)
154
+
155
+ filing_status = tax_unit("filing_status", period)
156
+ amount = p.filer_credit.amount[filing_status]
157
+
158
+ agi = tax_unit("adjusted_gross_income", period)
159
+ excess_agi = max_(
160
+ agi - p.filer_credit.phase_out.start[filing_status], 0
161
+ )
162
+ phase_out = excess_agi * p.filer_credit.phase_out.rate
163
+
164
+ phased_out_amount = max_(amount - phase_out, 0)
165
+
166
+ return has_eligible_filer * phased_out_amount
167
+
168
+ class household_benefits(Variable):
169
+ value_type = float
170
+ entity = Household
171
+ label = "benefits"
172
+ unit = USD
173
+ definition_period = YEAR
174
+
175
+ def formula(household, period, parameters):
176
+ p = parameters(
177
+ period
178
+ ).gov.contrib.congress.tlaib.income_security_package
179
+
180
+ BENEFITS = [
181
+ "social_security",
182
+ "ssi",
183
+ "snap",
184
+ "wic",
185
+ "free_school_meals",
186
+ "reduced_price_school_meals",
187
+ "spm_unit_broadband_subsidy",
188
+ "tanf",
189
+ "high_efficiency_electric_home_rebate",
190
+ "residential_efficiency_electrification_rebate",
191
+ "unemployment_compensation",
192
+ # Contributed.
193
+ "basic_income",
194
+ "spm_unit_capped_housing_subsidy",
195
+ "household_state_benefits",
196
+ ]
197
+
198
+ # Add Income Security Package benefits if active
199
+ if p.baby_bonus_act.in_effect:
200
+ BENEFITS.append("baby_bonus_act_payment")
201
+ if p.boost_act.in_effect:
202
+ BENEFITS.append("boost_act_payment")
203
+ if p.end_child_poverty_act.in_effect:
204
+ BENEFITS.append("ecpa_child_benefit")
205
+
206
+ return add(household, period, BENEFITS)
207
+
208
+ class spm_unit_benefits(Variable):
209
+ value_type = float
210
+ entity = SPMUnit
211
+ label = "Benefits"
212
+ definition_period = YEAR
213
+ unit = USD
214
+
215
+ def formula(spm_unit, period, parameters):
216
+ p = parameters(
217
+ period
218
+ ).gov.contrib.congress.tlaib.income_security_package
219
+
220
+ BENEFITS = [
221
+ "social_security",
222
+ "ssi",
223
+ "ma_state_supplement", # Massachusetts benefits
224
+ # California programs.
225
+ "ca_cvrp", # California Clean Vehicle Rebate Project.
226
+ # Colorado programs.
227
+ "co_ccap_subsidy",
228
+ "co_state_supplement",
229
+ "co_oap",
230
+ "snap",
231
+ "wic",
232
+ "free_school_meals",
233
+ "reduced_price_school_meals",
234
+ "spm_unit_broadband_subsidy",
235
+ "spm_unit_energy_subsidy",
236
+ "tanf",
237
+ "high_efficiency_electric_home_rebate",
238
+ "residential_efficiency_electrification_rebate",
239
+ "unemployment_compensation",
240
+ # Contributed.
241
+ "basic_income",
242
+ "ny_drive_clean_rebate",
243
+ ]
244
+
245
+ # Add Income Security Package benefits if active
246
+ if p.baby_bonus_act.in_effect:
247
+ BENEFITS.append("baby_bonus_act_payment")
248
+ if p.boost_act.in_effect:
249
+ BENEFITS.append("boost_act_payment")
250
+ if p.end_child_poverty_act.in_effect:
251
+ BENEFITS.append("ecpa_child_benefit")
252
+
253
+ if parameters(period).gov.contrib.ubi_center.flat_tax.deduct_ptc:
254
+ BENEFITS.append("aca_ptc")
255
+ if not parameters(period).gov.hud.abolition:
256
+ BENEFITS.append("spm_unit_capped_housing_subsidy")
257
+
258
+ return add(spm_unit, period, BENEFITS)
259
+
260
+ class income_tax(Variable):
261
+ value_type = float
262
+ entity = TaxUnit
263
+ label = "federal income tax"
264
+ unit = USD
265
+ definition_period = YEAR
266
+
267
+ def formula(tax_unit, period, parameters):
268
+ p = parameters(
269
+ period
270
+ ).gov.contrib.congress.tlaib.income_security_package
271
+
272
+ # Start with income tax after non-refundable credits
273
+ base_tax = tax_unit("income_tax_before_refundable_credits", period)
274
+
275
+ # Subtract refundable credits
276
+ refundable_credits = tax_unit(
277
+ "income_tax_refundable_credits", period
278
+ )
279
+
280
+ reduced_tax = base_tax - refundable_credits
281
+
282
+ # Add BOOST tax only if active
283
+ if p.boost_act.in_effect:
284
+ boost_tax = tax_unit("boost_act_tax", period)
285
+ return reduced_tax + boost_tax
286
+ else:
287
+ return reduced_tax
288
+
289
+ class income_tax_refundable_credits(Variable):
290
+ value_type = float
291
+ entity = TaxUnit
292
+ definition_period = YEAR
293
+ label = "federal refundable income tax credits"
294
+ unit = USD
295
+
296
+ def formula(tax_unit, period, parameters):
297
+ p = parameters(
298
+ period
299
+ ).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
300
+
301
+ # Get standard refundable credits, excluding EITC and refundable CTC if ECPA is active
302
+ standard_credits = parameters(period).gov.irs.credits.refundable
303
+
304
+ if p.in_effect:
305
+ # ECPA replaces EITC and refundable CTC
306
+ CREDITS = [
307
+ c
308
+ for c in standard_credits
309
+ if c not in ["eitc", "refundable_ctc"]
310
+ ]
311
+ else:
312
+ # Use all standard credits
313
+ CREDITS = list(standard_credits)
314
+
315
+ base_credits = add(tax_unit, period, CREDITS) if CREDITS else 0
316
+
317
+ # Add ECPA credits only if active
318
+ if p.in_effect:
319
+ ecpa_filer = tax_unit("ecpa_filer_credit", period)
320
+ ecpa_adult_dep = add(
321
+ tax_unit, period, ["ecpa_adult_dependent_credit"]
322
+ )
323
+ return base_credits + ecpa_filer + ecpa_adult_dep
324
+ else:
325
+ return base_credits
326
+
327
+ class income_tax_non_refundable_credits(Variable):
328
+ value_type = float
329
+ entity = TaxUnit
330
+ definition_period = YEAR
331
+ label = "federal non-refundable income tax credits"
332
+ unit = USD
333
+
334
+ def formula(tax_unit, period, parameters):
335
+ # Get the base list of non-refundable credits from parameters
336
+ p = parameters(period).gov.irs.credits
337
+ base_credits = list(p.non_refundable)
338
+
339
+ # Check if ECPA is active
340
+ ecpa_params = parameters(
341
+ period
342
+ ).gov.contrib.congress.tlaib.income_security_package.end_child_poverty_act
343
+ ecpa_active = ecpa_params.in_effect
344
+
345
+ # If ECPA is active, remove non_refundable_ctc from the list
346
+ if ecpa_active:
347
+ CREDITS = [
348
+ c for c in base_credits if c != "non_refundable_ctc"
349
+ ]
350
+ else:
351
+ CREDITS = base_credits
352
+
353
+ return add(tax_unit, period, CREDITS)
354
+
355
+ class reform(Reform):
356
+ def apply(self):
357
+ # Update all variables for the Income Security Package
358
+ self.update_variable(baby_bonus_act_payment)
359
+ self.update_variable(boost_act_payment)
360
+ self.update_variable(boost_act_tax)
361
+ self.update_variable(ecpa_child_benefit)
362
+ self.update_variable(ecpa_adult_dependent_credit)
363
+ self.update_variable(ecpa_filer_credit)
364
+ self.update_variable(household_benefits)
365
+ self.update_variable(spm_unit_benefits)
366
+ self.update_variable(income_tax)
367
+ self.update_variable(income_tax_refundable_credits)
368
+ self.update_variable(income_tax_non_refundable_credits)
369
+
370
+ return reform
371
+
372
+
373
+ def create_income_security_package_reform(
374
+ parameters, period, bypass: bool = False
375
+ ):
376
+ if bypass:
377
+ return create_income_security_package()
378
+
379
+ p = parameters.gov.contrib.congress.tlaib.income_security_package
380
+
381
+ reform_active = False
382
+ current_period = period_(period)
383
+
384
+ for i in range(5):
385
+ if (
386
+ p(current_period).baby_bonus_act.in_effect
387
+ or p(current_period).boost_act.in_effect
388
+ or p(current_period).end_child_poverty_act.in_effect
389
+ ):
390
+ reform_active = True
391
+ break
392
+ current_period = current_period.offset(1, "year")
393
+
394
+ if reform_active:
395
+ return create_income_security_package()
396
+ else:
397
+ return None
398
+
399
+
400
+ income_security_package = create_income_security_package_reform(
401
+ None, None, bypass=True
402
+ )
@@ -95,10 +95,21 @@ def create_ctc_minimum_refundable_amount() -> Reform:
95
95
  def formula(tax_unit, period, parameters):
96
96
  return 0
97
97
 
98
+ class ctc_value(Variable):
99
+ value_type = float
100
+ entity = TaxUnit
101
+ label = "CTC value"
102
+ unit = USD
103
+ documentation = "Actual value of the Child Tax Credit"
104
+ definition_period = YEAR
105
+
106
+ adds = ["refundable_ctc"]
107
+
98
108
  class reform(Reform):
99
109
  def apply(self):
100
110
  self.update_variable(ctc_minimum_refundable_amount)
101
111
  self.update_variable(refundable_ctc)
112
+ self.update_variable(ctc_value)
102
113
  self.update_variable(ctc_refundable_maximum)
103
114
  self.update_variable(non_refundable_ctc)
104
115
 
@@ -28,6 +28,8 @@ 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
33
  )
32
34
  from .congress.tlaib.boost import (
33
35
  create_boost_middle_class_tax_credit_reform,
@@ -164,6 +166,9 @@ def create_structural_reforms_from_parameters(parameters, period):
164
166
  end_child_poverty_act = create_end_child_poverty_act_reform(
165
167
  parameters, period
166
168
  )
169
+ income_security_package_reform = create_income_security_package_reform(
170
+ parameters, period
171
+ )
167
172
  boost_middle_class_tax_credit = (
168
173
  create_boost_middle_class_tax_credit_reform(parameters, period)
169
174
  )
@@ -277,6 +282,7 @@ def create_structural_reforms_from_parameters(parameters, period):
277
282
  middle_class_tax_credit,
278
283
  rent_relief_tax_credit,
279
284
  end_child_poverty_act,
285
+ income_security_package_reform,
280
286
  boost_middle_class_tax_credit,
281
287
  mn_walz_hf1938,
282
288
  or_rebate_state_tax_exempt,
@@ -0,0 +1,27 @@
1
+ - name: Household in Harris County
2
+ period: 2025
3
+ input:
4
+ county_str: HARRIS_COUNTY_TX
5
+ output:
6
+ in_harris_county_tx: true
7
+
8
+ - name: Household in Travis County
9
+ period: 2025
10
+ input:
11
+ county_str: TRAVIS_COUNTY_TX
12
+ output:
13
+ in_harris_county_tx: false
14
+
15
+ - name: Household in Dallas County
16
+ period: 2025
17
+ input:
18
+ county_str: DALLAS_COUNTY_TX
19
+ output:
20
+ in_harris_county_tx: false
21
+
22
+ - name: Household in Bexar County
23
+ period: 2025
24
+ input:
25
+ county_str: BEXAR_COUNTY_TX
26
+ output:
27
+ in_harris_county_tx: false
@@ -0,0 +1,35 @@
1
+ - name: Senior citizen in Harris County is eligible
2
+ period: 2024
3
+ input:
4
+ age: 67
5
+ is_disabled: false
6
+ county_str: HARRIS_COUNTY_TX
7
+ output:
8
+ tx_harris_rides_eligible: true
9
+
10
+ - name: Disabled person under 65 in Harris County is eligible
11
+ period: 2024
12
+ input:
13
+ age: 45
14
+ is_disabled: true
15
+ county_str: HARRIS_COUNTY_TX
16
+ output:
17
+ tx_harris_rides_eligible: true
18
+
19
+ - name: Non-disabled person under 65 in Harris County is not eligible
20
+ period: 2024
21
+ input:
22
+ age: 45
23
+ is_disabled: false
24
+ county_str: HARRIS_COUNTY_TX
25
+ output:
26
+ tx_harris_rides_eligible: false
27
+
28
+ - name: Senior citizen not in Harris County is not eligible
29
+ period: 2024
30
+ input:
31
+ age: 70
32
+ is_disabled: false
33
+ county_str: TRAVIS_COUNTY_TX
34
+ output:
35
+ tx_harris_rides_eligible: false
@@ -0,0 +1,32 @@
1
+ - name: Eligible person receives 60% subsidy on transportation costs
2
+ period: 2025
3
+ input:
4
+ age: 70
5
+ is_disabled: false
6
+ county_str: HARRIS_COUNTY_TX
7
+ pre_subsidy_transportation_expense: 1_000
8
+ output:
9
+ tx_harris_rides_eligible: true
10
+ tx_harris_rides_subsidy: 600
11
+
12
+ - name: Ineligible person receives no subsidy
13
+ period: 2025
14
+ input:
15
+ age: 40
16
+ is_disabled: false
17
+ county_str: HARRIS_COUNTY_TX
18
+ pre_subsidy_transportation_expense: 1_000
19
+ output:
20
+ tx_harris_rides_eligible: false
21
+ tx_harris_rides_subsidy: 0
22
+
23
+ - name: Disabled person receives subsidy based on 40% customer payment rate
24
+ period: 2025
25
+ input:
26
+ age: 35
27
+ is_disabled: true
28
+ county_str: HARRIS_COUNTY_TX
29
+ pre_subsidy_transportation_expense: 500
30
+ output:
31
+ tx_harris_rides_eligible: true
32
+ tx_harris_rides_subsidy: 300 # 60% of $500
@@ -0,0 +1,133 @@
1
+ - name: Single adult eligible for FPP
2
+ period: 2026
3
+ input:
4
+ people:
5
+ person1:
6
+ age: 35
7
+ spm_units:
8
+ spm_unit1:
9
+ members: [person1]
10
+ spm_unit_net_income: 25_000
11
+ households:
12
+ household1:
13
+ members: [person1]
14
+ state_code: TX
15
+ output:
16
+ tx_fpp_age_eligible: [true]
17
+ tx_fpp_income_eligible: [true]
18
+ tx_fpp_eligible: [true]
19
+ tx_fpp_benefit: [266.84]
20
+
21
+ - name: Household with multiple people - both eligible
22
+ period: 2026
23
+ input:
24
+ people:
25
+ person1:
26
+ age: 28
27
+ person2:
28
+ age: 32
29
+ spm_units:
30
+ spm_unit1:
31
+ members: [person1, person2]
32
+ spm_unit_net_income: 45_000
33
+ households:
34
+ household1:
35
+ members: [person1, person2]
36
+ state_code: TX
37
+ output:
38
+ tx_fpp_age_eligible: [true, true]
39
+ tx_fpp_income_eligible: [true, true]
40
+ tx_fpp_eligible: [true, true]
41
+ tx_fpp_benefit: [266.84, 266.84]
42
+
43
+ - name: Household with one age-ineligible person
44
+ period: 2026
45
+ input:
46
+ people:
47
+ person1:
48
+ age: 30
49
+ person2:
50
+ age: 70
51
+ spm_units:
52
+ spm_unit1:
53
+ members: [person1, person2]
54
+ spm_unit_net_income: 40_000
55
+ households:
56
+ household1:
57
+ members: [person1, person2]
58
+ state_code: TX
59
+ output:
60
+ tx_fpp_age_eligible: [true, false]
61
+ tx_fpp_income_eligible: [true, true]
62
+ tx_fpp_eligible: [true, false]
63
+ tx_fpp_benefit: [266.84, 0]
64
+
65
+ - name: Household income-ineligible
66
+ period: 2026
67
+ input:
68
+ people:
69
+ person1:
70
+ age: 30
71
+ person2:
72
+ age: 35
73
+ person3:
74
+ age: 8
75
+ spm_units:
76
+ spm_unit1:
77
+ members: [person1, person2, person3]
78
+ spm_unit_net_income: 80_000
79
+ households:
80
+ household1:
81
+ members: [person1, person2, person3]
82
+ state_code: TX
83
+ output:
84
+ tx_fpp_age_eligible: [true, true, true]
85
+ tx_fpp_income_eligible: [false, false, false]
86
+ tx_fpp_eligible: [false, false, false]
87
+ tx_fpp_benefit: [0, 0, 0]
88
+
89
+ - name: Edge case - income exactly at limit for household of 4
90
+ period: 2026
91
+ input:
92
+ people:
93
+ person1:
94
+ age: 40
95
+ person2:
96
+ age: 38
97
+ person3:
98
+ age: 10
99
+ person4:
100
+ age: 7
101
+ spm_units:
102
+ spm_unit1:
103
+ members: [person1, person2, person3, person4]
104
+ spm_unit_net_income: 80_375 # 250% of 2025 FPG for size 4
105
+ households:
106
+ household1:
107
+ members: [person1, person2, person3, person4]
108
+ state_code: TX
109
+ output:
110
+ tx_fpp_age_eligible: [true, true, true, true]
111
+ tx_fpp_income_eligible: [true, true, true, true]
112
+ tx_fpp_eligible: [true, true, true, true]
113
+ tx_fpp_benefit: [266.84, 266.84, 266.84, 266.84]
114
+
115
+ - name: Edge case - age exactly at threshold
116
+ period: 2026
117
+ input:
118
+ people:
119
+ person1:
120
+ age: 64
121
+ spm_units:
122
+ spm_unit1:
123
+ members: [person1]
124
+ spm_unit_net_income: 30_000
125
+ households:
126
+ household1:
127
+ members: [person1]
128
+ state_code: TX
129
+ output:
130
+ tx_fpp_age_eligible: [true]
131
+ tx_fpp_income_eligible: [true]
132
+ tx_fpp_eligible: [true]
133
+ tx_fpp_benefit: [266.84]