事件入口
`SmsReceiver` 接簡訊,`PaymentNotificationListener` 接 App 通知,手動新增則從 Compose UI 進來。
- 責任:取得原始事件與來源資訊。
- 邊界:不在這層做統計或同步。
這份文件用兩條水管圖說明 AccountingApp:一條給開發者理解 app architecture(應用程式架構),一條給使用者理解日常資料如何被記錄、整理與同步。所有內容都是靜態展示,不讀取任何實際帳務資料。
切換下方 tab(分頁)可在開發架構與使用者運作之間切換。點擊任一水管節點,下面的圖卡會同步高亮該 part(部分)的解釋。
從外部事件進入 App,到 parser(解析器)、core logic(核心邏輯)、storage(儲存)、sync(同步)與 UI(使用者介面)輸出。
`SmsReceiver` 接簡訊,`PaymentNotificationListener` 接 App 通知,手動新增則從 Compose UI 進來。
已知來源走 `RichartParser`、`TbbParser`、`LinePayParser`;未知來源走 `GenericNotificationParser`。
`TransactionMerger`、`CategoryResolver`、`AccountResolver`、merchant alias(商家別名)與內部轉帳對象規則把 parser 結果整理成穩定交易。
Room database(資料庫)保存交易、帳戶、商家學習、內部轉帳對象與同步狀態;DataStore 保存同步設定。
WorkManager 負責背景排程;Google Sheets sync 用 `transaction_id` 做 upsert(存在更新,不存在新增)。
Jetpack Compose 顯示首頁、分析、預算、設定與交易詳情,並把手動修正轉成使用者可理解的學習項目。
從一筆消費或收款通知出現,到 App 自動建立紀錄、整理、可修正、同步,最後變成可 review(審閱)的帳務資料。
你刷卡、用 LINE Pay、帳戶轉出或收到款項後,銀行或支付 App 會送出通知。
開啟 SMS(簡訊)與 notification access(通知存取)後,App 會在手機本機接收交易文字。
App 解析金額、時間、商家、分類與帳戶,並合併同一筆交易的重複通知。
你在交易詳情修正分類或轉帳用途後,App 會建立本機學習項目,之後相似交易優先套用。
同步的是整理後欄位,例如交易 ID、金額、分類、帳戶 ID 與狀態;同步失敗可重試。
首頁看最近交易、支出與本月預算剩餘;分析看分類排行、趨勢、固定支出比例與可能續扣項目;預算頁可設定總預算與分類預算。
目前調整集中在 `codex/phase2-gate-polish`,並透過 PR #2 回到 `main`。`main` 保持使用者主要閱讀與穩定工作分支。
手機驗收使用 `adb install -r` 升級 debug APK,保留 App 本機資料;不使用 uninstall(解除安裝)或清資料流程。
Phase 3 第一版已接上本月總預算、分類預算、App 內接近上限提示與候選訂閱偵測;系統推播先不啟用,等實際資料驗證穩定後再決定。
完整交易規則請看 docs/rules/transactions.html;Phase 2 狀態請看 docs/status/phase-2.md。