Dynamic pipeline maps

AccountingApp 動態水管圖

這份文件用兩條水管圖說明 AccountingApp:一條給開發者理解 app architecture(應用程式架構),一條給使用者理解日常資料如何被記錄、整理與同步。所有內容都是靜態展示,不讀取任何實際帳務資料。

兩種視角

切換下方 tab(分頁)可在開發架構與使用者運作之間切換。點擊任一水管節點,下面的圖卡會同步高亮該 part(部分)的解釋。

開發架構水管圖

從外部事件進入 App,到 parser(解析器)、core logic(核心邏輯)、storage(儲存)、sync(同步)與 UI(使用者介面)輸出。

Input Layer

事件入口

`SmsReceiver` 接簡訊,`PaymentNotificationListener` 接 App 通知,手動新增則從 Compose UI 進來。

  • 責任:取得原始事件與來源資訊。
  • 邊界:不在這層做統計或同步。
Parser Layer

解析與正規化

已知來源走 `RichartParser`、`TbbParser`、`LinePayParser`;未知來源走 `GenericNotificationParser`。

  • 輸出:金額、時間、商家、類型、帳戶線索。
  • 原則:明確才解析,不確定就保留原始資訊。
Core Logic

交易決策核心

`TransactionMerger`、`CategoryResolver`、`AccountResolver`、merchant alias(商家別名)與內部轉帳對象規則把 parser 結果整理成穩定交易。

  • 處理去重、商家學習、轉帳雙邊配對與內部轉帳對象。
  • 支出、收入、轉帳、退款與調整用 `TransactionType` 分開。
Storage

本機可信資料

Room database(資料庫)保存交易、帳戶、商家學習、內部轉帳對象與同步狀態;DataStore 保存同步設定。

  • schema migration(結構遷移)保護舊資料。
  • rawText 留本機,不預設同步。
Sync Layer

可靠同步

WorkManager 負責背景排程;Google Sheets sync 用 `transaction_id` 做 upsert(存在更新,不存在新增)。

  • 支援 pending、retrying、failed、synced。
  • 刪除用 soft delete(軟刪除)同步。
UI Layer

使用者可修正的表層

Jetpack Compose 顯示首頁、分析、預算、設定與交易詳情,並把手動修正轉成使用者可理解的學習項目。

  • 商家與分類以「商家學習」呈現,alias 與批次合併放在進階區。
  • 帳戶與轉帳以「我的帳戶 / 內部轉帳對象 / 進階除錯」呈現。

目前驗收狀態

Branch

Phase 2 gate polish

目前調整集中在 `codex/phase2-gate-polish`,並透過 PR #2 回到 `main`。`main` 保持使用者主要閱讀與穩定工作分支。

Device

保留資料安裝

手機驗收使用 `adb install -r` 升級 debug APK,保留 App 本機資料;不使用 uninstall(解除安裝)或清資料流程。

Gate

Phase 3 預算驗收

Phase 3 第一版已接上本月總預算、分類預算、App 內接近上限提示與候選訂閱偵測;系統推播先不啟用,等實際資料驗證穩定後再決定。

完整交易規則請看 docs/rules/transactions.html;Phase 2 狀態請看 docs/status/phase-2.md