From a7284ac4e7c1d79855e844b58c2b74fb564a696e Mon Sep 17 00:00:00 2001 From: Ziming Date: Sat, 3 Oct 2026 19:49:19 -0400 Subject: [PATCH 01/10] 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 02/10] 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 03/10] 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 04/10] 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 05/10] 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 06/10] 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 07/10] 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, From 23a055f11a9caf9db84904abd4c2b275f96555e2 Mon Sep 17 00:00:00 2001 From: Ziming Date: Mon, 19 Oct 2026 17:01:59 -0400 Subject: [PATCH 08/10] Address Pavel's review on Arkansas LIHEAP Co-Authored-By: Claude Opus 5.5 --- .../aeo/liheap/income/earned_minimum_age.yaml | 24 +- .../income/full_time_student_age_limit.yaml | 17 ++ .../income/high_school_student_age_limit.yaml | 19 ++ .../aeo/liheap/income/interest_disregard.yaml | 8 +- .../ee/aeo/liheap/income/sources/earned.yaml | 13 +- .../aeo/liheap/income/sources/unearned.yaml | 36 ++- policyengine_us/programs.yaml | 2 +- .../states/ar/ee/aeo/liheap/ar_liheap.yaml | 56 ++-- .../aeo/liheap/ar_liheap_household_size.yaml | 4 +- .../income/ar_liheap_countable_income.yaml | 170 ++++++++---- .../liheap/income/ar_liheap_income_limit.yaml | 13 + .../states/ar/ee/aeo/liheap/integration.yaml | 255 ++++++++++++++++++ .../payment/ar_liheap_matrix_amount.yaml | 46 ++++ .../ee/aeo/liheap/ar_liheap_household_size.py | 7 +- .../liheap/eligibility/ar_liheap_eligible.py | 8 +- .../income/ar_liheap_countable_income.py | 77 +++--- .../liheap/income/ar_liheap_income_limit.py | 5 + .../liheap/payment/ar_liheap_matrix_amount.py | 20 +- 18 files changed, 624 insertions(+), 156 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml create mode 100644 policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml create mode 100644 policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.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 index 64f856b85a5..c4de105aecf 100644 --- 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 @@ -1,8 +1,12 @@ 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. +# Both application forms (AEO 9495 R 01/FY2025 and LIHEAP 9495 R 11/2025) +# request work income only from members "18 and older & not a full-time +# student", and the accepted plans leave a child's earnings unchecked. Manual +# Appendix F (page 158) excludes the earnings of a child "under eighteen (18) +# years of age and who is attending at least half time" a school or training +# program; the attendance condition is not applied, so every younger member's +# earnings are excluded. Students 18 and older are handled by +# full_time_student_age_limit and high_school_student_age_limit. values: 2024-10-01: 18 @@ -11,11 +15,13 @@ metadata: period: year label: Arkansas LIHEAP earned income minimum age reference: - - title: Arkansas LIHEAP application, section III + - title: Arkansas LIHEAP Application LIHEAP 9495 R 11/2025, 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 + - title: Arkansas LIHEAP Application AEO 9495 R 01/FY2025, Section III (Wayback capture) + href: https://web.archive.org/web/20250104155015id_/https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 + - 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 LIHEAP State Plan, section 1.9 + - title: Arkansas FY2025 State Plan, Section 1.9 href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=6 + - title: Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Appendix F, Earnings of a child + href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=158 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml new file mode 100644 index 00000000000..2358f9431e9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml @@ -0,0 +1,17 @@ +description: Arkansas excludes the earned income of full-time college students who are dependents of a household member up to this age under the Low Income Home Energy Assistance Program. +# The manual defines a full-time student as "a full-time student, up to age 23, +# who is a dependent of a member of the household" enrolled for twelve or more +# credit hours per semester (page 141), and Appendix F excludes the income of +# such full-time college students (page 159). "Up to age 23" is read as +# inclusive. Both application forms exclude full-time students from work-income +# reporting without defining the term, so this definition applies. +values: + 2024-10-01: 23 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP full-time student earned income exclusion age limit + reference: + - title: "Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Section 17.0 Full-time Student and Appendix F, Earnings of a full-time college student #page 141,159" + href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=141 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml new file mode 100644 index 00000000000..ec04f879c36 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml @@ -0,0 +1,19 @@ +description: Arkansas excludes the earned income of high school students up to this age under the Low Income Home Energy Assistance Program. +# Section 4.7 excludes the earned income of members "aged 18 and enrolled in an +# institution of secondary education (high school)" unless working full time or +# emancipated and applying as head of household; those exceptions are not +# modeled. Members younger than earned_minimum_age have all earnings excluded. +# The section 17.0 Full-time Student definition (page 141) adds that "High school +# students over age eighteen (18) may provide proof of enrollment or report card". +# Section 4.7 is followed, so a high school student aged 19 or older has earnings +# counted. +values: + 2024-10-01: 18 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP high school student earned income exclusion age limit + reference: + - title: Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Section 4.7 + href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=56 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 071d82a0002..910ed470d4e 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,7 +1,7 @@ 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 +# Manual Appendix F (page 162) 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 +# (Section 4.7, page 57; Appendix E, pages 154-155, 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, @@ -14,5 +14,5 @@ metadata: 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 + - title: Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Appendix F, Interest + href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=162 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 75386d9c94b..2316f3a5519 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,7 +1,8 @@ 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. +# Business inputs are already net of expenses, which stands in for the manual's +# 10% operating-cost allowance on gross self-employment income (Appendix F, +# page 166); no further business-expense deduction is modeled. Active and +# passive partnership income cannot be separated by existing inputs. values: 2024-10-01: - employment_income @@ -9,7 +10,7 @@ values: - sstb_self_employment_income - farm_operations_income - partnership_s_corp_income - # Manual Appendix F (page 141) treats rental property as a self-employment + # Manual Appendix F (page 165) 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 @@ -28,5 +29,5 @@ metadata: 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 + - title: "Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Appendix F, Earned income, Farming, Rental property and Self-employment income #page 158-159,165-166" + href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=158 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 da5bab942b8..3f8f7c19a81 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 @@ -3,9 +3,16 @@ description: Arkansas uses these sources as unearned income under the Low Income # 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. +# Where the plan and the FFY 2025 manual differ, the manual is followed: plan +# Section 1.9 checks "Loans that need to be repaid", but manual Appendix F says +# "All loans are excluded as income" (page 163), so no loan is counted. +# Appendix F also counts these receipts, which lack sufficiently specific inputs +# and are not represented: adoption assistance (page 156), cryptocurrency (page +# 157), crowd-fund accounts (page 158), executor fees (page 159), foster care +# payments (page 160), HUD utility payments (page 161; Appendix E, page 155; +# the application's "Housing Utility Assistance Payment"), inheritance and jury +# duty pay (page 162), royalties (page 166) and Trade Adjustment Assistance +# (page 168). values: 2024-10-01: - total_unemployment_compensation @@ -13,29 +20,32 @@ values: - ssi # 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). + # in one or the other (manual Appendix F, page 165). - pension_income - military_retirement_pay - # Non-Social-Security survivor receipts. + # Non-Social-Security survivor receipts: the Appendix F Pension row covers + # payments to a person's "surviving dependents" (page 165). - survivor_benefits - alimony_income - child_support_received - ordinary_dividend_income - veterans_benefits - # Cash gifts from friends and relatives outside the household. + # Manual Appendix F (page 157) counts only regular cash gifts (three or + # more consecutive months); financial_assistance cannot separate them, so + # all reported gifts are counted. - financial_assistance - # Manual Appendices E (page 130) and F (page 144) and the application + # Manual Appendices E (page 155) and F (page 168) 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 + # Manual Appendix F (page 160) 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 + # sum, and manual page 163 excludes nonrecurring lump sums; the Appendix F # row is followed. - gambling_winnings - # Manual Appendix F (page 132) counts capital gains and excludes capital + # Manual Appendix F (page 157) counts capital gains and excludes capital # 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, + # lottery winnings, and manual page 163 excludes nonrecurring lump sums, # including the sale of personal property; the Appendix F row is followed. - capital_gains @@ -48,7 +58,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 #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-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 FFY 2025 LIHEAP Policy and Procedures Manual, Appendices E and F #page 155-163,165-168" + href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=155 - 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/programs.yaml b/policyengine_us/programs.yaml index a4935930a30..ecb17161bee 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; draft-manual income rules and other years are unverified. Crisis, cooling, weatherization and equipment assistance are out of scope. + notes: FY2025-FY2026 regular heating matrices and income limits are checked; income rules follow the FFY 2025 manual (no FY2026 manual was found), 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 5417bee22ba..4a4dddca363 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 @@ -39,7 +39,7 @@ ar_liheap_matrix_amount: 227 ar_liheap: 227 -# Manual p42 rounds MCI to whole dollars. Alimony counts in full (rental income would +# Manual p58 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. @@ -255,7 +255,7 @@ 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; +# FY2025 Medicare-net Social Security (plan 1.9 p6; manual 4.7.2 p59): 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 @@ -317,7 +317,7 @@ ar_liheap_matrix_amount: 68 ar_liheap: 68 -# Per-source floor: farm rent is an earned source (manual p141) and its 1000 loss counts +# Per-source floor: farm rent is an earned source (manual p165) 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. @@ -350,7 +350,7 @@ ar_liheap_matrix_amount: 62 ar_liheap: 0 -# Boundary: manual p42 half-up MCI rounding at the 2347 size-one limit. +# Boundary: manual p58 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. @@ -394,7 +394,7 @@ 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. +# Case 3's family with TEA received: manual Appendix E p155 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. @@ -446,7 +446,7 @@ ar_liheap_matrix_amount: 497 ar_liheap: 497 -# Manual Appendix F p137 counts interest only over $200 a month: 3000 - 200 x 12 = 600. +# Manual Appendix F p162 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. @@ -478,7 +478,7 @@ ar_liheap_matrix_amount: 121 ar_liheap: 121 -# Manual Appendix F p141 treats rental property as self-employment, so the 20% disregard +# Manual Appendix F p165 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. @@ -516,25 +516,25 @@ period: 2026 input: people: - parent: + person1: age: 40 immigration_status: CITIZEN ssi: 0 - child: + person2: age: 17 immigration_status: CITIZEN is_full_time_student: false employment_income: 48_000 ssi: 0 spm_units: - unit: - members: [parent, child] + spm_unit: + members: [person1, person2] heating_type: NATURAL_GAS gas_expense: 1_200 tanf: 0 households: household: - members: [parent, child] + members: [person1, person2] state_code: AR output: ar_liheap_countable_income: 0 @@ -549,44 +549,44 @@ period: 2026 input: people: - parent: + person1: age: 40 immigration_status: CITIZEN ssi: 0 - child: + person2: age: 18 immigration_status: CITIZEN is_full_time_student: false employment_income: 48_000 ssi: 0 spm_units: - unit: - members: [parent, child] + spm_unit: + members: [person1, person2] heating_type: NATURAL_GAS gas_expense: 1_200 tanf: 0 households: household: - members: [parent, child] + members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 38400 + ar_liheap_countable_income: 38_400 ar_liheap_income_limit: 36_840 ar_liheap_eligible: false ar_liheap: 0 -# 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. +# The manual's full-time student definition (p141) and Appendix F (p159) exclude a +# full-time college student's earnings only for a dependent of a household member up +# to age 23. These independent students, aged 22, 23 and 24, report work income like +# the nonstudent: 48_000 x 0.8 = 38_400, MCI 3_200, above the FY2026 one-person limit +# 2_347 (28_164), so none is eligible. +- name: Case 19, independent full time college students have work counted at every age. 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_full_time_college_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] @@ -594,7 +594,7 @@ 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_countable_income: [38_400, 38_400, 38_400, 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] + ar_liheap_eligible: [false, false, false, false] + ar_liheap: [0, 0, 0, 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 index 17f77fd6309..ed9a27f260f 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 @@ -# FY2025 draft manual sections 4.4-4.4.1 (pp 36-37), corroborated by the CSCDC applicant rights statement, item 9. +# FFY 2025 manual sections 4.4-4.4.1 (p52), corroborated by the CSCDC applicant rights statement, item 9 (https://www.cscdc.net/rights-responsibilities-of-liheap-applicants/). - name: Case 1, qualified citizens permanent residents and asylees count in the household. period: 2026 @@ -41,7 +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. +# No qualified member: size 0 (manual p52 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: 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 284482ad911..b0de3c0c736 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,10 +25,12 @@ output: ar_liheap_countable_income: 12_000 -# 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; 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. +# The manual's full-time student definition (p141) and Appendix F (p159) exclude +# earnings only of a full-time college student up to age 23 who is a dependent of a +# household member. This 22-year-old lives alone and is no one's dependent, so wages +# 15000 + self-employment 3000 = 18000 x 0.8 = 14400 count, plus Social Security 1200 +# (under 65 without SSDI there is no Part B premium to deduct): 15600; MCI 1300. +- name: Case 2, an independent full time college student has work counted. period: 2026 absolute_error_margin: 0.01 input: @@ -55,11 +57,13 @@ members: [person1] state_code: AR output: - ar_liheap_countable_income: 1_200 + ar_liheap_countable_income: 15_600 -# 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. +# Both application forms request work income only from members 18 and older, and the +# accepted plans leave a child's earnings unchecked; Appendix F (p158) excludes a +# child's earnings only during at least half-time attendance, but every minor's +# earnings are excluded. 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 @@ -122,7 +126,7 @@ ar_liheap_countable_income: 12_000 # 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. +# Manual p58 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 @@ -151,7 +155,7 @@ output: ar_liheap_countable_income: 15_996 -# Manual 4.7.4 (p47) counts negative self-employment income as zero: wages 12000 x 0.8 = 9600 + pension 1200 = 10800. +# Manual 4.7.4 (p63) 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 @@ -179,10 +183,10 @@ output: ar_liheap_countable_income: 10_800 -# Manual Appendix F p141 treats rental property as self-employment, so rental and farm +# Manual Appendix F p165 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 +# Manual Appendix E p155 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. @@ -217,7 +221,7 @@ 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. +# Plan 1.9 p6 counts SSA "Excluding MediCare deduction"; manual 4.7.2 p59 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 @@ -244,7 +248,7 @@ output: ar_liheap_countable_income: 26_964 -# Manual 4.7.2 p43 applies the Part B netting to Railroad Retirement too. +# Manual 4.7.2 p59 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 @@ -306,8 +310,8 @@ 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: +# Manual Appendix F: military retirement p165, workers' compensation p168 (also Appendix E p155), +# gaming or gambling winnings p160, capital gains p157. 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 @@ -328,7 +332,7 @@ 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. +# Manual Appendix E p155 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 @@ -395,7 +399,7 @@ 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 +# (manual p165) and do not offset wages; capital gains -3000 (manual p157 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. @@ -431,7 +435,7 @@ output: ar_liheap_countable_income: 31_200 -# Boundary: manual p42 rounds MCI to the nearest whole dollar, halves up. +# Boundary: manual p58 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. @@ -450,7 +454,7 @@ output: ar_liheap_countable_income: [828, 840] -# Manual Appendix F p137 counts only interest "amount over $200.00", read per recipient +# Manual Appendix F p162 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. @@ -467,7 +471,7 @@ output: ar_liheap_countable_income: [0, 600] -# Manual p137 does not say whose interest the $200 applies to; the chosen reading applies +# Manual p162 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. @@ -500,7 +504,7 @@ output: ar_liheap_countable_income: 12_000 -# Manual Appendix F p141: "Ownership of rental property will be considered a +# Manual Appendix F p165: "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. @@ -519,9 +523,9 @@ output: ar_liheap_countable_income: [12_000, 12_000] -# 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. +# Both application forms request work income only from members 18 and older. 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 @@ -551,8 +555,8 @@ output: ar_liheap_countable_income: 6_000 -# Current application section III excludes all minor earnings, regardless of -# part-time college attendance. Only SSI 2_400 + child support 3_600 counts. +# Both application forms request work income only from members 18 and older, +# regardless of 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 @@ -582,8 +586,9 @@ output: ar_liheap_countable_income: 6_000 -# Current application section III excludes all full-time students work income, -# without a dependency requirement. Only the parent's 24_000 x 80% = 19_200 counts. +# The manual's full-time student definition (p141) and Appendix F (p159) exclude the +# earnings of a full-time college student up to age 23 who is a dependent of a +# household member. The student's 6_000 is excluded; parent 24_000 x 80% = 19_200. - name: Case 21, a dependent college student aged twenty two has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -614,8 +619,8 @@ output: ar_liheap_countable_income: 19_200 -# Current application section III supplies no adult-student age ceiling. -# The student's 6_000 wages remain excluded; parent 24_000 x 80% = 19_200. +# Age edge: "up to age 23" (p141, p159) is read as inclusive, so the 23-year-old +# dependent's 6_000 wages stay 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 @@ -646,9 +651,9 @@ output: ar_liheap_countable_income: 19_200 -# 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. +# Above the age 23 limit (p141, p159) the dependent full-time college student reports +# work income: (24_000 + 6_000) x 80% = 24_000; MCI 2_000. +- name: Case 23, a dependent college student aged twenty four has work counted. period: 2026 absolute_error_margin: 0.01 input: @@ -676,14 +681,14 @@ members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 19_200 + ar_liheap_countable_income: 24_000 -# 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. 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). +# Manual section 4.7 (p56) excludes the earned income of members aged 18 enrolled in +# high school unless they work full time or are emancipated heads of household (those +# exceptions are not modeled). 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. 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 @@ -751,13 +756,16 @@ 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 +# VA benefits and cash gifts. Manual Appendix F counts unemployment (p168), strike pay +# (p167), dividends (p158) and regular cash gifts (p157), and Appendix E (p155) lists +# veterans' benefits as unearned income; each counts 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 600 qualified + 600 non-qualified = 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. +# rounds to 552; x12 = 6624. Regular cash gifts 150 x 12 = 1800 (MCI 150); +# financial_assistance cannot separate regular from irregular gifts, so every reported +# gift counts. 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 @@ -770,8 +778,74 @@ 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] + qualified_dividend_income: [0, 0, 600, 0, 0] + non_qualified_dividend_income: [0, 0, 600, 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] + +# Manual section 4.7 (p56) excludes the earnings of high school students aged 18 +# (high_school_student_age_limit); the p141 sentence on high school students over 18 is +# not applied. This 19-year-old dependent is still enrolled in high school and is not a +# college student, so the wages count: (22_880 + 6_864) x 0.8 = 23_795.20; MCI 1_982.93 +# rounds to 1_983; x12 = 23_796. Case 24 excludes the same wages at 18. +- name: Case 27, a nineteen year old high school student has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + ssi: 0 + employment_income: 22_880 + person2: + age: 19 + immigration_status: CITIZEN + is_in_k12_school: true + is_tax_unit_dependent: true + ssi: 0 + employment_income: 6_864 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 23_796 + +# The manual's full-time student definition requires twelve or more credit hours (p141, +# p159). A dependent part-time college student aged 20 reports work income: (24_000 + +# 6_000) x 0.8 = 24_000; MCI 2_000. +- name: Case 28, a dependent part time college student aged twenty has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + ssi: 0 + employment_income: 24_000 + person2: + age: 20 + immigration_status: CITIZEN + is_full_time_college_student: false + is_part_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: 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 0f55255967c..7ea2c0302f2 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 @@ -47,3 +47,16 @@ 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] + +# FY2026 chart: size 20 prints $15,019 and "ADD $688 FOR EACH ADDITIONAL HOUSEHOLD +# MEMBER": size 22 = 15,019 + 2 x 688 = 16,395 a month; x 12 = 196,740. +- name: Case 4, FY2026 second additional person adds the printed amount twice. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: AR + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_liheap_household_size: 22 + output: + ar_liheap_income_limit: 196_740 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml new file mode 100644 index 00000000000..d9c7c835e72 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml @@ -0,0 +1,255 @@ +# Arkansas LIHEAP regular heating assistance, end to end. +# Sources for the expected values: +# - FY2026 and FY2025 eligibility charts (maximum monthly countable income): +# https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2026.pdf +# https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Eligibility-Chart_2025.pdf +# - FY2026 electric, natural gas and propane matrices and the FY2025 other-fuel matrix: +# https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Electric.pdf +# https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Natural-Gas.pdf +# https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2026_Propane.pdf +# https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Other-Wood-Pellets.pdf +# - FY2026 state plan items 1.8, 1.9 and 2.3: +# https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf +# - FFY 2025 LIHEAP Policy and Procedures Manual (sections 4.4, 4.7-4.7.2, 4.8.3.2 and +# 17.0; Appendices E-F): https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf +# Wages use the Arkansas minimum wage of $11.00 an hour. The 2026 SSI federal benefit +# rate is $994 a month. The standard Medicare Part B premium is $185.00 a month in 2025. + +# A widow aged 70 who lives alone. Social Security pays 600 a month (7,200 a year) and +# SSI tops it up: (994 - (600 - 20)) x 12 = 4,968, after the $20 general income +# exclusion. Arkansas Medicaid pays an SSI recipient's Part B premium, so none is netted +# (manual 4.7.2, p59). She heats with electricity billed in her name. +- name: Case 1, an elderly SSI and Social Security recipient with electric heat. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + social_security: 7_200 + ssi: 4_968 + medicare_part_b_premium: 0 + spm_units: + spm_unit: + members: [person1] + ar_tea: 0 + heating_type: ELECTRICITY + pre_subsidy_electricity_expense: 1_500 + heat_expense_included_in_rent: false + receives_housing_assistance: false + households: + household: + members: [person1] + state_code: AR + is_in_public_housing: false + output: + # The electric heating type reads the pre-subsidy electricity bill. + heating_expense: 1_500 + # A direct bill with heat not in rent (plan item 2.3, p10). + has_heating_expense: true + # A citizen counts (manual 4.4, p52). + ar_liheap_household_size: 1 + # Social Security 7,200 + SSI 4,968 = 12,168; MCI 1,014 (whole). + ar_liheap_countable_income: 12_168 + # FY2026 chart, size 1: 2,347 x 12. + ar_liheap_income_limit: 28_164 + ar_liheap_eligible: true + # FY2026 electric row 970-1029, column 1&2: 127. + ar_liheap_matrix_amount: 127 + ar_liheap: 127 + +# A single mother aged 31 with children aged 8 and 5 works 40 hours a week at $11.00: +# 11 x 40 x 52 = 22,880. She receives 200 a month of child support (2,400) and no TEA. +# Natural gas heat is billed in her name. +- name: Case 2, a working single parent with two children and natural gas heat. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 31 + immigration_status: CITIZEN + ssi: 0 + employment_income: 22_880 + child_support_received: 2_400 + person2: + age: 8 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 5 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + ar_tea: 0 + heating_type: NATURAL_GAS + gas_expense: 1_100 + heat_expense_included_in_rent: false + receives_housing_assistance: false + households: + household: + members: [person1, person2, person3] + state_code: AR + is_in_public_housing: false + output: + heating_expense: 1_100 + has_heating_expense: true + ar_liheap_household_size: 3 + # Wages less 20% (plan item 1.8): 22,880 x 0.8 = 18,304; child support counts in full + # (manual 4.7.1, p59): 20,704. MCI 1,725.33 rounds to 1,725 (p58): 20,700. + ar_liheap_countable_income: 20_700 + # FY2026 chart, size 3: 3,792 x 12. + ar_liheap_income_limit: 45_504 + ar_liheap_eligible: true + # FY2026 natural gas row 1690-1749, column 3&4: 124. + ar_liheap_matrix_amount: 124 + ar_liheap: 124 + +# Parents aged 48 and 46: one works 40 hours a week at $11.00 (22,880), the other 20 +# hours (11 x 20 x 52 = 11,440). Their son aged 20 is a full-time college student and +# their dependent, working 10 hours a week (11 x 10 x 52 = 5,720); their daughter is 15. +# They heat with propane bought in their name. +- name: Case 3, a family of four with a dependent college student and propane heat. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 48 + immigration_status: CITIZEN + ssi: 0 + employment_income: 22_880 + person2: + age: 46 + immigration_status: CITIZEN + ssi: 0 + employment_income: 11_440 + person3: + age: 20 + immigration_status: CITIZEN + is_full_time_college_student: true + is_tax_unit_dependent: true + ssi: 0 + employment_income: 5_720 + person4: + age: 15 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4] + ar_tea: 0 + heating_type: PROPANE + bottled_gas_expense: 1_400 + heat_expense_included_in_rent: false + receives_housing_assistance: false + households: + household: + members: [person1, person2, person3, person4] + state_code: AR + is_in_public_housing: false + output: + heating_expense: 1_400 + has_heating_expense: true + ar_liheap_household_size: 4 + # The dependent student's 5,720 is excluded (manual p141, p159): (22,880 + 11,440) + # x 0.8 = 27,456; MCI 2,288 (whole). Counting it would give MCI 2,669 and the + # 2348-3070 row, 106. + ar_liheap_countable_income: 27_456 + # FY2026 chart, size 4: 4,514 x 12. + ar_liheap_income_limit: 54_168 + ar_liheap_eligible: true + # FY2026 propane row 2130-2347, column 3&4: 114. + ar_liheap_matrix_amount: 114 + ar_liheap: 114 + +# A tenant aged 58 works 30 hours a week at $11.00: 11 x 30 x 52 = 17,160. He rents an +# unsubsidized apartment whose rent includes natural gas heat, so he has no separate +# heating bill. Unsubsidized households with utilities included in rent have an energy +# burden (FY2026 plan item 2.3, p9; manual 4.8.3.2, p64). +- name: Case 4, an unsubsidized renter whose rent includes heat. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 58 + immigration_status: CITIZEN + ssi: 0 + employment_income: 17_160 + spm_units: + spm_unit: + members: [person1] + ar_tea: 0 + heating_type: NATURAL_GAS + heat_expense_included_in_rent: true + receives_housing_assistance: false + households: + household: + members: [person1] + state_code: AR + is_in_public_housing: false + output: + # No separate gas bill, and heat is in rent. + heating_expense: 0 + has_heating_expense: false + ar_liheap_household_size: 1 + # 17,160 x 0.8 = 13,728; MCI 1,144 (whole). + ar_liheap_countable_income: 13_728 + ar_liheap_income_limit: 28_164 + # Heat included in unsubsidized rent is an energy burden with no extra charge. + ar_liheap_eligible: true + # FY2026 natural gas row 1090-1149, column 1&2: 146. + ar_liheap_matrix_amount: 146 + ar_liheap: 146 + +# FY2025. A retired couple aged 68 and 66 with Social Security of 1,500 and 800 a month +# (18,000 and 9,600), each net of the 2025 Part B premium of 185 a month (2,220), and +# 3,600 of savings interest on the first spouse. They heat with purchased firewood. +- name: Case 5, an FY2025 retired couple heating with wood. + period: 2025 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 68 + immigration_status: CITIZEN + ssi: 0 + social_security: 18_000 + medicare_part_b_premium: 2_220 + interest_income: 3_600 + person2: + age: 66 + immigration_status: CITIZEN + ssi: 0 + social_security: 9_600 + medicare_part_b_premium: 2_220 + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + heating_type: WOOD + wood_expense: 900 + heat_expense_included_in_rent: false + receives_housing_assistance: false + households: + household: + members: [person1, person2] + state_code: AR + is_in_public_housing: false + output: + heating_expense: 900 + has_heating_expense: true + ar_liheap_household_size: 2 + # Social Security net of Part B (manual 4.7.2, p59): 15,780 + 7,380 = 23,160; + # interest over 200 a month (p162): 3,600 - 2,400 = 1,200; total 24,360, MCI 2,030. + ar_liheap_countable_income: 24_360 + # FY2025 chart, size 2: 2,944 x 12. + ar_liheap_income_limit: 35_328 + ar_liheap_eligible: true + # FY2025 other (wood) row 2,010-2,129, column 1&2: 68. + ar_liheap_matrix_amount: 68 + ar_liheap: 68 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 b94a528b3bc..3080234eff2 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 @@ -463,3 +463,49 @@ ar_liheap_countable_income: [0, 0, 0, 0] output: ar_liheap_matrix_amount: [0, 0, 242, 0] + +# FFY2025 Electric matrix, column 1&2: rows 1,330-1,389 (page 1) and 1,450-1,509 through +# 1,990-2,009 (page 2) pay 95, 88, 84, 80, 78, 74, 71, 66, 62. FY2026 prints 94, 83, +# 77, 72, 66, 60, 60, 60, 60. Annual income = row lower bound x 12. +- name: Case 16, FY2025 electric size one cells that change in FY2026. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR, AR, AR, AR, AR, AR] + heating_type: [ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, ELECTRICITY, + ELECTRICITY, ELECTRICITY, ELECTRICITY] + ar_liheap_household_size: [1, 1, 1, 1, 1, 1, 1, 1, 1] + ar_liheap_countable_income: [15_960, 17_400, 18_120, 18_840, 19_560, 20_280, 21_000, 22_440, + 23_880] + output: + ar_liheap_matrix_amount: [95, 88, 84, 80, 78, 74, 71, 66, 62] + +# FFY2025 Natural Gas matrix: column 5&UP at rows 1,390-1,449 (page 1), 1,510, 1,570, 1,630, +# 1,690 and 1,750 (page 2) pays 170, 156, 150, 143, 136, 128; columns 3&4 and 5&UP at +# rows 1,870, 1,990, 2,010 and 2,130 pay 110/121, 103/114, 96/107, 89/100. FY2026 prints +# 169, 154, 146, 138, 131, 122, 109/115, 102/107, 95/100, 88/91. +- name: Case 17, FY2025 natural gas cells that change in FY2026. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [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] + ar_liheap_household_size: [5, 5, 5, 5, 5, 5, 3, 5, 3, 5, 3, 5, 3, 5] + ar_liheap_countable_income: [16_680, 18_120, 18_840, 19_560, 20_280, 21_000, 22_440, 22_440, + 23_880, 23_880, 24_120, 24_120, 25_560, 25_560] + output: + ar_liheap_matrix_amount: [170, 156, 150, 143, 136, 128, 110, 121, 103, 114, 96, 107, 89, 100] + +# FFY2025 Propane matrix p2, column 1&2: rows 1,990-2,009, 2,010-2,129 and 2,130-2,249 pay +# 102, 95 and 88 (FY2026: 106, 100, 95). Annual income = row lower bound x 12. +- name: Case 18, FY2025 propane size one cells that change in FY2026. + period: 2025 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR] + heating_type: [PROPANE, PROPANE, PROPANE] + ar_liheap_household_size: [1, 1, 1] + ar_liheap_countable_income: [23_880, 24_120, 25_560] + output: + ar_liheap_matrix_amount: [102, 95, 88] 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 911e0e3f77e..bcbc2eb1ca5 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 @@ -10,13 +10,12 @@ class ar_liheap_household_size(Variable): 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 " + "FFY 2025 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; 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", + # FFY 2025 manual sections 4.4-4.4.1; no FY2026 manual was found. + "https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=52", # Current operator's rights statement, item 9; no revision date shown. "https://www.cscdc.net/rights-responsibilities-of-liheap-applicants/", # State designation of CSCDC; revised May 11, 2026. 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 595778589b9..a3f8584bfb0 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 @@ -30,11 +30,9 @@ def formula(spm_unit, period, parameters): # 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 - ) + # allowance, FY2026 plan item 2.3, page 10) is respected. Verification + # is not modeled. + heating_responsibility = where(heat_in_rent, rent_responsibility, has_expense) return ( (size > 0) & (income <= income_limit) 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 9f02c69e172..c047744157b 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 @@ -15,35 +15,50 @@ class ar_liheap_countable_income(Variable): # 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 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. + # FFY 2025 manual sections 4.7-4.7.4, the section 17.0 Full-time Student + # definition and Appendices E-F. + # PDF pages 56-59, 62-63, 141, 154-168 + "https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=56", + # Application LIHEAP 9495 R 11/2025, 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", + # FY2025 application AEO 9495 R 01/FY2025, Section III (Wayback capture). + "https://web.archive.org/web/20250104155015id_/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) - # 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 + # Both application forms (AEO 9495 R 01/FY2025 and LIHEAP 9495 R + # 11/2025, Section III) request work income only from members "18 and + # older & not a full-time student" without defining the term, so the + # manual's definition applies. The section 17.0 definition (page 141) + # and Appendix F (page 159) exclude the earnings of a full-time college + # student "up to age 23" (read as inclusive) who is a dependent of a + # household member; is_tax_unit_dependent stands for that dependency. + # Section 4.7 (page 56) excludes the earnings of members aged 18 in high + # school "unless working full time or the individual is emancipated"; + # those exceptions are not modeled. Appendix F (page 158) excludes a + # child's earnings only during at least half-time school attendance; + # following both forms, every member under 18 has earnings excluded. + dependent_college_student = ( + person("is_full_time_college_student", period) + & person("is_tax_unit_dependent", period) + & (age <= p.full_time_student_age_limit) ) - # 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. + high_school_student = person("is_in_k12_school", period) & ( + age <= p.high_school_student_age_limit + ) + counted_worker = ( + (age >= p.earned_minimum_age) + & ~dependent_college_student + & ~high_school_student + ) + # Business inputs are already net of expenses, which stands in for the + # manual's 10% operating-cost allowance on gross self-employment income + # (Appendix F, page 166); no further business or work-expense deduction + # applies. Each source is floored at zero (section 4.7.4, page 63), 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) @@ -53,20 +68,20 @@ def formula(spm_unit, period, parameters): 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 + # Manual Appendix F (page 162) 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. + # receipts (section 4.7, page 57; Appendix E, pages 154-155, 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 + # deduction", and manual section 4.7.2 (page 59) 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. @@ -75,7 +90,7 @@ def formula(spm_unit, period, parameters): ) 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 + # Manual Appendix E (page 155) 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) @@ -87,7 +102,7 @@ def formula(spm_unit, period, parameters): + spm_unit.sum(unearned_income + countable_interest + net_ssa_and_railroad) + tea ) - # Manual page 42: round monthly countable income to the nearest whole + # Manual page 58: 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 ebcff76f8e7..5112c74998b 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 @@ -36,4 +36,9 @@ def formula(spm_unit, period, parameters): # 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 * p.additional_member_amount + # 42 U.S.C. 8624(b)(2)(B) bars excluding a household on income below + # 110% of the poverty guideline. In 2025-2027 every limit stays at + # least 32% above that floor at every household size (the printed + # per-member amount above size 20 sets the narrowest margin), so no + # separate floor is applied. 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 40ac72a73e5..146d04ea2f9 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 @@ -29,6 +29,14 @@ class ar_liheap_matrix_amount(Variable): "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", + # FY2025 plan item 2.6 benefit estimate. + "https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=9", + # FY2025 electric matrix, Wayback capture of December 6, 2024. + # PDF pages 1-2 + "https://web.archive.org/web/20241206194455id_/https://www.adeq.state.ar.us/energy/assistance/pdfs/liheap_benefit-matix_2025_electric.pdf#page=1", + # Clearinghouse "2025" Arkansas matrix (FY2024 base amounts). + # PDF pages 1-5 + "https://liheapch.acf.gov/docs/2025/benefits-matricies/AR_BenefitMatrix_2025.pdf#page=1", # Application fuel groups. "https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=3", ) @@ -43,11 +51,13 @@ 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. + # FY2025 cells follow AEO's matrices headed "(20% OVER BASE)", posted + # before the season (the electric file, whose PDF metadata reads October + # 7, 2024, is byte-identical to a December 6, 2024 Wayback capture), not + # FY2025 plan item 2.6's $50 to $475 estimate (page 9). The Clearinghouse + # "2025" Arkansas matrix repeats the FY2024 base amounts; 1.2 times them, + # rounded, gives the FY2025 cells in the 35 rows whose lower bounds run + # from $0 to $2,250. The top rows differ. amount = select( [ fuel == fuels.ELECTRICITY, From c7fbbf11cc7fdda15371e8bd0b756c15fc9de239 Mon Sep 17 00:00:00 2001 From: Ziming Date: Tue, 20 Oct 2026 17:15:51 -0400 Subject: [PATCH 09/10] Address Pavel's and David's round 2 reviews on Arkansas LIHEAP Co-Authored-By: Claude Opus 5.5 --- .../income/full_time_student_age_limit.yaml | 15 +- .../income/high_school_student_age_limit.yaml | 22 +- .../ee/aeo/liheap/income/sources/earned.yaml | 8 +- .../aeo/liheap/income/sources/unearned.yaml | 6 +- .../states/ar/ee/aeo/liheap/ar_liheap.yaml | 69 +++--- .../aeo/liheap/ar_liheap_household_size.yaml | 7 - .../eligibility/ar_liheap_eligible.yaml | 7 - .../income/ar_liheap_countable_income.yaml | 227 ++++++++++++++---- .../states/ar/ee/aeo/liheap/integration.yaml | 6 +- .../income/ar_liheap_countable_income.py | 40 +-- .../liheap/income/ar_liheap_income_limit.py | 6 +- 11 files changed, 276 insertions(+), 137 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml index 2358f9431e9..e0e50d54a51 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml @@ -1,10 +1,15 @@ -description: Arkansas excludes the earned income of full-time college students who are dependents of a household member up to this age under the Low Income Home Energy Assistance Program. +description: Arkansas excludes the earned income of full-time students who are this age or younger and are dependents of a household member under the Low Income Home Energy Assistance Program. # The manual defines a full-time student as "a full-time student, up to age 23, # who is a dependent of a member of the household" enrolled for twelve or more -# credit hours per semester (page 141), and Appendix F excludes the income of -# such full-time college students (page 159). "Up to age 23" is read as -# inclusive. Both application forms exclude full-time students from work-income -# reporting without defining the term, so this definition applies. +# credit hours per semester, and adds that "High school students over age +# eighteen (18) may provide proof of enrollment or report card" (page 141). +# Appendix F excludes the income of such full-time college students (page 159). +# The limit applies to dependent college students and dependent high school +# students. "Up to age 23" is read as inclusive, which matches the federal +# student-dependent test that "listed as dependents" (page 159) points to: a +# student who has not attained the age of 24 (26 U.S.C. 152(c)(3)(A)(ii)). Both +# application forms exclude full-time students from work-income reporting +# without defining the term, so this definition applies. values: 2024-10-01: 23 diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml index ec04f879c36..bb0830463af 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml @@ -1,12 +1,14 @@ -description: Arkansas excludes the earned income of high school students up to this age under the Low Income Home Energy Assistance Program. -# Section 4.7 excludes the earned income of members "aged 18 and enrolled in an -# institution of secondary education (high school)" unless working full time or -# emancipated and applying as head of household; those exceptions are not -# modeled. Members younger than earned_minimum_age have all earnings excluded. -# The section 17.0 Full-time Student definition (page 141) adds that "High school -# students over age eighteen (18) may provide proof of enrollment or report card". -# Section 4.7 is followed, so a high school student aged 19 or older has earnings -# counted. +description: Arkansas excludes the earned income of high school students who are this age or younger under the Low Income Home Energy Assistance Program. +# Section 4.7 excludes the earned income of household members "aged 18 and +# enrolled in an institution of secondary education (high school)" unless +# "working full time or the individual is emancipated and applying as the head +# of household"; those exceptions are not modeled. This exclusion applies +# whether or not the student is a dependent. Members younger than +# earned_minimum_age have all earnings excluded. The section 17.0 Full-time +# Student definition (page 141) also covers "High school students over age +# eighteen (18)" who are dependents of a household member, so their earnings +# are excluded through full_time_student_age_limit; a high school student older +# than this age who is not a dependent has earnings counted. values: 2024-10-01: 18 @@ -15,5 +17,5 @@ metadata: period: year label: Arkansas LIHEAP high school student earned income exclusion age limit reference: - - title: Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Section 4.7 + - title: "Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Section 4.7 and Section 17.0 Full-time Student #page 56,141" href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=56 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 2316f3a5519..a4cf3d189bf 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 @@ -2,7 +2,9 @@ description: Arkansas uses these sources as earned income under the Low Income H # Business inputs are already net of expenses, which stands in for the manual's # 10% operating-cost allowance on gross self-employment income (Appendix F, # page 166); no further business-expense deduction is modeled. Active and -# passive partnership income cannot be separated by existing inputs. +# passive partnership income cannot be separated by existing inputs. Appendix F +# excludes odd-job income of less than $30.00 in a three-month period (page +# 163); annual inputs cannot identify such receipts, so they are counted. values: 2024-10-01: - employment_income @@ -27,7 +29,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 #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 + - title: Arkansas LIHEAP Application LIHEAP 9495 R 11/2025, 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 FFY 2025 LIHEAP Policy and Procedures Manual, Appendix F, Earned income, Farming, Rental property and Self-employment income #page 158-159,165-166" + - title: "Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Appendix F, Earned income, Farming, Odd job income, Rental property and Self-employment income #page 158-159,163,165-166" href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=158 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 3f8f7c19a81..fa84085d178 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 @@ -12,7 +12,9 @@ description: Arkansas uses these sources as unearned income under the Low Income # payments (page 160), HUD utility payments (page 161; Appendix E, page 155; # the application's "Housing Utility Assistance Payment"), inheritance and jury # duty pay (page 162), royalties (page 166) and Trade Adjustment Assistance -# (page 168). +# (page 168). Appendix F also excludes irregular income that does not exceed +# $90 in a three-month period (page 162); annual inputs cannot identify such +# receipts, so they are counted. values: 2024-10-01: - total_unemployment_compensation @@ -60,5 +62,5 @@ metadata: href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 - title: "Arkansas FFY 2025 LIHEAP Policy and Procedures Manual, Appendices E and F #page 155-163,165-168" href: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=155 - - title: Arkansas LIHEAP Application, Section III Household Income + - title: Arkansas LIHEAP Application LIHEAP 9495 R 11/2025, 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/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 4a4dddca363..6f1120caa45 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 @@ -10,18 +10,15 @@ age: 40 immigration_status: UNDOCUMENTED ssi: 0 - is_full_time_student: false employment_income: 6_000 person2: age: 12 immigration_status: CITIZEN ssi: 0 - is_full_time_student: false person3: age: 8 immigration_status: CITIZEN ssi: 0 - is_full_time_student: false spm_units: spm_unit: members: [person1, person2, person3] @@ -50,7 +47,6 @@ 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] @@ -66,27 +62,22 @@ 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] @@ -108,7 +99,6 @@ 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] @@ -124,7 +114,6 @@ 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] @@ -140,7 +129,6 @@ person1: age: 45 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 21_000 spm_units: @@ -170,7 +158,6 @@ person1: age: 32 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 34_500 person2: @@ -208,13 +195,11 @@ 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: @@ -264,7 +249,6 @@ person1: age: 67 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 social_security: 26_400 medicare_part_b_premium: 2_220 @@ -295,7 +279,6 @@ person1: age: 70 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 social_security: 29_400 medicare_part_b_premium: 2_434.8 @@ -328,7 +311,6 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 36_000 farm_rent_income: -1_000 @@ -360,7 +342,6 @@ 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] @@ -383,7 +364,6 @@ 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] @@ -405,27 +385,22 @@ 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] @@ -456,7 +431,6 @@ person1: age: 62 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 pension_income: 12_000 interest_income: 3_000 @@ -488,7 +462,6 @@ person1: age: 58 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 rental_income: 30_000 spm_units: @@ -509,9 +482,9 @@ 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. +# Current application section III excludes under-18 earnings whether or not the member +# attends school, so countable income is 0. The FY2026 natural gas matrix awards 308 at +# zero income for size two (limit 3_070 x 12 = 36_840). - name: Case 17, age 17 nonstudent earnings determine the final heating award. period: 2026 input: @@ -523,7 +496,7 @@ person2: age: 17 immigration_status: CITIZEN - is_full_time_student: false + is_in_k12_school: false employment_income: 48_000 ssi: 0 spm_units: @@ -542,9 +515,9 @@ 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. +# At 18, a member who is not in high school (manual section 4.7, p56) or college +# reports work income: wages 48_000 x 0.8 = 38_400 exceed the two-person FY2026 limit +# 36_840, so no grant is paid. - name: Case 18, age 18 nonstudent earnings determine the final heating award. period: 2026 input: @@ -556,7 +529,8 @@ person2: age: 18 immigration_status: CITIZEN - is_full_time_student: false + is_in_k12_school: false + is_in_secondary_school: false employment_income: 48_000 ssi: 0 spm_units: @@ -598,3 +572,28 @@ ar_liheap_income_limit: [28_164, 28_164, 28_164, 28_164] ar_liheap_eligible: [false, false, false, false] ar_liheap: [0, 0, 0, 0] + +# No AEO matrix prices solar or unspecified heat. Case 15's retiree: pension 12_000 plus +# interest above the $200 monthly disregard (3_000 - 2_400 = 600) = 12_600, MCI 1_050, +# within the FY2026 one-person limit 2_347 (28_164). Solar heat billed on the electric +# account (heat not in rent) and unspecified heat included in unsubsidized rent are +# heating burdens, so both households are eligible, but the grant is 0 (documented +# limitation; issue 9754 tracks the default fuel). +- name: Case 20, solar and unspecified heat households are eligible but receive no grant. + period: 2026 + input: + state_code: [AR, AR] + age: [62, 62] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + ar_tea: [0, 0] + pension_income: [12_000, 12_000] + interest_income: [3_000, 3_000] + heating_type: [SOLAR, UNSPECIFIED] + pre_subsidy_electricity_expense: [1_800, 0] + heat_expense_included_in_rent: [false, true] + output: + ar_liheap_countable_income: [12_600, 12_600] + ar_liheap_eligible: [true, true] + ar_liheap_matrix_amount: [0, 0] + ar_liheap: [0, 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 index ed9a27f260f..4a99c83a585 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 @@ -8,27 +8,22 @@ age: 40 immigration_status: CITIZEN ssi: 0 - is_full_time_student: false person2: age: 39 immigration_status: LEGAL_PERMANENT_RESIDENT ssi: 0 - is_full_time_student: false person3: age: 19 immigration_status: ASYLEE ssi: 0 - is_full_time_student: false person4: age: 17 immigration_status: DACA ssi: 0 - is_full_time_student: false person5: age: 8 immigration_status: UNDOCUMENTED ssi: 0 - is_full_time_student: false spm_units: spm_unit: members: [person1, person2, person3, person4, person5] @@ -50,12 +45,10 @@ age: 40 immigration_status: UNDOCUMENTED ssi: 0 - is_full_time_student: false person2: age: 8 immigration_status: DACA ssi: 0 - is_full_time_student: false spm_units: spm_unit: members: [person1, person2] 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 3c18fa7fd57..57238557ab7 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 @@ -7,7 +7,6 @@ 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] @@ -23,7 +22,6 @@ 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] @@ -41,7 +39,6 @@ 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] @@ -57,7 +54,6 @@ 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] @@ -74,14 +70,12 @@ 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: @@ -126,7 +120,6 @@ 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] 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 b0de3c0c736..2c92e93343f 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 @@ -9,7 +9,6 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 15_000 spm_units: @@ -38,7 +37,6 @@ person1: age: 22 immigration_status: CITIZEN - is_full_time_student: true is_full_time_college_student: true is_tax_unit_dependent: false ssi: 0 @@ -72,12 +70,11 @@ 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_in_k12_school: false ssi: 2_400 employment_income: 15_000 self_employment_income: 3_000 @@ -104,12 +101,10 @@ 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: @@ -135,7 +130,6 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 10_000 self_employment_income: 5_000 @@ -164,7 +158,6 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 12_000 self_employment_income: -6_000 @@ -197,7 +190,6 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 12_000 rental_income: 2_400 @@ -206,7 +198,6 @@ person2: age: 8 immigration_status: CITIZEN - is_full_time_student: false ssi: 2_400 spm_units: spm_unit: @@ -231,7 +222,6 @@ person1: age: 70 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 social_security: 29_400 medicare_part_b_premium: 2_434.8 @@ -258,14 +248,12 @@ 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 @@ -292,7 +280,6 @@ person1: age: 66 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 social_security: 1_200 medicare_part_b_premium: 2_434.8 @@ -320,7 +307,6 @@ 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] @@ -342,7 +328,6 @@ person1: age: 26 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 person2: age: 6 @@ -374,7 +359,6 @@ person1: age: 26 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 person2: age: 6 @@ -411,7 +395,6 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 employment_income: 36_000 farm_rent_income: -1_000 @@ -445,7 +428,6 @@ 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] @@ -464,7 +446,6 @@ 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] @@ -483,14 +464,12 @@ 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: @@ -515,7 +494,6 @@ 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] @@ -534,12 +512,11 @@ person1: age: 40 immigration_status: CITIZEN - is_full_time_student: false ssi: 0 person2: age: 17 immigration_status: CITIZEN - is_full_time_student: true + is_in_k12_school: true ssi: 2_400 employment_income: 6_000 self_employment_income: 1_200 @@ -565,12 +542,11 @@ 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_in_k12_school: false is_part_time_college_student: true ssi: 2_400 employment_income: 6_000 @@ -597,13 +573,11 @@ 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 @@ -629,13 +603,11 @@ 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 @@ -661,13 +633,11 @@ 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 @@ -697,14 +667,12 @@ 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 - is_full_time_student: true ssi: 0 employment_income: 6_864 spm_units: @@ -732,14 +700,12 @@ 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 - is_full_time_student: false ssi: 0 employment_income: 6_864 spm_units: @@ -773,7 +739,6 @@ 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] @@ -785,12 +750,13 @@ output: ar_liheap_countable_income: [5_412, 3_000, 1_200, 6_624, 1_800] -# Manual section 4.7 (p56) excludes the earnings of high school students aged 18 -# (high_school_student_age_limit); the p141 sentence on high school students over 18 is -# not applied. This 19-year-old dependent is still enrolled in high school and is not a -# college student, so the wages count: (22_880 + 6_864) x 0.8 = 23_795.20; MCI 1_982.93 -# rounds to 1_983; x12 = 23_796. Case 24 excludes the same wages at 18. -- name: Case 27, a nineteen year old high school student has work counted. +# The manual's full-time student definition (p141) covers "High school students over +# age eighteen (18)" up to age 23 who are dependents of a household member, so this +# 19-year-old dependent still in high school has wages excluded like a dependent +# full-time college student. Parent 22_880 x 0.8 = 18_304; MCI 1_525.33 rounds to +# 1_525; x12 = 18_300. Case 30 counts the same wages for a 19-year-old high school +# student who is not a dependent. +- name: Case 27, a dependent nineteen year old high school student has work excluded. period: 2026 absolute_error_margin: 0.01 input: @@ -803,7 +769,7 @@ person2: age: 19 immigration_status: CITIZEN - is_in_k12_school: true + is_in_secondary_school: true is_tax_unit_dependent: true ssi: 0 employment_income: 6_864 @@ -816,7 +782,7 @@ members: [person1, person2] state_code: AR output: - ar_liheap_countable_income: 23_796 + ar_liheap_countable_income: 18_300 # The manual's full-time student definition requires twelve or more credit hours (p141, # p159). A dependent part-time college student aged 20 reports work income: (24_000 + @@ -849,3 +815,172 @@ state_code: AR output: ar_liheap_countable_income: 24_000 + +# Case 24's household with the repo's input for an 18-year-old still in high school, +# is_in_secondary_school, and no is_in_k12_school (imputed only through age 17). +# Section 4.7 (p56) excludes the senior's 6_864: 22_880 x 0.8 = 18_304; MCI 1_525.33 +# rounds to 1_525; x12 = 18_300. Counting the wages would give 23_796. +- name: Case 29, an eighteen year old in secondary school has work excluded. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + ssi: 0 + employment_income: 22_880 + person2: + age: 18 + immigration_status: CITIZEN + is_in_secondary_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 27's household, but the adult does not claim the 19-year-old high school +# student, who forms his own tax unit and is not a dependent. Section 4.7 (p56) +# excludes only an 18-year-old's high school earnings, and the p141 definition covers +# dependents, so his wages count: (22_880 + 6_864) x 0.8 = 23_795.20; MCI 1_982.93 +# rounds to 1_983; x12 = 23_796. +- name: Case 30, a nineteen year old high school student who is not a dependent has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + ssi: 0 + employment_income: 22_880 + person2: + age: 19 + immigration_status: CITIZEN + is_in_secondary_school: true + ssi: 0 + employment_income: 6_864 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 23_796 + +# Case 21's household with supplied tax-unit roles and no is_tax_unit_dependent input: +# the DEPENDENT role makes the 22-year-old full-time college student a dependent +# (p141, p159), so the 6_000 is excluded; parent 24_000 x 0.8 = 19_200; MCI 1_600. +- name: Case 31, supplied tax unit roles make a college student a dependent. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + tax_unit_role_input: HEAD + ssi: 0 + employment_income: 24_000 + person2: + age: 22 + immigration_status: CITIZEN + is_full_time_college_student: true + tax_unit_role_input: DEPENDENT + ssi: 0 + employment_income: 6_000 + tax_units: + tax_unit: + members: [person1, person2] + 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 + +# A married couple aged 22 and 21, both full-time college students working 20 hours a +# week at the $11.00 Arkansas minimum wage: 11 x 20 x 52 = 11_440 each. The head and +# spouse are not dependents of a household member (p141, p159), so both report work +# income: (11_440 + 11_440) x 0.8 = 18_304; MCI 1_525.33 rounds to 1_525; x12 = 18_300. +# Excluding the spouse would give 9_156. +- name: Case 32, a married couple of full time college students has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 22 + immigration_status: CITIZEN + is_full_time_college_student: true + tax_unit_role_input: HEAD + ssi: 0 + employment_income: 11_440 + person2: + age: 21 + immigration_status: CITIZEN + is_full_time_college_student: true + tax_unit_role_input: SPOUSE + ssi: 0 + employment_income: 11_440 + tax_units: + tax_unit: + members: [person1, person2] + spm_units: + spm_unit: + members: [person1, person2] + ar_tea: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 18_300 + +# An 18-year-old full-time college student who lives alone and is no one's dependent. +# The p141 definition requires a dependent, and section 4.7 (p56) covers high school, +# so the wages count: 20 hours x 52 weeks x $11.00 Arkansas minimum wage = 11_440; +# x 0.8 = 9_152; MCI 762.67 rounds to 763; x12 = 9_156. +- name: Case 33, an independent eighteen year old college student has work counted. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 18 + immigration_status: CITIZEN + is_full_time_college_student: true + ssi: 0 + employment_income: 11_440 + spm_units: + spm_unit: + members: [person1] + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 9_156 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml index d9c7c835e72..5d26c6e8d74 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/integration.yaml @@ -10,8 +10,8 @@ # https://www.adeq.state.ar.us/energy/assistance/pdfs/LIHEAP_Benefit-Matix_2025_Other-Wood-Pellets.pdf # - FY2026 state plan items 1.8, 1.9 and 2.3: # https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf -# - FFY 2025 LIHEAP Policy and Procedures Manual (sections 4.4, 4.7-4.7.2, 4.8.3.2 and -# 17.0; Appendices E-F): https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf +# - FFY 2025 LIHEAP Policy and Procedures Manual (sections 4.4, 4.7-4.7.2, 4.8.3-4.8.3.2 +# and 17.0; Appendices E-F): https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf # Wages use the Arkansas minimum wage of $11.00 an hour. The 2026 SSI federal benefit # rate is $994 a month. The standard Medicare Part B premium is $185.00 a month in 2025. @@ -169,7 +169,7 @@ # A tenant aged 58 works 30 hours a week at $11.00: 11 x 30 x 52 = 17,160. He rents an # unsubsidized apartment whose rent includes natural gas heat, so he has no separate # heating bill. Unsubsidized households with utilities included in rent have an energy -# burden (FY2026 plan item 2.3, p9; manual 4.8.3.2, p64). +# burden (FY2026 plan item 2.3, p9; manual 4.8.3, p63, and 4.8.3.2, p64). - name: Case 4, an unsubsidized renter whose rent includes heat. period: 2026 absolute_error_margin: 0.01 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 c047744157b..1f40c8d6a49 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 @@ -33,26 +33,34 @@ def formula(spm_unit, period, parameters): # 11/2025, Section III) request work income only from members "18 and # older & not a full-time student" without defining the term, so the # manual's definition applies. The section 17.0 definition (page 141) - # and Appendix F (page 159) exclude the earnings of a full-time college - # student "up to age 23" (read as inclusive) who is a dependent of a - # household member; is_tax_unit_dependent stands for that dependency. - # Section 4.7 (page 56) excludes the earnings of members aged 18 in high - # school "unless working full time or the individual is emancipated"; - # those exceptions are not modeled. Appendix F (page 158) excludes a - # child's earnings only during at least half-time school attendance; - # following both forms, every member under 18 has earnings excluded. - dependent_college_student = ( - person("is_full_time_college_student", period) + # covers a full-time student "up to age 23" (read as inclusive) who is + # a dependent of a household member: a college student enrolled for + # twelve or more credit hours (also Appendix F, page 159) or a high + # school student over 18. is_tax_unit_dependent stands for that + # dependency; without supplied tax-unit roles or that input, age-ordered + # inference can make a single parent's adult student the spouse (issue + # 9868). Section 4.7 (page 56) excludes the earnings of members aged 18 + # in high school, dependent or not, "unless working full time or the + # individual is emancipated and applying as the head of household"; + # those exceptions are not modeled. is_in_k12_school is imputed only + # through age 17, so a high school student 18 or older is captured via + # is_in_secondary_school. Appendix F (page 158) excludes a child's + # earnings only during at least half-time school attendance; following + # both forms, every member under 18 has earnings excluded. + in_high_school = person("is_in_secondary_school", period) | person( + "is_in_k12_school", period + ) + full_time_student = ( + person("is_full_time_college_student", period) | in_high_school + ) + dependent_student = ( + full_time_student & person("is_tax_unit_dependent", period) & (age <= p.full_time_student_age_limit) ) - high_school_student = person("is_in_k12_school", period) & ( - age <= p.high_school_student_age_limit - ) + high_school_student = in_high_school & (age <= p.high_school_student_age_limit) counted_worker = ( - (age >= p.earned_minimum_age) - & ~dependent_college_student - & ~high_school_student + (age >= p.earned_minimum_age) & ~dependent_student & ~high_school_student ) # Business inputs are already net of expenses, which stands in for the # manual's 10% operating-cost allowance on gross self-employment income 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 5112c74998b..fed9787cb8f 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 @@ -38,7 +38,7 @@ def formula(spm_unit, period, parameters): monthly_limit = rounded_base + extra_people * p.additional_member_amount # 42 U.S.C. 8624(b)(2)(B) bars excluding a household on income below # 110% of the poverty guideline. In 2025-2027 every limit stays at - # least 32% above that floor at every household size (the printed - # per-member amount above size 20 sets the narrowest margin), so no - # separate floor is applied. + # least 32% above that floor at every household size (in 2025 and 2027, + # the printed per-member amount above size 20 sets the narrowest + # margin), so no separate floor is applied. return where(size > 0, monthly_limit * MONTHS_IN_YEAR, 0) From 55c4f217ac81c2e8ec2828e793920c5537b2f607 Mon Sep 17 00:00:00 2001 From: Ziming Date: Wed, 21 Oct 2026 13:20:51 -0400 Subject: [PATCH 10/10] Apply round-3 suggestions to Arkansas LIHEAP Give countable income Case 29 separate tax units so the age-18 high school term is pinned without spouse inference, mark the page 141 frame as the chosen reading, and refresh the four Arkansas LIHEAP source-conflict candidates with adopted-manual pages, code paths and a corrected example. Co-Authored-By: Claude Opus 5.5 --- .../income/high_school_student_age_limit.yaml | 8 ++- .../income/ar_liheap_countable_income.yaml | 18 +++-- source_conflicts/candidates.yaml | 67 +++++++++++-------- 3 files changed, 57 insertions(+), 36 deletions(-) diff --git a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml index bb0830463af..aa89226cbaa 100644 --- a/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml @@ -6,9 +6,11 @@ description: Arkansas excludes the earned income of high school students who are # whether or not the student is a dependent. Members younger than # earned_minimum_age have all earnings excluded. The section 17.0 Full-time # Student definition (page 141) also covers "High school students over age -# eighteen (18)" who are dependents of a household member, so their earnings -# are excluded through full_time_student_age_limit; a high school student older -# than this age who is not a dependent has earnings counted. +# eighteen (18)". Read within the definition's "up to age 23, who is a +# dependent" terms, that sentence covers dependent high school students up to +# age 23, whose earnings are excluded through full_time_student_age_limit; a +# high school student older than this age who is not a dependent has earnings +# counted. values: 2024-10-01: 18 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 2c92e93343f..b848464667b 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 @@ -751,11 +751,11 @@ ar_liheap_countable_income: [5_412, 3_000, 1_200, 6_624, 1_800] # The manual's full-time student definition (p141) covers "High school students over -# age eighteen (18)" up to age 23 who are dependents of a household member, so this -# 19-year-old dependent still in high school has wages excluded like a dependent -# full-time college student. Parent 22_880 x 0.8 = 18_304; MCI 1_525.33 rounds to -# 1_525; x12 = 18_300. Case 30 counts the same wages for a 19-year-old high school -# student who is not a dependent. +# age eighteen (18)", read within the definition's "up to age 23, who is a dependent" +# terms, so this 19-year-old dependent still in high school has wages excluded like a +# dependent full-time college student. Parent 22_880 x 0.8 = 18_304; MCI 1_525.33 +# rounds to 1_525; x12 = 18_300. Case 30 counts the same wages for a 19-year-old high +# school student who is not a dependent. - name: Case 27, a dependent nineteen year old high school student has work excluded. period: 2026 absolute_error_margin: 0.01 @@ -817,7 +817,8 @@ ar_liheap_countable_income: 24_000 # Case 24's household with the repo's input for an 18-year-old still in high school, -# is_in_secondary_school, and no is_in_k12_school (imputed only through age 17). +# is_in_secondary_school, and no is_in_k12_school (imputed only through age 17). The +# senior forms his own tax unit, so he is not a dependent and only section 4.7 applies. # Section 4.7 (p56) excludes the senior's 6_864: 22_880 x 0.8 = 18_304; MCI 1_525.33 # rounds to 1_525; x12 = 18_300. Counting the wages would give 23_796. - name: Case 29, an eighteen year old in secondary school has work excluded. @@ -836,6 +837,11 @@ is_in_secondary_school: true ssi: 0 employment_income: 6_864 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] spm_units: spm_unit: members: [person1, person2] diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index 7d8c41658c6..ae0d36d2f15 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -420,12 +420,17 @@ candidates: the clearinghouse matrix. pe_us: follows: unknown - code: [] + code: + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml + - policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py prs: - https://github.com/PolicyEngine/policyengine-us/pull/9973 state: unreviewed - note: 'PE-US follows AEO''s matrix; verify the clearinghouse document''s effective year and possible mislabeling. - Code not yet on main: ar_liheap benefit parameters.' + note: 'PE-US follows AEO''s matrix; verify the clearinghouse document''s effective year and possible mislabeling.' - id: us-ar:liheap-gambling-and-capital-gains program: liheap years: @@ -437,25 +442,24 @@ candidates: sources: - kind: guidance citation: FY2026 LIHEAP State Plan §1.9, page 7 - url: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 - - kind: manual - citation: Arkansas LIHEAP manual page 138 - url: null + url: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=7 - kind: manual - citation: Draft manual Appendix F pp.132 and 135 - url: https://liheapch.acf.gov/sites/default/files/webfiles/docs/2025/manuals/AR_Manual%5Bdraft%5D_2025.pdf#page=36 + citation: FFY 2025 LIHEAP Policy and Procedures Manual, Appendix F capital gains, gaming or gambling winnings and + nonrecurring lump-sum rows, pp. 157, 160 and 163 + url: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=157 readings: statute: No statute is supplied; the plan counts lottery winnings as the only one-time lump sum and the manual excludes nonrecurring lump sums. other: Appendix F counts all gaming and gambling winnings and positive capital gains. pe_us: follows: unknown - code: [] + code: + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml prs: - https://github.com/PolicyEngine/policyengine-us/pull/9973 state: unreviewed - note: 'PE-US follows Appendix F; verify final operative text and whether specific inclusions override the general - exclusion. Code not yet on main: ar_liheap countable income.' + note: 'PE-US follows Appendix F; verify whether its specific inclusions override the general exclusion of nonrecurring + lump sums.' - id: us-ar:liheap-minor-and-student-earnings program: liheap years: @@ -463,28 +467,36 @@ candidates: to: 2026 type: federal-fiscal question: Are all minors' and full-time students' earnings excluded or only the narrower student categories specified - by the manuals? + by the manual? sources: - kind: form citation: AEO 9495 application §III, R 01/FY2025 and R 11/2025 url: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 - kind: manual - citation: FY2025 draft and FFY2025 LIHEAP manuals; draft pp.133-134 and final pp.56, 141, 158-159 - url: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=12 + citation: FFY 2025 LIHEAP Policy and Procedures Manual, section 4.7, section 17.0 Full-time Student and Appendix + F, pp. 56, 141 and 158-159 + url: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=56 readings: statute: No statute is supplied; the application requests work income only from adults who are not full-time students. - other: The manuals condition exclusions on attendance, dependency, age and other student circumstances. - example: A 35-year-old full-time graduate student with $40,000 wages has $0 countable income and a $308 gas grant - in FY2026; the same nonstudent receives $0. + other: The manual conditions exclusions on attendance, dependency, age and other student circumstances. + example: In FY2026, a 35-year-old full-time graduate student with $40,000 of wages has countable income of $32,004 + (monthly $2,667, above the $2,347 one-person limit) and receives $0 with gas heat, the same as a nonstudent; excluding + the student's wages under the forms' full-time student carve-out alone would give $0 countable income and a $308 gas grant. pe_us: follows: unknown - code: [] + code: + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_minimum_age.yaml + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml + - policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py prs: - https://github.com/PolicyEngine/policyengine-us/pull/9973 state: unreviewed - note: 'PE-US follows the forms; verify that omitted questions constitute an exclusion rather than a separate reporting - process. Code not yet on main: ar_liheap countable income.' + note: 'PE-US follows the manual''s page 141 Full-time Student definition (dependents up to age 23: college students + at 12 or more credit hours, or high school students over 18), section 4.7 for 18-year-olds in high school, and + the forms for members under 18; verify that the forms'' omitted questions for members under 18 are an exclusion + rather than a separate reporting process.' - id: us-ar:liheap-workers-compensation-and-tea program: liheap years: @@ -496,10 +508,10 @@ candidates: sources: - kind: guidance citation: FY2026 LIHEAP State Plan §1.9 - url: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=5 + url: https://liheapch.acf.gov/docs/2026/state-plans/AR_Plan_2026.pdf#page=6 - kind: manual - citation: Draft manual Appendices E-F pp.130 and 144 - url: null + citation: FFY 2025 LIHEAP Policy and Procedures Manual, Appendices E and F, pp. 155 and 168 + url: https://liheapch.acf.gov/docs/2025/manuals/AR_Manual_2025.pdf#page=155 - kind: form citation: AEO 9495 application R 11/2025, page 2 url: https://www.adeq.state.ar.us/energy/assistance/pdfs/fillable_aeo-9495_liheap-long-application.pdf#page=2 @@ -510,12 +522,13 @@ candidates: TEA in FY2026. pe_us: follows: unknown - code: [] + code: + - policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml + - policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py prs: - https://github.com/PolicyEngine/policyengine-us/pull/9973 state: unreviewed - note: 'PE-US counts both sources; verify final manual adoption and the plan''s categories. Code not yet on main: - ar_liheap countable income.' + note: 'PE-US counts both sources; verify that the FFY 2025 manual still governs FY2026 and the plan''s categories.' - id: us-ar:snap-child-support-deduction program: snap years: