Banking 跨系統優化提案

auto_banking × auto_banking-test × gamepp-web 三系統整合路線圖
合併分支、打通雙向對帳(買單 + 賣單)、整合水位監控、建立異常偵測 Dashboard。四階段 10 週內落地。
YoungSaaS 開發團隊|2026 年 4 月

1. 現況分析

三專案現況分工、跨系統痛點、整體資料流。

1.1 三專案角色

auto_bankingChrome Ext v1.3.20 — main
9 家網銀 content script(esun / tcb / first / fubon / skbank / sinopac / taishin / tfcc / hwatai / megabank)、撥款填入、交易收集、對帳主流程。Popup 支援多銀行 tab 切換與暫停控制。
auto_banking-testChrome Ext v1.3.2 — feature 分支
UI/UX 優化(撥款資訊快速複製)、新銀行整合( SCSB 上海商銀 / globalmyb2b 國泰)、水位匯出工具(從 HQ settlement-balance 頁面抓超商/固定/撥款/水位結餘)。
gamepp-webLaravel HQ 後端
AutoBankingC 接收 Extension 上傳交易、ApprC 撥款審核、EgopayApprM 撥款單狀態管理、買單(入帳)配對 egopay_payments。目前僅處理入帳,出帳資料被 if (!$in) continue; 過濾掉。

1.2 跨系統痛點

#痛點現況影響
1分支分離main 與 test 兩套 Extension 並存,UI/UX 與新銀行功能未 merge維護成本翻倍,使用者需安裝不同版本
2僅做買單對帳AutoBankingC::receive_* 出帳交易全部丟棄賣單人工對帳,無稽核軌跡
3水位資料孤立waterlevel.js 可匯出 CSV,可暫存storage做撥款前核對撥款前無法檢核餘額是否足夠
4撥款狀態斷層EgopayApprM.status 僅 0/1/2,無匯款中中間態重複匯款風險

1.3 對比視覺

痛點對比

2. 優化目標架構

統一 Extension + HQ 雙向對帳 + 水位服務 + 異常 Dashboard。

目標架構
藍=統一 Extension / 紫=HQ 服務 / 綠=資料層

2.1 關鍵改變

Extension 合併

兩分支收斂為單一 Chrome Extension,12 家網銀 + UI/UX 工作台統一。

雙向對帳

交易上傳新增 direction 欄位,買單(入帳)與賣單(出帳)共用配對引擎。

水位服務

HQ 集中管理結算資料,Extension 以 API 查詢,撥款前自動檢核。

五階段狀態機

unfilled → filled → releasing → released → confirmed,三道閘門防重複匯款。

3. Phase 1:分支整合與統一

Week 1–2。風險最低、效益最快。

3.1 整合範圍

來源(test 分支)目的地(main)說明
bank_logics/scsb.jssrc/banks/scsb.js上海商銀 content script
bank_logics/globalmyb2b.jssrc/banks/globalmyb2b.js國泰網銀
bank_logics/waterlevel.jssrc/services/waterlevel.js水位資料匯出工具
popup UI 快速複製popup.html/js撥款資訊一鍵複製

3.2 manifest 統一

3.3 驗收條件

4. Phase 2:撥款狀態管控

Week 3–4。承接 auto_banking 原 proposal 的 Phase 2,此處為跨系統視角整合版。

4.1 五階段狀態機

// Extension 端(chrome.storage.local)
const TICKET_STATE = {
  UNFILLED:   'unfilled',    // 初始 → 5min 後 needs_speed
  FILLED:     'filled',      // FillForm 填入後
  RELEASING:  'releasing',   // 放行確認頁偵測到
  RELEASED:   'released',    // 放行結果頁偵測到成功
  CONFIRMED:  'confirmed',   // 出帳 bank_tx 配對成功
};

// HQ 端 EgopayApprM.status
const HQ_STATUS = {
  PENDING:    0,   // 待執行
  SUCCESS:    1,   // 成功
  FAILED:     2,   // 失敗
  FILLING:    3,   // 匯款中(新增)
};

4.2 三道防重複閘門

