Skip to content

Use Alaska's 2015 to 2021 dividend payments, and stop carrying energy relief past 2026 - #10692

Merged
MaxGhenis merged 7 commits into
mainfrom
ak-pfd-energy-relief-history
Nov 8, 2026
Merged

MaxGhenis merged 7 commits into
mainfrom
ak-pfd-energy-relief-history

Conversation

@MaxGhenis

@MaxGhenis MaxGhenis commented Nov 7, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #5148.

On main, gov.states.ak.dor.permanent_fund_dividend and gov.states.ak.dor.energy_relief start in 2022. So PolicyEngine carries 2022's $2,622 dividend and $662 energy relief back to every year from 2015, its first modeled year, to 2021. It also carries 2026's $200 energy relief forward to every later year.

PolicyEngine now uses the amounts Alaska paid for 2015 to 2021 and sets energy relief to zero from 2027:

Year Dividend, main → this PR Energy relief, main → this PR
2015 $2,622 → $2,072 $662 → $0
2016 $2,622 → $1,022 $662 → $0
2017 $2,622 → $1,100 $662 → $0
2018 $2,622 → $1,600 $662 → $0
2019 $2,622 → $1,606 $662 → $0
2020 $2,622 → $992 $662 → $0
2021 $2,622 → $1,114 $662 → $0
2022 to 2026 unchanged unchanged
2027 on $1,000, unchanged $200 → $0

Sources

  • 2015 to 2021. The PFD Division gives each year's whole payment in its summary of dividend applications and payments. In its 2019 and 2021 annual reports, it lists the same amounts as dividends, with no energy relief. For each year, applications paid times the amount equals the table's total disbursed.
  • From 2027. Alaska sets each year's dividend in its budget and adds energy relief only in years when it appropriates a one-time payment. It has set no dividend and appropriated no energy relief for 2027 or later. So PolicyEngine carries the 2026 dividend forward and sets energy relief to zero until Alaska sets new amounts.
  • 2022 to 2026, values unchanged. The 2022 and 2023 references pointed to the PFD Division's tax information page, which now covers only 2025 and 2026. They now point to DOR release 23-002 for 2022's split and to the 2023 annual report. The 2026 energy relief reference pointed to a news article. It now points to sec. 13, ch. 34, SLA 2026, where the Legislature appropriated the $200 payment, and to DOR release 26-004, where DOR announced it. For 2025's energy relief, a new reference points to DOR release 25-004, where DOR announced only the $1,000 dividend.

This PR adds an "Amounts by year" section to docs/validation/alaska-pfd.md, with each year's amounts, sources and the 2027 convention.

Impact

For example, an Alaska resident with $50,000 of wages had federal gross income and AGI of $52,622 for 2019 on main. On this branch, both come to $51,606: the wages plus 2019's $1,606 dividend.

From 2027, PolicyEngine models no Alaska energy relief; on main, it carries 2026's $200 forward. We estimate the difference at $151 million for 2027: $200 each for the 756,512 Alaska residents in PolicyEngine's default Microcosm data, which it uprates from 2024. PolicyEngine counts every Alaska resident as eligible, while the Legislature estimated 2026's $200 payment at $127,340,800, enough for 636,704 people.

On main, PolicyEngine adds energy relief only to household_benefits and spm_unit_benefits, so household and SPM unit net income fall by $200 for each person. For example, a married couple with a six-year-old loses $600 of household and SPM unit net income for 2027 when one parent earns $0, $15,000 or $50,000. Their SNAP and household tax don't change.

Scripts for the 2027 figures
"""2027 Alaska energy relief totals: this branch against main's carried-forward $200.

Computes only the payment variables and weights, so each simulation stays small.
"""

import json
import sys

from policyengine_core.reforms import Reform
from policyengine_us import Microsimulation

YEAR = 2027
MAIN_2027 = Reform.from_dict(
    {"gov.states.ak.dor.energy_relief": {"2027-01-01.2100-12-31": 200}},
    country_id="us",
)

out = {}
for label, reform in (("branch", None), ("main", MAIN_2027)):
    sim = Microsimulation(reform=reform) if reform else Microsimulation()
    relief = sim.calculate("ak_energy_relief", YEAR)
    dividend = sim.calculate("ak_permanent_fund_dividend", YEAR)
    in_ak = (sim.calculate("state_code_str", YEAR, map_to="person") == "AK").values
    weight = sim.calculate("person_weight", YEAR).values
    out[label] = {
        "energy_relief_total": float(relief.sum()),
        "dividend_total": float(dividend.sum()),
        "weighted_alaska_people": float(weight[in_ak].sum()),
        "alaska_person_records": int(in_ak.sum()),
    }
    print(label, json.dumps(out[label]), flush=True)
    del sim

