{"allowContribute":false,"item":{"artifactHtml":"\u003cstyle\u003e\n  :root{--paper:#F7F9F8;--ink:#11181A;--ink2:#546066;--accent:#0E6B6E;--accent2:#0F8A8E;--soft:#E3F1F1;--soft2:#EDF6F5;--hair:#D7E2E2;--warn:#C2571A;--mint:#12685E;--tangerine:#B85C2B;--card:#FFFFFF;--code:#0F2324;}\n  :root[data-theme=\"dark\"]{--paper:#0F1415;--ink:#E6ECEC;--ink2:#9AA8AA;--accent:#4ED3D8;--accent2:#6EE2E6;--soft:#143235;--soft2:#162E31;--hair:#26373A;--warn:#F0A674;--card:#171E1F;--code:#E6ECEC;}\n  .doc{background:var(--paper);color:var(--ink);padding:30px 32px;font:15px/1.75 -apple-system,BlinkMacSystemFont,\"PingFang TC\",\"Noto Sans TC\",sans-serif;max-width:980px;margin:0 auto;}\n  .eyebrow{font:700 11px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.16em;color:var(--accent);text-transform:uppercase;}\n  h1{font-size:28px;line-height:1.22;letter-spacing:-.02em;margin:10px 0 8px;font-weight:800;}\n  .lede{color:var(--ink2);font-size:14px;margin:0 0 18px;max-width:68ch;line-height:1.6;}\n  .meta{font:11px ui-monospace,monospace;color:var(--ink2);display:flex;gap:12px;flex-wrap:wrap;margin-bottom:18px;}\n  .meta span{background:var(--soft);padding:4px 8px;border-radius:999px;}\n  .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:10px;margin:16px 0;border:1px solid var(--hair);}\n  .callout .tag{flex:none;font:800 11px ui-monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px;}\n  .callout .txt{font-size:13.5px;color:var(--ink);line-height:1.65;}\n  .callout.warn{background:#FFF4EC;border-color:#E8C9B0;}\n  :root[data-theme=\"dark\"] .callout.warn{background:#2A1D14;border-color:#5A3A22;}\n  .callout.warn .tag{color:var(--warn);}\n  h2{font-size:18px;font-weight:800;margin:28px 0 10px;letter-spacing:-.015em;display:flex;align-items:center;gap:8px;}\n  h2 .num{font:700 11px ui-monospace;color:#fff;background:var(--accent);width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;}\n  h3{font-size:14px;font-weight:700;margin:18px 0 8px;color:var(--ink);}\n  p{color:var(--ink2);font-size:14px;line-height:1.75;margin:8px 0;max-width:72ch;}\n  p strong{color:var(--ink);}\n  .stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0 18px;}\n  .stat{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:12px 13px;}\n  .stat .k{font:600 11px ui-monospace;letter-spacing:.06em;color:var(--accent);}\n  .stat .v{font-size:20px;font-weight:800;margin-top:4px;letter-spacing:-.02em;}\n  .stat .n{font-size:11px;color:var(--ink2);margin-top:2px;line-height:1.4;}\n  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}\n  .card{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:14px 15px;}\n  .card .cap{font:700 11px ui-monospace;letter-spacing:.08em;color:var(--accent);margin-bottom:6px;}\n  .card .big{font-size:18px;font-weight:800;letter-spacing:-.015em;}\n  .card .sub{font-size:12px;color:var(--ink2);margin-top:3px;line-height:1.5;}\n  table{border-collapse:collapse;width:100%;font-size:13px;margin:10px 0;}\n  th,td{padding:9px 10px;border-bottom:1px solid var(--hair);text-align:left;}\n  th{font:700 11px ui-monospace;letter-spacing:.06em;color:var(--ink2);background:var(--soft2);white-space:nowrap;}\n  td{color:var(--ink);}\n  td.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;}\n  .pill{display:inline-block;font:700 10px ui-monospace;letter-spacing:.06em;padding:2px 7px;border-radius:999px;border:1px solid var(--hair);}\n  .pill.fixed{background:var(--soft);color:var(--accent);border-color:var(--accent);}\n  .pill.float{background:#FFF4EC;color:var(--warn);border-color:#E8C9B0;}\n  :root[data-theme=\"dark\"] .pill.float{background:#2A1D14;}\n  .code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;background:var(--code);color:#E6ECEC;padding:12px 14px;border-radius:10px;overflow-x:auto;line-height:1.6;white-space:pre;}\n  :root[data-theme=\"dark\"] .code{background:#0B1A1B;}\n  .kv{display:grid;grid-template-columns:160px 1fr;gap:6px 12px;font-size:13px;margin:8px 0;}\n  .kv dt{color:var(--ink2);font:600 11px ui-monospace;letter-spacing:.05em;padding-top:2px;}\n  .kv dd{margin:0;color:var(--ink);}\n  .hr{height:1px;background:var(--hair);margin:22px 0;}\n  .badge{font:700 10px ui-monospace;letter-spacing:.06em;padding:3px 7px;border-radius:6px;}\n  .badge.ok{background:#DFF5ED;color:#0B6B4F;border:1px solid #B8E6D6;}\n  .badge.off{background:#FDEAD7;color:#9A4A12;border:1px solid #E8C9B0;}\n  :root[data-theme=\"dark\"] .badge.ok{background:#12382E;color:#7FE4C2;}\n  :root[data-theme=\"dark\"] .badge.off{background:#3A2312;color:#F0A674;}\n  @media(max-width:720px){.doc{padding:20px 16px;}h1{font-size:22px;}.stats{grid-template-columns:1fr 1fr;}.grid2{grid-template-columns:1fr;}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\n  \u003cheader\u003e\n    \u003cdiv class=\"eyebrow\"\u003eAssetTrend · AI 目標淨資產引擎 · 8268c53fd2ead0b31996e3cb\u003c/div\u003e\n    \u003ch1\u003eAI 目標淨資產邏輯參數報告 — 固定基準引擎全解析\u003c/h1\u003e\n    \u003cp class=\"lede\"\u003e本報告還原 Vault 當前「資產趨勢」插件中 AI 目標淨資產（Milestones / FIRE / Target Line）的完整參數、公式與資料流。核心採 \u003cstrong\u003e固定基準（Fixed Baseline）\u003c/strong\u003e 模型：起點鎖死在基準日，不隨後續快照浮動，解決「愈追目標愈高」的移動靶問題。\u003c/p\u003e\n    \u003cdiv class=\"meta\"\u003e\n      \u003cspan\u003e基準 2021-07-01 · NT$ 419,527 @ 25歲\u003c/span\u003e\n      \u003cspan\u003e最新 2026-08-01 · NT$ 8,435,223\u003c/span\u003e\n      \u003cspan\u003etargetMode = fixed\u003c/span\u003e\n      \u003cspan\u003e產生 2026-08-21\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/header\u003e\n\n  \u003csection data-cube=\"stats\" class=\"stats\"\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eFIRE 終點目標\u003c/div\u003e\u003cdiv class=\"v\"\u003eNT$ 3,641萬\u003c/div\u003e\u003cdiv class=\"n\"\u003e55歲退休 · 月需5萬 · 通膨3% · 4%提領\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e基準起點\u003c/div\u003e\u003cdiv class=\"v\"\u003eNT$ 41.9萬\u003c/div\u003e\u003cdiv class=\"n\"\u003e2021-07-01 @ 25歲 · 已鎖定 fixed\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e年化投入需求\u003c/div\u003e\u003cdiv class=\"v\"\u003eNT$ 35.2萬/年\u003c/div\u003e\u003cdiv class=\"n\"\u003e≈ NT$ 29,300/月 · 以 7% 預期報酬推算\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e當前進度\u003c/div\u003e\u003cdiv class=\"v\" style=\"color:var(--mint)\"\u003e大幅 On Track\u003c/div\u003e\u003cdiv class=\"n\"\u003e8,435,223 vs 第5年固定目標約 2.1M\u003c/div\u003e\u003c/div\u003e\n  \u003c/section\u003e\n\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心結論\u003c/span\u003e\u003cdiv class=\"txt\"\u003eAI 目標線 \u003cstrong\u003e不是\u003c/strong\u003e 跟著你最新淨資產重畫的，而是從「2021-07-01 那天的 41.9 萬」以 7% 預期報酬 + 每年固定投入 \u003cstrong\u003eNT$ 351,600\u003c/strong\u003e 複利長到 55 歲的等額年金軌跡。只要你現在的淨資產在軌跡上方，就是 \u003cspan class=\"badge ok\"\u003eOn Track\u003c/span\u003e；在下方就是 \u003cspan class=\"badge off\"\u003eOff Track\u003c/span\u003e。當前你已超前固定軌跡約 \u003cstrong\u003e630 萬\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e1\u003c/span\u003e 參數總表 — Vault 真實值 vs 預設值\u003c/h2\u003e\n  \u003cp\u003e來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（id: assettrend_section_config_6a61209a010ffe6f3268c5）與 \u003ccode\u003efrontend/schemas/assetTrendSectionConfigSchema.ts\u003c/code\u003e 預設。未在 DB 出現的欄位即沿用程式預設。\u003c/p\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e欄位 key\u003c/th\u003e\u003cth\u003e目前值\u003c/th\u003e\u003cth\u003e預設值\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e目前年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ecurrentAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e30\u003c/td\u003e\u003ctd\u003e計算 years = retireAge − currentAge 的起點\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003eretireAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e55 歲 \u003cspan style=\"color:var(--ink2)\"\u003e(DB未存·用預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e55\u003c/td\u003e\u003ctd\u003e里程碑年數 = 30 年（55−25）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後月需（現值）\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyNeed\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 50,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e50,000\u003c/td\u003e\u003ctd\u003e經通膨膨脹後除以提領率得 FIRE 目標\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e通膨率\u003c/td\u003e\u003ctd class=\"mono\"\u003einflationRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e3 %\u003c/td\u003e\u003ctd class=\"mono\"\u003e2.5 %\u003c/td\u003e\u003ctd\u003e你已改為 3%，高於預設 0.5pp\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休前報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epreReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 %\u003c/td\u003e\u003ctd\u003e複利與年金係數 r\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epostReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e目前僅作展示，里程碑計算未直接使用\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e每月可投入\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyInvest\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 20,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e20,000\u003c/td\u003e\u003ctd\u003eWhat-If / 蒙地卡羅輸入，固定軌跡用的是「反推的 requiredAnnual」\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e提領率\u003c/td\u003e\u003ctd class=\"mono\"\u003ewithdrawalRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e4% Rule 分母\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e目標模式\u003c/td\u003e\u003ctd class=\"mono\"\u003etargetMode\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"pill fixed\"\u003efixed 固定\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003efixed\u003c/td\u003e\u003ctd\u003e固定基準為推薦；floating 為移動靶\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準淨資產\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineNet\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 419,527\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003efixed 模式的起點淨值\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準日期\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineDate\u003c/td\u003e\u003ctd class=\"mono\"\u003e2021-07-01\u003c/td\u003e\u003ctd class=\"mono\"\u003e\"\"\u003c/td\u003e\u003ctd\u003e圖表 targetPoints 的錨定日\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003e里程碑 age = baselineAge + year\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示目標線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowTargetLine\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue\u003c/td\u003e\u003ctd\u003eNetWorthChart 是否畫 targetPoints\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示流動線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowLiquidLine\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd\u003eliquidAssets 線開關\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e時間粒度\u003c/td\u003e\u003ctd class=\"mono\"\u003etrendGranularity\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth\u003c/td\u003e\u003ctd\u003emonth / quarter / year 聚合\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e注意\u003c/span\u003e\u003cdiv class=\"txt\"\u003e你的 \u003ccode\u003ecurrentAge 25\u003c/code\u003e 與 \u003ccode\u003ebaselineAge 25\u003c/code\u003e 相同，代表基準鎖定當下即視為起點。若之後你在 UI 修改「目前年齡」，固定軌跡 \u003cstrong\u003e不會\u003c/strong\u003e 跟著平移——這正是 fixed 的設計目的。如需重錨定，請用「鎖定為基準」或「以最早快照為基準」。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e2\u003c/span\u003e 基準錨定 — Fixed vs Floating\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFIXED 固定基準（你目前） ✅\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 2021-07-01 · 41.9萬 @25歲\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestonesFromBaseline({baselineNet, baselineAge, ...})\u003c/code\u003e\u003cbr\u003e之後任何新快照的淨資產暴漲/暴跌，目標軌跡 \u003cstrong\u003e不動\u003c/strong\u003e。On/Off Track 才是動態的。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：\u003ccode\u003ebaselineDate\u003c/code\u003e → chart targetPoints 以此日逐年 +1 年推進\u003cbr\u003efallback：若 baseline 未設，暫用 \u003ccode\u003elatestNet\u003c/code\u003e / \u003ccode\u003ecurrentAge\u003c/code\u003e 避免舊用戶空白\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFLOATING 浮動（移動靶）\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 最新快照淨值 @ currentAge\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestones({currentNet:latestNet, currentAge, ...})\u003c/code\u003e\u003cbr\u003e每新增一筆快照就重算整條目標線 → 淨資產愈高，目標也被墊愈高，永遠追不上。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：最新 \u003ccode\u003esnapshotDate\u003c/code\u003e\u003cbr\u003eUI 切換：RetirePanel 的 Switch → \u003ccode\u003etargetMode: 'floating'\u003c/code\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e程式位置：\u003ccode\u003eAssetTrendView.tsx:32-53\u003c/code\u003e 依 \u003ccode\u003etargetMode\u003c/code\u003e 分流；\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e 提供「鎖定為基準 / 清除基準 / 以最早快照為基準」三個操作。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e3\u003c/span\u003e 核心演算 — 五條公式\u003c/h2\u003e\n  \u003ch3\u003e3-1 淨資產與流動資產\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003etotalAssets  = cash + deposits + stocksValue + fundsValue + propertyValue + otherAssets\ntotalLiabilities = mortgageBalance + creditLoanBalance + carLoanBalance + cardDebtBalance + otherLiabilities\nnetWorth     = totalAssets − totalLiabilities\nliquidAssets = cash + deposits + fundsValue + stocksValue   // 不含房產與 otherAssets\u003c/div\u003e\n  \u003cp\u003e來源 \u003ccode\u003eutils/calc.ts:3-10\u003c/code\u003e。你的快照採「精簡記帳」：全部金額塞在 \u003ccode\u003eotherAssets / otherLiabilities\u003c/code\u003e（2026-08-01：otherAssets 9,477,721、otherLiabilities 1,042,498 → netWorth 8,435,223），因此 \u003ccode\u003eliquidAssets\u003c/code\u003e 在此記帳法下為 0，會低估流動性。\u003c/p\u003e\n\n  \u003ch3\u003e3-2 FIRE 終點目標\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003efireNumber({ monthlyNeed, inflationRate, years, withdrawalRate })\n  needFuture = monthlyNeed × 12 × (1 + infl)^years\n  fireTarget = needFuture / wd        // wd = withdrawalRate / 100，預設 0.04\n\n// 以你當前參數：\n// years = 55−25 = 30，infl=3%，monthlyNeed=50,000，wd=4%\n// needFuture = 600,000 × 1.03^30 ≈ 600,000 × 2.42726 = 1,456,357\n// fireTarget ≈ 1,456,357 / 0.04 = 36,408,930\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:50-54\u003c/code\u003e。通膨用複利膨脹到退休那年的名目支出，再除以提領率。若把通膨改回預設 2.5%，FIRE 會降至約 3,140 萬；若退休延至 60 歲（years=35），FIRE 會升至約 4,220 萬。\u003c/p\u003e\n\n  \u003ch3\u003e3-3 固定基準里程碑（等額年金軌跡）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003ecomputeMilestonesFromBaseline({ baselineNet, baselineAge, retireAge, monthlyNeed, inflationRate, preReturn, withdrawalRate })\n  years = retireAge − baselineAge\n  fireTarget 如上\n  r = preReturn/100\n  if r≈0:  requiredAnnual = (fireTarget − baselineNet) / years\n  else:    fvBaseline = baselineNet × (1+r)^years\n           requiredAnnual = (fireTarget − fvBaseline) × r / ((1+r)^years − 1)   // 年金終值公式反推\n           if requiredAnnual \u0026lt; 0 → 0   // 已超額就不要求再投入\n  對 n=1..years:\n    if r≈0: target_n = baselineNet + requiredAnnual × n\n    else:   target_n = baselineNet×(1+r)^n + requiredAnnual × ((1+r)^n − 1)/r\n    推入 { year:n, age:baselineAge+n, target:round(target_n) }\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:22-48\u003c/code\u003e。關鍵：\u003cstrong\u003erequiredAnnual 是「為剛好在退休年碰到 FIRE」所需的每年固定投入\u003c/strong\u003e，由起點與終點反推，再用同一金額正向複利長出整條軌跡。你的參數下 \u003ccode\u003erequiredAnnual ≈ NT$ 351,600 /年\u003c/code\u003e（見下一節實算）。\u003c/p\u003e\n\n  \u003ch3\u003e3-4 每月投入缺口（requiredMonthly）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003erequiredMonthly({ currentNet, fireTarget, years, preReturn })\n  // 與上式同構，只是把 baselineNet 換成 currentNet，並除以 12：\n  annual = (fireTarget − currentNet×(1+r)^years) × r / ((1+r)^years − 1)\n  return max(0, annual/12)\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:56-65\u003c/code\u003e。WhatIfPanel 用它對比「基準 vs 情境」每月需投入。注意：它是「從現在起」的缺口；固定軌跡的是「從基準起」的 requiredAnnual，兩者不要混用。\u003c/p\u003e\n\n  \u003ch3\u003e3-5 蒙地卡羅（1,000 條路徑）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003emonteCarlo({ currentNet, monthlyInvest, years, meanReturn, volatility, fireTarget })\n  對 k=1..1000:\n    v = currentNet\n    對 y=1..years:\n      r_y = mean + vol × randn()   // randn = Box-Muller 常態亂數\n      v = v×(1+r_y) + monthlyInvest×12\n    finals.push(v)\n  排序後取 P10/P50/P90，successRate = finals≥fireTarget 的比例\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:67-87\u003c/code\u003e。輸入的 \u003ccode\u003evolatility\u003c/code\u003e 預設 UI 為 15%，可手動改。\u003ccode\u003emonthlyInvest\u003c/code\u003e 吃的是設定檔的每月可投入（預設 20,000），不是 requiredAnnual。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e4\u003c/span\u003e 實測數值 — 以你當前固定基準推算\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e輸入\u003c/div\u003e\n      \u003cdiv class=\"kv\" style=\"margin-top:6px\"\u003e\n        \u003cdt\u003ebaselineNet\u003c/dt\u003e\u003cdd\u003e419,527\u003c/dd\u003e\n        \u003cdt\u003ebaselineAge → retireAge\u003c/dt\u003e\u003cdd\u003e25 → 55（30年）\u003c/dd\u003e\n        \u003cdt\u003emonthlyNeed / infl / wd\u003c/dt\u003e\u003cdd\u003e50,000 / 3% / 4%\u003c/dd\u003e\n        \u003cdt\u003epreReturn r\u003c/dt\u003e\u003cdd\u003e7%\u003c/dd\u003e\n        \u003cdt\u003efireTarget\u003c/dt\u003e\u003cdd\u003e≈ 36,408,930\u003c/dd\u003e\n        \u003cdt\u003efvBaseline\u003c/dt\u003e\u003cdd\u003e419,527×1.07^30 ≈ 3,193,600\u003c/dd\u003e\n        \u003cdt\u003erequiredAnnual\u003c/dt\u003e\u003cdd\u003e\u003cstrong\u003e≈ 351,600 /年（29,300/月）\u003c/strong\u003e\u003c/dd\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e軌跡抽樣（四捨五入）\u003c/div\u003e\n      \u003ctable style=\"margin:6px 0 0\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003e年次\u003c/th\u003e\u003cth\u003e年齡\u003c/th\u003e\u003cth\u003e目標淨資產\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody\u003e\n          \u003ctr\u003e\u003ctd\u003e第 1 年\u003c/td\u003e\u003ctd\u003e26 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 800,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 5 年\u003c/td\u003e\u003ctd\u003e30 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 2,136,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 10 年\u003c/td\u003e\u003ctd\u003e35 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 4,654,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 20 年\u003c/td\u003e\u003ctd\u003e45 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 14,650,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 30 年\u003c/td\u003e\u003ctd\u003e55 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e36,408,930（=FIRE）\u003c/td\u003e\u003c/tr\u003e\n        \u003c/tbody\u003e\n      \u003c/table\u003e\n      \u003cdiv class=\"sub\"\u003e公式：target_n = 419,527×1.07^n + 351,600×((1.07^n−1)/0.07)\u003cbr\u003e完整 30 年明細見 MilestoneTable 元件。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e對照\u003c/span\u003e\u003cdiv class=\"txt\"\u003e若切成 \u003cspan class=\"pill float\"\u003efloating\u003c/span\u003e 以最新淨值 8,435,223 為起點重算：fvCurrent = 8,435,223×1.07^30 ≈ 64,211,600 已超過 FIRE，requiredAnnual 會被壓到 \u003cstrong\u003e0\u003c/strong\u003e，軌跡變成純 7% 複利（第1年 9,025,000），終點 6,421 萬遠高於 FIRE。這就是「移動靶」會讓目標虛胖的原因。\u003c/div\u003e\u003c/div\u003e\n  \u003ch3\u003e當前 On/Off Track 判定\u003c/h3\u003e\n  \u003cp\u003eMilestoneTable 以 \u003ccode\u003egap = currentNet − milestones[0].target\u003c/code\u003e 判斷。2026-08-01 的 \u003ccode\u003ecurrentNet 8,435,223\u003c/code\u003e 對比固定軌跡第 5 年目標約 213 萬，\u003cspan class=\"badge ok\"\u003eOn Track 超前約 630 萬\u003c/span\u003e。若對比 floating 第1年目標 902 萬，則仍超前但餘裕縮小——再次證明 fixed 才能真實反映超前幅度。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e5\u003c/span\u003e 圖表與資料流\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eCHART DATA\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e\u003ccode\u003eAssetTrendView.tsx:58-94\u003c/code\u003e\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e\u003cstrong\u003epoints\u003c/strong\u003e：按 \u003ccode\u003esnapshotDate\u003c/code\u003e 排序，每個粒度 bucket 取最後一筆的 \u003ccode\u003enetWorth\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eliquidPoints\u003c/strong\u003e：同上取 \u003ccode\u003eliquidAssets\u003c/code\u003e，僅當 \u003ccode\u003eshowLiquidLine\u003c/code\u003e 啟用才繪製\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003etargetPoints\u003c/strong\u003e：以 \u003ccode\u003eanchorDate\u003c/code\u003e（fixed 用 \u003ccode\u003ebaselineDate\u003c/code\u003e，floating 用最新快照日）逐年 +1 年，value 取對應 milestone.target\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003egranularity\u003c/strong\u003e：month 原樣 / quarter 壓至 Q 末月 / year 壓至 12-01\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eSNAPSHOT 快照\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e61 筆月快照（2021-07-01 → 2026-08-01）\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e欄位：cash / deposits / stocksValue / fundsValue / propertyValue / otherAssets / 五類負債 / note\u003c/li\u003e\n        \u003cli\u003e你採 \u003ccode\u003eotherAssets + otherLiabilities\u003c/code\u003e 精簡記帳，適合快速匯入但會使 liquidAssets 失真\u003c/li\u003e\n        \u003cli\u003eCSV 匯出/匯入：\u003ccode\u003eAssetTrendView.tsx:102-140\u003c/code\u003e，表頭含 totalAssets/totalLiabilities/netWorth/liquidAssets 衍生欄\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e元件對應：\u003ccode\u003eNetWorthChart\u003c/code\u003e 畫三條線（淨值/流動/目標）、\u003ccode\u003eMilestoneTable\u003c/code\u003e 列年度目標與 On Track 橫幅、\u003ccode\u003eRetirePanel\u003c/code\u003e 調參與鎖定基準、\u003ccode\u003eWhatIfPanel\u003c/code\u003e 做提早/延後退休與一次性支出情境。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e6\u003c/span\u003e What-If 與一次性支出\u003c/h2\u003e\n  \u003cp\u003e\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e 提供三種情境：\u003c/p\u003e\n  \u003cul style=\"margin:6px 0 0 18px;font-size:13px;color:var(--ink2);line-height:1.75\"\u003e\n    \u003cli\u003e\u003cstrong\u003e提早/延後退休\u003c/strong\u003e：另選 \u003ccode\u003ealtAge\u003c/code\u003e 與 \u003ccode\u003ealtMonthly\u003c/code\u003e，分別重算 \u003ccode\u003ealtFire\u003c/code\u003e、\u003ccode\u003ealtNeedMonthly\u003c/code\u003e 與 \u003ccode\u003ealtMilestones\u003c/code\u003e，與基準並排比較。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e大型一次性支出\u003c/strong\u003e：輸入 \u003ccode\u003eoneOffAmount / oneOffYear\u003c/code\u003e，在 MilestoneTable 該年第 n 年的 target 上 \u003ccode\u003e−= amount\u003c/code\u003e（視覺扣除），觀察曲線受阻。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e蒙地卡羅\u003c/strong\u003e：選波動度（預設 15%），跑 1,000 條路徑得 P10/P50/P90 與 successRate。\u003c/li\u003e\n  \u003c/ul\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e7\u003c/span\u003e 建議與下一步\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\" style=\"border-color:var(--accent)\"\u003e\n      \u003cdiv class=\"cap\"\u003e維持 Fixed，勿回 Floating\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e你已處於固定基準的正確模式。切回 floating 會讓目標隨淨資產膨脹，失去衡量意義。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e考慮重錨定基準\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e基準仍在 2021 年的 41.9 萬，已與現況脫節。可按「\u003cstrong\u003e鎖定為基準\u003c/strong\u003e」將 2026-08-01 的 8,435,223 重設為新起點，年齡同步重設，讓未來 30 年軌跡更貼近現實。或用「以最早快照為基準」做對照。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e補齊參數\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003eDB 僅存 4 個欄位，其餘皆用預設。建議在 RetirePanel 明確填入：\u003ccode\u003eretireAge / monthlyNeed / monthlyInvest / preReturn / postReturn / withdrawalRate\u003c/code\u003e，避免日後預設異動造成誤判。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e改善快照記帳\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e將 \u003ccode\u003eotherAssets\u003c/code\u003e 拆回 \u003ccode\u003ecash / deposits / stocksValue / fundsValue / propertyValue\u003c/code\u003e，才能讓 liquidAssets 與資產負債結構分析生效，否則圖表流動線永遠為 0。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n  \u003cp style=\"font-size:12px;color:var(--ink2);line-height:1.6\"\u003e\n    技術參考：\u003ccode\u003eplugins/8268c53fd2ead0b31996e3cb/frontend/utils/calc.ts\u003c/code\u003e（totalAssets / netWorth / computeMilestonesFromBaseline / fireNumber / requiredMonthly / monteCarlo）、\u003ccode\u003efrontend/stores/assetTrendSectionConfigStore.ts\u003c/code\u003e、\u003ccode\u003eAssetTrendView.tsx:32-94\u003c/code\u003e、\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e、\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e、\u003ccode\u003eMilestoneTable.tsx\u003c/code\u003e。\u003cbr\u003e\n    資料來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（usn 12）與 \u003ccode\u003eASSET_SNAPSHOT\u003c/code\u003e 61 筆。報告產生時不修改任何 Vault 資料，僅讀取解析。\n  \u003c/p\u003e\n\u003c/div\u003e\n","content":"\u003cdiv class=\"doc\"\u003e\n  \n\n  \u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eFIRE 終點目標\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNT$ 3,641萬\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e55歲退休 · 月需5萬 · 通膨3% · 4%提領\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e基準起點\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNT$ 41.9萬\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e2021-07-01 @ 25歲 · 已鎖定 fixed\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e年化投入需求\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNT$ 35.2萬/年\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e≈ NT$ 29,300/月 · 以 7% 預期報酬推算\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e當前進度\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e大幅 On Track\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e8,435,223 vs 第5年固定目標約 2.1M\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心結論\u003c/span\u003e\u003cdiv class=\"txt\"\u003eAI 目標線 \u003cstrong\u003e不是\u003c/strong\u003e 跟著你最新淨資產重畫的，而是從「2021-07-01 那天的 41.9 萬」以 7% 預期報酬 + 每年固定投入 \u003cstrong\u003eNT$ 351,600\u003c/strong\u003e 複利長到 55 歲的等額年金軌跡。只要你現在的淨資產在軌跡上方，就是 \u003cspan class=\"badge ok\"\u003eOn Track\u003c/span\u003e；在下方就是 \u003cspan class=\"badge off\"\u003eOff Track\u003c/span\u003e。當前你已超前固定軌跡約 \u003cstrong\u003e630 萬\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e1\u003c/span\u003e 參數總表 — Vault 真實值 vs 預設值\u003c/h2\u003e\n  \u003cp\u003e來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（id: assettrend_section_config_6a61209a010ffe6f3268c5）與 \u003ccode\u003efrontend/schemas/assetTrendSectionConfigSchema.ts\u003c/code\u003e 預設。未在 DB 出現的欄位即沿用程式預設。\u003c/p\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e欄位 key\u003c/th\u003e\u003cth\u003e目前值\u003c/th\u003e\u003cth\u003e預設值\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e目前年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ecurrentAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e30\u003c/td\u003e\u003ctd\u003e計算 years = retireAge − currentAge 的起點\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003eretireAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e55 歲 \u003cspan style=\"color:var(--ink2)\"\u003e(DB未存·用預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e55\u003c/td\u003e\u003ctd\u003e里程碑年數 = 30 年（55−25）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後月需（現值）\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyNeed\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 50,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e50,000\u003c/td\u003e\u003ctd\u003e經通膨膨脹後除以提領率得 FIRE 目標\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e通膨率\u003c/td\u003e\u003ctd class=\"mono\"\u003einflationRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e3 %\u003c/td\u003e\u003ctd class=\"mono\"\u003e2.5 %\u003c/td\u003e\u003ctd\u003e你已改為 3%，高於預設 0.5pp\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休前報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epreReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 %\u003c/td\u003e\u003ctd\u003e複利與年金係數 r\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epostReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e目前僅作展示，里程碑計算未直接使用\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e每月可投入\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyInvest\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 20,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e20,000\u003c/td\u003e\u003ctd\u003eWhat-If / 蒙地卡羅輸入，固定軌跡用的是「反推的 requiredAnnual」\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e提領率\u003c/td\u003e\u003ctd class=\"mono\"\u003ewithdrawalRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e4% Rule 分母\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e目標模式\u003c/td\u003e\u003ctd class=\"mono\"\u003etargetMode\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"pill fixed\"\u003efixed 固定\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003efixed\u003c/td\u003e\u003ctd\u003e固定基準為推薦；floating 為移動靶\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準淨資產\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineNet\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 419,527\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003efixed 模式的起點淨值\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準日期\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineDate\u003c/td\u003e\u003ctd class=\"mono\"\u003e2021-07-01\u003c/td\u003e\u003ctd class=\"mono\"\u003e\"\"\u003c/td\u003e\u003ctd\u003e圖表 targetPoints 的錨定日\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003e里程碑 age = baselineAge + year\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示目標線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowTargetLine\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue\u003c/td\u003e\u003ctd\u003eNetWorthChart 是否畫 targetPoints\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示流動線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowLiquidLine\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd\u003eliquidAssets 線開關\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e時間粒度\u003c/td\u003e\u003ctd class=\"mono\"\u003etrendGranularity\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth\u003c/td\u003e\u003ctd\u003emonth / quarter / year 聚合\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e注意\u003c/span\u003e\u003cdiv class=\"txt\"\u003e你的 \u003ccode\u003ecurrentAge 25\u003c/code\u003e 與 \u003ccode\u003ebaselineAge 25\u003c/code\u003e 相同，代表基準鎖定當下即視為起點。若之後你在 UI 修改「目前年齡」，固定軌跡 \u003cstrong\u003e不會\u003c/strong\u003e 跟著平移——這正是 fixed 的設計目的。如需重錨定，請用「鎖定為基準」或「以最早快照為基準」。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e2\u003c/span\u003e 基準錨定 — Fixed vs Floating\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFIXED 固定基準（你目前） ✅\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 2021-07-01 · 41.9萬 @25歲\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestonesFromBaseline({baselineNet, baselineAge, ...})\u003c/code\u003e\u003cbr\u003e之後任何新快照的淨資產暴漲/暴跌，目標軌跡 \u003cstrong\u003e不動\u003c/strong\u003e。On/Off Track 才是動態的。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：\u003ccode\u003ebaselineDate\u003c/code\u003e → chart targetPoints 以此日逐年 +1 年推進\u003cbr\u003efallback：若 baseline 未設，暫用 \u003ccode\u003elatestNet\u003c/code\u003e / \u003ccode\u003ecurrentAge\u003c/code\u003e 避免舊用戶空白\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFLOATING 浮動（移動靶）\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 最新快照淨值 @ currentAge\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestones({currentNet:latestNet, currentAge, ...})\u003c/code\u003e\u003cbr\u003e每新增一筆快照就重算整條目標線 → 淨資產愈高，目標也被墊愈高，永遠追不上。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：最新 \u003ccode\u003esnapshotDate\u003c/code\u003e\u003cbr\u003eUI 切換：RetirePanel 的 Switch → \u003ccode\u003etargetMode: 'floating'\u003c/code\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e程式位置：\u003ccode\u003eAssetTrendView.tsx:32-53\u003c/code\u003e 依 \u003ccode\u003etargetMode\u003c/code\u003e 分流；\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e 提供「鎖定為基準 / 清除基準 / 以最早快照為基準」三個操作。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e3\u003c/span\u003e 核心演算 — 五條公式\u003c/h2\u003e\n  \u003ch3\u003e3-1 淨資產與流動資產\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003etotalAssets  = cash + deposits + stocksValue + fundsValue + propertyValue + otherAssets\ntotalLiabilities = mortgageBalance + creditLoanBalance + carLoanBalance + cardDebtBalance + otherLiabilities\nnetWorth     = totalAssets − totalLiabilities\nliquidAssets = cash + deposits + fundsValue + stocksValue   // 不含房產與 otherAssets\u003c/div\u003e\n  \u003cp\u003e來源 \u003ccode\u003eutils/calc.ts:3-10\u003c/code\u003e。你的快照採「精簡記帳」：全部金額塞在 \u003ccode\u003eotherAssets / otherLiabilities\u003c/code\u003e（2026-08-01：otherAssets 9,477,721、otherLiabilities 1,042,498 → netWorth 8,435,223），因此 \u003ccode\u003eliquidAssets\u003c/code\u003e 在此記帳法下為 0，會低估流動性。\u003c/p\u003e\n\n  \u003ch3\u003e3-2 FIRE 終點目標\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003efireNumber({ monthlyNeed, inflationRate, years, withdrawalRate })\n  needFuture = monthlyNeed × 12 × (1 + infl)^years\n  fireTarget = needFuture / wd        // wd = withdrawalRate / 100，預設 0.04\n\n// 以你當前參數：\n// years = 55−25 = 30，infl=3%，monthlyNeed=50,000，wd=4%\n// needFuture = 600,000 × 1.03^30 ≈ 600,000 × 2.42726 = 1,456,357\n// fireTarget ≈ 1,456,357 / 0.04 = 36,408,930\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:50-54\u003c/code\u003e。通膨用複利膨脹到退休那年的名目支出，再除以提領率。若把通膨改回預設 2.5%，FIRE 會降至約 3,140 萬；若退休延至 60 歲（years=35），FIRE 會升至約 4,220 萬。\u003c/p\u003e\n\n  \u003ch3\u003e3-3 固定基準里程碑（等額年金軌跡）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003ecomputeMilestonesFromBaseline({ baselineNet, baselineAge, retireAge, monthlyNeed, inflationRate, preReturn, withdrawalRate })\n  years = retireAge − baselineAge\n  fireTarget 如上\n  r = preReturn/100\n  if r≈0:  requiredAnnual = (fireTarget − baselineNet) / years\n  else:    fvBaseline = baselineNet × (1+r)^years\n           requiredAnnual = (fireTarget − fvBaseline) × r / ((1+r)^years − 1)   // 年金終值公式反推\n           if requiredAnnual \u0026lt; 0 → 0   // 已超額就不要求再投入\n  對 n=1..years:\n    if r≈0: target_n = baselineNet + requiredAnnual × n\n    else:   target_n = baselineNet×(1+r)^n + requiredAnnual × ((1+r)^n − 1)/r\n    推入 { year:n, age:baselineAge+n, target:round(target_n) }\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:22-48\u003c/code\u003e。關鍵：\u003cstrong\u003erequiredAnnual 是「為剛好在退休年碰到 FIRE」所需的每年固定投入\u003c/strong\u003e，由起點與終點反推，再用同一金額正向複利長出整條軌跡。你的參數下 \u003ccode\u003erequiredAnnual ≈ NT$ 351,600 /年\u003c/code\u003e（見下一節實算）。\u003c/p\u003e\n\n  \u003ch3\u003e3-4 每月投入缺口（requiredMonthly）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003erequiredMonthly({ currentNet, fireTarget, years, preReturn })\n  // 與上式同構，只是把 baselineNet 換成 currentNet，並除以 12：\n  annual = (fireTarget − currentNet×(1+r)^years) × r / ((1+r)^years − 1)\n  return max(0, annual/12)\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:56-65\u003c/code\u003e。WhatIfPanel 用它對比「基準 vs 情境」每月需投入。注意：它是「從現在起」的缺口；固定軌跡的是「從基準起」的 requiredAnnual，兩者不要混用。\u003c/p\u003e\n\n  \u003ch3\u003e3-5 蒙地卡羅（1,000 條路徑）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003emonteCarlo({ currentNet, monthlyInvest, years, meanReturn, volatility, fireTarget })\n  對 k=1..1000:\n    v = currentNet\n    對 y=1..years:\n      r_y = mean + vol × randn()   // randn = Box-Muller 常態亂數\n      v = v×(1+r_y) + monthlyInvest×12\n    finals.push(v)\n  排序後取 P10/P50/P90，successRate = finals≥fireTarget 的比例\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:67-87\u003c/code\u003e。輸入的 \u003ccode\u003evolatility\u003c/code\u003e 預設 UI 為 15%，可手動改。\u003ccode\u003emonthlyInvest\u003c/code\u003e 吃的是設定檔的每月可投入（預設 20,000），不是 requiredAnnual。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e4\u003c/span\u003e 實測數值 — 以你當前固定基準推算\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e輸入\u003c/div\u003e\n      \u003cdiv class=\"kv\" style=\"margin-top:6px\"\u003e\n        \u003cdt\u003ebaselineNet\u003c/dt\u003e\u003cdd\u003e419,527\u003c/dd\u003e\n        \u003cdt\u003ebaselineAge → retireAge\u003c/dt\u003e\u003cdd\u003e25 → 55（30年）\u003c/dd\u003e\n        \u003cdt\u003emonthlyNeed / infl / wd\u003c/dt\u003e\u003cdd\u003e50,000 / 3% / 4%\u003c/dd\u003e\n        \u003cdt\u003epreReturn r\u003c/dt\u003e\u003cdd\u003e7%\u003c/dd\u003e\n        \u003cdt\u003efireTarget\u003c/dt\u003e\u003cdd\u003e≈ 36,408,930\u003c/dd\u003e\n        \u003cdt\u003efvBaseline\u003c/dt\u003e\u003cdd\u003e419,527×1.07^30 ≈ 3,193,600\u003c/dd\u003e\n        \u003cdt\u003erequiredAnnual\u003c/dt\u003e\u003cdd\u003e\u003cstrong\u003e≈ 351,600 /年（29,300/月）\u003c/strong\u003e\u003c/dd\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e軌跡抽樣（四捨五入）\u003c/div\u003e\n      \u003ctable style=\"margin:6px 0 0\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003e年次\u003c/th\u003e\u003cth\u003e年齡\u003c/th\u003e\u003cth\u003e目標淨資產\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody\u003e\n          \u003ctr\u003e\u003ctd\u003e第 1 年\u003c/td\u003e\u003ctd\u003e26 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 800,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 5 年\u003c/td\u003e\u003ctd\u003e30 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 2,136,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 10 年\u003c/td\u003e\u003ctd\u003e35 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 4,654,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 20 年\u003c/td\u003e\u003ctd\u003e45 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 14,650,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 30 年\u003c/td\u003e\u003ctd\u003e55 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e36,408,930（=FIRE）\u003c/td\u003e\u003c/tr\u003e\n        \u003c/tbody\u003e\n      \u003c/table\u003e\n      \u003cdiv class=\"sub\"\u003e公式：target_n = 419,527×1.07^n + 351,600×((1.07^n−1)/0.07)\u003cbr\u003e完整 30 年明細見 MilestoneTable 元件。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e對照\u003c/span\u003e\u003cdiv class=\"txt\"\u003e若切成 \u003cspan class=\"pill float\"\u003efloating\u003c/span\u003e 以最新淨值 8,435,223 為起點重算：fvCurrent = 8,435,223×1.07^30 ≈ 64,211,600 已超過 FIRE，requiredAnnual 會被壓到 \u003cstrong\u003e0\u003c/strong\u003e，軌跡變成純 7% 複利（第1年 9,025,000），終點 6,421 萬遠高於 FIRE。這就是「移動靶」會讓目標虛胖的原因。\u003c/div\u003e\u003c/div\u003e\n  \u003ch3\u003e當前 On/Off Track 判定\u003c/h3\u003e\n  \u003cp\u003eMilestoneTable 以 \u003ccode\u003egap = currentNet − milestones[0].target\u003c/code\u003e 判斷。2026-08-01 的 \u003ccode\u003ecurrentNet 8,435,223\u003c/code\u003e 對比固定軌跡第 5 年目標約 213 萬，\u003cspan class=\"badge ok\"\u003eOn Track 超前約 630 萬\u003c/span\u003e。若對比 floating 第1年目標 902 萬，則仍超前但餘裕縮小——再次證明 fixed 才能真實反映超前幅度。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e5\u003c/span\u003e 圖表與資料流\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eCHART DATA\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e\u003ccode\u003eAssetTrendView.tsx:58-94\u003c/code\u003e\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e\u003cstrong\u003epoints\u003c/strong\u003e：按 \u003ccode\u003esnapshotDate\u003c/code\u003e 排序，每個粒度 bucket 取最後一筆的 \u003ccode\u003enetWorth\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eliquidPoints\u003c/strong\u003e：同上取 \u003ccode\u003eliquidAssets\u003c/code\u003e，僅當 \u003ccode\u003eshowLiquidLine\u003c/code\u003e 啟用才繪製\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003etargetPoints\u003c/strong\u003e：以 \u003ccode\u003eanchorDate\u003c/code\u003e（fixed 用 \u003ccode\u003ebaselineDate\u003c/code\u003e，floating 用最新快照日）逐年 +1 年，value 取對應 milestone.target\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003egranularity\u003c/strong\u003e：month 原樣 / quarter 壓至 Q 末月 / year 壓至 12-01\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eSNAPSHOT 快照\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e61 筆月快照（2021-07-01 → 2026-08-01）\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e欄位：cash / deposits / stocksValue / fundsValue / propertyValue / otherAssets / 五類負債 / note\u003c/li\u003e\n        \u003cli\u003e你採 \u003ccode\u003eotherAssets + otherLiabilities\u003c/code\u003e 精簡記帳，適合快速匯入但會使 liquidAssets 失真\u003c/li\u003e\n        \u003cli\u003eCSV 匯出/匯入：\u003ccode\u003eAssetTrendView.tsx:102-140\u003c/code\u003e，表頭含 totalAssets/totalLiabilities/netWorth/liquidAssets 衍生欄\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e元件對應：\u003ccode\u003eNetWorthChart\u003c/code\u003e 畫三條線（淨值/流動/目標）、\u003ccode\u003eMilestoneTable\u003c/code\u003e 列年度目標與 On Track 橫幅、\u003ccode\u003eRetirePanel\u003c/code\u003e 調參與鎖定基準、\u003ccode\u003eWhatIfPanel\u003c/code\u003e 做提早/延後退休與一次性支出情境。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e6\u003c/span\u003e What-If 與一次性支出\u003c/h2\u003e\n  \u003cp\u003e\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e 提供三種情境：\u003c/p\u003e\n  \u003cul style=\"margin:6px 0 0 18px;font-size:13px;color:var(--ink2);line-height:1.75\"\u003e\n    \u003cli\u003e\u003cstrong\u003e提早/延後退休\u003c/strong\u003e：另選 \u003ccode\u003ealtAge\u003c/code\u003e 與 \u003ccode\u003ealtMonthly\u003c/code\u003e，分別重算 \u003ccode\u003ealtFire\u003c/code\u003e、\u003ccode\u003ealtNeedMonthly\u003c/code\u003e 與 \u003ccode\u003ealtMilestones\u003c/code\u003e，與基準並排比較。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e大型一次性支出\u003c/strong\u003e：輸入 \u003ccode\u003eoneOffAmount / oneOffYear\u003c/code\u003e，在 MilestoneTable 該年第 n 年的 target 上 \u003ccode\u003e−= amount\u003c/code\u003e（視覺扣除），觀察曲線受阻。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e蒙地卡羅\u003c/strong\u003e：選波動度（預設 15%），跑 1,000 條路徑得 P10/P50/P90 與 successRate。\u003c/li\u003e\n  \u003c/ul\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e7\u003c/span\u003e 建議與下一步\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\" style=\"border-color:var(--accent)\"\u003e\n      \u003cdiv class=\"cap\"\u003e維持 Fixed，勿回 Floating\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e你已處於固定基準的正確模式。切回 floating 會讓目標隨淨資產膨脹，失去衡量意義。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e考慮重錨定基準\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e基準仍在 2021 年的 41.9 萬，已與現況脫節。可按「\u003cstrong\u003e鎖定為基準\u003c/strong\u003e」將 2026-08-01 的 8,435,223 重設為新起點，年齡同步重設，讓未來 30 年軌跡更貼近現實。或用「以最早快照為基準」做對照。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e補齊參數\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003eDB 僅存 4 個欄位，其餘皆用預設。建議在 RetirePanel 明確填入：\u003ccode\u003eretireAge / monthlyNeed / monthlyInvest / preReturn / postReturn / withdrawalRate\u003c/code\u003e，避免日後預設異動造成誤判。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e改善快照記帳\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e將 \u003ccode\u003eotherAssets\u003c/code\u003e 拆回 \u003ccode\u003ecash / deposits / stocksValue / fundsValue / propertyValue\u003c/code\u003e，才能讓 liquidAssets 與資產負債結構分析生效，否則圖表流動線永遠為 0。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n  \u003cp style=\"font-size:12px;color:var(--ink2);line-height:1.6\"\u003e\n    技術參考：\u003ccode\u003eplugins/8268c53fd2ead0b31996e3cb/frontend/utils/calc.ts\u003c/code\u003e（totalAssets / netWorth / computeMilestonesFromBaseline / fireNumber / requiredMonthly / monteCarlo）、\u003ccode\u003efrontend/stores/assetTrendSectionConfigStore.ts\u003c/code\u003e、\u003ccode\u003eAssetTrendView.tsx:32-94\u003c/code\u003e、\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e、\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e、\u003ccode\u003eMilestoneTable.tsx\u003c/code\u003e。\u003cbr\u003e\n    資料來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（usn 12）與 \u003ccode\u003eASSET_SNAPSHOT\u003c/code\u003e 61 筆。報告產生時不修改任何 Vault 資料，僅讀取解析。\n  \u003c/p\u003e\n\u003c/div\u003e","createdAt":1787242595934,"deletedAt":null,"displayMode":"artifact","id":"b7e530f7e24e6c0c694914ed","isNew":false,"isPublic":true,"itemType":"NOTE","name":"AI 目標淨資產邏輯參數報告 — 固定基準引擎全解析","parents":{"e001de0953b773e593ca3c8a":1787242595934},"preParentID":null,"updatedAt":1787242749660,"updatedBy":{"userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":4},"ownerName":"Kai","subtree":[{"artifactHtml":"\u003cstyle\u003e\n  :root{--paper:#F7F9F8;--ink:#11181A;--ink2:#546066;--accent:#0E6B6E;--accent2:#0F8A8E;--soft:#E3F1F1;--soft2:#EDF6F5;--hair:#D7E2E2;--warn:#C2571A;--mint:#12685E;--tangerine:#B85C2B;--card:#FFFFFF;--code:#0F2324;}\n  :root[data-theme=\"dark\"]{--paper:#0F1415;--ink:#E6ECEC;--ink2:#9AA8AA;--accent:#4ED3D8;--accent2:#6EE2E6;--soft:#143235;--soft2:#162E31;--hair:#26373A;--warn:#F0A674;--card:#171E1F;--code:#E6ECEC;}\n  .doc{background:var(--paper);color:var(--ink);padding:30px 32px;font:15px/1.75 -apple-system,BlinkMacSystemFont,\"PingFang TC\",\"Noto Sans TC\",sans-serif;max-width:980px;margin:0 auto;}\n  .eyebrow{font:700 11px ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.16em;color:var(--accent);text-transform:uppercase;}\n  h1{font-size:28px;line-height:1.22;letter-spacing:-.02em;margin:10px 0 8px;font-weight:800;}\n  .lede{color:var(--ink2);font-size:14px;margin:0 0 18px;max-width:68ch;line-height:1.6;}\n  .meta{font:11px ui-monospace,monospace;color:var(--ink2);display:flex;gap:12px;flex-wrap:wrap;margin-bottom:18px;}\n  .meta span{background:var(--soft);padding:4px 8px;border-radius:999px;}\n  .callout{display:flex;gap:12px;padding:14px 16px;background:var(--soft);border-radius:10px;margin:16px 0;border:1px solid var(--hair);}\n  .callout .tag{flex:none;font:800 11px ui-monospace;letter-spacing:.08em;color:var(--accent);padding-top:2px;}\n  .callout .txt{font-size:13.5px;color:var(--ink);line-height:1.65;}\n  .callout.warn{background:#FFF4EC;border-color:#E8C9B0;}\n  :root[data-theme=\"dark\"] .callout.warn{background:#2A1D14;border-color:#5A3A22;}\n  .callout.warn .tag{color:var(--warn);}\n  h2{font-size:18px;font-weight:800;margin:28px 0 10px;letter-spacing:-.015em;display:flex;align-items:center;gap:8px;}\n  h2 .num{font:700 11px ui-monospace;color:#fff;background:var(--accent);width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;}\n  h3{font-size:14px;font-weight:700;margin:18px 0 8px;color:var(--ink);}\n  p{color:var(--ink2);font-size:14px;line-height:1.75;margin:8px 0;max-width:72ch;}\n  p strong{color:var(--ink);}\n  .stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:14px 0 18px;}\n  .stat{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:12px 13px;}\n  .stat .k{font:600 11px ui-monospace;letter-spacing:.06em;color:var(--accent);}\n  .stat .v{font-size:20px;font-weight:800;margin-top:4px;letter-spacing:-.02em;}\n  .stat .n{font-size:11px;color:var(--ink2);margin-top:2px;line-height:1.4;}\n  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px;}\n  .card{background:var(--card);border:1px solid var(--hair);border-radius:10px;padding:14px 15px;}\n  .card .cap{font:700 11px ui-monospace;letter-spacing:.08em;color:var(--accent);margin-bottom:6px;}\n  .card .big{font-size:18px;font-weight:800;letter-spacing:-.015em;}\n  .card .sub{font-size:12px;color:var(--ink2);margin-top:3px;line-height:1.5;}\n  table{border-collapse:collapse;width:100%;font-size:13px;margin:10px 0;}\n  th,td{padding:9px 10px;border-bottom:1px solid var(--hair);text-align:left;}\n  th{font:700 11px ui-monospace;letter-spacing:.06em;color:var(--ink2);background:var(--soft2);white-space:nowrap;}\n  td{color:var(--ink);}\n  td.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;}\n  .pill{display:inline-block;font:700 10px ui-monospace;letter-spacing:.06em;padding:2px 7px;border-radius:999px;border:1px solid var(--hair);}\n  .pill.fixed{background:var(--soft);color:var(--accent);border-color:var(--accent);}\n  .pill.float{background:#FFF4EC;color:var(--warn);border-color:#E8C9B0;}\n  :root[data-theme=\"dark\"] .pill.float{background:#2A1D14;}\n  .code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;background:var(--code);color:#E6ECEC;padding:12px 14px;border-radius:10px;overflow-x:auto;line-height:1.6;white-space:pre;}\n  :root[data-theme=\"dark\"] .code{background:#0B1A1B;}\n  .kv{display:grid;grid-template-columns:160px 1fr;gap:6px 12px;font-size:13px;margin:8px 0;}\n  .kv dt{color:var(--ink2);font:600 11px ui-monospace;letter-spacing:.05em;padding-top:2px;}\n  .kv dd{margin:0;color:var(--ink);}\n  .hr{height:1px;background:var(--hair);margin:22px 0;}\n  .badge{font:700 10px ui-monospace;letter-spacing:.06em;padding:3px 7px;border-radius:6px;}\n  .badge.ok{background:#DFF5ED;color:#0B6B4F;border:1px solid #B8E6D6;}\n  .badge.off{background:#FDEAD7;color:#9A4A12;border:1px solid #E8C9B0;}\n  :root[data-theme=\"dark\"] .badge.ok{background:#12382E;color:#7FE4C2;}\n  :root[data-theme=\"dark\"] .badge.off{background:#3A2312;color:#F0A674;}\n  @media(max-width:720px){.doc{padding:20px 16px;}h1{font-size:22px;}.stats{grid-template-columns:1fr 1fr;}.grid2{grid-template-columns:1fr;}}\n\u003c/style\u003e\u003cdiv class=\"doc\"\u003e\n  \u003cheader\u003e\n    \u003cdiv class=\"eyebrow\"\u003eAssetTrend · AI 目標淨資產引擎 · 8268c53fd2ead0b31996e3cb\u003c/div\u003e\n    \u003ch1\u003eAI 目標淨資產邏輯參數報告 — 固定基準引擎全解析\u003c/h1\u003e\n    \u003cp class=\"lede\"\u003e本報告還原 Vault 當前「資產趨勢」插件中 AI 目標淨資產（Milestones / FIRE / Target Line）的完整參數、公式與資料流。核心採 \u003cstrong\u003e固定基準（Fixed Baseline）\u003c/strong\u003e 模型：起點鎖死在基準日，不隨後續快照浮動，解決「愈追目標愈高」的移動靶問題。\u003c/p\u003e\n    \u003cdiv class=\"meta\"\u003e\n      \u003cspan\u003e基準 2021-07-01 · NT$ 419,527 @ 25歲\u003c/span\u003e\n      \u003cspan\u003e最新 2026-08-01 · NT$ 8,435,223\u003c/span\u003e\n      \u003cspan\u003etargetMode = fixed\u003c/span\u003e\n      \u003cspan\u003e產生 2026-08-21\u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/header\u003e\n\n  \u003csection data-cube=\"stats\" class=\"stats\"\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003eFIRE 終點目標\u003c/div\u003e\u003cdiv class=\"v\"\u003eNT$ 3,641萬\u003c/div\u003e\u003cdiv class=\"n\"\u003e55歲退休 · 月需5萬 · 通膨3% · 4%提領\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e基準起點\u003c/div\u003e\u003cdiv class=\"v\"\u003eNT$ 41.9萬\u003c/div\u003e\u003cdiv class=\"n\"\u003e2021-07-01 @ 25歲 · 已鎖定 fixed\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e年化投入需求\u003c/div\u003e\u003cdiv class=\"v\"\u003eNT$ 35.2萬/年\u003c/div\u003e\u003cdiv class=\"n\"\u003e≈ NT$ 29,300/月 · 以 7% 預期報酬推算\u003c/div\u003e\u003c/div\u003e\n    \u003cdiv class=\"stat\"\u003e\u003cdiv class=\"k\"\u003e當前進度\u003c/div\u003e\u003cdiv class=\"v\" style=\"color:var(--mint)\"\u003e大幅 On Track\u003c/div\u003e\u003cdiv class=\"n\"\u003e8,435,223 vs 第5年固定目標約 2.1M\u003c/div\u003e\u003c/div\u003e\n  \u003c/section\u003e\n\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心結論\u003c/span\u003e\u003cdiv class=\"txt\"\u003eAI 目標線 \u003cstrong\u003e不是\u003c/strong\u003e 跟著你最新淨資產重畫的，而是從「2021-07-01 那天的 41.9 萬」以 7% 預期報酬 + 每年固定投入 \u003cstrong\u003eNT$ 351,600\u003c/strong\u003e 複利長到 55 歲的等額年金軌跡。只要你現在的淨資產在軌跡上方，就是 \u003cspan class=\"badge ok\"\u003eOn Track\u003c/span\u003e；在下方就是 \u003cspan class=\"badge off\"\u003eOff Track\u003c/span\u003e。當前你已超前固定軌跡約 \u003cstrong\u003e630 萬\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e1\u003c/span\u003e 參數總表 — Vault 真實值 vs 預設值\u003c/h2\u003e\n  \u003cp\u003e來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（id: assettrend_section_config_6a61209a010ffe6f3268c5）與 \u003ccode\u003efrontend/schemas/assetTrendSectionConfigSchema.ts\u003c/code\u003e 預設。未在 DB 出現的欄位即沿用程式預設。\u003c/p\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e欄位 key\u003c/th\u003e\u003cth\u003e目前值\u003c/th\u003e\u003cth\u003e預設值\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e目前年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ecurrentAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e30\u003c/td\u003e\u003ctd\u003e計算 years = retireAge − currentAge 的起點\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003eretireAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e55 歲 \u003cspan style=\"color:var(--ink2)\"\u003e(DB未存·用預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e55\u003c/td\u003e\u003ctd\u003e里程碑年數 = 30 年（55−25）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後月需（現值）\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyNeed\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 50,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e50,000\u003c/td\u003e\u003ctd\u003e經通膨膨脹後除以提領率得 FIRE 目標\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e通膨率\u003c/td\u003e\u003ctd class=\"mono\"\u003einflationRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e3 %\u003c/td\u003e\u003ctd class=\"mono\"\u003e2.5 %\u003c/td\u003e\u003ctd\u003e你已改為 3%，高於預設 0.5pp\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休前報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epreReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 %\u003c/td\u003e\u003ctd\u003e複利與年金係數 r\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epostReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e目前僅作展示，里程碑計算未直接使用\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e每月可投入\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyInvest\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 20,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e20,000\u003c/td\u003e\u003ctd\u003eWhat-If / 蒙地卡羅輸入，固定軌跡用的是「反推的 requiredAnnual」\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e提領率\u003c/td\u003e\u003ctd class=\"mono\"\u003ewithdrawalRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e4% Rule 分母\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e目標模式\u003c/td\u003e\u003ctd class=\"mono\"\u003etargetMode\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"pill fixed\"\u003efixed 固定\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003efixed\u003c/td\u003e\u003ctd\u003e固定基準為推薦；floating 為移動靶\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準淨資產\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineNet\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 419,527\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003efixed 模式的起點淨值\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準日期\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineDate\u003c/td\u003e\u003ctd class=\"mono\"\u003e2021-07-01\u003c/td\u003e\u003ctd class=\"mono\"\u003e\"\"\u003c/td\u003e\u003ctd\u003e圖表 targetPoints 的錨定日\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003e里程碑 age = baselineAge + year\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示目標線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowTargetLine\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue\u003c/td\u003e\u003ctd\u003eNetWorthChart 是否畫 targetPoints\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示流動線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowLiquidLine\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd\u003eliquidAssets 線開關\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e時間粒度\u003c/td\u003e\u003ctd class=\"mono\"\u003etrendGranularity\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth\u003c/td\u003e\u003ctd\u003emonth / quarter / year 聚合\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e注意\u003c/span\u003e\u003cdiv class=\"txt\"\u003e你的 \u003ccode\u003ecurrentAge 25\u003c/code\u003e 與 \u003ccode\u003ebaselineAge 25\u003c/code\u003e 相同，代表基準鎖定當下即視為起點。若之後你在 UI 修改「目前年齡」，固定軌跡 \u003cstrong\u003e不會\u003c/strong\u003e 跟著平移——這正是 fixed 的設計目的。如需重錨定，請用「鎖定為基準」或「以最早快照為基準」。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e2\u003c/span\u003e 基準錨定 — Fixed vs Floating\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFIXED 固定基準（你目前） ✅\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 2021-07-01 · 41.9萬 @25歲\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestonesFromBaseline({baselineNet, baselineAge, ...})\u003c/code\u003e\u003cbr\u003e之後任何新快照的淨資產暴漲/暴跌，目標軌跡 \u003cstrong\u003e不動\u003c/strong\u003e。On/Off Track 才是動態的。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：\u003ccode\u003ebaselineDate\u003c/code\u003e → chart targetPoints 以此日逐年 +1 年推進\u003cbr\u003efallback：若 baseline 未設，暫用 \u003ccode\u003elatestNet\u003c/code\u003e / \u003ccode\u003ecurrentAge\u003c/code\u003e 避免舊用戶空白\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFLOATING 浮動（移動靶）\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 最新快照淨值 @ currentAge\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestones({currentNet:latestNet, currentAge, ...})\u003c/code\u003e\u003cbr\u003e每新增一筆快照就重算整條目標線 → 淨資產愈高，目標也被墊愈高，永遠追不上。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：最新 \u003ccode\u003esnapshotDate\u003c/code\u003e\u003cbr\u003eUI 切換：RetirePanel 的 Switch → \u003ccode\u003etargetMode: 'floating'\u003c/code\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e程式位置：\u003ccode\u003eAssetTrendView.tsx:32-53\u003c/code\u003e 依 \u003ccode\u003etargetMode\u003c/code\u003e 分流；\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e 提供「鎖定為基準 / 清除基準 / 以最早快照為基準」三個操作。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e3\u003c/span\u003e 核心演算 — 五條公式\u003c/h2\u003e\n  \u003ch3\u003e3-1 淨資產與流動資產\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003etotalAssets  = cash + deposits + stocksValue + fundsValue + propertyValue + otherAssets\ntotalLiabilities = mortgageBalance + creditLoanBalance + carLoanBalance + cardDebtBalance + otherLiabilities\nnetWorth     = totalAssets − totalLiabilities\nliquidAssets = cash + deposits + fundsValue + stocksValue   // 不含房產與 otherAssets\u003c/div\u003e\n  \u003cp\u003e來源 \u003ccode\u003eutils/calc.ts:3-10\u003c/code\u003e。你的快照採「精簡記帳」：全部金額塞在 \u003ccode\u003eotherAssets / otherLiabilities\u003c/code\u003e（2026-08-01：otherAssets 9,477,721、otherLiabilities 1,042,498 → netWorth 8,435,223），因此 \u003ccode\u003eliquidAssets\u003c/code\u003e 在此記帳法下為 0，會低估流動性。\u003c/p\u003e\n\n  \u003ch3\u003e3-2 FIRE 終點目標\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003efireNumber({ monthlyNeed, inflationRate, years, withdrawalRate })\n  needFuture = monthlyNeed × 12 × (1 + infl)^years\n  fireTarget = needFuture / wd        // wd = withdrawalRate / 100，預設 0.04\n\n// 以你當前參數：\n// years = 55−25 = 30，infl=3%，monthlyNeed=50,000，wd=4%\n// needFuture = 600,000 × 1.03^30 ≈ 600,000 × 2.42726 = 1,456,357\n// fireTarget ≈ 1,456,357 / 0.04 = 36,408,930\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:50-54\u003c/code\u003e。通膨用複利膨脹到退休那年的名目支出，再除以提領率。若把通膨改回預設 2.5%，FIRE 會降至約 3,140 萬；若退休延至 60 歲（years=35），FIRE 會升至約 4,220 萬。\u003c/p\u003e\n\n  \u003ch3\u003e3-3 固定基準里程碑（等額年金軌跡）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003ecomputeMilestonesFromBaseline({ baselineNet, baselineAge, retireAge, monthlyNeed, inflationRate, preReturn, withdrawalRate })\n  years = retireAge − baselineAge\n  fireTarget 如上\n  r = preReturn/100\n  if r≈0:  requiredAnnual = (fireTarget − baselineNet) / years\n  else:    fvBaseline = baselineNet × (1+r)^years\n           requiredAnnual = (fireTarget − fvBaseline) × r / ((1+r)^years − 1)   // 年金終值公式反推\n           if requiredAnnual \u0026lt; 0 → 0   // 已超額就不要求再投入\n  對 n=1..years:\n    if r≈0: target_n = baselineNet + requiredAnnual × n\n    else:   target_n = baselineNet×(1+r)^n + requiredAnnual × ((1+r)^n − 1)/r\n    推入 { year:n, age:baselineAge+n, target:round(target_n) }\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:22-48\u003c/code\u003e。關鍵：\u003cstrong\u003erequiredAnnual 是「為剛好在退休年碰到 FIRE」所需的每年固定投入\u003c/strong\u003e，由起點與終點反推，再用同一金額正向複利長出整條軌跡。你的參數下 \u003ccode\u003erequiredAnnual ≈ NT$ 351,600 /年\u003c/code\u003e（見下一節實算）。\u003c/p\u003e\n\n  \u003ch3\u003e3-4 每月投入缺口（requiredMonthly）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003erequiredMonthly({ currentNet, fireTarget, years, preReturn })\n  // 與上式同構，只是把 baselineNet 換成 currentNet，並除以 12：\n  annual = (fireTarget − currentNet×(1+r)^years) × r / ((1+r)^years − 1)\n  return max(0, annual/12)\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:56-65\u003c/code\u003e。WhatIfPanel 用它對比「基準 vs 情境」每月需投入。注意：它是「從現在起」的缺口；固定軌跡的是「從基準起」的 requiredAnnual，兩者不要混用。\u003c/p\u003e\n\n  \u003ch3\u003e3-5 蒙地卡羅（1,000 條路徑）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003emonteCarlo({ currentNet, monthlyInvest, years, meanReturn, volatility, fireTarget })\n  對 k=1..1000:\n    v = currentNet\n    對 y=1..years:\n      r_y = mean + vol × randn()   // randn = Box-Muller 常態亂數\n      v = v×(1+r_y) + monthlyInvest×12\n    finals.push(v)\n  排序後取 P10/P50/P90，successRate = finals≥fireTarget 的比例\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:67-87\u003c/code\u003e。輸入的 \u003ccode\u003evolatility\u003c/code\u003e 預設 UI 為 15%，可手動改。\u003ccode\u003emonthlyInvest\u003c/code\u003e 吃的是設定檔的每月可投入（預設 20,000），不是 requiredAnnual。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e4\u003c/span\u003e 實測數值 — 以你當前固定基準推算\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e輸入\u003c/div\u003e\n      \u003cdiv class=\"kv\" style=\"margin-top:6px\"\u003e\n        \u003cdt\u003ebaselineNet\u003c/dt\u003e\u003cdd\u003e419,527\u003c/dd\u003e\n        \u003cdt\u003ebaselineAge → retireAge\u003c/dt\u003e\u003cdd\u003e25 → 55（30年）\u003c/dd\u003e\n        \u003cdt\u003emonthlyNeed / infl / wd\u003c/dt\u003e\u003cdd\u003e50,000 / 3% / 4%\u003c/dd\u003e\n        \u003cdt\u003epreReturn r\u003c/dt\u003e\u003cdd\u003e7%\u003c/dd\u003e\n        \u003cdt\u003efireTarget\u003c/dt\u003e\u003cdd\u003e≈ 36,408,930\u003c/dd\u003e\n        \u003cdt\u003efvBaseline\u003c/dt\u003e\u003cdd\u003e419,527×1.07^30 ≈ 3,193,600\u003c/dd\u003e\n        \u003cdt\u003erequiredAnnual\u003c/dt\u003e\u003cdd\u003e\u003cstrong\u003e≈ 351,600 /年（29,300/月）\u003c/strong\u003e\u003c/dd\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e軌跡抽樣（四捨五入）\u003c/div\u003e\n      \u003ctable style=\"margin:6px 0 0\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003e年次\u003c/th\u003e\u003cth\u003e年齡\u003c/th\u003e\u003cth\u003e目標淨資產\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody\u003e\n          \u003ctr\u003e\u003ctd\u003e第 1 年\u003c/td\u003e\u003ctd\u003e26 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 800,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 5 年\u003c/td\u003e\u003ctd\u003e30 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 2,136,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 10 年\u003c/td\u003e\u003ctd\u003e35 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 4,654,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 20 年\u003c/td\u003e\u003ctd\u003e45 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 14,650,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 30 年\u003c/td\u003e\u003ctd\u003e55 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e36,408,930（=FIRE）\u003c/td\u003e\u003c/tr\u003e\n        \u003c/tbody\u003e\n      \u003c/table\u003e\n      \u003cdiv class=\"sub\"\u003e公式：target_n = 419,527×1.07^n + 351,600×((1.07^n−1)/0.07)\u003cbr\u003e完整 30 年明細見 MilestoneTable 元件。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e對照\u003c/span\u003e\u003cdiv class=\"txt\"\u003e若切成 \u003cspan class=\"pill float\"\u003efloating\u003c/span\u003e 以最新淨值 8,435,223 為起點重算：fvCurrent = 8,435,223×1.07^30 ≈ 64,211,600 已超過 FIRE，requiredAnnual 會被壓到 \u003cstrong\u003e0\u003c/strong\u003e，軌跡變成純 7% 複利（第1年 9,025,000），終點 6,421 萬遠高於 FIRE。這就是「移動靶」會讓目標虛胖的原因。\u003c/div\u003e\u003c/div\u003e\n  \u003ch3\u003e當前 On/Off Track 判定\u003c/h3\u003e\n  \u003cp\u003eMilestoneTable 以 \u003ccode\u003egap = currentNet − milestones[0].target\u003c/code\u003e 判斷。2026-08-01 的 \u003ccode\u003ecurrentNet 8,435,223\u003c/code\u003e 對比固定軌跡第 5 年目標約 213 萬，\u003cspan class=\"badge ok\"\u003eOn Track 超前約 630 萬\u003c/span\u003e。若對比 floating 第1年目標 902 萬，則仍超前但餘裕縮小——再次證明 fixed 才能真實反映超前幅度。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e5\u003c/span\u003e 圖表與資料流\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eCHART DATA\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e\u003ccode\u003eAssetTrendView.tsx:58-94\u003c/code\u003e\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e\u003cstrong\u003epoints\u003c/strong\u003e：按 \u003ccode\u003esnapshotDate\u003c/code\u003e 排序，每個粒度 bucket 取最後一筆的 \u003ccode\u003enetWorth\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eliquidPoints\u003c/strong\u003e：同上取 \u003ccode\u003eliquidAssets\u003c/code\u003e，僅當 \u003ccode\u003eshowLiquidLine\u003c/code\u003e 啟用才繪製\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003etargetPoints\u003c/strong\u003e：以 \u003ccode\u003eanchorDate\u003c/code\u003e（fixed 用 \u003ccode\u003ebaselineDate\u003c/code\u003e，floating 用最新快照日）逐年 +1 年，value 取對應 milestone.target\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003egranularity\u003c/strong\u003e：month 原樣 / quarter 壓至 Q 末月 / year 壓至 12-01\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eSNAPSHOT 快照\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e61 筆月快照（2021-07-01 → 2026-08-01）\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e欄位：cash / deposits / stocksValue / fundsValue / propertyValue / otherAssets / 五類負債 / note\u003c/li\u003e\n        \u003cli\u003e你採 \u003ccode\u003eotherAssets + otherLiabilities\u003c/code\u003e 精簡記帳，適合快速匯入但會使 liquidAssets 失真\u003c/li\u003e\n        \u003cli\u003eCSV 匯出/匯入：\u003ccode\u003eAssetTrendView.tsx:102-140\u003c/code\u003e，表頭含 totalAssets/totalLiabilities/netWorth/liquidAssets 衍生欄\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e元件對應：\u003ccode\u003eNetWorthChart\u003c/code\u003e 畫三條線（淨值/流動/目標）、\u003ccode\u003eMilestoneTable\u003c/code\u003e 列年度目標與 On Track 橫幅、\u003ccode\u003eRetirePanel\u003c/code\u003e 調參與鎖定基準、\u003ccode\u003eWhatIfPanel\u003c/code\u003e 做提早/延後退休與一次性支出情境。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e6\u003c/span\u003e What-If 與一次性支出\u003c/h2\u003e\n  \u003cp\u003e\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e 提供三種情境：\u003c/p\u003e\n  \u003cul style=\"margin:6px 0 0 18px;font-size:13px;color:var(--ink2);line-height:1.75\"\u003e\n    \u003cli\u003e\u003cstrong\u003e提早/延後退休\u003c/strong\u003e：另選 \u003ccode\u003ealtAge\u003c/code\u003e 與 \u003ccode\u003ealtMonthly\u003c/code\u003e，分別重算 \u003ccode\u003ealtFire\u003c/code\u003e、\u003ccode\u003ealtNeedMonthly\u003c/code\u003e 與 \u003ccode\u003ealtMilestones\u003c/code\u003e，與基準並排比較。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e大型一次性支出\u003c/strong\u003e：輸入 \u003ccode\u003eoneOffAmount / oneOffYear\u003c/code\u003e，在 MilestoneTable 該年第 n 年的 target 上 \u003ccode\u003e−= amount\u003c/code\u003e（視覺扣除），觀察曲線受阻。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e蒙地卡羅\u003c/strong\u003e：選波動度（預設 15%），跑 1,000 條路徑得 P10/P50/P90 與 successRate。\u003c/li\u003e\n  \u003c/ul\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e7\u003c/span\u003e 建議與下一步\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\" style=\"border-color:var(--accent)\"\u003e\n      \u003cdiv class=\"cap\"\u003e維持 Fixed，勿回 Floating\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e你已處於固定基準的正確模式。切回 floating 會讓目標隨淨資產膨脹，失去衡量意義。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e考慮重錨定基準\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e基準仍在 2021 年的 41.9 萬，已與現況脫節。可按「\u003cstrong\u003e鎖定為基準\u003c/strong\u003e」將 2026-08-01 的 8,435,223 重設為新起點，年齡同步重設，讓未來 30 年軌跡更貼近現實。或用「以最早快照為基準」做對照。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e補齊參數\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003eDB 僅存 4 個欄位，其餘皆用預設。建議在 RetirePanel 明確填入：\u003ccode\u003eretireAge / monthlyNeed / monthlyInvest / preReturn / postReturn / withdrawalRate\u003c/code\u003e，避免日後預設異動造成誤判。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e改善快照記帳\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e將 \u003ccode\u003eotherAssets\u003c/code\u003e 拆回 \u003ccode\u003ecash / deposits / stocksValue / fundsValue / propertyValue\u003c/code\u003e，才能讓 liquidAssets 與資產負債結構分析生效，否則圖表流動線永遠為 0。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n  \u003cp style=\"font-size:12px;color:var(--ink2);line-height:1.6\"\u003e\n    技術參考：\u003ccode\u003eplugins/8268c53fd2ead0b31996e3cb/frontend/utils/calc.ts\u003c/code\u003e（totalAssets / netWorth / computeMilestonesFromBaseline / fireNumber / requiredMonthly / monteCarlo）、\u003ccode\u003efrontend/stores/assetTrendSectionConfigStore.ts\u003c/code\u003e、\u003ccode\u003eAssetTrendView.tsx:32-94\u003c/code\u003e、\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e、\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e、\u003ccode\u003eMilestoneTable.tsx\u003c/code\u003e。\u003cbr\u003e\n    資料來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（usn 12）與 \u003ccode\u003eASSET_SNAPSHOT\u003c/code\u003e 61 筆。報告產生時不修改任何 Vault 資料，僅讀取解析。\n  \u003c/p\u003e\n\u003c/div\u003e\n","content":"\u003cdiv class=\"doc\"\u003e\n  \n\n  \u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003eFIRE 終點目標\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNT$ 3,641萬\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e55歲退休 · 月需5萬 · 通膨3% · 4%提領\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e基準起點\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNT$ 41.9萬\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e2021-07-01 @ 25歲 · 已鎖定 fixed\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e年化投入需求\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003eNT$ 35.2萬/年\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e≈ NT$ 29,300/月 · 以 7% 預期報酬推算\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u003cp\u003e當前進度\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e大幅 On Track\u003c/p\u003e\u003c/td\u003e\u003ctd\u003e\u003cp\u003e8,435,223 vs 第5年固定目標約 2.1M\u003c/p\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e核心結論\u003c/span\u003e\u003cdiv class=\"txt\"\u003eAI 目標線 \u003cstrong\u003e不是\u003c/strong\u003e 跟著你最新淨資產重畫的，而是從「2021-07-01 那天的 41.9 萬」以 7% 預期報酬 + 每年固定投入 \u003cstrong\u003eNT$ 351,600\u003c/strong\u003e 複利長到 55 歲的等額年金軌跡。只要你現在的淨資產在軌跡上方，就是 \u003cspan class=\"badge ok\"\u003eOn Track\u003c/span\u003e；在下方就是 \u003cspan class=\"badge off\"\u003eOff Track\u003c/span\u003e。當前你已超前固定軌跡約 \u003cstrong\u003e630 萬\u003c/strong\u003e。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e1\u003c/span\u003e 參數總表 — Vault 真實值 vs 預設值\u003c/h2\u003e\n  \u003cp\u003e來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（id: assettrend_section_config_6a61209a010ffe6f3268c5）與 \u003ccode\u003efrontend/schemas/assetTrendSectionConfigSchema.ts\u003c/code\u003e 預設。未在 DB 出現的欄位即沿用程式預設。\u003c/p\u003e\n  \u003cdiv style=\"overflow-x:auto\"\u003e\n  \u003ctable\u003e\n    \u003cthead\u003e\u003ctr\u003e\u003cth\u003e參數\u003c/th\u003e\u003cth\u003e欄位 key\u003c/th\u003e\u003cth\u003e目前值\u003c/th\u003e\u003cth\u003e預設值\u003c/th\u003e\u003cth\u003e說明\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n    \u003ctbody\u003e\n      \u003ctr\u003e\u003ctd\u003e目前年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ecurrentAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e30\u003c/td\u003e\u003ctd\u003e計算 years = retireAge − currentAge 的起點\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003eretireAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e55 歲 \u003cspan style=\"color:var(--ink2)\"\u003e(DB未存·用預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e55\u003c/td\u003e\u003ctd\u003e里程碑年數 = 30 年（55−25）\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後月需（現值）\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyNeed\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 50,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e50,000\u003c/td\u003e\u003ctd\u003e經通膨膨脹後除以提領率得 FIRE 目標\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e通膨率\u003c/td\u003e\u003ctd class=\"mono\"\u003einflationRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e3 %\u003c/td\u003e\u003ctd class=\"mono\"\u003e2.5 %\u003c/td\u003e\u003ctd\u003e你已改為 3%，高於預設 0.5pp\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休前報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epreReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e7 %\u003c/td\u003e\u003ctd\u003e複利與年金係數 r\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e退休後報酬\u003c/td\u003e\u003ctd class=\"mono\"\u003epostReturn\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e目前僅作展示，里程碑計算未直接使用\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e每月可投入\u003c/td\u003e\u003ctd class=\"mono\"\u003emonthlyInvest\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 20,000 \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e20,000\u003c/td\u003e\u003ctd\u003eWhat-If / 蒙地卡羅輸入，固定軌跡用的是「反推的 requiredAnnual」\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e提領率\u003c/td\u003e\u003ctd class=\"mono\"\u003ewithdrawalRate\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 % \u003cspan style=\"color:var(--ink2)\"\u003e(預設)\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003e4 %\u003c/td\u003e\u003ctd\u003e4% Rule 分母\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e目標模式\u003c/td\u003e\u003ctd class=\"mono\"\u003etargetMode\u003c/td\u003e\u003ctd\u003e\u003cspan class=\"pill fixed\"\u003efixed 固定\u003c/span\u003e\u003c/td\u003e\u003ctd class=\"mono\"\u003efixed\u003c/td\u003e\u003ctd\u003e固定基準為推薦；floating 為移動靶\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準淨資產\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineNet\u003c/td\u003e\u003ctd class=\"mono\"\u003eNT$ 419,527\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003efixed 模式的起點淨值\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準日期\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineDate\u003c/td\u003e\u003ctd class=\"mono\"\u003e2021-07-01\u003c/td\u003e\u003ctd class=\"mono\"\u003e\"\"\u003c/td\u003e\u003ctd\u003e圖表 targetPoints 的錨定日\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e基準年齡\u003c/td\u003e\u003ctd class=\"mono\"\u003ebaselineAge\u003c/td\u003e\u003ctd class=\"mono\"\u003e25 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e0\u003c/td\u003e\u003ctd\u003e里程碑 age = baselineAge + year\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示目標線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowTargetLine\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003etrue\u003c/td\u003e\u003ctd\u003eNetWorthChart 是否畫 targetPoints\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e顯示流動線\u003c/td\u003e\u003ctd class=\"mono\"\u003eshowLiquidLine\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd class=\"mono\"\u003efalse\u003c/td\u003e\u003ctd\u003eliquidAssets 線開關\u003c/td\u003e\u003c/tr\u003e\n      \u003ctr\u003e\u003ctd\u003e時間粒度\u003c/td\u003e\u003ctd class=\"mono\"\u003etrendGranularity\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth (預設)\u003c/td\u003e\u003ctd class=\"mono\"\u003emonth\u003c/td\u003e\u003ctd\u003emonth / quarter / year 聚合\u003c/td\u003e\u003c/tr\u003e\n    \u003c/tbody\u003e\n  \u003c/table\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout warn\"\u003e\u003cspan class=\"tag\"\u003e注意\u003c/span\u003e\u003cdiv class=\"txt\"\u003e你的 \u003ccode\u003ecurrentAge 25\u003c/code\u003e 與 \u003ccode\u003ebaselineAge 25\u003c/code\u003e 相同，代表基準鎖定當下即視為起點。若之後你在 UI 修改「目前年齡」，固定軌跡 \u003cstrong\u003e不會\u003c/strong\u003e 跟著平移——這正是 fixed 的設計目的。如需重錨定，請用「鎖定為基準」或「以最早快照為基準」。\u003c/div\u003e\u003c/div\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e2\u003c/span\u003e 基準錨定 — Fixed vs Floating\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFIXED 固定基準（你目前） ✅\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 2021-07-01 · 41.9萬 @25歲\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestonesFromBaseline({baselineNet, baselineAge, ...})\u003c/code\u003e\u003cbr\u003e之後任何新快照的淨資產暴漲/暴跌，目標軌跡 \u003cstrong\u003e不動\u003c/strong\u003e。On/Off Track 才是動態的。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：\u003ccode\u003ebaselineDate\u003c/code\u003e → chart targetPoints 以此日逐年 +1 年推進\u003cbr\u003efallback：若 baseline 未設，暫用 \u003ccode\u003elatestNet\u003c/code\u003e / \u003ccode\u003ecurrentAge\u003c/code\u003e 避免舊用戶空白\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eFLOATING 浮動（移動靶）\u003c/div\u003e\n      \u003cdiv class=\"big\"\u003e起點 = 最新快照淨值 @ currentAge\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003emilestones = \u003ccode\u003ecomputeMilestones({currentNet:latestNet, currentAge, ...})\u003c/code\u003e\u003cbr\u003e每新增一筆快照就重算整條目標線 → 淨資產愈高，目標也被墊愈高，永遠追不上。\u003c/div\u003e\n      \u003cdiv style=\"margin-top:10px;font-size:12px;color:var(--ink2)\"\u003e錨定日：最新 \u003ccode\u003esnapshotDate\u003c/code\u003e\u003cbr\u003eUI 切換：RetirePanel 的 Switch → \u003ccode\u003etargetMode: 'floating'\u003c/code\u003e\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e程式位置：\u003ccode\u003eAssetTrendView.tsx:32-53\u003c/code\u003e 依 \u003ccode\u003etargetMode\u003c/code\u003e 分流；\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e 提供「鎖定為基準 / 清除基準 / 以最早快照為基準」三個操作。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e3\u003c/span\u003e 核心演算 — 五條公式\u003c/h2\u003e\n  \u003ch3\u003e3-1 淨資產與流動資產\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003etotalAssets  = cash + deposits + stocksValue + fundsValue + propertyValue + otherAssets\ntotalLiabilities = mortgageBalance + creditLoanBalance + carLoanBalance + cardDebtBalance + otherLiabilities\nnetWorth     = totalAssets − totalLiabilities\nliquidAssets = cash + deposits + fundsValue + stocksValue   // 不含房產與 otherAssets\u003c/div\u003e\n  \u003cp\u003e來源 \u003ccode\u003eutils/calc.ts:3-10\u003c/code\u003e。你的快照採「精簡記帳」：全部金額塞在 \u003ccode\u003eotherAssets / otherLiabilities\u003c/code\u003e（2026-08-01：otherAssets 9,477,721、otherLiabilities 1,042,498 → netWorth 8,435,223），因此 \u003ccode\u003eliquidAssets\u003c/code\u003e 在此記帳法下為 0，會低估流動性。\u003c/p\u003e\n\n  \u003ch3\u003e3-2 FIRE 終點目標\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003efireNumber({ monthlyNeed, inflationRate, years, withdrawalRate })\n  needFuture = monthlyNeed × 12 × (1 + infl)^years\n  fireTarget = needFuture / wd        // wd = withdrawalRate / 100，預設 0.04\n\n// 以你當前參數：\n// years = 55−25 = 30，infl=3%，monthlyNeed=50,000，wd=4%\n// needFuture = 600,000 × 1.03^30 ≈ 600,000 × 2.42726 = 1,456,357\n// fireTarget ≈ 1,456,357 / 0.04 = 36,408,930\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:50-54\u003c/code\u003e。通膨用複利膨脹到退休那年的名目支出，再除以提領率。若把通膨改回預設 2.5%，FIRE 會降至約 3,140 萬；若退休延至 60 歲（years=35），FIRE 會升至約 4,220 萬。\u003c/p\u003e\n\n  \u003ch3\u003e3-3 固定基準里程碑（等額年金軌跡）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003ecomputeMilestonesFromBaseline({ baselineNet, baselineAge, retireAge, monthlyNeed, inflationRate, preReturn, withdrawalRate })\n  years = retireAge − baselineAge\n  fireTarget 如上\n  r = preReturn/100\n  if r≈0:  requiredAnnual = (fireTarget − baselineNet) / years\n  else:    fvBaseline = baselineNet × (1+r)^years\n           requiredAnnual = (fireTarget − fvBaseline) × r / ((1+r)^years − 1)   // 年金終值公式反推\n           if requiredAnnual \u0026lt; 0 → 0   // 已超額就不要求再投入\n  對 n=1..years:\n    if r≈0: target_n = baselineNet + requiredAnnual × n\n    else:   target_n = baselineNet×(1+r)^n + requiredAnnual × ((1+r)^n − 1)/r\n    推入 { year:n, age:baselineAge+n, target:round(target_n) }\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:22-48\u003c/code\u003e。關鍵：\u003cstrong\u003erequiredAnnual 是「為剛好在退休年碰到 FIRE」所需的每年固定投入\u003c/strong\u003e，由起點與終點反推，再用同一金額正向複利長出整條軌跡。你的參數下 \u003ccode\u003erequiredAnnual ≈ NT$ 351,600 /年\u003c/code\u003e（見下一節實算）。\u003c/p\u003e\n\n  \u003ch3\u003e3-4 每月投入缺口（requiredMonthly）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003erequiredMonthly({ currentNet, fireTarget, years, preReturn })\n  // 與上式同構，只是把 baselineNet 換成 currentNet，並除以 12：\n  annual = (fireTarget − currentNet×(1+r)^years) × r / ((1+r)^years − 1)\n  return max(0, annual/12)\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:56-65\u003c/code\u003e。WhatIfPanel 用它對比「基準 vs 情境」每月需投入。注意：它是「從現在起」的缺口；固定軌跡的是「從基準起」的 requiredAnnual，兩者不要混用。\u003c/p\u003e\n\n  \u003ch3\u003e3-5 蒙地卡羅（1,000 條路徑）\u003c/h3\u003e\n  \u003cdiv class=\"code\"\u003emonteCarlo({ currentNet, monthlyInvest, years, meanReturn, volatility, fireTarget })\n  對 k=1..1000:\n    v = currentNet\n    對 y=1..years:\n      r_y = mean + vol × randn()   // randn = Box-Muller 常態亂數\n      v = v×(1+r_y) + monthlyInvest×12\n    finals.push(v)\n  排序後取 P10/P50/P90，successRate = finals≥fireTarget 的比例\u003c/div\u003e\n  \u003cp\u003e\u003ccode\u003ecalc.ts:67-87\u003c/code\u003e。輸入的 \u003ccode\u003evolatility\u003c/code\u003e 預設 UI 為 15%，可手動改。\u003ccode\u003emonthlyInvest\u003c/code\u003e 吃的是設定檔的每月可投入（預設 20,000），不是 requiredAnnual。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e4\u003c/span\u003e 實測數值 — 以你當前固定基準推算\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e輸入\u003c/div\u003e\n      \u003cdiv class=\"kv\" style=\"margin-top:6px\"\u003e\n        \u003cdt\u003ebaselineNet\u003c/dt\u003e\u003cdd\u003e419,527\u003c/dd\u003e\n        \u003cdt\u003ebaselineAge → retireAge\u003c/dt\u003e\u003cdd\u003e25 → 55（30年）\u003c/dd\u003e\n        \u003cdt\u003emonthlyNeed / infl / wd\u003c/dt\u003e\u003cdd\u003e50,000 / 3% / 4%\u003c/dd\u003e\n        \u003cdt\u003epreReturn r\u003c/dt\u003e\u003cdd\u003e7%\u003c/dd\u003e\n        \u003cdt\u003efireTarget\u003c/dt\u003e\u003cdd\u003e≈ 36,408,930\u003c/dd\u003e\n        \u003cdt\u003efvBaseline\u003c/dt\u003e\u003cdd\u003e419,527×1.07^30 ≈ 3,193,600\u003c/dd\u003e\n        \u003cdt\u003erequiredAnnual\u003c/dt\u003e\u003cdd\u003e\u003cstrong\u003e≈ 351,600 /年（29,300/月）\u003c/strong\u003e\u003c/dd\u003e\n      \u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e軌跡抽樣（四捨五入）\u003c/div\u003e\n      \u003ctable style=\"margin:6px 0 0\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\u003cth\u003e年次\u003c/th\u003e\u003cth\u003e年齡\u003c/th\u003e\u003cth\u003e目標淨資產\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\n        \u003ctbody\u003e\n          \u003ctr\u003e\u003ctd\u003e第 1 年\u003c/td\u003e\u003ctd\u003e26 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 800,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 5 年\u003c/td\u003e\u003ctd\u003e30 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 2,136,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 10 年\u003c/td\u003e\u003ctd\u003e35 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 4,654,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 20 年\u003c/td\u003e\u003ctd\u003e45 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e~ 14,650,000\u003c/td\u003e\u003c/tr\u003e\n          \u003ctr\u003e\u003ctd\u003e第 30 年\u003c/td\u003e\u003ctd\u003e55 歲\u003c/td\u003e\u003ctd class=\"mono\"\u003e36,408,930（=FIRE）\u003c/td\u003e\u003c/tr\u003e\n        \u003c/tbody\u003e\n      \u003c/table\u003e\n      \u003cdiv class=\"sub\"\u003e公式：target_n = 419,527×1.07^n + 351,600×((1.07^n−1)/0.07)\u003cbr\u003e完整 30 年明細見 MilestoneTable 元件。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cdiv class=\"callout\"\u003e\u003cspan class=\"tag\"\u003e對照\u003c/span\u003e\u003cdiv class=\"txt\"\u003e若切成 \u003cspan class=\"pill float\"\u003efloating\u003c/span\u003e 以最新淨值 8,435,223 為起點重算：fvCurrent = 8,435,223×1.07^30 ≈ 64,211,600 已超過 FIRE，requiredAnnual 會被壓到 \u003cstrong\u003e0\u003c/strong\u003e，軌跡變成純 7% 複利（第1年 9,025,000），終點 6,421 萬遠高於 FIRE。這就是「移動靶」會讓目標虛胖的原因。\u003c/div\u003e\u003c/div\u003e\n  \u003ch3\u003e當前 On/Off Track 判定\u003c/h3\u003e\n  \u003cp\u003eMilestoneTable 以 \u003ccode\u003egap = currentNet − milestones[0].target\u003c/code\u003e 判斷。2026-08-01 的 \u003ccode\u003ecurrentNet 8,435,223\u003c/code\u003e 對比固定軌跡第 5 年目標約 213 萬，\u003cspan class=\"badge ok\"\u003eOn Track 超前約 630 萬\u003c/span\u003e。若對比 floating 第1年目標 902 萬，則仍超前但餘裕縮小——再次證明 fixed 才能真實反映超前幅度。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e5\u003c/span\u003e 圖表與資料流\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eCHART DATA\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e\u003ccode\u003eAssetTrendView.tsx:58-94\u003c/code\u003e\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e\u003cstrong\u003epoints\u003c/strong\u003e：按 \u003ccode\u003esnapshotDate\u003c/code\u003e 排序，每個粒度 bucket 取最後一筆的 \u003ccode\u003enetWorth\u003c/code\u003e\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003eliquidPoints\u003c/strong\u003e：同上取 \u003ccode\u003eliquidAssets\u003c/code\u003e，僅當 \u003ccode\u003eshowLiquidLine\u003c/code\u003e 啟用才繪製\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003etargetPoints\u003c/strong\u003e：以 \u003ccode\u003eanchorDate\u003c/code\u003e（fixed 用 \u003ccode\u003ebaselineDate\u003c/code\u003e，floating 用最新快照日）逐年 +1 年，value 取對應 milestone.target\u003c/li\u003e\n        \u003cli\u003e\u003cstrong\u003egranularity\u003c/strong\u003e：month 原樣 / quarter 壓至 Q 末月 / year 壓至 12-01\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003eSNAPSHOT 快照\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e61 筆月快照（2021-07-01 → 2026-08-01）\u003c/div\u003e\n      \u003cul style=\"margin:8px 0 0 16px;font-size:13px;color:var(--ink2);line-height:1.7\"\u003e\n        \u003cli\u003e欄位：cash / deposits / stocksValue / fundsValue / propertyValue / otherAssets / 五類負債 / note\u003c/li\u003e\n        \u003cli\u003e你採 \u003ccode\u003eotherAssets + otherLiabilities\u003c/code\u003e 精簡記帳，適合快速匯入但會使 liquidAssets 失真\u003c/li\u003e\n        \u003cli\u003eCSV 匯出/匯入：\u003ccode\u003eAssetTrendView.tsx:102-140\u003c/code\u003e，表頭含 totalAssets/totalLiabilities/netWorth/liquidAssets 衍生欄\u003c/li\u003e\n      \u003c/ul\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n  \u003cp\u003e元件對應：\u003ccode\u003eNetWorthChart\u003c/code\u003e 畫三條線（淨值/流動/目標）、\u003ccode\u003eMilestoneTable\u003c/code\u003e 列年度目標與 On Track 橫幅、\u003ccode\u003eRetirePanel\u003c/code\u003e 調參與鎖定基準、\u003ccode\u003eWhatIfPanel\u003c/code\u003e 做提早/延後退休與一次性支出情境。\u003c/p\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e6\u003c/span\u003e What-If 與一次性支出\u003c/h2\u003e\n  \u003cp\u003e\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e 提供三種情境：\u003c/p\u003e\n  \u003cul style=\"margin:6px 0 0 18px;font-size:13px;color:var(--ink2);line-height:1.75\"\u003e\n    \u003cli\u003e\u003cstrong\u003e提早/延後退休\u003c/strong\u003e：另選 \u003ccode\u003ealtAge\u003c/code\u003e 與 \u003ccode\u003ealtMonthly\u003c/code\u003e，分別重算 \u003ccode\u003ealtFire\u003c/code\u003e、\u003ccode\u003ealtNeedMonthly\u003c/code\u003e 與 \u003ccode\u003ealtMilestones\u003c/code\u003e，與基準並排比較。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e大型一次性支出\u003c/strong\u003e：輸入 \u003ccode\u003eoneOffAmount / oneOffYear\u003c/code\u003e，在 MilestoneTable 該年第 n 年的 target 上 \u003ccode\u003e−= amount\u003c/code\u003e（視覺扣除），觀察曲線受阻。\u003c/li\u003e\n    \u003cli\u003e\u003cstrong\u003e蒙地卡羅\u003c/strong\u003e：選波動度（預設 15%），跑 1,000 條路徑得 P10/P50/P90 與 successRate。\u003c/li\u003e\n  \u003c/ul\u003e\n\n  \u003ch2\u003e\u003cspan class=\"num\"\u003e7\u003c/span\u003e 建議與下一步\u003c/h2\u003e\n  \u003cdiv class=\"grid2\"\u003e\n    \u003cdiv class=\"card\" style=\"border-color:var(--accent)\"\u003e\n      \u003cdiv class=\"cap\"\u003e維持 Fixed，勿回 Floating\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e你已處於固定基準的正確模式。切回 floating 會讓目標隨淨資產膨脹，失去衡量意義。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e考慮重錨定基準\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e基準仍在 2021 年的 41.9 萬，已與現況脫節。可按「\u003cstrong\u003e鎖定為基準\u003c/strong\u003e」將 2026-08-01 的 8,435,223 重設為新起點，年齡同步重設，讓未來 30 年軌跡更貼近現實。或用「以最早快照為基準」做對照。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e補齊參數\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003eDB 僅存 4 個欄位，其餘皆用預設。建議在 RetirePanel 明確填入：\u003ccode\u003eretireAge / monthlyNeed / monthlyInvest / preReturn / postReturn / withdrawalRate\u003c/code\u003e，避免日後預設異動造成誤判。\u003c/div\u003e\n    \u003c/div\u003e\n    \u003cdiv class=\"card\"\u003e\n      \u003cdiv class=\"cap\"\u003e改善快照記帳\u003c/div\u003e\n      \u003cdiv class=\"sub\"\u003e將 \u003ccode\u003eotherAssets\u003c/code\u003e 拆回 \u003ccode\u003ecash / deposits / stocksValue / fundsValue / propertyValue\u003c/code\u003e，才能讓 liquidAssets 與資產負債結構分析生效，否則圖表流動線永遠為 0。\u003c/div\u003e\n    \u003c/div\u003e\n  \u003c/div\u003e\n\n  \u003cdiv class=\"hr\"\u003e\u003c/div\u003e\n  \u003cp style=\"font-size:12px;color:var(--ink2);line-height:1.6\"\u003e\n    技術參考：\u003ccode\u003eplugins/8268c53fd2ead0b31996e3cb/frontend/utils/calc.ts\u003c/code\u003e（totalAssets / netWorth / computeMilestonesFromBaseline / fireNumber / requiredMonthly / monteCarlo）、\u003ccode\u003efrontend/stores/assetTrendSectionConfigStore.ts\u003c/code\u003e、\u003ccode\u003eAssetTrendView.tsx:32-94\u003c/code\u003e、\u003ccode\u003eRetirePanel.tsx:68-131\u003c/code\u003e、\u003ccode\u003eWhatIfPanel.tsx\u003c/code\u003e、\u003ccode\u003eMilestoneTable.tsx\u003c/code\u003e。\u003cbr\u003e\n    資料來源：\u003ccode\u003eassetTrend/ASSETTREND_SECTION_CONFIG\u003c/code\u003e（usn 12）與 \u003ccode\u003eASSET_SNAPSHOT\u003c/code\u003e 61 筆。報告產生時不修改任何 Vault 資料，僅讀取解析。\n  \u003c/p\u003e\n\u003c/div\u003e","createdAt":1787242595934,"deletedAt":null,"displayMode":"artifact","id":"b7e530f7e24e6c0c694914ed","isNew":false,"isPublic":true,"itemType":"NOTE","name":"AI 目標淨資產邏輯參數報告 — 固定基準引擎全解析","parents":{"e001de0953b773e593ca3c8a":1787242595934},"preParentID":null,"updatedAt":1787242749660,"updatedBy":{"userId":"6a61209a010ffe6f3268c5","userName":"Kai"},"version":4}]}