From 1cca03ee6b63a8e81f855a950115475659300045 Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 4 Dec 2025 15:30:23 -0800 Subject: [PATCH 1/3] Kids with ESI should not be enrolled in CHIP/Medicaid Fixes #6910 --- changelog_entry.yaml | 4 ++ .../gov/hhs/chip/is_chip_eligible_child.yaml | 67 +++++++++++++++++++ .../gov/territories/pr/tax/income/pr_agi.yaml | 2 +- .../pr/tax/income/pr_agi_person.yaml | 2 +- .../gov/hhs/chip/is_chip_eligible_child.py | 6 ++ ..._chip_eligible_standard_pregnant_person.py | 6 ++ .../hhs/chip/is_chip_fcep_eligible_person.py | 6 ++ 7 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 policyengine_us/tests/policy/baseline/gov/hhs/chip/is_chip_eligible_child.yaml diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..dfd21d5d07d 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: patch + changes: + fixed: + - Exclude individuals with employer-sponsored insurance (ESI) from CHIP eligibility, per federal CHIP requirements. diff --git a/policyengine_us/tests/policy/baseline/gov/hhs/chip/is_chip_eligible_child.yaml b/policyengine_us/tests/policy/baseline/gov/hhs/chip/is_chip_eligible_child.yaml new file mode 100644 index 00000000000..a4521acbde1 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/hhs/chip/is_chip_eligible_child.yaml @@ -0,0 +1,67 @@ +# Tests for is_chip_eligible_child variable +# Children with ESI should not be eligible for CHIP +# Using TX which has CHIP limit of 2.06 (206% FPL) + +- name: Child eligible for CHIP without ESI + period: 2023 + input: + people: + child: + age: 10 + is_medicaid_eligible: false + medicaid_income_level: 2.0 # 200% FPL - above Medicaid, below TX CHIP limit + has_esi: false + households: + household: + state_code: TX + members: [child] + output: + is_chip_eligible_child: true + +- name: Child ineligible for CHIP with ESI + period: 2023 + input: + people: + child: + age: 10 + is_medicaid_eligible: false + medicaid_income_level: 2.0 # 200% FPL - would qualify but has ESI + has_esi: true + households: + household: + state_code: TX + members: [child] + output: + is_chip_eligible_child: false + +- name: Child ineligible - too old + period: 2023 + input: + people: + adult: + age: 20 + is_medicaid_eligible: false + medicaid_income_level: 2.0 + has_esi: false + households: + household: + state_code: TX + members: [adult] + output: + is_chip_eligible_child: false + +- name: Child ineligible - Medicaid eligible + period: 2023 + input: + people: + child: + age: 10 + is_medicaid_eligible: true + medicaid_income_level: 1.0 # 100% FPL - Medicaid eligible + has_esi: false + households: + household: + state_code: TX + members: [child] + output: + is_chip_eligible_child: 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/hhs/chip/is_chip_eligible_child.py b/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_child.py index b4a8d37b6d4..603ff220b3a 100644 --- a/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_child.py +++ b/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_child.py @@ -10,6 +10,8 @@ class is_chip_eligible_child(Variable): reference = ( "https://www.ssa.gov/OP_Home/ssact/title21/2110.htm", "https://www.medicaid.gov/medicaid/national-medicaid-chip-program-information/medicaid-childrens-health-insurance-program-basic-health-program-eligibility-levels", + # Must not have other health insurance coverage + "https://www.healthcare.gov/medicaid-chip/childrens-health-insurance-program/", ) def formula(person, period, parameters): @@ -41,10 +43,14 @@ def formula(person, period, parameters): income_ratio = person("medicaid_income_level", period) income_eligible = income_ratio <= income_limit + # Must not have other health insurance coverage to qualify for CHIP + has_esi = person("has_esi", period) + return ( is_age_eligible & state_has_chip & immigration_eligible & ~medicaid_eligible & income_eligible + & ~has_esi ) diff --git a/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py b/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py index 7a49c63d876..9448de47ee3 100644 --- a/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py +++ b/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py @@ -10,6 +10,8 @@ class is_chip_eligible_standard_pregnant_person(Variable): reference = ( "https://www.ssa.gov/OP_Home/ssact/title21/2110.htm", "https://www.medicaid.gov/medicaid/national-medicaid-chip-program-information/medicaid-childrens-health-insurance-program-basic-health-program-eligibility-levels", + # Must not have other health insurance coverage + "https://www.healthcare.gov/medicaid-chip/childrens-health-insurance-program/", ) def formula(person, period, parameters): @@ -40,10 +42,14 @@ def formula(person, period, parameters): income_ratio = person("medicaid_income_level", period) income_eligible = income_ratio <= income_limit + # Must not have other health insurance coverage to qualify for CHIP + has_esi = person("has_esi", period) + return ( is_pregnant & state_has_pregnant_chip & immigration_eligible & ~medicaid_eligible & income_eligible + & ~has_esi ) diff --git a/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py b/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py index 07bb00ec318..c4e99bbe781 100644 --- a/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py +++ b/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py @@ -9,6 +9,8 @@ class is_chip_fcep_eligible_person(Variable): definition_period = YEAR reference = ( "https://www.kff.org/affordable-care-act/state-indicator/medicaid-and-chip-income-eligibility-limits-for-pregnant-women-as-a-percent-of-the-federal-poverty-level", + # Must not have other health insurance coverage + "https://www.healthcare.gov/medicaid-chip/childrens-health-insurance-program/", ) def formula(person, period, parameters): @@ -39,10 +41,14 @@ def formula(person, period, parameters): income_ratio = person("medicaid_income_level", period) income_eligible = income_ratio <= income_limit + # Must not have other health insurance coverage to qualify for CHIP + has_esi = person("has_esi", period) + return ( is_pregnant & state_has_fcep & immigration_eligible & ~medicaid_eligible & income_eligible + & ~has_esi ) From b8a4b89cd67c75e8c0992dbd5504f45de4298fc1 Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 12:35:29 -0500 Subject: [PATCH 2/3] Kids with ESI should not be enrolled in CHIP Fixes #6910 --- .../hhs/chip/is_chip_eligible_standard_pregnant_person.py | 8 ++------ .../gov/hhs/chip/is_chip_fcep_eligible_person.py | 8 ++------ 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py b/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py index 9448de47ee3..3e339968662 100644 --- a/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py +++ b/policyengine_us/variables/gov/hhs/chip/is_chip_eligible_standard_pregnant_person.py @@ -10,8 +10,8 @@ class is_chip_eligible_standard_pregnant_person(Variable): reference = ( "https://www.ssa.gov/OP_Home/ssact/title21/2110.htm", "https://www.medicaid.gov/medicaid/national-medicaid-chip-program-information/medicaid-childrens-health-insurance-program-basic-health-program-eligibility-levels", - # Must not have other health insurance coverage - "https://www.healthcare.gov/medicaid-chip/childrens-health-insurance-program/", + # 42 USC 1397ll defines targeted low-income pregnant woman without uninsured requirement + "https://uscode.house.gov/view.xhtml?req=(title:42+section:1397ll+edition:prelim)", ) def formula(person, period, parameters): @@ -42,14 +42,10 @@ def formula(person, period, parameters): income_ratio = person("medicaid_income_level", period) income_eligible = income_ratio <= income_limit - # Must not have other health insurance coverage to qualify for CHIP - has_esi = person("has_esi", period) - return ( is_pregnant & state_has_pregnant_chip & immigration_eligible & ~medicaid_eligible & income_eligible - & ~has_esi ) diff --git a/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py b/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py index c4e99bbe781..2673044ec95 100644 --- a/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py +++ b/policyengine_us/variables/gov/hhs/chip/is_chip_fcep_eligible_person.py @@ -9,8 +9,8 @@ class is_chip_fcep_eligible_person(Variable): definition_period = YEAR reference = ( "https://www.kff.org/affordable-care-act/state-indicator/medicaid-and-chip-income-eligibility-limits-for-pregnant-women-as-a-percent-of-the-federal-poverty-level", - # Must not have other health insurance coverage - "https://www.healthcare.gov/medicaid-chip/childrens-health-insurance-program/", + # 42 USC 1397ll defines targeted low-income pregnant woman without uninsured requirement + "https://uscode.house.gov/view.xhtml?req=(title:42+section:1397ll+edition:prelim)", ) def formula(person, period, parameters): @@ -41,14 +41,10 @@ def formula(person, period, parameters): income_ratio = person("medicaid_income_level", period) income_eligible = income_ratio <= income_limit - # Must not have other health insurance coverage to qualify for CHIP - has_esi = person("has_esi", period) - return ( is_pregnant & state_has_fcep & immigration_eligible & ~medicaid_eligible & income_eligible - & ~has_esi ) From 44faf8d01ea84aafd20e2bc117181dd7f97a23fd Mon Sep 17 00:00:00 2001 From: daphnehanse11 <128793799+daphnehanse11@users.noreply.github.com> Date: Thu, 18 Dec 2025 14:40:40 -0500 Subject: [PATCH 3/3] 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" },