diff --git a/changelog.d/ak-liheap-wave2b.added.md b/changelog.d/ak-liheap-wave2b.added.md new file mode 100644 index 00000000000..ae0e1193470 --- /dev/null +++ b/changelog.d/ak-liheap-wave2b.added.md @@ -0,0 +1 @@ +Add Alaska Heating Assistance Program (ak_hap): FY2027 regular heating benefit from community fuel points, dwelling and income factors up to 150% of the Alaska poverty guideline, with shared-dwelling and utility-allowance reductions applied to heating points under 7 AAC 44.080. diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/child_age_limit.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/child_age_limit.yaml new file mode 100644 index 00000000000..e332f608135 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/child_age_limit.yaml @@ -0,0 +1,11 @@ +description: Alaska treats children younger than this age as vulnerable under the Heating Assistance Program. +values: + 2026-10-01: 6 + +metadata: + unit: year + period: year + label: Alaska HAP vulnerable child age limit + reference: + - title: Alaska HAP Manual 3000-2, Vulnerable Populations + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3000/3000-2_definitions.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/natural_gas.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/natural_gas.yaml new file mode 100644 index 00000000000..b48981cc883 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/natural_gas.yaml @@ -0,0 +1,731 @@ +description: Alaska assigns these natural gas heating points by Census place under the Heating Assistance Program. +# Derived place crosswalk: 25 direct published matches and 330 nearest-community +# approximations. Great-circle distances use Census internal points, four DEC +# settlement coordinates and five containing-Anchorage-point proxies among +# the 34 published gas communities. This is not a state-issued crosswalk. +"00065": # Adak city + 2026-10-01: 6 +"00650": # Akhiok city + 2026-10-01: 6 +"00760": # Akiachak CDP + 2026-10-01: 6 +"00870": # Akiak city + 2026-10-01: 6 +"01090": # Akutan city + 2026-10-01: 6 +"01200": # Alakanuk city + 2026-10-01: 6 +"01305": # Alatna CDP + 2026-10-01: 8 +"01390": # Alcan Border CDP + 2026-10-01: 8 +"01420": # Aleknagik city + 2026-10-01: 6 +"01560": # Aleneva CDP + 2026-10-01: 6 +"01860": # Allakaket city + 2026-10-01: 8 +"01970": # Ambler city + 2026-10-01: 6 +"02080": # Anaktuvuk Pass city + 2026-10-01: 6 +"03000": # Anchorage municipality + 2026-10-01: 5 +"03110": # Anchor Point CDP + 2026-10-01: 6 +"03220": # Anderson city + 2026-10-01: 8 +"03440": # Angoon city + 2026-10-01: 5 +"03550": # Aniak city + 2026-10-01: 6 +"03880": # Anvik city + 2026-10-01: 6 +"03990": # Arctic Village CDP + 2026-10-01: 8 +"04210": # Atka city + 2026-10-01: 6 +"04430": # Atmautluak CDP + 2026-10-01: 6 +"04500": # Atqasuk city + 2026-10-01: 6 +"04670": # Attu Station CDP + 2026-10-01: 6 +"05000": # Badger CDP + 2026-10-01: 8 +"05585": # Bear Creek CDP + 2026-10-01: 6 +"05750": # Beaver CDP + 2026-10-01: 8 +"06245": # Beluga CDP + 2026-10-01: 6 +"06520": # Bethel city + 2026-10-01: 6 +"06630": # Bettles city + 2026-10-01: 8 +"06850": # Big Delta CDP + 2026-10-01: 8 +"07070": # Big Lake CDP + 2026-10-01: 5 +"07620": # Birch Creek CDP + 2026-10-01: 8 +"08740": # Brevig Mission city + 2026-10-01: 6 +"09600": # Buckland city + 2026-10-01: 6 +"09657": # Buffalo Soapstone CDP + 2026-10-01: 5 +"09710": # Butte CDP + 2026-10-01: 5 +"10150": # Cantwell CDP + 2026-10-01: 8 +"11690": # Central CDP + 2026-10-01: 8 +"11800": # Chalkyitsik CDP + 2026-10-01: 8 +"12350": # Chase CDP + 2026-10-01: 5 +"12680": # Chefornak city + 2026-10-01: 6 +"12920": # Chena Ridge CDP + 2026-10-01: 8 +"12970": # Chenega CDP + 2026-10-01: 5 +"13230": # Chevak city + 2026-10-01: 6 +"13340": # Chickaloon CDP + 2026-10-01: 5 +"13450": # Chicken CDP + 2026-10-01: 8 +"13550": # Chignik city + 2026-10-01: 6 +"13670": # Chignik Lagoon CDP + 2026-10-01: 6 +"13780": # Chignik Lake CDP + 2026-10-01: 6 +"13860": # Chiniak CDP + 2026-10-01: 6 +"13890": # Chisana CDP + 2026-10-01: 5 +"14000": # Chistochina CDP + 2026-10-01: 5 +"14110": # Chitina CDP + 2026-10-01: 5 +"14330": # Chuathbaluk city + 2026-10-01: 6 +"14880": # Circle CDP + 2026-10-01: 8 +"15320": # Clam Gulch CDP + 2026-10-01: 6 +"15430": # Clark's Point city + 2026-10-01: 6 +"16360": # Coffman Cove city + 2026-10-01: 5 +"16420": # Cohoe CDP + 2026-10-01: 6 +"16530": # Cold Bay city + 2026-10-01: 6 +"16630": # Coldfoot CDP + 2026-10-01: 8 +"16750": # College CDP + 2026-10-01: 8 +"17190": # Cooper Landing CDP + 2026-10-01: 6 +"17300": # Copper Center CDP + 2026-10-01: 5 +"17410": # Cordova city + 2026-10-01: 5 +"17670": # Covenant Life CDP + 2026-10-01: 5 +"17740": # Craig city + 2026-10-01: 5 +"17850": # Crooked Creek CDP + 2026-10-01: 6 +"17960": # Crown Point CDP + 2026-10-01: 6 +"18510": # Deering city + 2026-10-01: 6 +"18620": # Delta Junction city + 2026-10-01: 8 +"18675": # Deltana CDP + 2026-10-01: 8 +"18805": # Denali Park CDP + 2026-10-01: 8 +"18925": # Diamond Ridge CDP + 2026-10-01: 6 +"18950": # Dillingham city + 2026-10-01: 6 +"19060": # Diomede city + 2026-10-01: 6 +"19720": # Dot Lake CDP + 2026-10-01: 8 +"19750": # Dot Lake Village CDP + 2026-10-01: 8 +"20020": # Dry Creek CDP + 2026-10-01: 8 +"20380": # Eagle city + 2026-10-01: 8 +"20600": # Eagle Village CDP + 2026-10-01: 8 +"20716": # Eareckson Station CDP + 2026-10-01: 6 +"20970": # Edna Bay city + 2026-10-01: 5 +"21040": # Eek city + 2026-10-01: 6 +"21150": # Egegik city + 2026-10-01: 6 +"21370": # Eielson AFB CDP + 2026-10-01: 8 +"21810": # Ekwok city + 2026-10-01: 6 +"22140": # Elfin Cove CDP + 2026-10-01: 5 +"22250": # Elim city + 2026-10-01: 6 +"22910": # Emmonak city + 2026-10-01: 6 +"23460": # Ester CDP + 2026-10-01: 8 +"23720": # Eureka Roadhouse CDP + 2026-10-01: 5 +"23790": # Evansville CDP + 2026-10-01: 8 +"23900": # Excursion Inlet CDP + 2026-10-01: 5 +"24230": # Fairbanks city + 2026-10-01: 8 +"24660": # False Pass city + 2026-10-01: 6 +"24980": # Farmers Loop CDP + 2026-10-01: 8 +"25000": # Farm Loop CDP + 2026-10-01: 5 +"25220": # Ferry CDP + 2026-10-01: 8 +"25550": # Fishhook CDP + 2026-10-01: 5 +"25880": # Flat CDP + 2026-10-01: 6 +"26100": # Fort Greely CDP + 2026-10-01: 8 +"26760": # Fort Yukon city + 2026-10-01: 8 +"26835": # Four Mile Road CDP + 2026-10-01: 8 +"26870": # Fox CDP + 2026-10-01: 8 +"26910": # Fox River CDP + 2026-10-01: 6 +"27090": # Fritz Creek CDP + 2026-10-01: 6 +"27145": # Funny River CDP + 2026-10-01: 6 +"27420": # Gakona CDP + 2026-10-01: 5 +"27530": # Galena city + 2026-10-01: 8 +"27640": # Gambell city + 2026-10-01: 6 +"27700": # Game Creek CDP + 2026-10-01: 5 +"28200": # Gateway CDP + 2026-10-01: 5 +"28590": # Glacier View CDP + 2026-10-01: 5 +"28740": # Glennallen CDP + 2026-10-01: 5 +"29130": # Goldstream CDP + 2026-10-01: 8 +"29180": # Golovin city + 2026-10-01: 6 +"29290": # Goodnews Bay city + 2026-10-01: 6 +"30060": # Grayling city + 2026-10-01: 6 +"30500": # Gulkana CDP + 2026-10-01: 5 +"30940": # Gustavus city + 2026-10-01: 5 +"31050": # Haines CDP + 2026-10-01: 5 +"31270": # Halibut Cove CDP + 2026-10-01: 6 +"31710": # Happy Valley CDP + 2026-10-01: 6 +"31765": # Harding-Birch Lakes CDP + 2026-10-01: 8 +"32150": # Healy CDP + 2026-10-01: 8 +"32310": # Healy Lake CDP + 2026-10-01: 8 +"32550": # Hobart Bay CDP + 2026-10-01: 5 +"32810": # Hollis CDP + 2026-10-01: 5 +"33030": # Holy Cross city + 2026-10-01: 6 +"33140": # Homer city + 2026-10-01: 6 +"33360": # Hoonah city + 2026-10-01: 5 +"33470": # Hooper Bay city + 2026-10-01: 6 +"33580": # Hope CDP + 2026-10-01: 5 +"33800": # Houston city + 2026-10-01: 5 +"33910": # Hughes city + 2026-10-01: 8 +"34350": # Huslia city + 2026-10-01: 8 +"34460": # Hydaburg city + 2026-10-01: 5 +"34570": # Hyder CDP + 2026-10-01: 5 +"34790": # Igiugig CDP + 2026-10-01: 6 +"35120": # Iliamna CDP + 2026-10-01: 6 +"35890": # Ivanof Bay CDP + 2026-10-01: 6 +"36400": # Juneau city and borough + 2026-10-01: 5 +"36540": # Kachemak city + 2026-10-01: 6 +"36770": # Kake city + 2026-10-01: 5 +"36990": # Kaktovik city + 2026-10-01: 6 +"37250": # Kalifornsky CDP + 2026-10-01: 6 +"37430": # Kaltag city + 2026-10-01: 6 +"37540": # Karluk CDP + 2026-10-01: 6 +"37650": # Kasaan city + 2026-10-01: 5 +"37975": # Kasigluk CDP + 2026-10-01: 6 +"38090": # Kasilof CDP + 2026-10-01: 6 +"38420": # Kenai city + 2026-10-01: 6 +"38910": # Kenny Lake CDP + 2026-10-01: 5 +"38970": # Ketchikan city + 2026-10-01: 5 +"39300": # Kiana city + 2026-10-01: 6 +"39410": # King Cove city + 2026-10-01: 6 +"39630": # King Salmon CDP + 2026-10-01: 6 +"39740": # Kipnuk CDP + 2026-10-01: 6 +"39960": # Kivalina city + 2026-10-01: 6 +"40400": # Klawock city + 2026-10-01: 5 +"40510": # Klukwan CDP + 2026-10-01: 5 +"40645": # Knik-Fairview CDP + 2026-10-01: 5 +"40670": # Knik River CDP + 2026-10-01: 5 +"40840": # Kobuk city + 2026-10-01: 8 +"40950": # Kodiak city + 2026-10-01: 6 +"41210": # Kodiak Station CDP + 2026-10-01: 6 +"41280": # Kokhanok CDP + 2026-10-01: 6 +"41500": # Koliganek CDP + 2026-10-01: 6 +"41610": # Kongiganak CDP + 2026-10-01: 6 +"41720": # Kotlik city + 2026-10-01: 6 +"41830": # Kotzebue city + 2026-10-01: 6 +"41940": # Koyuk city + 2026-10-01: 8 +"42050": # Koyukuk city + 2026-10-01: 8 +"42160": # Kupreanof city + 2026-10-01: 5 +"42380": # Kwethluk city + 2026-10-01: 6 +"42490": # Kwigillingok CDP + 2026-10-01: 6 +"42805": # Lake Louise CDP + 2026-10-01: 5 +"42820": # Lake Minchumina CDP + 2026-10-01: 8 +"43040": # Larsen Bay city + 2026-10-01: 6 +"43260": # Lazy Mountain CDP + 2026-10-01: 5 +"43810": # Levelock CDP + 2026-10-01: 6 +"44030": # Lime Village CDP + 2026-10-01: 6 +"44580": # Livengood CDP + 2026-10-01: 8 +"45020": # Loring CDP + 2026-10-01: 5 +"45295": # Lowell Point CDP + 2026-10-01: 6 +"45460": # Lower Kalskag city + 2026-10-01: 6 +"45700": # Lutak CDP + 2026-10-01: 5 +"45790": # McCarthy CDP + 2026-10-01: 5 +"46010": # McGrath city + 2026-10-01: 6 +"46780": # Manley Hot Springs CDP + 2026-10-01: 8 +"46890": # Manokotak city + 2026-10-01: 6 +"47000": # Marshall city + 2026-10-01: 6 +"47735": # Meadow Lakes CDP + 2026-10-01: 5 +"47990": # Mekoryuk city + 2026-10-01: 6 +"48200": # Mendeltna CDP + 2026-10-01: 5 +"48540": # Mentasta Lake CDP + 2026-10-01: 8 +"48590": # Mertarvik CDP + 2026-10-01: 6 +"48870": # Metlakatla CDP + 2026-10-01: 5 +"49200": # Mill Bay CDP + 2026-10-01: 6 +"49530": # Minto CDP + 2026-10-01: 8 +"50080": # Moose Creek CDP + 2026-10-01: 8 +"50190": # Moose Pass CDP + 2026-10-01: 6 +"50800": # Mosquito Lake CDP + 2026-10-01: 5 +"51180": # Mountain Village city + 2026-10-01: 6 +"51455": # Mud Bay CDP + 2026-10-01: 5 +"51960": # Nabesna CDP + 2026-10-01: 5 +"52060": # Naknek CDP + 2026-10-01: 6 +"52210": # Nanwalek CDP + 2026-10-01: 6 +"52390": # Napakiak city + 2026-10-01: 6 +"52720": # Napaskiak city + 2026-10-01: 6 +"52845": # Naukati Bay CDP + 2026-10-01: 5 +"52915": # Nelchina CDP + 2026-10-01: 5 +"52940": # Nelson Lagoon CDP + 2026-10-01: 6 +"53050": # Nenana city + 2026-10-01: 8 +"53270": # Newhalen city + 2026-10-01: 6 +"53710": # New Stuyahok city + 2026-10-01: 6 +"53820": # Newtok CDP + 2026-10-01: 6 +"53930": # Nightmute city + 2026-10-01: 6 +"54050": # Nikiski CDP + 2026-10-01: 6 +"54085": # Nikolaevsk CDP + 2026-10-01: 6 +"54150": # Nikolai city + 2026-10-01: 6 +"54260": # Nikolski CDP + 2026-10-01: 6 +"54480": # Ninilchik CDP + 2026-10-01: 6 +"54700": # Noatak CDP + 2026-10-01: 6 +"54920": # Nome city + 2026-10-01: 6 +"55030": # Nondalton city + 2026-10-01: 6 +"55140": # Noorvik city + 2026-10-01: 6 +"55745": # North Lakes CDP + 2026-10-01: 5 +"55910": # North Pole city + 2026-10-01: 8 +"56220": # Northway CDP + 2026-10-01: 8 +"56320": # Nuiqsut city + 2026-10-01: 6 +"56350": # Nulato city + 2026-10-01: 8 +"56600": # Nunam Iqua city + 2026-10-01: 6 +"56680": # Nunapitchuk city + 2026-10-01: 6 +"57340": # Old Harbor city + 2026-10-01: 6 +"58330": # Oscarville CDP + 2026-10-01: 6 +"58550": # Ouzinkie city + 2026-10-01: 6 +"58660": # Palmer city + 2026-10-01: 5 +"59320": # Paxson CDP + 2026-10-01: 5 +"59540": # Pedro Bay CDP + 2026-10-01: 6 +"59650": # Pelican city + 2026-10-01: 5 +"60200": # Perryville CDP + 2026-10-01: 6 +"60310": # Petersburg CDP + 2026-10-01: 5 +"60460": # Petersville CDP + 2026-10-01: 5 +"60640": # Pilot Point city + 2026-10-01: 6 +"60750": # Pilot Station city + 2026-10-01: 6 +"60860": # Pitkas Point CDP + 2026-10-01: 6 +"61080": # Platinum city + 2026-10-01: 6 +"61120": # Pleasant Valley CDP + 2026-10-01: 8 +"61190": # Point Baker CDP + 2026-10-01: 5 +"61630": # Point Hope city + 2026-10-01: 6 +"61700": # Point Lay CDP + 2026-10-01: 6 +"61788": # Point MacKenzie CDP + 2026-10-01: 5 +"61825": # Point Possession CDP + 2026-10-01: 6 +"62125": # Pope-Vannoy Landing CDP + 2026-10-01: 6 +"62285": # Portage Creek CDP + 2026-10-01: 6 +"62510": # Port Alexander city + 2026-10-01: 5 +"62620": # Port Alsworth CDP + 2026-10-01: 6 +"63170": # Port Clarence CDP + 2026-10-01: 6 +"63280": # Port Graham CDP + 2026-10-01: 6 +"63390": # Port Heiden city + 2026-10-01: 6 +"63610": # Port Lions city + 2026-10-01: 6 +"63870": # Port Protection CDP + 2026-10-01: 5 +"64240": # Primrose CDP + 2026-10-01: 6 +"64380": # Prudhoe Bay CDP + 2026-10-01: 6 +"64600": # Quinhagak city + 2026-10-01: 6 +"64820": # Rampart CDP + 2026-10-01: 8 +"64930": # Red Devil CDP + 2026-10-01: 6 +"64980": # Red Dog Mine CDP + 2026-10-01: 6 +"65345": # Ridgeway CDP + 2026-10-01: 6 +"65590": # Ruby city + 2026-10-01: 8 +"65700": # Russian Mission city + 2026-10-01: 6 +"65800": # St. George city + 2026-10-01: 6 +"66140": # St. Mary's city + 2026-10-01: 6 +"66360": # St. Michael city + 2026-10-01: 6 +"66470": # St. Paul city + 2026-10-01: 6 +"66510": # Salamatof CDP + 2026-10-01: 6 +"66550": # Salcha CDP + 2026-10-01: 8 +"67020": # Sand Point city + 2026-10-01: 6 +"67460": # Savoonga city + 2026-10-01: 6 +"67570": # Saxman city + 2026-10-01: 5 +"67680": # Scammon Bay city + 2026-10-01: 6 +"68230": # Selawik city + 2026-10-01: 6 +"68340": # Seldovia city + 2026-10-01: 6 +"68370": # Seldovia Village CDP + 2026-10-01: 6 +"68560": # Seward city + 2026-10-01: 6 +"68670": # Shageluk city + 2026-10-01: 6 +"68890": # Shaktoolik city + 2026-10-01: 6 +"69770": # Shishmaref city + 2026-10-01: 6 +"70100": # Shungnak city + 2026-10-01: 6 +"70320": # Silver Springs CDP + 2026-10-01: 5 +"70540": # Sitka city and borough + 2026-10-01: 5 +"70760": # Skagway CDP + 2026-10-01: 5 +"70870": # Skwentna CDP + 2026-10-01: 5 +"70930": # Slana CDP + 2026-10-01: 5 +"71090": # Sleetmute CDP + 2026-10-01: 6 +"71640": # Soldotna city + 2026-10-01: 6 +"72135": # South Lakes CDP + 2026-10-01: 5 +"72190": # South Naknek CDP + 2026-10-01: 6 +"72230": # South Van Horn CDP + 2026-10-01: 8 +"72960": # Stebbins city + 2026-10-01: 6 +"72985": # Steele Creek CDP + 2026-10-01: 8 +"73070": # Sterling CDP + 2026-10-01: 6 +"73290": # Stevens Village CDP + 2026-10-01: 8 +"73400": # Stony River CDP + 2026-10-01: 6 +"73950": # Sunrise CDP + 2026-10-01: 5 +"74340": # Susitna CDP + 2026-10-01: 5 +"74350": # Susitna North CDP + 2026-10-01: 5 +"74525": # Sutton-Alpine CDP + 2026-10-01: 5 +"74610": # Takotna CDP + 2026-10-01: 6 +"74830": # Talkeetna CDP + 2026-10-01: 5 +"75050": # Tanacross CDP + 2026-10-01: 8 +"75077": # Tanaina CDP + 2026-10-01: 5 +"75160": # Tanana city + 2026-10-01: 8 +"75380": # Tatitlek CDP + 2026-10-01: 5 +"75480": # Tazlina CDP + 2026-10-01: 5 +"75930": # Teller city + 2026-10-01: 6 +"76260": # Tenakee Springs city + 2026-10-01: 5 +"76590": # Tetlin CDP + 2026-10-01: 8 +"77140": # Thorne Bay city + 2026-10-01: 5 +"77690": # Togiak city + 2026-10-01: 6 +"77800": # Tok CDP + 2026-10-01: 8 +"78240": # Toksook Bay city + 2026-10-01: 6 +"78297": # Tolsona CDP + 2026-10-01: 5 +"78350": # Tonsina CDP + 2026-10-01: 5 +"78680": # Trapper Creek CDP + 2026-10-01: 5 +"78790": # Tuluksak CDP + 2026-10-01: 6 +"79120": # Tuntutuliak CDP + 2026-10-01: 6 +"79230": # Tununak CDP + 2026-10-01: 6 +"79780": # Twin Hills CDP + 2026-10-01: 6 +"79830": # Two Rivers CDP + 2026-10-01: 8 +"79890": # Tyonek CDP + 2026-10-01: 6 +"80100": # Ugashik CDP + 2026-10-01: 6 +"80660": # Unalakleet city + 2026-10-01: 6 +"80770": # Unalaska city + 2026-10-01: 6 +"81320": # Upper Kalskag city + 2026-10-01: 6 +"81920": # Utqiaġvik city + 2026-10-01: 6 +"82200": # Valdez city + 2026-10-01: 5 +"82420": # Venetie CDP + 2026-10-01: 8 +"82750": # Wainwright city + 2026-10-01: 6 +"82860": # Wales city + 2026-10-01: 6 +"83080": # Wasilla city + 2026-10-01: 5 +"84000": # Whale Pass city + 2026-10-01: 5 +"84070": # White Mountain city + 2026-10-01: 6 +"84120": # Whitestone CDP + 2026-10-01: 8 +"84200": # Whitestone Logging Camp CDP + 2026-10-01: 5 +"84510": # Whittier city + 2026-10-01: 5 +"85280": # Willow CDP + 2026-10-01: 5 +"85290": # Willow Creek CDP + 2026-10-01: 5 +"85610": # Wiseman CDP + 2026-10-01: 8 +"85680": # Womens Bay CDP + 2026-10-01: 6 +"86380": # Wrangell city and borough + 2026-10-01: 5 +"86490": # Yakutat CDP + 2026-10-01: 5 +UNAVAILABLE: + 2026-10-01: 0 + +metadata: + unit: /1 + period: year + label: Alaska HAP natural gas community heating points + reference: + - title: Alaska HAP Manual Addendum A, FFY2027 Community Listing + href: http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm + - title: Alaska HAP Manual 3004-5, Step 1 nearest gas community rule + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm + - title: Census 2025 Alaska Places Gazetteer + href: https://www2.census.gov/geo/docs/maps-data/data/gazetteer/2025_Gazetteer/2025_gaz_place_02.txt + - title: "Alaska DEC Cook Inlet Community Profiles #page 11,19,27,29,34,54,89" + href: https://dec.alaska.gov/media/8211/ciscp-b-resources.pdf#page=11 diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/oil.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/oil.yaml new file mode 100644 index 00000000000..85774458cfb --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/oil.yaml @@ -0,0 +1,739 @@ +description: Alaska assigns these oil heating points by Census place under the Heating Assistance Program. +# Derived place crosswalk: 279 direct Addendum A matches, 4 ZIP-code +# assignments and 72 nearest-community approximations. Direct matches include +# spelling variants such as Adak (Station), Chenega Bay, Kalskag (lower/upper), +# Eilson AFB, Harding Lake and Saint for St., and give the Anchorage +# municipality the Anchorage value of 8 (Chugiak, listed at 7, lies inside it). +# Four places take the points of the main community Addendum A lists for their +# ZIP code: Chena Ridge and Goldstream (ZIP 99709, College, 10) and Covenant +# Life and Mosquito Lake (ZIP 99827, Haines, 6; Addendum A also lists +# Excursion Inlet and Klukwan under 99827). Every other place takes the points +# of the nearest listed oil community by great-circle distance between Census +# internal points. This is not a state-issued crosswalk. Values follow the FY2027 +# Addendum A, except Loring (5) and Tetlin (16), which follow Appendix A to +# 7 AAC 44 under 7 AAC 44.080(a); Addendum A lists them at 4 and 12. +"00065": # Adak city + 2026-10-01: 6 +"00650": # Akhiok city + 2026-10-01: 8 +"00760": # Akiachak CDP + 2026-10-01: 21 +"00870": # Akiak city + 2026-10-01: 21 +"01090": # Akutan city + 2026-10-01: 11 +"01200": # Alakanuk city + 2026-10-01: 21 +"01305": # Alatna CDP + 2026-10-01: 27 +"01390": # Alcan Border CDP + 2026-10-01: 12 +"01420": # Aleknagik city + 2026-10-01: 13 +"01560": # Aleneva CDP + 2026-10-01: 8 +"01860": # Allakaket city + 2026-10-01: 27 +"01970": # Ambler city + 2026-10-01: 35 +"02080": # Anaktuvuk Pass city + 2026-10-01: 16 +"03000": # Anchorage municipality + 2026-10-01: 8 +"03110": # Anchor Point CDP + 2026-10-01: 6 +"03220": # Anderson city + 2026-10-01: 11 +"03440": # Angoon city + 2026-10-01: 8 +"03550": # Aniak city + 2026-10-01: 21 +"03880": # Anvik city + 2026-10-01: 19 +"03990": # Arctic Village CDP + 2026-10-01: 32 +"04210": # Atka city + 2026-10-01: 6 +"04430": # Atmautluak CDP + 2026-10-01: 19 +"04500": # Atqasuk city + 2026-10-01: 24 +"04670": # Attu Station CDP + 2026-10-01: 6 +"05000": # Badger CDP + 2026-10-01: 11 +"05585": # Bear Creek CDP + 2026-10-01: 6 +"05750": # Beaver CDP + 2026-10-01: 24 +"06245": # Beluga CDP + 2026-10-01: 7 +"06520": # Bethel city + 2026-10-01: 16 +"06630": # Bettles city + 2026-10-01: 29 +"06850": # Big Delta CDP + 2026-10-01: 11 +"07070": # Big Lake CDP + 2026-10-01: 7 +"07620": # Birch Creek CDP + 2026-10-01: 27 +"08740": # Brevig Mission city + 2026-10-01: 23 +"09600": # Buckland city + 2026-10-01: 33 +"09657": # Buffalo Soapstone CDP + 2026-10-01: 7 +"09710": # Butte CDP + 2026-10-01: 7 +"10150": # Cantwell CDP + 2026-10-01: 11 +"11690": # Central CDP + 2026-10-01: 23 +"11800": # Chalkyitsik CDP + 2026-10-01: 28 +"12350": # Chase CDP + 2026-10-01: 8 +"12680": # Chefornak city + 2026-10-01: 20 +"12920": # Chena Ridge CDP + 2026-10-01: 10 +"12970": # Chenega CDP + 2026-10-01: 8 +"13230": # Chevak city + 2026-10-01: 25 +"13340": # Chickaloon CDP + 2026-10-01: 8 +"13450": # Chicken CDP + 2026-10-01: 19 +"13550": # Chignik city + 2026-10-01: 9 +"13670": # Chignik Lagoon CDP + 2026-10-01: 9 +"13780": # Chignik Lake CDP + 2026-10-01: 9 +"13860": # Chiniak CDP + 2026-10-01: 6 +"13890": # Chisana CDP + 2026-10-01: 11 +"14000": # Chistochina CDP + 2026-10-01: 12 +"14110": # Chitina CDP + 2026-10-01: 11 +"14330": # Chuathbaluk city + 2026-10-01: 21 +"14880": # Circle CDP + 2026-10-01: 23 +"15320": # Clam Gulch CDP + 2026-10-01: 7 +"15430": # Clark's Point city + 2026-10-01: 16 +"16360": # Coffman Cove city + 2026-10-01: 6 +"16420": # Cohoe CDP + 2026-10-01: 7 +"16530": # Cold Bay city + 2026-10-01: 11 +"16630": # Coldfoot CDP + 2026-10-01: 19 +"16750": # College CDP + 2026-10-01: 10 +"17190": # Cooper Landing CDP + 2026-10-01: 9 +"17300": # Copper Center CDP + 2026-10-01: 11 +"17410": # Cordova city + 2026-10-01: 7 +"17670": # Covenant Life CDP + 2026-10-01: 6 +"17740": # Craig city + 2026-10-01: 5 +"17850": # Crooked Creek CDP + 2026-10-01: 26 +"17960": # Crown Point CDP + 2026-10-01: 6 +"18510": # Deering city + 2026-10-01: 31 +"18620": # Delta Junction city + 2026-10-01: 11 +"18675": # Deltana CDP + 2026-10-01: 11 +"18805": # Denali Park CDP + 2026-10-01: 10 +"18925": # Diamond Ridge CDP + 2026-10-01: 7 +"18950": # Dillingham city + 2026-10-01: 11 +"19060": # Diomede city + 2026-10-01: 27 +"19720": # Dot Lake CDP + 2026-10-01: 12 +"19750": # Dot Lake Village CDP + 2026-10-01: 12 +"20020": # Dry Creek CDP + 2026-10-01: 12 +"20380": # Eagle city + 2026-10-01: 19 +"20600": # Eagle Village CDP + 2026-10-01: 19 +"20716": # Eareckson Station CDP + 2026-10-01: 6 +"20970": # Edna Bay city + 2026-10-01: 11 +"21040": # Eek city + 2026-10-01: 22 +"21150": # Egegik city + 2026-10-01: 15 +"21370": # Eielson AFB CDP + 2026-10-01: 11 +"21810": # Ekwok city + 2026-10-01: 14 +"22140": # Elfin Cove CDP + 2026-10-01: 6 +"22250": # Elim city + 2026-10-01: 26 +"22910": # Emmonak city + 2026-10-01: 24 +"23460": # Ester CDP + 2026-10-01: 11 +"23720": # Eureka Roadhouse CDP + 2026-10-01: 8 +"23790": # Evansville CDP + 2026-10-01: 29 +"23900": # Excursion Inlet CDP + 2026-10-01: 7 +"24230": # Fairbanks city + 2026-10-01: 10 +"24660": # False Pass city + 2026-10-01: 11 +"24980": # Farmers Loop CDP + 2026-10-01: 10 +"25000": # Farm Loop CDP + 2026-10-01: 7 +"25220": # Ferry CDP + 2026-10-01: 10 +"25550": # Fishhook CDP + 2026-10-01: 7 +"25880": # Flat CDP + 2026-10-01: 26 +"26100": # Fort Greely CDP + 2026-10-01: 11 +"26760": # Fort Yukon city + 2026-10-01: 23 +"26835": # Four Mile Road CDP + 2026-10-01: 11 +"26870": # Fox CDP + 2026-10-01: 11 +"26910": # Fox River CDP + 2026-10-01: 7 +"27090": # Fritz Creek CDP + 2026-10-01: 7 +"27145": # Funny River CDP + 2026-10-01: 9 +"27420": # Gakona CDP + 2026-10-01: 11 +"27530": # Galena city + 2026-10-01: 20 +"27640": # Gambell city + 2026-10-01: 27 +"27700": # Game Creek CDP + 2026-10-01: 7 +"28200": # Gateway CDP + 2026-10-01: 7 +"28590": # Glacier View CDP + 2026-10-01: 8 +"28740": # Glennallen CDP + 2026-10-01: 11 +"29130": # Goldstream CDP + 2026-10-01: 10 +"29180": # Golovin city + 2026-10-01: 26 +"29290": # Goodnews Bay city + 2026-10-01: 20 +"30060": # Grayling city + 2026-10-01: 22 +"30500": # Gulkana CDP + 2026-10-01: 11 +"30940": # Gustavus city + 2026-10-01: 6 +"31050": # Haines CDP + 2026-10-01: 6 +"31270": # Halibut Cove CDP + 2026-10-01: 7 +"31710": # Happy Valley CDP + 2026-10-01: 6 +"31765": # Harding-Birch Lakes CDP + 2026-10-01: 11 +"32150": # Healy CDP + 2026-10-01: 10 +"32310": # Healy Lake CDP + 2026-10-01: 13 +"32550": # Hobart Bay CDP + 2026-10-01: 6 +"32810": # Hollis CDP + 2026-10-01: 5 +"33030": # Holy Cross city + 2026-10-01: 21 +"33140": # Homer city + 2026-10-01: 7 +"33360": # Hoonah city + 2026-10-01: 7 +"33470": # Hooper Bay city + 2026-10-01: 25 +"33580": # Hope CDP + 2026-10-01: 7 +"33800": # Houston city + 2026-10-01: 7 +"33910": # Hughes city + 2026-10-01: 33 +"34350": # Huslia city + 2026-10-01: 30 +"34460": # Hydaburg city + 2026-10-01: 5 +"34570": # Hyder CDP + 2026-10-01: 4 +"34790": # Igiugig CDP + 2026-10-01: 12 +"35120": # Iliamna CDP + 2026-10-01: 19 +"35890": # Ivanof Bay CDP + 2026-10-01: 12 +"36400": # Juneau city and borough + 2026-10-01: 5 +"36540": # Kachemak city + 2026-10-01: 7 +"36770": # Kake city + 2026-10-01: 6 +"36990": # Kaktovik city + 2026-10-01: 24 +"37250": # Kalifornsky CDP + 2026-10-01: 9 +"37430": # Kaltag city + 2026-10-01: 22 +"37540": # Karluk CDP + 2026-10-01: 10 +"37650": # Kasaan city + 2026-10-01: 5 +"37975": # Kasigluk CDP + 2026-10-01: 19 +"38090": # Kasilof CDP + 2026-10-01: 7 +"38420": # Kenai city + 2026-10-01: 8 +"38910": # Kenny Lake CDP + 2026-10-01: 11 +"38970": # Ketchikan city + 2026-10-01: 4 +"39300": # Kiana city + 2026-10-01: 26 +"39410": # King Cove city + 2026-10-01: 11 +"39630": # King Salmon CDP + 2026-10-01: 13 +"39740": # Kipnuk CDP + 2026-10-01: 20 +"39960": # Kivalina city + 2026-10-01: 28 +"40400": # Klawock city + 2026-10-01: 5 +"40510": # Klukwan CDP + 2026-10-01: 8 +"40645": # Knik-Fairview CDP + 2026-10-01: 7 +"40670": # Knik River CDP + 2026-10-01: 7 +"40840": # Kobuk city + 2026-10-01: 35 +"40950": # Kodiak city + 2026-10-01: 6 +"41210": # Kodiak Station CDP + 2026-10-01: 6 +"41280": # Kokhanok CDP + 2026-10-01: 19 +"41500": # Koliganek CDP + 2026-10-01: 16 +"41610": # Kongiganak CDP + 2026-10-01: 22 +"41720": # Kotlik city + 2026-10-01: 24 +"41830": # Kotzebue city + 2026-10-01: 21 +"41940": # Koyuk city + 2026-10-01: 25 +"42050": # Koyukuk city + 2026-10-01: 20 +"42160": # Kupreanof city + 2026-10-01: 5 +"42380": # Kwethluk city + 2026-10-01: 20 +"42490": # Kwigillingok CDP + 2026-10-01: 22 +"42805": # Lake Louise CDP + 2026-10-01: 11 +"42820": # Lake Minchumina CDP + 2026-10-01: 27 +"43040": # Larsen Bay city + 2026-10-01: 7 +"43260": # Lazy Mountain CDP + 2026-10-01: 7 +"43810": # Levelock CDP + 2026-10-01: 12 +"44030": # Lime Village CDP + 2026-10-01: 26 +"44580": # Livengood CDP + 2026-10-01: 14 +"45020": # Loring CDP + 2026-10-01: 5 +"45295": # Lowell Point CDP + 2026-10-01: 6 +"45460": # Lower Kalskag city + 2026-10-01: 23 +"45700": # Lutak CDP + 2026-10-01: 8 +"45790": # McCarthy CDP + 2026-10-01: 11 +"46010": # McGrath city + 2026-10-01: 22 +"46780": # Manley Hot Springs CDP + 2026-10-01: 13 +"46890": # Manokotak city + 2026-10-01: 16 +"47000": # Marshall city + 2026-10-01: 25 +"47735": # Meadow Lakes CDP + 2026-10-01: 7 +"47990": # Mekoryuk city + 2026-10-01: 21 +"48200": # Mendeltna CDP + 2026-10-01: 11 +"48540": # Mentasta Lake CDP + 2026-10-01: 12 +"48590": # Mertarvik CDP + 2026-10-01: 25 +"48870": # Metlakatla CDP + 2026-10-01: 6 +"49200": # Mill Bay CDP + 2026-10-01: 6 +"49530": # Minto CDP + 2026-10-01: 16 +"50080": # Moose Creek CDP + 2026-10-01: 11 +"50190": # Moose Pass CDP + 2026-10-01: 6 +"50800": # Mosquito Lake CDP + 2026-10-01: 6 +"51180": # Mountain Village city + 2026-10-01: 25 +"51455": # Mud Bay CDP + 2026-10-01: 6 +"51960": # Nabesna CDP + 2026-10-01: 12 +"52060": # Naknek CDP + 2026-10-01: 13 +# Addendum A also lists English Bay, the same village, at 19. +"52210": # Nanwalek CDP + 2026-10-01: 8 +"52390": # Napakiak city + 2026-10-01: 11 +"52720": # Napaskiak city + 2026-10-01: 20 +"52845": # Naukati Bay CDP + 2026-10-01: 6 +"52915": # Nelchina CDP + 2026-10-01: 11 +"52940": # Nelson Lagoon CDP + 2026-10-01: 8 +"53050": # Nenana city + 2026-10-01: 11 +"53270": # Newhalen city + 2026-10-01: 19 +"53710": # New Stuyahok city + 2026-10-01: 16 +"53820": # Newtok CDP + 2026-10-01: 25 +"53930": # Nightmute city + 2026-10-01: 21 +"54050": # Nikiski CDP + 2026-10-01: 7 +"54085": # Nikolaevsk CDP + 2026-10-01: 6 +"54150": # Nikolai city + 2026-10-01: 27 +"54260": # Nikolski CDP + 2026-10-01: 6 +"54480": # Ninilchik CDP + 2026-10-01: 8 +"54700": # Noatak CDP + 2026-10-01: 32 +"54920": # Nome city + 2026-10-01: 17 +"55030": # Nondalton city + 2026-10-01: 19 +"55140": # Noorvik city + 2026-10-01: 26 +"55745": # North Lakes CDP + 2026-10-01: 7 +"55910": # North Pole city + 2026-10-01: 11 +"56220": # Northway CDP + 2026-10-01: 12 +"56320": # Nuiqsut city + 2026-10-01: 20 +"56350": # Nulato city + 2026-10-01: 24 +"56600": # Nunam Iqua city + 2026-10-01: 24 +"56680": # Nunapitchuk city + 2026-10-01: 19 +"57340": # Old Harbor city + 2026-10-01: 7 +"58330": # Oscarville CDP + 2026-10-01: 20 +"58550": # Ouzinkie city + 2026-10-01: 6 +"58660": # Palmer city + 2026-10-01: 7 +"59320": # Paxson CDP + 2026-10-01: 12 +"59540": # Pedro Bay CDP + 2026-10-01: 19 +"59650": # Pelican city + 2026-10-01: 7 +"60200": # Perryville CDP + 2026-10-01: 9 +"60310": # Petersburg CDP + 2026-10-01: 5 +"60460": # Petersville CDP + 2026-10-01: 8 +"60640": # Pilot Point city + 2026-10-01: 12 +"60750": # Pilot Station city + 2026-10-01: 25 +"60860": # Pitkas Point CDP + 2026-10-01: 25 +"61080": # Platinum city + 2026-10-01: 20 +"61120": # Pleasant Valley CDP + 2026-10-01: 11 +"61190": # Point Baker CDP + 2026-10-01: 11 +"61630": # Point Hope city + 2026-10-01: 23 +"61700": # Point Lay CDP + 2026-10-01: 18 +"61788": # Point MacKenzie CDP + 2026-10-01: 7 +"61825": # Point Possession CDP + 2026-10-01: 7 +"62125": # Pope-Vannoy Landing CDP + 2026-10-01: 19 +"62285": # Portage Creek CDP + 2026-10-01: 14 +"62510": # Port Alexander city + 2026-10-01: 11 +"62620": # Port Alsworth CDP + 2026-10-01: 19 +"63170": # Port Clarence CDP + 2026-10-01: 23 +"63280": # Port Graham CDP + 2026-10-01: 8 +"63390": # Port Heiden city + 2026-10-01: 12 +"63610": # Port Lions city + 2026-10-01: 8 +"63870": # Port Protection CDP + 2026-10-01: 11 +"64240": # Primrose CDP + 2026-10-01: 6 +"64380": # Prudhoe Bay CDP + 2026-10-01: 20 +"64600": # Quinhagak city + 2026-10-01: 20 +"64820": # Rampart CDP + 2026-10-01: 20 +"64930": # Red Devil CDP + 2026-10-01: 26 +"64980": # Red Dog Mine CDP + 2026-10-01: 32 +"65345": # Ridgeway CDP + 2026-10-01: 9 +"65590": # Ruby city + 2026-10-01: 19 +"65700": # Russian Mission city + 2026-10-01: 25 +"65800": # St. George city + 2026-10-01: 11 +"66140": # St. Mary's city + 2026-10-01: 25 +"66360": # St. Michael city + 2026-10-01: 23 +"66470": # St. Paul city + 2026-10-01: 11 +"66510": # Salamatof CDP + 2026-10-01: 8 +"66550": # Salcha CDP + 2026-10-01: 11 +"67020": # Sand Point city + 2026-10-01: 8 +"67460": # Savoonga city + 2026-10-01: 27 +"67570": # Saxman city + 2026-10-01: 4 +"67680": # Scammon Bay city + 2026-10-01: 22 +"68230": # Selawik city + 2026-10-01: 29 +"68340": # Seldovia city + 2026-10-01: 9 +"68370": # Seldovia Village CDP + 2026-10-01: 9 +"68560": # Seward city + 2026-10-01: 6 +"68670": # Shageluk city + 2026-10-01: 24 +"68890": # Shaktoolik city + 2026-10-01: 21 +"69770": # Shishmaref city + 2026-10-01: 29 +"70100": # Shungnak city + 2026-10-01: 35 +"70320": # Silver Springs CDP + 2026-10-01: 11 +"70540": # Sitka city and borough + 2026-10-01: 6 +"70760": # Skagway CDP + 2026-10-01: 8 +"70870": # Skwentna CDP + 2026-10-01: 11 +"70930": # Slana CDP + 2026-10-01: 12 +"71090": # Sleetmute CDP + 2026-10-01: 26 +"71640": # Soldotna city + 2026-10-01: 9 +"72135": # South Lakes CDP + 2026-10-01: 7 +"72190": # South Naknek CDP + 2026-10-01: 13 +"72230": # South Van Horn CDP + 2026-10-01: 10 +"72960": # Stebbins city + 2026-10-01: 21 +"72985": # Steele Creek CDP + 2026-10-01: 11 +"73070": # Sterling CDP + 2026-10-01: 9 +"73290": # Stevens Village CDP + 2026-10-01: 23 +"73400": # Stony River CDP + 2026-10-01: 26 +"73950": # Sunrise CDP + 2026-10-01: 7 +"74340": # Susitna CDP + 2026-10-01: 10 +"74350": # Susitna North CDP + 2026-10-01: 8 +"74525": # Sutton-Alpine CDP + 2026-10-01: 7 +"74610": # Takotna CDP + 2026-10-01: 20 +"74830": # Talkeetna CDP + 2026-10-01: 8 +"75050": # Tanacross CDP + 2026-10-01: 12 +"75077": # Tanaina CDP + 2026-10-01: 7 +"75160": # Tanana city + 2026-10-01: 20 +"75380": # Tatitlek CDP + 2026-10-01: 11 +"75480": # Tazlina CDP + 2026-10-01: 11 +"75930": # Teller city + 2026-10-01: 23 +"76260": # Tenakee Springs city + 2026-10-01: 7 +"76590": # Tetlin CDP + 2026-10-01: 16 +"77140": # Thorne Bay city + 2026-10-01: 5 +"77690": # Togiak city + 2026-10-01: 17 +"77800": # Tok CDP + 2026-10-01: 12 +"78240": # Toksook Bay city + 2026-10-01: 21 +"78297": # Tolsona CDP + 2026-10-01: 11 +"78350": # Tonsina CDP + 2026-10-01: 11 +"78680": # Trapper Creek CDP + 2026-10-01: 8 +"78790": # Tuluksak CDP + 2026-10-01: 21 +"79120": # Tuntutuliak CDP + 2026-10-01: 20 +"79230": # Tununak CDP + 2026-10-01: 20 +"79780": # Twin Hills CDP + 2026-10-01: 17 +"79830": # Two Rivers CDP + 2026-10-01: 11 +"79890": # Tyonek CDP + 2026-10-01: 7 +"80100": # Ugashik CDP + 2026-10-01: 12 +"80660": # Unalakleet city + 2026-10-01: 21 +"80770": # Unalaska city + 2026-10-01: 6 +"81320": # Upper Kalskag city + 2026-10-01: 23 +"81920": # Utqiaġvik city + 2026-10-01: 21 +"82200": # Valdez city + 2026-10-01: 8 +"82420": # Venetie CDP + 2026-10-01: 23 +"82750": # Wainwright city + 2026-10-01: 21 +"82860": # Wales city + 2026-10-01: 27 +"83080": # Wasilla city + 2026-10-01: 7 +"84000": # Whale Pass city + 2026-10-01: 6 +"84070": # White Mountain city + 2026-10-01: 26 +"84120": # Whitestone CDP + 2026-10-01: 11 +"84200": # Whitestone Logging Camp CDP + 2026-10-01: 7 +"84510": # Whittier city + 2026-10-01: 8 +"85280": # Willow CDP + 2026-10-01: 7 +"85290": # Willow Creek CDP + 2026-10-01: 11 +"85610": # Wiseman CDP + 2026-10-01: 19 +"85680": # Womens Bay CDP + 2026-10-01: 6 +"86380": # Wrangell city and borough + 2026-10-01: 5 +"86490": # Yakutat CDP + 2026-10-01: 6 +UNAVAILABLE: + 2026-10-01: 0 + +metadata: + unit: /1 + period: year + label: Alaska HAP oil community heating points + reference: + - title: 7 AAC 44.080(a) and Appendix A to 7 AAC 44 + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual Addendum A, FFY2027 Community Listing + href: http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm + - title: Census 2025 Alaska Places Gazetteer + href: https://www2.census.gov/geo/docs/maps-data/data/gazetteer/2025_Gazetteer/2025_gaz_place_02.txt diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/dwelling_factor.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/dwelling_factor.yaml new file mode 100644 index 00000000000..b663ac4d854 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/dwelling_factor.yaml @@ -0,0 +1,27 @@ +description: Alaska applies these heating point factors by dwelling type under the Heating Assistance Program. +LARGE_MOBILE_HOME_OR_BOAT: + 2026-10-01: 1.4 +RV_TENT_OR_CAMPER: + 2026-10-01: 0.4 +STUDIO_HOTEL_OR_BOARDING_ROOM: + 2026-10-01: 0.15 +SMALL_BOAT: + 2026-10-01: 0.35 +ONE_BEDROOM_OR_ONE_ROOM_HOUSE: + 2026-10-01: 0.55 +THREE_PLUS_BEDROOM_HOUSE: + 2026-10-01: 1.3 +TWO_BEDROOM_LARGE_APARTMENT_OR_SMALL_MOBILE: + 2026-10-01: 0.7 +TWO_BEDROOM_HOUSE: + 2026-10-01: 1 + +metadata: + unit: /1 + period: year + label: Alaska HAP dwelling heating point factor + breakdown: + - ak_hap_dwelling_type + reference: + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/elderly_age.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/elderly_age.yaml new file mode 100644 index 00000000000..dd55a70110d --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/elderly_age.yaml @@ -0,0 +1,11 @@ +description: Alaska treats people at least this age as elderly under the Heating Assistance Program. +values: + 2026-10-01: 60 + +metadata: + unit: year + period: year + label: Alaska HAP elderly age + reference: + - title: Alaska HAP Manual 3000-2, Elderly + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3000/3000-2_definitions.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_points.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_points.yaml new file mode 100644 index 00000000000..ce147f3dd86 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_points.yaml @@ -0,0 +1,11 @@ +description: Alaska limits rounded heating points to this amount under the Heating Assistance Program. +values: + 2026-10-01: 35 + +metadata: + unit: /1 + period: year + label: Alaska HAP maximum heating points + reference: + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_shared_household_share.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_shared_household_share.yaml new file mode 100644 index 00000000000..8ddbd36f9fd --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_shared_household_share.yaml @@ -0,0 +1,21 @@ +description: Alaska limits a household sharing its dwelling to this share of its heating points under the Heating Assistance Program. +# 7 AAC 44.080(h) reduces a sharing household's points to its proportionate +# share of the dwelling's home heating expenses, which include heat paid +# through rent (7 AAC 44.900(11)). The heat portion of rent cannot be +# measured, so manual 3002-1 A.5 fills the gap: each eligible household paying +# heat through rent gets an equal share among the dwelling's eligible +# households, at most this share, and households reporting heating bills split +# the remainder in proportion to their bills. When no household reports a +# bill, each household gets the equal share. +values: + 2026-10-01: 0.5 + +metadata: + unit: /1 + period: year + label: Alaska HAP maximum shared household share + reference: + - title: Alaska HAP Manual 3002-1 A.5, Housing Percent Share + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm + - title: 7 AAC 44.080(h) and 44.900(11) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/military_base_places.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/military_base_places.yaml new file mode 100644 index 00000000000..ba898ba341b --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/military_base_places.yaml @@ -0,0 +1,24 @@ +description: Alaska excludes residents of these military base Census places under the Heating Assistance Program. +# Census delineates Eielson AFB CDP (21370) and Fort Greely CDP (26100) from +# the installations themselves, so their residents live on base. Addendum A +# marks both installations 0/USA. Kodiak Station CDP (41210) is the housing +# area of Coast Guard Base Kodiak, and Addendum A says Coast Guard members +# living on base in provided housing do not qualify. Eareckson Station CDP +# (20716) is drawn on Shemya Island around Eareckson Air Station, an Air Force +# installation; Addendum A lists no community there. Elmendorf AFB and Fort Richardson, also +# 0/USA, lie inside the Anchorage municipality with no separate Census place, +# so their residents cannot be identified. +values: + 2026-10-01: ["20716", "21370", "26100", "41210"] + +metadata: + unit: list + period: year + label: Alaska HAP military base places + reference: + - title: 7 AAC 44.040(b)(3)(B) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual Addendum A, FFY2027 Community Listing and symbol key + href: http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm + - title: Census 2025 Alaska Places Gazetteer + href: https://www2.census.gov/geo/docs/maps-data/data/gazetteer/2025_Gazetteer/2025_gaz_place_02.txt diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/minimum_expense.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/minimum_expense.yaml new file mode 100644 index 00000000000..46b12ce4aa5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/minimum_expense.yaml @@ -0,0 +1,11 @@ +description: Alaska requires annual heating expenses to exceed this amount under the Heating Assistance Program. +values: + 2026-10-01: 200 + +metadata: + unit: currency-USD + period: year + label: Alaska HAP annual heating expense threshold + reference: + - title: Alaska HAP Manual 3002-1 A.1, Eligible Household + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/minimum_points.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/minimum_points.yaml new file mode 100644 index 00000000000..255f4584d49 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/minimum_points.yaml @@ -0,0 +1,11 @@ +description: Alaska requires at least this many unrounded heating points under the Heating Assistance Program. +values: + 2026-10-01: 2 + +metadata: + unit: /1 + period: year + label: Alaska HAP minimum heating points + reference: + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/point_value.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/point_value.yaml new file mode 100644 index 00000000000..f7c605d29a6 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/point_value.yaml @@ -0,0 +1,11 @@ +description: Alaska pays this amount per heating point under the federal Heating Assistance Program. +values: + 2026-10-01: 175 + +metadata: + unit: currency-USD + period: year + label: Alaska HAP federal benefit per point + reference: + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/purchased_wood_coal_multiplier.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/purchased_wood_coal_multiplier.yaml new file mode 100644 index 00000000000..6b849712500 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/purchased_wood_coal_multiplier.yaml @@ -0,0 +1,16 @@ +description: Alaska applies this share of community oil heating points for purchased wood or coal under the Heating Assistance Program. +# The model applies this purchased-fuel factor to every WOOD or COAL +# household, since heating_type cannot identify self-harvested fuel or wood +# pellets, whose factors differ under 7 AAC 44.080(c) and (e). +values: + 2026-10-01: 0.8 + +metadata: + unit: /1 + period: year + label: Alaska HAP purchased wood or coal point multiplier + reference: + - title: 7 AAC 44.080(d) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3004-5, Grant Computation, Step 1 + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/tribal_service_places.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/tribal_service_places.yaml new file mode 100644 index 00000000000..ddb32659b2e --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/tribal_service_places.yaml @@ -0,0 +1,21 @@ +description: Alaska excludes all residents of these tribe-served Census places under the Heating Assistance Program. +# Places whose every Addendum A row is marked 0 (the tribe serves all +# residents), matched by Census place name. The 0/USA military bases are in +# military_base_places instead. Approximated places inherit the all-resident +# tribal routing of the community whose oil points they take: the community +# that is the main listing for their ZIP code, or else the nearest listed +# community. +values: + 2026-10-01: ["00760", "00870", "01200", "01305", "01390", "01420", "01860", "03440", "03550", "03880", "03990", "04430", "05750", "06520", "06630", "07620", "11690", "11800", "12680", "13230", "13450", "13550", "13670", "13780", "14330", "14880", "15430", "16630", "17740", "18950", "19720", "19750", "20020", "20380", "20600", "21040", "21150", "21810", "22910", "23790", "26760", "26835", "27530", "27700", "29290", "30060", "32310", "32550", "33030", "33360", "33470", "33910", "34350", "34460", "34790", "35120", "35890", "36770", "37430", "37650", "37975", "39630", "39740", "40400", "40510", "41280", "41500", "41610", "41720", "42050", "42380", "42490", "42820", "43810", "44030", "45460", "45700", "46010", "46780", "46890", "47000", "47990", "48590", "48870", "49530", "51180", "52060", "52390", "52720", "53050", "53270", "53710", "53820", "53930", "54150", "55030", "56220", "56350", "56600", "56680", "58330", "60640", "60750", "60860", "61080", "62125", "62285", "63390", "64600", "64820", "64930", "65590", "65700", "66140", "67570", "67680", "68670", "71090", "72190", "73290", "74610", "75050", "75160", "76590", "77690", "78240", "78790", "79120", "79230", "79780", "80100", "81320", "82420", "84200", "85610", "86490"] + +metadata: + unit: list + period: year + label: Alaska HAP all resident tribal service places + reference: + - title: Alaska HAP Manual Addendum A, FFY2027 Community Listing and symbol key + href: http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm + - title: Alaska HAP Manual 3002-1 A.2, Ineligible Household + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm + - title: Census 2025 Alaska Places Gazetteer + href: https://www2.census.gov/geo/docs/maps-data/data/gazetteer/2025_Gazetteer/2025_gaz_place_02.txt diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/utility_allowance_reduction.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/utility_allowance_reduction.yaml new file mode 100644 index 00000000000..b4f802d8938 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/utility_allowance_reduction.yaml @@ -0,0 +1,16 @@ +description: Alaska deducts this share of heating points for subsidized households that pay heating costs directly under the Heating Assistance Program. +# 7 AAC 44.080(l) halves the points determined under (a)-(k), regardless of +# the allowance amount, before the 2.0-point minimum in (m) and the rounding +# in (n). +values: + 2026-10-01: 0.5 + +metadata: + unit: /1 + period: year + label: Alaska HAP utility allowance point reduction + reference: + - title: 7 AAC 44.080(l) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3004-5, Grant Computation, Step 8 + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/vulnerability_points.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/vulnerability_points.yaml new file mode 100644 index 00000000000..d7a8a64eea9 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/vulnerability_points.yaml @@ -0,0 +1,11 @@ +description: Alaska adds this many heating points for a household with at least one qualified vulnerable member under the Heating Assistance Program. +values: + 2026-10-01: 1 + +metadata: + unit: /1 + period: year + label: Alaska HAP vulnerable household points + reference: + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/fpg_year_lag.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/fpg_year_lag.yaml new file mode 100644 index 00000000000..9fbff890583 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/fpg_year_lag.yaml @@ -0,0 +1,11 @@ +description: Alaska uses federal poverty guidelines from this many years before the modeled heating season under the Heating Assistance Program. +values: + 2026-10-01: 1 + +metadata: + unit: year + period: year + label: Alaska HAP federal poverty guideline year lag + reference: + - title: Alaska HAP Manual Addendum E, FFY2027 Guidelines Based on January 2026 Federal Register Notice + href: http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income/child_earnings_age_limit.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/child_earnings_age_limit.yaml new file mode 100644 index 00000000000..f9d5768d906 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/child_earnings_age_limit.yaml @@ -0,0 +1,13 @@ +description: Alaska excludes wages of full-time students below this age under the Heating Assistance Program. +values: + 2026-10-01: 18 + +metadata: + unit: year + period: year + label: Alaska HAP student earnings exclusion age limit + reference: + - title: 7 AAC 44.042(5) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3003-2 A(15), Earnings of Elementary and Secondary Students Under Age 18 + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-2_noncountable_(exempt)_income.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income/earned_sources.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/earned_sources.yaml new file mode 100644 index 00000000000..4a3fa11b785 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/earned_sources.yaml @@ -0,0 +1,28 @@ +description: Alaska uses these sources to compute countable earned income under the Heating Assistance Program. +# Military basic pay is its own input, outside employment income, and counts +# once here as earned military pay. Business sources are supplied net amounts, +# each floored at zero; manual 3003-4 B deducts 50% of gross self-employment +# income unless actual costs are higher, so these net inputs overstate +# countable income when actual costs are under half of gross. The +# partnership/S corporation aggregate includes its components, which are not +# added separately. +values: + 2026-10-01: + - employment_income + - military_basic_pay + - self_employment_income + - sstb_self_employment_income + - farm_operations_income + - partnership_s_corp_income + +metadata: + unit: list + period: year + label: Alaska HAP countable earned income sources + reference: + - title: Alaska HAP Manual 3003-1 A.1, Wages + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-1_countable_income.htm + - title: Alaska HAP Manual 3003-4 A-D, Income From Self-Employment + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-4_income_from_self-employment.htm + - title: Alaska HAP Manual 3003-5 B.1.a, Military Pay, Countable Income + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-5_military_pay.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income/gift_exemption_threshold.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/gift_exemption_threshold.yaml new file mode 100644 index 00000000000..3deea664db5 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/gift_exemption_threshold.yaml @@ -0,0 +1,15 @@ +description: Alaska excludes cash gifts at or below this monthly amount per person under the Heating Assistance Program. +values: + 2026-10-01: 20 + +metadata: + unit: currency-USD + period: month + label: Alaska HAP monthly cash gift exemption threshold + reference: + - title: 7 AAC 44.042(16) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3003-1 B.6.r, Cash Gifts + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-1_countable_income.htm + - title: Alaska HAP Manual 3003-2 A.24, Cash Gifts + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-2_noncountable_(exempt)_income.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income/student_wage_sources.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/student_wage_sources.yaml new file mode 100644 index 00000000000..ad5c10f559f --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/student_wage_sources.yaml @@ -0,0 +1,17 @@ +description: Alaska exempts these wage sources of a full-time student under 18 who is not the head of household under the Heating Assistance Program. +# 7 AAC 44.042(5) exempts "wages received by a full-time student under 18 +# years of age who is not the head of household". Military basic pay includes +# National Guard and reserve drill pay. A student's business income is not +# wages and still counts. +values: + 2026-10-01: + - employment_income + - military_basic_pay + +metadata: + unit: list + period: year + label: Alaska HAP student exempt wage sources + reference: + - title: 7 AAC 44.042(5) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income/unearned_sources.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/unearned_sources.yaml new file mode 100644 index 00000000000..fa4e6c44ed0 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income/unearned_sources.yaml @@ -0,0 +1,49 @@ +description: Alaska includes these ordinary unearned cash receipts under the Heating Assistance Program. +values: + 2026-10-01: + - social_security + - ssi + - ak_ssp + - pension_income + - military_retirement_income + - retirement_distributions + - railroad_benefits + - survivor_benefits + - veterans_benefits + - disability_benefits + - total_unemployment_compensation + - workers_compensation + - strike_benefits + - alimony_income + - child_support_received + - interest_income + - ordinary_dividend_income + - estate_income + - capital_gains + - gambling_winnings + +# ATAP is added once separately. ak_ssp is Alaska Adult Public Assistance, +# distinct from exempt Senior Benefits. general_assistance stands for State +# General Relief Assistance (7 AAC 38.030), which 7 AAC 44.042(18) exempts, so +# it is not listed. BIA General Assistance paid to the household counts under +# plan 1.9 and manual 3003-1 B.6.o but has no separate input. PFD, Senior +# Benefits, SNAP, in-kind/vendor benefits, tax refunds and balances are excluded. +# Broad VA/compensation inputs lack exempt-subtype detail. Generic dividends +# cannot identify fully exempt ANCSA payments. Estate income excludes separately +# reported interest/dividends/capital gains, avoiding component duplication. +# Education grants, royalties, foster/adoption receipts, excess reimbursements +# and cash utility reimbursements lack the detail required by the manual. +# A HUD utility allowance alone does not establish a cash reimbursement. +# Military basic pay is its own input and counts once, as earned income. +# Combat/work-study/MASST exceptions are unobserved. +metadata: + unit: list + period: year + label: Alaska HAP ordinary unearned income sources + reference: + - title: 7 AAC 44.042 + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3003-1 B, Countable Unearned Income + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-1_countable_income.htm + - title: Alaska HAP Manual 3003-2 A, Non-countable Income + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-2_noncountable_(exempt)_income.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income_factor/factors.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income_factor/factors.yaml new file mode 100644 index 00000000000..2250ea38f01 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income_factor/factors.yaml @@ -0,0 +1,13 @@ +description: Alaska retains these shares of heating points in ascending federal poverty guideline income bands under the federal Heating Assistance Program. +values: + 2026-10-01: [1, 0.9, 0.8, 0.7, 0.6, 0.5] + +metadata: + unit: /1 + period: year + label: Alaska HAP income band point factors + reference: + - title: 7 AAC 44.080(i) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/parameters/gov/states/ak/dpa/hap/income_factor/fpg_rates.yaml b/policyengine_us/parameters/gov/states/ak/dpa/hap/income_factor/fpg_rates.yaml new file mode 100644 index 00000000000..a612ed59839 --- /dev/null +++ b/policyengine_us/parameters/gov/states/ak/dpa/hap/income_factor/fpg_rates.yaml @@ -0,0 +1,13 @@ +description: Alaska assigns heating points using these inclusive upper shares of federal poverty guidelines under the federal Heating Assistance Program. +values: + 2026-10-01: [0.25, 0.5, 0.75, 1, 1.25, 1.5] + +metadata: + unit: /1 + period: year + label: Alaska HAP income band upper FPG rates + reference: + - title: 7 AAC 44.040(a)(4) and 44.080(i) + href: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - title: Alaska HAP Manual 3004-5, Grant Computation + href: http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm diff --git a/policyengine_us/programs.yaml b/policyengine_us/programs.yaml index 1f08310dee2..807b5760412 100644 --- a/policyengine_us/programs.yaml +++ b/policyengine_us/programs.yaml @@ -987,7 +987,7 @@ programs: category: Benefits agency: HHS status: partial - coverage: AR, AL, AZ, DC, GA, Riverside County, MA, FL, IL, IA, IN, KS, KY, MD, MS, NC, ND, NE, NH, NJ, NY, OH, OK, OR, SD, RI, TX, UT, VA, WA, WY + coverage: AK, AR, AL, AZ, DC, GA, Riverside County, MA, FL, IL, IA, IN, KS, KY, MD, MS, NC, ND, NE, NH, NJ, NY, OH, OK, OR, SD, RI, TX, UT, VA, WA, WY state_implementations: - state: AL status: partial @@ -997,6 +997,14 @@ 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: AK + status: partial + name: Alaska HAP + full_name: Alaska Heating Assistance Program + variable: ak_hap + parameter_prefix: gov.states.ak.dpa.hap + verified_years: "2027" + notes: FY2027 regular heating under the federal LIHEAP component (not the state-funded AAHP), with shared-dwelling and utility-allowance reductions applied to heating points as 7 AAC 44.080 directs. Crisis, cooling, weatherization and equipment assistance are out of scope. - state: AR status: partial name: Arkansas LIHEAP diff --git a/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap.yaml b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap.yaml new file mode 100644 index 00000000000..447c23feab3 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap.yaml @@ -0,0 +1,1090 @@ +# 7 AAC 44.080 order: community points times the dwelling factor, reduced to +# the household's share of the dwelling's heating expenses (h), times the +# income factor (i), plus the vulnerable point (k), halved for a utility +# allowance (l), then the 2.0-point minimum (m), half-up rounding (n) and the +# 35-point cap (o). When no household in the dwelling reports a heating +# expense, as with heat in rent, manual 3002-1 A.5 gives each eligible +# household an equal share of at most one half. When some households report +# bills, each eligible heat-in-rent household takes that equal share and the +# bill payers split the rest in proportion to their bills (7 AAC 44.900(11) +# counts heat paid through rent). Subsidized households that +# pay heat directly receive a HUD utility allowance for tenant-paid utilities. +# SPM units approximate separate economic households within one dwelling. +# Sources, each URL listed once: +# Regulation 7 AAC 44.035-44.080: +# https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 +# Household manual 3002-1 A.3-5: +# http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm +# Grant manual 3004-5 steps 1-8 and FY2027 price of $175 per point: +# http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm +# Community table, Fairbanks oil 10, Juneau oil 5, Ambler oil 35: +# http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm +# Current income bands: +# http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm +# HUD utility allowances, 24 CFR 965.502 and 982.517: +# https://www.law.cornell.edu/cfr/text/24/965.502 +# https://www.law.cornell.edu/cfr/text/24/982.517 + +# The only SPM unit in its dwelling pays the whole heating bill, so its share +# is 1. Fairbanks oil 10 * two-bedroom house 1 * income factor 1 = 10 points, +# plus 1 for age 65 = 11; 11 * 175 = 1,925, the same as its base award. +- name: Case 1, a sole household keeps its base when no allowance adjustment applies. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_000 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + output: + heating_expense: 1_000 + ak_hap_base_benefit: 1_925 + ak_hap: 1_925 + +# Fairbanks oil 10, two-bedroom house 1. The bills of 300 and 900 are 25% and +# 75% of the dwelling's 1,200, and 44.080(h) reduces points to those shares +# before the income factor, minimum and rounding. Unit 1 (income 0, factor 1): +# 10 * 1 * .25 * 1 = 2.5, plus 1 unshared point for age 65 = 3.5 -> 4 points +# = 700. Unit 2 (24,000 is in the 100-125% band, factor .6): +# 10 * 1 * .75 * .6 = 4.5 -> 5 points = 875. Sole-household bases stay +# (10 + 1) * 175 = 1,925 and 10 * .6 * 175 = 1,050. +- name: Case 2, two Fairbanks households receive points in proportion to their heating bills. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 65 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 35 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person3: + age: 8 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person4: + age: 40 + immigration_status: CITIZEN + employment_income: 24_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1, person2, person3] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + spm_unit2: + members: [person4] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 900 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + households: + household1: + members: [person1, person2, person3, person4] + state_code: AK + place_fips: '24230' + output: + ak_hap_household_size: [3, 1] + ak_hap_countable_income: [0, 24_000] + ak_hap_income_factor: [1, 0.6] + heating_expense: [300, 900] + ak_hap_base_benefit: [1_925, 1_050] + ak_hap: [700, 875] + +# Heat is included in each unit's unsubsidized rent, so no unit reports a +# heating bill and expense shares cannot be measured. Manual 3002-1 A.5 gives +# each of the three eligible units one third, regardless of its size. Fairbanks +# oil 10 * three-bedroom house 1.3 = 13 points before the share. Units 1 and +# 2 (income 0): 13 / 3 = 4.33 -> 4 points = 700. Unit 3 (24,000, factor .6): +# 13 / 3 * .6 = 2.6 -> 3 points = 525. Bases: 13 -> 2,275 for units 1 and 2, +# 13 * .6 = 7.8 -> 8 points = 1,400 for unit 3. +- name: Case 3, three eligible heat-in-rent units with no reported bill each receive one third of their points. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 6_000 + person2: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 6_000 + person3: + age: 40 + immigration_status: CITIZEN + person4: + age: 40 + immigration_status: CITIZEN + employment_income: 24_000 + pre_subsidy_rent: 6_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: THREE_PLUS_BEDROOM_HOUSE + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit2: + members: [person2, person3] + heating_type: FUEL_OIL + ak_hap_dwelling_type: THREE_PLUS_BEDROOM_HOUSE + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit3: + members: [person4] + heating_type: FUEL_OIL + ak_hap_dwelling_type: THREE_PLUS_BEDROOM_HOUSE + receives_housing_assistance: false + heat_expense_included_in_rent: true + households: + household1: + members: [person1, person2, person3, person4] + state_code: AK + place_fips: '24230' + output: + heating_expense: [0, 0, 0] + ak_hap_household_size: [1, 2, 1] + ak_hap_income_factor: [1, 1, 0.6] + ak_hap_base_benefit: [2_275, 2_275, 1_400] + ak_hap: [700, 700, 525] + +# Heat is included in every unit's unsubsidized rent, so manual 3002-1 A.5 +# divides among eligible units only, at most one half each. Fairbanks oil 10, +# two-bedroom house 1. Income of 36,000 exceeds the one-person 150% ceiling of +# 29,925, so those units have factor 0 and no base. Household 1 has one +# eligible unit: min(1 / 1, .5) = .5, so 10 * .5 = 5 points = 875. Household +# 2 has two: .5 each, so 875 and 10 * .5 * .6 = 3 points = 525 for 24,000 +# income. Household 3 has none. +- name: Case 4, only eligible units enter the equal-share denominator and a share never exceeds half. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 6_000 + person2: + age: 40 + immigration_status: CITIZEN + employment_income: 36_000 + pre_subsidy_rent: 6_000 + person3: + age: 40 + immigration_status: CITIZEN + employment_income: 36_000 + pre_subsidy_rent: 6_000 + person4: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 6_000 + person5: + age: 40 + immigration_status: CITIZEN + employment_income: 24_000 + pre_subsidy_rent: 6_000 + person6: + age: 40 + immigration_status: CITIZEN + employment_income: 36_000 + pre_subsidy_rent: 6_000 + person7: + age: 40 + immigration_status: CITIZEN + employment_income: 36_000 + pre_subsidy_rent: 6_000 + person8: + age: 40 + immigration_status: CITIZEN + employment_income: 36_000 + pre_subsidy_rent: 6_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit4: + members: [person4] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit5: + members: [person5] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit6: + members: [person6] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit7: + members: [person7] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit8: + members: [person8] + heating_type: FUEL_OIL + receives_housing_assistance: false + heat_expense_included_in_rent: true + households: + household1: + members: [person1, person2, person3] + state_code: AK + place_fips: '24230' + household2: + members: [person4, person5, person6] + state_code: AK + place_fips: '24230' + household3: + members: [person7, person8] + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: [1, 0, 0, 1, 0.6, 0, 0, 0] + ak_hap_base_benefit: [1_750, 0, 0, 1_750, 1_050, 0, 0, 0] + ak_hap: [875, 0, 0, 875, 525, 0, 0, 0] + +# Fairbanks oil 10, two-bedroom house 1, income 0. Household 1's two units +# each pay 1,500 of its 3,000 in bills: 10 * .5 = 5 points = 875 each. +# Household 2's sole unit pays its whole bill: 10 points = 1,750. Bills in +# other dwellings do not enter a dwelling's total. The New Hampshire units +# receive nothing from the Alaska program. +- name: Case 5, sharing remains within each physical household in a mixed state vector. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + person2: + age: 40 + immigration_status: CITIZEN + person3: + age: 40 + immigration_status: CITIZEN + person4: + age: 40 + immigration_status: CITIZEN + person5: + age: 40 + immigration_status: CITIZEN + person6: + age: 40 + immigration_status: CITIZEN + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: FUEL_OIL + fuel_oil_expense: 1_500 + receives_housing_assistance: false + spm_unit2: + members: [person3] + heating_type: FUEL_OIL + fuel_oil_expense: 1_500 + receives_housing_assistance: false + spm_unit3: + members: [person4] + heating_type: FUEL_OIL + fuel_oil_expense: 1_500 + receives_housing_assistance: false + spm_unit4: + members: [person5] + heating_type: FUEL_OIL + fuel_oil_expense: 1_500 + receives_housing_assistance: false + spm_unit5: + members: [person6] + heating_type: FUEL_OIL + fuel_oil_expense: 1_500 + receives_housing_assistance: false + households: + household1: + members: [person1, person2, person3] + state_code: AK + place_fips: '24230' + household2: + members: [person4] + state_code: AK + place_fips: '24230' + household3: + members: [person5, person6] + state_code: NH + output: + ak_hap_base_benefit: [1_750, 1_750, 1_750, 0, 0] + ak_hap: [875, 875, 1_750, 0, 0] + +# Fairbanks oil 10, two-bedroom house 1, income 0, each unit the only one in +# its dwelling: base 10 * 175 = 1,750. A subsidized unit that pays its heat +# directly receives a HUD utility allowance, so 44.080(l) halves its points: +# 10 * .5 = 5 points = 875. Heat in unsubsidized rent keeps 1,750, and heat +# in subsidized rent is excluded. +- name: Case 6, the utility-allowance reduction applies to subsidized households that pay heat directly. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 12_000 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 12_000 + person3: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 12_000 + person4: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 12_000 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: false + spm_unit4: + members: [person4] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: true + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + household2: + members: [person2] + state_code: AK + place_fips: '24230' + household3: + members: [person3] + state_code: AK + place_fips: '24230' + household4: + members: [person4] + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: [1_750, 1_750, 1_750, 0] + ak_hap: [1_750, 1_750, 875, 0] + +# Juneau oil 5 * dwelling 1 * income factor .6 = 3 points; the base is +# 3 * 175 = 525. This subsidized household pays its heat directly, so +# 44.080(l) halves the points to 1.5 before the (m) minimum, and 1.5 < 2. +- name: Case 7, the utility-allowance reduction leaves a three point Juneau household below the minimum. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + employment_income: 24_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '36400' + output: + ak_hap_household_size: 1 + ak_hap_countable_income: 24_000 + ak_hap_income_factor: 0.6 + heating_expense: 300 + ak_hap_base_benefit: 525 + ak_hap: 0 + +# Fairbanks oil 10 * studio .15 = 1.5 points before the share. Each unit pays +# 300 of the dwelling's 900, a one-third share: 1.5 / 3 = .5 points. The two +# elderly units add 1 unshared point (1.5), and the subsidized unit's +# allowance halves that to .75. All are below the 2.0 minimum. As sole +# households, the elderly units would have 2.5 -> 3 points = 525. +- name: Case 8, sharing reduces points before the minimum so studio units sharing a dwelling receive nothing. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person3: + age: 65 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: false + households: + household1: + members: [person1, person2, person3] + state_code: AK + place_fips: '24230' + output: + ak_hap_household_size: [1, 1, 1] + ak_hap_countable_income: [0, 0, 0] + ak_hap_income_factor: [1, 1, 1] + ak_hap_base_benefit: [0, 525, 525] + ak_hap: [0, 0, 0] + +# Ambler oil 35 * large mobile home 1.4 = 49 points; each unit pays half of +# the dwelling's bills: 49 * .5 = 24.5 -> 25 points = 4,375, under the 35-point +# cap. The subsidized unit's allowance halves 24.5 to 12.25 -> 12 points = +# 2,100. Capping before the share would give 17.5 -> 18 points. As sole +# households both bases reach the cap: 35 * 175 = 6,125. +- name: Case 9, points are shared before the thirty-five point cap. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: LARGE_MOBILE_HOME_OR_BOAT + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: LARGE_MOBILE_HOME_OR_BOAT + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: false + households: + household1: + members: [person1, person2] + state_code: AK + place_fips: '01970' + output: + ak_hap_household_size: [1, 1] + ak_hap_countable_income: [0, 0] + ak_hap_income_factor: [1, 1] + ak_hap_base_benefit: [6_125, 6_125] + ak_hap: [4_375, 2_100] + +# Fairbanks oil 10 * two-bedroom house 1. The retiree's $36,000 military +# retirement pay is above the one-person 150% ceiling of 19,950 * 1.5 = 29,925, +# so factor 0 and base 0; pension and veterans inputs do not count it again. +# Each unit pays 3,000 of the dwelling's 9,000, so each zero-income neighbor +# gets a one-third share: 10 / 3 = 3.33 -> 3 points = 525. +- name: Case 10, a household made ineligible by military retirement still pays its share of the dwelling's heating bills. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + years_in_military: 20 + military_retirement_pay: 36_000 + person2: + age: 40 + immigration_status: CITIZEN + person3: + age: 40 + immigration_status: CITIZEN + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + tax_unit3: + members: [person3] + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + fuel_oil_expense: 3_000 + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + fuel_oil_expense: 3_000 + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + fuel_oil_expense: 3_000 + households: + household1: + members: [person1, person2, person3] + state_code: AK + place_fips: '24230' + output: + pension_income: [0, 0, 0] + veterans_benefits: [0, 0, 0] + ak_hap_countable_income: [36_000, 0, 0] + ak_hap_income_factor: [0, 1, 1] + ak_hap_base_benefit: [0, 1_750, 1_750] + ak_hap: [0, 525, 525] + +# Two Fairbanks units of a parent and a 10-year-old child, each with a $3,000 +# oil bill. The unit that does not take up ATAP counts no income: factor 1, +# 10 * 175 = 1,750. The other counts its modeled 9,852 ATAP receipt. The +# two-person guideline of 27,050 gives a 25% ceiling of 6,762.50 and a 50% +# ceiling of 13,525, so factor 0.9: 10 * 0.9 = 9 points * 175 = 1,575. +- name: Case 11, only received ATAP reduces the regular heating award. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + person2: + age: 10 + immigration_status: CITIZEN + person3: + age: 40 + immigration_status: CITIZEN + person4: + age: 10 + immigration_status: CITIZEN + tax_units: + tax_unit1: + members: [person1, person2] + tax_unit2: + members: [person3, person4] + spm_units: + spm_unit1: + members: [person1, person2] + heating_type: FUEL_OIL + fuel_oil_expense: 3_000 + takes_up_tanf_if_eligible: false + spm_unit2: + members: [person3, person4] + heating_type: FUEL_OIL + fuel_oil_expense: 3_000 + takes_up_tanf_if_eligible: true + households: + household1: + members: [person1, person2] + state_code: AK + place_fips: '24230' + household2: + members: [person3, person4] + state_code: AK + place_fips: '24230' + output: + tanf: [0, 9_852] + ak_hap_countable_income: [0, 9_852] + ak_hap_income_factor: [1, 0.9] + ak_hap: [1_750, 1_575] + +# Juneau oil 5 * two-bedroom house 1. One-person annual ceilings: 50% 9,975, +# 75% 14,962.50, 100% 19,950, 125% 24,937.50 and 150% 29,925. Income 12,000 gives +# factor 0.8: 5 * 0.8 = 4 points -> 700. Income 18,000 gives 0.7: 3.5 points +# round half up to 4 -> 700. Income 25,000 gives 0.5: 2.5 points, at least 2, +# round half up to 3 -> 525. +- name: Case 12, published decimal income factors preserve half-up whole heating points. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + employment_income: 12_000 + person2: + age: 40 + immigration_status: CITIZEN + employment_income: 18_000 + person3: + age: 40 + immigration_status: CITIZEN + employment_income: 25_000 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + tax_unit3: + members: [person3] + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + fuel_oil_expense: 1_000 + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + fuel_oil_expense: 1_000 + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + fuel_oil_expense: 1_000 + households: + household1: + members: [person1] + state_code: AK + place_fips: '36400' + household2: + members: [person2] + state_code: AK + place_fips: '36400' + household3: + members: [person3] + state_code: AK + place_fips: '36400' + output: + ak_hap_countable_income: [12_000, 18_000, 25_000] + ak_hap_income_factor: [0.8, 0.7, 0.5] + ak_hap_base_benefit: [700, 700, 525] + ak_hap: [700, 700, 525] + +# Four zero-income Fairbanks public housing units: 10 * 175 = 1,750 when +# eligible. Heat included in subsidized rent is excluded, with or without a +# separate housing assistance flag, so the first two receive 0. The two units +# paying a $3,000 oil bill directly receive a HUD utility allowance for +# tenant-paid utilities, so 44.080(l) halves their points: 10 * .5 = 5 +# points = 875; their sole-household bases stay 1,750. +- name: Case 13, public housing excludes included heat and halves the points of tenants who pay heat directly. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 12_000 + person2: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 12_000 + person3: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 12_000 + person4: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 12_000 + tax_units: + tax_unit1: + members: [person1] + tax_unit2: + members: [person2] + tax_unit3: + members: [person3] + tax_unit4: + members: [person4] + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + heat_expense_included_in_rent: true + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + heat_expense_included_in_rent: true + receives_housing_assistance: true + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + heat_expense_included_in_rent: false + fuel_oil_expense: 3_000 + spm_unit4: + members: [person4] + heating_type: FUEL_OIL + heat_expense_included_in_rent: false + receives_housing_assistance: true + fuel_oil_expense: 3_000 + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + is_in_public_housing: true + household2: + members: [person2] + state_code: AK + place_fips: '24230' + is_in_public_housing: true + household3: + members: [person3] + state_code: AK + place_fips: '24230' + is_in_public_housing: true + household4: + members: [person4] + state_code: AK + place_fips: '24230' + is_in_public_housing: true + output: + is_in_public_housing: [true, true, true, true] + receives_housing_assistance: [false, true, false, true] + housing_assistance: [0, 0, 0, 0] + ak_hap_countable_income: [0, 0, 0, 0] + ak_hap_base_benefit: [0, 0, 1_750, 1_750] + ak_hap: [0, 0, 875, 875] + +# Manual 3003-1 B.6.c counts annuities, pensions and retirement benefits, and +# Manual 3003-2 does not exempt a military survivor annuity. An $18,000 +# Survivor Benefit Plan annuity is $1,500 a month. One-person bands use +# 19,950 / 12 = 1,662.50 a month: the 75% ceiling is 1,662.50 * 0.75 = +# 1,246.875 (14,962.50 a year) and the 100% ceiling is 1,662.50 (19,950 a +# year), so factor 0.7. Fairbanks oil 10 * two-bedroom house 1 * 0.7 = 7 points, plus +# 1 point for age 62 = 8 points; 8 * 175 = 1,400. Leaving the annuity out +# would give factor 1 and (10 + 1) * 175 = 1,925. +- name: Case 14, a military survivor annuity counts as unearned income. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 62 + immigration_status: CITIZEN + military_retirement_pay_survivors: 18_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 3_000 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + output: + military_retirement_income: 18_000 + ak_hap_countable_income: 18_000 + ak_hap_income_factor: 0.7 + heating_expense: 3_000 + ak_hap_base_benefit: 1_400 + ak_hap: 1_400 + +# Fairbanks oil 10 * two-bedroom house 1. Wages of 18,000 are 1,500 a month, +# above the one-person 75% ceiling of 1,246.875 and within the 100% ceiling of +# 1,662.50, so factor .7: 7 points and a 7 * 175 = 1,225 base. This voucher +# household pays its oil bill directly and receives a utility allowance, so +# 44.080(l) halves the points to 3.5, which rounds half up to 4 points = 700. +- name: Case 15, a subsidized Fairbanks household at factor seven tenths rounds its halved points up. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + employment_income: 18_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + output: + ak_hap_countable_income: 18_000 + ak_hap_income_factor: 0.7 + heating_expense: 1_500 + ak_hap_base_benefit: 1_225 + ak_hap: 700 + +# Juneau oil 5 * two-bedroom house 1. Wages of 12,000 are 1,000 a month, +# above the one-person 50% ceiling of 831.25 and within the 75% ceiling of +# 1,246.875, so factor .8: 4 points and a 4 * 175 = 700 base. The subsidized +# household pays its oil bill directly, so 44.080(l) halves the points to +# exactly 2.0, which meets the (m) minimum: 2 * 175 = 350. +- name: Case 16, a subsidized household halved to exactly two points receives the minimum award. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + employment_income: 12_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: true + heat_expense_included_in_rent: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '36400' + output: + ak_hap_countable_income: 12_000 + ak_hap_income_factor: 0.8 + ak_hap_base_benefit: 700 + ak_hap: 350 + +# One Fairbanks dwelling (oil 10), both units in a two-bedroom house with no +# income (factor 1). Unit 1 (age 40) pays a 1,200 oil bill; unit 2 (age 65) has +# heat in its unsubsidized 6,000 rent, which passes the 200 expense test. Sole- +# household bases: 10 * 175 = 1,750 and (10 + 1) * 175 = 1,925. Both units are +# eligible, so the equal share is min(1 / 2, .5) = .5. 7 AAC 44.900(11) counts +# heat paid through rent, so the heat-in-rent unit takes that .5 and the bill +# payer gets 1,200 * (1 - .5 * 1) / 1,200 = .5. Unit 1: 10 * .5 = 5 points = +# 875. Unit 2: 10 * .5 + 1 for age 65 = 6 points = 1,050. +- name: Case 17, a heat-in-rent unit sharing a dwelling with a bill payer receives the equal share. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 65 + immigration_status: CITIZEN + pre_subsidy_rent: 6_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_200 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 0 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: true + households: + household1: + members: [person1, person2] + state_code: AK + place_fips: '24230' + output: + ak_hap_household_size: [1, 1] + ak_hap_countable_income: [0, 0] + ak_hap_income_factor: [1, 1] + heating_expense: [1_200, 0] + ak_hap_base_benefit: [1_750, 1_925] + ak_hap: [875, 1_050] + +# One Fairbanks dwelling (oil 10), both units aged 40 in a two-bedroom house +# with no income (factor 1). Unit 1 has heat in its unsubsidized 6,000 rent and +# also reports a 600 oil bill; unit 2 pays a 1,200 oil bill. A unit reporting a +# bill is a bill payer even with heat in rent, so no unit takes the equal share +# and the shares follow the bills: 600 / 1,800 and 1,200 / 1,800. Unit 1: +# 10 * 1/3 = 3.33 -> 3 points = 525. Unit 2: 10 * 2/3 = 6.67 -> 7 points = +# 1,225. Treating unit 1 as heat in rent would give it .5 (875) and unit 2 +# 1,200 * .5 / 1,800 = 1/3 (525). +- name: Case 18, a heat-in-rent unit that reports a heating bill shares by its bill. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + pre_subsidy_rent: 6_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 600 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: true + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_200 + ak_atap: 0 + receives_housing_assistance: false + heat_expense_included_in_rent: false + households: + household1: + members: [person1, person2] + state_code: AK + place_fips: '24230' + output: + ak_hap_countable_income: [0, 0] + ak_hap_income_factor: [1, 1] + heating_expense: [600, 1_200] + ak_hap_base_benefit: [1_750, 1_750] + ak_hap: [525, 1_225] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_base_benefit.yaml b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_base_benefit.yaml new file mode 100644 index 00000000000..a3ad33fb417 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_base_benefit.yaml @@ -0,0 +1,3004 @@ +# FY2027 sole-household award (7 AAC 44.035(c)): no dwelling share and no +# utility-allowance reduction; ak_hap applies both at the points stage. +# Sources (each URL listed once): +# http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm +# https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 +# Census places not named in Addendum A take the oil and gas points of the main +# community Addendum A lists for their ZIP code (four places) or else of the nearest listed +# community; these approximations are not a state-issued crosswalk. Oil points follow +# Addendum A except Loring and Tetlin, which follow Appendix A to 7 AAC 44. +# Income ceilings are exact percentages of the guideline: the one-person 25% ceiling +# is 415.625 a month (4,987.50 a year); Addendum E prints 407. +# Fuel, dwelling and location are explicit; no new monetary inputs or sentinel defaults. + +# GRANT: 10 oil points * 1.4; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 1, Fairbanks dwelling large_mobile_home_or_boat uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: LARGE_MOBILE_HOME_OR_BOAT + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 2_450 + +# GRANT: 10 oil points * 0.4; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 2, Fairbanks dwelling rv_tent_or_camper uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: RV_TENT_OR_CAMPER + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 700 + +# GRANT: 10 oil points * 0.15; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 3, Fairbanks dwelling studio_hotel_or_boarding_room uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# GRANT: 10 oil points * 0.35; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 4, Fairbanks dwelling small_boat uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: SMALL_BOAT + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 700 + +# GRANT: 10 oil points * 0.55; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 5, Fairbanks dwelling one_bedroom_or_one_room_house uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: ONE_BEDROOM_OR_ONE_ROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_050 + +# GRANT: 10 oil points * 1.3; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 6, Fairbanks dwelling three_plus_bedroom_house uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: THREE_PLUS_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 2_275 + +# GRANT: 10 oil points * 0.7; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 7, Fairbanks dwelling two_bedroom_large_apartment_or_small_mobile uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_LARGE_APARTMENT_OR_SMALL_MOBILE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_225 + +# GRANT: 10 oil points * 1; minimum 2 before half-up whole-point rounding, then $175/point. +- name: Case 8, Fairbanks dwelling two_bedroom_house uses its published factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# REG 44.080(f), GRANT Step 1 and primary kerosene classification: Fairbanks 10 oil points * $175. +- name: Case 9, propane uses oil points and its matching bill. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: PROPANE + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + bottled_gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# REG 44.080(f), GRANT Step 1 and primary kerosene classification: Fairbanks 10 oil points * $175. +- name: Case 10, kerosene uses oil points and its matching bill. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: KEROSENE + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# REG 44.080(f), GRANT Step 1 and primary kerosene classification: Fairbanks 10 oil points * $175. +- name: Case 11, electricity uses oil points and its matching bill. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: ELECTRICITY + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + pre_subsidy_electricity_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# FY2027 Addendum A community listing: 8 points * $175 = $1,400. +- name: Case 12, Fairbanks gas follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_400 + +# FY2027 Addendum A community listing: 5 points * $175 = $875. +- name: Case 13, Anchorage gas follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '03000' + output: + ak_hap_base_benefit: 875 + +# FY2027 Addendum A community listing: 6 points * $175 = $1,050. +- name: Case 14, Utqiagvik renamed from Barrow gas follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '81920' + output: + ak_hap_base_benefit: 1_050 + +# FY2027 Addendum A community listing: 21 points * $175 = $3,675. +- name: Case 15, Utqiagvik renamed from Barrow oil follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '81920' + output: + ak_hap_base_benefit: 3_675 + +# FY2027 Addendum A community listing: 5 points * $175 = $875. +- name: Case 16, Knik Fairview gas follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '40645' + output: + ak_hap_base_benefit: 875 + +# FY2027 Addendum A community listing: 7 points * $175 = $1,225. +- name: Case 17, Knik Fairview oil follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '40645' + output: + ak_hap_base_benefit: 1_225 + +# FY2027 Addendum A community listing: 8 points * $175 = $1,400. +- name: Case 18, North Pole current gas follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '55910' + output: + ak_hap_base_benefit: 1_400 + +# FY2027 Addendum A community listing: 5 points * $175 = $875. +- name: Case 19, Juneau uniform consolidated oil follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '36400' + output: + ak_hap_base_benefit: 875 + +# FY2027 Addendum A community listing: 6 points * $175 = $1,050. +- name: Case 20, Sitka uniform consolidated oil follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '70540' + output: + ak_hap_base_benefit: 1_050 + +# FY2027 Addendum A community listing: 5 points * $175 = $875. +- name: Case 21, Wrangell uniform consolidated oil follows the place crosswalk. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '86380' + output: + ak_hap_base_benefit: 875 + +# 7 AAC 44.080(a) sets community points by Appendix A to 7 AAC 44, which lists Loring at 5 oil points; FY2027 Addendum A lists 4. 5 points * $175 = $875. +- name: Case 22, Loring oil uses the Appendix A points of 7 AAC 44. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '45020' + output: + ak_hap_base_benefit: 875 + +# Addendum A lists no gas points for Ester; the nearest listed gas community, Fairbanks, has 8: 8 points * $175 = $1,400. +- name: Case 23, Ester gas takes the points of the nearest listed gas community. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '23460' + output: + ak_hap_base_benefit: 1_400 + +# Research edge-sensitive row: nearest Barrow gas 6 points * $175; 25 km diagnostic is not an eligibility rule. +- name: Case 24, Anaktuvuk Pass gas retains the documented spatial approximation. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: 02080 + output: + ak_hap_base_benefit: 1_050 + +# Anchorage 5 gas * .4 dwelling = 2; 2 * $175 = $350. +- name: Case 25, gas RV at exactly two unrounded points is payable. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: RV_TENT_OR_CAMPER + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '03000' + output: + ak_hap_base_benefit: 350 + +# Anchorage 5 gas * .15 + 1 vulnerability = 1.75 < 2, even though whole-point rounding would produce 2. +- name: Case 26, points below two are denied before upward rounding. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '03000' + output: + ak_hap_base_benefit: 0 + +# Fairbanks 10 * .15 + 1 = 2.5 -> 3 points * $175. +- name: Case 27, age sixty adds one point before half-up rounding. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 525 + +# Fairbanks studio remains 1.5 points at age 59.99, below the unrounded minimum. +- name: Case 28, age below sixty does not create vulnerability. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 59.99 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# 10 * .15 + 1 = 2.5 -> 3; age 5.99 is under six. +- name: Case 29, under six adds one vulnerability point. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 5.99 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 525 + +# 10 * .15 = 1.5 < 2; exact age six is not under six. +- name: Case 30, exact age six does not add vulnerability. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 6 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# Disability approximation, GRANT Step 4: 1.5 + 1 = 2.5 -> 3. +- name: Case 31, disabled qualified adult adds the vulnerability point. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_disabled: true + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 525 + +# Elderly, disabled and child indicators overlap; add 1 once, not per member or condition. +- name: Case 32, multiple vulnerable qualified members add only one point. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_disabled: true + person2: + age: 4 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: STUDIO_HOTEL_OR_BOARDING_ROOM + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 525 + +# All 24000 income counts; qualified size 1 -> monthly 2000, factor .6; 10 * .6 = 6 points. +- name: Case 33, nonqualified elderly member cannot create vulnerability. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + person2: + age: 65 + immigration_status: UNDOCUMENTED + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_050 + ak_hap_household_size: 1 + ak_hap_countable_income: 24_000 + ak_hap_income_factor: 0.6 + +# Income 24000, qualified size 1, factor .6; 10 * .6 + 1 = 7 points. +- name: Case 34, qualified elderly member in the same mixed-status household adds one point. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 65 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + person2: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_225 + ak_hap_household_size: 1 + ak_hap_countable_income: 24_000 + ak_hap_income_factor: 0.6 + +# Qualified size 2, annual 36,000 (3,000 a month) -> factor .5; 10 * .7 * .5 + 1 = 4.5 -> 5. +- name: Case 35, mixed earnings and vulnerability round four and a half points upward. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 18_000 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 18_000 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_LARGE_APARTMENT_OR_SMALL_MOBILE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 875 + ak_hap_household_size: 2 + ak_hap_countable_income: 36_000 + ak_hap_income_factor: 0.5 + +# 10 * .7 * .5 = 3.5 -> 4 points * $175. +- name: Case 36, same income without vulnerability rounds three and a half upward. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 18_000 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 18_000 + spm_units: + spm_unit1: + members: + - person1 + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_LARGE_APARTMENT_OR_SMALL_MOBILE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 700 + +# Ambler 35 oil * 1 * 1 = 35 points; $6,125. +- name: Case 37, Ambler exactly thirty-five points reaches cap. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: 01970 + output: + ak_hap_base_benefit: 6_125 + +# Ambler 35 * 1.4 + 1 = 50 points, capped 35 * $175. +- name: Case 38, points above thirty-five are capped after vulnerability. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: LARGE_MOBILE_HOME_OR_BOAT + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: 01970 + output: + ak_hap_base_benefit: 6_125 + +# HH annual heating cost must exceed $200, not equal it. +- name: Case 39, annual heating expense exactly two hundred fails. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 200 + households: + household1: + members: + - person1 + state_code: AK + place_fips: 01970 + output: + ak_hap_base_benefit: 0 + +# HH expense 200.01 passes; Ambler 35 * $175 = 6,125 with no actual-expense cap. +- name: Case 40, expense just above two hundred is not an award cap. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 200.01 + households: + household1: + members: + - person1 + state_code: AK + place_fips: 01970 + output: + ak_hap_base_benefit: 6_125 + +# Primary NATURAL_GAS bill 0; secondary oil 10,000 cannot satisfy the primary-heating expense gate. +- name: Case 41, zero primary expense fails despite other fuel bills. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 0 + fuel_oil_expense: 10_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# One qualified adult; annual payroll 24,937.50 = 19,950 * 1.25, the exact 125% ceiling, no general earned disregard. Factor .6: Fairbanks 10 oil points * .6 = 6 points * $175 = $1,050. +- name: Case 42, integrated wages at exact 125 percent use the inclusive income boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_937.5 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_050 + +# One qualified adult; annual payroll 24,937.62, a cent a month above the 125% ceiling of 24,937.50. Factor .5: 10 * .5 = 5 points * $175 = $875. +- name: Case 43, integrated wages at above 125 percent use the inclusive income boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_937.62 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 875 + +# One qualified adult; annual payroll 29,925 = 19,950 * 1.5, the exact 150% ceiling, no general earned disregard. Factor .5: 10 * .5 = 5 points * $175 = $875. +- name: Case 44, integrated wages at exact 150 percent use the inclusive income boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 29_925 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 875 + +# One qualified adult; annual payroll 29,925.12, a cent a month above the 150% ceiling of 29,925. Factor 0, so no award. +- name: Case 45, integrated wages at above 150 percent use the inclusive income boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 29_925.12 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# One qualified adult; annual payroll 4,987.50 = 19,950 * .25, the exact 25% ceiling, no general earned disregard. Factor 1: 10 points * $175 = $1,750. +- name: Case 46, integrated wages at the 25 percent limit use the inclusive income boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 4_987.5 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# One qualified adult; annual payroll 4,987.62, a cent a month above the 25% ceiling of 4,987.50. Factor .9: 10 * .9 = 9 points * $175 = $1,575. +- name: Case 47, integrated wages at above 25 percent use the inclusive income boundary. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 4_987.62 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_575 + +# The business loss is floored at zero, so countable income is 0; income factor 1 and Fairbanks 10 points. +- name: Case 48, negative current net business income does not inflate benefit. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + self_employment_income: -12_000 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + ak_hap_countable_income: 0 + ak_hap_income_factor: 1 + +# Five qualified members, monthly 2,900 <= 75% ceiling 3,021.875 (48,350 * .75 / 12); 27 * .8 + 1 = 22.6 -> 23 * $175. +- name: Case 49, a Savoonga five-person household is in the 75% band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 34_800 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person3: + age: 12 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person4: + age: 9 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person5: + age: 4 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + - person2 + - person3 + - person4 + - person5 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + - person2 + - person3 + - person4 + - person5 + state_code: AK + place_fips: '67460' + output: + ak_hap_base_benefit: 4_025 + ak_hap_countable_income: 34_800 + ak_hap_household_size: 5 + ak_hap_income_factor: 0.8 + +# HH/VER: annual rent 12,000 counts for expense gate despite direct fuel bill 0. +- name: Case 50, rent included heat uses full annual rent for expense gate. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 12_000 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 0 + heat_expense_included_in_rent: true + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# Full annual rent 200 does not exceed 200. +- name: Case 51, rent included heat at exact expense threshold fails. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 200 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 0 + heat_expense_included_in_rent: true + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# Annual rent 200.01 passes gate; Fairbanks points amount remains 1,750. +- name: Case 52, rent included heat above expense threshold is not capped by rent. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 200.01 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 0 + heat_expense_included_in_rent: true + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# HH excludes subsidized rental housing with no direct heating cost. +- name: Case 53, subsidized rent included heat receives zero under housing exclusion. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 12_000 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: true + fuel_oil_expense: 0 + heat_expense_included_in_rent: true + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# Juneau 5 * .55 * .7 + 1 = 2.925 -> 3 * 175. The base omits the 7 AAC 44.080(l) reduction for this subsidized household; ak_hap applies it. +- name: Case 54, base amount does not apply the utility allowance reduction. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 15_552 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: ONE_BEDROOM_OR_ONE_ROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: true + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '36400' + output: + ak_hap_base_benefit: 525 + +# Addendum A marks Akiachak 0/AVCP: the tribe serves all residents, so no race-based inference is needed. +- name: Case 55, all-resident tribal routing excludes Akiachak state component. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '00760' + output: + ak_hap_base_benefit: 0 + +# Akiachak has a nearest-gas approximation but 0/AVCP still routes all residents. +- name: Case 56, all-resident routing remains separate from gas approximation. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + gas_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '00760' + output: + ak_hap_base_benefit: 0 + +# Akutan */APIA is Native-only; absent enrollment facts do not exclude. Oil 11 * 175. +- name: Case 57, Native-only routing does not infer tribal eligibility. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: 01090 + output: + ak_hap_base_benefit: 1_925 + +# 7 AAC 44.040(b)(3)(B) excludes a household residing on a military base, and Addendum A marks Fort Greely 0/USA. Census draws Fort Greely CDP from the installation, so its residents receive nothing. Without the exclusion, oil 11 * 175 = 1,925. +- name: Case 58, Fort Greely CDP residents live on a military base and receive nothing. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '26100' + output: + ak_hap_base_benefit: 0 + +# Appendix A to 7 AAC 44 lists Tetlin at 16 oil points and FY2027 Addendum A at 12; Addendum A's 0/TCC marker routes all residents to the tribal program, so the state award is zero at either value. +- name: Case 59, Tetlin is routed to all-resident tribal program. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '76590' + output: + ak_hap_base_benefit: 0 + +# HH requires at least one citizen or qualified noncitizen. +- name: Case 60, household with no qualified members is ineligible. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + ak_hap_household_size: 0 + +# Five-digit place identifiers are only meaningful under Alaska state mask. +- name: Case 61, non Alaska state mask prevents same-place-code award. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: WA + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# Numeric 0 represents unavailable supported oil geography, not statutory ineligibility. +- name: Case 62, missing place yields an unavailable modeled amount. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '' + output: + ak_hap_base_benefit: 0 + +# '99999' is not an Alaska Census place, so neither points table has a value; numeric 0 is not statutory ineligibility. +- name: Case 63, a place code outside the Census gazetteer yields an unavailable modeled amount. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '99999' + output: + ak_hap_base_benefit: 0 + +# Numeric 0 represents unavailable supported oil geography, not statutory ineligibility. +- name: Case 64, seven-digit GEOID supplied instead of place yields an unavailable modeled amount. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '0224230' + output: + ak_hap_base_benefit: 0 + +# Addendum A lists Anchorage at 8 oil points, and place 03000 covers the whole municipality (Chugiak, listed at 7, lies inside it): 8 * 1 = 8 points * $175 = $1,400. +- name: Case 65, Anchorage municipality fuel oil uses the Anchorage oil points. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '03000' + output: + ak_hap_base_benefit: 1_400 + +# Purchased-fuel assumption under 7 AAC 44.080(d): Fairbanks oil 10 * .8 = 8 points * $175 = $1,400. +- name: Case 66, wood uses the purchased-fuel approximation with existing heating type. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: WOOD + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_400 + +# Purchased-fuel assumption under 7 AAC 44.080(d): Fairbanks oil 10 * .8 = 8 points * $175 = $1,400. +- name: Case 67, coal uses the purchased-fuel approximation with existing heating type. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: COAL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + coal_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_400 + +# 7 AAC 44.080(f) and grant step 1 put steam, hot water and vehicle gasoline on oil points; OTHER stands for them. Fairbanks oil 10 = 10 points * $175 = $1,750, with the bill in other_heating_fuel_expense. +- name: Case 68, other heating such as steam or hot water uses oil points. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: OTHER + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + other_heating_fuel_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# A SOLAR household's bill is grid electricity (pre_subsidy_electricity_expense), and 7 AAC 44.080(f) puts electricity on oil points: Fairbanks oil 10 = 10 points * $175 = $1,750. +- name: Case 69, solar heat uses oil points like grid electricity. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: SOLAR + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + pre_subsidy_electricity_expense: 1_000 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 1_750 + +# Numeric 0 is missing modeled fuel coverage, not a legal determination that all such households are ineligible. +- name: Case 70, unspecified without a supported subtype yields an unavailable modeled amount. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: UNSPECIFIED + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# NONE affirmatively indicates no residential heating, unlike missing fuel coverage. +- name: Case 71, known no heating has no payable heating component. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NONE + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_base_benefit: 0 + +# Independent SPM calculations before sharing: 10 + 1 = 11 -> 1,925; 10 * .6 = 6 -> 1,050. Do not divide points or grants by two. +- name: Case 72, two SPM units retain their own unshared base amounts. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 65 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 300 + ak_atap: 0 + receives_housing_assistance: false + spm_unit2: + members: + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 700 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: + - person1 + - person2 + state_code: AK + place_fips: '24230' + output: + ak_hap_household_size: + - 1 + - 1 + ak_hap_countable_income: + - 0 + - 24_000 + ak_hap_income_factor: + - 1 + - 0.6 + ak_hap_base_benefit: + - 1_925 + - 1_050 + +# Mixed vector: Anchorage gas 5 * .4 = 2 -> 350; Ambler 35 * 1.4 = 49 capped 35 -> 6,125; no qualified member -> 0. +- name: Case 73, distinct SPM units preserve geography fuel and composition gates. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person3: + age: 40 + immigration_status: UNDOCUMENTED + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: NATURAL_GAS + ak_hap_dwelling_type: RV_TENT_OR_CAMPER + gas_expense: 1_000 + ak_atap: 0 + receives_housing_assistance: false + spm_unit2: + members: + - person2 + heating_type: FUEL_OIL + ak_hap_dwelling_type: LARGE_MOBILE_HOME_OR_BOAT + fuel_oil_expense: 200.01 + ak_atap: 0 + receives_housing_assistance: false + spm_unit3: + members: + - person3 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_000 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: + - person1 + state_code: AK + place_fips: '03000' + household2: + members: + - person2 + state_code: AK + place_fips: 01970 + household3: + members: + - person3 + state_code: AK + place_fips: '24230' + output: + ak_hap_household_size: + - 1 + - 1 + - 0 + ak_hap_countable_income: + - 0 + - 0 + - 0 + ak_hap_income_factor: + - 1 + - 1 + - 0 + ak_hap_base_benefit: + - 350 + - 6_125 + - 0 + +# Grant steps 1-4: Fairbanks oil 10 * .8 + 1 elderly point = 9; 9 * 175 = 1,575. This assumes purchased wood, not pellets or self-harvest. +- name: "Case 74, purchased wood receives the single vulnerable-household point." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 60 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "WOOD" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "24230" + output: + ak_hap_base_benefit: 1_575 + +# Fairbanks 10 * .8 * .15 = 1.2 fails the unrounded 2-point minimum; an elderly member adds 1 to reach 2.2, rounded 2 * 175 = 350. +- name: "Case 75, purchased fuel changes whether a studio meets minimum heating points." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 60 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "WOOD" + ak_hap_dwelling_type: "STUDIO_HOTEL_OR_BOARDING_ROOM" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + spm_unit2: + members: ["person2"] + heating_type: "COAL" + ak_hap_dwelling_type: "STUDIO_HOTEL_OR_BOARDING_ROOM" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + coal_expense: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "24230" + household2: + members: ["person2"] + state_code: "AK" + place_fips: "24230" + output: + ak_hap_base_benefit: [0, 350] + +# Annual income 20,000 lies in the 100-125% band, factor .6. Fairbanks 10 * .8 * .4 * .6 = 1.92 fails before rounding; adding the elderly point makes 2.92 -> 3 * 175 = 525. +- name: "Case 76, the purchased factor precedes income reduction and minimum points." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 20_000 + person2: + age: 60 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 20_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "WOOD" + ak_hap_dwelling_type: "RV_TENT_OR_CAMPER" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + spm_unit2: + members: ["person2"] + heating_type: "WOOD" + ak_hap_dwelling_type: "RV_TENT_OR_CAMPER" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "24230" + household2: + members: ["person2"] + state_code: "AK" + place_fips: "24230" + output: + ak_hap_base_benefit: [0, 525] + +# Koyuk oil 25 (Addendum A; Census place 41940); income 25,000 gives .5. One-bedroom 25 * .8 * .55 * .5 = 5.5 -> 6; elderly studio 25 * .8 * .15 * .5 + 1 = 2.5 -> 3. +- name: "Case 77, purchased fuel preserves half-up rounding at exact half points." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 25_000 + person2: + age: 60 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 25_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "COAL" + ak_hap_dwelling_type: "ONE_BEDROOM_OR_ONE_ROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + coal_expense: 1_000 + spm_unit2: + members: ["person2"] + heating_type: "WOOD" + ak_hap_dwelling_type: "STUDIO_HOTEL_OR_BOARDING_ROOM" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "41940" + household2: + members: ["person2"] + state_code: "AK" + place_fips: "41940" + output: + ak_hap_base_benefit: [1_050, 525] + +# Household expense requirement remains strictly above 200. Unrelated oil expense cannot replace the wood bill; zero wood expense does not infer self-harvest. +- name: "Case 78, purchased wood still requires annual primary heating expense above two hundred dollars." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person3: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "WOOD" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 0 + fuel_oil_expense: 1_000 + spm_unit2: + members: ["person2"] + heating_type: "WOOD" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 200 + fuel_oil_expense: 1_000 + spm_unit3: + members: ["person3"] + heating_type: "WOOD" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 200.01 + fuel_oil_expense: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "24230" + household2: + members: ["person2"] + state_code: "AK" + place_fips: "24230" + household3: + members: ["person3"] + state_code: "AK" + place_fips: "24230" + output: + ak_hap_base_benefit: [0, 0, 1_400] + +# Anchorage wood: oil 8 * .8 = 6.4 -> 6 points * $175 = $1,050. Place '99999' has no oil points, and selecting coal cannot use gas points instead. +- name: "Case 79, purchased fuel scales the Anchorage oil points and cannot resolve an unavailable place." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "WOOD" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + spm_unit2: + members: ["person2"] + heating_type: "COAL" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 1_000 + coal_expense: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "03000" + household2: + members: ["person2"] + state_code: "AK" + place_fips: "99999" + output: + ak_hap_base_benefit: [1_050, 0] + +# Purchased approximation is fixed for WOOD, independent of reported bill: zero wood bill plus 300 annual rent meets the existing heat-in-rent expense gate; base 8 * 175 = 1,400. +- name: "Case 80, unsubsidized heat in rent supplies the expense gate without inferring fuel procurement." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pre_subsidy_rent: 300 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "WOOD" + ak_hap_dwelling_type: "TWO_BEDROOM_HOUSE" + ak_atap: 0 + receives_housing_assistance: false + wood_expense: 0 + heat_expense_included_in_rent: true + households: + household1: + members: ["person1"] + state_code: "AK" + place_fips: "24230" + output: + ak_hap_base_benefit: 1_400 + +# Anchorage oil 8 (Addendum A) applies to electric heat under 7 AAC 44.080(f). Social Security of 18,000 is 1,500 a month, above the one-person 75% ceiling of 1,246.875 and within the 100% ceiling of 1,662.50: factor .7. One-bedroom 8 * .55 * .7 = 3.08, plus 1 for age 70 = 4.08 -> 4 points * $175 = $700. +- name: Case 81, an elderly Anchorage household with electric heat receives the Anchorage oil points. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 70 + immigration_status: CITIZEN + social_security: 18_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: ELECTRICITY + ak_hap_dwelling_type: ONE_BEDROOM_OR_ONE_ROOM_HOUSE + pre_subsidy_electricity_expense: 1_200 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '03000' + output: + ak_hap_countable_income: 18_000 + ak_hap_income_factor: 0.7 + ak_hap_base_benefit: 700 + +# 7 AAC 44.042(16) exempts cash gifts that do not exceed $20 a month: 240 / 12 = 20. Wages of 14,800 are 1,233.33 a month, within the one-person 75% ceiling of 1,246.875: factor .8. Fairbanks oil 10 * .8 = 8 points * $175 = $1,400. Counting the gift would give 15,040 (1,253.33 a month) and factor .7. +- name: Case 82, a twenty dollar monthly gift does not move a household into a lower income factor. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + employment_income: 14_800 + financial_assistance: 240 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + output: + ak_hap_countable_income: 14_800 + ak_hap_income_factor: 0.8 + ak_hap_base_benefit: 1_400 + +# Manual 3003-1 A.1 and 3003-5 B.1.a count military basic pay as earned income. 40,000 exceeds the one-person 150% ceiling of 19,950 * 1.5 = 29,925: factor 0, so no award. Without the pay, Fairbanks oil 10 would give $1,750. +- name: Case 83, military basic pay counts as earned income. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + military_basic_pay: 40_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '24230' + output: + ak_hap_countable_income: 40_000 + ak_hap_income_factor: 0 + ak_hap_base_benefit: 0 + +# Meadow Lakes CDP (place 47735) is not named in Addendum A; its nearest listed community, Wasilla, has 7 oil points. 7 * 1 * 1 = 7 points * $175 = $1,225. +- name: Case 84, an unlisted Census place takes its nearest listed community's oil points. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_000 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '47735' + output: + ak_hap_base_benefit: 1_225 + +# Mertarvik CDP (place 48590) is not named in Addendum A. It takes the 25 oil points of its nearest listed community, Newtok, and also its 0/AVCP marker, which routes all residents to the tribal program, so the state award is zero. +- name: Case 85, an unlisted Census place inherits its nearest community's all-resident tribal routing. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_000 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '48590' + output: + ak_hap_base_benefit: 0 + +# 7 AAC 44.040(b)(3)(B) excludes a household residing on a military base. +# Addendum A marks Eielson AFB 0/USA, and Census draws Eielson AFB CDP from the +# installation. Kodiak Station CDP is the housing area of Coast Guard Base +# Kodiak, whose members living on base in provided housing do not qualify +# (Addendum A). Eareckson Station CDP is drawn on Shemya Island around +# Eareckson Air Station. Each member's 24,000 of basic pay is in the 100-125% +# band (19,950 < 24,000 <= 24,937.50): factor .6. Without the exclusion, +# Eielson oil 11 * 1 * .6 = 6.6 -> 7 points * $175 = $1,225, and Kodiak +# Station and Eareckson Station oil 6 * 1 * .6 = 3.6 -> 4 points * $175 = $700; +# on base each award is 0. +- name: Case 86, Eielson AFB, Kodiak Station and Eareckson Station CDP residents live on a military base and receive nothing. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 30 + immigration_status: CITIZEN + military_basic_pay: 24_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 30 + immigration_status: CITIZEN + military_basic_pay: 24_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person3: + age: 30 + immigration_status: CITIZEN + military_basic_pay: 24_000 + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + spm_unit3: + members: [person3] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '21370' + household2: + members: [person2] + state_code: AK + place_fips: '41210' + household3: + members: [person3] + state_code: AK + place_fips: '20716' + output: + ak_hap_countable_income: [24_000, 24_000, 24_000] + ak_hap_income_factor: [0.6, 0.6, 0.6] + ak_hap_base_benefit: [0, 0, 0] + +# Addendum A lists College (10 oil points) as the main community for ZIP 99709 +# and Haines (6 oil points, tribal service for Natives only) as the main +# community for ZIP 99827, which also lists Excursion Inlet and Klukwan. Most addresses in +# Chena Ridge CDP use ZIP 99709, and Covenant Life CDP uses ZIP 99827, so +# they take those communities' points; Covenant Life is not an all-resident +# tribal place. With no income the factor is 1.0 (0 <= 25% of the guideline): +# Covenant Life 6 * 1 * 1.0 = 6 points * $175 = $1,050; Chena Ridge +# 10 * 1 * 1.0 = 10 points * $175 = $1,750. +- name: Case 87, Covenant Life CDP and Chena Ridge CDP take the oil points of the main community listed for their ZIP code. + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: [person1] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + spm_unit2: + members: [person2] + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + fuel_oil_expense: 1_500 + ak_atap: 0 + receives_housing_assistance: false + households: + household1: + members: [person1] + state_code: AK + place_fips: '17670' + household2: + members: [person2] + state_code: AK + place_fips: '12920' + output: + ak_hap_countable_income: [0, 0] + ak_hap_income_factor: [1, 1] + ak_hap_base_benefit: [1_050, 1_750] diff --git a/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_countable_income.yaml b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_countable_income.yaml new file mode 100644 index 00000000000..bac4d60d3c5 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_countable_income.yaml @@ -0,0 +1,1015 @@ +# FY2027 HAP manual; supported income components only. +# These tests do not assert final eligibility, heating points or an award. +# Sources: +# http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-1_countable_income.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-2_noncountable_(exempt)_income.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-4_income_from_self-employment.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-6_guidelines_for_computing_income.htm +# https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 +# Annual receipts approximate the application-month rules; computed benefits are supplied. + +# MS 3003-1 A.1 counts gross wages before deductions or garnishments. +- name: "Case 1, gross wages receive no general earned-income deduction." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 12_000 + +# MS 3003-4 A.7 defines gross less allowable costs; the supplied input is already net, so no second standard expense deduction applies. +- name: "Case 2, supplied net self-employment is not reduced by another fifty percent." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + self_employment_income: 6_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 6_000 + +# MS 3003-4 A.7 and supplied-net approximation: each source is floored at zero, so 12,000 + 0 = 12,000. Prior-period losses and disallowed expenses cannot be reconstructed. +- name: "Case 3, a current net business loss does not offset other income." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + self_employment_income: -3_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 12_000 + +# MS 3003-4 A.7 and D.2: 2,000 + 0 (the 600 SSTB loss is floored) + 800 + (600 + 400) = 3,800. Use canonical partnership and S-corporation components. +- name: "Case 4, separate supplied business sources count once without another expense deduction." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + self_employment_income: 2_000 + sstb_self_employment_income: -600 + farm_operations_income: 800 + partnership_income: 600 + s_corp_income: 400 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 3_800 + +# MS 3003-1 B.6.f; each rental stream is floored at zero: 10,000 + 0 + 600. +- name: "Case 5, negative rental income does not offset positive farm rental income." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 10_000 + rental_income: -300 + farm_rent_income: 600 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 10_600 + +# Each reported rental source is floored separately; no extra expense deduction from supplied net rent. +- name: "Case 6, negative farm rental income does not reduce positive rental income." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + rental_income: 1_000 + farm_rent_income: -300 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 1_000 + +# Each source is floored at zero: 100 + 0 = 100. +- name: "Case 7, a business loss larger than wages leaves the wages counted." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 100 + self_employment_income: -1_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 100 + +# MS 3003-6 E includes otherwise countable income of ineligible aliens without proration. +- name: "Case 8, all members income counts in a mixed-status household." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + person2: + age: 40 + immigration_status: "UNDOCUMENTED" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 24_000 + +# 7 AAC 44.042(5) exempts wages of a full-time student under 18 who is not the head of household; is_full_time_student treats K-12 attendance as full time, and the 40-year-old parent is the tax-unit head: 24,000 + 0 = 24,000. +- name: "Case 9, wages of a full-time elementary student who is not the head are excluded." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + person2: + age: 12 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + is_in_k12_school: true + employment_income: 1_200 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 24_000 + +# 7 AAC 44.042(5) covers any full-time student under 18, not only elementary or secondary students, and exempts only "wages". A 17-year-old full-time college student who is not the head has 12,000 of wages and 1,200 of National Guard drill pay (military basic pay) excluded, but the 2,000 of net business income counts: 24,000 + 0 + 0 + 2,000 = 26,000. +- name: "Case 10, a full-time college student under 18 who is not the head has wages excluded and net business income counted." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + person2: + age: 17 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + is_full_time_college_student: true + is_in_k12_school: false + employment_income: 12_000 + military_basic_pay: 1_200 + self_employment_income: 2_000 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 26_000 + +# 7 AAC 44.042(5) requires age under 18. This 18-year-old is a full-time high school student and not the head, so only age fails: 24,000 + 12,000 = 36,000. +- name: "Case 11, full-time school attendance does not exclude wages at age eighteen." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + person2: + age: 18 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + is_in_k12_school: true + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 36_000 + +# 7 AAC 44.042(5) requires full-time student status. A 17-year-old who attends neither school nor college is not a full-time student: 24,000 + 12,000 = 36,000. +- name: "Case 12, wages of a minor who is not a full-time student count." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + person2: + age: 17 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + is_in_k12_school: false + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 36_000 + +# 7 AAC 44.042(5) does not exempt a head of household. This 17-year-old high school student lives alone with no role supplied. A tax unit infers a head only among adults, so the student is not a tax-unit head, but with no adult in the SPM unit the student is treated as its head, so the wages of 12,000 count. +- name: "Case 13, wages of a minor student living without an adult count." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 17 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_in_k12_school: true + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 12_000 + +# MS 3003-1 B.2 and 3003-6 E: 24,000 + 2,400 + 600 + 1,200; the 7 AAC 44.042(5) student exemption covers wages only. +- name: "Case 14, unearned income of a dependent child remains countable." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + person2: + age: 17 + immigration_status: "CITIZEN" + ssi: 2_400 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + is_in_k12_school: true + social_security: 600 + pension_income: 1_200 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 28_200 + +# MS 3003-1 B.2.c counts gross SSA including Medicare withholding. No general medical, childcare or support deduction applies. +- name: "Case 15, gross Social Security is not reduced by reported medical or support expenses." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + social_security: 18_000 + medicare_part_b_premiums_reported: 2_400 + health_insurance_premiums: 1_200 + other_medical_expenses: 900 + child_support_expense: 600 + alimony_expense: 300 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + childcare_expenses: 1_000 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 18_000 + +# MS 3003-1 B.2 and B.6.c list these ordinary unearned receipts, and 3000-2 names Railroad Retirement Act annuities; inputs represent distinct payments: 2,400 + 1,200 + 600 + 600 + 600. +- name: "Case 16, retirement, railroad and regular disability or survivor receipts count." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + pension_income: 2_400 + retirement_distributions: 1_200 + disability_benefits: 600 + survivor_benefits: 600 + railroad_benefits: 600 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 5_400 + +# MS 3003-1 B.2 and B.6.a,b,j: ordinary nonexempt cash receipts: 600 + 600 + 600 + 600 = 2,400. +- name: "Case 17, ordinary compensation, veterans and strike receipts count." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + unemployment_compensation: 600 + workers_compensation: 600 + veterans_benefits: 600 + strike_benefits: 600 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 2_400 + +# MS 3003-1 B.6.h and B.6.n (bingo and lottery winnings); ordinary receipts have no NH-style $50 disregard. Generic dividends cannot identify exempt ANCSA payments: 120 + 240 + 120 + 600. +- name: "Case 18, ordinary interest, dividends, estate payments and gambling winnings count in full." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + interest_income: 120 + ordinary_dividend_income: 240 + estate_income: 120 + gambling_winnings: 600 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 1_080 + +# MS 3003-1 B.6.h. Canonical ordinary dividends aggregate the two components; do not count the aggregate and components again. +- name: "Case 19, canonical dividend components are counted once." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + qualified_dividend_income: 120 + non_qualified_dividend_income: 240 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 360 + +# MS 3003-1 B.6.v explicitly lists capital gains. +- name: "Case 20, capital gains are countable." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + short_term_capital_gains: 1_000 + long_term_capital_gains: 2_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 3_000 + +# MS 3003-1 B.3 and B.6.e; reported support is treated as retained, with no $50 pass-through cap. 600 + 1,200 + 2,400 ATAP. +- name: "Case 21, retained child support and alimony are countable." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + alimony_income: 600 + child_support_received: 1_200 + person2: + age: 4 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 2_400 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 4_200 + +# MS 3003-1 B.1 and 3003-2 A.14; caretaker and children are included. Annual household ATAP of 2,400 counts once. +- name: "Case 22, Alaska Temporary Assistance is counted once per household." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 6_000 + person2: + age: 4 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + person3: + age: 2 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + spm_units: + spm_unit1: + members: ["person1", "person2", "person3"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 2_400 + households: + household1: + members: ["person1", "person2", "person3"] + state_code: "AK" + output: + ak_hap_countable_income: 8_400 + +# MS 3003-1 B.1 and B.2: supplied annual APA 2,400 plus SSI 6,000. Existing ak_ssp is APA, not exempt Senior Benefits. +- name: "Case 23, Adult Public Assistance and federal SSI are distinct countable receipts." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 68 + immigration_status: "CITIZEN" + ssi: 6_000 + ak_ssp: 2_400 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 8_400 + +# MS 3003-2 A.24: 239.88 / 12 = 19.99 each month under the constant monthly receipt approximation. +- name: "Case 24, regular cash gifts strictly below twenty dollars monthly are excluded." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + financial_assistance: 239.88 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 0 + +# 7 AAC 44.042(16) exempts gifts that do not exceed $20 a month, and MS 3003-1 B.6.r counts only gifts over $20: 240 / 12 = 20 is excluded. +- name: "Case 25, regular cash gifts of exactly twenty dollars monthly are excluded." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + financial_assistance: 240 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 0 + +# MS 3003-1 B.6.r and 3003-2 A.24: 240.12 / 12 = 20.01; this is an exclusion threshold, not a $20 deduction. +- name: "Case 26, regular cash gifts above twenty dollars monthly count in full." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + financial_assistance: 240.12 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 240.12 + +# MS 3003-2 A.24: each person receives 15 per month, so the annual household sum of 360 remains exempt. +- name: "Case 27, the gift exclusion is per person rather than per household." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + financial_assistance: 180 + person2: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + financial_assistance: 180 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + ak_hap_countable_income: 0 + +# MS 3003-2 A.1,6,9,30 exclude the household member's PFD, Pell, SNAP and vendor housing benefit. +- name: "Case 28, household PFD and vendor or education benefits are excluded." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 3_000 + employment_income: 10_000 + pell_grant: 2_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + snap: 6_000 + housing_assistance: 6_000 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 10_000 + +# MS 3003-2 A.9 counts actual cash utility reimbursement; a HUD allowance alone does not show a cash payment. +- name: "Case 29, a utility allowance is not automatically treated as a cash reimbursement." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 10_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + hud_utility_allowance: 1_200 + output: + ak_hap_countable_income: 10_000 + +# All calculated SSI, APA and ATAP receipts are supplied as zero; no PFD or in-kind income is counted. +- name: "Case 30, zero supplied receipts produce zero countable income." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 0 + +# 7 AAC 44.042(5): a 16-year-old in high school is a full-time student (K-12 +# attendance is full time, by default from age), and the 40-year-old parent +# is the inferred tax-unit head, so the student's 6,000 of wages are exempt: +# 24,000 + 0 = 24,000. +- name: "Case 31, wages of a 16-year-old full-time student who is not a tax-unit head are excluded." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 24_000 + person2: + age: 16 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 6_000 + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + is_full_time_student: [false, true] + is_tax_unit_head: [true, false] + ak_hap_countable_income: 24_000 + +# The same 16-year-old full-time student heads a separate tax unit (supplied +# roles), so 7 AAC 44.042(5) does not exempt the wages: 24,000 + 6,000 = +# 30,000. Only the head role differs from Case 31. +- name: "Case 32, wages of the same 16-year-old full-time student count when the student heads a tax unit." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + tax_unit_role_input: "HEAD" + employment_income: 24_000 + person2: + age: 16 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + tax_unit_role_input: "HEAD" + employment_income: 6_000 + tax_units: + tax_unit1: + members: ["person1"] + tax_unit2: + members: ["person2"] + spm_units: + spm_unit1: + members: ["person1", "person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2"] + state_code: "AK" + output: + is_full_time_student: [false, true] + is_tax_unit_head: [true, true] + ak_hap_countable_income: 30_000 + +# 7 AAC 44.042(18) exempts State General Relief Assistance (7 AAC 38.030), +# which general_assistance stands for, so the 1,200 is not counted: wages +# 10,000 + 0 = 10,000. +- name: "Case 33, general relief assistance is not countable income." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 10_000 + general_assistance: 1_200 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_countable_income: 10_000 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_household_size.yaml b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_household_size.yaml new file mode 100644 index 00000000000..837e8a292c7 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_household_size.yaml @@ -0,0 +1,279 @@ +# FY2027 HAP manual; supported income components only. +# These tests do not assert final eligibility, heating points or an award. +# Sources: +# http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-6_guidelines_for_computing_income.htm +# Annual receipts approximate the application-month rules; computed benefits are supplied. + +# MS 3002-1 A.10 and D: existing qualified-status mapping; finer COFA, battered-person and other unavailable categories remain documented limits. +- name: "Case 1, citizens and existing qualified immigration categories count without a five-year wait." + period: 2027 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person2: + age: 40 + immigration_status: "LEGAL_PERMANENT_RESIDENT" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person3: + age: 40 + immigration_status: "REFUGEE" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person4: + age: 40 + immigration_status: "ASYLEE" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person5: + age: 40 + immigration_status: "PAROLED_ONE_YEAR" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person6: + age: 40 + immigration_status: "DEPORTATION_WITHHELD" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person7: + age: 40 + immigration_status: "CONDITIONAL_ENTRANT" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person8: + age: 40 + immigration_status: "CUBAN_HAITIAN_ENTRANT" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person9: + age: 40 + immigration_status: "UNDOCUMENTED" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person10: + age: 40 + immigration_status: "DACA" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + person11: + age: 40 + immigration_status: "TPS" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit2: + members: ["person2"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit3: + members: ["person3"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit4: + members: ["person4"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit5: + members: ["person5"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit6: + members: ["person6"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit7: + members: ["person7"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit8: + members: ["person8"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit9: + members: ["person9"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit10: + members: ["person10"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + spm_unit11: + members: ["person11"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + household2: + members: ["person2"] + state_code: "AK" + household3: + members: ["person3"] + state_code: "AK" + household4: + members: ["person4"] + state_code: "AK" + household5: + members: ["person5"] + state_code: "AK" + household6: + members: ["person6"] + state_code: "AK" + household7: + members: ["person7"] + state_code: "AK" + household8: + members: ["person8"] + state_code: "AK" + household9: + members: ["person9"] + state_code: "AK" + household10: + members: ["person10"] + state_code: "AK" + household11: + members: ["person11"] + state_code: "AK" + output: + ak_hap_household_size: [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0] + +# MS 3002-1 A.10 and D.6: citizen adult, citizen child and refugee count; undocumented adult does not. +- name: "Case 2, mixed status excludes only unqualified members from household size." + period: 2027 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person2: + age: 17 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + is_tax_unit_dependent: true + person3: + age: 40 + immigration_status: "UNDOCUMENTED" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + person4: + age: 40 + immigration_status: "REFUGEE" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + years_since_us_entry: 0 + spm_units: + spm_unit1: + members: ["person1", "person2", "person3", "person4"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1", "person2", "person3", "person4"] + state_code: "AK" + output: + ak_hap_household_size: 3 + +# No final eligibility is asserted. MS 3003-6 E still counts all members' income when no member counts toward the household size. +- name: "Case 3, an Alaska household without a qualified member still counts its members' income." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "UNDOCUMENTED" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "AK" + output: + ak_hap_household_size: 0 + ak_hap_countable_income: 12_000 + +# Both components are limited to Alaska; MS 3002-1 B requires Alaska residence. +- name: "Case 4, all supported HAP components are zero outside Alaska." + period: 2027 + absolute_error_margin: 0.01 + input: + people: + person1: + age: 40 + immigration_status: "CITIZEN" + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + employment_income: 12_000 + spm_units: + spm_unit1: + members: ["person1"] + heating_type: "NATURAL_GAS" + gas_expense: 1_000 + ak_atap: 0 + households: + household1: + members: ["person1"] + state_code: "WA" + output: + ak_hap_household_size: 0 + ak_hap_countable_income: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_income_factor.yaml b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_income_factor.yaml new file mode 100644 index 00000000000..1814f466635 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/ak/dpa/hap/ak_hap_income_factor.yaml @@ -0,0 +1,751 @@ +# FY2027 income factors from the lagged 2026 Alaska poverty guideline (Addendum E). +# Sources (each URL listed once): +# http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm +# http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm +# https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 +# Ceilings are exact percentages of the guideline (7 AAC 44.040(a)(4) and +# 44.080(i)): one person 19,950 / 12 = 1,662.50 a month, so the 25% ceiling is +# 415.625 a month (4,987.50 a year); Addendum E prints 407. +# Fuel, dwelling and location are explicit; no new monetary inputs or sentinel defaults. + +# GRANT Step 3: income at or below 25% receives factor 1. +- name: Case 1, zero income receives all heating points. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 0 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 1 + +# Unit robustness: negative input remains in the lowest band, whose factor is 1. +- name: Case 2, negative supplied countable income does not inflate factor. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: -1_200 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 1 + +# A household with no qualified members has no income band. +- name: Case 3, no qualified members yields zero income factor. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 0 + ak_hap_household_size: 0 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0 + +# Addendum E prints 407/month; the exact 25% ceiling is 415.625, so 407 is in the lowest band. +- name: Case 4, Addendum E's printed 407 a month stays in the lowest band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 4_884 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 1 + +# 1,662.50 * .25 = 415.625, not the printed 407; 408 a month is below it. +- name: Case 5, 408 remains below the 25 percent ceiling. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 4_896 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 1 + +# Exact 25% ceiling: 19,950 * .25 = 4,987.50 a year (415.625 a month); inclusive band top. +- name: Case 6, exact one-person band 1 ceiling is inclusive. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 4_987.5 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 1 + +# Annual income 4,987.50 + .12 gives monthly 415.635, a cent above 415.625; next factor 0.9. +- name: Case 7, one cent monthly above band 1 enters the next band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 4_987.62 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.9 + +# Exact 50% ceiling: 19,950 * .5 = 9,975 a year (831.25 a month); inclusive band top. +- name: Case 8, exact one-person band 2 ceiling is inclusive. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 9_975 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.9 + +# Annual income 9,975 + .12 gives monthly 831.26, a cent above 831.25; next factor 0.8. +- name: Case 9, one cent monthly above band 2 enters the next band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 9_975.12 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.8 + +# Exact 75% ceiling: 19,950 * .75 = 14,962.50 a year (1,246.875 a month); inclusive band top. +- name: Case 10, exact one-person band 3 ceiling is inclusive. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 14_962.5 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.8 + +# Annual income 14,962.50 + .12 gives monthly 1,246.885, a cent above 1,246.875; next factor 0.7. +- name: Case 11, one cent monthly above band 3 enters the next band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 14_962.62 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.7 + +# Exact 100% ceiling: 19,950 a year (1,662.50 a month); inclusive band top. +- name: Case 12, exact one-person band 4 ceiling is inclusive. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 19_950 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.7 + +# Annual income 19,950 + .12 gives monthly 1,662.51, a cent above 1,662.50; next factor 0.6. +- name: Case 13, one cent monthly above band 4 enters the next band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 19_950.12 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.6 + +# Exact 125% ceiling: 19,950 * 1.25 = 24,937.50 a year (2,078.125 a month); inclusive band top. +- name: Case 14, exact one-person band 5 ceiling is inclusive. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 24_937.5 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.6 + +# Annual income 24,937.50 + .12 gives monthly 2,078.135, a cent above 2,078.125; next factor 0.5. +- name: Case 15, one cent monthly above band 5 enters the next band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 24_937.62 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.5 + +# Exact 150% ceiling: 19,950 * 1.5 = 29,925 a year (2,493.75 a month); inclusive band top. +- name: Case 16, exact one-person band 6 ceiling is inclusive. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 29_925 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.5 + +# Annual income 29,925 + .12 gives monthly 2,493.76, a cent above 2,493.75; next factor 0. +- name: Case 17, one cent monthly above band 6 enters the next band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 29_925.12 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0 + +# Two-person guideline 19,950 + 7,100 = 27,050; 27,050 * .25 = 6,762.50 a year (563.54 a month). +- name: Case 18, two-person first ceiling is the exact 25 percent amount. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 6_762.5 + ak_hap_household_size: 2 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 1 + +# 6,762.62 a year (563.55 a month) exceeds the two-person 25% ceiling of 6,762.50. +- name: Case 19, above two-person first ceiling receives ninety percent. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 6_762.62 + ak_hap_household_size: 2 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.9 + +# Size 18: guideline 19,950 + 17 * 7,100 = 140,650; 125% ceiling 175,812.50 a year (14,651.04 a month). +- name: Case 20, eighteen-person middle-high band uses published additional members. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 175_812.5 + ak_hap_household_size: 18 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.6 + +# Size 18: 175,812.62 a year is a cent a month above the 125% ceiling, in the 125-150% band. +- name: Case 21, above eighteen-person 125 percent enters fifty percent band. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 175_812.62 + ak_hap_household_size: 18 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.5 + +# State mask applies even when identical income facts are supplied. +- name: Case 22, non Alaska household receives no Alaska factor. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 0 + ak_hap_household_size: 1 + households: + household1: + members: + - person1 + state_code: WA + place_fips: '24230' + output: + ak_hap_income_factor: 0 + +# 7 AAC 44.040(a)(4) and 44.080(i) use exact percentages. Four-person guideline +# 19,950 + 3 * 7,100 = 41,250 (3,437.50 a month). The 125% ceiling is 51,562.50 +# and the 150% ceiling is 61,875 a year (5,156.25 a month). Income of 5,156 a +# month (61,872 a year) is within 150%: factor 0.5. A ceiling floored to whole +# monthly dollars, 5,155 (61,860 a year), would give factor 0. +- name: Case 23, four people at 5,156 a month are within the exact 150 percent ceiling. + period: 2027 + absolute_error_margin: 0.0001 + input: + people: + person1: + age: 40 + immigration_status: CITIZEN + ssi: 0 + ak_ssp: 0 + ak_permanent_fund_dividend: 0 + spm_units: + spm_unit1: + members: + - person1 + heating_type: FUEL_OIL + ak_hap_dwelling_type: TWO_BEDROOM_HOUSE + ak_atap: 0 + receives_housing_assistance: false + fuel_oil_expense: 1_000 + ak_hap_countable_income: 61_872 + ak_hap_household_size: 4 + households: + household1: + members: + - person1 + state_code: AK + place_fips: '24230' + output: + ak_hap_income_factor: 0.5 diff --git a/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap.py b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap.py new file mode 100644 index 00000000000..43e3142f078 --- /dev/null +++ b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap.py @@ -0,0 +1,72 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.states.ak.dpa.hap.ak_hap_base_benefit import ( + ak_hap_award, +) + + +class ak_hap(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Alaska Heating Assistance Program federal LIHEAP component benefit" + reference = ( + "http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm", + "https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001", + "https://www.law.cornell.edu/cfr/text/24/965.502", + "https://www.law.cornell.edu/cfr/text/24/982.517", + ) + defined_for = StateCode.AK + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ak.dpa.hap.benefit + # SPM units approximate separate economic households. This does not + # distinguish the manual's owner/occupant and room-renter exceptions. + # Project one first-member marker per SPM unit, regardless of its size. + first_member = spm_unit.members_position == 0 + household_count = spm_unit.household.sum(first_member) + sole_household_eligible = spm_unit("ak_hap_base_benefit", period) > 0 + eligible_household_count = spm_unit.household.sum( + first_member & spm_unit.project(sole_household_eligible) + ) + heating_expense = spm_unit("heating_expense", period).astype(np.float64) + dwelling_heating_expense = spm_unit.household.sum( + first_member * spm_unit.project(heating_expense) + ) + # 7 AAC 44.080(h) reduces a sharing household's points to its + # proportionate share of the dwelling's home heating expenses, which + # 7 AAC 44.900(11) defines to include heat paid indirectly through + # rent. The heat portion of rent is not observed, so the equal split + # of manual 3002-1 A.5 fills that gap: each eligible heat-in-rent + # household gets an equal share among the dwelling's eligible + # households, at most the maximum share. Households reporting heating + # bills split the remaining share in proportion to their bills. When + # no household reports a bill, every household gets the equal share. + equal_share = where( + household_count > 1, + min_( + 1 / max_(eligible_household_count, 1), + p.maximum_shared_household_share, + ), + 1, + ) + heat_in_rent = spm_unit("heat_expense_included_in_rent", period) & ( + heating_expense == 0 + ) + eligible_heat_in_rent_count = spm_unit.household.sum( + first_member & spm_unit.project(sole_household_eligible & heat_in_rent) + ) + bill_payer_share = 1 - equal_share * eligible_heat_in_rent_count + expense_share = np.divide( + heating_expense * bill_payer_share, + dwelling_heating_expense, + out=np.zeros_like(heating_expense), + where=dwelling_heating_expense > 0, + ) + share = where( + (dwelling_heating_expense > 0) & ~heat_in_rent, + expense_share, + equal_share, + ) + return ak_hap_award(spm_unit, period, parameters, share, True) diff --git a/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_base_benefit.py b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_base_benefit.py new file mode 100644 index 00000000000..1f58a0aeebb --- /dev/null +++ b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_base_benefit.py @@ -0,0 +1,123 @@ +from policyengine_us.model_api import * + + +def ak_hap_award(spm_unit, period, parameters, share, apply_utility_allowance): + # 7 AAC 44.080: community points (a)-(f) times the dwelling factor (g), + # reduced to the dwelling share (h), times the income factor (i), plus + # the vulnerable point (k), halved for a utility allowance (l), then the + # 2.0-point minimum (m), half-up rounding (n) and the 35-point cap (o). + p = parameters(period).gov.states.ak.dpa.hap.benefit + place = spm_unit.household("place_fips", period) + fuel = spm_unit("heating_type", period) + fuels = fuel.possible_values + oil_table = p.community_points.oil + gas_table = p.community_points.natural_gas + oil_place = where(np.isin(place, list(oil_table)), place, "UNAVAILABLE") + gas_place = where(np.isin(place, list(gas_table)), place, "UNAVAILABLE") + # 7 AAC 44.080(f) and grant step 1 put electricity, propane, steam, hot + # water and vehicle gasoline on oil points. OTHER stands for the steam, + # hot-water and vehicle-gasoline cases, which heating_type cannot name, + # and a SOLAR household's bill is grid electricity. Kerosene is Grade 1 + # heating oil in the AHFC-funded technical guide. + oil_fuel = ( + (fuel == fuels.FUEL_OIL) + | (fuel == fuels.KEROSENE) + | (fuel == fuels.PROPANE) + | (fuel == fuels.ELECTRICITY) + | (fuel == fuels.SOLAR) + | (fuel == fuels.OTHER) + ) + # WOOD and COAL take the purchased-fuel factor of 7 AAC 44.080(d); + # heating_type cannot identify self-harvested fuel or pellets, whose + # factors differ under (c) and (e). + wood_or_coal = (fuel == fuels.WOOD) | (fuel == fuels.COAL) + # Both tables cover every Census place; a missing or unknown place code + # has no points. + community_points = select( + [oil_fuel, fuel == fuels.NATURAL_GAS, wood_or_coal], + [ + oil_table[oil_place], + gas_table[gas_place], + oil_table[oil_place] * p.purchased_wood_coal_multiplier, + ], + default=0, + ) + dwelling = spm_unit("ak_hap_dwelling_type", period) + # Restore the table's decimal tenths after float32 storage so exact + # half points retain the half-up rounding below. + factor = np.round(spm_unit("ak_hap_income_factor", period).astype(np.float64), 1) + person = spm_unit.members + age = person("age", period) + # Existing disability status approximates the manual's documented + # disability categories. Excluded members cannot add priority points. + vulnerable = spm_unit.any( + person("is_citizen_or_legal_immigrant", period) + & ( + (age >= p.elderly_age) + | (age < p.child_age_limit) + | person("is_disabled", period) + ) + ) + heat_in_rent = spm_unit("heat_expense_included_in_rent", period) + subsidized = spm_unit("receives_housing_assistance", period) | spm_unit.household( + "is_in_public_housing", period + ) + # Subsidized households paying heat directly receive a HUD utility + # allowance for tenant-paid utilities (24 CFR 965.502(a) and + # 982.517(a)(1)), so 44.080(l) applies without a reported allowance. + # Step-down programs that end the allowance after a year are unobserved. + utility_allowance = apply_utility_allowance & subsidized & ~heat_in_rent + points = community_points * p.dwelling_factor[dwelling] * share * factor + points = points + vulnerable * p.vulnerability_points + points = points * where(utility_allowance, 1 - p.utility_allowance_reduction, 1) + # NOTE: Drop floating-point noise from fractional shares so exact + # half points and the 2.0 minimum compare exactly. + points = np.round(points, 9) + # Full annual rent satisfies the expense test for nonsubsidized + # heat-in-rent households. Pre-subsidy rent avoids benefit feedback. + expense = where( + heat_in_rent, + add(spm_unit, period, ["pre_subsidy_rent"]), + spm_unit("heating_expense", period), + ) + # The table identifies all-resident tribal routing. Native-only tribal + # eligibility and contrary interagency arrangements are unobserved; + # never infer tribal enrollment from race. Finer residency, temporary + # shelter duration and vendor-credit rules are also unobserved. + state_served = ~np.isin(place, p.tribal_service_places) + # 7 AAC 44.040(b)(3)(B) excludes households residing on a military base. + # Census draws the listed places from the installations themselves. + on_base = np.isin(place, p.military_base_places) + eligible = ( + (factor > 0) + & (community_points > 0) + & (expense > p.minimum_expense) + & ~(heat_in_rent & subsidized) + & state_served + & ~on_base + & (points >= p.minimum_points) + ) + rounded_points = min_(np.floor(points + 0.5), p.maximum_points) + return where(eligible, rounded_points * p.point_value, 0) + + +class ak_hap_base_benefit(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Alaska HAP base benefit before sharing and utility allowance adjustments" + reference = ( + "http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3007/3007-1_subsidized_heat_and_application_processing.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm", + "https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001", + "https://cchrc.org/wp-content/uploads/media/Consumer_Guide_Home_Heating.pdf#page=23", + ) + defined_for = StateCode.AK + + def formula(spm_unit, period, parameters): + # The award as if the household were the sole household in the + # dwelling (7 AAC 44.035(c)), without the utility-allowance reduction. + return ak_hap_award(spm_unit, period, parameters, 1, False) diff --git a/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_countable_income.py b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_countable_income.py new file mode 100644 index 00000000000..07b5da8f6cb --- /dev/null +++ b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_countable_income.py @@ -0,0 +1,84 @@ +from policyengine_us.model_api import * + + +class ak_hap_countable_income(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + unit = USD + label = "Alaska HAP countable income" + reference = ( + "http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-1_countable_income.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-2_noncountable_(exempt)_income.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-4_income_from_self-employment.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-5_military_pay.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-6_guidelines_for_computing_income.htm", + "https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001", + ) + defined_for = StateCode.AK + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ak.dpa.hap.income + person = spm_unit.members + # Annual inputs approximate prior-month receipts and the alternative + # seasonal/business annualization rules. Include income of all members, + # regardless of whether immigration status permits counting their size. + # 7 AAC 44.042(5) exempts wages of a full-time student under 18 who is + # not the head of household. The tax-unit head stands in for the head + # of household. A tax unit infers a head only among adults, so a minor + # in an SPM unit with no adult member is treated as its head. + # is_full_time_student treats any K-12 attendance as full time, since + # part-time enrollment is not observed. Only the listed wage sources + # are exempt; the student's business income still counts. + age = person("age", period) + adult_present = spm_unit.any(age >= p.child_earnings_age_limit) + exempt_student = ( + (age < p.child_earnings_age_limit) + & person("is_full_time_student", period) + & ~person("is_tax_unit_head", period) + & spm_unit.project(adult_present) + ) + # Supplied net business income stands in for gross receipts less + # costs. Manual 3003-4 B deducts 50% of gross unless actual costs are + # higher, so net inputs overstate countable income when actual costs + # are under half of gross. Each source is floored at zero, so a + # business loss does not offset wages or other income. Prior-period + # losses, disallowed tax expenses and multiple businesses within a + # source cannot be separated. + earned = 0 + for source in p.earned_sources: + amount = max_(person(source, period), 0) + if source in p.student_wage_sources: + amount = where(exempt_student, 0, amount) + earned = earned + amount + countable_earned = spm_unit.sum(earned) + # These are cash receipts, so a tax loss in an unearned source does not + # offset other income. Net rental sources are separately nonnegative. + unearned_person = 0 + for source in p.unearned_sources: + unearned_person = unearned_person + max_(person(source, period), 0) + unearned = spm_unit.sum(unearned_person) + rental = spm_unit.sum( + max_(person("rental_income", period), 0) + + max_(person("farm_rent_income", period), 0) + ) + gifts = person("financial_assistance", period) + # Existing outside cash support approximates gifts received at a + # constant monthly rate. 7 AAC 44.042(16) exempts gifts that do not + # exceed $20 per person per month, and manual 3003-1 B.6.r counts + # gifts over $20; annual data cannot identify irregular receipt dates. + countable_gifts = spm_unit.sum( + where(gifts / MONTHS_IN_YEAR <= p.gift_exemption_threshold, 0, gifts) + ) + # Reported support represents retained receipts; assignment/payment + # routes are unavailable, so no ATAP pass-through cap is imputed. + # Gross SSA includes Medicare withholding. No general medical, care, + # support-paid or earned-income deduction is authorized by these rules. + # Count the takeup-sensitive ATAP receipt once per SPM unit. + return ( + countable_earned + + unearned + + rental + + countable_gifts + + spm_unit("tanf", period) + ) diff --git a/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_dwelling_type.py b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_dwelling_type.py new file mode 100644 index 00000000000..46d846a9623 --- /dev/null +++ b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_dwelling_type.py @@ -0,0 +1,33 @@ +from policyengine_us.model_api import * + + +class AKHAPDwellingType(Enum): + LARGE_MOBILE_HOME_OR_BOAT = ( + "Mobile home or boat with at least 980 heated square feet" + ) + RV_TENT_OR_CAMPER = "Recreational vehicle, tent, or pickup camper" + STUDIO_HOTEL_OR_BOARDING_ROOM = "Studio apartment, hotel, or boarding room" + SMALL_BOAT = "Boat with less than 980 heated square feet" + ONE_BEDROOM_OR_ONE_ROOM_HOUSE = ( + "One-bedroom dwelling, or one-room house or cabin without bedrooms" + ) + THREE_PLUS_BEDROOM_HOUSE = ( + "Three-or-more-bedroom single family, duplex, or triplex home" + ) + TWO_BEDROOM_LARGE_APARTMENT_OR_SMALL_MOBILE = "Two-bedroom apartment in a building with four or more units, or mobile home below 980 heated square feet" + TWO_BEDROOM_HOUSE = "Two-bedroom single family, duplex, or triplex home" + + +class ak_hap_dwelling_type(Variable): + value_type = Enum + possible_values = AKHAPDwellingType + default_value = AKHAPDwellingType.TWO_BEDROOM_HOUSE + entity = SPMUnit + definition_period = YEAR + label = "Alaska HAP dwelling type" + reference = ( + "http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm" + ) + # Select the first matching category in the manual; a loft is a bedroom. + # The neutral two-bedroom-house default is a modeling assumption, not a + # state policy default. Unclassified dwellings require additional facts. diff --git a/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_household_size.py b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_household_size.py new file mode 100644 index 00000000000..356b46cdf6d --- /dev/null +++ b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_household_size.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class ak_hap_household_size(Variable): + value_type = int + entity = SPMUnit + definition_period = YEAR + label = "Alaska HAP household size" + reference = "http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm" + defined_for = StateCode.AK + + # The SPM unit approximates the economic household sharing heating costs. + # Citizenship/status inputs lack finer qualified categories, COFA status, + # documentation and SSN rules. No five-year waiting rule is applied. + # Custody, foster arrangements and separate room-renter households are + # not fully observed. Excluded members' otherwise countable income remains. + adds = ["is_citizen_or_legal_immigrant"] diff --git a/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_income_factor.py b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_income_factor.py new file mode 100644 index 00000000000..9c2a2cb5b0b --- /dev/null +++ b/policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_income_factor.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * +from policyengine_us.variables.gov.hhs.tax_unit_fpg import fpg + + +class ak_hap_income_factor(Variable): + value_type = float + entity = SPMUnit + definition_period = YEAR + label = "Alaska HAP income factor" + reference = ( + "https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001", + "http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm", + "http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm", + ) + defined_for = StateCode.AK + + def formula(spm_unit, period, parameters): + p = parameters(period).gov.states.ak.dpa.hap + size = spm_unit("ak_hap_household_size", period) + income = spm_unit("ak_hap_countable_income", period) + state_group = spm_unit.household("state_group_str", period) + guideline = fpg(size, state_group, period, parameters, year_lag=p.fpg_year_lag) + # 7 AAC 44.040(a)(4) and 44.080(i) compare gross monthly income with + # exact percentages of the monthly Alaska poverty guideline; annual + # amounts compare the same way. Historical years are unverified + # backfilled estimates. + limits = [guideline * rate for rate in p.income_factor.fpg_rates] + factor = select( + [income <= limit for limit in limits], p.income_factor.factors, default=0 + ) + return where(size > 0, factor, 0) diff --git a/source_conflicts/candidates.yaml b/source_conflicts/candidates.yaml index f89ab34e208..012fe7e9583 100644 --- a/source_conflicts/candidates.yaml +++ b/source_conflicts/candidates.yaml @@ -11,6 +11,261 @@ # unreviewed. version: 1 candidates: +- id: us-ak:hap-general-relief-assistance + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Does Alaska count general assistance paid directly to a household as heating assistance income, although + 7 AAC 44.042(18) exempts General Relief Assistance payments? + sources: + - kind: regulation + citation: 7 AAC 44.042(18) + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: plan + citation: FY2026 Alaska LIHEAP State Plan 1.9 + url: https://liheapch.acf.gov/docs/2026/state-plans/AK_Plan_2026.pdf#page=7 + - kind: manual + citation: Alaska HAP Manual 3003-1 B.6.o and 3003-2 A.19 + url: null + readings: + statute: No statute is supplied; 7 AAC 44.042(18) excludes payments received under 7 AAC 38.030 (General Relief + Assistance) from gross monthly income. + other: Plan 1.9 counts "General Assistance and Borough of Indian Affairs (BIA) General Assistance benefits if paid + directly to the household"; manual 3003-1 B.6.o counts BIA General Assistance payments made to the household, + and 3003-2 A.19 exempts only General Relief Assistance payments made to a vendor. + example: A household with $1,200 a year of State General Relief Assistance paid to it has none of it counted under + 7 AAC 44.042(18); plan 1.9 counts General Assistance paid directly to the household. + pe_us: + follows: statute + code: + - policyengine_us/parameters/gov/states/ak/dpa/hap/income/unearned_sources.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code reads the general_assistance input as State General Relief Assistance and leaves it out of countable + income under 7 AAC 44.042(18). BIA General Assistance paid to the household, which plan 1.9 and manual 3003-1 B.6.o + count, has no separate input, so it is not counted. The manual is served only over http, at + http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-1_countable_income.htm. +- id: us-ak:hap-income-limit-rounding + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Are Alaska's heating assistance income limits exact percentages of the monthly Alaska poverty guideline, + or Addendum E's amounts, which round the monthly guideline and then each percentage down to whole dollars? + sources: + - kind: regulation + citation: 7 AAC 44.040(a)(4) and 44.080(i) + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: manual + citation: Alaska HAP Manual Addendum E, FFY 2027 AK Federal Poverty Income Guidelines + url: null + readings: + statute: No statute is supplied; 7 AAC 44.040(a)(4) and 44.080(i) compare gross monthly income with exact + percentages of the Alaska poverty level. + other: Addendum E floors the monthly guideline and then each percentage ("All dollars rounded down to guarantee + they are below income guidelines"), which puts 23 of its 108 limits for the six LIHEAP income factors $1 below + the exact percentage. + example: For four people, 150% of the FY2027 monthly guideline of $3,437.50 is $5,156.25, so a household with $5,156 + of monthly income is eligible under 7 AAC 44.040(a)(4) and ineligible under Addendum E's $5,155. + pe_us: + follows: statute + code: + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_income_factor.py + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code compares income with the exact percentages of the guideline, with no whole-dollar floors. Each of the + 108 limits is $0.04 to $1.79 a month above its floored amount. The manual is served only over http, at + http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm. +- id: us-ak:hap-loring-oil-points + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Does Loring receive 4 oil heating cost points, as in the FY2027 Addendum A, or 5, as in Appendix A to + 7 AAC 44? + sources: + - kind: regulation + citation: 7 AAC 44.080(a) and Appendix A to 7 AAC 44, item (170) Loring + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: manual + citation: Alaska HAP Manual Addendum A, FFY2027 Community Listing, 99901 Loring + url: null + readings: + statute: No statute is supplied; 7 AAC 44.080(a) assigns the community heating cost points listed in Appendix + A, which gives Loring 5 oil points. + other: Addendum A gives Loring 4 oil points ("99901 Loring/04/00/"). + example: A Loring adult aged 40 with no income, a two-bedroom house and an oil bill receives 5 points, $875, under + Appendix A and 4 points, $700, under Addendum A. + pe_us: + follows: statute + code: + - policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/community_points/oil.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code gives Loring Appendix A's 5 oil points. Tetlin also differs (Addendum A 12, Appendix A 16), and the + code uses Appendix A's 16; its residents are routed to their tribal program, so that value does not change + results. The manual is served only over http, at + http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_a.htm. +- id: us-ak:hap-one-person-lowest-income-limit + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Is the FY2027 one-person income ceiling for Alaska's 100% heating point factor $415.625, 25% of the + Alaska poverty guideline, or the $407 printed in Addendum E? + sources: + - kind: regulation + citation: 7 AAC 44.080(i)(1) + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: manual + citation: Alaska HAP Manual Addendum E, FFY 2027 AK Federal Poverty Income Guidelines, one person, 0% - 25% + url: null + readings: + statute: No statute is supplied; 7 AAC 44.080(i)(1) assigns 100% of points when gross monthly income is no more + than 25% of the Alaska poverty level, which for one person is 25% of $1,662.50 ($19,950 / 12), or $415.625. + other: Addendum E prints $407, which is 25% of the prior year's floored monthly guideline ($19,550 / 12, floored + to $1,629); its other 161 cells use the 2026 guideline. + example: A one-person household with $410 of monthly income receives the 1.0 income factor under the $415.625 limit + and 0.9 under Addendum E's $407. + pe_us: + follows: statute + code: + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_income_factor.py + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code uses the exact 25% limit, $415.625 a month ($4,987.50 a year), with no whole-dollar floor (see + us-ak:hap-income-limit-rounding). The manual is served only over http, at + http://dpaweb.hss.state.ak.us/manuals/HAP/addendum/addendum_e.htm. +- id: us-ak:hap-shared-household-allocation + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Does Alaska reduce a sharing household's heating assistance to its share of the dwelling's heating cost at + the heating-point stage, or divide each dollar award equally among the dwelling's eligible households? + sources: + - kind: regulation + citation: 7 AAC 44.080(h) and 44.035(c) + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: manual + citation: Alaska HAP Manual 3002-1 A.3 and A.5, Multiple Households Residing in the Same Dwelling and Housing + Percent Share + url: null + readings: + statute: No statute is supplied; 7 AAC 44.080(h) reduces each sharing household's heating cost points under + (a)-(g) to its proportionate share of the home heating expenses, before the income factor (i), the vulnerable + point (k), the 2.0-point minimum (m) and the rounding (n). + other: The manual divides each household's dollar award by the number of eligible households in the dwelling, + never pays a sharer more than 50%, disregards what each household contributes to heat or rent, and adds the + vulnerable point before the share. + example: Two eligible Fairbanks households paying 25% and 75% of the heating bills, with sole-household awards of + $1,925 and $1,050, receive $700 (3.5 points, rounded to 4) and $875 (4.5 points, rounded to 5) under 7 AAC + 44.080(h), $962.50 and $525 under the manual, and $481.25 and $787.50 under 7 AAC 44.035(c). + pe_us: + follows: statute + code: + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap.py + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_base_benefit.py + - policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/maximum_shared_household_share.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code follows 7 AAC 44.080(h). 7 AAC 44.035(c) is a second regulatory reading, which pays each household + the percentage of its sole-household dollar award equal to its share of the dwelling's heating cost. 7 AAC + 44.900(11) counts heat paid indirectly through rent as a home heating cost, but the heat portion of rent is not + observed, so the code fills that gap with the manual's equal split. Each eligible heat-in-rent household gets an + equal share among the dwelling's eligible households, at most 50%, and households reporting heating bills split the + remaining share in proportion to their bills; when no household reports a bill, every household gets the equal + share. In a Fairbanks two-bedroom house where an adult household pays a $1,200 oil bill and an elderly household + has heat in its $6,000 rent, each gets half, so they receive $875 (5 points) and $1,050 (6 points). Draft + rulespec-us PR 1846 proposed this id with the manual reading. The manual is served only over http, at + http://dpaweb.hss.state.ak.us/manuals/HAP/3002/3002-1_households.htm. +- id: us-ak:hap-student-earnings-exemption + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Are a student's wages exempt from Alaska heating assistance income when the student is under 18, attends + school full time and is not the head of household, or when the student is under 18, under parental control and + enrolled at least half time in elementary or secondary school? + sources: + - kind: regulation + citation: 7 AAC 44.042(5) + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: manual + citation: Alaska HAP Manual 3003-2 A.15, Earnings of Elementary and Secondary Students Under Age 18 + url: null + readings: + statute: No statute is supplied; 7 AAC 44.042(5) exempts "wages received by a full-time student under 18 years + of age who is not the head of household". + other: The manual exempts the earned income of a student under 18 who lives with, or is under the parental + control of, an adult household member and is enrolled at least half time in elementary or secondary school, + including during school breaks. + example: A 17-year-old full-time college student who is not the head of household has wages exempt under 7 AAC + 44.042(5) and counted under the manual, which covers only elementary and secondary students. + pe_us: + follows: statute + code: + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_countable_income.py + - policyengine_us/parameters/gov/states/ak/dpa/hap/income/child_earnings_age_limit.yaml + - policyengine_us/parameters/gov/states/ak/dpa/hap/income/student_wage_sources.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code exempts the wages (employment income and military basic pay) of a member under 18 who is a + full-time student (is_full_time_student) and not the tax-unit head, the closest existing input to the head of + household, in an SPM unit with an adult member; a minor in a unit without an adult is treated as its head. The + student's business income still counts. Half-time enrollment cannot be observed, and is_full_time_student treats + any K-12 attendance as full time, so a half-time high school student's wages are exempt in the code. The manual is served only over http, + at http://dpaweb.hss.state.ak.us/manuals/HAP/3003/3003-2_noncountable_(exempt)_income.htm. +- id: us-ak:hap-utility-allowance-order + program: liheap + years: + from: 2027 + to: 2027 + type: federal-fiscal + question: Does Alaska's 50% subsidized-housing utility-allowance reduction apply to heating points before the + 2.0-point minimum and rounding, or to the rounded dollar award? + sources: + - kind: regulation + citation: 7 AAC 44.080(l)-(n) + url: https://www.akleg.gov/basis/aac.asp?media=print&secStart=7.44.010&secEnd=7.44.9001 + - kind: manual + citation: Alaska HAP Manual 3004-5, Grant Computation, Step 8 + url: null + readings: + statute: No statute is supplied; 7 AAC 44.080(l) halves the heating cost points determined under (a)-(k), and + (m) and (n) then apply the 2.0-point minimum and the rounding to whole points. + other: The manual applies the 2.0-point minimum, rounding, the 35-point cap and the benefit rate first, then + halves the dollar award in step 8. + example: A one-person Juneau household with 3.0 points, direct oil bills and a utility allowance has its points + halved to 1.5 under 7 AAC 44.080(l)-(m), below the 2.0 minimum, so it receives $0; the manual pays $262.50 ($525 + halved). + pe_us: + follows: statute + code: + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap.py + - policyengine_us/variables/gov/states/ak/dpa/hap/ak_hap_base_benefit.py + - policyengine_us/parameters/gov/states/ak/dpa/hap/benefit/utility_allowance_reduction.yaml + prs: + - https://github.com/PolicyEngine/policyengine-us/pull/10341 + state: unreviewed + note: The code follows 7 AAC 44.080(l)-(n). It infers the allowance for subsidized households that pay heat + directly, because HUD sets a utility allowance for tenant-paid utilities (24 CFR 965.502(a) and 982.517(a)(1)). + The manual's step 8 example 1 halves a $700 award to $350, where the regulation's order gives 1.95 points and no + award. The manual is served only over http, at + http://dpaweb.hss.state.ak.us/manuals/HAP/3004/3004-5_grant_computation.htm. - id: us-ak:snap-abawd-implementation-date program: snap years: