{
  "id": "retirement-withdrawal",
  "title": "Retirement Withdrawal Calculator",
  "prototypeTitle": "Retirement Withdrawal Calculator Prototype",
  "status": "beta-noindex",
  "prototypePath": "/prototypes/retirement-withdrawal-strategy/",
  "publicUrl": "/assets/calculators/retirement-withdrawal/",
  "plannedPublicUrl": "/assets/calculators/retirement-withdrawal/",
  "wrapperPath": "assets/calculators/retirement-withdrawal/index.html",
  "embeddedBodyPath": "assets/calculators/retirement-withdrawal/retirement-withdrawal.html",
  "robots": "noindex, nofollow",
  "category": "retirement",
  "displayGroup": "advanced",
  "difficulty": "advanced",
  "primaryClarityCategory": "tax-optimization",
  "clarityCategories": [
    "retirement-readiness",
    "tax-optimization",
    "assets",
    "cash-flow"
  ],
  "tags": [
    "retirement",
    "withdrawals",
    "decumulation",
    "rrsp",
    "rrif",
    "tfsa",
    "non-registered",
    "tax",
    "oas",
    "estate",
    "cash flow"
  ],
  "aliases": [
    "Tax-Efficient Retirement Withdrawal Planner",
    "Retirement Withdrawal Calculator",
    "Decumulation Scenario Calculator"
  ],
  "summary": "Compare educational retirement withdrawal scenario rules across registered accounts, TFSA, non-registered investments, pensions, CPP/QPP, OAS, taxes, cash flows, account balances, and simplified estate outcomes.",
  "recommendedFor": [
    "Testing how different retirement withdrawal ordering rules affect taxable income, account balances, and estate value under entered assumptions.",
    "Comparing retirement cash-flow funding and tax outcomes before building a production decumulation calculator.",
    "Reviewing whether a future flagship withdrawal app needs deeper tax, benefit, estate, and account-location modelling."
  ],
  "notFor": [
    "Personalized withdrawal advice",
    "Investment recommendations",
    "Tax filing",
    "Estate planning advice",
    "Benefit entitlement confirmation",
    "Guaranteed retirement-income projections"
  ],
  "relatedCalculatorsDraft": [
    "retirement",
    "retirement-gap",
    "rrif-minimum",
    "tax-payable"
  ],
  "followUpCalculatorsDraft": [
    "retirement",
    "rrif-minimum",
    "oas-clawback",
    "tax-payable",
    "non-registered-investment"
  ],
  "i18n": {
    "catalogKey": "calculatorCatalog.byId.retirement-withdrawal",
    "reservedWrapperKey": "calculators.retirementWithdrawal",
    "status": "catalog-wrapper-and-embedded-body-preview-ready-review-needed",
    "preflightStatus": "surface-inventory-complete-fr-zh-local-preview-visual-check-complete",
    "embeddedStatus": "technical-body-localized-fr-zh-preview-review-needed",
    "wrapperStatus": "wrapper-shell-present",
    "recommendedBodyApproach": "Use central calculatorCatalog keys for discovery surfaces and app-local dictionaries or a dedicated app namespace for the standalone mega-app body. Shared action labels should reuse shared keys where practical.",
    "notes": "The Beta route has calculator catalog entries for Tools/Concierge display, a public wrapper shell at index.html, and a reserved wrapper metadata namespace in English, French, and Chinese. The embedded calculator body lives in retirement-withdrawal.html and loads the shared i18n runtime with a local app-body adapter for stable chrome/action labels, input wizard labels/helpers, province display labels, live-review rows, print/share labels, locale formatting, scenario rule labels, component labels, selected-chart KPI labels, chart empty states, chart aria/title strings, goal-status messages, selected-year drilldown tables, scenario explanation lines, estate insight cards, overview table labels, cash-flow audit row labels, estate table labels, methodology/disclosure sections, and summary metric notes. The app has complete local French and Simplified Chinese body key coverage layered over the English source, is listed in i18n-lab.html, and owner visual review for French/Chinese preview including phone/print appearance was reported as good on 2026-06-12. The app still needs deeper native-language wording review for tax, estate, public-benefit, and calculation-message details before public multilingual release. The app has active-language rerender hooks and locale-tolerant parsing for comma decimals. The engine now exposes language-neutral assumptionCodes, warningCodes, firstDepletionAccount, and firstDepletionAge while preserving English compatibility strings."
  },
  "concierge": {
    "status": "registry-wired-beta-noindex",
    "broadPlanningArea": "retirement",
    "objective": "compare-retirement-withdrawal-scenarios",
    "intents": [
      "compare retirement withdrawal scenarios",
      "tax efficient retirement withdrawals",
      "which account to withdraw from in retirement",
      "compare RRIF TFSA non registered withdrawals",
      "retirement decumulation tax planning"
    ],
    "requiredInputs": [],
    "optionalInputs": [
      "province",
      "taxYear",
      "currentAge",
      "retirementAge",
      "endAge",
      "inflationRate",
      "spendingTarget",
      "cppIncome",
      "cppStartAge",
      "oasIncome",
      "oasStartAge",
      "pensionIncome",
      "pensionStartAge",
      "otherTaxableIncome",
      "registeredBalance",
      "tfsaBalance",
      "nonregBalance",
      "nonregAcb",
      "cashReserve",
      "rrifAge",
      "registeredReturn",
      "tfsaReturn",
      "interestYield",
      "eligibleDividendYield",
      "foreignIncomeYield",
      "capitalGrowthReturn",
      "realizationRate",
      "feeRate",
      "oasThreshold",
      "registeredDrawdownTaxableCeiling",
      "tfsaLastTaxableCeiling",
      "terminalTaxRate"
    ],
    "prefillMap": {
      "province": "province",
      "taxYear": "taxYear",
      "currentAge": "currentAge",
      "retirementAge": "retirementAge",
      "lifeExpectancyAge": "endAge",
      "annualAfterTaxSpending": "spendingTarget",
      "cppQppAnnualIncome": "cppIncome",
      "cppQppStartAge": "cppStartAge",
      "oasAnnualIncome": "oasIncome",
      "oasStartAge": "oasStartAge",
      "pensionAnnualIncome": "pensionIncome",
      "pensionStartAge": "pensionStartAge",
      "otherTaxableIncome": "otherTaxableIncome",
      "registeredBalance": "registeredBalance",
      "tfsaBalance": "tfsaBalance",
      "nonRegisteredBalance": "nonregBalance",
      "nonRegisteredAcb": "nonregAcb",
      "cashReserve": "cashReserve",
      "rrifStartAge": "rrifAge",
      "terminalTaxRate": "terminalTaxRate"
    }
  },
  "apiReadiness": {
    "status": "engine-separated-beta-contract",
    "engineStatus": "Projection logic now lives in assets/js/calculator-engines/retirement-withdrawal-engine.js. The prototype page acts as the DOM adapter, renderer, chart, and print/report surface.",
    "contractFile": "assets/data/calculator-contracts/retirement-withdrawal.json",
    "inputContractStatus": "Draft input keys are listed in this metadata file and in the calculator contract. The separated engine accepts those keys; validation and defaults are not yet production-final.",
    "outputContractStatus": "Draft engine outputs include scenario summaries, annual cash-flow rows, estate rows, assumptions, warnings, metadata, and the annual timing convention. The page renders selected cash-flow, annual tax, balance, estate charts, tables, disclosure, and print report from those outputs.",
    "annualTimingConvention": "Each model year starts with beginning balances, estimates recurring income and non-registered taxable income, applies the withdrawal rule to fund the after-tax spending need, records cash flow/tax/surplus/shortfall, then applies annual growth and fees to remaining balances.",
    "dataDependencies": [
      "tax payable engine or equivalent tax rules",
      "RRIF minimum factors",
      "OAS recovery threshold marker",
      "registered drawdown taxable-income ceiling",
      "TFSA-last taxable-income ceiling",
      "non-registered investment tax-character assumptions",
      "terminal tax assumption"
    ]
  },
  "publishingChecklist": {
    "beforeBetaRetirement": [
      "Keep the copied Beta route and the prototype route separate until the Beta route is verified.",
      "Confirm public calculator name and short URL slug.",
      "Add focused engine test cases for normal, boundary, and invalid inputs.",
      "Decide which scenario rules are included and avoid advice-like optimization wording.",
      "Verify Concierge intake, prefill, and follow-up calculators on the Beta route.",
      "Keep wrapper and embedded-body i18n status distinct during future language review.",
      "Keep related calculators registry-driven from the wrapper route.",
      "Confirm noindex, sitemap, release-review, and Beta status."
    ]
  }
}
