From fcbd523a83c99cecbbe8fea30a4bf3b666c75b4a Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 1 Oct 2026 16:13:19 -0400 Subject: [PATCH 01/10] Add Oregon LIHEAP regular heating assistance --- changelog.d/or-liheap.added.md | 1 + .../or/ohcs/liheap/eligibility/smi_rate.yaml | 10 + .../liheap/income/earned_income_min_age.yaml | 10 + .../liheap/income/interest_threshold.yaml | 10 + .../or/ohcs/liheap/income/sources/earned.yaml | 14 ++ .../ohcs/liheap/income/sources/unearned.yaml | 25 +++ .../liheap/payment/amount/electricity.yaml | 122 ++++++++++++ .../ohcs/liheap/payment/amount/fuel_oil.yaml | 65 +++++++ .../liheap/payment/amount/natural_gas.yaml | 122 ++++++++++++ .../ohcs/liheap/payment/amount/propane.yaml | 65 +++++++ .../or/ohcs/liheap/payment/amount/wood.yaml | 65 +++++++ .../or/ohcs/liheap/payment/income_band.yaml | 88 +++++++++ .../liheap/payment/max_household_size.yaml | 10 + .../ohcs/liheap/payment/max_payment_size.yaml | 10 + .../ohcs/liheap/payment/regions/region_1.yaml | 28 +++ .../ohcs/liheap/payment/regions/region_2.yaml | 28 +++ .../or/ohcs/liheap/payment/roomer_rate.yaml | 10 + policyengine_us/programs.yaml | 10 +- .../eligibility/or_liheap_eligible.yaml | 12 ++ .../eligibility/or_liheap_income_limit.yaml | 7 + .../or_liheap_countable_earned_income.yaml | 12 ++ .../income/or_liheap_countable_income.yaml | 23 +++ .../states/or/ohcs/liheap/integration.yaml | 80 ++++++++ .../gov/states/or/ohcs/liheap/or_liheap.yaml | 183 ++++++++++++++++++ .../liheap/eligibility/or_liheap_eligible.py | 27 +++ .../eligibility/or_liheap_income_limit.py | 17 ++ .../or_liheap_countable_earned_income.py | 22 +++ .../income/or_liheap_countable_income.py | 25 +++ .../gov/states/or/ohcs/liheap/or_liheap.py | 41 ++++ .../or/ohcs/liheap/or_liheap_dwelling_type.py | 19 ++ .../liheap/payment/or_liheap_income_band.py | 22 +++ .../ohcs/liheap/payment/or_liheap_region.py | 20 ++ 32 files changed, 1200 insertions(+), 3 deletions(-) create mode 100644 changelog.d/or-liheap.added.md create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml create mode 100644 policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py create mode 100644 policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py diff --git a/changelog.d/or-liheap.added.md b/changelog.d/or-liheap.added.md new file mode 100644 index 00000000000..774602e1b23 --- /dev/null +++ b/changelog.d/or-liheap.added.md @@ -0,0 +1 @@ +Add Oregon LIHEAP regular heating assistance for FY2026. diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml new file mode 100644 index 00000000000..f1031e19f18 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml @@ -0,0 +1,10 @@ +description: Oregon limits countable income to this share of state median income under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': 0.6 +metadata: + unit: /1 + period: year + label: Oregon LIHEAP SMI eligibility rate + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml new file mode 100644 index 00000000000..933f9e5a757 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml @@ -0,0 +1,10 @@ +description: Oregon excludes earnings of people below this age under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': 18 +metadata: + unit: year + period: year + label: Oregon LIHEAP minimum age for counted earnings + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41,53 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml new file mode 100644 index 00000000000..1d34c21109e --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml @@ -0,0 +1,10 @@ +description: Oregon counts annual withdrawn interest only when it exceeds this amount under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': 200 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP interest threshold + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=50 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml new file mode 100644 index 00000000000..4e1d867148c --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml @@ -0,0 +1,14 @@ +description: Oregon counts these existing earnings inputs, without further self-employment expense deductions under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': + - employment_income + - self_employment_income + - sstb_self_employment_income + - farm_operations_income +metadata: + unit: list + period: year + label: Oregon LIHEAP earned income sources + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,41,45,53 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml new file mode 100644 index 00000000000..89dad0a35de --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -0,0 +1,25 @@ +description: Oregon counts these unearned income sources under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': + - rental_income + - social_security + - ssi + - or_tanf + - unemployment_compensation + - workers_compensation + - veterans_benefits + - pension_income + - disability_benefits + - alimony_income + - child_support_received + - dividend_income + - strike_benefits + - general_assistance + - estate_income +metadata: + unit: list + period: year + label: Oregon LIHEAP unearned income sources + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml new file mode 100644 index 00000000000..ff9897e21ee --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml @@ -0,0 +1,122 @@ +description: Oregon provides this annual heating payment for electricity under the Low Income Home Energy Assistance Program, by region, household size and income band. +1: + 1: + 1: + '2025-10-09': 465 + 2: + '2025-10-09': 360 + 3: + '2025-10-09': 300 + 4: + '2025-10-09': 250 + 2: + 1: + '2025-10-09': 595 + 2: + '2025-10-09': 465 + 3: + '2025-10-09': 385 + 4: + '2025-10-09': 275 + 3: + 1: + '2025-10-09': 650 + 2: + '2025-10-09': 505 + 3: + '2025-10-09': 420 + 4: + '2025-10-09': 300 + 4: + 1: + '2025-10-09': 690 + 2: + '2025-10-09': 540 + 3: + '2025-10-09': 450 + 4: + '2025-10-09': 320 + 5: + 1: + '2025-10-09': 725 + 2: + '2025-10-09': 565 + 3: + '2025-10-09': 470 + 4: + '2025-10-09': 340 + 6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 590 + 3: + '2025-10-09': 490 + 4: + '2025-10-09': 350 +2: + 1: + 1: + '2025-10-09': 515 + 2: + '2025-10-09': 400 + 3: + '2025-10-09': 335 + 4: + '2025-10-09': 250 + 2: + 1: + '2025-10-09': 645 + 2: + '2025-10-09': 505 + 3: + '2025-10-09': 420 + 4: + '2025-10-09': 300 + 3: + 1: + '2025-10-09': 700 + 2: + '2025-10-09': 545 + 3: + '2025-10-09': 455 + 4: + '2025-10-09': 325 + 4: + 1: + '2025-10-09': 740 + 2: + '2025-10-09': 580 + 3: + '2025-10-09': 480 + 4: + '2025-10-09': 345 + 5: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 605 + 3: + '2025-10-09': 505 + 4: + '2025-10-09': 360 + 6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 630 + 3: + '2025-10-09': 525 + 4: + '2025-10-09': 375 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP electricity heating payment + breakdown: + - range(1, 3) + - range(1, 7) + - range(1, 5) + reference: + - title: PY2026 manual, corrected regular heating matrices + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml new file mode 100644 index 00000000000..eded817e536 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml @@ -0,0 +1,65 @@ +description: Oregon provides this annual heating payment for fuel oil under the Low Income Home Energy Assistance Program, by household size and income band. +1: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 675 + 3: + '2025-10-09': 560 + 4: + '2025-10-09': 405 +2: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 640 + 4: + '2025-10-09': 460 +3: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 675 + 4: + '2025-10-09': 485 +4: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 700 + 4: + '2025-10-09': 505 +5: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 720 + 4: + '2025-10-09': 520 +6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 740 + 4: + '2025-10-09': 535 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP fuel oil heating payment + breakdown: + - range(1, 7) + - range(1, 5) + reference: + - title: PY2026 manual, corrected regular heating matrices + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml new file mode 100644 index 00000000000..d246e4dafaf --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml @@ -0,0 +1,122 @@ +description: Oregon provides this annual heating payment for natural gas under the Low Income Home Energy Assistance Program, by region, household size and income band. +1: + 1: + 1: + '2025-10-09': 670 + 2: + '2025-10-09': 520 + 3: + '2025-10-09': 435 + 4: + '2025-10-09': 310 + 2: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 605 + 3: + '2025-10-09': 505 + 4: + '2025-10-09': 360 + 3: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 640 + 3: + '2025-10-09': 535 + 4: + '2025-10-09': 385 + 4: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 670 + 3: + '2025-10-09': 555 + 4: + '2025-10-09': 400 + 5: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 690 + 3: + '2025-10-09': 575 + 4: + '2025-10-09': 415 + 6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 710 + 3: + '2025-10-09': 590 + 4: + '2025-10-09': 425 +2: + 1: + 1: + '2025-10-09': 560 + 2: + '2025-10-09': 435 + 3: + '2025-10-09': 365 + 4: + '2025-10-09': 260 + 2: + 1: + '2025-10-09': 670 + 2: + '2025-10-09': 520 + 3: + '2025-10-09': 435 + 4: + '2025-10-09': 310 + 3: + 1: + '2025-10-09': 715 + 2: + '2025-10-09': 555 + 3: + '2025-10-09': 465 + 4: + '2025-10-09': 335 + 4: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 585 + 3: + '2025-10-09': 485 + 4: + '2025-10-09': 350 + 5: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 605 + 3: + '2025-10-09': 505 + 4: + '2025-10-09': 365 + 6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 630 + 3: + '2025-10-09': 525 + 4: + '2025-10-09': 375 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP natural gas heating payment + breakdown: + - range(1, 3) + - range(1, 7) + - range(1, 5) + reference: + - title: PY2026 manual, corrected regular heating matrices + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml new file mode 100644 index 00000000000..ae85e6d05be --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml @@ -0,0 +1,65 @@ +description: Oregon provides this annual heating payment for propane under the Low Income Home Energy Assistance Program, by household size and income band. +1: + 1: + '2025-10-09': 715 + 2: + '2025-10-09': 560 + 3: + '2025-10-09': 465 + 4: + '2025-10-09': 335 +2: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 655 + 3: + '2025-10-09': 545 + 4: + '2025-10-09': 390 +3: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 695 + 3: + '2025-10-09': 580 + 4: + '2025-10-09': 415 +4: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 725 + 3: + '2025-10-09': 605 + 4: + '2025-10-09': 435 +5: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 625 + 4: + '2025-10-09': 450 +6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 645 + 4: + '2025-10-09': 460 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP propane heating payment + breakdown: + - range(1, 7) + - range(1, 5) + reference: + - title: PY2026 manual, corrected regular heating matrices + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml new file mode 100644 index 00000000000..8c8819ec711 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml @@ -0,0 +1,65 @@ +description: Oregon provides this annual heating payment for wood under the Low Income Home Energy Assistance Program, by household size and income band. +1: + 1: + '2025-10-09': 715 + 2: + '2025-10-09': 560 + 3: + '2025-10-09': 465 + 4: + '2025-10-09': 350 +2: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 655 + 3: + '2025-10-09': 545 + 4: + '2025-10-09': 390 +3: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 695 + 3: + '2025-10-09': 580 + 4: + '2025-10-09': 415 +4: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 725 + 3: + '2025-10-09': 605 + 4: + '2025-10-09': 435 +5: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 625 + 4: + '2025-10-09': 450 +6: + 1: + '2025-10-09': 750 + 2: + '2025-10-09': 750 + 3: + '2025-10-09': 645 + 4: + '2025-10-09': 460 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP wood heating payment + breakdown: + - range(1, 7) + - range(1, 5) + reference: + - title: PY2026 manual, corrected regular heating matrices + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml new file mode 100644 index 00000000000..ca5afa1330c --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml @@ -0,0 +1,88 @@ +# Printed bounds do not follow one reproducible rounding rule. The last band +# extends through the separate eligibility limit, including its $1 discrepancy. +description: Oregon uses these inclusive annual income band upper bounds under the Low Income Home Energy Assistance Program. +1: + 1: + '2025-10-09': 9597 + 2: + '2025-10-09': 12549 + 3: + '2025-10-09': 15502 + 4: + '2025-10-09': 18454 + 5: + '2025-10-09': 21407 + 6: + '2025-10-09': 24360 + 7: + '2025-10-09': 24913 + 8: + '2025-10-09': 25467 + 9: + '2025-10-09': 26020 + 10: + '2025-10-09': 26574 + 11: + '2025-10-09': 27128 + 12: + '2025-10-09': 27681 +2: + 1: + '2025-10-09': 19193 + 2: + '2025-10-09': 25098 + 3: + '2025-10-09': 31003 + 4: + '2025-10-09': 36908 + 5: + '2025-10-09': 42814 + 6: + '2025-10-09': 48719 + 7: + '2025-10-09': 49826 + 8: + '2025-10-09': 50933 + 9: + '2025-10-09': 52040 + 10: + '2025-10-09': 53148 + 11: + '2025-10-09': 54255 + 12: + '2025-10-09': 55362 +3: + 1: + '2025-10-09': 28789 + 2: + '2025-10-09': 37646 + 3: + '2025-10-09': 46504 + 4: + '2025-10-09': 55362 + 5: + '2025-10-09': 64220 + 6: + '2025-10-09': 73078 + 7: + '2025-10-09': 74739 + 8: + '2025-10-09': 76400 + 9: + '2025-10-09': 78060 + 10: + '2025-10-09': 79721 + 11: + '2025-10-09': 81382 + 12: + '2025-10-09': 83043 +metadata: + unit: currency-USD + period: year + label: Oregon LIHEAP annual income band upper bounds + breakdown: + - range(1, 4) + - range(1, 13) + reference: + - title: PY2026 manual, standard payment income bands + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml new file mode 100644 index 00000000000..38794056051 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml @@ -0,0 +1,10 @@ +description: Oregon publishes its standard payment matrix through this household size under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': 12 +metadata: + unit: person + period: year + label: Oregon LIHEAP largest published household size + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml new file mode 100644 index 00000000000..0bb45b4a32f --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml @@ -0,0 +1,10 @@ +description: Oregon uses the same payment amounts for households at or above this size under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': 6 +metadata: + unit: person + period: year + label: Oregon LIHEAP maximum payment size group + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml new file mode 100644 index 00000000000..f4e28ccf3d4 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml @@ -0,0 +1,28 @@ +description: Oregon assigns these counties to payment region 1 under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': + - BENTON_COUNTY_OR + - CLACKAMAS_COUNTY_OR + - CLATSOP_COUNTY_OR + - COLUMBIA_COUNTY_OR + - COOS_COUNTY_OR + - CURRY_COUNTY_OR + - DOUGLAS_COUNTY_OR + - JACKSON_COUNTY_OR + - JOSEPHINE_COUNTY_OR + - LANE_COUNTY_OR + - LINCOLN_COUNTY_OR + - LINN_COUNTY_OR + - MARION_COUNTY_OR + - MULTNOMAH_COUNTY_OR + - POLK_COUNTY_OR + - TILLAMOOK_COUNTY_OR + - WASHINGTON_COUNTY_OR + - YAMHILL_COUNTY_OR +metadata: + unit: list + period: year + label: Oregon LIHEAP region 1 counties + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,80 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml new file mode 100644 index 00000000000..f91b3f9d9e0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml @@ -0,0 +1,28 @@ +description: Oregon assigns these counties to payment region 2 under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': + - BAKER_COUNTY_OR + - CROOK_COUNTY_OR + - DESCHUTES_COUNTY_OR + - GILLIAM_COUNTY_OR + - GRANT_COUNTY_OR + - HARNEY_COUNTY_OR + - HOOD_RIVER_COUNTY_OR + - JEFFERSON_COUNTY_OR + - KLAMATH_COUNTY_OR + - LAKE_COUNTY_OR + - MALHEUR_COUNTY_OR + - MORROW_COUNTY_OR + - SHERMAN_COUNTY_OR + - UMATILLA_COUNTY_OR + - UNION_COUNTY_OR + - WALLOWA_COUNTY_OR + - WASCO_COUNTY_OR + - WHEELER_COUNTY_OR +metadata: + unit: list + period: year + label: Oregon LIHEAP region 2 counties + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,80 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml new file mode 100644 index 00000000000..7ecd2f577a9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml @@ -0,0 +1,10 @@ +description: Oregon pays this share of the standard payment for a separate roomer, boarder or owner application under the Low Income Home Energy Assistance Program. +values: + '2025-10-09': 0.5 +metadata: + unit: /1 + period: year + label: Oregon LIHEAP roomer and boarder payment share + reference: + - title: PY2026 Energy Assistance Intake Operations and Policy Manual + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61,62 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 81c10bc47b6..f7b83d7c51a 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -805,9 +805,13 @@ programs: coverage: OR, DC, Riverside County, MA, IL, TX state_implementations: - state: OR - status: in_progress - name: LIHEAP - full_name: Low Income Home Energy Assistance Program (Oregon) + status: partial + name: Oregon LIHEAP + full_name: Oregon Low Income Home Energy Assistance Program + variable: or_liheap + parameter_prefix: gov.states.or.ohcs.liheap + verified_years: "2026" + notes: Regular heating only; annual income, 60% SMI limit, county matrices, housing and roomer payments. Unknown fuels and counties, sizes above 12, identity exclusions, special income details, discretionary fuel payments and local supplements remain unsupported. Earlier years are unverified backfilled estimates. - state: DC status: complete name: DC LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml new file mode 100644 index 00000000000..b8a464097d8 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml @@ -0,0 +1,12 @@ +- name: Heat responsibility and subsidized heat included in rent + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + or_liheap_countable_income: [0, 0, 0, 0, 0, 0] + has_heating_expense: [false, false, false, true, true, true] + heat_expense_included_in_rent: [false, true, true, false, false, true] + receives_housing_assistance: [false, false, true, true, false, true] + output: + or_liheap_eligible: [false, true, false, true, true, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml new file mode 100644 index 00000000000..efe49aaf0e6 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml @@ -0,0 +1,7 @@ +- name: All twelve published FY2026 annual income limits + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + spm_unit_size: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + output: + or_liheap_income_limit: [38385, 50196, 62006, 73817, 85627, 97438, 99652, 101867, 104081, 106296, 108510, 110725] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml new file mode 100644 index 00000000000..5b2caf0700c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml @@ -0,0 +1,12 @@ +- name: Adult earnings exclude secondary students and do not offset wages with business losses + period: 2026 + input: + state_code: [OR, OR, OR, OR] + age: [17, 18, 19, 40] + is_in_secondary_school: [false, true, false, false] + employment_income: [1000, 2000, 3000, 4000] + self_employment_income: [100, 200, 300, -5000] + sstb_self_employment_income: [0, 0, 400, 500] + farm_operations_income: [0, 0, 500, 600] + output: + or_liheap_countable_earned_income: [0, 0, 4200, 5100] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml new file mode 100644 index 00000000000..68041b678b8 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -0,0 +1,23 @@ +- name: Interest threshold and counted benefits, including child support and Oregon TANF + period: 2026 + input: + state_code: [OR, OR] + or_liheap_countable_earned_income: [0, 0] + interest_income: [200, 201] + dividend_income: [100, 100] + rental_income: [300, 300] + social_security: [1000, 1000] + ssi: [0, 0] + or_tanf: [500, 500] + pension_income: [200, 200] + unemployment_compensation: [150, 150] + child_support_received: [250, 250] + workers_compensation: [100, 100] + disability_benefits: [75, 75] + veterans_benefits: [50, 50] + alimony_income: [25, 25] + strike_benefits: [10, 10] + general_assistance: [0, 0] + estate_income: [0, 0] + output: + or_liheap_countable_income: [2760, 2961] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml new file mode 100644 index 00000000000..c2b48ae666c --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml @@ -0,0 +1,80 @@ +- name: Adult net earnings and child interest count but child wages do not + period: 2026 + input: + people: + adult: + age: 40 + employment_income: 12000 + self_employment_income: 2400 + pension_income: 600 + ssi: 0 + general_assistance: 0 + child: + age: 17 + employment_income: 48000 + interest_income: 201 + ssi: 0 + general_assistance: 0 + spm_units: + unit: + members: + - adult + - child + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 120 + or_tanf: 0 + households: + home: + members: + - adult + - child + state_code: OR + county: DESCHUTES_COUNTY_OR + output: + or_liheap_countable_earned_income: + - 14400 + - 0 + or_liheap_countable_income: 15201 + or_liheap_income_limit: 50196 + or_liheap_region: 2 + or_liheap_income_band: 2 + or_liheap_eligible: true + or_liheap: 505 +- name: Adult secondary-school earnings are excluded for a nonsubsidized heat-in-rent household + period: 2026 + input: + state_code: OR + county: MULTNOMAH_COUNTY_OR + age: 18 + is_in_secondary_school: true + employment_income: 100000 + ssi: 0 + or_tanf: 0 + general_assistance: 0 + heat_expense_included_in_rent: true + heating_type: ELECTRICITY + output: + or_liheap_countable_income: 0 + or_liheap_income_limit: 38385 + or_liheap_income_band: 1 + or_liheap_eligible: true + or_liheap: 465 +- name: Public-housing household paying its own heat can receive a standard grant + period: 2026 + input: + state_code: OR + county: MULTNOMAH_COUNTY_OR + age: 40 + pension_income: 12000 + ssi: 0 + or_tanf: 0 + general_assistance: 0 + is_in_public_housing: true + heating_type: NATURAL_GAS + gas_expense: 100 + output: + or_liheap_countable_income: 12000 + or_liheap_region: 1 + or_liheap_income_band: 2 + or_liheap_eligible: true + or_liheap: 520 diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml new file mode 100644 index 00000000000..82715f6eab4 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -0,0 +1,183 @@ +- name: Published region 1 electricity payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [465, 360, 300, 250, 595, 465, 385, 275, 650, 505, 420, 300, 690, 540, 450, 320, 725, 565, 470, 340, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350] +- name: Published region 1 fuel_oil payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [750, 675, 560, 405, 750, 750, 640, 460, 750, 750, 675, 485, 750, 750, 700, 505, 750, 750, 720, 520, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535] +- name: Published region 1 propane payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [715, 560, 465, 335, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] +- name: Published region 1 natural_gas payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [670, 520, 435, 310, 750, 605, 505, 360, 750, 640, 535, 385, 750, 670, 555, 400, 750, 690, 575, 415, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425] +- name: Published region 1 wood payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [715, 560, 465, 350, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] +- name: Published region 2 electricity payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [515, 400, 335, 250, 645, 505, 420, 300, 700, 545, 455, 325, 740, 580, 480, 345, 750, 605, 505, 360, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375] +- name: Published region 2 fuel_oil payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [750, 675, 560, 405, 750, 750, 640, 460, 750, 750, 675, 485, 750, 750, 700, 505, 750, 750, 720, 520, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535] +- name: Published region 2 propane payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [715, 560, 465, 335, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] +- name: Published region 2 natural_gas payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [560, 435, 365, 260, 670, 520, 435, 310, 715, 555, 465, 335, 750, 585, 485, 350, 750, 605, 505, 365, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375] +- name: Published region 2 wood payments for every size and band + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] + heating_type: [WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + output: + or_liheap: [715, 560, 465, 350, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] +- name: The published income limit includes the dollar above the last matrix band + period: 2026 + input: + state_code: [OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [2, 2, 2] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY] + has_heating_expense: [true, true, true] + or_liheap_countable_income: [50195, 50196, 50197] + output: + or_liheap: [275, 275, 0] +- name: Income bands include their printed tops and then change + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + has_heating_expense: [true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 9597, 9598, 19193, 19194, 28789, 28790] + output: + or_liheap: [670, 670, 520, 520, 435, 435, 310] +- name: Supported and unsupported heating fuels + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true] + or_liheap_countable_income: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + heating_type: [ELECTRICITY, FUEL_OIL, PROPANE, NATURAL_GAS, WOOD, KEROSENE, COAL, SOLAR, OTHER, UNSPECIFIED, NONE] + output: + or_liheap: [515, 750, 715, 560, 715, 0, 0, 0, 0, 0, 0] +- name: A separate roomer or boarder application receives half the regular payment + period: 2026 + input: + state_code: OR + county: MULTNOMAH_COUNTY_OR + heating_type: ELECTRICITY + heat_expense_included_in_rent: true + or_liheap_countable_income: 0 + or_liheap_dwelling_type: ROOMER_BOARDER_OWNER + output: + or_liheap: 232.5 +- name: Unknown county and sizes above the published matrix are unsupported + period: 2026 + input: + state_code: [OR, OR] + county: [UNKNOWN, MULTNOMAH_COUNTY_OR] + spm_unit_size: [1, 13] + heating_type: [ELECTRICITY, ELECTRICITY] + has_heating_expense: [true, true] + or_liheap_countable_income: [0, 0] + output: + or_liheap: [0, 0] +- name: No expense cap applies to a standard payment + period: 2026 + input: + state_code: OR + county: MULTNOMAH_COUNTY_OR + heating_type: NATURAL_GAS + gas_expense: 1 + or_liheap_countable_income: 0 + output: + or_liheap: 670 +- name: Other states receive no Oregon benefit + period: 2026 + input: + state_code: WA + county: MULTNOMAH_COUNTY_OR + heating_type: NATURAL_GAS + has_heating_expense: true + or_liheap_countable_income: 0 + output: + or_liheap: 0 diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py new file mode 100644 index 00000000000..93e880a3c2c --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py @@ -0,0 +1,27 @@ +from policyengine_us.model_api import * + + +class or_liheap_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP regular heating eligibility" + defined_for = StateCode.OR + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=11,30,36,61,77,93,94" + documentation = "SPM members approximate the economic household, with identity and SSN verification assumed complete. The Oregon sources do not prescribe a SNAP immigration test. No asset or categorical income test applies. Institutional residence, tribal duplicate awards, documentation and application timing are not modeled. A zero benefit above size 12 or for unknown county denotes unsupported schedule coverage, not a legal denial." + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.payment + heat_in_rent = spm_unit("heat_expense_included_in_rent", period) + subsidized = spm_unit( + "receives_housing_assistance", period + ) | spm_unit.household("is_in_public_housing", period) + heating_cost = spm_unit("has_heating_expense", period) | heat_in_rent + income = spm_unit("or_liheap_countable_income", period) + return ( + heating_cost + & ~(heat_in_rent & subsidized) + & (income <= spm_unit("or_liheap_income_limit", period)) + & (spm_unit("or_liheap_region", period) > 0) + & (spm_unit("spm_unit_size", period) <= p.max_household_size) + ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py new file mode 100644 index 00000000000..e837764b3b7 --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class or_liheap_income_limit(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP income limit" + unit = USD + defined_for = StateCode.OR + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.eligibility + # Ceiling reproduces all 12 published limits; the manual does not + # prescribe a rounding rule. hhs_smi uses the requested year's SMI. + return np.ceil(spm_unit("hhs_smi", period) * p.smi_rate) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py new file mode 100644 index 00000000000..34a48863da5 --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class or_liheap_countable_earned_income(Variable): + value_type = float + entity = Person + definition_period = YEAR + label = "Oregon LIHEAP countable earned income" + unit = USD + defined_for = StateCode.OR + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,41,45,53" + documentation = "Existing net self-employment inputs are used without an additional expense deduction. Flooring each source at zero is a modeling convention; the manual does not specify current-period loss offsets." + + def formula(person, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.income + earned = 0 + for source in p.sources.earned: + earned = earned + max_(person(source, period), 0) + counted = (person("age", period) >= p.earned_income_min_age) & ~person( + "is_in_secondary_school", period + ) + return where(counted, earned, 0) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py new file mode 100644 index 00000000000..99855b9bef3 --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py @@ -0,0 +1,25 @@ +from policyengine_us.model_api import * + + +class or_liheap_countable_income(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP countable household income" + unit = USD + defined_for = StateCode.OR + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53" + documentation = "Annual income approximates the allowed one-, three- or twelve-month observation window. Interest is assumed withdrawn. Unsupported details include regular gifts, foster and adoption payments, tribal receipts, work-study, private-disability Social Security offsets and caregiver payments within the household. Military wages should be included in employment_income. Use a direct countable-income override when these details matter." + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.income + person = spm_unit.members + interest = person("interest_income", period) + counted_interest = spm_unit.sum( + where(interest > p.interest_threshold, interest, 0) + ) + return ( + add(spm_unit, period, ["or_liheap_countable_earned_income"]) + + add(spm_unit, period, p.sources.unearned) + + counted_interest + ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py new file mode 100644 index 00000000000..c78dbbfe48e --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py @@ -0,0 +1,41 @@ +from policyengine_us.model_api import * + + +class or_liheap(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP regular heating benefit" + unit = USD + defined_for = "or_liheap_eligible" + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61,62,67,78,79,80,81,93,94" + documentation = "Annual regular heating assistance, verified for FY2026. Earlier years use parameter backfilling and are unverified historical estimates. No actual-expense cap applies. Heat-in-rent households need the building heating fuel. Discretionary bulk-fuel minimum-delivery payments and local supplements are unsupported because the necessary award information is absent. Cooling, crisis and equipment assistance are excluded." + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.payment + region = max_(spm_unit("or_liheap_region", period), 1) + size = clip(spm_unit("spm_unit_size", period), 1, p.max_payment_size) + band = spm_unit("or_liheap_income_band", period) + fuel = spm_unit("heating_type", period) + types = fuel.possible_values + amount = select( + [ + fuel == types.ELECTRICITY, + fuel == types.FUEL_OIL, + fuel == types.PROPANE, + fuel == types.NATURAL_GAS, + fuel == types.WOOD, + ], + [ + p.amount.electricity[region][size][band], + p.amount.fuel_oil[size][band], + p.amount.propane[size][band], + p.amount.natural_gas[region][size][band], + p.amount.wood[size][band], + ], + # No published column for unspecified, other, coal, kerosene or solar. + default=0, + ) + dwelling = spm_unit("or_liheap_dwelling_type", period) + separate = dwelling == dwelling.possible_values.ROOMER_BOARDER_OWNER + return amount * where(separate, p.roomer_rate, 1) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py new file mode 100644 index 00000000000..32560181a1c --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py @@ -0,0 +1,19 @@ +from policyengine_us.model_api import * + + +class ORLIHEAPDwellingType(Enum): + STANDARD = "Standard household" + ROOMER_BOARDER_OWNER = ( + "Roomer, boarder or owner applying separately from other residents" + ) + + +class or_liheap_dwelling_type(Variable): + value_type = Enum + possible_values = ORLIHEAPDwellingType + default_value = ORLIHEAPDwellingType.STANDARD + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP dwelling arrangement" + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=30,61,62" + documentation = "The half-payment arrangement applies when a roomer, boarder or owner applies as a separate economic household and the other residents do not apply together. It is not a reduction for all renters." diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py new file mode 100644 index 00000000000..36434705d51 --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py @@ -0,0 +1,22 @@ +from policyengine_us.model_api import * + + +class or_liheap_income_band(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP payment income band" + defined_for = StateCode.OR + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81" + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.payment + size = clip(spm_unit("spm_unit_size", period), 1, p.max_household_size) + income = spm_unit("or_liheap_countable_income", period) + # Keep the printed inclusive tops, including their $1 irregularities. + return ( + 1 + + (income > p.income_band["1"][size]) + + (income > p.income_band["2"][size]) + + (income > p.income_band["3"][size]) + ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py new file mode 100644 index 00000000000..548d74bda69 --- /dev/null +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class or_liheap_region(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "Oregon LIHEAP payment region" + defined_for = StateCode.OR + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,80" + documentation = "Zero denotes an unknown or out-of-state county; a county is required to select the published schedule." + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states["or"].ohcs.liheap.payment.regions + county = spm_unit.household("county_str", period) + return select( + [np.isin(county, p.region_1), np.isin(county, p.region_2)], + [1, 2], + default=0, + ) From 05a27a19df5d83d61e19c6d7854dba5a0bd6e7c5 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 1 Oct 2026 16:24:39 -0400 Subject: [PATCH 02/10] Make Oregon heating test inputs explicit and count railroad income --- .../gov/states/or/ohcs/liheap/income/sources/unearned.yaml | 1 + .../or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml | 1 + .../ohcs/liheap/income/or_liheap_countable_earned_income.yaml | 1 + .../or/ohcs/liheap/income/or_liheap_countable_income.yaml | 4 +++- 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index 89dad0a35de..605b46c622f 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -3,6 +3,7 @@ values: '2025-10-09': - rental_income - social_security + - railroad_benefits - ssi - or_tanf - unemployment_compensation diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml index efe49aaf0e6..ae0504c7ae8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml @@ -1,6 +1,7 @@ - name: All twelve published FY2026 annual income limits period: 2026 input: + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] spm_unit_size: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] output: diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml index 5b2caf0700c..d5d1add0a2b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml @@ -1,6 +1,7 @@ - name: Adult earnings exclude secondary students and do not offset wages with business losses period: 2026 input: + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] state_code: [OR, OR, OR, OR] age: [17, 18, 19, 40] is_in_secondary_school: [false, true, false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml index 68041b678b8..763e2063b68 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -1,12 +1,14 @@ - name: Interest threshold and counted benefits, including child support and Oregon TANF period: 2026 input: + heating_type: [NATURAL_GAS, NATURAL_GAS] state_code: [OR, OR] or_liheap_countable_earned_income: [0, 0] interest_income: [200, 201] dividend_income: [100, 100] rental_income: [300, 300] social_security: [1000, 1000] + railroad_benefits: [120, 120] ssi: [0, 0] or_tanf: [500, 500] pension_income: [200, 200] @@ -20,4 +22,4 @@ general_assistance: [0, 0] estate_income: [0, 0] output: - or_liheap_countable_income: [2760, 2961] + or_liheap_countable_income: [2880, 3081] From cba36efc37fd11a296b99092bae85cd6b275f705 Mon Sep 17 00:00:00 2001 From: Ziming Date: Fri, 2 Oct 2026 12:14:52 -0400 Subject: [PATCH 03/10] Clarify Oregon LIHEAP disability income and verify manual examples --- .../liheap/income/or_liheap_countable_income.yaml | 14 ++++++++++++++ .../liheap/income/or_liheap_countable_income.py | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml index 763e2063b68..ea931f30852 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -23,3 +23,17 @@ estate_income: [0, 0] output: or_liheap_countable_income: [2880, 3081] +- name: Manual disability insurance examples count the insurer payment plus Social Security once + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [OR, OR] + heating_type: [NATURAL_GAS, NATURAL_GAS] + or_liheap_countable_earned_income: [0, 0] + # Manual pages 55-56: annualize the insurer's payment after its SSA offset. + disability_benefits: [3832.68, 8511.96] + social_security: [10164, 14868] + ssi: [0, 0] + or_tanf: [0, 0] + output: + or_liheap_countable_income: [13996.68, 23379.96] diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py index 99855b9bef3..a0048d37986 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py @@ -8,8 +8,8 @@ class or_liheap_countable_income(Variable): label = "Oregon LIHEAP countable household income" unit = USD defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53" - documentation = "Annual income approximates the allowed one-, three- or twelve-month observation window. Interest is assumed withdrawn. Unsupported details include regular gifts, foster and adoption payments, tribal receipts, work-study, private-disability Social Security offsets and caregiver payments within the household. Military wages should be included in employment_income. Use a direct countable-income override when these details matter." + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56" + documentation = "Annual income approximates the allowed one-, three- or twelve-month observation window. Interest is assumed withdrawn. Enter disability_benefits as the private insurer's payment after any Social Security offset; Social Security is counted separately, reproducing the manual's examples without deducting the offset twice. Unsupported details include regular gifts, foster and adoption payments, tribal receipts, work-study and caregiver payments within the household. Military wages should be included in employment_income. Use a direct countable-income override when these details matter." def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.income From f7b04fa1b04ff1395795e620e43c77cfa2db7fec Mon Sep 17 00:00:00 2001 From: Ziming Date: Fri, 2 Oct 2026 12:56:43 -0400 Subject: [PATCH 04/10] Align Oregon LIHEAP income receipt and payment coverage --- .../liheap/income/earned_income_min_age.yaml | 4 ++-- .../or/ohcs/liheap/income/sources/earned.yaml | 4 ++-- .../ohcs/liheap/income/sources/unearned.yaml | 8 ++++---- .../liheap/payment/amount/electricity.yaml | 4 ++-- .../ohcs/liheap/payment/amount/fuel_oil.yaml | 4 ++-- .../liheap/payment/amount/natural_gas.yaml | 4 ++-- .../or/ohcs/liheap/payment/amount/propane.yaml | 4 ++-- .../or/ohcs/liheap/payment/amount/wood.yaml | 4 ++-- .../or/ohcs/liheap/payment/income_band.yaml | 4 ++-- .../liheap/payment/max_household_size.yaml | 4 ++-- .../ohcs/liheap/payment/max_payment_size.yaml | 4 ++-- .../ohcs/liheap/payment/regions/region_1.yaml | 4 ++-- .../ohcs/liheap/payment/regions/region_2.yaml | 4 ++-- .../or/ohcs/liheap/payment/roomer_rate.yaml | 4 ++-- policyengine_us/programs.yaml | 2 +- .../income/or_liheap_countable_income.yaml | 18 +++++++++++++++--- .../gov/states/or/ohcs/liheap/integration.yaml | 6 +++--- .../gov/states/or/ohcs/liheap/or_liheap.yaml | 1 + .../liheap/eligibility/or_liheap_eligible.py | 6 ++---- .../or_liheap_countable_earned_income.py | 3 ++- .../income/or_liheap_countable_income.py | 4 +++- .../gov/states/or/ohcs/liheap/or_liheap.py | 10 ++++++++-- .../or/ohcs/liheap/or_liheap_dwelling_type.py | 3 ++- .../liheap/payment/or_liheap_income_band.py | 3 ++- .../or/ohcs/liheap/payment/or_liheap_region.py | 3 ++- 25 files changed, 71 insertions(+), 48 deletions(-) diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml index 933f9e5a757..e4514c9ac43 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml @@ -6,5 +6,5 @@ metadata: period: year label: Oregon LIHEAP minimum age for counted earnings reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41,53 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 41, 53 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml index 4e1d867148c..7fbe2ed115a 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml @@ -10,5 +10,5 @@ metadata: period: year label: Oregon LIHEAP earned income sources reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,41,45,53 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 35, 41, 45, 53 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index 605b46c622f..729d47970aa 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -5,7 +5,7 @@ values: - social_security - railroad_benefits - ssi - - or_tanf + - tanf - unemployment_compensation - workers_compensation - veterans_benefits @@ -13,7 +13,7 @@ values: - disability_benefits - alimony_income - child_support_received - - dividend_income + - ordinary_dividend_income - strike_benefits - general_assistance - estate_income @@ -22,5 +22,5 @@ metadata: period: year label: Oregon LIHEAP unearned income sources reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=37 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml index ff9897e21ee..20c79ab3f8e 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml @@ -118,5 +118,5 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml index eded817e536..2d11c57782c 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml @@ -61,5 +61,5 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml index d246e4dafaf..cfed8ecc7ab 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml @@ -118,5 +118,5 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml index ae85e6d05be..37d8bf4333c 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml @@ -61,5 +61,5 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml index 8c8819ec711..585b8fc7e2d 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml @@ -61,5 +61,5 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml index ca5afa1330c..708703a7700 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml @@ -84,5 +84,5 @@ metadata: - range(1, 4) - range(1, 13) reference: - - title: PY2026 manual, standard payment income bands - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 manual, standard payment income bands, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml index 38794056051..74da9b51317 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml @@ -6,5 +6,5 @@ metadata: period: year label: Oregon LIHEAP largest published household size reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml index 0bb45b4a32f..85e510ec28f 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml @@ -6,5 +6,5 @@ metadata: period: year label: Oregon LIHEAP maximum payment size group reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 79, 80, 81 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml index f4e28ccf3d4..7bc3274a369 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml @@ -24,5 +24,5 @@ metadata: period: year label: Oregon LIHEAP region 1 counties reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,80 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 80 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml index f91b3f9d9e0..2b18d6b82a7 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml @@ -24,5 +24,5 @@ metadata: period: year label: Oregon LIHEAP region 2 counties reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,80 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 80 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml index 7ecd2f577a9..8f300db2e0b 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml @@ -6,5 +6,5 @@ metadata: period: year label: Oregon LIHEAP roomer and boarder payment share reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61,62 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 61, 62 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index f7b83d7c51a..b34c703f33f 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -811,7 +811,7 @@ programs: variable: or_liheap parameter_prefix: gov.states.or.ohcs.liheap verified_years: "2026" - notes: Regular heating only; annual income, 60% SMI limit, county matrices, housing and roomer payments. Unknown fuels and counties, sizes above 12, identity exclusions, special income details, discretionary fuel payments and local supplements remain unsupported. Earlier years are unverified backfilled estimates. + notes: Regular heating income, county/fuel schedules and housing treatment. Some income, residence and discretionary-payment rules remain partial; earlier years are unverified estimates. - state: DC status: complete name: DC LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml index ea931f30852..e0654dfe570 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -5,12 +5,12 @@ state_code: [OR, OR] or_liheap_countable_earned_income: [0, 0] interest_income: [200, 201] - dividend_income: [100, 100] + ordinary_dividend_income: [100, 100] rental_income: [300, 300] social_security: [1000, 1000] railroad_benefits: [120, 120] ssi: [0, 0] - or_tanf: [500, 500] + tanf: [500, 500] pension_income: [200, 200] unemployment_compensation: [150, 150] child_support_received: [250, 250] @@ -34,6 +34,18 @@ disability_benefits: [3832.68, 8511.96] social_security: [10164, 14868] ssi: [0, 0] - or_tanf: [0, 0] + tanf: [0, 0] output: or_liheap_countable_income: [13996.68, 23379.96] + +- name: State cash entitlement counts only when TANF is taken up + period: 2026 + input: + state_code: [OR, OR] + heating_type: [NATURAL_GAS, NATURAL_GAS] + age: [40, 40] + or_tanf: [1200, 1200] + takes_up_tanf_if_eligible: [false, true] + ssi: [0, 0] + output: + or_liheap_countable_income: [0, 1200] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml index c2b48ae666c..3a46a33d75b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml @@ -22,7 +22,7 @@ - child heating_type: ELECTRICITY pre_subsidy_electricity_expense: 120 - or_tanf: 0 + tanf: 0 households: home: members: @@ -49,7 +49,7 @@ is_in_secondary_school: true employment_income: 100000 ssi: 0 - or_tanf: 0 + tanf: 0 general_assistance: 0 heat_expense_included_in_rent: true heating_type: ELECTRICITY @@ -67,7 +67,7 @@ age: 40 pension_income: 12000 ssi: 0 - or_tanf: 0 + tanf: 0 general_assistance: 0 is_in_public_housing: true heating_type: NATURAL_GAS diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml index 82715f6eab4..7f65d51c67c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -160,6 +160,7 @@ has_heating_expense: [true, true] or_liheap_countable_income: [0, 0] output: + or_liheap_eligible: [true, true] or_liheap: [0, 0] - name: No expense cap applies to a standard payment period: 2026 diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py index 93e880a3c2c..0e1d283e012 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py @@ -7,11 +7,11 @@ class or_liheap_eligible(Variable): definition_period = YEAR label = "Oregon LIHEAP regular heating eligibility" defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=11,30,36,61,77,93,94" + # PDF pages 11, 30, 36, 61, 77, 93, 94. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=11" documentation = "SPM members approximate the economic household, with identity and SSN verification assumed complete. The Oregon sources do not prescribe a SNAP immigration test. No asset or categorical income test applies. Institutional residence, tribal duplicate awards, documentation and application timing are not modeled. A zero benefit above size 12 or for unknown county denotes unsupported schedule coverage, not a legal denial." def formula(spm_unit, period, parameters): - p = parameters(period).gov.states["or"].ohcs.liheap.payment heat_in_rent = spm_unit("heat_expense_included_in_rent", period) subsidized = spm_unit( "receives_housing_assistance", period @@ -22,6 +22,4 @@ def formula(spm_unit, period, parameters): heating_cost & ~(heat_in_rent & subsidized) & (income <= spm_unit("or_liheap_income_limit", period)) - & (spm_unit("or_liheap_region", period) > 0) - & (spm_unit("spm_unit_size", period) <= p.max_household_size) ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py index 34a48863da5..81e15975e2e 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py @@ -8,7 +8,8 @@ class or_liheap_countable_earned_income(Variable): label = "Oregon LIHEAP countable earned income" unit = USD defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,41,45,53" + # PDF pages 35, 41, 45, 53. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35" documentation = "Existing net self-employment inputs are used without an additional expense deduction. Flooring each source at zero is a modeling convention; the manual does not specify current-period loss offsets." def formula(person, period, parameters): diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py index a0048d37986..165193a7246 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py @@ -8,7 +8,8 @@ class or_liheap_countable_income(Variable): label = "Oregon LIHEAP countable household income" unit = USD defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56" + # PDF pages 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35" documentation = "Annual income approximates the allowed one-, three- or twelve-month observation window. Interest is assumed withdrawn. Enter disability_benefits as the private insurer's payment after any Social Security offset; Social Security is counted separately, reproducing the manual's examples without deducting the offset twice. Unsupported details include regular gifts, foster and adoption payments, tribal receipts, work-study and caregiver payments within the household. Military wages should be included in employment_income. Use a direct countable-income override when these details matter." def formula(spm_unit, period, parameters): @@ -18,6 +19,7 @@ def formula(spm_unit, period, parameters): counted_interest = spm_unit.sum( where(interest > p.interest_threshold, interest, 0) ) + # The TANF source counts receipt after take-up, not or_tanf entitlement. return ( add(spm_unit, period, ["or_liheap_countable_earned_income"]) + add(spm_unit, period, p.sources.unearned) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py index c78dbbfe48e..96e3bbabdbb 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py @@ -8,7 +8,8 @@ class or_liheap(Variable): label = "Oregon LIHEAP regular heating benefit" unit = USD defined_for = "or_liheap_eligible" - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61,62,67,78,79,80,81,93,94" + # PDF pages 61, 62, 67, 78, 79, 80, 81, 93, 94. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61" documentation = "Annual regular heating assistance, verified for FY2026. Earlier years use parameter backfilling and are unverified historical estimates. No actual-expense cap applies. Heat-in-rent households need the building heating fuel. Discretionary bulk-fuel minimum-delivery payments and local supplements are unsupported because the necessary award information is absent. Cooling, crisis and equipment assistance are excluded." def formula(spm_unit, period, parameters): @@ -38,4 +39,9 @@ def formula(spm_unit, period, parameters): ) dwelling = spm_unit("or_liheap_dwelling_type", period) separate = dwelling == dwelling.possible_values.ROOMER_BOARDER_OWNER - return amount * where(separate, p.roomer_rate, 1) + # Missing payment-table dimensions are coverage gaps, not eligibility + # restrictions. Keep them separate from the legal income/housing test. + supported = (spm_unit("or_liheap_region", period) > 0) & ( + spm_unit("spm_unit_size", period) <= p.max_household_size + ) + return where(supported, amount * where(separate, p.roomer_rate, 1), 0) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py index 32560181a1c..dd585b024fe 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py @@ -15,5 +15,6 @@ class or_liheap_dwelling_type(Variable): entity = SPMUnit definition_period = YEAR label = "Oregon LIHEAP dwelling arrangement" - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=30,61,62" + # PDF pages 30, 61, 62. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=30" documentation = "The half-payment arrangement applies when a roomer, boarder or owner applies as a separate economic household and the other residents do not apply together. It is not a reduction for all renters." diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py index 36434705d51..210dbb2bf71 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py @@ -7,7 +7,8 @@ class or_liheap_income_band(Variable): definition_period = YEAR label = "Oregon LIHEAP payment income band" defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,79,80,81" + # PDF pages 78, 79, 80, 81. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78" def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.payment diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py index 548d74bda69..1e499ac6f27 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py @@ -7,7 +7,8 @@ class or_liheap_region(Variable): definition_period = YEAR label = "Oregon LIHEAP payment region" defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78,80" + # PDF pages 78, 80. + reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78" documentation = "Zero denotes an unknown or out-of-state county; a county is required to select the published schedule." def formula(spm_unit, period, parameters): From c534283817c2b2524d9215a8ea7eb02824b50e97 Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 3 Oct 2026 01:52:25 -0400 Subject: [PATCH 05/10] Fix issues from review: floor the income band, registry order, realistic tests Floor the income band before the payment-table lookup so units outside Oregon index a valid key in mixed-state simulations, and add a two-state case. Place Oregon between IL and TX in programs.yaml. Give the integration cases plausible wages and heating bills with derivations from the PY2026 manual. Co-Authored-By: Claude Fable 5.1 --- policyengine_us/programs.yaml | 18 +++--- .../states/or/ohcs/liheap/integration.yaml | 63 +++++++++++++++---- .../gov/states/or/ohcs/liheap/or_liheap.yaml | 49 +++++++++++++++ .../gov/states/or/ohcs/liheap/or_liheap.py | 3 +- 4 files changed, 111 insertions(+), 22 deletions(-) diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index b34c703f33f..f5726a67dce 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -802,16 +802,8 @@ programs: category: Benefits agency: HHS status: partial - coverage: OR, DC, Riverside County, MA, IL, TX + coverage: DC, Riverside County, MA, IL, OR, TX state_implementations: - - state: OR - status: partial - name: Oregon LIHEAP - full_name: Oregon Low Income Home Energy Assistance Program - variable: or_liheap - parameter_prefix: gov.states.or.ohcs.liheap - verified_years: "2026" - notes: Regular heating income, county/fuel schedules and housing treatment. Some income, residence and discretionary-payment rules remain partial; earlier years are unverified estimates. - state: DC status: complete name: DC LIHEAP @@ -827,6 +819,14 @@ programs: name: Illinois LIHEAP full_name: Illinois Low Income Home Energy Assistance Program variable: il_liheap + - state: OR + status: partial + name: Oregon LIHEAP + full_name: Oregon Low Income Home Energy Assistance Program + variable: or_liheap + parameter_prefix: gov.states.or.ohcs.liheap + verified_years: "2026" + notes: Regular heating income, county/fuel schedules and housing treatment. Some income, residence and discretionary-payment rules remain partial; earlier years are unverified estimates. - state: TX status: partial name: Texas CEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml index 3a46a33d75b..9adbf1a3f52 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml @@ -1,17 +1,23 @@ +# Page numbers in the comments are those of the PY2026 Energy Assistance Intake, +# Operations and Policy Manual (income limits on page 77, Region 1 matrix on +# pages 78-79, Region 2 matrix on pages 80-81): +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 - name: Adult net earnings and child interest count but child wages do not period: 2026 input: people: adult: age: 40 - employment_income: 12000 - self_employment_income: 2400 + employment_income: 12_000 + self_employment_income: 2_400 pension_income: 600 ssi: 0 general_assistance: 0 child: age: 17 - employment_income: 48000 + # About 15 hours a week near the standard minimum wage that applies in + # Deschutes County ($15.55 an hour from July 2026). + employment_income: 12_100 interest_income: 201 ssi: 0 general_assistance: 0 @@ -21,7 +27,8 @@ - adult - child heating_type: ELECTRICITY - pre_subsidy_electricity_expense: 120 + # About $150 a month for an electrically heated home. + pre_subsidy_electricity_expense: 1_800 tanf: 0 households: home: @@ -31,14 +38,26 @@ state_code: OR county: DESCHUTES_COUNTY_OR output: + # Adult: wages 12,000 (page 39) + net self-employment 2,400 (pages 35 + # and 45) = 14,400. + # Child: income earned by members under 18 is not counted (pages 41 + # and 53), so the 12,100 of wages counts as 0. or_liheap_countable_earned_income: - - 14400 + - 14_400 - 0 - or_liheap_countable_income: 15201 - or_liheap_income_limit: 50196 + # 14,400 + pension 600 (page 44) + interest 201, counted because it is + # over $200 a year (pages 43 and 50) = 15,201. + or_liheap_countable_income: 15_201 + # 60% of state median income, size 2: $50,196 (page 77). + or_liheap_income_limit: 50_196 + # Deschutes County is in the Region 2 list (page 80). or_liheap_region: 2 + # Size 2, second row "$12,550 $25,098" (page 80). Counting the child's + # wages would give 27,301 and the third row instead. or_liheap_income_band: 2 + # Pays its own electric heating bill and 15,201 is within $50,196. or_liheap_eligible: true + # Region 2, size 2, "$12,550 $25,098", Electricity $505 (page 80). or_liheap: 505 - name: Adult secondary-school earnings are excluded for a nonsubsidized heat-in-rent household period: 2026 @@ -47,17 +66,28 @@ county: MULTNOMAH_COUNTY_OR age: 18 is_in_secondary_school: true - employment_income: 100000 + # About 15 hours a week near the Portland-metro minimum wage ($16.80 an + # hour from July 2026). + employment_income: 13_100 ssi: 0 tanf: 0 general_assistance: 0 heat_expense_included_in_rent: true heating_type: ELECTRICITY output: + # Income earned by a member aged 18 or over who is enrolled in high + # school is not counted (pages 41 and 53); there is no other income. or_liheap_countable_income: 0 - or_liheap_income_limit: 38385 + # 60% of state median income, size 1: $38,385 (page 77). + or_liheap_income_limit: 38_385 + # Size 1, first row "$0 $9,597" (page 78). Counting the 13,100 of wages + # would give the second row instead. or_liheap_income_band: 1 + # Energy costs included in rent in non-subsidized housing are eligible + # (page 93) and 0 is within $38,385. or_liheap_eligible: true + # Region 1 (Multnomah, page 78), size 1, "$0 $9,597", Electricity $465 + # (page 78). or_liheap: 465 - name: Public-housing household paying its own heat can receive a standard grant period: 2026 @@ -65,16 +95,25 @@ state_code: OR county: MULTNOMAH_COUNTY_OR age: 40 - pension_income: 12000 + pension_income: 12_000 ssi: 0 tanf: 0 general_assistance: 0 is_in_public_housing: true heating_type: NATURAL_GAS - gas_expense: 100 + # About $80 a month for gas heat. + gas_expense: 960 output: - or_liheap_countable_income: 12000 + # Pension 12,000 is counted (page 44); there is no other income. + or_liheap_countable_income: 12_000 + # Multnomah County is in the Region 1 list (page 78). or_liheap_region: 1 + # Size 1, second row "$9,598 $19,193" (page 78). or_liheap_income_band: 2 + # A subsidized-housing resident who pays a vendor directly for utilities + # is eligible (page 93); only subsidized housing with heat included in + # rent is excluded (page 61). 12,000 is within the size 1 limit of + # $38,385 (page 77). or_liheap_eligible: true + # Region 1, size 1, "$9,598 $19,193", Natural Gas $520 (page 78). or_liheap: 520 diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml index 7f65d51c67c..b8446c50edd 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -182,3 +182,52 @@ or_liheap_countable_income: 0 output: or_liheap: 0 +- name: One simulation with an Oregon household and a Washington household pays only the Oregon household + period: 2026 + input: + people: + person1: + age: 30 + # Full-time work near the Portland-metro minimum wage ($16.80 an hour from July 2026). + employment_income: 34_500 + ssi: 0 + person2: + age: 45 + employment_income: 30_000 + ssi: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: NATURAL_GAS + # About $80 a month for gas heat. + gas_expense: 960 + tanf: 0 + spm_unit2: + members: [person2] + heating_type: ELECTRICITY + # About $125 a month for electric heat. + pre_subsidy_electricity_expense: 1_500 + tanf: 0 + households: + household1: + members: [person1] + state_code: OR + county: MULTNOMAH_COUNTY_OR + household2: + members: [person2] + state_code: WA + output: + # Page numbers are those of the PY2026 Energy Assistance Intake, Operations + # and Policy Manual. + # Unit 1: wages are the only income and earned income is counted (page 39). + # Unit 2 is outside Oregon, so every Oregon variable keeps its default. + or_liheap_countable_income: [34_500, 0] + # Unit 1: size 1, fourth row "$28,790 $38,385" (page 78). + # Unit 2: default 0, which the payment lookup must tolerate. + or_liheap_income_band: [4, 0] + # Unit 1: pays a gas bill and 34,500 is within the size 1 limit of + # $38,385 (page 77). Unit 2: not an Oregon household. + or_liheap_eligible: [true, false] + # Unit 1: Region 1 (Multnomah, page 78), size 1, "$28,790 $38,385", + # Natural Gas $310 (page 78). Unit 2: no Oregon benefit. + or_liheap: [310, 0] diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py index 96e3bbabdbb..5fdd35150a2 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py @@ -16,7 +16,8 @@ def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.payment region = max_(spm_unit("or_liheap_region", period), 1) size = clip(spm_unit("spm_unit_size", period), 1, p.max_payment_size) - band = spm_unit("or_liheap_income_band", period) + # Out-of-state units carry band 0; the floor keeps them on a valid key. + band = max_(spm_unit("or_liheap_income_band", period), 1) fuel = spm_unit("heating_type", period) types = fuel.possible_values amount = select( From 6c8020e7dad285c6d84dc9bb97922a3c36c1c4d7 Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 3 Oct 2026 17:28:43 -0400 Subject: [PATCH 06/10] Count farm rent and survivor income in Oregon LIHEAP --- .../ohcs/liheap/income/sources/unearned.yaml | 2 + .../gov/states/or/ohcs/liheap/or_liheap.yaml | 47 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index 729d47970aa..f8ab0510fc9 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -2,6 +2,7 @@ description: Oregon counts these unearned income sources under the Low Income Ho values: '2025-10-09': - rental_income + - farm_rent_income - social_security - railroad_benefits - ssi @@ -10,6 +11,7 @@ values: - workers_compensation - veterans_benefits - pension_income + - survivor_benefits - disability_benefits - alimony_income - child_support_received diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml index b8446c50edd..298c20555cd 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -231,3 +231,50 @@ # Unit 1: Region 1 (Multnomah, page 78), size 1, "$28,790 $38,385", # Natural Gas $310 (page 78). Unit 2: no Oregon benefit. or_liheap: [310, 0] + +# PY2026 manual, page 44: rental-property income and pensions paid to surviving +# dependents count separately from wages. Page 77 gives the $38,385 size-one limit. +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=44 +- name: Case 19, farm rental income puts a gas-heating household over the income limit. + period: 2026 + input: + state_code: OR + county: MULTNOMAH_COUNTY_OR + age: 45 + immigration_status: CITIZEN + employment_income: 30_000 + farm_rent_income: 10_000 + rental_income: 0 + ssi: 0 + tanf: 0 + snap: 0 + heating_type: NATURAL_GAS + gas_expense: 1_200 + output: + # $30,000 wages + $10,000 farm rents exceeds $38,385. + or_liheap_countable_income: 40_000 + or_liheap_income_limit: 38_385 + or_liheap_eligible: false + or_liheap: 0 + +- name: Case 20, survivor pension income puts a gas-heating household over the income limit. + period: 2026 + input: + state_code: OR + county: MULTNOMAH_COUNTY_OR + age: 45 + immigration_status: CITIZEN + employment_income: 30_000 + survivor_benefits: 10_000 + pension_income: 0 + ssi: 0 + tanf: 0 + snap: 0 + heating_type: NATURAL_GAS + gas_expense: 1_200 + output: + # $30,000 wages + $10,000 survivor pension exceeds $38,385. + or_liheap_countable_income: 40_000 + or_liheap_income_limit: 38_385 + or_liheap_eligible: false + or_liheap: 0 From 5a40a829ccf3969cd566c71f27e6d6041d4d193d Mon Sep 17 00:00:00 2001 From: Ziming Date: Mon, 5 Oct 2026 23:09:39 -0400 Subject: [PATCH 07/10] Tidy Oregon LIHEAP parameters and tests Write parameter date keys unquoted, wrap each variable's documentation string across lines, add digit separators to test values, name and comment every test case against the manual, and split the household-size sweeps so each size is asserted once: odd sizes in the income-limit test, even sizes in the benefit-matrix tests. Co-Authored-By: Claude Fable 5.1 --- .../or/ohcs/liheap/eligibility/smi_rate.yaml | 2 +- .../liheap/income/earned_income_min_age.yaml | 2 +- .../liheap/income/interest_threshold.yaml | 2 +- .../or/ohcs/liheap/income/sources/earned.yaml | 2 +- .../ohcs/liheap/income/sources/unearned.yaml | 2 +- .../liheap/payment/amount/electricity.yaml | 96 ++-- .../ohcs/liheap/payment/amount/fuel_oil.yaml | 48 +- .../liheap/payment/amount/natural_gas.yaml | 96 ++-- .../ohcs/liheap/payment/amount/propane.yaml | 48 +- .../or/ohcs/liheap/payment/amount/wood.yaml | 48 +- .../or/ohcs/liheap/payment/income_band.yaml | 72 +-- .../liheap/payment/max_household_size.yaml | 2 +- .../ohcs/liheap/payment/max_payment_size.yaml | 2 +- .../ohcs/liheap/payment/regions/region_1.yaml | 2 +- .../ohcs/liheap/payment/regions/region_2.yaml | 2 +- .../or/ohcs/liheap/payment/roomer_rate.yaml | 2 +- .../eligibility/or_liheap_eligible.yaml | 35 +- .../eligibility/or_liheap_income_limit.yaml | 16 +- .../or_liheap_countable_earned_income.yaml | 57 ++- .../income/or_liheap_countable_income.yaml | 54 ++- .../states/or/ohcs/liheap/integration.yaml | 6 +- .../gov/states/or/ohcs/liheap/or_liheap.yaml | 424 +++++++++++++----- .../liheap/eligibility/or_liheap_eligible.py | 9 +- .../or_liheap_countable_earned_income.py | 6 +- .../income/or_liheap_countable_income.py | 14 +- .../gov/states/or/ohcs/liheap/or_liheap.py | 9 +- .../or/ohcs/liheap/or_liheap_dwelling_type.py | 6 +- .../ohcs/liheap/payment/or_liheap_region.py | 5 +- 28 files changed, 708 insertions(+), 361 deletions(-) diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml index f1031e19f18..744da5c97fc 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml @@ -1,6 +1,6 @@ description: Oregon limits countable income to this share of state median income under the Low Income Home Energy Assistance Program. values: - '2025-10-09': 0.6 + 2025-10-09: 0.6 metadata: unit: /1 period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml index e4514c9ac43..a52a093bf6f 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml @@ -1,6 +1,6 @@ description: Oregon excludes earnings of people below this age under the Low Income Home Energy Assistance Program. values: - '2025-10-09': 18 + 2025-10-09: 18 metadata: unit: year period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml index 1d34c21109e..7ebb3edfa63 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml @@ -1,6 +1,6 @@ description: Oregon counts annual withdrawn interest only when it exceeds this amount under the Low Income Home Energy Assistance Program. values: - '2025-10-09': 200 + 2025-10-09: 200 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml index 7fbe2ed115a..7bc00d1b2b9 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml @@ -1,6 +1,6 @@ description: Oregon counts these existing earnings inputs, without further self-employment expense deductions under the Low Income Home Energy Assistance Program. values: - '2025-10-09': + 2025-10-09: - employment_income - self_employment_income - sstb_self_employment_income diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index f8ab0510fc9..33820e43275 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -1,6 +1,6 @@ description: Oregon counts these unearned income sources under the Low Income Home Energy Assistance Program. values: - '2025-10-09': + 2025-10-09: - rental_income - farm_rent_income - social_security diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml index 20c79ab3f8e..e3249b26fb7 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml @@ -2,113 +2,113 @@ description: Oregon provides this annual heating payment for electricity under t 1: 1: 1: - '2025-10-09': 465 + 2025-10-09: 465 2: - '2025-10-09': 360 + 2025-10-09: 360 3: - '2025-10-09': 300 + 2025-10-09: 300 4: - '2025-10-09': 250 + 2025-10-09: 250 2: 1: - '2025-10-09': 595 + 2025-10-09: 595 2: - '2025-10-09': 465 + 2025-10-09: 465 3: - '2025-10-09': 385 + 2025-10-09: 385 4: - '2025-10-09': 275 + 2025-10-09: 275 3: 1: - '2025-10-09': 650 + 2025-10-09: 650 2: - '2025-10-09': 505 + 2025-10-09: 505 3: - '2025-10-09': 420 + 2025-10-09: 420 4: - '2025-10-09': 300 + 2025-10-09: 300 4: 1: - '2025-10-09': 690 + 2025-10-09: 690 2: - '2025-10-09': 540 + 2025-10-09: 540 3: - '2025-10-09': 450 + 2025-10-09: 450 4: - '2025-10-09': 320 + 2025-10-09: 320 5: 1: - '2025-10-09': 725 + 2025-10-09: 725 2: - '2025-10-09': 565 + 2025-10-09: 565 3: - '2025-10-09': 470 + 2025-10-09: 470 4: - '2025-10-09': 340 + 2025-10-09: 340 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 590 + 2025-10-09: 590 3: - '2025-10-09': 490 + 2025-10-09: 490 4: - '2025-10-09': 350 + 2025-10-09: 350 2: 1: 1: - '2025-10-09': 515 + 2025-10-09: 515 2: - '2025-10-09': 400 + 2025-10-09: 400 3: - '2025-10-09': 335 + 2025-10-09: 335 4: - '2025-10-09': 250 + 2025-10-09: 250 2: 1: - '2025-10-09': 645 + 2025-10-09: 645 2: - '2025-10-09': 505 + 2025-10-09: 505 3: - '2025-10-09': 420 + 2025-10-09: 420 4: - '2025-10-09': 300 + 2025-10-09: 300 3: 1: - '2025-10-09': 700 + 2025-10-09: 700 2: - '2025-10-09': 545 + 2025-10-09: 545 3: - '2025-10-09': 455 + 2025-10-09: 455 4: - '2025-10-09': 325 + 2025-10-09: 325 4: 1: - '2025-10-09': 740 + 2025-10-09: 740 2: - '2025-10-09': 580 + 2025-10-09: 580 3: - '2025-10-09': 480 + 2025-10-09: 480 4: - '2025-10-09': 345 + 2025-10-09: 345 5: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 605 + 2025-10-09: 605 3: - '2025-10-09': 505 + 2025-10-09: 505 4: - '2025-10-09': 360 + 2025-10-09: 360 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 630 + 2025-10-09: 630 3: - '2025-10-09': 525 + 2025-10-09: 525 4: - '2025-10-09': 375 + 2025-10-09: 375 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml index 2d11c57782c..4d1794776ef 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml @@ -1,58 +1,58 @@ description: Oregon provides this annual heating payment for fuel oil under the Low Income Home Energy Assistance Program, by household size and income band. 1: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 675 + 2025-10-09: 675 3: - '2025-10-09': 560 + 2025-10-09: 560 4: - '2025-10-09': 405 + 2025-10-09: 405 2: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 640 + 2025-10-09: 640 4: - '2025-10-09': 460 + 2025-10-09: 460 3: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 675 + 2025-10-09: 675 4: - '2025-10-09': 485 + 2025-10-09: 485 4: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 700 + 2025-10-09: 700 4: - '2025-10-09': 505 + 2025-10-09: 505 5: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 720 + 2025-10-09: 720 4: - '2025-10-09': 520 + 2025-10-09: 520 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 740 + 2025-10-09: 740 4: - '2025-10-09': 535 + 2025-10-09: 535 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml index cfed8ecc7ab..e9a91c6e9e6 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml @@ -2,113 +2,113 @@ description: Oregon provides this annual heating payment for natural gas under t 1: 1: 1: - '2025-10-09': 670 + 2025-10-09: 670 2: - '2025-10-09': 520 + 2025-10-09: 520 3: - '2025-10-09': 435 + 2025-10-09: 435 4: - '2025-10-09': 310 + 2025-10-09: 310 2: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 605 + 2025-10-09: 605 3: - '2025-10-09': 505 + 2025-10-09: 505 4: - '2025-10-09': 360 + 2025-10-09: 360 3: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 640 + 2025-10-09: 640 3: - '2025-10-09': 535 + 2025-10-09: 535 4: - '2025-10-09': 385 + 2025-10-09: 385 4: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 670 + 2025-10-09: 670 3: - '2025-10-09': 555 + 2025-10-09: 555 4: - '2025-10-09': 400 + 2025-10-09: 400 5: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 690 + 2025-10-09: 690 3: - '2025-10-09': 575 + 2025-10-09: 575 4: - '2025-10-09': 415 + 2025-10-09: 415 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 710 + 2025-10-09: 710 3: - '2025-10-09': 590 + 2025-10-09: 590 4: - '2025-10-09': 425 + 2025-10-09: 425 2: 1: 1: - '2025-10-09': 560 + 2025-10-09: 560 2: - '2025-10-09': 435 + 2025-10-09: 435 3: - '2025-10-09': 365 + 2025-10-09: 365 4: - '2025-10-09': 260 + 2025-10-09: 260 2: 1: - '2025-10-09': 670 + 2025-10-09: 670 2: - '2025-10-09': 520 + 2025-10-09: 520 3: - '2025-10-09': 435 + 2025-10-09: 435 4: - '2025-10-09': 310 + 2025-10-09: 310 3: 1: - '2025-10-09': 715 + 2025-10-09: 715 2: - '2025-10-09': 555 + 2025-10-09: 555 3: - '2025-10-09': 465 + 2025-10-09: 465 4: - '2025-10-09': 335 + 2025-10-09: 335 4: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 585 + 2025-10-09: 585 3: - '2025-10-09': 485 + 2025-10-09: 485 4: - '2025-10-09': 350 + 2025-10-09: 350 5: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 605 + 2025-10-09: 605 3: - '2025-10-09': 505 + 2025-10-09: 505 4: - '2025-10-09': 365 + 2025-10-09: 365 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 630 + 2025-10-09: 630 3: - '2025-10-09': 525 + 2025-10-09: 525 4: - '2025-10-09': 375 + 2025-10-09: 375 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml index 37d8bf4333c..4c9bb292a06 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml @@ -1,58 +1,58 @@ description: Oregon provides this annual heating payment for propane under the Low Income Home Energy Assistance Program, by household size and income band. 1: 1: - '2025-10-09': 715 + 2025-10-09: 715 2: - '2025-10-09': 560 + 2025-10-09: 560 3: - '2025-10-09': 465 + 2025-10-09: 465 4: - '2025-10-09': 335 + 2025-10-09: 335 2: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 655 + 2025-10-09: 655 3: - '2025-10-09': 545 + 2025-10-09: 545 4: - '2025-10-09': 390 + 2025-10-09: 390 3: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 695 + 2025-10-09: 695 3: - '2025-10-09': 580 + 2025-10-09: 580 4: - '2025-10-09': 415 + 2025-10-09: 415 4: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 725 + 2025-10-09: 725 3: - '2025-10-09': 605 + 2025-10-09: 605 4: - '2025-10-09': 435 + 2025-10-09: 435 5: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 625 + 2025-10-09: 625 4: - '2025-10-09': 450 + 2025-10-09: 450 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 645 + 2025-10-09: 645 4: - '2025-10-09': 460 + 2025-10-09: 460 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml index 585b8fc7e2d..83d5daa081f 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml @@ -1,58 +1,58 @@ description: Oregon provides this annual heating payment for wood under the Low Income Home Energy Assistance Program, by household size and income band. 1: 1: - '2025-10-09': 715 + 2025-10-09: 715 2: - '2025-10-09': 560 + 2025-10-09: 560 3: - '2025-10-09': 465 + 2025-10-09: 465 4: - '2025-10-09': 350 + 2025-10-09: 350 2: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 655 + 2025-10-09: 655 3: - '2025-10-09': 545 + 2025-10-09: 545 4: - '2025-10-09': 390 + 2025-10-09: 390 3: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 695 + 2025-10-09: 695 3: - '2025-10-09': 580 + 2025-10-09: 580 4: - '2025-10-09': 415 + 2025-10-09: 415 4: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 725 + 2025-10-09: 725 3: - '2025-10-09': 605 + 2025-10-09: 605 4: - '2025-10-09': 435 + 2025-10-09: 435 5: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 625 + 2025-10-09: 625 4: - '2025-10-09': 450 + 2025-10-09: 450 6: 1: - '2025-10-09': 750 + 2025-10-09: 750 2: - '2025-10-09': 750 + 2025-10-09: 750 3: - '2025-10-09': 645 + 2025-10-09: 645 4: - '2025-10-09': 460 + 2025-10-09: 460 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml index 708703a7700..b5656024cc1 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml @@ -3,79 +3,79 @@ description: Oregon uses these inclusive annual income band upper bounds under the Low Income Home Energy Assistance Program. 1: 1: - '2025-10-09': 9597 + 2025-10-09: 9597 2: - '2025-10-09': 12549 + 2025-10-09: 12549 3: - '2025-10-09': 15502 + 2025-10-09: 15502 4: - '2025-10-09': 18454 + 2025-10-09: 18454 5: - '2025-10-09': 21407 + 2025-10-09: 21407 6: - '2025-10-09': 24360 + 2025-10-09: 24360 7: - '2025-10-09': 24913 + 2025-10-09: 24913 8: - '2025-10-09': 25467 + 2025-10-09: 25467 9: - '2025-10-09': 26020 + 2025-10-09: 26020 10: - '2025-10-09': 26574 + 2025-10-09: 26574 11: - '2025-10-09': 27128 + 2025-10-09: 27128 12: - '2025-10-09': 27681 + 2025-10-09: 27681 2: 1: - '2025-10-09': 19193 + 2025-10-09: 19193 2: - '2025-10-09': 25098 + 2025-10-09: 25098 3: - '2025-10-09': 31003 + 2025-10-09: 31003 4: - '2025-10-09': 36908 + 2025-10-09: 36908 5: - '2025-10-09': 42814 + 2025-10-09: 42814 6: - '2025-10-09': 48719 + 2025-10-09: 48719 7: - '2025-10-09': 49826 + 2025-10-09: 49826 8: - '2025-10-09': 50933 + 2025-10-09: 50933 9: - '2025-10-09': 52040 + 2025-10-09: 52040 10: - '2025-10-09': 53148 + 2025-10-09: 53148 11: - '2025-10-09': 54255 + 2025-10-09: 54255 12: - '2025-10-09': 55362 + 2025-10-09: 55362 3: 1: - '2025-10-09': 28789 + 2025-10-09: 28789 2: - '2025-10-09': 37646 + 2025-10-09: 37646 3: - '2025-10-09': 46504 + 2025-10-09: 46504 4: - '2025-10-09': 55362 + 2025-10-09: 55362 5: - '2025-10-09': 64220 + 2025-10-09: 64220 6: - '2025-10-09': 73078 + 2025-10-09: 73078 7: - '2025-10-09': 74739 + 2025-10-09: 74739 8: - '2025-10-09': 76400 + 2025-10-09: 76400 9: - '2025-10-09': 78060 + 2025-10-09: 78060 10: - '2025-10-09': 79721 + 2025-10-09: 79721 11: - '2025-10-09': 81382 + 2025-10-09: 81382 12: - '2025-10-09': 83043 + 2025-10-09: 83043 metadata: unit: currency-USD period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml index 74da9b51317..05271d2cc72 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml @@ -1,6 +1,6 @@ description: Oregon publishes its standard payment matrix through this household size under the Low Income Home Energy Assistance Program. values: - '2025-10-09': 12 + 2025-10-09: 12 metadata: unit: person period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml index 85e510ec28f..0da1b523007 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml @@ -1,6 +1,6 @@ description: Oregon uses the same payment amounts for households at or above this size under the Low Income Home Energy Assistance Program. values: - '2025-10-09': 6 + 2025-10-09: 6 metadata: unit: person period: year diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml index 7bc3274a369..1a9316591bb 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml @@ -1,6 +1,6 @@ description: Oregon assigns these counties to payment region 1 under the Low Income Home Energy Assistance Program. values: - '2025-10-09': + 2025-10-09: - BENTON_COUNTY_OR - CLACKAMAS_COUNTY_OR - CLATSOP_COUNTY_OR diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml index 2b18d6b82a7..b9bcb510c61 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml @@ -1,6 +1,6 @@ description: Oregon assigns these counties to payment region 2 under the Low Income Home Energy Assistance Program. values: - '2025-10-09': + 2025-10-09: - BAKER_COUNTY_OR - CROOK_COUNTY_OR - DESCHUTES_COUNTY_OR diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml index 8f300db2e0b..0d66525132b 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml @@ -1,6 +1,6 @@ description: Oregon pays this share of the standard payment for a separate roomer, boarder or owner application under the Low Income Home Energy Assistance Program. values: - '2025-10-09': 0.5 + 2025-10-09: 0.5 metadata: unit: /1 period: year diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml index b8a464097d8..c56a9905aea 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml @@ -1,12 +1,39 @@ -- name: Heat responsibility and subsidized heat included in rent +# Page numbers in the comments are those of the FY2026 Oregon Energy Assistance +# Intake, Operations and Policy Manual (energy burden on page 61 and in the +# table on pages 93-94, income limits on page 77): +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=93 +- name: Case 1, energy burden with heat paid directly, heat included in rent and subsidized housing. period: 2026 input: state_code: [OR, OR, OR, OR, OR, OR] - county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + age: [38, 38, 38, 38, 38, 38] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN] + # About 30 hours a week near the Portland-metro minimum wage ($16.80 an + # hour from July 2026). + employment_income: [26_000, 26_000, 26_000, 26_000, 26_000, 26_000] + ssi: [0, 0, 0, 0, 0, 0] + tanf: [0, 0, 0, 0, 0, 0] + snap: [0, 0, 0, 0, 0, 0] heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] - or_liheap_countable_income: [0, 0, 0, 0, 0, 0] - has_heating_expense: [false, false, false, true, true, true] + # About $125 a month where the household pays its own electric bill. + pre_subsidy_electricity_expense: [0, 0, 0, 1_500, 1_500, 1_500] heat_expense_included_in_rent: [false, true, true, false, false, true] receives_housing_assistance: [false, false, true, true, false, true] output: + # Wages of 26,000 are within the size 1 limit of $38,385 (page 77) for + # every household, so eligibility turns on the energy burden table + # (page 93): + # 1. no heating bill and heat not in rent: no energy burden to + # demonstrate ("All households must demonstrate an energy burden", + # page 61), ineligible; + # 2. "Energy Costs included in rent (non-subsidized)": energy burden + # "Yes", eligible; + # 3. "Applicant lives in Subsidized Housing and heat is included in + # rent": energy burden "No", ineligible; + # 4. "Applicant lives in Subsidized Housing and pays a vendor directly + # for utility costs": energy burden "Yes", eligible; + # 5. "Applicant pays a vendor directly for utilities": energy burden + # "Yes", eligible; + # 6. subsidized housing with heat included in rent stays ineligible + # (page 61) even though the household pays a separate electric bill. or_liheap_eligible: [false, true, false, true, true, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml index ae0504c7ae8..4ce9f54db73 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml @@ -1,8 +1,14 @@ -- name: All twelve published FY2026 annual income limits +# Source for the expected values in this file: FY2026 Oregon Energy Assistance +# Intake, Operations and Policy Manual, page 77, "60% of State Median Income by +# Household Size", Annual Gross Income column: +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 +- name: Case 1, published annual income limits for the odd household sizes 1 to 11. period: 2026 input: - heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - spm_unit_size: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + state_code: [OR, OR, OR, OR, OR, OR] + spm_unit_size: [1, 3, 5, 7, 9, 11] output: - or_liheap_income_limit: [38385, 50196, 62006, 73817, 85627, 97438, 99652, 101867, 104081, 106296, 108510, 110725] + # Page 77: size 1 $38,385, size 3 $62,006, size 5 $85,627, size 7 $99,652, + # size 9 $104,081, size 11 $108,510. The even sizes are exercised through + # the payment matrix sweeps in or_liheap.yaml. + or_liheap_income_limit: [38_385, 62_006, 85_627, 99_652, 104_081, 108_510] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml index d5d1add0a2b..370b1852ace 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml @@ -1,13 +1,50 @@ -- name: Adult earnings exclude secondary students and do not offset wages with business losses +# Page numbers in the comments are those of the FY2026 Oregon Energy Assistance +# Intake, Operations and Policy Manual (earned income on page 39, +# self-employment income on page 45, earnings of minors and of high-school +# students on pages 41 and 53): +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41 +- name: Case 1, earnings of a minor and of a high-school student are excluded and a business loss does not offset wages. period: 2026 input: - heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] - state_code: [OR, OR, OR, OR] - age: [17, 18, 19, 40] - is_in_secondary_school: [false, true, false, false] - employment_income: [1000, 2000, 3000, 4000] - self_employment_income: [100, 200, 300, -5000] - sstb_self_employment_income: [0, 0, 400, 500] - farm_operations_income: [0, 0, 500, 600] + people: + person1: + age: 17 + employment_income: 1_000 + self_employment_income: 100 + person2: + age: 18 + is_in_secondary_school: true + employment_income: 2_000 + self_employment_income: 200 + person3: + age: 19 + employment_income: 3_000 + self_employment_income: 300 + sstb_self_employment_income: 400 + farm_operations_income: 500 + person4: + age: 40 + employment_income: 4_000 + self_employment_income: -5_000 + sstb_self_employment_income: 500 + farm_operations_income: 600 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + households: + household: + members: [person1, person2, person3, person4] + state_code: OR output: - or_liheap_countable_earned_income: [0, 0, 4200, 5100] + # person1: "Income Earned by minors", household members under eighteen, + # is not counted (pages 41 and 53), 0. + # person2: income earned by household members eighteen and over who are + # enrolled in high school is not counted (pages 41 and 53), 0. + # person3: wages 3,000 (page 39) + self-employment income, "income from a + # business, less business expenses" (page 45), 300 + 400 + farm 500 = + # 4,200. + # person4: wages 4,000 (page 39) + specified-service self-employment 500 + + # farm 600 (page 45) = 5,100. The 5,000 business loss is floored at zero, + # a modeling convention: the manual does not say that a current-period + # loss offsets other earnings. + or_liheap_countable_earned_income: [0, 0, 4_200, 5_100] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml index e0654dfe570..e83ff0530c8 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -1,13 +1,19 @@ -- name: Interest threshold and counted benefits, including child support and Oregon TANF +# Page numbers in the comments are those of the FY2026 Oregon Energy Assistance +# Intake, Operations and Policy Manual (income and income exclusion chart on +# pages 37-48, proof of income on pages 49-51, private disability insurance +# examples on pages 55-56): +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=50 +- name: Case 1, interest counts only above $200 and every listed unearned source counts. period: 2026 input: - heating_type: [NATURAL_GAS, NATURAL_GAS] state_code: [OR, OR] or_liheap_countable_earned_income: [0, 0] + # The only difference between the two households: interest at the $200 + # threshold and one dollar over it. interest_income: [200, 201] ordinary_dividend_income: [100, 100] rental_income: [300, 300] - social_security: [1000, 1000] + social_security: [1_000, 1_000] railroad_benefits: [120, 120] ssi: [0, 0] tanf: [500, 500] @@ -22,30 +28,50 @@ general_assistance: [0, 0] estate_income: [0, 0] output: - or_liheap_countable_income: [2880, 3081] -- name: Manual disability insurance examples count the insurer payment plus Social Security once + # Each source is marked "Considered Income? Yes" in the chart: dividends + # 100 (page 39) + rental income 300 (page 44) + Social Security 1,000 + # (page 46) + Railroad Retirement 120 (page 44) + TANF 500 (page 47) + + # pensions 200 (page 44) + unemployment insurance 150 (page 48) + child + # support 250 (page 38) + workers compensation 100 (page 49) + private + # disability insurance 75 (page 39) + veterans benefits 50 (page 48) + + # alimony 25 (page 37) + strike benefits 10 (page 47) = 2,880. + # Interest is counted "only if amount is over $200" (pages 43 and 50): + # $200 adds nothing, $201 is counted in full, 2,880 + 201 = 3,081. + or_liheap_countable_income: [2_880, 3_081] + +- name: Case 2, the manual's private disability insurance examples count the insurer's payment plus Social Security once. period: 2026 absolute_error_margin: 0.01 input: state_code: [OR, OR] - heating_type: [NATURAL_GAS, NATURAL_GAS] or_liheap_countable_earned_income: [0, 0] - # Manual pages 55-56: annualize the insurer's payment after its SSA offset. - disability_benefits: [3832.68, 8511.96] - social_security: [10164, 14868] + # Example A (page 55): net monthly insurer benefit $319.39 x 12 = 3,832.68. + # Example B (page 55): monthly benefit paid $709.33 x 12 = 8,511.96. + disability_benefits: [3_832.68, 8_511.96] + # Example A (page 55): Social Security $847.00 x 12 = 10,164. + # Example B (page 55): Social Security $825.00 + $414.00 = $1,239.00 x 12 + # = 14,868. + social_security: [10_164, 14_868] ssi: [0, 0] tanf: [0, 0] output: - or_liheap_countable_income: [13996.68, 23379.96] + # Example A (page 55): "the maximum the client will ever receive from both + # sources is $1,166.39" a month, x 12 = 13,996.68. + # Example B (page 56): "$1,948.33 ($1,786.15 + $162.18)" a month, + # x 12 = 23,379.96. + or_liheap_countable_income: [13_996.68, 23_379.96] -- name: State cash entitlement counts only when TANF is taken up +- name: Case 3, an Oregon TANF entitlement counts only when it is taken up. period: 2026 input: state_code: [OR, OR] - heating_type: [NATURAL_GAS, NATURAL_GAS] age: [40, 40] - or_tanf: [1200, 1200] + or_tanf: [1_200, 1_200] takes_up_tanf_if_eligible: [false, true] ssi: [0, 0] output: - or_liheap_countable_income: [0, 1200] + # TANF is "Considered Income? Yes" (page 47) and the proof of income is + # documentation "showing amount of assistance", so the model counts TANF + # actually received: the first household does not take up its $1,200 + # entitlement, 0; the second receives it, 1,200. + or_liheap_countable_income: [0, 1_200] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml index 9adbf1a3f52..ffa79bfc7a3 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/integration.yaml @@ -2,7 +2,7 @@ # Operations and Policy Manual (income limits on page 77, Region 1 matrix on # pages 78-79, Region 2 matrix on pages 80-81): # https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 -- name: Adult net earnings and child interest count but child wages do not +- name: Case 1, adult net earnings and child interest count but child wages do not. period: 2026 input: people: @@ -59,7 +59,7 @@ or_liheap_eligible: true # Region 2, size 2, "$12,550 $25,098", Electricity $505 (page 80). or_liheap: 505 -- name: Adult secondary-school earnings are excluded for a nonsubsidized heat-in-rent household +- name: Case 2, adult secondary-school earnings are excluded for a nonsubsidized heat-in-rent household. period: 2026 input: state_code: OR @@ -89,7 +89,7 @@ # Region 1 (Multnomah, page 78), size 1, "$0 $9,597", Electricity $465 # (page 78). or_liheap: 465 -- name: Public-housing household paying its own heat can receive a standard grant +- name: Case 3, public-housing household paying its own heat can receive a standard grant. period: 2026 input: state_code: OR diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml index 298c20555cd..61f54af6e98 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -1,198 +1,414 @@ -- name: Published region 1 electricity payments for every size and band +# Page numbers in the comments are those of the FY2026 Oregon Energy Assistance +# Intake, Operations and Policy Manual (income limits on page 77, Region 1 +# matrix on pages 78-79, Region 2 matrix on pages 80-81, payment types on +# pages 61-62, energy burden table on pages 93-94); the manual is linked in +# the comment above Case 19. +# +# Cases 1 to 10 sweep the published payment matrices for the even household +# sizes 2, 4, 6, 8, 10 and 12 (the odd sizes are covered through the +# income-limit test). Each size is tested at the first dollar of its four +# printed income rows, in this order: +# size 2: "$0", "$12,550", "$25,099", "$37,647" (pages 78 and 80) +# size 4: "$0", "$18,455", "$36,909", "$55,363" (pages 78 and 80) +# size 6: "$0", "$24,361", "$48,720", "$73,079" (pages 78 and 80) +# size 8: "$0", "$25,468", "$50,934", "$76,401" (pages 79 and 81) +# size 10: "$0", "$26,575", "$53,149", "$79,722" (pages 79 and 81) +# size 12: "$0", "$27,682", "$55,363", "$83,044" (pages 79 and 81) +# Multnomah County is in the Region 1 list (page 78) and Deschutes County in +# the Region 2 list (page 80). +- name: Case 1, Region 1 electricity payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + # About $125 a month for electric heat. + pre_subsidy_electricity_expense: [1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [465, 360, 300, 250, 595, 465, 385, 275, 650, 505, 420, 300, 690, 540, 450, 320, 725, 565, 470, 340, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350] -- name: Published region 1 fuel_oil payments for every size and band + # Region 1 matrix, Electricity column, four rows per size: + # size 2 (page 78): $595, $465, $385, $275 + # size 4 (page 78): $690, $540, $450, $320 + # size 6 (page 78): $750, $590, $490, $350 + # size 8 (page 79): $750, $590, $490, $350 + # size 10 (page 79): $750, $590, $490, $350 + # size 12 (page 79): $750, $590, $490, $350 + or_liheap: [595, 465, 385, 275, 690, 540, 450, 320, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350, 750, 590, 490, 350] + +- name: Case 2, Region 1 heating oil payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL] + # About 600 gallons of heating oil a year. + fuel_oil_expense: [2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [750, 675, 560, 405, 750, 750, 640, 460, 750, 750, 675, 485, 750, 750, 700, 505, 750, 750, 720, 520, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535] -- name: Published region 1 propane payments for every size and band + # Region 1 matrix, Heating Oil column, four rows per size: + # size 2 (page 78): $750, $750, $640, $460 + # size 4 (page 78): $750, $750, $700, $505 + # size 6 (page 78): $750, $750, $740, $535 + # size 8 (page 79): $750, $750, $740, $535 + # size 10 (page 79): $750, $750, $740, $535 + # size 12 (page 79): $750, $750, $740, $535 + or_liheap: [750, 750, 640, 460, 750, 750, 700, 505, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535] + +- name: Case 3, Region 1 propane payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + # About $150 a month for propane heat. + bottled_gas_expense: [1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [715, 560, 465, 335, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] -- name: Published region 1 natural_gas payments for every size and band + # Region 1 matrix, Liquid Gas (propane) column, four rows per size: + # size 2 (page 78): $750, $655, $545, $390 + # size 4 (page 78): $750, $725, $605, $435 + # size 6 (page 78): $750, $750, $645, $460 + # size 8 (page 79): $750, $750, $645, $460 + # size 10 (page 79): $750, $750, $645, $460 + # size 12 (page 79): $750, $750, $645, $460 + or_liheap: [750, 655, 545, 390, 750, 725, 605, 435, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] + +- name: Case 4, Region 1 natural gas payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + # About $80 a month for gas heat. + gas_expense: [960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [670, 520, 435, 310, 750, 605, 505, 360, 750, 640, 535, 385, 750, 670, 555, 400, 750, 690, 575, 415, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425] -- name: Published region 1 wood payments for every size and band + # Region 1 matrix, Natural Gas column, four rows per size: + # size 2 (page 78): $750, $605, $505, $360 + # size 4 (page 78): $750, $670, $555, $400 + # size 6 (page 78): $750, $710, $590, $425 + # size 8 (page 79): $750, $710, $590, $425 + # size 10 (page 79): $750, $710, $590, $425 + # size 12 (page 79): $750, $710, $590, $425 + or_liheap: [750, 605, 505, 360, 750, 670, 555, 400, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425, 750, 710, 590, 425] + +- name: Case 5, Region 1 wood payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD] + # About three cords of firewood a year. + wood_expense: [900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [715, 560, 465, 350, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] -- name: Published region 2 electricity payments for every size and band + # Region 1 matrix, Wood/Pellets column, four rows per size: + # size 2 (page 78): $750, $655, $545, $390 + # size 4 (page 78): $750, $725, $605, $435 + # size 6 (page 78): $750, $750, $645, $460 + # size 8 (page 79): $750, $750, $645, $460 + # size 10 (page 79): $750, $750, $645, $460 + # size 12 (page 79): $750, $750, $645, $460 + or_liheap: [750, 655, 545, 390, 750, 725, 605, 435, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] + +- name: Case 6, Region 2 electricity payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + # About $125 a month for electric heat. + pre_subsidy_electricity_expense: [1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500, 1_500] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [515, 400, 335, 250, 645, 505, 420, 300, 700, 545, 455, 325, 740, 580, 480, 345, 750, 605, 505, 360, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375] -- name: Published region 2 fuel_oil payments for every size and band + # Region 2 matrix, Electricity column, four rows per size: + # size 2 (page 80): $645, $505, $420, $300 + # size 4 (page 80): $740, $580, $480, $345 + # size 6 (page 80): $750, $630, $525, $375 + # size 8 (page 81): $750, $630, $525, $375 + # size 10 (page 81): $750, $630, $525, $375 + # size 12 (page 81): $750, $630, $525, $375 + or_liheap: [645, 505, 420, 300, 740, 580, 480, 345, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375] + +- name: Case 7, Region 2 heating oil payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL, FUEL_OIL] + # About 600 gallons of heating oil a year. + fuel_oil_expense: [2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400, 2_400] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [750, 675, 560, 405, 750, 750, 640, 460, 750, 750, 675, 485, 750, 750, 700, 505, 750, 750, 720, 520, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535] -- name: Published region 2 propane payments for every size and band + # Region 2 matrix, Heating Oil column, four rows per size: + # size 2 (page 80): $750, $750, $640, $460 + # size 4 (page 80): $750, $750, $700, $505 + # size 6 (page 80): $750, $750, $740, $535 + # size 8 (page 81): $750, $750, $740, $535 + # size 10 (page 81): $750, $750, $740, $535 + # size 12 (page 81): $750, $750, $740, $535 + or_liheap: [750, 750, 640, 460, 750, 750, 700, 505, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535, 750, 750, 740, 535] + +- name: Case 8, Region 2 propane payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + # About $150 a month for propane heat. + bottled_gas_expense: [1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800, 1_800] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [715, 560, 465, 335, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] -- name: Published region 2 natural_gas payments for every size and band + # Region 2 matrix, Liquid Gas (propane) column, four rows per size: + # size 2 (page 80): $750, $655, $545, $390 + # size 4 (page 80): $750, $725, $605, $435 + # size 6 (page 80): $750, $750, $645, $460 + # size 8 (page 81): $750, $750, $645, $460 + # size 10 (page 81): $750, $750, $645, $460 + # size 12 (page 81): $750, $750, $645, $460 + or_liheap: [750, 655, 545, 390, 750, 725, 605, 435, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] + +- name: Case 9, Region 2 natural gas payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + # About $80 a month for gas heat. + gas_expense: [960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [560, 435, 365, 260, 670, 520, 435, 310, 715, 555, 465, 335, 750, 585, 485, 350, 750, 605, 505, 365, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375] -- name: Published region 2 wood payments for every size and band + # Region 2 matrix, Natural Gas column, four rows per size: + # size 2 (page 80): $670, $520, $435, $310 + # size 4 (page 80): $750, $585, $485, $350 + # size 6 (page 80): $750, $630, $525, $375 + # size 8 (page 81): $750, $630, $525, $375 + # size 10 (page 81): $750, $630, $525, $375 + # size 12 (page 81): $750, $630, $525, $375 + or_liheap: [670, 520, 435, 310, 750, 585, 485, 350, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375, 750, 630, 525, 375] + +- name: Case 10, Region 2 wood payments for even household sizes at every income band. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] - county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] - spm_unit_size: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 12] - heating_type: [WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9598, 19194, 28790, 0, 12550, 25099, 37647, 0, 15503, 31004, 46505, 0, 18455, 36909, 55363, 0, 21408, 42815, 64221, 0, 24361, 48720, 73079, 0, 24914, 49827, 74740, 0, 25468, 50934, 76401, 0, 26021, 52041, 78061, 0, 26575, 53149, 79722, 0, 27129, 54256, 81383, 0, 27682, 55363, 83044] + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [2, 2, 2, 2, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 8, 10, 10, 10, 10, 12, 12, 12, 12] + heating_type: [WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD, WOOD] + # About three cords of firewood a year. + wood_expense: [900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900, 900] + or_liheap_countable_income: [0, 12_550, 25_099, 37_647, 0, 18_455, 36_909, 55_363, 0, 24_361, 48_720, 73_079, 0, 25_468, 50_934, 76_401, 0, 26_575, 53_149, 79_722, 0, 27_682, 55_363, 83_044] output: - or_liheap: [715, 560, 465, 350, 750, 655, 545, 390, 750, 695, 580, 415, 750, 725, 605, 435, 750, 750, 625, 450, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] -- name: The published income limit includes the dollar above the last matrix band + # Region 2 matrix, Wood/Pellets column, four rows per size: + # size 2 (page 80): $750, $655, $545, $390 + # size 4 (page 80): $750, $725, $605, $435 + # size 6 (page 80): $750, $750, $645, $460 + # size 8 (page 81): $750, $750, $645, $460 + # size 10 (page 81): $750, $750, $645, $460 + # size 12 (page 81): $750, $750, $645, $460 + or_liheap: [750, 655, 545, 390, 750, 725, 605, 435, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460, 750, 750, 645, 460] + +- name: Case 11, the published income limit includes the dollar above the last matrix row. period: 2026 input: state_code: [OR, OR, OR] county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] spm_unit_size: [2, 2, 2] heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY] - has_heating_expense: [true, true, true] - or_liheap_countable_income: [50195, 50196, 50197] + # About $125 a month for electric heat. + pre_subsidy_electricity_expense: [1_500, 1_500, 1_500] + # The last size 2 matrix row ends at $50,195 (page 78) while the size 2 + # income limit is $50,196 (page 77): the top of the row, the limit itself + # and one dollar above the limit. + or_liheap_countable_income: [50_195, 50_196, 50_197] output: + # Size 2 limit $50,196 (page 77): $50,195 and $50,196 are within it, + # $50,197 is not. + or_liheap_eligible: [true, true, false] + # Region 1, size 2, "$37,647 $50,195", Electricity $275 (page 78). The + # eligible household at exactly $50,196 is paid from that same last row. + # The ineligible household receives $0. or_liheap: [275, 275, 0] -- name: Income bands include their printed tops and then change + +- name: Case 12, income bands include their printed tops and change at the next dollar. period: 2026 input: state_code: [OR, OR, OR, OR, OR, OR, OR] county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] - has_heating_expense: [true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 9597, 9598, 19193, 19194, 28789, 28790] + # About $80 a month for gas heat. + gas_expense: [960, 960, 960, 960, 960, 960, 960] + # Size 1 rows (page 78): "$0 $9,597", "$9,598 $19,193", "$19,194 $28,789", + # "$28,790 $38,385". Tested at $0, at each printed row top and at the + # first dollar of the following row. + or_liheap_countable_income: [0, 9_597, 9_598, 19_193, 19_194, 28_789, 28_790] output: + # Region 1, size 1, Natural Gas column (page 78): $670 for "$0 $9,597", + # $520 for "$9,598 $19,193", $435 for "$19,194 $28,789" and $310 for + # "$28,790 $38,385". or_liheap: [670, 670, 520, 520, 435, 435, 310] -- name: Supported and unsupported heating fuels + +- name: Case 13, supported and unsupported heating fuels. period: 2026 input: state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] - has_heating_expense: [true, true, true, true, true, true, true, true, true, true, true] - or_liheap_countable_income: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] heating_type: [ELECTRICITY, FUEL_OIL, PROPANE, NATURAL_GAS, WOOD, KEROSENE, COAL, SOLAR, OTHER, UNSPECIFIED, NONE] + # Each household pays the bill of its own fuel. Kerosene is billed as + # heating oil and a grid-tied solar home pays an electricity bill. + pre_subsidy_electricity_expense: [1_500, 0, 0, 0, 0, 0, 0, 1_200, 0, 0, 0] + fuel_oil_expense: [0, 2_400, 0, 0, 0, 1_200, 0, 0, 0, 0, 0] + bottled_gas_expense: [0, 0, 1_800, 0, 0, 0, 0, 0, 0, 0, 0] + gas_expense: [0, 0, 0, 960, 0, 0, 0, 0, 0, 0, 0] + wood_expense: [0, 0, 0, 0, 900, 0, 0, 0, 0, 0, 0] + coal_expense: [0, 0, 0, 0, 0, 0, 800, 0, 0, 0, 0] + other_heating_fuel_expense: [0, 0, 0, 0, 0, 0, 0, 0, 1_000, 0, 0] + # The household that did not report its fuel has heat included in rent; + # the last household has no heating at all. + heat_expense_included_in_rent: [false, false, false, false, false, false, false, false, false, true, false] + or_liheap_countable_income: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] output: + # Paying a vendor directly or having energy costs included in + # non-subsidized rent is an energy burden (page 93), and $0 is within the + # size 1 limit of $38,385 (page 77). A home with no heating has no + # energy burden to demonstrate (page 61). + or_liheap_eligible: [true, true, true, true, true, true, true, true, true, true, false] + # Region 2, size 1, "$0 $9,597" (page 80): Electricity $515, Heating Oil + # $750, Liquid Gas $715, Natural Gas $560, Wood/Pellets $715. Kerosene, + # coal, solar and other fuels have no column in the matrix, $0. An + # unspecified fuel pays $0 because heating_type is a required input and + # the amount depends on the fuel, even with heat included in rent. No + # heating, ineligible, $0. or_liheap: [515, 750, 715, 560, 715, 0, 0, 0, 0, 0, 0] -- name: A separate roomer or boarder application receives half the regular payment + +- name: Case 14, a roomer applying separately with heat in rent receives half the regular payment. period: 2026 input: state_code: OR county: MULTNOMAH_COUNTY_OR + age: 28 + immigration_status: CITIZEN + # About 10 hours a week near the Portland-metro minimum wage ($16.80 an + # hour from July 2026). + employment_income: 8_600 + ssi: 0 + tanf: 0 + snap: 0 + # The rented room is heated by the building's electric heat. heating_type: ELECTRICITY heat_expense_included_in_rent: true - or_liheap_countable_income: 0 or_liheap_dwelling_type: ROOMER_BOARDER_OWNER output: + # Wages are the only income (page 39). + or_liheap_countable_income: 8_600 + # Size 1, first row "$0 $9,597" (page 78). + or_liheap_income_band: 1 + # Energy costs included in non-subsidized rent are an energy burden + # (page 93) and 8,600 is within the size 1 limit of $38,385 (page 77). + or_liheap_eligible: true + # Region 1, size 1, "$0 $9,597", Electricity $465 (page 78). A roomer or + # boarder who applies separately as an individual household receives + # "50% of a regular payment based on the Benefit Matrix" (pages 61-62): + # $465 x 0.5 = $232.50. or_liheap: 232.5 -- name: Unknown county and sizes above the published matrix are unsupported + +- name: Case 15, an unknown county and a household above the published size range are unsupported. period: 2026 input: state_code: [OR, OR] county: [UNKNOWN, MULTNOMAH_COUNTY_OR] spm_unit_size: [1, 13] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + employment_income: [30_000, 40_000] + ssi: [0, 0] + tanf: [0, 0] + snap: [0, 0] heating_type: [ELECTRICITY, ELECTRICITY] - has_heating_expense: [true, true] - or_liheap_countable_income: [0, 0] + # About $125 a month for electric heat. + pre_subsidy_electricity_expense: [1_500, 1_500] output: + # Both pay an electric heating bill (page 93). 30,000 is within the + # size 1 limit of $38,385 (page 77). 40,000 is far within the size 13 + # limit: page 77 gives $110,725 for size 12 plus an increment for each + # additional member (printed as $2,115, while the table's own steps above + # size 6 are $2,214), so the limit is about $112,900 either way. or_liheap_eligible: [true, true] + # Without a county neither region list (pages 78 and 80) applies, and + # the matrices end at size 12 (pages 79 and 81), so the model has no + # published amount to pay: $0 in both cases, a coverage gap rather than + # a denial. or_liheap: [0, 0] -- name: No expense cap applies to a standard payment + +- name: Case 16, a small gas bill does not cap the standard payment. period: 2026 input: state_code: OR county: MULTNOMAH_COUNTY_OR + age: 35 + immigration_status: CITIZEN + # About 9 hours a week near the Portland-metro minimum wage ($16.80 an + # hour from July 2026). + employment_income: 8_000 + ssi: 0 + tanf: 0 + snap: 0 heating_type: NATURAL_GAS - gas_expense: 1 - or_liheap_countable_income: 0 + # About $25 a month of gas in a small, well-insulated apartment. + gas_expense: 300 output: + # Wages are the only income (page 39). + or_liheap_countable_income: 8_000 + # Size 1, first row "$0 $9,597" (page 78). + or_liheap_income_band: 1 + # Pays a vendor directly (page 93) and 8,000 is within the size 1 limit + # of $38,385 (page 77). + or_liheap_eligible: true + # Region 1, size 1, "$0 $9,597", Natural Gas $670 (page 78). The standard + # payment is "determined by the LIHEAP/OEAP Benefits Matrix" (page 61) + # and is not limited to the household's $300 bill. or_liheap: 670 -- name: Other states receive no Oregon benefit + +- name: Case 17, a Washington household receives no Oregon benefit. period: 2026 input: state_code: WA - county: MULTNOMAH_COUNTY_OR + age: 40 + immigration_status: CITIZEN + employment_income: 30_000 + ssi: 0 + tanf: 0 + snap: 0 heating_type: NATURAL_GAS - has_heating_expense: true - or_liheap_countable_income: 0 + # About $80 a month for gas heat. + gas_expense: 960 output: + # The manual governs the Oregon program administered by OHCS (page 1), so + # a household outside Oregon receives nothing and every Oregon variable + # keeps its default. or_liheap: 0 -- name: One simulation with an Oregon household and a Washington household pays only the Oregon household + +- name: Case 18, one simulation with an Oregon household and a Washington household pays only the Oregon household. period: 2026 input: people: person1: age: 30 + immigration_status: CITIZEN # Full-time work near the Portland-metro minimum wage ($16.80 an hour from July 2026). employment_income: 34_500 ssi: 0 person2: age: 45 + immigration_status: CITIZEN employment_income: 30_000 ssi: 0 spm_units: @@ -202,12 +418,14 @@ # About $80 a month for gas heat. gas_expense: 960 tanf: 0 + snap: 0 spm_unit2: members: [person2] heating_type: ELECTRICITY # About $125 a month for electric heat. pre_subsidy_electricity_expense: 1_500 tanf: 0 + snap: 0 households: household1: members: [person1] @@ -217,8 +435,6 @@ members: [person2] state_code: WA output: - # Page numbers are those of the PY2026 Energy Assistance Intake, Operations - # and Policy Manual. # Unit 1: wages are the only income and earned income is counted (page 39). # Unit 2 is outside Oregon, so every Oregon variable keeps its default. or_liheap_countable_income: [34_500, 0] diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py index 0e1d283e012..f3d5f02a138 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py @@ -9,7 +9,14 @@ class or_liheap_eligible(Variable): defined_for = StateCode.OR # PDF pages 11, 30, 36, 61, 77, 93, 94. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=11" - documentation = "SPM members approximate the economic household, with identity and SSN verification assumed complete. The Oregon sources do not prescribe a SNAP immigration test. No asset or categorical income test applies. Institutional residence, tribal duplicate awards, documentation and application timing are not modeled. A zero benefit above size 12 or for unknown county denotes unsupported schedule coverage, not a legal denial." + documentation = ( + "SPM members approximate the economic household, with identity and SSN " + "verification assumed complete. The Oregon sources do not prescribe a SNAP " + "immigration test. No asset or categorical income test applies. Institutional " + "residence, tribal duplicate awards, documentation and application timing are " + "not modeled. A zero benefit above size 12 or for unknown county denotes " + "unsupported schedule coverage, not a legal denial." + ) def formula(spm_unit, period, parameters): heat_in_rent = spm_unit("heat_expense_included_in_rent", period) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py index 81e15975e2e..ee74591d645 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.py @@ -10,7 +10,11 @@ class or_liheap_countable_earned_income(Variable): defined_for = StateCode.OR # PDF pages 35, 41, 45, 53. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35" - documentation = "Existing net self-employment inputs are used without an additional expense deduction. Flooring each source at zero is a modeling convention; the manual does not specify current-period loss offsets." + documentation = ( + "Existing net self-employment inputs are used without an additional expense " + "deduction. Flooring each source at zero is a modeling convention; the manual " + "does not specify current-period loss offsets." + ) def formula(person, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.income diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py index 165193a7246..b8ef9cdbfb1 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py @@ -8,9 +8,19 @@ class or_liheap_countable_income(Variable): label = "Oregon LIHEAP countable household income" unit = USD defined_for = StateCode.OR - # PDF pages 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56. + # PDF pages 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + # 51, 52, 53, 54, 55, 56. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35" - documentation = "Annual income approximates the allowed one-, three- or twelve-month observation window. Interest is assumed withdrawn. Enter disability_benefits as the private insurer's payment after any Social Security offset; Social Security is counted separately, reproducing the manual's examples without deducting the offset twice. Unsupported details include regular gifts, foster and adoption payments, tribal receipts, work-study and caregiver payments within the household. Military wages should be included in employment_income. Use a direct countable-income override when these details matter." + documentation = ( + "Annual income approximates the allowed one-, three- or twelve-month " + "observation window. Interest is assumed withdrawn. Enter disability_benefits " + "as the private insurer's payment after any Social Security offset; Social " + "Security is counted separately, reproducing the manual's examples without " + "deducting the offset twice. Unsupported details include regular gifts, foster " + "and adoption payments, tribal receipts, work-study and caregiver payments " + "within the household. Military wages should be included in employment_income. " + "Use a direct countable-income override when these details matter." + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.income diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py index 5fdd35150a2..0591a8e2fd5 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py @@ -10,7 +10,14 @@ class or_liheap(Variable): defined_for = "or_liheap_eligible" # PDF pages 61, 62, 67, 78, 79, 80, 81, 93, 94. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61" - documentation = "Annual regular heating assistance, verified for FY2026. Earlier years use parameter backfilling and are unverified historical estimates. No actual-expense cap applies. Heat-in-rent households need the building heating fuel. Discretionary bulk-fuel minimum-delivery payments and local supplements are unsupported because the necessary award information is absent. Cooling, crisis and equipment assistance are excluded." + documentation = ( + "Annual regular heating assistance, verified for FY2026. Earlier years use " + "parameter backfilling and are unverified historical estimates. No " + "actual-expense cap applies. Heat-in-rent households need the building heating " + "fuel. Discretionary bulk-fuel minimum-delivery payments and local supplements " + "are unsupported because the necessary award information is absent. Cooling, " + "crisis and equipment assistance are excluded." + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.payment diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py index dd585b024fe..18dec7a10c2 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py @@ -17,4 +17,8 @@ class or_liheap_dwelling_type(Variable): label = "Oregon LIHEAP dwelling arrangement" # PDF pages 30, 61, 62. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=30" - documentation = "The half-payment arrangement applies when a roomer, boarder or owner applies as a separate economic household and the other residents do not apply together. It is not a reduction for all renters." + documentation = ( + "The half-payment arrangement applies when a roomer, boarder or owner applies " + "as a separate economic household and the other residents do not apply " + "together. It is not a reduction for all renters." + ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py index 1e499ac6f27..d2e643f9641 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py @@ -9,7 +9,10 @@ class or_liheap_region(Variable): defined_for = StateCode.OR # PDF pages 78, 80. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78" - documentation = "Zero denotes an unknown or out-of-state county; a county is required to select the published schedule." + documentation = ( + "Zero denotes an unknown or out-of-state county; a county is required to " + "select the published schedule." + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.payment.regions From 7d4079fe85ffedacf1872cce23a14adb8c2abe48 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 6 Oct 2026 17:07:04 -0400 Subject: [PATCH 08/10] Address review round 1 on Oregon LIHEAP - Encode the PY2025 (2024-10-01) and PY2027 (2026-10-01) payment matrices, bands and limits beside FY2026; fuel oil, propane and wood carry the region level; verified_years "2025-2027". - Pay kerosene from the heating oil column and solar from electricity. - Apply the 60% SMI ceiling to the product rounded to cents. - Add partnership/S-corp income to the earned sources and military retirement pay to the unearned list; floor every unearned source. - Add cases for PY2025 and PY2027, odd household sizes, public-housing heat in rent, age 18, per-member interest and the Region 2 fallback. - Retarget references, re-template descriptions and align the registry. Co-Authored-By: Claude Fable 5.1 --- changelog.d/or-liheap.added.md | 2 +- .../or/ohcs/liheap/eligibility/smi_rate.yaml | 8 +- .../liheap/income/earned_income_min_age.yaml | 6 +- .../liheap/income/interest_threshold.yaml | 12 +- .../or/ohcs/liheap/income/sources/earned.yaml | 13 +- .../ohcs/liheap/income/sources/unearned.yaml | 9 +- .../liheap/payment/amount/electricity.yaml | 105 ++++++++-- .../ohcs/liheap/payment/amount/fuel_oil.yaml | 181 ++++++++++++----- .../liheap/payment/amount/natural_gas.yaml | 94 ++++++++- .../ohcs/liheap/payment/amount/propane.yaml | 189 +++++++++++++----- .../or/ohcs/liheap/payment/amount/wood.yaml | 189 +++++++++++++----- .../or/ohcs/liheap/payment/income_band.yaml | 154 ++++++++++---- .../liheap/payment/max_household_size.yaml | 10 +- .../ohcs/liheap/payment/max_payment_size.yaml | 8 +- .../ohcs/liheap/payment/regions/region_1.yaml | 10 +- .../ohcs/liheap/payment/regions/region_2.yaml | 12 +- .../or/ohcs/liheap/payment/roomer_rate.yaml | 10 +- policyengine_us/programs.yaml | 4 +- .../eligibility/or_liheap_eligible.yaml | 36 ++-- .../eligibility/or_liheap_income_limit.yaml | 40 +++- .../or_liheap_countable_earned_income.yaml | 22 +- .../income/or_liheap_countable_income.yaml | 62 +++++- .../gov/states/or/ohcs/liheap/or_liheap.yaml | 135 ++++++++++--- .../liheap/eligibility/or_liheap_eligible.py | 20 +- .../eligibility/or_liheap_income_limit.py | 10 +- .../income/or_liheap_countable_income.py | 24 ++- .../gov/states/or/ohcs/liheap/or_liheap.py | 28 +-- .../ohcs/liheap/payment/or_liheap_region.py | 5 +- 28 files changed, 1071 insertions(+), 327 deletions(-) diff --git a/changelog.d/or-liheap.added.md b/changelog.d/or-liheap.added.md index 774602e1b23..5c24b2f7e7f 100644 --- a/changelog.d/or-liheap.added.md +++ b/changelog.d/or-liheap.added.md @@ -1 +1 @@ -Add Oregon LIHEAP regular heating assistance for FY2026. +Add Oregon LIHEAP regular heating assistance for program years 2025 to 2027. diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml index 744da5c97fc..49da87e4767 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml @@ -1,10 +1,14 @@ description: Oregon limits countable income to this share of state median income under the Low Income Home Energy Assistance Program. values: - 2025-10-09: 0.6 + 2024-10-01: 0.6 metadata: unit: /1 period: year label: Oregon LIHEAP SMI eligibility rate reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 57 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=57 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF page 77 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 71 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=71 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml index a52a093bf6f..56e76e20f0b 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml @@ -1,10 +1,14 @@ description: Oregon excludes earnings of people below this age under the Low Income Home Energy Assistance Program. values: - 2025-10-09: 18 + 2024-10-01: 18 metadata: unit: year period: year label: Oregon LIHEAP minimum age for counted earnings reference: + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 33, 41 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=33 - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 41, 53 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 42, 54 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=42 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml index 7ebb3edfa63..f4993e4b881 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml @@ -1,10 +1,14 @@ -description: Oregon counts annual withdrawn interest only when it exceeds this amount under the Low Income Home Energy Assistance Program. +description: Oregon disregards annual withdrawn interest at or below this amount under the Low Income Home Energy Assistance Program. values: - 2025-10-09: 200 + 2024-10-01: 200 metadata: unit: currency-USD period: year label: Oregon LIHEAP interest threshold reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=50 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 34, 40 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=34 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 43, 50 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=43 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 43, 51 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=43 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml index 7bc00d1b2b9..46f3f238dd0 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml @@ -1,14 +1,21 @@ -description: Oregon counts these existing earnings inputs, without further self-employment expense deductions under the Low Income Home Energy Assistance Program. +description: Oregon counts these sources as earned income under the Low Income Home Energy Assistance Program. +# Existing net business inputs are used without a further self-employment +# expense deduction. values: - 2025-10-09: + 2024-10-01: - employment_income - self_employment_income - sstb_self_employment_income + - partnership_s_corp_income - farm_operations_income metadata: unit: list period: year label: Oregon LIHEAP earned income sources reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 35, 41, 45, 53 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 29, 32, 33, 36, 41 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=29 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 35, 39, 41, 45, 53 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 36, 40, 42, 46, 54 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=36 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index 33820e43275..edf4341967e 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -1,6 +1,6 @@ description: Oregon counts these unearned income sources under the Low Income Home Energy Assistance Program. values: - 2025-10-09: + 2024-10-01: - rental_income - farm_rent_income - social_security @@ -11,6 +11,9 @@ values: - workers_compensation - veterans_benefits - pension_income + # Retirement pay counts as a pension. military_retirement_pay includes + # survivor payments, so report a survivor annuity in only one of the two. + - military_retirement_pay - survivor_benefits - disability_benefits - alimony_income @@ -24,5 +27,9 @@ metadata: period: year label: Oregon LIHEAP unearned income sources reference: + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=31 - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=37 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=38 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml index e3249b26fb7..dc1152a4dd1 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml @@ -1,114 +1,177 @@ -description: Oregon provides this annual heating payment for electricity under the Low Income Home Energy Assistance Program, by region, household size and income band. +description: Oregon provides this annual regular heating payment for electricity by region, household size and income band under the Low Income Home Energy Assistance Program. 1: 1: 1: + 2024-10-01: 380 2025-10-09: 465 + 2026-10-01: 475 2: + 2024-10-01: 295 2025-10-09: 360 + 2026-10-01: 370 3: + 2024-10-01: 250 2025-10-09: 300 + 2026-10-01: 310 4: - 2025-10-09: 250 + 2024-10-01: 250 2: 1: - 2025-10-09: 595 + 2024-10-01: 595 + 2026-10-01: 600 2: - 2025-10-09: 465 + 2024-10-01: 465 3: - 2025-10-09: 385 + 2024-10-01: 385 + 2026-10-01: 390 4: + 2024-10-01: 280 2025-10-09: 275 + 2026-10-01: 280 3: 1: + 2024-10-01: 610 2025-10-09: 650 + 2026-10-01: 655 2: + 2024-10-01: 475 2025-10-09: 505 + 2026-10-01: 510 3: + 2024-10-01: 395 2025-10-09: 420 + 2026-10-01: 425 4: + 2024-10-01: 285 2025-10-09: 300 + 2026-10-01: 305 4: 1: + 2024-10-01: 675 2025-10-09: 690 + 2026-10-01: 695 2: + 2024-10-01: 525 2025-10-09: 540 3: + 2024-10-01: 440 2025-10-09: 450 4: + 2024-10-01: 315 2025-10-09: 320 5: 1: + 2024-10-01: 710 2025-10-09: 725 2: + 2024-10-01: 555 2025-10-09: 565 3: + 2024-10-01: 460 2025-10-09: 470 4: + 2024-10-01: 330 2025-10-09: 340 6: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 595 2025-10-09: 590 3: + 2024-10-01: 495 2025-10-09: 490 4: + 2024-10-01: 355 2025-10-09: 350 2: 1: 1: + 2024-10-01: 415 2025-10-09: 515 + 2026-10-01: 510 2: + 2024-10-01: 320 2025-10-09: 400 3: + 2024-10-01: 270 2025-10-09: 335 + 2026-10-01: 330 4: - 2025-10-09: 250 + 2024-10-01: 250 2: 1: + 2024-10-01: 650 2025-10-09: 645 + 2026-10-01: 635 2: - 2025-10-09: 505 + 2024-10-01: 505 + 2026-10-01: 495 3: - 2025-10-09: 420 + 2024-10-01: 420 + 2026-10-01: 415 4: + 2024-10-01: 305 2025-10-09: 300 + 2026-10-01: 295 3: 1: + 2024-10-01: 665 2025-10-09: 700 + 2026-10-01: 690 2: + 2024-10-01: 515 2025-10-09: 545 + 2026-10-01: 535 3: + 2024-10-01: 430 2025-10-09: 455 + 2026-10-01: 445 4: + 2024-10-01: 310 2025-10-09: 325 + 2026-10-01: 320 4: 1: - 2025-10-09: 740 + 2024-10-01: 740 + 2026-10-01: 730 2: + 2024-10-01: 575 2025-10-09: 580 + 2026-10-01: 570 3: - 2025-10-09: 480 + 2024-10-01: 480 + 2026-10-01: 475 4: - 2025-10-09: 345 + 2024-10-01: 345 + 2026-10-01: 340 5: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: - 2025-10-09: 605 + 2024-10-01: 605 + 2026-10-01: 595 3: - 2025-10-09: 505 + 2024-10-01: 505 + 2026-10-01: 495 4: - 2025-10-09: 360 + 2024-10-01: 360 + 2026-10-01: 355 6: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 650 2025-10-09: 630 + 2026-10-01: 615 3: + 2024-10-01: 540 2025-10-09: 525 + 2026-10-01: 515 4: + 2024-10-01: 390 2025-10-09: 375 + 2026-10-01: 370 metadata: unit: currency-USD period: year @@ -118,5 +181,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 + href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml index 4d1794776ef..f659af982f5 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml @@ -1,65 +1,154 @@ -description: Oregon provides this annual heating payment for fuel oil under the Low Income Home Energy Assistance Program, by household size and income band. +description: Oregon provides this annual regular heating payment for fuel oil by region, household size and income band under the Low Income Home Energy Assistance Program. 1: 1: - 2025-10-09: 750 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 675 + 3: + 2024-10-01: 680 + 2025-10-09: 560 + 4: + 2024-10-01: 490 + 2025-10-09: 405 2: - 2025-10-09: 675 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 640 + 4: + 2024-10-01: 750 + 2025-10-09: 460 3: - 2025-10-09: 560 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 675 + 4: + 2024-10-01: 750 + 2025-10-09: 485 4: - 2025-10-09: 405 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 700 + 4: + 2024-10-01: 750 + 2025-10-09: 505 + 5: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 720 + 4: + 2024-10-01: 750 + 2025-10-09: 520 + 6: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 740 + 4: + 2024-10-01: 750 + 2025-10-09: 535 2: 1: - 2025-10-09: 750 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 675 + 3: + 2024-10-01: 745 + 2025-10-09: 560 + 4: + 2024-10-01: 535 + 2025-10-09: 405 2: - 2025-10-09: 750 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 640 + 4: + 2024-10-01: 750 + 2025-10-09: 460 3: - 2025-10-09: 640 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 675 + 4: + 2024-10-01: 750 + 2025-10-09: 485 4: - 2025-10-09: 460 -3: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 675 - 4: - 2025-10-09: 485 -4: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 700 - 4: - 2025-10-09: 505 -5: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 720 - 4: - 2025-10-09: 520 -6: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 740 - 4: - 2025-10-09: 535 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 700 + 4: + 2024-10-01: 750 + 2025-10-09: 505 + 5: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 720 + 4: + 2024-10-01: 750 + 2025-10-09: 520 + 6: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 740 + 4: + 2024-10-01: 750 + 2025-10-09: 535 metadata: unit: currency-USD period: year label: Oregon LIHEAP fuel oil heating payment breakdown: + - range(1, 3) - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 + href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml index e9a91c6e9e6..6075a074c7b 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml @@ -1,114 +1,182 @@ -description: Oregon provides this annual heating payment for natural gas under the Low Income Home Energy Assistance Program, by region, household size and income band. +description: Oregon provides this annual regular heating payment for natural gas by region, household size and income band under the Low Income Home Energy Assistance Program. 1: 1: 1: + 2024-10-01: 500 2025-10-09: 670 + 2026-10-01: 660 2: + 2024-10-01: 390 2025-10-09: 520 + 2026-10-01: 515 3: + 2024-10-01: 325 2025-10-09: 435 + 2026-10-01: 430 4: + 2024-10-01: 250 2025-10-09: 310 2: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 615 2025-10-09: 605 + 2026-10-01: 600 3: + 2024-10-01: 510 2025-10-09: 505 + 2026-10-01: 500 4: + 2024-10-01: 365 2025-10-09: 360 3: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 625 2025-10-09: 640 + 2026-10-01: 635 3: + 2024-10-01: 520 2025-10-09: 535 + 2026-10-01: 530 4: + 2024-10-01: 375 2025-10-09: 385 + 2026-10-01: 380 4: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 695 2025-10-09: 670 + 2026-10-01: 665 3: + 2024-10-01: 580 2025-10-09: 555 4: + 2024-10-01: 415 2025-10-09: 400 5: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 730 2025-10-09: 690 3: + 2024-10-01: 610 2025-10-09: 575 4: + 2024-10-01: 435 2025-10-09: 415 + 2026-10-01: 410 6: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 750 2025-10-09: 710 3: + 2024-10-01: 650 2025-10-09: 590 4: + 2024-10-01: 470 2025-10-09: 425 2: 1: 1: + 2024-10-01: 545 2025-10-09: 560 + 2026-10-01: 565 2: + 2024-10-01: 425 2025-10-09: 435 + 2026-10-01: 440 3: + 2024-10-01: 355 2025-10-09: 365 4: + 2024-10-01: 255 2025-10-09: 260 + 2026-10-01: 265 2: 1: + 2024-10-01: 750 2025-10-09: 670 + 2026-10-01: 675 2: + 2024-10-01: 670 2025-10-09: 520 + 2026-10-01: 525 3: + 2024-10-01: 555 2025-10-09: 435 + 2026-10-01: 440 4: + 2024-10-01: 400 2025-10-09: 310 + 2026-10-01: 315 3: 1: + 2024-10-01: 750 2025-10-09: 715 + 2026-10-01: 725 2: + 2024-10-01: 680 2025-10-09: 555 + 2026-10-01: 565 3: + 2024-10-01: 570 2025-10-09: 465 + 2026-10-01: 470 4: + 2024-10-01: 410 2025-10-09: 335 4: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 750 2025-10-09: 585 + 2026-10-01: 590 3: + 2024-10-01: 630 2025-10-09: 485 + 2026-10-01: 490 4: + 2024-10-01: 455 2025-10-09: 350 + 2026-10-01: 355 5: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 750 2025-10-09: 605 + 2026-10-01: 615 3: + 2024-10-01: 665 2025-10-09: 505 + 2026-10-01: 510 4: + 2024-10-01: 475 2025-10-09: 365 6: 1: - 2025-10-09: 750 + 2024-10-01: 750 2: + 2024-10-01: 750 2025-10-09: 630 + 2026-10-01: 635 3: + 2024-10-01: 710 2025-10-09: 525 + 2026-10-01: 530 4: + 2024-10-01: 510 2025-10-09: 375 + 2026-10-01: 380 metadata: unit: currency-USD period: year @@ -118,5 +186,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 + href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml index 4c9bb292a06..3beb41363e5 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml @@ -1,65 +1,162 @@ -description: Oregon provides this annual heating payment for propane under the Low Income Home Energy Assistance Program, by household size and income band. +description: Oregon provides this annual regular heating payment for propane by region, household size and income band under the Low Income Home Energy Assistance Program. 1: 1: - 2025-10-09: 715 + 1: + 2024-10-01: 750 + 2025-10-09: 715 + 2: + 2024-10-01: 715 + 2025-10-09: 560 + 3: + 2024-10-01: 595 + 2025-10-09: 465 + 4: + 2024-10-01: 425 + 2025-10-09: 335 2: - 2025-10-09: 560 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 655 + 3: + 2024-10-01: 750 + 2025-10-09: 545 + 4: + 2024-10-01: 670 + 2025-10-09: 390 3: - 2025-10-09: 465 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 695 + 3: + 2024-10-01: 750 + 2025-10-09: 580 + 4: + 2024-10-01: 685 + 2025-10-09: 415 4: - 2025-10-09: 335 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 725 + 3: + 2024-10-01: 750 + 2025-10-09: 605 + 4: + 2024-10-01: 750 + 2025-10-09: 435 + 5: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 625 + 4: + 2024-10-01: 750 + 2025-10-09: 450 + 6: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 645 + 4: + 2024-10-01: 750 + 2025-10-09: 460 2: 1: - 2025-10-09: 750 + 1: + 2024-10-01: 750 + 2025-10-09: 715 + 2: + 2024-10-01: 750 + 2025-10-09: 560 + 3: + 2024-10-01: 650 + 2025-10-09: 465 + 4: + 2024-10-01: 465 + 2025-10-09: 335 2: - 2025-10-09: 655 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 655 + 3: + 2024-10-01: 750 + 2025-10-09: 545 + 4: + 2024-10-01: 730 + 2025-10-09: 390 3: - 2025-10-09: 545 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 695 + 3: + 2024-10-01: 750 + 2025-10-09: 580 + 4: + 2024-10-01: 745 + 2025-10-09: 415 4: - 2025-10-09: 390 -3: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 695 - 3: - 2025-10-09: 580 - 4: - 2025-10-09: 415 -4: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 725 - 3: - 2025-10-09: 605 - 4: - 2025-10-09: 435 -5: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 625 - 4: - 2025-10-09: 450 -6: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 645 - 4: - 2025-10-09: 460 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 725 + 3: + 2024-10-01: 750 + 2025-10-09: 605 + 4: + 2024-10-01: 750 + 2025-10-09: 435 + 5: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 625 + 4: + 2024-10-01: 750 + 2025-10-09: 450 + 6: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 645 + 4: + 2024-10-01: 750 + 2025-10-09: 460 metadata: unit: currency-USD period: year label: Oregon LIHEAP propane heating payment breakdown: + - range(1, 3) - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 + href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml index 83d5daa081f..6b91c314f84 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml @@ -1,65 +1,162 @@ -description: Oregon provides this annual heating payment for wood under the Low Income Home Energy Assistance Program, by household size and income band. +description: Oregon provides this annual regular heating payment for wood by region, household size and income band under the Low Income Home Energy Assistance Program. 1: 1: - 2025-10-09: 715 + 1: + 2024-10-01: 750 + 2025-10-09: 715 + 2: + 2024-10-01: 685 + 2025-10-09: 560 + 3: + 2024-10-01: 570 + 2025-10-09: 465 + 4: + 2024-10-01: 410 + 2025-10-09: 350 2: - 2025-10-09: 560 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 655 + 3: + 2024-10-01: 750 + 2025-10-09: 545 + 4: + 2024-10-01: 645 + 2025-10-09: 390 3: - 2025-10-09: 465 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 695 + 3: + 2024-10-01: 750 + 2025-10-09: 580 + 4: + 2024-10-01: 660 + 2025-10-09: 415 4: - 2025-10-09: 350 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 725 + 3: + 2024-10-01: 750 + 2025-10-09: 605 + 4: + 2024-10-01: 730 + 2025-10-09: 435 + 5: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 625 + 4: + 2024-10-01: 750 + 2025-10-09: 450 + 6: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 645 + 4: + 2024-10-01: 750 + 2025-10-09: 460 2: 1: - 2025-10-09: 750 + 1: + 2024-10-01: 750 + 2025-10-09: 715 + 2: + 2024-10-01: 750 + 2025-10-09: 560 + 3: + 2024-10-01: 625 + 2025-10-09: 465 + 4: + 2024-10-01: 450 + 2025-10-09: 350 2: - 2025-10-09: 655 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 655 + 3: + 2024-10-01: 750 + 2025-10-09: 545 + 4: + 2024-10-01: 705 + 2025-10-09: 390 3: - 2025-10-09: 545 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 695 + 3: + 2024-10-01: 750 + 2025-10-09: 580 + 4: + 2024-10-01: 720 + 2025-10-09: 415 4: - 2025-10-09: 390 -3: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 695 - 3: - 2025-10-09: 580 - 4: - 2025-10-09: 415 -4: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 725 - 3: - 2025-10-09: 605 - 4: - 2025-10-09: 435 -5: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 625 - 4: - 2025-10-09: 450 -6: - 1: - 2025-10-09: 750 - 2: - 2025-10-09: 750 - 3: - 2025-10-09: 645 - 4: - 2025-10-09: 460 + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 2025-10-09: 725 + 3: + 2024-10-01: 750 + 2025-10-09: 605 + 4: + 2024-10-01: 750 + 2025-10-09: 435 + 5: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 625 + 4: + 2024-10-01: 750 + 2025-10-09: 450 + 6: + 1: + 2024-10-01: 750 + 2: + 2024-10-01: 750 + 3: + 2024-10-01: 750 + 2025-10-09: 645 + 4: + 2024-10-01: 750 + 2025-10-09: 460 metadata: unit: currency-USD period: year label: Oregon LIHEAP wood heating payment breakdown: + - range(1, 3) - range(1, 7) - range(1, 5) reference: - - title: PY2026 manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 + href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml index b5656024cc1..a5ecc359227 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml @@ -1,81 +1,153 @@ # Printed bounds do not follow one reproducible rounding rule. The last band # extends through the separate eligibility limit, including its $1 discrepancy. -description: Oregon uses these inclusive annual income band upper bounds under the Low Income Home Energy Assistance Program. +description: Oregon divides countable income into payment bands with these inclusive annual upper bounds by household size under the Low Income Home Energy Assistance Program. 1: 1: - 2025-10-09: 9597 + 2024-10-01: 9_203 + 2025-10-09: 9_597 + 2026-10-01: 10_082 2: - 2025-10-09: 12549 + 2024-10-01: 12_035 + 2025-10-09: 12_549 + 2026-10-01: 13_184 3: - 2025-10-09: 15502 + 2024-10-01: 14_866 + 2025-10-09: 15_502 + 2026-10-01: 16_286 4: - 2025-10-09: 18454 + 2024-10-01: 17_698 + 2025-10-09: 18_454 + 2026-10-01: 19_388 5: - 2025-10-09: 21407 + 2024-10-01: 20_530 + 2025-10-09: 21_407 + 2026-10-01: 22_490 6: - 2025-10-09: 24360 + 2024-10-01: 23_361 + 2025-10-09: 24_360 + 2026-10-01: 25_592 7: - 2025-10-09: 24913 + 2024-10-01: 23_892 + 2025-10-09: 24_913 + 2026-10-01: 26_174 8: - 2025-10-09: 25467 + 2024-10-01: 24_423 + 2025-10-09: 25_467 + 2026-10-01: 26_755 9: - 2025-10-09: 26020 + 2024-10-01: 24_954 + 2025-10-09: 26_020 + 2026-10-01: 27_337 10: - 2025-10-09: 26574 + 2024-10-01: 25_485 + 2025-10-09: 26_574 + 2026-10-01: 27_918 11: - 2025-10-09: 27128 + 2024-10-01: 26_016 + 2025-10-09: 27_128 + 2026-10-01: 28_500 12: - 2025-10-09: 27681 + 2024-10-01: 26_547 + 2025-10-09: 27_681 + 2026-10-01: 29_082 2: 1: - 2025-10-09: 19193 + 2024-10-01: 18_406 + 2025-10-09: 19_193 + 2026-10-01: 20_163 2: - 2025-10-09: 25098 + 2024-10-01: 24_069 + 2025-10-09: 25_098 + 2026-10-01: 26_367 3: - 2025-10-09: 31003 + 2024-10-01: 29_732 + 2025-10-09: 31_003 + 2026-10-01: 32_571 4: - 2025-10-09: 36908 + 2024-10-01: 35_395 + 2025-10-09: 36_908 + 2026-10-01: 38_775 5: - 2025-10-09: 42814 + 2024-10-01: 41_059 + 2025-10-09: 42_814 + 2026-10-01: 44_979 6: - 2025-10-09: 48719 + 2024-10-01: 46_722 + 2025-10-09: 48_719 + 2026-10-01: 51_183 7: - 2025-10-09: 49826 + 2024-10-01: 47_784 + 2025-10-09: 49_826 + 2026-10-01: 52_347 8: - 2025-10-09: 50933 + 2024-10-01: 48_845 + 2025-10-09: 50_933 + 2026-10-01: 53_510 9: - 2025-10-09: 52040 + 2024-10-01: 49_907 + 2025-10-09: 52_040 + 2026-10-01: 54_673 10: - 2025-10-09: 53148 + 2024-10-01: 50_969 + 2025-10-09: 53_148 + 2026-10-01: 55_836 11: - 2025-10-09: 54255 + 2024-10-01: 52_031 + 2025-10-09: 54_255 + 2026-10-01: 57_000 12: - 2025-10-09: 55362 + 2024-10-01: 53_093 + 2025-10-09: 55_362 + 2026-10-01: 58_163 3: 1: - 2025-10-09: 28789 + 2024-10-01: 27_609 + 2025-10-09: 28_789 + 2026-10-01: 30_245 2: - 2025-10-09: 37646 + 2024-10-01: 36_103 + 2025-10-09: 37_646 + 2026-10-01: 39_551 3: - 2025-10-09: 46504 + 2024-10-01: 44_598 + 2025-10-09: 46_504 + 2026-10-01: 48_857 4: - 2025-10-09: 55362 + 2024-10-01: 53_093 + 2025-10-09: 55_362 + 2026-10-01: 58_163 5: - 2025-10-09: 64220 + 2024-10-01: 61_588 + 2025-10-09: 64_220 + 2026-10-01: 67_469 6: - 2025-10-09: 73078 + 2024-10-01: 70_082 + 2025-10-09: 73_078 + 2026-10-01: 76_775 7: - 2025-10-09: 74739 + 2024-10-01: 71_675 + 2025-10-09: 74_739 + 2026-10-01: 78_520 8: - 2025-10-09: 76400 + 2024-10-01: 73_268 + 2025-10-09: 76_400 + 2026-10-01: 80_265 9: - 2025-10-09: 78060 + 2024-10-01: 74_861 + 2025-10-09: 78_060 + 2026-10-01: 82_010 10: - 2025-10-09: 79721 + 2024-10-01: 76_453 + 2025-10-09: 79_721 + 2026-10-01: 83_754 11: - 2025-10-09: 81382 + 2024-10-01: 78_046 + 2025-10-09: 81_382 + 2026-10-01: 85_499 12: - 2025-10-09: 83043 + 2024-10-01: 79_639 + 2025-10-09: 83_043 + 2026-10-01: 87_244 metadata: unit: currency-USD period: year @@ -84,5 +156,11 @@ metadata: - range(1, 4) - range(1, 13) reference: - - title: PY2026 manual, standard payment income bands, PDF pages 78, 79, 80, 81 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 + href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml index 05271d2cc72..23b1c035fd4 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml @@ -1,10 +1,14 @@ -description: Oregon publishes its standard payment matrix through this household size under the Low Income Home Energy Assistance Program. +description: Oregon limits the published standard payment matrix to this household size under the Low Income Home Energy Assistance Program. values: - 2025-10-09: 12 + 2024-10-01: 12 metadata: unit: person period: year label: Oregon LIHEAP largest published household size reference: + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 79, 80, 81 - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=79 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=73 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml index 0da1b523007..e892fe0ac63 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml @@ -1,10 +1,14 @@ -description: Oregon uses the same payment amounts for households at or above this size under the Low Income Home Energy Assistance Program. +description: Oregon provides the same payment amounts to households at or above this size under the Low Income Home Energy Assistance Program. values: - 2025-10-09: 6 + 2024-10-01: 6 metadata: unit: person period: year label: Oregon LIHEAP maximum payment size group reference: + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 58, 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 79, 80, 81 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 72, 73, 74, 75 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml index 1a9316591bb..87d24c0fa44 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml @@ -1,6 +1,6 @@ -description: Oregon assigns these counties to payment region 1 under the Low Income Home Energy Assistance Program. +description: Oregon includes these counties in payment region 1 under the Low Income Home Energy Assistance Program. values: - 2025-10-09: + 2024-10-01: - BENTON_COUNTY_OR - CLACKAMAS_COUNTY_OR - CLATSOP_COUNTY_OR @@ -24,5 +24,9 @@ metadata: period: year label: Oregon LIHEAP region 1 counties reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 80 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 58 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF page 78 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 72 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml index b9bcb510c61..0ee12546515 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml @@ -1,6 +1,6 @@ -description: Oregon assigns these counties to payment region 2 under the Low Income Home Energy Assistance Program. +description: Oregon includes these counties in payment region 2 under the Low Income Home Energy Assistance Program. values: - 2025-10-09: + 2024-10-01: - BAKER_COUNTY_OR - CROOK_COUNTY_OR - DESCHUTES_COUNTY_OR @@ -24,5 +24,9 @@ metadata: period: year label: Oregon LIHEAP region 2 counties reference: - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 80 - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF page 80 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 74 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml index 0d66525132b..193a732b03c 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml @@ -1,10 +1,14 @@ -description: Oregon pays this share of the standard payment for a separate roomer, boarder or owner application under the Low Income Home Energy Assistance Program. +description: Oregon provides this share of the standard payment to a roomer, boarder or owner who applies separately under the Low Income Home Energy Assistance Program. values: - 2025-10-09: 0.5 + 2024-10-01: 0.5 metadata: unit: /1 period: year label: Oregon LIHEAP roomer and boarder payment share reference: + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 47 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=47 - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 61, 62 - href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=62 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 59 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=59 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index c5dc639c219..8410885a371 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -873,8 +873,8 @@ programs: full_name: Oregon Low Income Home Energy Assistance Program variable: or_liheap parameter_prefix: gov.states.or.ohcs.liheap - verified_years: "2026" - notes: Regular heating income, county/fuel schedules and housing treatment. Some income, residence and discretionary-payment rules remain partial; earlier years are unverified estimates. + verified_years: "2025-2027" + notes: PY2025-PY2027 regular heating only, with the two county regions, five fuel columns and the roomer half payment. Crisis, cooling, Fuel Payment, equipment and OEAP assistance are out of scope. - state: TX status: partial name: Texas CEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml index c56a9905aea..d1b3ed8f290 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.yaml @@ -2,27 +2,29 @@ # Intake, Operations and Policy Manual (energy burden on page 61 and in the # table on pages 93-94, income limits on page 77): # https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=93 -- name: Case 1, energy burden with heat paid directly, heat included in rent and subsidized housing. +# OAR 813-200-0020(1)(b) makes "a demonstrated energy burden" a condition of +# eligibility: +# https://www.law.cornell.edu/regulations/oregon/Or-Admin-Code-SS-813-200-0020 +- name: Case 1, energy burden with heat paid directly, heat included in rent, subsidized housing and public housing. period: 2026 input: - state_code: [OR, OR, OR, OR, OR, OR] - age: [38, 38, 38, 38, 38, 38] - immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN] + state_code: [OR, OR, OR, OR, OR, OR, OR] + age: [38, 38, 38, 38, 38, 38, 38] # About 30 hours a week near the Portland-metro minimum wage ($16.80 an # hour from July 2026). - employment_income: [26_000, 26_000, 26_000, 26_000, 26_000, 26_000] - ssi: [0, 0, 0, 0, 0, 0] - tanf: [0, 0, 0, 0, 0, 0] - snap: [0, 0, 0, 0, 0, 0] - heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + employment_income: [26_000, 26_000, 26_000, 26_000, 26_000, 26_000, 26_000] + ssi: [0, 0, 0, 0, 0, 0, 0] + tanf: [0, 0, 0, 0, 0, 0, 0] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] # About $125 a month where the household pays its own electric bill. - pre_subsidy_electricity_expense: [0, 0, 0, 1_500, 1_500, 1_500] - heat_expense_included_in_rent: [false, true, true, false, false, true] - receives_housing_assistance: [false, false, true, true, false, true] + pre_subsidy_electricity_expense: [0, 0, 0, 1_500, 1_500, 1_500, 0] + heat_expense_included_in_rent: [false, true, true, false, false, true, true] + receives_housing_assistance: [false, false, true, true, false, true, false] + is_in_public_housing: [false, false, false, false, false, false, true] output: # Wages of 26,000 are within the size 1 limit of $38,385 (page 77) for # every household, so eligibility turns on the energy burden table - # (page 93): + # (page 93) and OAR 813-200-0020(1)(b): # 1. no heating bill and heat not in rent: no energy burden to # demonstrate ("All households must demonstrate an energy burden", # page 61), ineligible; @@ -35,5 +37,9 @@ # 5. "Applicant pays a vendor directly for utilities": energy burden # "Yes", eligible; # 6. subsidized housing with heat included in rent stays ineligible - # (page 61) even though the household pays a separate electric bill. - or_liheap_eligible: [false, true, false, true, true, false] + # (page 61 and row 3 of page 93) even though the household pays a + # separate electric bill: the "pays a vendor directly" row is read + # as the heating bill, so a non-heating bill creates no energy burden; + # 7. public housing is subsidized housing, so heat included in rent is + # again "No", ineligible. + or_liheap_eligible: [false, true, false, true, true, false, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml index 4ce9f54db73..c09732a89f9 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml @@ -1,14 +1,40 @@ -# Source for the expected values in this file: FY2026 Oregon Energy Assistance -# Intake, Operations and Policy Manual, page 77, "60% of State Median Income by -# Household Size", Annual Gross Income column: +# Sources for the expected values in this file, "60% of State Median Income by +# Household Size", Annual Gross Income column, in the Oregon Energy Assistance +# Intake, Operations and Policy Manuals: +# FY2026, page 77: # https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 -- name: Case 1, published annual income limits for the odd household sizes 1 to 11. +# PY2025, page 57: +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=57 +# PY2027, page 71: +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=71 +- name: Case 1, published FY2026 annual income limits for the odd household sizes 1 to 11. period: 2026 input: state_code: [OR, OR, OR, OR, OR, OR] spm_unit_size: [1, 3, 5, 7, 9, 11] output: - # Page 77: size 1 $38,385, size 3 $62,006, size 5 $85,627, size 7 $99,652, - # size 9 $104,081, size 11 $108,510. The even sizes are exercised through - # the payment matrix sweeps in or_liheap.yaml. + # FY2026 page 77: size 1 $38,385, size 3 $62,006, size 5 $85,627, size 7 + # $99,652, size 9 $104,081, size 11 $108,510. or_liheap_income_limit: [38_385, 62_006, 85_627, 99_652, 104_081, 108_510] + +- name: Case 2, published PY2025 annual income limits for the odd household sizes 1 to 11. + period: 2025 + input: + state_code: [OR, OR, OR, OR, OR, OR] + spm_unit_size: [1, 3, 5, 7, 9, 11] + output: + # PY2025 page 57: size 1 $36,811, size 3 $59,464, size 5 $82,117, size 7 + # $95,567, size 9 $99,814, size 11 $104,062. + or_liheap_income_limit: [36_811, 59_464, 82_117, 95_567, 99_814, 104_062] + +- name: Case 3, published PY2027 annual income limits at the sizes whose 60 percent product is a whole dollar. + period: 2027 + input: + state_code: [OR, OR, OR, OR, OR, OR] + spm_unit_size: [2, 3, 6, 8, 10, 12] + output: + # PY2027 page 71: size 2 $52,734, size 3 $65,142, size 6 $102,366, size 8 + # $107,019, size 10 $111,672, size 12 $116,325. The FY2027 four-person + # median is $129,250, so these products are exact dollars (129,250 x 0.68 + # x 0.6 = 52,734) and a float32 ceiling would add $1 to each. + or_liheap_income_limit: [52_734, 65_142, 102_366, 107_019, 111_672, 116_325] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml index 370b1852ace..362feb2b23c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_earned_income.yaml @@ -1,9 +1,9 @@ # Page numbers in the comments are those of the FY2026 Oregon Energy Assistance # Intake, Operations and Policy Manual (earned income on page 39, -# self-employment income on page 45, earnings of minors and of high-school -# students on pages 41 and 53): +# self-employment and other business income on page 45, earnings of minors +# and of high-school students on pages 41 and 53): # https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41 -- name: Case 1, earnings of a minor and of a high-school student are excluded and a business loss does not offset wages. +- name: Case 1, earnings of a minor and of a high-school student are excluded, an 18-year-old out of school counts, and a business loss does not offset wages. period: 2026 input: people: @@ -28,12 +28,18 @@ self_employment_income: -5_000 sstb_self_employment_income: 500 farm_operations_income: 600 + person5: + age: 18 + # About 15 hours a week near the standard minimum wage ($15.55 an hour + # from July 2026), not enrolled in high school. + employment_income: 2_500 + partnership_s_corp_income: 700 spm_units: spm_unit: - members: [person1, person2, person3, person4] + members: [person1, person2, person3, person4, person5] households: household: - members: [person1, person2, person3, person4] + members: [person1, person2, person3, person4, person5] state_code: OR output: # person1: "Income Earned by minors", household members under eighteen, @@ -47,4 +53,8 @@ # farm 600 (page 45) = 5,100. The 5,000 business loss is floored at zero, # a modeling convention: the manual does not say that a current-period # loss offsets other earnings. - or_liheap_countable_earned_income: [0, 0, 4_200, 5_100] + # person5: earnings of a member "eighteen (18) and over" count unless the + # member is enrolled in high school (pages 41 and 53): wages 2,500 (page + # 39) + partnership and S-corporation business income 700 (page 45) = + # 3,200. + or_liheap_countable_earned_income: [0, 0, 4_200, 5_100, 3_200] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml index e83ff0530c8..57c5e877c4f 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -3,6 +3,9 @@ # pages 37-48, proof of income on pages 49-51, private disability insurance # examples on pages 55-56): # https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=50 +# General assistance is a checked source in section 1.9 of the FFY2026 state +# plan, page 6: +# https://liheapch.acf.gov/docs/2026/state-plans/OR_Plan_2026.pdf#page=6 - name: Case 1, interest counts only above $200 and every listed unearned source counts. period: 2026 input: @@ -15,7 +18,6 @@ rental_income: [300, 300] social_security: [1_000, 1_000] railroad_benefits: [120, 120] - ssi: [0, 0] tanf: [500, 500] pension_income: [200, 200] unemployment_compensation: [150, 150] @@ -25,8 +27,10 @@ veterans_benefits: [50, 50] alimony_income: [25, 25] strike_benefits: [10, 10] - general_assistance: [0, 0] - estate_income: [0, 0] + ssi: [600, 600] + general_assistance: [80, 80] + estate_income: [40, 40] + military_retirement_pay: [90, 90] output: # Each source is marked "Considered Income? Yes" in the chart: dividends # 100 (page 39) + rental income 300 (page 44) + Social Security 1,000 @@ -34,10 +38,13 @@ # pensions 200 (page 44) + unemployment insurance 150 (page 48) + child # support 250 (page 38) + workers compensation 100 (page 49) + private # disability insurance 75 (page 39) + veterans benefits 50 (page 48) + - # alimony 25 (page 37) + strike benefits 10 (page 47) = 2,880. + # alimony 25 (page 37) + strike benefits 10 (page 47) + SSI 600 (page 47) + # + general assistance 80 (state plan section 1.9) + trust and estate + # income 40 (page 48) + military retirement pay 90, a retirement payment + # (page 44) = 3,690. # Interest is counted "only if amount is over $200" (pages 43 and 50): - # $200 adds nothing, $201 is counted in full, 2,880 + 201 = 3,081. - or_liheap_countable_income: [2_880, 3_081] + # $200 adds nothing, $201 is counted in full, 3,690 + 201 = 3,891. + or_liheap_countable_income: [3_690, 3_891] - name: Case 2, the manual's private disability insurance examples count the insurer's payment plus Social Security once. period: 2026 @@ -75,3 +82,46 @@ # actually received: the first household does not take up its $1,200 # entitlement, 0; the second receives it, 1,200. or_liheap_countable_income: [0, 1_200] + +- name: Case 4, rental and estate losses are floored at zero like business losses. + period: 2026 + input: + state_code: [OR, OR] + or_liheap_countable_earned_income: [45_000, 45_000] + rental_income: [-8_000, 2_000] + estate_income: [-1_000, 500] + ssi: [0, 0] + tanf: [0, 0] + output: + # Landlords complete the self-employment form (page 35) and a loss in one + # source does not offset other income, so the first household's $8,000 + # rental loss and $1,000 trust loss count as 0: 45,000. The second + # household counts both: 45,000 + rental 2,000 (page 44) + trust and + # estate income 500 (page 48) = 47,500. + or_liheap_countable_income: [45_000, 47_500] + +- name: Case 5, the $200 interest test applies to each member separately. + period: 2026 + input: + people: + person1: + age: 40 + interest_income: 150 + ssi: 0 + person2: + age: 38 + interest_income: 150 + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + tanf: 0 + households: + household: + members: [person1, person2] + state_code: OR + output: + # Each member's $150 of interest is at or below $200 (pages 43 and 50), so + # neither is counted although the household's interest totals $300: a + # per-member reading, which the manual does not specify. + or_liheap_countable_income: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml index 61f54af6e98..cda0fb1bc1c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -5,8 +5,8 @@ # the comment above Case 19. # # Cases 1 to 10 sweep the published payment matrices for the even household -# sizes 2, 4, 6, 8, 10 and 12 (the odd sizes are covered through the -# income-limit test). Each size is tested at the first dollar of its four +# sizes 2, 4, 6, 8, 10 and 12; Cases 12 and 21 test the odd sizes 1, 3 and 5 +# at their printed band tops. Each size is tested at the first dollar of its four # printed income rows, in this order: # size 2: "$0", "$12,550", "$25,099", "$37,647" (pages 78 and 80) # size 4: "$0", "$18,455", "$36,909", "$55,363" (pages 78 and 80) @@ -282,12 +282,14 @@ # energy burden to demonstrate (page 61). or_liheap_eligible: [true, true, true, true, true, true, true, true, true, true, false] # Region 2, size 1, "$0 $9,597" (page 80): Electricity $515, Heating Oil - # $750, Liquid Gas $715, Natural Gas $560, Wood/Pellets $715. Kerosene, - # coal, solar and other fuels have no column in the matrix, $0. An - # unspecified fuel pays $0 because heating_type is a required input and - # the amount depends on the fuel, even with heat included in rent. No - # heating, ineligible, $0. - or_liheap: [515, 750, 715, 560, 715, 0, 0, 0, 0, 0, 0] + # $750, Liquid Gas $715, Natural Gas $560, Wood/Pellets $715. The program + # is fuel blind (page 5), so kerosene is paid from the Heating Oil column, + # $750, and a grid-tied solar home from the Electricity column, $515. Coal + # and other fuels have no matrix column, $0, a coverage gap rather than a + # denial. An unspecified fuel pays $0 even with heat included in rent + # because the amount depends on the fuel column; the UNSPECIFIED default + # is tracked in issue 9754. No heating, ineligible, $0. + or_liheap: [515, 750, 715, 560, 715, 750, 0, 515, 0, 0, 0] - name: Case 14, a roomer applying separately with heat in rent receives half the regular payment. period: 2026 @@ -295,13 +297,11 @@ state_code: OR county: MULTNOMAH_COUNTY_OR age: 28 - immigration_status: CITIZEN # About 10 hours a week near the Portland-metro minimum wage ($16.80 an # hour from July 2026). employment_income: 8_600 ssi: 0 tanf: 0 - snap: 0 # The rented room is heated by the building's electric heat. heating_type: ELECTRICITY heat_expense_included_in_rent: true @@ -327,11 +327,9 @@ county: [UNKNOWN, MULTNOMAH_COUNTY_OR] spm_unit_size: [1, 13] age: [40, 40] - immigration_status: [CITIZEN, CITIZEN] employment_income: [30_000, 40_000] ssi: [0, 0] tanf: [0, 0] - snap: [0, 0] heating_type: [ELECTRICITY, ELECTRICITY] # About $125 a month for electric heat. pre_subsidy_electricity_expense: [1_500, 1_500] @@ -342,10 +340,10 @@ # additional member (printed as $2,115, while the table's own steps above # size 6 are $2,214), so the limit is about $112,900 either way. or_liheap_eligible: [true, true] - # Without a county neither region list (pages 78 and 80) applies, and - # the matrices end at size 12 (pages 79 and 81), so the model has no - # published amount to pay: $0 in both cases, a coverage gap rather than - # a denial. + # A county reported as UNKNOWN is in neither region list (pages 78 and + # 80), and the matrices end at size 12 (pages 79 and 81), so the model has + # no published amount to pay: $0 in both cases, a coverage gap rather than + # a denial. A household that omits the county input is Case 22. or_liheap: [0, 0] - name: Case 16, a small gas bill does not cap the standard payment. @@ -354,13 +352,11 @@ state_code: OR county: MULTNOMAH_COUNTY_OR age: 35 - immigration_status: CITIZEN # About 9 hours a week near the Portland-metro minimum wage ($16.80 an # hour from July 2026). employment_income: 8_000 ssi: 0 tanf: 0 - snap: 0 heating_type: NATURAL_GAS # About $25 a month of gas in a small, well-insulated apartment. gas_expense: 300 @@ -382,11 +378,9 @@ input: state_code: WA age: 40 - immigration_status: CITIZEN employment_income: 30_000 ssi: 0 tanf: 0 - snap: 0 heating_type: NATURAL_GAS # About $80 a month for gas heat. gas_expense: 960 @@ -402,13 +396,11 @@ people: person1: age: 30 - immigration_status: CITIZEN # Full-time work near the Portland-metro minimum wage ($16.80 an hour from July 2026). employment_income: 34_500 ssi: 0 person2: age: 45 - immigration_status: CITIZEN employment_income: 30_000 ssi: 0 spm_units: @@ -418,14 +410,12 @@ # About $80 a month for gas heat. gas_expense: 960 tanf: 0 - snap: 0 spm_unit2: members: [person2] heating_type: ELECTRICITY # About $125 a month for electric heat. pre_subsidy_electricity_expense: 1_500 tanf: 0 - snap: 0 households: household1: members: [person1] @@ -457,13 +447,11 @@ state_code: OR county: MULTNOMAH_COUNTY_OR age: 45 - immigration_status: CITIZEN employment_income: 30_000 farm_rent_income: 10_000 rental_income: 0 ssi: 0 tanf: 0 - snap: 0 heating_type: NATURAL_GAS gas_expense: 1_200 output: @@ -479,13 +467,11 @@ state_code: OR county: MULTNOMAH_COUNTY_OR age: 45 - immigration_status: CITIZEN employment_income: 30_000 survivor_benefits: 10_000 pension_income: 0 ssi: 0 tanf: 0 - snap: 0 heating_type: NATURAL_GAS gas_expense: 1_200 output: @@ -494,3 +480,96 @@ or_liheap_income_limit: 38_385 or_liheap_eligible: false or_liheap: 0 + +- name: Case 21, odd household sizes change band at the printed tops, and wood differs from propane only in the last size 1 row. + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR] + spm_unit_size: [3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 1, 1] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, PROPANE, WOOD] + # About $80 a month for gas heat, $150 a month for propane heat and three + # cords of firewood a year. + gas_expense: [960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, 0, 0] + bottled_gas_expense: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1_800, 0] + wood_expense: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 900] + # Size 3 rows (page 78): "$0 $15,502", "$15,503 $31,003", "$31,004 $46,504", + # "$46,505 $62,006"; size 5 rows (page 78): "$0 $21,407", "$21,408 $42,814", + # "$42,815 $64,220", "$64,221 $85,627". Each printed top and the next + # dollar, then size 1 at $30,000 in its last row "$28,790 $38,385". + or_liheap_countable_income: [15_502, 15_503, 31_003, 31_004, 46_504, 46_505, 21_407, 21_408, 42_814, 42_815, 64_220, 64_221, 30_000, 30_000] + output: + or_liheap_income_band: [1, 2, 2, 3, 3, 4, 1, 2, 2, 3, 3, 4, 4, 4] + # Region 1 Natural Gas column (page 78): size 3 $750, $640, $535, $385; + # size 5 $750, $690, $575, $415. Size 1, last row (page 78): Liquid Gas + # $335, Wood/Pellets $350. + or_liheap: [750, 640, 640, 535, 535, 385, 750, 690, 690, 575, 575, 415, 335, 350] + +- name: Case 22, a household without a county input is placed in Baker County and paid Region 2 rates. + period: 2026 + input: + state_code: [OR, OR] + spm_unit_size: [1, 1] + heating_type: [ELECTRICITY, NATURAL_GAS] + # About $125 a month for electric heat and $80 a month for gas heat. + pre_subsidy_electricity_expense: [1_500, 0] + gas_expense: [0, 960] + or_liheap_countable_income: [0, 0] + output: + # With no county input the model falls back to the first Oregon county in + # the enum, Baker County, which is in the Region 2 list (page 80). + or_liheap_region: [2, 2] + # Region 2, size 1, "$0 $9,597" (page 80): Electricity $515, Natural Gas + # $560. + or_liheap: [515, 560] + +# PY2025 manual (effective October 1, 2024), income limits on PDF page 57 and +# matrices on pages 58-59: +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 +- name: Case 23, program year 2025 pays the PY2025 matrix, whose heating oil column differs by region. + period: 2025 + input: + state_code: [OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1] + heating_type: [ELECTRICITY, NATURAL_GAS, FUEL_OIL, FUEL_OIL] + # About $125 a month for electric heat, $80 a month for gas heat and 600 + # gallons of heating oil a year. + pre_subsidy_electricity_expense: [1_500, 0, 0, 0] + gas_expense: [0, 960, 0, 0] + fuel_oil_expense: [0, 0, 2_400, 2_400] + or_liheap_countable_income: [9_400, 0, 20_000, 20_000] + output: + # PY2025 size 1 limit $36,811 (page 57). + or_liheap_income_limit: [36_811, 36_811, 36_811, 36_811] + # PY2025 size 1 rows "$0 $9,203", "$9,204 $18,406", "$18,407 $27,609" + # (page 58). + or_liheap_income_band: [2, 1, 3, 3] + # Region 1 (page 58): Electricity $295 in the second row, Natural Gas $500 + # in the first row, Heating Oil $680 in the third row. Region 2 (page 59): + # Heating Oil $745 in the third row. + or_liheap: [295, 500, 680, 745] + +# PY2027 manual (effective October 1, 2026), income limits on PDF page 71 and +# matrices on pages 72-75: +# https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 +- name: Case 24, program year 2027 pays the PY2027 matrix with its new band tops. + period: 2027 + input: + state_code: [OR, OR, OR, OR] + county: [MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, MULTNOMAH_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [1, 1, 1, 1] + heating_type: [ELECTRICITY, ELECTRICITY, NATURAL_GAS, ELECTRICITY] + # About $125 a month for electric heat and $80 a month for gas heat. + pre_subsidy_electricity_expense: [1_500, 1_500, 0, 1_500] + gas_expense: [0, 0, 960, 0] + # The first PY2027 size 1 row ends at $10,082 (page 72). + or_liheap_countable_income: [10_000, 10_083, 0, 10_000] + output: + # PY2027 size 1 limit $40,326 (page 71). + or_liheap_income_limit: [40_326, 40_326, 40_326, 40_326] + # PY2027 size 1 rows "$0 $10,082", "$10,083 $20,163" (page 72). + or_liheap_income_band: [1, 2, 1, 1] + # Region 1 (page 72): Electricity $475 then $370, Natural Gas $660. + # Region 2 (page 74): Electricity $510. + or_liheap: [475, 370, 660, 510] diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py index f3d5f02a138..2393dabd08c 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py @@ -7,15 +7,21 @@ class or_liheap_eligible(Variable): definition_period = YEAR label = "Oregon LIHEAP regular heating eligibility" defined_for = StateCode.OR - # PDF pages 11, 30, 36, 61, 77, 93, 94. - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=11" + # Manual PDF pages 11, 30, 36, 61, 77, 93, 94; OAR 813-200-0020(1)(b). + reference = ( + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61", + "https://www.law.cornell.edu/regulations/oregon/Or-Admin-Code-SS-813-200-0020", + ) documentation = ( "SPM members approximate the economic household, with identity and SSN " - "verification assumed complete. The Oregon sources do not prescribe a SNAP " - "immigration test. No asset or categorical income test applies. Institutional " - "residence, tribal duplicate awards, documentation and application timing are " - "not modeled. A zero benefit above size 12 or for unknown county denotes " - "unsupported schedule coverage, not a legal denial." + "verification assumed complete. The energy burden test follows OAR " + "813-200-0020(1)(b) and the manual's energy burden table: subsidized housing " + "with heat included in rent is excluded even when the household pays a " + "separate non-heating utility bill. The Oregon sources do not prescribe a " + "SNAP immigration test. No asset or categorical income test applies. " + "Institutional residence, tribal duplicate awards, documentation and " + "application timing are not modeled. A zero benefit above size 12 or for an " + "unknown county denotes unsupported schedule coverage, not a legal denial." ) def formula(spm_unit, period, parameters): diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py index e837764b3b7..49acd27cc52 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py @@ -12,6 +12,10 @@ class or_liheap_income_limit(Variable): def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.eligibility - # Ceiling reproduces all 12 published limits; the manual does not - # prescribe a rounding rule. hhs_smi uses the requested year's SMI. - return np.ceil(spm_unit("hhs_smi", period) * p.smi_rate) + # Ceiling reproduces every published limit for program years 2025 to + # 2027; the manual does not prescribe a rounding rule. The product is + # rounded to cents in float64 first: float32 0.6 is slightly above 0.6, + # which lifts a whole-dollar product above the integer and would add $1. + # hhs_smi uses the requested year's SMI. + smi = spm_unit("hhs_smi", period).astype(np.float64) + return np.ceil(np.round(smi * p.smi_rate, 2)) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py index b8ef9cdbfb1..cca03a39bd0 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py @@ -13,13 +13,16 @@ class or_liheap_countable_income(Variable): reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35" documentation = ( "Annual income approximates the allowed one-, three- or twelve-month " - "observation window. Interest is assumed withdrawn. Enter disability_benefits " - "as the private insurer's payment after any Social Security offset; Social " - "Security is counted separately, reproducing the manual's examples without " - "deducting the offset twice. Unsupported details include regular gifts, foster " - "and adoption payments, tribal receipts, work-study and caregiver payments " - "within the household. Military wages should be included in employment_income. " - "Use a direct countable-income override when these details matter." + "observation window. Interest is assumed withdrawn, and the $200 test is " + "applied to each member's interest, a reading the manual does not specify. " + "Each unearned source is floored at zero like the earned sources, so a rental " + "or estate loss does not offset other income. Enter disability_benefits as the " + "private insurer's payment after any Social Security offset; Social Security " + "is counted separately, reproducing the manual's examples without deducting " + "the offset twice. Unsupported details include regular gifts, foster and " + "adoption payments, tribal receipts, work-study and caregiver payments within " + "the household. Military wages should be included in employment_income. Use a " + "direct countable-income override when these details matter." ) def formula(spm_unit, period, parameters): @@ -30,8 +33,13 @@ def formula(spm_unit, period, parameters): where(interest > p.interest_threshold, interest, 0) ) # The TANF source counts receipt after take-up, not or_tanf entitlement. + # Landlords complete the self-employment form (page 35), so a loss in one + # source cannot offset another, as in the earned-income formula. + unearned = 0 + for source in p.sources.unearned: + unearned = unearned + max_(add(spm_unit, period, [source]), 0) return ( add(spm_unit, period, ["or_liheap_countable_earned_income"]) - + add(spm_unit, period, p.sources.unearned) + + unearned + counted_interest ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py index 0591a8e2fd5..231b557f2da 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py @@ -11,12 +11,13 @@ class or_liheap(Variable): # PDF pages 61, 62, 67, 78, 79, 80, 81, 93, 94. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61" documentation = ( - "Annual regular heating assistance, verified for FY2026. Earlier years use " - "parameter backfilling and are unverified historical estimates. No " - "actual-expense cap applies. Heat-in-rent households need the building heating " - "fuel. Discretionary bulk-fuel minimum-delivery payments and local supplements " - "are unsupported because the necessary award information is absent. Cooling, " - "crisis and equipment assistance are excluded." + "Annual regular heating assistance, verified for program years 2025 to 2027. " + "Earlier years use parameter backfilling and are unverified historical " + "estimates. No actual-expense cap applies. Heat-in-rent households need the " + "building heating fuel; a fuel without a matrix column pays zero as a coverage " + "gap, not a denial. Discretionary bulk-fuel minimum-delivery payments and local " + "supplements are unsupported because the necessary award information is " + "absent. Cooling, crisis and equipment assistance are excluded." ) def formula(spm_unit, period, parameters): @@ -27,22 +28,25 @@ def formula(spm_unit, period, parameters): band = max_(spm_unit("or_liheap_income_band", period), 1) fuel = spm_unit("heating_type", period) types = fuel.possible_values + # Kerosene is billed as heating oil and a grid-tied solar home pays an + # electricity bill, the same pairing heating_expense uses. amount = select( [ - fuel == types.ELECTRICITY, - fuel == types.FUEL_OIL, + (fuel == types.ELECTRICITY) | (fuel == types.SOLAR), + (fuel == types.FUEL_OIL) | (fuel == types.KEROSENE), fuel == types.PROPANE, fuel == types.NATURAL_GAS, fuel == types.WOOD, ], [ p.amount.electricity[region][size][band], - p.amount.fuel_oil[size][band], - p.amount.propane[size][band], + p.amount.fuel_oil[region][size][band], + p.amount.propane[region][size][band], p.amount.natural_gas[region][size][band], - p.amount.wood[size][band], + p.amount.wood[region][size][band], ], - # No published column for unspecified, other, coal, kerosene or solar. + # Coal, other and unspecified fuels have no matrix column; the + # unspecified default is tracked in #9754. default=0, ) dwelling = spm_unit("or_liheap_dwelling_type", period) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py index d2e643f9641..accb6945684 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py @@ -10,8 +10,9 @@ class or_liheap_region(Variable): # PDF pages 78, 80. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78" documentation = ( - "Zero denotes an unknown or out-of-state county; a county is required to " - "select the published schedule." + "Zero denotes a county reported as UNKNOWN or an out-of-state household. A " + "missing county input falls back to the state's first county in the enum, " + "Baker County, which is in Region 2." ) def formula(spm_unit, period, parameters): From 66cea76d64530dbc5a78bdfbb2a9252b16e1c3c0 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Oct 2026 15:20:41 -0400 Subject: [PATCH 09/10] Address review round 2 on Oregon LIHEAP - Floor each member's unearned sources before the household sum and add the unit-level TANF amount in the formula. - Add the even-size FY2026 limit case, the PY2027 size 12 Region 2 row and a two-member rental case. - Cite the PY2025 and PY2027 manuals on the limit, payment, band and region variables. - Write consecutive pages as #page ranges in reference titles and drop single pages from titles. Co-Authored-By: Claude Fable 5.1 --- .../or/ohcs/liheap/eligibility/smi_rate.yaml | 6 ++--- .../liheap/income/earned_income_min_age.yaml | 6 ++--- .../liheap/income/interest_threshold.yaml | 6 ++--- .../or/ohcs/liheap/income/sources/earned.yaml | 6 ++--- .../ohcs/liheap/income/sources/unearned.yaml | 9 ++++--- .../liheap/payment/amount/electricity.yaml | 6 ++--- .../ohcs/liheap/payment/amount/fuel_oil.yaml | 6 ++--- .../liheap/payment/amount/natural_gas.yaml | 6 ++--- .../ohcs/liheap/payment/amount/propane.yaml | 6 ++--- .../or/ohcs/liheap/payment/amount/wood.yaml | 6 ++--- .../or/ohcs/liheap/payment/income_band.yaml | 6 ++--- .../liheap/payment/max_household_size.yaml | 6 ++--- .../ohcs/liheap/payment/max_payment_size.yaml | 6 ++--- .../ohcs/liheap/payment/regions/region_1.yaml | 6 ++--- .../ohcs/liheap/payment/regions/region_2.yaml | 6 ++--- .../or/ohcs/liheap/payment/roomer_rate.yaml | 6 ++--- .../eligibility/or_liheap_income_limit.yaml | 10 +++++++ .../income/or_liheap_countable_income.yaml | 26 +++++++++++++++++++ .../gov/states/or/ohcs/liheap/or_liheap.yaml | 25 ++++++++++++++++++ .../liheap/eligibility/or_liheap_eligible.py | 2 +- .../eligibility/or_liheap_income_limit.py | 6 ++++- .../income/or_liheap_countable_income.py | 19 +++++++++----- .../gov/states/or/ohcs/liheap/or_liheap.py | 10 +++++-- .../or/ohcs/liheap/or_liheap_dwelling_type.py | 2 +- .../liheap/payment/or_liheap_income_band.py | 10 +++++-- .../ohcs/liheap/payment/or_liheap_region.py | 10 +++++-- 26 files changed, 154 insertions(+), 65 deletions(-) diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml index 49da87e4767..43c90e95d04 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/eligibility/smi_rate.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP SMI eligibility rate reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 57 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=57 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF page 77 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 71 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=71 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml index 56e76e20f0b..9711b8f0cf8 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/earned_income_min_age.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP minimum age for counted earnings reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 33, 41 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 33,41" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=33 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 41, 53 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 41,53" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=41 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 42, 54 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 42,54" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=42 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml index f4993e4b881..ab475dc975e 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/interest_threshold.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP interest threshold reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 34, 40 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 34,40" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=34 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 43, 50 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 43,50" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=43 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 43, 51 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 43,51" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=43 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml index 46f3f238dd0..3df712f8d49 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/earned.yaml @@ -13,9 +13,9 @@ metadata: period: year label: Oregon LIHEAP earned income sources reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 29, 32, 33, 36, 41 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 29,32-33,36,41" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=29 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 35, 39, 41, 45, 53 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 35,39,41,45,53" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 36, 40, 42, 46, 54 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 36,40,42,46,54" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=36 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index edf4341967e..cf674ce3c3d 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -1,4 +1,6 @@ description: Oregon counts these unearned income sources under the Low Income Home Energy Assistance Program. +# Person-level sources, each floored at zero per member. TANF, a unit-level +# amount, is added in the formula. values: 2024-10-01: - rental_income @@ -6,7 +8,6 @@ values: - social_security - railroad_benefits - ssi - - tanf - unemployment_compensation - workers_compensation - veterans_benefits @@ -27,9 +28,9 @@ metadata: period: year label: Oregon LIHEAP unearned income sources reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 31-41" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=31 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 37-52" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=37 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 38-53" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=38 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml index dc1152a4dd1..d5bf03ab3f8 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml @@ -181,11 +181,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml index f659af982f5..2732c8cce17 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml @@ -144,11 +144,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml index 6075a074c7b..2a2beeb19ef 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml @@ -186,11 +186,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml index 3beb41363e5..417dbad8cb6 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml @@ -152,11 +152,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml index 6b91c314f84..3cb031fecfd 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml @@ -152,11 +152,11 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml index a5ecc359227..ad8283dd0f4 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml @@ -156,11 +156,11 @@ metadata: - range(1, 4) - range(1, 13) reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, standard payment income bands #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, standard payment income bands #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, standard payment income bands #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml index 23b1c035fd4..d43685fb876 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP largest published household size reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=79 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=73 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml index e892fe0ac63..21897cb64c3 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_payment_size.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP maximum payment size group reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF pages 58, 59 + - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 58-59" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 78, 79, 80, 81 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 78-81" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF pages 72, 73, 74, 75 + - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 72-75" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml index 87d24c0fa44..c8b459a4fc1 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_1.yaml @@ -24,9 +24,9 @@ metadata: period: year label: Oregon LIHEAP region 1 counties reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 58 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF page 78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml index 0ee12546515..e47dbab23d9 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/regions/region_2.yaml @@ -24,9 +24,9 @@ metadata: period: year label: Oregon LIHEAP region 2 counties reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 59 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF page 80 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 74 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml index 193a732b03c..082c8a2ae54 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/roomer_rate.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP roomer and boarder payment share reference: - - title: PY2025 Energy Assistance Intake Operations and Policy Manual, PDF page 47 + - title: PY2025 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=47 - - title: PY2026 Energy Assistance Intake Operations and Policy Manual, PDF pages 61, 62 + - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 61-62" href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=62 - - title: PY2027 Energy Assistance Intake Operations and Policy Manual, PDF page 59 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=59 diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml index c09732a89f9..61a754aa0ac 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.yaml @@ -38,3 +38,13 @@ # median is $129,250, so these products are exact dollars (129,250 x 0.68 # x 0.6 = 52,734) and a float32 ceiling would add $1 to each. or_liheap_income_limit: [52_734, 65_142, 102_366, 107_019, 111_672, 116_325] + +- name: Case 4, published FY2026 annual income limits for the even household sizes 2 to 12. + period: 2026 + input: + state_code: [OR, OR, OR, OR, OR, OR] + spm_unit_size: [2, 4, 6, 8, 10, 12] + output: + # FY2026 page 77: size 2 $50,196, size 4 $73,817, size 6 $97,438, size 8 + # $101,867, size 10 $106,296, size 12 $110,725. + or_liheap_income_limit: [50_196, 73_817, 97_438, 101_867, 106_296, 110_725] diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml index 57c5e877c4f..8a9c57b5d55 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.yaml @@ -125,3 +125,29 @@ # neither is counted although the household's interest totals $300: a # per-member reading, which the manual does not specify. or_liheap_countable_income: 0 + +- name: Case 6, each member's rental loss is floored before the household sum. + period: 2026 + input: + people: + person1: + age: 40 + rental_income: 6_000 + ssi: 0 + person2: + age: 38 + rental_income: -6_000 + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + tanf: 0 + households: + household: + members: [person1, person2] + state_code: OR + output: + # Each member's rental income is floored at zero before the household sum + # (page 35 sends landlords to the self-employment form), so the second + # member's $6,000 loss does not offset the first member's $6,000 of rent. + or_liheap_countable_income: 6_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml index cda0fb1bc1c..61b113dc114 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/ohcs/liheap/or_liheap.yaml @@ -573,3 +573,28 @@ # Region 1 (page 72): Electricity $475 then $370, Natural Gas $660. # Region 2 (page 74): Electricity $510. or_liheap: [475, 370, 660, 510] + +- name: Case 25, program year 2027 pays the size 12 rows of the Region 2 matrix. + period: 2027 + input: + state_code: [OR, OR, OR, OR, OR, OR] + county: [DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR, DESCHUTES_COUNTY_OR] + spm_unit_size: [12, 12, 12, 12, 12, 12] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, NATURAL_GAS, FUEL_OIL] + # About $125 a month for electric heat, $80 a month for gas heat and 600 + # gallons of heating oil a year. + pre_subsidy_electricity_expense: [1_500, 1_500, 1_500, 1_500, 0, 0] + gas_expense: [0, 0, 0, 0, 960, 0] + fuel_oil_expense: [0, 0, 0, 0, 0, 2_400] + # PY2027 size 12 rows (page 75): "$0 $29,082", "$29,083 $58,163", + # "$58,164 $87,244", "$87,245 $116,325": the first dollar of each row, then + # the last row for gas and oil. + or_liheap_countable_income: [0, 29_083, 58_164, 87_245, 87_245, 87_245] + output: + # PY2027 size 12 limit $116,325 (page 71). + or_liheap_income_limit: [116_325, 116_325, 116_325, 116_325, 116_325, 116_325] + or_liheap_income_band: [1, 2, 3, 4, 4, 4] + # Region 2, size 12 (page 75): Electricity $750, $615, $515, $370; Natural + # Gas $380 and Heating Oil $535 in the last row. Sizes 7 to 12 print the + # size 6 amounts. + or_liheap: [750, 615, 515, 370, 380, 535] diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py index 2393dabd08c..0273768c7a3 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_eligible.py @@ -7,7 +7,7 @@ class or_liheap_eligible(Variable): definition_period = YEAR label = "Oregon LIHEAP regular heating eligibility" defined_for = StateCode.OR - # Manual PDF pages 11, 30, 36, 61, 77, 93, 94; OAR 813-200-0020(1)(b). + # Manual PDF pages 11, 30, 36, 61, 77, 93-94; OAR 813-200-0020(1)(b). reference = ( "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61", "https://www.law.cornell.edu/regulations/oregon/Or-Admin-Code-SS-813-200-0020", diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py index 49acd27cc52..f587bc50125 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/eligibility/or_liheap_income_limit.py @@ -8,7 +8,11 @@ class or_liheap_income_limit(Variable): label = "Oregon LIHEAP income limit" unit = USD defined_for = StateCode.OR - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77" + reference = ( + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=57", + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=77", + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=71", + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.eligibility diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py index cca03a39bd0..d5797efd478 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/income/or_liheap_countable_income.py @@ -8,15 +8,15 @@ class or_liheap_countable_income(Variable): label = "Oregon LIHEAP countable household income" unit = USD defined_for = StateCode.OR - # PDF pages 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, - # 51, 52, 53, 54, 55, 56. + # PDF pages 35-56. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=35" documentation = ( "Annual income approximates the allowed one-, three- or twelve-month " "observation window. Interest is assumed withdrawn, and the $200 test is " "applied to each member's interest, a reading the manual does not specify. " - "Each unearned source is floored at zero like the earned sources, so a rental " - "or estate loss does not offset other income. Enter disability_benefits as the " + "Each member's unearned sources are floored at zero like the earned sources, " + "so a rental or estate loss does not offset other income, another member's " + "included. Enter disability_benefits as the " "private insurer's payment after any Social Security offset; Social Security " "is counted separately, reproducing the manual's examples without deducting " "the offset twice. Unsupported details include regular gifts, foster and " @@ -32,14 +32,19 @@ def formula(spm_unit, period, parameters): counted_interest = spm_unit.sum( where(interest > p.interest_threshold, interest, 0) ) - # The TANF source counts receipt after take-up, not or_tanf entitlement. # Landlords complete the self-employment form (page 35), so a loss in one - # source cannot offset another, as in the earned-income formula. + # source cannot offset another, as in the earned-income formula; each + # member's source is floored before the household sum. unearned = 0 for source in p.sources.unearned: - unearned = unearned + max_(add(spm_unit, period, [source]), 0) + unearned = unearned + spm_unit.sum(max_(person(source, period), 0)) + # TANF counts receipt after take-up, not or_tanf entitlement. It is a + # unit-level amount, so it is added here rather than listed with the + # person-level sources. + tanf = max_(spm_unit("tanf", period), 0) return ( add(spm_unit, period, ["or_liheap_countable_earned_income"]) + unearned + + tanf + counted_interest ) diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py index 231b557f2da..191e8078b17 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap.py @@ -8,8 +8,14 @@ class or_liheap(Variable): label = "Oregon LIHEAP regular heating benefit" unit = USD defined_for = "or_liheap_eligible" - # PDF pages 61, 62, 67, 78, 79, 80, 81, 93, 94. - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61" + reference = ( + # PDF pages 47, 58-59. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58", + # PDF pages 61-62, 67, 78-81, 93-94. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=61", + # PDF pages 59, 72-75. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72", + ) documentation = ( "Annual regular heating assistance, verified for program years 2025 to 2027. " "Earlier years use parameter backfilling and are unverified historical " diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py index 18dec7a10c2..857de41c96c 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/or_liheap_dwelling_type.py @@ -15,7 +15,7 @@ class or_liheap_dwelling_type(Variable): entity = SPMUnit definition_period = YEAR label = "Oregon LIHEAP dwelling arrangement" - # PDF pages 30, 61, 62. + # PDF pages 30, 61-62. reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=30" documentation = ( "The half-payment arrangement applies when a roomer, boarder or owner applies " diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py index 210dbb2bf71..8a8332d2672 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py @@ -7,8 +7,14 @@ class or_liheap_income_band(Variable): definition_period = YEAR label = "Oregon LIHEAP payment income band" defined_for = StateCode.OR - # PDF pages 78, 79, 80, 81. - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78" + reference = ( + # PDF pages 58-59. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58", + # PDF pages 78-81. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78", + # PDF pages 72-75. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72", + ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states["or"].ohcs.liheap.payment diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py index accb6945684..e4359433128 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py @@ -7,8 +7,14 @@ class or_liheap_region(Variable): definition_period = YEAR label = "Oregon LIHEAP payment region" defined_for = StateCode.OR - # PDF pages 78, 80. - reference = "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78" + reference = ( + # PDF pages 58-59. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58", + # PDF pages 78, 80. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78", + # PDF pages 72, 74. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72", + ) documentation = ( "Zero denotes a county reported as UNKNOWN or an out-of-state household. A " "missing county input falls back to the state's first county in the enum, " From ea08858e80d598034079288d7bdf66bc05a447cc Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Oct 2026 22:48:07 -0400 Subject: [PATCH 10/10] Address review round 3 on Oregon LIHEAP Add the Region 2 benefit matrix and the larger-household-size pages to the amount, income band and region references so every modeled value is reachable from a href; drop page text from single-page titles; describe the unearned source list as person-level. Co-Authored-By: Claude Fable 5.1 --- .../or/ohcs/liheap/income/sources/unearned.yaml | 2 +- .../or/ohcs/liheap/payment/amount/electricity.yaml | 12 +++++++++--- .../or/ohcs/liheap/payment/amount/fuel_oil.yaml | 12 +++++++++--- .../or/ohcs/liheap/payment/amount/natural_gas.yaml | 12 +++++++++--- .../or/ohcs/liheap/payment/amount/propane.yaml | 12 +++++++++--- .../states/or/ohcs/liheap/payment/amount/wood.yaml | 12 +++++++++--- .../states/or/ohcs/liheap/payment/income_band.yaml | 10 +++++++--- .../or/ohcs/liheap/payment/max_household_size.yaml | 6 +++--- .../or/ohcs/liheap/payment/or_liheap_income_band.py | 5 ++--- .../or/ohcs/liheap/payment/or_liheap_region.py | 6 +++--- 10 files changed, 61 insertions(+), 28 deletions(-) diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml index cf674ce3c3d..18698f13f7f 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/income/sources/unearned.yaml @@ -1,4 +1,4 @@ -description: Oregon counts these unearned income sources under the Low Income Home Energy Assistance Program. +description: Oregon counts these person-level unearned income sources under the Low Income Home Energy Assistance Program. # Person-level sources, each floored at zero per member. TANF, a unit-level # amount, is added in the formula. values: diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml index d5bf03ab3f8..6e61f0605db 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/electricity.yaml @@ -181,11 +181,17 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml index 2732c8cce17..f20dd8ea19d 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/fuel_oil.yaml @@ -144,11 +144,17 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml index 2a2beeb19ef..630391256fe 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/natural_gas.yaml @@ -186,11 +186,17 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml index 417dbad8cb6..9c40b63f18d 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/propane.yaml @@ -152,11 +152,17 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml index 3cb031fecfd..59de663e73c 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/amount/wood.yaml @@ -152,11 +152,17 @@ metadata: - range(1, 7) - range(1, 5) reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, corrected regular heating matrices #page 78-81" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, corrected Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 and 2 benefit matrices #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 1 benefit matrix href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, Region 2 benefit matrix + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml index ad8283dd0f4..578cb5a9d40 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/income_band.yaml @@ -156,11 +156,15 @@ metadata: - range(1, 4) - range(1, 13) reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual, standard payment income bands #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual, standard payment income bands href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual, standard payment income bands #page 78-81" + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, household sizes 1 to 7 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78 + - title: PY2026 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, household sizes 7 to 12 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=79 - title: OHCS 44-2025 temporary order correcting the PY2026 payment matrices, effective October 9, 2025 href: https://secure.sos.state.or.us/oard/viewReceiptPDF.action?filingRsn=60695 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual, standard payment income bands #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, household sizes 1 to 9 href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72 + - title: PY2027 Energy Assistance Intake Operations and Policy Manual, standard payment income bands, household sizes 9 to 12 + href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=73 diff --git a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml index d43685fb876..121b160bd66 100644 --- a/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml +++ b/policyengine_us/parameters/gov/states/or/ohcs/liheap/payment/max_household_size.yaml @@ -6,9 +6,9 @@ metadata: period: year label: Oregon LIHEAP largest published household size reference: - - title: "PY2025 Energy Assistance Intake Operations and Policy Manual #page 58-59" + - title: PY2025 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58 - - title: "PY2026 Energy Assistance Intake Operations and Policy Manual #page 78-81" + - title: PY2026 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=79 - - title: "PY2027 Energy Assistance Intake Operations and Policy Manual #page 72-75" + - title: PY2027 Energy Assistance Intake Operations and Policy Manual href: https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=73 diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py index 8a8332d2672..5e48a025c64 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_income_band.py @@ -8,12 +8,11 @@ class or_liheap_income_band(Variable): label = "Oregon LIHEAP payment income band" defined_for = StateCode.OR reference = ( - # PDF pages 58-59. "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58", - # PDF pages 78-81. "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78", - # PDF pages 72-75. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=79", "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72", + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=73", ) def formula(spm_unit, period, parameters): diff --git a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py index e4359433128..295b2db8b9e 100644 --- a/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py +++ b/policyengine_us/variables/gov/states/or/ohcs/liheap/payment/or_liheap_region.py @@ -8,12 +8,12 @@ class or_liheap_region(Variable): label = "Oregon LIHEAP payment region" defined_for = StateCode.OR reference = ( - # PDF pages 58-59. "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=58", - # PDF pages 78, 80. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/PY25%20EA%20Operations%20%20Policy%20Manual-%20FINAL%209-27-24.pdf#page=59", "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=78", - # PDF pages 72, 74. + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/2026%20Final%20Energy%20Assistance%20Intake%20Operations%20%26%20Policy%20Manual.pdf#page=80", "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=72", + "https://www.oregon.gov/ohcs/energy-weatherization/Documents/manuals/09-23-2027-PY-2027-EA-Operations-Policy-Manual.pdf#page=74", ) documentation = ( "Zero denotes a county reported as UNKNOWN or an out-of-state household. A "