From a7284ac4e7c1d79855e844b58c2b74fb564a696e Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 3 Oct 2026 19:49:19 -0400 Subject: [PATCH 1/7] Add AR regular heating LIHEAP --- changelog.d/ar-liheap.added.md | 1 + .../aeo/liheap/income/earned_disregard.yaml | 11 + .../ee/aeo/liheap/income/limit/fpg_rate.yaml | 13 + .../aeo/liheap/income/limit/fpg_year_lag.yaml | 13 + .../liheap/income/limit/max_table_size.yaml | 11 + .../income/limit/rounding_increment.yaml | 14 + .../aeo/liheap/income/limit/smi_max_size.yaml | 13 + .../ee/aeo/liheap/income/limit/smi_rate.yaml | 13 + .../income/minimum_earned_income_age.yaml | 11 + .../ee/aeo/liheap/income/sources/earned.yaml | 21 + .../aeo/liheap/income/sources/unearned.yaml | 42 ++ .../liheap/payment/household_size_group.yaml | 24 ++ .../ar/ee/aeo/liheap/payment/income_band.yaml | 170 ++++++++ .../liheap/payment/matrix/electricity.yaml | 328 +++++++++++++++ .../aeo/liheap/payment/matrix/fuel_oil.yaml | 328 +++++++++++++++ .../liheap/payment/matrix/natural_gas.yaml | 328 +++++++++++++++ .../ee/aeo/liheap/payment/matrix/other.yaml | 328 +++++++++++++++ .../ee/aeo/liheap/payment/matrix/propane.yaml | 328 +++++++++++++++ policyengine_us/programs.yaml | 10 +- .../states/ar/ee/aeo/liheap/ar_liheap.yaml | 199 ++++++++++ .../aeo/liheap/ar_liheap_household_size.yaml | 74 ++++ .../eligibility/ar_liheap_eligible.yaml | 216 ++++++++++ .../income/ar_liheap_countable_income.yaml | 205 ++++++++++ .../liheap/income/ar_liheap_income_limit.yaml | 31 ++ .../payment/ar_liheap_matrix_amount.yaml | 374 ++++++++++++++++++ .../gov/states/ar/ee/aeo/liheap/ar_liheap.py | 23 ++ .../ee/aeo/liheap/ar_liheap_household_size.py | 28 ++ .../liheap/eligibility/ar_liheap_eligible.py | 41 ++ .../income/ar_liheap_countable_income.py | 37 ++ .../liheap/income/ar_liheap_income_limit.py | 49 +++ .../liheap/payment/ar_liheap_matrix_amount.py | 53 +++ 31 files changed, 3336 insertions(+), 1 deletion(-) create mode 100644 changelog.d/ar-liheap.added.md create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml create mode 100644 policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py create mode 100644 policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py create mode 100644 policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py create mode 100644 policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py create mode 100644 policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py create mode 100644 policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py diff --git a/changelog.d/ar-liheap.added.md b/changelog.d/ar-liheap.added.md new file mode 100644 index 00000000000..e235554b14d --- /dev/null +++ b/changelog.d/ar-liheap.added.md @@ -0,0 +1 @@ +Add Arkansas LIHEAP income limits, countable income, and regular heating payment tables. diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml new file mode 100644 index 00000000000..5b320d62428 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml @@ -0,0 +1,11 @@ +description: Arkansas excludes this share of earned income under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 0.2 + +metadata: + unit: /1 + period: year + label: Arkansas LIHEAP earned income disregard + reference: + - title: Arkansas FY2026 State Plan, Section 1.8 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml new file mode 100644 index 00000000000..42394a76787 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml @@ -0,0 +1,13 @@ +description: Arkansas limits countable income to this multiple of the federal poverty guideline for households above the state median income size limit under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 1.5 + +metadata: + unit: /1 + period: year + label: Arkansas LIHEAP federal poverty guideline rate + reference: + - title: Arkansas FY2026 State Plan, Section 2.1 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9 + - title: Arkansas FY2026 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml new file mode 100644 index 00000000000..67ea5320ea2 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml @@ -0,0 +1,13 @@ +description: Arkansas uses the federal poverty guideline from this many years before the benefit year under the Low Income Home Energy Assistance Program. +# The FY2026 published thresholds match the 2025 federal poverty guidelines. +# Earlier years use their corresponding guideline year but are unverified. +values: + 2025-10-01: 1 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP federal poverty guideline year lag + reference: + - title: Arkansas FY2026 Income Eligibility Chart using the 2025 federal poverty guidelines + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml new file mode 100644 index 00000000000..63ea93c51ea --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml @@ -0,0 +1,11 @@ +description: Arkansas publishes income limits up to this household size before adding a separate amount per additional member under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 20 + +metadata: + unit: person + period: year + label: Arkansas LIHEAP maximum published income limit household size + reference: + - title: Arkansas FY2026 Income Eligibility Chart, additional-person instruction + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml new file mode 100644 index 00000000000..ef7f743b04f --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml @@ -0,0 +1,14 @@ +description: Arkansas publishes monthly income limits in increments of this amount under the Low Income Home Energy Assistance Program. +# Half-up rounding of the base and additional-person amount separately +# reproduces every FY2026 row and the published $688 increment above size 20. +# This is a reconciled numerical pattern, not an express rounding instruction. +values: + 2025-10-01: 1 + +metadata: + unit: currency-USD + period: month + label: Arkansas LIHEAP monthly income limit rounding increment + reference: + - title: Arkansas FY2026 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml new file mode 100644 index 00000000000..b69c193504a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml @@ -0,0 +1,13 @@ +description: Arkansas uses state median income for households up to this size under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 7 + +metadata: + unit: person + period: year + label: Arkansas LIHEAP maximum state median income household size + reference: + - title: Arkansas FY2026 State Plan, Section 2.1 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9 + - title: Arkansas FY2026 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml new file mode 100644 index 00000000000..64257933164 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml @@ -0,0 +1,13 @@ +description: Arkansas limits countable income to this share of state median income for households within the state median income size limit under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 0.6 + +metadata: + unit: /1 + period: year + label: Arkansas LIHEAP state median income rate + reference: + - title: Arkansas FY2026 State Plan, Section 2.1 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9 + - title: Arkansas FY2026 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml new file mode 100644 index 00000000000..fb4da067faf --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml @@ -0,0 +1,11 @@ +description: Arkansas counts work income beginning at this age for members who are not full-time students under the Low Income Home Energy Assistance Program. +values: + 2025-10-01: 18 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP minimum earned income age + reference: + - title: Arkansas LIHEAP Application, Section III Work Income + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml new file mode 100644 index 00000000000..5ba40056510 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml @@ -0,0 +1,21 @@ +description: Arkansas counts these earned income sources under the Low Income Home Energy Assistance Program. +# Existing net business income approximates gross receipts; no additional +# business-expense deduction or new gross-receipts input is modeled. +# Active and passive partnership income cannot be separated by existing inputs. +values: + 2025-10-01: + - employment_income + - self_employment_income + - sstb_self_employment_income + - farm_operations_income + - partnership_s_corp_income + +metadata: + unit: list + period: year + label: Arkansas LIHEAP earned income sources + reference: + - title: Arkansas FY2026 State Plan, Sections 1.8 and 1.9 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 + - title: Arkansas LIHEAP Application, Section III Household Income + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml new file mode 100644 index 00000000000..3011bffb0d5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml @@ -0,0 +1,42 @@ +description: Arkansas counts these unearned income sources under the Low Income Home Energy Assistance Program. +# Ordinary and farm rental receipts are independent, nonnegative inputs. +# The plan leaves TANF and general assistance unchecked; disclosure of TEA +# on the application does not establish countability. The plan also leaves +# insurance payments unchecked, so workers compensation/private disability +# are not inferred countable solely from the application disclosure list. +# Medicare adjustments are deferred; use the existing Social Security amount. +# Counted loans, lottery winnings, jury duty, royalties and foster care +# receipts lack sufficiently specific inputs and are not represented here. +# Gambling winnings cannot isolate lotteries, the only counted lump sum. +values: + 2025-10-01: + - unemployment_compensation + - strike_benefits + - social_security + - ssi + # Pension income includes government pensions, including military pensions. + # military_retirement_pay classifies that income for tax exclusions; adding + # it separately would count the same pension twice when both are supplied. + - pension_income + # Non-Social-Security survivor and railroad receipts. + - survivor_benefits + - railroad_benefits + - rental_income + - farm_rent_income + - alimony_income + - child_support_received + - interest_income + - ordinary_dividend_income + - veterans_benefits + # Cash gifts from friends and relatives outside the household. + - financial_assistance + +metadata: + unit: list + period: year + label: Arkansas LIHEAP unearned income sources + reference: + - title: Arkansas FY2026 State Plan, Sections 1.8 and 1.9 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 + - title: Arkansas LIHEAP Application, Section III Household Income + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml new file mode 100644 index 00000000000..86610cae121 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml @@ -0,0 +1,24 @@ +description: Arkansas assigns this payment group by household size under the Low Income Home Energy Assistance Program. +brackets: + - threshold: + 2025-10-01: 0 + amount: + 2025-10-01: 1 + - threshold: + 2025-10-01: 3 + amount: + 2025-10-01: 2 + - threshold: + 2025-10-01: 5 + amount: + 2025-10-01: 3 + +metadata: + type: single_amount + threshold_unit: person + amount_unit: /1 + period: year + label: Arkansas LIHEAP payment household size group + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, household size columns common to all fuel schedules + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml new file mode 100644 index 00000000000..2e2a4253408 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml @@ -0,0 +1,170 @@ +description: Arkansas assigns this payment band by monthly countable income under the Low Income Home Energy Assistance Program. +# Published lower bounds are inclusive; cents do not trigger the next band +# until its printed lower bound is reached. +brackets: + - threshold: + 2025-10-01: 0 + amount: + 2025-10-01: 1 + - threshold: + 2025-10-01: 70 + amount: + 2025-10-01: 2 + - threshold: + 2025-10-01: 130 + amount: + 2025-10-01: 3 + - threshold: + 2025-10-01: 190 + amount: + 2025-10-01: 4 + - threshold: + 2025-10-01: 250 + amount: + 2025-10-01: 5 + - threshold: + 2025-10-01: 310 + amount: + 2025-10-01: 6 + - threshold: + 2025-10-01: 370 + amount: + 2025-10-01: 7 + - threshold: + 2025-10-01: 430 + amount: + 2025-10-01: 8 + - threshold: + 2025-10-01: 490 + amount: + 2025-10-01: 9 + - threshold: + 2025-10-01: 550 + amount: + 2025-10-01: 10 + - threshold: + 2025-10-01: 610 + amount: + 2025-10-01: 11 + - threshold: + 2025-10-01: 670 + amount: + 2025-10-01: 12 + - threshold: + 2025-10-01: 730 + amount: + 2025-10-01: 13 + - threshold: + 2025-10-01: 790 + amount: + 2025-10-01: 14 + - threshold: + 2025-10-01: 850 + amount: + 2025-10-01: 15 + - threshold: + 2025-10-01: 910 + amount: + 2025-10-01: 16 + - threshold: + 2025-10-01: 970 + amount: + 2025-10-01: 17 + - threshold: + 2025-10-01: 1_030 + amount: + 2025-10-01: 18 + - threshold: + 2025-10-01: 1_090 + amount: + 2025-10-01: 19 + - threshold: + 2025-10-01: 1_150 + amount: + 2025-10-01: 20 + - threshold: + 2025-10-01: 1_210 + amount: + 2025-10-01: 21 + - threshold: + 2025-10-01: 1_270 + amount: + 2025-10-01: 22 + - threshold: + 2025-10-01: 1_330 + amount: + 2025-10-01: 23 + - threshold: + 2025-10-01: 1_390 + amount: + 2025-10-01: 24 + - threshold: + 2025-10-01: 1_450 + amount: + 2025-10-01: 25 + - threshold: + 2025-10-01: 1_510 + amount: + 2025-10-01: 26 + - threshold: + 2025-10-01: 1_570 + amount: + 2025-10-01: 27 + - threshold: + 2025-10-01: 1_630 + amount: + 2025-10-01: 28 + - threshold: + 2025-10-01: 1_690 + amount: + 2025-10-01: 29 + - threshold: + 2025-10-01: 1_750 + amount: + 2025-10-01: 30 + - threshold: + 2025-10-01: 1_870 + amount: + 2025-10-01: 31 + - threshold: + 2025-10-01: 1_990 + amount: + 2025-10-01: 32 + - threshold: + 2025-10-01: 2_010 + amount: + 2025-10-01: 33 + - threshold: + 2025-10-01: 2_130 + amount: + 2025-10-01: 34 + - threshold: + 2025-10-01: 2_348 + amount: + 2025-10-01: 35 + - threshold: + 2025-10-01: 3_071 + amount: + 2025-10-01: 36 + - threshold: + 2025-10-01: 3_793 + amount: + 2025-10-01: 37 + - threshold: + 2025-10-01: 4_515 + amount: + 2025-10-01: 38 + - threshold: + 2025-10-01: 5_237 + amount: + 2025-10-01: 39 + +metadata: + type: single_amount + threshold_unit: currency-USD + amount_unit: /1 + period: month + label: Arkansas LIHEAP monthly income band + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, income bands common to all fuel schedules + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml new file mode 100644 index 00000000000..7d7e7e9b2de --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml @@ -0,0 +1,328 @@ +description: Arkansas provides this regular heating benefit for households using electricity under the Low Income Home Energy Assistance Program. + +1: + 1: + 2025-10-01: 242 + 2: + 2025-10-01: 288 + 3: + 2025-10-01: 344 + +2: + 1: + 2025-10-01: 233 + 2: + 2025-10-01: 276 + 3: + 2025-10-01: 334 + +3: + 1: + 2025-10-01: 221 + 2: + 2025-10-01: 266 + 3: + 2025-10-01: 322 + +4: + 1: + 2025-10-01: 209 + 2: + 2025-10-01: 254 + 3: + 2025-10-01: 310 + +5: + 1: + 2025-10-01: 199 + 2: + 2025-10-01: 242 + 3: + 2025-10-01: 300 + +6: + 1: + 2025-10-01: 187 + 2: + 2025-10-01: 233 + 3: + 2025-10-01: 288 + +7: + 1: + 2025-10-01: 179 + 2: + 2025-10-01: 223 + 3: + 2025-10-01: 276 + +8: + 1: + 2025-10-01: 174 + 2: + 2025-10-01: 215 + 3: + 2025-10-01: 266 + +9: + 1: + 2025-10-01: 170 + 2: + 2025-10-01: 209 + 3: + 2025-10-01: 254 + +10: + 1: + 2025-10-01: 166 + 2: + 2025-10-01: 204 + 3: + 2025-10-01: 242 + +11: + 1: + 2025-10-01: 160 + 2: + 2025-10-01: 197 + 3: + 2025-10-01: 233 + +12: + 1: + 2025-10-01: 155 + 2: + 2025-10-01: 192 + 3: + 2025-10-01: 221 + +13: + 1: + 2025-10-01: 149 + 2: + 2025-10-01: 187 + 3: + 2025-10-01: 209 + +14: + 1: + 2025-10-01: 143 + 2: + 2025-10-01: 181 + 3: + 2025-10-01: 199 + +15: + 1: + 2025-10-01: 138 + 2: + 2025-10-01: 175 + 3: + 2025-10-01: 190 + +16: + 1: + 2025-10-01: 132 + 2: + 2025-10-01: 170 + 3: + 2025-10-01: 182 + +17: + 1: + 2025-10-01: 127 + 2: + 2025-10-01: 164 + 3: + 2025-10-01: 176 + +18: + 1: + 2025-10-01: 121 + 2: + 2025-10-01: 158 + 3: + 2025-10-01: 170 + +19: + 1: + 2025-10-01: 115 + 2: + 2025-10-01: 154 + 3: + 2025-10-01: 164 + +20: + 1: + 2025-10-01: 110 + 2: + 2025-10-01: 148 + 3: + 2025-10-01: 158 + +21: + 1: + 2025-10-01: 104 + 2: + 2025-10-01: 143 + 3: + 2025-10-01: 152 + +22: + 1: + 2025-10-01: 100 + 2: + 2025-10-01: 137 + 3: + 2025-10-01: 145 + +23: + 1: + 2025-10-01: 94 + 2: + 2025-10-01: 131 + 3: + 2025-10-01: 140 + +24: + 1: + 2025-10-01: 88 + 2: + 2025-10-01: 126 + 3: + 2025-10-01: 134 + +25: + 1: + 2025-10-01: 83 + 2: + 2025-10-01: 120 + 3: + 2025-10-01: 128 + +26: + 1: + 2025-10-01: 77 + 2: + 2025-10-01: 114 + 3: + 2025-10-01: 124 + +27: + 1: + 2025-10-01: 72 + 2: + 2025-10-01: 109 + 3: + 2025-10-01: 118 + +28: + 1: + 2025-10-01: 66 + 2: + 2025-10-01: 103 + 3: + 2025-10-01: 112 + +29: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 97 + 3: + 2025-10-01: 107 + +30: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 92 + 3: + 2025-10-01: 101 + +31: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 86 + 3: + 2025-10-01: 95 + +32: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 80 + 3: + 2025-10-01: 90 + +33: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 76 + 3: + 2025-10-01: 84 + +34: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 70 + 3: + 2025-10-01: 79 + +35: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 64 + 3: + 2025-10-01: 73 + +36: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 60 + 3: + 2025-10-01: 67 + +37: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 60 + 3: + 2025-10-01: 61 + +38: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 60 + +39: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 60 + +metadata: + unit: currency-USD + period: year + label: Arkansas LIHEAP electricity benefit matrix + propagate_metadata_to_children: true + breakdown: + - range(1, 40) + - range(1, 4) + breakdown_labels: + - Monthly countable income band + - Household size group + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, Electricity + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml new file mode 100644 index 00000000000..ddba39ec206 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml @@ -0,0 +1,328 @@ +description: Arkansas provides this regular heating benefit for households using fuel oil under the Low Income Home Energy Assistance Program. + +1: + 1: + 2025-10-01: 402 + 2: + 2025-10-01: 478 + 3: + 2025-10-01: 570 + +2: + 1: + 2025-10-01: 385 + 2: + 2025-10-01: 457 + 3: + 2025-10-01: 552 + +3: + 1: + 2025-10-01: 365 + 2: + 2025-10-01: 442 + 3: + 2025-10-01: 534 + +4: + 1: + 2025-10-01: 347 + 2: + 2025-10-01: 422 + 3: + 2025-10-01: 514 + +5: + 1: + 2025-10-01: 330 + 2: + 2025-10-01: 402 + 3: + 2025-10-01: 497 + +6: + 1: + 2025-10-01: 310 + 2: + 2025-10-01: 385 + 3: + 2025-10-01: 478 + +7: + 1: + 2025-10-01: 296 + 2: + 2025-10-01: 370 + 3: + 2025-10-01: 457 + +8: + 1: + 2025-10-01: 288 + 2: + 2025-10-01: 356 + 3: + 2025-10-01: 442 + +9: + 1: + 2025-10-01: 282 + 2: + 2025-10-01: 347 + 3: + 2025-10-01: 422 + +10: + 1: + 2025-10-01: 275 + 2: + 2025-10-01: 337 + 3: + 2025-10-01: 402 + +11: + 1: + 2025-10-01: 265 + 2: + 2025-10-01: 326 + 3: + 2025-10-01: 385 + +12: + 1: + 2025-10-01: 257 + 2: + 2025-10-01: 319 + 3: + 2025-10-01: 365 + +13: + 1: + 2025-10-01: 247 + 2: + 2025-10-01: 310 + 3: + 2025-10-01: 347 + +14: + 1: + 2025-10-01: 238 + 2: + 2025-10-01: 301 + 3: + 2025-10-01: 330 + +15: + 1: + 2025-10-01: 228 + 2: + 2025-10-01: 292 + 3: + 2025-10-01: 313 + +16: + 1: + 2025-10-01: 220 + 2: + 2025-10-01: 282 + 3: + 2025-10-01: 302 + +17: + 1: + 2025-10-01: 210 + 2: + 2025-10-01: 272 + 3: + 2025-10-01: 293 + +18: + 1: + 2025-10-01: 200 + 2: + 2025-10-01: 264 + 3: + 2025-10-01: 282 + +19: + 1: + 2025-10-01: 192 + 2: + 2025-10-01: 254 + 3: + 2025-10-01: 272 + +20: + 1: + 2025-10-01: 182 + 2: + 2025-10-01: 245 + 3: + 2025-10-01: 262 + +21: + 1: + 2025-10-01: 173 + 2: + 2025-10-01: 236 + 3: + 2025-10-01: 252 + +22: + 1: + 2025-10-01: 166 + 2: + 2025-10-01: 227 + 3: + 2025-10-01: 241 + +23: + 1: + 2025-10-01: 158 + 2: + 2025-10-01: 217 + 3: + 2025-10-01: 233 + +24: + 1: + 2025-10-01: 151 + 2: + 2025-10-01: 209 + 3: + 2025-10-01: 223 + +25: + 1: + 2025-10-01: 145 + 2: + 2025-10-01: 199 + 3: + 2025-10-01: 214 + +26: + 1: + 2025-10-01: 140 + 2: + 2025-10-01: 190 + 3: + 2025-10-01: 204 + +27: + 1: + 2025-10-01: 134 + 2: + 2025-10-01: 180 + 3: + 2025-10-01: 196 + +28: + 1: + 2025-10-01: 128 + 2: + 2025-10-01: 172 + 3: + 2025-10-01: 186 + +29: + 1: + 2025-10-01: 124 + 2: + 2025-10-01: 162 + 3: + 2025-10-01: 176 + +30: + 1: + 2025-10-01: 118 + 2: + 2025-10-01: 152 + 3: + 2025-10-01: 168 + +31: + 1: + 2025-10-01: 110 + 2: + 2025-10-01: 144 + 3: + 2025-10-01: 158 + +32: + 1: + 2025-10-01: 103 + 2: + 2025-10-01: 134 + 3: + 2025-10-01: 149 + +33: + 1: + 2025-10-01: 96 + 2: + 2025-10-01: 125 + 3: + 2025-10-01: 140 + +34: + 1: + 2025-10-01: 89 + 2: + 2025-10-01: 116 + 3: + 2025-10-01: 131 + +35: + 1: + 2025-10-01: 82 + 2: + 2025-10-01: 108 + 3: + 2025-10-01: 122 + +36: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 98 + 3: + 2025-10-01: 113 + +37: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 90 + 3: + 2025-10-01: 104 + +38: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 95 + +39: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 86 + +metadata: + unit: currency-USD + period: year + label: Arkansas LIHEAP fuel oil benefit matrix + propagate_metadata_to_children: true + breakdown: + - range(1, 40) + - range(1, 4) + breakdown_labels: + - Monthly countable income band + - Household size group + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, Fuel Oil + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Fuel-Oil.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml new file mode 100644 index 00000000000..cdd688e2ac1 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml @@ -0,0 +1,328 @@ +description: Arkansas provides this regular heating benefit for households using natural gas under the Low Income Home Energy Assistance Program. + +1: + 1: + 2025-10-01: 308 + 2: + 2025-10-01: 366 + 3: + 2025-10-01: 437 + +2: + 1: + 2025-10-01: 295 + 2: + 2025-10-01: 350 + 3: + 2025-10-01: 422 + +3: + 1: + 2025-10-01: 280 + 2: + 2025-10-01: 338 + 3: + 2025-10-01: 409 + +4: + 1: + 2025-10-01: 265 + 2: + 2025-10-01: 324 + 3: + 2025-10-01: 394 + +5: + 1: + 2025-10-01: 253 + 2: + 2025-10-01: 308 + 3: + 2025-10-01: 380 + +6: + 1: + 2025-10-01: 238 + 2: + 2025-10-01: 295 + 3: + 2025-10-01: 366 + +7: + 1: + 2025-10-01: 227 + 2: + 2025-10-01: 283 + 3: + 2025-10-01: 350 + +8: + 1: + 2025-10-01: 221 + 2: + 2025-10-01: 272 + 3: + 2025-10-01: 338 + +9: + 1: + 2025-10-01: 216 + 2: + 2025-10-01: 265 + 3: + 2025-10-01: 324 + +10: + 1: + 2025-10-01: 210 + 2: + 2025-10-01: 258 + 3: + 2025-10-01: 308 + +11: + 1: + 2025-10-01: 203 + 2: + 2025-10-01: 250 + 3: + 2025-10-01: 295 + +12: + 1: + 2025-10-01: 197 + 2: + 2025-10-01: 245 + 3: + 2025-10-01: 280 + +13: + 1: + 2025-10-01: 190 + 2: + 2025-10-01: 238 + 3: + 2025-10-01: 265 + +14: + 1: + 2025-10-01: 182 + 2: + 2025-10-01: 230 + 3: + 2025-10-01: 253 + +15: + 1: + 2025-10-01: 175 + 2: + 2025-10-01: 223 + 3: + 2025-10-01: 240 + +16: + 1: + 2025-10-01: 168 + 2: + 2025-10-01: 216 + 3: + 2025-10-01: 232 + +17: + 1: + 2025-10-01: 161 + 2: + 2025-10-01: 209 + 3: + 2025-10-01: 224 + +18: + 1: + 2025-10-01: 154 + 2: + 2025-10-01: 202 + 3: + 2025-10-01: 216 + +19: + 1: + 2025-10-01: 146 + 2: + 2025-10-01: 194 + 3: + 2025-10-01: 209 + +20: + 1: + 2025-10-01: 139 + 2: + 2025-10-01: 187 + 3: + 2025-10-01: 200 + +21: + 1: + 2025-10-01: 132 + 2: + 2025-10-01: 181 + 3: + 2025-10-01: 193 + +22: + 1: + 2025-10-01: 127 + 2: + 2025-10-01: 174 + 3: + 2025-10-01: 185 + +23: + 1: + 2025-10-01: 121 + 2: + 2025-10-01: 167 + 3: + 2025-10-01: 178 + +24: + 1: + 2025-10-01: 115 + 2: + 2025-10-01: 160 + 3: + 2025-10-01: 169 + +25: + 1: + 2025-10-01: 112 + 2: + 2025-10-01: 152 + 3: + 2025-10-01: 162 + +26: + 1: + 2025-10-01: 107 + 2: + 2025-10-01: 145 + 3: + 2025-10-01: 154 + +27: + 1: + 2025-10-01: 103 + 2: + 2025-10-01: 138 + 3: + 2025-10-01: 146 + +28: + 1: + 2025-10-01: 98 + 2: + 2025-10-01: 131 + 3: + 2025-10-01: 138 + +29: + 1: + 2025-10-01: 95 + 2: + 2025-10-01: 124 + 3: + 2025-10-01: 131 + +30: + 1: + 2025-10-01: 90 + 2: + 2025-10-01: 116 + 3: + 2025-10-01: 122 + +31: + 1: + 2025-10-01: 84 + 2: + 2025-10-01: 109 + 3: + 2025-10-01: 115 + +32: + 1: + 2025-10-01: 79 + 2: + 2025-10-01: 102 + 3: + 2025-10-01: 107 + +33: + 1: + 2025-10-01: 73 + 2: + 2025-10-01: 95 + 3: + 2025-10-01: 100 + +34: + 1: + 2025-10-01: 68 + 2: + 2025-10-01: 88 + 3: + 2025-10-01: 91 + +35: + 1: + 2025-10-01: 62 + 2: + 2025-10-01: 80 + 3: + 2025-10-01: 84 + +36: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 73 + 3: + 2025-10-01: 76 + +37: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 66 + 3: + 2025-10-01: 68 + +38: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 60 + +39: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 60 + +metadata: + unit: currency-USD + period: year + label: Arkansas LIHEAP natural gas benefit matrix + propagate_metadata_to_children: true + breakdown: + - range(1, 40) + - range(1, 4) + breakdown_labels: + - Monthly countable income band + - Household size group + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, Natural Gas + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Natural-Gas.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml new file mode 100644 index 00000000000..d7f7c421af6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml @@ -0,0 +1,328 @@ +description: Arkansas provides this regular heating benefit for households using other heating fuels under the Low Income Home Energy Assistance Program. + +1: + 1: + 2025-10-01: 289 + 2: + 2025-10-01: 344 + 3: + 2025-10-01: 410 + +2: + 1: + 2025-10-01: 277 + 2: + 2025-10-01: 330 + 3: + 2025-10-01: 397 + +3: + 1: + 2025-10-01: 263 + 2: + 2025-10-01: 318 + 3: + 2025-10-01: 384 + +4: + 1: + 2025-10-01: 250 + 2: + 2025-10-01: 305 + 3: + 2025-10-01: 370 + +5: + 1: + 2025-10-01: 238 + 2: + 2025-10-01: 289 + 3: + 2025-10-01: 358 + +6: + 1: + 2025-10-01: 223 + 2: + 2025-10-01: 277 + 3: + 2025-10-01: 344 + +7: + 1: + 2025-10-01: 214 + 2: + 2025-10-01: 266 + 3: + 2025-10-01: 330 + +8: + 1: + 2025-10-01: 208 + 2: + 2025-10-01: 257 + 3: + 2025-10-01: 318 + +9: + 1: + 2025-10-01: 203 + 2: + 2025-10-01: 250 + 3: + 2025-10-01: 305 + +10: + 1: + 2025-10-01: 198 + 2: + 2025-10-01: 244 + 3: + 2025-10-01: 289 + +11: + 1: + 2025-10-01: 191 + 2: + 2025-10-01: 235 + 3: + 2025-10-01: 277 + +12: + 1: + 2025-10-01: 185 + 2: + 2025-10-01: 230 + 3: + 2025-10-01: 263 + +13: + 1: + 2025-10-01: 178 + 2: + 2025-10-01: 223 + 3: + 2025-10-01: 250 + +14: + 1: + 2025-10-01: 172 + 2: + 2025-10-01: 216 + 3: + 2025-10-01: 238 + +15: + 1: + 2025-10-01: 164 + 2: + 2025-10-01: 210 + 3: + 2025-10-01: 226 + +16: + 1: + 2025-10-01: 158 + 2: + 2025-10-01: 203 + 3: + 2025-10-01: 218 + +17: + 1: + 2025-10-01: 151 + 2: + 2025-10-01: 197 + 3: + 2025-10-01: 211 + +18: + 1: + 2025-10-01: 144 + 2: + 2025-10-01: 190 + 3: + 2025-10-01: 203 + +19: + 1: + 2025-10-01: 138 + 2: + 2025-10-01: 184 + 3: + 2025-10-01: 197 + +20: + 1: + 2025-10-01: 131 + 2: + 2025-10-01: 176 + 3: + 2025-10-01: 188 + +21: + 1: + 2025-10-01: 125 + 2: + 2025-10-01: 170 + 3: + 2025-10-01: 182 + +22: + 1: + 2025-10-01: 119 + 2: + 2025-10-01: 163 + 3: + 2025-10-01: 174 + +23: + 1: + 2025-10-01: 114 + 2: + 2025-10-01: 156 + 3: + 2025-10-01: 167 + +24: + 1: + 2025-10-01: 109 + 2: + 2025-10-01: 150 + 3: + 2025-10-01: 161 + +25: + 1: + 2025-10-01: 104 + 2: + 2025-10-01: 143 + 3: + 2025-10-01: 154 + +26: + 1: + 2025-10-01: 101 + 2: + 2025-10-01: 137 + 3: + 2025-10-01: 148 + +27: + 1: + 2025-10-01: 97 + 2: + 2025-10-01: 130 + 3: + 2025-10-01: 140 + +28: + 1: + 2025-10-01: 92 + 2: + 2025-10-01: 124 + 3: + 2025-10-01: 134 + +29: + 1: + 2025-10-01: 89 + 2: + 2025-10-01: 116 + 3: + 2025-10-01: 127 + +30: + 1: + 2025-10-01: 85 + 2: + 2025-10-01: 110 + 3: + 2025-10-01: 121 + +31: + 1: + 2025-10-01: 79 + 2: + 2025-10-01: 103 + 3: + 2025-10-01: 114 + +32: + 1: + 2025-10-01: 74 + 2: + 2025-10-01: 97 + 3: + 2025-10-01: 107 + +33: + 1: + 2025-10-01: 68 + 2: + 2025-10-01: 90 + 3: + 2025-10-01: 101 + +34: + 1: + 2025-10-01: 64 + 2: + 2025-10-01: 83 + 3: + 2025-10-01: 94 + +35: + 1: + 2025-10-01: 60 + 2: + 2025-10-01: 77 + 3: + 2025-10-01: 88 + +36: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 70 + 3: + 2025-10-01: 80 + +37: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 64 + 3: + 2025-10-01: 74 + +38: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 67 + +39: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 61 + +metadata: + unit: currency-USD + period: year + label: Arkansas LIHEAP other heating fuels benefit matrix + propagate_metadata_to_children: true + breakdown: + - range(1, 40) + - range(1, 4) + breakdown_labels: + - Monthly countable income band + - Household size group + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, Other Heating Fuels + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Other-Wood-Pellets.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml new file mode 100644 index 00000000000..1b7b32b70a1 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml @@ -0,0 +1,328 @@ +description: Arkansas provides this regular heating benefit for households using propane under the Low Income Home Energy Assistance Program. + +1: + 1: + 2025-10-01: 397 + 2: + 2025-10-01: 472 + 3: + 2025-10-01: 563 + +2: + 1: + 2025-10-01: 380 + 2: + 2025-10-01: 451 + 3: + 2025-10-01: 545 + +3: + 1: + 2025-10-01: 360 + 2: + 2025-10-01: 436 + 3: + 2025-10-01: 527 + +4: + 1: + 2025-10-01: 342 + 2: + 2025-10-01: 418 + 3: + 2025-10-01: 506 + +5: + 1: + 2025-10-01: 326 + 2: + 2025-10-01: 397 + 3: + 2025-10-01: 490 + +6: + 1: + 2025-10-01: 306 + 2: + 2025-10-01: 380 + 3: + 2025-10-01: 472 + +7: + 1: + 2025-10-01: 293 + 2: + 2025-10-01: 365 + 3: + 2025-10-01: 451 + +8: + 1: + 2025-10-01: 284 + 2: + 2025-10-01: 352 + 3: + 2025-10-01: 436 + +9: + 1: + 2025-10-01: 278 + 2: + 2025-10-01: 342 + 3: + 2025-10-01: 418 + +10: + 1: + 2025-10-01: 271 + 2: + 2025-10-01: 334 + 3: + 2025-10-01: 397 + +11: + 1: + 2025-10-01: 262 + 2: + 2025-10-01: 323 + 3: + 2025-10-01: 380 + +12: + 1: + 2025-10-01: 253 + 2: + 2025-10-01: 314 + 3: + 2025-10-01: 360 + +13: + 1: + 2025-10-01: 244 + 2: + 2025-10-01: 306 + 3: + 2025-10-01: 342 + +14: + 1: + 2025-10-01: 235 + 2: + 2025-10-01: 296 + 3: + 2025-10-01: 326 + +15: + 1: + 2025-10-01: 226 + 2: + 2025-10-01: 288 + 3: + 2025-10-01: 310 + +16: + 1: + 2025-10-01: 216 + 2: + 2025-10-01: 278 + 3: + 2025-10-01: 299 + +17: + 1: + 2025-10-01: 208 + 2: + 2025-10-01: 269 + 3: + 2025-10-01: 289 + +18: + 1: + 2025-10-01: 198 + 2: + 2025-10-01: 260 + 3: + 2025-10-01: 278 + +19: + 1: + 2025-10-01: 190 + 2: + 2025-10-01: 251 + 3: + 2025-10-01: 269 + +20: + 1: + 2025-10-01: 180 + 2: + 2025-10-01: 242 + 3: + 2025-10-01: 258 + +21: + 1: + 2025-10-01: 170 + 2: + 2025-10-01: 233 + 3: + 2025-10-01: 250 + +22: + 1: + 2025-10-01: 163 + 2: + 2025-10-01: 223 + 3: + 2025-10-01: 239 + +23: + 1: + 2025-10-01: 156 + 2: + 2025-10-01: 215 + 3: + 2025-10-01: 229 + +24: + 1: + 2025-10-01: 149 + 2: + 2025-10-01: 205 + 3: + 2025-10-01: 220 + +25: + 1: + 2025-10-01: 144 + 2: + 2025-10-01: 197 + 3: + 2025-10-01: 211 + +26: + 1: + 2025-10-01: 138 + 2: + 2025-10-01: 187 + 3: + 2025-10-01: 202 + +27: + 1: + 2025-10-01: 132 + 2: + 2025-10-01: 178 + 3: + 2025-10-01: 193 + +28: + 1: + 2025-10-01: 127 + 2: + 2025-10-01: 169 + 3: + 2025-10-01: 184 + +29: + 1: + 2025-10-01: 121 + 2: + 2025-10-01: 160 + 3: + 2025-10-01: 174 + +30: + 1: + 2025-10-01: 116 + 2: + 2025-10-01: 151 + 3: + 2025-10-01: 166 + +31: + 1: + 2025-10-01: 110 + 2: + 2025-10-01: 142 + 3: + 2025-10-01: 156 + +32: + 1: + 2025-10-01: 106 + 2: + 2025-10-01: 132 + 3: + 2025-10-01: 148 + +33: + 1: + 2025-10-01: 100 + 2: + 2025-10-01: 124 + 3: + 2025-10-01: 138 + +34: + 1: + 2025-10-01: 95 + 2: + 2025-10-01: 114 + 3: + 2025-10-01: 128 + +35: + 1: + 2025-10-01: 89 + 2: + 2025-10-01: 106 + 3: + 2025-10-01: 120 + +36: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 96 + 3: + 2025-10-01: 110 + +37: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 86 + 3: + 2025-10-01: 102 + +38: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 92 + +39: + 1: + 2025-10-01: 0 + 2: + 2025-10-01: 0 + 3: + 2025-10-01: 83 + +metadata: + unit: currency-USD + period: year + label: Arkansas LIHEAP propane benefit matrix + propagate_metadata_to_children: true + breakdown: + - range(1, 40) + - range(1, 4) + breakdown_labels: + - Monthly countable income band + - Household size group + reference: + - title: Arkansas FY2026 Winter Benefits Matrix, Propane + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf#page=1 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 756dc2c4988..40e57bdfc0b 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -802,8 +802,16 @@ programs: category: Benefits agency: HHS status: partial - coverage: OR, DC, Riverside County, MA, IL, KS, MS, TX + coverage: AR, OR, DC, Riverside County, MA, IL, KS, MS, TX state_implementations: + - state: AR + status: partial + name: Arkansas LIHEAP + full_name: Arkansas Low Income Home Energy Assistance Program + variable: ar_liheap + parameter_prefix: gov.states.ar.ee.aeo.liheap + verified_years: "2026" + notes: FY2026 regular heating eligibility and published award matrix. Uses qualified household size and full countable household income. Administrative household and billing facts use documented existing-input approximations; historical backfills and FY2027 draft changes are unverified. Regular heating only; crisis, cooling, weatherization and equipment assistance are excluded. - state: OR status: in_progress name: LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml new file mode 100644 index 00000000000..881baf19676 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml @@ -0,0 +1,199 @@ +# Official FY2026 gas matrix: monthly370-429 gives227 for size1-2; monthly2130-2347 gives68; zero income gives308. Oil zero-income size5+ gives570. The 20 percent earned disregard applies before these lookups. + +- name: Case 1, a nonqualified parents full counted income uses two qualified children for the grant. + period: 2026 + input: + people: + parent: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + is_full_time_student: false + employment_income: 6000 + child1: + age: 12 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + child2: + age: 8 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + spm_units: + family: + members: &id001 + - parent + - child1 + - child2 + heating_type: NATURAL_GAS + heating_expense: 50 + households: + home: + members: *id001 + state_code: AR + output: + ar_liheap_household_size: 2 + ar_liheap_countable_income: 4800 + ar_liheap_income_limit: 36840 + ar_liheap_matrix_amount: 227 + ar_liheap: 227 +- name: Case 2, a one cent monthly excess denies the final grant at the one person boundary. + period: 2026 + input: + state_code: + - AR + - AR + age: + - 40 + - 40 + immigration_status: + - CITIZEN + - CITIZEN + ssi: + - 0 + - 0 + is_full_time_student: + - false + - false + employment_income: + - 0 + - 0 + heating_type: + - NATURAL_GAS + - NATURAL_GAS + heating_expense: + - 1200 + - 1200 + rental_income: + - 28164 + - 28164.12 + output: + ar_liheap: + - 68 + - 0 +- name: Case 3, five qualified household members receive the large household oil grant. + period: 2026 + input: + people: + parent1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + parent2: + age: 39 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + child1: + age: 12 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + child2: + age: 8 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + child3: + age: 4 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + spm_units: + family: + members: &id002 + - parent1 + - parent2 + - child1 + - child2 + - child3 + heating_type: FUEL_OIL + heating_expense: 100 + households: + home: + members: *id002 + state_code: AR + output: + ar_liheap_household_size: 5 + ar_liheap: 570 +- name: Case 4, the final grant follows heat in rent eligibility without an expense cap. + period: 2026 + input: + state_code: + - AR + - AR + - AR + age: + - 40 + - 40 + - 40 + immigration_status: + - CITIZEN + - CITIZEN + - CITIZEN + ssi: + - 0 + - 0 + - 0 + is_full_time_student: + - false + - false + - false + employment_income: + - 0 + - 0 + - 0 + heating_type: + - NATURAL_GAS + - NATURAL_GAS + - NATURAL_GAS + heating_expense: + - 0 + - 0 + - 10 + heat_expense_included_in_rent: + - true + - true + - true + receives_housing_assistance: + - false + - true + - true + output: + ar_liheap: + - 308 + - 0 + - 308 +- name: Case 5, a mixed state population pays only Arkansas households. + period: 2026 + input: + state_code: + - AR + - GA + age: + - 40 + - 40 + immigration_status: + - CITIZEN + - CITIZEN + ssi: + - 0 + - 0 + is_full_time_student: + - false + - false + employment_income: + - 0 + - 0 + heating_type: + - NATURAL_GAS + - NATURAL_GAS + heating_expense: + - 10 + - 10 + output: + ar_liheap: + - 308 + - 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml new file mode 100644 index 00000000000..4039e73a343 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml @@ -0,0 +1,74 @@ +# Draft FY2025 manual physical pp36-37, corroborated by designated CSCDC operator rights item9. Draft status is disclosed in the research report. + +- name: Case 1, qualified citizens permanent residents and asylees count in the household. + period: 2026 + input: + people: + adult1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + adult2: + age: 39 + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi: 0 + is_full_time_student: false + adult3: + age: 19 + immigration_status: ASYLEE + ssi: 0 + is_full_time_student: false + child1: + age: 17 + immigration_status: DACA + ssi: 0 + is_full_time_student: false + child2: + age: 8 + immigration_status: UNDOCUMENTED + ssi: 0 + is_full_time_student: false + spm_units: + family: + members: &id001 + - adult1 + - adult2 + - adult3 + - child1 + - child2 + heating_type: NATURAL_GAS + heating_expense: 1200 + households: + home: + members: *id001 + state_code: AR + output: + ar_liheap_household_size: 3 +- name: Case 2, a household with no qualified member has zero eligible household size. + period: 2026 + input: + people: + parent: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + is_full_time_student: false + child: + age: 8 + immigration_status: DACA + ssi: 0 + is_full_time_student: false + spm_units: + family: + members: &id002 + - parent + - child + heating_type: NATURAL_GAS + heating_expense: 1200 + households: + home: + members: *id002 + state_code: AR + output: + ar_liheap_household_size: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml new file mode 100644 index 00000000000..c02aa865c69 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml @@ -0,0 +1,216 @@ +# Accepted FY2026 plan physical pp5,9-10; literal income chart; qualified composition source hierarchy in the research report. + +- name: Case 1, the exact income ceiling is inclusive and does not impose an asset test. + period: 2026 + input: + state_code: + - AR + - AR + age: + - 40 + - 40 + immigration_status: + - CITIZEN + - CITIZEN + ssi: + - 0 + - 0 + is_full_time_student: + - false + - false + employment_income: + - 0 + - 0 + heating_type: + - NATURAL_GAS + - NATURAL_GAS + heating_expense: + - 1200 + - 1200 + ar_liheap_countable_income: + - 28164 + - 28164.12 + spm_unit_assets: + - 1000000 + - 1000000 + output: + ar_liheap_eligible: + - true + - false +- name: Case 2, subsidized heat in rent requires a reported residual charge despite a general obligation + flag. + period: 2026 + input: + state_code: + - AR + - AR + - AR + - AR + - AR + age: + - 40 + - 40 + - 40 + - 40 + - 40 + immigration_status: + - CITIZEN + - CITIZEN + - CITIZEN + - CITIZEN + - CITIZEN + ssi: + - 0 + - 0 + - 0 + - 0 + - 0 + is_full_time_student: + - false + - false + - false + - false + - false + employment_income: + - 0 + - 0 + - 0 + - 0 + - 0 + heating_type: + - NATURAL_GAS + - NATURAL_GAS + - NATURAL_GAS + - NATURAL_GAS + - NATURAL_GAS + heating_expense: + - 0 + - 0 + - 120 + - 0 + - 120 + has_heating_expense: + - false + - true + - true + - true + - true + heat_expense_included_in_rent: + - true + - true + - true + - true + - true + receives_housing_assistance: + - false + - true + - true + - false + - false + is_in_public_housing: + - false + - false + - false + - true + - true + output: + ar_liheap_eligible: + - true + - false + - true + - false + - true +- name: Case 3, a direct heating obligation can be reported without a current positive bill. + period: 2026 + input: + state_code: + - AR + - AR + age: + - 40 + - 40 + immigration_status: + - CITIZEN + - CITIZEN + ssi: + - 0 + - 0 + is_full_time_student: + - false + - false + employment_income: + - 0 + - 0 + heating_type: + - NATURAL_GAS + - NATURAL_GAS + heating_expense: + - 0 + - 0 + has_heating_expense: + - true + - false + heat_expense_included_in_rent: + - false + - false + output: + ar_liheap_eligible: + - true + - false +- name: Case 4, explicit no heating and no qualified member each prevent eligibility. + period: 2026 + input: + state_code: + - AR + - AR + age: + - 40 + - 40 + immigration_status: + - CITIZEN + - UNDOCUMENTED + ssi: + - 0 + - 0 + is_full_time_student: + - false + - false + employment_income: + - 0 + - 0 + heating_type: + - NONE + - NATURAL_GAS + heating_expense: + - 1200 + - 1200 + output: + ar_liheap_eligible: + - false + - false +- name: Case 5, SSI receipt does not waive the ordinary income ceiling. + period: 2026 + input: + state_code: + - AR + age: + - 40 + immigration_status: + - CITIZEN + ssi: + - 36000 + is_full_time_student: + - false + employment_income: + - 0 + heating_type: + - NATURAL_GAS + heating_expense: + - 1200 + snap: + - 6000 + output: + ar_liheap_countable_income: + - 36000 + ar_liheap_eligible: + - false diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml new file mode 100644 index 00000000000..a23505bc72f --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml @@ -0,0 +1,205 @@ +# Independent AR component tests; no final household eligibility or total benefit is asserted. + +# Plan p5:15000×0.8=12000 countable work income. +- name: Case 1, adult gross wages receive the twenty percent disregard. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 15_000 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 12_000 + +# Application p2 excludes full-time students from work-income reporting; unearned1200 remains fully countable. +- name: Case 2, full time adult student work is excluded but Social Security remains. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 22 + immigration_status: CITIZEN + is_full_time_student: true + ssi: 0 + employment_income: 15_000 + self_employment_income: 3_000 + social_security: 1_200 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 1_200 + +# Application p2 work-income age18 boundary; SSI2400+support3600=6000 remain countable. +- name: Case 3, minor work is excluded but SSI and child support remain. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 2_400 + employment_income: 15_000 + self_employment_income: 3_000 + child_support_received: 3_600 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 6_000 + +# Exactly18 and not a full-time student makes wages countable, after20%disregard. +- name: Case 4, age eighteen nonstudent earnings are counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + person2: + age: 18 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 15_000 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 12_000 + +# Countable adult existing earned inputs total20000; standard20%disregard gives16000, without a new business-expense calculation. +- name: Case 5, existing business sources receive the standard earned disregard. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 10_000 + self_employment_income: 5_000 + farm_operations_income: 2_500 + sstb_self_employment_income: 1_250 + partnership_s_corp_income: 1_250 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 16_000 + +# Contract specifies nonnegative earned sources: wages12000×0.8+pension1200=10800. +- name: Case 6, source losses do not offset wages or unearned receipts. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 12_000 + self_employment_income: -6_000 + farm_operations_income: -2_400 + pension_income: 1_200 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 10_800 + +# 9600 counted wages+2400rent+1200farmrent+600survivor+2400SSI=16200. Plan pp6–7 excludes TANF although application requests disclosure. +- name: Case 7, farm rent survivors and child SSI count while TANF is excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 12_000 + rental_income: 2_400 + farm_rent_income: 1_200 + survivor_benefits: 600 + person2: + age: 8 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 2_400 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 3_600 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 16_200 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml new file mode 100644 index 00000000000..c596e4ca5b5 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml @@ -0,0 +1,31 @@ +# Independent AR component tests; no final household eligibility or total benefit is asserted. + +# Official2026income chart sizes1–20 plus explicit688monthly extra person at21; source limits are literal, independent of SMI/FPG formula. +- name: Case 1, all published household limits and the first additional person match. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21] + output: + ar_liheap_income_limit: [28_164, 36_840, 45_504, 54_168, 62_832, 71_496, 73_128, 81_228, 89_472, + 97_728, 105_972, 114_228, 122_472, 130_728, 138_972, 147_228, 155_472, 163_728, 171_972, 180_228, + 188_484] + + +# Unverified2025 estimate:2024FPG15060+5380per extra person; monthly size8=6590,size20=14660,rounded increment673→size21=15333. +- name: Case 2, earlier year FPG and additional person rounding stay year relative. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + gas_expense: [1_200, 1_200, 1_200] + ar_liheap_household_size: [8, 20, 21] + output: + ar_liheap_income_limit: [79_080, 175_920, 183_996] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml new file mode 100644 index 00000000000..b58c1272252 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml @@ -0,0 +1,374 @@ +# Independent AR component tests; no final household eligibility or total benefit is asserted. + +# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +- name: Case 1, every published electric row and household column matches at its lower bound. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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, 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, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, + ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, + ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + pre_subsidy_electricity_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, + 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, + 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, + 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [0, 0, 0, 840, 840, 840, 1_560, 1_560, 1_560, 2_280, 2_280, 2_280, 3_000, + 3_000, 3_000, 3_720, 3_720, 3_720, 4_440, 4_440, 4_440, 5_160, 5_160, 5_160, 5_880, 5_880, 5_880, + 6_600, 6_600, 6_600, 7_320, 7_320, 7_320, 8_040, 8_040, 8_040, 8_760, 8_760, 8_760, 9_480, 9_480, + 9_480, 10_200, 10_200, 10_200, 10_920, 10_920, 10_920, 11_640, 11_640, 11_640, 12_360, 12_360, + 12_360, 13_080, 13_080, 13_080, 13_800, 13_800, 13_800, 14_520, 14_520, 14_520, 15_240, 15_240, + 15_240, 15_960, 15_960, 15_960, 16_680, 16_680, 16_680, 17_400, 17_400, 17_400, 18_120, 18_120, + 18_120, 18_840, 18_840, 18_840, 19_560, 19_560, 19_560, 20_280, 20_280, 20_280, 21_000, 21_000, + 21_000, 22_440, 22_440, 22_440, 23_880, 23_880, 23_880, 24_120, 24_120, 24_120, 25_560, 25_560, + 25_560, 28_176, 28_176, 28_176, 36_852, 36_852, 36_852, 45_516, 45_516, 45_516, 54_180, 54_180, + 54_180, 62_844, 62_844, 62_844] + output: + ar_liheap_matrix_amount: [242, 288, 344, 233, 276, 334, 221, 266, 322, 209, 254, 310, 199, 242, + 300, 187, 233, 288, 179, 223, 276, 174, 215, 266, 170, 209, 254, 166, 204, 242, 160, 197, 233, + 155, 192, 221, 149, 187, 209, 143, 181, 199, 138, 175, 190, 132, 170, 182, 127, 164, 176, 121, + 158, 170, 115, 154, 164, 110, 148, 158, 104, 143, 152, 100, 137, 145, 94, 131, 140, 88, 126, 134, + 83, 120, 128, 77, 114, 124, 72, 109, 118, 66, 103, 112, 60, 97, 107, 60, 92, 101, 60, 86, 95, + 60, 80, 90, 60, 76, 84, 60, 70, 79, 60, 64, 73, 0, 60, 67, 0, 60, 61, 0, 0, 60, 0, 0, 60] + + +# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +- name: Case 2, every published natgas row and household column matches at its lower bound. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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, 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, 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] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, + 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, + 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, + 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [0, 0, 0, 840, 840, 840, 1_560, 1_560, 1_560, 2_280, 2_280, 2_280, 3_000, + 3_000, 3_000, 3_720, 3_720, 3_720, 4_440, 4_440, 4_440, 5_160, 5_160, 5_160, 5_880, 5_880, 5_880, + 6_600, 6_600, 6_600, 7_320, 7_320, 7_320, 8_040, 8_040, 8_040, 8_760, 8_760, 8_760, 9_480, 9_480, + 9_480, 10_200, 10_200, 10_200, 10_920, 10_920, 10_920, 11_640, 11_640, 11_640, 12_360, 12_360, + 12_360, 13_080, 13_080, 13_080, 13_800, 13_800, 13_800, 14_520, 14_520, 14_520, 15_240, 15_240, + 15_240, 15_960, 15_960, 15_960, 16_680, 16_680, 16_680, 17_400, 17_400, 17_400, 18_120, 18_120, + 18_120, 18_840, 18_840, 18_840, 19_560, 19_560, 19_560, 20_280, 20_280, 20_280, 21_000, 21_000, + 21_000, 22_440, 22_440, 22_440, 23_880, 23_880, 23_880, 24_120, 24_120, 24_120, 25_560, 25_560, + 25_560, 28_176, 28_176, 28_176, 36_852, 36_852, 36_852, 45_516, 45_516, 45_516, 54_180, 54_180, + 54_180, 62_844, 62_844, 62_844] + output: + ar_liheap_matrix_amount: [308, 366, 437, 295, 350, 422, 280, 338, 409, 265, 324, 394, 253, 308, + 380, 238, 295, 366, 227, 283, 350, 221, 272, 338, 216, 265, 324, 210, 258, 308, 203, 250, 295, + 197, 245, 280, 190, 238, 265, 182, 230, 253, 175, 223, 240, 168, 216, 232, 161, 209, 224, 154, + 202, 216, 146, 194, 209, 139, 187, 200, 132, 181, 193, 127, 174, 185, 121, 167, 178, 115, 160, + 169, 112, 152, 162, 107, 145, 154, 103, 138, 146, 98, 131, 138, 95, 124, 131, 90, 116, 122, 84, + 109, 115, 79, 102, 107, 73, 95, 100, 68, 88, 91, 62, 80, 84, 0, 73, 76, 0, 66, 68, 0, 0, 60, 0, + 0, 60] + + +# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +- name: Case 3, every published propane row and household column matches at its lower bound. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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, 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, PROPANE, + PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, + PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + bottled_gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, + 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, + 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, + 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [0, 0, 0, 840, 840, 840, 1_560, 1_560, 1_560, 2_280, 2_280, 2_280, 3_000, + 3_000, 3_000, 3_720, 3_720, 3_720, 4_440, 4_440, 4_440, 5_160, 5_160, 5_160, 5_880, 5_880, 5_880, + 6_600, 6_600, 6_600, 7_320, 7_320, 7_320, 8_040, 8_040, 8_040, 8_760, 8_760, 8_760, 9_480, 9_480, + 9_480, 10_200, 10_200, 10_200, 10_920, 10_920, 10_920, 11_640, 11_640, 11_640, 12_360, 12_360, + 12_360, 13_080, 13_080, 13_080, 13_800, 13_800, 13_800, 14_520, 14_520, 14_520, 15_240, 15_240, + 15_240, 15_960, 15_960, 15_960, 16_680, 16_680, 16_680, 17_400, 17_400, 17_400, 18_120, 18_120, + 18_120, 18_840, 18_840, 18_840, 19_560, 19_560, 19_560, 20_280, 20_280, 20_280, 21_000, 21_000, + 21_000, 22_440, 22_440, 22_440, 23_880, 23_880, 23_880, 24_120, 24_120, 24_120, 25_560, 25_560, + 25_560, 28_176, 28_176, 28_176, 36_852, 36_852, 36_852, 45_516, 45_516, 45_516, 54_180, 54_180, + 54_180, 62_844, 62_844, 62_844] + output: + ar_liheap_matrix_amount: [397, 472, 563, 380, 451, 545, 360, 436, 527, 342, 418, 506, 326, 397, + 490, 306, 380, 472, 293, 365, 451, 284, 352, 436, 278, 342, 418, 271, 334, 397, 262, 323, 380, + 253, 314, 360, 244, 306, 342, 235, 296, 326, 226, 288, 310, 216, 278, 299, 208, 269, 289, 198, + 260, 278, 190, 251, 269, 180, 242, 258, 170, 233, 250, 163, 223, 239, 156, 215, 229, 149, 205, + 220, 144, 197, 211, 138, 187, 202, 132, 178, 193, 127, 169, 184, 121, 160, 174, 116, 151, 166, + 110, 142, 156, 106, 132, 148, 100, 124, 138, 95, 114, 128, 89, 106, 120, 0, 96, 110, 0, 86, 102, + 0, 0, 92, 0, 0, 83] + + +# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +- name: Case 4, every published fueloil row and household column matches at its lower bound. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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, 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, 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] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + fuel_oil_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, + 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, + 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, + 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [0, 0, 0, 840, 840, 840, 1_560, 1_560, 1_560, 2_280, 2_280, 2_280, 3_000, + 3_000, 3_000, 3_720, 3_720, 3_720, 4_440, 4_440, 4_440, 5_160, 5_160, 5_160, 5_880, 5_880, 5_880, + 6_600, 6_600, 6_600, 7_320, 7_320, 7_320, 8_040, 8_040, 8_040, 8_760, 8_760, 8_760, 9_480, 9_480, + 9_480, 10_200, 10_200, 10_200, 10_920, 10_920, 10_920, 11_640, 11_640, 11_640, 12_360, 12_360, + 12_360, 13_080, 13_080, 13_080, 13_800, 13_800, 13_800, 14_520, 14_520, 14_520, 15_240, 15_240, + 15_240, 15_960, 15_960, 15_960, 16_680, 16_680, 16_680, 17_400, 17_400, 17_400, 18_120, 18_120, + 18_120, 18_840, 18_840, 18_840, 19_560, 19_560, 19_560, 20_280, 20_280, 20_280, 21_000, 21_000, + 21_000, 22_440, 22_440, 22_440, 23_880, 23_880, 23_880, 24_120, 24_120, 24_120, 25_560, 25_560, + 25_560, 28_176, 28_176, 28_176, 36_852, 36_852, 36_852, 45_516, 45_516, 45_516, 54_180, 54_180, + 54_180, 62_844, 62_844, 62_844] + output: + ar_liheap_matrix_amount: [402, 478, 570, 385, 457, 552, 365, 442, 534, 347, 422, 514, 330, 402, + 497, 310, 385, 478, 296, 370, 457, 288, 356, 442, 282, 347, 422, 275, 337, 402, 265, 326, 385, + 257, 319, 365, 247, 310, 347, 238, 301, 330, 228, 292, 313, 220, 282, 302, 210, 272, 293, 200, + 264, 282, 192, 254, 272, 182, 245, 262, 173, 236, 252, 166, 227, 241, 158, 217, 233, 151, 209, + 223, 145, 199, 214, 140, 190, 204, 134, 180, 196, 128, 172, 186, 124, 162, 176, 118, 152, 168, + 110, 144, 158, 103, 134, 149, 96, 125, 140, 89, 116, 131, 82, 108, 122, 0, 98, 113, 0, 90, 104, + 0, 0, 95, 0, 0, 86] + + +# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +- name: Case 5, every published other row and household column matches at its lower bound. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, + AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + heating_type: [OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + other_heating_fuel_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, + 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, + 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, + 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, + 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [0, 0, 0, 840, 840, 840, 1_560, 1_560, 1_560, 2_280, 2_280, 2_280, 3_000, + 3_000, 3_000, 3_720, 3_720, 3_720, 4_440, 4_440, 4_440, 5_160, 5_160, 5_160, 5_880, 5_880, 5_880, + 6_600, 6_600, 6_600, 7_320, 7_320, 7_320, 8_040, 8_040, 8_040, 8_760, 8_760, 8_760, 9_480, 9_480, + 9_480, 10_200, 10_200, 10_200, 10_920, 10_920, 10_920, 11_640, 11_640, 11_640, 12_360, 12_360, + 12_360, 13_080, 13_080, 13_080, 13_800, 13_800, 13_800, 14_520, 14_520, 14_520, 15_240, 15_240, + 15_240, 15_960, 15_960, 15_960, 16_680, 16_680, 16_680, 17_400, 17_400, 17_400, 18_120, 18_120, + 18_120, 18_840, 18_840, 18_840, 19_560, 19_560, 19_560, 20_280, 20_280, 20_280, 21_000, 21_000, + 21_000, 22_440, 22_440, 22_440, 23_880, 23_880, 23_880, 24_120, 24_120, 24_120, 25_560, 25_560, + 25_560, 28_176, 28_176, 28_176, 36_852, 36_852, 36_852, 45_516, 45_516, 45_516, 54_180, 54_180, + 54_180, 62_844, 62_844, 62_844] + output: + ar_liheap_matrix_amount: [289, 344, 410, 277, 330, 397, 263, 318, 384, 250, 305, 370, 238, 289, + 358, 223, 277, 344, 214, 266, 330, 208, 257, 318, 203, 250, 305, 198, 244, 289, 191, 235, 277, + 185, 230, 263, 178, 223, 250, 172, 216, 238, 164, 210, 226, 158, 203, 218, 151, 197, 211, 144, + 190, 203, 138, 184, 197, 131, 176, 188, 125, 170, 182, 119, 163, 174, 114, 156, 167, 109, 150, + 161, 104, 143, 154, 101, 137, 148, 97, 130, 140, 92, 124, 134, 89, 116, 127, 85, 110, 121, 79, + 103, 114, 74, 97, 107, 68, 90, 101, 64, 83, 94, 60, 77, 88, 0, 70, 80, 0, 64, 74, 0, 0, 67, 0, + 0, 61] + + +# Electric3–4column:69.99→288;70→276;1989.99→86;1990→80;2009.99→80;2010→76. Irregular20dollar band is preserved. +- name: Case 6, fractional income stays below the next published lower bound. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [3, 3, 3, 3, 3, 3] + ar_liheap_countable_income: [839.88, 840, 23879.88, 23_880, 24119.88, 24_120] + pre_subsidy_electricity_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + output: + ar_liheap_matrix_amount: [288, 276, 86, 80, 80, 76] + + +# Propane0–69row groups1–2,3–4,5+; no fixed-matrix expense cap from a50annual bill. +- name: Case 7, within group sizes and large households share published payment columns. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR] + heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [1, 2, 3, 4, 5, 8, 21] + ar_liheap_countable_income: [0, 0, 0, 0, 0, 0, 0] + bottled_gas_expense: [50, 50, 50, 50, 50, 50, 50] + output: + ar_liheap_matrix_amount: [397, 397, 472, 472, 563, 563, 563] + + +# Application fuel grouping maps kerosene to fuel oil; wood/coal/other use the other-fuel table. +- name: Case 8, kerosene wood and coal use their source supported fuel groups. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR] + heating_type: [KEROSENE, WOOD, COAL, OTHER] + gas_expense: [1_200, 1_200, 1_200, 1_200] + ar_liheap_household_size: [5, 5, 5, 5] + ar_liheap_countable_income: [0, 0, 0, 0] + fuel_oil_expense: [1_200, 1_200, 1_200, 1_200] + wood_expense: [1_200, 1_200, 1_200, 1_200] + coal_expense: [1_200, 1_200, 1_200, 1_200] + other_heating_fuel_expense: [1_200, 1_200, 1_200, 1_200] + output: + ar_liheap_matrix_amount: [570, 410, 410, 410] + + +# NONE affirmatively means no heating; no invented fuel fallback. +- name: Case 9, explicit no heating has no matrix amount. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: AR + heating_type: NONE + gas_expense: 1_200 + ar_liheap_household_size: 1 + ar_liheap_countable_income: 0 + output: + ar_liheap_matrix_amount: 0 diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py new file mode 100644 index 00000000000..919b3bee132 --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class ar_liheap(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Arkansas LIHEAP regular heating benefit" + defined_for = "ar_liheap_eligible" + documentation = ( + "Annual regular heating grant from the FY2026 fuel matrices. Earlier " + "or later results use parameter backfilling and are unverified estimates. " + "The proposed FY2027 increase is not treated as an adopted schedule." + ) + reference = ( + "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=11" + ) + + def formula(spm_unit, period, parameters): + # Regular assistance is a fixed grant, not capped by the reported bill. + # Unsupported fuel mappings are documented in the matrix variable. + return spm_unit("ar_liheap_matrix_amount", period) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py new file mode 100644 index 00000000000..d3998576b71 --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py @@ -0,0 +1,28 @@ +from policyengine_us.model_api import * + + +class ar_liheap_household_size(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "Arkansas LIHEAP household size" + defined_for = StateCode.AR + documentation = ( + "Number of citizens and qualified noncitizens in the household. Other " + "members' otherwise countable income remains included in full. The " + "FY2025 draft manual's composition rule is corroborated by the current " + "rights statement of a state-designated LIHEAP subgrantee." + ) + reference = ( + # Draft manual sections 4.4-4.4.1, pages 36-37; not an adopted FY2026 manual. + "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=36", + # Current operator's rights statement, item 9; no revision date shown. + "https://www.cscdc.net/rights-responsibilities-of-liheap-applicants/", + # State designation of CSCDC, page 2; revised May 11, 2026. + "https://adeq.state.ar.us/energy/initiatives/pdfs/LIHEAP-SubgranteeNetworkServiceTerritories.pdf#page=2", + ) + # Do not import SNAP-specific waiting periods or immigration restrictions. + # Qualified COFA/battered and other cases absent from immigration_status + # require an override of the existing qualified-status flag. Identity and + # immigration-document verification remain administrative assumptions. + adds = ["is_citizen_or_legal_immigrant"] diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py new file mode 100644 index 00000000000..038821393aa --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py @@ -0,0 +1,41 @@ +from policyengine_us.model_api import * + + +class ar_liheap_eligible(Variable): + value_type = bool + entity = SPMUnit + definition_period = YEAR + label = "Eligible for Arkansas LIHEAP regular heating assistance" + defined_for = StateCode.AR + # Plan sections 1.5 and 2.1-2.3, pages 5 and 9-10: no categorical + # income bypass or asset test; direct or indirect heating burden required. + reference = "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9" + + def formula(spm_unit, period, parameters): + size = spm_unit("ar_liheap_household_size", period) + income = spm_unit("ar_liheap_countable_income", period) + income_limit = spm_unit("ar_liheap_income_limit", period) + fuel = spm_unit("heating_type", period) + heat_in_rent = spm_unit("heat_expense_included_in_rent", period) + expense = spm_unit("heating_expense", period) + has_expense = spm_unit("has_heating_expense", period) + subsidized = spm_unit.household("is_in_public_housing", period) | spm_unit( + "receives_housing_assistance", period + ) + # For subsidized heat included in rent, a positive expense represents + # a verified excess charge. The general responsibility flag cannot + # substitute for this surcharge. Unsubsidized rent needs no extra bill. + rent_responsibility = ~subsidized | (expense > 0) + # For direct bills, reported heating costs are assumed to represent + # the household's remaining obligation after any utility allowance, + # not a gross bill already fully reimbursed. Verification is not modeled. + direct_responsibility = (expense > 0) | has_expense + heating_responsibility = where( + heat_in_rent, rent_responsibility, direct_responsibility + ) + return ( + (size > 0) + & (income <= income_limit) + & (fuel != fuel.possible_values.NONE) + & heating_responsibility + ) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py new file mode 100644 index 00000000000..bd20142f49f --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -0,0 +1,37 @@ +from policyengine_us.model_api import * + + +class ar_liheap_countable_income(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Arkansas LIHEAP countable income" + defined_for = StateCode.AR + reference = ( + # State plan sections 1.8-1.9, pages 5-7; application section III, page 2. + "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ar.ee.aeo.liheap.income + person = spm_unit.members + # Section III excludes minors' and full-time students' work income, + # but requests non-work income from every household member. + counted_worker = ( + person("age", period) >= p.minimum_earned_income_age + ) & ~person("is_full_time_student", period) + # Existing net business income approximates gross receipts. Additional + # business/work-expense deductions and new gross inputs are deferred. + earned_income = 0 + for source in p.sources.earned: + earned_income = earned_income + max_(person(source, period), 0) + countable_earnings = spm_unit.sum(earned_income * counted_worker) * ( + 1 - p.earned_disregard + ) + unearned_income = add(spm_unit, period, p.sources.unearned, options=[ADD]) + # Annual inputs approximate the application's preceding four weeks. + # Otherwise countable income from every member is included in full, + # even when that member is excluded from ar_liheap_household_size. + return max_(countable_earnings + unearned_income, 0) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py new file mode 100644 index 00000000000..e2c5f0ea55f --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py @@ -0,0 +1,49 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.hhs_smi import smi +from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg + + +class ar_liheap_income_limit(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Arkansas LIHEAP annualized income limit" + defined_for = StateCode.AR + reference = ( + "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ar.ee.aeo.liheap.income.limit + size = spm_unit("ar_liheap_household_size", period) + state = spm_unit.household("state_code_str", period) + monthly_smi = smi(size, state, period, parameters) * p.smi_rate / MONTHS_IN_YEAR + state_group = spm_unit.household("state_group_str", period) + capped_size = clip(size, 1, p.max_table_size) + guideline = fpg( + capped_size, state_group, period, parameters, year_lag=p.fpg_year_lag + ) + additional_guideline = ( + fpg( + capped_size + 1, + state_group, + period, + parameters, + year_lag=p.fpg_year_lag, + ) + - guideline + ) + monthly_fpg = guideline * p.fpg_rate / MONTHS_IN_YEAR + monthly_increment = additional_guideline * p.fpg_rate / MONTHS_IN_YEAR + monthly_base = where(size <= p.smi_max_size, monthly_smi, monthly_fpg) + # Half-up monthly rounding reproduces the published FY2026 table; + # it is a reconciled numerical pattern, not an express rounding rule. + # The chart separately adds $688 for each person above size 20. + rounding = p.rounding_increment + rounded_base = np.floor(monthly_base / rounding + 0.5) * rounding + rounded_increment = np.floor(monthly_increment / rounding + 0.5) * rounding + extra_people = max_(size - p.max_table_size, 0) + monthly_limit = rounded_base + extra_people * rounded_increment + return where(size > 0, monthly_limit * MONTHS_IN_YEAR, 0) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py new file mode 100644 index 00000000000..9e5d58d071b --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py @@ -0,0 +1,53 @@ +from policyengine_us.model_api import * + + +class ar_liheap_matrix_amount(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Arkansas LIHEAP regular heating matrix amount" + defined_for = StateCode.AR + reference = ( + # Each fuel schedule spans pages 1-2; application fuel groups are on page 3. + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Natural-Gas.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Fuel-Oil.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Other-Wood-Pellets.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=3", + ) + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ar.ee.aeo.liheap.payment + income = spm_unit("ar_liheap_countable_income", period) / MONTHS_IN_YEAR + size = spm_unit("ar_liheap_household_size", period) + # Tables use the printed lower bounds: $70 starts the next band. + # Cents remain in the lower band until that next whole-dollar bound. + band = p.income_band.calc(max_(income, 0)).astype(int) + size_group = p.household_size_group.calc(max_(size, 1)).astype(int) + fuel = spm_unit("heating_type", period) + fuels = fuel.possible_values + amount = select( + [ + fuel == fuels.ELECTRICITY, + fuel == fuels.NATURAL_GAS, + fuel == fuels.PROPANE, + (fuel == fuels.FUEL_OIL) | (fuel == fuels.KEROSENE), + (fuel == fuels.WOOD) | (fuel == fuels.COAL) | (fuel == fuels.OTHER), + ], + [ + p.matrix.electricity[band][size_group], + p.matrix.natural_gas[band][size_group], + p.matrix.propane[band][size_group], + p.matrix.fuel_oil[band][size_group], + p.matrix.other[band][size_group], + ], + # NONE has no heating. UNSPECIFIED and SOLAR have no supported + # schedule mapping; zero is an unverified estimate, not a legal + # eligibility determination, including when heat is in rent. + default=0, + ) + # This is the ungated table amount; ar_liheap applies eligibility. + # The fixed regular schedule has no actual-expense cap. + return where(size > 0, amount, 0) From 00331b700da91e85d7c121342f1d69016b95674c Mon Sep 17 00:00:00 2001 From: Ziming Date: Sun, 4 Oct 2026 20:17:38 -0400 Subject: [PATCH 2/7] Clarify AR LIHEAP coverage limitations --- policyengine_us/programs.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 40e57bdfc0b..c34002dfc5e 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -811,7 +811,7 @@ programs: variable: ar_liheap parameter_prefix: gov.states.ar.ee.aeo.liheap verified_years: "2026" - notes: FY2026 regular heating eligibility and published award matrix. Uses qualified household size and full countable household income. Administrative household and billing facts use documented existing-input approximations; historical backfills and FY2027 draft changes are unverified. Regular heating only; crisis, cooling, weatherization and equipment assistance are excluded. + notes: FY2026 regular heating eligibility and published award matrix. Uses qualified household size and full countable household income. Solar-heating payment treatment is not verified; its modeled zero does not establish legal ineligibility. Administrative household and billing facts use documented existing-input approximations; historical backfills and FY2027 draft changes are unverified. Regular heating only; crisis, cooling, weatherization and equipment assistance are excluded. - state: OR status: in_progress name: LIHEAP From 28a6635ee3f6dd2eec2b9a76c3b060cf23f23501 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 6 Oct 2026 17:21:35 -0400 Subject: [PATCH 3/7] Fix issues from review: FY2025 tables, income sources, rounding - Encode the FY2025 matrices, income bands and eligibility chart (size 7 on 150% FPG, $672 extra-person amount) alongside FY2026. - Count Social Security and railroad retirement net of the Medicare Part B premium; count military retirement pay. - Follow the draft manual where it conflicts with the plan: count workers' compensation, TEA (through take-up-gated tanf), gambling winnings and capital gains, each with the conflict noted. - Also follow the draft manual on: interest counted only above $200 a month (p137); rental and farm rent as self-employment with the 20% deduction (p141); a minor's earnings excluded only while in school (p133); the student exclusion only for dependent college students up to 23 (p134). - Round monthly countable income to the nearest dollar; floor each income source at zero. - Shorten the registry note and fix reference locators. - Add period-2025, income-source, rounding and fuel cases; tidy tests. Co-Authored-By: Claude Opus 5.5 --- .../aeo/liheap/income/earned_disregard.yaml | 4 +- .../aeo/liheap/income/interest_disregard.yaml | 18 + .../limit/additional_member_amount.yaml | 17 + .../ee/aeo/liheap/income/limit/fpg_rate.yaml | 6 +- .../aeo/liheap/income/limit/fpg_year_lag.yaml | 9 +- .../liheap/income/limit/max_table_size.yaml | 4 +- .../income/limit/rounding_increment.yaml | 10 +- .../aeo/liheap/income/limit/smi_max_size.yaml | 8 + .../ee/aeo/liheap/income/limit/smi_rate.yaml | 6 +- .../income/minimum_earned_income_age.yaml | 11 - .../ee/aeo/liheap/income/sources/earned.yaml | 17 +- .../aeo/liheap/income/sources/unearned.yaml | 50 +- .../student_exclusion/child_age_limit.yaml | 16 + .../student_exclusion/college_max_age.yaml | 21 + .../liheap/payment/household_size_group.yaml | 14 +- .../ar/ee/aeo/liheap/payment/income_band.yaml | 158 ++--- .../liheap/payment/matrix/electricity.yaml | 226 +++---- .../aeo/liheap/payment/matrix/fuel_oil.yaml | 226 +++---- .../liheap/payment/matrix/natural_gas.yaml | 212 ++++--- .../ee/aeo/liheap/payment/matrix/other.yaml | 233 +++---- .../ee/aeo/liheap/payment/matrix/propane.yaml | 225 +++---- policyengine_us/programs.yaml | 4 +- .../states/ar/ee/aeo/liheap/ar_liheap.yaml | 575 ++++++++++++++---- .../aeo/liheap/ar_liheap_household_size.yaml | 42 +- .../eligibility/ar_liheap_eligible.yaml | 287 +++------ .../income/ar_liheap_countable_income.yaml | 502 ++++++++++++++- .../liheap/income/ar_liheap_income_limit.yaml | 24 +- .../payment/ar_liheap_matrix_amount.yaml | 93 ++- .../gov/states/ar/ee/aeo/liheap/ar_liheap.py | 4 +- .../liheap/eligibility/ar_liheap_eligible.py | 2 +- .../income/ar_liheap_countable_income.py | 90 ++- .../liheap/income/ar_liheap_income_limit.py | 22 +- .../liheap/payment/ar_liheap_matrix_amount.py | 9 +- 33 files changed, 2096 insertions(+), 1049 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/additional_member_amount.yaml delete mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml index 5b320d62428..65170212bea 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml @@ -1,6 +1,6 @@ description: Arkansas excludes this share of earned income under the Low Income Home Energy Assistance Program. values: - 2025-10-01: 0.2 + 2024-10-01: 0.2 metadata: unit: /1 @@ -9,3 +9,5 @@ metadata: reference: - title: Arkansas FY2026 State Plan, Section 1.8 href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 + - title: Arkansas FY2025 State Plan, Section 1.8 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml new file mode 100644 index 00000000000..3c7e9bc7f7b --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml @@ -0,0 +1,18 @@ +description: Arkansas excludes this amount of interest from countable income under the Low Income Home Energy Assistance Program. +# Manual Appendix F (page 137) counts interest only as the "amount over +# $200.00". Unearned income is what is received in the month before application +# (Section 4.7, page 41; Appendix E, pages 129-130, converts other frequencies +# to monthly), so the amount is monthly. The manual does not say whose $200 it +# is; applying it to each recipient is a chosen reading, and a household-wide +# $200 would count more. Plan Section 1.9 (page 6) counts "Interest, dividends, +# or royalties" with no threshold; the manual is followed. +values: + 2024-10-01: 200 + +metadata: + unit: currency-USD + period: month + label: Arkansas LIHEAP interest income disregard + reference: + - title: Arkansas LIHEAP draft manual FY2025, Appendix F, Interest + href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=137 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/additional_member_amount.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/additional_member_amount.yaml new file mode 100644 index 00000000000..f26ac0b9529 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/additional_member_amount.yaml @@ -0,0 +1,17 @@ +description: Arkansas sets this amount as the monthly income limit increase per additional household member under the Low Income Home Energy Assistance Program. +# The charts print these amounts for each member above the largest published +# size. Half-up rounding of 150% of the FY2025 guideline increment ($672.50) +# would give $673, so the printed amounts are stored rather than derived. +values: + 2024-10-01: 672 + 2025-10-01: 688 + +metadata: + unit: currency-USD + period: month + label: Arkansas LIHEAP additional member income limit amount + reference: + - title: Arkansas FY2026 Income Eligibility Chart, additional-person instruction + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 Income Eligibility Chart, additional-person instruction + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml index 42394a76787..a6aa86e0bfa 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml @@ -1,6 +1,6 @@ description: Arkansas limits countable income to this multiple of the federal poverty guideline for households above the state median income size limit under the Low Income Home Energy Assistance Program. values: - 2025-10-01: 1.5 + 2024-10-01: 1.5 metadata: unit: /1 @@ -11,3 +11,7 @@ metadata: href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9 - title: Arkansas FY2026 Income Eligibility Chart href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 State Plan, Section 2.1 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=8 + - title: Arkansas FY2025 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml index 67ea5320ea2..5625ea74b2a 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml @@ -1,8 +1,9 @@ description: Arkansas uses the federal poverty guideline from this many years before the benefit year under the Low Income Home Energy Assistance Program. -# The FY2026 published thresholds match the 2025 federal poverty guidelines. -# Earlier years use their corresponding guideline year but are unverified. +# The FY2025 and FY2026 published thresholds match the 2024 and 2025 federal +# poverty guidelines. Other years use their corresponding guideline year but +# are unverified. values: - 2025-10-01: 1 + 2024-10-01: 1 metadata: unit: year @@ -11,3 +12,5 @@ metadata: reference: - title: Arkansas FY2026 Income Eligibility Chart using the 2025 federal poverty guidelines href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 Income Eligibility Chart using the 2024 federal poverty guidelines + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml index 63ea93c51ea..2cc7852287d 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml @@ -1,6 +1,6 @@ description: Arkansas publishes income limits up to this household size before adding a separate amount per additional member under the Low Income Home Energy Assistance Program. values: - 2025-10-01: 20 + 2024-10-01: 20 metadata: unit: person @@ -9,3 +9,5 @@ metadata: reference: - title: Arkansas FY2026 Income Eligibility Chart, additional-person instruction href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 Income Eligibility Chart, additional-person instruction + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml index ef7f743b04f..cb6d1974171 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml @@ -1,9 +1,9 @@ description: Arkansas publishes monthly income limits in increments of this amount under the Low Income Home Energy Assistance Program. -# Half-up rounding of the base and additional-person amount separately -# reproduces every FY2026 row and the published $688 increment above size 20. -# This is a reconciled numerical pattern, not an express rounding instruction. +# Half-up rounding of the monthly base limit reproduces every FY2025 and FY2026 +# row for sizes 1 to 20. This is a reconciled numerical pattern, not an express +# rounding instruction. values: - 2025-10-01: 1 + 2024-10-01: 1 metadata: unit: currency-USD @@ -12,3 +12,5 @@ metadata: reference: - title: Arkansas FY2026 Income Eligibility Chart href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml index b69c193504a..c066f95dcb3 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml @@ -1,5 +1,9 @@ description: Arkansas uses state median income for households up to this size under the Low Income Home Energy Assistance Program. values: + # FY2025 plan Section 2.1: sizes 1-6 use state median income, size 7 and up + # use the HHS poverty guidelines. + 2024-10-01: 6 + # FY2026 plan Section 2.1: sizes 1-7 use state median income. 2025-10-01: 7 metadata: @@ -11,3 +15,7 @@ metadata: href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9 - title: Arkansas FY2026 Income Eligibility Chart href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 State Plan, Section 2.1 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=8 + - title: Arkansas FY2025 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml index 64257933164..4a9216f3ace 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml @@ -1,6 +1,6 @@ description: Arkansas limits countable income to this share of state median income for households within the state median income size limit under the Low Income Home Energy Assistance Program. values: - 2025-10-01: 0.6 + 2024-10-01: 0.6 metadata: unit: /1 @@ -11,3 +11,7 @@ metadata: href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9 - title: Arkansas FY2026 Income Eligibility Chart href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf + - title: Arkansas FY2025 State Plan, Section 2.1 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=8 + - title: Arkansas FY2025 Income Eligibility Chart + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml deleted file mode 100644 index fb4da067faf..00000000000 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/minimum_earned_income_age.yaml +++ /dev/null @@ -1,11 +0,0 @@ -description: Arkansas counts work income beginning at this age for members who are not full-time students under the Low Income Home Energy Assistance Program. -values: - 2025-10-01: 18 - -metadata: - unit: year - period: year - label: Arkansas LIHEAP minimum earned income age - reference: - - title: Arkansas LIHEAP Application, Section III Work Income - href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml index 5ba40056510..a4650c6d4ee 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml @@ -3,19 +3,30 @@ description: Arkansas counts these earned income sources under the Low Income Ho # business-expense deduction or new gross-receipts input is modeled. # Active and passive partnership income cannot be separated by existing inputs. values: - 2025-10-01: + 2024-10-01: - employment_income - self_employment_income - sstb_self_employment_income - farm_operations_income - partnership_s_corp_income + # Manual Appendix F (page 141) treats rental property as a self-employment + # enterprise, so rental income, including farm rent, takes the earned + # disregard. Plan Section 1.8 (page 5) subtracts 20% from work income only + # and Section 1.9 (page 6) lists rental income as its own item; the manual + # is followed. + - rental_income + - farm_rent_income metadata: unit: list period: year label: Arkansas LIHEAP earned income sources reference: - - title: Arkansas FY2026 State Plan, Sections 1.8 and 1.9 - href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 + - title: Arkansas FY2026 State Plan, Section 1.9 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 + - title: Arkansas FY2025 State Plan, Section 1.9 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 - title: Arkansas LIHEAP Application, Section III Household Income href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 + - title: Arkansas LIHEAP draft manual FY2025, Appendix F, Rental property + href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=141 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml index 3011bffb0d5..c5a16924549 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml @@ -1,42 +1,50 @@ description: Arkansas counts these unearned income sources under the Low Income Home Energy Assistance Program. -# Ordinary and farm rental receipts are independent, nonnegative inputs. -# The plan leaves TANF and general assistance unchecked; disclosure of TEA -# on the application does not establish countability. The plan also leaves -# insurance payments unchecked, so workers compensation/private disability -# are not inferred countable solely from the application disclosure list. -# Medicare adjustments are deferred; use the existing Social Security amount. -# Counted loans, lottery winnings, jury duty, royalties and foster care -# receipts lack sufficiently specific inputs and are not represented here. -# Gambling winnings cannot isolate lotteries, the only counted lump sum. +# Each source is floored at zero in the income formula, so a loss in one source +# cannot offset other income. The formula also counts Social Security and +# railroad retirement net of the Medicare Part B premium, interest above the +# monthly disregard, and TEA. Rental income is in the earned list. +# Where the plan and the FY2025 draft manual differ, the manual is followed. +# Counted loans, jury duty, royalties and foster care receipts lack +# sufficiently specific inputs and are not represented here. values: - 2025-10-01: + 2024-10-01: - unemployment_compensation - strike_benefits - - social_security - ssi - # Pension income includes government pensions, including military pensions. - # military_retirement_pay classifies that income for tax exclusions; adding - # it separately would count the same pension twice when both are supplied. + # Military retirement pay is a separate input from the pension inputs that + # pension_income adds, so both are listed; a household reports the amount + # in one or the other (manual Appendix F, page 141). - pension_income - # Non-Social-Security survivor and railroad receipts. + - military_retirement_pay + # Non-Social-Security survivor receipts. - survivor_benefits - - railroad_benefits - - rental_income - - farm_rent_income - alimony_income - child_support_received - - interest_income - ordinary_dividend_income - veterans_benefits # Cash gifts from friends and relatives outside the household. - financial_assistance + # Manual Appendices E (page 130) and F (page 144) and the application + # (page 2) count workers' compensation; plan Section 1.9 leaves "Insurance + # payments made directly to the insured" unchecked. + - workers_compensation + # Manual Appendix F (page 135) counts all gaming or gambling winnings; plan + # Section 1.9 (page 7) counts lottery winnings as the only one-time lump sum. + - gambling_winnings + # Manual Appendix F (page 132) counts capital gains and excludes capital + # losses; plan Section 1.9 has no capital gains item. + - capital_gains metadata: unit: list period: year label: Arkansas LIHEAP unearned income sources reference: - - title: Arkansas FY2026 State Plan, Sections 1.8 and 1.9 - href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 + - title: Arkansas FY2026 State Plan, Section 1.9 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 + - title: Arkansas FY2025 State Plan, Section 1.9 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 + - title: "Arkansas LIHEAP draft manual FY2025, Appendices E and F #page 130, 132, 135, 141, 144" + href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=130 - title: Arkansas LIHEAP Application, Section III Household Income href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml new file mode 100644 index 00000000000..72b81e4663a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml @@ -0,0 +1,16 @@ +description: Arkansas excludes earnings of students younger than this age under the Low Income Home Energy Assistance Program. +# Manual Appendix F (page 133) excludes a child's earnings only while the child +# attends school at least half time. Plan Section 1.9 (page 6) leaves "Earned +# income of a child under the age of 18" unchecked and application Section III +# (page 2) requests work income from members "18 and older"; both exclude every +# minor's earnings. The manual is followed. +values: + 2024-10-01: 18 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP child student earnings exclusion age limit + reference: + - title: Arkansas LIHEAP draft manual FY2025, Appendix F, Earnings of a child + href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=133 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml new file mode 100644 index 00000000000..cc33eefc9da --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml @@ -0,0 +1,21 @@ +description: Arkansas excludes earnings of dependent full-time college students up to this age under the Low Income Home Energy Assistance Program. +# Manual Appendix F (page 134), row "Earnings of a full-time college student", +# covers full-time college students "up to age 23, who are listed as dependents +# of a household member"; the Section 17.0 definition of a full-time student +# (page 116) repeats the age. Application Section III (page 2) excludes every +# full-time student; the manual is followed. The row text says "Income +# received"; the model follows the heading and excludes only earnings, so the +# student's unearned income still counts. Reading the text instead would +# exclude all of the student's income. +# Age 23 is read as included, like the federal dependent-student limit of under +# 24; reading it as under 23 changes the result only at age 23. +values: + 2024-10-01: 23 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP college student earnings exclusion maximum age + reference: + - title: Arkansas LIHEAP draft manual FY2025, Appendix F, Earnings of a full-time college student + href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=134 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml index 86610cae121..8aebc8813f6 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml @@ -1,17 +1,17 @@ description: Arkansas assigns this payment group by household size under the Low Income Home Energy Assistance Program. brackets: - threshold: - 2025-10-01: 0 + 2024-10-01: 0 amount: - 2025-10-01: 1 + 2024-10-01: 1 - threshold: - 2025-10-01: 3 + 2024-10-01: 3 amount: - 2025-10-01: 2 + 2024-10-01: 2 - threshold: - 2025-10-01: 5 + 2024-10-01: 5 amount: - 2025-10-01: 3 + 2024-10-01: 3 metadata: type: single_amount @@ -22,3 +22,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, household size columns common to all fuel schedules href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, household size columns common to all fuel schedules + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml index 2e2a4253408..ccb335a1130 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml @@ -1,163 +1,169 @@ description: Arkansas assigns this payment band by monthly countable income under the Low Income Home Energy Assistance Program. -# Published lower bounds are inclusive; cents do not trigger the next band -# until its printed lower bound is reached. +# Published lower bounds are inclusive and apply to monthly countable income +# rounded to the nearest whole dollar. Bands with one threshold entry apply in +# both FY2025 and FY2026; the top five lower bounds changed in FY2026. brackets: - threshold: - 2025-10-01: 0 + 2024-10-01: 0 amount: - 2025-10-01: 1 + 2024-10-01: 1 - threshold: - 2025-10-01: 70 + 2024-10-01: 70 amount: - 2025-10-01: 2 + 2024-10-01: 2 - threshold: - 2025-10-01: 130 + 2024-10-01: 130 amount: - 2025-10-01: 3 + 2024-10-01: 3 - threshold: - 2025-10-01: 190 + 2024-10-01: 190 amount: - 2025-10-01: 4 + 2024-10-01: 4 - threshold: - 2025-10-01: 250 + 2024-10-01: 250 amount: - 2025-10-01: 5 + 2024-10-01: 5 - threshold: - 2025-10-01: 310 + 2024-10-01: 310 amount: - 2025-10-01: 6 + 2024-10-01: 6 - threshold: - 2025-10-01: 370 + 2024-10-01: 370 amount: - 2025-10-01: 7 + 2024-10-01: 7 - threshold: - 2025-10-01: 430 + 2024-10-01: 430 amount: - 2025-10-01: 8 + 2024-10-01: 8 - threshold: - 2025-10-01: 490 + 2024-10-01: 490 amount: - 2025-10-01: 9 + 2024-10-01: 9 - threshold: - 2025-10-01: 550 + 2024-10-01: 550 amount: - 2025-10-01: 10 + 2024-10-01: 10 - threshold: - 2025-10-01: 610 + 2024-10-01: 610 amount: - 2025-10-01: 11 + 2024-10-01: 11 - threshold: - 2025-10-01: 670 + 2024-10-01: 670 amount: - 2025-10-01: 12 + 2024-10-01: 12 - threshold: - 2025-10-01: 730 + 2024-10-01: 730 amount: - 2025-10-01: 13 + 2024-10-01: 13 - threshold: - 2025-10-01: 790 + 2024-10-01: 790 amount: - 2025-10-01: 14 + 2024-10-01: 14 - threshold: - 2025-10-01: 850 + 2024-10-01: 850 amount: - 2025-10-01: 15 + 2024-10-01: 15 - threshold: - 2025-10-01: 910 + 2024-10-01: 910 amount: - 2025-10-01: 16 + 2024-10-01: 16 - threshold: - 2025-10-01: 970 + 2024-10-01: 970 amount: - 2025-10-01: 17 + 2024-10-01: 17 - threshold: - 2025-10-01: 1_030 + 2024-10-01: 1_030 amount: - 2025-10-01: 18 + 2024-10-01: 18 - threshold: - 2025-10-01: 1_090 + 2024-10-01: 1_090 amount: - 2025-10-01: 19 + 2024-10-01: 19 - threshold: - 2025-10-01: 1_150 + 2024-10-01: 1_150 amount: - 2025-10-01: 20 + 2024-10-01: 20 - threshold: - 2025-10-01: 1_210 + 2024-10-01: 1_210 amount: - 2025-10-01: 21 + 2024-10-01: 21 - threshold: - 2025-10-01: 1_270 + 2024-10-01: 1_270 amount: - 2025-10-01: 22 + 2024-10-01: 22 - threshold: - 2025-10-01: 1_330 + 2024-10-01: 1_330 amount: - 2025-10-01: 23 + 2024-10-01: 23 - threshold: - 2025-10-01: 1_390 + 2024-10-01: 1_390 amount: - 2025-10-01: 24 + 2024-10-01: 24 - threshold: - 2025-10-01: 1_450 + 2024-10-01: 1_450 amount: - 2025-10-01: 25 + 2024-10-01: 25 - threshold: - 2025-10-01: 1_510 + 2024-10-01: 1_510 amount: - 2025-10-01: 26 + 2024-10-01: 26 - threshold: - 2025-10-01: 1_570 + 2024-10-01: 1_570 amount: - 2025-10-01: 27 + 2024-10-01: 27 - threshold: - 2025-10-01: 1_630 + 2024-10-01: 1_630 amount: - 2025-10-01: 28 + 2024-10-01: 28 - threshold: - 2025-10-01: 1_690 + 2024-10-01: 1_690 amount: - 2025-10-01: 29 + 2024-10-01: 29 - threshold: - 2025-10-01: 1_750 + 2024-10-01: 1_750 amount: - 2025-10-01: 30 + 2024-10-01: 30 - threshold: - 2025-10-01: 1_870 + 2024-10-01: 1_870 amount: - 2025-10-01: 31 + 2024-10-01: 31 - threshold: - 2025-10-01: 1_990 + 2024-10-01: 1_990 amount: - 2025-10-01: 32 + 2024-10-01: 32 - threshold: - 2025-10-01: 2_010 + 2024-10-01: 2_010 amount: - 2025-10-01: 33 + 2024-10-01: 33 - threshold: - 2025-10-01: 2_130 + 2024-10-01: 2_130 amount: - 2025-10-01: 34 + 2024-10-01: 34 - threshold: + 2024-10-01: 2_250 2025-10-01: 2_348 amount: - 2025-10-01: 35 + 2024-10-01: 35 - threshold: + 2024-10-01: 2_945 2025-10-01: 3_071 amount: - 2025-10-01: 36 + 2024-10-01: 36 - threshold: + 2024-10-01: 4_330 2025-10-01: 3_793 amount: - 2025-10-01: 37 + 2024-10-01: 37 - threshold: + 2024-10-01: 5_022 2025-10-01: 4_515 amount: - 2025-10-01: 38 + 2024-10-01: 38 - threshold: + 2024-10-01: 5_140 2025-10-01: 5_237 amount: - 2025-10-01: 39 + 2024-10-01: 39 metadata: type: single_amount @@ -168,3 +174,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, income bands common to all fuel schedules href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, income bands common to all fuel schedules + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml index 7d7e7e9b2de..52ca810092c 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml @@ -1,316 +1,328 @@ description: Arkansas provides this regular heating benefit for households using electricity under the Low Income Home Energy Assistance Program. +# Cells with one entry apply in both FY2025 and FY2026. 1: 1: - 2025-10-01: 242 + 2024-10-01: 242 2: - 2025-10-01: 288 + 2024-10-01: 288 3: - 2025-10-01: 344 + 2024-10-01: 344 2: 1: - 2025-10-01: 233 + 2024-10-01: 233 2: - 2025-10-01: 276 + 2024-10-01: 276 3: - 2025-10-01: 334 + 2024-10-01: 334 3: 1: - 2025-10-01: 221 + 2024-10-01: 221 2: - 2025-10-01: 266 + 2024-10-01: 266 3: - 2025-10-01: 322 + 2024-10-01: 322 4: 1: - 2025-10-01: 209 + 2024-10-01: 209 2: - 2025-10-01: 254 + 2024-10-01: 254 3: - 2025-10-01: 310 + 2024-10-01: 310 5: 1: - 2025-10-01: 199 + 2024-10-01: 199 2: - 2025-10-01: 242 + 2024-10-01: 242 3: - 2025-10-01: 300 + 2024-10-01: 300 6: 1: - 2025-10-01: 187 + 2024-10-01: 187 2: - 2025-10-01: 233 + 2024-10-01: 233 3: - 2025-10-01: 288 + 2024-10-01: 288 7: 1: - 2025-10-01: 179 + 2024-10-01: 179 2: - 2025-10-01: 223 + 2024-10-01: 223 3: - 2025-10-01: 276 + 2024-10-01: 276 8: 1: - 2025-10-01: 174 + 2024-10-01: 174 2: - 2025-10-01: 215 + 2024-10-01: 215 3: - 2025-10-01: 266 + 2024-10-01: 266 9: 1: - 2025-10-01: 170 + 2024-10-01: 170 2: - 2025-10-01: 209 + 2024-10-01: 209 3: - 2025-10-01: 254 + 2024-10-01: 254 10: 1: - 2025-10-01: 166 + 2024-10-01: 166 2: - 2025-10-01: 204 + 2024-10-01: 204 3: - 2025-10-01: 242 + 2024-10-01: 242 11: 1: - 2025-10-01: 160 + 2024-10-01: 160 2: - 2025-10-01: 197 + 2024-10-01: 197 3: - 2025-10-01: 233 + 2024-10-01: 233 12: 1: - 2025-10-01: 155 + 2024-10-01: 155 2: - 2025-10-01: 192 + 2024-10-01: 192 3: - 2025-10-01: 221 + 2024-10-01: 221 13: 1: - 2025-10-01: 149 + 2024-10-01: 149 2: - 2025-10-01: 187 + 2024-10-01: 187 3: - 2025-10-01: 209 + 2024-10-01: 209 14: 1: - 2025-10-01: 143 + 2024-10-01: 143 2: - 2025-10-01: 181 + 2024-10-01: 181 3: - 2025-10-01: 199 + 2024-10-01: 199 15: 1: - 2025-10-01: 138 + 2024-10-01: 138 2: - 2025-10-01: 175 + 2024-10-01: 175 3: - 2025-10-01: 190 + 2024-10-01: 190 16: 1: - 2025-10-01: 132 + 2024-10-01: 132 2: - 2025-10-01: 170 + 2024-10-01: 170 3: - 2025-10-01: 182 + 2024-10-01: 182 17: 1: - 2025-10-01: 127 + 2024-10-01: 127 2: - 2025-10-01: 164 + 2024-10-01: 164 3: - 2025-10-01: 176 + 2024-10-01: 176 18: 1: - 2025-10-01: 121 + 2024-10-01: 121 2: - 2025-10-01: 158 + 2024-10-01: 158 3: - 2025-10-01: 170 + 2024-10-01: 170 19: 1: - 2025-10-01: 115 + 2024-10-01: 115 2: - 2025-10-01: 154 + 2024-10-01: 154 3: - 2025-10-01: 164 + 2024-10-01: 164 20: 1: - 2025-10-01: 110 + 2024-10-01: 110 2: - 2025-10-01: 148 + 2024-10-01: 148 3: - 2025-10-01: 158 + 2024-10-01: 158 21: 1: - 2025-10-01: 104 + 2024-10-01: 104 2: - 2025-10-01: 143 + 2024-10-01: 143 3: - 2025-10-01: 152 + 2024-10-01: 152 22: 1: - 2025-10-01: 100 + 2024-10-01: 100 2: - 2025-10-01: 137 + 2024-10-01: 137 3: - 2025-10-01: 145 + 2024-10-01: 145 23: 1: + 2024-10-01: 95 2025-10-01: 94 2: - 2025-10-01: 131 + 2024-10-01: 131 3: - 2025-10-01: 140 + 2024-10-01: 140 24: 1: + 2024-10-01: 91 2025-10-01: 88 2: - 2025-10-01: 126 + 2024-10-01: 126 3: - 2025-10-01: 134 + 2024-10-01: 134 25: 1: + 2024-10-01: 88 2025-10-01: 83 2: - 2025-10-01: 120 + 2024-10-01: 120 3: - 2025-10-01: 128 + 2024-10-01: 128 26: 1: + 2024-10-01: 84 2025-10-01: 77 2: - 2025-10-01: 114 + 2024-10-01: 114 3: - 2025-10-01: 124 + 2024-10-01: 124 27: 1: + 2024-10-01: 80 2025-10-01: 72 2: - 2025-10-01: 109 + 2024-10-01: 109 3: - 2025-10-01: 118 + 2024-10-01: 118 28: 1: + 2024-10-01: 78 2025-10-01: 66 2: - 2025-10-01: 103 + 2024-10-01: 103 3: - 2025-10-01: 112 + 2024-10-01: 112 29: 1: + 2024-10-01: 74 2025-10-01: 60 2: - 2025-10-01: 97 + 2024-10-01: 97 3: - 2025-10-01: 107 + 2024-10-01: 107 30: 1: + 2024-10-01: 71 2025-10-01: 60 2: - 2025-10-01: 92 + 2024-10-01: 92 3: - 2025-10-01: 101 + 2024-10-01: 101 31: 1: + 2024-10-01: 66 2025-10-01: 60 2: - 2025-10-01: 86 + 2024-10-01: 86 3: - 2025-10-01: 95 + 2024-10-01: 95 32: 1: + 2024-10-01: 62 2025-10-01: 60 2: - 2025-10-01: 80 + 2024-10-01: 80 3: - 2025-10-01: 90 + 2024-10-01: 90 33: 1: - 2025-10-01: 60 + 2024-10-01: 60 2: - 2025-10-01: 76 + 2024-10-01: 76 3: - 2025-10-01: 84 + 2024-10-01: 84 34: 1: - 2025-10-01: 60 + 2024-10-01: 60 2: - 2025-10-01: 70 + 2024-10-01: 70 3: - 2025-10-01: 79 + 2024-10-01: 79 35: 1: - 2025-10-01: 60 + 2024-10-01: 60 2: - 2025-10-01: 64 + 2024-10-01: 64 3: - 2025-10-01: 73 + 2024-10-01: 73 36: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 60 + 2024-10-01: 60 3: - 2025-10-01: 67 + 2024-10-01: 67 37: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: + 2024-10-01: 0 2025-10-01: 60 3: - 2025-10-01: 61 + 2024-10-01: 61 38: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 0 + 2024-10-01: 0 3: - 2025-10-01: 60 + 2024-10-01: 60 39: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 0 + 2024-10-01: 0 3: - 2025-10-01: 60 + 2024-10-01: 60 metadata: unit: currency-USD @@ -326,3 +338,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, Electricity href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, Electricity + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml index ddba39ec206..e5679675c32 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml @@ -1,315 +1,327 @@ description: Arkansas provides this regular heating benefit for households using fuel oil under the Low Income Home Energy Assistance Program. +# Cells with one entry apply in both FY2025 and FY2026. 1: 1: - 2025-10-01: 402 + 2024-10-01: 402 2: - 2025-10-01: 478 + 2024-10-01: 478 3: - 2025-10-01: 570 + 2024-10-01: 570 2: 1: - 2025-10-01: 385 + 2024-10-01: 385 2: - 2025-10-01: 457 + 2024-10-01: 457 3: - 2025-10-01: 552 + 2024-10-01: 552 3: 1: - 2025-10-01: 365 + 2024-10-01: 365 2: - 2025-10-01: 442 + 2024-10-01: 442 3: - 2025-10-01: 534 + 2024-10-01: 534 4: 1: - 2025-10-01: 347 + 2024-10-01: 347 2: - 2025-10-01: 422 + 2024-10-01: 422 3: - 2025-10-01: 514 + 2024-10-01: 514 5: 1: - 2025-10-01: 330 + 2024-10-01: 330 2: - 2025-10-01: 402 + 2024-10-01: 402 3: - 2025-10-01: 497 + 2024-10-01: 497 6: 1: - 2025-10-01: 310 + 2024-10-01: 310 2: - 2025-10-01: 385 + 2024-10-01: 385 3: - 2025-10-01: 478 + 2024-10-01: 478 7: 1: - 2025-10-01: 296 + 2024-10-01: 296 2: - 2025-10-01: 370 + 2024-10-01: 370 3: - 2025-10-01: 457 + 2024-10-01: 457 8: 1: - 2025-10-01: 288 + 2024-10-01: 288 2: - 2025-10-01: 356 + 2024-10-01: 356 3: - 2025-10-01: 442 + 2024-10-01: 442 9: 1: - 2025-10-01: 282 + 2024-10-01: 282 2: - 2025-10-01: 347 + 2024-10-01: 347 3: - 2025-10-01: 422 + 2024-10-01: 422 10: 1: - 2025-10-01: 275 + 2024-10-01: 275 2: - 2025-10-01: 337 + 2024-10-01: 337 3: - 2025-10-01: 402 + 2024-10-01: 402 11: 1: - 2025-10-01: 265 + 2024-10-01: 265 2: - 2025-10-01: 326 + 2024-10-01: 326 3: - 2025-10-01: 385 + 2024-10-01: 385 12: 1: - 2025-10-01: 257 + 2024-10-01: 257 2: - 2025-10-01: 319 + 2024-10-01: 319 3: - 2025-10-01: 365 + 2024-10-01: 365 13: 1: - 2025-10-01: 247 + 2024-10-01: 247 2: - 2025-10-01: 310 + 2024-10-01: 310 3: - 2025-10-01: 347 + 2024-10-01: 347 14: 1: - 2025-10-01: 238 + 2024-10-01: 238 2: - 2025-10-01: 301 + 2024-10-01: 301 3: - 2025-10-01: 330 + 2024-10-01: 330 15: 1: - 2025-10-01: 228 + 2024-10-01: 228 2: - 2025-10-01: 292 + 2024-10-01: 292 3: - 2025-10-01: 313 + 2024-10-01: 313 16: 1: - 2025-10-01: 220 + 2024-10-01: 220 2: - 2025-10-01: 282 + 2024-10-01: 282 3: - 2025-10-01: 302 + 2024-10-01: 302 17: 1: - 2025-10-01: 210 + 2024-10-01: 210 2: - 2025-10-01: 272 + 2024-10-01: 272 3: - 2025-10-01: 293 + 2024-10-01: 293 18: 1: - 2025-10-01: 200 + 2024-10-01: 200 2: - 2025-10-01: 264 + 2024-10-01: 264 3: - 2025-10-01: 282 + 2024-10-01: 282 19: 1: - 2025-10-01: 192 + 2024-10-01: 192 2: - 2025-10-01: 254 + 2024-10-01: 254 3: - 2025-10-01: 272 + 2024-10-01: 272 20: 1: - 2025-10-01: 182 + 2024-10-01: 182 2: - 2025-10-01: 245 + 2024-10-01: 245 3: - 2025-10-01: 262 + 2024-10-01: 262 21: 1: - 2025-10-01: 173 + 2024-10-01: 173 2: - 2025-10-01: 236 + 2024-10-01: 236 3: - 2025-10-01: 252 + 2024-10-01: 252 22: 1: - 2025-10-01: 166 + 2024-10-01: 166 2: - 2025-10-01: 227 + 2024-10-01: 227 3: - 2025-10-01: 241 + 2024-10-01: 241 23: 1: - 2025-10-01: 158 + 2024-10-01: 158 2: - 2025-10-01: 217 + 2024-10-01: 217 3: - 2025-10-01: 233 + 2024-10-01: 233 24: 1: - 2025-10-01: 151 + 2024-10-01: 151 2: - 2025-10-01: 209 + 2024-10-01: 209 3: - 2025-10-01: 223 + 2024-10-01: 223 25: 1: - 2025-10-01: 145 + 2024-10-01: 145 2: - 2025-10-01: 199 + 2024-10-01: 199 3: - 2025-10-01: 214 + 2024-10-01: 214 26: 1: - 2025-10-01: 140 + 2024-10-01: 140 2: - 2025-10-01: 190 + 2024-10-01: 190 3: - 2025-10-01: 204 + 2024-10-01: 204 27: 1: - 2025-10-01: 134 + 2024-10-01: 134 2: - 2025-10-01: 180 + 2024-10-01: 180 3: - 2025-10-01: 196 + 2024-10-01: 196 28: 1: - 2025-10-01: 128 + 2024-10-01: 128 2: - 2025-10-01: 172 + 2024-10-01: 172 3: - 2025-10-01: 186 + 2024-10-01: 186 29: 1: - 2025-10-01: 124 + 2024-10-01: 124 2: - 2025-10-01: 162 + 2024-10-01: 162 3: - 2025-10-01: 176 + 2024-10-01: 176 30: 1: - 2025-10-01: 118 + 2024-10-01: 118 2: - 2025-10-01: 152 + 2024-10-01: 152 3: - 2025-10-01: 168 + 2024-10-01: 168 31: 1: - 2025-10-01: 110 + 2024-10-01: 110 2: - 2025-10-01: 144 + 2024-10-01: 144 3: - 2025-10-01: 158 + 2024-10-01: 158 32: 1: - 2025-10-01: 103 + 2024-10-01: 103 2: - 2025-10-01: 134 + 2024-10-01: 134 3: - 2025-10-01: 149 + 2024-10-01: 149 33: 1: - 2025-10-01: 96 + 2024-10-01: 96 2: - 2025-10-01: 125 + 2024-10-01: 125 3: - 2025-10-01: 140 + 2024-10-01: 140 34: 1: - 2025-10-01: 89 + 2024-10-01: 89 2: - 2025-10-01: 116 + 2024-10-01: 116 3: - 2025-10-01: 131 + 2024-10-01: 131 35: 1: - 2025-10-01: 82 + 2024-10-01: 82 2: + 2024-10-01: 107 2025-10-01: 108 3: + 2024-10-01: 121 2025-10-01: 122 36: 1: + 2024-10-01: 74 2025-10-01: 0 2: + 2024-10-01: 97 2025-10-01: 98 3: + 2024-10-01: 112 2025-10-01: 113 37: 1: + 2024-10-01: 67 2025-10-01: 0 2: + 2024-10-01: 88 2025-10-01: 90 3: + 2024-10-01: 102 2025-10-01: 104 38: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: + 2024-10-01: 78 2025-10-01: 0 3: + 2024-10-01: 92 2025-10-01: 95 39: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 0 + 2024-10-01: 0 3: + 2024-10-01: 83 2025-10-01: 86 metadata: @@ -326,3 +338,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, Fuel Oil href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Fuel-Oil.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, Fuel Oil + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Fuel-Oil.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml index cdd688e2ac1..08475ee4a5b 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml @@ -1,316 +1,342 @@ description: Arkansas provides this regular heating benefit for households using natural gas under the Low Income Home Energy Assistance Program. +# Cells with one entry apply in both FY2025 and FY2026. 1: 1: - 2025-10-01: 308 + 2024-10-01: 308 2: - 2025-10-01: 366 + 2024-10-01: 366 3: - 2025-10-01: 437 + 2024-10-01: 437 2: 1: - 2025-10-01: 295 + 2024-10-01: 295 2: - 2025-10-01: 350 + 2024-10-01: 350 3: - 2025-10-01: 422 + 2024-10-01: 422 3: 1: - 2025-10-01: 280 + 2024-10-01: 280 2: - 2025-10-01: 338 + 2024-10-01: 338 3: - 2025-10-01: 409 + 2024-10-01: 409 4: 1: - 2025-10-01: 265 + 2024-10-01: 265 2: - 2025-10-01: 324 + 2024-10-01: 324 3: - 2025-10-01: 394 + 2024-10-01: 394 5: 1: - 2025-10-01: 253 + 2024-10-01: 253 2: - 2025-10-01: 308 + 2024-10-01: 308 3: - 2025-10-01: 380 + 2024-10-01: 380 6: 1: - 2025-10-01: 238 + 2024-10-01: 238 2: - 2025-10-01: 295 + 2024-10-01: 295 3: - 2025-10-01: 366 + 2024-10-01: 366 7: 1: - 2025-10-01: 227 + 2024-10-01: 227 2: - 2025-10-01: 283 + 2024-10-01: 283 3: - 2025-10-01: 350 + 2024-10-01: 350 8: 1: - 2025-10-01: 221 + 2024-10-01: 221 2: - 2025-10-01: 272 + 2024-10-01: 272 3: - 2025-10-01: 338 + 2024-10-01: 338 9: 1: - 2025-10-01: 216 + 2024-10-01: 216 2: - 2025-10-01: 265 + 2024-10-01: 265 3: - 2025-10-01: 324 + 2024-10-01: 324 10: 1: - 2025-10-01: 210 + 2024-10-01: 210 2: - 2025-10-01: 258 + 2024-10-01: 258 3: - 2025-10-01: 308 + 2024-10-01: 308 11: 1: - 2025-10-01: 203 + 2024-10-01: 203 2: - 2025-10-01: 250 + 2024-10-01: 250 3: - 2025-10-01: 295 + 2024-10-01: 295 12: 1: - 2025-10-01: 197 + 2024-10-01: 197 2: - 2025-10-01: 245 + 2024-10-01: 245 3: - 2025-10-01: 280 + 2024-10-01: 280 13: 1: - 2025-10-01: 190 + 2024-10-01: 190 2: - 2025-10-01: 238 + 2024-10-01: 238 3: - 2025-10-01: 265 + 2024-10-01: 265 14: 1: - 2025-10-01: 182 + 2024-10-01: 182 2: - 2025-10-01: 230 + 2024-10-01: 230 3: - 2025-10-01: 253 + 2024-10-01: 253 15: 1: - 2025-10-01: 175 + 2024-10-01: 175 2: - 2025-10-01: 223 + 2024-10-01: 223 3: - 2025-10-01: 240 + 2024-10-01: 240 16: 1: - 2025-10-01: 168 + 2024-10-01: 168 2: - 2025-10-01: 216 + 2024-10-01: 216 3: - 2025-10-01: 232 + 2024-10-01: 232 17: 1: - 2025-10-01: 161 + 2024-10-01: 161 2: - 2025-10-01: 209 + 2024-10-01: 209 3: - 2025-10-01: 224 + 2024-10-01: 224 18: 1: - 2025-10-01: 154 + 2024-10-01: 154 2: - 2025-10-01: 202 + 2024-10-01: 202 3: - 2025-10-01: 216 + 2024-10-01: 216 19: 1: - 2025-10-01: 146 + 2024-10-01: 146 2: - 2025-10-01: 194 + 2024-10-01: 194 3: - 2025-10-01: 209 + 2024-10-01: 209 20: 1: - 2025-10-01: 139 + 2024-10-01: 139 2: - 2025-10-01: 187 + 2024-10-01: 187 3: - 2025-10-01: 200 + 2024-10-01: 200 21: 1: - 2025-10-01: 132 + 2024-10-01: 132 2: - 2025-10-01: 181 + 2024-10-01: 181 3: - 2025-10-01: 193 + 2024-10-01: 193 22: 1: - 2025-10-01: 127 + 2024-10-01: 127 2: - 2025-10-01: 174 + 2024-10-01: 174 3: - 2025-10-01: 185 + 2024-10-01: 185 23: 1: - 2025-10-01: 121 + 2024-10-01: 121 2: - 2025-10-01: 167 + 2024-10-01: 167 3: - 2025-10-01: 178 + 2024-10-01: 178 24: 1: - 2025-10-01: 115 + 2024-10-01: 115 2: - 2025-10-01: 160 + 2024-10-01: 160 3: + 2024-10-01: 170 2025-10-01: 169 25: 1: - 2025-10-01: 112 + 2024-10-01: 112 2: - 2025-10-01: 152 + 2024-10-01: 152 3: + 2024-10-01: 163 2025-10-01: 162 26: 1: - 2025-10-01: 107 + 2024-10-01: 107 2: - 2025-10-01: 145 + 2024-10-01: 145 3: + 2024-10-01: 156 2025-10-01: 154 27: 1: - 2025-10-01: 103 + 2024-10-01: 103 2: - 2025-10-01: 138 + 2024-10-01: 138 3: + 2024-10-01: 150 2025-10-01: 146 28: 1: - 2025-10-01: 98 + 2024-10-01: 98 2: - 2025-10-01: 131 + 2024-10-01: 131 3: + 2024-10-01: 143 2025-10-01: 138 29: 1: - 2025-10-01: 95 + 2024-10-01: 95 2: - 2025-10-01: 124 + 2024-10-01: 124 3: + 2024-10-01: 136 2025-10-01: 131 30: 1: - 2025-10-01: 90 + 2024-10-01: 90 2: - 2025-10-01: 116 + 2024-10-01: 116 3: + 2024-10-01: 128 2025-10-01: 122 31: 1: - 2025-10-01: 84 + 2024-10-01: 84 2: + 2024-10-01: 110 2025-10-01: 109 3: + 2024-10-01: 121 2025-10-01: 115 32: 1: - 2025-10-01: 79 + 2024-10-01: 79 2: + 2024-10-01: 103 2025-10-01: 102 3: + 2024-10-01: 114 2025-10-01: 107 33: 1: - 2025-10-01: 73 + 2024-10-01: 73 2: + 2024-10-01: 96 2025-10-01: 95 3: + 2024-10-01: 107 2025-10-01: 100 34: 1: - 2025-10-01: 68 + 2024-10-01: 68 2: + 2024-10-01: 89 2025-10-01: 88 3: + 2024-10-01: 100 2025-10-01: 91 35: 1: + 2024-10-01: 64 2025-10-01: 62 2: + 2024-10-01: 82 2025-10-01: 80 3: + 2024-10-01: 92 2025-10-01: 84 36: 1: + 2024-10-01: 60 2025-10-01: 0 2: + 2024-10-01: 74 2025-10-01: 73 3: + 2024-10-01: 85 2025-10-01: 76 37: 1: + 2024-10-01: 60 2025-10-01: 0 2: + 2024-10-01: 60 2025-10-01: 66 3: + 2024-10-01: 60 2025-10-01: 68 38: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: + 2024-10-01: 60 2025-10-01: 0 3: - 2025-10-01: 60 + 2024-10-01: 60 39: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 0 + 2024-10-01: 0 3: - 2025-10-01: 60 + 2024-10-01: 60 metadata: unit: currency-USD @@ -326,3 +352,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, Natural Gas href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Natural-Gas.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, Natural Gas + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Natural-Gas.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml index d7f7c421af6..0a3cb2280c4 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml @@ -1,315 +1,320 @@ description: Arkansas provides this regular heating benefit for households using other heating fuels under the Low Income Home Energy Assistance Program. +# Cells with one entry apply in both FY2025 and FY2026. 1: 1: - 2025-10-01: 289 + 2024-10-01: 289 2: - 2025-10-01: 344 + 2024-10-01: 344 3: - 2025-10-01: 410 + 2024-10-01: 410 2: 1: - 2025-10-01: 277 + 2024-10-01: 277 2: - 2025-10-01: 330 + 2024-10-01: 330 3: - 2025-10-01: 397 + 2024-10-01: 397 3: 1: - 2025-10-01: 263 + 2024-10-01: 263 2: - 2025-10-01: 318 + 2024-10-01: 318 3: - 2025-10-01: 384 + 2024-10-01: 384 4: 1: - 2025-10-01: 250 + 2024-10-01: 250 2: - 2025-10-01: 305 + 2024-10-01: 305 3: - 2025-10-01: 370 + 2024-10-01: 370 5: 1: - 2025-10-01: 238 + 2024-10-01: 238 2: - 2025-10-01: 289 + 2024-10-01: 289 3: - 2025-10-01: 358 + 2024-10-01: 358 6: 1: - 2025-10-01: 223 + 2024-10-01: 223 2: - 2025-10-01: 277 + 2024-10-01: 277 3: - 2025-10-01: 344 + 2024-10-01: 344 7: 1: - 2025-10-01: 214 + 2024-10-01: 214 2: - 2025-10-01: 266 + 2024-10-01: 266 3: - 2025-10-01: 330 + 2024-10-01: 330 8: 1: - 2025-10-01: 208 + 2024-10-01: 208 2: - 2025-10-01: 257 + 2024-10-01: 257 3: - 2025-10-01: 318 + 2024-10-01: 318 9: 1: - 2025-10-01: 203 + 2024-10-01: 203 2: - 2025-10-01: 250 + 2024-10-01: 250 3: - 2025-10-01: 305 + 2024-10-01: 305 10: 1: - 2025-10-01: 198 + 2024-10-01: 198 2: - 2025-10-01: 244 + 2024-10-01: 244 3: - 2025-10-01: 289 + 2024-10-01: 289 11: 1: - 2025-10-01: 191 + 2024-10-01: 191 2: - 2025-10-01: 235 + 2024-10-01: 235 3: - 2025-10-01: 277 + 2024-10-01: 277 12: 1: - 2025-10-01: 185 + 2024-10-01: 185 2: - 2025-10-01: 230 + 2024-10-01: 230 3: - 2025-10-01: 263 + 2024-10-01: 263 13: 1: - 2025-10-01: 178 + 2024-10-01: 178 2: - 2025-10-01: 223 + 2024-10-01: 223 3: - 2025-10-01: 250 + 2024-10-01: 250 14: 1: - 2025-10-01: 172 + 2024-10-01: 172 2: - 2025-10-01: 216 + 2024-10-01: 216 3: - 2025-10-01: 238 + 2024-10-01: 238 15: 1: - 2025-10-01: 164 + 2024-10-01: 164 2: - 2025-10-01: 210 + 2024-10-01: 210 3: - 2025-10-01: 226 + 2024-10-01: 226 16: 1: - 2025-10-01: 158 + 2024-10-01: 158 2: - 2025-10-01: 203 + 2024-10-01: 203 3: - 2025-10-01: 218 + 2024-10-01: 218 17: 1: - 2025-10-01: 151 + 2024-10-01: 151 2: - 2025-10-01: 197 + 2024-10-01: 197 3: - 2025-10-01: 211 + 2024-10-01: 211 18: 1: - 2025-10-01: 144 + 2024-10-01: 144 2: - 2025-10-01: 190 + 2024-10-01: 190 3: - 2025-10-01: 203 + 2024-10-01: 203 19: 1: - 2025-10-01: 138 + 2024-10-01: 138 2: - 2025-10-01: 184 + 2024-10-01: 184 3: - 2025-10-01: 197 + 2024-10-01: 197 20: 1: - 2025-10-01: 131 + 2024-10-01: 131 2: - 2025-10-01: 176 + 2024-10-01: 176 3: - 2025-10-01: 188 + 2024-10-01: 188 21: 1: - 2025-10-01: 125 + 2024-10-01: 125 2: - 2025-10-01: 170 + 2024-10-01: 170 3: - 2025-10-01: 182 + 2024-10-01: 182 22: 1: - 2025-10-01: 119 + 2024-10-01: 119 2: - 2025-10-01: 163 + 2024-10-01: 163 3: - 2025-10-01: 174 + 2024-10-01: 174 23: 1: - 2025-10-01: 114 + 2024-10-01: 114 2: - 2025-10-01: 156 + 2024-10-01: 156 3: - 2025-10-01: 167 + 2024-10-01: 167 24: 1: - 2025-10-01: 109 + 2024-10-01: 109 2: - 2025-10-01: 150 + 2024-10-01: 150 3: - 2025-10-01: 161 + 2024-10-01: 161 25: 1: - 2025-10-01: 104 + 2024-10-01: 104 2: - 2025-10-01: 143 + 2024-10-01: 143 3: - 2025-10-01: 154 + 2024-10-01: 154 26: 1: - 2025-10-01: 101 + 2024-10-01: 101 2: - 2025-10-01: 137 + 2024-10-01: 137 3: - 2025-10-01: 148 + 2024-10-01: 148 27: 1: - 2025-10-01: 97 + 2024-10-01: 97 2: - 2025-10-01: 130 + 2024-10-01: 130 3: - 2025-10-01: 140 + 2024-10-01: 140 28: 1: - 2025-10-01: 92 + 2024-10-01: 92 2: - 2025-10-01: 124 + 2024-10-01: 124 3: - 2025-10-01: 134 + 2024-10-01: 134 29: 1: - 2025-10-01: 89 + 2024-10-01: 89 2: - 2025-10-01: 116 + 2024-10-01: 116 3: - 2025-10-01: 127 + 2024-10-01: 127 30: 1: - 2025-10-01: 85 + 2024-10-01: 85 2: - 2025-10-01: 110 + 2024-10-01: 110 3: - 2025-10-01: 121 + 2024-10-01: 121 31: 1: - 2025-10-01: 79 + 2024-10-01: 79 2: - 2025-10-01: 103 + 2024-10-01: 103 3: - 2025-10-01: 114 + 2024-10-01: 114 32: 1: - 2025-10-01: 74 + 2024-10-01: 74 2: - 2025-10-01: 97 + 2024-10-01: 97 3: - 2025-10-01: 107 + 2024-10-01: 107 33: 1: - 2025-10-01: 68 + 2024-10-01: 68 2: - 2025-10-01: 90 + 2024-10-01: 90 3: - 2025-10-01: 101 + 2024-10-01: 101 34: 1: - 2025-10-01: 64 + 2024-10-01: 64 2: - 2025-10-01: 83 + 2024-10-01: 83 3: - 2025-10-01: 94 + 2024-10-01: 94 35: 1: - 2025-10-01: 60 + 2024-10-01: 60 2: - 2025-10-01: 77 + 2024-10-01: 77 3: - 2025-10-01: 88 + 2024-10-01: 88 36: 1: + 2024-10-01: 60 2025-10-01: 0 2: - 2025-10-01: 70 + 2024-10-01: 70 3: - 2025-10-01: 80 + 2024-10-01: 80 37: 1: + 2024-10-01: 60 2025-10-01: 0 2: - 2025-10-01: 64 + 2024-10-01: 64 3: - 2025-10-01: 74 + 2024-10-01: 74 38: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: + 2024-10-01: 60 2025-10-01: 0 3: - 2025-10-01: 67 + 2024-10-01: 67 39: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 0 + 2024-10-01: 0 3: + 2024-10-01: 0 2025-10-01: 61 metadata: @@ -326,3 +331,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, Other Heating Fuels href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Other-Wood-Pellets.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, Other Heating Fuels + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Other-Wood-Pellets.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml index 1b7b32b70a1..163ca62ba04 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml @@ -1,315 +1,328 @@ description: Arkansas provides this regular heating benefit for households using propane under the Low Income Home Energy Assistance Program. +# Cells with one entry apply in both FY2025 and FY2026. 1: 1: - 2025-10-01: 397 + 2024-10-01: 397 2: - 2025-10-01: 472 + 2024-10-01: 472 3: - 2025-10-01: 563 + 2024-10-01: 563 2: 1: - 2025-10-01: 380 + 2024-10-01: 380 2: - 2025-10-01: 451 + 2024-10-01: 451 3: - 2025-10-01: 545 + 2024-10-01: 545 3: 1: - 2025-10-01: 360 + 2024-10-01: 360 2: - 2025-10-01: 436 + 2024-10-01: 436 3: - 2025-10-01: 527 + 2024-10-01: 527 4: 1: - 2025-10-01: 342 + 2024-10-01: 342 2: - 2025-10-01: 418 + 2024-10-01: 418 3: - 2025-10-01: 506 + 2024-10-01: 506 5: 1: - 2025-10-01: 326 + 2024-10-01: 326 2: - 2025-10-01: 397 + 2024-10-01: 397 3: - 2025-10-01: 490 + 2024-10-01: 490 6: 1: - 2025-10-01: 306 + 2024-10-01: 306 2: - 2025-10-01: 380 + 2024-10-01: 380 3: - 2025-10-01: 472 + 2024-10-01: 472 7: 1: - 2025-10-01: 293 + 2024-10-01: 293 2: - 2025-10-01: 365 + 2024-10-01: 365 3: - 2025-10-01: 451 + 2024-10-01: 451 8: 1: - 2025-10-01: 284 + 2024-10-01: 284 2: - 2025-10-01: 352 + 2024-10-01: 352 3: - 2025-10-01: 436 + 2024-10-01: 436 9: 1: - 2025-10-01: 278 + 2024-10-01: 278 2: - 2025-10-01: 342 + 2024-10-01: 342 3: - 2025-10-01: 418 + 2024-10-01: 418 10: 1: - 2025-10-01: 271 + 2024-10-01: 271 2: - 2025-10-01: 334 + 2024-10-01: 334 3: - 2025-10-01: 397 + 2024-10-01: 397 11: 1: - 2025-10-01: 262 + 2024-10-01: 262 2: - 2025-10-01: 323 + 2024-10-01: 323 3: - 2025-10-01: 380 + 2024-10-01: 380 12: 1: - 2025-10-01: 253 + 2024-10-01: 253 2: - 2025-10-01: 314 + 2024-10-01: 314 3: - 2025-10-01: 360 + 2024-10-01: 360 13: 1: - 2025-10-01: 244 + 2024-10-01: 244 2: - 2025-10-01: 306 + 2024-10-01: 306 3: - 2025-10-01: 342 + 2024-10-01: 342 14: 1: - 2025-10-01: 235 + 2024-10-01: 235 2: - 2025-10-01: 296 + 2024-10-01: 296 3: - 2025-10-01: 326 + 2024-10-01: 326 15: 1: - 2025-10-01: 226 + 2024-10-01: 226 2: - 2025-10-01: 288 + 2024-10-01: 288 3: - 2025-10-01: 310 + 2024-10-01: 310 16: 1: - 2025-10-01: 216 + 2024-10-01: 216 2: - 2025-10-01: 278 + 2024-10-01: 278 3: - 2025-10-01: 299 + 2024-10-01: 299 17: 1: - 2025-10-01: 208 + 2024-10-01: 208 2: - 2025-10-01: 269 + 2024-10-01: 269 3: - 2025-10-01: 289 + 2024-10-01: 289 18: 1: - 2025-10-01: 198 + 2024-10-01: 198 2: - 2025-10-01: 260 + 2024-10-01: 260 3: - 2025-10-01: 278 + 2024-10-01: 278 19: 1: - 2025-10-01: 190 + 2024-10-01: 190 2: - 2025-10-01: 251 + 2024-10-01: 251 3: - 2025-10-01: 269 + 2024-10-01: 269 20: 1: - 2025-10-01: 180 + 2024-10-01: 180 2: - 2025-10-01: 242 + 2024-10-01: 242 3: - 2025-10-01: 258 + 2024-10-01: 258 21: 1: - 2025-10-01: 170 + 2024-10-01: 170 2: - 2025-10-01: 233 + 2024-10-01: 233 3: - 2025-10-01: 250 + 2024-10-01: 250 22: 1: - 2025-10-01: 163 + 2024-10-01: 163 2: - 2025-10-01: 223 + 2024-10-01: 223 3: - 2025-10-01: 239 + 2024-10-01: 239 23: 1: - 2025-10-01: 156 + 2024-10-01: 156 2: - 2025-10-01: 215 + 2024-10-01: 215 3: - 2025-10-01: 229 + 2024-10-01: 229 24: 1: - 2025-10-01: 149 + 2024-10-01: 149 2: - 2025-10-01: 205 + 2024-10-01: 205 3: - 2025-10-01: 220 + 2024-10-01: 220 25: 1: - 2025-10-01: 144 + 2024-10-01: 144 2: - 2025-10-01: 197 + 2024-10-01: 197 3: - 2025-10-01: 211 + 2024-10-01: 211 26: 1: - 2025-10-01: 138 + 2024-10-01: 138 2: - 2025-10-01: 187 + 2024-10-01: 187 3: - 2025-10-01: 202 + 2024-10-01: 202 27: 1: - 2025-10-01: 132 + 2024-10-01: 132 2: - 2025-10-01: 178 + 2024-10-01: 178 3: - 2025-10-01: 193 + 2024-10-01: 193 28: 1: - 2025-10-01: 127 + 2024-10-01: 127 2: - 2025-10-01: 169 + 2024-10-01: 169 3: - 2025-10-01: 184 + 2024-10-01: 184 29: 1: - 2025-10-01: 121 + 2024-10-01: 121 2: - 2025-10-01: 160 + 2024-10-01: 160 3: - 2025-10-01: 174 + 2024-10-01: 174 30: 1: - 2025-10-01: 116 + 2024-10-01: 116 2: - 2025-10-01: 151 + 2024-10-01: 151 3: - 2025-10-01: 166 + 2024-10-01: 166 31: 1: + 2024-10-01: 109 2025-10-01: 110 2: - 2025-10-01: 142 + 2024-10-01: 142 3: - 2025-10-01: 156 + 2024-10-01: 156 32: 1: + 2024-10-01: 102 2025-10-01: 106 2: - 2025-10-01: 132 + 2024-10-01: 132 3: - 2025-10-01: 148 + 2024-10-01: 148 33: 1: + 2024-10-01: 95 2025-10-01: 100 2: - 2025-10-01: 124 + 2024-10-01: 124 3: - 2025-10-01: 138 + 2024-10-01: 138 34: 1: + 2024-10-01: 88 2025-10-01: 95 2: - 2025-10-01: 114 + 2024-10-01: 114 3: - 2025-10-01: 128 + 2024-10-01: 128 35: 1: + 2024-10-01: 80 2025-10-01: 89 2: - 2025-10-01: 106 + 2024-10-01: 106 3: + 2024-10-01: 119 2025-10-01: 120 36: 1: + 2024-10-01: 73 2025-10-01: 0 2: - 2025-10-01: 96 + 2024-10-01: 96 3: - 2025-10-01: 110 + 2024-10-01: 110 37: 1: + 2024-10-01: 66 2025-10-01: 0 2: - 2025-10-01: 86 + 2024-10-01: 86 3: + 2024-10-01: 109 2025-10-01: 102 38: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: + 2024-10-01: 77 2025-10-01: 0 3: + 2024-10-01: 100 2025-10-01: 92 39: 1: - 2025-10-01: 0 + 2024-10-01: 0 2: - 2025-10-01: 0 + 2024-10-01: 0 3: + 2024-10-01: 90 2025-10-01: 83 metadata: @@ -326,3 +339,5 @@ metadata: reference: - title: Arkansas FY2026 Winter Benefits Matrix, Propane href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf#page=1 + - title: Arkansas FY2025 Benefits Matrix, Propane + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Propane.pdf#page=1 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index c34002dfc5e..b8fe9605dae 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -810,8 +810,8 @@ programs: full_name: Arkansas Low Income Home Energy Assistance Program variable: ar_liheap parameter_prefix: gov.states.ar.ee.aeo.liheap - verified_years: "2026" - notes: FY2026 regular heating eligibility and published award matrix. Uses qualified household size and full countable household income. Solar-heating payment treatment is not verified; its modeled zero does not establish legal ineligibility. Administrative household and billing facts use documented existing-input approximations; historical backfills and FY2027 draft changes are unverified. Regular heating only; crisis, cooling, weatherization and equipment assistance are excluded. + verified_years: "2025-2026" + notes: FY2025-FY2026 regular heating only, with qualified household size and the published fuel matrices. Crisis, cooling, weatherization and equipment assistance are out of scope. - state: OR status: in_progress name: LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml index 881baf19676..02d59f163a6 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml @@ -1,199 +1,510 @@ # Official FY2026 gas matrix: monthly370-429 gives227 for size1-2; monthly2130-2347 gives68; zero income gives308. Oil zero-income size5+ gives570. The 20 percent earned disregard applies before these lookups. +# TEA now counts through take-up-gated tanf, so Cases 1 and 3 pin ar_tea to 0 to keep their +# household-size and zero-income checks; TEA counting is covered in ar_liheap_countable_income.yaml. - name: Case 1, a nonqualified parents full counted income uses two qualified children for the grant. period: 2026 input: people: - parent: + person1: age: 40 immigration_status: UNDOCUMENTED ssi: 0 is_full_time_student: false - employment_income: 6000 - child1: + employment_income: 6_000 + person2: age: 12 immigration_status: CITIZEN ssi: 0 is_full_time_student: false - child2: + person3: age: 8 immigration_status: CITIZEN ssi: 0 is_full_time_student: false spm_units: - family: - members: &id001 - - parent - - child1 - - child2 + spm_unit: + members: [person1, person2, person3] heating_type: NATURAL_GAS heating_expense: 50 + ar_tea: 0 households: - home: - members: *id001 + household: + members: [person1, person2, person3] state_code: AR output: ar_liheap_household_size: 2 - ar_liheap_countable_income: 4800 - ar_liheap_income_limit: 36840 + ar_liheap_countable_income: 4_800 + ar_liheap_income_limit: 36_840 ar_liheap_matrix_amount: 227 ar_liheap: 227 -- name: Case 2, a one cent monthly excess denies the final grant at the one person boundary. + +# Manual p42 rounds MCI to whole dollars. Alimony counts in full (rental income would +# take the 20% disregard): 28164 / 12 = 2347 and 28164.12 / 12 = 2347.01 rounds to 2347, +# so a one-cent monthly excess stays within the 2347 size-one limit; gas 2130-2347 pays +# 68 for 1&2. +- name: Case 2, a one cent monthly alimony excess rounds away at the one person limit. period: 2026 input: - state_code: - - AR - - AR - age: - - 40 - - 40 - immigration_status: - - CITIZEN - - CITIZEN - ssi: - - 0 - - 0 - is_full_time_student: - - false - - false - employment_income: - - 0 - - 0 - heating_type: - - NATURAL_GAS - - NATURAL_GAS - heating_expense: - - 1200 - - 1200 - rental_income: - - 28164 - - 28164.12 - output: - ar_liheap: - - 68 - - 0 + state_code: [AR, AR] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + employment_income: [0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS] + heating_expense: [1_200, 1_200] + alimony_income: [28_164, 28_164.12] + output: + ar_liheap: [68, 68] + - name: Case 3, five qualified household members receive the large household oil grant. period: 2026 input: people: - parent1: + person1: age: 40 immigration_status: CITIZEN ssi: 0 is_full_time_student: false - parent2: + person2: age: 39 immigration_status: CITIZEN ssi: 0 is_full_time_student: false - child1: + person3: age: 12 immigration_status: CITIZEN ssi: 0 is_full_time_student: false - child2: + person4: age: 8 immigration_status: CITIZEN ssi: 0 is_full_time_student: false - child3: + person5: age: 4 immigration_status: CITIZEN ssi: 0 is_full_time_student: false spm_units: - family: - members: &id002 - - parent1 - - parent2 - - child1 - - child2 - - child3 + spm_unit: + members: [person1, person2, person3, person4, person5] heating_type: FUEL_OIL heating_expense: 100 + ar_tea: 0 households: - home: - members: *id002 + household: + members: [person1, person2, person3, person4, person5] state_code: AR output: ar_liheap_household_size: 5 ar_liheap: 570 + - name: Case 4, the final grant follows heat in rent eligibility without an expense cap. period: 2026 input: - state_code: - - AR - - AR - - AR - age: - - 40 - - 40 - - 40 - immigration_status: - - CITIZEN - - CITIZEN - - CITIZEN - ssi: - - 0 - - 0 - - 0 - is_full_time_student: - - false - - false - - false - employment_income: - - 0 - - 0 - - 0 - heating_type: - - NATURAL_GAS - - NATURAL_GAS - - NATURAL_GAS - heating_expense: - - 0 - - 0 - - 10 - heat_expense_included_in_rent: - - true - - true - - true - receives_housing_assistance: - - false - - true - - true - output: - ar_liheap: - - 308 - - 0 - - 308 + state_code: [AR, AR, AR] + age: [40, 40, 40] + immigration_status: [CITIZEN, CITIZEN, CITIZEN] + ssi: [0, 0, 0] + is_full_time_student: [false, false, false] + employment_income: [0, 0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + heating_expense: [0, 0, 10] + heat_expense_included_in_rent: [true, true, true] + receives_housing_assistance: [false, true, true] + output: + ar_liheap: [308, 0, 308] + - name: Case 5, a mixed state population pays only Arkansas households. period: 2026 input: - state_code: - - AR - - GA - age: - - 40 - - 40 - immigration_status: - - CITIZEN - - CITIZEN - ssi: - - 0 - - 0 - is_full_time_student: - - false - - false - employment_income: - - 0 - - 0 - heating_type: - - NATURAL_GAS - - NATURAL_GAS - heating_expense: - - 10 - - 10 - output: - ar_liheap: - - 308 - - 0 + state_code: [AR, GA] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + employment_income: [0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS] + heating_expense: [10, 10] + output: + ar_liheap: [308, 0] + +# FY2025: wages 21000x0.8=16800, MCI 1400; size-one limit 2251 (x12=27012). +# FFY2025 electric row 1390-1449 pays 91 for 1&2 (the FY2026 row pays 88). +- name: Case 6, FY2025 electric grant for a one person household. + period: 2025 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 21_000 + spm_units: + spm_unit: + members: [person1] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 1_800 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_household_size: 1 + ar_liheap_countable_income: 16_800 + ar_liheap_income_limit: 27_012 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 91 + ar_liheap: 91 + +# FY2025: wages 34500x0.8=27600, MCI 2300; size-three limit 3636 (x12=43632). +# FFY2025 electric row 2250-2944 pays 64 for 3&4 (FY2026 puts 2300 in 2130-2347, paying 70). +- name: Case 7, FY2025 electric grant uses the FY2025 income bands. + period: 2025 + input: + people: + person1: + age: 32 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 34_500 + person2: + age: 10 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 6 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 2_100 + ar_tea: 0 + households: + household: + members: [person1, person2, person3] + state_code: AR + output: + ar_liheap_household_size: 3 + ar_liheap_countable_income: 27_600 + ar_liheap_income_limit: 43_632 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 64 + ar_liheap: 64 + +# Boundary: FY2025 size 7 uses 150% FPG, 47340x1.5/12=5917.50 -> 5918 (x12=71016); 60% SMI would be 5844. +# Wages (50000+38500)x0.8=70800, MCI 5900, so eligible; FFY2025 electric 5140-Max pays 60 for 5&up. +- name: Case 8, FY2025 seven person household between the SMI and FPG limits is paid. + period: 2025 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 50_000 + person2: + age: 38 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 38_500 + person3: + age: 16 + immigration_status: CITIZEN + ssi: 0 + person4: + age: 14 + immigration_status: CITIZEN + ssi: 0 + person5: + age: 11 + immigration_status: CITIZEN + ssi: 0 + person6: + age: 8 + immigration_status: CITIZEN + ssi: 0 + person7: + age: 5 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5, person6, person7] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 2_400 + ar_tea: 0 + households: + household: + members: [person1, person2, person3, person4, person5, person6, person7] + state_code: AR + output: + ar_liheap_household_size: 7 + ar_liheap_countable_income: 70_800 + ar_liheap_income_limit: 71_016 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 60 + ar_liheap: 60 + +# FY2025 Medicare-net Social Security (plan 1.9 p6; manual 4.7.2 p43): 2025 Part B 185x12=2220; +# 26400-2220=24180, MCI 2015; size-one limit 27012; FFY2025 gas 2010-2129 pays 73 for 1&2. +- name: Case 9, FY2025 Social Security net of the Part B premium sets the gas grant. + period: 2025 + input: + people: + person1: + age: 67 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + social_security: 26_400 + medicare_part_b_premium: 2_220 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_household_size: 1 + ar_liheap_countable_income: 24_180 + ar_liheap_income_limit: 27_012 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 73 + ar_liheap: 73 + +# 2026 Part B 202.90x12=2434.80; 29400-2434.80=26965.20, MCI 2247.10 -> 2247 (x12=26964) <= 28164. +# Gross Social Security (2450/month) would exceed the 2347 limit. Gas 2130-2347 pays 68 for 1&2. +- name: Case 10, netting the Part B premium makes a Social Security recipient eligible. + period: 2026 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + social_security: 29_400 + medicare_part_b_premium: 2_434.8 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_household_size: 1 + ar_liheap_countable_income: 26_964 + ar_liheap_income_limit: 28_164 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 68 + ar_liheap: 68 + +# Per-source floor: farm rent is an earned source (manual p141) and its 1000 loss counts +# as 0, so 36000 x 0.8 = 28800 > 28164 and no grant is paid. Netting the loss would give +# (36000 - 1000) x 0.8 = 28000, MCI 2333 (27996), eligible, and a 68 grant. +# The ungated gas row 2348-3070 shows 62 for 1&2. +- name: Case 11, a farm rent loss does not make a wage earner eligible. + period: 2026 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 36_000 + farm_rent_income: -1_000 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_household_size: 1 + ar_liheap_countable_income: 28_800 + ar_liheap_income_limit: 28_164 + ar_liheap_eligible: false + ar_liheap_matrix_amount: 62 + ar_liheap: 0 + +# Boundary: manual p42 half-up MCI rounding at the 2347 size-one limit. +# 28169.88/12=2347.49 -> 2347 (28164, eligible, gas 2130-2347 pays 68); +# 28170/12=2347.50 -> 2348 (28176 > 28164, ineligible; ungated gas 2348-3070 shows 62). +- name: Case 12, half-up rounding decides eligibility at the income limit. + period: 2026 + input: + state_code: [AR, AR] + age: [60, 60] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + heating_type: [NATURAL_GAS, NATURAL_GAS] + gas_expense: [900, 900] + ar_tea: [0, 0] + pension_income: [28_169.88, 28_170] + output: + ar_liheap_countable_income: [28_164, 28_176] + ar_liheap_income_limit: [28_164, 28_164] + ar_liheap_eligible: [true, false] + ar_liheap_matrix_amount: [68, 62] + ar_liheap: [68, 0] + +# Boundary: half-up rounding moves MCI 69.50 into the 70-129 band. Alimony counts in +# full. +# 833.88 / 12 = 69.49 -> 69 (828), electric 0-69 pays 242 for 1&2; +# 834 / 12 = 69.50 -> 70 (840), 70-129 pays 233. +- name: Case 13, half-up rounding of alimony decides the income band. + period: 2026 + input: + state_code: [AR, AR] + age: [30, 30] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + heating_type: [ELECTRICITY, ELECTRICITY] + pre_subsidy_electricity_expense: [1_800, 1_800] + ar_tea: [0, 0] + alimony_income: [833.88, 834] + output: + ar_liheap_countable_income: [828, 840] + ar_liheap_eligible: [true, true] + ar_liheap_matrix_amount: [242, 233] + ar_liheap: [242, 233] + +# Case 3's family with TEA received: manual Appendix E p130 counts TEA, read through take-up-gated tanf. +# Five-person TEA maximum $286/month x 12 = 3432; MCI 286 (whole); size-five limit 5236 (62832). +# FY2026 fuel oil 250-309 pays 497 for 5&up, down from 570 at zero income (0-69). +- name: Case 14, received TEA lowers the large household oil grant. + period: 2026 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + person2: + age: 39 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + person3: + age: 12 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + person4: + age: 8 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + person5: + age: 4 + immigration_status: CITIZEN + ssi: 0 + is_full_time_student: false + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + heating_type: FUEL_OIL + heating_expense: 100 + ar_tea: 3_432 + takes_up_tanf_if_eligible: true + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: AR + output: + tanf: 3_432 + ar_liheap_household_size: 5 + ar_liheap_countable_income: 3_432 + ar_liheap_income_limit: 62_832 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 497 + ar_liheap: 497 + +# Manual Appendix F p137 counts interest only over $200 a month: 3000 - 200 x 12 = 600. +# Pension 12000 + 600 = 12600; MCI 1050; size-one limit 28164; electric 1030-1089 pays +# 121 for 1&2. Counting all interest would give MCI 1250 and the 1210-1269 row, 104. +- name: Case 15, only interest above the monthly disregard lowers the electric grant. + period: 2026 + input: + people: + person1: + age: 62 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + pension_income: 12_000 + interest_income: 3_000 + spm_units: + spm_unit: + members: [person1] + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 1_800 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_household_size: 1 + ar_liheap_countable_income: 12_600 + ar_liheap_income_limit: 28_164 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 121 + ar_liheap: 121 + +# Manual Appendix F p141 treats rental property as self-employment, so the 20% disregard +# applies: 30000 x 0.8 = 24000, MCI 2000 <= 2347 size-one limit; gas 1990-2009 pays 79 +# for 1&2. Gross rental of 2500 a month would exceed the limit. +- name: Case 16, the self employment disregard makes a landlord eligible. + period: 2026 + input: + people: + person1: + age: 58 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + rental_income: 30_000 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_household_size: 1 + ar_liheap_countable_income: 24_000 + ar_liheap_income_limit: 28_164 + ar_liheap_eligible: true + ar_liheap_matrix_amount: 79 + ar_liheap: 79 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml index 4039e73a343..024e76179cf 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml @@ -4,71 +4,65 @@ period: 2026 input: people: - adult1: + person1: age: 40 immigration_status: CITIZEN ssi: 0 is_full_time_student: false - adult2: + person2: age: 39 immigration_status: LEGAL_PERMANENT_RESIDENT ssi: 0 is_full_time_student: false - adult3: + person3: age: 19 immigration_status: ASYLEE ssi: 0 is_full_time_student: false - child1: + person4: age: 17 immigration_status: DACA ssi: 0 is_full_time_student: false - child2: + person5: age: 8 immigration_status: UNDOCUMENTED ssi: 0 is_full_time_student: false spm_units: - family: - members: &id001 - - adult1 - - adult2 - - adult3 - - child1 - - child2 + spm_unit: + members: [person1, person2, person3, person4, person5] heating_type: NATURAL_GAS - heating_expense: 1200 + heating_expense: 1_200 households: - home: - members: *id001 + household: + members: [person1, person2, person3, person4, person5] state_code: AR output: ar_liheap_household_size: 3 + - name: Case 2, a household with no qualified member has zero eligible household size. period: 2026 input: people: - parent: + person1: age: 40 immigration_status: UNDOCUMENTED ssi: 0 is_full_time_student: false - child: + person2: age: 8 immigration_status: DACA ssi: 0 is_full_time_student: false spm_units: - family: - members: &id002 - - parent - - child + spm_unit: + members: [person1, person2] heating_type: NATURAL_GAS - heating_expense: 1200 + heating_expense: 1_200 households: - home: - members: *id002 + household: + members: [person1, person2] state_code: AR output: ar_liheap_household_size: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml index c02aa865c69..db616a35828 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml @@ -3,214 +3,111 @@ - name: Case 1, the exact income ceiling is inclusive and does not impose an asset test. period: 2026 input: - state_code: - - AR - - AR - age: - - 40 - - 40 - immigration_status: - - CITIZEN - - CITIZEN - ssi: - - 0 - - 0 - is_full_time_student: - - false - - false - employment_income: - - 0 - - 0 - heating_type: - - NATURAL_GAS - - NATURAL_GAS - heating_expense: - - 1200 - - 1200 - ar_liheap_countable_income: - - 28164 - - 28164.12 - spm_unit_assets: - - 1000000 - - 1000000 + state_code: [AR, AR] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + employment_income: [0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS] + heating_expense: [1_200, 1_200] + ar_liheap_countable_income: [28_164, 28_164.12] + spm_unit_assets: [1_000_000, 1_000_000] output: - ar_liheap_eligible: - - true - - false -- name: Case 2, subsidized heat in rent requires a reported residual charge despite a general obligation - flag. + ar_liheap_eligible: [true, false] + +- name: Case 2, subsidized heat in rent requires a reported residual charge despite a general obligation flag. period: 2026 input: - state_code: - - AR - - AR - - AR - - AR - - AR - age: - - 40 - - 40 - - 40 - - 40 - - 40 - immigration_status: - - CITIZEN - - CITIZEN - - CITIZEN - - CITIZEN - - CITIZEN - ssi: - - 0 - - 0 - - 0 - - 0 - - 0 - is_full_time_student: - - false - - false - - false - - false - - false - employment_income: - - 0 - - 0 - - 0 - - 0 - - 0 - heating_type: - - NATURAL_GAS - - NATURAL_GAS - - NATURAL_GAS - - NATURAL_GAS - - NATURAL_GAS - heating_expense: - - 0 - - 0 - - 120 - - 0 - - 120 - has_heating_expense: - - false - - true - - true - - true - - true - heat_expense_included_in_rent: - - true - - true - - true - - true - - true - receives_housing_assistance: - - false - - true - - true - - false - - false - is_in_public_housing: - - false - - false - - false - - true - - true + state_code: [AR, AR, AR, AR, AR] + age: [40, 40, 40, 40, 40] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN] + ssi: [0, 0, 0, 0, 0] + is_full_time_student: [false, false, false, false, false] + employment_income: [0, 0, 0, 0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + heating_expense: [0, 0, 120, 0, 120] + has_heating_expense: [false, true, true, true, true] + heat_expense_included_in_rent: [true, true, true, true, true] + receives_housing_assistance: [false, true, true, false, false] + is_in_public_housing: [false, false, false, true, true] output: - ar_liheap_eligible: - - true - - false - - true - - false - - true + ar_liheap_eligible: [true, false, true, false, true] + - name: Case 3, a direct heating obligation can be reported without a current positive bill. period: 2026 input: - state_code: - - AR - - AR - age: - - 40 - - 40 - immigration_status: - - CITIZEN - - CITIZEN - ssi: - - 0 - - 0 - is_full_time_student: - - false - - false - employment_income: - - 0 - - 0 - heating_type: - - NATURAL_GAS - - NATURAL_GAS - heating_expense: - - 0 - - 0 - has_heating_expense: - - true - - false - heat_expense_included_in_rent: - - false - - false + state_code: [AR, AR] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + employment_income: [0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS] + heating_expense: [0, 0] + has_heating_expense: [true, false] + heat_expense_included_in_rent: [false, false] output: - ar_liheap_eligible: - - true - - false + ar_liheap_eligible: [true, false] + - name: Case 4, explicit no heating and no qualified member each prevent eligibility. period: 2026 input: - state_code: - - AR - - AR - age: - - 40 - - 40 - immigration_status: - - CITIZEN - - UNDOCUMENTED - ssi: - - 0 - - 0 - is_full_time_student: - - false - - false - employment_income: - - 0 - - 0 - heating_type: - - NONE - - NATURAL_GAS - heating_expense: - - 1200 - - 1200 + state_code: [AR, AR] + age: [40, 40] + immigration_status: [CITIZEN, UNDOCUMENTED] + ssi: [0, 0] + is_full_time_student: [false, false] + employment_income: [0, 0] + heating_type: [NONE, NATURAL_GAS] + heating_expense: [1_200, 1_200] output: - ar_liheap_eligible: - - false - - false + ar_liheap_eligible: [false, false] + +# An aged SSI recipient (Social Security 600/month; SSI (994-(600-20))x12=4968) lives with a +# working adult son. The State's Medicaid buy-in pays Part B for an SSI recipient, so no premium is netted. +# 40000x0.8=32000 + 4968 + 7200 = 44168; MCI 3680.67 rounds to 3681; x12=44172 > 36840 two-person limit. - name: Case 5, SSI receipt does not waive the ordinary income ceiling. period: 2026 input: - state_code: - - AR - age: - - 40 - immigration_status: - - CITIZEN - ssi: - - 36000 - is_full_time_student: - - false - employment_income: - - 0 - heating_type: - - NATURAL_GAS - heating_expense: - - 1200 - snap: - - 6000 + people: + person1: + age: 70 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 4_968 + social_security: 7_200 + medicare_part_b_premium: 0 + person2: + age: 45 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 40_000 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + heating_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 44_172 + ar_liheap_eligible: false + +# Boundary: FY2025 plan 2.1 (p8) and chart set size 7 at 150% FPG: 47340x1.5/12=5917.50 -> 5918 +# (annual 71016). MCI 5900 (70800) and 5918 (71016) are eligible; 5919 (71028) is not. +# 60% SMI would have given 5844 and denied MCI 5900. +- name: Case 6, FY2025 size seven households use the poverty guideline limit. + period: 2025 + input: + state_code: [AR, AR, AR] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY] + pre_subsidy_electricity_expense: [2_400, 2_400, 2_400] + ar_liheap_household_size: [7, 7, 7] + ar_liheap_countable_income: [70_800, 71_016, 71_028] output: - ar_liheap_countable_income: - - 36000 - ar_liheap_eligible: - - false + ar_liheap_eligible: [true, true, false] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml index a23505bc72f..aa9ea2f54af 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml @@ -25,8 +25,11 @@ output: ar_liheap_countable_income: 12_000 -# Application p2 excludes full-time students from work-income reporting; unearned1200 remains fully countable. -- name: Case 2, full time adult student work is excluded but Social Security remains. +# Manual Appendix F p134 excludes only full-time college students up to 23 listed as a +# household member's dependent. Living alone, this 22-year-old is not a dependent, so +# work counts: (15000 + 3000) x 0.8 = 14400 + Social Security 1200 = 15600; MCI 1300. +# Under 65 without SSDI there is no Part B premium to net from Social Security. +- name: Case 2, a full time college student living alone has work counted. period: 2026 absolute_error_margin: 0.01 input: @@ -35,10 +38,13 @@ age: 22 immigration_status: CITIZEN is_full_time_student: true + is_full_time_college_student: true + is_tax_unit_dependent: false ssi: 0 employment_income: 15_000 self_employment_income: 3_000 social_security: 1_200 + medicare_part_b_premium: 0 spm_units: spm_unit: members: [person1] @@ -50,10 +56,12 @@ members: [person1] state_code: AR output: - ar_liheap_countable_income: 1_200 + ar_liheap_countable_income: 15_600 -# Application p2 work-income age18 boundary; SSI2400+support3600=6000 remain countable. -- name: Case 3, minor work is excluded but SSI and child support remain. +# Manual Appendix F p133 excludes a minor's earnings only while attending school at +# least half time. This 17-year-old attends no school, so work counts: +# (15000 + 3000) x 0.8 = 14400 + SSI 2400 + child support 3600 = 20400; MCI 1700. +- name: Case 3, a minor not attending school has work counted. period: 2026 absolute_error_margin: 0.01 input: @@ -82,7 +90,7 @@ members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 6_000 + ar_liheap_countable_income: 20_400 # Exactly18 and not a full-time student makes wages countable, after20%disregard. - name: Case 4, age eighteen nonstudent earnings are counted. @@ -115,6 +123,7 @@ ar_liheap_countable_income: 12_000 # Countable adult existing earned inputs total20000; standard20%disregard gives16000, without a new business-expense calculation. +# Manual p42 rounds MCI to whole dollars: 16000/12=1333.33 -> 1333; x12=15996. - name: Case 5, existing business sources receive the standard earned disregard. period: 2026 absolute_error_margin: 0.01 @@ -141,7 +150,7 @@ members: [person1] state_code: AR output: - ar_liheap_countable_income: 16_000 + ar_liheap_countable_income: 15_996 # Contract specifies nonnegative earned sources: wages12000×0.8+pension1200=10800. - name: Case 6, source losses do not offset wages or unearned receipts. @@ -171,8 +180,13 @@ output: ar_liheap_countable_income: 10_800 -# 9600 counted wages+2400rent+1200farmrent+600survivor+2400SSI=16200. Plan pp6–7 excludes TANF although application requests disclosure. -- name: Case 7, farm rent survivors and child SSI count while TANF is excluded. +# Manual Appendix F p141 treats rental property as self-employment, so rental and farm +# rent take the 20% disregard with wages: (12000 + 2400 + 1200) x 0.8 = 12480. +# Survivor 600 + child SSI 2400 count in full: 15480. +# Manual Appendix E p130 counts TEA (plan 1.9 leaves TANF unchecked); TEA flows +# through take-up-gated tanf. TEA 1944 = two-person maximum $162 x 12. +# 15480 + 1944 = 17424; MCI 1452 is already whole. +- name: Case 7, rental and farm rent take the earned disregard; other income counts. period: 2026 absolute_error_margin: 0.01 input: @@ -196,10 +210,476 @@ members: [person1, person2] heating_type: NATURAL_GAS gas_expense: 1_200 - ar_tea: 3_600 + ar_tea: 1_944 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 17_424 + +# Plan 1.9 p6 counts SSA "Excluding MediCare deduction"; manual 4.7.2 p43 nets the Part B premium. +# 2026 Part B 202.90 x 12 = 2434.80; 29400-2434.80=26965.20; MCI 2247.10 rounds to 2247; x12=26964. +- name: Case 8, Social Security counts net of the Medicare Part B premium. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + social_security: 29_400 + medicare_part_b_premium: 2_434.8 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 26_964 + +# Manual 4.7.2 p43 applies the Part B netting to Railroad Retirement too. +# (18000-2434.80)+(15600-2434.80)=15565.20+13165.20=28730.40; MCI 2394.20 rounds to 2394; x12=28728. +- name: Case 9, Social Security and railroad retirement are each net of the member's premium. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + social_security: 18_000 + medicare_part_b_premium: 2_434.8 + person2: + age: 68 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + railroad_benefits: 15_600 + medicare_part_b_premium: 2_434.8 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 28_728 + +# Boundary: a premium above a small benefit floors that member's net Social Security at 0 +# and does not reduce other income. max(1200-2434.80,0)=0; pension 12000; MCI 1000. +- name: Case 10, a premium larger than Social Security does not offset a pension. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 66 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + social_security: 1_200 + medicare_part_b_premium: 2_434.8 + pension_income: 12_000 + spm_units: + spm_unit: + members: [person1] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 12_000 + +# Manual Appendix F: military retirement p141, workers' compensation p144 (also Appendix E p130), +# gaming or gambling winnings p135, capital gains p132. Each counts in full; every MCI is whole: +# 24000/12=2000, 15600/12=1300, 1200/12=100, 3000/12=250. +- name: Case 11, military retirement workers compensation gambling winnings and capital gains count in full. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR] + age: [55, 45, 60, 62] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN] + is_full_time_student: [false, false, false, false] + ssi: [0, 0, 0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + gas_expense: [900, 900, 900, 900] + ar_tea: [0, 0, 0, 0] + military_retirement_pay: [24_000, 0, 0, 0] + workers_compensation: [0, 15_600, 0, 0] + gambling_winnings: [0, 0, 1_200, 0] + capital_gains: [0, 0, 0, 3_000] + output: + ar_liheap_countable_income: [24_000, 15_600, 1_200, 3_000] + +# Manual Appendix E p130 counts TEA once monthly; take-up-gated tanf includes ar_tea. +# Three-person TEA maximum $204 x 12 = 2448; MCI 204. +- name: Case 12, TEA the household takes up is counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 26 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + person2: + age: 6 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 3 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 2_448 + households: + household: + members: [person1, person2, person3] + state_code: AR + output: + ar_liheap_countable_income: 2_448 + +# Same family without TEA take-up: tanf is 0, so the unreceived entitlement is not counted. +- name: Case 13, TEA the household does not take up is not counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 26 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + person2: + age: 6 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 3 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 2_448 + takes_up_tanf_if_eligible: false + households: + household: + members: [person1, person2, person3] + state_code: AR + output: + ar_liheap_countable_income: 0 + +# Each source is floored at 0. Farm rent -1000 and rental -2000 are earned sources +# (manual p141) and do not offset wages; capital gains -3000 (manual p132 excludes +# capital losses) does not offset child support. 36000 x 0.8 = 28800 + 2400 = 31200; +# MCI 2600. +# Without the floors: (36000 - 3000) x 0.8 = 26400 + (2400 - 3000) = 25800. +- name: Case 14, rental farm rent and capital losses do not offset other income. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 36_000 + farm_rent_income: -1_000 + rental_income: -2_000 + capital_gains: -3_000 + child_support_received: 2_400 + person2: + age: 8 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 900 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 31_200 + +# Boundary: manual p42 rounds MCI to the nearest whole dollar, halves up. +# Alimony counts in full (interest below $200 a month would be disregarded). +# 833.88 / 12 = 69.49 -> 69 -> 828; 834 / 12 = 69.50 -> 70 -> 840. +- name: Case 15, monthly countable alimony rounds half up to whole dollars. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR] + age: [30, 30] + immigration_status: [CITIZEN, CITIZEN] + is_full_time_student: [false, false] + ssi: [0, 0] + heating_type: [ELECTRICITY, ELECTRICITY] + pre_subsidy_electricity_expense: [1_800, 1_800] + ar_tea: [0, 0] + alimony_income: [833.88, 834] + output: + ar_liheap_countable_income: [828, 840] + +# Manual Appendix F p137 counts only interest "amount over $200.00", read per recipient +# per month. 2400 / 12 = 200 is not over the disregard: 0. 3000 - 200 x 12 = 600; +# MCI 50. +- name: Case 16, interest counts only above two hundred dollars a month. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR] + age: [62, 62] + immigration_status: [CITIZEN, CITIZEN] + is_full_time_student: [false, false] + ssi: [0, 0] + ar_tea: [0, 0] + interest_income: [2_400, 3_000] + output: + ar_liheap_countable_income: [0, 600] + +# Manual p137 does not say whose interest the $200 applies to; the chosen reading applies +# it to each person. Each spouse's 2400 (200 a month) is fully disregarded, leaving the +# pension 12000; MCI 1000. A household-wide $200 would give +# 12000 + (4800 - 2400) = 14400. +- name: Case 17, each spouse receives a separate interest disregard. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 66 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + pension_income: 12_000 + interest_income: 2_400 + person2: + age: 64 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + interest_income: 2_400 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 12_000 + +# Manual Appendix F p141: "Ownership of rental property will be considered a +# self-employment enterprise", so rental income takes the 20% disregard: +# 15000 x 0.8 = 12000; MCI 1000. A farm rent loss of 3000 is floored at 0 and does not +# offset the rental income: still 12000. +- name: Case 18, rental income receives the twenty percent self employment disregard. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR] + age: [58, 58] + immigration_status: [CITIZEN, CITIZEN] + is_full_time_student: [false, false] + ssi: [0, 0] + ar_tea: [0, 0] + rental_income: [15_000, 15_000] + farm_rent_income: [0, -3_000] + output: + ar_liheap_countable_income: [12_000, 12_000] + +# Case 3's household, but the 17-year-old attends high school and works part time +# (manual Appendix F p133): wages 6000 and self-employment 1200 are excluded; +# SSI 2400 + child support 3600 = 6000; MCI 500. +# Counting the earnings would give 7200 x 0.8 = 5760 + 6000 = 11760. +- name: Case 19, a minor attending high school has work excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_full_time_student: true + ssi: 2_400 + employment_income: 6_000 + self_employment_income: 1_200 + child_support_received: 3_600 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 6_000 + +# Half-time college attendance also qualifies (manual Appendix F p133): a 17-year-old +# part-time college student who is not a full-time student has wages 6000 excluded; +# SSI 2400 + child support 3600 = 6000; MCI 500. +- name: Case 20, a minor attending college part time has work excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_full_time_student: false + is_part_time_college_student: true + ssi: 2_400 + employment_income: 6_000 + child_support_received: 3_600 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 6_000 + +# Manual Appendix F p134 excludes earnings of full-time college students up to age 23 +# listed as a household member's dependent. The 22-year-old dependent's wages 6000 are +# excluded; the parent's 24000 x 0.8 = 19200; MCI 1600. Case 2 is a 22-year-old +# full-time college student living alone, whose work counts. +- name: Case 21, a dependent college student aged twenty two has work excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 24_000 + person2: + age: 22 + immigration_status: CITIZEN + is_full_time_student: true + is_full_time_college_student: true + is_tax_unit_dependent: true + ssi: 0 + employment_income: 6_000 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 19_200 + +# Boundary: "up to age 23" is read as including 23, so the dependent student's wages +# 6000 remain excluded: 24000 x 0.8 = 19200; MCI 1600. Reading it as under 23 would +# give 24000. +- name: Case 22, a dependent college student aged twenty three still has work excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 24_000 + person2: + age: 23 + immigration_status: CITIZEN + is_full_time_student: true + is_full_time_college_student: true + is_tax_unit_dependent: true + ssi: 0 + employment_income: 6_000 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 19_200 + +# Above the age limit a dependent full-time college student's work counts: +# (24000 + 6000) x 0.8 = 24000; MCI 2000. +- name: Case 23, a dependent college student aged twenty four has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 24_000 + person2: + age: 24 + immigration_status: CITIZEN + is_full_time_student: true + is_full_time_college_student: true + is_tax_unit_dependent: true + ssi: 0 + employment_income: 6_000 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 households: household: members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 16_200 + ar_liheap_countable_income: 24_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml index c596e4ca5b5..b1486c07f44 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml @@ -18,8 +18,9 @@ 188_484] -# Unverified2025 estimate:2024FPG15060+5380per extra person; monthly size8=6590,size20=14660,rounded increment673→size21=15333. -- name: Case 2, earlier year FPG and additional person rounding stay year relative. +# FY2025 chart (2024 FPG 15060+5380 per extra person): size8 52720x1.5/12=6590; size20 117280x1.5/12=14660; +# size21 adds the printed $672 (not the half-up 673): 14660+672=15332, x12=183984. +- name: Case 2, FY2025 poverty guideline rows and the printed additional person amount. period: 2025 absolute_error_margin: 0.01 input: @@ -28,4 +29,21 @@ gas_expense: [1_200, 1_200, 1_200] ar_liheap_household_size: [8, 20, 21] output: - ar_liheap_income_limit: [79_080, 175_920, 183_996] + ar_liheap_income_limit: [79_080, 175_920, 183_984] + +# FY2025 chart and plan 2.1 (p8): sizes 1-6 use 60% SMI ($86,577 for four), size 7+ uses 150% FPG. +# SMI x 0.6 / 12 x size factor: 0.52 -> 2251.00 -> 2251; 0.68 -> 2943.62 -> 2944; 0.84 -> 3636.23 -> 3636; +# 1.00 -> 4328.85 -> 4329; 1.16 -> 5021.47 -> 5021; 1.32 -> 5714.08 -> 5714. +# Size 7: 47340x1.5/12=5917.50 -> 5918 (60% SMI would be 5844); size 9: 58100x1.5/12=7262.50 -> 7263. +# Annual = monthly x 12. +- name: Case 3, FY2025 state median income rows and the size seven poverty guideline row. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, + NATURAL_GAS] + gas_expense: [900, 900, 900, 900, 900, 900, 900, 900] + ar_liheap_household_size: [1, 2, 3, 4, 5, 6, 7, 9] + output: + ar_liheap_income_limit: [27_012, 35_328, 43_632, 51_948, 60_252, 68_568, 71_016, 87_156] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml index b58c1272252..2e005942aa1 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml @@ -321,7 +321,7 @@ heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY] gas_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200] ar_liheap_household_size: [3, 3, 3, 3, 3, 3] - ar_liheap_countable_income: [839.88, 840, 23879.88, 23_880, 24119.88, 24_120] + ar_liheap_countable_income: [839.88, 840, 23_879.88, 23_880, 24_119.88, 24_120] pre_subsidy_electricity_expense: [1_200, 1_200, 1_200, 1_200, 1_200, 1_200] output: ar_liheap_matrix_amount: [288, 276, 86, 80, 80, 76] @@ -372,3 +372,94 @@ ar_liheap_countable_income: 0 output: ar_liheap_matrix_amount: 0 + +# FFY2025 Electric matrix pp1-2: top bands start at 2250/2945/4330/5022/5140 (annual x12 = +# 27000/35340/51960/60264/61680) for sizes 1&2, 3&4, 5&up; 1390-1449 pays 91 for 1&2 +# (FY2026: 88). Annual 16800 = MCI 1400. +- name: Case 10, FY2025 electric top bands and a changed size one cell. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, + ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, + ELECTRICITY] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1] + ar_liheap_countable_income: [27_000, 27_000, 27_000, 35_340, 35_340, 35_340, 51_960, 51_960, 51_960, + 60_264, 60_264, 60_264, 61_680, 61_680, 61_680, 16_800] + output: + ar_liheap_matrix_amount: [60, 64, 73, 0, 60, 67, 0, 0, 61, 0, 0, 60, 0, 0, 60, 91] + +# FFY2025 Natural Gas matrix p2: same top bands; 1450-1509 pays 163 for 5&up (FY2026: 162). +# Annual 17400 = MCI 1450. +- name: Case 11, FY2025 natural gas top bands and a changed large household cell. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 5] + ar_liheap_countable_income: [27_000, 27_000, 27_000, 35_340, 35_340, 35_340, 51_960, 51_960, 51_960, + 60_264, 60_264, 60_264, 61_680, 61_680, 61_680, 17_400] + output: + ar_liheap_matrix_amount: [64, 82, 92, 60, 74, 85, 60, 60, 60, 0, 60, 60, 0, 0, 60, 163] + +# FFY2025 Propane matrix p2: same top bands; 1870-1989 pays 109 for 1&2 (FY2026: 110). +# Annual 22440 = MCI 1870. +- name: Case 12, FY2025 propane top bands and a changed size one cell. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + heating_type: [PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, + PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE, PROPANE] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1] + ar_liheap_countable_income: [27_000, 27_000, 27_000, 35_340, 35_340, 35_340, 51_960, 51_960, 51_960, + 60_264, 60_264, 60_264, 61_680, 61_680, 61_680, 22_440] + output: + ar_liheap_matrix_amount: [80, 106, 119, 73, 96, 110, 66, 86, 109, 0, 77, 100, 0, 0, 90, 109] + +# FFY2025 Fuel Oil matrix p2: rows 2250-2944 through 5140-Max for sizes 1&2, 3&4, 5&up. +- name: Case 13, FY2025 fuel oil top bands. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + 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] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [27_000, 27_000, 27_000, 35_340, 35_340, 35_340, 51_960, 51_960, 51_960, + 60_264, 60_264, 60_264, 61_680, 61_680, 61_680] + output: + ar_liheap_matrix_amount: [82, 107, 121, 74, 97, 112, 67, 88, 102, 0, 78, 92, 0, 0, 83] + +# FFY2025 Other/Wood/Pellets matrix p2: rows 2250-2944 through 5140-Max; the 5140-Max row pays 0 in +# every column (FY2026 pays 61 for 5&up). +- name: Case 14, FY2025 other fuel top bands. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR, AR] + heating_type: [OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, OTHER, + OTHER, OTHER] + ar_liheap_household_size: [1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5] + ar_liheap_countable_income: [27_000, 27_000, 27_000, 35_340, 35_340, 35_340, 51_960, 51_960, 51_960, + 60_264, 60_264, 60_264, 61_680, 61_680, 61_680] + output: + ar_liheap_matrix_amount: [60, 77, 88, 60, 70, 80, 60, 64, 74, 0, 60, 67, 0, 0, 0] + +# SOLAR and UNSPECIFIED have no supported fuel schedule, so the matrix pays 0 (unverified estimate). +# Electric at zero income pays 242 for 1&2 as a control; an empty qualified household pays 0. +- name: Case 15, solar unspecified fuel and an empty household have no matrix amount. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR] + heating_type: [SOLAR, UNSPECIFIED, ELECTRICITY, ELECTRICITY] + pre_subsidy_electricity_expense: [1_800, 1_800, 1_800, 1_800] + ar_liheap_household_size: [1, 1, 1, 0] + ar_liheap_countable_income: [0, 0, 0, 0] + output: + ar_liheap_matrix_amount: [0, 0, 242, 0] diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py index 919b3bee132..d9a66ef4dab 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py @@ -9,8 +9,8 @@ class ar_liheap(Variable): label = "Arkansas LIHEAP regular heating benefit" defined_for = "ar_liheap_eligible" documentation = ( - "Annual regular heating grant from the FY2026 fuel matrices. Earlier " - "or later results use parameter backfilling and are unverified estimates. " + "Annual regular heating grant from the FY2025 and FY2026 fuel matrices. " + "Other years use parameter backfilling and are unverified estimates. " "The proposed FY2027 increase is not treated as an adopted schedule." ) reference = ( diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py index 038821393aa..f1b04b6a7a6 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py @@ -7,7 +7,7 @@ class ar_liheap_eligible(Variable): definition_period = YEAR label = "Eligible for Arkansas LIHEAP regular heating assistance" defined_for = StateCode.AR - # Plan sections 1.5 and 2.1-2.3, pages 5 and 9-10: no categorical + # Plan question 1.4 and sections 2.1-2.3, pages 5 and 9-10: no categorical # income bypass or asset test; direct or indirect heating burden required. reference = "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9" diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py index bd20142f49f..e3e5921fdb4 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -9,29 +9,97 @@ class ar_liheap_countable_income(Variable): label = "Arkansas LIHEAP countable income" defined_for = StateCode.AR reference = ( - # State plan sections 1.8-1.9, pages 5-7; application section III, page 2. + # State plan sections 1.8 (page 5) and 1.9 (pages 6-7). "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5", + # FY2025 state plan sections 1.8 and 1.9, pages 5-7. + "https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5", + # Draft manual section 4.7 (MCI rounding, page 42; Medicare deduction, + # section 4.7.2, page 43) and Appendices E-F (pages 130-144). + "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=42", + # Application section III, page 2. "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2", ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ar.ee.aeo.liheap.income person = spm_unit.members - # Section III excludes minors' and full-time students' work income, - # but requests non-work income from every household member. - counted_worker = ( - person("age", period) >= p.minimum_earned_income_age - ) & ~person("is_full_time_student", period) + age = person("age", period) + # Manual Appendix F (page 133) excludes a child's earnings only while + # the child attends school at least half time; plan Section 1.9 (page 6) + # and application Section III (page 2) exclude all earnings under 18. + # No input covers half-time attendance below college: K-12 enrollment + # counts through is_full_time_student, and preschool, vocational and + # training-program attendance have no input. is_full_time_student + # defaults to true at ages 5-17, so a minor's earnings are excluded + # unless school status is set to false. + attends_school = person("is_full_time_student", period) | person( + "is_part_time_college_student", period + ) + excluded_child = (age < p.student_exclusion.child_age_limit) & attends_school + # Manual Appendix F (page 134), row "Earnings of a full-time college + # student", excludes full-time college students up to age 23 who are + # dependents of a household member; application Section III excludes + # every full-time student. The row text says "Income received"; the + # model follows the heading and excludes only earned sources, so the + # student's unearned income still counts. Reading the text instead + # would exclude all of the student's income. Tax-unit dependency + # stands for the dependent listing. Manual page 41 also excludes an + # 18-year-old high-school student's earnings unless the student works + # full time or is emancipated; that rule is not modeled. + excluded_college_student = ( + person("is_full_time_college_student", period) + & (age <= p.student_exclusion.college_max_age) + & person("is_tax_unit_dependent", period) + ) + counted_worker = ~(excluded_child | excluded_college_student) # Existing net business income approximates gross receipts. Additional # business/work-expense deductions and new gross inputs are deferred. + # Each source is floored at zero, so a loss in one source cannot + # offset another. earned_income = 0 for source in p.sources.earned: earned_income = earned_income + max_(person(source, period), 0) countable_earnings = spm_unit.sum(earned_income * counted_worker) * ( 1 - p.earned_disregard ) - unearned_income = add(spm_unit, period, p.sources.unearned, options=[ADD]) - # Annual inputs approximate the application's preceding four weeks. - # Otherwise countable income from every member is included in full, - # even when that member is excluded from ar_liheap_household_size. - return max_(countable_earnings + unearned_income, 0) + unearned_income = 0 + for source in p.sources.unearned: + unearned_income = unearned_income + max_(person(source, period), 0) + # Manual Appendix F (page 137) counts only the interest "amount over + # $200.00". The amount is monthly because unearned income is a month's + # receipts (page 41; Appendix E, pages 129-130, converts other + # frequencies to monthly). The manual does not say whose $200 it is; + # applying it to each recipient is a chosen reading, and a household- + # wide $200 would count more. Plan Section 1.9 (page 6) counts + # interest with no threshold. + annual_interest_disregard = p.interest_disregard * MONTHS_IN_YEAR + countable_interest = max_( + person("interest_income", period) - annual_interest_disregard, 0 + ) + # Plan section 1.9 counts Social Security "Excluding MediCare + # deduction", and manual section 4.7.2 excludes the Part B premium + # from Social Security and Railroad Retirement for members not + # eligible for Medicaid. medicare_part_b_premium is zero when not + # enrolled and excludes the share a Medicare Savings Program pays. + # Other medical deductions are not modeled. + ssa_and_railroad = max_(person("social_security", period), 0) + max_( + person("railroad_benefits", period), 0 + ) + premium = person("medicare_part_b_premium", period) + net_ssa_and_railroad = max_(ssa_and_railroad - premium, 0) + # Manual Appendix E (page 130) counts TEA once monthly; plan section + # 1.9 leaves TANF unchecked. The annual tanf aggregate includes ar_tea + # and applies take-up, so a nonrecipient's entitlement is not counted. + tea = spm_unit("tanf", period) + # Annual inputs approximate the month before application. Otherwise + # countable income from every member is included in full, even when + # that member is excluded from ar_liheap_household_size. + annual_income = ( + countable_earnings + + spm_unit.sum(unearned_income + countable_interest + net_ssa_and_railroad) + + tea + ) + # Manual page 42: round monthly countable income to the nearest whole + # dollar before the income limit and band tests. + monthly_income = np.floor(annual_income / MONTHS_IN_YEAR + 0.5) + return monthly_income * MONTHS_IN_YEAR diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py index e2c5f0ea55f..ebcff76f8e7 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py @@ -13,6 +13,8 @@ class ar_liheap_income_limit(Variable): reference = ( "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9", "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf", + "https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=8", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf", ) def formula(spm_unit, period, parameters): @@ -25,25 +27,13 @@ def formula(spm_unit, period, parameters): guideline = fpg( capped_size, state_group, period, parameters, year_lag=p.fpg_year_lag ) - additional_guideline = ( - fpg( - capped_size + 1, - state_group, - period, - parameters, - year_lag=p.fpg_year_lag, - ) - - guideline - ) monthly_fpg = guideline * p.fpg_rate / MONTHS_IN_YEAR - monthly_increment = additional_guideline * p.fpg_rate / MONTHS_IN_YEAR monthly_base = where(size <= p.smi_max_size, monthly_smi, monthly_fpg) - # Half-up monthly rounding reproduces the published FY2026 table; - # it is a reconciled numerical pattern, not an express rounding rule. - # The chart separately adds $688 for each person above size 20. + # Half-up monthly rounding reproduces the published FY2025 and FY2026 + # tables; it is a reconciled numerical pattern, not an express rule. rounding = p.rounding_increment rounded_base = np.floor(monthly_base / rounding + 0.5) * rounding - rounded_increment = np.floor(monthly_increment / rounding + 0.5) * rounding + # The charts add a printed amount for each person above size 20. extra_people = max_(size - p.max_table_size, 0) - monthly_limit = rounded_base + extra_people * rounded_increment + monthly_limit = rounded_base + extra_people * p.additional_member_amount return where(size > 0, monthly_limit * MONTHS_IN_YEAR, 0) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py index 9e5d58d071b..1c5ce3a564e 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py @@ -15,6 +15,11 @@ class ar_liheap_matrix_amount(Variable): "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf#page=1", "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Fuel-Oil.pdf#page=1", "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Other-Wood-Pellets.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Natural-Gas.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Propane.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Fuel-Oil.pdf#page=1", + "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Other-Wood-Pellets.pdf#page=1", "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=3", ) @@ -22,8 +27,8 @@ def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ar.ee.aeo.liheap.payment income = spm_unit("ar_liheap_countable_income", period) / MONTHS_IN_YEAR size = spm_unit("ar_liheap_household_size", period) - # Tables use the printed lower bounds: $70 starts the next band. - # Cents remain in the lower band until that next whole-dollar bound. + # Countable income is already rounded to whole monthly dollars, and + # the printed lower bounds are inclusive: $70 starts the second band. band = p.income_band.calc(max_(income, 0)).astype(int) size_group = p.household_size_group.calc(max_(size, 1)).astype(int) fuel = spm_unit("heating_type", period) From 2ec2b4178f783b22fb3842f558793be3a39d7c2a Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Oct 2026 22:56:54 -0400 Subject: [PATCH 4/7] Fix issues from review: exclude 18-year-old high school students' earnings Draft manual 4.7 (page 41) excludes the earnings of members aged 18 enrolled in high school; identified with is_in_k12_school. The full-time-work and emancipation exceptions are not modeled. Co-Authored-By: Claude Opus 5.5 --- .../student_exclusion/high_school_age.yaml | 16 +++++ .../income/ar_liheap_countable_income.yaml | 70 +++++++++++++++++++ .../income/ar_liheap_countable_income.py | 23 ++++-- 3 files changed, 102 insertions(+), 7 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml new file mode 100644 index 00000000000..f73570ab697 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml @@ -0,0 +1,16 @@ +description: Arkansas excludes earnings of high school students of this age under the Low Income Home Energy Assistance Program. +# Manual Section 4.7 (page 41) excludes the earned income of members "aged 18 +# and enrolled in an institution of secondary education (high school)" unless +# the member works full time or is emancipated and applying as the head of +# household. Neither exception is modeled: the manual sets no full-time hours +# threshold, and no input records emancipation. +values: + 2024-10-01: 18 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP high school student earnings exclusion age + reference: + - title: Arkansas LIHEAP draft manual FY2025, Section 4.7, Income verification + href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=41 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml index aa9ea2f54af..85476ae1850 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml @@ -683,3 +683,73 @@ state_code: AR output: ar_liheap_countable_income: 24_000 + +# Manual Section 4.7 p41 excludes the earnings of members aged 18 and enrolled in high +# school. Both work at Arkansas's $11.00 minimum wage (U.S. DOL state minimum wage table): +# the parent 40 hours x 52 weeks = 22880; the 18-year-old high school senior part time, +# 12 hours x 52 weeks = 6864, which is excluded. is_full_time_student follows +# is_in_k12_school. 22880 x 0.8 = 18304; MCI 1525.33 rounds to 1525; x12 = 18300. +# Counting the senior's wages would give 23796 (Case 25). +- name: Case 24, an eighteen year old high school student has work excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 22_880 + person2: + age: 18 + immigration_status: CITIZEN + is_in_k12_school: true + ssi: 0 + employment_income: 6_864 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 18_300 + +# Case 24's household, but the 18-year-old is not enrolled in high school, so the +# wages count: (22880 + 6864) x 0.8 = 23795.20; MCI 1982.93 rounds to 1983; +# x12 = 23796. Case 4 leaves is_in_k12_school at its default (false at 18); this case +# sets it explicitly. +- name: Case 25, an eighteen year old not in high school has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + is_full_time_student: false + ssi: 0 + employment_income: 22_880 + person2: + age: 18 + immigration_status: CITIZEN + is_in_k12_school: false + ssi: 0 + employment_income: 6_864 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 23_796 diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py index e3e5921fdb4..fc1d8198dc1 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -13,9 +13,10 @@ class ar_liheap_countable_income(Variable): "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5", # FY2025 state plan sections 1.8 and 1.9, pages 5-7. "https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5", - # Draft manual section 4.7 (MCI rounding, page 42; Medicare deduction, - # section 4.7.2, page 43) and Appendices E-F (pages 130-144). - "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=42", + # Draft manual section 4.7 (high-school student earnings, page 41; MCI + # rounding, page 42; Medicare deduction, section 4.7.2, page 43) and + # Appendices E-F (pages 130-144). + "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=41", # Application section III, page 2. "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2", ) @@ -43,15 +44,23 @@ def formula(spm_unit, period, parameters): # model follows the heading and excludes only earned sources, so the # student's unearned income still counts. Reading the text instead # would exclude all of the student's income. Tax-unit dependency - # stands for the dependent listing. Manual page 41 also excludes an - # 18-year-old high-school student's earnings unless the student works - # full time or is emancipated; that rule is not modeled. + # stands for the dependent listing. excluded_college_student = ( person("is_full_time_college_student", period) & (age <= p.student_exclusion.college_max_age) & person("is_tax_unit_dependent", period) ) - counted_worker = ~(excluded_child | excluded_college_student) + # Manual Section 4.7 (page 41) excludes the earnings of members aged + # 18 and enrolled in high school. Its exceptions for a member working + # full time or an emancipated head-of-household applicant are not + # modeled: the manual sets no full-time hours threshold, and no input + # records emancipation. + excluded_high_school_student = person("is_in_k12_school", period) & ( + np.floor(age) == p.student_exclusion.high_school_age + ) + counted_worker = ~( + excluded_child | excluded_college_student | excluded_high_school_student + ) # Existing net business income approximates gross receipts. Additional # business/work-expense deductions and new gross inputs are deferred. # Each source is floored at zero, so a loss in one source cannot From 8f9f5bc433810b858b3f0837ec67695de0c75707 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 7 Oct 2026 23:24:40 -0400 Subject: [PATCH 5/7] Apply the reference page-citation convention One reference entry per source; single-page citations keep the page only in the href; multi-page titles end with a quoted #page list and the href opens the first cited page; variable references use '# PDF pages ...' comments above multi-page hrefs (CLAUDE.md, PolicyEngine/policyengine-us PR 10009). Reference lines only. Co-Authored-By: Claude Opus 5.5 --- .../ar/ee/aeo/liheap/income/sources/unearned.yaml | 2 +- .../ar/ee/aeo/liheap/payment/income_band.yaml | 4 ++-- .../ee/aeo/liheap/payment/matrix/electricity.yaml | 4 ++-- .../ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml | 4 ++-- .../ee/aeo/liheap/payment/matrix/natural_gas.yaml | 4 ++-- .../ar/ee/aeo/liheap/payment/matrix/other.yaml | 4 ++-- .../ar/ee/aeo/liheap/payment/matrix/propane.yaml | 4 ++-- .../ar/ee/aeo/liheap/ar_liheap_household_size.py | 5 +++-- .../ee/aeo/liheap/eligibility/ar_liheap_eligible.py | 7 ++++--- .../aeo/liheap/income/ar_liheap_countable_income.py | 13 +++++++------ .../aeo/liheap/payment/ar_liheap_matrix_amount.py | 12 +++++++++++- 11 files changed, 38 insertions(+), 25 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml index c5a16924549..9a145b364e6 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml @@ -44,7 +44,7 @@ metadata: href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 - title: Arkansas FY2025 State Plan, Section 1.9 href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 - - title: "Arkansas LIHEAP draft manual FY2025, Appendices E and F #page 130, 132, 135, 141, 144" + - title: "Arkansas LIHEAP draft manual FY2025, Appendices E and F #page 130,132,135,141,144" href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=130 - title: Arkansas LIHEAP Application, Section III Household Income href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml index ccb335a1130..4edcb6487e7 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml @@ -172,7 +172,7 @@ metadata: period: month label: Arkansas LIHEAP monthly income band reference: - - title: Arkansas FY2026 Winter Benefits Matrix, income bands common to all fuel schedules + - title: "Arkansas FY2026 Winter Benefits Matrix, income bands common to all fuel schedules #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 - - title: Arkansas FY2025 Benefits Matrix, income bands common to all fuel schedules + - title: "Arkansas FY2025 Benefits Matrix, income bands common to all fuel schedules #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml index 52ca810092c..30735b122b3 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml @@ -336,7 +336,7 @@ metadata: - Monthly countable income band - Household size group reference: - - title: Arkansas FY2026 Winter Benefits Matrix, Electricity + - title: "Arkansas FY2026 Winter Benefits Matrix, Electricity #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 - - title: Arkansas FY2025 Benefits Matrix, Electricity + - title: "Arkansas FY2025 Benefits Matrix, Electricity #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml index e5679675c32..b7a5f3c4478 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml @@ -336,7 +336,7 @@ metadata: - Monthly countable income band - Household size group reference: - - title: Arkansas FY2026 Winter Benefits Matrix, Fuel Oil + - title: "Arkansas FY2026 Winter Benefits Matrix, Fuel Oil #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Fuel-Oil.pdf#page=1 - - title: Arkansas FY2025 Benefits Matrix, Fuel Oil + - title: "Arkansas FY2025 Benefits Matrix, Fuel Oil #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Fuel-Oil.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml index 08475ee4a5b..454dc20cb2f 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml @@ -350,7 +350,7 @@ metadata: - Monthly countable income band - Household size group reference: - - title: Arkansas FY2026 Winter Benefits Matrix, Natural Gas + - title: "Arkansas FY2026 Winter Benefits Matrix, Natural Gas #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Natural-Gas.pdf#page=1 - - title: Arkansas FY2025 Benefits Matrix, Natural Gas + - title: "Arkansas FY2025 Benefits Matrix, Natural Gas #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Natural-Gas.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml index 0a3cb2280c4..7b264691dc9 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml @@ -329,7 +329,7 @@ metadata: - Monthly countable income band - Household size group reference: - - title: Arkansas FY2026 Winter Benefits Matrix, Other Heating Fuels + - title: "Arkansas FY2026 Winter Benefits Matrix, Other Heating Fuels #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Other-Wood-Pellets.pdf#page=1 - - title: Arkansas FY2025 Benefits Matrix, Other Heating Fuels + - title: "Arkansas FY2025 Benefits Matrix, Other Heating Fuels #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Other-Wood-Pellets.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml index 163ca62ba04..bf697648d60 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml @@ -337,7 +337,7 @@ metadata: - Monthly countable income band - Household size group reference: - - title: Arkansas FY2026 Winter Benefits Matrix, Propane + - title: "Arkansas FY2026 Winter Benefits Matrix, Propane #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf#page=1 - - title: Arkansas FY2025 Benefits Matrix, Propane + - title: "Arkansas FY2025 Benefits Matrix, Propane #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Propane.pdf#page=1 diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py index d3998576b71..911e0e3f77e 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.py @@ -14,11 +14,12 @@ class ar_liheap_household_size(Variable): "rights statement of a state-designated LIHEAP subgrantee." ) reference = ( - # Draft manual sections 4.4-4.4.1, pages 36-37; not an adopted FY2026 manual. + # Draft manual sections 4.4-4.4.1; not an adopted FY2026 manual. + # PDF pages 36-37 "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=36", # Current operator's rights statement, item 9; no revision date shown. "https://www.cscdc.net/rights-responsibilities-of-liheap-applicants/", - # State designation of CSCDC, page 2; revised May 11, 2026. + # State designation of CSCDC; revised May 11, 2026. "https://adeq.state.ar.us/energy/initiatives/pdfs/LIHEAP-SubgranteeNetworkServiceTerritories.pdf#page=2", ) # Do not import SNAP-specific waiting periods or immigration restrictions. diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py index f1b04b6a7a6..bd7f297f055 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py @@ -7,9 +7,10 @@ class ar_liheap_eligible(Variable): definition_period = YEAR label = "Eligible for Arkansas LIHEAP regular heating assistance" defined_for = StateCode.AR - # Plan question 1.4 and sections 2.1-2.3, pages 5 and 9-10: no categorical - # income bypass or asset test; direct or indirect heating burden required. - reference = "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=9" + # Plan question 1.4 and sections 2.1-2.3: no categorical income bypass or + # asset test; direct or indirect heating burden required. + # PDF pages 5, 9-10 + reference = "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5" def formula(spm_unit, period, parameters): size = spm_unit("ar_liheap_household_size", period) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py index fc1d8198dc1..5de1b00431c 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -9,15 +9,16 @@ class ar_liheap_countable_income(Variable): label = "Arkansas LIHEAP countable income" defined_for = StateCode.AR reference = ( - # State plan sections 1.8 (page 5) and 1.9 (pages 6-7). + # FY2026 state plan sections 1.8 and 1.9. + # PDF pages 5-7 "https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5", - # FY2025 state plan sections 1.8 and 1.9, pages 5-7. + # FY2025 state plan sections 1.8 and 1.9. + # PDF pages 5-7 "https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5", - # Draft manual section 4.7 (high-school student earnings, page 41; MCI - # rounding, page 42; Medicare deduction, section 4.7.2, page 43) and - # Appendices E-F (pages 130-144). + # Draft manual sections 4.7 and 4.7.2 and Appendices E-F. + # PDF pages 41-43, 130-144 "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=41", - # Application section III, page 2. + # Application section III. "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2", ) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py index 1c5ce3a564e..f954337cf74 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py @@ -9,17 +9,27 @@ class ar_liheap_matrix_amount(Variable): label = "Arkansas LIHEAP regular heating matrix amount" defined_for = StateCode.AR reference = ( - # Each fuel schedule spans pages 1-2; application fuel groups are on page 3. + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Natural-Gas.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Fuel-Oil.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Other-Wood-Pellets.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Natural-Gas.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Propane.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Fuel-Oil.pdf#page=1", + # PDF pages 1-2 "https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Other-Wood-Pellets.pdf#page=1", + # Application fuel groups. "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=3", ) From 92153a43cbe8e5c1a785dd9df3113b560195d9d5 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 8 Oct 2026 00:46:16 -0400 Subject: [PATCH 6/7] Fix Arkansas LIHEAP minor and full-time student earnings --- .../student_exclusion/child_age_limit.yaml | 19 ++-- .../student_exclusion/college_max_age.yaml | 21 ----- .../student_exclusion/high_school_age.yaml | 16 ---- policyengine_us/programs.yaml | 3 +- .../states/ar/ee/aeo/liheap/ar_liheap.yaml | 90 +++++++++++++++++++ .../income/ar_liheap_countable_income.yaml | 62 ++++++------- .../income/ar_liheap_countable_income.py | 42 ++------- 7 files changed, 137 insertions(+), 116 deletions(-) delete mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml delete mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml index 72b81e4663a..83171348e64 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml @@ -1,16 +1,17 @@ -description: Arkansas excludes earnings of students younger than this age under the Low Income Home Energy Assistance Program. -# Manual Appendix F (page 133) excludes a child's earnings only while the child -# attends school at least half time. Plan Section 1.9 (page 6) leaves "Earned -# income of a child under the age of 18" unchecked and application Section III -# (page 2) requests work income from members "18 and older"; both exclude every -# minor's earnings. The manual is followed. +description: Arkansas excludes earnings of household members younger than this age under the Low Income Home Energy Assistance Program. +# The state application and accepted plans exclude every minor's earnings. +# The draft manual's narrower student-only exclusion is not followed. values: 2024-10-01: 18 metadata: unit: year period: year - label: Arkansas LIHEAP child student earnings exclusion age limit + label: Arkansas LIHEAP child earnings exclusion age limit reference: - - title: Arkansas LIHEAP draft manual FY2025, Appendix F, Earnings of a child - href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=133 + - title: Arkansas LIHEAP application, section III + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 + - title: Arkansas FY2026 LIHEAP State Plan, section 1.9 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 + - title: Arkansas FY2025 LIHEAP State Plan, section 1.9 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=6 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml deleted file mode 100644 index cc33eefc9da..00000000000 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/college_max_age.yaml +++ /dev/null @@ -1,21 +0,0 @@ -description: Arkansas excludes earnings of dependent full-time college students up to this age under the Low Income Home Energy Assistance Program. -# Manual Appendix F (page 134), row "Earnings of a full-time college student", -# covers full-time college students "up to age 23, who are listed as dependents -# of a household member"; the Section 17.0 definition of a full-time student -# (page 116) repeats the age. Application Section III (page 2) excludes every -# full-time student; the manual is followed. The row text says "Income -# received"; the model follows the heading and excludes only earnings, so the -# student's unearned income still counts. Reading the text instead would -# exclude all of the student's income. -# Age 23 is read as included, like the federal dependent-student limit of under -# 24; reading it as under 23 changes the result only at age 23. -values: - 2024-10-01: 23 - -metadata: - unit: year - period: year - label: Arkansas LIHEAP college student earnings exclusion maximum age - reference: - - title: Arkansas LIHEAP draft manual FY2025, Appendix F, Earnings of a full-time college student - href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=134 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml deleted file mode 100644 index f73570ab697..00000000000 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/high_school_age.yaml +++ /dev/null @@ -1,16 +0,0 @@ -description: Arkansas excludes earnings of high school students of this age under the Low Income Home Energy Assistance Program. -# Manual Section 4.7 (page 41) excludes the earned income of members "aged 18 -# and enrolled in an institution of secondary education (high school)" unless -# the member works full time or is emancipated and applying as the head of -# household. Neither exception is modeled: the manual sets no full-time hours -# threshold, and no input records emancipation. -values: - 2024-10-01: 18 - -metadata: - unit: year - period: year - label: Arkansas LIHEAP high school student earnings exclusion age - reference: - - title: Arkansas LIHEAP draft manual FY2025, Section 4.7, Income verification - href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=41 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index dac2e70f0a3..995bd5a1d5b 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -816,8 +816,7 @@ programs: full_name: Arkansas Low Income Home Energy Assistance Program variable: ar_liheap parameter_prefix: gov.states.ar.ee.aeo.liheap - verified_years: "2025-2026" - notes: FY2025-FY2026 regular heating only, with qualified household size and the published fuel matrices. Crisis, cooling, weatherization and equipment assistance are out of scope. + notes: FY2025-FY2026 regular heating matrices and income limits are checked. Detailed draft-only income rules, including interest treatment, remain unverified. Crisis, cooling, weatherization and equipment assistance are out of scope. - state: DC status: complete name: DC LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml index 02d59f163a6..c40359dcb98 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml @@ -508,3 +508,93 @@ ar_liheap_eligible: true ar_liheap_matrix_amount: 79 ar_liheap: 79 + +# Current application section III excludes under-18 earnings. At 18, +# wages 48_000 less 20% = 38_400 exceed the two-person FY2026 limit 36_840. +# The published natural-gas matrix awards 308 at zero income for size two. +- name: Case 17, age 17 nonstudent earnings determine the final heating award. + period: 2026 + input: + people: + parent: + age: 40 + immigration_status: CITIZEN + ssi: 0 + child: + age: 17 + immigration_status: CITIZEN + is_full_time_student: false + employment_income: 48_000 + ssi: 0 + spm_units: + unit: + members: [parent, child] + heating_type: NATURAL_GAS + gas_expense: 1_200 + tanf: 0 + households: + household: + members: [parent, child] + state_code: AR + output: + ar_liheap_countable_income: 0 + ar_liheap_income_limit: 36_840 + ar_liheap_eligible: true + ar_liheap: 308 + +# Current application section III excludes under-18 earnings. At 18, +# wages 48_000 less 20% = 38_400 exceed the two-person FY2026 limit 36_840. +# The published natural-gas matrix awards 308 at zero income for size two. +- name: Case 18, age 18 nonstudent earnings determine the final heating award. + period: 2026 + input: + people: + parent: + age: 40 + immigration_status: CITIZEN + ssi: 0 + child: + age: 18 + immigration_status: CITIZEN + is_full_time_student: false + employment_income: 48_000 + ssi: 0 + spm_units: + unit: + members: [parent, child] + heating_type: NATURAL_GAS + gas_expense: 1_200 + tanf: 0 + households: + household: + members: [parent, child] + state_code: AR + output: + ar_liheap_countable_income: 38400 + ar_liheap_income_limit: 36_840 + ar_liheap_eligible: false + ar_liheap: 0 + +# Current application section III requests work income only from members18+ +# who are not full-time students, without age/dependency restrictions. +# For an independent student earning48_000, counted earnings are zero and the +# FY2026 one-person natural-gas matrix pays308. Nonstudent earnings after20% +# disregard are38_400, above the28_164 limit, so the comparison gets zero. +- name: Case 19, independent adult full-time students retain the regular heating award beyond age23. + period: 2026 + input: + state_code: [AR, AR, AR, AR] + age: [22, 23, 24, 24] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN] + is_full_time_student: [true, true, true, false] + is_tax_unit_dependent: [false, false, false, false] + employment_income: [48_000, 48_000, 48_000, 48_000] + ssi: [0, 0, 0, 0] + tanf: [0, 0, 0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS, NATURAL_GAS, NATURAL_GAS] + heating_expense: [1_200, 1_200, 1_200, 1_200] + output: + ar_liheap_countable_income: [0, 0, 0, 38_400] + ar_liheap_income_limit: [28_164, 28_164, 28_164, 28_164] + ar_liheap_eligible: [true, true, true, false] + ar_liheap: [308, 308, 308, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml index 85476ae1850..f921bb74d2e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml @@ -25,11 +25,10 @@ output: ar_liheap_countable_income: 12_000 -# Manual Appendix F p134 excludes only full-time college students up to 23 listed as a -# household member's dependent. Living alone, this 22-year-old is not a dependent, so -# work counts: (15000 + 3000) x 0.8 = 14400 + Social Security 1200 = 15600; MCI 1300. -# Under 65 without SSDI there is no Part B premium to net from Social Security. -- name: Case 2, a full time college student living alone has work counted. +# Current application section III excludes work income of every full-time +# student, without an adult age or dependency test. Only Social Security +# 1_200 counts; under65 without SSDI there is no Part B premium to deduct. +- name: Case 2, a full time college student living alone has work excluded. period: 2026 absolute_error_margin: 0.01 input: @@ -56,12 +55,12 @@ members: [person1] state_code: AR output: - ar_liheap_countable_income: 15_600 + ar_liheap_countable_income: 1_200 -# Manual Appendix F p133 excludes a minor's earnings only while attending school at -# least half time. This 17-year-old attends no school, so work counts: -# (15000 + 3000) x 0.8 = 14400 + SSI 2400 + child support 3600 = 20400; MCI 1700. -- name: Case 3, a minor not attending school has work counted. +# Current application section III and accepted plan section 1.9 exclude every +# minor's earnings, even without school attendance. Unearned income counts: +# SSI 2400 + child support 3600 = 6000; MCI 500. +- name: Case 3, a minor not attending school has work excluded but unearned income counted. period: 2026 absolute_error_margin: 0.01 input: @@ -90,7 +89,7 @@ members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 20_400 + ar_liheap_countable_income: 6_000 # Exactly18 and not a full-time student makes wages countable, after20%disregard. - name: Case 4, age eighteen nonstudent earnings are counted. @@ -520,10 +519,9 @@ output: ar_liheap_countable_income: [12_000, 12_000] -# Case 3's household, but the 17-year-old attends high school and works part time -# (manual Appendix F p133): wages 6000 and self-employment 1200 are excluded; -# SSI 2400 + child support 3600 = 6000; MCI 500. -# Counting the earnings would give 7200 x 0.8 = 5760 + 6000 = 11760. +# Current application section III excludes all minor earnings. A17-year-old +# attending high school has6_000 wages and1_200 self-employment excluded; +# SSI2_400 + child support3_600 =6_000 remains countable. - name: Case 19, a minor attending high school has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -553,9 +551,8 @@ output: ar_liheap_countable_income: 6_000 -# Half-time college attendance also qualifies (manual Appendix F p133): a 17-year-old -# part-time college student who is not a full-time student has wages 6000 excluded; -# SSI 2400 + child support 3600 = 6000; MCI 500. +# Current application section III excludes all minor earnings, regardless of +# part-time college attendance. Only SSI2_400 + child support3_600 counts. - name: Case 20, a minor attending college part time has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -585,10 +582,8 @@ output: ar_liheap_countable_income: 6_000 -# Manual Appendix F p134 excludes earnings of full-time college students up to age 23 -# listed as a household member's dependent. The 22-year-old dependent's wages 6000 are -# excluded; the parent's 24000 x 0.8 = 19200; MCI 1600. Case 2 is a 22-year-old -# full-time college student living alone, whose work counts. +# Current application section III excludes all full-time students work income, +# without a dependency requirement. Only the parent's24_000 x80% =19_200 counts. - name: Case 21, a dependent college student aged twenty two has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -619,9 +614,8 @@ output: ar_liheap_countable_income: 19_200 -# Boundary: "up to age 23" is read as including 23, so the dependent student's wages -# 6000 remain excluded: 24000 x 0.8 = 19200; MCI 1600. Reading it as under 23 would -# give 24000. +# Current application section III supplies no adult-student age ceiling. +# The student's6_000 wages remain excluded; parent24_000 x80% =19_200. - name: Case 22, a dependent college student aged twenty three still has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -652,9 +646,9 @@ output: ar_liheap_countable_income: 19_200 -# Above the age limit a dependent full-time college student's work counts: -# (24000 + 6000) x 0.8 = 24000; MCI 2000. -- name: Case 23, a dependent college student aged twenty four has work counted. +# Current application section III supplies no age ceiling for the full-time +# student exclusion. Only the parent's 24_000 x 80% = 19_200 counts. +- name: Case 23, a dependent college student aged twenty four has work excluded. period: 2026 absolute_error_margin: 0.01 input: @@ -682,13 +676,13 @@ members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 24_000 + ar_liheap_countable_income: 19_200 -# Manual Section 4.7 p41 excludes the earnings of members aged 18 and enrolled in high -# school. Both work at Arkansas's $11.00 minimum wage (U.S. DOL state minimum wage table): +# Current application section III excludes earnings of full-time students, +# including high school. Both work at Arkansas's $11.00 minimum wage: # the parent 40 hours x 52 weeks = 22880; the 18-year-old high school senior part time, -# 12 hours x 52 weeks = 6864, which is excluded. is_full_time_student follows -# is_in_k12_school. 22880 x 0.8 = 18304; MCI 1525.33 rounds to 1525; x12 = 18300. +# 12 hours x 52 weeks = 6864, which is excluded. Full-time status is explicit +# for both people: 22880 x 0.8 = 18304; MCI 1525.33 rounds to 1525; x12 = 18300. # Counting the senior's wages would give 23796 (Case 25). - name: Case 24, an eighteen year old high school student has work excluded. period: 2026 @@ -705,6 +699,7 @@ age: 18 immigration_status: CITIZEN is_in_k12_school: true + is_full_time_student: true ssi: 0 employment_income: 6_864 spm_units: @@ -739,6 +734,7 @@ age: 18 immigration_status: CITIZEN is_in_k12_school: false + is_full_time_student: false ssi: 0 employment_income: 6_864 spm_units: diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py index 5de1b00431c..4627f3bd828 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -26,41 +26,13 @@ def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ar.ee.aeo.liheap.income person = spm_unit.members age = person("age", period) - # Manual Appendix F (page 133) excludes a child's earnings only while - # the child attends school at least half time; plan Section 1.9 (page 6) - # and application Section III (page 2) exclude all earnings under 18. - # No input covers half-time attendance below college: K-12 enrollment - # counts through is_full_time_student, and preschool, vocational and - # training-program attendance have no input. is_full_time_student - # defaults to true at ages 5-17, so a minor's earnings are excluded - # unless school status is set to false. - attends_school = person("is_full_time_student", period) | person( - "is_part_time_college_student", period - ) - excluded_child = (age < p.student_exclusion.child_age_limit) & attends_school - # Manual Appendix F (page 134), row "Earnings of a full-time college - # student", excludes full-time college students up to age 23 who are - # dependents of a household member; application Section III excludes - # every full-time student. The row text says "Income received"; the - # model follows the heading and excludes only earned sources, so the - # student's unearned income still counts. Reading the text instead - # would exclude all of the student's income. Tax-unit dependency - # stands for the dependent listing. - excluded_college_student = ( - person("is_full_time_college_student", period) - & (age <= p.student_exclusion.college_max_age) - & person("is_tax_unit_dependent", period) - ) - # Manual Section 4.7 (page 41) excludes the earnings of members aged - # 18 and enrolled in high school. Its exceptions for a member working - # full time or an emancipated head-of-household applicant are not - # modeled: the manual sets no full-time hours threshold, and no input - # records emancipation. - excluded_high_school_student = person("is_in_k12_school", period) & ( - np.floor(age) == p.student_exclusion.high_school_age - ) - counted_worker = ~( - excluded_child | excluded_college_student | excluded_high_school_student + # Current application Section III requests work income only from + # members 18 and older who are not full-time students. It states no + # adult-student age or dependency restriction. These operating rules + # supersede the narrower exclusions in the unadopted FY2025 draft. + # The accepted plans also exclude earnings of children under 18. + counted_worker = (age >= p.student_exclusion.child_age_limit) & ~person( + "is_full_time_student", period ) # Existing net business income approximates gross receipts. Additional # business/work-expense deductions and new gross inputs are deferred. From 1206c14c3f86c3e2007fa72dcc35a9dc3c673e71 Mon Sep 17 00:00:00 2001 From: Ziming Date: Thu, 15 Oct 2026 16:11:38 -0400 Subject: [PATCH 7/7] Address review round 1 on Arkansas LIHEAP - S1: Merge blocker: the unearned list reads raw unemployment_compensation (main PR 9558 guard) - S2: Six parameter descriptions are off the house template (plus optional interest wording) - S3: Untested logic: five unearned sources, the bill term in direct responsibility, and the size-0 limit mask - S4: References: three plan citations lack page lists, and the manual list omits cited pages Also applies the in-scope suggestions. Tests not run locally; CI validates. Co-Authored-By: Claude Opus 5.5 --- .../aeo/liheap/income/earned_minimum_age.yaml | 21 ++++++++ .../aeo/liheap/income/interest_disregard.yaml | 2 +- .../aeo/liheap/income/limit/fpg_year_lag.yaml | 4 +- .../liheap/income/limit/max_table_size.yaml | 2 +- .../income/limit/rounding_increment.yaml | 2 +- .../ee/aeo/liheap/income/sources/earned.yaml | 4 +- .../aeo/liheap/income/sources/unearned.yaml | 20 ++++---- .../student_exclusion/child_age_limit.yaml | 17 ------- .../liheap/payment/household_size_group.yaml | 4 +- .../ar/ee/aeo/liheap/payment/income_band.yaml | 4 +- .../liheap/payment/matrix/electricity.yaml | 2 +- policyengine_us/programs.yaml | 2 +- .../states/ar/ee/aeo/liheap/ar_liheap.yaml | 14 +++--- .../aeo/liheap/ar_liheap_household_size.yaml | 4 +- .../eligibility/ar_liheap_eligible.yaml | 28 ++++++++++- .../income/ar_liheap_countable_income.yaml | 48 ++++++++++++++----- .../liheap/income/ar_liheap_income_limit.yaml | 6 +-- .../payment/ar_liheap_matrix_amount.yaml | 14 +++--- .../liheap/eligibility/ar_liheap_eligible.py | 9 ++-- .../income/ar_liheap_countable_income.py | 18 ++++--- .../liheap/payment/ar_liheap_matrix_amount.py | 5 ++ 21 files changed, 152 insertions(+), 78 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_minimum_age.yaml delete mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_minimum_age.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_minimum_age.yaml new file mode 100644 index 00000000000..64f856b85a5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_minimum_age.yaml @@ -0,0 +1,21 @@ +description: Arkansas excludes the earned income of household members younger than this age under the Low Income Home Energy Assistance Program. +# Application Section III (FY2025 form R 01/FY2025 and current form R 11/2025) +# requests work income only from members 18 and older, and the accepted plans +# leave a child's earnings unchecked. Full-time students of any age are +# excluded in the formula. +values: + 2024-10-01: 18 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP earned income minimum age + reference: + - title: Arkansas LIHEAP application, section III + href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 + - title: Arkansas LIHEAP application AEO 9495 R 01/FY2025, Section III (Wayback capture) + href: https://web.archive.org/web/20250104155015/https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 + - title: Arkansas FY2026 LIHEAP State Plan, section 1.9 + href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 + - title: Arkansas FY2025 LIHEAP State Plan, section 1.9 + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=6 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml index 3c7e9bc7f7b..071d82a0002 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml @@ -1,4 +1,4 @@ -description: Arkansas excludes this amount of interest from countable income under the Low Income Home Energy Assistance Program. +description: Arkansas excludes this monthly amount of each member's interest from countable income under the Low Income Home Energy Assistance Program. # Manual Appendix F (page 137) counts interest only as the "amount over # $200.00". Unearned income is what is received in the month before application # (Section 4.7, page 41; Appendix E, pages 129-130, converts other frequencies diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml index 5625ea74b2a..826bc323b1b 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml @@ -10,7 +10,7 @@ metadata: period: year label: Arkansas LIHEAP federal poverty guideline year lag reference: - - title: Arkansas FY2026 Income Eligibility Chart using the 2025 federal poverty guidelines + - title: Arkansas FY2026 Income Eligibility Chart, poverty guideline rows reproduced by the 2025 federal poverty guidelines href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf - - title: Arkansas FY2025 Income Eligibility Chart using the 2024 federal poverty guidelines + - title: Arkansas FY2025 Income Eligibility Chart, poverty guideline rows reproduced by the 2024 federal poverty guidelines href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml index 2cc7852287d..4abd092ff0f 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml @@ -1,4 +1,4 @@ -description: Arkansas publishes income limits up to this household size before adding a separate amount per additional member under the Low Income Home Energy Assistance Program. +description: Arkansas sets income limits through this household size, with a fixed monthly amount for each additional member, under the Low Income Home Energy Assistance Program. values: 2024-10-01: 20 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml index cb6d1974171..ee8c0eb4e4a 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml @@ -1,4 +1,4 @@ -description: Arkansas publishes monthly income limits in increments of this amount under the Low Income Home Energy Assistance Program. +description: Arkansas uses this increment to round monthly income limits under the Low Income Home Energy Assistance Program. # Half-up rounding of the monthly base limit reproduces every FY2025 and FY2026 # row for sizes 1 to 20. This is a reconciled numerical pattern, not an express # rounding instruction. diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml index a4650c6d4ee..75386d9c94b 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml @@ -1,4 +1,4 @@ -description: Arkansas counts these earned income sources under the Low Income Home Energy Assistance Program. +description: Arkansas uses these sources as earned income under the Low Income Home Energy Assistance Program. # Existing net business income approximates gross receipts; no additional # business-expense deduction or new gross-receipts input is modeled. # Active and passive partnership income cannot be separated by existing inputs. @@ -24,7 +24,7 @@ metadata: reference: - title: Arkansas FY2026 State Plan, Section 1.9 href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 - - title: Arkansas FY2025 State Plan, Section 1.9 + - title: "Arkansas FY2025 State Plan, Section 1.9 #page 5-6" href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 - title: Arkansas LIHEAP Application, Section III Household Income href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml index 9a145b364e6..da5bab942b8 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml @@ -1,4 +1,4 @@ -description: Arkansas counts these unearned income sources under the Low Income Home Energy Assistance Program. +description: Arkansas uses these sources as unearned income under the Low Income Home Energy Assistance Program. # Each source is floored at zero in the income formula, so a loss in one source # cannot offset other income. The formula also counts Social Security and # railroad retirement net of the Medicare Part B premium, interest above the @@ -8,7 +8,7 @@ description: Arkansas counts these unearned income sources under the Low Income # sufficiently specific inputs and are not represented here. values: 2024-10-01: - - unemployment_compensation + - total_unemployment_compensation - strike_benefits - ssi # Military retirement pay is a separate input from the pension inputs that @@ -28,11 +28,15 @@ values: # (page 2) count workers' compensation; plan Section 1.9 leaves "Insurance # payments made directly to the insured" unchecked. - workers_compensation - # Manual Appendix F (page 135) counts all gaming or gambling winnings; plan - # Section 1.9 (page 7) counts lottery winnings as the only one-time lump sum. + # Manual Appendix F (page 135) counts all gaming or gambling winnings. Plan + # Section 1.9 (page 7) counts lottery winnings as the only one-time lump + # sum, and manual page 138 excludes nonrecurring lump sums; the Appendix F + # row is followed. - gambling_winnings # Manual Appendix F (page 132) counts capital gains and excludes capital - # losses; plan Section 1.9 has no capital gains item. + # losses. Plan Section 1.9 (page 7) counts no one-time lump sum other than + # lottery winnings, and manual page 138 excludes nonrecurring lump sums, + # including the sale of personal property; the Appendix F row is followed. - capital_gains metadata: @@ -40,11 +44,11 @@ metadata: period: year label: Arkansas LIHEAP unearned income sources reference: - - title: Arkansas FY2026 State Plan, Section 1.9 + - title: "Arkansas FY2026 State Plan, Section 1.9 #page 6-7" href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 - - title: Arkansas FY2025 State Plan, Section 1.9 + - title: "Arkansas FY2025 State Plan, Section 1.9 #page 5-7" href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 - - title: "Arkansas LIHEAP draft manual FY2025, Appendices E and F #page 130,132,135,141,144" + - title: "Arkansas LIHEAP draft manual FY2025, Appendices E and F #page 130-133,135,138,140-141,143-144" href: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=130 - title: Arkansas LIHEAP Application, Section III Household Income href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml deleted file mode 100644 index 83171348e64..00000000000 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/student_exclusion/child_age_limit.yaml +++ /dev/null @@ -1,17 +0,0 @@ -description: Arkansas excludes earnings of household members younger than this age under the Low Income Home Energy Assistance Program. -# The state application and accepted plans exclude every minor's earnings. -# The draft manual's narrower student-only exclusion is not followed. -values: - 2024-10-01: 18 - -metadata: - unit: year - period: year - label: Arkansas LIHEAP child earnings exclusion age limit - reference: - - title: Arkansas LIHEAP application, section III - href: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 - - title: Arkansas FY2026 LIHEAP State Plan, section 1.9 - href: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 - - title: Arkansas FY2025 LIHEAP State Plan, section 1.9 - href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=6 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml index 8aebc8813f6..515b1313e43 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml @@ -1,4 +1,4 @@ -description: Arkansas assigns this payment group by household size under the Low Income Home Energy Assistance Program. +description: Arkansas uses these household size group boundaries for the regular heating benefit under the Low Income Home Energy Assistance Program. brackets: - threshold: 2024-10-01: 0 @@ -20,7 +20,7 @@ metadata: period: year label: Arkansas LIHEAP payment household size group reference: - - title: Arkansas FY2026 Winter Benefits Matrix, household size columns common to all fuel schedules + - title: Arkansas FY2026 Benefits Matrix, household size columns common to all fuel schedules href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 - title: Arkansas FY2025 Benefits Matrix, household size columns common to all fuel schedules href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml index 4edcb6487e7..eb56a8db58a 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml @@ -1,4 +1,4 @@ -description: Arkansas assigns this payment band by monthly countable income under the Low Income Home Energy Assistance Program. +description: Arkansas uses these monthly countable income band boundaries for the regular heating benefit under the Low Income Home Energy Assistance Program. # Published lower bounds are inclusive and apply to monthly countable income # rounded to the nearest whole dollar. Bands with one threshold entry apply in # both FY2025 and FY2026; the top five lower bounds changed in FY2026. @@ -172,7 +172,7 @@ metadata: period: month label: Arkansas LIHEAP monthly income band reference: - - title: "Arkansas FY2026 Winter Benefits Matrix, income bands common to all fuel schedules #page 1-2" + - title: "Arkansas FY2026 Benefits Matrix, income bands common to all fuel schedules #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 - title: "Arkansas FY2025 Benefits Matrix, income bands common to all fuel schedules #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml index 30735b122b3..634e598cf92 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml @@ -336,7 +336,7 @@ metadata: - Monthly countable income band - Household size group reference: - - title: "Arkansas FY2026 Winter Benefits Matrix, Electricity #page 1-2" + - title: "Arkansas FY2026 Benefits Matrix, Electricity #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf#page=1 - title: "Arkansas FY2025 Benefits Matrix, Electricity #page 1-2" href: https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Electric.pdf#page=1 diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 6ea0c76d98b..a4935930a30 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -816,7 +816,7 @@ programs: full_name: Arkansas Low Income Home Energy Assistance Program variable: ar_liheap parameter_prefix: gov.states.ar.ee.aeo.liheap - notes: FY2025-FY2026 regular heating matrices and income limits are checked. Detailed draft-only income rules, including interest treatment, remain unverified. Crisis, cooling, weatherization and equipment assistance are out of scope. + notes: FY2025-FY2026 regular heating matrices and income limits are checked; draft-manual income rules and other years are unverified. Crisis, cooling, weatherization and equipment assistance are out of scope. - state: DC status: complete name: DC LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml index c40359dcb98..5417bee22ba 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml @@ -1,4 +1,4 @@ -# Official FY2026 gas matrix: monthly370-429 gives227 for size1-2; monthly2130-2347 gives68; zero income gives308. Oil zero-income size5+ gives570. The 20 percent earned disregard applies before these lookups. +# Official FY2026 gas matrix: monthly 370-429 gives 227 for size 1-2; monthly 2130-2347 gives 68; zero income gives 308. Oil zero-income size 5+ gives 570. The 20 percent earned disregard applies before these lookups. # TEA now counts through take-up-gated tanf, so Cases 1 and 3 pin ar_tea to 0 to keep their # household-size and zero-income checks; TEA counting is covered in ar_liheap_countable_income.yaml. @@ -575,12 +575,12 @@ ar_liheap_eligible: false ar_liheap: 0 -# Current application section III requests work income only from members18+ -# who are not full-time students, without age/dependency restrictions. -# For an independent student earning48_000, counted earnings are zero and the -# FY2026 one-person natural-gas matrix pays308. Nonstudent earnings after20% -# disregard are38_400, above the28_164 limit, so the comparison gets zero. -- name: Case 19, independent adult full-time students retain the regular heating award beyond age23. +# Current application section III requests work income only from members 18+ +# who are not full-time students, without age or dependency restrictions. +# For an independent student earning 48_000, counted earnings are zero and the +# FY2026 one-person natural-gas matrix pays 308. Nonstudent earnings after the 20% +# disregard are 38_400, above the 28_164 limit, so the comparison gets zero. +- name: Case 19, independent adult full-time students retain the regular heating award beyond age 23. period: 2026 input: state_code: [AR, AR, AR, AR] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml index 024e76179cf..17f77fd6309 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml @@ -1,4 +1,4 @@ -# Draft FY2025 manual physical pp36-37, corroborated by designated CSCDC operator rights item9. Draft status is disclosed in the research report. +# FY2025 draft manual sections 4.4-4.4.1 (pp 36-37), corroborated by the CSCDC applicant rights statement, item 9. - name: Case 1, qualified citizens permanent residents and asylees count in the household. period: 2026 @@ -41,6 +41,7 @@ output: ar_liheap_household_size: 3 +# No qualified member: size 0 (manual p36 requires at least one eligible member), so the income limit is 0; without the size mask the one-person 28_164 would apply. - name: Case 2, a household with no qualified member has zero eligible household size. period: 2026 input: @@ -66,3 +67,4 @@ state_code: AR output: ar_liheap_household_size: 0 + ar_liheap_income_limit: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml index db616a35828..3c18fa7fd57 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml @@ -1,4 +1,4 @@ -# Accepted FY2026 plan physical pp5,9-10; literal income chart; qualified composition source hierarchy in the research report. +# FY2026 plan items 1.4 and 2.1-2.3 (pp 5, 9-10) and the FY2026 income chart. - name: Case 1, the exact income ceiling is inclusive and does not impose an asset test. period: 2026 @@ -111,3 +111,29 @@ ar_liheap_countable_income: [70_800, 71_016, 71_028] output: ar_liheap_eligible: [true, true, false] + +# FY2026 plan item 2.3 (p10): a household has an energy burden if it pays utilities +# directly; one whose utilities are reimbursed through an allowance is not eligible unless +# it shows an energy burden. has_heating_expense defaults to a positive primary-fuel bill +# with heat not in rent, and an explicit false is respected. Wages 20 hours x 52 weeks x +# $11.00 Arkansas minimum wage = 11440; x 0.8 = 9152; MCI 762.67 rounds to 763 +# (x12 = 9156); 763 <= 2347 one-person limit. Gas 730-789 pays 190 for 1&2; the second +# unit has no heating obligation and gets 0. +- name: Case 7, an explicit no heating cost flag overrides a reported direct bill. + period: 2026 + input: + state_code: [AR, AR] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + is_full_time_student: [false, false] + employment_income: [11_440, 11_440] + ar_tea: [0, 0] + heating_type: [NATURAL_GAS, NATURAL_GAS] + gas_expense: [1_200, 1_200] + has_heating_expense: [true, false] + heat_expense_included_in_rent: [false, false] + output: + ar_liheap_countable_income: [9_156, 9_156] + ar_liheap_eligible: [true, false] + ar_liheap: [190, 0] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml index f921bb74d2e..284482ad911 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml @@ -1,6 +1,6 @@ # Independent AR component tests; no final household eligibility or total benefit is asserted. -# Plan p5:15000×0.8=12000 countable work income. +# Plan p5: 15000 x 0.8 = 12000 countable work income. - name: Case 1, adult gross wages receive the twenty percent disregard. period: 2026 absolute_error_margin: 0.01 @@ -27,7 +27,7 @@ # Current application section III excludes work income of every full-time # student, without an adult age or dependency test. Only Social Security -# 1_200 counts; under65 without SSDI there is no Part B premium to deduct. +# 1_200 counts; under 65 without SSDI there is no Part B premium to deduct. - name: Case 2, a full time college student living alone has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -91,7 +91,7 @@ output: ar_liheap_countable_income: 6_000 -# Exactly18 and not a full-time student makes wages countable, after20%disregard. +# Exactly 18 and not a full-time student makes wages countable after the 20% disregard: 15000 x 0.8 = 12000. - name: Case 4, age eighteen nonstudent earnings are counted. period: 2026 absolute_error_margin: 0.01 @@ -121,7 +121,7 @@ output: ar_liheap_countable_income: 12_000 -# Countable adult existing earned inputs total20000; standard20%disregard gives16000, without a new business-expense calculation. +# Countable adult existing earned inputs total 20000; the standard 20% disregard gives 16000, without a new business-expense calculation. # Manual p42 rounds MCI to whole dollars: 16000/12=1333.33 -> 1333; x12=15996. - name: Case 5, existing business sources receive the standard earned disregard. period: 2026 @@ -151,7 +151,7 @@ output: ar_liheap_countable_income: 15_996 -# Contract specifies nonnegative earned sources: wages12000×0.8+pension1200=10800. +# Manual 4.7.4 (p47) counts negative self-employment income as zero: wages 12000 x 0.8 = 9600 + pension 1200 = 10800. - name: Case 6, source losses do not offset wages or unearned receipts. period: 2026 absolute_error_margin: 0.01 @@ -519,9 +519,9 @@ output: ar_liheap_countable_income: [12_000, 12_000] -# Current application section III excludes all minor earnings. A17-year-old -# attending high school has6_000 wages and1_200 self-employment excluded; -# SSI2_400 + child support3_600 =6_000 remains countable. +# Current application section III excludes all minor earnings. A 17-year-old +# attending high school has 6_000 wages and 1_200 self-employment excluded; +# SSI 2_400 + child support 3_600 = 6_000 remains countable. - name: Case 19, a minor attending high school has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -552,7 +552,7 @@ ar_liheap_countable_income: 6_000 # Current application section III excludes all minor earnings, regardless of -# part-time college attendance. Only SSI2_400 + child support3_600 counts. +# part-time college attendance. Only SSI 2_400 + child support 3_600 counts. - name: Case 20, a minor attending college part time has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -583,7 +583,7 @@ ar_liheap_countable_income: 6_000 # Current application section III excludes all full-time students work income, -# without a dependency requirement. Only the parent's24_000 x80% =19_200 counts. +# without a dependency requirement. Only the parent's 24_000 x 80% = 19_200 counts. - name: Case 21, a dependent college student aged twenty two has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -615,7 +615,7 @@ ar_liheap_countable_income: 19_200 # Current application section III supplies no adult-student age ceiling. -# The student's6_000 wages remain excluded; parent24_000 x80% =19_200. +# The student's 6_000 wages remain excluded; parent 24_000 x 80% = 19_200. - name: Case 22, a dependent college student aged twenty three still has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -749,3 +749,29 @@ state_code: AR output: ar_liheap_countable_income: 23_796 + +# Plan 1.9 checks unemployment insurance, strike pay, "Interest, dividends, or royalties", +# VA benefits and cash gifts; manual Appendix F counts unemployment (p144), strike pay +# (p143), dividends (p133), retirement/veteran benefits (p141) and regular cash gifts (p132), +# each in full. UI at Arkansas's $451 maximum weekly benefit for the 12-week maximum: +# 451 x 12 = 5412 (MCI 451). Strike pay 6 weeks x $500 = 3000 (MCI 250). Dividends 1200 +# (MCI 100). 2026 VA compensation, 30%, veteran alone: 552.47 x 12 = 6629.64; MCI 552.47 +# rounds to 552; x12 = 6624. Regular cash gifts 150 x 12 = 1800 (MCI 150). Arkansas UI is +# not modeled, so total_unemployment_compensation is the reported amount. +- name: Case 26, unemployment strike pay dividends veterans benefits and regular cash gifts count in full. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR] + age: [45, 50, 58, 60, 35] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN] + is_full_time_student: [false, false, false, false, false] + ssi: [0, 0, 0, 0, 0] + ar_tea: [0, 0, 0, 0, 0] + unemployment_compensation: [5_412, 0, 0, 0, 0] + strike_benefits: [0, 3_000, 0, 0, 0] + qualified_dividend_income: [0, 0, 1_200, 0, 0] + veterans_benefits: [0, 0, 0, 6_629.64, 0] + financial_assistance: [0, 0, 0, 0, 1_800] + output: + ar_liheap_countable_income: [5_412, 3_000, 1_200, 6_624, 1_800] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml index b1486c07f44..0f55255967c 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml @@ -1,6 +1,6 @@ # Independent AR component tests; no final household eligibility or total benefit is asserted. -# Official2026income chart sizes1–20 plus explicit688monthly extra person at21; source limits are literal, independent of SMI/FPG formula. +# Official 2026 income chart sizes 1-20 plus the printed 688 monthly amount for the extra person at 21; source limits are literal, independent of the SMI/FPG formula. - name: Case 1, all published household limits and the first additional person match. period: 2026 absolute_error_margin: 0.01 @@ -18,8 +18,8 @@ 188_484] -# FY2025 chart (2024 FPG 15060+5380 per extra person): size8 52720x1.5/12=6590; size20 117280x1.5/12=14660; -# size21 adds the printed $672 (not the half-up 673): 14660+672=15332, x12=183984. +# FY2025 chart (2024 FPG 15060 + 5380 per extra person): size 8 52720 x 1.5 / 12 = 6590; size 20 117280 x 1.5 / 12 = 14660; +# size 21 adds the printed $672 (not the half-up 673): 14660 + 672 = 15332, x 12 = 183984. - name: Case 2, FY2025 poverty guideline rows and the printed additional person amount. period: 2025 absolute_error_margin: 0.01 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml index 2e005942aa1..b94a528b3bc 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml @@ -1,6 +1,6 @@ # Independent AR component tests; no final household eligibility or total benefit is asserted. -# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +# Original two-page fuel matrix: 39 lower bounds x 3 size columns = 117 literal cell checks; no eligibility gate is expected in this intermediate. - name: Case 1, every published electric row and household column matches at its lower bound. period: 2026 absolute_error_margin: 0.01 @@ -66,7 +66,7 @@ 60, 80, 90, 60, 76, 84, 60, 70, 79, 60, 64, 73, 0, 60, 67, 0, 60, 61, 0, 0, 60, 0, 0, 60] -# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +# Original two-page fuel matrix: 39 lower bounds x 3 size columns = 117 literal cell checks; no eligibility gate is expected in this intermediate. - name: Case 2, every published natgas row and household column matches at its lower bound. period: 2026 absolute_error_margin: 0.01 @@ -124,7 +124,7 @@ 0, 60] -# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +# Original two-page fuel matrix: 39 lower bounds x 3 size columns = 117 literal cell checks; no eligibility gate is expected in this intermediate. - name: Case 3, every published propane row and household column matches at its lower bound. period: 2026 absolute_error_margin: 0.01 @@ -187,7 +187,7 @@ 0, 0, 92, 0, 0, 83] -# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +# Original two-page fuel matrix: 39 lower bounds x 3 size columns = 117 literal cell checks; no eligibility gate is expected in this intermediate. - name: Case 4, every published fueloil row and household column matches at its lower bound. period: 2026 absolute_error_margin: 0.01 @@ -251,7 +251,7 @@ 0, 0, 95, 0, 0, 86] -# Original two-page fuel matrix:39lower bounds×3size columns=117literal cell checks; no eligibility gate is expected in this intermediate. +# Original two-page fuel matrix: 39 lower bounds x 3 size columns = 117 literal cell checks; no eligibility gate is expected in this intermediate. - name: Case 5, every published other row and household column matches at its lower bound. period: 2026 absolute_error_margin: 0.01 @@ -312,7 +312,7 @@ 0, 61] -# Electric3–4column:69.99→288;70→276;1989.99→86;1990→80;2009.99→80;2010→76. Irregular20dollar band is preserved. +# Electric 3-4 column: 69.99 -> 288; 70 -> 276; 1989.99 -> 86; 1990 -> 80; 2009.99 -> 80; 2010 -> 76. The irregular 20-dollar band is preserved. - name: Case 6, fractional income stays below the next published lower bound. period: 2026 absolute_error_margin: 0.01 @@ -327,7 +327,7 @@ ar_liheap_matrix_amount: [288, 276, 86, 80, 80, 76] -# Propane0–69row groups1–2,3–4,5+; no fixed-matrix expense cap from a50annual bill. +# Propane 0-69 row, groups 1-2, 3-4 and 5+; no fixed-matrix expense cap from a 50 annual bill. - name: Case 7, within group sizes and large households share published payment columns. period: 2026 absolute_error_margin: 0.01 diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py index bd7f297f055..595778589b9 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.py @@ -27,10 +27,11 @@ def formula(spm_unit, period, parameters): # a verified excess charge. The general responsibility flag cannot # substitute for this surcharge. Unsubsidized rent needs no extra bill. rent_responsibility = ~subsidized | (expense > 0) - # For direct bills, reported heating costs are assumed to represent - # the household's remaining obligation after any utility allowance, - # not a gross bill already fully reimbursed. Verification is not modeled. - direct_responsibility = (expense > 0) | has_expense + # A direct bill or obligation counts through has_heating_expense, which + # defaults to a positive primary-fuel bill with heat not in rent. An + # explicit false (for example, a bill fully reimbursed through a utility + # allowance, plan item 2.3) is respected. Verification is not modeled. + direct_responsibility = has_expense heating_responsibility = where( heat_in_rent, rent_responsibility, direct_responsibility ) diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py index 4627f3bd828..9f02c69e172 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -20,18 +20,24 @@ class ar_liheap_countable_income(Variable): "https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=41", # Application section III. "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2", + # FY2025 application R 01/FY2025, section III (Wayback capture). + "https://web.archive.org/web/20250104155015/https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2", ) def formula(spm_unit, period, parameters): p = parameters(period).gov.states.ar.ee.aeo.liheap.income person = spm_unit.members age = person("age", period) - # Current application Section III requests work income only from - # members 18 and older who are not full-time students. It states no - # adult-student age or dependency restriction. These operating rules - # supersede the narrower exclusions in the unadopted FY2025 draft. - # The accepted plans also exclude earnings of children under 18. - counted_worker = (age >= p.student_exclusion.child_age_limit) & ~person( + # Application Section III, in the FY2025 form (R 01/FY2025) and the + # current form (R 11/2025), requests work income only from members 18 + # and older who are not full-time students, with no student age or + # dependency limit, so the earnings of every minor and of every + # full-time student at any age are excluded. Manual section 4.7.3 + # (page 43) also exempts adult full-time students from the Zero Income + # Form, which fits this broad reading. The draft manual's narrower rules + # (page 41; Appendix F, pages 133-134) are not followed. The accepted + # plans leave a child's earnings unchecked. + counted_worker = (age >= p.earned_minimum_age) & ~person( "is_full_time_student", period ) # Existing net business income approximates gross receipts. Additional diff --git a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py index f954337cf74..40ac72a73e5 100644 --- a/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py @@ -43,6 +43,11 @@ def formula(spm_unit, period, parameters): size_group = p.household_size_group.calc(max_(size, 1)).astype(int) fuel = spm_unit("heating_type", period) fuels = fuel.possible_values + # FY2025 cells follow AEO's matrices headed "(20% OVER BASE)", dated + # October 7, 2024 and posted before the season, not FY2025 plan item + # 2.6's $50 to $475 estimate. The Clearinghouse "2025" Arkansas matrix + # repeats the FY2024 base amounts; 1.2 times them, rounded, gives the + # FY2025 cells in the 35 rows from $0 through $2,250. The top rows differ. amount = select( [ fuel == fuels.ELECTRICITY,