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..65170212bea --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_disregard.yaml @@ -0,0 +1,13 @@ +description: Arkansas excludes this share of earned income under the Low Income Home Energy Assistance Program. +values: + 2024-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 + - 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/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..c4de105aecf --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/earned_minimum_age.yaml @@ -0,0 +1,27 @@ +description: Arkansas excludes the earned income of household members younger than this age under the Low Income Home Energy Assistance Program. +# 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 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP earned income minimum age + reference: + - 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/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 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..e0e50d54a51 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/full_time_student_age_limit.yaml @@ -0,0 +1,22 @@ +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, 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 + +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..aa89226cbaa --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/high_school_student_age_limit.yaml @@ -0,0 +1,23 @@ +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)". 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 + +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 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/interest_disregard.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml new file mode 100644 index 00000000000..910ed470d4e --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/interest_disregard.yaml @@ -0,0 +1,18 @@ +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 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 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, +# 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 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/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 new file mode 100644 index 00000000000..a6aa86e0bfa --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_rate.yaml @@ -0,0 +1,17 @@ +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: + 2024-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 + - 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 new file mode 100644 index 00000000000..826bc323b1b --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/fpg_year_lag.yaml @@ -0,0 +1,16 @@ +description: Arkansas uses the federal poverty guideline from this many years before the benefit year under the Low Income Home Energy Assistance Program. +# 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: + 2024-10-01: 1 + +metadata: + unit: year + period: year + label: Arkansas LIHEAP federal poverty guideline year lag + reference: + - 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, 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 new file mode 100644 index 00000000000..4abd092ff0f --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/max_table_size.yaml @@ -0,0 +1,13 @@ +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 + +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 + - 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 new file mode 100644 index 00000000000..ee8c0eb4e4a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/rounding_increment.yaml @@ -0,0 +1,16 @@ +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. +values: + 2024-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 + - 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 new file mode 100644 index 00000000000..c066f95dcb3 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_max_size.yaml @@ -0,0 +1,21 @@ +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: + 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 + - 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 new file mode 100644 index 00000000000..4a9216f3ace --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/limit/smi_rate.yaml @@ -0,0 +1,17 @@ +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: + 2024-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 + - 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/sources/earned.yaml b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml new file mode 100644 index 00000000000..a4cf3d189bf --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/earned.yaml @@ -0,0 +1,35 @@ +description: Arkansas uses these sources as earned income under the Low Income Home Energy Assistance Program. +# 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. 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 + - self_employment_income + - sstb_self_employment_income + - farm_operations_income + - partnership_s_corp_income + # 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 + # is followed. + - rental_income + - farm_rent_income + +metadata: + unit: list + period: year + label: Arkansas LIHEAP earned income sources + 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 #page 5-6" + href: https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5 + - 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, 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 new file mode 100644 index 00000000000..fa84085d178 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/income/sources/unearned.yaml @@ -0,0 +1,66 @@ +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 +# monthly disregard, and TEA. Rental income is in the earned list. +# 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). 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 + - strike_benefits + - 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 165). + - pension_income + - military_retirement_pay + # 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 + # 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 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 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 163 excludes nonrecurring lump sums; the Appendix F + # row is followed. + - gambling_winnings + # 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 163 excludes nonrecurring lump sums, + # including the sale of personal property; the Appendix F row is followed. + - capital_gains + +metadata: + unit: list + period: year + label: Arkansas LIHEAP unearned income sources + reference: + - 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 #page 5-7" + 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 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/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..515b1313e43 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/household_size_group.yaml @@ -0,0 +1,26 @@ +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 + amount: + 2024-10-01: 1 + - threshold: + 2024-10-01: 3 + amount: + 2024-10-01: 2 + - threshold: + 2024-10-01: 5 + amount: + 2024-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 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 new file mode 100644 index 00000000000..eb56a8db58a --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/income_band.yaml @@ -0,0 +1,178 @@ +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. +brackets: + - threshold: + 2024-10-01: 0 + amount: + 2024-10-01: 1 + - threshold: + 2024-10-01: 70 + amount: + 2024-10-01: 2 + - threshold: + 2024-10-01: 130 + amount: + 2024-10-01: 3 + - threshold: + 2024-10-01: 190 + amount: + 2024-10-01: 4 + - threshold: + 2024-10-01: 250 + amount: + 2024-10-01: 5 + - threshold: + 2024-10-01: 310 + amount: + 2024-10-01: 6 + - threshold: + 2024-10-01: 370 + amount: + 2024-10-01: 7 + - threshold: + 2024-10-01: 430 + amount: + 2024-10-01: 8 + - threshold: + 2024-10-01: 490 + amount: + 2024-10-01: 9 + - threshold: + 2024-10-01: 550 + amount: + 2024-10-01: 10 + - threshold: + 2024-10-01: 610 + amount: + 2024-10-01: 11 + - threshold: + 2024-10-01: 670 + amount: + 2024-10-01: 12 + - threshold: + 2024-10-01: 730 + amount: + 2024-10-01: 13 + - threshold: + 2024-10-01: 790 + amount: + 2024-10-01: 14 + - threshold: + 2024-10-01: 850 + amount: + 2024-10-01: 15 + - threshold: + 2024-10-01: 910 + amount: + 2024-10-01: 16 + - threshold: + 2024-10-01: 970 + amount: + 2024-10-01: 17 + - threshold: + 2024-10-01: 1_030 + amount: + 2024-10-01: 18 + - threshold: + 2024-10-01: 1_090 + amount: + 2024-10-01: 19 + - threshold: + 2024-10-01: 1_150 + amount: + 2024-10-01: 20 + - threshold: + 2024-10-01: 1_210 + amount: + 2024-10-01: 21 + - threshold: + 2024-10-01: 1_270 + amount: + 2024-10-01: 22 + - threshold: + 2024-10-01: 1_330 + amount: + 2024-10-01: 23 + - threshold: + 2024-10-01: 1_390 + amount: + 2024-10-01: 24 + - threshold: + 2024-10-01: 1_450 + amount: + 2024-10-01: 25 + - threshold: + 2024-10-01: 1_510 + amount: + 2024-10-01: 26 + - threshold: + 2024-10-01: 1_570 + amount: + 2024-10-01: 27 + - threshold: + 2024-10-01: 1_630 + amount: + 2024-10-01: 28 + - threshold: + 2024-10-01: 1_690 + amount: + 2024-10-01: 29 + - threshold: + 2024-10-01: 1_750 + amount: + 2024-10-01: 30 + - threshold: + 2024-10-01: 1_870 + amount: + 2024-10-01: 31 + - threshold: + 2024-10-01: 1_990 + amount: + 2024-10-01: 32 + - threshold: + 2024-10-01: 2_010 + amount: + 2024-10-01: 33 + - threshold: + 2024-10-01: 2_130 + amount: + 2024-10-01: 34 + - threshold: + 2024-10-01: 2_250 + 2025-10-01: 2_348 + amount: + 2024-10-01: 35 + - threshold: + 2024-10-01: 2_945 + 2025-10-01: 3_071 + amount: + 2024-10-01: 36 + - threshold: + 2024-10-01: 4_330 + 2025-10-01: 3_793 + amount: + 2024-10-01: 37 + - threshold: + 2024-10-01: 5_022 + 2025-10-01: 4_515 + amount: + 2024-10-01: 38 + - threshold: + 2024-10-01: 5_140 + 2025-10-01: 5_237 + amount: + 2024-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 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 new file mode 100644 index 00000000000..634e598cf92 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/electricity.yaml @@ -0,0 +1,342 @@ +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: + 2024-10-01: 242 + 2: + 2024-10-01: 288 + 3: + 2024-10-01: 344 + +2: + 1: + 2024-10-01: 233 + 2: + 2024-10-01: 276 + 3: + 2024-10-01: 334 + +3: + 1: + 2024-10-01: 221 + 2: + 2024-10-01: 266 + 3: + 2024-10-01: 322 + +4: + 1: + 2024-10-01: 209 + 2: + 2024-10-01: 254 + 3: + 2024-10-01: 310 + +5: + 1: + 2024-10-01: 199 + 2: + 2024-10-01: 242 + 3: + 2024-10-01: 300 + +6: + 1: + 2024-10-01: 187 + 2: + 2024-10-01: 233 + 3: + 2024-10-01: 288 + +7: + 1: + 2024-10-01: 179 + 2: + 2024-10-01: 223 + 3: + 2024-10-01: 276 + +8: + 1: + 2024-10-01: 174 + 2: + 2024-10-01: 215 + 3: + 2024-10-01: 266 + +9: + 1: + 2024-10-01: 170 + 2: + 2024-10-01: 209 + 3: + 2024-10-01: 254 + +10: + 1: + 2024-10-01: 166 + 2: + 2024-10-01: 204 + 3: + 2024-10-01: 242 + +11: + 1: + 2024-10-01: 160 + 2: + 2024-10-01: 197 + 3: + 2024-10-01: 233 + +12: + 1: + 2024-10-01: 155 + 2: + 2024-10-01: 192 + 3: + 2024-10-01: 221 + +13: + 1: + 2024-10-01: 149 + 2: + 2024-10-01: 187 + 3: + 2024-10-01: 209 + +14: + 1: + 2024-10-01: 143 + 2: + 2024-10-01: 181 + 3: + 2024-10-01: 199 + +15: + 1: + 2024-10-01: 138 + 2: + 2024-10-01: 175 + 3: + 2024-10-01: 190 + +16: + 1: + 2024-10-01: 132 + 2: + 2024-10-01: 170 + 3: + 2024-10-01: 182 + +17: + 1: + 2024-10-01: 127 + 2: + 2024-10-01: 164 + 3: + 2024-10-01: 176 + +18: + 1: + 2024-10-01: 121 + 2: + 2024-10-01: 158 + 3: + 2024-10-01: 170 + +19: + 1: + 2024-10-01: 115 + 2: + 2024-10-01: 154 + 3: + 2024-10-01: 164 + +20: + 1: + 2024-10-01: 110 + 2: + 2024-10-01: 148 + 3: + 2024-10-01: 158 + +21: + 1: + 2024-10-01: 104 + 2: + 2024-10-01: 143 + 3: + 2024-10-01: 152 + +22: + 1: + 2024-10-01: 100 + 2: + 2024-10-01: 137 + 3: + 2024-10-01: 145 + +23: + 1: + 2024-10-01: 95 + 2025-10-01: 94 + 2: + 2024-10-01: 131 + 3: + 2024-10-01: 140 + +24: + 1: + 2024-10-01: 91 + 2025-10-01: 88 + 2: + 2024-10-01: 126 + 3: + 2024-10-01: 134 + +25: + 1: + 2024-10-01: 88 + 2025-10-01: 83 + 2: + 2024-10-01: 120 + 3: + 2024-10-01: 128 + +26: + 1: + 2024-10-01: 84 + 2025-10-01: 77 + 2: + 2024-10-01: 114 + 3: + 2024-10-01: 124 + +27: + 1: + 2024-10-01: 80 + 2025-10-01: 72 + 2: + 2024-10-01: 109 + 3: + 2024-10-01: 118 + +28: + 1: + 2024-10-01: 78 + 2025-10-01: 66 + 2: + 2024-10-01: 103 + 3: + 2024-10-01: 112 + +29: + 1: + 2024-10-01: 74 + 2025-10-01: 60 + 2: + 2024-10-01: 97 + 3: + 2024-10-01: 107 + +30: + 1: + 2024-10-01: 71 + 2025-10-01: 60 + 2: + 2024-10-01: 92 + 3: + 2024-10-01: 101 + +31: + 1: + 2024-10-01: 66 + 2025-10-01: 60 + 2: + 2024-10-01: 86 + 3: + 2024-10-01: 95 + +32: + 1: + 2024-10-01: 62 + 2025-10-01: 60 + 2: + 2024-10-01: 80 + 3: + 2024-10-01: 90 + +33: + 1: + 2024-10-01: 60 + 2: + 2024-10-01: 76 + 3: + 2024-10-01: 84 + +34: + 1: + 2024-10-01: 60 + 2: + 2024-10-01: 70 + 3: + 2024-10-01: 79 + +35: + 1: + 2024-10-01: 60 + 2: + 2024-10-01: 64 + 3: + 2024-10-01: 73 + +36: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 60 + 3: + 2024-10-01: 67 + +37: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 2025-10-01: 60 + 3: + 2024-10-01: 61 + +38: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 3: + 2024-10-01: 60 + +39: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 3: + 2024-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 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/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..b7a5f3c4478 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/fuel_oil.yaml @@ -0,0 +1,342 @@ +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: + 2024-10-01: 402 + 2: + 2024-10-01: 478 + 3: + 2024-10-01: 570 + +2: + 1: + 2024-10-01: 385 + 2: + 2024-10-01: 457 + 3: + 2024-10-01: 552 + +3: + 1: + 2024-10-01: 365 + 2: + 2024-10-01: 442 + 3: + 2024-10-01: 534 + +4: + 1: + 2024-10-01: 347 + 2: + 2024-10-01: 422 + 3: + 2024-10-01: 514 + +5: + 1: + 2024-10-01: 330 + 2: + 2024-10-01: 402 + 3: + 2024-10-01: 497 + +6: + 1: + 2024-10-01: 310 + 2: + 2024-10-01: 385 + 3: + 2024-10-01: 478 + +7: + 1: + 2024-10-01: 296 + 2: + 2024-10-01: 370 + 3: + 2024-10-01: 457 + +8: + 1: + 2024-10-01: 288 + 2: + 2024-10-01: 356 + 3: + 2024-10-01: 442 + +9: + 1: + 2024-10-01: 282 + 2: + 2024-10-01: 347 + 3: + 2024-10-01: 422 + +10: + 1: + 2024-10-01: 275 + 2: + 2024-10-01: 337 + 3: + 2024-10-01: 402 + +11: + 1: + 2024-10-01: 265 + 2: + 2024-10-01: 326 + 3: + 2024-10-01: 385 + +12: + 1: + 2024-10-01: 257 + 2: + 2024-10-01: 319 + 3: + 2024-10-01: 365 + +13: + 1: + 2024-10-01: 247 + 2: + 2024-10-01: 310 + 3: + 2024-10-01: 347 + +14: + 1: + 2024-10-01: 238 + 2: + 2024-10-01: 301 + 3: + 2024-10-01: 330 + +15: + 1: + 2024-10-01: 228 + 2: + 2024-10-01: 292 + 3: + 2024-10-01: 313 + +16: + 1: + 2024-10-01: 220 + 2: + 2024-10-01: 282 + 3: + 2024-10-01: 302 + +17: + 1: + 2024-10-01: 210 + 2: + 2024-10-01: 272 + 3: + 2024-10-01: 293 + +18: + 1: + 2024-10-01: 200 + 2: + 2024-10-01: 264 + 3: + 2024-10-01: 282 + +19: + 1: + 2024-10-01: 192 + 2: + 2024-10-01: 254 + 3: + 2024-10-01: 272 + +20: + 1: + 2024-10-01: 182 + 2: + 2024-10-01: 245 + 3: + 2024-10-01: 262 + +21: + 1: + 2024-10-01: 173 + 2: + 2024-10-01: 236 + 3: + 2024-10-01: 252 + +22: + 1: + 2024-10-01: 166 + 2: + 2024-10-01: 227 + 3: + 2024-10-01: 241 + +23: + 1: + 2024-10-01: 158 + 2: + 2024-10-01: 217 + 3: + 2024-10-01: 233 + +24: + 1: + 2024-10-01: 151 + 2: + 2024-10-01: 209 + 3: + 2024-10-01: 223 + +25: + 1: + 2024-10-01: 145 + 2: + 2024-10-01: 199 + 3: + 2024-10-01: 214 + +26: + 1: + 2024-10-01: 140 + 2: + 2024-10-01: 190 + 3: + 2024-10-01: 204 + +27: + 1: + 2024-10-01: 134 + 2: + 2024-10-01: 180 + 3: + 2024-10-01: 196 + +28: + 1: + 2024-10-01: 128 + 2: + 2024-10-01: 172 + 3: + 2024-10-01: 186 + +29: + 1: + 2024-10-01: 124 + 2: + 2024-10-01: 162 + 3: + 2024-10-01: 176 + +30: + 1: + 2024-10-01: 118 + 2: + 2024-10-01: 152 + 3: + 2024-10-01: 168 + +31: + 1: + 2024-10-01: 110 + 2: + 2024-10-01: 144 + 3: + 2024-10-01: 158 + +32: + 1: + 2024-10-01: 103 + 2: + 2024-10-01: 134 + 3: + 2024-10-01: 149 + +33: + 1: + 2024-10-01: 96 + 2: + 2024-10-01: 125 + 3: + 2024-10-01: 140 + +34: + 1: + 2024-10-01: 89 + 2: + 2024-10-01: 116 + 3: + 2024-10-01: 131 + +35: + 1: + 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: + 2024-10-01: 0 + 2: + 2024-10-01: 78 + 2025-10-01: 0 + 3: + 2024-10-01: 92 + 2025-10-01: 95 + +39: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 3: + 2024-10-01: 83 + 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 #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 #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 new file mode 100644 index 00000000000..454dc20cb2f --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/natural_gas.yaml @@ -0,0 +1,356 @@ +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: + 2024-10-01: 308 + 2: + 2024-10-01: 366 + 3: + 2024-10-01: 437 + +2: + 1: + 2024-10-01: 295 + 2: + 2024-10-01: 350 + 3: + 2024-10-01: 422 + +3: + 1: + 2024-10-01: 280 + 2: + 2024-10-01: 338 + 3: + 2024-10-01: 409 + +4: + 1: + 2024-10-01: 265 + 2: + 2024-10-01: 324 + 3: + 2024-10-01: 394 + +5: + 1: + 2024-10-01: 253 + 2: + 2024-10-01: 308 + 3: + 2024-10-01: 380 + +6: + 1: + 2024-10-01: 238 + 2: + 2024-10-01: 295 + 3: + 2024-10-01: 366 + +7: + 1: + 2024-10-01: 227 + 2: + 2024-10-01: 283 + 3: + 2024-10-01: 350 + +8: + 1: + 2024-10-01: 221 + 2: + 2024-10-01: 272 + 3: + 2024-10-01: 338 + +9: + 1: + 2024-10-01: 216 + 2: + 2024-10-01: 265 + 3: + 2024-10-01: 324 + +10: + 1: + 2024-10-01: 210 + 2: + 2024-10-01: 258 + 3: + 2024-10-01: 308 + +11: + 1: + 2024-10-01: 203 + 2: + 2024-10-01: 250 + 3: + 2024-10-01: 295 + +12: + 1: + 2024-10-01: 197 + 2: + 2024-10-01: 245 + 3: + 2024-10-01: 280 + +13: + 1: + 2024-10-01: 190 + 2: + 2024-10-01: 238 + 3: + 2024-10-01: 265 + +14: + 1: + 2024-10-01: 182 + 2: + 2024-10-01: 230 + 3: + 2024-10-01: 253 + +15: + 1: + 2024-10-01: 175 + 2: + 2024-10-01: 223 + 3: + 2024-10-01: 240 + +16: + 1: + 2024-10-01: 168 + 2: + 2024-10-01: 216 + 3: + 2024-10-01: 232 + +17: + 1: + 2024-10-01: 161 + 2: + 2024-10-01: 209 + 3: + 2024-10-01: 224 + +18: + 1: + 2024-10-01: 154 + 2: + 2024-10-01: 202 + 3: + 2024-10-01: 216 + +19: + 1: + 2024-10-01: 146 + 2: + 2024-10-01: 194 + 3: + 2024-10-01: 209 + +20: + 1: + 2024-10-01: 139 + 2: + 2024-10-01: 187 + 3: + 2024-10-01: 200 + +21: + 1: + 2024-10-01: 132 + 2: + 2024-10-01: 181 + 3: + 2024-10-01: 193 + +22: + 1: + 2024-10-01: 127 + 2: + 2024-10-01: 174 + 3: + 2024-10-01: 185 + +23: + 1: + 2024-10-01: 121 + 2: + 2024-10-01: 167 + 3: + 2024-10-01: 178 + +24: + 1: + 2024-10-01: 115 + 2: + 2024-10-01: 160 + 3: + 2024-10-01: 170 + 2025-10-01: 169 + +25: + 1: + 2024-10-01: 112 + 2: + 2024-10-01: 152 + 3: + 2024-10-01: 163 + 2025-10-01: 162 + +26: + 1: + 2024-10-01: 107 + 2: + 2024-10-01: 145 + 3: + 2024-10-01: 156 + 2025-10-01: 154 + +27: + 1: + 2024-10-01: 103 + 2: + 2024-10-01: 138 + 3: + 2024-10-01: 150 + 2025-10-01: 146 + +28: + 1: + 2024-10-01: 98 + 2: + 2024-10-01: 131 + 3: + 2024-10-01: 143 + 2025-10-01: 138 + +29: + 1: + 2024-10-01: 95 + 2: + 2024-10-01: 124 + 3: + 2024-10-01: 136 + 2025-10-01: 131 + +30: + 1: + 2024-10-01: 90 + 2: + 2024-10-01: 116 + 3: + 2024-10-01: 128 + 2025-10-01: 122 + +31: + 1: + 2024-10-01: 84 + 2: + 2024-10-01: 110 + 2025-10-01: 109 + 3: + 2024-10-01: 121 + 2025-10-01: 115 + +32: + 1: + 2024-10-01: 79 + 2: + 2024-10-01: 103 + 2025-10-01: 102 + 3: + 2024-10-01: 114 + 2025-10-01: 107 + +33: + 1: + 2024-10-01: 73 + 2: + 2024-10-01: 96 + 2025-10-01: 95 + 3: + 2024-10-01: 107 + 2025-10-01: 100 + +34: + 1: + 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: + 2024-10-01: 0 + 2: + 2024-10-01: 60 + 2025-10-01: 0 + 3: + 2024-10-01: 60 + +39: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 3: + 2024-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 #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 #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 new file mode 100644 index 00000000000..7b264691dc9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/other.yaml @@ -0,0 +1,335 @@ +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: + 2024-10-01: 289 + 2: + 2024-10-01: 344 + 3: + 2024-10-01: 410 + +2: + 1: + 2024-10-01: 277 + 2: + 2024-10-01: 330 + 3: + 2024-10-01: 397 + +3: + 1: + 2024-10-01: 263 + 2: + 2024-10-01: 318 + 3: + 2024-10-01: 384 + +4: + 1: + 2024-10-01: 250 + 2: + 2024-10-01: 305 + 3: + 2024-10-01: 370 + +5: + 1: + 2024-10-01: 238 + 2: + 2024-10-01: 289 + 3: + 2024-10-01: 358 + +6: + 1: + 2024-10-01: 223 + 2: + 2024-10-01: 277 + 3: + 2024-10-01: 344 + +7: + 1: + 2024-10-01: 214 + 2: + 2024-10-01: 266 + 3: + 2024-10-01: 330 + +8: + 1: + 2024-10-01: 208 + 2: + 2024-10-01: 257 + 3: + 2024-10-01: 318 + +9: + 1: + 2024-10-01: 203 + 2: + 2024-10-01: 250 + 3: + 2024-10-01: 305 + +10: + 1: + 2024-10-01: 198 + 2: + 2024-10-01: 244 + 3: + 2024-10-01: 289 + +11: + 1: + 2024-10-01: 191 + 2: + 2024-10-01: 235 + 3: + 2024-10-01: 277 + +12: + 1: + 2024-10-01: 185 + 2: + 2024-10-01: 230 + 3: + 2024-10-01: 263 + +13: + 1: + 2024-10-01: 178 + 2: + 2024-10-01: 223 + 3: + 2024-10-01: 250 + +14: + 1: + 2024-10-01: 172 + 2: + 2024-10-01: 216 + 3: + 2024-10-01: 238 + +15: + 1: + 2024-10-01: 164 + 2: + 2024-10-01: 210 + 3: + 2024-10-01: 226 + +16: + 1: + 2024-10-01: 158 + 2: + 2024-10-01: 203 + 3: + 2024-10-01: 218 + +17: + 1: + 2024-10-01: 151 + 2: + 2024-10-01: 197 + 3: + 2024-10-01: 211 + +18: + 1: + 2024-10-01: 144 + 2: + 2024-10-01: 190 + 3: + 2024-10-01: 203 + +19: + 1: + 2024-10-01: 138 + 2: + 2024-10-01: 184 + 3: + 2024-10-01: 197 + +20: + 1: + 2024-10-01: 131 + 2: + 2024-10-01: 176 + 3: + 2024-10-01: 188 + +21: + 1: + 2024-10-01: 125 + 2: + 2024-10-01: 170 + 3: + 2024-10-01: 182 + +22: + 1: + 2024-10-01: 119 + 2: + 2024-10-01: 163 + 3: + 2024-10-01: 174 + +23: + 1: + 2024-10-01: 114 + 2: + 2024-10-01: 156 + 3: + 2024-10-01: 167 + +24: + 1: + 2024-10-01: 109 + 2: + 2024-10-01: 150 + 3: + 2024-10-01: 161 + +25: + 1: + 2024-10-01: 104 + 2: + 2024-10-01: 143 + 3: + 2024-10-01: 154 + +26: + 1: + 2024-10-01: 101 + 2: + 2024-10-01: 137 + 3: + 2024-10-01: 148 + +27: + 1: + 2024-10-01: 97 + 2: + 2024-10-01: 130 + 3: + 2024-10-01: 140 + +28: + 1: + 2024-10-01: 92 + 2: + 2024-10-01: 124 + 3: + 2024-10-01: 134 + +29: + 1: + 2024-10-01: 89 + 2: + 2024-10-01: 116 + 3: + 2024-10-01: 127 + +30: + 1: + 2024-10-01: 85 + 2: + 2024-10-01: 110 + 3: + 2024-10-01: 121 + +31: + 1: + 2024-10-01: 79 + 2: + 2024-10-01: 103 + 3: + 2024-10-01: 114 + +32: + 1: + 2024-10-01: 74 + 2: + 2024-10-01: 97 + 3: + 2024-10-01: 107 + +33: + 1: + 2024-10-01: 68 + 2: + 2024-10-01: 90 + 3: + 2024-10-01: 101 + +34: + 1: + 2024-10-01: 64 + 2: + 2024-10-01: 83 + 3: + 2024-10-01: 94 + +35: + 1: + 2024-10-01: 60 + 2: + 2024-10-01: 77 + 3: + 2024-10-01: 88 + +36: + 1: + 2024-10-01: 60 + 2025-10-01: 0 + 2: + 2024-10-01: 70 + 3: + 2024-10-01: 80 + +37: + 1: + 2024-10-01: 60 + 2025-10-01: 0 + 2: + 2024-10-01: 64 + 3: + 2024-10-01: 74 + +38: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 60 + 2025-10-01: 0 + 3: + 2024-10-01: 67 + +39: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 3: + 2024-10-01: 0 + 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 #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 #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 new file mode 100644 index 00000000000..bf697648d60 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ar/ee/aeo/liheap/payment/matrix/propane.yaml @@ -0,0 +1,343 @@ +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: + 2024-10-01: 397 + 2: + 2024-10-01: 472 + 3: + 2024-10-01: 563 + +2: + 1: + 2024-10-01: 380 + 2: + 2024-10-01: 451 + 3: + 2024-10-01: 545 + +3: + 1: + 2024-10-01: 360 + 2: + 2024-10-01: 436 + 3: + 2024-10-01: 527 + +4: + 1: + 2024-10-01: 342 + 2: + 2024-10-01: 418 + 3: + 2024-10-01: 506 + +5: + 1: + 2024-10-01: 326 + 2: + 2024-10-01: 397 + 3: + 2024-10-01: 490 + +6: + 1: + 2024-10-01: 306 + 2: + 2024-10-01: 380 + 3: + 2024-10-01: 472 + +7: + 1: + 2024-10-01: 293 + 2: + 2024-10-01: 365 + 3: + 2024-10-01: 451 + +8: + 1: + 2024-10-01: 284 + 2: + 2024-10-01: 352 + 3: + 2024-10-01: 436 + +9: + 1: + 2024-10-01: 278 + 2: + 2024-10-01: 342 + 3: + 2024-10-01: 418 + +10: + 1: + 2024-10-01: 271 + 2: + 2024-10-01: 334 + 3: + 2024-10-01: 397 + +11: + 1: + 2024-10-01: 262 + 2: + 2024-10-01: 323 + 3: + 2024-10-01: 380 + +12: + 1: + 2024-10-01: 253 + 2: + 2024-10-01: 314 + 3: + 2024-10-01: 360 + +13: + 1: + 2024-10-01: 244 + 2: + 2024-10-01: 306 + 3: + 2024-10-01: 342 + +14: + 1: + 2024-10-01: 235 + 2: + 2024-10-01: 296 + 3: + 2024-10-01: 326 + +15: + 1: + 2024-10-01: 226 + 2: + 2024-10-01: 288 + 3: + 2024-10-01: 310 + +16: + 1: + 2024-10-01: 216 + 2: + 2024-10-01: 278 + 3: + 2024-10-01: 299 + +17: + 1: + 2024-10-01: 208 + 2: + 2024-10-01: 269 + 3: + 2024-10-01: 289 + +18: + 1: + 2024-10-01: 198 + 2: + 2024-10-01: 260 + 3: + 2024-10-01: 278 + +19: + 1: + 2024-10-01: 190 + 2: + 2024-10-01: 251 + 3: + 2024-10-01: 269 + +20: + 1: + 2024-10-01: 180 + 2: + 2024-10-01: 242 + 3: + 2024-10-01: 258 + +21: + 1: + 2024-10-01: 170 + 2: + 2024-10-01: 233 + 3: + 2024-10-01: 250 + +22: + 1: + 2024-10-01: 163 + 2: + 2024-10-01: 223 + 3: + 2024-10-01: 239 + +23: + 1: + 2024-10-01: 156 + 2: + 2024-10-01: 215 + 3: + 2024-10-01: 229 + +24: + 1: + 2024-10-01: 149 + 2: + 2024-10-01: 205 + 3: + 2024-10-01: 220 + +25: + 1: + 2024-10-01: 144 + 2: + 2024-10-01: 197 + 3: + 2024-10-01: 211 + +26: + 1: + 2024-10-01: 138 + 2: + 2024-10-01: 187 + 3: + 2024-10-01: 202 + +27: + 1: + 2024-10-01: 132 + 2: + 2024-10-01: 178 + 3: + 2024-10-01: 193 + +28: + 1: + 2024-10-01: 127 + 2: + 2024-10-01: 169 + 3: + 2024-10-01: 184 + +29: + 1: + 2024-10-01: 121 + 2: + 2024-10-01: 160 + 3: + 2024-10-01: 174 + +30: + 1: + 2024-10-01: 116 + 2: + 2024-10-01: 151 + 3: + 2024-10-01: 166 + +31: + 1: + 2024-10-01: 109 + 2025-10-01: 110 + 2: + 2024-10-01: 142 + 3: + 2024-10-01: 156 + +32: + 1: + 2024-10-01: 102 + 2025-10-01: 106 + 2: + 2024-10-01: 132 + 3: + 2024-10-01: 148 + +33: + 1: + 2024-10-01: 95 + 2025-10-01: 100 + 2: + 2024-10-01: 124 + 3: + 2024-10-01: 138 + +34: + 1: + 2024-10-01: 88 + 2025-10-01: 95 + 2: + 2024-10-01: 114 + 3: + 2024-10-01: 128 + +35: + 1: + 2024-10-01: 80 + 2025-10-01: 89 + 2: + 2024-10-01: 106 + 3: + 2024-10-01: 119 + 2025-10-01: 120 + +36: + 1: + 2024-10-01: 73 + 2025-10-01: 0 + 2: + 2024-10-01: 96 + 3: + 2024-10-01: 110 + +37: + 1: + 2024-10-01: 66 + 2025-10-01: 0 + 2: + 2024-10-01: 86 + 3: + 2024-10-01: 109 + 2025-10-01: 102 + +38: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 77 + 2025-10-01: 0 + 3: + 2024-10-01: 100 + 2025-10-01: 92 + +39: + 1: + 2024-10-01: 0 + 2: + 2024-10-01: 0 + 3: + 2024-10-01: 90 + 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 #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 #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/programs.yaml b/policyengine_us/programs.yaml index 42063393357..28f7ac33694 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -808,7 +808,7 @@ programs: category: Benefits agency: HHS status: partial - coverage: AL, DC, GA, Riverside County, MA, FL, IL, IN, KS, KY, MD, MS, NC, NE, NJ, NY, OH, OK, OR, SD, RI, TX + coverage: AR, AL, DC, GA, Riverside County, MA, FL, IL, IN, KS, KY, MD, MS, NC, NE, NJ, NY, OH, OK, OR, SD, RI, TX state_implementations: - state: AL status: partial @@ -818,6 +818,13 @@ programs: parameter_prefix: gov.states.al.adeca.liheap verified_years: "2026" notes: FY2026 regular heating with the HUD allowance deduction and the funded IIJA supplement. Crisis, cooling, weatherization and equipment assistance are out of scope. + - 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 + 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: GA status: partial name: Georgia 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..6f1120caa45 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap.yaml @@ -0,0 +1,599 @@ +# 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. + +- name: Case 1, a nonqualified parents full counted income uses two qualified children for the grant. + period: 2026 + input: + people: + person1: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + employment_income: 6_000 + person2: + age: 12 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 8 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3] + heating_type: NATURAL_GAS + heating_expense: 50 + ar_tea: 0 + households: + household: + members: [person1, person2, person3] + state_code: AR + output: + ar_liheap_household_size: 2 + ar_liheap_countable_income: 4_800 + ar_liheap_income_limit: 36_840 + ar_liheap_matrix_amount: 227 + ar_liheap: 227 + +# 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. +- 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] + 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: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 39 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 12 + immigration_status: CITIZEN + ssi: 0 + person4: + age: 8 + immigration_status: CITIZEN + ssi: 0 + person5: + age: 4 + immigration_status: CITIZEN + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + heating_type: FUEL_OIL + heating_expense: 100 + ar_tea: 0 + households: + 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] + 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] + 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 + 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 + 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 + ssi: 0 + employment_income: 50_000 + person2: + age: 38 + immigration_status: CITIZEN + 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 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 + input: + people: + person1: + age: 67 + immigration_status: CITIZEN + 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 + 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 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. +- name: Case 11, a farm rent loss does not make a wage earner eligible. + period: 2026 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + 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 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. + period: 2026 + input: + state_code: [AR, AR] + age: [60, 60] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + 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] + 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 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. + period: 2026 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 39 + immigration_status: CITIZEN + ssi: 0 + person3: + age: 12 + immigration_status: CITIZEN + ssi: 0 + person4: + age: 8 + immigration_status: CITIZEN + ssi: 0 + person5: + age: 4 + immigration_status: CITIZEN + ssi: 0 + 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 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. + period: 2026 + input: + people: + person1: + age: 62 + immigration_status: CITIZEN + 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 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. + period: 2026 + input: + people: + person1: + age: 58 + immigration_status: CITIZEN + 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 + +# 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: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_in_k12_school: false + employment_income: 48_000 + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + tanf: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 0 + ar_liheap_income_limit: 36_840 + ar_liheap_eligible: true + ar_liheap: 308 + +# 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: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 18 + immigration_status: CITIZEN + is_in_k12_school: false + is_in_secondary_school: false + employment_income: 48_000 + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + tanf: 0 + households: + household: + members: [person1, person2] + state_code: AR + output: + ar_liheap_countable_income: 38_400 + ar_liheap_income_limit: 36_840 + ar_liheap_eligible: false + ar_liheap: 0 + +# 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_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] + 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: [38_400, 38_400, 38_400, 38_400] + 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 new file mode 100644 index 00000000000..4a99c83a585 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/ar_liheap_household_size.yaml @@ -0,0 +1,63 @@ +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 39 + immigration_status: LEGAL_PERMANENT_RESIDENT + ssi: 0 + person3: + age: 19 + immigration_status: ASYLEE + ssi: 0 + person4: + age: 17 + immigration_status: DACA + ssi: 0 + person5: + age: 8 + immigration_status: UNDOCUMENTED + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2, person3, person4, person5] + heating_type: NATURAL_GAS + heating_expense: 1_200 + households: + household: + members: [person1, person2, person3, person4, person5] + state_code: AR + output: + ar_liheap_household_size: 3 + +# 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: + people: + person1: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + person2: + age: 8 + immigration_status: DACA + ssi: 0 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + heating_expense: 1_200 + households: + household: + members: [person1, person2] + 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 new file mode 100644 index 00000000000..57238557ab7 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/eligibility/ar_liheap_eligible.yaml @@ -0,0 +1,132 @@ +# 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 + input: + state_code: [AR, AR] + age: [40, 40] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + 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. + 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] + 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] + 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] + employment_income: [0, 0] + heating_type: [NONE, NATURAL_GAS] + heating_expense: [1_200, 1_200] + output: + 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: + people: + person1: + age: 70 + immigration_status: CITIZEN + ssi: 4_968 + social_security: 7_200 + medicare_part_b_premium: 0 + person2: + age: 45 + immigration_status: CITIZEN + 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_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] + 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 new file mode 100644 index 00000000000..b848464667b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.yaml @@ -0,0 +1,992 @@ +# Independent AR component tests; no final household eligibility or total benefit is asserted. + +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + 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 + +# 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: + people: + person1: + age: 22 + immigration_status: CITIZEN + 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] + heating_type: NATURAL_GAS + gas_expense: 1_200 + ar_tea: 0 + households: + household: + members: [person1] + state_code: AR + output: + ar_liheap_countable_income: 15_600 + +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_in_k12_school: 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 + +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 18 + immigration_status: CITIZEN + 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 total 20000; the standard 20% disregard gives 16000, without a new business-expense calculation. +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + 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: 15_996 + +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + 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 + +# 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 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. + period: 2026 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + employment_income: 12_000 + rental_income: 2_400 + farm_rent_income: 1_200 + survivor_benefits: 600 + person2: + age: 8 + immigration_status: CITIZEN + ssi: 2_400 + spm_units: + spm_unit: + members: [person1, person2] + heating_type: NATURAL_GAS + gas_expense: 1_200 + 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 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 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + 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 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 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + ssi: 0 + social_security: 18_000 + medicare_part_b_premium: 2_434.8 + person2: + age: 68 + immigration_status: CITIZEN + 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 + 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 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 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR, AR, AR] + age: [55, 45, 60, 62] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN] + 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 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 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 26 + immigration_status: CITIZEN + 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 + 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 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. +- 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 + 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 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. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR] + age: [30, 30] + immigration_status: [CITIZEN, CITIZEN] + 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 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. + period: 2026 + absolute_error_margin: 0.01 + input: + state_code: [AR, AR] + age: [62, 62] + immigration_status: [CITIZEN, CITIZEN] + ssi: [0, 0] + ar_tea: [0, 0] + interest_income: [2_400, 3_000] + output: + ar_liheap_countable_income: [0, 600] + +# 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. +- 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 + ssi: 0 + pension_income: 12_000 + interest_income: 2_400 + person2: + age: 64 + immigration_status: CITIZEN + 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 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. +- 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] + 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] + +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_in_k12_school: 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 + +# 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 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + person2: + age: 17 + immigration_status: CITIZEN + is_in_k12_school: 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 + +# 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 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + ssi: 0 + employment_income: 24_000 + person2: + age: 22 + immigration_status: CITIZEN + 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 + +# 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 + input: + people: + person1: + age: 50 + immigration_status: CITIZEN + ssi: 0 + employment_income: 24_000 + person2: + age: 23 + immigration_status: CITIZEN + 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 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: + people: + person1: + age: 50 + immigration_status: CITIZEN + ssi: 0 + employment_income: 24_000 + person2: + age: 24 + immigration_status: CITIZEN + 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: 24_000 + +# 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 + input: + people: + person1: + age: 45 + immigration_status: CITIZEN + 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 + 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 + +# Plan 1.9 checks unemployment insurance, strike pay, "Interest, dividends, or royalties", +# 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); +# 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 + input: + state_code: [AR, AR, AR, AR, AR] + age: [45, 50, 58, 60, 35] + immigration_status: [CITIZEN, CITIZEN, CITIZEN, CITIZEN, CITIZEN] + 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, 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] + +# The manual's full-time student definition (p141) covers "High school students over +# 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 + 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 + 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: 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 + +# 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 + +# 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). 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. + 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 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + 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/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..7ea2c0302f2 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.yaml @@ -0,0 +1,62 @@ +# Independent AR component tests; no final household eligibility or total benefit is asserted. + +# 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 + 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] + + +# 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 + 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_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] + +# 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..5d26c6e8d74 --- /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-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, p63, and 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 new file mode 100644 index 00000000000..3080234eff2 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.yaml @@ -0,0 +1,511 @@ +# Independent AR component tests; no final household eligibility or total benefit is asserted. + +# 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 + 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: 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 + 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: 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 + 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: 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 + 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: 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 + 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] + + +# 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 + 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, 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] + + +# 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 + 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 + +# 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] + +# 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.py b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/ar_liheap.py new file mode 100644 index 00000000000..d9a66ef4dab --- /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 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 = ( + "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..bcbc2eb1ca5 --- /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 " + "FFY 2025 manual's composition rule is corroborated by the current " + "rights statement of a state-designated LIHEAP subgrantee." + ) + reference = ( + # 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. + "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..a3f8584bfb0 --- /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 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) + 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) + # 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, 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) + & (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..1f40c8d6a49 --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_countable_income.py @@ -0,0 +1,116 @@ +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 = ( + # 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. + # PDF pages 5-7 + "https://liheapch.acf.gov/docs/2025/state-plans/AR_Plan_2025.pdf#page=5", + # 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 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) + # 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) + # 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 = in_high_school & (age <= p.high_school_student_age_limit) + counted_worker = ( + (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 + # (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) + countable_earnings = spm_unit.sum(earned_income * counted_worker) * ( + 1 - p.earned_disregard + ) + unearned_income = 0 + for source in p.sources.unearned: + unearned_income = unearned_income + max_(person(source, period), 0) + # 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 (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 (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. + 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 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) + # 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 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 new file mode 100644 index 00000000000..fed9787cb8f --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/income/ar_liheap_income_limit.py @@ -0,0 +1,44 @@ +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", + "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): + 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 + ) + monthly_fpg = 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 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 + # 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 (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) 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..146d04ea2f9 --- /dev/null +++ b/policyengine_us/variables/gov/states/ar/ee/aeo/liheap/payment/ar_liheap_matrix_amount.py @@ -0,0 +1,83 @@ +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 = ( + # 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", + # 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", + ) + + 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) + # 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) + fuels = fuel.possible_values + # 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, + 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) diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index 11b3c3b2a87..b7a0a1b51ee 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: