Repository navigation
Conversation
Add Publication 1304 Table 1.4 and 1.4A values for tax years 2021-2023 to every SOI national-total uprating series that ended before 2023, using the column each series already documents. From tax year 2022 the wage series takes Table 1.4's "total wages, total" (Form 1040 line 1z). Add a guard that every SOI series ends at the latest published tax year. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaxGhenis
force-pushed
the
soi-uprating-ty2023
branch
from
October 11, 2026 21:42
c65b9af to
aada974
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #10128 (head
c96ccb7ba4). Do not merge before it. This rebases ontomainonce #10128 squash-merges.Summary
The IRS SOI national-total uprating series under
calibration/gov/irs/soi/end at 2020, 2021 or 2022 after #10128, except long-term capital gains, which reaches 2023. IRS SOI has published Publication 1304 Tables 1.4 and 1.4A through tax year 2023 (24in14ar.xlsreturns 404). This PR adds every year from each series' last value to 2023, using the column #10128 documents in each file's header comment. It also adds a guard so that no series lags the others again.$ billions. Each file stores the exact thousands-of-dollars figure times 1,000 and cites one Table 1.4 or 1.4A file per tax year. "Old 2023 projection" is what the series held at 2023 before this PR: its last authored value grown by its CBO uprater. The factor is new / old at 2023.
Columns are located by their header labels, not by position. TY2022 inserted six wage-component columns, so every later column moved 12 places. The extraction is #10128's script plus the TY2022+ wage labels. It reproduces every value already in #10128's files with zero mismatches (the 2018 pension estimates are skipped because they are not table values). The TY2021-2023 files re-downloaded today match the copies #10128 used (sha256).
Wage concept from tax year 2022
From TY2022, Table 1.4 replaces "Salaries and wages" with "Total wages", which has a "Total" column followed by its parts ("Total from Form W-2 wages", household employee wages, unreported tips, dependent care benefits, Form 8919 wages, other earned income). The series takes the Total:
Effect
How the level moves. policyengine-core
uprate_parameter(parameters/operations/uprate_parameters.py) gives every uprater instant after a series' last authored instant the valuevalue_at_last * uprater(t) / uprater(last). Moving the last authored year to 2023 therefore replaces the projected 2021/2022–2023 values with actuals and multiplies every year from 2023 on by one factor (table above). Ratios between any two years at or after 2023 are unchanged.Full parameter tree (every leaf after system init, before =
c96ccb7ba4, after = this PR; scripts from #10128):_per_capitasiblings. Nothing else moves, and the variable-to-series map (384 variables) is unchanged.Microsimulation: no change.
extend_single_year_dataset(policyengine_us/data/economic_assumptions.py) multiplies each year byvalue(t) / value(t-1)starting from the dataset's year, and the default dataset is 2024.microcosm-calibratestatic_aging.py) usesseries(year) / series(base_year)with base year 2024.Other readers (GitHub code search of the PolicyEngine org for
calibration.gov.irs.soi):test_get_uprating_factorprints employment income at 2026, which moves x0.9945. It is a print in a test helper, with no assertion.Household inputs dated 2015-2022 and projected to 2023 or later are what change. The factor to 2025 for an input dated January 1 of year Y, old to new, by series (number of variables that follow it):
The largest moves come from actuals that left the CBO-grown path. Taxable interest went from $133.6B to $313.8B in 2023, and non-qualified dividends from $99.1B to $168.2B. Self-employment net income came in 16% below its old projection.
Blast radius
medicare_cost.yaml"unit test 5 - 2021 data, premium-free":tax_exempt_interest_income2019 to 2021.income_adjusted_part_d_premium_surcharge.yaml"unit test 3 - separate filer top bracket":tax_exempt_interest_income2022 to 2024.in_effectloops over parameter periods in reforms, the SC and MD care-expense parameter year, and same-year months in TX CEAP. So dated inputs are the only path to a test.test_parameter_files.py,tests/core/test_uprating_series.pyandtest_uprating_extensions.py: 186 passed, 1 failed. The failure is the CBO AGI gap Fill IRS SOI uprating series gaps with Publication 1304 actuals #10128 already reports, which Fill CBO total AGI for 2015-2018 with IRS SOI actuals #10114 fixes.coreandpolicygroups.Tests and invariants
Invariants, each checked exhaustively over the finite set of series and years:
test_soi_series_run_to_the_latest_published_tax_year, new). It fails on Fill IRS SOI uprating series gaps with Publication 1304 actuals #10128's head for 16 of the 17 series. When TY2024 is added, the constant moves and every series has to follow.test_soi_wages_use_the_line_1z_total, new).level_check.py), not in the repo, because it compares two commits.Review
Pending: independent GPT-6.1 Sol review (blind re-extraction of every added value, the wage concept, the mechanism claims, the tests).
Evidence and scripts:
~/reviews/soi-ty2023-2026-10-11/(extraction, parameter dumps and diff, level factors, impact table, YAML scan, Publication 4801 and Form 1040 instruction excerpts, consumer files).axiom: n/a: calibration and uprating data, no policy rule
🤖 Generated with Claude Code