@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,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Moving to RetireGolden" — Using RetireGolden article for the import &
|
|
3
|
+
* migration wizard (onboarding-import-and-migration step 6).
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
7
|
+
|
|
8
|
+
export const movingToRetireGoldenArticle: LearningArticle = {
|
|
9
|
+
slug: 'moving-to-retiregolden',
|
|
10
|
+
title: 'Moving to RetireGolden from another tool',
|
|
11
|
+
description: 'How the import wizard turns files you already have into a draft plan — and how to leave with your data any time.',
|
|
12
|
+
category: 'using-retiregolden',
|
|
13
|
+
tags: ['import', 'migration', 'csv', 'projectionlab', 'broker', 'portability', 'backup'],
|
|
14
|
+
audience: 'beginner',
|
|
15
|
+
status: 'ready',
|
|
16
|
+
lastReviewed: '2026-07-08',
|
|
17
|
+
reviewCadence: 'stable',
|
|
18
|
+
sourceUrls: [],
|
|
19
|
+
relatedArticles: [
|
|
20
|
+
'privacy-what-stays-in-your-browser',
|
|
21
|
+
'planner-overview',
|
|
22
|
+
'seed-your-plan-from-your-tax-return',
|
|
23
|
+
'account-types-overview',
|
|
24
|
+
],
|
|
25
|
+
relatedPlannerRoutes: ['/', '/import', '/plan/:planId/accounts'],
|
|
26
|
+
currentYearSensitive: false,
|
|
27
|
+
priority: 'P1',
|
|
28
|
+
blocks: [
|
|
29
|
+
{
|
|
30
|
+
type: 'prose',
|
|
31
|
+
md: 'Retyping a plan you already built somewhere else is the worst part of switching tools. The **Import & migrate** wizard (from the planner home) starts a draft RetireGolden plan from files you already have — and everything is parsed on your device, so no file is ever uploaded anywhere.',
|
|
32
|
+
},
|
|
33
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
34
|
+
{
|
|
35
|
+
type: 'list',
|
|
36
|
+
items: [
|
|
37
|
+
'Four guided paths: a broker positions CSV (Schwab, Fidelity, Vanguard), a ProjectionLab JSON export, any spreadsheet saved as CSV (including the Bogleheads Retiree Portfolio Model), and last year\'s Form 1040.',
|
|
38
|
+
'Nothing imports silently: a review checklist shows what mapped, what was assumed for you, and what could not come over.',
|
|
39
|
+
'Imports create a draft — you review it before saving, and every imported value stays editable like anything you typed.',
|
|
40
|
+
'Getting out is as supported as getting in: the plan backup is a documented, versioned JSON file.',
|
|
41
|
+
],
|
|
42
|
+
},
|
|
43
|
+
{ type: 'heading', text: 'What each path brings over' },
|
|
44
|
+
{
|
|
45
|
+
type: 'table',
|
|
46
|
+
caption: 'What each import source can and cannot provide.',
|
|
47
|
+
columns: ['Source', 'What imports', 'What you still enter'],
|
|
48
|
+
rows: [
|
|
49
|
+
['Broker CSV', 'Account balances, cost basis where the file has it, guessed account types', 'Household, income, spending, Social Security'],
|
|
50
|
+
['ProjectionLab JSON', 'Accounts, wages and other income, spending total, retirement-age milestone', 'Filing status, state, claim ages, strategies, assumptions'],
|
|
51
|
+
['Spreadsheet / RPM CSV', 'One account per row via column mapping (name, type, balance, basis, contribution)', 'Everything except accounts'],
|
|
52
|
+
['Form 1040 (guided)', 'Income streams, filing status, state, MAGI context, an estimated taxable balance', 'Spending, real account balances, retirement dates'],
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
{ type: 'heading', text: 'The review checklist keeps mapping honest' },
|
|
56
|
+
{
|
|
57
|
+
type: 'prose',
|
|
58
|
+
md: 'Formats differ, so no migration is ever 1:1. Instead of pretending otherwise, every import ends at a checklist with four groups: **Imported** (mapped directly), **Assumed — review** (a default the wizard had to invent, like treating a missing cost basis as "no unrealized gain"), **Not imported** (things the file could not express, with pointers to the right screen), and **Skipped** (unreadable rows). Work through the first two groups before trusting results.',
|
|
59
|
+
},
|
|
60
|
+
{ type: 'heading', text: 'Updating balances later' },
|
|
61
|
+
{
|
|
62
|
+
type: 'prose',
|
|
63
|
+
md: 'After the first import, you rarely want a whole new plan — just fresh numbers. The Accounts screen has **Update balances from a broker CSV**: download the same positions file at your annual checkup, assign each account in the file to a plan account, and apply. Balances (and cost basis, where present) refresh without retyping.',
|
|
64
|
+
},
|
|
65
|
+
{ type: 'heading', text: 'And moving out' },
|
|
66
|
+
{
|
|
67
|
+
type: 'prose',
|
|
68
|
+
md: 'Lock-in works both ways, so RetireGolden documents the exit too. **Download plan backup** on the planner home produces a plain JSON file containing every plan in full — a versioned, documented format, and backups made by older versions of the app keep importing through automatic migrations. If you move to another tool someday, your data is already in your hands in a machine-readable form.',
|
|
69
|
+
},
|
|
70
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
71
|
+
{
|
|
72
|
+
type: 'list',
|
|
73
|
+
items: [
|
|
74
|
+
'Skipping the review checklist — the "Assumed" group is where wrong guesses (account types, cost basis) hide.',
|
|
75
|
+
'Importing a broker CSV and expecting income or spending — positions files only carry balances.',
|
|
76
|
+
'Using the import wizard to restore a RetireGolden backup — that lives on the planner home ("Import previous backup").',
|
|
77
|
+
'Forgetting that a draft is a starting point: results are only as good as the sections you finish afterward.',
|
|
78
|
+
],
|
|
79
|
+
},
|
|
80
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
81
|
+
{
|
|
82
|
+
type: 'prose',
|
|
83
|
+
md: 'Open **Import from a file** on the planner home (or go to the Import & migrate page directly). To refresh an existing plan\'s balances, use the panel at the bottom of that plan\'s **Accounts** screen.',
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "NIIT and high-income investment tax" - a Taxes P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const niitHighIncomeInvestmentTaxArticle: LearningArticle = {
|
|
8
|
+
slug: 'niit-high-income-investment-tax',
|
|
9
|
+
title: 'NIIT and high-income investment tax',
|
|
10
|
+
description: 'The extra 3.8% tax on investment income above certain thresholds.',
|
|
11
|
+
category: 'taxes',
|
|
12
|
+
tags: ['niit', 'net investment income tax', 'capital gains', 'magi', 'high income'],
|
|
13
|
+
audience: 'intermediate',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/newsroom/net-investment-income-tax',
|
|
19
|
+
'https://www.irs.gov/forms-pubs/about-publication-550',
|
|
20
|
+
],
|
|
21
|
+
relatedArticles: [
|
|
22
|
+
'ordinary-income-vs-capital-gains',
|
|
23
|
+
'agi-magi-and-taxable-income',
|
|
24
|
+
'taxable-brokerage-basis-and-capital-gains',
|
|
25
|
+
'tax-loss-and-gain-harvesting',
|
|
26
|
+
],
|
|
27
|
+
relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/strategy', '/plan/:planId/results'],
|
|
28
|
+
currentYearSensitive: true,
|
|
29
|
+
priority: 'P1',
|
|
30
|
+
blocks: [
|
|
31
|
+
{
|
|
32
|
+
type: 'prose',
|
|
33
|
+
md: 'The net investment income tax, often called NIIT, is an extra federal tax that can apply when investment income and modified adjusted gross income are high enough. It is separate from ordinary tax and long-term capital-gain tax.',
|
|
34
|
+
},
|
|
35
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
36
|
+
{
|
|
37
|
+
type: 'list',
|
|
38
|
+
items: [
|
|
39
|
+
'NIIT is a 3.8% tax tied to net investment income and MAGI thresholds.',
|
|
40
|
+
'Realized taxable gains can trigger NIIT even when the capital-gain rate itself looks manageable.',
|
|
41
|
+
'RetireGolden models NIIT on realized gains as the investment-income piece it currently tracks separately.',
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
45
|
+
{
|
|
46
|
+
type: 'prose',
|
|
47
|
+
md: 'Capital gains can face more than one federal layer. First, they stack into the capital-gain brackets. Then, for higher-income households, NIIT can add another 3.8% on the smaller of net investment income or the MAGI amount above the threshold. That extra layer can change the cost of selling taxable investments or harvesting gains.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'figure',
|
|
51
|
+
image: { src: '/learn/images/niit-high-income-investment-tax.webp' },
|
|
52
|
+
caption:
|
|
53
|
+
'NIIT is an added layer that can sit on top of capital-gain tax when MAGI and investment income are high enough.',
|
|
54
|
+
alt: 'A capital-gain ribbon stacks into a tax tower, then an extra thin investment-tax layer appears above a high-income threshold marker.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'formula',
|
|
58
|
+
expression: 'NIIT = 3.8% x smaller of net investment income or MAGI above the threshold',
|
|
59
|
+
where: [
|
|
60
|
+
{ symbol: 'net investment income', meaning: 'investment income covered by the NIIT rules' },
|
|
61
|
+
{ symbol: 'MAGI above the threshold', meaning: 'modified adjusted gross income above the filing-status threshold' },
|
|
62
|
+
],
|
|
63
|
+
note: 'RetireGolden currently approximates investment income using realized gains because interest and dividends are not separately tracked in the projection.',
|
|
64
|
+
},
|
|
65
|
+
{ type: 'heading', text: 'A worked example' },
|
|
66
|
+
{
|
|
67
|
+
type: 'scenario',
|
|
68
|
+
name: 'The Shah household',
|
|
69
|
+
assumptions: [
|
|
70
|
+
{ label: 'Taxable sale', value: '$180,000 stock sale with $70,000 of long-term gain' },
|
|
71
|
+
{ label: 'Other income', value: '$210,000 of pension, wages, and IRA withdrawals already in MAGI' },
|
|
72
|
+
{ label: 'NIIT estimate', value: 'If $30,000 of the gain falls above the threshold, 3.8% adds about $1,140' },
|
|
73
|
+
],
|
|
74
|
+
summary:
|
|
75
|
+
'The sale is not just a capital-gain-bracket question. The same $70,000 gain can also create a separate **$1,140** NIIT layer when it lands on top of already-high MAGI.',
|
|
76
|
+
},
|
|
77
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
78
|
+
{
|
|
79
|
+
type: 'prose',
|
|
80
|
+
md: 'RetireGolden computes NIIT inside the federal tax detail. In the current model, realized gains are the separately tracked investment-income input. The Results ledger can show when a taxable sale or portfolio withdrawal raises MAGI enough for the NIIT layer to appear.',
|
|
81
|
+
},
|
|
82
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
83
|
+
{
|
|
84
|
+
type: 'list',
|
|
85
|
+
items: [
|
|
86
|
+
'Looking only at the 0%, 15%, or 20% capital-gain bracket.',
|
|
87
|
+
'Forgetting that MAGI from pensions, wages, IRA withdrawals, or conversions can help trigger NIIT.',
|
|
88
|
+
'Assuming NIIT applies to every dollar of income instead of the formula base.',
|
|
89
|
+
'Expecting RetireGolden to model every category of net investment income separately.',
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
93
|
+
{
|
|
94
|
+
type: 'prose',
|
|
95
|
+
md: 'Use **Accounts** to enter taxable cost basis. Use **Strategy** and **Scenarios** to test gain-heavy years, then inspect **Results** for realized gains, MAGI, capital-gain tax, NIIT, and total federal tax.',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Ordinary income vs capital gains" - a Taxes P0 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const ordinaryIncomeVsCapitalGainsArticle: LearningArticle = {
|
|
8
|
+
slug: 'ordinary-income-vs-capital-gains',
|
|
9
|
+
title: 'Ordinary income vs capital gains',
|
|
10
|
+
description: 'Why two kinds of income are taxed on separate ladders.',
|
|
11
|
+
category: 'taxes',
|
|
12
|
+
tags: ['ordinary income', 'capital gains', 'tax brackets', 'taxable brokerage', 'magi'],
|
|
13
|
+
audience: 'beginner',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/filing/federal-income-tax-rates-and-brackets',
|
|
19
|
+
'https://www.irs.gov/taxtopics/tc409',
|
|
20
|
+
'https://www.irs.gov/forms-pubs/about-publication-550',
|
|
21
|
+
],
|
|
22
|
+
relatedArticles: [
|
|
23
|
+
'marginal-vs-effective-tax-rate',
|
|
24
|
+
'taxable-brokerage-basis-and-capital-gains',
|
|
25
|
+
'agi-magi-and-taxable-income',
|
|
26
|
+
'withdrawal-order-basics',
|
|
27
|
+
'tax-loss-and-gain-harvesting',
|
|
28
|
+
],
|
|
29
|
+
relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/strategy', '/plan/:planId/results'],
|
|
30
|
+
currentYearSensitive: true,
|
|
31
|
+
priority: 'P0',
|
|
32
|
+
blocks: [
|
|
33
|
+
{
|
|
34
|
+
type: 'prose',
|
|
35
|
+
md: 'Ordinary income and long-term capital gains can both raise taxable income, but they do not move through the federal tax system the same way. Ordinary income uses ordinary brackets. Long-term capital gains stack on top and may use preferential capital-gain rates.',
|
|
36
|
+
},
|
|
37
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
38
|
+
{
|
|
39
|
+
type: 'list',
|
|
40
|
+
items: [
|
|
41
|
+
'Wages, taxable traditional withdrawals, pension income, and many conversions are ordinary income.',
|
|
42
|
+
'Long-term gains from taxable investments may use a separate 0%, 15%, or 20% federal rate structure.',
|
|
43
|
+
'Capital gains can still affect MAGI, Social Security taxation, ACA credits, IRMAA, NIIT, and state tax.',
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
47
|
+
{
|
|
48
|
+
type: 'prose',
|
|
49
|
+
md: 'The ordinary-income ladder fills first after deductions. Preferential long-term capital gains then stack on top of ordinary taxable income. That means the same capital gain can land in a lower or higher capital-gain layer depending on how much ordinary income is already in the year.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'figure',
|
|
53
|
+
image: { src: '/learn/images/ordinary-income-vs-capital-gains.webp' },
|
|
54
|
+
caption:
|
|
55
|
+
'Ordinary income fills the first tax ladder, then long-term capital gains stack into their own rate layers above it.',
|
|
56
|
+
alt: 'An ordinary-income ladder fills from the bottom, while a separate capital-gains ribbon stacks above it through three preferential tax layers.',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
type: 'table',
|
|
60
|
+
caption: 'Common income types in retirement planning.',
|
|
61
|
+
columns: ['Income type', 'Usually modeled as', 'Planning note'],
|
|
62
|
+
rows: [
|
|
63
|
+
['Wages, pensions, annuity taxable share', 'Ordinary income', 'Often fills ordinary brackets before portfolio withdrawals'],
|
|
64
|
+
['Traditional IRA or 401(k) withdrawals', 'Ordinary income', 'Can raise MAGI and affect brackets, RMDs, and surcharges'],
|
|
65
|
+
['Roth conversions', 'Ordinary income', 'Voluntary income that may be timed into lower-bracket years'],
|
|
66
|
+
['Taxable brokerage realized long-term gains', 'Capital gains', 'Stacks on top of ordinary income in the federal calculation'],
|
|
67
|
+
['Qualified Roth withdrawals', 'Usually outside taxable income', 'Rules matter, especially for early Roth access'],
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{ type: 'heading', text: 'A worked example' },
|
|
71
|
+
{
|
|
72
|
+
type: 'scenario',
|
|
73
|
+
name: 'The Singh household',
|
|
74
|
+
assumptions: [
|
|
75
|
+
{ label: 'Ordinary income', value: '$45,000 pension plus a $25,000 traditional IRA withdrawal' },
|
|
76
|
+
{ label: 'Taxable brokerage sale', value: '$30,000 sale with $9,000 of long-term gain' },
|
|
77
|
+
{ label: 'Stacking result', value: 'The IRA withdrawal fills ordinary brackets before the gain uses capital-gain layers' },
|
|
78
|
+
],
|
|
79
|
+
summary:
|
|
80
|
+
'The $25,000 IRA withdrawal is taxed as ordinary income. Only the **$9,000** gain portion of the brokerage sale goes through capital-gain layers, but both amounts can still raise AGI and MAGI.',
|
|
81
|
+
},
|
|
82
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
83
|
+
{
|
|
84
|
+
type: 'prose',
|
|
85
|
+
md: 'RetireGolden tracks ordinary income and realized gains separately. The federal tax engine applies deductions, ordinary brackets, and long-term capital-gain stacking. The projection also uses AGI and MAGI-style totals for rules such as taxable Social Security, ACA credits, IRMAA, and NIIT.',
|
|
86
|
+
},
|
|
87
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
88
|
+
{
|
|
89
|
+
type: 'list',
|
|
90
|
+
items: [
|
|
91
|
+
'Assuming capital gains are always tax-free when ordinary income is low.',
|
|
92
|
+
'Forgetting that capital gains can make more Social Security taxable.',
|
|
93
|
+
'Ignoring state tax, where gains are often treated more like ordinary income.',
|
|
94
|
+
'Treating every taxable brokerage withdrawal as a gain instead of separating basis from gain.',
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
98
|
+
{
|
|
99
|
+
type: 'prose',
|
|
100
|
+
md: 'Use **Accounts** to enter taxable cost basis and account type correctly. Use **Strategy** to control withdrawals and conversions, then inspect **Results** for ordinary income, realized gains, MAGI, tax, and zero-rate capital-gain headroom.',
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Paying conversion taxes from taxable vs IRA dollars" - a Withdrawals and Roth P2 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const payingConversionTaxesTaxableVsIraArticle: LearningArticle = {
|
|
8
|
+
slug: 'paying-conversion-taxes-taxable-vs-ira',
|
|
9
|
+
title: 'Paying conversion taxes from taxable vs IRA dollars',
|
|
10
|
+
description: 'Why where you pay the tax on a conversion changes the outcome.',
|
|
11
|
+
category: 'withdrawals-roth',
|
|
12
|
+
tags: ['roth conversion', 'conversion tax', 'taxable account', 'traditional ira', 'roth ira', 'withdrawals'],
|
|
13
|
+
audience: 'intermediate',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'annual',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/retirement-plans/roth-iras',
|
|
19
|
+
'https://www.irs.gov/retirement-plans/plan-participant-employee/rollovers-of-retirement-plan-and-ira-distributions',
|
|
20
|
+
'https://www.irs.gov/retirement-plans/retirement-plans-faqs-regarding-iras-distributions-withdrawals',
|
|
21
|
+
],
|
|
22
|
+
relatedArticles: [
|
|
23
|
+
'roth-conversion-basics',
|
|
24
|
+
'filling-a-tax-bracket-with-roth-conversions',
|
|
25
|
+
'why-roth-conversions-raise-other-costs',
|
|
26
|
+
'withdrawal-order-basics',
|
|
27
|
+
'how-the-optimizer-values-after-tax-estate',
|
|
28
|
+
],
|
|
29
|
+
relatedPlannerRoutes: ['/plan/:planId/strategy', '/plan/:planId/optimize', '/plan/:planId/results'],
|
|
30
|
+
currentYearSensitive: true,
|
|
31
|
+
priority: 'P2',
|
|
32
|
+
blocks: [
|
|
33
|
+
{
|
|
34
|
+
type: 'prose',
|
|
35
|
+
md: 'A Roth conversion creates a tax bill. That tax has to be paid from somewhere. Paying it from cash or taxable assets usually leaves more of the converted retirement dollars inside the Roth, while paying it from the IRA can reduce the amount that stays invested.',
|
|
36
|
+
},
|
|
37
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
38
|
+
{
|
|
39
|
+
type: 'list',
|
|
40
|
+
items: [
|
|
41
|
+
'The conversion amount is usually taxable income either way.',
|
|
42
|
+
'Using taxable dollars for the tax can leave more retirement-account dollars converted to Roth.',
|
|
43
|
+
'Using IRA dollars for the tax may create extra distribution issues, especially before penalty-free age.',
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
47
|
+
{
|
|
48
|
+
type: 'prose',
|
|
49
|
+
md: 'Think of a conversion as moving pre-tax dollars into Roth and then paying the tax cost. If the tax is paid from a separate taxable account, the full converted amount can land in Roth. If the tax is withheld from the IRA distribution, fewer dollars reach Roth, and the withheld amount may be treated as a distribution rather than a conversion.\n\nThat does not mean taxable dollars should always be used. Spending taxable assets has its own opportunity cost and may realize capital gains. The point is to model both paths honestly.',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'figure',
|
|
53
|
+
image: { src: '/learn/images/conversion-tax-source.webp' },
|
|
54
|
+
caption:
|
|
55
|
+
'The tax-payment source changes what remains invested: taxable dollars can pay the tax outside the conversion path, while IRA dollars reduce what reaches Roth.',
|
|
56
|
+
alt: 'Two side-by-side conversion paths move money from a traditional bucket to a Roth bucket. In one path a taxable bucket pays the tax gate separately; in the other the tax gate takes part of the conversion ribbon.',
|
|
57
|
+
},
|
|
58
|
+
{ type: 'heading', text: 'Two paths to compare' },
|
|
59
|
+
{
|
|
60
|
+
type: 'table',
|
|
61
|
+
caption: 'The conversion tax source changes the shape of the trade.',
|
|
62
|
+
columns: ['Tax source', 'What happens', 'Main trade-off'],
|
|
63
|
+
rows: [
|
|
64
|
+
['Cash or taxable account', 'Tax is paid outside the converted IRA dollars', 'More reaches Roth, but taxable assets are spent or gains may be realized'],
|
|
65
|
+
['Traditional IRA dollars', 'Part of the IRA distribution may pay the tax', 'Less reaches Roth, and extra distribution rules may apply'],
|
|
66
|
+
['Roth dollars', 'Usually avoid using Roth to pay conversion tax', 'Spending Roth may defeat part of the reason for converting'],
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
{ type: 'heading', text: 'A worked example' },
|
|
70
|
+
{
|
|
71
|
+
type: 'scenario',
|
|
72
|
+
name: 'The Kim household',
|
|
73
|
+
assumptions: [
|
|
74
|
+
{ label: 'Conversion goal', value: 'Convert $50,000 from traditional IRA to Roth' },
|
|
75
|
+
{ label: 'Estimated tax', value: '$11,000 due from the conversion year' },
|
|
76
|
+
{ label: 'Comparison', value: 'Pay $11,000 from taxable assets or withhold it from the IRA distribution' },
|
|
77
|
+
],
|
|
78
|
+
summary:
|
|
79
|
+
'If tax is paid from taxable assets, the full **$50,000** reaches Roth. If tax is withheld from the IRA distribution, only about **$39,000** is converted, but taxable liquidity is preserved.',
|
|
80
|
+
},
|
|
81
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
82
|
+
{
|
|
83
|
+
type: 'prose',
|
|
84
|
+
md: 'RetireGolden models conversion taxes as part of the normal annual cash-flow need. Taxes on conversions ride the withdrawal flow, so cash and taxable assets are used first under the default order. The converted amount itself moves from traditional to Roth and is not reduced for tax withholding inside the conversion transaction.',
|
|
85
|
+
},
|
|
86
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
87
|
+
{
|
|
88
|
+
type: 'list',
|
|
89
|
+
items: [
|
|
90
|
+
'Comparing conversions without asking where the tax cash comes from.',
|
|
91
|
+
'Counting the same taxable dollars as both invested and spent on tax.',
|
|
92
|
+
'Ignoring capital gains created by selling taxable assets to pay the tax.',
|
|
93
|
+
'Assuming IRA withholding is harmless before checking penalties and how much reaches Roth.',
|
|
94
|
+
],
|
|
95
|
+
},
|
|
96
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
97
|
+
{
|
|
98
|
+
type: 'prose',
|
|
99
|
+
md: 'Use **Strategy** for conversion rules, **Accounts** for taxable basis and cash levels, and **Results** to inspect withdrawals, realized gains, tax, Roth balances, and after-tax estate value.',
|
|
100
|
+
},
|
|
101
|
+
],
|
|
102
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Pensions and annuities" - an Accounts and Saving P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const pensionsAndAnnuitiesArticle: LearningArticle = {
|
|
8
|
+
slug: 'pensions-and-annuities',
|
|
9
|
+
title: 'Pensions and annuities',
|
|
10
|
+
description: 'How guaranteed income streams fit into a retirement plan.',
|
|
11
|
+
category: 'accounts-saving',
|
|
12
|
+
tags: ['pension', 'annuity', 'guaranteed income', 'cola', 'survivor benefit', 'ordinary income'],
|
|
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-575',
|
|
19
|
+
'https://www.investor.gov/introduction-investing/investing-basics/investment-products/insurance-products/annuities',
|
|
20
|
+
],
|
|
21
|
+
relatedArticles: [
|
|
22
|
+
'account-types-overview',
|
|
23
|
+
'ordinary-income-vs-capital-gains',
|
|
24
|
+
'planning-for-couples-and-survivor-years',
|
|
25
|
+
'state-income-taxes-in-retirement',
|
|
26
|
+
],
|
|
27
|
+
relatedPlannerRoutes: ['/plan/:planId/accounts', '/plan/:planId/income', '/plan/:planId/results'],
|
|
28
|
+
currentYearSensitive: true,
|
|
29
|
+
priority: 'P1',
|
|
30
|
+
blocks: [
|
|
31
|
+
{
|
|
32
|
+
type: 'prose',
|
|
33
|
+
md: 'A pension or annuity can change a retirement plan because it pays an income stream instead of sitting in an account balance. The planning question is not only "how much is it worth?" It is also "when does the payment start, how long does it last, how is it taxed, and what happens to a survivor?"',
|
|
34
|
+
},
|
|
35
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
36
|
+
{
|
|
37
|
+
type: 'list',
|
|
38
|
+
items: [
|
|
39
|
+
'Guaranteed income can reduce the amount a portfolio must supply each year.',
|
|
40
|
+
'Pensions and annuities are usually modeled by start age, monthly payment, inflation adjustment, and tax treatment.',
|
|
41
|
+
'Survivor benefits, taxable share, and cost-of-living adjustments can matter more than the headline monthly amount.',
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
45
|
+
{
|
|
46
|
+
type: 'prose',
|
|
47
|
+
md: 'A portfolio withdrawal is flexible: you choose how much to draw, and the account balance changes. A pension or annuity is different. It creates a scheduled payment that may arrive for life, for a term, or under contract-specific rules. In a plan, that income can cover part of the spending target before the withdrawal order starts selling investments.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'figure',
|
|
51
|
+
image: { src: '/learn/images/pensions-annuities.webp' },
|
|
52
|
+
caption:
|
|
53
|
+
'Pensions and annuities add scheduled income streams that can reduce how much the portfolio must cover.',
|
|
54
|
+
alt: 'Two steady income ribbons from a pension column and an annuity contract flow into a retirement spending path before the portfolio bucket is tapped.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'table',
|
|
58
|
+
caption: 'Inputs that shape a guaranteed-income stream.',
|
|
59
|
+
columns: ['Input', 'What it changes', 'Planning question'],
|
|
60
|
+
rows: [
|
|
61
|
+
['Start age', 'The first year payments appear', 'Does the income arrive before or after the portfolio bridge years?'],
|
|
62
|
+
['Monthly amount', 'The baseline annual income', 'How much spending does it cover before withdrawals?'],
|
|
63
|
+
['Cost-of-living adjustment', 'Whether payments grow over time', 'Does the stream keep up with inflation or shrink in buying power?'],
|
|
64
|
+
['Survivor benefit', 'What remains after the owner dies', 'Can the surviving spouse still cover fixed costs?'],
|
|
65
|
+
['Taxable share', 'How much annuity income is ordinary income in the model', 'Is the contract fully taxable or partly return of basis?'],
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{ type: 'heading', text: 'A worked example' },
|
|
69
|
+
{
|
|
70
|
+
type: 'scenario',
|
|
71
|
+
name: 'The Rivera household',
|
|
72
|
+
assumptions: [
|
|
73
|
+
{ label: 'Pension', value: '$2,500 per month starting at 65 with a survivor percentage' },
|
|
74
|
+
{ label: 'Annuity', value: '$900 per month starting at 70 with a taxable-share estimate' },
|
|
75
|
+
{ label: 'Portfolio role', value: 'Guaranteed income adds $40,800 a year once both streams are active' },
|
|
76
|
+
],
|
|
77
|
+
summary:
|
|
78
|
+
'Once both streams are active, the portfolio has **$40,800** less annual spending to cover before taxes. The survivor setting tests whether that gap reopens after one death.',
|
|
79
|
+
},
|
|
80
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
81
|
+
{
|
|
82
|
+
type: 'prose',
|
|
83
|
+
md: 'RetireGolden lets you add pension and annuity accounts on **Accounts**. Pension income is modeled as ordinary income once payments start, with an optional survivor percentage. Annuity income is modeled while the owner is alive, and the taxable share controls how much of the payment enters ordinary income. Both can have a cost-of-living adjustment.',
|
|
84
|
+
},
|
|
85
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
86
|
+
{
|
|
87
|
+
type: 'list',
|
|
88
|
+
items: [
|
|
89
|
+
'Entering only the monthly payment and ignoring whether it grows with inflation.',
|
|
90
|
+
'Assuming a pension continues at the same amount for the survivor when the plan has a reduced survivor option.',
|
|
91
|
+
'Treating every annuity payment as fully taxable when part may represent return of basis, or the reverse.',
|
|
92
|
+
'Comparing an annuity to a portfolio without considering liquidity, fees, guarantees, and insurer risk.',
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
96
|
+
{
|
|
97
|
+
type: 'prose',
|
|
98
|
+
md: 'Use **Accounts** to add pensions and annuities. Then use **Results** to inspect pension income, annuity income, ordinary income, taxes, and the spending gap before and after those streams begin.',
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Permanent life insurance in a retirement plan" - an Insurance and Estate P1 article.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LearningArticle } from '../learningRegistry'
|
|
6
|
+
|
|
7
|
+
export const permanentLifeInsurancePlanArticle: LearningArticle = {
|
|
8
|
+
slug: 'permanent-life-insurance-in-a-plan',
|
|
9
|
+
title: 'Permanent life insurance in a retirement plan',
|
|
10
|
+
description: 'How cash-value life insurance interacts with a retirement plan.',
|
|
11
|
+
category: 'insurance-estate',
|
|
12
|
+
tags: ['permanent life insurance', 'whole life', 'cash value', 'death benefit', 'estate'],
|
|
13
|
+
audience: 'intermediate',
|
|
14
|
+
status: 'ready',
|
|
15
|
+
lastReviewed: '2026-06-20',
|
|
16
|
+
reviewCadence: 'rule-change',
|
|
17
|
+
sourceUrls: [
|
|
18
|
+
'https://www.irs.gov/faqs/interest-dividends-other-types-of-income/life-insurance-disability-insurance-proceeds/life-insurance-disability-insurance-proceeds-1',
|
|
19
|
+
'https://www.irs.gov/publications/p525',
|
|
20
|
+
],
|
|
21
|
+
relatedArticles: [
|
|
22
|
+
'after-tax-estate',
|
|
23
|
+
'beneficiaries-and-account-titling',
|
|
24
|
+
'survivor-planning-for-couples',
|
|
25
|
+
'long-term-care-insurance-as-risk-transfer',
|
|
26
|
+
],
|
|
27
|
+
relatedPlannerRoutes: ['/plan/:planId/insurance', '/plan/:planId/results'],
|
|
28
|
+
currentYearSensitive: false,
|
|
29
|
+
priority: 'P1',
|
|
30
|
+
blocks: [
|
|
31
|
+
{
|
|
32
|
+
type: 'prose',
|
|
33
|
+
md: 'Permanent life insurance combines an insurance death benefit with a cash-value component. In a retirement plan, that makes it different from term life insurance, which is mostly pure protection for a period of years.',
|
|
34
|
+
},
|
|
35
|
+
{ type: 'heading', text: 'Quick takeaways' },
|
|
36
|
+
{
|
|
37
|
+
type: 'list',
|
|
38
|
+
items: [
|
|
39
|
+
'The premium is a spending drag while the policy is active.',
|
|
40
|
+
'Cash value can count as an asset while the insured is alive.',
|
|
41
|
+
'The death benefit can protect a survivor or estate, but RetireGolden uses a planning-level policy model, not a policy illustration engine.',
|
|
42
|
+
],
|
|
43
|
+
},
|
|
44
|
+
{ type: 'heading', text: 'The basic idea' },
|
|
45
|
+
{
|
|
46
|
+
type: 'prose',
|
|
47
|
+
md: 'Permanent life can play several roles: survivor protection, estate liquidity, a conservative asset-like cash value, or a legacy tool. Those roles should be separated. A policy that is useful for survivor protection may not be attractive as an investment. A policy with strong cash value may still be expensive if premiums crowd out other saving.\n\nThe planning question is not "Is permanent life good or bad?" It is "What job is this policy doing in this household, and what does it cost?"',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
type: 'figure',
|
|
51
|
+
image: { src: '/learn/images/permanent-life-insurance-plan.webp' },
|
|
52
|
+
caption:
|
|
53
|
+
'Permanent life insurance has two modeled paths: cash value while living and a death benefit when the insured dies.',
|
|
54
|
+
alt: 'A policy container splits into a growing cash-value path during life and a shielded death-benefit path at the insured death point.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
type: 'table',
|
|
58
|
+
caption: 'Permanent life inputs in a planning model.',
|
|
59
|
+
columns: ['Input', 'What it represents', 'Planning caution'],
|
|
60
|
+
rows: [
|
|
61
|
+
['Annual premium', 'The cost of keeping the policy in force', 'Premiums reduce cash flow even if no claim occurs soon'],
|
|
62
|
+
['Cash value', 'Policy value while the insured is alive', 'Actual values depend on the policy illustration and contract'],
|
|
63
|
+
['Cash-value schedule', 'Age-by-age policy values from an illustration', 'Usually better than assuming a flat growth rate'],
|
|
64
|
+
['Death benefit', 'Amount paid at death in the model', 'Real-world tax and estate details can depend on ownership and beneficiary structure'],
|
|
65
|
+
['Beneficiary', 'Estate or another person in the plan', 'RetireGolden does not model trusts, probate, or estate tax'],
|
|
66
|
+
],
|
|
67
|
+
},
|
|
68
|
+
{ type: 'heading', text: 'A worked example' },
|
|
69
|
+
{
|
|
70
|
+
type: 'scenario',
|
|
71
|
+
name: 'The Wallace household',
|
|
72
|
+
assumptions: [
|
|
73
|
+
{ label: 'Policy purpose', value: '$300,000 death benefit if the higher earner dies first' },
|
|
74
|
+
{ label: 'Cost', value: '$6,000 level annual premium paid for life' },
|
|
75
|
+
{ label: 'Asset side', value: '$85,000 current cash value growing from the policy illustration' },
|
|
76
|
+
],
|
|
77
|
+
summary:
|
|
78
|
+
'The same policy both costs and supports the plan: $6,000 leaves cash flow each year, while $85,000 of cash value and a $300,000 death benefit can support estate or survivor outcomes.',
|
|
79
|
+
},
|
|
80
|
+
{ type: 'heading', text: 'Why it matters in RetireGolden' },
|
|
81
|
+
{
|
|
82
|
+
type: 'prose',
|
|
83
|
+
md: 'RetireGolden models permanent life on the **Insurance** screen. Premiums are level nominal costs. Cash value can grow at a flat rate or follow an age-by-age schedule. In the insured person\'s death year, the model pays the larger of the death benefit or cash value into the plan and zeroes the cash value so it is not counted twice.',
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
type: 'callout',
|
|
87
|
+
tone: 'note',
|
|
88
|
+
md: 'Model note: RetireGolden does not model policy loans, surrender charges, dividends, modified endowment contract rules, trust ownership, estate tax, or premium funding strategies. Use it to understand plan-level cash flows, not to evaluate a specific policy contract.',
|
|
89
|
+
},
|
|
90
|
+
{ type: 'heading', text: 'Common mistakes' },
|
|
91
|
+
{
|
|
92
|
+
type: 'list',
|
|
93
|
+
items: [
|
|
94
|
+
'Treating cash value as liquid cash without considering policy rules.',
|
|
95
|
+
'Forgetting the premium drag in no-claim years.',
|
|
96
|
+
'Counting both cash value and death benefit at death.',
|
|
97
|
+
'Using a flat growth rate when an actual illustration schedule is available.',
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{ type: 'heading', text: 'Where to use this in the app' },
|
|
101
|
+
{
|
|
102
|
+
type: 'prose',
|
|
103
|
+
md: 'Use **Insurance** to enter permanent life policies, cash value, death benefit, premium mode, and beneficiary. Use **Results** to see insurance premiums in the spending chart, and download the **Results CSV** when you need year-by-year insurance cash value and death benefit columns.',
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
}
|