Repository navigation
Conversation
Sum each state's regular LIHEAP payment in a new liheap variable, add an Illinois regular heating payment without crisis assistance, add a Michigan Home Heating Credit registry entry, and record each state's cooling treatment in its registry note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add regular_payments.yaml to the aggregate-list integrity test, which checks that each member exists, is state-gated and is not dropped between year blocks. Say that Rhode Island plans no regular cooling payment, since its FY2027 plan still allows a leftover-funds cooling grant. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Records the FY2026 and FY2027 plan service limits, describes the age thresholds for heating and cooling, tightens test margins, and checks the national liheap total. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The national `liheap` total evaluates every state's formula over a mixed-state population, which no household test does. Two patterns on main raised errors there: - 26 formula files passed options=[ADD] to an entity call. Core's Microsimulation.calculate_add rejects the keyword an entity call passes. The option is redundant: a plain read already sums a monthly variable over the year through the same Core function. - The DC and Illinois payment formulas look up a matrix by an income level that is 0 for households outside the state. Add the floor Maryland and Kansas already use. Also: - Reword the North Dakota registry note: the state reserves an optional direct cooling payment, so its cooling component is not only equipment. - Add a `liheap` case with Texas, DC and Illinois households in one simulation. - Add a code-health check against options=[ADD] and options=[DIVIDE]. - Check that every state payment in the LIHEAP registry entry is in the list `liheap` sums. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
PolicyEngine/policyengine-core#647 fixes the cause in Core: it lets a Microsimulation accept the keyword an entity call passes with options=[ADD] or options=[DIVIDE]. Once that is released the option works again, so a check that bans it here would be wrong. The 26 formula files stay without the option, which was redundant and lets `liheap` run on today's Core. Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
…ogram prefix Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Review: Add South Carolina LIHEAP regular cooling assistanceReviewed at head SummaryThe amounts are right. Every value in One thing blocks approval. The FY2027 plan gives a household one LIHEAP assistance in program year 2027 (crisis, heating or cooling), yet the PR pays the cooling award on top of the heating award in 2027, marks 2027 as verified, and adds both to the national Two smaller items: the cooling gate turns away a renter with heat in the rent and an unspecified fuel whom South Carolina's own heating variable pays, and the PR body's reason for that is inaccurate; and three existing South Carolina source-conflict records are now applied to a new year without being updated. Answers to the batch questions, briefly:
Critical (must fix)1. Program year 2027 allows one assistance, but the model pays heating and cooling together and sums both in
Governing text, FY2027 plan, item 11.5 (p. 26):
Item 11.4 on the same page shows this was a decision, not a slip: the community action directors asked OEO to "allow two services per year", and 11.5 is the answer. Item 1.1 (p. 4) says the same: "LIHEAP eligible households may receive one service during the calendar year. Should funding allow, the State may allow additional services during the program year." South Carolina's program year is the calendar year (2024 guide, plan attachments p. 523), so heating in January-April 2027 and cooling in May-September 2027 fall in one program year. The FY2026 rule is different, which is why 2026 is fine: "A maximum of two LIHEAP services may be provided during the program year" (FY2026 plan, item 11.5, p. 26), and the 2024 guide (attachments p. 536) and draft 2026 guide (p. 310): "LIHEAP-eligible households may receive assistance a maximum of two times during the program year." What the head does in 2027: Household (the PR's own Case 4, household 1, period 2027): one person aged 67, $24,000 of Social Security retirement, electric heat, $1,800 electric bill, cooling cost.
The Case 5 household in 2027 gets $850 + $850 = $1,700 against a plan ceiling of $1,000 for one assistance. The overstatement is not an edge case: it applies to every 2027 cooling recipient. The PR discloses that "the service limits are not modeled", and the code comment quotes item 1.1. But the registry entry claims Fix, either of:
Either way, cite item 11.5 for both years in the comment at lines 31-36, limit "paid alongside the heating award" to FY2026 in the registry note, and update interpretation 1 in rulespec-us#2181, which calls paying both in every year a "settled modeling choice". Should address1. A renter with heat in the rent and an unspecified fuel gets the heating award but no cooling award; the body's reason is inaccurate
The body says " No South Carolina source supports the exclusion. Direct Assistance asks only that the household "must not exceed 60% of the state median income and prove it has an obligation or responsibility to pay its home energy bill" (guide, p. 536), and plan item 3.3 (p. 10, rendered page checked for both years) answers No to different policies for renters, renters in subsidized housing and renters with utilities included in the rent. The Household (2026): one adult aged 40, wages $20,800, renter with
Fix: drop the extra term so the gate is 2. Three existing South Carolina source-conflict records now cover a year and a payment they do not list
Fix: extend Suggestions
Verified correct
Axiom line assessment
CI statusAll 36 checks pass at Branch status15 commits ahead of main and 12 behind ( Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
Requesting changes. The amounts are right for both years, the start dates put FY2026 in calendar 2026 and FY2027 in 2027, the cap equals the sum of the parts, and the refactor leaves sc_liheap identical to main. For 2026, paying both heating and cooling is backed: "A maximum of two LIHEAP services may be provided during the program year" (FY2026 plan item 11.5).
- Critical: 2027 allows one assistance, and the PR pays both. FY2027 plan item 11.5 (p. 26): "South Carolina will offer one LIHEAP assistance (either emergency or nonemergency) during the 2027 program year", and item 1.1 says households "may receive one service during the calendar year". The program year is the calendar year, so winter heating and summer cooling 2027 fall in one year. At this head every 2027 cooling recipient also gets the heating award,
liheapsums both, and the registry claimsverified_years: "2026-2027". Either model the one-award rule for 2027, or take the FY2027 values out of this PR and set the registry to 2026. - The UNSPECIFIED exclusion. South Carolina's own heating variable pays a renter with heat in the rent and an unspecified fuel (Case 1, household 2 gets $200 heating and $0 cooling), and the description's "as in every state LIHEAP program" isn't accurate here. Drop the extra term or label it a convention.
- Three existing SC source-conflict records now apply to FY2027 and the cooling award without being updated (low-income tier, energy burden, mixed status). Extend their years and list this PR.
Fixes and worked households are in the report above. CI is green at b5e3dccff0.
Addresses DTrim99's round-1 review; upstream main merged first. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
This push (
Suggestions:
CI is running at |
Adds South Carolina's cooling-season nonemergency benefit: a base amount plus supplements, with no fuel supplement, capped at $775 in FY2026 and $850 in FY2027. FY2027 allows one award per program year, so in 2027 cooling pays only its excess over the heating award.
Fixes #10753
Builds on the national LIHEAP total from #10730, merged on 2026-11-12: this PR adds
sc_liheap_coolingtogov.hhs.liheap.regular_payments.What and why
FY2026 plan items 3.3-3.6 (pp. 10-11) give a $200 base and say "The maximum nonemergency benefit during the cooling season is $775". The matrix notes "(no fuel benefit awarded May 1 - September 30)". The FY2027 accepted plan (Revision 2, items 3.3-3.6) sets a $300 base and an $850 maximum, with supplement changes. Eligibility is the regular LIHEAP test (plan 3.1: 60% SMI).
sc_liheapkeeps its heating award with unchanged results.cooling/amounts.yaml. FY2026: base $200; elderly $75; disabled $50; child $50; veteran $50; low income $175; burden $175; maximum $775. FY2027: base $300; elderly $50; disabled $50; child $50; veteran $50; low income $150; burden $200; maximum $850.sc_liheap_cooling_eligible: heating eligibility andhas_cooling_expense, with no heating-fuel condition of its own.sc_liheap_cooling: base plus supplements, capped at the cooling maximum, then prorated for mixed-status households.payment/max_awards.yaml: two awards per program year in FY2026 ("A maximum of two LIHEAP services may be provided during the program year", plan item 11.5, p. 26; guides, Section 3A) and one in FY2027 ("South Carolina will offer one LIHEAP assistance (either emergency or nonemergency) during the 2027 program year", item 11.5, p. 26; item 1.1, p. 4). With one award, cooling pays only its excess over the heating award, so the household receives the larger of the two.sc_liheap_eligiblepays an unspecified fuel only with heat in the rent, so NONE (no heating), every known fuel and UNSPECIFIED with heat in the rent can be paid.has_cooling_expenseis required. This is a PolicyEngine convention of the all-state cooling work: OEO ties Direct Assistance to a home energy bill and sets no separate cooling-cost test.Test plan
Tests were not run locally. This PR now targets
main, so CI runs them.liheaptotal in both years, a renter with heat in the rent and an unspecified fuel, and a mixed-status household's prorated cooling award.us-sc:liheap-low-income-tier-base,us-sc:liheap-energy-burden-testandus-sc:liheap-mixed-status-householdnow run to FFY2027 and list the cooling variable and this PR.make format(ruff)changelog.d/Not modeled
axiom: TheAxiomFoundation/rulespec-us#2181 queued
🤖 Generated with Claude Code