Skip to content

Add Hawaii LIHEAP regular heating eligibility and subsidized-dwelling benefit - #10614

Open
hua7450 wants to merge 10 commits into
mainfrom
hi-liheap-wave2c
Open

hua7450 wants to merge 10 commits into
mainfrom
hi-liheap-wave2c

Conversation

@hua7450

@hua7450 hua7450 commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

Adds Hawaii LIHEAP regular heating assistance for FY2026, the gas Energy Credit of the Hawaii Home Energy Assistance Program (H-HEAP), run by the Department of Human Services. A household qualifies with income at or below the limit ($41,941 for one person to $116,144 for ten as printed, then 150% of the 2025 Hawaii poverty guideline) or with a member receiving SNAP, SSI, TANF or general assistance, and needs gas paid by bill or through rent. Public and subsidized housing receive a flat $375, $425 or $475 by qualified size. A private dwelling receives its points times a statewide value per point that public sources did not show as of 2026-11-02 (the matrix's $140 is an example), so the model computes its points (income 0-3, household size 1-3, island 1-2, vulnerability 1, energy burden 1: 2 to 9 points on Oahu, 3 to 10 elsewhere) and no private-dwelling dollars.

Fixes #10608

Regulatory authority

Eligibility

Requirement Source How modeled
Hawaii residence 2020 manual 2.1 defined_for = StateCode.HI
Qualified household size: citizens and qualified aliens with a Social Security Number from age one 2020 manual 2.2, 2.4; draft 2.2, 2.4 hi_liheap_household_size sums hi_liheap_qualified_member, which reads is_citizen_or_legal_immigrant and ssn_card_type; COFA citizens need an explicit true; a disqualified member's income still counts
Income limit: 60% of SMI for sizes 1-10, 150% of the guideline above plan 2.1; matrix p. 3; HCAP chart hi_liheap_income_limit: the printed dollars for sizes 1-10, including $106,454 for six; 1.5 x the 2025 guideline from 11 (equal to the printed rows to 20, an extension above); 0 at size 0
Income test plan 2.1; matrix p. 3; draft 2.9, 5.5 hi_liheap_eligible: countable income at or below the limit
Categorical route plan 1.4a; matrix pp. 1, 3; draft 2.8 Any member with ssi or receives_ssi, or positive snap, tanf or general_assistance in the year, waives the income test; size must still be positive
Gas heating 2020 manual 1.4; draft p. 57; draft 2.1 heating_type is NATURAL_GAS: both manuals pay gas as heating and electricity as cooling, and bottled gas shows no active utility account
Heating responsibility draft 2.1, 4.2; application Q23-24 has_heating_expense (a gas bill) or heat_expense_included_in_rent
No assets test plan 2.3 Assets ignored

Countable income

Item Source How modeled
Whose income plan 1.9; 2020 manual 2.2, 2.4 Every SPM unit member, qualified or not, minors included
Earned income plan 1.9; draft 5.2 Wages (employment_income, read to include military pay, as hi_military_pay_exclusion reads it); net self-employment, SSTB self-employment, farm and partnership income, with no second expense deduction
Benefits plan 1.9; draft 5.3 Gross Social Security (Medicare premium included, per plan 1.9), SSI (monthly, annualized), unemployment (total_unemployment_compensation, reported or modeled), strike benefits, general assistance, VA benefits, workers' compensation, disability benefits, TANF (take-up-gated tanf, once per unit)
Retirement plan 1.9; 2020 manual 5.3 pension_income, military_retirement_income (with Survivor Benefit Plan annuities), railroad_benefits (railroad retirement, a pension under 5.3), retirement_distributions, private survivor_benefits; each aggregate once
Other receipts plan 1.9; draft 5.3 Rent and farm rent (royalties sit in rental_income), alimony, child support received, interest, ordinary dividends, estate and trust income, life insurance proceeds (insurance paid to the insured), cash gifts (financial_assistance), cash assistance (gi_cash_assistance), lottery and gambling winnings, and jury pay, settlements and other receipts (miscellaneous_income)
Not counted plan 1.9; draft 5.4 SNAP, WIC, assets, loans, tax refunds, EITC; each source is floored at zero per person, so a loss by one source or member offsets nothing

Benefit

Component Source How modeled
Subsidized-dwelling flat benefit matrix p. 2; plan 2.5; draft p. 70 hi_liheap_subsidized_amount: an eligible household with receives_housing_assistance or is_in_public_housing receives $375, $425 or $475 by qualified size. Flat payments come first and do not depend on the value per point. The output reads 0 for private dwellings, which it does not cover
Income points plan 2.5; matrix p. 3 Countable income / 2025 guideline for the qualified size: 3 at or below 50%, 2 at or below 100%, 1 at or below 150%, 0 above
Size points plan 2.5 1 for 1-2 qualified members, 2 for 3-5, 3 for 6 or more
Island points plan 2.5 From county: Honolulu (Oahu) 1; Hawaii, Maui, Kauai and Kalawao counties 2; unknown 0
Vulnerability plan 2.5; 2020 manual p. 2 1 point if a qualified member is five or under (until the sixth birthday), 60 or older, or disabled and 18 or older. Disabled means is_disabled, SSI receipt or social_security_disability, following the manuals' definition by receipt
Energy burden 2020 manual 2.10 1 point if annual pre_subsidy_electricity_expense is positive and at least 30% of countable income

hi_liheap_points stays a schedule before eligibility, because no dollar amount reads it.

Not modeled

Item Source Treatment
Private-dwelling dollar award plan 2.6; matrix p. 2; draft p. 70 Not located in public sources as of 2026-11-02; Energy Credit payments can post until the end of the calendar year. Plan 2.6 estimates benefits of $375 to $1,400, and $1,400 is 10 points x the matrix's $140 example, which also appears in the FY2025 matrix and the FY2027 draft. No estimate is encoded
Photovoltaic households; the zero-rent flat amount plan 2.5; draft p. 61; 2020 manual 6.3 Photovoltaic production and zero rent have no input; the FY2026 plan, matrix and draft omit zero rent
SSA's independent-living certification, AABD, the DHS-case match, receipt on the first day of the application month plan 1.4a; draft 2.8 Not represented: any SSI receipt in the year counts, and AABD and the case match have no input
Third-party payment, the size of a share of utilities in rent, active gas account, one payment a year 2020 manual 2.1, 2.12; draft 2.1, 4.2 Not represented; a gas bill or heat in rent stands in for responsibility
Prior-month income annualized, or the current situation if lower; the current electric bill draft 5.5; application p. 2 Annual income and annual electric expense
Mortgage receipts, foster care and adoption payments, stipends, military housing and subsistence allowances plan 1.9; draft 5.2 No inputs (missing facts, not exclusions); work study, VA education pay and insurance paid toward a bill cannot be separated from the inputs that hold them
Other disability routes: 100% VA ratings, governmental disability retirement, railroad disability 2020 manual p. 2 No separate input
Hawaii supplement (hi_oss), institution residents, ineligible dwelling types, rebates and refund deposits within lump sums plan p. 6; 2020 manual p. 9; draft p. 61 Not represented; hi_oss recipients live in care facilities
Proposed FY2027 plan (flat $400, $450, $500) FY2027 packet, status "Saved" Not adopted; not encoded
Crisis (Energy Crisis Intervention), electric Energy Credit (cooling), weatherization Out of scope

Source-priority calls:

  • Vulnerability age: the plan and both manuals say a child "age five and under" and the matrix says "under age 5"; the plan is followed.
  • Six-person limit: the state's printed $106,454 (matrix p. 3, HCAP chart) is followed over the Clearinghouse's 60% SMI of $106,465.
  • Income points for categorical households: matrix p. 3 and draft p. 69 (actual total income) are followed over the matrix p. 1 categorical income chart.
  • Energy burden: section 2.10 of both manuals (monthly electric cost) is followed over the general definition (the current utility bill).
  • Utilities in rent: draft 2.1 and 4.2 ("prorated share of the utility bill if rent includes utilities") and application Q23-24 are followed over the 2020 manual ("Households where all utilities are included in the rent") and plan 2.3 (No).
  • Categorical programs: draft 2.8 and the matrix ("SNAP, SSI, TANF, GA or AABD") are followed over the plan and application (SNAP, SSI, TANF).
  • Income comparison: draft 5.5 ("equal to or less than") is followed over draft 2.9 ("less than") and matrix p. 3 ("below").

No source_conflicts/candidates.yaml entry applies.

Modeling notes:

  • The SPM unit stands in for the unit sharing the utility. The 2020 manual's household and income-counting rules are used where the 2026 application and draft manual repeat them.
  • Limits: nine of the ten printed SMI-based amounts equal the truncated 45 CFR 96.85 amounts; the six-person cell does not, so the printed dollars are kept rather than computed or corrected. Maui Economic Opportunity's H-HEAP page prints the same limits. No monthly cent rounding is inferred.
  • No federal allocation or average award substitutes for the value per point, which is the Energy Credit funds left after flat payments divided by statewide private-dwelling points.
  • A positive electric bill with zero income earns the burden point; a zero bill never does. An explicitly unknown county earns no island point; with no county input, the model's first-county fallback (Hawaii County) earns 2.
  • A solar heating_type does not identify a photovoltaic household.
  • No year is fully verified (status: partial, no verified_years), because private dwellings have no dollars. Earlier years are unverified estimates through parameter backfilling; later years carry FY2026 forward on the lagged guideline.

Microsimulation: heating_type, gas_expense, heat_expense_included_in_rent and the burden point's pre_subsidy_electricity_expense are not in current datasets; callers must supply them.

Test plan

43 YAML cases in 6 files. The 31 cases then on the branch passed locally on 2026-10-20, before the 2026-10-26 fixes (military_retirement_income, ordinary_dividend_income and railroad_benefits in the income list, an explicit loop, period: 2026, the plan page 9 citation) and the 2026-11-02 eligibility, flat benefit, Social Security Number, income and disability changes, which were not run; CI validates them.

  • hi_liheap_eligible.yaml (4): income at the limit and the next dollar, each categorical route above the limit, reported SSI, no qualified member, a gas bill, gas in rent, no bill, electric, propane, unspecified and no heat, another state.
  • hi_liheap_household_size.yaml (2): nonqualified members, none qualified, another state, an adult and an infant without a Social Security Number.
  • hi_liheap_income_limit.yaml (4): all 20 printed limits, including $106,454 for six and the switch at 11; size 0 and other states; a period 2025 estimate on the 2024 guideline.
  • hi_liheap_countable_income.yaml (13): nonqualified adults' and a minor's earnings, business income, retirement and Social Security counted once, every listed source including railroad retirement, monthly SSI and TANF, SNAP, WIC and assets excluded, losses floored, reported versus modeled UI, TANF take-up, miscellaneous income and cash assistance.
  • hi_liheap_points.yaml (16): every income-band edge for one person, size points at 3 and 6, all five counties, the age edges (5.5, 6, 59, 60, disabled 17 and 18), one point for several vulnerable members, nonqualified vulnerable residents, burden at 29.99%, 30% (including 3,600 of 12,000) and 30.01% and at zero income, combined examples up to 8 points, a household above the limit, a TANF household scored on actual income, an omitted and an unknown county, a member without a Social Security Number, disability by receipt.
  • hi_liheap_subsidized_amount.yaml (4): every size band, qualified size without proration, gas in subsidized rent, income above the limit, a private dwelling, public housing.

Every case sends heating_type.

  • YAML tests with expected values from the FY2026 plan and benefit matrix, the HCAP income chart and the 2025 poverty guidelines
  • N/A Source-conflict register entry for a statute reading
  • make format
  • Changelog fragment in changelog.d/
  • CI passes

axiom: TheAxiomFoundation/rulespec-us#1995 queued

🤖 Generated with Claude Code

@codecov

codecov Bot commented Nov 2, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (b0a8c09) to head (240886d).
⚠️ Report is 134 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##              main    #10614    +/-   ##
==========================================
  Coverage   100.00%   100.00%            
==========================================
  Files            1         7     +6     
  Lines           15       123   +108     
  Branches         0         1     +1     
==========================================
+ Hits            15       123   +108     
Flag Coverage Δ
unittests 100.00% <100.00%> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

hua7450 and others added 2 commits November 2, 2026 13:27
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Set immigration_status on the nonqualified members. Setting
is_citizen_or_legal_immigrant on only two of three members gave the third
the bool default, false, and skipped the citizen formula.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@DTrim99

DTrim99 commented Nov 2, 2026

Copy link
Copy Markdown
Collaborator

PR Review: Add Hawaii LIHEAP regular heating eligibility and subsidized-dwelling benefit

PR #10614 (author: hua7450), head 240886dfb2. This is a first review. The PR adds the heating component of Hawaii's H-HEAP Energy Credit for FY2026 (October 1, 2025 to September 30, 2026), run by DHS through the community action agencies. It includes:

  • 14 parameters and 7 variables under gov.states.hi.dhs.liheap;
  • 6 test files with 43 cases;
  • a programs.yaml entry (partial, no verified year) plus HI on the LIHEAP coverage line;
  • a changelog fragment.

There are no reviews yet, and the only comment is Codecov's. No partner test file is touched.

Path prefixes:

  • P/ = policyengine_us/parameters/gov/states/hi/dhs/liheap/
  • V/ = policyengine_us/variables/gov/states/hi/dhs/liheap/
  • T/ = policyengine_us/tests/policy/baseline/gov/states/hi/dhs/liheap/

Sources read for this review:

Summary

Scope. The PR's scope is the plan's heating component, and the subsidized-dwelling benefit is what the plan pays:

  • Heating component. Plan Section 2 (heating) and Section 3 (cooling) have the same thresholds, flat rates and point categories. Both manuals assign the heating component by utility, not by end use: "Gas paid as heating and Electric paid as cooling" (2020 manual 1.4, p. 4; draft 1.4, p. 57). Plan 1.2 (p. 4) puts 5% of funds in heating and 50% in cooling, which fits a state with little space heating.
  • Subsidized dwellings. Matrix page 2 pays "Public Housing, Rent Subsidy, or Photovoltaic (PV) Households" a flat $375, $425 or $475 by eligible size. Plan 2.6 (p. 10) prints the $375 minimum.
  • Private dwellings. They are paid points times a statewide value per point, set after the flat payments (draft p. 70). The matrix's $140 is labelled an example in the FY2026 matrix and the FY2027 draft, and no FY2026 value is published. The head computes the points and pays no private-dwelling dollars, a documented gap that the public sources can't fill.

What is right:

No critical findings. Two should-address items:

  • S1. Eligibility requires natural gas as the home's primary heating fuel. Hawaii pays the gas Energy Credit on any household's gas bill, and the application only asks which bill to credit. Homes with no space heating or with electric heat, which is most of Hawaii, get $0 even with a gas bill. One such case is pinned at false.
  • S2. military_basic_pay is not counted, although the draft manual lists "Military base pay" as earned income. The body's reason (that employment_income holds it, "as hi_military_pay_exclusion reads it") doesn't hold.

Five suggestions (G1-G5): record the source choices, an optional value-per-point lever, other years, two unreachable guards, and housekeeping.

Critical

None.

Should address

S1. The gas Energy Credit is gated on the home's primary heating fuel, not on the gas bill Hawaii credits.

Where.

  • V/hi_liheap_eligible.py:41-42 sets gas = heating_type == NATURAL_GAS. :45-48 requires gas & responsible, where responsible is has_heating_expense | heat_expense_included_in_rent. On main, has_heating_expense is true only when the primary heating fuel's bill is positive.
  • T/hi_liheap_eligible.yaml Case 4 (line 92 on) pins NONE with a $900 gas bill as false (last row).

Sources:

  • The heating component is the gas account. 2020 manual 1.4 (p. 4) and draft 1.4 (p. 57): "Gas paid as heating and Electric paid as cooling."
  • The household picks the bill. 2020 manual 2.12 (p. 8) and draft 2.12 (p. 61): "An applicant can apply for one utility type, gas or electric." Application Q17 (p. 4): "I would like assistance with my bill for (Check only one): Electric / Gas", with GAS listed as "(Hawaii Gas Company)". No question asks how the home is heated.
  • What the household must show. Draft 4.2 (p. 65): "4. The household shall submit a current electric or gas bill. 5. Households declaring gas as their primary utility must also submit a current electric bill." Draft 2.1 (p. 58) requires an active utility account that the household pays, or its prorated share when rent includes utilities.
  • "Main fuel type" is the utility. Draft 2.11 (p. 61) collects bill data for the "main fuel type (Electric or Gas)", and "If main fuel type is not electricity", for gas and then electricity. So "primary utility" means the utility the household asks to have credited, not its space-heating fuel.

Why it is a finding.

  • In Hawaii, utility gas mostly heats water and cooks, and most homes have no space heating. The test the rules set is a Hawaii Gas account the household pays. heating_type is "the fuel used most to heat the home" (its documentation), so it can't stand in for that test.
  • The wave rated the same narrowing a should: SC Add South Carolina LIHEAP regular heating assistance #10616 S2 (a heating-fuel bill required where the state asks for an energy bill), TN S1 and NM S1. The checklist also lists NONE households with a qualifying bill paid $0 as a should.

Effect (period 2026, Hawaii, qualified members):

  • (a) One adult aged 70 in public housing on Oahu, Social Security $18,000, heating_type NONE, gas_expense $480 (a gas water heater), electricity $1,500. The head finds her ineligible and pays $0. Under the rules she can ask for the gas credit: $18,000 ≤ $41,941, so she gets the size 1-2 flat rate of $375.
  • (b) Three people with a Section 8 voucher on Maui, wages $30,000, heating_type ELECTRICITY (a space heater), gas_expense $600. The head pays $0. Under the rules, $30,000 ≤ $67,751, so asking for gas gives $425.
  • (c) T/hi_liheap_eligible.yaml Case 4, last row (NONE, gas $900, income $20,000) is pinned false. The rules give true.

Fix:

  • Test the gas bill on the bill path, for example gas_bill = gas_expense > 0. Then set responsible = (gas_bill & ~heat_in_rent) | (heat_in_rent & (heating_type == NATURAL_GAS)), and drop the fuel gate from the bill path.
  • Flip Case 4's last row to true, and add a case with electric heat and a gas bill. The UNSPECIFIED row with a $900 gas bill would then also pay. That is consistent with testing the bill, and the Default heating_type to electricity and remove the UNSPECIFIED-gated state heating adapters #9754 convention doesn't require $0 there.
  • Update the code comment at lines 39-40, the body's "Gas heating" row, Axiom interpretation 13 and companion test 14(d).
  • When the electric (cooling) credit is modelled, add the one-utility, one-payment choice of 2020 manual 2.12.

S2. military_basic_pay is not counted.

Where.

  • P/income/sources.yaml:4 lists employment_income but not military_basic_pay.
  • The comment at :40-41 reads "Military pay is read as part of employment_income, as hi_military_pay_exclusion reads it". The body's earned-income row says the same.

Sources:

  • Plan 1.8 (p. 6) uses gross income, and plan 1.9 checks "Wages".
  • Draft 5.2 (p. 66): "Earned income includes but is not limited to the following: 1. Wages 2. Military base pay, basic allowance for housing (BAH), basic allowance for subsistence (BAS)".
  • Nothing in the plan or the manuals' exempt list (draft 5.4, p. 67) excludes service pay.

Why the stated reason doesn't hold. On main, employment_income adds only employment_income_before_lsr and its behavioral response, and military_basic_pay is a separate person input outside it. hi_military_pay_exclusion reads military_service_income, which is reserve and National Guard duty pay already inside wages for the tax subtraction. It says nothing about military_basic_pay. The IA, ND and NV LIHEAP lists on main carry military_basic_pay next to employment_income, and PA reads it in Python.

Effect (period 2026, Oahu, natural gas with a bill):

  • (a) A grandmother aged 62 with a Section 8 voucher and Social Security of $26,000, and her grandson aged 20 with military_basic_pay of $30,000. The head counts $26,000 ≤ $54,846 and pays $375. Counted, $56,000 is above $54,846, so the household gets $0.
  • (b) One adult aged 30 with military_basic_pay of $45,000 in a private dwelling. The head finds the household eligible with 3 + 1 + 1 = 5 points. Counted, $45,000 is above $41,941, so the household is ineligible, with 0 + 1 + 1 = 2 points.

Severity. This is the wave's omitted-source should (UT, AK, PA, CO #10609 S3, ID #10613 S3, SC #10616 S3, WV #10618 S1). Oahu has a large active-duty population, and the draft names base pay explicitly.

Fix:

  • Add military_basic_pay after employment_income, with the Iowa/North Dakota note to enter basic pay in only one of the two. Replace the comment at lines 40-41.
  • Give it a distinct positive amount in a countable-income case (for example $500 in Case 2, giving 16,500).
  • Update the body's earned row and Axiom interpretation 7 and the 30-source list. BAH and BAS have no input, which the body already says.

Suggestions

G1. Record the source choices. The body lists its source-priority calls and says no candidates.yaml entry applies. Most follow the newer agency texts and are defensible, but nothing records them. Candidates (as in CO #10609 G4 and SC #10616 G2) would cover:

  • general assistance and AABD as categorical routes: draft 2.8 and the matrix over plan 1.4a and application Q12, which name only SNAP, SSI and TANF;
  • the inclusive comparison: draft 5.5 over draft 2.9's "less than" and the matrix's "below";
  • utilities in rent: draft 2.1 and 4.2 and application Q23-24 over 2020 manual 2.12(g);
  • categorical households' income points: matrix p. 3 and draft p. 69 over matrix p. 1's categorical chart;
  • bottled gas, which the head excludes. Both manuals' "Current Utility Expense" definition lists "kilowatt/therms/tank/cylinder charges", but Hawaii Gas bills tank service as its non-PUC-regulated "NU" class, and "Utility" requires PUC-regulated gas. The head's reading is plausible, but it is a reading;
  • is_disabled alone granting the vulnerability point. The manuals define a disabled individual by receipt (SSI, Title II disability, 100% VA, governmental disability retirement, railroad disability), so this widens a closed definition. It affects points only.

G2. An optional value-per-point lever. Private dwellings, presumably most Energy Credit households, get no dollars at the head. An optional value_per_point parameter (0 by default, described as unpublished), with an hi_liheap total of the flat rate or points times that value for eligible households, would let users model the award. The FY2026 matrix's $140 example and plan 2.6's $1,400 maximum (10 × $140) are the only published anchors.

G3. Other years (documented deferrals).

  • Period 2025 backfills FY2026's $375/$425/$475, but the FY2025 plan (p. 11) prints a $280 minimum.
  • Period 2027 carries FY2026 forward. The proposed FY2027 plan (Report Status "Saved"; pp. 11 and 56) prints $400, $450 and $500. HHS's FY2027 figures are published (4-person SMI $138,463; 60% for one person $43,200), so the carried limits are lawful but stale.
  • Consider dating an end to the FY2026 values, or encoding FY2027 once the plan is accepted.

G4. Two unreachable guards (as in CO #10609 G5 and ID #10613 G4). Delete them or say why they stay:

  • max_(spm_unit("tanf", period), 0) at V/hi_liheap_countable_income.py:24: tanf is never negative.
  • max_(size, 1) at V/hi_liheap_points.py:25: size 0 is masked by the final where(size > 0, ...), and the guideline at size 0 is positive anyway.

G5. Housekeeping.

  • programs.yaml order. The HI entry sits after WY (line 1395). The LIHEAP state_implementations list is alphabetical from IL on, so HI belongs before it (SC Add South Carolina LIHEAP regular heating assistance #10616 G5).
  • P/payment/points/burden_rate.yaml. The reference is titled "Hawaii FY2026 LIHEAP State Plan and benefit schedule" but links the matrix page 2. Retitle it "Hawaii FY2026 H-HEAP benefit matrix".
  • P/payment/points/vulnerability/adult_min_age.yaml. The plan says "a disabled adult"; 18 is an inference. Cite Hawaii's age of majority (HRS § 577-1) or add a comment.
  • P/fpg_year_lag.yaml. The rule is stated directly by the "State Poverty Level" definition (guidelines "in effect on the first day of the current federal fiscal year"; 2020 manual p. 3, draft p. 56). Cite it next to the matrix.
  • Test plan. The body says the newest cases "were not run; CI validates them" and leaves "CI passes" unchecked. CI passed all 43 cases at this head.

Verified correct

  • Scope and flat benefit.
    • The heating component is the gas Energy Credit (manual 1.4), with the same structure as cooling (plan Sections 2 and 3).
    • The flat rates are $375 for sizes 1-2, $425 for 3-5 and $475 for 6 or more (matrix p. 2), by eligible size (draft 6.1). No proration applies (T/hi_liheap_subsidized_amount.yaml Case 2).
    • receives_housing_assistance or is_in_public_housing stands in for "rent based on the amount of the tenant's income" (draft p. 56).
    • Photovoltaic households and the value per point are documented gaps.
  • Limits.
    • HHS's mandatory FY2026 figures for Hawaii (Clearinghouse page; Attachment 4, pp. 1 and 4) are $41,941, $54,846, $67,751, $80,656, $93,560, $106,465, $108,885, $111,305, $113,724 and $116,144: truncated 0.6 × $134,428, then × .52 … 1.44.
    • The head equals them at nine sizes and is $11 lower at six ($106,454, as printed). A lower limit is lawful.
    • Sizes 11-20 are 1.5 × ($17,990 + $6,330 × (n − 1)), from $121,935 to $207,390. That is the ceiling there, since 60% SMI at 11 is $118,564.
    • The inclusive comparison matches "do not exceed". Every limit is far above the 110% floor.
    • Size 0 gives 0 (hi_liheap_income_limit.yaml Case 2).
    • Period 2027 stays under the FY2027 ceilings.
  • Countable income.
    • Plan 1.8 is gross income.
    • The checked 1.9 boxes match the list: wages, self-employment and commissions, UI (total_unemployment_compensation), strike pay, Social Security (gross, "Including MediCare deduction" checked), SSI, retirement and pension (pension_income, military_retirement_income, railroad_benefits, retirement_distributions, survivor_benefits), GA, TANF (take-up-gated tanf, once per unit), cash gifts, lottery lump sums, jury pay and settlements (miscellaneous_income), rental income, alimony, child support, interest and dividends, insurance to the insured, VA, minors' earnings, and trust income.
    • Unchecked items (loans, savings, work study, tax refunds, reimbursements) are not counted.
    • Nonqualified members' income counts (2020 manual 2.2 and 2.4; draft 2.2 and 2.4).
  • Losses. Each source is floored per member: business losses (countable Case 8), a rental loss against wages (Case 9) and negative UI (Case 10).
  • Household. A qualified member is a citizen or an 8 U.S.C. 1641 qualified noncitizen, which matches draft 2.2's list, with COFA needing an explicit input as documented. A Social Security Number is required from age one (draft 2.4).
  • Categorical routes. SNAP, SSI (paid or receives_ssi), TANF or GA by any member waives the income test, and qualified size must be positive (hi_liheap_eligible.yaml Cases 2-3).
  • Points.
    • The income bands use calc(right=True), so 0.5, 1.0 and 1.5 fall in the higher-point band. That matches matrix p. 3 at $8,995/$8,996, $17,990/$17,991 and $26,985/$26,986 (hi_liheap_points.yaml Case 1).
    • Size points are 1/2/3 at 1-2/3-5/6+. Island points are Oahu 1 and Hawaii, Maui (with Lanai and Molokai), Kauai and Kalawao 2.
    • The vulnerability point is given once, for a qualified member through age five (plan and both manuals), 60 or older, or a disabled adult.
    • The burden point is electric cost ≥ 30% of income (section 2.10), checked in float64.
    • The ranges are 2-9 on Oahu and 3-10 elsewhere, matching matrix p. 2.
  • Item 17. main has hi_oss, but hi_oss_eligible pays only SSI recipients in qualifying care facilities. The manuals make institution and care-home residents ineligible members (2020 manual p. 9; draft p. 61), so leaving it out is right, and the body says so.
  • Mutation. All 30 sources and TANF carry distinct nonzero amounts (countable Cases 1-6, 9-13). Every eligibility, size, points and flat-benefit branch is pinned, including the size-0 guards, the zero-income burden guard, the age floor (5.5) and the float64 burden comparison. The only unpinned code is G4.
  • NH Add New Hampshire state supplementation for 2026 #10156 pattern. The pattern is safe. hi_liheap_household_size feeds only calc() and arithmetic, the guideline lookup uses state_group_str (a valid key everywhere), and the county is compared as a string. Mixed-state rows (California) pass in CI.
  • main-side guards:
  • Wiring and housekeeping:
    • defined_for = StateCode.HI throughout;
    • no household aggregate, consistent with the merged siblings;
    • the programs.yaml entry is partial with no verified year;
    • all 14 parameter descriptions follow the house template;
    • references carry file-page anchors that show the values;
    • the changelog fragment is top-level added.

Hand-checked expectations (12):

Case Arithmetic Expected
hi_liheap_income_limit 1 printed 41,941; 80,656; 106,454; 116,144; size 11: 1.5 × (17,990 + 63,300); size 20: 1.5 × (17,990 + 120,270) 41,941; 80,656; 106,454; 116,144; 121,935; 207,390 ✓
hi_liheap_income_limit 3 printed sizes 2, 3, 5, 7-9; sizes 12-19: 1.5 × 87,620 … 1.5 × 131,930 54,846 … 113,724; 131,430 … 197,895 ✓
hi_liheap_income_limit 4 period 2025: 1.5 × (17,310 + 6,190 × 10) 118,815 ✓
hi_liheap_eligible 1 41,941 ≤ 41,941; 41,942 > 41,941; CA masked true, false, false ✓
hi_liheap_points 1 0 and 8,995 (≤ 50% of 17,990): 3; 8,996 and 17,990: 2; 17,991 and 26,985: 1; 26,986: 0; + size 1 + Oahu 1 5, 5, 4, 4, 3, 3, 2 ✓
hi_liheap_points 4 20,000 / 24,320 = 82%: 2 + 1 + 1 = 4; ages 5 and 60 and a disabled 18-year-old +1; 6, 59 and a disabled 17-year-old none 5, 4, 4, 5, 4, 5 ✓
hi_liheap_points 7 10,000 / 17,990 = 56%: 4; electric 2,999 < 3,000; 3,000 and 3,001 +1; 0 none; 3,600 ≥ 0.3 × 12,000 +1 4, 5, 5, 4, 5 ✓
hi_liheap_points 9 Oahu 2 + 1 + 1 = 4; Hawaii County 5; three members 20,000 / 30,650 = 65%: 2 + 2 + 2 + child 1 = 7; electric 6,000 = 30% +1 4, 5, 7, 8 ✓
hi_liheap_points 11 6,000 + TANF 6,000 = 12,000 ≤ 12,160 (50% of 24,320): 3 + 1 + 1 12,000; 5 ✓
countable 4 1,000 + 200 + 300 + 400 + 500 + 600 + 700 + 800 + 900 + 1,000 + 1,100 + 1,200 8,700 ✓
countable 6 SSI 6 × 500 + 6 × 700 = 7,200; TANF 3 × 200 + 9 × 300 = 3,300 10,500 ✓
hi_liheap_subsidized_amount 1 and 4 sizes 1, 2 → 375; 3, 5 → 425; 6, 7 → 475; public housing, size 3, 30,000 ≤ 67,751 → 425 375, 375, 425, 425, 475, 475; 425 ✓

Axiom line assessment

axiom: TheAxiomFoundation/rulespec-us#1995 queued.

State of the issue. The issue is OPEN, labelled pe-parity, and was updated 2026-11-02 19:32 UTC.

  • Dispatch-ready. It states the blockers: no reviewed revision, the HCAP chart, the draft manual, the application and the FY2026 SMI table not yet ingested, and the unpublished value per point. It gives module paths with corpus status and quotes the plan, matrix, both manuals and the application verbatim. It sets Required outputs for all seven variables and companion tests drawn from those sources rather than from PolicyEngine output.
  • Matches the head. It names 240886dfb2, 43 cases in 6 files, the 30-source list, and the eligibility and points definitions as coded.

Updates needed with the fixes:

  • S1: the eligibility Required output, interpretation 13 and companion test 14(d).
  • S2: interpretation 7's military-pay sentence and the source list.
  • Any G1 records.

CI status

gh pr checks 10614 at head 240886dfb2 (run 41510941097, pull_request, started 2026-11-02 19:32 UTC; it includes main through 4bfc548de3). I re-checked it at the end of this review: 37 pass, none pending or failing.

Coverage includes:

  • all Baseline shards, including the four state shards that run the Hawaii YAML;
  • all Contrib shards;
  • Rest Python shards 1-8 and Microsimulation;
  • PR validation (guard tests), Household API Partners, Package and compatibility, and Quick Feedback;
  • Codecov (patch and project).

I ran no tests locally; CI covers every file at this head.

Branch status

Verdict: REQUEST_CHANGES

@DTrim99 DTrim99 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Requesting changes: 0 critical, 2 should (eligibility requires NATURAL_GAS heat although Hawaii credits any household's gas bill; military basic pay not counted). Full report in the comment above.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Hawaii LIHEAP regular heating assistance

2 participants