# fintrack 現況（節錄）

> 這份文件是接手者（人或 AI agent）的長期記憶：
> **現在是什麼狀態、做過什麼、還沒做什麼**。
> 每次做完一段工作就更新它。
>
> - 規範／原則 → `DESIGN.md`（憲法，衝突時以它為準；修它要在 `DESIGN-CHANGELOG.md` 留紀錄）
> - 各機構格式與限制 → `docs/sources/{institution_id}.md`
> - **這份文件只記狀態，不記原則**。原則要寫進 DESIGN.md。

> **歷史在 `STATUS-ARCHIVE.md`。** 這份只留「現在是什麼狀態、還沒做什麼」；
> 已完成事項的來龍去脈（做了什麼、為什麼那樣做、踩到什麼坑）搬去 archive，
> 需要考古時才翻。分檔的理由：這份文件是每個 session 的必讀，
> 長到 124 KB 之後，讀它本身就變成成本（實測後拆檔）。

> 去個資版說明：原檔約 30 KB，這裡只取開頭與有代表性的幾段；機構改成代號、數字全部拿掉或改成示意。

最後更新：<日期>（**workspace 遷移整理**：STATUS 瘦身——「一句話現況」長敘事、已結案與過期項搬 STATUS-ARCHIVE，機構格式坑搬各自 `docs/sources/`）

---

## 最近做完的事

完整紀錄在 `STATUS-ARCHIVE.md`，這裡只列最近一輪：

- **workspace 遷移整理：STATUS 瘦身、AGENTS 瘦身、舊 Claude 記憶併入文件**（<日期>，使用者核准對照表）：
  「一句話現況」長敘事、「未完成」裡已結案或過期的搬 STATUS-ARCHIVE「<日期> workspace 遷移整理」節；
  機構格式坑核對過都已在各自 `docs/sources/`；和 AGENTS 重複的測試表刪除。AGENTS：STATUS 維護規則改指 root `DESIGN.md` §4、閱讀順序改 DESIGN → STATUS；
  新增「改 DESIGN 動手前先討論」「掃描檔逐頁看」「回答理財問題時（省事優先）」。舊 Claude 記憶逐條對照，多數已在文件；其餘補進 config 的說明欄。只動文件與 config 說明欄，快測全 pass、`analysis.run --offline` 通過。

- **銀行C 網銀明細改成加密 xlsx：兩個帳戶接到 <日期>**（<日期>，使用者從行動銀行 App 匯出並上傳；**使用者決定以後該行明細一律用手機匯出**，`source_catalog` 的取得方式已改）：
  檔案是 Office 標準加密，內容同舊 HTML 那張表、多一欄「手續費」。新 parser `bankc_xlsx`（v1）只做解密＋讀儲存格，
  列的判讀抽成舊 parser 的 `parse_rows`（v2）共用；手續費照收不參與金額，餘額鏈照走。**合併規則改成可延伸**：
  新視窗接在舊視窗之後，原本「必須是子集」會整個帳戶拒收；現在多出的列須是連續檔頭或檔尾，接好後餘額鏈再獨立走一次。
  交叉檢查放寬一個方向：txt 涵蓋末日當天稍晚才發生的交易帳上有而 txt 沒有，記 note 不 fail。新依賴 `msoffcrypto-tool`／`openpyxl`。
  fixture＋回歸測試（兩格式真的接成一條鏈）；全套 pass、verify pass，報告已重產發布。細節在 `docs/sources/bank_c.md`。

- **綜合報告頂端淨值算錯：循環貸款欠款改讀活存實際負餘額**（<日期>，使用者：「淨值本來是 X 左右，最近變成 Y，你確認一下為什麼」）：
  入庫新對帳單時活存餘額變了，但循環貸款那筆的 `outstanding` 仍是舊快照，頂端負債同一筆錢算兩次。
  逐月表本來就用實際透支所以沒錯；報表尾段驗證列有抓到但沒人看。改法：`loans.json` 循環貸拿掉 `outstanding`、加 `overdraft_account`；
  `net_worth.loan_balance()` 統一給頂端負債、貸款契約小節與維持率表（原本是寫死的數字，現在算的）；
  驗證列改盯「透支 ≤ 額度且現金列只認一次」。回歸測試已加；只動 analysis／config／tests，快測 pass，已重產發布。

