policyengine-us 1.421.0__py3-none-any.whl → 1.423.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 (80) hide show
  1. policyengine_us/parameters/gov/contrib/ctc/per_child_phase_out/avoid_overlap.yaml +7 -0
  2. policyengine_us/parameters/gov/states/tx/twc/README.md +1 -0
  3. policyengine_us/parameters/gov/states/tx/twc/ccs/README.md +1 -0
  4. policyengine_us/parameters/gov/states/tx/twc/ccs/age_threshold/child.yaml +11 -0
  5. policyengine_us/parameters/gov/states/tx/twc/ccs/age_threshold/disabled_child.yaml +11 -0
  6. policyengine_us/parameters/gov/states/tx/twc/ccs/age_threshold/infant.yaml +11 -0
  7. policyengine_us/parameters/gov/states/tx/twc/ccs/age_threshold/school_age.yaml +11 -0
  8. policyengine_us/parameters/gov/states/tx/twc/ccs/age_threshold/toddler.yaml +11 -0
  9. policyengine_us/parameters/gov/states/tx/twc/ccs/assets/limit.yaml +11 -0
  10. policyengine_us/parameters/gov/states/tx/twc/ccs/copay/rate/additional_child.yaml +13 -0
  11. policyengine_us/parameters/gov/states/tx/twc/ccs/copay/rate/first_child.yaml +55 -0
  12. policyengine_us/parameters/gov/states/tx/twc/ccs/copay/rate/maximum.yaml +11 -0
  13. policyengine_us/parameters/gov/states/tx/twc/ccs/income/smi_rate.yaml +11 -0
  14. policyengine_us/parameters/gov/states/tx/twc/ccs/income/sources.yaml +23 -0
  15. policyengine_us/parameters/gov/states/tx/twc/ccs/payment/rates.yaml +10459 -0
  16. policyengine_us/parameters/gov/states/tx/twc/ccs/region/alamo.yaml +25 -0
  17. policyengine_us/parameters/gov/states/tx/twc/ccs/region/borderplex.yaml +18 -0
  18. policyengine_us/parameters/gov/states/tx/twc/ccs/region/brazos_valley.yaml +19 -0
  19. policyengine_us/parameters/gov/states/tx/twc/ccs/region/cameron_county.yaml +13 -0
  20. policyengine_us/parameters/gov/states/tx/twc/ccs/region/capital_area.yaml +13 -0
  21. policyengine_us/parameters/gov/states/tx/twc/ccs/region/central_texas.yaml +19 -0
  22. policyengine_us/parameters/gov/states/tx/twc/ccs/region/coastal_bend.yaml +24 -0
  23. policyengine_us/parameters/gov/states/tx/twc/ccs/region/concho_valley.yaml +25 -0
  24. policyengine_us/parameters/gov/states/tx/twc/ccs/region/dallas_county.yaml +13 -0
  25. policyengine_us/parameters/gov/states/tx/twc/ccs/region/deep_east.yaml +24 -0
  26. policyengine_us/parameters/gov/states/tx/twc/ccs/region/east_texas.yaml +26 -0
  27. policyengine_us/parameters/gov/states/tx/twc/ccs/region/golden_crescent.yaml +19 -0
  28. policyengine_us/parameters/gov/states/tx/twc/ccs/region/gulf_coast.yaml +25 -0
  29. policyengine_us/parameters/gov/states/tx/twc/ccs/region/heart_of_texas.yaml +18 -0
  30. policyengine_us/parameters/gov/states/tx/twc/ccs/region/lower_rio.yaml +15 -0
  31. policyengine_us/parameters/gov/states/tx/twc/ccs/region/middle_rio.yaml +21 -0
  32. policyengine_us/parameters/gov/states/tx/twc/ccs/region/north_central.yaml +26 -0
  33. policyengine_us/parameters/gov/states/tx/twc/ccs/region/north_texas.yaml +23 -0
  34. policyengine_us/parameters/gov/states/tx/twc/ccs/region/northeast_texas.yaml +21 -0
  35. policyengine_us/parameters/gov/states/tx/twc/ccs/region/panhandle.yaml +38 -0
  36. policyengine_us/parameters/gov/states/tx/twc/ccs/region/permian_basin.yaml +29 -0
  37. policyengine_us/parameters/gov/states/tx/twc/ccs/region/rural_capital.yaml +21 -0
  38. policyengine_us/parameters/gov/states/tx/twc/ccs/region/south_plains.yaml +27 -0
  39. policyengine_us/parameters/gov/states/tx/twc/ccs/region/south_texas.yaml +15 -0
  40. policyengine_us/parameters/gov/states/tx/twc/ccs/region/southeast.yaml +15 -0
  41. policyengine_us/parameters/gov/states/tx/twc/ccs/region/tarrant_county.yaml +13 -0
  42. policyengine_us/parameters/gov/states/tx/twc/ccs/region/texoma.yaml +15 -0
  43. policyengine_us/parameters/gov/states/tx/twc/ccs/region/west_central.yaml +31 -0
  44. policyengine_us/parameters/gov/states/tx/twc/ccs/work_requirements/single_parent.yaml +11 -0
  45. policyengine_us/parameters/gov/states/tx/twc/ccs/work_requirements/two_parent.yaml +11 -0
  46. policyengine_us/reforms/ctc/ctc_per_child_phase_out.py +12 -1
  47. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/copay/tx_ccs_copay.yaml +165 -0
  48. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/eligibility/tx_ccs_asset_eligible.yaml +67 -0
  49. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/eligibility/tx_ccs_eligible.yaml +114 -0
  50. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/eligibility/tx_ccs_eligible_child.yaml +172 -0
  51. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/eligibility/tx_ccs_income_eligible.yaml +65 -0
  52. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/eligibility/tx_ccs_work_exempt.yaml +24 -0
  53. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/eligibility/tx_ccs_work_requirement_eligible.yaml +155 -0
  54. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/payment/tx_ccs_payment_rate.yaml +224 -0
  55. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/tx_ccs.yaml +132 -0
  56. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/tx_ccs_child_age_category.yaml +127 -0
  57. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/tx_ccs_maximum_payment.yaml +141 -0
  58. policyengine_us/tests/policy/baseline/gov/states/tx/twc/ccs/tx_ccs_workforce_board_region.yaml +79 -0
  59. policyengine_us/tests/policy/contrib/ctc/integration.yaml +205 -2
  60. policyengine_us/variables/gov/states/tx/twc/ccs/copay/tx_ccs_copay.py +40 -0
  61. policyengine_us/variables/gov/states/tx/twc/ccs/eligibility/tx_ccs_asset_eligible.py +16 -0
  62. policyengine_us/variables/gov/states/tx/twc/ccs/eligibility/tx_ccs_eligible.py +28 -0
  63. policyengine_us/variables/gov/states/tx/twc/ccs/eligibility/tx_ccs_eligible_child.py +22 -0
  64. policyengine_us/variables/gov/states/tx/twc/ccs/eligibility/tx_ccs_income_eligible.py +19 -0
  65. policyengine_us/variables/gov/states/tx/twc/ccs/eligibility/tx_ccs_work_exempt.py +26 -0
  66. policyengine_us/variables/gov/states/tx/twc/ccs/eligibility/tx_ccs_work_requirement_eligible.py +44 -0
  67. policyengine_us/variables/gov/states/tx/twc/ccs/payment/tx_ccs_care_schedule.py +18 -0
  68. policyengine_us/variables/gov/states/tx/twc/ccs/payment/tx_ccs_payment_rate.py +36 -0
  69. policyengine_us/variables/gov/states/tx/twc/ccs/payment/tx_ccs_provider_rating.py +21 -0
  70. policyengine_us/variables/gov/states/tx/twc/ccs/payment/tx_ccs_provider_type.py +19 -0
  71. policyengine_us/variables/gov/states/tx/twc/ccs/tx_ccs.py +21 -0
  72. policyengine_us/variables/gov/states/tx/twc/ccs/tx_ccs_child_age_category.py +41 -0
  73. policyengine_us/variables/gov/states/tx/twc/ccs/tx_ccs_countable_income.py +13 -0
  74. policyengine_us/variables/gov/states/tx/twc/ccs/tx_ccs_maximum_payment.py +15 -0
  75. policyengine_us/variables/gov/states/tx/twc/ccs/tx_ccs_workforce_board_region.py +68 -0
  76. {policyengine_us-1.421.0.dist-info → policyengine_us-1.423.0.dist-info}/METADATA +1 -1
  77. {policyengine_us-1.421.0.dist-info → policyengine_us-1.423.0.dist-info}/RECORD +80 -7
  78. {policyengine_us-1.421.0.dist-info → policyengine_us-1.423.0.dist-info}/WHEEL +0 -0
  79. {policyengine_us-1.421.0.dist-info → policyengine_us-1.423.0.dist-info}/entry_points.txt +0 -0
  80. {policyengine_us-1.421.0.dist-info → policyengine_us-1.423.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,141 @@
1
+ - name: Case 1 - Low income family maximum payment calculation
2
+ period: 2024-01
3
+ input:
4
+ people:
5
+ parent1:
6
+ age: 30
7
+ employment_income: 12_000 # Annual income ($1,000/month, <20% SMI)
8
+ child1:
9
+ age: 3
10
+ is_disabled: false
11
+ is_citizen_or_legal_immigrant: true
12
+ tx_ccs_payment_rate: 500 # Monthly reimbursement rate
13
+ spm_units:
14
+ spm_unit:
15
+ members: [parent1, child1]
16
+ spm_unit_size: 2
17
+ tx_ccs_eligible: true
18
+ households:
19
+ household:
20
+ members: [parent1, child1]
21
+ state_code: TX
22
+ output:
23
+ # Reimbursement ($500) - copay ($22.70, rate-based) = $477.30
24
+ tx_ccs_maximum_payment: 477.3
25
+
26
+ - name: Case 2 - Family with two children maximum payment
27
+ period: 2024-01
28
+ input:
29
+ people:
30
+ parent1:
31
+ age: 35
32
+ employment_income: 48_000 # Annual income ($4,000/month, ~55% SMI)
33
+ parent2:
34
+ age: 32
35
+ child1:
36
+ age: 5
37
+ is_disabled: false
38
+ is_citizen_or_legal_immigrant: true
39
+ tx_ccs_payment_rate: 600 # Monthly reimbursement for child1
40
+ child2:
41
+ age: 2
42
+ is_disabled: false
43
+ is_citizen_or_legal_immigrant: true
44
+ tx_ccs_payment_rate: 700 # Monthly reimbursement for child2
45
+ spm_units:
46
+ spm_unit:
47
+ members: [parent1, parent2, child1, child2]
48
+ spm_unit_size: 4
49
+ tx_ccs_eligible: true
50
+ households:
51
+ household:
52
+ members: [parent1, parent2, child1, child2]
53
+ state_code: TX
54
+ output:
55
+ # Total reimbursement ($1,300) - copay ($243.20, rate-based) = $1,056.80
56
+ tx_ccs_maximum_payment: 1_056.8
57
+
58
+ - name: Case 3 - High income family with lower maximum payment
59
+ period: 2024-01
60
+ input:
61
+ people:
62
+ parent1:
63
+ age: 40
64
+ employment_income: 84_000 # Annual income ($7,000/month, 75-80% SMI)
65
+ parent2:
66
+ age: 38
67
+ child1:
68
+ age: 8
69
+ is_disabled: false
70
+ is_citizen_or_legal_immigrant: true
71
+ tx_ccs_payment_rate: 400
72
+ child2:
73
+ age: 5
74
+ is_disabled: false
75
+ is_citizen_or_legal_immigrant: true
76
+ tx_ccs_payment_rate: 450
77
+ child3:
78
+ age: 2
79
+ is_disabled: false
80
+ is_citizen_or_legal_immigrant: true
81
+ tx_ccs_payment_rate: 500
82
+ spm_units:
83
+ spm_unit:
84
+ members: [parent1, parent2, child1, child2, child3]
85
+ spm_unit_size: 5
86
+ tx_ccs_eligible: true
87
+ households:
88
+ household:
89
+ members: [parent1, parent2, child1, child2, child3]
90
+ state_code: TX
91
+ output:
92
+ # Total reimbursement ($1,350) - copay ($490, capped at 7%) = $860
93
+ tx_ccs_maximum_payment: 860
94
+
95
+ - name: Case 4 - Copay exceeds reimbursement results in zero maximum payment
96
+ period: 2024-01
97
+ input:
98
+ people:
99
+ parent1:
100
+ age: 35
101
+ employment_income: 78_000 # High income
102
+ child1:
103
+ age: 6
104
+ is_disabled: false
105
+ is_citizen_or_legal_immigrant: true
106
+ tx_ccs_payment_rate: 200 # Low reimbursement rate
107
+ spm_units:
108
+ spm_unit:
109
+ members: [parent1, child1]
110
+ spm_unit_size: 2
111
+ tx_ccs_eligible: true
112
+ households:
113
+ household:
114
+ members: [parent1, child1]
115
+ state_code: TX
116
+ output:
117
+ tx_ccs_maximum_payment: 0 # Reimbursement ($200) < copay ($310), max(0, -110) = $0
118
+
119
+ - name: Case 5 - Not eligible household has zero maximum payment
120
+ period: 2024-01
121
+ input:
122
+ people:
123
+ parent1:
124
+ age: 30
125
+ employment_income: 36_000
126
+ child1:
127
+ age: 4
128
+ is_disabled: false
129
+ is_citizen_or_legal_immigrant: true
130
+ tx_ccs_payment_rate: 500
131
+ spm_units:
132
+ spm_unit:
133
+ members: [parent1, child1]
134
+ spm_unit_size: 2
135
+ tx_ccs_eligible: false # Not eligible
136
+ households:
137
+ household:
138
+ members: [parent1, child1]
139
+ state_code: TX
140
+ output:
141
+ tx_ccs_maximum_payment: 0 # Not eligible = no maximum payment
@@ -0,0 +1,79 @@
1
+ - name: Gulf Coast - Harris County
2
+ period: 2024
3
+ input:
4
+ county: HARRIS_COUNTY_TX
5
+ state_code: TX
6
+ output:
7
+ tx_ccs_workforce_board_region: GULF_COAST
8
+
9
+ - name: Gulf Coast - Fort Bend County
10
+ period: 2024
11
+ input:
12
+ county: FORT_BEND_COUNTY_TX
13
+ state_code: TX
14
+ output:
15
+ tx_ccs_workforce_board_region: GULF_COAST
16
+
17
+ - name: Dallas County - Dallas
18
+ period: 2024
19
+ input:
20
+ county: DALLAS_COUNTY_TX
21
+ state_code: TX
22
+ output:
23
+ tx_ccs_workforce_board_region: DALLAS_COUNTY
24
+
25
+ - name: Tarrant County - Fort Worth
26
+ period: 2024
27
+ input:
28
+ county: TARRANT_COUNTY_TX
29
+ state_code: TX
30
+ output:
31
+ tx_ccs_workforce_board_region: TARRANT_COUNTY
32
+
33
+ - name: Capital Area - Travis County (Austin)
34
+ period: 2024
35
+ input:
36
+ county: TRAVIS_COUNTY_TX
37
+ state_code: TX
38
+ output:
39
+ tx_ccs_workforce_board_region: CAPITAL_AREA
40
+
41
+ - name: Alamo - Bexar County (San Antonio)
42
+ period: 2024
43
+ input:
44
+ county: BEXAR_COUNTY_TX
45
+ state_code: TX
46
+ output:
47
+ tx_ccs_workforce_board_region: ALAMO
48
+
49
+ - name: Panhandle - Potter County (Amarillo)
50
+ period: 2024
51
+ input:
52
+ county: POTTER_COUNTY_TX
53
+ state_code: TX
54
+ output:
55
+ tx_ccs_workforce_board_region: PANHANDLE
56
+
57
+ - name: Borderplex - El Paso County
58
+ period: 2024
59
+ input:
60
+ county: EL_PASO_COUNTY_TX
61
+ state_code: TX
62
+ output:
63
+ tx_ccs_workforce_board_region: BORDERPLEX
64
+
65
+ - name: Heart of Texas - McLennan County (Waco)
66
+ period: 2024
67
+ input:
68
+ county: MCLENNAN_COUNTY_TX
69
+ state_code: TX
70
+ output:
71
+ tx_ccs_workforce_board_region: HEART_OF_TEXAS
72
+
73
+ - name: Cameron County - Brownsville
74
+ period: 2024
75
+ input:
76
+ county: CAMERON_COUNTY_TX
77
+ state_code: TX
78
+ output:
79
+ tx_ccs_workforce_board_region: CAMERON_COUNTY
@@ -258,8 +258,8 @@
258
258
 
259
259
  - name: Joint filer with 3 kids, 250k income
260
260
  period: 2025
261
- reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
262
- policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
261
+ reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
262
+ policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
263
263
  policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
264
264
  input:
265
265
  gov.contrib.ctc.per_child_phase_out.in_effect: true
@@ -286,6 +286,7 @@
286
286
  gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
287
287
  gov.irs.credits.ctc.phase_out.arpa.amount: 25
288
288
  gov.irs.credits.ctc.phase_out.amount: 25
289
+ gov.contrib.ctc.per_child_phase_out.avoid_overlap: false
289
290
  people:
290
291
  person1:
291
292
  age: 40
@@ -308,3 +309,205 @@
308
309
  output:
309
310
  refundable_ctc: 2_850
310
311
  non_refundable_ctc: 0
312
+
313
+ - name: Single filer, 1 child, 120k income, avoid_overlap enabled
314
+ period: 2025
315
+ reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
316
+ policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
317
+ policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
318
+ input:
319
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
320
+ gov.contrib.ctc.per_child_phase_in.in_effect: true
321
+ gov.contrib.ctc.minimum_refundable.in_effect: true
322
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
323
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
324
+ gov.irs.credits.ctc.refundable.individual_max: 4_800
325
+ gov.irs.credits.ctc.refundable.phase_in.threshold: 0
326
+ gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
327
+ gov.irs.credits.ctc.amount.base[0].amount: 2_200
328
+ gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
329
+ gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
330
+ gov.irs.credits.ctc.phase_out.arpa.in_effect: true
331
+ gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
332
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
333
+ gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
334
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
335
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
336
+ gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
337
+ gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
338
+ gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
339
+ gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
340
+ gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
341
+ gov.irs.credits.ctc.phase_out.arpa.amount: 25
342
+ gov.irs.credits.ctc.phase_out.amount: 25
343
+ gov.contrib.ctc.per_child_phase_out.avoid_overlap: true
344
+ people:
345
+ person1:
346
+ age: 40
347
+ employment_income: 120_000
348
+ person2:
349
+ age: 10
350
+ tax_units:
351
+ tax_unit:
352
+ members: [person1, person2]
353
+ households:
354
+ household:
355
+ members: [person1, person2]
356
+ state_code: TX
357
+ output:
358
+ ctc_arpa_uncapped_phase_out: 2_375
359
+ ctc_phase_out: 0
360
+ ctc: 2_425
361
+ refundable_ctc: 2_425
362
+
363
+ - name: Single filer, 1 child, 120k income, avoid_overlap disabled
364
+ period: 2025
365
+ reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
366
+ policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
367
+ policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
368
+ input:
369
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
370
+ gov.contrib.ctc.per_child_phase_in.in_effect: true
371
+ gov.contrib.ctc.minimum_refundable.in_effect: true
372
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
373
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
374
+ gov.irs.credits.ctc.refundable.individual_max: 4_800
375
+ gov.irs.credits.ctc.refundable.phase_in.threshold: 0
376
+ gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
377
+ gov.irs.credits.ctc.amount.base[0].amount: 2_200
378
+ gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
379
+ gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
380
+ gov.irs.credits.ctc.phase_out.arpa.in_effect: true
381
+ gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
382
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
383
+ gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
384
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
385
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
386
+ gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
387
+ gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
388
+ gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
389
+ gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
390
+ gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
391
+ gov.irs.credits.ctc.phase_out.arpa.amount: 25
392
+ gov.irs.credits.ctc.phase_out.amount: 25
393
+ gov.contrib.ctc.per_child_phase_out.avoid_overlap: false
394
+ people:
395
+ person1:
396
+ age: 40
397
+ employment_income: 120_000
398
+ person2:
399
+ age: 10
400
+ tax_units:
401
+ tax_unit:
402
+ members: [person1, person2]
403
+ households:
404
+ household:
405
+ members: [person1, person2]
406
+ state_code: TX
407
+ output:
408
+ ctc_arpa_uncapped_phase_out: 2_375
409
+ ctc_phase_out: 500
410
+ ctc: 1_925
411
+ refundable_ctc: 1_925
412
+
413
+ - name: Single filer, 1 child, 50k income, avoid_overlap enabled (only ARPA applies)
414
+ period: 2025
415
+ reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
416
+ policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
417
+ policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
418
+ input:
419
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
420
+ gov.contrib.ctc.per_child_phase_in.in_effect: true
421
+ gov.contrib.ctc.minimum_refundable.in_effect: true
422
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
423
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
424
+ gov.irs.credits.ctc.refundable.individual_max: 4_800
425
+ gov.irs.credits.ctc.refundable.phase_in.threshold: 0
426
+ gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
427
+ gov.irs.credits.ctc.amount.base[0].amount: 2_200
428
+ gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
429
+ gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
430
+ gov.irs.credits.ctc.phase_out.arpa.in_effect: true
431
+ gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
432
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
433
+ gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
434
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
435
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
436
+ gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
437
+ gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
438
+ gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
439
+ gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
440
+ gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
441
+ gov.irs.credits.ctc.phase_out.arpa.amount: 25
442
+ gov.irs.credits.ctc.phase_out.amount: 25
443
+ gov.contrib.ctc.per_child_phase_out.avoid_overlap: true
444
+ people:
445
+ person1:
446
+ age: 40
447
+ employment_income: 50_000
448
+ person2:
449
+ age: 10
450
+ tax_units:
451
+ tax_unit:
452
+ members: [person1, person2]
453
+ households:
454
+ household:
455
+ members: [person1, person2]
456
+ state_code: TX
457
+ output:
458
+ ctc_arpa_uncapped_phase_out: 625
459
+ ctc_phase_out: 0
460
+ ctc: 4_175
461
+ refundable_ctc: 4_175
462
+
463
+ - name: HoH filer, 2 kids, 150k income, avoid_overlap enabled (in overlap zone)
464
+ period: 2025
465
+ reforms: [policyengine_us.reforms.ctc.ctc_per_child_phase_in.ctc_per_child_phase_in,
466
+ policyengine_us.reforms.ctc.ctc_minimum_refundable_amount.ctc_minimum_refundable_amount,
467
+ policyengine_us.reforms.ctc.ctc_per_child_phase_out.ctc_per_child_phase_out]
468
+ input:
469
+ gov.contrib.ctc.per_child_phase_out.in_effect: true
470
+ gov.contrib.ctc.per_child_phase_in.in_effect: true
471
+ gov.contrib.ctc.minimum_refundable.in_effect: true
472
+ gov.contrib.ctc.minimum_refundable.amount[0].amount: 2_400
473
+ gov.contrib.ctc.minimum_refundable.amount[1].amount: 2_400
474
+ gov.irs.credits.ctc.refundable.individual_max: 4_800
475
+ gov.irs.credits.ctc.refundable.phase_in.threshold: 0
476
+ gov.irs.credits.ctc.refundable.phase_in.rate: 0.2
477
+ gov.irs.credits.ctc.amount.base[0].amount: 2_200
478
+ gov.irs.credits.ctc.amount.arpa[0].amount: 4_800
479
+ gov.irs.credits.ctc.amount.arpa[1].amount: 4_800
480
+ gov.irs.credits.ctc.phase_out.arpa.in_effect: true
481
+ gov.irs.credits.ctc.phase_out.arpa.threshold.JOINT: 35_000
482
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SINGLE: 25_000
483
+ gov.irs.credits.ctc.phase_out.arpa.threshold.HEAD_OF_HOUSEHOLD: 25_000
484
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SURVIVING_SPOUSE: 25_000
485
+ gov.irs.credits.ctc.phase_out.arpa.threshold.SEPARATE: 25_000
486
+ gov.irs.credits.ctc.phase_out.threshold.JOINT: 200_000
487
+ gov.irs.credits.ctc.phase_out.threshold.SINGLE: 100_000
488
+ gov.irs.credits.ctc.phase_out.threshold.HEAD_OF_HOUSEHOLD: 100_000
489
+ gov.irs.credits.ctc.phase_out.threshold.SURVIVING_SPOUSE: 100_000
490
+ gov.irs.credits.ctc.phase_out.threshold.SEPARATE: 100_000
491
+ gov.irs.credits.ctc.phase_out.arpa.amount: 25
492
+ gov.irs.credits.ctc.phase_out.amount: 25
493
+ gov.contrib.ctc.per_child_phase_out.avoid_overlap: true
494
+ people:
495
+ person1:
496
+ age: 40
497
+ employment_income: 150_000
498
+ person2:
499
+ age: 10
500
+ person3:
501
+ age: 10
502
+ tax_units:
503
+ tax_unit:
504
+ members: [person1, person2, person3]
505
+ households:
506
+ household:
507
+ members: [person1, person2, person3]
508
+ state_code: TX
509
+ output:
510
+ ctc_arpa_uncapped_phase_out: 6_250
511
+ ctc_phase_out: 0
512
+ ctc: 5_850
513
+ refundable_ctc: 5_850
@@ -0,0 +1,40 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_copay(Variable):
5
+ value_type = float
6
+ entity = SPMUnit
7
+ unit = USD
8
+ label = "Texas Child Care Services (CCS) copayment"
9
+ definition_period = MONTH
10
+ reference = "https://wspanhandle.com/child-care/for-parents/"
11
+ defined_for = "tx_ccs_eligible"
12
+
13
+ def formula(spm_unit, period, parameters):
14
+ p = parameters(period).gov.states.tx.twc.ccs.copay
15
+
16
+ # Get household income and SMI ratio
17
+ income = spm_unit("tx_ccs_countable_income", period)
18
+ smi = spm_unit("hhs_smi", period)
19
+ income_to_smi_ratio = income / smi
20
+
21
+ # Count eligible children in care
22
+ eligible_children = spm_unit.sum(
23
+ spm_unit.members("tx_ccs_eligible_child", period)
24
+ )
25
+
26
+ # Calculate copayment rates based on income bracket
27
+ # Use Panhandle Region's values
28
+ first_child_rate = p.rate.first_child.calc(income_to_smi_ratio)
29
+ additional_child_rate = p.rate.additional_child
30
+
31
+ # Calculate copayments as percentage of income
32
+ first_child_copay = first_child_rate * income
33
+ additional_children = max_(eligible_children - 1, 0)
34
+ additional_copay = additional_child_rate * income * additional_children
35
+
36
+ # Total copayment, capped at maximum rate
37
+ total_copay = first_child_copay + additional_copay
38
+ max_copay = p.rate.maximum * income
39
+
40
+ return min_(total_copay, max_copay)
@@ -0,0 +1,16 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_asset_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Texas CCS asset eligible"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/texas/40-Tex-Admin-Code-SS-809-41"
10
+ defined_for = StateCode.TX
11
+
12
+ def formula(spm_unit, period, parameters):
13
+ p = parameters(period).gov.states.tx.twc.ccs
14
+ assets = spm_unit("spm_unit_assets", period.this_year)
15
+ asset_limit = p.assets.limit
16
+ return assets <= asset_limit
@@ -0,0 +1,28 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Texas CCS eligible"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/texas/40-Tex-Admin-Code-SS-809-41"
10
+ defined_for = StateCode.TX
11
+
12
+ def formula(spm_unit, period, parameters):
13
+ # Check all eligibility criteria
14
+ income_eligible = spm_unit("tx_ccs_income_eligible", period)
15
+ asset_eligible = spm_unit("tx_ccs_asset_eligible", period)
16
+ work_eligible = spm_unit("tx_ccs_work_requirement_eligible", period)
17
+
18
+ # Check if at least one child is age-eligible
19
+ person = spm_unit.members
20
+ age_eligible = person("tx_ccs_eligible_child", period)
21
+ has_eligible_child = spm_unit.any(age_eligible)
22
+
23
+ return (
24
+ income_eligible
25
+ & asset_eligible
26
+ & work_eligible
27
+ & has_eligible_child
28
+ )
@@ -0,0 +1,22 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_eligible_child(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Texas CCS eligible child"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/texas/40-Tex-Admin-Code-SS-809-41"
10
+ defined_for = StateCode.TX
11
+
12
+ def formula(person, period, parameters):
13
+ p = parameters(period).gov.states.tx.twc.ccs.age_threshold
14
+ age = person("age", period.this_year)
15
+ is_disabled = person("is_disabled", period)
16
+ age_limit = where(is_disabled, p.disabled_child, p.child)
17
+ age_eligible = age < age_limit
18
+ is_dependent = person("is_tax_unit_dependent", period)
19
+ immigration_status_eligible = person(
20
+ "is_citizen_or_legal_immigrant", period
21
+ )
22
+ return age_eligible & is_dependent & immigration_status_eligible
@@ -0,0 +1,19 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Texas CCS income eligible"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/texas/40-Tex-Admin-Code-SS-809-41"
10
+ defined_for = StateCode.TX
11
+
12
+ def formula(spm_unit, period, parameters):
13
+ p = parameters(period).gov.states.tx.twc.ccs
14
+ # Get monthly countable income
15
+ monthly_income = spm_unit("tx_ccs_countable_income", period)
16
+ # Calculate monthly SMI limit
17
+ smi = spm_unit("hhs_smi", period)
18
+ income_limit = smi * p.income.smi_rate
19
+ return monthly_income <= income_limit
@@ -0,0 +1,26 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_work_exempt(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Texas CCS work requirement exempt"
8
+ definition_period = YEAR
9
+ reference = "https://www.law.cornell.edu/regulations/texas/40-Tex-Admin-Code-SS-809-50"
10
+ defined_for = StateCode.TX
11
+
12
+ def formula(person, period):
13
+ # Exemption 1: Full-time student
14
+ is_full_time_student = person("is_full_time_student", period)
15
+
16
+ # Exemption 2: Parent with documented medical disability
17
+ is_disabled = person("is_disabled", period)
18
+
19
+ # Exemption 3: Parent caring for a physically or mentally disabled family member
20
+ # This exemption is NOT implemented due to complexity in determining:
21
+ # - Which parent is the designated caregiver
22
+ # - Whether caring for disabled spouse vs disabled child has different implications
23
+ # - Whether both parents can claim exemption or just one
24
+ # Future enhancement could add this with better data on caregiving roles
25
+
26
+ return is_full_time_student | is_disabled
@@ -0,0 +1,44 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class tx_ccs_work_requirement_eligible(Variable):
5
+ value_type = bool
6
+ entity = SPMUnit
7
+ label = "Texas CCS work requirement eligible"
8
+ definition_period = MONTH
9
+ reference = "https://www.law.cornell.edu/regulations/texas/40-Tex-Admin-Code-SS-809-56"
10
+ defined_for = StateCode.TX
11
+
12
+ def formula(spm_unit, period, parameters):
13
+ p = parameters(period).gov.states.tx.twc.ccs.work_requirements
14
+
15
+ person = spm_unit.members
16
+ is_head_or_spouse = person("is_tax_unit_head_or_spouse", period)
17
+ is_exempt = person("tx_ccs_work_exempt", period)
18
+ work_hours = person("weekly_hours_worked", period.this_year)
19
+
20
+ # Count non-exempt parents and calculate their total work hours
21
+ is_non_exempt_parent = is_head_or_spouse & ~is_exempt
22
+ num_non_exempt_parents = spm_unit.sum(is_non_exempt_parent)
23
+ total_work_hours = spm_unit.sum(
24
+ where(is_non_exempt_parent, work_hours, 0)
25
+ )
26
+
27
+ # Determine work hours requirement based on non-exempt parents
28
+ # If 0-1 non-exempt parents: 25 hours
29
+ # If 2+ non-exempt parents: 50 hours
30
+ requirement = where(
31
+ num_non_exempt_parents > 1, p.two_parent, p.single_parent
32
+ )
33
+
34
+ # Check each parent individually
35
+ # A parent meets requirements if they are:
36
+ # - Exempt from work, OR
37
+ # - Part of a household that meets the work hour requirement
38
+ household_meets_work_requirement = total_work_hours >= requirement
39
+ parent_meets_requirement = is_exempt | household_meets_work_requirement
40
+
41
+ # SPM unit is eligible if ALL parents meet requirements
42
+ # (Non-parents automatically pass)
43
+ person_eligible = parent_meets_requirement | ~is_head_or_spouse
44
+ return spm_unit.all(person_eligible)
@@ -0,0 +1,18 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class TXCCSCareSchedule(Enum):
5
+ FULL_TIME = "Full Time"
6
+ PART_TIME = "Part Time"
7
+ BLENDED = "Blended"
8
+
9
+
10
+ class tx_ccs_care_schedule(Variable):
11
+ value_type = Enum
12
+ possible_values = TXCCSCareSchedule
13
+ default_value = TXCCSCareSchedule.FULL_TIME
14
+ entity = Person
15
+ definition_period = MONTH
16
+ label = "Texas Child Care Services (CCS) care schedule"
17
+ defined_for = StateCode.TX
18
+ reference = "https://www.twc.texas.gov/sites/default/files/ccel/docs/bcy25-board-max-provider-payment-rates-4-age-groups-twc.pdf"