@retiregolden/planner-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +181 -0
- package/package.json +77 -0
- package/src/App.tsx +246 -0
- package/src/RouteErrorBoundary.tsx +45 -0
- package/src/assets/hero.png +0 -0
- package/src/assets/react.svg +1 -0
- package/src/assets/vite.svg +1 -0
- package/src/data/fedInvestClient.ts +113 -0
- package/src/data/localStore.ts +42 -0
- package/src/data/planOrigin.ts +24 -0
- package/src/data/planStore.ts +165 -0
- package/src/data/v2Backup.ts +101 -0
- package/src/import/ImportPage.tsx +347 -0
- package/src/import/ReviewChecklistView.tsx +38 -0
- package/src/import/brokerCsv.ts +395 -0
- package/src/import/csv.ts +133 -0
- package/src/import/genericCsv.ts +224 -0
- package/src/import/projectionLab.ts +350 -0
- package/src/import/reviewChecklist.ts +33 -0
- package/src/import/tenForty.ts +275 -0
- package/src/index.css +630 -0
- package/src/index.ts +16 -0
- package/src/learn/ArticleBody.tsx +78 -0
- package/src/learn/ArticlePage.tsx +57 -0
- package/src/learn/GlossaryPage.tsx +33 -0
- package/src/learn/LearnAboutScreen.tsx +41 -0
- package/src/learn/LearnCards.tsx +41 -0
- package/src/learn/LearnLink.tsx +91 -0
- package/src/learn/LearningCenterPage.tsx +114 -0
- package/src/learn/SourcesPage.tsx +98 -0
- package/src/learn/components/ArticleFigure.tsx +34 -0
- package/src/learn/components/ArticleShell.tsx +86 -0
- package/src/learn/components/ComparisonTable.tsx +42 -0
- package/src/learn/components/FormulaBlock.tsx +34 -0
- package/src/learn/components/PurchasingPowerChart.tsx +41 -0
- package/src/learn/components/RelatedArticles.tsx +27 -0
- package/src/learn/components/ScenarioCard.tsx +24 -0
- package/src/learn/components/SourceList.tsx +23 -0
- package/src/learn/components/charts.tsx +21 -0
- package/src/learn/content/about-retiregolden.ts +100 -0
- package/src/learn/content/aca-premium-tax-credits-and-magi.ts +103 -0
- package/src/learn/content/account-types-overview.ts +106 -0
- package/src/learn/content/after-tax-estate.ts +111 -0
- package/src/learn/content/agi-magi-and-taxable-income.ts +112 -0
- package/src/learn/content/appealing-irmaa-ssa-44.ts +95 -0
- package/src/learn/content/assumption-general-inflation.ts +82 -0
- package/src/learn/content/assumption-healthcare-inflation.ts +85 -0
- package/src/learn/content/assumption-heir-tax-rate.ts +79 -0
- package/src/learn/content/assumption-investment-returns.ts +90 -0
- package/src/learn/content/assumption-longevity-planning-age.ts +78 -0
- package/src/learn/content/assumption-recent-magi.ts +83 -0
- package/src/learn/content/assumption-social-security-cola.ts +89 -0
- package/src/learn/content/assumption-social-security-trust-fund.ts +83 -0
- package/src/learn/content/assumption-state-tax-override.ts +79 -0
- package/src/learn/content/beneficiaries-and-account-titling.ts +99 -0
- package/src/learn/content/break-even-useful-lens.ts +94 -0
- package/src/learn/content/building-a-retirement-spending-budget.ts +100 -0
- package/src/learn/content/cola-and-inflation-protection.ts +102 -0
- package/src/learn/content/divorced-spousal-and-survivor-records.ts +104 -0
- package/src/learn/content/dynamic-spending-guardrails.ts +90 -0
- package/src/learn/content/earnings-test-before-fra.ts +100 -0
- package/src/learn/content/employer-match-and-contribution-order.ts +104 -0
- package/src/learn/content/examplePlanArticles.ts +525 -0
- package/src/learn/content/fees-expense-ratios-and-compounding-drag.ts +98 -0
- package/src/learn/content/fi-number-and-four-percent-rule.ts +64 -0
- package/src/learn/content/filling-a-tax-bracket-with-roth-conversions.ts +98 -0
- package/src/learn/content/funded-ratio.ts +70 -0
- package/src/learn/content/healthcare-after-65.ts +103 -0
- package/src/learn/content/healthcare-before-65.ts +104 -0
- package/src/learn/content/historical-vs-random-return-models.ts +101 -0
- package/src/learn/content/how-assumptions-change-the-answer.ts +105 -0
- package/src/learn/content/how-much-can-i-spend.ts +105 -0
- package/src/learn/content/how-social-security-is-taxed.ts +95 -0
- package/src/learn/content/how-the-optimizer-thinks.ts +102 -0
- package/src/learn/content/how-the-optimizer-values-after-tax-estate.ts +97 -0
- package/src/learn/content/how-to-model-accumulation.ts +67 -0
- package/src/learn/content/how-to-read-a-retirement-projection.ts +115 -0
- package/src/learn/content/hsas-and-qualified-medical-expenses.ts +108 -0
- package/src/learn/content/hsas-as-retirement-accounts.ts +101 -0
- package/src/learn/content/inflation-risk.ts +98 -0
- package/src/learn/content/inherited-ira-10-year-rule.ts +105 -0
- package/src/learn/content/insurance-in-your-retirement-plan.ts +103 -0
- package/src/learn/content/irmaa-two-year-lookback.ts +99 -0
- package/src/learn/content/long-term-care-costs-and-insurance.ts +103 -0
- package/src/learn/content/long-term-care-insurance-as-risk-transfer.ts +98 -0
- package/src/learn/content/longevity-risk.ts +99 -0
- package/src/learn/content/marginal-vs-effective-tax-rate.ts +98 -0
- package/src/learn/content/medicare-part-b-vs-part-d-irmaa.ts +102 -0
- package/src/learn/content/mortality-weighted-social-security.ts +113 -0
- package/src/learn/content/moving-to-retiregolden.ts +86 -0
- package/src/learn/content/niit-high-income-investment-tax.ts +98 -0
- package/src/learn/content/ordinary-income-vs-capital-gains.ts +103 -0
- package/src/learn/content/paying-conversion-taxes-taxable-vs-ira.ts +102 -0
- package/src/learn/content/pensions-and-annuities.ts +101 -0
- package/src/learn/content/permanent-life-insurance-in-a-plan.ts +106 -0
- package/src/learn/content/pia-aime-and-bend-points.ts +103 -0
- package/src/learn/content/planner-overview.ts +106 -0
- package/src/learn/content/planning-for-couples-and-survivor-years.ts +108 -0
- package/src/learn/content/privacy-what-stays-in-your-browser.ts +99 -0
- package/src/learn/content/qcds-qualified-charitable-distributions.ts +101 -0
- package/src/learn/content/reading-the-results-page.ts +96 -0
- package/src/learn/content/reading-the-social-security-analysis-page.ts +106 -0
- package/src/learn/content/real-estate-home-equity-and-debt.ts +100 -0
- package/src/learn/content/reports-csv-exports-and-sharing.ts +101 -0
- package/src/learn/content/risk-based-guardrails.ts +100 -0
- package/src/learn/content/rmds-required-minimum-distributions.ts +100 -0
- package/src/learn/content/roth-conversion-basics.ts +104 -0
- package/src/learn/content/rsus-and-espp.ts +101 -0
- package/src/learn/content/rule-of-55-and-72t.ts +107 -0
- package/src/learn/content/savings-rate-biggest-lever.ts +66 -0
- package/src/learn/content/seed-your-plan-from-your-tax-return.ts +93 -0
- package/src/learn/content/sensitivity-testing-what-changes-the-answer.ts +104 -0
- package/src/learn/content/sequence-of-returns-risk.ts +98 -0
- package/src/learn/content/social-security-bridge.ts +67 -0
- package/src/learn/content/social-security-claiming-age-basics.ts +113 -0
- package/src/learn/content/social-security-taxes-vs-benefits.ts +76 -0
- package/src/learn/content/spending-profiles-and-the-retirement-smile.ts +92 -0
- package/src/learn/content/spousal-and-survivor-benefits.ts +120 -0
- package/src/learn/content/ssdi-and-retirement-planning.ts +72 -0
- package/src/learn/content/standard-deduction-senior-deduction-and-itemizing.ts +97 -0
- package/src/learn/content/state-income-taxes-in-retirement.ts +97 -0
- package/src/learn/content/step-up-in-basis.ts +102 -0
- package/src/learn/content/survivor-planning-for-couples.ts +110 -0
- package/src/learn/content/survivor-spending-in-couple-plans.ts +98 -0
- package/src/learn/content/tax-cliffs-and-bracket-edges.ts +105 -0
- package/src/learn/content/tax-loss-and-gain-harvesting.ts +99 -0
- package/src/learn/content/taxable-brokerage-basis-and-capital-gains.ts +99 -0
- package/src/learn/content/three-big-questions-spending-time-risk.ts +103 -0
- package/src/learn/content/tips-ladders.ts +92 -0
- package/src/learn/content/todays-dollars-vs-future-dollars.ts +107 -0
- package/src/learn/content/traditional-vs-roth-contributions.ts +113 -0
- package/src/learn/content/troubleshooting-surprising-results.ts +105 -0
- package/src/learn/content/trust-fund-haircut-scenarios.ts +101 -0
- package/src/learn/content/understanding-monte-carlo-success-rate.ts +118 -0
- package/src/learn/content/understanding-your-plan-assumptions.ts +134 -0
- package/src/learn/content/using-assumptions-and-provenance.ts +98 -0
- package/src/learn/content/using-scenarios-to-compare-choices.ts +99 -0
- package/src/learn/content/what-changes-when-you-move-states.ts +141 -0
- package/src/learn/content/what-is-fire.ts +65 -0
- package/src/learn/content/what-monte-carlo-proves.ts +98 -0
- package/src/learn/content/what-retiregolden-models.ts +103 -0
- package/src/learn/content/what-retirement-healthcare-really-costs.ts +117 -0
- package/src/learn/content/why-95-percent-is-not-a-guarantee.ts +98 -0
- package/src/learn/content/why-roth-conversions-raise-other-costs.ts +106 -0
- package/src/learn/content/why-small-tax-cliffs-can-matter.ts +109 -0
- package/src/learn/content/widows-penalty-and-survivor-brackets.ts +106 -0
- package/src/learn/content/withdrawal-order-basics.ts +105 -0
- package/src/learn/glossary.ts +191 -0
- package/src/learn/inlineMarkdown.tsx +54 -0
- package/src/learn/learn.css +537 -0
- package/src/learn/learningRegistry.ts +502 -0
- package/src/longevity/LongevityResults.tsx +85 -0
- package/src/longevity/LongevityWizard.tsx +305 -0
- package/src/longevity/constants.ts +15 -0
- package/src/longevity/factors.ts +125 -0
- package/src/longevity/model.ts +31 -0
- package/src/longevity/persistedGuard.ts +129 -0
- package/src/longevity/storage.ts +40 -0
- package/src/mc/messages.ts +118 -0
- package/src/mc/monteCarlo.worker.ts +44 -0
- package/src/mc/pool.ts +267 -0
- package/src/mc/runRequest.ts +125 -0
- package/src/optimize/messages.ts +84 -0
- package/src/optimize/optimize.worker.ts +29 -0
- package/src/optimize/runOptimize.ts +92 -0
- package/src/optimize/runSpendingSolve.ts +47 -0
- package/src/optimize/runner.ts +21 -0
- package/src/optimize/spendingMessages.ts +44 -0
- package/src/optimize/spendingRunner.ts +21 -0
- package/src/optimize/spendingSolve.worker.ts +18 -0
- package/src/planner/AssumptionsCardPage.tsx +136 -0
- package/src/planner/BucketLensCard.tsx +114 -0
- package/src/planner/ComparePlansPage.tsx +219 -0
- package/src/planner/DisclaimerPage.tsx +88 -0
- package/src/planner/HowTestedPage.tsx +159 -0
- package/src/planner/LiveStatus.tsx +15 -0
- package/src/planner/LongevityModal.tsx +55 -0
- package/src/planner/Modal.tsx +97 -0
- package/src/planner/MonteCarloPage.tsx +907 -0
- package/src/planner/OptimizePage.tsx +611 -0
- package/src/planner/PlanContext.tsx +198 -0
- package/src/planner/PlanPickerPage.tsx +124 -0
- package/src/planner/PlanWorkspace.tsx +290 -0
- package/src/planner/ProvenancePanel.tsx +45 -0
- package/src/planner/RelocationComparePage.tsx +485 -0
- package/src/planner/ReportPage.tsx +375 -0
- package/src/planner/ResultsPage.tsx +817 -0
- package/src/planner/ScenariosPage.tsx +285 -0
- package/src/planner/SocialSecuritySection.tsx +556 -0
- package/src/planner/SpendingSolverPage.tsx +512 -0
- package/src/planner/SsAnalysisPage.tsx +1134 -0
- package/src/planner/SurvivalPercentileModal.tsx +161 -0
- package/src/planner/SurvivorTransitionPage.tsx +286 -0
- package/src/planner/assumptionsExport.ts +371 -0
- package/src/planner/bucketLens.ts +89 -0
- package/src/planner/chartFrame.ts +8 -0
- package/src/planner/chartStyle.ts +11 -0
- package/src/planner/dialogViews.tsx +184 -0
- package/src/planner/dialogs.tsx +133 -0
- package/src/planner/examples/ExampleLibrary.tsx +189 -0
- package/src/planner/examples/ExamplePreviewBanner.tsx +55 -0
- package/src/planner/examples/ExamplesPage.tsx +25 -0
- package/src/planner/examples/OpenExampleButton.tsx +61 -0
- package/src/planner/examples/buildAggressiveSaver.ts +102 -0
- package/src/planner/examples/buildAnnuityEstate.ts +137 -0
- package/src/planner/examples/buildBaristaFire.ts +115 -0
- package/src/planner/examples/buildBracketFillRoth.ts +65 -0
- package/src/planner/examples/buildBridgeEarlyRetirement.ts +94 -0
- package/src/planner/examples/buildBrokerageNoHsa.ts +109 -0
- package/src/planner/examples/buildCoastFire.ts +88 -0
- package/src/planner/examples/buildContext.ts +20 -0
- package/src/planner/examples/buildEarlyCareerMatch.ts +93 -0
- package/src/planner/examples/buildEarlyRetireeAca.ts +61 -0
- package/src/planner/examples/buildExampleCouple.ts +103 -0
- package/src/planner/examples/buildFixedTargetSpending.ts +74 -0
- package/src/planner/examples/buildGlidepathAllocation.ts +131 -0
- package/src/planner/examples/buildGuardrailsFlex.ts +120 -0
- package/src/planner/examples/buildHsaPropertyDepth.ts +109 -0
- package/src/planner/examples/buildHsaStealthRetirement.ts +97 -0
- package/src/planner/examples/buildLeanFatFire.ts +109 -0
- package/src/planner/examples/buildLtcShock.ts +62 -0
- package/src/planner/examples/buildMovingStateTax.ts +53 -0
- package/src/planner/examples/buildNoAnnuityBrokerage.ts +92 -0
- package/src/planner/examples/buildRmdIrmaa.ts +55 -0
- package/src/planner/examples/buildSalaryGrowthEscalation.ts +96 -0
- package/src/planner/examples/buildStaticAllocationControl.ts +96 -0
- package/src/planner/examples/buildSurvivorYears.ts +62 -0
- package/src/planner/examples/buildUnderSavedSingle.ts +51 -0
- package/src/planner/examples/exampleCopy.ts +23 -0
- package/src/planner/examples/loadExample.ts +90 -0
- package/src/planner/examples/registry.ts +313 -0
- package/src/planner/explainPanels.tsx +233 -0
- package/src/planner/fields.tsx +381 -0
- package/src/planner/format.ts +33 -0
- package/src/planner/home/DataAndPrivacyCard.tsx +56 -0
- package/src/planner/home/GettingStartedPaths.tsx +46 -0
- package/src/planner/home/GettingStartedReopener.tsx +32 -0
- package/src/planner/home/StartHereLinks.tsx +22 -0
- package/src/planner/home/WelcomeHero.tsx +39 -0
- package/src/planner/home/YourPlans.tsx +72 -0
- package/src/planner/home/importErrorMessage.ts +22 -0
- package/src/planner/home/startHereSlugs.ts +7 -0
- package/src/planner/home/useHomeData.ts +190 -0
- package/src/planner/home/useHomeMode.ts +47 -0
- package/src/planner/householdActions.ts +22 -0
- package/src/planner/insights/InsightCardView.tsx +340 -0
- package/src/planner/insights/InsightsPage.tsx +204 -0
- package/src/planner/insights/categoryLabels.ts +11 -0
- package/src/planner/learnLinks.ts +85 -0
- package/src/planner/marketModelPicker.ts +172 -0
- package/src/planner/optimizePageChart.ts +40 -0
- package/src/planner/optimizePageClaim.ts +64 -0
- package/src/planner/planCompleteness.ts +27 -0
- package/src/planner/planContextCore.ts +26 -0
- package/src/planner/planner.css +2304 -0
- package/src/planner/provenanceLinks.ts +25 -0
- package/src/planner/sections/AccountFields.tsx +872 -0
- package/src/planner/sections/AccountsSection.tsx +89 -0
- package/src/planner/sections/AllocationPanel.tsx +261 -0
- package/src/planner/sections/AssumptionsSection.tsx +256 -0
- package/src/planner/sections/HouseholdSection.tsx +243 -0
- package/src/planner/sections/IncomeFloorSection.tsx +418 -0
- package/src/planner/sections/IncomeSection.tsx +170 -0
- package/src/planner/sections/InsuranceSection.tsx +362 -0
- package/src/planner/sections/SpendingSection.tsx +904 -0
- package/src/planner/sections/StrategySection.tsx +349 -0
- package/src/planner/sections/UpdateBalancesPanel.tsx +182 -0
- package/src/planner/sections/sectionHelpers.ts +48 -0
- package/src/planner/sections/shared.tsx +15 -0
- package/src/planner/sections.tsx +15 -0
- package/src/planner/ssAnalysis.ts +325 -0
- package/src/planner/successBand.ts +20 -0
- package/src/planner/survivorAnalysis.ts +277 -0
- package/src/planner/usStates.ts +19 -0
- package/src/planner/useMcSuccessRate.ts +77 -0
- package/src/planner/useProjection.ts +63 -0
- package/src/relocation/messages.ts +21 -0
- package/src/relocation/relocation.worker.ts +18 -0
- package/src/relocation/runRelocation.ts +17 -0
- package/src/relocation/runner.ts +22 -0
- package/src/report/brandingContext.ts +15 -0
- package/src/report/downloadReport.ts +34 -0
- package/src/report/reportHtml.ts +547 -0
- package/src/routes/LearnRoutes.tsx +46 -0
- package/src/routes/PlanRoutes.tsx +55 -0
- package/src/routes/RouteFallback.tsx +9 -0
- package/src/socialSecurity/breakEven.ts +107 -0
- package/src/socialSecurity/expectedPv.ts +164 -0
- package/src/socialSecurity/explain.ts +92 -0
- package/src/socialSecurity/ficaReturn.ts +81 -0
- package/src/socialSecurity/persistedSsGuard.ts +138 -0
- package/src/socialSecurity/ssFormUtils.ts +48 -0
- package/src/socialSecurity/ssaStatementXml.ts +156 -0
- package/src/socialSecurity/storage.ts +69 -0
- package/src/socialSecurity/survivorSwitching.ts +153 -0
- package/src/testSupport/samplePlan.ts +2 -0
- package/src/workers/run.ts +45 -0
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "HSAs and qualified medical expenses" - a Healthcare P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const hsasQualifiedMedicalExpensesArticle: LearningArticle = {
|
|
8
|
+
slug: 'hsas-and-qualified-medical-expenses',
|
|
9
|
+
title: 'HSAs and qualified medical expenses',
|
|
10
|
+
description: 'How to use HSA dollars tax-free for healthcare costs.',
|
|
11
|
+
category: 'healthcare',
|
|
12
|
+
tags: ['hsa', 'health savings account', 'qualified medical expenses', 'healthcare', 'tax-free'],
|
|
13
|
+
audience: 'beginner',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/forms-pubs/about-publication-969',
|
|
19
|
+
'https://www.irs.gov/publications/p969',
|
|
20
|
+
'https://www.irs.gov/forms-pubs/about-publication-502',
|
|
21
|
+
'https://www.irs.gov/publications/p502',
|
|
22
|
+
],
|
|
23
|
+
relatedArticles: [
|
|
24
|
+
'hsas-as-retirement-accounts',
|
|
25
|
+
'healthcare-before-65',
|
|
26
|
+
'healthcare-after-65',
|
|
27
|
+
'withdrawal-order-basics',
|
|
28
|
+
'account-types-overview',
|
|
29
|
+
],
|
|
30
|
+
relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/spending', '/plan/:planId/results'],
|
|
31
|
+
currentYearSensitive: true,
|
|
32
|
+
priority: 'P1',
|
|
33
|
+
blocks: [
|
|
34
|
+
{
|
|
35
|
+
type: 'prose',
|
|
36
|
+
md: 'A health savings account can be powerful because HSA money used for qualified medical expenses can come out tax-free. The word "qualified" is doing real work. Good HSA planning needs both a retirement model and a receipt trail.',
|
|
37
|
+
},
|
|
38
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
39
|
+
{
|
|
40
|
+
type: 'list',
|
|
41
|
+
items: [
|
|
42
|
+
'Qualified medical expenses are defined by tax rules, not by whether a cost feels health-related.',
|
|
43
|
+
'Keeping receipts matters if you plan to reimburse yourself later from the HSA.',
|
|
44
|
+
'RetireGolden models the HSA account bucket, but it does not verify individual medical receipts.',
|
|
45
|
+
],
|
|
46
|
+
},
|
|
47
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
48
|
+
{
|
|
49
|
+
type: 'prose',
|
|
50
|
+
md: 'An HSA is not just another savings account. Contributions can be tax-advantaged, growth can be tax-deferred, and withdrawals for qualified medical expenses can be tax-free. That makes the HSA attractive for future healthcare costs.\n\nThe planning catch is documentation. If you pay a qualified medical bill from cash now and reimburse yourself from the HSA years later, you need records that connect the withdrawal to the eligible expense. RetireGolden can help model the account, but it is not a tax recordkeeping system.',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'figure',
|
|
54
|
+
image: { src: '/learn/images/hsa-qualified-medical-expenses.webp' },
|
|
55
|
+
caption:
|
|
56
|
+
'The HSA planning path works best when eligible medical costs, receipts, and future reimbursements stay connected.',
|
|
57
|
+
alt: 'Medical cost icons create receipt tiles that connect to an HSA bucket and then to a future tax-free reimbursement path.',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: 'table',
|
|
61
|
+
caption: 'Three different HSA questions.',
|
|
62
|
+
columns: ['Question', 'Planning answer', 'RetireGolden treatment'],
|
|
63
|
+
rows: [
|
|
64
|
+
['Can I contribute?', 'Depends on HSA eligibility and annual limits', 'Contributions are capped by the parameter pack'],
|
|
65
|
+
['Can money grow?', 'Yes, depending on the account and investments chosen', 'Balance grows using the account return assumption'],
|
|
66
|
+
['Can I withdraw tax-free?', 'Only for qualified medical expenses with proper records', 'The app does not certify expenses or store receipts'],
|
|
67
|
+
['What if I use it for non-medical needs?', 'Tax and penalties can apply, especially before age 65', 'Forced pre-65 non-medical HSA withdrawals can trigger a modeled penalty'],
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{ type: 'heading', text: 'A worked example' },
|
|
71
|
+
{
|
|
72
|
+
type: 'scenario',
|
|
73
|
+
name: 'The Bennett household',
|
|
74
|
+
assumptions: [
|
|
75
|
+
{ label: 'Current bill', value: '$1,800 qualified dental expense paid from checking' },
|
|
76
|
+
{ label: 'Documentation', value: 'Keeps the receipt and proof of payment with the tax file' },
|
|
77
|
+
{ label: 'Later year', value: 'Can reimburse up to $1,800 from the HSA if rules are still met' },
|
|
78
|
+
],
|
|
79
|
+
summary:
|
|
80
|
+
'The plan can show the HSA balance staying invested, but it cannot prove the $1,800 withdrawal is qualified. The receipt is what connects the future reimbursement to the old medical expense.',
|
|
81
|
+
},
|
|
82
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
83
|
+
{
|
|
84
|
+
type: 'prose',
|
|
85
|
+
md: 'RetireGolden treats HSA accounts as their own bucket. HSA contributions reduce taxable income in the projection when allowed, and the default withdrawal order keeps HSA dollars last. Healthcare spending is modeled separately from HSA receipt tracking, so do not read the projection as proof that any specific withdrawal is qualified.',
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
type: 'callout',
|
|
89
|
+
tone: 'warn',
|
|
90
|
+
md: 'Model note: RetireGolden v1 treats HSA dollars spent by the withdrawal engine as non-medical. If the HSA is forced to fund general spending before age 65, the projection can apply a 20% penalty. Use the HSA account to model the bucket, not as a qualified-expense substantiation tool.',
|
|
91
|
+
},
|
|
92
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
93
|
+
{
|
|
94
|
+
type: 'list',
|
|
95
|
+
items: [
|
|
96
|
+
'Assuming every insurance premium or wellness purchase is qualified.',
|
|
97
|
+
'Waiting years to reimburse yourself without keeping receipts.',
|
|
98
|
+
'Counting the same medical expense twice for tax purposes.',
|
|
99
|
+
'Treating the HSA as automatically tax-free for any retirement expense.',
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
103
|
+
{
|
|
104
|
+
type: 'prose',
|
|
105
|
+
md: 'Enter the HSA in **Accounts** and healthcare spending in **Spending**. Use **Results** to see whether the HSA is preserved, depleted, or penalized, then keep real-world HSA tax records outside the app.',
|
|
106
|
+
},
|
|
107
|
+
],
|
|
108
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "HSAs as retirement accounts" - an Accounts and Saving P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const hsasAsRetirementAccountsArticle: LearningArticle = {
|
|
8
|
+
slug: 'hsas-as-retirement-accounts',
|
|
9
|
+
title: 'HSAs as retirement accounts',
|
|
10
|
+
description: 'Why a health savings account can be one of the strongest retirement tools.',
|
|
11
|
+
category: 'accounts-saving',
|
|
12
|
+
tags: ['hsa', 'health savings account', 'qualified medical expenses', 'retirement healthcare', 'tax-free'],
|
|
13
|
+
audience: 'beginner',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/forms-pubs/about-publication-969',
|
|
19
|
+
'https://www.irs.gov/publications/p969',
|
|
20
|
+
],
|
|
21
|
+
relatedArticles: [
|
|
22
|
+
'account-types-overview',
|
|
23
|
+
'hsas-and-qualified-medical-expenses',
|
|
24
|
+
'healthcare-before-65',
|
|
25
|
+
'healthcare-after-65',
|
|
26
|
+
'withdrawal-order-basics',
|
|
27
|
+
],
|
|
28
|
+
relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/spending', '/plan/:planId/results'],
|
|
29
|
+
currentYearSensitive: true,
|
|
30
|
+
priority: 'P1',
|
|
31
|
+
blocks: [
|
|
32
|
+
{
|
|
33
|
+
type: 'prose',
|
|
34
|
+
md: 'An HSA is a health savings account tied to specific eligibility rules. When used for qualified medical expenses, it can combine tax benefits on the way in, while invested, and on the way out. That is why planners often treat a good HSA as both a healthcare tool and a retirement asset.',
|
|
35
|
+
},
|
|
36
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
37
|
+
{
|
|
38
|
+
type: 'list',
|
|
39
|
+
items: [
|
|
40
|
+
'HSA eligibility, contribution limits, and qualified medical expense rules matter every year.',
|
|
41
|
+
'HSA dollars used for qualified medical expenses can be unusually tax-efficient.',
|
|
42
|
+
'RetireGolden treats HSA balances as a distinct account bucket and keeps them last in the default spending order.',
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
46
|
+
{
|
|
47
|
+
type: 'prose',
|
|
48
|
+
md: 'A taxable brokerage account is flexible, but it can create taxable investment income and gains. A traditional retirement account can defer tax, but later withdrawals are often ordinary income. A Roth can create tax-free qualified retirement withdrawals. An HSA can be even more targeted: when the HSA rules are met and the withdrawal pays qualified medical expenses, the withdrawal can be tax-free for healthcare.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'figure',
|
|
52
|
+
image: { src: '/learn/images/hsa-retirement-account.webp' },
|
|
53
|
+
caption:
|
|
54
|
+
'An HSA can connect retirement saving directly to future healthcare costs when qualified medical expense rules are met.',
|
|
55
|
+
alt: 'A health savings account bucket feeds a retirement healthcare path, with medical icons and tax gates showing contribution, growth, and qualified medical spending.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'table',
|
|
59
|
+
caption: 'Why HSAs get special attention.',
|
|
60
|
+
columns: ['Stage', 'Planning lens', 'Caution'],
|
|
61
|
+
rows: [
|
|
62
|
+
['Contribution', 'Can be tax-advantaged when eligibility rules are met', 'Limits and eligibility depend on coverage and current law'],
|
|
63
|
+
['Growth', 'Can compound for future healthcare needs', 'Investment risk still matters'],
|
|
64
|
+
['Qualified medical withdrawal', 'Can be tax-free when used under HSA rules', 'Documentation and qualified-expense rules matter'],
|
|
65
|
+
['Non-medical withdrawal', 'May lose the special treatment and can face penalties before age 65', 'Do not model it as a generic Roth substitute'],
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{ type: 'heading', text: 'A worked example' },
|
|
69
|
+
{
|
|
70
|
+
type: 'scenario',
|
|
71
|
+
name: 'The Lee household',
|
|
72
|
+
assumptions: [
|
|
73
|
+
{ label: 'Coverage', value: 'Eligible for $7,500 of HSA contributions while working' },
|
|
74
|
+
{ label: 'Current medical bills', value: '$2,400 a year, affordable from cash' },
|
|
75
|
+
{ label: 'Later reserve', value: 'Investing the HSA preserves $7,500 plus growth for future healthcare spending' },
|
|
76
|
+
],
|
|
77
|
+
summary:
|
|
78
|
+
'If the Lees pay the $2,400 bill from cash, the HSA can stay invested. The trade is less cash today in exchange for a healthcare bucket that may be more valuable later.',
|
|
79
|
+
},
|
|
80
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
81
|
+
{
|
|
82
|
+
type: 'prose',
|
|
83
|
+
md: 'RetireGolden models HSA accounts separately from cash, taxable, traditional, and Roth accounts. Annual HSA contributions are capped by the parameter pack and reduce taxable income in the projection. The default withdrawal order spends HSA dollars last, and early non-medical HSA withdrawals can trigger a modeled pre-65 penalty.',
|
|
84
|
+
},
|
|
85
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
86
|
+
{
|
|
87
|
+
type: 'list',
|
|
88
|
+
items: [
|
|
89
|
+
'Treating the HSA as available without checking annual eligibility.',
|
|
90
|
+
'Spending HSA dollars first when other accounts could cover non-medical needs.',
|
|
91
|
+
'Assuming all healthcare-related costs automatically qualify.',
|
|
92
|
+
'Forgetting that an HSA is still an invested account if you choose investments inside it.',
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
96
|
+
{
|
|
97
|
+
type: 'prose',
|
|
98
|
+
md: 'Enter HSA balance and contributions in **Accounts**. Put expected healthcare costs in **Spending** and healthcare assumptions, then use **Results** to see whether the HSA is being preserved or spent.',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Inflation risk" - a Risk and Uncertainty P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const inflationRiskArticle: LearningArticle = {
|
|
8
|
+
slug: 'inflation-risk',
|
|
9
|
+
title: 'Inflation risk',
|
|
10
|
+
description: 'How rising prices erode buying power over a long retirement.',
|
|
11
|
+
category: 'risk-uncertainty',
|
|
12
|
+
tags: ['inflation', 'purchasing power', 'real dollars', 'expenses', 'cola'],
|
|
13
|
+
audience: 'beginner',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'stable',
|
|
17
|
+
sourceUrls: ['https://www.bls.gov/cpi/'],
|
|
18
|
+
relatedArticles: [
|
|
19
|
+
'todays-dollars-vs-future-dollars',
|
|
20
|
+
'cola-and-inflation-protection',
|
|
21
|
+
'how-assumptions-change-the-answer',
|
|
22
|
+
'sequence-of-returns-risk',
|
|
23
|
+
'healthcare-after-65',
|
|
24
|
+
],
|
|
25
|
+
relatedPlannerRoutes: ['/plan/:planId/assumptions', '/plan/:planId/spending', '/plan/:planId/results', '/plan/:planId/monte-carlo'],
|
|
26
|
+
currentYearSensitive: false,
|
|
27
|
+
priority: 'P1',
|
|
28
|
+
blocks: [
|
|
29
|
+
{
|
|
30
|
+
type: 'prose',
|
|
31
|
+
md: 'Inflation risk is the risk that prices rise faster than the plan can comfortably absorb. Even modest yearly inflation can make a long retirement more expensive because expenses compound year after year.',
|
|
32
|
+
},
|
|
33
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
34
|
+
{
|
|
35
|
+
type: 'list',
|
|
36
|
+
items: [
|
|
37
|
+
'Future dollars and today\'s dollars are different ways to describe the same plan.',
|
|
38
|
+
'Inflation affects expenses, tax thresholds, healthcare costs, Social Security COLAs, and the real value of fixed income.',
|
|
39
|
+
'A plan can look comfortable in nominal dollars while still losing buying power if the inflation assumption is too low.',
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
43
|
+
{
|
|
44
|
+
type: 'prose',
|
|
45
|
+
md: 'A dollar amount in the future does not buy the same basket of goods that the same dollar buys today. If retirement spending rises with inflation, the nominal spending number goes up. If an income source does not rise with inflation, its real buying power falls.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: 'figure',
|
|
49
|
+
image: { src: '/learn/images/inflation-risk.webp' },
|
|
50
|
+
caption:
|
|
51
|
+
'Inflation gradually changes what a fixed dollar amount can buy, while inflation-adjusted spending keeps chasing the basket.',
|
|
52
|
+
alt: 'A fixed stack of dollars stays the same size while grocery and healthcare baskets get larger along a retirement timeline.',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'formula',
|
|
56
|
+
expression: "today's dollars = future dollars / (1 + inflation)^years",
|
|
57
|
+
where: [
|
|
58
|
+
{ symbol: 'future dollars', meaning: 'the nominal amount shown in a later year' },
|
|
59
|
+
{ symbol: 'inflation', meaning: 'the assumed annual price increase expressed as a decimal' },
|
|
60
|
+
{ symbol: 'years', meaning: 'the number of years between now and the future amount' },
|
|
61
|
+
],
|
|
62
|
+
basis: 'today',
|
|
63
|
+
note: 'Real inflation varies. This simple formula uses one steady rate so the concept is easy to see.',
|
|
64
|
+
},
|
|
65
|
+
{ type: 'heading', text: 'A worked example' },
|
|
66
|
+
{
|
|
67
|
+
type: 'scenario',
|
|
68
|
+
name: 'The Brooks household',
|
|
69
|
+
assumptions: [
|
|
70
|
+
{ label: 'Base spending', value: '$80,000 in today\'s dollars' },
|
|
71
|
+
{ label: 'Baseline inflation', value: '3% a year makes that lifestyle cost about $145,000 in 20 years' },
|
|
72
|
+
{ label: 'Stress inflation', value: '4% a year makes it about $175,000 in 20 years' },
|
|
73
|
+
],
|
|
74
|
+
summary:
|
|
75
|
+
'The 1-point inflation stress adds roughly **$30,000** of annual future-dollar spending by year 20. The lifestyle did not grow; the price tag did.',
|
|
76
|
+
},
|
|
77
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
78
|
+
{
|
|
79
|
+
type: 'prose',
|
|
80
|
+
md: 'RetireGolden stores assumptions in nominal terms, then lets Results show key figures in today\'s dollars for comparison. The projection applies general inflation to spending and other modeled items, while healthcare can also grow with an extra healthcare inflation assumption.',
|
|
81
|
+
},
|
|
82
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
83
|
+
{
|
|
84
|
+
type: 'list',
|
|
85
|
+
items: [
|
|
86
|
+
'Comparing a future-dollar number to today\'s grocery bill without adjusting for inflation.',
|
|
87
|
+
'Assuming every income source has a full cost-of-living adjustment.',
|
|
88
|
+
'Forgetting that healthcare can grow differently from general spending.',
|
|
89
|
+
'Using one inflation assumption forever without testing a higher path.',
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
93
|
+
{
|
|
94
|
+
type: 'prose',
|
|
95
|
+
md: 'Use **Assumptions** to set general inflation and healthcare extra inflation. Use **Results** to toggle today\'s-dollar views, and use **Monte Carlo** or **Scenarios** to test what happens when inflation runs hotter.',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Inherited IRA 10-year rule" - a Withdrawals and Roth P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const inheritedIraTenYearRuleArticle: LearningArticle = {
|
|
8
|
+
slug: 'inherited-ira-10-year-rule',
|
|
9
|
+
title: 'Inherited IRA 10-year rule',
|
|
10
|
+
description: 'How most non-spouse heirs must empty an inherited IRA within ten years.',
|
|
11
|
+
category: 'withdrawals-roth',
|
|
12
|
+
tags: ['inherited ira', 'beneficiary ira', '10-year rule', 'rmd', 'secure act', 'ordinary income'],
|
|
13
|
+
audience: 'beginner',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/retirement-plans/required-minimum-distributions-for-ira-beneficiaries',
|
|
19
|
+
'https://www.irs.gov/publications/p590b',
|
|
20
|
+
],
|
|
21
|
+
relatedArticles: [
|
|
22
|
+
'rmds-required-minimum-distributions',
|
|
23
|
+
'beneficiaries-and-account-titling',
|
|
24
|
+
'after-tax-estate',
|
|
25
|
+
'rule-of-55-and-72t',
|
|
26
|
+
'widows-penalty-and-survivor-brackets',
|
|
27
|
+
],
|
|
28
|
+
relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/strategy', '/plan/:planId/results'],
|
|
29
|
+
currentYearSensitive: true,
|
|
30
|
+
priority: 'P1',
|
|
31
|
+
blocks: [
|
|
32
|
+
{
|
|
33
|
+
type: 'prose',
|
|
34
|
+
md: 'An inherited IRA is a retirement account received as a beneficiary. For many non-spouse beneficiaries, the inherited account must be emptied by the end of the tenth year after the original owner died. That can concentrate taxable income into a short window.',
|
|
35
|
+
},
|
|
36
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
37
|
+
{
|
|
38
|
+
type: 'list',
|
|
39
|
+
items: [
|
|
40
|
+
'The 10-year rule is about when the inherited account must be emptied.',
|
|
41
|
+
'If the original owner had already started RMDs, annual beneficiary RMDs may also apply in years 1 through 9.',
|
|
42
|
+
'Inherited traditional-account distributions are taxable income, but they are not subject to the 10% early-withdrawal penalty.',
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
46
|
+
{
|
|
47
|
+
type: 'prose',
|
|
48
|
+
md: 'A normal IRA can often be planned around the owner\'s age and required minimum distribution rules. An inherited IRA is different. The beneficiary may have to move the money out much faster, and withdrawals from an inherited traditional IRA can stack on top of wages, Roth conversions, pensions, Social Security taxation, and Medicare-related income.\n\nThe hard part is not only "empty it by year ten." It is choosing when to take taxable income inside that window.',
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
type: 'figure',
|
|
52
|
+
image: { src: '/learn/images/inherited-ira-10-year-rule.webp' },
|
|
53
|
+
caption:
|
|
54
|
+
'The inherited IRA window can force taxable distributions into a shorter timeline than the beneficiary expected.',
|
|
55
|
+
alt: 'An inherited traditional account bucket drains across a ten-year timeline, with small annual gates and a final empty-the-bucket gate at the end.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'table',
|
|
59
|
+
caption: 'Two inherited-IRA questions to separate.',
|
|
60
|
+
columns: ['Question', 'If yes', 'Planning effect'],
|
|
61
|
+
rows: [
|
|
62
|
+
['Did the decedent have to take RMDs already?', 'Annual beneficiary RMDs may apply in years 1 through 9', 'The beneficiary may not be able to wait until year 10'],
|
|
63
|
+
['Does the 10-year deadline apply?', 'The account must be empty by the end of the tenth year', 'Income may need to be spread across the window'],
|
|
64
|
+
['Is the beneficiary young?', 'The 10% early-withdrawal penalty does not apply to inherited IRA distributions', 'Tax still applies; penalty relief is not tax relief'],
|
|
65
|
+
],
|
|
66
|
+
},
|
|
67
|
+
{ type: 'heading', text: 'A worked example' },
|
|
68
|
+
{
|
|
69
|
+
type: 'scenario',
|
|
70
|
+
name: 'The Kim household',
|
|
71
|
+
assumptions: [
|
|
72
|
+
{ label: 'Inherited account', value: '$300,000 traditional IRA received after a parent dies' },
|
|
73
|
+
{ label: 'Spread approach', value: '$30,000 a year for 10 years before growth and required details' },
|
|
74
|
+
{ label: 'Delay approach', value: 'Waiting could force a much larger taxable distribution near year 10' },
|
|
75
|
+
],
|
|
76
|
+
summary:
|
|
77
|
+
'A rough $30,000 annual spread is easier to fit around other income than a large final-year lump. The right schedule still depends on brackets, Medicare exposure, and cash needs.',
|
|
78
|
+
},
|
|
79
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
80
|
+
{
|
|
81
|
+
type: 'prose',
|
|
82
|
+
md: 'RetireGolden lets a traditional account be marked as inherited. The model tracks the original owner\'s death year, whether the decedent had started RMDs, and the beneficiary owner in the plan. It forces taxable, penalty-free distributions when required and empties the account by the tenth year. Inherited accounts are not used as Roth conversion sources.',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
type: 'callout',
|
|
86
|
+
tone: 'note',
|
|
87
|
+
md: 'Model note: RetireGolden uses a planning proxy for annual inherited-IRA divisor math. It is meant to show timing pressure, not to prepare a beneficiary RMD calculation.',
|
|
88
|
+
},
|
|
89
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
90
|
+
{
|
|
91
|
+
type: 'list',
|
|
92
|
+
items: [
|
|
93
|
+
'Assuming the beneficiary can stretch inherited IRA withdrawals over their whole lifetime.',
|
|
94
|
+
'Waiting until year ten without testing the tax spike.',
|
|
95
|
+
'Trying to convert an inherited traditional IRA to Roth in the model.',
|
|
96
|
+
'Confusing penalty-free inherited distributions with tax-free distributions.',
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
100
|
+
{
|
|
101
|
+
type: 'prose',
|
|
102
|
+
md: 'Use **Accounts** to mark a traditional account as inherited and enter the original owner death year. Use **Results** to inspect inherited distributions, taxable income, taxes, and ending balances across the ten-year window.',
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
2
|
+
|
|
3
|
+
export const insuranceInYourRetirementPlanArticle: LearningArticle = {
|
|
4
|
+
slug: 'insurance-in-your-retirement-plan',
|
|
5
|
+
title: 'Insurance in your retirement plan',
|
|
6
|
+
description: 'How permanent life and long-term-care insurance change retirement cash flows and risks.',
|
|
7
|
+
category: 'insurance-estate',
|
|
8
|
+
tags: ['insurance', 'permanent life', 'whole life', 'long-term care', 'ltc', 'risk transfer'],
|
|
9
|
+
audience: 'beginner',
|
|
10
|
+
status: 'ready',
|
|
11
|
+
lastReviewed: '2026-07-02',
|
|
12
|
+
reviewCadence: 'annual',
|
|
13
|
+
sourceUrls: [
|
|
14
|
+
'https://www.irs.gov/faqs/interest-dividends-other-types-of-income/life-insurance-disability-insurance-proceeds',
|
|
15
|
+
'https://www.law.cornell.edu/uscode/text/26/7702',
|
|
16
|
+
'https://content.naic.org/consumer/life-insurance.htm',
|
|
17
|
+
'https://content.naic.org/insurance-topics/life-insurance',
|
|
18
|
+
'https://www.medicare.gov/coverage/long-term-care',
|
|
19
|
+
'https://www.carescout.com/cost-of-care',
|
|
20
|
+
'https://investor.genworth.com/news-events/press-releases/detail/1054/carescout-releases-2025-cost-of-care-survey-results',
|
|
21
|
+
],
|
|
22
|
+
relatedArticles: [
|
|
23
|
+
'permanent-life-insurance-in-a-plan',
|
|
24
|
+
'long-term-care-insurance-as-risk-transfer',
|
|
25
|
+
'long-term-care-costs-and-insurance',
|
|
26
|
+
'after-tax-estate',
|
|
27
|
+
],
|
|
28
|
+
relatedPlannerRoutes: ['/plan/:planId/insurance', '/plan/:planId/results'],
|
|
29
|
+
currentYearSensitive: true,
|
|
30
|
+
priority: 'P1',
|
|
31
|
+
blocks: [
|
|
32
|
+
{
|
|
33
|
+
type: 'prose',
|
|
34
|
+
md: 'Insurance belongs in a retirement plan when it changes a risk the household cannot easily carry alone. RetireGolden focuses on two products that can change long-run outcomes: permanent life insurance and long-term-care (LTC) insurance.',
|
|
35
|
+
},
|
|
36
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
37
|
+
{
|
|
38
|
+
type: 'list',
|
|
39
|
+
items: [
|
|
40
|
+
'Permanent life is both protection and an asset-like cash value, but the premium drag matters.',
|
|
41
|
+
'LTC insurance is risk transfer: premiums in ordinary years for help if a large care event happens.',
|
|
42
|
+
'The right question is not whether a product is good or bad; it is what job it does in this plan.',
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
{ type: 'heading', text: 'The two products RetireGolden models' },
|
|
46
|
+
{
|
|
47
|
+
type: 'table',
|
|
48
|
+
caption: 'Planning role, upside, and tradeoff.',
|
|
49
|
+
columns: ['Product', 'Planning role', 'Potential upside', 'Main tradeoff'],
|
|
50
|
+
rows: [
|
|
51
|
+
[
|
|
52
|
+
'Permanent life',
|
|
53
|
+
'Survivor protection, estate liquidity, or conservative cash-value asset.',
|
|
54
|
+
'Cash value can support net worth while living; death benefit can support heirs or a survivor.',
|
|
55
|
+
'Premiums may crowd out saving, and policy cash value is not the same as a simple investment account.',
|
|
56
|
+
],
|
|
57
|
+
[
|
|
58
|
+
'Long-term-care insurance',
|
|
59
|
+
'Transfer part of a late-life care shock away from the household.',
|
|
60
|
+
'Can protect a survivor or estate if care costs arrive.',
|
|
61
|
+
'Premiums are paid even in no-care paths, and benefits are capped by policy terms.',
|
|
62
|
+
],
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
{ type: 'heading', text: 'Is permanent life an investment?' },
|
|
66
|
+
{
|
|
67
|
+
type: 'prose',
|
|
68
|
+
md: 'Sometimes, but that label can confuse the decision. A cash-value policy can build value over time, and NAIC consumer guidance describes whole life and universal life as cash-value policies with savings or investment features. But the policy also has insurance costs, fees, surrender rules, loan rules, and a death benefit.\n\nRetireGolden treats permanent life as a planning asset plus an insurance payout. Cash value counts while the insured is alive. At death, the model pays the larger modeled death benefit or cash value into the plan and avoids counting both. The IRS generally excludes death-benefit proceeds paid because of the insured person\'s death from gross income, though interest and some transfer-for-value situations can be taxable.',
|
|
69
|
+
},
|
|
70
|
+
{ type: 'heading', text: 'What LTC insurance transfers' },
|
|
71
|
+
{
|
|
72
|
+
type: 'prose',
|
|
73
|
+
md: 'Medicare.gov says Medicare does not pay for most non-medical long-term care or custodial care. That is why a care event can be a large household risk. CareScout\'s 2025 national median figures put assisted living at **$6,200 per month**, a semi-private nursing-home room at **$9,581 per month**, and a private nursing-home room at **$10,798 per month**.\n\nAn LTC policy does not make those costs disappear. It offsets costs after the elimination period, up to the monthly benefit, benefit period, and inflation rider. The stress test asks whether that transfer is worth the premiums in this plan.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
type: 'scenario',
|
|
77
|
+
name: 'The Alvarez household',
|
|
78
|
+
assumptions: [
|
|
79
|
+
{ label: 'Permanent life', value: '$250,000 death benefit, $70,000 cash value, $4,800 annual premium' },
|
|
80
|
+
{ label: 'LTC policy', value: '$5,500 monthly benefit, 3-year benefit period, 90-day elimination period' },
|
|
81
|
+
{ label: 'Care event', value: '$110,000 per year for 3 years starting at age 86' },
|
|
82
|
+
{ label: 'Planning question', value: 'Does the insured care path protect the survivor enough to justify no-care premiums?' },
|
|
83
|
+
],
|
|
84
|
+
summary:
|
|
85
|
+
'The policy values are not judged in isolation. The plan compares the premium drag, survivor protection, care shock, and ending estate together.',
|
|
86
|
+
},
|
|
87
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
88
|
+
{
|
|
89
|
+
type: 'list',
|
|
90
|
+
items: [
|
|
91
|
+
'Treating permanent-life cash value as if it were a free investment account with no insurance cost.',
|
|
92
|
+
'Counting both cash value and death benefit after the insured person dies.',
|
|
93
|
+
'Assuming Medicare broadly covers long-term custodial care.',
|
|
94
|
+
'Entering an LTC benefit but forgetting the elimination period, benefit period, or inflation rider.',
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
98
|
+
{
|
|
99
|
+
type: 'prose',
|
|
100
|
+
md: 'Use **Insurance** to enter permanent-life policies, LTC policies, and care events. Add a care event to turn on the LTC stress test. Use **Results** to see premium spending, insurance cash value, death benefits, care costs, and ending net worth.',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Medicare, IRMAA, and the two-year lookback" - a Healthcare P0 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const irmaaTwoYearLookbackArticle: LearningArticle = {
|
|
8
|
+
slug: 'irmaa-two-year-lookback',
|
|
9
|
+
title: 'Medicare, IRMAA, and the two-year lookback',
|
|
10
|
+
description: "How income from two years ago can raise this year's Medicare premiums.",
|
|
11
|
+
category: 'healthcare',
|
|
12
|
+
tags: ['medicare', 'irmaa', 'magi', 'part b', 'part d', 'roth conversion', 'tax cliff'],
|
|
13
|
+
audience: 'beginner',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-19',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: ['https://www.medicare.gov/basics/costs/medicare-costs', 'https://www.ssa.gov/medicare/lower-irmaa'],
|
|
18
|
+
relatedArticles: [
|
|
19
|
+
'agi-magi-and-taxable-income',
|
|
20
|
+
'why-roth-conversions-raise-other-costs',
|
|
21
|
+
'healthcare-after-65',
|
|
22
|
+
'roth-conversion-basics',
|
|
23
|
+
],
|
|
24
|
+
relatedPlannerRoutes: ['/plan/:planId/results', '/plan/:planId/strategy', '/plan/:planId/assumptions'],
|
|
25
|
+
currentYearSensitive: true,
|
|
26
|
+
priority: 'P0',
|
|
27
|
+
featured: true,
|
|
28
|
+
blocks: [
|
|
29
|
+
{
|
|
30
|
+
type: 'prose',
|
|
31
|
+
md: 'IRMAA stands for income-related monthly adjustment amount. It is an extra Medicare premium for higher-income households. The tricky part is timing: Medicare usually looks at income from two years earlier.',
|
|
32
|
+
},
|
|
33
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
34
|
+
{
|
|
35
|
+
type: 'list',
|
|
36
|
+
items: [
|
|
37
|
+
'IRMAA can raise Medicare Part B and Part D premiums.',
|
|
38
|
+
'The income test usually uses MAGI from two tax years earlier.',
|
|
39
|
+
'A Roth conversion or large gain can affect Medicare premiums later, not just tax in the conversion year.',
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
43
|
+
{
|
|
44
|
+
type: 'prose',
|
|
45
|
+
md: 'Most Medicare planning starts with the standard Part B premium. IRMAA adds a surcharge when income is above certain brackets. Those brackets work more like steps than a smooth slope: crossing a tier can increase premiums for the year.\n\nBecause the test looks back, a high-income year at 63 can matter at 65. A high-income year at 66 can matter at 68. That delay is why IRMAA can surprise people who focus only on the tax year in front of them.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
type: 'figure',
|
|
49
|
+
image: { src: '/learn/images/irmaa-lookback.webp' },
|
|
50
|
+
caption:
|
|
51
|
+
'IRMAA is a delayed cost: a higher-income year can raise Medicare premiums two years later.',
|
|
52
|
+
alt: 'An income stream crosses a threshold on a timeline, and a delayed arrow points to a later Medicare premium bucket with a surcharge ribbon.',
|
|
53
|
+
},
|
|
54
|
+
{ type: 'heading', text: 'How the lookback works' },
|
|
55
|
+
{
|
|
56
|
+
type: 'table',
|
|
57
|
+
caption: 'The timing is the part that most often causes surprises.',
|
|
58
|
+
columns: ['Planning question', 'What Medicare looks at', 'Why it matters'],
|
|
59
|
+
rows: [
|
|
60
|
+
['What premium do I pay this year?', 'Usually MAGI from two tax years ago', 'Current income may not show up in premiums yet'],
|
|
61
|
+
['What if my income recently fell?', 'A prior high-income year may still be on record', 'You may need to understand appeal rules or wait for the lookback to roll forward'],
|
|
62
|
+
['What if I convert to Roth?', 'The conversion can raise MAGI in the conversion year', 'The premium effect may arrive later'],
|
|
63
|
+
['What if I am under 65 now?', 'Income before Medicare can still enter the later lookback', 'A pre-Medicare conversion window is not automatically IRMAA-free'],
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
{ type: 'heading', text: 'A worked example' },
|
|
67
|
+
{
|
|
68
|
+
type: 'scenario',
|
|
69
|
+
name: 'The Carter household',
|
|
70
|
+
assumptions: [
|
|
71
|
+
{ label: 'Age', value: 'One spouse is 63 and planning Medicare at 65' },
|
|
72
|
+
{ label: 'Strategy', value: 'Considers an $85,000 Roth conversion before Medicare starts' },
|
|
73
|
+
{ label: 'Delayed cost', value: 'The conversion could add about $150 a month of Medicare premium two years later' },
|
|
74
|
+
],
|
|
75
|
+
summary:
|
|
76
|
+
'The tax bill is only year one of the decision. If the premium increase lasts 12 months, the conversion also carries about **$1,800** of delayed Medicare cost in this simplified estimate.',
|
|
77
|
+
},
|
|
78
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
79
|
+
{
|
|
80
|
+
type: 'prose',
|
|
81
|
+
md: 'RetireGolden models Medicare starting at age 65. It adds the standard Part B premium, applies IRMAA from the parameter pack, and uses a two-year MAGI lookback. The **Recent annual MAGI** assumption seeds years before the projection has its own MAGI history.',
|
|
82
|
+
},
|
|
83
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
84
|
+
{
|
|
85
|
+
type: 'list',
|
|
86
|
+
items: [
|
|
87
|
+
'Looking only at this year\'s federal tax bracket.',
|
|
88
|
+
'Forgetting that IRMAA can lag the income spike.',
|
|
89
|
+
'Treating every IRMAA tier as a reason to avoid conversions, instead of comparing lifetime after-tax results.',
|
|
90
|
+
'Assuming RetireGolden is a Medicare enrollment or appeal tool. It models planning costs, not the administrative process.',
|
|
91
|
+
],
|
|
92
|
+
},
|
|
93
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
94
|
+
{
|
|
95
|
+
type: 'prose',
|
|
96
|
+
md: 'Use **Assumptions** to set recent MAGI and healthcare inflation. Use **Strategy** or **Optimize** for conversion choices, then inspect **Results** for MAGI and healthcare-cost changes in later years.',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
}
|