## 一句話現況

N 家機構都有鏈路，各自建 `data/db/{機構}.db`，`fintrack unify` 併成統一帳本 `data/db/fintrack.db`。
即時數字（最後建置、verify 結果、unknown 筆數）跑 `fintrack status`（唯讀 0.3 秒）。
各家一行；完工時的長篇成果報告在 STATUS-ARCHIVE，格式、權威來源與限制在 `docs/sources/{機構}.md`。

- **銀行A**：帳戶明細（電子存摺 PDF 為現金權威）、外幣債券、貸款契約全齊；同集團券商直接以本行外匯帳戶交割（鏡像帳戶）。
- **券商A**（複委託）：五個來源都跑通（每日買賣報告書為權威），帳戶起點三方確認。
- **銀行C**：基金通知、綜合對帳單、網銀明細（行動銀行 App 匯出的加密 xlsx）、確認書；網銀明細涵蓋期間內以明細為現金權威。
- **券商B**（海外）：月結單為交易與現金權威，RSU／ESPP vest 已建；部分持股已 ACAT 轉出（決策檔結案）。
- **券商C**（海外）：CSV／OFX／月結單，OFX 為交易與現金權威，月結單逐筆比對零漏列。
- **銀行B**：月綜合對帳單為權威，三幣別帳戶餘額鏈零缺口。
- **加密交易所A**：月次 zip＋報告書，帳號與資料起點已由使用者確認結案。
- **券商D**：現金鏈與持倉鏈都是硬 gate；還缺年度報告書彙總交叉比對（見未完成）。

---

## 未完成

### ⚠️ 待使用者問銀行：貸款的擔保與可動用額度

貸款結構的背景已搬到 `docs/sources/bank_a.md`「貸款」節；`config/loans.json` 是契約條件正本。下面只留還要問銀行的事。

1. ~~某筆貸款押什麼~~ **契約已答大半**：押不動產第一順位、不是債券。**剩下要問：押的是哪一筆不動產**（契約沒寫）。
2. 中期貸款剩餘額度**還能直接動用嗎**——契約寫明可貸金額＝擔保市值×融資成數**逐日重算**，所以答案是「會隨市價變動」；**剩下要問：現在實際可動用數字是多少**。報表已自己算維持率；問銀行時順便核對。
3. 循環貸款到期日已過，續約條件有沒有變仍待確認。

答案回來後：把擔保關係寫進 `config/loans.json`（`collateral` 欄）與 `docs/sources/bank_a.md`，並視情況改逐月淨值的處置。

### 帳戶互連第一輪的尾巴

- **銀行C 網銀明細只涵蓋最近一年**（`data_missing`）：網銀能下載的區間就這麼長。更早的現金流仍然沒有明細——對應的兩個 warn 正是落在窗口之前，不是解析失敗。
- **⚠️ 網銀明細裡有第三個帳號，目前只登記了銀行側**：內容是**某券商的交割帳戶**（證交款存入／扣款、手續折讓、現金股息）。券商身分未經證實；**使用者說明該部位由家人操作，券商帳號與對帳單的取得方式待他去問。**
  現況：銀行側的現金流已經建成 txn，證交款進出標成單邊 `transfer_internal`（`reason=account_untracked`）並掛 `untracked_own_account` warn；**券商那一側完全沒有資料**，所以部位不在帳上，報酬率也算不出來。

（以下略）

## 坑

（機構格式的坑在各自 `docs/sources/`；這裡只放跨機構的。以下略）
