From 4510721802fbdb0f044e2c30271c206c6528d290 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 14 Oct 2026 15:19:56 -0400 Subject: [PATCH 1/5] Load CBO's February 2026 projections through 2036 into the upraters SSA and SNAP uprating and the national average wage index grow from their latest actuals at CBO's February 2026 rates. The payroll cap applies 42 U.S.C. 430(b) to that wage index, CPI-W extends to 2036Q4 at its existing ratio, and the HHS index grows from its 2026 value. CPI-U and chained CPI-U keep CBO's 2035 projection point instead of extrapolating over it, and IRS uprating reads it for 2036. Every refreshed series extrapolates only from 2037. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../cbo-2026-projections-2036.changed.md | 1 + .../parameters/gov/bls/cpi/cpi_w.yaml | 9 +- .../parameters/gov/hhs/uprating.yaml | 31 +++--- .../gov/irs/payroll/social_security/cap.yaml | 29 +++--- policyengine_us/parameters/gov/ssa/nawi.yaml | 52 +++++----- .../parameters/gov/ssa/uprating.yaml | 28 +++--- .../parameters/gov/usda/snap/uprating.yaml | 29 +++--- .../parameters/uprating_extensions.py | 41 ++++---- .../parameters/test_uprating_extensions.py | 94 ++++++++++++++++++- 9 files changed, 215 insertions(+), 99 deletions(-) create mode 100644 changelog.d/cbo-2026-projections-2036.changed.md diff --git a/changelog.d/cbo-2026-projections-2036.changed.md b/changelog.d/cbo-2026-projections-2036.changed.md new file mode 100644 index 00000000000..7c33496b870 --- /dev/null +++ b/changelog.d/cbo-2026-projections-2036.changed.md @@ -0,0 +1 @@ +Load CBO's February 2026 projections through 2036 into the SSA, SNAP and HHS upraters, the CPI-W series, the national average wage index and the Social Security payroll cap, growing each from its latest actual (the HHS index from its 2026 value), and keep CBO's 2035 CPI-U and chained CPI-U projections instead of extrapolating over them. diff --git a/policyengine_us/parameters/gov/bls/cpi/cpi_w.yaml b/policyengine_us/parameters/gov/bls/cpi/cpi_w.yaml index 70da83e8ba9..b3254cfe304 100644 --- a/policyengine_us/parameters/gov/bls/cpi/cpi_w.yaml +++ b/policyengine_us/parameters/gov/bls/cpi/cpi_w.yaml @@ -1402,7 +1402,14 @@ values: 2034-08-01: 391.234 # 2034Q3: 399.460 * 327.075 / 333.952 2034-11-01: 393.423 # 2034Q4: 401.695 * 327.075 / 333.952 2035-02-01: 395.625 # 2035Q1: 403.943 * 327.075 / 333.952 - # Values for 2036-2100 are set programmatically in uprating_extensions.py + 2035-05-01: 397.838 # 2035Q2: 406.203 * 327.075 / 333.952 + 2035-08-01: 400.064 # 2035Q3: 408.476 * 327.075 / 333.952 + 2035-11-01: 402.303 # 2035Q4: 410.762 * 327.075 / 333.952 + 2036-02-01: 404.555 # 2036Q1: 413.061 * 327.075 / 333.952 + 2036-05-01: 406.819 # 2036Q2: 415.373 * 327.075 / 333.952 + 2036-08-01: 409.096 # 2036Q3: 417.698 * 327.075 / 333.952 + 2036-11-01: 411.386 # 2036Q4: 420.036 * 327.075 / 333.952 + # Values for 2037-2100 are set programmatically in uprating_extensions.py metadata: unit: currency-USD label: CPI-W diff --git a/policyengine_us/parameters/gov/hhs/uprating.yaml b/policyengine_us/parameters/gov/hhs/uprating.yaml index 7b226f6572e..4e4919420d5 100644 --- a/policyengine_us/parameters/gov/hhs/uprating.yaml +++ b/policyengine_us/parameters/gov/hhs/uprating.yaml @@ -5,18 +5,21 @@ values: 2023-01-01: 304.7 2024-01-01: 313.6 2025-01-01: 321.9 - # CBO forecasts. + # CBO forecasts. 2026 keeps CBO's January 2025 projection, which the 2026 + # amounts derived from this index already use. Later years grow it at CBO's + # February 2026 calendar-year CPI-U growth: 2026 * CBO CPI-U (year) / CBO CPI-U (2026). 2026-01-01: 328.4 - 2027-01-01: 336.1 - 2028-01-01: 343.6 - 2029-01-01: 351.3 - 2030-01-01: 359.2 - 2031-01-01: 367.2 - 2032-01-01: 375.5 - 2033-01-01: 383.9 - 2034-01-01: 392.5 - 2035-01-01: 401.3 - # Values for 2036-2100 are set programmatically in uprating_extensions.py + 2027-01-01: 336.766 # 328.4 * 340.260 / 331.807 + 2028-01-01: 344.719 # 328.4 * 348.295 / 331.807 + 2029-01-01: 352.606 # 328.4 * 356.264 / 331.807 + 2030-01-01: 360.587 # 328.4 * 364.328 / 331.807 + 2031-01-01: 368.732 # 328.4 * 372.557 / 331.807 + 2032-01-01: 377.055 # 328.4 * 380.967 / 331.807 + 2033-01-01: 385.564 # 328.4 * 389.564 / 331.807 + 2034-01-01: 394.265 # 328.4 * 398.355 / 331.807 + 2035-01-01: 403.163 # 328.4 * 407.346 / 331.807 + 2036-01-01: 412.265 # 328.4 * 416.542 / 331.807 + # Values for 2037-2100 are set programmatically in uprating_extensions.py metadata: economy: false unit: currency-USD @@ -29,5 +32,9 @@ metadata: - title: 2024 Annual Update of the HHS Poverty Guidelines href: https://www.federalregister.gov/documents/2024/01/17/2024-00796/annual-update-of-the-hhs-poverty-guidelines - title: CBO Budget and Economic Outlook | 2024 to 2034 - # Jan 2025 Economic Projections | 2. Calendar Year | Row 51 + # 2026: Jan 2025 Economic Projections | 2. Calendar Year | Row 51 href: https://www.cbo.gov/data/budget-economic-data#4 + - title: CBO | Economic Projections | February 2026 + href: https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx + - title: CBO | Economic Projections | February 2026, calendar-year CSV (variable cpiu) + href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/calendar_2026-02.csv diff --git a/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml b/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml index 28db185a1c4..7a488a47b1e 100644 --- a/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml +++ b/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml @@ -61,15 +61,19 @@ values: # Official SSA determinations. 2026-01-01: 184_500 2027-01-01: 192_300 - # CBO forecast. - 2028-01-01: 198_600 - 2029-01-01: 206_400 - 2030-01-01: 214_200 - 2031-01-01: 222_300 - 2032-01-01: 230_100 - 2033-01-01: 237_900 - 2034-01-01: 246_000 - 2035-01-01: 254_400 + # Forecasts apply 42 U.S.C. 430(b) to the projected NAWI in + # parameters/gov/ssa/nawi.yaml, which follows CBO's February 2026 CBB + # growth from the published 2025 NAWI: + # CBB(Y) = 60_600 * NAWI(Y-2) / 22_935.42, rounded to the nearest $300. + 2028-01-01: 199_200 # 60_600 * 75_428.91 / 22_935.42 = 199_298.38 + 2029-01-01: 206_700 # 60_600 * 78_286.07 / 22_935.42 = 206_847.57 + 2030-01-01: 214_200 # 60_600 * 81_028.94 / 22_935.42 = 214_094.78 + 2031-01-01: 221_400 # 60_600 * 83_771.81 / 22_935.42 = 221_342.00 + 2032-01-01: 228_600 # 60_600 * 86_514.68 / 22_935.42 = 228_589.21 + 2033-01-01: 236_400 # 60_600 * 89_486.12 / 22_935.42 = 236_440.36 + 2034-01-01: 243_900 # 60_600 * 92_343.28 / 22_935.42 = 243_989.55 + 2035-01-01: 252_000 # 60_600 * 95_429.00 / 22_935.42 = 252_142.64 + 2036-01-01: 260_400 # 60_600 * 98_514.73 / 22_935.42 = 260_295.76 metadata: unit: currency-USD period: year @@ -87,6 +91,7 @@ metadata: href: https://www.ssa.gov/oact/cola/cbb.html - title: 2027 Cost-of-Living Adjustment (COLA) Fact Sheet href: https://www.ssa.gov/news/en/cola/factsheets/2027.html - - title: CBO Tax Parameters and Effective Marginal Tax Rates | Jan 2025 - # 1. Tax Parameters. Row 161. - href: https://www.cbo.gov/system/files/2025-01/53724-2025-01-Tax-Parameters.xlsx + - title: CBO | Tax Parameters and Effective Marginal Tax Rates | February 2026 + href: https://www.cbo.gov/publication/53724 + - title: CBO | Tax Parameters | February 2026, CSV (variable tp_ss_max_earnings) + href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/budget/tax_parameters/annual_cy_2026-02.csv diff --git a/policyengine_us/parameters/gov/ssa/nawi.yaml b/policyengine_us/parameters/gov/ssa/nawi.yaml index dd71e24f276..58682f5d7e1 100644 --- a/policyengine_us/parameters/gov/ssa/nawi.yaml +++ b/policyengine_us/parameters/gov/ssa/nawi.yaml @@ -75,37 +75,25 @@ values: 2023-01-01: 66_621.80 # NAWI(Y-2) for CBB(2025) 2024-01-01: 69_846.57 # NAWI(Y-2) for CBB(2026) 2025-01-01: 72_800.33 # NAWI(Y-2) for CBB(2027); published 2026-10-14 - # Back out NAWI from CBO's forecast of the payroll tax cap, in - # parameters/gov/irs/payroll/social_security/cap.yaml - # The formula to derive NAWI(Y-2) from CBB(Y) is: - # NAWI(Y-2) approx = CBB(Y) * (NAWI_1992 / CBB_1994) - # where NAWI_1992 = 22_935.42 and CBB_1994 = 60_600. - # CBB(Y) is the Contribution and Benefit Base (payroll tax cap) for year Y. - # NAWI(Y-2) is the National Average Wage Index for year Y-2. + # The contribution and benefit base (CBB, the payroll tax cap) for year Y is + # CBB(Y) = CBB_1994 * NAWI(Y-2) / NAWI_1992, rounded to the nearest $300, + # where NAWI_1992 = 22_935.42 and CBB_1994 = 60_600. So CBB growth tracks + # NAWI growth two years earlier. - # For 2026 NAWI, derived from CBO CBB(2028) = 198_600: 198_600 * (22_935.42 / 60_600) - 2026-01-01: 75_168.61 - # For 2027 NAWI, derived from CBO CBB(2029) = 206_400: 206_400 * (22_935.42 / 60_600) - 2027-01-01: 78_124.71 - # For 2028 NAWI, derived from CBO CBB(2030) = 214_200: 214_200 * (22_935.42 / 60_600) - 2028-01-01: 81_080.80 - # For 2029 NAWI, derived from CBO CBB(2031) = 222_300: 222_300 * (22_935.42 / 60_600) - 2029-01-01: 84_149.34 - # For 2030 NAWI, derived from CBO CBB(2032) = 230_100: 230_100 * (22_935.42 / 60_600) - 2030-01-01: 87_090.55 - # For 2031 NAWI, derived from CBO CBB(2033) = 237_900: 237_900 * (22_935.42 / 60_600) - 2031-01-01: 90_031.76 - # For 2032 NAWI, derived from CBO CBB(2034) = 246_000: 246_000 * (22_935.42 / 60_600) - 2032-01-01: 93_088.94 - # For 2033 NAWI, derived from CBO CBB(2035) = 254_400: 254_400 * (22_935.42 / 60_600) - 2033-01-01: 96_258.56 - # For 2034 NAWI, projected using the growth rate from NAWI(2032) to NAWI(2033). - # Growth Multiplier = NAWI(2033) / NAWI(2032) = 96_258.56 / 93_088.94. - # NAWI(2034) = NAWI(2033) * Growth Multiplier. - 2034-01-01: 99_536.06 - # For 2035 NAWI, projected using the growth rate from NAWI(2032) to NAWI(2033). - # NAWI(2035) = NAWI(2034) * Growth Multiplier. - 2035-01-01: 102_920.73 + # Later years carry the published NAWI(2025) forward at the wage growth + # implied by CBO's February 2026 CBB projections (tax parameter + # tp_ss_max_earnings): NAWI(Y-2) = NAWI(2025) * CBO CBB(Y) / CBO CBB(2027), + # where CBO CBB(2027) = 191_100. + 2026-01-01: 75_428.91 # CBO CBB(2028) = 198_000: 72_800.33 * 198_000 / 191_100 + 2027-01-01: 78_286.07 # CBO CBB(2029) = 205_500 + 2028-01-01: 81_028.94 # CBO CBB(2030) = 212_700 + 2029-01-01: 83_771.81 # CBO CBB(2031) = 219_900 + 2030-01-01: 86_514.68 # CBO CBB(2032) = 227_100 + 2031-01-01: 89_486.12 # CBO CBB(2033) = 234_900 + 2032-01-01: 92_343.28 # CBO CBB(2034) = 242_400 + 2033-01-01: 95_429.00 # CBO CBB(2035) = 250_500 + 2034-01-01: 98_514.73 # CBO CBB(2036) = 258_600 + # Values for 2035-2100 are set programmatically in uprating_extensions.py metadata: unit: currency-USD period: year @@ -116,3 +104,7 @@ metadata: href: https://www.ssa.gov/oact/cola/AWI.html#Series - title: 2027 Cost-of-Living Adjustment (COLA) Fact Sheet href: https://www.ssa.gov/news/en/cola/factsheets/2027.html + - title: CBO | Tax Parameters and Effective Marginal Tax Rates | February 2026 + href: https://www.cbo.gov/publication/53724 + - title: CBO | Tax Parameters | February 2026, CSV (variable tp_ss_max_earnings) + href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/budget/tax_parameters/annual_cy_2026-02.csv diff --git a/policyengine_us/parameters/gov/ssa/uprating.yaml b/policyengine_us/parameters/gov/ssa/uprating.yaml index 1f20e9256d6..cac10454eea 100644 --- a/policyengine_us/parameters/gov/ssa/uprating.yaml +++ b/policyengine_us/parameters/gov/ssa/uprating.yaml @@ -7,16 +7,18 @@ values: 2025-01-01: 308.729 # 2024Q3: (308.501 + 308.640 + 309.046) / 3 2026-01-01: 317.265 # 2025Q3: (316.349 + 317.306 + 318.139) / 3 2027-01-01: 328.746 # 2026Q3: (327.104 + 328.481 + 330.654) / 3 - # Forecasts from marrying CPI-W actuals with CBO's CPI-U forecast. - 2028-01-01: 332.241 # 2027Q3: 337.3 * 306.199 / 310.989 - 2029-01-01: 339.431 # 2028Q3: 344.6 * 306.199 / 310.989 - 2030-01-01: 346.917 # 2029Q3: 352.2 * 306.199 / 310.989 - 2031-01-01: 354.6 # 2030Q3: 360.0 * 306.199 / 310.989 - 2032-01-01: 362.579 # 2031Q3: 368.1 * 306.199 / 310.989 - 2033-01-01: 370.656 # 2032Q3: 376.3 * 306.199 / 310.989 - 2034-01-01: 379.028 # 2033Q3: 384.8 * 306.199 / 310.989 - 2035-01-01: 387.598 # 2034Q3: 393.5 * 306.199 / 310.989 - # Values for 2036-2100 are set programmatically in uprating_extensions.py + # Forecasts carry the 2026Q3 CPI-W actual forward at CBO's February 2026 + # quarterly CPI-U growth: 2026Q3 actual * CBO CPI-U (Q3) / CBO CPI-U (2026Q3). + 2028-01-01: 336.945 # 2027Q3: 328.746 * 341.281 / 332.976 + 2029-01-01: 344.854 # 2028Q3: 328.746 * 349.291 / 332.976 + 2030-01-01: 352.722 # 2029Q3: 328.746 * 357.260 / 332.976 + 2031-01-01: 360.699 # 2030Q3: 328.746 * 365.340 / 332.976 + 2032-01-01: 368.845 # 2031Q3: 328.746 * 373.591 / 332.976 + 2033-01-01: 377.171 # 2032Q3: 328.746 * 382.024 / 332.976 + 2034-01-01: 385.681 # 2033Q3: 328.746 * 390.644 / 332.976 + 2035-01-01: 394.385 # 2034Q3: 328.746 * 399.460 / 332.976 + 2036-01-01: 403.287 # 2035Q3: 328.746 * 408.476 / 332.976 + # Values for 2037-2100 are set programmatically in uprating_extensions.py metadata: economy: false unit: currency-USD @@ -28,5 +30,7 @@ metadata: href: https://data.bls.gov/timeseries/CWUR0000SA0 - title: 2027 Cost-of-Living Adjustment (COLA) Fact Sheet href: https://www.ssa.gov/news/en/cola/factsheets/2027.html - - title: CBO Economic Projections, February 2024. - href: https://www.cbo.gov/publication/59710 + - title: CBO | Economic Projections | February 2026 + href: https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx + - title: CBO | Economic Projections | February 2026, quarterly CSV (variable cpiu) + href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/quarterly_2026-02.csv diff --git a/policyengine_us/parameters/gov/usda/snap/uprating.yaml b/policyengine_us/parameters/gov/usda/snap/uprating.yaml index abe3dbd5815..c320b344665 100644 --- a/policyengine_us/parameters/gov/usda/snap/uprating.yaml +++ b/policyengine_us/parameters/gov/usda/snap/uprating.yaml @@ -8,16 +8,19 @@ values: 2024-10-01: 314.175 # 2024-06. 2025-10-01: 322.561 # 2025-06. 2026-10-01: 333.952 # 2026-06. - # Forecasts from CBO's Q2 forecasts. - 2027-10-01: 335.5 # 2027Q2 - 2028-10-01: 342.7 # 2028Q2 - 2029-10-01: 350.3 # 2029Q2 - 2030-10-01: 358.1 # 2030Q2 - 2031-10-01: 366.1 # 2031Q2 - 2032-10-01: 374.3 # 2032Q2 - 2033-10-01: 382.7 # 2033Q2 - 2034-10-01: 391.3 # 2034Q2 - # Values for 2035-2100 are set programmatically in uprating.py + # Forecasts carry the June 2026 actual forward at CBO's February 2026 + # quarterly CPI-U growth: June 2026 actual * CBO CPI-U (Q2) / CBO CPI-U (2026Q2). + 2027-10-01: 342.578 # 2027Q2: 333.952 * 339.250 / 330.708 + 2028-10-01: 350.710 # 2028Q2: 333.952 * 347.303 / 330.708 + 2029-10-01: 358.747 # 2029Q2: 333.952 * 355.262 / 330.708 + 2030-10-01: 366.868 # 2030Q2: 333.952 * 363.304 / 330.708 + 2031-10-01: 375.156 # 2031Q2: 333.952 * 371.512 / 330.708 + 2032-10-01: 383.625 # 2032Q2: 333.952 * 379.898 / 330.708 + 2033-10-01: 392.282 # 2033Q2: 333.952 * 388.471 / 330.708 + 2034-10-01: 401.134 # 2034Q2: 333.952 * 397.237 / 330.708 + 2035-10-01: 410.188 # 2035Q2: 333.952 * 406.203 / 330.708 + 2036-10-01: 419.448 # 2036Q2: 333.952 * 415.373 / 330.708 + # Values for 2037-2100 are set programmatically in uprating_extensions.py metadata: unit: currency-USD label: SNAP uprating @@ -27,5 +30,7 @@ metadata: href: https://www.law.cornell.edu/uscode/text/7/2012#u_4 - title: BLS Consumer Price Index for All Urban Consumers (CPI-U), all items, U.S. city average, not seasonally adjusted (CUUR0000SA0) href: https://data.bls.gov/timeseries/CUUR0000SA0 - - title: CBO Economic Projections, February 2024. - href: https://www.cbo.gov/publication/59710 + - title: CBO | Economic Projections | February 2026 + href: https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx + - title: CBO | Economic Projections | February 2026, quarterly CSV (variable cpiu) + href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/quarterly_2026-02.csv diff --git a/policyengine_us/parameters/uprating_extensions.py b/policyengine_us/parameters/uprating_extensions.py index c1c598de334..a32b0e371a7 100644 --- a/policyengine_us/parameters/uprating_extensions.py +++ b/policyengine_us/parameters/uprating_extensions.py @@ -936,7 +936,9 @@ def set_all_uprating_parameters(parameters: ParameterNode) -> ParameterNode: # IRS uprating - special case that computes from CPI IRS_UPRATING_START_YEAR = 2010 - IRS_LAST_PROJECTED_YEAR = 2035 + # 2036 reads the 12 months ending August 2035, whose chained CPI-U + # projection points (CBO February 2026) run through the 2035 instant. + IRS_LAST_PROJECTED_YEAR = 2036 uprating_index = parameters.gov.irs.uprating @@ -956,31 +958,31 @@ def set_all_uprating_parameters(parameters: ParameterNode) -> ParameterNode: uprating_index.update(period=f"year:{year}-01-01:1", value=irs_cpi) uprating_index.update(start=instant(f"{END_YEAR}-01-01"), value=irs_cpi) - # SNAP uprating (October values, last projection year 2034) + # SNAP uprating (October values, last projection year 2036) extend_parameter_values( parameters.gov.usda.snap.uprating, - last_projected_year=2034, + last_projected_year=2036, end_year=END_YEAR, period_month=10, period_day=1, ) - # SSA uprating (January values, last projection year 2035) + # SSA uprating (January values, last projection year 2036) extend_parameter_values( parameters.gov.ssa.uprating, - last_projected_year=2035, + last_projected_year=2036, end_year=END_YEAR, period_month=1, period_day=1, ) # Social Security National Average Wage Index (January values, last - # projection year 2035). The payroll tax contribution and benefit base is - # indexed to NAWI, so this must remain available through the full long-run - # projection horizon. + # projection year 2034, the NAWI behind CBO's 2036 CBB). The payroll tax + # contribution and benefit base is indexed to NAWI, so this must remain + # available through the full long-run projection horizon. extend_parameter_values( parameters.gov.ssa.nawi, - last_projected_year=2035, + last_projected_year=2034, end_year=END_YEAR, period_month=1, period_day=1, @@ -991,7 +993,7 @@ def set_all_uprating_parameters(parameters: ParameterNode) -> ParameterNode: # independently. extend_social_security_payroll_cap( parameters, - last_projected_year=2035, + last_projected_year=2036, end_year=END_YEAR, ) @@ -1000,37 +1002,40 @@ def set_all_uprating_parameters(parameters: ParameterNode) -> ParameterNode: end_year=END_YEAR, ) - # HHS poverty guideline uprating (January values, last projection year 2035) + # HHS poverty guideline uprating (January values, last projection year 2036) extend_parameter_values( parameters.gov.hhs.uprating, - last_projected_year=2035, + last_projected_year=2036, end_year=END_YEAR, period_month=1, period_day=1, ) - # CPI-U (February values, last projection year 2034) + # CPI-U (February values, last projection year 2035). The 2035 instant + # holds CBO's February 2026 projection that applies through 2036, so + # extrapolation starts at the 2036 instant. extend_parameter_values( parameters.gov.bls.cpi.cpi_u, - last_projected_year=2034, + last_projected_year=2035, end_year=END_YEAR, period_month=2, period_day=1, ) - # Chained CPI-U (February values, last projection year 2034) + # Chained CPI-U (February values, last projection year 2035), as for CPI-U. extend_parameter_values( parameters.gov.bls.cpi.c_cpi_u, - last_projected_year=2034, + last_projected_year=2035, end_year=END_YEAR, period_month=2, period_day=1, ) - # CPI-W (February values, last projection year 2034) + # CPI-W (February values, last projection year 2036; quarterly + # projections run through 2036Q4) extend_parameter_values( parameters.gov.bls.cpi.cpi_w, - last_projected_year=2034, + last_projected_year=2036, end_year=END_YEAR, period_month=2, period_day=1, diff --git a/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py b/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py index 6ff5f115dee..0b52f48a866 100644 --- a/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py +++ b/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py @@ -18,6 +18,7 @@ extend_educator_expense_cap, get_irs_cola, get_irs_cola_denominator, + get_irs_cpi, round_social_security_amount, round_social_security_payroll_cap, ) @@ -291,7 +292,7 @@ def test_float_dollar_inputs_have_long_run_upraters(): def test_ssa_nawi_and_payroll_cap_extend_to_2100(): - """Test that the SSA NAWI and payroll cap do not flatten after 2035.""" + """Test that the SSA NAWI and payroll cap do not flatten after 2036.""" parameters = PARAMETERS nawi = parameters.gov.ssa.nawi @@ -309,7 +310,7 @@ def test_ssa_nawi_and_payroll_cap_extend_to_2100(): f"Payroll cap should increase from {test_years[i - 1]} to {test_years[i]}" ) - for year in [2036, 2040, 2050, 2100]: + for year in [2037, 2040, 2050, 2100]: current_cap = payroll_cap(f"{year - 1}-01-01") expected_cap = round_social_security_payroll_cap( current_cap * nawi(f"{year - 2}-01-01") / nawi(f"{year - 3}-01-01") @@ -412,6 +413,95 @@ def test_social_security_parameters_include_latest_official_2027_values(): assert pia.thresholds[2] == 8_077 +# CBO February 2026 projections (US-CBO/cbo-data at 284a956): quarterly and +# calendar-year CPI-U (cpiu) and the contribution and benefit base +# (tp_ss_max_earnings). +CBO_2026_02_QUARTERLY_CPI_U = { + "2026Q2": 330.708, + "2026Q3": 332.976, + "2035Q3": 408.476, + "2036Q2": 415.373, + "2036Q4": 420.036, +} +CBO_2026_02_CALENDAR_CPI_U = {2026: 331.807, 2036: 416.542} +CBO_2026_02_CBB = {2027: 191_100, 2036: 258_600} + + +def test_upraters_follow_cbo_february_2026_growth_through_2036(): + """2036 values grow each series from its anchor at CBO's February 2026 rates.""" + parameters = PARAMETERS + quarterly = CBO_2026_02_QUARTERLY_CPI_U + calendar = CBO_2026_02_CALENDAR_CPI_U + + # SSA: the 2026Q3 CPI-W behind the 2027 COLA, grown to 2035Q3. + ssa = parameters.gov.ssa.uprating + assert ssa("2036-01-01") == pytest.approx( + ssa("2027-01-01") * quarterly["2035Q3"] / quarterly["2026Q3"], abs=5e-4 + ) + # SNAP: June 2026 CPI-U, grown to 2036Q2. + snap = parameters.gov.usda.snap.uprating + assert snap("2036-10-01") == pytest.approx( + snap("2026-10-01") * quarterly["2036Q2"] / quarterly["2026Q2"], abs=5e-4 + ) + # HHS: the index's 2026 value, grown to 2036. + hhs = parameters.gov.hhs.uprating + assert hhs("2036-01-01") == pytest.approx( + hhs("2026-01-01") * calendar[2036] / calendar[2026], abs=5e-4 + ) + # NAWI(2025) is SSA's published value; later years grow with CBO's + # CBB, and the cap follows 42 U.S.C. 430(b) on that NAWI. + nawi = parameters.gov.ssa.nawi + assert nawi("2034-01-01") == pytest.approx( + nawi("2025-01-01") * CBO_2026_02_CBB[2036] / CBO_2026_02_CBB[2027], + abs=5e-3, + ) + cap = parameters.gov.irs.payroll.social_security.cap + for year in range(2028, 2037): + assert cap(f"{year}-01-01") == round_social_security_payroll_cap( + cap("1994-01-01") * nawi(f"{year - 2}-01-01") / nawi("1992-01-01") + ) + assert cap("2036-01-01") == 260_400 + # CPI-W: CBO's 2036Q4 CPI-U at the last observed CPI-W/CPI-U ratio. + assert parameters.gov.bls.cpi.cpi_w("2036-11-01") == pytest.approx( + quarterly["2036Q4"] * 327.075 / 333.952, abs=5e-4 + ) + # CBO's 2035 CPI-U projection points, which apply through 2036, survive + # the extension, and the 2036 IRS index reads them. + assert parameters.gov.bls.cpi.cpi_u("2035-02-01") == 407.3 + assert parameters.gov.bls.cpi.c_cpi_u("2035-02-01") == 219.2 + assert parameters.gov.irs.uprating("2036-01-01") == pytest.approx( + get_irs_cpi(parameters, 2035), rel=1e-12 + ) + + +@pytest.mark.parametrize( + "path,last_projected_year,date_suffix", + [ + ("gov.irs.uprating", 2036, "-01-01"), + ("gov.ssa.uprating", 2036, "-01-01"), + ("gov.usda.snap.uprating", 2036, "-10-01"), + ("gov.hhs.uprating", 2036, "-01-01"), + ("gov.ssa.nawi", 2034, "-01-01"), + ("gov.bls.cpi.cpi_u", 2035, "-02-01"), + ("gov.bls.cpi.c_cpi_u", 2035, "-02-01"), + ("gov.bls.cpi.cpi_w", 2036, "-02-01"), + ], +) +def test_upraters_extrapolate_only_after_cbo_projections( + path, last_projected_year, date_suffix +): + """Each series holds its final projected growth after CBO's last year.""" + parameter = PARAMETERS.get_child(path) + last_growth = parameter(f"{last_projected_year}{date_suffix}") / parameter( + f"{last_projected_year - 1}{date_suffix}" + ) + for year in [last_projected_year + 1, last_projected_year + 2, 2050, 2100]: + growth = parameter(f"{year}{date_suffix}") / parameter( + f"{year - 1}{date_suffix}" + ) + assert growth == pytest.approx(last_growth, rel=1e-12) + + def test_social_security_wage_indexed_parameters_follow_statutory_rounding(): """Wage-indexed benefit parameters should use lagged NAWI and statutory rounding.""" parameters = PARAMETERS From c3d0880ac2e39234b7bd3961b2eb7db04e00a419 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 21 Oct 2026 14:11:23 -0400 Subject: [PATCH 2/5] Update two 2027 projections that move with the refreshed upraters Oregon ERDC's 2027 initial income limit is 200% of the projected 2027 poverty guideline. Growing HHS uprating at CBO's 2027 rate moves the boundary from 3,692 to 3,699, so the strict-limit case now uses 3,699. The FY2028 SNAP maximum allotment uprates the published FY2027 value. Growing from June 2026 CPI-U at CBO's 2027Q2 rate gives 342.578, not CBO's older 335.5 level, so the four-person allotment is 1,049.42. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../policy/baseline/gov/states/or/delc/erdc/integration.yaml | 4 ++-- .../policy/baseline/gov/usda/snap/snap_max_allotment.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml index 6618d6ff153..7f66f34066e 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml @@ -52,13 +52,13 @@ spm_units: spm_unit: members: [parent, child] - or_erdc_countable_income: 3_692 + or_erdc_countable_income: 3_699 households: household: members: [parent, child] state_code: OR output: - or_erdc_countable_income: 3_692 + or_erdc_countable_income: 3_699 or_erdc_income_eligible: false or_erdc_eligible: false or_erdc: 0 diff --git a/policyengine_us/tests/policy/baseline/gov/usda/snap/snap_max_allotment.yaml b/policyengine_us/tests/policy/baseline/gov/usda/snap/snap_max_allotment.yaml index acf9ef722a7..b4ab5de4ba5 100644 --- a/policyengine_us/tests/policy/baseline/gov/usda/snap/snap_max_allotment.yaml +++ b/policyengine_us/tests/policy/baseline/gov/usda/snap/snap_max_allotment.yaml @@ -32,5 +32,5 @@ 2027: CONTIGUOUS_US snap_unit_size: 4 output: - # 1023 * 335.5 / 333.952 - snap_max_allotment: 1027.74 + # 1023 * 342.578 / 333.952 + snap_max_allotment: 1049.42 From 493ec45c8ad441dc8fc1122cbb6d0a61b4b7f113 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 21 Oct 2026 18:08:32 -0400 Subject: [PATCH 3/5] Update the California AB 2591 deduction to the refreshed 2027 guidelines The reform's 2027 standard deduction equals the projected poverty guideline for the household's size. HHS uprating now grows 2027 at CBO's rate (336.766 / 328.4), so the one-, two- and four-person values are 16,367, 22,191 and 33,841. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../contrib/states/ca/ab2591/ca_ab2591.yaml | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml b/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml index 760f94e4e75..4b1ae26142a 100644 --- a/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml +++ b/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml @@ -3,11 +3,11 @@ # poverty line for their household size. # Effective for taxable years beginning on or after July 1, 2027. # 2027 federal poverty guidelines (CONTIGUOUS_US): -# first person = $16,334 -# additional person = $5,813 -# 1-person FPL = $16,334 -# 2-person FPL = $22,147 -# 4-person FPL = $33,774 +# first person = $16,367 +# additional person = $5,825 +# 1-person FPL = $16,367 +# 2-person FPL = $22,191 +# 4-person FPL = $33,841 - name: Single filer uses one-person FPL. period: 2027 @@ -28,7 +28,7 @@ members: [person1] state_code: CA output: - ca_standard_deduction: 16_334 + ca_standard_deduction: 16_367 - name: Head of household with one child uses two-person FPL. period: 2027 @@ -53,7 +53,7 @@ members: [person1, person2] state_code: CA output: - ca_standard_deduction: 22_147 + ca_standard_deduction: 22_191 - name: Head of household with two children still uses two-person FPL. # Bill R&TC 17073.5(b)(2) fixes HoH at the two-person FPL regardless of size. @@ -82,7 +82,7 @@ members: [person1, person2, person3] state_code: CA output: - ca_standard_deduction: 22_147 + ca_standard_deduction: 22_191 - name: Joint filers with no children use two-person FPL. period: 2027 @@ -107,7 +107,7 @@ members: [person1, person2] state_code: CA output: - ca_standard_deduction: 22_147 + ca_standard_deduction: 22_191 - name: Joint filers with two children use four-person FPL. # Bill R&TC 17073.5(b)(3) scales joint FPL with the number of persons in the household. @@ -139,7 +139,7 @@ members: [person1, person2, person3, person4] state_code: CA output: - ca_standard_deduction: 33_774 + ca_standard_deduction: 33_841 - name: Married filing separately uses one-person FPL. period: 2027 @@ -161,7 +161,7 @@ members: [person1] state_code: CA output: - ca_standard_deduction: 16_334 + ca_standard_deduction: 16_367 - name: Reform inactive leaves baseline CA standard deduction unchanged. period: 2027 From adf8982130601c0c163d6a81638fa10e13e29697 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Fri, 23 Oct 2026 16:30:14 -0400 Subject: [PATCH 4/5] Address review: 430(b) cap extension, CBO 2036 CPI points, pinned seams - Cite 7 U.S.C. 2012(u)(3)(C) for the SNAP uprater, plus the pre-2025 (u)(4) and 7 CFR 273.10(e)(4)(ii). - Extend the payroll cap after 2036 with the 42 U.S.C. 430(b) fixed 1994 base instead of the chained 20 CFR 404.1048 wording; it reproduces every automatically adjusted base from 1995 to 2027. - Load CBO's calendar-2036 CPI-U (416.5) and chained CPI-U (223.5) points and start both extensions in 2037. - Pin every CBO February 2026 projection point, including the two that set the 2037-2100 growth of each series, and the IRS August-July window. - Cite the January 2025 Economic Projections file for the HHS 2026 anchor, the February 2026 Tax Parameters file for the cap and NAWI, and the sheet and row of each Economic Projections series. - Document the HHS one-year lead over 42 U.S.C. 9902(2), the CPI-U proxy for CPI-W with 42 U.S.C. 415(i), and why projected caps sit above CBO's. - Correct the IRS window comments, the ERDC, AB 2591 and 2042 dependent standard deduction derivations, and one trailing zero. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01LqCGPgxDukji8Bhs57c5rH --- .../cbo-2026-projections-2036.changed.md | 2 +- .../parameters/gov/bls/cpi/c_cpi_u.yaml | 3 +- .../parameters/gov/bls/cpi/cpi_u.yaml | 3 +- .../parameters/gov/hhs/uprating.yaml | 20 +- .../gov/irs/payroll/social_security/cap.yaml | 6 +- policyengine_us/parameters/gov/ssa/nawi.yaml | 5 +- .../parameters/gov/ssa/uprating.yaml | 11 +- .../parameters/gov/usda/snap/uprating.yaml | 11 +- .../parameters/uprating_extensions.py | 56 ++--- .../standard/basic_standard_deduction.yaml | 10 +- .../gov/states/or/delc/erdc/integration.yaml | 3 + .../parameters/test_uprating_extensions.py | 238 ++++++++++++++---- .../contrib/states/ca/ab2591/ca_ab2591.yaml | 12 +- 13 files changed, 275 insertions(+), 105 deletions(-) diff --git a/changelog.d/cbo-2026-projections-2036.changed.md b/changelog.d/cbo-2026-projections-2036.changed.md index 7c33496b870..e46b07d2803 100644 --- a/changelog.d/cbo-2026-projections-2036.changed.md +++ b/changelog.d/cbo-2026-projections-2036.changed.md @@ -1 +1 @@ -Load CBO's February 2026 projections through 2036 into the SSA, SNAP and HHS upraters, the CPI-W series, the national average wage index and the Social Security payroll cap, growing each from its latest actual (the HHS index from its 2026 value), and keep CBO's 2035 CPI-U and chained CPI-U projections instead of extrapolating over them. +Load CBO's February 2026 projections through 2036 into the SSA, SNAP and HHS upraters, the CPI-W series, the national average wage index and the Social Security payroll cap, growing each from its latest actual (the HHS index from its 2026 value); keep CBO's 2035 CPI-U and chained CPI-U points instead of extrapolating over them and add their 2036 points; and extend the payroll cap after 2036 with the 42 U.S.C. 430(b) fixed-base formula. diff --git a/policyengine_us/parameters/gov/bls/cpi/c_cpi_u.yaml b/policyengine_us/parameters/gov/bls/cpi/c_cpi_u.yaml index f9f7cc3021e..851b5f35b38 100644 --- a/policyengine_us/parameters/gov/bls/cpi/c_cpi_u.yaml +++ b/policyengine_us/parameters/gov/bls/cpi/c_cpi_u.yaml @@ -332,7 +332,8 @@ values: 2033-02-01: 210.8 # 2034 value. 2034-02-01: 214.9 # 2035 value. 2035-02-01: 219.2 # 2036 value. - # Values for 2036-2100 are set programmatically in uprating_extensions.py + 2036-02-01: 223.5 # 2037 value. + # Values for 2037-2100 are set programmatically in uprating_extensions.py metadata: economy: false unit: currency-USD diff --git a/policyengine_us/parameters/gov/bls/cpi/cpi_u.yaml b/policyengine_us/parameters/gov/bls/cpi/cpi_u.yaml index 2a76d76e7ec..94d670cb424 100644 --- a/policyengine_us/parameters/gov/bls/cpi/cpi_u.yaml +++ b/policyengine_us/parameters/gov/bls/cpi/cpi_u.yaml @@ -1373,7 +1373,8 @@ values: 2033-02-01: 389.6 # 2034 value. 2034-02-01: 398.4 # 2035 value. 2035-02-01: 407.3 # 2036 value. - # Values for 2036-2100 are set programmatically in uprating_extensions.py + 2036-02-01: 416.5 # 2037 value. + # Values for 2037-2100 are set programmatically in uprating_extensions.py metadata: unit: currency-USD label: CPI-U diff --git a/policyengine_us/parameters/gov/hhs/uprating.yaml b/policyengine_us/parameters/gov/hhs/uprating.yaml index 4e4919420d5..b7daa2e9dcc 100644 --- a/policyengine_us/parameters/gov/hhs/uprating.yaml +++ b/policyengine_us/parameters/gov/hhs/uprating.yaml @@ -1,12 +1,17 @@ description: The US indexes the federal poverty guidelines according to this schedule, annually updating based on CPI-U in the calendar year. values: # Actuals: calendar-year average CPI-U for the labeled year. + # NOTE: 42 U.S.C. 9902(2) and the HHS notices update guideline year Y by CPI-U + # CY(Y-1)/CY(Y-2). gov/hhs/fpg.yaml uprates guideline year Y with this index by + # CY(Y)/CY(Y-1), one year ahead of the statute. Aligning them changes this + # shared index, so it is left for a separate PR. 2022-01-01: 292.6 2023-01-01: 304.7 2024-01-01: 313.6 2025-01-01: 321.9 # CBO forecasts. 2026 keeps CBO's January 2025 projection, which the 2026 - # amounts derived from this index already use. Later years grow it at CBO's + # amounts derived from this index already use (the separate PR on the + # statutory lag above would revisit it). Later years grow it at CBO's # February 2026 calendar-year CPI-U growth: 2026 * CBO CPI-U (year) / CBO CPI-U (2026). 2026-01-01: 328.4 2027-01-01: 336.766 # 328.4 * 340.260 / 331.807 @@ -31,10 +36,17 @@ metadata: href: https://www.govinfo.gov/app/details/FR-2025-01-17/2025-01377 - title: 2024 Annual Update of the HHS Poverty Guidelines href: https://www.federalregister.gov/documents/2024/01/17/2024-00796/annual-update-of-the-hhs-poverty-guidelines - - title: CBO Budget and Economic Outlook | 2024 to 2034 - # 2026: Jan 2025 Economic Projections | 2. Calendar Year | Row 51 - href: https://www.cbo.gov/data/budget-economic-data#4 + - title: 42 U.S. Code § 9902(2) + href: https://www.law.cornell.edu/uscode/text/42/9902#2 + - title: 2026 Annual Update of the HHS Poverty Guidelines + href: https://www.federalregister.gov/documents/2026/01/15/2026-00755/annual-update-of-the-hhs-poverty-guidelines + - title: CBO | Economic Projections | January 2025 + # 2026: Sheet 2. Calendar Year, Row 53, CPI-U 328.446 (Row 51 in the original January 2025 release, before CBO's April 30, 2025 update) + href: https://www.cbo.gov/system/files/2025-01/51135-2025-01-Economic-Projections.xlsx + - title: CBO | Economic Projections | January 2025, calendar-year CSV (variable cpiu) + href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/calendar_2025-01.csv - title: CBO | Economic Projections | February 2026 + # Sheet: 2. Calendar Year, Row 53: CPI-U href: https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx - title: CBO | Economic Projections | February 2026, calendar-year CSV (variable cpiu) href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/calendar_2026-02.csv diff --git a/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml b/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml index 7a488a47b1e..61deb3ed7d6 100644 --- a/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml +++ b/policyengine_us/parameters/gov/irs/payroll/social_security/cap.yaml @@ -65,6 +65,9 @@ values: # parameters/gov/ssa/nawi.yaml, which follows CBO's February 2026 CBB # growth from the published 2025 NAWI: # CBB(Y) = 60_600 * NAWI(Y-2) / 22_935.42, rounded to the nearest $300. + # The levels sit above CBO's tp_ss_max_earnings (2036: 260_400 against + # 258_600), because NAWI grows from SSA's published 2025 value; only CBO's + # growth is used. 2028-01-01: 199_200 # 60_600 * 75_428.91 / 22_935.42 = 199_298.38 2029-01-01: 206_700 # 60_600 * 78_286.07 / 22_935.42 = 206_847.57 2030-01-01: 214_200 # 60_600 * 81_028.94 / 22_935.42 = 214_094.78 @@ -92,6 +95,7 @@ metadata: - title: 2027 Cost-of-Living Adjustment (COLA) Fact Sheet href: https://www.ssa.gov/news/en/cola/factsheets/2027.html - title: CBO | Tax Parameters and Effective Marginal Tax Rates | February 2026 - href: https://www.cbo.gov/publication/53724 + # Sheet: 1. Tax Parameters, Row 155: Maximum taxable earnings for the Social Security payroll tax + href: https://www.cbo.gov/system/files/2026-02/53724-2026-02-Tax-Parameters.xlsx - title: CBO | Tax Parameters | February 2026, CSV (variable tp_ss_max_earnings) href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/budget/tax_parameters/annual_cy_2026-02.csv diff --git a/policyengine_us/parameters/gov/ssa/nawi.yaml b/policyengine_us/parameters/gov/ssa/nawi.yaml index 58682f5d7e1..5012c080da5 100644 --- a/policyengine_us/parameters/gov/ssa/nawi.yaml +++ b/policyengine_us/parameters/gov/ssa/nawi.yaml @@ -102,9 +102,8 @@ metadata: reference: - title: Social Security National Average Wage Index href: https://www.ssa.gov/oact/cola/AWI.html#Series - - title: 2027 Cost-of-Living Adjustment (COLA) Fact Sheet - href: https://www.ssa.gov/news/en/cola/factsheets/2027.html - title: CBO | Tax Parameters and Effective Marginal Tax Rates | February 2026 - href: https://www.cbo.gov/publication/53724 + # Sheet: 1. Tax Parameters, Row 155: Maximum taxable earnings for the Social Security payroll tax + href: https://www.cbo.gov/system/files/2026-02/53724-2026-02-Tax-Parameters.xlsx - title: CBO | Tax Parameters | February 2026, CSV (variable tp_ss_max_earnings) href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/budget/tax_parameters/annual_cy_2026-02.csv diff --git a/policyengine_us/parameters/gov/ssa/uprating.yaml b/policyengine_us/parameters/gov/ssa/uprating.yaml index cac10454eea..e348ffe7e79 100644 --- a/policyengine_us/parameters/gov/ssa/uprating.yaml +++ b/policyengine_us/parameters/gov/ssa/uprating.yaml @@ -9,6 +9,10 @@ values: 2027-01-01: 328.746 # 2026Q3: (327.104 + 328.481 + 330.654) / 3 # Forecasts carry the 2026Q3 CPI-W actual forward at CBO's February 2026 # quarterly CPI-U growth: 2026Q3 actual * CBO CPI-U (Q3) / CBO CPI-U (2026Q3). + # CBO's Economic Projections publish no CPI-W series, so CBO CPI-U Q3/Q3 + # growth stands in for CPI-W Q3/Q3. CBO's own projected COLAs (2.3% a year + # for 2029-2036) match this growth (2.26% a year) to the tenth of a percent + # that CBO publishes. 2028-01-01: 336.945 # 2027Q3: 328.746 * 341.281 / 332.976 2029-01-01: 344.854 # 2028Q3: 328.746 * 349.291 / 332.976 2030-01-01: 352.722 # 2029Q3: 328.746 * 357.260 / 332.976 @@ -24,13 +28,18 @@ metadata: unit: currency-USD label: SSA uprating reference: - - title: Historical values + - title: SSA | Cost-of-living adjustments, 1975-present href: https://www.ssa.gov/oact/cola/colaseries.html + - title: 42 U.S. Code § 415(i) + href: https://www.law.cornell.edu/uscode/text/42/415#i - title: BLS CPI-W, U.S. city average, all items, not seasonally adjusted (CWUR0000SA0) href: https://data.bls.gov/timeseries/CWUR0000SA0 - title: 2027 Cost-of-Living Adjustment (COLA) Fact Sheet href: https://www.ssa.gov/news/en/cola/factsheets/2027.html - title: CBO | Economic Projections | February 2026 + # Sheet: 1. Quarterly, Row 53: CPI-U href: https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx - title: CBO | Economic Projections | February 2026, quarterly CSV (variable cpiu) href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/quarterly_2026-02.csv + - title: CBO | The Budget and Economic Outlook, 2026 to 2036 | February 2026, Chapter 3, Social Security (projected COLAs) + href: https://www.cbo.gov/system/files/2026-02/61882-Outlook-2026.pdf#page=74 diff --git a/policyengine_us/parameters/gov/usda/snap/uprating.yaml b/policyengine_us/parameters/gov/usda/snap/uprating.yaml index c320b344665..1f97ac2dcc9 100644 --- a/policyengine_us/parameters/gov/usda/snap/uprating.yaml +++ b/policyengine_us/parameters/gov/usda/snap/uprating.yaml @@ -11,7 +11,7 @@ values: # Forecasts carry the June 2026 actual forward at CBO's February 2026 # quarterly CPI-U growth: June 2026 actual * CBO CPI-U (Q2) / CBO CPI-U (2026Q2). 2027-10-01: 342.578 # 2027Q2: 333.952 * 339.250 / 330.708 - 2028-10-01: 350.710 # 2028Q2: 333.952 * 347.303 / 330.708 + 2028-10-01: 350.71 # 2028Q2: 333.952 * 347.303 / 330.708 2029-10-01: 358.747 # 2029Q2: 333.952 * 355.262 / 330.708 2030-10-01: 366.868 # 2030Q2: 333.952 * 363.304 / 330.708 2031-10-01: 375.156 # 2031Q2: 333.952 * 371.512 / 330.708 @@ -26,11 +26,16 @@ metadata: label: SNAP uprating economy: false reference: - - title: 7 U.S. Code § 2012(u)(4) - href: https://www.law.cornell.edu/uscode/text/7/2012#u_4 + - title: 7 U.S. Code § 2012(u)(3)(C) + href: https://www.law.cornell.edu/uscode/text/7/2012#u_3_C + - title: 7 U.S. Code § 2012(u)(4) (2023 edition, before Pub. L. 119-21) + href: https://www.govinfo.gov/content/pkg/USCODE-2023-title7/html/USCODE-2023-title7-chap51-sec2012.htm + - title: 7 CFR 273.10(e)(4)(ii) + href: https://www.ecfr.gov/current/title-7/part-273/section-273.10#p-273.10(e)(4)(ii) - title: BLS Consumer Price Index for All Urban Consumers (CPI-U), all items, U.S. city average, not seasonally adjusted (CUUR0000SA0) href: https://data.bls.gov/timeseries/CUUR0000SA0 - title: CBO | Economic Projections | February 2026 + # Sheet: 1. Quarterly, Row 53: CPI-U href: https://www.cbo.gov/system/files/2026-02/51135-2026-02-Economic-Projections.xlsx - title: CBO | Economic Projections | February 2026, quarterly CSV (variable cpiu) href: https://github.com/US-CBO/cbo-data/blob/284a95665f9f2f74ed1f482feb629b43fce323da/data/economic/economic_projections/quarterly_2026-02.csv diff --git a/policyengine_us/parameters/uprating_extensions.py b/policyengine_us/parameters/uprating_extensions.py index a32b0e371a7..79d70ccfe58 100644 --- a/policyengine_us/parameters/uprating_extensions.py +++ b/policyengine_us/parameters/uprating_extensions.py @@ -23,7 +23,11 @@ def get_irs_cpi(parameters: ParameterNode, year: int) -> float: - """Calculate IRS CPI based on Chained CPI-U average from Sep to Aug.""" + """Average chained CPI-U from August of ``year - 1`` through July of ``year``. + + 26 U.S.C. 1(f) uses the 12 months ending August; #9105 tracks the + one-month offset. + """ cpi = parameters.gov.bls.cpi.c_cpi_u end = instant(f"{year}-08-01") start = end.offset(-MONTHS_IN_YEAR, MONTH) @@ -779,32 +783,27 @@ def extend_social_security_payroll_cap( """ Extend the Social Security contribution and benefit base through `end_year`. - This follows the statutory formula in 20 CFR 404.1048 using the projected - national average wage index (NAWI), rather than extrapolating the cap - independently. + Follows 42 U.S.C. 430(b) on the projected national average wage index + (NAWI): the base for year Y is the larger of the base in effect for Y - 1 + and the 1994 base ($60,600) times NAWI(Y - 2) / NAWI(1992), rounded to the + nearest $300 (a multiple of $150 rounds up). 20 CFR 404.1048(b)(2)(i) + still states the pre-1995 chained formula, which Pub. L. 103-296, + sec. 321(g)(1), replaced for bases after 1994. """ cap = parameters.gov.irs.payroll.social_security.cap nawi = parameters.gov.ssa.nawi - - last_increase_determination_year = last_projected_year - 1 - if cap(f"{last_projected_year}-01-01") <= cap(f"{last_projected_year - 1}-01-01"): - for year in range(last_projected_year - 1, 1992, -1): - if cap(f"{year}-01-01") > cap(f"{year - 1}-01-01"): - last_increase_determination_year = year - 1 - break + base_1994 = cap("1994-01-01") + nawi_1992 = nawi("1992-01-01") for year in range(last_projected_year + 1, end_year + 1): - determination_year = year - 1 - current_cap = cap(f"{determination_year}-01-01") - numerator = nawi(f"{determination_year - 1}-01-01") - denominator = nawi(f"{last_increase_determination_year - 1}-01-01") + current_cap = cap(f"{year - 1}-01-01") proposed_cap = round_social_security_payroll_cap( - current_cap * numerator / denominator + base_1994 * nawi(f"{year - 2}-01-01") / nawi_1992 + ) + cap.update( + period=f"year:{year}-01-01:1", + value=max(current_cap, proposed_cap), ) - new_cap = max(current_cap, proposed_cap) - cap.update(period=f"year:{year}-01-01:1", value=new_cap) - if new_cap > current_cap: - last_increase_determination_year = determination_year final_value = cap(f"{end_year}-01-01") cap.update(start=instant(f"{end_year}-01-01"), value=final_value) @@ -936,8 +935,8 @@ def set_all_uprating_parameters(parameters: ParameterNode) -> ParameterNode: # IRS uprating - special case that computes from CPI IRS_UPRATING_START_YEAR = 2010 - # 2036 reads the 12 months ending August 2035, whose chained CPI-U - # projection points (CBO February 2026) run through the 2035 instant. + # 2036 averages chained CPI-U from August 2034 to July 2035 (see #9105); + # the 2035 instant holds CBO's February 2026 calendar-2035 point. IRS_LAST_PROJECTED_YEAR = 2036 uprating_index = parameters.gov.irs.uprating @@ -1011,21 +1010,22 @@ def set_all_uprating_parameters(parameters: ParameterNode) -> ParameterNode: period_day=1, ) - # CPI-U (February values, last projection year 2035). The 2035 instant - # holds CBO's February 2026 projection that applies through 2036, so - # extrapolation starts at the 2036 instant. + # CPI-U (February values, last projection year 2036). Each February + # instant holds CBO's February 2026 calendar-year average for that year + # (the "# YYYY value" comments name the tax year it feeds), so CBO's last + # point, calendar 2036, sits at the 2036 instant. extend_parameter_values( parameters.gov.bls.cpi.cpi_u, - last_projected_year=2035, + last_projected_year=2036, end_year=END_YEAR, period_month=2, period_day=1, ) - # Chained CPI-U (February values, last projection year 2035), as for CPI-U. + # Chained CPI-U (February values, last projection year 2036), as for CPI-U. extend_parameter_values( parameters.gov.bls.cpi.c_cpi_u, - last_projected_year=2035, + last_projected_year=2036, end_year=END_YEAR, period_month=2, period_day=1, diff --git a/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml b/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml index 55633ed743d..b399f60da0e 100644 --- a/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml +++ b/policyengine_us/tests/policy/baseline/gov/irs/deductions/standard/basic_standard_deduction.yaml @@ -165,11 +165,11 @@ # Past CBO's 2036 horizon, 63(c)(4)(B)(i) increases the 63(c)(5)(A) $500 # by the 1(f)(3) adjustment with calendar year 1987 as the base year. # C-CPI-U for the 12 months ending August 2041: uprating_extensions.py - # extends c_cpi_u.yaml past 2034 at its 2033-2034 growth rate, - # 214.9 x (214.9 / 210.8)^7 = 245.922. + # extends c_cpi_u.yaml past 2036 at its 2035-2036 growth rate, + # 223.5 x (223.5 / 219.2)^5 = 246.299. # 1(f)(3)(A)(ii) and (B): CPI-U Sep 1986-Aug 1987 average 111.983 x # 135.993 / 238.649 = 63.813. - # Increase = $500 x (245.922 / 63.813 - 1) = $1,426.89, rounded down to + # Increase = $500 x (246.299 / 63.813 - 1) = $1,429.85, rounded down to # $1,400, so $1,900. period: 2042 input: @@ -188,8 +188,8 @@ basic_standard_deduction: 1_900 - name: 2042 dependent filer with $3,000 of wages gets $650 plus earned income - # Same 2041 C-CPI-U of 245.922 and 1997 denominator of 90.886. - # Increase = $250 x (245.922 / 90.886 - 1) = $426.46, rounded down to + # Same 2041 C-CPI-U of 246.299 and 1997 denominator of 90.886. + # Increase = $250 x (246.299 / 90.886 - 1) = $427.49, rounded down to # $400, so $650. max($1,900, $650 + $3,000) = $3,650. period: 2042 input: diff --git a/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml index 7f66f34066e..e1828cc44a4 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/or/delc/erdc/integration.yaml @@ -35,6 +35,9 @@ or_erdc_eligible: true or_erdc: 1_490 +# 2027 2-person FPG = (15,960 + 5,680) x 336.766 / 328.4 = 22,191.28. +# Initial limit = ceil(22,191.28 / 12 x 2) = ceil(3,698.55) = 3,699. The rule +# is income < limit, so income of 3,699 is ineligible. - name: Case 2, initial applicant at the strict income limit is ineligible. period: 2027-01 absolute_error_margin: 0.1 diff --git a/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py b/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py index 0b52f48a866..01e350f6715 100644 --- a/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py +++ b/policyengine_us/tests/policy/baseline/parameters/test_uprating_extensions.py @@ -18,7 +18,6 @@ extend_educator_expense_cap, get_irs_cola, get_irs_cola_denominator, - get_irs_cpi, round_social_security_amount, round_social_security_payroll_cap, ) @@ -310,10 +309,15 @@ def test_ssa_nawi_and_payroll_cap_extend_to_2100(): f"Payroll cap should increase from {test_years[i - 1]} to {test_years[i]}" ) - for year in [2037, 2040, 2050, 2100]: - current_cap = payroll_cap(f"{year - 1}-01-01") - expected_cap = round_social_security_payroll_cap( - current_cap * nawi(f"{year - 2}-01-01") / nawi(f"{year - 3}-01-01") + # 42 U.S.C. 430(b): fixed 1994 base, never below the prior year's base. + for year in [2037, 2040, 2050, 2073, 2100]: + expected_cap = max( + payroll_cap(f"{year - 1}-01-01"), + round_social_security_payroll_cap( + payroll_cap("1994-01-01") + * nawi(f"{year - 2}-01-01") + / nawi("1992-01-01") + ), ) assert payroll_cap(f"{year}-01-01") == expected_cap @@ -326,7 +330,7 @@ def test_social_security_payroll_cap_formula_matches_known_values(): nawi = parameters.gov.ssa.nawi expected_2025_cap = round_social_security_payroll_cap( - payroll_cap("2024-01-01") * nawi("2023-01-01") / nawi("2022-01-01") + payroll_cap("1994-01-01") * nawi("2023-01-01") / nawi("1992-01-01") ) assert expected_2025_cap == payroll_cap("2025-01-01") @@ -413,65 +417,197 @@ def test_social_security_parameters_include_latest_official_2027_values(): assert pia.thresholds[2] == 8_077 -# CBO February 2026 projections (US-CBO/cbo-data at 284a956): quarterly and -# calendar-year CPI-U (cpiu) and the contribution and benefit base -# (tp_ss_max_earnings). +# CBO February 2026 projections, from US-CBO/cbo-data at 284a956, whose CSVs +# equal the workbook rows: quarterly_2026-02.csv and calendar_2026-02.csv +# (cpiu and chained_cpiu; Economic Projections sheets "1. Quarterly", row 53, +# and "2. Calendar Year", rows 53 and 57) and annual_cy_2026-02.csv +# (tp_ss_max_earnings; Tax Parameters sheet "1. Tax Parameters", row 155). CBO_2026_02_QUARTERLY_CPI_U = { "2026Q2": 330.708, "2026Q3": 332.976, + "2026Q4": 335.132, + "2027Q1": 337.213, + "2027Q2": 339.250, + "2027Q3": 341.281, + "2027Q4": 343.298, + "2028Q1": 345.305, + "2028Q2": 347.303, + "2028Q3": 349.291, + "2028Q4": 351.280, + "2029Q1": 353.269, + "2029Q2": 355.262, + "2029Q3": 357.260, + "2029Q4": 359.265, + "2030Q1": 361.279, + "2030Q2": 363.304, + "2030Q3": 365.340, + "2030Q4": 367.386, + "2031Q1": 369.444, + "2031Q2": 371.512, + "2031Q3": 373.591, + "2031Q4": 375.682, + "2032Q1": 377.784, + "2032Q2": 379.898, + "2032Q3": 382.024, + "2032Q4": 384.161, + "2033Q1": 386.310, + "2033Q2": 388.471, + "2033Q3": 390.644, + "2033Q4": 392.830, + "2034Q1": 395.027, + "2034Q2": 397.237, + "2034Q3": 399.460, + "2034Q4": 401.695, + "2035Q1": 403.943, + "2035Q2": 406.203, "2035Q3": 408.476, + "2035Q4": 410.762, + "2036Q1": 413.061, "2036Q2": 415.373, + "2036Q3": 417.698, "2036Q4": 420.036, } -CBO_2026_02_CALENDAR_CPI_U = {2026: 331.807, 2036: 416.542} -CBO_2026_02_CBB = {2027: 191_100, 2036: 258_600} +CBO_2026_02_CALENDAR_CPI_U = { + 2026: 331.807, + 2027: 340.260, + 2028: 348.295, + 2029: 356.264, + 2030: 364.328, + 2031: 372.557, + 2032: 380.967, + 2033: 389.564, + 2034: 398.355, + 2035: 407.346, + 2036: 416.542, +} +CBO_2026_02_CALENDAR_C_CPI_U = { + 2027: 187.212, + 2028: 191.088, + 2029: 194.917, + 2030: 198.775, + 2031: 202.695, + 2032: 206.688, + 2033: 210.759, + 2034: 214.912, + 2035: 219.152, + 2036: 223.479, +} +CBO_2026_02_CBB = { + 2027: 191_100, + 2028: 198_000, + 2029: 205_500, + 2030: 212_700, + 2031: 219_900, + 2032: 227_100, + 2033: 234_900, + 2034: 242_400, + 2035: 250_500, + 2036: 258_600, +} +# The latest actuals that each projection grows from. +SSA_2026Q3_CPI_W = 328.746 # BLS CWUR0000SA0, July-September 2026 mean +JUNE_2026_CPI_W = 327.075 # BLS CWUR0000SA0 +JUNE_2026_CPI_U = 333.952 # BLS CUUR0000SA0 +NAWI_2025 = 72_800.33 # SSA AWI series +HHS_2026 = 328.4 # CBO January 2025 calendar-2026 CPI-U (328.446) -def test_upraters_follow_cbo_february_2026_growth_through_2036(): - """2036 values grow each series from its anchor at CBO's February 2026 rates.""" - parameters = PARAMETERS + +def _cbo_2026_02_projection_cases(): quarterly = CBO_2026_02_QUARTERLY_CPI_U calendar = CBO_2026_02_CALENDAR_CPI_U + cases = [] + # SSA: 2026Q3 CPI-W x CBO CPI-U Q3(Y - 1) / 2026Q3. + for year in range(2028, 2037): + growth = quarterly[f"{year - 1}Q3"] / quarterly["2026Q3"] + cases.append( + ("gov.ssa.uprating", f"{year}-01-01", SSA_2026Q3_CPI_W * growth, 3) + ) + # SNAP: June 2026 CPI-U x CBO CPI-U Q2(Y) / 2026Q2. + for year in range(2027, 2037): + growth = quarterly[f"{year}Q2"] / quarterly["2026Q2"] + cases.append( + ("gov.usda.snap.uprating", f"{year}-10-01", JUNE_2026_CPI_U * growth, 3) + ) + # HHS: 2026 value x CBO calendar CPI-U(Y) / calendar 2026. + for year in range(2027, 2037): + growth = calendar[year] / calendar[2026] + cases.append(("gov.hhs.uprating", f"{year}-01-01", HHS_2026 * growth, 3)) + # CPI-W: each CBO CPI-U quarter at the June 2026 CPI-W / CPI-U ratio, at + # the quarter's middle month. + for quarter, cpi_u in quarterly.items(): + if quarter < "2026Q3": + continue + year, month = int(quarter[:4]), 3 * int(quarter[-1]) - 1 + cases.append( + ( + "gov.bls.cpi.cpi_w", + f"{year}-{month:02d}-01", + cpi_u * JUNE_2026_CPI_W / JUNE_2026_CPI_U, + 3, + ) + ) + # NAWI: SSA's 2025 AWI x CBO CBB(Y + 2) / CBB 2027. + for year in range(2026, 2035): + growth = CBO_2026_02_CBB[year + 2] / CBO_2026_02_CBB[2027] + cases.append(("gov.ssa.nawi", f"{year}-01-01", NAWI_2025 * growth, 2)) + # CPI-U and chained CPI-U: CBO's calendar-year Y average at the Y-02-01 + # instant, to one decimal. + for year in range(2027, 2037): + cases.append(("gov.bls.cpi.cpi_u", f"{year}-02-01", calendar[year], 1)) + cases.append( + ( + "gov.bls.cpi.c_cpi_u", + f"{year}-02-01", + CBO_2026_02_CALENDAR_C_CPI_U[year], + 1, + ) + ) + return cases - # SSA: the 2026Q3 CPI-W behind the 2027 COLA, grown to 2035Q3. - ssa = parameters.gov.ssa.uprating - assert ssa("2036-01-01") == pytest.approx( - ssa("2027-01-01") * quarterly["2035Q3"] / quarterly["2026Q3"], abs=5e-4 - ) - # SNAP: June 2026 CPI-U, grown to 2036Q2. - snap = parameters.gov.usda.snap.uprating - assert snap("2036-10-01") == pytest.approx( - snap("2026-10-01") * quarterly["2036Q2"] / quarterly["2026Q2"], abs=5e-4 - ) - # HHS: the index's 2026 value, grown to 2036. - hhs = parameters.gov.hhs.uprating - assert hhs("2036-01-01") == pytest.approx( - hhs("2026-01-01") * calendar[2036] / calendar[2026], abs=5e-4 - ) - # NAWI(2025) is SSA's published value; later years grow with CBO's - # CBB, and the cap follows 42 U.S.C. 430(b) on that NAWI. - nawi = parameters.gov.ssa.nawi - assert nawi("2034-01-01") == pytest.approx( - nawi("2025-01-01") * CBO_2026_02_CBB[2036] / CBO_2026_02_CBB[2027], - abs=5e-3, - ) - cap = parameters.gov.irs.payroll.social_security.cap + +CBO_2026_02_PROJECTION_CASES = _cbo_2026_02_projection_cases() + + +@pytest.mark.parametrize( + "path,date,expected,decimals", + CBO_2026_02_PROJECTION_CASES, + ids=[f"{path}@{date}" for path, date, _, _ in CBO_2026_02_PROJECTION_CASES], +) +def test_upraters_encode_cbo_february_2026_projections(path, date, expected, decimals): + """Each projected value applies CBO's February 2026 growth to its anchor. + + extend_parameter_values grows every year after a series' last CBO point at + the ratio of its last two points, so these values, the last two included, + also set the 2037-2100 path. + """ + assert PARAMETERS.get_child(path)(date) == round(expected, decimals) + + +def test_projected_payroll_caps_follow_430b_through_2036(): + """2028-2036 caps apply 42 U.S.C. 430(b) to the CBO-based NAWI.""" + cap = PARAMETERS.gov.irs.payroll.social_security.cap + nawi = PARAMETERS.gov.ssa.nawi for year in range(2028, 2037): assert cap(f"{year}-01-01") == round_social_security_payroll_cap( cap("1994-01-01") * nawi(f"{year - 2}-01-01") / nawi("1992-01-01") ) assert cap("2036-01-01") == 260_400 - # CPI-W: CBO's 2036Q4 CPI-U at the last observed CPI-W/CPI-U ratio. - assert parameters.gov.bls.cpi.cpi_w("2036-11-01") == pytest.approx( - quarterly["2036Q4"] * 327.075 / 333.952, abs=5e-4 - ) - # CBO's 2035 CPI-U projection points, which apply through 2036, survive - # the extension, and the 2036 IRS index reads them. - assert parameters.gov.bls.cpi.cpi_u("2035-02-01") == 407.3 - assert parameters.gov.bls.cpi.c_cpi_u("2035-02-01") == 219.2 - assert parameters.gov.irs.uprating("2036-01-01") == pytest.approx( - get_irs_cpi(parameters, 2035), rel=1e-12 - ) + + +def test_irs_uprating_averages_cbo_chained_cpi_u_points(): + """IRS(Y) averages chained CPI-U from August Y - 2 to July Y - 1 (#9105). + + Six months read the February Y - 2 point and six read February Y - 1. + """ + irs = PARAMETERS.gov.irs.uprating + c_cpi_u = { + year: round(value, 1) for year, value in CBO_2026_02_CALENDAR_C_CPI_U.items() + } + for year in range(2029, 2037): + assert irs(f"{year}-01-01") == pytest.approx( + (6 * c_cpi_u[year - 2] + 6 * c_cpi_u[year - 1]) / 12, rel=1e-12 + ) @pytest.mark.parametrize( @@ -482,8 +618,8 @@ def test_upraters_follow_cbo_february_2026_growth_through_2036(): ("gov.usda.snap.uprating", 2036, "-10-01"), ("gov.hhs.uprating", 2036, "-01-01"), ("gov.ssa.nawi", 2034, "-01-01"), - ("gov.bls.cpi.cpi_u", 2035, "-02-01"), - ("gov.bls.cpi.c_cpi_u", 2035, "-02-01"), + ("gov.bls.cpi.cpi_u", 2036, "-02-01"), + ("gov.bls.cpi.c_cpi_u", 2036, "-02-01"), ("gov.bls.cpi.cpi_w", 2036, "-02-01"), ], ) @@ -508,7 +644,7 @@ def test_social_security_wage_indexed_parameters_follow_statutory_rounding(): nawi = parameters.gov.ssa.nawi social_security = parameters.gov.ssa.social_security - for year in [2027, 2036, 2050, 2100]: + for year in [2027, 2036, 2037, 2050, 2100]: date = f"{year}-01-01" prior_date = f"{year - 1}-01-01" determination_nawi = nawi(f"{year - 2}-01-01") diff --git a/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml b/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml index 4b1ae26142a..856516fc3fc 100644 --- a/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml +++ b/policyengine_us/tests/policy/contrib/states/ca/ab2591/ca_ab2591.yaml @@ -2,12 +2,12 @@ # Allows taxpayers to elect a standard deduction equal to the federal # poverty line for their household size. # Effective for taxable years beginning on or after July 1, 2027. -# 2027 federal poverty guidelines (CONTIGUOUS_US): -# first person = $16,367 -# additional person = $5,825 -# 1-person FPL = $16,367 -# 2-person FPL = $22,191 -# 4-person FPL = $33,841 +# 2027 federal poverty guidelines (CONTIGUOUS_US), 2026 values x 336.766 / 328.4: +# first person = $16,366.58 +# additional person = $5,824.70 +# 1-person FPL = $16,367 (rounded) +# 2-person FPL = $22,191 (rounded) +# 4-person FPL = $33,841 (rounded) - name: Single filer uses one-person FPL. period: 2027 From 241b029be629086757a6313484c8edc42f6b7a8e Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Fri, 23 Oct 2026 16:42:31 -0400 Subject: [PATCH 5/5] Expect the CPI-U YAML to end in 2036 in the dataset-extension test The test pins the last authored CPI-U year, which sets the default dataset extension end year; CBO's calendar-2036 point now ends the YAML. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01LqCGPgxDukji8Bhs57c5rH --- .../data/test_extend_single_year_dataset.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/policyengine_us/tests/microsimulation/data/test_extend_single_year_dataset.py b/policyengine_us/tests/microsimulation/data/test_extend_single_year_dataset.py index b9f367f41f4..8ed4f90782a 100644 --- a/policyengine_us/tests/microsimulation/data/test_extend_single_year_dataset.py +++ b/policyengine_us/tests/microsimulation/data/test_extend_single_year_dataset.py @@ -1191,14 +1191,15 @@ class FakeParam: def test_with_real_cpi_u_parameter(self): """Verify get_parameter_last_year works on the actual CPI-U - parameter YAML, returning 2035 (not 2100 from uprating_extensions).""" + parameter YAML, returning 2036 (not 2100 from uprating_extensions).""" from policyengine_us.system import system cpi_u = _resolve_parameter(system.parameters, "gov.bls.cpi.cpi_u") last_year = get_parameter_last_year(cpi_u) - # CPI-U YAML currently extends to 2035; if the YAML is updated, - # this assertion should be updated to match. - assert last_year == 2035 + # CPI-U YAML currently extends to 2036 (CBO's February 2026 + # projections); if the YAML is updated, this assertion should be + # updated to match. + assert last_year == 2036 # ---------------------------------------------------------------------------