Calculation catalog › Social Security

Social security break even

Age at which the cumulative own retirement benefit of a later claim age overtakes an earlier one's, with the cumulative benefits by age in the plan's dollars for each year.

Field: Claiming break-even age Unit: age in years Basis: no dollar basis Computed by: UI-native Status: Complete chain

Appears in: ss-page (Break-even tab callout "waiting until L pulls ahead around age X" and the chart's cumulative benefit tooltips)

Calculation records

  • Claiming break-even ages and cumulative benefits Model record, justified by derivation

    Purpose: Chart one person's cumulative own benefit at a few claim ages in the plan's dollars, and the age each later claim catches up.

    Statement: socialSecurity/analysis/breakEven.ts#claimBreakEven accumulates, for each compared whole-year claim age c and each age a from 62 through the chart's last age, in calendar year y = birth year + a, the own benefit the ledger's year function (socialSecurity/householdYear.ts#socialSecurityYear) pays the person in y with the claim at c years and 0 months and nothing else on the record: 0 before c, otherwise the start-year PIA x the claim factor for c years and 0 months x 12 x socialSecurity/colaFactor.ts#socialSecurityColaFactor for y x #socialSecurityHaircutFactor for y, the two factors projection/simulate.ts#simulatePlan multiplies every benefit by, less what the earnings test withholds from it on the person's own wages (the plan's wage rows, analysis/expectedValue.ts#personWagesInYear), and from the full-retirement-age month at the claim age raised by the crediting months; it also names the claim ages at which the test withholds. The running total is B_c(a) = B_c(a - 1) x (1 + g) + benefit_c(a) at the chosen return g. For each pair of claim ages e < l it walks the ages at which B_e is positive and reports the first age a with D(a) = B_l(a) - B_e(a) >= 0, at a - 1 + (-D(a - 1)) / (D(a) - D(a - 1)) when the previous difference was negative, else at a; none when no age by the chart's end. #breakEvenClaimAges gives the page's comparison: 62, the full-retirement-age year and 70, each no earlier than the age reached in the start year; a claim age before it is refused. Units: nominal dollars of each year, ages in years. Rounding: none; the page prints the crossing to a tenth of a year and the dollars to whole dollars.

    Formula: B_c(a) = B_c(a - 1)(1 + g) + [a >= c] x (PIA x f_c(y) x 12 x cola(y) x cut(y) - withheld_c(y)); crossing(e, l) = a - 1 + (-D(a - 1))/(D(a) - D(a - 1)), D = B_l - B_e

    • PIA: The monthly PIA the projection pays from in its first year (unit: usd/month) (domain: nonnegative)
    • f_c(y): Claim factor for a claim at c years and 0 months, from the full-retirement-age month with the crediting months added (a year's months priced apart when that month falls in it) (unit: 1) (domain: 0.70 to 1.32)
    • withheld_c(y): What the earnings test withholds from the own benefit in year y on the person's own wages (unit: usd/year) (domain: nonnegative)
    • cola(y), cut(y): The projection's cost-of-living factor (1 in its first year) and trust-fund haircut for year y (unit: 1) (domain: positive)
    • g: Yearly return on benefits already received (unit: rate/year) (domain: 0, 3%, 5% or 7% on the page)
    • c, e, l: Whole-year claim ages (unit: years) (domain: 62 to 70, none before the age reached in the first year)

    Timing: annual, a whole year of benefits in the claim-age year

    Rounding: none; the page rounds for display

    Limits:

    • The person's own retirement benefit only: no spouse, survivor or divorced-spouse benefit, no taxes, and no mortality, since every charted age is taken as reached
    • The earnings test on the person's own wages is charged against the own benefit alone, as if nothing else were paid on the record: for a couple's worker whose wages also reach a spouse benefit on his record this withholds more from his own benefit than the family charge would
    • Wages are the plan's wage rows, whole calendar years spread evenly over their months, with no grace year; only wage streams are earnings (usc-42-403-f-5-earnings-counted)
    • Whole-year claim ages, paid for the whole claim-age year, as the ledger pays a claim at a whole age
    • The crossing interpolates linearly between yearly totals; within a year the true running total steps monthly
    • The dollars are each year's own dollars, as the projection pays them; the chart does not deflate them to today's dollars
    • A benefit paid as a disability benefit from its onset has no claim age to compare, and the page says so instead of charting it

    Provenance: derived by claude, implemented by claude.

    Independent review: codex

    Gates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass

    Worksheet: social-security-claim-break-even.md Mutation receipt: social-security-claim-break-even.mutation.md

    Evidence tests: breakEven.evidence.test.ts

    Implemented in: breakEven.ts; colaFactor.ts; householdYear.ts; householdPaths.ts

    Is the number of: social-security-break-even

Records that feed this number

  • Social Security COLA factor Model record, justified by derivation

    Purpose: Compound the benefit escalator from the projection start, with no escalation in the first year.

    Statement: projection/internal/annualSocialSecurity.ts#annualSocialSecurity receives an ssColaFactor that compounds from the projection start, with factor 1 in the first year, using either the plan's general inflation rate or its fixed ssCola rate, and an ssHaircutFactor. projection/simulate.ts#simulatePlan builds both with socialSecurity/colaFactor.ts#socialSecurityColaFactor, to which it passes its own inflation factor (a Monte Carlo path's when one is supplied), and #socialSecurityHaircutFactor (1 - cutPct / 100 from the haircut year, else 1); the break-even chart and the benefits-only expected value call the same two functions on the plan's deterministic inflation. For a fixed rate the factor at year offset n is (1 + rate)^n, so the published benefit of a stream already in force scales by exactly that factor against its start-year amount. Units: a dimensionless factor. Rounding: none.

    Formula: ssColaFactor(y) = (1 + ssCola.annualPct / 100)^(y - startYear) for the fixed mode, or the plan inflation factor from startYear to y for matchInflation

    • y: Projection year (unit: year) (domain: integer at or after startYear)
    • startYear: First projection year (unit: year) (domain: integer)
    • ssCola.annualPct: Plan fixed COLA rate (unit: percent/year) (domain: greater than -100)

    Timing: once per projection year

    Rounding: none

    Limits:

    • Asserted at the plan level the comments state rather than by reading a private local: the evidence runs a real projection of a single stream already in force, with twelve payable months and no haircut and no earnings test, so the year's published benefit over the start year's IS the factor the phase received
    • The two modes are alternatives, never combined: a plan on matchInflation does not additionally apply the fixed rate
    • The worksheet's 2.8% is year2026.socialSecurity.colaPct used as the plan's fixed rate; the parameter figure is not itself the plan default

    Provenance: derived by codex, implemented by claude.

    Independent review: grok

    Gates (6 of 6 pass): fixture registers a test: pass; pins resolve: pass; families exist: pass; worksheet exists: pass; mutation receipt exists: pass; provenance independent: pass

    Worksheet: social-security-cola-factor.md Mutation receipt: social-security-cola-factor.mutation.md

    Evidence tests: annualSocialSecurity.evidence.test.ts

    Implemented in: colaFactor.ts; annualSocialSecurity.ts; simulate.ts

    Feeds: social-security-benefit-annual, social-security-break-even, social-security-expected-present-value

Transformations

  • socialSecurity/analysis/breakEven.ts#claimBreakEven: for each compared claim age, each calendar year's own benefit is priced by the ledger's year function (socialSecurity/householdYear.ts#socialSecurityYear) for that benefit alone: PIA × claim factor × 12 × the ledger's COLA factor and haircut, with the retirement earnings test on the person's wage rows withholding part of it before full retirement age (never in a month before the claim's first month of entitlement) and the months withheld raising it from that age; the totals are compounded at the chosen return, and each pair's crossing age is found by linear interpolation of the unrounded annual totals. The page rounds the age to a tenth and the dollars to whole dollars, and names the person at the claim ages where wages hold part of the benefit back (withheldClaimAges).

The evidence links on this page (each record's worksheet, mutation receipt, evidence tests and implementation, and the source links) are pinned to engine commit 2624dbdba9fd, committed 2026-10-11. The live calculation index and output-family census links point at the repository's main branch, so you can check this snapshot against them.