Repository navigation
Conversation
Engine ssi computes the federal SSI payment, but the SSI targets also counted the state supplements SSA administers. ssi_total took the OASDI table's SSI row ($63.08 billion in 2024, Table 7.B7's Total column), and the state targets took Table 7.B1's totals. Tables 7.B3 and 7.B7 of SSA's 2025 Supplement (PolicyEngine/chronicle#434) give federal SSI its own columns, and the targets now bind them: - ssi_total: Table 7.B7's All-areas federal payments, $59.67 billion. - ssi_state_payments: Table 7.B7's federal payments in the 50 states and DC. - ssi_recipients: Table 7.B3's December 2024 federal recipients in the 50 states and DC. SSI Monthly Statistics' three age bands still carry the national caseload, and they sum to Table 7.B3's All-areas count, 7,289,843. Table 7.B1's rows, the OASDI SSI row, Table 7.B3's All-areas row and the two tables' state supplementation and average payment columns bind nothing. The target-parity tool marks Table 7.B1's two families superseded, the two averages non-linear and the two state supplementation families deferred, and moves the red line from ssa_supplement.ssi_recipients to ssa_supplement.ssi_federal_payment_recipients. Comments that gave Table 7.B1's national count as 7,404,820, about 115,000 above the federal count, now give 7,423,856 and 134,013. Tests cover each binding, the full tables (one ssi_total and one target per state for each state role) and two Hypothesis properties of the routing. The pinned feed (Chronicle 41b2fb2) lacks both new tables, so six parity tests fail against the shipped manifest until the feed re-pin regenerates it. Refs #1558. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
WIP. This branch holds the rebind and its tests. The feed re-pin waits on PolicyEngine/chronicle#434; PolicyEngine/chronicle#294 merged on 10 November.
Summary
Engine
ssicomputes the federal SSI payment, but Microcosm's SSI targets also count the state supplements SSA administers. This branch's compiler binds them to the federal columns of SSA Annual Statistical Supplement Tables 7.B3 and 7.B7, which PolicyEngine/chronicle#434 adds to the feed:ssi_totalssi_state_paymentsssi_recipientsSSI Monthly Statistics' three age bands keep the national caseload, and they sum to Table 7.B3's All-areas count, 7,289,843. Table 7.B1's rows, the OASDI SSI row, Table 7.B3's All-areas row and the two tables' state supplementation and average payment columns bind nothing.
The target-parity tool marks Table 7.B1's two families superseded, the two average payment families non-linear and the two state supplementation families deferred, and moves the red line from
ssa_supplement.ssi_recipientstossa_supplement.ssi_federal_payment_recipients.Each role keeps family
ssa, its measure mode (sumfor dollars,indicator_sumfor recipients) and so its loss-weight basis. The targets take new names from their source records and new hierarchy categories:ssi_totalandssi_state_paymentsshare "Federal SSI payments", andssi_recipientsjoins the age bands under "Federal SSI payment recipients". The recipient facts count December 2024, so the compiler gives their 2024 targets no Chronicle label, as it does for the age bands.Target moves
A prototype feed takes Tables 7.B1, 7.B3 and 7.B7 from PolicyEngine/chronicle#294 and PolicyEngine/chronicle#434 and every other row from the pinned feed.
ssi_totalssi_state_payments, summed over the 51 targetsssi_recipients, summed over the 51 targetsTwo changes make up each state's move. PolicyEngine/chronicle#294 corrects the Table 7.B1 package, whose 416 values at the pinned feed match SSA's table in one cell, the national payment total. The correction moves all 51 state payment totals by a median of +8.2%, from −22.9% in Massachusetts to +57.7% in Idaho. It moves all 51 recipient totals by a median of +2.5%, from −12.7% in Maine to +56.3% in Idaho. The federal columns then differ from the corrected totals in the 11 states and DC with federally administered supplementation, and in Alabama's recipient count by 4. For example, California's payment target falls 29.7% from its corrected Table 7.B1 total and 40.4% from main's.
Plan
tools/build_us_chronicle_feed.py. If Calibrate ACS local state slices to Census Vintage 2025 age groups #1531 re-pins the feed first, cherry-pick onto its feed commit instead. The scope gains six record-set pairs at build year 2024: four from Table 7.B3 (month 2024-12) and two from Table 7.B7 (calendar year 2024).us/chronicle_feed.jsonand the scope file, regenerate the parity resources withtools/build_us_target_parity_manifest.py, list the replaced Table 7.B1 rows and the added rows for the ESI premiums re-pin chain test, and add this re-pin todocs/us-chronicle-feed-repin.md.Invariants
test_us_fiscal_targets.pychecks these for the SSA dispatch:ssi, as a dollar sum for payments and an indicator sum for recipients.ssi_totalbinds Table 7.B7's All-areas federal payments once, and no target takes Table 7.B7's Total ($63,079,493,000) or its state supplementation ($3,414,366,000).ssi_total, 51ssi_state_paymentsand 51ssi_recipientstargets, one for each FIPS code of the 50 states and DC, and no outlying area or county binds.ssa_ssi_age_band_recipients, and Table 7.B1's aged category row never binds as the 65+ band.test_release_target_parity.pychecks thatssa_supplement.ssi_federal_payment_recipientssits on the red line and compiles, and that the Table 7.B1 families carry the superseded classification.Checks run at
722544bA script called each test directly:
test_us_fiscal_targets.py: 177 passed and 1 failed. The failing test,test_pinned_feed_national_state_surface_restores_the_fences, pins the pinned feed's registry at 33,250 targets. That feed lacks both new tables, so until the re-pin this branch compiles 33,147 from it, with no SSI target but the three age bands. CI has no feed and skips the four pinned-feed tests.test_release_target_parity.py: 35 passed and 6 failed. The six that fail check the shipped manifest and the pinned feed, which the re-pin regenerates and replaces:test_committed_artifacts_match_regeneration,test_gate_passes_on_real_compiled_registry,test_checked_in_anti_rot_passes,test_federally_administered_ssi_families_are_superseded,test_red_line_families_are_compiledandtest_ssi_federal_families_are_compiled.test_us_soi_congressional_district_vintage.py: 51 passed.On the prototype feed, main's code and this branch's each compile a US registry of 33,250 targets, 6,102 of them in the
national_statesurface. 103 targets leave (Table 7.B1's 51 payment and 51 recipient totals and the OASDI SSI row), and 103 join (Table 7.B7's All-areas and 51 state federal payments, and Table 7.B3's 51 state federal recipients). Each new target keeps the role, state, family, entity, measure mode, base variable and target period of the one it replaces, and takes its place in thenational_statesurface. No other target changes. When the parity tool regenerates its resources from that feed, its gate passes on this branch's registry, with 32 compiled families and 70 reviewed exclusions.Refs #1558.
🤖 Generated with Claude Code