閘門觸發時機檢查邏輯行為
1. FillForm 鎖定popup 點擊填入ticket_state !== 'unfilled'隱藏按鈕(待定)
2. Pre-check API填入前status === 0
+ SELECT FOR UPDATE
status ≠ 0 → 拒絕
3. 出帳比對放行前同帳號 + 同金額 + 近 10 min 出帳彈窗警示,需人員確認

4.3 新增 HQ API

Endpoint用途RequestResponse
POST /api/auto_banking/pre_check填入前鎖單{ticket_id}{ok, status, locked_by}
POST /api/auto_banking/mark_filling標記 status=3{ticket_id}{ok}
POST /api/auto_banking/confirm配對後 status→1{ticket_id, bank_tx_id}{ok}
可用半成品feat/ticket-state-management 分支已完成玉山 / 第一銀行放行偵測,可直接接續,不需從零實作。

5. Phase 3:雙向對帳與賣單自動對帳

Week 5–7。此階段是 gamepp-web 從買單對帳延伸到賣單對帳的關鍵。

5.1 出帳資料打通

// Extension 各銀行 content script(移除入帳 filter)
tx.direction = tx.in > 0 ? 'in' : 'out';
records.push(tx);

// background.js 去重 key 加入 direction
const dedupKey = `${date}_${time}_${account}_${direction}_${amount}`;

// gamepp-web: AutoBankingC::receive_*(出帳寫入 bank_transactions)
if ($record['direction'] === 'out') {
    BankTransaction::create([
        'bank'                => $bank,
        'out'                 => $record['out'],
        'account'             => $record['account'],
        'balance'             => $record['balance'],
        'accounting_datetime' => $record['datetime'],
    ]);
    continue; // 不進 payment 配對,改入 appr 配對引擎
}

5.2 買單 + 賣單統一配對引擎

雙向對帳流程
同一收集路徑,按 direction 分流到買單 / 賣單配對

5.3 自動回填

欄位現行自動化來源驗證
transaction_time人工複製bank_transactions.accounting_datetime時間差 < 30 min
bank人工下拉bank_transactions.bank必須 match
fee人工輸入 (通常 15)bank_tx.out − appr.amount差額 0~30 合理
operator_id人工下拉auth()->id()獨立 HQ 帳號

5.4 DB Schema

ALTER TABLE bank_transactions
  ADD INDEX idx_bank_out_acctime (bank, out, accounting_datetime);

ALTER TABLE egopay_apprs
  ADD COLUMN bank_transaction_id BIGINT UNSIGNED NULL AFTER status,
  ADD INDEX idx_bank_tx (bank_transaction_id);

6. Phase 4:異常偵測

6.1 異常偵測引擎

異常類型偵測條件比對欄位動作
重複匯款同帳號+同金額出帳 > 撥款單數account, out, datetime自動建立異常單
時間錯誤金額+帳號+銀行 match,時間差 >30minamount, account, bank, datetime標記待確認
銀行錯誤金額+帳號+時間 match,銀行欄位不一致amount, account, datetime, bank標記待確認
未開單入帳bank_tx 入帳無對應 paymentin, account, datetime列入未開單清單
餘額缺口prev.balance + in − out ≠ curr.balancebalance, in, out標記帳戶缺口

7. 風險與緩解

跨系統整合必然涉及協同風險,以下為主要識別項。

風險等級緩解
合併衝突(兩分支 content.js 差異大)先用 diff 工具比對,建立共同 utils 層,逐銀行搬移
新銀行 content script 與 main 衝突manifest all_frames / run_at 統一;load order 重整
出帳配對誤判(同金額同時間)必須帳號 match;多候選 → 不自動配對,標記人工確認
Extension 新舊版本並存HQ API 向後相容(舊版不送 direction 視為入帳)
銀行改版致放行偵測失效偵測失敗 fallback 手動確認,不阻斷;DOM hash 變更 console.warn
ApprC 狀態 race conditionpre_check 用 SELECT ... FOR UPDATE,mark_filling 做 CAS
出帳 DB 成長快速idx_bank_out_acctime 複合索引;半年份額壓力測試