三專案現況分工、跨系統痛點、整體資料流。
if (!$in) continue; 過濾掉。| # | 痛點 | 現況 | 影響 |
|---|---|---|---|
| 1 | 分支分離 | main 與 test 兩套 Extension 並存,UI/UX 與新銀行功能未 merge | 維護成本翻倍,使用者需安裝不同版本 |
| 2 | 僅做買單對帳 | AutoBankingC::receive_* 出帳交易全部丟棄 | 賣單人工對帳,無稽核軌跡 |
| 3 | 水位資料孤立 | waterlevel.js 可匯出 CSV,可暫存storage做撥款前核對 | 撥款前無法檢核餘額是否足夠 |
| 4 | 撥款狀態斷層 | EgopayApprM.status 僅 0/1/2,無匯款中中間態 | 重複匯款風險 |
統一 Extension + HQ 雙向對帳 + 水位服務 + 異常 Dashboard。
兩分支收斂為單一 Chrome Extension,12 家網銀 + UI/UX 工作台統一。
交易上傳新增 direction 欄位,買單(入帳)與賣單(出帳)共用配對引擎。
HQ 集中管理結算資料,Extension 以 API 查詢,撥款前自動檢核。
unfilled → filled → releasing → released → confirmed,三道閘門防重複匯款。
Week 1–2。風險最低、效益最快。
| 來源(test 分支) | 目的地(main) | 說明 |
|---|---|---|
bank_logics/scsb.js | src/banks/scsb.js | 上海商銀 content script |
bank_logics/globalmyb2b.js | src/banks/globalmyb2b.js | 國泰網銀 |
bank_logics/waterlevel.js | src/services/waterlevel.js | 水位資料匯出工具 |
| popup UI 快速複製 | popup.html/js | 撥款資訊一鍵複製 |
content_scripts.js 清單加入 2 家新銀行storage、webNavigation(test 已有)run_at: document_end、all_frames: true 維持Week 3–4。承接 auto_banking 原 proposal 的 Phase 2,此處為跨系統視角整合版。
// 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, // 匯款中(新增)
};
| 閘門 | 觸發時機 | 檢查邏輯 | 行為 |
|---|---|---|---|
| 1. FillForm 鎖定 | popup 點擊填入 | ticket_state !== 'unfilled' | 隱藏按鈕(待定) |
| 2. Pre-check API | 填入前 | status === 0+ SELECT FOR UPDATE | status ≠ 0 → 拒絕 |
| 3. 出帳比對 | 放行前 | 同帳號 + 同金額 + 近 10 min 出帳 | 彈窗警示,需人員確認 |
| Endpoint | 用途 | Request | Response |
|---|---|---|---|
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 分支已完成玉山 / 第一銀行放行偵測,可直接接續,不需從零實作。
Week 5–7。此階段是 gamepp-web 從買單對帳延伸到賣單對帳的關鍵。
// 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 配對引擎
}
bank_tx.in + account + datetime → 比對 egopay_payments(現行邏輯)bank_tx.out + account + datetime → 比對 egopay_apprs(新增)| 欄位 | 現行 | 自動化來源 | 驗證 |
|---|---|---|---|
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 帳號 |
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);
| 異常類型 | 偵測條件 | 比對欄位 | 動作 |
|---|---|---|---|
| 重複匯款 | 同帳號+同金額出帳 > 撥款單數 | account, out, datetime | 自動建立異常單 |
| 時間錯誤 | 金額+帳號+銀行 match,時間差 >30min | amount, account, bank, datetime | 標記待確認 |
| 銀行錯誤 | 金額+帳號+時間 match,銀行欄位不一致 | amount, account, datetime, bank | 標記待確認 |
| 未開單入帳 | bank_tx 入帳無對應 payment | in, account, datetime | 列入未開單清單 |
| 餘額缺口 | prev.balance + in − out ≠ curr.balance | balance, in, out | 標記帳戶缺口 |
跨系統整合必然涉及協同風險,以下為主要識別項。
| 風險 | 等級 | 緩解 |
|---|---|---|
| 合併衝突(兩分支 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 condition | 中 | pre_check 用 SELECT ... FOR UPDATE,mark_filling 做 CAS |
| 出帳 DB 成長快速 | 低 | 加 idx_bank_out_acctime 複合索引;半年份額壓力測試 |