policyengine-us 1.442.1__py3-none-any.whl → 1.444.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 (47) hide show
  1. policyengine_us/parameters/gov/local/ny/mamdani_income_tax/in_effect.yaml +10 -0
  2. policyengine_us/parameters/gov/local/ny/mamdani_income_tax/rate.yaml +18 -0
  3. policyengine_us/parameters/gov/states/il/hfs/README.md +1 -0
  4. policyengine_us/parameters/gov/states/il/hfs/hbwd/README.md +1 -0
  5. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/age.yaml +25 -0
  6. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/asset/limit.yaml +15 -0
  7. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/limit.yaml +15 -0
  8. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/sources/earned.yaml +13 -0
  9. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/sources/unearned.yaml +25 -0
  10. policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/qualified_noncitizen_statuses.yaml +21 -0
  11. policyengine_us/parameters/gov/states/il/hfs/hbwd/premium/earned.yaml +96 -0
  12. policyengine_us/parameters/gov/states/il/hfs/hbwd/premium/unearned.yaml +96 -0
  13. policyengine_us/reforms/local/ny/__init__.py +4 -0
  14. policyengine_us/reforms/local/ny/mamdani_income_tax.py +84 -0
  15. policyengine_us/reforms/reforms.py +9 -0
  16. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/asset/il_hbwd_countable_assets.yaml +23 -0
  17. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_age_eligible.yaml +39 -0
  18. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_asset_eligible.yaml +31 -0
  19. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.yaml +35 -0
  20. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.yaml +65 -0
  21. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_employment_eligible.yaml +34 -0
  22. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.yaml +47 -0
  23. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_income_eligible.yaml +25 -0
  24. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/il_hbwd_person.yaml +34 -0
  25. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/il_hbwd_premium.yaml +84 -0
  26. policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/integration.yaml +183 -0
  27. policyengine_us/tests/policy/contrib/local/ny/nyc_mamdani_income_tax.yaml +51 -0
  28. policyengine_us/variables/gov/states/il/hfs/hbwd/asset/il_hbwd_countable_assets.py +34 -0
  29. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_age_eligible.py +20 -0
  30. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_asset_eligible.py +21 -0
  31. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.py +20 -0
  32. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.py +33 -0
  33. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_employment_eligible.py +25 -0
  34. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.py +26 -0
  35. policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_income_eligible.py +23 -0
  36. policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd.py +17 -0
  37. policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd_person.py +24 -0
  38. policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd_premium.py +23 -0
  39. policyengine_us/variables/gov/states/il/hfs/hbwd/income/earned/il_hbwd_countable_earned_income.py +24 -0
  40. policyengine_us/variables/gov/states/il/hfs/hbwd/income/earned/il_hbwd_gross_earned_income.py +16 -0
  41. policyengine_us/variables/gov/states/il/hfs/hbwd/income/il_hbwd_countable_income.py +21 -0
  42. policyengine_us/variables/gov/states/il/hfs/hbwd/income/unearned/il_hbwd_countable_unearned_income.py +16 -0
  43. {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/METADATA +1 -1
  44. {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/RECORD +47 -6
  45. {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/WHEEL +1 -1
  46. {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/entry_points.txt +0 -0
  47. {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,34 @@
1
+ - name: Case 1, employment eligible with employment income.
2
+ period: 2024-01
3
+ input:
4
+ state_code: IL
5
+ employment_income: 24_000 # $2,000/month
6
+ output:
7
+ il_hbwd_employment_eligible: true
8
+
9
+ - name: Case 2, employment eligible with self-employment income.
10
+ period: 2024-01
11
+ input:
12
+ state_code: IL
13
+ self_employment_income: 18_000 # $1,500/month
14
+ output:
15
+ il_hbwd_employment_eligible: true
16
+
17
+ - name: Case 3, employment eligible with both.
18
+ period: 2024-01
19
+ input:
20
+ state_code: IL
21
+ employment_income: 12_000 # $1,000/month
22
+ self_employment_income: 6_000 # $500/month
23
+ output:
24
+ il_hbwd_employment_eligible: true
25
+
26
+ - name: Case 4, employment ineligible with no earned income.
27
+ period: 2024-01
28
+ input:
29
+ state_code: IL
30
+ employment_income: 0
31
+ self_employment_income: 0
32
+ social_security: 12_000 # $1,000/month
33
+ output:
34
+ il_hbwd_employment_eligible: false
@@ -0,0 +1,47 @@
1
+ - name: Case 1, citizen eligible.
2
+ period: 2024-01
3
+ input:
4
+ state_code: IL
5
+ immigration_status: CITIZEN
6
+ output:
7
+ il_hbwd_immigration_status_eligible: true
8
+
9
+ - name: Case 2, legal permanent resident eligible.
10
+ period: 2024-01
11
+ input:
12
+ state_code: IL
13
+ immigration_status: LEGAL_PERMANENT_RESIDENT
14
+ output:
15
+ il_hbwd_immigration_status_eligible: true
16
+
17
+ - name: Case 3, refugee eligible.
18
+ period: 2024-01
19
+ input:
20
+ state_code: IL
21
+ immigration_status: REFUGEE
22
+ output:
23
+ il_hbwd_immigration_status_eligible: true
24
+
25
+ - name: Case 4, asylee eligible.
26
+ period: 2024-01
27
+ input:
28
+ state_code: IL
29
+ immigration_status: ASYLEE
30
+ output:
31
+ il_hbwd_immigration_status_eligible: true
32
+
33
+ - name: Case 5, undocumented ineligible.
34
+ period: 2024-01
35
+ input:
36
+ state_code: IL
37
+ immigration_status: UNDOCUMENTED
38
+ output:
39
+ il_hbwd_immigration_status_eligible: false
40
+
41
+ - name: Case 6, DACA ineligible.
42
+ period: 2024-01
43
+ input:
44
+ state_code: IL
45
+ immigration_status: DACA
46
+ output:
47
+ il_hbwd_immigration_status_eligible: false
@@ -0,0 +1,25 @@
1
+ - name: Case 1, income eligible single person below limit.
2
+ period: 2024-01
3
+ input:
4
+ state_code: IL
5
+ employment_income: 36_000 # $3,000/month
6
+ social_security: 12_000 # $1,000/month
7
+ output:
8
+ il_hbwd_income_eligible: true
9
+
10
+ - name: Case 2, income eligible at exactly 350% FPL for single.
11
+ period: 2024-01
12
+ input:
13
+ state_code: IL
14
+ employment_income: 52_716 # $4,393/month
15
+ output:
16
+ il_hbwd_income_eligible: true
17
+
18
+ - name: Case 3, income eligible after exemptions.
19
+ period: 2024-01
20
+ input:
21
+ state_code: IL
22
+ employment_income: 60_000 # $5,000/month
23
+ output:
24
+ il_hbwd_income_eligible: true
25
+ # Gross $5,000, after expenses and exemptions becomes eligible
@@ -0,0 +1,34 @@
1
+ - name: Case 1, HBWD person with premium.
2
+ period: 2024-01
3
+ absolute_error_margin: 0.01
4
+ input:
5
+ state_code: IL
6
+ il_hbwd_eligible: true
7
+ il_hbwd_countable_earned_income: 1_000
8
+ il_hbwd_countable_unearned_income: 1_200
9
+ output:
10
+ il_hbwd_person: -100
11
+ # Premium: $100 (earned $25 + unearned $75)
12
+ # Earned $1,000 → bracket 4 → $25
13
+ # Unearned $1,200 → bracket 4 → $75
14
+ # Benefit: -$100 (cost to individual)
15
+
16
+ - name: Case 2, HBWD person not eligible.
17
+ period: 2024-01
18
+ input:
19
+ state_code: IL
20
+ il_hbwd_eligible: false
21
+ output:
22
+ il_hbwd_person: 0
23
+ # Not eligible → no premium → no cost
24
+
25
+ - name: Case 3, HBWD person with zero premium.
26
+ period: 2024-01
27
+ input:
28
+ state_code: IL
29
+ il_hbwd_eligible: true
30
+ il_hbwd_countable_earned_income: 100
31
+ il_hbwd_countable_unearned_income: 0
32
+ output:
33
+ il_hbwd_person: 0
34
+ # Both income in first bracket → $0 premium
@@ -0,0 +1,84 @@
1
+ - name: Case 1, premium with only earned income.
2
+ period: 2024-01
3
+ absolute_error_margin: 0.01
4
+ input:
5
+ state_code: IL
6
+ il_hbwd_eligible: true
7
+ il_hbwd_countable_earned_income: 2_000
8
+ il_hbwd_countable_unearned_income: 0
9
+ output:
10
+ il_hbwd_premium: 50
11
+ # Earned $2,000 → bracket 8 (2001-2250) → $50
12
+ # Unearned $0 → bracket 0 → $0
13
+ # Total: $50
14
+
15
+ - name: Case 2, premium with earned and unearned.
16
+ period: 2024-01
17
+ absolute_error_margin: 0.01
18
+ input:
19
+ state_code: IL
20
+ il_hbwd_eligible: true
21
+ il_hbwd_countable_earned_income: 1_000
22
+ il_hbwd_countable_unearned_income: 1_200
23
+ output:
24
+ il_hbwd_premium: 100
25
+ # Earned $1,000 → bracket 4 (1001-1250) → $25
26
+ # Unearned $1,200 → bracket 4 (1001-1250) → $75
27
+ # Total: $25 + $75 = $100
28
+
29
+ - name: Case 3, premium with higher income.
30
+ period: 2024-01
31
+ absolute_error_margin: 0.01
32
+ input:
33
+ state_code: IL
34
+ il_hbwd_eligible: true
35
+ il_hbwd_countable_earned_income: 3_000
36
+ il_hbwd_countable_unearned_income: 2_000
37
+ output:
38
+ il_hbwd_premium: 225
39
+ # Earned $3,000 → bracket 12 (3001-3250) → $75
40
+ # Unearned $2,000 → bracket 8 (2001-2250) → $150
41
+ # Total: $75 + $150 = $225
42
+
43
+ - name: Case 4, premium capped at $500.
44
+ period: 2024-01
45
+ absolute_error_margin: 0.01
46
+ input:
47
+ state_code: IL
48
+ il_hbwd_eligible: true
49
+ il_hbwd_countable_earned_income: 5_000
50
+ il_hbwd_countable_unearned_income: 5_000
51
+ output:
52
+ il_hbwd_premium: 500
53
+ # Earned $5,000+ → bracket 20 → $125
54
+ # Unearned $5,000+ → bracket 20 → $375
55
+ # Uncapped: $500
56
+ # Capped: $500
57
+
58
+ - name: Case 5, no premium in first bracket.
59
+ period: 2024-01
60
+ absolute_error_margin: 0.01
61
+ input:
62
+ state_code: IL
63
+ il_hbwd_eligible: true
64
+ il_hbwd_countable_earned_income: 200
65
+ il_hbwd_countable_unearned_income: 0
66
+ output:
67
+ il_hbwd_premium: 0
68
+ # Earned $200 → bracket 0 (0-250) → $0
69
+ # Unearned $0 → bracket 0 → $0
70
+ # Total: $0
71
+
72
+ - name: Case 6, verify bracket boundary at $250.
73
+ period: 2024-01
74
+ absolute_error_margin: 0.01
75
+ input:
76
+ state_code: IL
77
+ il_hbwd_eligible: true
78
+ il_hbwd_countable_earned_income: 250
79
+ il_hbwd_countable_unearned_income: 250
80
+ output:
81
+ il_hbwd_premium: 25
82
+ # Earned $250 → bracket 1 (251-500) → $6
83
+ # Unearned $250 → bracket 1 (251-500) → $19
84
+ # Total: $6 + $19 = $25
@@ -0,0 +1,183 @@
1
+ - name: Case 1, eligible working disabled individual.
2
+ period: 2024-01
3
+ absolute_error_margin: 0.01
4
+ input:
5
+ state_code: IL
6
+ age: 28
7
+ is_ssi_disabled: true
8
+ employment_income: 24_000 # $2,000/month
9
+ social_security_disability: 12_000 # $1,000/month
10
+ spm_unit_cash_assets: 15_000
11
+ output:
12
+ # Eligibility components
13
+ il_hbwd_age_eligible: true
14
+ il_hbwd_disability_eligible: true
15
+ il_hbwd_employment_eligible: true
16
+ il_hbwd_income_eligible: true
17
+ il_hbwd_asset_eligible: true
18
+ il_hbwd_eligible: true
19
+ # Income calculation
20
+ il_hbwd_gross_earned_income: 2_000 # 24,000 / 12
21
+ il_hbwd_countable_income: 2_728.13
22
+ # Earned: $2,000 - $211.55 (expenses) - $50 (exemptions) = $1,738.45
23
+ # Unearned: $1,000 - $10 (remaining flat exemption)
24
+ # Total: ~$2,728.13
25
+ # Premium calculation
26
+ il_hbwd_premium: 113
27
+ # Earned $1,713.45 → bracket 6 (1501-1750) → $38
28
+ # Unearned $1,000 → bracket 4 (1001-1250) → $75
29
+ # Total: $38 + $75 = $113
30
+
31
+ - name: Case 2, couple with one eligible member.
32
+ period: 2024-01
33
+ absolute_error_margin: 0.01
34
+ input:
35
+ people:
36
+ person1:
37
+ age: 45
38
+ is_ssi_disabled: true
39
+ employment_income: 30_000 # $2,500/month
40
+ social_security_disability: 9_600 # $800/month
41
+ person2:
42
+ age: 43
43
+ is_ssi_disabled: false
44
+ employment_income: 36_000 # $3,000/month
45
+ spm_units:
46
+ spm_unit:
47
+ members: [person1, person2]
48
+ spm_unit_cash_assets: 12_000
49
+ households:
50
+ household:
51
+ members: [person1, person2]
52
+ state_code: IL
53
+ output:
54
+ il_hbwd_eligible: [true, false]
55
+ # person1: disabled + employed = eligible
56
+ # person2: not disabled = ineligible
57
+ il_hbwd_disability_eligible: [true, false]
58
+ il_hbwd_employment_eligible: [true, true]
59
+ il_hbwd_income_eligible: [true, true]
60
+ il_hbwd_asset_eligible: [true, true]
61
+
62
+ - name: Case 3, self-employed individual with childcare expenses.
63
+ period: 2024-01
64
+ absolute_error_margin: 0.01
65
+ input:
66
+ people:
67
+ person1:
68
+ age: 35
69
+ is_ssi_disabled: true
70
+ self_employment_income: 30_000 # $2,500/month
71
+ monthly_hours_worked: 160 # Full-time
72
+ person2:
73
+ age: 5
74
+ spm_units:
75
+ spm_unit:
76
+ members: [person1, person2]
77
+ childcare_expenses: 1_920 # $160/month
78
+ spm_unit_cash_assets: 8_000
79
+ tax_units:
80
+ tax_unit:
81
+ members: [person1, person2]
82
+ tax_unit_dependents: 1
83
+ households:
84
+ household:
85
+ members: [person1, person2]
86
+ state_code: IL
87
+ output:
88
+ il_hbwd_age_eligible: [true, false]
89
+ il_hbwd_disability_eligible: [true, false]
90
+ il_hbwd_employment_eligible: [true, false]
91
+ il_hbwd_eligible: [true, false]
92
+ # Income calculation for person1
93
+ il_hbwd_gross_earned_income: [2_500, 0]
94
+ # $30,000 / 12 = $2,500
95
+ il_hbwd_countable_earned_income: [2_193.44, 0]
96
+ # Gross: $2,500
97
+ # After expenses and exemptions: $2,193.44
98
+
99
+ - name: Case 4, near income limit boundary.
100
+ period: 2024-01
101
+ absolute_error_margin: 0.01
102
+ input:
103
+ state_code: IL
104
+ age: 50
105
+ is_ssi_disabled: true
106
+ employment_income: 48_000 # $4,000/month
107
+ social_security_disability: 4_800 # $400/month
108
+ spm_unit_cash_assets: 20_000
109
+ output:
110
+ il_hbwd_age_eligible: true
111
+ il_hbwd_disability_eligible: true
112
+ il_hbwd_employment_eligible: true
113
+ il_hbwd_eligible: true
114
+ il_hbwd_income_eligible: true
115
+ # Total income after deductions: ~$4,089
116
+ # 350% FPL for single (2024): ~$4,393
117
+ # Just under limit → eligible
118
+ il_hbwd_premium: 100
119
+ # Premium: $100
120
+
121
+ - name: Case 5, eligible with high income after exemptions.
122
+ period: 2024-01
123
+ absolute_error_margin: 0.01
124
+ input:
125
+ state_code: IL
126
+ age: 40
127
+ is_ssi_disabled: true
128
+ employment_income: 60_000 # $5,000/month
129
+ spm_unit_cash_assets: 10_000
130
+ output:
131
+ il_hbwd_age_eligible: true
132
+ il_hbwd_disability_eligible: true
133
+ il_hbwd_employment_eligible: true
134
+ il_hbwd_asset_eligible: true
135
+ il_hbwd_income_eligible: true
136
+ # Countable income after expenses and exemptions: ~$4,618
137
+ # With exemptions, now under 350% FPL limit
138
+ il_hbwd_eligible: true
139
+
140
+ - name: Case 6, SSDI recipient with part-time work.
141
+ period: 2024-01
142
+ absolute_error_margin: 0.01
143
+ input:
144
+ state_code: IL
145
+ age: 55
146
+ is_ssi_disabled: false
147
+ social_security_disability: 18_000 # $1,500/month SSDI
148
+ employment_income: 12_000 # $1,000/month part-time
149
+ spm_unit_cash_assets: 5_000
150
+ output:
151
+ il_hbwd_age_eligible: true
152
+ il_hbwd_disability_eligible: true # Via SSDI receipt
153
+ il_hbwd_employment_eligible: true
154
+ il_hbwd_income_eligible: true
155
+ il_hbwd_asset_eligible: true
156
+ il_hbwd_eligible: true
157
+ # Income calculation
158
+ il_hbwd_gross_earned_income: 1_000
159
+ il_hbwd_countable_income: 2_349.95
160
+ # Earned after expenses and exemptions: ~$850
161
+ # Unearned: $1,500
162
+ # Total: ~$2,349.95
163
+ il_hbwd_premium: 132
164
+ # Earned $824.95 → bracket 3 (751-1000) → $19
165
+ # Unearned $1,500 → bracket 6 (1501-1750) → $113
166
+ # Total: $19 + $113 = $132
167
+
168
+ - name: Case 7, ineligible too young.
169
+ period: 2024-01
170
+ input:
171
+ state_code: IL
172
+ age: 15
173
+ is_ssi_disabled: true
174
+ employment_income: 12_000 # $1,000/month
175
+ spm_unit_cash_assets: 5_000
176
+ output:
177
+ il_hbwd_age_eligible: false
178
+ il_hbwd_disability_eligible: true
179
+ il_hbwd_employment_eligible: true
180
+ il_hbwd_income_eligible: true
181
+ il_hbwd_asset_eligible: true
182
+ il_hbwd_eligible: false
183
+ # Age < 16 → ineligible despite meeting other criteria
@@ -0,0 +1,51 @@
1
+ - name: Person below threshold in 2026
2
+ period: 2026
3
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
4
+ input:
5
+ gov.local.ny.mamdani_income_tax.in_effect: True
6
+ nyc_taxable_income: 800_000
7
+ in_nyc: true
8
+ output:
9
+ nyc_mamdani_income_tax: 0
10
+
11
+ - name: Person at threshold in 2026
12
+ period: 2026
13
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
14
+ input:
15
+ gov.local.ny.mamdani_income_tax.in_effect: True
16
+ nyc_taxable_income: 1_000_000
17
+ in_nyc: true
18
+ output:
19
+ nyc_mamdani_income_tax: 0
20
+
21
+ - name: Person above threshold in 2026
22
+ period: 2026
23
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
24
+ input:
25
+ gov.local.ny.mamdani_income_tax.in_effect: True
26
+ nyc_taxable_income: 1_200_000
27
+ in_nyc: true
28
+ output:
29
+ # (1_200_000 - 1_000_000) * 0.02 = 200_000 * 0.02 = 4_000
30
+ nyc_mamdani_income_tax: 4_000
31
+
32
+ - name: Person well above threshold in 2026
33
+ period: 2026
34
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
35
+ input:
36
+ gov.local.ny.mamdani_income_tax.in_effect: True
37
+ nyc_taxable_income: 2_000_000
38
+ in_nyc: true
39
+ output:
40
+ # (2_000_000 - 1_000_000) * 0.02 = 1_000_000 * 0.02 = 20_000
41
+ nyc_mamdani_income_tax: 20_000
42
+
43
+ - name: Person not in NYC (no tax)
44
+ period: 2026
45
+ reforms: policyengine_us.reforms.local.ny.mamdani_income_tax.nyc_mamdani_income_tax
46
+ input:
47
+ gov.local.ny.mamdani_income_tax.in_effect: True
48
+ nyc_taxable_income: 1_500_000
49
+ in_nyc: false
50
+ output:
51
+ nyc_mamdani_income_tax: 0
@@ -0,0 +1,34 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_countable_assets(Variable):
5
+ value_type = float
6
+ unit = USD
7
+ entity = Person
8
+ label = "Illinois Health Benefits for Workers with Disabilities countable assets"
9
+ definition_period = MONTH
10
+ reference = (
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.381",
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ # HBWD exempt assets per § 120.381:
19
+ # - Primary residence (homestead)
20
+ # - Personal effects and household goods
21
+ # - One vehicle (full exemption if essential, $4,500 if not)
22
+ # - Life insurance ≤$1,500
23
+ # - Burial resources
24
+ # - Retirement accounts inaccessible before age 59.5
25
+ # - Medical savings accounts (26 USC 220)
26
+ # Currently only implementing vehicle exemption
27
+ # § 120.381 and § 113.141 have identical vehicle exemption rules,
28
+ # so using AABD vehicle calculation
29
+ cash_assets = person.spm_unit("spm_unit_cash_assets", period.this_year)
30
+ vehicle_value = person.spm_unit(
31
+ "il_aabd_countable_vehicle_value", period
32
+ )
33
+ # TODO: Implement homestead, retirement account, burial, and other exemptions
34
+ return cash_assets + vehicle_value
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_age_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = (
8
+ "Illinois Health Benefits for Workers with Disabilities age eligible"
9
+ )
10
+ definition_period = MONTH
11
+ reference = (
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
19
+ age = person("monthly_age", period)
20
+ return p.age.calc(age)
@@ -0,0 +1,21 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_asset_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = (
8
+ "Illinois Health Benefits for Workers with Disabilities asset eligible"
9
+ )
10
+ definition_period = MONTH
11
+ reference = (
12
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
13
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
14
+ )
15
+ defined_for = StateCode.IL
16
+
17
+ def formula(person, period, parameters):
18
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
19
+ # Check countable assets against $25,000 limit
20
+ countable_assets = person("il_hbwd_countable_assets", period)
21
+ return countable_assets <= p.asset.limit
@@ -0,0 +1,20 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_disability_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities disability eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ # Must meet Social Security Administration's definition of disability
17
+ is_ssi_disabled = person("is_ssi_disabled", period)
18
+ # Or currently receiving SSDI
19
+ receives_ssdi = person("social_security_disability", period) > 0
20
+ return is_ssi_disabled | receives_ssdi
@@ -0,0 +1,33 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ "https://hfs.illinois.gov/medicalprograms/hbwd.html",
13
+ )
14
+ defined_for = StateCode.IL
15
+
16
+ def formula(person, period, parameters):
17
+ age_eligible = person("il_hbwd_age_eligible", period)
18
+ disability_eligible = person("il_hbwd_disability_eligible", period)
19
+ employment_eligible = person("il_hbwd_employment_eligible", period)
20
+ income_eligible = person("il_hbwd_income_eligible", period)
21
+ asset_eligible = person("il_hbwd_asset_eligible", period)
22
+ immigration_eligible = person(
23
+ "il_hbwd_immigration_status_eligible", period
24
+ )
25
+
26
+ return (
27
+ age_eligible
28
+ & disability_eligible
29
+ & employment_eligible
30
+ & income_eligible
31
+ & asset_eligible
32
+ & immigration_eligible
33
+ )
@@ -0,0 +1,25 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_employment_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities employment eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ # Per § 120.510(l)(1), employment is verified by current payment
17
+ # under FICA or IMRF. We use earned income as a proxy for
18
+ # employment with FICA contributions.
19
+ #
20
+ # Not currently modeled:
21
+ # - § 120.510(l)(2)(A): Future employment exception (60 days)
22
+ # - § 120.510(l)(2)(B): Medical inability grace period (90 days)
23
+ # - § 120.510(l)(2)(C): Job loss grace period (30 days)
24
+ earned_income = person("il_hbwd_gross_earned_income", period)
25
+ return earned_income > 0
@@ -0,0 +1,26 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_immigration_status_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities immigration status eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.310",
11
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
17
+ immigration_status = person("immigration_status", period)
18
+ is_citizen = (
19
+ immigration_status == immigration_status.possible_values.CITIZEN
20
+ )
21
+ immigration_status_str = immigration_status.decode_to_str()
22
+ has_qualifying_status = np.isin(
23
+ immigration_status_str,
24
+ p.qualified_noncitizen_statuses,
25
+ )
26
+ return has_qualifying_status | is_citizen
@@ -0,0 +1,23 @@
1
+ from policyengine_us.model_api import *
2
+
3
+
4
+ class il_hbwd_income_eligible(Variable):
5
+ value_type = bool
6
+ entity = Person
7
+ label = "Illinois Health Benefits for Workers with Disabilities income eligible"
8
+ definition_period = MONTH
9
+ reference = (
10
+ "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-120.510",
11
+ "https://hfs.illinois.gov/medicalprograms/hbwd/eligibility.html",
12
+ )
13
+ defined_for = StateCode.IL
14
+
15
+ def formula(person, period, parameters):
16
+ p = parameters(period).gov.states.il.hfs.hbwd.eligibility
17
+ # Income limit is 350% of FPL
18
+ fpg = person.spm_unit("spm_unit_fpg", period)
19
+ income_limit = fpg * p.income.limit
20
+ # Check household countable income against limit
21
+ # Per § 120.510(f), counts individual + spouse income
22
+ countable_income = person.spm_unit("il_hbwd_countable_income", period)
23
+ return countable_income <= income_limit