From 94dbdd693ea789d5b89063a18f425f5a034bbae5 Mon Sep 17 00:00:00 2001 From: Ziming Date: Sun, 8 Nov 2026 22:01:41 -0500 Subject: [PATCH 1/4] Pay the Hawaii LIHEAP credit to electric accounts with cooling costs Co-Authored-By: Claude Opus 5.5 --- changelog.d/hi-liheap-cooling.fixed.md | 1 + policyengine_us/programs.yaml | 2 +- .../hi/dhs/liheap/hi_liheap_eligible.yaml | 24 ++++++ .../liheap/hi_liheap_subsidized_amount.yaml | 86 +++++++++++++++++++ .../hi/dhs/liheap/hi_liheap_eligible.py | 16 ++-- .../dhs/liheap/hi_liheap_subsidized_amount.py | 3 +- 6 files changed, 124 insertions(+), 8 deletions(-) create mode 100644 changelog.d/hi-liheap-cooling.fixed.md diff --git a/changelog.d/hi-liheap-cooling.fixed.md b/changelog.d/hi-liheap-cooling.fixed.md new file mode 100644 index 00000000000..1cf96d9f911 --- /dev/null +++ b/changelog.d/hi-liheap-cooling.fixed.md @@ -0,0 +1 @@ +Pay Hawaii's LIHEAP Energy Credit on the electric (cooling) account to households with a cooling cost, including the subsidized-dwelling flat amount. diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index a7cef450f8b..ff0dd57a264 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1058,7 +1058,7 @@ programs: full_name: Hawaii Low Income Home Energy Assistance Program subsidized dwelling benefit variable: hi_liheap_subsidized_amount parameter_prefix: gov.states.hi.dhs.liheap - notes: FY2026 eligibility, the subsidized-dwelling flat benefit and private-dwelling points; no private-dwelling dollar award because its statewide value per point was not located. Crisis, cooling, weatherization and equipment assistance are out of scope. + notes: FY2026 eligibility, the subsidized-dwelling flat benefit and private-dwelling points for the Energy Credit on a gas (heating) or electric (cooling) account, which also covers cooling-only households; no private-dwelling dollar award because its statewide value per point was not located. Crisis, weatherization and equipment assistance are out of scope. - state: OH status: partial name: Ohio HEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml index ff25fd1564b..9fdd9d868d5 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml @@ -108,3 +108,27 @@ hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000] output: hi_liheap_eligible: [true, false, true, false, false, false, true, true, false, true] + +- name: Case 5, the electric account qualifies for the cooling credit when the household pays for cooling. + period: 2026 + # Draft 1.4 pays electricity as cooling, and 2.12 lets a household have one + # utility credited, gas or electric, with the same eligibility (plan 3.1-3.3, + # page 12). The electric bill is 2_016: HCEOC cites EIA's 2019 average Hawaii + # electric bill of $168 a month, and 168 x 12 = 2_016. With a cooling cost, the + # electric credit goes to a home with no heating, electric heat or propane heat + # (rows 1-3). It needs the cooling cost (row 4) and the electric bill (row 5). + # UNSPECIFIED pays nothing (row 6). Countable income of 41_942 is one dollar + # above the one-person limit of 41_941 (row 7). + input: + state_code: [HI, HI, HI, HI, HI, HI, HI] + heating_type: [NONE, ELECTRICITY, PROPANE, NONE, NONE, UNSPECIFIED, NONE] + has_cooling_expense: [true, true, true, false, true, true, true] + pre_subsidy_electricity_expense: [2_016, 2_016, 2_016, 2_016, 0, 2_016, 2_016] + bottled_gas_expense: [0, 0, 900, 0, 0, 0, 0] + gas_expense: [0, 0, 0, 0, 0, 0, 0] + ssi: [0, 0, 0, 0, 0, 0, 0] + snap: [0, 0, 0, 0, 0, 0, 0] + tanf: [0, 0, 0, 0, 0, 0, 0] + hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 41_942] + output: + hi_liheap_eligible: [true, true, true, false, false, false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml index 856ca12b3c3..b595c49e4f2 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml @@ -348,3 +348,89 @@ hi_liheap_countable_income: 30_000 hi_liheap_eligible: true hi_liheap_subsidized_amount: 425 + +- name: Case 5, a subsidized household with no heating receives the flat benefit on its electric account. + period: 2026 + absolute_error_margin: 0.01 + # Plan 3.5 (page 13) gives cooling the same flat amounts, and the matrix pays + # one "heating and cooling energy credit". Each adult works full time at + # Hawaii's $16 minimum wage from 2026 (HRS 387-2): 16 x 2_080 = 33_280, under the + # one-person limit of 41_941 and the three-person limit of 67_751. The electric + # bill is 2_016 (168 x 12, Case 5 of hi_liheap_eligible). A voucher holder pays + # 375 for size one and a public-housing family of three pays 425. A private + # dwelling is eligible, but this output reads zero for it. Without a cooling + # cost the electric bill does not qualify. + input: + people: + person1: + age: 35 + ssi: 0 + employment_income_before_lsr: 33_280 + person2: + age: 35 + ssi: 0 + employment_income_before_lsr: 33_280 + person3: + age: 35 + ssi: 0 + employment_income_before_lsr: 33_280 + person4: + age: 35 + ssi: 0 + employment_income_before_lsr: 33_280 + person5: + age: 33 + ssi: 0 + person6: + age: 8 + ssi: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: NONE + has_cooling_expense: true + pre_subsidy_electricity_expense: 2_016 + hi_tanf: 0 + receives_housing_assistance: true + spm_unit2: + members: [person2] + heating_type: NONE + has_cooling_expense: true + pre_subsidy_electricity_expense: 2_016 + hi_tanf: 0 + receives_housing_assistance: false + spm_unit3: + members: [person3] + heating_type: NONE + has_cooling_expense: false + pre_subsidy_electricity_expense: 2_016 + hi_tanf: 0 + receives_housing_assistance: true + spm_unit4: + members: [person4, person5, person6] + heating_type: NONE + has_cooling_expense: true + pre_subsidy_electricity_expense: 2_016 + hi_tanf: 0 + households: + household1: + members: [person1] + state_code: HI + county: HONOLULU_COUNTY_HI + household2: + members: [person2] + state_code: HI + county: HONOLULU_COUNTY_HI + household3: + members: [person3] + state_code: HI + county: HONOLULU_COUNTY_HI + household4: + members: [person4, person5, person6] + state_code: HI + county: HONOLULU_COUNTY_HI + is_in_public_housing: true + output: + hi_liheap_countable_income: [33_280, 33_280, 33_280, 33_280] + hi_liheap_eligible: [true, true, false, true] + hi_liheap_subsidized_amount: [375, 0, 0, 425] diff --git a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py index e5292c13fac..3eabd6ca085 100644 --- a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py @@ -4,11 +4,11 @@ class hi_liheap_eligible(Variable): value_type = bool entity = SPMUnit - label = "Eligible for Hawaii LIHEAP regular heating assistance" + label = "Eligible for Hawaii LIHEAP regular heating or cooling assistance" definition_period = YEAR defined_for = StateCode.HI reference = ( - # PDF pages 5, 9 + # PDF pages 5,9,12 "https://liheapch.acf.gov/docs/2026/state-plans/HI_Plan_2026.pdf#page=5", # PDF pages 1, 3 "https://liheapch.acf.gov/docs/2026/benefits-matricies/HI_BenefitMatrix_2026.pdf#page=1", @@ -39,16 +39,20 @@ def formula(spm_unit, period, parameters): ) # Both manuals pay gas as heating and electricity as cooling, and a household # asks to have one utility credited (2.12; application Q17). So any home's - # gas bill qualifies, whatever heats it or the rent includes. Bottled gas does - # not show the active utility account that draft 2.1 requires. Callers must - # send heating_type. + # gas bill qualifies, whatever heats it or the rent includes, and its electric + # bill qualifies when it pays for cooling. Bottled gas does not show the + # active utility account that draft 2.1 requires. Callers must send + # heating_type. fuel = spm_unit("heating_type", period) types = fuel.possible_values heat_in_rent = spm_unit("heat_expense_included_in_rent", period) gas_bill = spm_unit("gas_expense", period) > 0 + cooling_bill = spm_unit("has_cooling_expense", period) & ( + spm_unit("pre_subsidy_electricity_expense", period) > 0 + ) # Draft 2.1 and 4.2 and application Q23-24 accept a share of utilities in # rent, which has no input; plan 2.3 and the 2020 manual do not. - responsible = (gas_bill & (fuel != types.UNSPECIFIED)) | ( + responsible = ((gas_bill | cooling_bill) & (fuel != types.UNSPECIFIED)) | ( heat_in_rent & (fuel == types.NATURAL_GAS) ) return (size > 0) & (income_eligible | categorical) & responsible diff --git a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.py b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.py index 14bca994c5d..01dc925e937 100644 --- a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.py +++ b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.py @@ -4,11 +4,12 @@ class hi_liheap_subsidized_amount(Variable): value_type = float entity = SPMUnit - label = "Hawaii LIHEAP flat heating benefit for subsidized dwellings" + label = "Hawaii LIHEAP flat heating or cooling benefit for subsidized dwellings" definition_period = YEAR unit = USD defined_for = "hi_liheap_eligible" reference = ( + # PDF pages 10,13 "https://liheapch.acf.gov/docs/2026/state-plans/HI_Plan_2026.pdf#page=10", "https://liheapch.acf.gov/docs/2026/benefits-matricies/HI_BenefitMatrix_2026.pdf#page=2", ) From d5d0a48c23dc961ca840892878854b79d0eb89fe Mon Sep 17 00:00:00 2001 From: Ziming Date: Mon, 9 Nov 2026 23:06:09 -0500 Subject: [PATCH 2/4] Pay the Hawaii Energy Credit on any electric bill Both manuals pay electricity as cooling and let the household choose the utility credited, so any reported heating type with a gas or electric bill qualifies, with no cooling-cost condition. Update the main case whose row changes and drop a duplicate row from the cooling case. Co-Authored-By: Claude Opus 5.5 --- changelog.d/hi-liheap-cooling.fixed.md | 2 +- policyengine_us/programs.yaml | 2 +- .../hi/dhs/liheap/hi_liheap_eligible.yaml | 44 ++++++++++--------- .../liheap/hi_liheap_subsidized_amount.yaml | 8 ++-- .../hi/dhs/liheap/hi_liheap_eligible.py | 13 +++--- 5 files changed, 34 insertions(+), 35 deletions(-) diff --git a/changelog.d/hi-liheap-cooling.fixed.md b/changelog.d/hi-liheap-cooling.fixed.md index 1cf96d9f911..da3b0580b77 100644 --- a/changelog.d/hi-liheap-cooling.fixed.md +++ b/changelog.d/hi-liheap-cooling.fixed.md @@ -1 +1 @@ -Pay Hawaii's LIHEAP Energy Credit on the electric (cooling) account to households with a cooling cost, including the subsidized-dwelling flat amount. +Pay Hawaii's LIHEAP Energy Credit on the electric (cooling) account to any eligible household with an electric bill, including the subsidized-dwelling flat amount. diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index ff0dd57a264..9d1dbb9c49e 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1058,7 +1058,7 @@ programs: full_name: Hawaii Low Income Home Energy Assistance Program subsidized dwelling benefit variable: hi_liheap_subsidized_amount parameter_prefix: gov.states.hi.dhs.liheap - notes: FY2026 eligibility, the subsidized-dwelling flat benefit and private-dwelling points for the Energy Credit on a gas (heating) or electric (cooling) account, which also covers cooling-only households; no private-dwelling dollar award because its statewide value per point was not located. Crisis, weatherization and equipment assistance are out of scope. + notes: FY2026 eligibility, the subsidized-dwelling flat benefit and private-dwelling points for the Energy Credit on a gas (heating) or electric (cooling) account for any eligible household with that bill; no private-dwelling dollar award because its statewide value per point was not located. Crisis, weatherization and equipment assistance are out of scope. - state: OH status: partial name: Ohio HEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml index 9fdd9d868d5..0ecda823cdc 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml @@ -89,12 +89,13 @@ hi_liheap_household_size: [1, 0, 0] hi_liheap_eligible: [true, false, false] -- name: Case 4, heating assistance needs gas paid by bill or through rent. +- name: Case 4, the credit needs a gas or electric bill, or gas through rent. period: 2026 # Any home's gas bill and gas in rent qualify, whatever heats the home (rows 1, 3, 7, 8). # A separate gas bill still qualifies when electric heat is in the rent (row 10). - # A home with no gas bill does not: the electric bill is the cooling credit and bottled - # gas shows no utility account. Electricity in rent is not gas, and UNSPECIFIED pays nothing. + # An electric bill qualifies the electric account, which pays as cooling (row 4). + # Bottled gas shows no utility account. Electricity in rent is not gas, and + # UNSPECIFIED pays nothing. input: state_code: [HI, HI, HI, HI, HI, HI, HI, HI, HI, HI] heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, ELECTRICITY, PROPANE, UNSPECIFIED, NONE, ELECTRICITY, ELECTRICITY, ELECTRICITY] @@ -107,28 +108,29 @@ tanf: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000] output: - hi_liheap_eligible: [true, false, true, false, false, false, true, true, false, true] + # Was false, now true for row 4: a household may have its electric account + # credited (2.12; application Q17). + hi_liheap_eligible: [true, false, true, true, false, false, true, true, false, true] -- name: Case 5, the electric account qualifies for the cooling credit when the household pays for cooling. +- name: Case 5, the electric account qualifies for the cooling credit on its electric bill. period: 2026 # Draft 1.4 pays electricity as cooling, and 2.12 lets a household have one # utility credited, gas or electric, with the same eligibility (plan 3.1-3.3, # page 12). The electric bill is 2_016: HCEOC cites EIA's 2019 average Hawaii - # electric bill of $168 a month, and 168 x 12 = 2_016. With a cooling cost, the - # electric credit goes to a home with no heating, electric heat or propane heat - # (rows 1-3). It needs the cooling cost (row 4) and the electric bill (row 5). - # UNSPECIFIED pays nothing (row 6). Countable income of 41_942 is one dollar - # above the one-person limit of 41_941 (row 7). + # electric bill of $168 a month, and 168 x 12 = 2_016. The electric credit goes + # to a home with no heating, electric heat or propane heat (rows 1-3), with or + # without a cooling cost (row 4), since Hawaii asks none. It needs the electric + # bill (row 5). UNSPECIFIED pays nothing (row 6). input: - state_code: [HI, HI, HI, HI, HI, HI, HI] - heating_type: [NONE, ELECTRICITY, PROPANE, NONE, NONE, UNSPECIFIED, NONE] - has_cooling_expense: [true, true, true, false, true, true, true] - pre_subsidy_electricity_expense: [2_016, 2_016, 2_016, 2_016, 0, 2_016, 2_016] - bottled_gas_expense: [0, 0, 900, 0, 0, 0, 0] - gas_expense: [0, 0, 0, 0, 0, 0, 0] - ssi: [0, 0, 0, 0, 0, 0, 0] - snap: [0, 0, 0, 0, 0, 0, 0] - tanf: [0, 0, 0, 0, 0, 0, 0] - hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 41_942] + state_code: [HI, HI, HI, HI, HI, HI] + heating_type: [NONE, ELECTRICITY, PROPANE, NONE, NONE, UNSPECIFIED] + has_cooling_expense: [true, true, true, false, true, true] + pre_subsidy_electricity_expense: [2_016, 2_016, 2_016, 2_016, 0, 2_016] + bottled_gas_expense: [0, 0, 900, 0, 0, 0] + gas_expense: [0, 0, 0, 0, 0, 0] + ssi: [0, 0, 0, 0, 0, 0] + snap: [0, 0, 0, 0, 0, 0] + tanf: [0, 0, 0, 0, 0, 0] + hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000] output: - hi_liheap_eligible: [true, true, true, false, false, false, false] + hi_liheap_eligible: [true, true, true, true, false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml index b595c49e4f2..8650da5fe8b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml @@ -358,8 +358,8 @@ # one-person limit of 41_941 and the three-person limit of 67_751. The electric # bill is 2_016 (168 x 12, Case 5 of hi_liheap_eligible). A voucher holder pays # 375 for size one and a public-housing family of three pays 425. A private - # dwelling is eligible, but this output reads zero for it. Without a cooling - # cost the electric bill does not qualify. + # dwelling is eligible, but this output reads zero for it. Hawaii asks no + # cooling cost, so the electric bill qualifies without one. input: people: person1: @@ -432,5 +432,5 @@ is_in_public_housing: true output: hi_liheap_countable_income: [33_280, 33_280, 33_280, 33_280] - hi_liheap_eligible: [true, true, false, true] - hi_liheap_subsidized_amount: [375, 0, 0, 425] + hi_liheap_eligible: [true, true, true, true] + hi_liheap_subsidized_amount: [375, 0, 375, 425] diff --git a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py index 3eabd6ca085..290016c109f 100644 --- a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py @@ -39,20 +39,17 @@ def formula(spm_unit, period, parameters): ) # Both manuals pay gas as heating and electricity as cooling, and a household # asks to have one utility credited (2.12; application Q17). So any home's - # gas bill qualifies, whatever heats it or the rent includes, and its electric - # bill qualifies when it pays for cooling. Bottled gas does not show the - # active utility account that draft 2.1 requires. Callers must send - # heating_type. + # gas or electric bill qualifies, whatever heats it or the rent includes, + # with no cooling-cost condition. Bottled gas does not show the active + # utility account that draft 2.1 requires. Callers must send heating_type. fuel = spm_unit("heating_type", period) types = fuel.possible_values heat_in_rent = spm_unit("heat_expense_included_in_rent", period) gas_bill = spm_unit("gas_expense", period) > 0 - cooling_bill = spm_unit("has_cooling_expense", period) & ( - spm_unit("pre_subsidy_electricity_expense", period) > 0 - ) + electric_bill = spm_unit("pre_subsidy_electricity_expense", period) > 0 # Draft 2.1 and 4.2 and application Q23-24 accept a share of utilities in # rent, which has no input; plan 2.3 and the 2020 manual do not. - responsible = ((gas_bill | cooling_bill) & (fuel != types.UNSPECIFIED)) | ( + responsible = ((gas_bill | electric_bill) & (fuel != types.UNSPECIFIED)) | ( heat_in_rent & (fuel == types.NATURAL_GAS) ) return (size > 0) & (income_eligible | categorical) & responsible From 6983cd97c98b5916a133d3ca8b1bcbaf5b2bf53f Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 12 Nov 2026 12:09:16 -0500 Subject: [PATCH 3/4] Pay Hawaii's Energy Credit when utilities or electric heat are in the rent Co-Authored-By: Claude Opus 5.5 --- changelog.d/hi-liheap-cooling.fixed.md | 2 +- .../hi/dhs/liheap/hi_liheap_eligible.yaml | 32 ++++++++++++++++--- .../liheap/hi_liheap_subsidized_amount.yaml | 30 +++++++++++++++++ .../hi/dhs/liheap/hi_liheap_eligible.py | 14 +++++--- source_conflicts/candidates.yaml | 16 ++++++---- 5 files changed, 77 insertions(+), 17 deletions(-) diff --git a/changelog.d/hi-liheap-cooling.fixed.md b/changelog.d/hi-liheap-cooling.fixed.md index da3b0580b77..6b098738f00 100644 --- a/changelog.d/hi-liheap-cooling.fixed.md +++ b/changelog.d/hi-liheap-cooling.fixed.md @@ -1 +1 @@ -Pay Hawaii's LIHEAP Energy Credit on the electric (cooling) account to any eligible household with an electric bill, including the subsidized-dwelling flat amount. +Pay Hawaii's LIHEAP Energy Credit on the electric (cooling) account to any eligible household with an electric bill or with utilities or electric heat included in its rent, including the subsidized-dwelling flat amount. diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml index 0ecda823cdc..f1676934965 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml @@ -89,13 +89,13 @@ hi_liheap_household_size: [1, 0, 0] hi_liheap_eligible: [true, false, false] -- name: Case 4, the credit needs a gas or electric bill, or gas through rent. +- name: Case 4, the credit needs a gas or electric bill, or gas or electric heat through rent. period: 2026 # Any home's gas bill and gas in rent qualify, whatever heats the home (rows 1, 3, 7, 8). # A separate gas bill still qualifies when electric heat is in the rent (row 10). # An electric bill qualifies the electric account, which pays as cooling (row 4). - # Bottled gas shows no utility account. Electricity in rent is not gas, and - # UNSPECIFIED pays nothing. + # Electric heat in the rent qualifies like gas in the rent (row 9). Bottled gas + # shows no utility account, and UNSPECIFIED pays nothing. input: state_code: [HI, HI, HI, HI, HI, HI, HI, HI, HI, HI] heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, ELECTRICITY, PROPANE, UNSPECIFIED, NONE, ELECTRICITY, ELECTRICITY, ELECTRICITY] @@ -109,8 +109,10 @@ hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000] output: # Was false, now true for row 4: a household may have its electric account - # credited (2.12; application Q17). - hi_liheap_eligible: [true, false, true, true, false, false, true, true, false, true] + # credited (2.12; application Q17). Was false, now true for row 9: the Energy + # Credit offsets "rent or applicant's share of the electric/gas cost when rent + # includes electric/gas". + hi_liheap_eligible: [true, false, true, true, false, false, true, true, true, true] - name: Case 5, the electric account qualifies for the cooling credit on its electric bill. period: 2026 @@ -134,3 +136,23 @@ hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000] output: hi_liheap_eligible: [true, true, true, true, false, false] + +- name: Case 6, utilities included in the rent qualify any known fuel without a bill. + period: 2026 + # The draft's Energy Credit definition and 2.1 accept "the household's prorated + # share of the utility bill if rent includes utilities", and application Q23 + # asks whether rent includes "electric/gas service". A home with no heating whose + # utilities are in the rent qualifies with no bill of its own (row 1). An + # unspecified fuel still pays nothing (row 2). + input: + state_code: [HI, HI] + heating_type: [NONE, UNSPECIFIED] + tenant_pays_utilities: [false, false] + gas_expense: [0, 0] + pre_subsidy_electricity_expense: [0, 0] + ssi: [0, 0] + snap: [0, 0] + tanf: [0, 0] + hi_liheap_countable_income: [20_000, 20_000] + output: + hi_liheap_eligible: [true, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml index 8650da5fe8b..12b4971c686 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_subsidized_amount.yaml @@ -434,3 +434,33 @@ hi_liheap_countable_income: [33_280, 33_280, 33_280, 33_280] hi_liheap_eligible: [true, true, true, true] hi_liheap_subsidized_amount: [375, 0, 375, 425] + +- name: Case 6, a public-housing tenant whose utilities are in the rent receives the flat benefit. + period: 2026 + absolute_error_margin: 0.01 + # One person aged 70 in Honolulu public housing with $18,000 of Social Security, + # under the one-person limit of 41_941. Rent includes the utilities and there + # is no separate bill; the draft's Energy Credit offsets "rent or applicant's + # share of the electric/gas cost when rent includes electric/gas". Size one + # receives 375. + input: + people: + person1: + age: 70 + ssi: 0 + social_security_retirement: 18_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: NONE + hi_tanf: 0 + households: + household1: + members: [person1] + state_code: HI + county: HONOLULU_COUNTY_HI + is_in_public_housing: true + tenant_pays_utilities: false + output: + hi_liheap_eligible: true + hi_liheap_subsidized_amount: 375 diff --git a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py index 290016c109f..3807070eca4 100644 --- a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py @@ -47,9 +47,13 @@ def formula(spm_unit, period, parameters): heat_in_rent = spm_unit("heat_expense_included_in_rent", period) gas_bill = spm_unit("gas_expense", period) > 0 electric_bill = spm_unit("pre_subsidy_electricity_expense", period) > 0 - # Draft 2.1 and 4.2 and application Q23-24 accept a share of utilities in - # rent, which has no input; plan 2.3 and the 2020 manual do not. - responsible = ((gas_bill | electric_bill) & (fuel != types.UNSPECIFIED)) | ( - heat_in_rent & (fuel == types.NATURAL_GAS) - ) + # The draft's Energy Credit definition, 2.1 and 4.2 and application Q23-24 + # accept a share of utilities in rent, "electric/gas" alike. Utilities in + # rent (tenant_pays_utilities false) qualify any known fuel, and gas or + # electric heat in rent qualifies too. The size of the share has no input. + utilities_in_rent = ~spm_unit.household("tenant_pays_utilities", period) + rent_fuel = (fuel == types.NATURAL_GAS) | (fuel == types.ELECTRICITY) + responsible = ( + (gas_bill | electric_bill | utilities_in_rent) & (fuel != types.UNSPECIFIED) + ) | (heat_in_rent & rent_fuel) return (size > 0) & (income_eligible | categorical) & responsible diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index 9d02eda84fd..eb764978f80 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -3101,8 +3101,8 @@ candidates: from: 2026 to: 2026 type: federal-fiscal - question: Is a Hawaii household whose gas is included in its rent eligible for LIHEAP, as the draft manual and application - provide, or ineligible, as the 2020 manual provides? + question: Is a Hawaii household whose gas or electricity is included in its rent eligible for LIHEAP, as the draft manual + and application provide, or ineligible, as the 2020 manual provides? sources: - kind: manual citation: Hawaii draft FY2026 Policies and Procedures, sections 2.1 and 4.2, model plan packet PDF pages 58 and 65 @@ -3118,19 +3118,23 @@ candidates: url: https://liheapch.acf.gov/docs/2026/state-plans/HI_Plan_2026.pdf#page=9 readings: statute: No statute is supplied; draft 2.1 accepts "the household's prorated share of the utility bill if rent includes - utilities", and application questions 23 and 24 ask for that share. + utilities", the draft's Energy Credit definition offsets "rent or applicant's share of the electric/gas cost when rent + includes electric/gas", and application questions 23 and 24 ask for that share. other: The 2020 manual lists "Households where all utilities are included in the rent" as ineligible, and plan 2.3 answers No for differing policies for renters with utilities in the rent. - example: One person aged 70 in public housing with $18,000 of Social Security and gas in the rent receives $375 under the - draft manual and $0 under the 2020 manual. + example: One person aged 70 in public housing with $18,000 of Social Security and gas or electricity in the rent receives + $375 under the draft manual and $0 under the 2020 manual. pe_us: follows: gap-fill code: - policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py prs: - https://github.com/PolicyEngine/policyengine-us/pull/10614 + - https://github.com/PolicyEngine/policyengine-us/pull/10734 state: ruled - note: 'Ruled 2026-11-02: follow the draft manual and application. The size of the share has no input.' + note: 'Ruled 2026-11-02: follow the draft manual and application. PR 10734 applies the same ruling to the electric account + it opens: utilities in the rent (tenant_pays_utilities false) qualify any known fuel, and gas or electric heat in the rent + qualifies. The size of the share has no input.' - id: us-hi:snap-abawd-implementation-date program: snap years: From 2bb2ed796c1d9f5ff45907a9ab24738809831a0f Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 12 Nov 2026 13:51:32 -0500 Subject: [PATCH 4/4] Pin the fuel test on Hawaii's heat-in-rent route Case 4 adds propane and unspecified heat in the rent with no bill, both ineligible, so dropping the gas-or-electric condition fails a test. Cite the draft's Energy Credit definition (p. 55) in the candidate and the variable, attribute the Case 6 quote to 2.1 and 4.2, note that a third-party payer or a rent-free home is not identified, and mention utilities in the rent in the registry note. Co-Authored-By: Claude Opus 5.5 --- policyengine_us/programs.yaml | 2 +- .../hi/dhs/liheap/hi_liheap_eligible.yaml | 30 ++++++++++--------- .../hi/dhs/liheap/hi_liheap_eligible.py | 10 ++++--- source_conflicts/candidates.yaml | 5 ++-- 4 files changed, 26 insertions(+), 21 deletions(-) diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 3be07ab848c..69951f6229c 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -1106,7 +1106,7 @@ programs: full_name: Hawaii Low Income Home Energy Assistance Program subsidized dwelling benefit variable: hi_liheap_subsidized_amount parameter_prefix: gov.states.hi.dhs.liheap - notes: FY2026 eligibility, the subsidized-dwelling flat benefit and private-dwelling points for the Energy Credit on a gas (heating) or electric (cooling) account for any eligible household with that bill; no private-dwelling dollar award because its statewide value per point was not located. Crisis, weatherization and equipment assistance are out of scope. + notes: FY2026 eligibility, the subsidized-dwelling flat benefit and private-dwelling points for the Energy Credit on a gas (heating) or electric (cooling) account for any eligible household with that bill or with utilities in its rent; no private-dwelling dollar award because its statewide value per point was not located. Crisis, weatherization and equipment assistance are out of scope. - state: OH status: partial name: Ohio HEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml index f1676934965..d73b433cb45 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/hi_liheap_eligible.yaml @@ -95,24 +95,26 @@ # A separate gas bill still qualifies when electric heat is in the rent (row 10). # An electric bill qualifies the electric account, which pays as cooling (row 4). # Electric heat in the rent qualifies like gas in the rent (row 9). Bottled gas - # shows no utility account, and UNSPECIFIED pays nothing. + # shows no utility account, and UNSPECIFIED pays nothing. Heat in the rent + # qualifies only gas or electric heat, so propane or an unspecified fuel with + # heat in the rent and no bill gets nothing (rows 11 and 12). input: - state_code: [HI, HI, HI, HI, HI, HI, HI, HI, HI, HI] - heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, ELECTRICITY, PROPANE, UNSPECIFIED, NONE, ELECTRICITY, ELECTRICITY, ELECTRICITY] - gas_expense: [900, 0, 0, 0, 0, 900, 900, 900, 0, 900] - pre_subsidy_electricity_expense: [0, 0, 0, 900, 0, 0, 0, 0, 0, 0] - bottled_gas_expense: [0, 0, 0, 0, 900, 0, 0, 0, 0, 0] - heat_expense_included_in_rent: [false, false, true, false, false, false, false, false, true, true] - ssi: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - snap: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - tanf: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] - hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000] + state_code: [HI, HI, HI, HI, HI, HI, HI, HI, HI, HI, HI, HI] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, ELECTRICITY, PROPANE, UNSPECIFIED, NONE, ELECTRICITY, ELECTRICITY, ELECTRICITY, PROPANE, UNSPECIFIED] + gas_expense: [900, 0, 0, 0, 0, 900, 900, 900, 0, 900, 0, 0] + pre_subsidy_electricity_expense: [0, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0] + bottled_gas_expense: [0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0] + heat_expense_included_in_rent: [false, false, true, false, false, false, false, false, true, true, true, true] + ssi: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + snap: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + tanf: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + hi_liheap_countable_income: [20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000, 20_000] output: # Was false, now true for row 4: a household may have its electric account # credited (2.12; application Q17). Was false, now true for row 9: the Energy # Credit offsets "rent or applicant's share of the electric/gas cost when rent # includes electric/gas". - hi_liheap_eligible: [true, false, true, true, false, false, true, true, true, true] + hi_liheap_eligible: [true, false, true, true, false, false, true, true, true, true, false, false] - name: Case 5, the electric account qualifies for the cooling credit on its electric bill. period: 2026 @@ -139,8 +141,8 @@ - name: Case 6, utilities included in the rent qualify any known fuel without a bill. period: 2026 - # The draft's Energy Credit definition and 2.1 accept "the household's prorated - # share of the utility bill if rent includes utilities", and application Q23 + # Draft 2.1 and 4.2 accept "the household's prorated share of the utility bill + # if rent includes utilities", and application Q23 # asks whether rent includes "electric/gas service". A home with no heating whose # utilities are in the rent qualifies with no bill of its own (row 1). An # unspecified fuel still pays nothing (row 2). diff --git a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py index 3807070eca4..a8b9cfbfbc3 100644 --- a/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/hi/dhs/liheap/hi_liheap_eligible.py @@ -12,9 +12,10 @@ class hi_liheap_eligible(Variable): "https://liheapch.acf.gov/docs/2026/state-plans/HI_Plan_2026.pdf#page=5", # PDF pages 1, 3 "https://liheapch.acf.gov/docs/2026/benefits-matricies/HI_BenefitMatrix_2026.pdf#page=1", - # Draft FY2026 manual sections 1.4, 2.1, 2.8, 2.12, 4.2 and 5.5. - # PDF pages 57-58, 60-61, 65, 67 - "https://humanservices.hawaii.gov/wp-content/uploads/2025/07/Model-Plan-Packet-2026.pdf#page=57", + # Draft FY2026 manual Energy Credit definition and sections 1.4, 2.1, 2.8, + # 2.12, 4.2 and 5.5. + # PDF pages 55, 57-58, 60-61, 65, 67 + "https://humanservices.hawaii.gov/wp-content/uploads/2025/07/Model-Plan-Packet-2026.pdf#page=55", ) def formula(spm_unit, period, parameters): @@ -50,7 +51,8 @@ def formula(spm_unit, period, parameters): # The draft's Energy Credit definition, 2.1 and 4.2 and application Q23-24 # accept a share of utilities in rent, "electric/gas" alike. Utilities in # rent (tenant_pays_utilities false) qualify any known fuel, and gas or - # electric heat in rent qualifies too. The size of the share has no input. + # electric heat in rent qualifies too. The size of the share has no input, + # and a third-party payer or a rent-free home is not identified. utilities_in_rent = ~spm_unit.household("tenant_pays_utilities", period) rent_fuel = (fuel == types.NATURAL_GAS) | (fuel == types.ELECTRICITY) responsible = ( diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index eb764978f80..7f32c862034 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -3105,8 +3105,9 @@ candidates: and application provide, or ineligible, as the 2020 manual provides? sources: - kind: manual - citation: Hawaii draft FY2026 Policies and Procedures, sections 2.1 and 4.2, model plan packet PDF pages 58 and 65 - url: https://humanservices.hawaii.gov/wp-content/uploads/2025/07/Model-Plan-Packet-2026.pdf#page=58 + citation: Hawaii draft FY2026 Policies and Procedures, Energy Credit definition and sections 2.1 and 4.2, model plan + packet PDF pages 55, 58 and 65 + url: https://humanservices.hawaii.gov/wp-content/uploads/2025/07/Model-Plan-Packet-2026.pdf#page=55 - kind: form citation: 2026 H-HEAP application, questions 23 and 24, PDF page 4 url: https://humanservices.hawaii.gov/bessd/files/2026/06/2026-Application-Packet.pdf#page=4