diff --git a/src/lib/child-benefit-example.ts b/src/lib/child-benefit-example.ts new file mode 100644 index 00000000..c967e62f --- /dev/null +++ b/src/lib/child-benefit-example.ts @@ -0,0 +1,306 @@ +/** + * Worked examples for the child benefits guide. + * + * The guide follows one parent who turns 62 in the latest year the + * constants cover, with a round Primary Insurance Amount and children of + * given ages. From that it shows how the family maximum splits a fixed pool + * among however many people collect on the record, and what the family + * gives up or gains if the parent claims at 62 instead of waiting for full + * retirement age. + * + * Every figure here is derived from constants.ts and the benefit + * calculator, so the guide's tables follow the annual update. The children's + * ages, the example PIA, and any sentence in the guide naming a percentage + * or a ratio between rows are hand-written and still need a read each year. + * + * The result records below are plain readonly interfaces produced only by + * the functions beside them; they are not meant to be constructed by hand. + */ + +import { benefitAtAge, survivorBenefit } from './benefit-calculator'; +import { Birthdate } from './birthday'; +import * as constants from './constants'; +import { + type FamilyMaximumBendPoints, + familyMaximum, + familyMaximumBendPoints, +} from './family-maximum'; +import { Money } from './money'; +import { MonthDuration } from './month-time'; +import { Recipient } from './recipient'; + +/** A round Primary Insurance Amount the guide can reason about aloud. */ +export const EXAMPLE_PIA: Money = Money.from(2500); + +/** Age of the example parent in the guide's year. */ +const EXAMPLE_PARENT_AGE = 62; + +/** A child's benefit is half the parent's PIA before the family maximum. */ +const CHILD_BENEFIT_FRACTION = 0.5; + +/** Child benefits end at 18 for a child who is not a student or disabled. */ +const CHILD_BENEFIT_END_AGE = MonthDuration.initFromYearsMonths({ + years: 18, + months: 0, +}); + +/** The claiming age the comparison tests against full retirement age. */ +const EARLY_CLAIM_AGE = MonthDuration.initFromYearsMonths({ + years: EXAMPLE_PARENT_AGE, + months: 0, +}); + +/** + * An age at which the example parent has died, used only to place the death + * after both filing ages compared and the spouse past survivor full + * retirement age, so the survivor figure is the unreduced base amount. + */ +const SURVIVOR_EXAMPLE_DEATH_AGE = MonthDuration.initFromYearsMonths({ + years: 75, + months: 0, +}); + +/** + * A parent who turns 62 in the latest year the constants cover, so the + * family maximum is computed from the latest wage index (this relies on + * WAGE_INDICES covering MAX_YEAR - 2) and no cost-of-living adjustment has + * yet applied. Born on the 2nd of the month: only someone born on the 1st + * or 2nd is 62 for their whole birth month, which the comparison's claim + * at exactly 62 requires. The birth year gives a full retirement age of 67, + * which the guide states in prose. + */ +export function exampleParent(): Recipient { + const parent = new Recipient(); + parent.birthdate = Birthdate.FromYMD( + constants.MAX_YEAR - EXAMPLE_PARENT_AGE, + 0, + 2 + ); + parent.setPia(EXAMPLE_PIA); + return parent; +} + +export interface FamilyPayout { + readonly pia: Money; + readonly bendPoints: FamilyMaximumBendPoints; + readonly familyMaximum: Money; + /** What the maximum leaves for everyone other than the worker. */ + readonly auxiliaryPool: Money; + /** People sharing the pool: children, plus a spouse with a child in care. */ + readonly beneficiaries: number; + /** Each person's benefit if the maximum did not bind: half the PIA. */ + readonly eachUnlimited: Money; + /** Each person's benefit after the maximum, rounded down to the dime. */ + readonly each: Money; + /** + * The worker's unreduced PIA plus everyone collecting on the record. The + * worker's own early-claim reduction is not applied here; the guide's + * table note says so. + */ + readonly familyTotal: Money; + /** Whether the maximum bound, i.e. `each` is below `eachUnlimited`. */ + readonly capped: boolean; +} + +/** + * How the family maximum divides the record among `beneficiaries` people + * collecting on it besides the worker. The worker's own benefit is never + * reduced; the others share whatever the maximum leaves, equally. + */ +export function familyPayout( + parent: Recipient, + beneficiaries: number +): FamilyPayout { + if (!Number.isInteger(beneficiaries) || beneficiaries < 1) { + throw new Error( + `beneficiaries must be a positive integer, got ${beneficiaries}` + ); + } + const pia = parent.pia().primaryInsuranceAmount(); + const indexingYear = parent.indexingYear(); + const maximum = familyMaximum(pia, indexingYear); + const auxiliaryPool = maximum.sub(pia); + if (auxiliaryPool.lessThan(Money.from(0))) { + throw new Error( + `family maximum ${maximum.string()} is below the PIA ${pia.string()}` + ); + } + const eachUnlimited = pia.times(CHILD_BENEFIT_FRACTION).floorToDime(); + const share = auxiliaryPool.div(beneficiaries).floorToDime(); + const capped = share.lessThan(eachUnlimited); + const each = capped ? share : eachUnlimited; + return { + pia, + bendPoints: familyMaximumBendPoints(indexingYear), + familyMaximum: maximum, + auxiliaryPool, + beneficiaries, + eachUnlimited, + each, + familyTotal: pia.plus(each.times(beneficiaries)), + capped, + }; +} + +export interface ClaimAgeComparison { + /** The children's ages in whole years at the claim, as given. */ + readonly childAges: readonly number[]; + readonly fra: MonthDuration; + readonly benefitAt62: Money; + readonly benefitAtFra: Money; + /** The permanent monthly cost of claiming at 62 instead of at FRA. */ + readonly monthlyReduction: Money; + readonly timeToFra: MonthDuration; + /** From the claim until the youngest child turns 18. */ + readonly childBenefitSpan: MonthDuration; + /** From the claim until the oldest child turns 18. */ + readonly oldestChildBenefitSpan: MonthDuration; + readonly parentAgeWhenOldestTurns18: MonthDuration; + readonly parentAgeWhenYoungestTurns18: MonthDuration; + /** + * Everything the children collect if the parent claims at 62, from then + * until the youngest turns 18. Nominal: no cost-of-living adjustments. + */ + readonly childrenTotal: Money; + /** The part of childrenTotal paid before the parent reaches FRA. */ + readonly childrenBeforeFra: Money; + /** The parent's own reduced checks before FRA. */ + readonly ownBeforeFra: Money; + /** + * How far ahead the family is at FRA by having claimed at 62. After FRA + * the children collect the same amounts either way, so the only + * difference from then on is the parent's reduced check. + */ + readonly leadAtFra: Money; + /** Time after FRA for the larger check to make up the lead. */ + readonly timeToCatchUp: MonthDuration; + readonly catchUpAge: MonthDuration; + /** The base survivor benefit a spouse would inherit, by the parent's claim age. */ + readonly survivorIfClaimedAt62: Money; + readonly survivorIfClaimedAtFra: Money; +} + +function validateChildAges(childAges: readonly number[]): void { + if (childAges.length === 0) { + throw new Error('at least one child is required'); + } + for (const age of childAges) { + if ( + !Number.isInteger(age) || + age < 0 || + age >= CHILD_BENEFIT_END_AGE.years() + ) { + throw new Error( + `child ages must be whole years under ${CHILD_BENEFIT_END_AGE.years()}, got ${age}` + ); + } + } +} + +function ageInYears(years: number): MonthDuration { + return MonthDuration.initFromYearsMonths({ years, months: 0 }); +} + +/** How long a child of this age keeps collecting, until they turn 18. */ +function benefitSpan(childAge: number): MonthDuration { + return CHILD_BENEFIT_END_AGE.subtract(ageInYears(childAge)); +} + +/** The children still under 18 at `elapsed` after the claim. */ +function childrenStillEligible( + childAges: readonly number[], + elapsed: MonthDuration +): number { + return childAges.filter((age) => elapsed.lessThan(benefitSpan(age))).length; +} + +/** + * The base survivor benefit a same-age spouse would receive if the parent + * claimed at `claimAge` and died at SURVIVOR_EXAMPLE_DEATH_AGE. + */ +function survivorAfterClaimAt( + parent: Recipient, + claimAge: MonthDuration +): Money { + const spouse = new Recipient(); + spouse.birthdate = parent.birthdate; + const filingDate = parent.birthdate.dateAtSsaAge(claimAge); + const deathDate = parent.birthdate.dateAtSsaAge(SURVIVOR_EXAMPLE_DEATH_AGE); + const survivorFilingDate = deathDate.addDuration(new MonthDuration(1)); + return survivorBenefit( + spouse, + parent, + filingDate, + deathDate, + survivorFilingDate + ); +} + +export function claimAgeComparison( + parent: Recipient, + childAges: readonly number[] +): ClaimAgeComparison { + validateChildAges(childAges); + const ages = [...childAges]; + if (parent.birthdate.earliestFilingMonth().greaterThan(EARLY_CLAIM_AGE)) { + throw new Error( + 'the comparison claims at exactly 62, which this parent cannot do' + ); + } + const fra = parent.normalRetirementAge(); + const benefitAt62 = benefitAtAge(parent, EARLY_CLAIM_AGE); + const benefitAtFra = benefitAtAge(parent, fra); + const monthlyReduction = benefitAtFra.sub(benefitAt62); + if (!monthlyReduction.greaterThan(Money.from(0))) { + throw new Error( + 'the comparison needs a parent whose benefit is reduced at 62' + ); + } + const timeToFra = fra.subtract(EARLY_CLAIM_AGE); + + // Each child's benefit depends on how many children are still under 18, + // so the family's monthly payment is recomputed as children age out. + const childBenefitSpan = benefitSpan(Math.min(...ages)); + const oldestChildBenefitSpan = benefitSpan(Math.max(...ages)); + let childrenTotal = Money.from(0); + let childrenBeforeFra = Money.from(0); + for ( + const elapsed = new MonthDuration(0); + elapsed.lessThan(childBenefitSpan); + elapsed.increment() + ) { + const eligible = childrenStillEligible(ages, elapsed); + const payment = familyPayout(parent, eligible).each.times(eligible); + childrenTotal = childrenTotal.plus(payment); + if (elapsed.lessThan(timeToFra)) { + childrenBeforeFra = childrenBeforeFra.plus(payment); + } + } + + const ownBeforeFra = benefitAt62.times(timeToFra.asMonths()); + const leadAtFra = ownBeforeFra.plus(childrenBeforeFra); + const timeToCatchUp = new MonthDuration( + Math.ceil(leadAtFra.div$(monthlyReduction)) + ); + + return { + childAges: ages, + fra, + benefitAt62, + benefitAtFra, + monthlyReduction, + timeToFra, + childBenefitSpan, + oldestChildBenefitSpan, + parentAgeWhenOldestTurns18: EARLY_CLAIM_AGE.add(oldestChildBenefitSpan), + parentAgeWhenYoungestTurns18: EARLY_CLAIM_AGE.add(childBenefitSpan), + childrenTotal, + childrenBeforeFra, + ownBeforeFra, + leadAtFra, + timeToCatchUp, + catchUpAge: fra.add(timeToCatchUp), + survivorIfClaimedAt62: survivorAfterClaimAt(parent, EARLY_CLAIM_AGE), + survivorIfClaimedAtFra: survivorAfterClaimAt(parent, fra), + }; +} diff --git a/src/lib/constants.ts b/src/lib/constants.ts index 6ccffe28..f9b23599 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -294,6 +294,28 @@ export const BEFORE_BENDPOINT2_MULTIPLIER: number = 0.32; /* PIA formula multiplier after the second bend point. */ export const AFTER_BENDPOINT2_MULTIPLIER: number = 0.15; +// Values from https://www.ssa.gov/oact/cola/familymax.html +// +// The family maximum formula has three bend points. Like the PIA bend +// points above, they are the 1979 dollar amounts scaled by the ratio of the +// average wage index in the worker's indexing year to the index in 1977. + +/* The first bend in dollars (1979 base, indexed on 1977 wages) for the + * family maximum formula. */ +export const FAMILY_MAX_BENDPOINT1_IN_1977: Money = Money.from(230.0); +/* The second bend for the family maximum formula. */ +export const FAMILY_MAX_BENDPOINT2_IN_1977: Money = Money.from(332.0); +/* The third bend for the family maximum formula. */ +export const FAMILY_MAX_BENDPOINT3_IN_1977: Money = Money.from(433.0); +/* Family maximum multiplier on the PIA up to the first bend point. */ +export const FAMILY_MAX_MULTIPLIER_BRACKET1: number = 1.5; +/* Family maximum multiplier between the first and second bend points. */ +export const FAMILY_MAX_MULTIPLIER_BRACKET2: number = 2.72; +/* Family maximum multiplier between the second and third bend points. */ +export const FAMILY_MAX_MULTIPLIER_BRACKET3: number = 1.34; +/* Family maximum multiplier above the third bend point. */ +export const FAMILY_MAX_MULTIPLIER_BRACKET4: number = 1.75; + /** * The average wage index for each year, in dollars. */ diff --git a/src/lib/family-maximum.ts b/src/lib/family-maximum.ts new file mode 100644 index 00000000..6c74a478 --- /dev/null +++ b/src/lib/family-maximum.ts @@ -0,0 +1,77 @@ +/** + * The family maximum: the most Social Security pays each month on one + * worker's record to the worker and everyone collecting on it together. + * + * Like the PIA formula, the maximum is a piecewise-linear function of the + * PIA whose bend points are fixed dollar amounts from 1979, scaled by the + * growth in the average wage index between 1977 and the worker's indexing + * year (the year they turn 60). Social Security describes the formula at + * https://www.ssa.gov/oact/cola/familymax.html. + * + * Both the PIA and the maximum are set when the worker turns 62 and then + * rise together with each cost-of-living adjustment, so the ratio between + * them is fixed from then on. This module computes the maximum for a given + * PIA and indexing year; it does not apply later COLAs. + */ + +import * as constants from './constants'; +import { Money } from './money'; +import { wageIndexRatio } from './pia'; + +/** + * The three dollar thresholds of the family maximum formula, in ascending + * order. Produced by familyMaximumBendPoints; not meant to be built by hand. + */ +export interface FamilyMaximumBendPoints { + readonly first: Money; + readonly second: Money; + readonly third: Money; +} + +export function familyMaximumBendPoints( + indexingYear: number +): FamilyMaximumBendPoints { + const ratio = wageIndexRatio(indexingYear); + const bends = { + first: constants.FAMILY_MAX_BENDPOINT1_IN_1977.times(ratio).roundToDollar(), + second: + constants.FAMILY_MAX_BENDPOINT2_IN_1977.times(ratio).roundToDollar(), + third: constants.FAMILY_MAX_BENDPOINT3_IN_1977.times(ratio).roundToDollar(), + }; + // familyMaximum slices the PIA by these in order; a constants edit that + // reordered them would silently produce negative slices. + if ( + !bends.first.lessThan(bends.second) || + !bends.second.lessThan(bends.third) + ) { + throw new Error( + `family maximum bend points must ascend, got ${bends.first.string()}, ` + + `${bends.second.string()}, ${bends.third.string()}` + ); + } + return bends; +} + +/** + * The family maximum for a worker with the given PIA, before any + * cost-of-living adjustment. Rounded down to the dime, as the PIA is. + */ +export function familyMaximum(pia: Money, indexingYear: number): Money { + if (!pia.greaterThan(Money.from(0))) { + throw new Error(`PIA must be positive, got ${pia.string()}`); + } + const bends = familyMaximumBendPoints(indexingYear); + // Each slice is the part of the PIA inside one bracket. Capping at the + // bend point and subtracting the lower slices leaves zero, never a + // negative, for brackets the PIA does not reach. + const inFirst = Money.min(pia, bends.first); + const inSecond = Money.min(pia, bends.second).sub(inFirst); + const inThird = Money.min(pia, bends.third).sub(inFirst).sub(inSecond); + const aboveThird = pia.sub(inFirst).sub(inSecond).sub(inThird); + return inFirst + .times(constants.FAMILY_MAX_MULTIPLIER_BRACKET1) + .plus(inSecond.times(constants.FAMILY_MAX_MULTIPLIER_BRACKET2)) + .plus(inThird.times(constants.FAMILY_MAX_MULTIPLIER_BRACKET3)) + .plus(aboveThird.times(constants.FAMILY_MAX_MULTIPLIER_BRACKET4)) + .floorToDime(); +} diff --git a/src/lib/pia.ts b/src/lib/pia.ts index d1f6328d..c04cc5e2 100644 --- a/src/lib/pia.ts +++ b/src/lib/pia.ts @@ -15,6 +15,25 @@ export interface PiaInput { isEligible(): boolean; } +/** + * The ratio of the average wage in `indexingYear` to the average wage in + * 1977, which scales the fixed 1979 bend points of both the PIA formula and + * the family maximum formula to the worker's own wage era. + * + * An indexing year beyond the wage index data is clamped to the latest year + * available, so a worker who has not yet turned 60 is indexed on the most + * recent index published. + */ +export function wageIndexRatio(indexingYear: number): number { + const effectiveIndexingYear = Math.min( + indexingYear, + constants.MAX_WAGE_INDEX_YEAR + ); + return constants.WAGE_INDICES[effectiveIndexingYear].div$( + constants.WAGE_INDICES[1977] + ); +} + /** * A PrimaryInsuranceAmount object manages calculating the user's Primary * Insurance Amount (PIA). @@ -45,15 +64,7 @@ export class PrimaryInsuranceAmount { * @returns {number} The wage ratio used for indexing calculations */ private wageRatio(): number { - // If the indexing year is beyond the WAGE_INDICES data range, use the - // maximum year in the data range. - const effectiveIndexingYear = Math.min( - this.input_.indexingYear(), - constants.MAX_WAGE_INDEX_YEAR - ); - const wage_in_1977: Money = constants.WAGE_INDICES[1977]; - const wage: Money = constants.WAGE_INDICES[effectiveIndexingYear]; - return wage.div$(wage_in_1977); + return wageIndexRatio(this.input_.indexingYear()); } /** diff --git a/src/routes/guides/+page.svelte b/src/routes/guides/+page.svelte index bb36a74b..eff12a8f 100644 --- a/src/routes/guides/+page.svelte +++ b/src/routes/guides/+page.svelte @@ -26,6 +26,22 @@ const pageImageAlt = 'Social Security guides and educational resources';
+ Each child under 18 can collect up to half a retired parent's full + benefit, and a spouse caring for them can too. How the family + maximum caps the total, what claiming at 62 for the children costs + and earns, when benefits end, and how to apply. +
+Published: {publishDate.toLocaleDateString()}
+ ++ Most people picture Social Security as a check for a retiree, and maybe + a smaller one for a spouse. Fewer know that a retiree with children at + home gets a third kind of check: a monthly benefit for each child under + 18, worth up to half the parent's full benefit, that starts the month the + parent's own benefit starts and stops when the child grows up. +
+ ++ If you became a parent in your forties or later, adopted, are raising a + grandchild, or have an adult child with a disability, this matters a + great deal. Two children can add more to a household's monthly income + than the parent's own early-retirement reduction takes away, and for a + while that difference runs into six figures. It also turns the usual + advice to wait on its head, because every year you delay with children + under 18 is a year of their benefits that never gets paid. +
+ ++ This guide covers who qualifies, how much each child receives and why the + family maximum means it is often less than half, the benefit a spouse + caring for the child can collect, what claiming at 62 for the children + actually costs and earns, and the mechanics of applying. The dollar + figures are computed with the same code as the + ssa.tools calculator, so they reflect this + year's Social Security figures. +
+ ++ A child can receive benefits on your record once you are entitled to + retirement benefits yourself. There is no way for the child to collect + before you file. Three things have to be true of the child: +
+ ++ A child's own work does not disqualify them, and neither does the other + parent's income. The requirements are listed in + 20 CFR 404.350, and Social Security's plain-language summaries are on its + family benefits page + and in the publication + Benefits for Children. +
+ ++ Each eligible child's benefit is 50% of your + Primary Insurance Amount, the figure your own + benefit would be if you claimed exactly at full retirement age. Two + things about that sentence surprise people. +
+ ++ First, it is half of your full benefit, not half of your + check. If you claim at 62 your own benefit is permanently reduced, but + your child's is not; a child's benefit has no age reduction because the + child has no claiming age. The rule is in + 20 CFR 404.353. +
+ ++ Second, the half is a ceiling that most families with more than one + child never reach, because of the family maximum. +
+ ++ Social Security caps the total it will pay each month on one worker's + record. The cap is a formula on the Primary Insurance Amount, with bend + points that move each year with average wages, much like the + benefit formula itself. For a worker who turns + 62 in {MAX_YEAR}: +
+ +| Slice of the Primary Insurance Amount | +Counts toward the maximum at | +
|---|---|
| Up to {bends.first.wholeDollars()} | +150% | +
| {bends.first.wholeDollars()} to {bends.second.wholeDollars()} | +272% | +
| {bends.second.wholeDollars()} to {bends.third.wholeDollars()} | +134% | +
| Above {bends.third.wholeDollars()} | +175% | +
+ Bend points from the + family maximum formula + for {MAX_YEAR}. Once set at 62, the maximum rises with the same + cost-of-living adjustments as the benefit. +
+ ++ For a Primary Insurance Amount of {EXAMPLE_PIA.wholeDollars()}, the + maximum works out to {oneChild.familyMaximum.string()} a month. Your own + benefit is never reduced to fit under the cap; everyone else collecting + on your record shares what is left, which here is + {oneChild.auxiliaryPool.string()}. That pool is split equally among the + children, and among a spouse collecting on your record too. Here is what + each person receives as the record gets more crowded: +
+ +| Collecting on the record | +Each child or spouse | +Family total per month | +
|---|---|---|
| One child | +{oneChild.each.string()} | +{oneChild.familyTotal.string()} | +
| Two children | +{twoChildren.each.string()} | +{twoChildren.familyTotal.string()} | +
| Three children, or two children and a spouse | +{threeOnRecord.each.string()} | +{threeOnRecord.familyTotal.string()} | +
+ Family total includes the worker's own {EXAMPLE_PIA.wholeDollars()} + benefit at full retirement age. Amounts are rounded down to the dime as + Social Security does, before the final rounding to the dollar on each + check. +
+ ++ One child gets the full half, {oneChild.each.string()}, because the pool + is bigger than that. With two children the pool is split, and each gets + {twoChildren.each.string()} rather than {oneChild.each.string()}. With + three people on the record the pool is split three ways and the family + total does not rise at all: a third child, or a spouse joining the + record, adds nothing to the household's monthly income and only + redistributes it. A family at the maximum should know that before a + spouse files, since in some cases the spouse's own retirement benefit + would be worth more than a share of the pool. +
+ ++ Two groups do not count against the maximum. A divorced spouse + collecting on your record is paid outside it and never reduces what your + current family receives, which Social Security states on its + benefit amount page. And + your own benefit, as noted, is always paid in full. +
+ ++ Ordinarily a spouse has to be 62 to collect a + spousal benefit, and claiming it + before full retirement age reduces it. Both rules are waived for a spouse + who has your child in their care. A spouse of any age who is caring for + your child under 16, or your disabled child of any age, who is entitled + to a child's benefit can collect the spousal benefit of up to half your + Primary Insurance Amount with no reduction for their own age. The + requirements are in + 20 CFR 404.330. +
+ ++ Three catches. The benefit shares the family maximum with the children, + so as the table above shows, it may add nothing to the family total. It + ends the month before the youngest child turns 16, two years before the child's + own benefit does, and the spouse then waits until 62 to claim again, with + the usual age reduction. And if the spouse is working, their own earnings + are subject to the + earnings test before full retirement + age, which can withhold the whole thing. +
+ ++ This is the question that brings most parents to this guide. Waiting + past 62 raises your own check for life, which is why the usual advice is + to wait. But a child's benefit is use-it-or-lose-it: it is paid only for + the months after you file and before the child turns 18, and nothing you + do later recovers the months you waited. The question is whether the + children's checks in those years outweigh the permanent reduction in + yours. +
+ ++ Take a parent born in {parentBirthYear}, turning 62 in {MAX_YEAR} with a + Primary Insurance Amount of {EXAMPLE_PIA.wholeDollars()} and two + children aged {Math.min(...CHILD_AGES)} and {Math.max(...CHILD_AGES)}. + Full retirement age is {fra.years()}. Compare claiming at 62 with + waiting until then: +
+ +| + | Claim at 62 | +Claim at {fra.years()} | +
|---|---|---|
| Parent's own monthly benefit | +{compare.benefitAt62.string()} | +{compare.benefitAtFra.string()} | +
| Each child's monthly benefit while both are under 18 | +{twoChildren.each.string()} | +{twoChildren.each.string()} | +
| Children's benefits paid between 62 and {fra.years()} | +{compare.childrenBeforeFra.string()} | +$0.00 | +
| Parent's own benefits paid between 62 and {fra.years()} | +{compare.ownBeforeFra.string()} | +$0.00 | +
| Family's lead at {fra.years()} | +{compare.leadAtFra.string()} | ++ |
+ Nominal dollars, before cost-of-living adjustments and taxes. The parent + is assumed to have stopped working, so the earnings test does not apply. +
+ ++ The children's row is the same in both columns because a child's benefit + is based on the full amount regardless of when the parent claims. What + differs is how many months it is paid. Claiming at 62, the older child + collects until age 18 at the parent's + {compare.parentAgeWhenOldestTurns18.years()} and the younger until the + parent's {compare.parentAgeWhenYoungestTurns18.years()}, for + {compare.childrenTotal.string()} in total. Waiting until {fra.years()} + forfeits every month before then, which is + {compare.childrenBeforeFra.string()} of that, plus the parent's own + {compare.ownBeforeFra.string()} of reduced checks. +
+ ++ From {fra.years()} on, the children collect the same amounts either way, + so the only remaining difference is the parent's check: + {compare.monthlyReduction.string()} a month more for having waited. At + that rate the larger check needs {compare.timeToCatchUp.asMonths()} months to make + up the {compare.leadAtFra.string()} lead, which happens at age + {catchUpYears} and {catchUpMonths} months. Most people will not collect + that long, and an early claim comes out ahead for this family by a wide + margin in raw dollars. +
+ ++ That is unusually one-sided, and it is worth being clear about what + tilts it and what the table leaves out: +
+ ++ The filing strategy optimizer on this site does + not yet model children's benefits, so it will recommend waiting for a + parent in this position. Until it does, treat its answer as the + no-children baseline and add the children's checks yourself using the + figures above. +
+ ++ A son or daughter whose disability began before age 22 can collect a + child's benefit on your record at any age, for as long as the disability + lasts and they remain unmarried. The amount is the same half of your + Primary Insurance Amount, under the same family maximum, and it does not + depend on the child ever having worked. Social Security calls this the + disabled adult child benefit, and it is often larger than the + Supplemental Security Income the child received before a parent retired. + After two years of entitlement the child also qualifies for Medicare. + For a family planning around a disabled child, this benefit is a reason + to file as soon as the parent is eligible, since it is paid for the + child's lifetime and the family maximum, not the parent's claiming age, + sets its size. +
+ ++ A child's benefits begin the first month the child meets every + requirement and an application is on file, but never before the month + your own entitlement begins. If your benefit has already started and the + child was eligible all along, Social Security can pay up to six months + before the month you apply for the child, because a child's benefit + carries no age reduction to protect. +
+ ++ Benefits end with the month before the month the child turns 18, unless + one of two things is true. A child who is still a full-time elementary + or secondary school student keeps collecting until they graduate or until + two months after the month they turn 19, whichever comes first; the + school certifies attendance on a form Social Security sends before the + 18th birthday. A child whose disability began before 22 keeps collecting + as described above. Marriage ends the benefit in either case. The rules + are in + 20 CFR 404.352. +
+ ++ Your own choices can end the child's benefit too. If you suspend your + retirement benefit after full retirement age to earn delayed credits, + benefits to everyone on your record, children included, are suspended + with it. And if you withdraw your application within the first year, any + benefits the children received must be repaid along with your own. +
+ ++ Social Security does not offer an online application for a child's + benefits. Call Social Security or make an appointment at a local office, + ideally when you apply for your own benefit so both start together. You + will need the child's birth certificate or other proof of birth or + adoption, the child's Social Security number, and your own; a stepchild + needs proof of your marriage to the child's parent, and a child born + outside the United States needs proof of citizenship or lawful status. + The list is on Social Security's page for + Form SSA-4, Application for Child's Insurance Benefits. Benefits for a minor are paid to a representative payee, which for a + child living with you is you, and are to be spent on the child's needs. +
+ ++ If the child turns 18 while still in school, watch for the student + certification form a few months before the birthday; benefits stop at + 18 if it is not returned. +
+ ++ Even though the money arrives in your account as payee, the benefits are + the child's income, not yours. The IRS is explicit that you count only + your own portion when figuring whether your benefits are taxable, even if + the check for your child was made out in your name; see + IRS Tax Topic 423. The + federal taxation thresholds are then + applied to the child's own income, counting half the benefits plus any + wages or investment income the child has. A minor with no other income is + nowhere near the threshold, so in practice the benefits are untaxed, and + nothing about them is added to your return. +
+ +{faq.answer}
+ {/each} + ++ Everything above starts from the Primary Insurance Amount. Paste your + earnings record into the ssa.tools calculator + to see yours. Half of it is each child's starting point, and the + bend-point table above gives the cap on the family total. If your + children are young and + you are no longer working, the comparison in this guide is likely to come + out the same way for you; if a child is close to 18 or you plan to keep + working, it may not. +
+ ++ Related guides: + spousal benefits, + survivor benefits, + earnings test, + primary insurance amount, and + delayed retirement credits. +
+ +If your spouse or children receive benefits on your record, your excess earnings can reduce their benefits too - but only up to the maximum family - benefit. Their own earnings don't affect your benefit. + benefit. Their own earnings don't affect your benefit. This matters most + for a parent thinking of claiming early so the children can collect; the + child benefits guide covers that + decision.