RCF-009 — 財務系統架構:混合模式(方案 γ)
類型:系統架構 日期:2026-04-24 觸發條件:條件 5 — 影響 2+ 個技術系統(預約 SYS-04 + 儀表板 SYS-07 + 財務部) 相關文件:
finance/CLAUDE.mdfinance/monthly-report.mdfinance/daily-revenue.json(新)finance/external-revenue.json(新)C:\Users\USER\Desktop\CLAUDE寫工具\給別人\預約系統\server.jsC:\Users\USER\Desktop\CLAUDE寫工具\hq-dashboard\app\page.tsx.github/workflows/daily-revenue-sync.yml(新,Phase 3).github/workflows/monthly-summary.yml(新,Phase 5)dev/tasks.md(L395 重組、L400 GAS→GitHub Actions)
問題背景
財務資料目前狀態:
finance/monthly-report.md月底手動填入,缺乏日度可追蹤性- 儀表板
parseFinanceReport只 regex parse 三個欄位(月收入/月支出/月淨利),缺乏「未收款」「趨勢圖」呈現 - 預約系統
/api/stats僅回傳筆數(total/thisWeek/thisMonth),無金額 - 系統外收入(企業包案、校園講座、電子書銷售)無統一入口
- 支出清單未含 Tim 實際使用的 Google One AI Premium、Claude Code 訂閱
- LINE@ 月費自動填入子目標已失效(Tim 已於 2026-04-22 確認免費方案 NT$0)
2026-04-24 Tim 指示「財務系統架構規劃」後,經四輪 IAUD + 五維度自查,找出並補完 8 項缺陷(含 1 項架構盲點「實際收款制下 Phase 2 是否必要」),最終 Tim 選擇「保留原方案(理由:未來 SaaS 擴張)」。
考慮過的方案
| 方案 | 描述 | 優點 | 缺點 | 採用? |
|---|---|---|---|---|
| α:擴展預約系統 | 把財務邏輯塞進預約系統(收入/支出/未收款) | 單一資料源 | ❌ SaaS 多租戶:改代碼影響姐姐-01 等客戶實例;違反單一職責;系統外收入無法納入 | ❌ 未採用 |
| β:完全獨立財務系統 | 新建 finance service + DB + 部署 | 最乾淨架構;擴展性最好 | ❌ 對 Tim 單人規模過度工程;新增平台維護成本 | ❌ 未採用 |
| γ:混合架構(tzlth-hq repo 集中) | 財務資料集中於 tzlth-hq/finance/,預約系統 API 輕量擴展(新增端點不改既有),GitHub Actions 自動化 | ✅ 職責分離 + 不過度工程;對 SaaS 零風險;Claude 主場操作 | 資料在 GitHub(Tim 單人 OK,大規模 SaaS 客戶不適用) | ✅ 採用 |
最終決策
採方案 γ:混合架構,5 Phase 執行。
Tim 於第四輪追問後明確選「保留原方案」,理由為「未來 SaaS 客戶擴張要用 Phase 2 daily-revenue API 作為基礎建設」。
架構圖
系統內收入源 系統外收入源
│ │
▼ ▼
預約 MongoDB(booking.price) Tim 手動填入
│ │
│ [GitHub Actions 每日 01:00 cron] │
│ 抓昨日已確認預約 + 金額 │
▼ ▼
finance/YYYY-MM-daily.json finance/external-revenue.json
│ │
└────┬───────────┘
▼
finance/monthly-report.md(月底 GitHub Actions 匯總)
│
▼
儀表板 SYS-07 財務區塊
(月收入/月支出/月淨利/未收款/6個月趨勢圖)
收入認列制:實際收款制
- 沿用既有諮詢後 SOP:Tim 說「確認存入」→ Claude 寫入
- GitHub Actions 從預約系統拉「可匹配筆數」,金額由 Tim 確認觸發寫入
- 與
finance/CLAUDE.mdStep 2「Tim 確認才寫 monthly-report.md」完全對齊
對外展示策略:全透明 + 呈現模式開關
- 儀表板財務區塊對外時 (a) 全透明
- 內建「呈現模式開關」:原值 / 四捨五入到千元 / 隱藏未收款 / 顯示累計淨利(平滑當月波動)
- 隱性風險(商業/隱私/公關)由 Tim 承擔並可動態調整
支出範圍擴充(Tim Q4 選 A+B+C + Q6 填 0 占位)
- Google One AI Premium:NT$0(試用至 2026-10-31)
- Anthropic Claude Code Max 5x:$100 USD/月 ≈ NT$3,200(2026-04-04 起按月付)
- 不規則支出:CDA 年費 / 書籍 / 認證更新 / 課程(發生時填入)
- LINE@ 月費:NT$0(免費方案占位,未來升級自動顯示)
Phase 2 多 tenant 預留設計
verifyServiceTokenmiddleware 採白名單 JSON 結構({"tim-self": "xxx", "sister-01": "yyy"}),未來加 token 零改 middleware
影響範圍
| 影響類型 | 具體項目 |
|---|---|
| 新增文件 | finance/daily-revenue.json schema 空殼 / finance/external-revenue.json schema 空殼 / .github/workflows/daily-revenue-sync.yml(Phase 3)/ .github/workflows/monthly-summary.yml(Phase 5) |
| 修改文件 | finance/monthly-report.md(2026-04 支出新增 Claude Code NT$3,200 + Google One NT$0 試用 + LINE@ NT$0 占位,合計 NT$345→NT$3,545)/ finance/CLAUDE.md(納入新架構說明)/ dev/tasks.md L395 重組 + L400 改 GitHub Actions + 新增 P1 Google One 2026-10-24 提醒 + Phase 2-5 子任務 / hr/inventory.json(SYS-04/SYS-07 pending_tasks 更新) |
| 修改代碼(Phase 2) | 預約系統 server.js 新增 /api/admin/daily-revenue 端點 + verifyServiceToken middleware(獨立於 verifyAdmin,cookie 機制不動,零影響其他客戶) |
| 修改代碼(Phase 4) | 儀表板 hq-dashboard/app/page.tsx 新增未收款 parser + 趨勢圖預留 + 對外呈現模式開關 |
| 觸發部門同步 | finance/CLAUDE.md(新增架構章節) |
| 影響的 SKILL | 無(諮詢後 SOP 流程不變,僅底層資料結構擴充) |
驗證方式
- Phase 1 完成驗證:本 RCF + daily-revenue.json / external-revenue.json 存在;monthly-report.md 2026-04 支出 = NT$3,545;tasks.md P1 有 2026-10-24 Google One 提醒;git commit + push 成功
- Phase 2 完成驗證:預約系統
/api/admin/daily-revenue端點可用,用 Bearer token 可通過verifyServiceToken;/api/stats原 cookie auth 不變;姐姐-01 等客戶實例功能完全未受影響(外稽) - Phase 3 完成驗證:
.github/workflows/daily-revenue-sync.yml首次執行後finance/2026-04-daily.json有資料;失敗時 audit-log.md 有記錄 - Phase 4 完成驗證:儀表板部署後財務區塊顯示未收款 + 呈現模式可切換;build 通過 +
npx vercel --prod部署 - Phase 5 完成驗證:2026-05-01 02:00 GitHub Actions 首次觸發,monthly-report.md 自動補齊 2026-04 收入匯總
歷史脈絡
- 2026-04-24 Session 21:Tim 指示「財務系統架構規劃」,經四輪 IAUD + 五維度完整自查
- 7 項缺陷 + 1 項架構盲點全部補完
- 4 個 Tim 關鍵決策:實際收款制 / Google One 試用到 2026-10-31 / Claude Code 2026-04-04 起 $100/月 / 對外全透明
- 第三輪揭露「實際收款制下 Phase 2 非必要」,第四輪 Tim 決策「保留原方案(未來 SaaS 擴張基礎)」
- 對應 IMP-038(收斂判斷)、IMP-040(事實時效)、RCF-004(IAUD)、RCF-006(五維度)
相關 IMP / RCF
- RCF-004:IAUD 雙層稽核(本次執行完整流程)
- RCF-006:五維度執行標準(本次 Q7-Q11 全部書面自答)
- IMP-038:收斂判斷(第二輪後啟動)
- IMP-040:事實時效(Claude Code 政策 2026-04-21 變動已 WebSearch 驗證)
- IMP-042:Claude 執行 DEV 工作(Phase 2-5 Claude 主力)
- IMP-043:Tim 操作手冊用 Word(Phase 3 Tim 若需設 env var,提供 Word 操作手冊)