diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..6d77beb7a64 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Illinois Health Benefits for Immigrants (HBI) program covering All Kids, HBIA (adults 42-64), and HBIS (seniors 65+). diff --git a/policyengine_us/parameters/gov/hhs/medicaid/eligibility/undocumented_immigrant.yaml b/policyengine_us/parameters/gov/hhs/medicaid/eligibility/undocumented_immigrant.yaml index 224f1b00ad3..2d1f1df6dd3 100644 --- a/policyengine_us/parameters/gov/hhs/medicaid/eligibility/undocumented_immigrant.yaml +++ b/policyengine_us/parameters/gov/hhs/medicaid/eligibility/undocumented_immigrant.yaml @@ -41,8 +41,9 @@ HI: ID: 2021-01-01: false IL: + # Illinois coverage handled separately via il_hbi program + # (Health Benefits for Immigrant Adults/Seniors/All Kids) 2021-01-01: false - 2022-01-01: true IN: 2021-01-01: false IA: diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/in_effect.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/in_effect.yaml new file mode 100644 index 00000000000..6c7a975e29e --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/in_effect.yaml @@ -0,0 +1,17 @@ +description: Illinois determines whether the Health Benefits for Immigrant Adults program is active. +metadata: + unit: bool + period: year + label: Illinois HBIA program in effect + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - HBIA FAQ + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants/hbiafaq.html + +values: + 2020-01-01: false + # HBIA program started May 2022 + 2022-05-01: true + # Program terminated July 1, 2025 + 2025-07-01: false diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/income_limit.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/income_limit.yaml new file mode 100644 index 00000000000..a2c39bf9d79 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/income_limit.yaml @@ -0,0 +1,14 @@ +description: Illinois limits income to this share of the federal poverty level under the Health Benefits for Immigrant Adults program. +metadata: + unit: /1 + period: year + label: Illinois HBIA income limit + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrant Adults + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants/healthbenefitsforimmigrantadults.html + +values: + # HBIA uses MAGI methodology at 138% FPL + 2022-01-01: 1.38 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/max_age.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/max_age.yaml new file mode 100644 index 00000000000..606f6be4050 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/max_age.yaml @@ -0,0 +1,14 @@ +description: Illinois sets the maximum age to this threshold under the Health Benefits for Immigrant Adults program. +metadata: + unit: year + period: year + label: Illinois HBIA maximum age + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrant Adults + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants/healthbenefitsforimmigrantadults.html + +values: + # HBIA covers adults aged 42-64 + 2022-01-01: 64 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/min_age.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/min_age.yaml new file mode 100644 index 00000000000..c71ed736f54 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/min_age.yaml @@ -0,0 +1,15 @@ +description: Illinois sets the minimum age to this threshold under the Health Benefits for Immigrant Adults program. +metadata: + unit: year + period: year + label: Illinois HBIA minimum age + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrant Adults + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants/healthbenefitsforimmigrantadults.html + +values: + # HBIA covers adults aged 42-64 + 2022-05-01: 55 + 2022-07-01: 42 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/in_effect.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/in_effect.yaml new file mode 100644 index 00000000000..9d08c65518d --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/in_effect.yaml @@ -0,0 +1,12 @@ +description: Illinois determines whether All Kids immigrant coverage is active. +metadata: + unit: bool + period: year + label: Illinois All Kids immigrant coverage in effect + reference: + - title: Illinois HFS - About All Kids + href: https://hfs.illinois.gov/medicalprograms/allkids/about.html + +values: + # All Kids has been covering immigrant children since program inception + 2006-01-01: true diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/income_limit.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/income_limit.yaml new file mode 100644 index 00000000000..b450fe538fe --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/income_limit.yaml @@ -0,0 +1,13 @@ +description: Illinois limits income to this share of the federal poverty level for children under the All Kids program. +metadata: + unit: /1 + period: year + label: Illinois All Kids income limit + reference: + - title: Illinois HFS - About All Kids + href: https://hfs.illinois.gov/medicalprograms/allkids/about.html + +values: + # All Kids program covers children regardless of immigration status + # Up to 318% FPL (Premium Level 2 ceiling) + 2006-01-01: 3.18 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/max_age.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/max_age.yaml new file mode 100644 index 00000000000..724b02ce6dc --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/max_age.yaml @@ -0,0 +1,11 @@ +description: Illinois sets the maximum age to this threshold for children under the All Kids program. +metadata: + unit: year + period: year + label: Illinois All Kids maximum age + reference: + - title: Illinois HFS - About All Kids + href: https://hfs.illinois.gov/medicalprograms/allkids/about.html + +values: + 2006-01-01: 18 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/in_effect.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/in_effect.yaml new file mode 100644 index 00000000000..8076b3041e3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/in_effect.yaml @@ -0,0 +1,16 @@ +description: Illinois determines whether the Health Benefits for Immigrant Seniors program is active. +metadata: + unit: bool + period: year + label: Illinois HBIS program in effect + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrants + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html + +values: + 2020-01-01: false + # HBIS program started December 2020 + 2020-12-01: true + # Program remains in effect for existing enrollees (enrollment paused but not terminated) diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/income_limit.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/income_limit.yaml new file mode 100644 index 00000000000..19379da6948 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/income_limit.yaml @@ -0,0 +1,14 @@ +description: Illinois limits income to this share of the federal poverty level under the Health Benefits for Immigrant Seniors program. +metadata: + unit: /1 + period: year + label: Illinois HBIS income limit + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrants + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html + +values: + # HBIS follows Aid to the Aged, Blind or Disabled criteria at 100% FPL + 2020-12-01: 1.00 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/min_age.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/min_age.yaml new file mode 100644 index 00000000000..fc4e4695dc5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/min_age.yaml @@ -0,0 +1,14 @@ +description: Illinois sets the minimum age to this threshold under the Health Benefits for Immigrant Seniors program. +metadata: + unit: year + period: year + label: Illinois HBIS minimum age + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrants + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html + +values: + # HBIS covers seniors aged 65 and older + 2020-12-01: 65 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/resource_limit.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/resource_limit.yaml new file mode 100644 index 00000000000..223b1e4581b --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/resource_limit.yaml @@ -0,0 +1,14 @@ +description: Illinois limits non-exempt resources to this amount per household under the Health Benefits for Immigrant Seniors program. +metadata: + unit: currency-USD + period: year + label: Illinois HBIS resource limit + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois HFS - Health Benefits for Immigrants + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html + +values: + # Non-exempt resources of $17,500 or less per household + 2020-12-01: 17_500 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.yaml new file mode 100644 index 00000000000..307d177ced1 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.yaml @@ -0,0 +1,79 @@ +- name: Child age 10 eligible (All Kids) + period: 2024 + input: + state_code: IL + age: 10 + output: + il_hbi_age_eligible: true + +- name: Child age 18 eligible (All Kids max age) + period: 2024 + input: + state_code: IL + age: 18 + output: + il_hbi_age_eligible: true + +- name: Young adult age 19 NOT eligible (gap age) + period: 2024 + input: + state_code: IL + age: 19 + output: + il_hbi_age_eligible: false + +- name: Adult age 30 NOT eligible (gap age) + period: 2024 + input: + state_code: IL + age: 30 + output: + il_hbi_age_eligible: false + +- name: Adult age 41 NOT eligible (gap age) + period: 2024 + input: + state_code: IL + age: 41 + output: + il_hbi_age_eligible: false + +- name: Adult age 42 eligible (HBIA minimum) + period: 2024 + input: + state_code: IL + age: 42 + output: + il_hbi_age_eligible: true + +- name: Adult age 50 eligible (HBIA) + period: 2024 + input: + state_code: IL + age: 50 + output: + il_hbi_age_eligible: true + +- name: Adult age 64 eligible (HBIA maximum) + period: 2024 + input: + state_code: IL + age: 64 + output: + il_hbi_age_eligible: true + +- name: Senior age 65 eligible (HBIS minimum) + period: 2024 + input: + state_code: IL + age: 65 + output: + il_hbi_age_eligible: true + +- name: Senior age 75 eligible (HBIS) + period: 2024 + input: + state_code: IL + age: 75 + output: + il_hbi_age_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.yaml new file mode 100644 index 00000000000..96ae1048e70 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.yaml @@ -0,0 +1,136 @@ +# Tests for il_hbi_eligible +# Children and adults use MAGI (medicaid_income_level) +# Seniors use AABD methodology (actual income with exemptions) + +- name: Undocumented child at 200% FPL eligible + period: 2024 + input: + state_code: IL + age: 10 + immigration_status: UNDOCUMENTED + medicaid_income_level: 2.00 + output: + il_hbi_eligible: true + +- name: DACA adult age 50 at 100% FPL eligible + period: 2024 + input: + state_code: IL + age: 50 + immigration_status: DACA + medicaid_income_level: 1.00 + output: + il_hbi_eligible: true + +- name: Undocumented senior age 70 with low income eligible + period: 2024 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + social_security: 12_000 # ~80% FPL after AABD exemptions + output: + il_hbi_eligible: true + +- name: Citizen child not eligible (uses regular Medicaid) + period: 2024 + input: + state_code: IL + age: 10 + immigration_status: CITIZEN + medicaid_income_level: 1.00 + output: + il_hbi_eligible: false + +- name: Undocumented adult age 30 not eligible (gap age) + period: 2024 + input: + state_code: IL + age: 30 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.00 + output: + il_hbi_eligible: false + +- name: Undocumented adult over income limit not eligible + period: 2024 + input: + state_code: IL + age: 50 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.50 + output: + il_hbi_eligible: false + +- name: LPR senior not eligible (not covered immigration status) + period: 2024 + input: + state_code: IL + age: 70 + immigration_status: LEGAL_PERMANENT_RESIDENT + social_security: 10_000 + output: + il_hbi_eligible: false + +- name: HBIA adult eligible in 2024 (program still in effect) + period: 2024 + input: + state_code: IL + age: 50 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.00 + output: + il_hbi_eligible: true + +- name: HBIA adult not eligible in 2026 (program ended July 2025) + period: 2026 + input: + state_code: IL + age: 50 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.00 + output: + il_hbi_eligible: false + +- name: HBIS senior still eligible in 2026 (program continues) + period: 2026 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + social_security: 12_000 # Under 100% FPL + output: + il_hbi_eligible: true + +- name: HBIS senior with resources above limit not eligible + period: 2024 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + social_security: 12_000 + spm_unit_assets: 20_000 + output: + il_hbi_eligible: false + +- name: HBIS senior with resources at limit eligible + period: 2024 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + social_security: 12_000 + spm_unit_assets: 17_500 + output: + il_hbi_eligible: true + +- name: HBIA adult with high resources still eligible (no resource test) + period: 2024 + input: + state_code: IL + age: 50 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.00 + spm_unit_assets: 100_000 + output: + il_hbi_eligible: true diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.yaml new file mode 100644 index 00000000000..d3d8c0cdbee --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.yaml @@ -0,0 +1,63 @@ +- name: Undocumented immigrant eligible + period: 2024 + input: + state_code: IL + immigration_status: UNDOCUMENTED + output: + il_hbi_immigration_status_eligible: true + +- name: DACA recipient eligible + period: 2024 + input: + state_code: IL + immigration_status: DACA + output: + il_hbi_immigration_status_eligible: true + +- name: TPS holder eligible + period: 2024 + input: + state_code: IL + immigration_status: TPS + output: + il_hbi_immigration_status_eligible: true + +- name: DACA/TPS combined status eligible + period: 2024 + input: + state_code: IL + immigration_status: DACA_TPS + output: + il_hbi_immigration_status_eligible: true + +- name: Citizen not eligible for HBI (uses regular Medicaid) + period: 2024 + input: + state_code: IL + immigration_status: CITIZEN + output: + il_hbi_immigration_status_eligible: false + +- name: Legal Permanent Resident not eligible for HBI + period: 2024 + input: + state_code: IL + immigration_status: LEGAL_PERMANENT_RESIDENT + output: + il_hbi_immigration_status_eligible: false + +- name: Refugee not eligible for HBI (uses regular Medicaid) + period: 2024 + input: + state_code: IL + immigration_status: REFUGEE + output: + il_hbi_immigration_status_eligible: false + +- name: Asylee not eligible for HBI (uses regular Medicaid) + period: 2024 + input: + state_code: IL + immigration_status: ASYLEE + output: + il_hbi_immigration_status_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.yaml new file mode 100644 index 00000000000..af636ce27ae --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.yaml @@ -0,0 +1,98 @@ +# Tests for il_hbi_income_eligible +# Children and adults use MAGI (medicaid_income_level) +# Seniors use AABD methodology (actual income with exemptions) + +- name: Child at 300% FPL eligible (under 318% limit) + period: 2024 + input: + state_code: IL + age: 10 + medicaid_income_level: 3.00 + output: + il_hbi_income_eligible: true + +- name: Child at 317% FPL eligible (just under limit) + period: 2024 + input: + state_code: IL + age: 10 + medicaid_income_level: 3.17 + output: + il_hbi_income_eligible: true + +- name: Child at 320% FPL not eligible (over limit) + period: 2024 + input: + state_code: IL + age: 10 + medicaid_income_level: 3.20 + output: + il_hbi_income_eligible: false + +- name: Adult 50 at 100% FPL eligible (under 138% limit) + period: 2024 + input: + state_code: IL + age: 50 + medicaid_income_level: 1.00 + output: + il_hbi_income_eligible: true + +- name: Adult 50 at 138% FPL eligible (at limit) + period: 2024 + input: + state_code: IL + age: 50 + medicaid_income_level: 1.38 + output: + il_hbi_income_eligible: true + +- name: Adult 50 at 140% FPL not eligible (over limit) + period: 2024 + input: + state_code: IL + age: 50 + medicaid_income_level: 1.40 + output: + il_hbi_income_eligible: false + +# Senior tests use AABD methodology with actual income +# 2024 FPL for 1 person = $15,060/year +# AABD countable = gross unearned - $25/month flat exemption +# 100% FPL requires $15,060 countable = $15,360 gross ($1,280/month) + +- name: Senior 70 with low Social Security income eligible + period: 2024 + input: + state_code: IL + age: 70 + social_security: 12_000 # ~80% FPL after AABD exemptions + output: + il_hbi_income_eligible: true + +- name: Senior 70 at approximately 100% FPL eligible (at limit) + period: 2024 + input: + state_code: IL + age: 70 + social_security: 15_360 # Countable = $15,060 (100% FPL) + output: + il_hbi_income_eligible: true + +- name: Senior 70 over 100% FPL not eligible (over limit) + period: 2024 + input: + state_code: IL + age: 70 + social_security: 18_000 # Well over 100% FPL + output: + il_hbi_income_eligible: false + +- name: Gap age adult 30 not eligible regardless of income + period: 2024 + input: + state_code: IL + age: 30 + medicaid_income_level: 0.50 + output: + il_hbi_income_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.yaml new file mode 100644 index 00000000000..5553a798670 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.yaml @@ -0,0 +1,74 @@ +# Unit tests for il_hbi_resource_eligible +# Tests the $17,500 resource limit for HBIS (seniors only) + +- name: Senior with resources below limit is resource eligible + period: 2024 + input: + state_code: IL + age: 70 + spm_unit_assets: 10_000 + output: + il_hbi_resource_eligible: true + +- name: Senior with resources at limit is resource eligible + period: 2024 + input: + state_code: IL + age: 70 + spm_unit_assets: 17_500 + output: + il_hbi_resource_eligible: true + +- name: Senior with resources above limit is not resource eligible + period: 2024 + input: + state_code: IL + age: 70 + spm_unit_assets: 20_000 + output: + il_hbi_resource_eligible: false + +- name: Senior with zero resources is resource eligible + period: 2024 + input: + state_code: IL + age: 70 + spm_unit_assets: 0 + output: + il_hbi_resource_eligible: true + +- name: Adult (non-senior) with high resources is still resource eligible + period: 2024 + input: + state_code: IL + age: 50 + spm_unit_assets: 100_000 + output: + il_hbi_resource_eligible: true + +- name: Child with high resources is still resource eligible + period: 2024 + input: + state_code: IL + age: 10 + spm_unit_assets: 500_000 + output: + il_hbi_resource_eligible: true + +- name: Senior just below limit is resource eligible + period: 2024 + input: + state_code: IL + age: 65 + spm_unit_assets: 17_499 + output: + il_hbi_resource_eligible: true + +- name: Senior just above limit is not resource eligible + period: 2024 + input: + state_code: IL + age: 65 + spm_unit_assets: 17_501 + output: + il_hbi_resource_eligible: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.yaml new file mode 100644 index 00000000000..394a9f3d6fc --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.yaml @@ -0,0 +1,37 @@ +# Tests for il_hbi_senior_income_level +# Uses AABD methodology to calculate income as fraction of FPL +# 2024 FPL for 1 person = $15,060/year +# AABD countable = gross unearned - $25/month flat exemption ($300/year) + +- name: Senior with $12,000 Social Security income + period: 2024 + input: + state_code: IL + age: 70 + social_security: 12_000 + output: + # Countable = $12,000 - $300 = $11,700 + # Income level = $11,700 / $15,060 = 0.777 + il_hbi_senior_income_level: 0.777 + +- name: Senior with $15,360 Social Security income at 100% FPL + period: 2024 + input: + state_code: IL + age: 70 + social_security: 15_360 + output: + # Countable = $15,360 - $300 = $15,060 + # Income level = $15,060 / $15,060 = 1.00 + il_hbi_senior_income_level: 1.00 + +- name: Senior with high income over 100% FPL + period: 2024 + input: + state_code: IL + age: 70 + social_security: 18_000 + output: + # Countable = $18,000 - $300 = $17,700 + # Income level = $17,700 / $15,060 = 1.175 + il_hbi_senior_income_level: 1.175 diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/integration.yaml new file mode 100644 index 00000000000..5b71aee1e64 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/integration.yaml @@ -0,0 +1,107 @@ +- name: Illinois family with undocumented members - child eligible, adult in gap + period: 2024 + input: + people: + parent: + age: 35 + immigration_status: UNDOCUMENTED + child: + age: 10 + immigration_status: UNDOCUMENTED + households: + household: + members: [parent, child] + state_code: IL + spm_units: + spm_unit: + members: [parent, child] + spm_unit_net_income: 20_000 + output: + # Parent age 35 is in the gap - not eligible + # Child is eligible + il_hbi_eligible: [false, true] + il_hbi_age_eligible: [false, true] + +- name: Illinois family - senior eligible, younger adult not + period: 2024 + input: + people: + senior: + age: 70 + immigration_status: UNDOCUMENTED + adult_child: + age: 40 + immigration_status: UNDOCUMENTED + households: + household: + members: [senior, adult_child] + state_code: IL + spm_units: + spm_unit: + members: [senior, adult_child] + spm_unit_net_income: 10_000 + output: + # Senior is eligible, adult age 40 is in the gap + il_hbi_eligible: [true, false] + il_hbi_age_eligible: [true, false] + +- name: Illinois HBIA-eligible adult in 2024 + period: 2024 + input: + people: + adult: + age: 50 + immigration_status: UNDOCUMENTED + households: + household: + members: [adult] + state_code: IL + spm_units: + spm_unit: + members: [adult] + spm_unit_net_income: 15_000 + output: + il_hbi_eligible: [true] + # HBI-eligible people become Medicaid eligible and receive benefits + is_medicaid_eligible: [true] + medicaid_group: EXPANSION_ADULT + +- name: Illinois HBI child receives Medicaid benefits + period: 2024 + input: + people: + child: + age: 10 + immigration_status: UNDOCUMENTED + households: + household: + members: [child] + state_code: IL + spm_units: + spm_unit: + members: [child] + spm_unit_net_income: 20_000 + output: + il_hbi_eligible: [true] + is_medicaid_eligible: [true] + medicaid_group: CHILD + +- name: Illinois HBI senior receives Medicaid benefits + period: 2024 + input: + people: + senior: + age: 70 + immigration_status: UNDOCUMENTED + households: + household: + members: [senior] + state_code: IL + spm_units: + spm_unit: + members: [senior] + spm_unit_net_income: 10_000 + output: + il_hbi_eligible: [true] + is_medicaid_eligible: [true] + medicaid_group: AGED_DISABLED diff --git a/policyengine_us/variables/gov/hhs/medicaid/costs/medicaid_group.py b/policyengine_us/variables/gov/hhs/medicaid/costs/medicaid_group.py index 2f74e9e039d..68962c5847f 100644 --- a/policyengine_us/variables/gov/hhs/medicaid/costs/medicaid_group.py +++ b/policyengine_us/variables/gov/hhs/medicaid/costs/medicaid_group.py @@ -57,9 +57,26 @@ def formula(person, period, parameters): | (cat == cats.OLDER_CHILD) ) + # Illinois HBI-specific mapping (for those who fail immigration check + # but are eligible via state-funded HBI program) + il_hbi_eligible = person("il_hbi_eligible", period) + age = person("age", period) + p_hbi = parameters(period).gov.states.il.hfs.hbi.eligibility + il_hbi_child = il_hbi_eligible & (age <= p_hbi.child.max_age) + il_hbi_adult = il_hbi_eligible & ( + (age >= p_hbi.adult.min_age) & (age <= p_hbi.adult.max_age) + ) + il_hbi_senior = il_hbi_eligible & (age >= p_hbi.senior.min_age) + # Core mapping, in precedence order: return select( - [~eligible, disabled, non_expansion_adult, expansion_adult, child], + [ + ~eligible, + disabled | il_hbi_senior, + non_expansion_adult, + expansion_adult | il_hbi_adult, + child | il_hbi_child, + ], [ MedicaidGroup.NONE, MedicaidGroup.AGED_DISABLED, diff --git a/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py b/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py index 41d76a09714..a67f255a857 100644 --- a/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py +++ b/policyengine_us/variables/gov/hhs/medicaid/eligibility/is_medicaid_eligible.py @@ -18,16 +18,23 @@ def formula(person, period, parameters): "is_medicaid_immigration_status_eligible", period ) ca_ffyp_eligible = person("ca_ffyp_eligible", period) + il_hbi_eligible = person("il_hbi_eligible", period) p = parameters(period).gov.hhs.medicaid.eligibility if p.work_requirements.applies: work_requirement_eligible = person( "medicaid_work_requirement_eligible", period ) return ( - categorically_eligible - & immigration_status_eligible - & work_requirement_eligible - ) | ca_ffyp_eligible + ( + categorically_eligible + & immigration_status_eligible + & work_requirement_eligible + ) + | ca_ffyp_eligible + | il_hbi_eligible + ) return ( - categorically_eligible & immigration_status_eligible - ) | ca_ffyp_eligible + (categorically_eligible & immigration_status_eligible) + | ca_ffyp_eligible + | il_hbi_eligible + ) diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.py new file mode 100644 index 00000000000..3db4cab1444 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class il_hbi_age_eligible(Variable): + value_type = bool + entity = Person + label = "Meets Illinois Health Benefits for Immigrants age eligibility" + definition_period = YEAR + defined_for = StateCode.IL + reference = ( + "https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html", + "https://www.dhs.state.il.us/page.aspx?item=161600", + "https://hfs.illinois.gov/medicalprograms/allkids/about.html", + ) + # Illinois HBI covers specific age groups: + # - Children: 0-18 (All Kids) + # - Adults: 42-64 (HBIA) + # - Seniors: 65+ (HBIS) + # + # Note: Ages 19-41 are NOT covered by any Illinois immigrant health program. + + def formula(person, period, parameters): + p = parameters(period).gov.states.il.hfs.hbi.eligibility + + age = person("age", period) + + # Determine if in a covered age group + is_child = age <= p.child.max_age + is_adult = (age >= p.adult.min_age) & (age <= p.adult.max_age) + is_senior = age >= p.senior.min_age + + return is_child | is_adult | is_senior diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.py new file mode 100644 index 00000000000..48e75a5ac17 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.py @@ -0,0 +1,60 @@ +from policyengine_us.model_api import * + + +class il_hbi_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for Illinois Health Benefits for Immigrants" + definition_period = YEAR + defined_for = StateCode.IL + reference = ( + "https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html", + "https://www.dhs.state.il.us/page.aspx?item=161600", + "https://hfs.illinois.gov/medicalprograms/allkids/about.html", + ) + # Illinois Health Benefits for Immigrants (HBI) is a state-funded program + # providing health coverage to income-eligible residents who are not eligible + # for federal Medicaid due to their immigration status. + # + # The program includes three components: + # - All Kids: Children 0-18 up to 318% FPL + # - HBIA (Health Benefits for Immigrant Adults): Ages 42-64 up to 138% FPL + # - HBIS (Health Benefits for Immigrant Seniors): Ages 65+ up to 100% FPL + # + # Note: Ages 19-41 are not covered. + + def formula(person, period, parameters): + p = parameters(period).gov.states.il.hfs.hbi.eligibility + + # Check base eligibility criteria + immigration_eligible = person( + "il_hbi_immigration_status_eligible", period + ) + age_eligible = person("il_hbi_age_eligible", period) + income_eligible = person("il_hbi_income_eligible", period) + resource_eligible = person("il_hbi_resource_eligible", period) + + # Determine age group for program-specific in_effect checks + age = person("age", period) + is_child = age <= p.child.max_age + is_adult = (age >= p.adult.min_age) & (age <= p.adult.max_age) + is_senior = age >= p.senior.min_age + + # Check if the relevant program is in effect for each age group + child_in_effect = p.child.in_effect + adult_in_effect = p.adult.in_effect + senior_in_effect = p.senior.in_effect + + program_in_effect = ( + (is_child & child_in_effect) + | (is_adult & adult_in_effect) + | (is_senior & senior_in_effect) + ) + + return ( + immigration_eligible + & age_eligible + & income_eligible + & resource_eligible + & program_in_effect + ) diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.py new file mode 100644 index 00000000000..7724bbe13d6 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class il_hbi_immigration_status_eligible(Variable): + value_type = bool + entity = Person + label = "Has eligible immigration status for Illinois HBI" + definition_period = YEAR + defined_for = StateCode.IL + reference = ( + "https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html", + "https://www.dhs.state.il.us/page.aspx?item=161600", + ) + # Illinois Health Benefits for Immigrants (HBI) covers residents who are not + # eligible for federal Medicaid due to their immigration status. + + def formula(person, period, parameters): + # Eligible for HBI if NOT eligible for federal Medicaid + # due to immigration status + federal_eligible = person( + "is_medicaid_immigration_status_eligible", period + ) + return ~federal_eligible diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.py new file mode 100644 index 00000000000..67b22c96997 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.py @@ -0,0 +1,51 @@ +from policyengine_us.model_api import * + + +class il_hbi_income_eligible(Variable): + value_type = bool + entity = Person + label = "Meets Illinois Health Benefits for Immigrants income eligibility" + definition_period = YEAR + defined_for = StateCode.IL + reference = ( + "https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html", + "https://www.dhs.state.il.us/page.aspx?item=161600", + "https://hfs.illinois.gov/medicalprograms/allkids/about.html", + ) + # Illinois HBI has different income limits and methodologies by age group: + # - Children (0-18): Up to 318% FPL (All Kids, uses MAGI) + # - Adults (42-64): Up to 138% FPL (HBIA, uses MAGI) + # - Seniors (65+): Up to 100% FPL (HBIS, uses AABD methodology) + # + # Per Illinois DHS, HBIS follows AABD community eligibility criteria + # for income counting, which differs from MAGI. + + def formula(person, period, parameters): + p = parameters(period).gov.states.il.hfs.hbi.eligibility + + age = person("age", period) + + # Age thresholds + is_child = age <= p.child.max_age + is_adult = (age >= p.adult.min_age) & (age <= p.adult.max_age) + is_senior = age >= p.senior.min_age + + # Get appropriate income level based on age group + # Children and adults use MAGI, seniors use AABD methodology + magi_income_level = person("medicaid_income_level", period) + aabd_income_level = person("il_hbi_senior_income_level", period) + + income_level = where(is_senior, aabd_income_level, magi_income_level) + + # Select appropriate income limit based on age + income_limit = select( + [is_child, is_adult, is_senior], + [ + p.child.income_limit, + p.adult.income_limit, + p.senior.income_limit, + ], + default=0, # Ages 19-41 not covered + ) + + return income_level <= income_limit diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.py new file mode 100644 index 00000000000..8be65953f10 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.py @@ -0,0 +1,32 @@ +from policyengine_us.model_api import * + + +class il_hbi_resource_eligible(Variable): + value_type = bool + entity = Person + label = "Meets Illinois HBI resource eligibility" + definition_period = YEAR + defined_for = StateCode.IL + reference = ("https://www.dhs.state.il.us/page.aspx?item=161600",) + # Illinois HBIS (Health Benefits for Immigrant Seniors) has a resource limit + # of $17,500 or less in non-exempt resources per household. + # + # This resource test only applies to seniors (age 65+) in the HBIS program. + # Children (All Kids) and adults (HBIA) do not have a resource test. + + def formula(person, period, parameters): + p = parameters(period).gov.states.il.hfs.hbi.eligibility + + age = person("age", period) + is_senior = age >= p.senior.min_age + + # Get household assets + household_assets = person.spm_unit("spm_unit_assets", period) + + # Seniors must meet the resource test + # Non-seniors automatically pass (no resource test) + return where( + is_senior, + household_assets <= p.senior.resource_limit, + True, + ) diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_countable_income.py b/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_countable_income.py new file mode 100644 index 00000000000..c700f67f64d --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_countable_income.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class il_hbi_senior_countable_income(Variable): + value_type = float + entity = Person + label = "Illinois HBIS countable income using AABD methodology" + unit = USD + definition_period = MONTH + defined_for = StateCode.IL + reference = ( + "https://www.dhs.state.il.us/page.aspx?item=161600", + "https://www.law.cornell.edu/regulations/illinois/Ill-Admin-Code-tit-89-SS-113.120", + ) + # Per Illinois DHS, HBIS follows AABD community eligibility criteria + # for income counting. This variable reuses the AABD income methodology + # without the AABD-specific eligibility restrictions. + + adds = [ + "il_aabd_earned_income_after_exemption_person", + "il_aabd_countable_unearned_income", + ] diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.py b/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.py new file mode 100644 index 00000000000..cd849e033ad --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class il_hbi_senior_income_level(Variable): + value_type = float + entity = Person + label = "Illinois HBIS income as share of federal poverty level" + unit = "/1" + definition_period = YEAR + defined_for = StateCode.IL + reference = ("https://www.dhs.state.il.us/page.aspx?item=161600",) + # HBIS uses AABD methodology for income counting but compares against + # 100% of the federal poverty level. + + def formula(person, period, parameters): + # Get monthly AABD-methodology income and annualize + income = person("il_hbi_senior_countable_income", period) + + # Get household FPL based on SPM unit size + fpg = person.spm_unit("spm_unit_fpg", period) + + # Return income as fraction of FPL (handle divide by zero) + return where(fpg > 0, income / fpg, 0) diff --git a/uv.lock b/uv.lock index f5c71bb5e42..c025685f95d 100644 --- a/uv.lock +++ b/uv.lock @@ -1534,7 +1534,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.479.0" +version = "1.483.0" source = { editable = "." } dependencies = [ { name = "microdf-python" },