diff = {k: out["branch"][k] - out["main"][k] for k in out["branch"]}
print("branch_minus_main", json.dumps(diff), flush=True)
json.dump({"year": YEAR, "runs": out, "branch_minus_main": diff}, open(sys.argv[1], "w"), indent=1)
"""Household check: does 2027 net income fall by exactly $200 per person on this branch?"""

import json

from policyengine_core.reforms import Reform
from policyengine_us import Simulation

YEAR = 2027
MAIN_2027 = Reform.from_dict(
    {"gov.states.ak.dor.energy_relief": {"2027-01-01.2100-12-31": 200}},
    country_id="us",
)


def situation(earnings):
    return {
        "people": {
            "adult": {"age": {YEAR: 35}, "employment_income": {YEAR: earnings}},
            "spouse": {"age": {YEAR: 33}},
            "child": {"age": {YEAR: 6}},
        },
        "families": {"family": {"members": ["adult", "spouse", "child"]}},
        "marital_units": {
            "marital_unit": {"members": ["adult", "spouse"]},
            "child_marital_unit": {"members": ["child"]},
        },
        "tax_units": {"tax_unit": {"members": ["adult", "spouse", "child"]}},
        "spm_units": {"spm_unit": {"members": ["adult", "spouse", "child"]}},
        "households": {
            "household": {
                "members": ["adult", "spouse", "child"],
                "state_code": {YEAR: "AK"},
            }
        },
    }


VARS = ["ak_energy_relief", "household_benefits", "household_net_income", "spm_unit_net_income", "snap", "household_tax"]
rows = {}
for earnings in (0, 15_000, 50_000):
    row = {}
    for label, reform in (("branch", None), ("main", MAIN_2027)):
        sim = Simulation(situation=situation(earnings), reform=reform)
        row[label] = {v: float(sim.calculate(v, YEAR).sum()) for v in VARS}
    row["branch_minus_main"] = {v: round(row["branch"][v] - row["main"][v], 2) for v in VARS}
    rows[earnings] = row
    print(earnings, json.dumps(row["branch_minus_main"]), flush=True)

Invariants

  • For each dividend year from 2015 to 2026, the dividend plus energy relief equals the whole payment Alaska published. The PFD Division publishes 2015 to 2025 in its summary table, and DOR published 2026 in release 26-004. PolicyEngine rounds 2022's $2,621.81 and $662.19 to $2,622 and $662, which still add to $3,284.
  • In every year from 2015 to 2100, the dividend stays positive and energy relief never falls below zero.
  • From 2027, the dividend stays at the 2026 amount and energy relief at zero.

policyengine_us/tests/test_ak_permanent_fund_dividend_amounts.py checks the first as a differential test against the published totals, and the other two as Hypothesis properties over years. On main's parameters, 8 of its 15 tests fail: the seven totals for 2015 to 2021, and the property from 2027.

Tests

  • New YAML cases in ak_permanent_fund_dividend.yaml and ak_energy_relief.yaml cover each year from 2015 to 2021 and 2027, with the federal gross income and AGI of 2019 and 2027 filers. On main, 17 of the 18 new cases fail; the 2027 dividend case passes on both, since main also carries $1,000 forward.
  • Locally, the 38 YAML files that mention Alaska and test a year this PR changes pass (1,125 cases). So do test_household_spm_resource_parity.py (57 tests) and the code-health suite (533 passed, 1 skipped).
  • The Python module runs in the Rest Python suite's "remaining" group and reads only the two parameters. Locally on macOS, its 15 tests take about 0.1 s after the import and raise the process's peak memory by 20 to 50 MB over the import alone.
  • We merged this branch locally with main at 19a80cc, which includes Count every taxed cash source in SPM market income #10663's market income changes and Reduce Colorado's federal deduction addback by the state income tax already added back #10094's change to Colorado's federal deduction addback. The merge passes the parity test, this module and test_spm_system.py (153 tests), plus the Alaska, market income and Colorado addback YAML tests (116 cases).

With #10669

