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.
- policyengine_us/parameters/gov/local/ny/mamdani_income_tax/in_effect.yaml +10 -0
- policyengine_us/parameters/gov/local/ny/mamdani_income_tax/rate.yaml +18 -0
- policyengine_us/parameters/gov/states/il/hfs/README.md +1 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/README.md +1 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/age.yaml +25 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/asset/limit.yaml +15 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/limit.yaml +15 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/sources/earned.yaml +13 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/income/sources/unearned.yaml +25 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/eligibility/qualified_noncitizen_statuses.yaml +21 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/premium/earned.yaml +96 -0
- policyengine_us/parameters/gov/states/il/hfs/hbwd/premium/unearned.yaml +96 -0
- policyengine_us/reforms/local/ny/__init__.py +4 -0
- policyengine_us/reforms/local/ny/mamdani_income_tax.py +84 -0
- policyengine_us/reforms/reforms.py +9 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/asset/il_hbwd_countable_assets.yaml +23 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_age_eligible.yaml +39 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_asset_eligible.yaml +31 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.yaml +35 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.yaml +65 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_employment_eligible.yaml +34 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.yaml +47 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/eligibility/il_hbwd_income_eligible.yaml +25 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/il_hbwd_person.yaml +34 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/il_hbwd_premium.yaml +84 -0
- policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbwd/integration.yaml +183 -0
- policyengine_us/tests/policy/contrib/local/ny/nyc_mamdani_income_tax.yaml +51 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/asset/il_hbwd_countable_assets.py +34 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_age_eligible.py +20 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_asset_eligible.py +21 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_disability_eligible.py +20 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_eligible.py +33 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_employment_eligible.py +25 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.py +26 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_income_eligible.py +23 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd.py +17 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd_person.py +24 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/il_hbwd_premium.py +23 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/income/earned/il_hbwd_countable_earned_income.py +24 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/income/earned/il_hbwd_gross_earned_income.py +16 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/income/il_hbwd_countable_income.py +21 -0
- policyengine_us/variables/gov/states/il/hfs/hbwd/income/unearned/il_hbwd_countable_unearned_income.py +16 -0
- {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/METADATA +1 -1
- {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/RECORD +47 -6
- {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/WHEEL +1 -1
- {policyengine_us-1.442.1.dist-info → policyengine_us-1.444.0.dist-info}/entry_points.txt +0 -0
- {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
|
policyengine_us/variables/gov/states/il/hfs/hbwd/eligibility/il_hbwd_immigration_status_eligible.py
ADDED
|
@@ -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
|