From 6b74627fcb4a34da648d4f703332a0b6a8de7cff Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Wed, 17 Dec 2025 12:50:33 -0500 Subject: [PATCH 01/15] Illinois medicaid for undocumented immigrants Fixes #7004 --- changelog_entry.yaml | 1 + .../eligibility/undocumented_immigrant.yaml | 3 +- .../hfs/hbi/eligibility/adult_in_effect.yaml | 17 ++++ .../hbi/eligibility/adult_income_limit.yaml | 14 +++ .../il/hfs/hbi/eligibility/adult_max_age.yaml | 14 +++ .../il/hfs/hbi/eligibility/adult_min_age.yaml | 14 +++ .../adult_new_enrollment_open.yaml | 16 +++ .../hfs/hbi/eligibility/child_in_effect.yaml | 12 +++ .../hbi/eligibility/child_income_limit.yaml | 15 +++ .../il/hfs/hbi/eligibility/child_max_age.yaml | 11 +++ .../child_new_enrollment_open.yaml | 12 +++ .../hfs/hbi/eligibility/senior_in_effect.yaml | 16 +++ .../hbi/eligibility/senior_income_limit.yaml | 14 +++ .../hfs/hbi/eligibility/senior_min_age.yaml | 14 +++ .../senior_new_enrollment_open.yaml | 16 +++ .../eligibility/senior_resource_limit.yaml | 14 +++ .../hbi/eligibility/il_hbi_age_eligible.yaml | 79 +++++++++++++++ .../hfs/hbi/eligibility/il_hbi_eligible.yaml | 99 +++++++++++++++++++ .../il_hbi_immigration_status_eligible.yaml | 63 ++++++++++++ .../eligibility/il_hbi_income_eligible.yaml | 89 +++++++++++++++++ .../il_hbi_new_enrollment_eligible.yaml | 49 +++++++++ .../gov/states/il/hfs/hbi/integration.yaml | 66 +++++++++++++ .../gov/territories/pr/tax/income/pr_agi.yaml | 2 +- .../pr/tax/income/pr_agi_person.yaml | 2 +- .../hbi/eligibility/il_hbi_age_eligible.py | 40 ++++++++ .../il/hfs/hbi/eligibility/il_hbi_eligible.py | 66 +++++++++++++ .../il_hbi_immigration_status_eligible.py | 37 +++++++ .../hbi/eligibility/il_hbi_income_eligible.py | 51 ++++++++++ .../gov/states/il/hfs/hbi/il_hbi_enrolled.py | 19 ++++ .../hfs/hbi/il_hbi_new_enrollment_eligible.py | 52 ++++++++++ 30 files changed, 914 insertions(+), 3 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_in_effect.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_income_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_max_age.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_min_age.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_in_effect.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_income_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_max_age.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_in_effect.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_income_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_min_age.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml create mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_resource_limit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/integration.yaml create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.py create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.py create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.py create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.py create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..8b137891791 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1 @@ + 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..42eefe18664 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_in_effect.yaml @@ -0,0 +1,17 @@ +description: Whether Illinois Health Benefits for Immigrant Adults (HBIA) program is in effect +metadata: + unit: bool + period: year + label: IL HBIA 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 January 2022 + 2022-01-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..3921ace6970 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_income_limit.yaml @@ -0,0 +1,14 @@ +description: Illinois Health Benefits for Immigrant Adults (HBIA) income limit as percentage of FPL +metadata: + unit: /1 + period: year + label: IL HBIA adult income limit (% FPL) + 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..c8e0a34e5cb --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_max_age.yaml @@ -0,0 +1,14 @@ +description: Maximum age for Illinois Health Benefits for Immigrant Adults (HBIA) +metadata: + unit: year + period: year + label: IL 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..5436e4b3e6d --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_min_age.yaml @@ -0,0 +1,14 @@ +description: Minimum age for Illinois Health Benefits for Immigrant Adults (HBIA) +metadata: + unit: year + period: year + label: IL 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-01-01: 42 diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml new file mode 100644 index 00000000000..d8c123a6f29 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml @@ -0,0 +1,16 @@ +description: Whether new enrollment is open for Illinois Health Benefits for Immigrant Adults (HBIA) +metadata: + unit: bool + period: year + label: IL HBIA new enrollment open + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Capitol News Illinois - HBIS enrollment pause + href: https://capitolnewsillinois.com/news/state-to-pause-enrollment-in-health-care-program-for-immigrant-seniors-as-spending-again-outpaces-estimates/ + +values: + # HBIA started Jan 2022 + 2022-01-01: true + # New enrollment paused July 1, 2023 + 2023-07-01: false 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..35db94fedf7 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_in_effect.yaml @@ -0,0 +1,12 @@ +description: Whether Illinois All Kids immigrant coverage is in effect +metadata: + unit: bool + period: year + label: IL HBI child 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..cd0ee9a7ee4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_income_limit.yaml @@ -0,0 +1,15 @@ +description: Illinois Health Benefits for Immigrants income limit for children as percentage of FPL +metadata: + unit: /1 + period: year + label: IL HBI child income limit (% FPL) + reference: + - title: Illinois HFS - About All Kids + href: https://hfs.illinois.gov/medicalprograms/allkids/about.html + - title: Illinois Legal Aid - All Kids + href: https://www.illinoislegalaid.org/legal-information/getting-all-kids-health-insurance + +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..a2f8d67da8b --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_max_age.yaml @@ -0,0 +1,11 @@ +description: Maximum age for Illinois All Kids immigrant coverage +metadata: + unit: year + period: year + label: IL HBI child 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/child_new_enrollment_open.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml new file mode 100644 index 00000000000..e47c7cbb5d4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml @@ -0,0 +1,12 @@ +description: Whether new enrollment is open for Illinois All Kids immigrant coverage +metadata: + unit: bool + period: year + label: IL HBI child new enrollment open + reference: + - title: Illinois HFS - About All Kids + href: https://hfs.illinois.gov/medicalprograms/allkids/about.html + +values: + # All Kids remains open for new enrollment + 2006-01-01: true 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..f7a6300e49d --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_in_effect.yaml @@ -0,0 +1,16 @@ +description: Whether Illinois Health Benefits for Immigrant Seniors (HBIS) program is in effect +metadata: + unit: bool + period: year + label: IL HBIS in effect + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois Legal Aid - Health Benefits for Immigrant Seniors + href: https://www.illinoislegalaid.org/legal-information/health-benefits-immigrant-seniors + +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..28d3420d3a5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_income_limit.yaml @@ -0,0 +1,14 @@ +description: Illinois Health Benefits for Immigrant Seniors (HBIS) income limit as percentage of FPL +metadata: + unit: /1 + period: year + label: IL HBIS senior income limit (% FPL) + 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..e4ee53e2b43 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_min_age.yaml @@ -0,0 +1,14 @@ +description: Minimum age for Illinois Health Benefits for Immigrant Seniors (HBIS) +metadata: + unit: year + period: year + label: IL 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_new_enrollment_open.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml new file mode 100644 index 00000000000..1b431cdc7bd --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml @@ -0,0 +1,16 @@ +description: Whether new enrollment is open for Illinois Health Benefits for Immigrant Seniors (HBIS) +metadata: + unit: bool + period: year + label: IL HBIS new enrollment open + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Capitol News Illinois - HBIS enrollment pause + href: https://capitolnewsillinois.com/news/state-to-pause-enrollment-in-health-care-program-for-immigrant-seniors-as-spending-again-outpaces-estimates/ + +values: + # HBIS started December 2020 + 2020-12-01: true + # New enrollment paused November 6, 2023 + 2023-11-06: false 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..9f89fbe70c5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_resource_limit.yaml @@ -0,0 +1,14 @@ +description: Illinois Health Benefits for Immigrant Seniors (HBIS) resource limit +metadata: + unit: currency-USD + period: year + label: IL HBIS resource limit + reference: + - title: Illinois DHS - HBIA and HBIS Policy + href: https://www.dhs.state.il.us/page.aspx?item=161600 + - title: Illinois Legal Aid - Health Benefits for Immigrant Seniors + href: https://www.illinoislegalaid.org/legal-information/health-benefits-immigrant-seniors + +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..90c9a510c6b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.yaml @@ -0,0 +1,99 @@ +- 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 at 90% FPL eligible + period: 2024 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + medicaid_income_level: 0.90 + 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 + medicaid_income_level: 0.80 + 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 + medicaid_income_level: 0.90 + 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..9a33137026a --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_income_eligible.yaml @@ -0,0 +1,89 @@ +- 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 + +- name: Senior 70 at 90% FPL eligible (under 100% limit) + period: 2024 + input: + state_code: IL + age: 70 + medicaid_income_level: 0.90 + output: + il_hbi_income_eligible: true + +- name: Senior 70 at 100% FPL eligible (at limit) + period: 2024 + input: + state_code: IL + age: 70 + medicaid_income_level: 1.00 + output: + il_hbi_income_eligible: true + +- name: Senior 70 at 110% FPL not eligible (over limit) + period: 2024 + input: + state_code: IL + age: 70 + medicaid_income_level: 1.10 + 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_new_enrollment_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml new file mode 100644 index 00000000000..00f71ec5d46 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml @@ -0,0 +1,49 @@ +- name: Child can newly enroll in 2024 (All Kids open) + period: 2024 + input: + state_code: IL + age: 10 + immigration_status: UNDOCUMENTED + medicaid_income_level: 2.00 + output: + il_hbi_new_enrollment_eligible: true + +- name: Adult cannot newly enroll in 2024 (HBIA enrollment paused July 2023) + period: 2024 + input: + state_code: IL + age: 50 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.00 + output: + il_hbi_new_enrollment_eligible: false + +- name: Senior cannot newly enroll in 2024 (HBIS enrollment paused Nov 2023) + period: 2024 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + medicaid_income_level: 0.90 + output: + il_hbi_new_enrollment_eligible: false + +- name: Adult could newly enroll in early 2023 (before pause) + period: 2023 + input: + state_code: IL + age: 50 + immigration_status: UNDOCUMENTED + medicaid_income_level: 1.00 + output: + il_hbi_new_enrollment_eligible: true + +- name: Senior could newly enroll in early 2023 (before pause) + period: 2023 + input: + state_code: IL + age: 70 + immigration_status: UNDOCUMENTED + medicaid_income_level: 0.90 + output: + il_hbi_new_enrollment_eligible: true 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..ff3f5bfece4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/integration.yaml @@ -0,0 +1,66 @@ +- 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] + # But cannot newly enroll (enrollment paused) + il_hbi_new_enrollment_eligible: [false] diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml index c45833f7576..a768c0fce95 100644 --- a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi.yaml @@ -14,4 +14,4 @@ alimony_expense: 10_000 state_code: PR output: - pr_agi: 0 \ No newline at end of file + pr_agi: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml index 6da27d793be..cc7aaab0c93 100644 --- a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_agi_person.yaml @@ -14,4 +14,4 @@ filing_status: SEPARATE state_code: PR output: - pr_agi_person: 20_000 \ No newline at end of file + pr_agi_person: 20_000 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..50d8c4b1ef8 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_age_eligible.py @@ -0,0 +1,40 @@ +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", + ] + documentation = """ + 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) + + # Age thresholds + child_max_age = p.child_max_age + adult_min_age = p.adult_min_age + adult_max_age = p.adult_max_age + senior_min_age = p.senior_min_age + + # Determine if in a covered age group + is_child = age <= child_max_age + is_adult = (age >= adult_min_age) & (age <= adult_max_age) + is_senior = age >= 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..5a80342da66 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_eligible.py @@ -0,0 +1,66 @@ +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", + ] + documentation = """ + 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. HBIA ended July 2025, HBIS enrollment + is paused but existing enrollees can renew. + """ + + 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) + + # Determine age group for program-specific in_effect checks + age = person("age", period) + child_max_age = p.child_max_age + adult_min_age = p.adult_min_age + adult_max_age = p.adult_max_age + senior_min_age = p.senior_min_age + + is_child = age <= child_max_age + is_adult = (age >= adult_min_age) & (age <= adult_max_age) + is_senior = age >= 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 + & 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..1ee2893ab8c --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_immigration_status_eligible.py @@ -0,0 +1,37 @@ +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 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", + ] + documentation = """ + Illinois Health Benefits for Immigrants (HBI) covers residents who are not + eligible for federal Medicaid due to their immigration status. This includes + undocumented immigrants, DACA recipients, and TPS holders. + + As of May 1, 2024, Lawful Permanent Residents are NOT eligible for HBIA/HBIS + (they may qualify for federal Medicaid after 5-year waiting period). + """ + + def formula(person, period, parameters): + immigration_status = person("immigration_status", period) + statuses = immigration_status.possible_values + + # Illinois covers undocumented immigrants + undocumented = immigration_status == statuses.UNDOCUMENTED + + # Illinois also covers DACA and TPS recipients + daca = immigration_status == statuses.DACA + tps = immigration_status == statuses.TPS + daca_tps = immigration_status == statuses.DACA_TPS + + # Only return true for non-federally-eligible statuses + # Citizens, LPRs, refugees use regular federal Medicaid + return undocumented | daca | tps | daca_tps 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..8d823bf586d --- /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", + ] + documentation = """ + Illinois HBI has different income limits based on age group: + - Children (0-18): Up to 318% FPL (All Kids) + - Adults (42-64): Up to 138% FPL (HBIA, uses MAGI) + - Seniors (65+): Up to 100% FPL (HBIS) + """ + + def formula(person, period, parameters): + p = parameters(period).gov.states.il.hfs.hbi.eligibility + + income_level = person("medicaid_income_level", period) + age = person("age", period) + + # Age thresholds + child_max_age = p.child_max_age + adult_min_age = p.adult_min_age + adult_max_age = p.adult_max_age + senior_min_age = p.senior_min_age + + # Determine age category + is_child = age <= child_max_age + is_adult = (age >= adult_min_age) & (age <= adult_max_age) + is_senior = age >= senior_min_age + + # Income limits by age group + child_limit = p.child_income_limit + adult_limit = p.adult_income_limit + senior_limit = p.senior_income_limit + + # Select appropriate income limit based on age + income_limit = select( + [is_child, is_adult, is_senior], + [child_limit, adult_limit, senior_limit], + default=0, # Ages 19-41 not covered + ) + + return income_level <= income_limit diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py b/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py new file mode 100644 index 00000000000..3dbe49184bc --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class il_hbi_enrolled(Variable): + value_type = bool + entity = Person + label = "Enrolled in Illinois Health Benefits for Immigrants" + definition_period = YEAR + defined_for = StateCode.IL + documentation = """ + Whether a person is currently enrolled in Illinois Health Benefits for + Immigrants. This is an input variable because enrollment depends on + whether a person enrolled before enrollment freezes took effect. + + Key dates: + - HBIA (adults 42-64): New enrollment paused July 1, 2023; program ended July 1, 2025 + - HBIS (seniors 65+): New enrollment paused November 6, 2023; existing enrollees can renew + - All Kids (children 0-18): Enrollment remains open + """ diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py new file mode 100644 index 00000000000..610fd100df2 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py @@ -0,0 +1,52 @@ +from policyengine_us.model_api import * + + +class il_hbi_new_enrollment_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for new enrollment in 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", + ] + documentation = """ + Whether a person is eligible to newly enroll in Illinois Health Benefits + for Immigrants. This combines eligibility with whether new enrollment is + currently open for their age group. + + - Children (All Kids): Open enrollment + - Adults 42-64 (HBIA): New enrollment paused July 1, 2023 + - Seniors 65+ (HBIS): New enrollment paused November 6, 2023 + """ + + def formula(person, period, parameters): + p = parameters(period).gov.states.il.hfs.hbi.eligibility + + # Must be eligible + eligible = person("il_hbi_eligible", period) + + # Determine age group + age = person("age", period) + child_max_age = p.child_max_age + adult_min_age = p.adult_min_age + adult_max_age = p.adult_max_age + senior_min_age = p.senior_min_age + + is_child = age <= child_max_age + is_adult = (age >= adult_min_age) & (age <= adult_max_age) + is_senior = age >= senior_min_age + + # Check if new enrollment is open for age group + child_open = p.child_new_enrollment_open + adult_open = p.adult_new_enrollment_open + senior_open = p.senior_new_enrollment_open + + enrollment_open = ( + (is_child & child_open) + | (is_adult & adult_open) + | (is_senior & senior_open) + ) + + return eligible & enrollment_open From 2839de2f6f7bf895ff11bdf5e3877791aca068bc Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 10:28:40 -0500 Subject: [PATCH 02/15] Update changelog to include Illinois Health Benefits for Immigrants program details --- changelog_entry.yaml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/changelog_entry.yaml b/changelog_entry.yaml index 8b137891791..50d722017b4 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -1 +1,4 @@ - +- bump: patch + changes: + fixed: + - Illinois Health Benefits for Immigrants (HBI) program covering All Kids, HBIA (adults 42-64), and HBIS (seniors 65+). From 256f104817714384f3c6529ff3d9bc845548fd31 Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 13:13:58 -0500 Subject: [PATCH 03/15] Illinois medicaid for undocumented immigrants Fixes #7004 --- .../eligibility/{adult_in_effect.yaml => adult/in_effect.yaml} | 0 .../{adult_income_limit.yaml => adult/income_limit.yaml} | 0 .../hbi/eligibility/{adult_max_age.yaml => adult/max_age.yaml} | 0 .../hbi/eligibility/{adult_min_age.yaml => adult/min_age.yaml} | 0 .../eligibility/{child_in_effect.yaml => child/in_effect.yaml} | 0 .../{child_income_limit.yaml => child/income_limit.yaml} | 0 .../hbi/eligibility/{child_max_age.yaml => child/max_age.yaml} | 0 .../eligibility/{senior_in_effect.yaml => senior/in_effect.yaml} | 0 .../{senior_income_limit.yaml => senior/income_limit.yaml} | 0 .../hbi/eligibility/{senior_min_age.yaml => senior/min_age.yaml} | 0 .../{senior_resource_limit.yaml => senior/resource_limit.yaml} | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{adult_in_effect.yaml => adult/in_effect.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{adult_income_limit.yaml => adult/income_limit.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{adult_max_age.yaml => adult/max_age.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{adult_min_age.yaml => adult/min_age.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{child_in_effect.yaml => child/in_effect.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{child_income_limit.yaml => child/income_limit.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{child_max_age.yaml => child/max_age.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{senior_in_effect.yaml => senior/in_effect.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{senior_income_limit.yaml => senior/income_limit.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{senior_min_age.yaml => senior/min_age.yaml} (100%) rename policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/{senior_resource_limit.yaml => senior/resource_limit.yaml} (100%) 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_in_effect.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/in_effect.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_income_limit.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/income_limit.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_max_age.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/max_age.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_min_age.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/min_age.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_in_effect.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/in_effect.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_income_limit.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/income_limit.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_max_age.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child/max_age.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_in_effect.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/in_effect.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_income_limit.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/income_limit.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_min_age.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/min_age.yaml 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 similarity index 100% rename from policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_resource_limit.yaml rename to policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior/resource_limit.yaml From 57b02eeee46e24c88f0885eb5c068b93d5603571 Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 13:18:04 -0500 Subject: [PATCH 04/15] Simplify Illinois HBI implementation and integrate with Medicaid benefits MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove new enrollment tracking (6 files deleted) - Reorganize parameters into adult/child/senior subfolders - Simplify immigration check to use ~is_medicaid_immigration_status_eligible - Integrate HBI with Medicaid benefit system: - Add il_hbi_eligible to is_medicaid_eligible - Map HBI age groups to Medicaid spending categories - Fix changelog: patch→minor, fixed→added 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- changelog_entry.yaml | 4 +- .../adult_new_enrollment_open.yaml | 16 ------ .../child_new_enrollment_open.yaml | 12 ----- .../senior_new_enrollment_open.yaml | 16 ------ .../il_hbi_new_enrollment_eligible.yaml | 49 ----------------- .../gov/states/il/hfs/hbi/integration.yaml | 45 +++++++++++++++- .../gov/hhs/medicaid/costs/medicaid_group.py | 19 ++++++- .../eligibility/is_medicaid_eligible.py | 19 ++++--- .../hbi/eligibility/il_hbi_age_eligible.py | 8 +-- .../il/hfs/hbi/eligibility/il_hbi_eligible.py | 17 +++--- .../il_hbi_immigration_status_eligible.py | 26 +++------- .../hbi/eligibility/il_hbi_income_eligible.py | 14 ++--- .../gov/states/il/hfs/hbi/il_hbi_enrolled.py | 19 ------- .../hfs/hbi/il_hbi_new_enrollment_eligible.py | 52 ------------------- 14 files changed, 102 insertions(+), 214 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml delete mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml delete mode 100644 policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml delete mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml delete mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py delete mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py diff --git a/changelog_entry.yaml b/changelog_entry.yaml index 50d722017b4..6d77beb7a64 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -1,4 +1,4 @@ -- bump: patch +- bump: minor changes: - fixed: + 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/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml deleted file mode 100644 index d8c123a6f29..00000000000 --- a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult_new_enrollment_open.yaml +++ /dev/null @@ -1,16 +0,0 @@ -description: Whether new enrollment is open for Illinois Health Benefits for Immigrant Adults (HBIA) -metadata: - unit: bool - period: year - label: IL HBIA new enrollment open - reference: - - title: Illinois DHS - HBIA and HBIS Policy - href: https://www.dhs.state.il.us/page.aspx?item=161600 - - title: Capitol News Illinois - HBIS enrollment pause - href: https://capitolnewsillinois.com/news/state-to-pause-enrollment-in-health-care-program-for-immigrant-seniors-as-spending-again-outpaces-estimates/ - -values: - # HBIA started Jan 2022 - 2022-01-01: true - # New enrollment paused July 1, 2023 - 2023-07-01: false diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml deleted file mode 100644 index e47c7cbb5d4..00000000000 --- a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/child_new_enrollment_open.yaml +++ /dev/null @@ -1,12 +0,0 @@ -description: Whether new enrollment is open for Illinois All Kids immigrant coverage -metadata: - unit: bool - period: year - label: IL HBI child new enrollment open - reference: - - title: Illinois HFS - About All Kids - href: https://hfs.illinois.gov/medicalprograms/allkids/about.html - -values: - # All Kids remains open for new enrollment - 2006-01-01: true diff --git a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml b/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml deleted file mode 100644 index 1b431cdc7bd..00000000000 --- a/policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/senior_new_enrollment_open.yaml +++ /dev/null @@ -1,16 +0,0 @@ -description: Whether new enrollment is open for Illinois Health Benefits for Immigrant Seniors (HBIS) -metadata: - unit: bool - period: year - label: IL HBIS new enrollment open - reference: - - title: Illinois DHS - HBIA and HBIS Policy - href: https://www.dhs.state.il.us/page.aspx?item=161600 - - title: Capitol News Illinois - HBIS enrollment pause - href: https://capitolnewsillinois.com/news/state-to-pause-enrollment-in-health-care-program-for-immigrant-seniors-as-spending-again-outpaces-estimates/ - -values: - # HBIS started December 2020 - 2020-12-01: true - # New enrollment paused November 6, 2023 - 2023-11-06: false diff --git a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml deleted file mode 100644 index 00f71ec5d46..00000000000 --- a/policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_new_enrollment_eligible.yaml +++ /dev/null @@ -1,49 +0,0 @@ -- name: Child can newly enroll in 2024 (All Kids open) - period: 2024 - input: - state_code: IL - age: 10 - immigration_status: UNDOCUMENTED - medicaid_income_level: 2.00 - output: - il_hbi_new_enrollment_eligible: true - -- name: Adult cannot newly enroll in 2024 (HBIA enrollment paused July 2023) - period: 2024 - input: - state_code: IL - age: 50 - immigration_status: UNDOCUMENTED - medicaid_income_level: 1.00 - output: - il_hbi_new_enrollment_eligible: false - -- name: Senior cannot newly enroll in 2024 (HBIS enrollment paused Nov 2023) - period: 2024 - input: - state_code: IL - age: 70 - immigration_status: UNDOCUMENTED - medicaid_income_level: 0.90 - output: - il_hbi_new_enrollment_eligible: false - -- name: Adult could newly enroll in early 2023 (before pause) - period: 2023 - input: - state_code: IL - age: 50 - immigration_status: UNDOCUMENTED - medicaid_income_level: 1.00 - output: - il_hbi_new_enrollment_eligible: true - -- name: Senior could newly enroll in early 2023 (before pause) - period: 2023 - input: - state_code: IL - age: 70 - immigration_status: UNDOCUMENTED - medicaid_income_level: 0.90 - output: - il_hbi_new_enrollment_eligible: true 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 index ff3f5bfece4..5b71aee1e64 100644 --- 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 @@ -62,5 +62,46 @@ spm_unit_net_income: 15_000 output: il_hbi_eligible: [true] - # But cannot newly enroll (enrollment paused) - il_hbi_new_enrollment_eligible: [false] + # 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 26c5b5b71e2..e02b21d7f11 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 index 50d8c4b1ef8..83e7b5720ad 100644 --- 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 @@ -27,10 +27,10 @@ def formula(person, period, parameters): age = person("age", period) # Age thresholds - child_max_age = p.child_max_age - adult_min_age = p.adult_min_age - adult_max_age = p.adult_max_age - senior_min_age = p.senior_min_age + child_max_age = p.child.max_age + adult_min_age = p.adult.min_age + adult_max_age = p.adult.max_age + senior_min_age = p.senior.min_age # Determine if in a covered age group is_child = age <= child_max_age 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 index 5a80342da66..e6eb41d78b0 100644 --- 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 @@ -22,8 +22,7 @@ class il_hbi_eligible(Variable): - 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. HBIA ended July 2025, HBIS enrollment - is paused but existing enrollees can renew. + Note: Ages 19-41 are not covered. """ def formula(person, period, parameters): @@ -38,19 +37,19 @@ def formula(person, period, parameters): # Determine age group for program-specific in_effect checks age = person("age", period) - child_max_age = p.child_max_age - adult_min_age = p.adult_min_age - adult_max_age = p.adult_max_age - senior_min_age = p.senior_min_age + child_max_age = p.child.max_age + adult_min_age = p.adult.min_age + adult_max_age = p.adult.max_age + senior_min_age = p.senior.min_age is_child = age <= child_max_age is_adult = (age >= adult_min_age) & (age <= adult_max_age) is_senior = age >= 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 + 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) 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 index 1ee2893ab8c..563db118a9d 100644 --- 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 @@ -13,25 +13,13 @@ class il_hbi_immigration_status_eligible(Variable): ] documentation = """ Illinois Health Benefits for Immigrants (HBI) covers residents who are not - eligible for federal Medicaid due to their immigration status. This includes - undocumented immigrants, DACA recipients, and TPS holders. - - As of May 1, 2024, Lawful Permanent Residents are NOT eligible for HBIA/HBIS - (they may qualify for federal Medicaid after 5-year waiting period). + eligible for federal Medicaid due to their immigration status. """ def formula(person, period, parameters): - immigration_status = person("immigration_status", period) - statuses = immigration_status.possible_values - - # Illinois covers undocumented immigrants - undocumented = immigration_status == statuses.UNDOCUMENTED - - # Illinois also covers DACA and TPS recipients - daca = immigration_status == statuses.DACA - tps = immigration_status == statuses.TPS - daca_tps = immigration_status == statuses.DACA_TPS - - # Only return true for non-federally-eligible statuses - # Citizens, LPRs, refugees use regular federal Medicaid - return undocumented | daca | tps | daca_tps + # 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 index 8d823bf586d..bd0842c8e3d 100644 --- 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 @@ -26,10 +26,10 @@ def formula(person, period, parameters): age = person("age", period) # Age thresholds - child_max_age = p.child_max_age - adult_min_age = p.adult_min_age - adult_max_age = p.adult_max_age - senior_min_age = p.senior_min_age + child_max_age = p.child.max_age + adult_min_age = p.adult.min_age + adult_max_age = p.adult.max_age + senior_min_age = p.senior.min_age # Determine age category is_child = age <= child_max_age @@ -37,9 +37,9 @@ def formula(person, period, parameters): is_senior = age >= senior_min_age # Income limits by age group - child_limit = p.child_income_limit - adult_limit = p.adult_income_limit - senior_limit = p.senior_income_limit + child_limit = p.child.income_limit + adult_limit = p.adult.income_limit + senior_limit = p.senior.income_limit # Select appropriate income limit based on age income_limit = select( diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py b/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py deleted file mode 100644 index 3dbe49184bc..00000000000 --- a/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_enrolled.py +++ /dev/null @@ -1,19 +0,0 @@ -from policyengine_us.model_api import * - - -class il_hbi_enrolled(Variable): - value_type = bool - entity = Person - label = "Enrolled in Illinois Health Benefits for Immigrants" - definition_period = YEAR - defined_for = StateCode.IL - documentation = """ - Whether a person is currently enrolled in Illinois Health Benefits for - Immigrants. This is an input variable because enrollment depends on - whether a person enrolled before enrollment freezes took effect. - - Key dates: - - HBIA (adults 42-64): New enrollment paused July 1, 2023; program ended July 1, 2025 - - HBIS (seniors 65+): New enrollment paused November 6, 2023; existing enrollees can renew - - All Kids (children 0-18): Enrollment remains open - """ diff --git a/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py deleted file mode 100644 index 610fd100df2..00000000000 --- a/policyengine_us/variables/gov/states/il/hfs/hbi/il_hbi_new_enrollment_eligible.py +++ /dev/null @@ -1,52 +0,0 @@ -from policyengine_us.model_api import * - - -class il_hbi_new_enrollment_eligible(Variable): - value_type = bool - entity = Person - label = "Eligible for new enrollment in 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", - ] - documentation = """ - Whether a person is eligible to newly enroll in Illinois Health Benefits - for Immigrants. This combines eligibility with whether new enrollment is - currently open for their age group. - - - Children (All Kids): Open enrollment - - Adults 42-64 (HBIA): New enrollment paused July 1, 2023 - - Seniors 65+ (HBIS): New enrollment paused November 6, 2023 - """ - - def formula(person, period, parameters): - p = parameters(period).gov.states.il.hfs.hbi.eligibility - - # Must be eligible - eligible = person("il_hbi_eligible", period) - - # Determine age group - age = person("age", period) - child_max_age = p.child_max_age - adult_min_age = p.adult_min_age - adult_max_age = p.adult_max_age - senior_min_age = p.senior_min_age - - is_child = age <= child_max_age - is_adult = (age >= adult_min_age) & (age <= adult_max_age) - is_senior = age >= senior_min_age - - # Check if new enrollment is open for age group - child_open = p.child_new_enrollment_open - adult_open = p.adult_new_enrollment_open - senior_open = p.senior_new_enrollment_open - - enrollment_open = ( - (is_child & child_open) - | (is_adult & adult_open) - | (is_senior & senior_open) - ) - - return eligible & enrollment_open From 71d3fcc938e771910332b9bbe77680daaa774afb Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 13:26:10 -0500 Subject: [PATCH 05/15] Update uv.lock MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- uv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uv.lock b/uv.lock index f260826736c..258a9c9c71f 100644 --- a/uv.lock +++ b/uv.lock @@ -1519,7 +1519,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.465.3" +version = "1.465.4" source = { editable = "." } dependencies = [ { name = "microdf-python" }, From 3205f51440aa0d382a5383fcd18e5fb066a8fa41 Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 16:16:44 -0500 Subject: [PATCH 06/15] Illinois medicaid for undocumented immigrants Fixes #7004 --- .../hfs/hbi/eligibility/il_hbi_eligible.yaml | 33 +++++++++ .../eligibility/il_hbi_resource_eligible.yaml | 74 +++++++++++++++++++ .../il/hfs/hbi/eligibility/il_hbi_eligible.py | 2 + .../eligibility/il_hbi_resource_eligible.py | 41 ++++++++++ 4 files changed, 150 insertions(+) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.yaml create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.py 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 index 90c9a510c6b..0c969f49363 100644 --- 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 @@ -97,3 +97,36 @@ medicaid_income_level: 0.90 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 + medicaid_income_level: 0.90 + 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 + medicaid_income_level: 0.90 + 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_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/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 index e6eb41d78b0..27035948fb8 100644 --- 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 @@ -34,6 +34,7 @@ def formula(person, period, parameters): ) 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) @@ -61,5 +62,6 @@ def formula(person, period, parameters): 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_resource_eligible.py b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.py new file mode 100644 index 00000000000..cb475d7ee5d --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/eligibility/il_hbi_resource_eligible.py @@ -0,0 +1,41 @@ +from policyengine_us.model_api import * + + +class il_hbi_resource_eligible(Variable): + value_type = bool + entity = Person + label = ( + "Meets Illinois Health Benefits for Immigrants resource eligibility" + ) + definition_period = YEAR + defined_for = StateCode.IL + reference = [ + "https://www.dhs.state.il.us/page.aspx?item=161600", + "https://www.illinoislegalaid.org/legal-information/health-benefits-immigrant-seniors", + ] + documentation = """ + 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) + senior_min_age = p.senior.min_age + is_senior = age >= senior_min_age + + # Get household assets + household_assets = person.spm_unit("spm_unit_assets", period) + resource_limit = p.senior.resource_limit + + # Seniors must meet the resource test + # Non-seniors automatically pass (no resource test) + return where( + is_senior, + household_assets <= resource_limit, + True, + ) From 96384fb5fa06a5cb8b24693fee6f52ec793837fc Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Fri, 19 Dec 2025 07:50:31 -0500 Subject: [PATCH 07/15] AABD income counting --- .../hfs/hbi/eligibility/adult/in_effect.yaml | 4 +- .../hbi/eligibility/adult/income_limit.yaml | 4 +- .../il/hfs/hbi/eligibility/adult/max_age.yaml | 4 +- .../il/hfs/hbi/eligibility/adult/min_age.yaml | 4 +- .../hfs/hbi/eligibility/child/in_effect.yaml | 4 +- .../hbi/eligibility/child/income_limit.yaml | 6 +-- .../il/hfs/hbi/eligibility/child/max_age.yaml | 4 +- .../hfs/hbi/eligibility/senior/in_effect.yaml | 8 ++-- .../hbi/eligibility/senior/income_limit.yaml | 4 +- .../hfs/hbi/eligibility/senior/min_age.yaml | 4 +- .../eligibility/senior/resource_limit.yaml | 8 ++-- .../hfs/hbi/eligibility/il_hbi_eligible.yaml | 16 +++++--- .../eligibility/il_hbi_income_eligible.yaml | 21 ++++++++--- .../income/il_hbi_senior_income_level.yaml | 37 +++++++++++++++++++ .../hbi/eligibility/il_hbi_age_eligible.py | 18 ++++----- .../il/hfs/hbi/eligibility/il_hbi_eligible.py | 26 ++++++------- .../il_hbi_immigration_status_eligible.py | 12 +++--- .../hbi/eligibility/il_hbi_income_eligible.py | 25 ++++++++----- .../eligibility/il_hbi_resource_eligible.py | 21 ++++------- .../income/il_hbi_senior_countable_income.py | 22 +++++++++++ .../hbi/income/il_hbi_senior_income_level.py | 26 +++++++++++++ 21 files changed, 184 insertions(+), 94 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.yaml create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_countable_income.py create mode 100644 policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.py 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 index 42eefe18664..f86bbb273c0 100644 --- 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 @@ -1,8 +1,8 @@ -description: Whether Illinois Health Benefits for Immigrant Adults (HBIA) program is in effect +description: Illinois determines whether the Health Benefits for Immigrant Adults program is active. metadata: unit: bool period: year - label: IL HBIA in effect + 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 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 index 3921ace6970..a2c39bf9d79 100644 --- 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 @@ -1,8 +1,8 @@ -description: Illinois Health Benefits for Immigrant Adults (HBIA) income limit as percentage of FPL +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: IL HBIA adult income limit (% FPL) + label: Illinois HBIA income limit reference: - title: Illinois DHS - HBIA and HBIS Policy href: https://www.dhs.state.il.us/page.aspx?item=161600 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 index c8e0a34e5cb..606f6be4050 100644 --- 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 @@ -1,8 +1,8 @@ -description: Maximum age for Illinois Health Benefits for Immigrant Adults (HBIA) +description: Illinois sets the maximum age to this threshold under the Health Benefits for Immigrant Adults program. metadata: unit: year period: year - label: IL HBIA maximum age + label: Illinois HBIA maximum age reference: - title: Illinois DHS - HBIA and HBIS Policy href: https://www.dhs.state.il.us/page.aspx?item=161600 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 index 5436e4b3e6d..be631ea3df0 100644 --- 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 @@ -1,8 +1,8 @@ -description: Minimum age for Illinois Health Benefits for Immigrant Adults (HBIA) +description: Illinois sets the minimum age to this threshold under the Health Benefits for Immigrant Adults program. metadata: unit: year period: year - label: IL HBIA minimum age + label: Illinois HBIA minimum age reference: - title: Illinois DHS - HBIA and HBIS Policy href: https://www.dhs.state.il.us/page.aspx?item=161600 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 index 35db94fedf7..9d08c65518d 100644 --- 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 @@ -1,8 +1,8 @@ -description: Whether Illinois All Kids immigrant coverage is in effect +description: Illinois determines whether All Kids immigrant coverage is active. metadata: unit: bool period: year - label: IL HBI child coverage in effect + label: Illinois All Kids immigrant coverage in effect reference: - title: Illinois HFS - About All Kids href: https://hfs.illinois.gov/medicalprograms/allkids/about.html 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 index cd0ee9a7ee4..b450fe538fe 100644 --- 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 @@ -1,13 +1,11 @@ -description: Illinois Health Benefits for Immigrants income limit for children as percentage of FPL +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: IL HBI child income limit (% FPL) + label: Illinois All Kids income limit reference: - title: Illinois HFS - About All Kids href: https://hfs.illinois.gov/medicalprograms/allkids/about.html - - title: Illinois Legal Aid - All Kids - href: https://www.illinoislegalaid.org/legal-information/getting-all-kids-health-insurance values: # All Kids program covers children regardless of immigration status 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 index a2f8d67da8b..724b02ce6dc 100644 --- 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 @@ -1,8 +1,8 @@ -description: Maximum age for Illinois All Kids immigrant coverage +description: Illinois sets the maximum age to this threshold for children under the All Kids program. metadata: unit: year period: year - label: IL HBI child maximum age + label: Illinois All Kids maximum age reference: - title: Illinois HFS - About All Kids href: https://hfs.illinois.gov/medicalprograms/allkids/about.html 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 index f7a6300e49d..8076b3041e3 100644 --- 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 @@ -1,13 +1,13 @@ -description: Whether Illinois Health Benefits for Immigrant Seniors (HBIS) program is in effect +description: Illinois determines whether the Health Benefits for Immigrant Seniors program is active. metadata: unit: bool period: year - label: IL HBIS in effect + 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 Legal Aid - Health Benefits for Immigrant Seniors - href: https://www.illinoislegalaid.org/legal-information/health-benefits-immigrant-seniors + - title: Illinois HFS - Health Benefits for Immigrants + href: https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html values: 2020-01-01: false 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 index 28d3420d3a5..19379da6948 100644 --- 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 @@ -1,8 +1,8 @@ -description: Illinois Health Benefits for Immigrant Seniors (HBIS) income limit as percentage of FPL +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: IL HBIS senior income limit (% FPL) + label: Illinois HBIS income limit reference: - title: Illinois DHS - HBIA and HBIS Policy href: https://www.dhs.state.il.us/page.aspx?item=161600 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 index e4ee53e2b43..fc4e4695dc5 100644 --- 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 @@ -1,8 +1,8 @@ -description: Minimum age for Illinois Health Benefits for Immigrant Seniors (HBIS) +description: Illinois sets the minimum age to this threshold under the Health Benefits for Immigrant Seniors program. metadata: unit: year period: year - label: IL HBIS minimum age + label: Illinois HBIS minimum age reference: - title: Illinois DHS - HBIA and HBIS Policy href: https://www.dhs.state.il.us/page.aspx?item=161600 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 index 9f89fbe70c5..223b1e4581b 100644 --- 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 @@ -1,13 +1,13 @@ -description: Illinois Health Benefits for Immigrant Seniors (HBIS) resource limit +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: IL HBIS resource limit + 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 Legal Aid - Health Benefits for Immigrant Seniors - href: https://www.illinoislegalaid.org/legal-information/health-benefits-immigrant-seniors + - 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 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 index 0c969f49363..96ae1048e70 100644 --- 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 @@ -1,3 +1,7 @@ +# 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: @@ -18,13 +22,13 @@ output: il_hbi_eligible: true -- name: Undocumented senior age 70 at 90% FPL eligible +- name: Undocumented senior age 70 with low income eligible period: 2024 input: state_code: IL age: 70 immigration_status: UNDOCUMENTED - medicaid_income_level: 0.90 + social_security: 12_000 # ~80% FPL after AABD exemptions output: il_hbi_eligible: true @@ -64,7 +68,7 @@ state_code: IL age: 70 immigration_status: LEGAL_PERMANENT_RESIDENT - medicaid_income_level: 0.80 + social_security: 10_000 output: il_hbi_eligible: false @@ -94,7 +98,7 @@ state_code: IL age: 70 immigration_status: UNDOCUMENTED - medicaid_income_level: 0.90 + social_security: 12_000 # Under 100% FPL output: il_hbi_eligible: true @@ -104,7 +108,7 @@ state_code: IL age: 70 immigration_status: UNDOCUMENTED - medicaid_income_level: 0.90 + social_security: 12_000 spm_unit_assets: 20_000 output: il_hbi_eligible: false @@ -115,7 +119,7 @@ state_code: IL age: 70 immigration_status: UNDOCUMENTED - medicaid_income_level: 0.90 + social_security: 12_000 spm_unit_assets: 17_500 output: il_hbi_eligible: true 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 index 9a33137026a..af636ce27ae 100644 --- 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 @@ -1,3 +1,7 @@ +# 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: @@ -52,30 +56,35 @@ output: il_hbi_income_eligible: false -- name: Senior 70 at 90% FPL eligible (under 100% limit) +# 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 - medicaid_income_level: 0.90 + social_security: 12_000 # ~80% FPL after AABD exemptions output: il_hbi_income_eligible: true -- name: Senior 70 at 100% FPL eligible (at limit) +- name: Senior 70 at approximately 100% FPL eligible (at limit) period: 2024 input: state_code: IL age: 70 - medicaid_income_level: 1.00 + social_security: 15_360 # Countable = $15,060 (100% FPL) output: il_hbi_income_eligible: true -- name: Senior 70 at 110% FPL not eligible (over limit) +- name: Senior 70 over 100% FPL not eligible (over limit) period: 2024 input: state_code: IL age: 70 - medicaid_income_level: 1.10 + social_security: 18_000 # Well over 100% FPL output: il_hbi_income_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/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 index 83e7b5720ad..fb22b6c72f8 100644 --- 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 @@ -7,19 +7,17 @@ class il_hbi_age_eligible(Variable): label = "Meets Illinois Health Benefits for Immigrants age eligibility" definition_period = YEAR defined_for = StateCode.IL - reference = [ + 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", - ] - documentation = """ - 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. - """ + ) + # 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 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 index 27035948fb8..2824d935609 100644 --- 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 @@ -7,23 +7,21 @@ class il_hbi_eligible(Variable): label = "Eligible for Illinois Health Benefits for Immigrants" definition_period = YEAR defined_for = StateCode.IL - reference = [ + 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", - ] - documentation = """ - 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. - """ + ) + # 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 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 index 563db118a9d..7724bbe13d6 100644 --- 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 @@ -4,17 +4,15 @@ class il_hbi_immigration_status_eligible(Variable): value_type = bool entity = Person - label = "Has eligible immigration status for Illinois Health Benefits for Immigrants" + label = "Has eligible immigration status for Illinois HBI" definition_period = YEAR defined_for = StateCode.IL - reference = [ + reference = ( "https://hfs.illinois.gov/medicalclients/healthbenefitsforimmigrants.html", "https://www.dhs.state.il.us/page.aspx?item=161600", - ] - documentation = """ - Illinois Health Benefits for Immigrants (HBI) covers residents who are not - eligible for federal Medicaid due to their immigration status. - """ + ) + # 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 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 index bd0842c8e3d..f937ebdaf9c 100644 --- 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 @@ -7,22 +7,22 @@ class il_hbi_income_eligible(Variable): label = "Meets Illinois Health Benefits for Immigrants income eligibility" definition_period = YEAR defined_for = StateCode.IL - reference = [ + 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", - ] - documentation = """ - Illinois HBI has different income limits based on age group: - - Children (0-18): Up to 318% FPL (All Kids) - - Adults (42-64): Up to 138% FPL (HBIA, uses MAGI) - - Seniors (65+): Up to 100% FPL (HBIS) - """ + ) + # 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 - income_level = person("medicaid_income_level", period) age = person("age", period) # Age thresholds @@ -36,6 +36,13 @@ def formula(person, period, parameters): is_adult = (age >= adult_min_age) & (age <= adult_max_age) is_senior = age >= 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) + # Income limits by age group child_limit = p.child.income_limit adult_limit = p.adult.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 index cb475d7ee5d..4cc4da31224 100644 --- 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 @@ -4,22 +4,15 @@ class il_hbi_resource_eligible(Variable): value_type = bool entity = Person - label = ( - "Meets Illinois Health Benefits for Immigrants resource eligibility" - ) + label = "Meets Illinois HBI resource eligibility" definition_period = YEAR defined_for = StateCode.IL - reference = [ - "https://www.dhs.state.il.us/page.aspx?item=161600", - "https://www.illinoislegalaid.org/legal-information/health-benefits-immigrant-seniors", - ] - documentation = """ - 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. - """ + 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 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..d0fe0df11a9 --- /dev/null +++ b/policyengine_us/variables/gov/states/il/hfs/hbi/income/il_hbi_senior_income_level.py @@ -0,0 +1,26 @@ +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 + monthly_income = person( + "il_hbi_senior_countable_income", period.first_month + ) + annual_income = monthly_income * MONTHS_IN_YEAR + + # 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 np.where(fpg > 0, annual_income / fpg, 0) From 8261555ec5bd5254113b509d46d12081fa5b704b Mon Sep 17 00:00:00 2001 From: Daphne Hansell Date: Mon, 22 Dec 2025 09:43:44 -0500 Subject: [PATCH 08/15] uv lock --- uv.lock | 191 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 97 insertions(+), 94 deletions(-) diff --git a/uv.lock b/uv.lock index 258a9c9c71f..1dfd2c40924 100644 --- a/uv.lock +++ b/uv.lock @@ -467,11 +467,27 @@ wheels = [ name = "docutils" version = "0.21.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version < '3.11'", +] sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, ] +[[package]] +name = "docutils" +version = "0.22.4" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version == '3.11.*'", +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/b6/03bb70946330e88ffec97aefd3ea75ba575cb2e762061e0e62a213befee8/docutils-0.22.4.tar.gz", hash = "sha256:4db53b1fde9abecbb74d91230d32ab626d94f6badfc575d6db9194a49df29968", size = 2291750, upload-time = "2025-12-18T19:00:26.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/10/5da547df7a391dcde17f59520a231527b8571e6f46fc8efb02ccb370ab12/docutils-0.22.4-py3-none-any.whl", hash = "sha256:d0013f540772d1420576855455d050a2180186c91c15779301ac2ccb3eeb68de", size = 633196, upload-time = "2025-12-18T19:00:18.077Z" }, +] + [[package]] name = "dpath" version = "2.2.0" @@ -540,19 +556,19 @@ wheels = [ [[package]] name = "furo" -version = "2025.9.25" +version = "2025.12.19" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "accessible-pygments" }, { name = "beautifulsoup4" }, { name = "pygments" }, { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "sphinx-basic-ng" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4e/29/ff3b83a1ffce74676043ab3e7540d398e0b1ce7660917a00d7c4958b93da/furo-2025.9.25.tar.gz", hash = "sha256:3eac05582768fdbbc2bdfa1cdbcdd5d33cfc8b4bd2051729ff4e026a1d7e0a98", size = 1662007, upload-time = "2025-09-25T21:37:19.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/20/5f5ad4da6a5a27c80f2ed2ee9aee3f9e36c66e56e21c00fde467b2f8f88f/furo-2025.12.19.tar.gz", hash = "sha256:188d1f942037d8b37cd3985b955839fea62baa1730087dc29d157677c857e2a7", size = 1661473, upload-time = "2025-12-19T17:34:40.889Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/69/964b55f389c289e16ba2a5dfe587c3c462aac09e24123f09ddf703889584/furo-2025.9.25-py3-none-any.whl", hash = "sha256:2937f68e823b8e37b410c972c371bc2b1d88026709534927158e0cb3fac95afe", size = 340409, upload-time = "2025-09-25T21:37:17.244Z" }, + { url = "https://files.pythonhosted.org/packages/f4/b2/50e9b292b5cac13e9e81272c7171301abc753a60460d21505b606e15cf21/furo-2025.12.19-py3-none-any.whl", hash = "sha256:bb0ead5309f9500130665a26bee87693c41ce4dbdff864dbfb6b0dae4673d24f", size = 339262, upload-time = "2025-12-19T17:34:38.905Z" }, ] [[package]] @@ -570,7 +586,7 @@ version = "3.15.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4d/6a/0d79de0b025aa85dc8864de8e97659c94cf3d23148394a954dc5ca52f8c8/h5py-3.15.1.tar.gz", hash = "sha256:c86e3ed45c4473564de55aa83b6fc9e5ead86578773dfbd93047380042e26b69", size = 426236, upload-time = "2025-10-16T10:35:27.404Z" } wheels = [ @@ -698,14 +714,14 @@ wheels = [ [[package]] name = "importlib-metadata" -version = "8.7.0" +version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/76/66/650a33bd90f786193e4de4b3ad86ea60b53c89b669a5c7be931fac31cdb0/importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000", size = 56641, upload-time = "2025-04-27T15:29:01.736Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd", size = 27656, upload-time = "2025-04-27T15:29:00.214Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, ] [[package]] @@ -1063,7 +1079,7 @@ version = "1.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/31/e9/7f77ee19b2d3dcdb561ceaeb915ef6a944eb315412d0e8065c12817b7ff4/microdf_python-1.1.1.tar.gz", hash = "sha256:97dd0cb8562d98a32bbd35861719ae565544143e2ad8a462d6f6261058d9c469", size = 17290, upload-time = "2025-12-01T14:13:57.131Z" } @@ -1085,7 +1101,7 @@ wheels = [ [[package]] name = "nbclient" -version = "0.10.2" +version = "0.10.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, @@ -1093,9 +1109,9 @@ dependencies = [ { name = "nbformat" }, { name = "traitlets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/87/66/7ffd18d58eae90d5721f9f39212327695b749e23ad44b3881744eaf4d9e8/nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193", size = 62424, upload-time = "2024-12-19T10:32:27.164Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/f3/1f6cf2ede4b026bc5f0b424cb41adf22f9c804e90a4dbd4fdb42291a35d5/nbclient-0.10.3.tar.gz", hash = "sha256:0baf171ee246e3bb2391da0635e719f27dc77d99aef59e0b04dcb935ee04c575", size = 62564, upload-time = "2025-12-19T15:50:09.331Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/6d/e7fa07f03a4a7b221d94b4d586edb754a9b0dc3c9e2c93353e9fa4e0d117/nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d", size = 25434, upload-time = "2024-12-19T10:32:24.139Z" }, + { url = "https://files.pythonhosted.org/packages/b2/77/0c73678f5260501a271fd7342bee5d639440f2e9e07d590f1100a056d87c/nbclient-0.10.3-py3-none-any.whl", hash = "sha256:39e9bd403504dd2484dd0fd25235bb6a683ce8cd9873356e40d880696adc9e35", size = 25473, upload-time = "2025-12-19T15:50:07.671Z" }, ] [[package]] @@ -1174,11 +1190,11 @@ wheels = [ [[package]] name = "nodeenv" -version = "1.9.1" +version = "1.10.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" } +sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" }, + { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" }, ] [[package]] @@ -1187,7 +1203,7 @@ version = "2.14.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cb/2f/fdba158c9dbe5caca9c3eca3eaffffb251f2fb8674bf8e2d0aed5f38d319/numexpr-2.14.1.tar.gz", hash = "sha256:4be00b1086c7b7a5c32e31558122b7b80243fe098579b170967da83f3152b48b", size = 119400, upload-time = "2025-10-13T16:17:27.351Z" } wheels = [ @@ -1300,65 +1316,64 @@ wheels = [ [[package]] name = "numpy" -version = "2.3.5" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", "python_full_version == '3.11.*'", ] -sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/77/84dd1d2e34d7e2792a236ba180b5e8fcc1e3e414e761ce0253f63d7f572e/numpy-2.3.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de5672f4a7b200c15a4127042170a694d4df43c992948f5e1af57f0174beed10", size = 17034641, upload-time = "2025-11-16T22:49:19.336Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ea/25e26fa5837106cde46ae7d0b667e20f69cbbc0efd64cba8221411ab26ae/numpy-2.3.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:acfd89508504a19ed06ef963ad544ec6664518c863436306153e13e94605c218", size = 12528324, upload-time = "2025-11-16T22:49:22.582Z" }, - { url = "https://files.pythonhosted.org/packages/4d/1a/e85f0eea4cf03d6a0228f5c0256b53f2df4bc794706e7df019fc622e47f1/numpy-2.3.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:ffe22d2b05504f786c867c8395de703937f934272eb67586817b46188b4ded6d", size = 5356872, upload-time = "2025-11-16T22:49:25.408Z" }, - { url = "https://files.pythonhosted.org/packages/5c/bb/35ef04afd567f4c989c2060cde39211e4ac5357155c1833bcd1166055c61/numpy-2.3.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:872a5cf366aec6bb1147336480fef14c9164b154aeb6542327de4970282cd2f5", size = 6893148, upload-time = "2025-11-16T22:49:27.549Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2b/05bbeb06e2dff5eab512dfc678b1cc5ee94d8ac5956a0885c64b6b26252b/numpy-2.3.5-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3095bdb8dd297e5920b010e96134ed91d852d81d490e787beca7e35ae1d89cf7", size = 14557282, upload-time = "2025-11-16T22:49:30.964Z" }, - { url = "https://files.pythonhosted.org/packages/65/fb/2b23769462b34398d9326081fad5655198fcf18966fcb1f1e49db44fbf31/numpy-2.3.5-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cba086a43d54ca804ce711b2a940b16e452807acebe7852ff327f1ecd49b0d4", size = 16897903, upload-time = "2025-11-16T22:49:34.191Z" }, - { url = "https://files.pythonhosted.org/packages/ac/14/085f4cf05fc3f1e8aa95e85404e984ffca9b2275a5dc2b1aae18a67538b8/numpy-2.3.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6cf9b429b21df6b99f4dee7a1218b8b7ffbbe7df8764dc0bd60ce8a0708fed1e", size = 16341672, upload-time = "2025-11-16T22:49:37.2Z" }, - { url = "https://files.pythonhosted.org/packages/6f/3b/1f73994904142b2aa290449b3bb99772477b5fd94d787093e4f24f5af763/numpy-2.3.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:396084a36abdb603546b119d96528c2f6263921c50df3c8fd7cb28873a237748", size = 18838896, upload-time = "2025-11-16T22:49:39.727Z" }, - { url = "https://files.pythonhosted.org/packages/cd/b9/cf6649b2124f288309ffc353070792caf42ad69047dcc60da85ee85fea58/numpy-2.3.5-cp311-cp311-win32.whl", hash = "sha256:b0c7088a73aef3d687c4deef8452a3ac7c1be4e29ed8bf3b366c8111128ac60c", size = 6563608, upload-time = "2025-11-16T22:49:42.079Z" }, - { url = "https://files.pythonhosted.org/packages/aa/44/9fe81ae1dcc29c531843852e2874080dc441338574ccc4306b39e2ff6e59/numpy-2.3.5-cp311-cp311-win_amd64.whl", hash = "sha256:a414504bef8945eae5f2d7cb7be2d4af77c5d1cb5e20b296c2c25b61dff2900c", size = 13078442, upload-time = "2025-11-16T22:49:43.99Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a7/f99a41553d2da82a20a2f22e93c94f928e4490bb447c9ff3c4ff230581d3/numpy-2.3.5-cp311-cp311-win_arm64.whl", hash = "sha256:0cd00b7b36e35398fa2d16af7b907b65304ef8bb4817a550e06e5012929830fa", size = 10458555, upload-time = "2025-11-16T22:49:47.092Z" }, - { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, - { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, - { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, - { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, - { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, - { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, - { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, - { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, - { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, - { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, - { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, - { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, - { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, - { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, - { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, - { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, - { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, - { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, - { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, - { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, - { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, - { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, - { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, - { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, - { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, - { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, - { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, - { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, - { url = "https://files.pythonhosted.org/packages/c6/65/f9dea8e109371ade9c782b4e4756a82edf9d3366bca495d84d79859a0b79/numpy-2.3.5-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:f0963b55cdd70fad460fa4c1341f12f976bb26cb66021a5580329bd498988310", size = 16910689, upload-time = "2025-11-16T22:52:23.247Z" }, - { url = "https://files.pythonhosted.org/packages/00/4f/edb00032a8fb92ec0a679d3830368355da91a69cab6f3e9c21b64d0bb986/numpy-2.3.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:f4255143f5160d0de972d28c8f9665d882b5f61309d8362fdd3e103cf7bf010c", size = 12457053, upload-time = "2025-11-16T22:52:26.367Z" }, - { url = "https://files.pythonhosted.org/packages/16/a4/e8a53b5abd500a63836a29ebe145fc1ab1f2eefe1cfe59276020373ae0aa/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:a4b9159734b326535f4dd01d947f919c6eefd2d9827466a696c44ced82dfbc18", size = 5285635, upload-time = "2025-11-16T22:52:29.266Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2f/37eeb9014d9c8b3e9c55bc599c68263ca44fdbc12a93e45a21d1d56df737/numpy-2.3.5-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2feae0d2c91d46e59fcd62784a3a83b3fb677fead592ce51b5a6fbb4f95965ff", size = 6801770, upload-time = "2025-11-16T22:52:31.421Z" }, - { url = "https://files.pythonhosted.org/packages/7d/e4/68d2f474df2cb671b2b6c2986a02e520671295647dad82484cde80ca427b/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffac52f28a7849ad7576293c0cb7b9f08304e8f7d738a8cb8a90ec4c55a998eb", size = 14391768, upload-time = "2025-11-16T22:52:33.593Z" }, - { url = "https://files.pythonhosted.org/packages/b8/50/94ccd8a2b141cb50651fddd4f6a48874acb3c91c8f0842b08a6afc4b0b21/numpy-2.3.5-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63c0e9e7eea69588479ebf4a8a270d5ac22763cc5854e9a7eae952a3908103f7", size = 16729263, upload-time = "2025-11-16T22:52:36.369Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ee/346fa473e666fe14c52fcdd19ec2424157290a032d4c41f98127bfb31ac7/numpy-2.3.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:f16417ec91f12f814b10bafe79ef77e70113a2f5f7018640e7425ff979253425", size = 12967213, upload-time = "2025-11-16T22:52:39.38Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/a4/7a/6a3d14e205d292b738db449d0de649b373a59edb0d0b4493821d0a3e8718/numpy-2.4.0.tar.gz", hash = "sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934", size = 20685720, upload-time = "2025-12-20T16:18:19.023Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/7e/7bae7cbcc2f8132271967aa03e03954fc1e48aa1f3bf32b29ca95fbef352/numpy-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e", size = 16940166, upload-time = "2025-12-20T16:15:43.434Z" }, + { url = "https://files.pythonhosted.org/packages/0f/27/6c13f5b46776d6246ec884ac5817452672156a506d08a1f2abb39961930a/numpy-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db", size = 12641781, upload-time = "2025-12-20T16:15:45.701Z" }, + { url = "https://files.pythonhosted.org/packages/14/1c/83b4998d4860d15283241d9e5215f28b40ac31f497c04b12fa7f428ff370/numpy-2.4.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b", size = 5470247, upload-time = "2025-12-20T16:15:47.943Z" }, + { url = "https://files.pythonhosted.org/packages/54/08/cbce72c835d937795571b0464b52069f869c9e78b0c076d416c5269d2718/numpy-2.4.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7", size = 6799807, upload-time = "2025-12-20T16:15:49.795Z" }, + { url = "https://files.pythonhosted.org/packages/ff/be/2e647961cd8c980591d75cdcd9e8f647d69fbe05e2a25613dc0a2ea5fb1a/numpy-2.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548", size = 14701992, upload-time = "2025-12-20T16:15:51.615Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fb/e1652fb8b6fd91ce6ed429143fe2e01ce714711e03e5b762615e7b36172c/numpy-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346", size = 16646871, upload-time = "2025-12-20T16:15:54.129Z" }, + { url = "https://files.pythonhosted.org/packages/62/23/d841207e63c4322842f7cd042ae981cffe715c73376dcad8235fb31debf1/numpy-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25", size = 16487190, upload-time = "2025-12-20T16:15:56.147Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/6a842c8421ebfdec0a230e65f61e0dabda6edbef443d999d79b87c273965/numpy-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a", size = 18580762, upload-time = "2025-12-20T16:15:58.524Z" }, + { url = "https://files.pythonhosted.org/packages/0a/d1/c79e0046641186f2134dde05e6181825b911f8bdcef31b19ddd16e232847/numpy-2.4.0-cp311-cp311-win32.whl", hash = "sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53", size = 6233359, upload-time = "2025-12-20T16:16:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/fc/f0/74965001d231f28184d6305b8cdc1b6fcd4bf23033f6cb039cfe76c9fca7/numpy-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479", size = 12601132, upload-time = "2025-12-20T16:16:02.484Z" }, + { url = "https://files.pythonhosted.org/packages/65/32/55408d0f46dfebce38017f5bd931affa7256ad6beac1a92a012e1fbc67a7/numpy-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6", size = 10573977, upload-time = "2025-12-20T16:16:04.77Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ff/f6400ffec95de41c74b8e73df32e3fff1830633193a7b1e409be7fb1bb8c/numpy-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037", size = 16653117, upload-time = "2025-12-20T16:16:06.709Z" }, + { url = "https://files.pythonhosted.org/packages/fd/28/6c23e97450035072e8d830a3c411bf1abd1f42c611ff9d29e3d8f55c6252/numpy-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83", size = 12369711, upload-time = "2025-12-20T16:16:08.758Z" }, + { url = "https://files.pythonhosted.org/packages/bc/af/acbef97b630ab1bb45e6a7d01d1452e4251aa88ce680ac36e56c272120ec/numpy-2.4.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344", size = 5198355, upload-time = "2025-12-20T16:16:10.902Z" }, + { url = "https://files.pythonhosted.org/packages/c1/c8/4e0d436b66b826f2e53330adaa6311f5cac9871a5b5c31ad773b27f25a74/numpy-2.4.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6", size = 6545298, upload-time = "2025-12-20T16:16:12.607Z" }, + { url = "https://files.pythonhosted.org/packages/ef/27/e1f5d144ab54eac34875e79037011d511ac57b21b220063310cb96c80fbc/numpy-2.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb", size = 14398387, upload-time = "2025-12-20T16:16:14.257Z" }, + { url = "https://files.pythonhosted.org/packages/67/64/4cb909dd5ab09a9a5d086eff9586e69e827b88a5585517386879474f4cf7/numpy-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63", size = 16363091, upload-time = "2025-12-20T16:16:17.32Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9c/8efe24577523ec6809261859737cf117b0eb6fdb655abdfdc81b2e468ce4/numpy-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95", size = 16176394, upload-time = "2025-12-20T16:16:19.524Z" }, + { url = "https://files.pythonhosted.org/packages/61/f0/1687441ece7b47a62e45a1f82015352c240765c707928edd8aef875d5951/numpy-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6", size = 18287378, upload-time = "2025-12-20T16:16:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/d3/6f/f868765d44e6fc466467ed810ba9d8d6db1add7d4a748abfa2a4c99a3194/numpy-2.4.0-cp312-cp312-win32.whl", hash = "sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c", size = 5955432, upload-time = "2025-12-20T16:16:25.06Z" }, + { url = "https://files.pythonhosted.org/packages/d4/b5/94c1e79fcbab38d1ca15e13777477b2914dd2d559b410f96949d6637b085/numpy-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98", size = 12306201, upload-time = "2025-12-20T16:16:26.979Z" }, + { url = "https://files.pythonhosted.org/packages/70/09/c39dadf0b13bb0768cd29d6a3aaff1fb7c6905ac40e9aaeca26b1c086e06/numpy-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667", size = 10308234, upload-time = "2025-12-20T16:16:29.417Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0d/853fd96372eda07c824d24adf02e8bc92bb3731b43a9b2a39161c3667cc4/numpy-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea", size = 16649088, upload-time = "2025-12-20T16:16:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/e3/37/cc636f1f2a9f585434e20a3e6e63422f70bfe4f7f6698e941db52ea1ac9a/numpy-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d", size = 12364065, upload-time = "2025-12-20T16:16:33.491Z" }, + { url = "https://files.pythonhosted.org/packages/ed/69/0b78f37ca3690969beee54103ce5f6021709134e8020767e93ba691a72f1/numpy-2.4.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee", size = 5192640, upload-time = "2025-12-20T16:16:35.636Z" }, + { url = "https://files.pythonhosted.org/packages/1d/2a/08569f8252abf590294dbb09a430543ec8f8cc710383abfb3e75cc73aeda/numpy-2.4.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e", size = 6541556, upload-time = "2025-12-20T16:16:37.276Z" }, + { url = "https://files.pythonhosted.org/packages/93/e9/a949885a4e177493d61519377952186b6cbfdf1d6002764c664ba28349b5/numpy-2.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2", size = 14396562, upload-time = "2025-12-20T16:16:38.953Z" }, + { url = "https://files.pythonhosted.org/packages/99/98/9d4ad53b0e9ef901c2ef1d550d2136f5ac42d3fd2988390a6def32e23e48/numpy-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a", size = 16351719, upload-time = "2025-12-20T16:16:41.503Z" }, + { url = "https://files.pythonhosted.org/packages/28/de/5f3711a38341d6e8dd619f6353251a0cdd07f3d6d101a8fd46f4ef87f895/numpy-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681", size = 16176053, upload-time = "2025-12-20T16:16:44.552Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5b/2a3753dc43916501b4183532e7ace862e13211042bceafa253afb5c71272/numpy-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475", size = 18277859, upload-time = "2025-12-20T16:16:47.174Z" }, + { url = "https://files.pythonhosted.org/packages/2c/c5/a18bcdd07a941db3076ef489d036ab16d2bfc2eae0cf27e5a26e29189434/numpy-2.4.0-cp313-cp313-win32.whl", hash = "sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344", size = 5953849, upload-time = "2025-12-20T16:16:49.554Z" }, + { url = "https://files.pythonhosted.org/packages/4f/f1/719010ff8061da6e8a26e1980cf090412d4f5f8060b31f0c45d77dd67a01/numpy-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d", size = 12302840, upload-time = "2025-12-20T16:16:51.227Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5a/b3d259083ed8b4d335270c76966cb6cf14a5d1b69e1a608994ac57a659e6/numpy-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d", size = 10308509, upload-time = "2025-12-20T16:16:53.313Z" }, + { url = "https://files.pythonhosted.org/packages/31/01/95edcffd1bb6c0633df4e808130545c4f07383ab629ac7e316fb44fff677/numpy-2.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6", size = 12491815, upload-time = "2025-12-20T16:16:55.496Z" }, + { url = "https://files.pythonhosted.org/packages/59/ea/5644b8baa92cc1c7163b4b4458c8679852733fa74ca49c942cfa82ded4e0/numpy-2.4.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5", size = 5320321, upload-time = "2025-12-20T16:16:57.468Z" }, + { url = "https://files.pythonhosted.org/packages/26/4e/e10938106d70bc21319bd6a86ae726da37edc802ce35a3a71ecdf1fdfe7f/numpy-2.4.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3", size = 6641635, upload-time = "2025-12-20T16:16:59.379Z" }, + { url = "https://files.pythonhosted.org/packages/b3/8d/a8828e3eaf5c0b4ab116924df82f24ce3416fa38d0674d8f708ddc6c8aac/numpy-2.4.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d", size = 14456053, upload-time = "2025-12-20T16:17:01.768Z" }, + { url = "https://files.pythonhosted.org/packages/68/a1/17d97609d87d4520aa5ae2dcfb32305654550ac6a35effb946d303e594ce/numpy-2.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3", size = 16401702, upload-time = "2025-12-20T16:17:04.235Z" }, + { url = "https://files.pythonhosted.org/packages/18/32/0f13c1b2d22bea1118356b8b963195446f3af124ed7a5adfa8fdecb1b6ca/numpy-2.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa", size = 16242493, upload-time = "2025-12-20T16:17:06.856Z" }, + { url = "https://files.pythonhosted.org/packages/ae/23/48f21e3d309fbc137c068a1475358cbd3a901b3987dcfc97a029ab3068e2/numpy-2.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c", size = 18324222, upload-time = "2025-12-20T16:17:09.392Z" }, + { url = "https://files.pythonhosted.org/packages/ac/52/41f3d71296a3dcaa4f456aaa3c6fc8e745b43d0552b6bde56571bb4b4a0f/numpy-2.4.0-cp313-cp313t-win32.whl", hash = "sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93", size = 6076216, upload-time = "2025-12-20T16:17:11.437Z" }, + { url = "https://files.pythonhosted.org/packages/35/ff/46fbfe60ab0710d2a2b16995f708750307d30eccbb4c38371ea9e986866e/numpy-2.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4", size = 12444263, upload-time = "2025-12-20T16:17:13.182Z" }, + { url = "https://files.pythonhosted.org/packages/a3/e3/9189ab319c01d2ed556c932ccf55064c5d75bb5850d1df7a482ce0badead/numpy-2.4.0-cp313-cp313t-win_arm64.whl", hash = "sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c", size = 10378265, upload-time = "2025-12-20T16:17:15.211Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ef/088e7c7342f300aaf3ee5f2c821c4b9996a1bef2aaf6a49cc8ab4883758e/numpy-2.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6", size = 16819003, upload-time = "2025-12-20T16:18:03.41Z" }, + { url = "https://files.pythonhosted.org/packages/ff/ce/a53017b5443b4b84517182d463fc7bcc2adb4faa8b20813f8e5f5aeb5faa/numpy-2.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4", size = 12567105, upload-time = "2025-12-20T16:18:05.594Z" }, + { url = "https://files.pythonhosted.org/packages/77/58/5ff91b161f2ec650c88a626c3905d938c89aaadabd0431e6d9c1330c83e2/numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba", size = 5395590, upload-time = "2025-12-20T16:18:08.031Z" }, + { url = "https://files.pythonhosted.org/packages/1d/4e/f1a084106df8c2df8132fc437e56987308e0524836aa7733721c8429d4fe/numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d", size = 6709947, upload-time = "2025-12-20T16:18:09.836Z" }, + { url = "https://files.pythonhosted.org/packages/63/09/3d8aeb809c0332c3f642da812ac2e3d74fc9252b3021f8c30c82e99e3f3d/numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf", size = 14535119, upload-time = "2025-12-20T16:18:12.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7f/68f0fc43a2cbdc6bb239160c754d87c922f60fbaa0fa3cd3d312b8a7f5ee/numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98", size = 16475815, upload-time = "2025-12-20T16:18:14.433Z" }, + { url = "https://files.pythonhosted.org/packages/11/73/edeacba3167b1ca66d51b1a5a14697c2c40098b5ffa01811c67b1785a5ab/numpy-2.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b", size = 12489376, upload-time = "2025-12-20T16:18:16.524Z" }, ] [[package]] @@ -1385,7 +1400,7 @@ version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, @@ -1501,7 +1516,7 @@ dependencies = [ { name = "microdf-python" }, { name = "numexpr" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "numpy", version = "2.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "pandas" }, { name = "plotly" }, { name = "psutil" }, @@ -1886,18 +1901,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/54/6f679c435d28e0a568d8e8a7c0a93a09010818634c3c3907fc98d8983770/roman_numerals-4.1.0-py3-none-any.whl", hash = "sha256:647ba99caddc2cc1e55a51e4360689115551bf4476d90e8162cf8c345fe233c7", size = 7676, upload-time = "2025-12-17T18:25:33.098Z" }, ] -[[package]] -name = "roman-numerals-py" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "roman-numerals", marker = "python_full_version >= '3.11'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cb/b5/de96fca640f4f656eb79bbee0e79aeec52e3e0e359f8a3e6a0d366378b64/roman_numerals_py-4.1.0.tar.gz", hash = "sha256:f5d7b2b4ca52dd855ef7ab8eb3590f428c0b1ea480736ce32b01fef2a5f8daf9", size = 4274, upload-time = "2025-12-17T18:25:41.153Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/2c/daca29684cbe9fd4bc711f8246da3c10adca1ccc4d24436b17572eb2590e/roman_numerals_py-4.1.0-py3-none-any.whl", hash = "sha256:553114c1167141c1283a51743759723ecd05604a1b6b507225e91dc1a6df0780", size = 4547, upload-time = "2025-12-17T18:25:40.136Z" }, -] - [[package]] name = "rpds-py" version = "0.30.0" @@ -2065,7 +2068,7 @@ dependencies = [ { name = "alabaster", marker = "python_full_version < '3.11'" }, { name = "babel", marker = "python_full_version < '3.11'" }, { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version < '3.11'" }, + { name = "docutils", version = "0.21.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "imagesize", marker = "python_full_version < '3.11'" }, { name = "jinja2", marker = "python_full_version < '3.11'" }, { name = "packaging", marker = "python_full_version < '3.11'" }, @@ -2087,7 +2090,7 @@ wheels = [ [[package]] name = "sphinx" -version = "8.2.3" +version = "9.0.4" source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.12'", @@ -2097,13 +2100,13 @@ dependencies = [ { name = "alabaster", marker = "python_full_version >= '3.11'" }, { name = "babel", marker = "python_full_version >= '3.11'" }, { name = "colorama", marker = "python_full_version >= '3.11' and sys_platform == 'win32'" }, - { name = "docutils", marker = "python_full_version >= '3.11'" }, + { name = "docutils", version = "0.22.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "imagesize", marker = "python_full_version >= '3.11'" }, { name = "jinja2", marker = "python_full_version >= '3.11'" }, { name = "packaging", marker = "python_full_version >= '3.11'" }, { name = "pygments", marker = "python_full_version >= '3.11'" }, { name = "requests", marker = "python_full_version >= '3.11'" }, - { name = "roman-numerals-py", marker = "python_full_version >= '3.11'" }, + { name = "roman-numerals", marker = "python_full_version >= '3.11'" }, { name = "snowballstemmer", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-applehelp", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-devhelp", marker = "python_full_version >= '3.11'" }, @@ -2112,9 +2115,9 @@ dependencies = [ { name = "sphinxcontrib-qthelp", marker = "python_full_version >= '3.11'" }, { name = "sphinxcontrib-serializinghtml", marker = "python_full_version >= '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/ad/4360e50ed56cb483667b8e6dadf2d3fda62359593faabbe749a27c4eaca6/sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348", size = 8321876, upload-time = "2025-03-02T22:31:59.658Z" } +sdist = { url = "https://files.pythonhosted.org/packages/42/50/a8c6ccc36d5eacdfd7913ddccd15a9cee03ecafc5ee2bc40e1f168d85022/sphinx-9.0.4.tar.gz", hash = "sha256:594ef59d042972abbc581d8baa577404abe4e6c3b04ef61bd7fc2acbd51f3fa3", size = 8710502, upload-time = "2025-12-04T07:45:27.343Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/31/53/136e9eca6e0b9dc0e1962e2c908fbea2e5ac000c2a2fbd9a35797958c48b/sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3", size = 3589741, upload-time = "2025-03-02T22:31:56.836Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl", hash = "sha256:5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb", size = 3917713, upload-time = "2025-12-04T07:45:24.944Z" }, ] [[package]] @@ -2123,7 +2126,7 @@ version = "1.0.0b2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "sphinx", version = "8.1.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "sphinx", version = "8.2.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { name = "sphinx", version = "9.0.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/98/0b/a866924ded68efec7a1759587a4e478aec7559d8165fac8b2ad1c0e774d6/sphinx_basic_ng-1.0.0b2.tar.gz", hash = "sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9", size = 20736, upload-time = "2023-07-08T18:40:54.166Z" } wheels = [ @@ -2317,15 +2320,15 @@ wheels = [ [[package]] name = "typer-slim" -version = "0.20.0" +version = "0.20.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "click" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8e/45/81b94a52caed434b94da65729c03ad0fb7665fab0f7db9ee54c94e541403/typer_slim-0.20.0.tar.gz", hash = "sha256:9fc6607b3c6c20f5c33ea9590cbeb17848667c51feee27d9e314a579ab07d1a3", size = 106561, upload-time = "2025-10-20T17:03:46.642Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/3d/6a4ec47010e8de34dade20c8e7bce90502b173f62a6b41619523a3fcf562/typer_slim-0.20.1.tar.gz", hash = "sha256:bb9e4f7e6dc31551c8a201383df322b81b0ce37239a5ead302598a2ebb6f7c9c", size = 106113, upload-time = "2025-12-19T16:48:54.206Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/dd/5cbf31f402f1cc0ab087c94d4669cfa55bd1e818688b910631e131d74e75/typer_slim-0.20.0-py3-none-any.whl", hash = "sha256:f42a9b7571a12b97dddf364745d29f12221865acef7a2680065f9bb29c7dc89d", size = 47087, upload-time = "2025-10-20T17:03:44.546Z" }, + { url = "https://files.pythonhosted.org/packages/d8/f9/a273c8b57c69ac1b90509ebda204972265fdc978fbbecc25980786f8c038/typer_slim-0.20.1-py3-none-any.whl", hash = "sha256:8e89c5dbaffe87a4f86f4c7a9e2f7059b5b68c66f558f298969d42ce34f10122", size = 47440, upload-time = "2025-12-19T16:48:52.678Z" }, ] [[package]] From 023cf4c1b6f2fabb65edf531c28168524c467a05 Mon Sep 17 00:00:00 2001 From: Daphne Hansell Date: Mon, 22 Dec 2025 10:40:11 -0500 Subject: [PATCH 09/15] Regenerate uv.lock after merge MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- uv.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uv.lock b/uv.lock index af8cd5822f7..a45bb8d2b14 100644 --- a/uv.lock +++ b/uv.lock @@ -717,7 +717,7 @@ name = "importlib-metadata" version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp" }, + { name = "zipp", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ @@ -1534,7 +1534,7 @@ wheels = [ [[package]] name = "policyengine-us" -version = "1.469.0" +version = "1.470.0" source = { editable = "." } dependencies = [ { name = "microdf-python" }, From abf56d112d33de8a05c84ef35b70c42e1f4a57de Mon Sep 17 00:00:00 2001 From: Daphne Hansell Date: Mon, 22 Dec 2025 10:49:59 -0500 Subject: [PATCH 10/15] uv lock --upgrade MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- uv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uv.lock b/uv.lock index a45bb8d2b14..dfed9cccf48 100644 --- a/uv.lock +++ b/uv.lock @@ -717,7 +717,7 @@ name = "importlib-metadata" version = "8.7.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "zipp", marker = "python_full_version < '3.11'" }, + { name = "zipp" }, ] sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } wheels = [ From 52feda26f2d5982470d3bce85562819eb4bc5963 Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 22 Dec 2025 13:32:22 -0500 Subject: [PATCH 11/15] Apply suggestions from code review Co-authored-by: Ziming Hua <113824411+hua7450@users.noreply.github.com> --- .../gov/states/il/hfs/hbi/eligibility/adult/min_age.yaml | 3 ++- .../states/il/hfs/hbi/income/il_hbi_senior_income_level.py | 7 +++---- 2 files changed, 5 insertions(+), 5 deletions(-) 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 index be631ea3df0..c71ed736f54 100644 --- 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 @@ -11,4 +11,5 @@ metadata: values: # HBIA covers adults aged 42-64 - 2022-01-01: 42 + 2022-05-01: 55 + 2022-07-01: 42 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 index d0fe0df11a9..f83033292a4 100644 --- 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 @@ -14,13 +14,12 @@ class il_hbi_senior_income_level(Variable): def formula(person, period, parameters): # Get monthly AABD-methodology income and annualize - monthly_income = person( - "il_hbi_senior_countable_income", period.first_month + income = person( + "il_hbi_senior_countable_income", period ) - annual_income = monthly_income * MONTHS_IN_YEAR # 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 np.where(fpg > 0, annual_income / fpg, 0) + return where(fpg > 0, income / fpg, 0) From ea35b4a7c010b46220b94965e69ed20db73b859c Mon Sep 17 00:00:00 2001 From: Daphne Hansell <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 22 Dec 2025 13:33:10 -0500 Subject: [PATCH 12/15] Update policyengine_us/parameters/gov/states/il/hfs/hbi/eligibility/adult/in_effect.yaml Co-authored-by: Ziming Hua <113824411+hua7450@users.noreply.github.com> --- .../gov/states/il/hfs/hbi/eligibility/adult/in_effect.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 index f86bbb273c0..6c7a975e29e 100644 --- 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 @@ -11,7 +11,7 @@ metadata: values: 2020-01-01: false - # HBIA program started January 2022 - 2022-01-01: true + # HBIA program started May 2022 + 2022-05-01: true # Program terminated July 1, 2025 2025-07-01: false From 9a3199cfb66bddd78689fbf0f3a03a174f8c7ec0 Mon Sep 17 00:00:00 2001 From: Daphne Hansell Date: Mon, 22 Dec 2025 14:18:40 -0500 Subject: [PATCH 13/15] lint --- .../states/il/hfs/hbi/income/il_hbi_senior_income_level.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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 index f83033292a4..cd849e033ad 100644 --- 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 @@ -14,9 +14,7 @@ class il_hbi_senior_income_level(Variable): def formula(person, period, parameters): # Get monthly AABD-methodology income and annualize - income = person( - "il_hbi_senior_countable_income", period - ) + income = person("il_hbi_senior_countable_income", period) # Get household FPL based on SPM unit size fpg = person.spm_unit("spm_unit_fpg", period) From 141023042868f1e321a2c344613af24327e5c252 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Mon, 22 Dec 2025 16:51:41 -0500 Subject: [PATCH 14/15] format --- .../hbi/eligibility/il_hbi_age_eligible.py | 12 +++------- .../il/hfs/hbi/eligibility/il_hbi_eligible.py | 11 +++------ .../hbi/eligibility/il_hbi_income_eligible.py | 23 +++++++------------ .../eligibility/il_hbi_resource_eligible.py | 6 ++--- 4 files changed, 16 insertions(+), 36 deletions(-) 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 index fb22b6c72f8..3db4cab1444 100644 --- 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 @@ -24,15 +24,9 @@ def formula(person, period, parameters): age = person("age", period) - # Age thresholds - child_max_age = p.child.max_age - adult_min_age = p.adult.min_age - adult_max_age = p.adult.max_age - senior_min_age = p.senior.min_age - # Determine if in a covered age group - is_child = age <= child_max_age - is_adult = (age >= adult_min_age) & (age <= adult_max_age) - is_senior = age >= senior_min_age + 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 index 2824d935609..48e75a5ac17 100644 --- 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 @@ -36,14 +36,9 @@ def formula(person, period, parameters): # Determine age group for program-specific in_effect checks age = person("age", period) - child_max_age = p.child.max_age - adult_min_age = p.adult.min_age - adult_max_age = p.adult.max_age - senior_min_age = p.senior.min_age - - is_child = age <= child_max_age - is_adult = (age >= adult_min_age) & (age <= adult_max_age) - is_senior = age >= senior_min_age + 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 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 index f937ebdaf9c..67b22c96997 100644 --- 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 @@ -26,15 +26,9 @@ def formula(person, period, parameters): age = person("age", period) # Age thresholds - child_max_age = p.child.max_age - adult_min_age = p.adult.min_age - adult_max_age = p.adult.max_age - senior_min_age = p.senior.min_age - - # Determine age category - is_child = age <= child_max_age - is_adult = (age >= adult_min_age) & (age <= adult_max_age) - is_senior = age >= senior_min_age + 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 @@ -43,15 +37,14 @@ def formula(person, period, parameters): income_level = where(is_senior, aabd_income_level, magi_income_level) - # Income limits by age group - child_limit = p.child.income_limit - adult_limit = p.adult.income_limit - senior_limit = p.senior.income_limit - # Select appropriate income limit based on age income_limit = select( [is_child, is_adult, is_senior], - [child_limit, adult_limit, senior_limit], + [ + p.child.income_limit, + p.adult.income_limit, + p.senior.income_limit, + ], default=0, # Ages 19-41 not covered ) 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 index 4cc4da31224..8be65953f10 100644 --- 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 @@ -18,17 +18,15 @@ def formula(person, period, parameters): p = parameters(period).gov.states.il.hfs.hbi.eligibility age = person("age", period) - senior_min_age = p.senior.min_age - is_senior = age >= senior_min_age + is_senior = age >= p.senior.min_age # Get household assets household_assets = person.spm_unit("spm_unit_assets", period) - resource_limit = p.senior.resource_limit # Seniors must meet the resource test # Non-seniors automatically pass (no resource test) return where( is_senior, - household_assets <= resource_limit, + household_assets <= p.senior.resource_limit, True, ) From 1071a3dda26aceadac5ced74eff4c7f21f386d9a Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Mon, 29 Dec 2025 10:22:53 -0500 Subject: [PATCH 15/15] Regenerate uv.lock after merge from main --- uv.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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" },