With #10669, PolicyEngine counts energy relief in federal gross income from 2024. #10669 merges cleanly with this branch in either order. Its tests cover 2021 to 2026, and its only pre-2022 case checks that no taxable energy relief counts, which holds here too. If #10669 lands first, the couple still loses $600 of household and SPM unit net income for 2027 when one parent earns $0 or $15,000. When one parent earns $50,000, they pay $103.92 less household tax, so their household net income falls by $496.08. They also get $51.13 more premium tax credit and pay that much less in Marketplace premiums, so their SPM unit net income falls by $444.95.

axiom: TheAxiomFoundation/rulespec-us#2066 queued

🤖 Generated with Claude Code

…o 2021

The dividend and energy relief parameters started in 2022, so every modeled
year from 2015 to 2021 carried 2022's $2,622 dividend and $662 energy relief
back. Alaska paid a dividend of $2,072, $1,022, $1,100, $1,600, $1,606, $992
and $1,114 in those years, and no energy relief (PFD Division summary table;
2019 and 2021 annual reports).

From 2027, energy relief is zero until a budget appropriates a payment, since
each payment needs its own appropriation. The 2026 dividend still carries
forward, and its parameter now says so.

The 2022 and 2023 references pointed to the PFD Division's tax page, which
now covers only 2025 and 2026; they now cite DOR release 23-002 and the 2023
annual report. The 2026 energy relief cites sec. 13, ch. 34, SLA 2026 in place
of a news report.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis and others added 2 commits November 7, 2026 12:56
…ished totals

The 2026 energy relief reference now points at sec. 13 of ch. 34, SLA 2026 from
page 84, where it begins, through page 85, where it appropriates the $200
payment. A new property test checks each year's dividend plus energy relief
against the PFD Division's published whole payment, and draws later years to
check the carry-forward.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A new section of docs/validation/alaska-pfd.md lists each year's dividend and
energy relief from 2015 to 2026 with its source, and the convention from 2027.
The changelog fragment now names who sets each amount.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis
MaxGhenis marked this pull request as ready for review November 7, 2026 18:26
MaxGhenis and others added 4 commits November 7, 2026 13:39
amounts() called system.parameters(instant). For each year Hypothesis
drew, policyengine-core evaluated every parameter in the model at that
instant and kept the result for the rest of the process. Calling the two
parameters with the instant returns the same values.

Locally, the module's 15 tests now take about 0.1 s after the import,
down from 13 s, and the process peaks at 1.01 GB, down from 3.24 GB. The
import alone peaks at 0.99 GB. On main's parameters, the same 8 of the
15 tests still fail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Alaska, its Legislature, DOR and PolicyEngine now act in the parameter
comments, test names, docstring, docs section and changelog fragment, in
place of budgets, laws and the model. No value or test expectation
changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch case by what it checks

- energy_relief.yaml: quote the appropriation with its $127,340,800 estimate, and say the Legislature put the $200 first in line for fiscal 2026 revenue above $6.3 billion, counting the sec. 25(c) appropriation, that remained after the year's other appropriations, up to $700 million.
- docs/validation/alaska-pfd.md: cite DOR release 25-004 for 2025's $0 energy relief.
- The test docstring states invariant 2 for 2015 to 2100, the range its property draws.
- The dividend cases for 2015 to 2021 name the amount Alaska paid, and Cases 13 and 14 name the gross income and AGI they check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Move the sec. 25(c) appropriation out of the 2026 energy relief comment's revenue sentence and into a sentence of its own, and name the earnings reserve account it comes from.
- Name the $50,000 of wages in Cases 13 and 14, which their federal gross income and AGI add to the dividend.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@MaxGhenis MaxGhenis changed the title Give Alaska's dividend and energy relief the amounts paid outside 2022 to 2026 Use Alaska's 2015 to 2021 dividend payments, and stop carrying energy relief past 2026 Nov 8, 2026
@MaxGhenis
MaxGhenis merged commit ac8f332 into main Nov 8, 2026
38 checks passed
@MaxGhenis
MaxGhenis deleted the ak-pfd-energy-relief-history branch November 8, 2026 19:58
@MaxGhenis

Copy link
Copy Markdown
Contributor Author

I merged this at 08671a1 with an admin override, since branch protection requires an approving review and GitHub doesn't let me approve my own PR. An independent Opus 5.5 reviewer agreed at 267f126 and again in delta reviews at 4477f5f and 08671a1. Every CI check passed at 08671a1 except the GitHub Pages deploy, which runs only on main.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Historical values of Alaska Permanent Fund Dividend and One-time Energy Relief

1 participant