CR #201 » SDD-002_DFD與流程分解.md
SDD-002 DFD 與流程分解
| 項目 | 內容 |
|---|---|
| 文件編號 | SDD-002 |
| 版本 | 1.0 |
| 狀態 | 已核定 |
| 撰寫者 | SD |
| 審查者 | SA / BA |
| 對應需求 | AUT-1.1 |
1. 說明
本文件以**資料流圖(Data Flow Diagram)**分解系統流程,層級如下:
| 層級 | 內容 | 用途 |
|---|---|---|
| L0 | 系統上下文(與外部實體之資料流) | 界定系統邊界 |
| L1 | 主要處理程序(7 個) | 界定服務群組 |
| L2 | 關鍵處理程序細分 | 對應用例與 Sequence |
符號約定:本文件以 Mermaid flowchart 表達 DFD。
圓角節點=處理程序(Process);方形節點=外部實體(External Entity);
資料庫柱狀節點以 [( )] 表達資料存放(Data Store)。
2. DFD Level 0 系統上下文
flowchart LR
CUST(["持卡人"])
MERC(["特店 / 收單機構"])
ORG(["卡組織"])
TICK(["票證公司"])
CH(["數位通路"])
CRED(["徵審系統"])
CORE(["銀行核心"])
GLS(["總帳系統"])
HSM(["HSM"])
NOTI(["通知通道"])
P0["信用卡核心系統"]
CH -->|"申請、查詢、繳款指令"| P0
P0 -->|"帳務、點數、額度查詢結果"| CH
CUST -->|"交易"| MERC
MERC -->|"授權 / 請款"| P0
P0 -->|"授權回應 / 撥款"| MERC
ORG -->|"授權 / 清算檔"| P0
P0 -->|"授權請求 / 清算結果"| ORG
TICK -->|"加值 / 餘額"| P0
P0 -->|"加值指令"| TICK
P0 -->|"徵信查詢"| CRED
CRED -->|"評分 / 核決"| P0
P0 <-->|"CIF / 存款帳號"| CORE
P0 -->|"會計分錄"| GLS
P0 <-->|"金鑰 / PIN 驗證"| HSM
P0 -->|"通知內容"| NOTI
3. DFD Level 1 主要處理程序
flowchart TD
E1(["持卡人 / 特店 / 卡組織"])
P1["P1 授權處理"]
P2["P2 帳務處理"]
P3["P3 額度處理"]
P4["P4 卡片與客戶處理"]
P5["P5 帳單與繳款處理"]
P6["P6 權益與分期處理"]
P7["P7 清算與爭議處理"]
D1[("D1 授權資料")]
D2[("D2 帳務資料")]
D3[("D3 額度資料")]
D4[("D4 卡片與客戶資料")]
D5[("D5 帳單與繳款資料")]
D6[("D6 點數與分期資料")]
D7[("D7 清算與爭議資料")]
E1 -->|"授權請求"| P1
P1 -->|"授權回應"| E1
P1 -->|"佔用請求"| P3
P1 -->|"授權紀錄"| D1
P1 -->|"授權核准事件"| P2
E1 -->|"請款檔"| P2
P2 -->|"入帳結果"| D2
P2 -->|"釋放佔用"| P3
P2 -->|"帳務事件"| P5
P2 -->|"帳務事件"| P6
P2 -->|"帳務事件"| P7
P3 -->|"額度異動"| D3
P3 -->|"額度快照"| P1
P4 -->|"卡片 / 客戶主檔"| D4
D4 -->|"卡片狀態"| P1
D4 -->|"歸戶資訊"| P5
P5 -->|"帳單資料"| D5
P5 -->|"繳款結果"| E1
P5 -->|"恢復額度"| P3
P5 -->|"繳款入帳"| P2
P6 -->|"點數 / 分期"| D6
P6 -->|"佔用請求"| P3
P6 -->|"攤還入帳"| P2
P7 -->|"清算 / 爭議"| D7
P7 -->|"沖正請求"| P2
3.1 處理程序與服務對照
| 處理程序 | 服務 | 主要資料存放 |
|---|---|---|
| P1 授權處理 | authorization-service |
D1 auth.*
|
| P2 帳務處理 |
posting-service、pricing-service
|
D2 posting.*、pricing.*
|
| P3 額度處理 | limit-service |
D3 lim.*
|
| P4 卡片與客戶處理 |
card-service、party-service、product-service
|
D4 card.*、party.*、product.*
|
| P5 帳單與繳款處理 |
statement-service、payment-service
|
D5 statement.*、payment.*
|
| P6 權益與分期處理 |
rewards-service、installment-service
|
D6 rewards.*、installment.*
|
| P7 清算與爭議處理 |
clearing-service、dispute-service、merchant-service
|
D7 clearing.*、dispute.*、merchant.*
|
4. DFD Level 2 關鍵處理程序
4.1 P1.1 授權檢核(發卡授權)
flowchart TD
IN(["授權請求"])
C1["P1.1.1 電文解析與欄位校驗"]
C2["P1.1.2 卡片狀態與管制碼檢核"]
C3["P1.1.3 黑名單檢核"]
C4["P1.1.4 可用額度檢核"]
C5["P1.1.5 風險參數評分"]
C6["P1.1.6 EMV 驗證"]
C7["P1.1.7 專用額度與通路限額檢核"]
DEC{"P1.1.8 決策彙總"}
OUT(["授權回應"])
D1[("D4 卡片與客戶")]
D2[("D3 額度")]
D3[("D1 授權")]
PRM[("D4 參數與規則")]
IN --> C1 --> C2
C2 --> C3 --> C4 --> C5 --> C6 --> C7 --> DEC
D1 --> C2
D2 --> C4
PRM --> C2
PRM --> C4
PRM --> C5
PRM --> C7
DEC -->|"核准"| OUT
DEC -->|"拒絕"| OUT
DEC -->|"核准"| D3
C4 -->|"佔用請求"| D2
檢核順序為參數驅動:product.rule_sets 中 rule_type='AUTH_CHECK' 之 priority 決定執行順序;
status='INACTIVE' 之規則不執行。不得以程式碼硬寫順序(BRD-001 BR-02-01)。
4.2 P2.1 請款入帳
flowchart TD
IN(["請款檔 / 即時請款"])
C1["P2.1.1 檔案接收與格式檢核"]
C2["P2.1.2 冪等鍵檢核"]
DEC1{"P2.1.3 是否重複"}
C3["P2.1.4 授權請款比對"]
DEC2{"P2.1.5 比對結果"}
C4["P2.1.6 產生入帳交易"]
C5["P2.1.7 分欄位入帳"]
C6["P2.1.8 釋放授權佔用"]
C7["P2.1.9 更新餘額與帳齡"]
C8["P2.1.10 產生帳務明細"]
EXC["P2.1.11 異常處理"]
OUT(["入帳結果與通知"])
D1[("D2 帳務")]
D2[("D1 授權")]
D3[("D3 額度")]
IN --> C1 --> C2 --> DEC1
DEC1 -->|"是"| EXC
DEC1 -->|"否"| C3
D2 --> C3
C3 --> DEC2
DEC2 -->|"金額不符 / 授權失效"| EXC
DEC2 -->|"相符"| C4
C4 --> C5 --> C6 --> C7 --> C8 --> OUT
C5 --> D1
C7 --> D1
C6 --> D3
EXC --> OUT
EXC --> D1
4.3 P5.1 繳款與即時恢復額度
flowchart TD
IN(["繳款指令 / 自扣檔"])
C1["P5.1.1 繳款受理"]
C2["P5.1.2 銷帳檢核"]
C3["P5.1.3 繳款分配"]
C4["P5.1.4 帳務入帳"]
C5["P5.1.5 即時恢復額度"]
T1["P5.1.6 三日未銷帳計時器"]
DEC{"P5.1.7 是否收到銷帳檔"}
R1["P5.1.8 重新佔額"]
OUT(["繳款結果與通知"])
D1[("D5 繳款")]
D2[("D2 帳務")]
D3[("D3 額度")]
IN --> C1 --> C2 --> C3 --> C4 --> C5 --> OUT
C1 --> D1
C3 --> D1
C4 --> D2
C5 --> D3
C5 --> T1
T1 --> DEC
DEC -->|"是"| OUT
DEC -->|"否,逾三日"| R1
R1 --> D3
R1 --> D1
時序要求:
C5 即時恢復額度必須在繳款入帳後 1 秒內完成,
不得等日終批次(BRD-001 BR-05-01、POC-11)。
4.4 P5.2 帳單批次產製
flowchart TD
IN(["帳單週期到達"])
C1["P5.2.1 週期判定與分流"]
C2["P5.2.2 歸戶與統編合併"]
C3["P5.2.3 計算本期應繳"]
C4["P5.2.4 產生帳單資料"]
C5["P5.2.5 套用帳彩"]
C6["P5.2.6 產生各形式帳單"]
C7["P5.2.7 帳單發送"]
C8["P5.2.8 歸檔與稽核"]
CKPT[("D5 Checkpoint")]
OUT(["帳單檔與通知"])
D1[("D2 帳務")]
D2[("D4 客戶")]
D3[("D5 帳單")]
IN --> C1 --> C2 --> C3 --> C4 --> C5 --> C6 --> C7 --> C8 --> OUT
D2 --> C2
D1 --> C3
D3 --> C4
C4 --> CKPT
C7 --> D3
CKPT -->|"異常後自 Checkpoint 續跑"| C4
效能要求(POC-16):1,000 萬筆交易資料之帳單批次須於 1 小時內完成;
批次期間 ONLINE 至少維持 200 TPS;第 135 萬筆異常後可自該筆續跑。
4.5 P2.2 沖正處理
flowchart TD
IN(["沖正申請"])
C1["P2.2.1 建立沖正案件"]
C2["P2.2.2 鎖定原始交易"]
DEC1{"P2.2.3 原始交易狀態"}
B1["P2.2.4 直接反向沖銷"]
B2["P2.2.5 產生調整交易"]
B3["P2.2.6 提出清算調整"]
C3["P2.2.7 產生反向分錄"]
C4["P2.2.8 更新餘額與額度"]
C5["P2.2.9 還原授權佔用"]
C6["P2.2.10 留存沖正軌跡"]
APR{"P2.2.11 是否需覆核"}
OUT(["沖正結果"])
D1[("D2 帳務")]
D2[("D3 額度")]
D3[("D7 清算")]
IN --> C1 --> C2 --> DEC1
DEC1 -->|"已入帳未出帳"| B1
DEC1 -->|"已出帳"| B2
DEC1 -->|"已清算"| B3
B1 --> C3
B2 --> C3
B3 --> C3
C3 --> APR
APR -->|"是"| C6
APR -->|"否"| C4
C4 --> C5 --> C6 --> OUT
C3 --> D1
C4 --> D1
C5 --> D2
B3 --> D3
4.6 P3.1 額度調整
flowchart TD
IN(["額度異動申請"])
C1["P3.1.1 類型判定"]
C2["P3.1.2 權限與客層檢核"]
DEC1{"P3.1.3 是否超限"}
C3["P3.1.4 覆核"]
DEC2{"P3.1.5 覆核結果"}
C4["P3.1.6 生效"]
C5["P3.1.7 同步授權服務"]
C6["P3.1.8 寫入稽核"]
REJ["P3.1.9 拒絕並回覆"]
OUT(["額度結果"])
D1[("D3 額度")]
D2[("D4 參數")]
IN --> C1 --> C2 --> DEC1
D2 --> C2
DEC1 -->|"是"| C3
DEC1 -->|"否"| C3
C3 --> DEC2
DEC2 -->|"核准"| C4
DEC2 -->|"駁回"| REJ
C4 --> C5 --> C6 --> OUT
C4 --> D1
C5 -->|"額度同步事件"| OUT
REJ --> OUT
4.7 P7.1 清算比對
flowchart TD
IN(["交易日終批次"])
C1["P7.1.1 清分作業"]
C2["P7.1.2 依卡組織分派"]
C3["P7.1.3 依幣別分組與匯率轉換"]
C4["P7.1.4 產生本行清算檔"]
C5["P7.1.5 與卡組織清算檔比對"]
DEC{"P7.1.6 差異筆數為零"}
C6["P7.1.7 差異明細產出"]
C7["P7.1.8 差異分類與處理"]
C8["P7.1.9 調扣與撥款"]
C9["P7.1.10 會計分錄"]
OUT(["清算報表"])
D1[("D2 帳務")]
D2[("D7 清算")]
IN --> C1 --> C2 --> C3 --> C4 --> C5 --> DEC
D1 --> C1
C4 --> D2
DEC -->|"是"| C8
DEC -->|"否"| C6 --> C7 --> C5
C8 --> C9 --> OUT
C9 --> D2
4.8 P7.2 爭議處理
flowchart TD
IN(["爭議申請"])
C1["P7.2.1 案件建檔"]
C2["P7.2.2 類型分流"]
C3["P7.2.3 調單請求"]
DEC1{"P7.2.4 證據完整"}
C4["P7.2.5 補充資料"]
DEC2{"P7.2.6 逾時未回覆"}
C5["P7.2.7 裁決"]
DEC3{"P7.2.8 責任歸屬"}
C6["P7.2.9 卡組織仲裁"]
C7["P7.2.10 帳務調整"]
C8["P7.2.11 額度恢復"]
C9["P7.2.12 結案通知"]
OUT(["爭議結果"])
D1[("D7 爭議")]
D2[("D2 帳務")]
IN --> C1 --> C2 --> C3 --> DEC1
DEC1 -->|"否"| C4 --> DEC1
DEC1 -->|"是"| DEC2
DEC2 -->|"是"| C5
DEC2 -->|"否"| C5
C5 --> DEC3
DEC3 -->|"需仲裁"| C6 --> C7
DEC3 -->|"發卡行 / 收單行責任"| C7
C7 --> C8 --> C9 --> OUT
C1 --> D1
C7 --> D2
C9 --> D1
5. 流程分解對照表
| DFD 處理程序 | 用例 | Sequence | API | FR |
|---|---|---|---|---|
| P1.1 授權檢核 | AuthorizeTransaction |
SDD-003 §3 | POST /api/v1/authorizations |
AUT-1.1 |
| P1.1 授權檢核(收單分流) | AuthorizeTransaction |
SDD-003 §4 | 同上 | AUT-1.2 |
| P1.1 授權檢核(路由) | RouteTransaction |
SDD-003 §4 | 同上 | AUT-1.3 |
| P2.1 請款入帳 | PostTransaction |
SDD-003 §5 | POST /api/v1/postings |
ISS-2.3 |
| P2.2 沖正處理 | ReverseTransaction |
SDD-003 §11 | POST /api/v1/postings/{id}/reversals |
ISS-2.3 |
| P3.1 額度調整 | AdjustLimit |
SDD-003 §6 | POST /api/v1/limit-adjustments |
ISS-2.4 |
| P4.1 卡片生命週期 | TransitionCardStatus |
SDD-005 §3 | POST /api/v1/cards/{id}/lifecycle-transitions |
ISS-2.2 |
| P4.2 快發快綁 | InstantIssuance |
SDD-003 §10 | POST /api/v1/cards/{id}/instant-issuance |
ISS-2.2 |
| P5.1 繳款 | ReceivePayment |
SDD-003 §7 | POST /api/v1/payments |
ISS-2.6 |
| P5.1 三日未銷帳 | ReoccupyIfUnmatched |
SDD-003 §8 | 系統排程 | ISS-2.6 |
| P5.2 帳單批次 | RunStatementCycle |
SDD-003 §9 | POST /api/v1/statement-cycles/{id}/runs |
ISS-2.8 |
| P6.1 分期建立 | CreateInstallmentPlan |
SDD-003 §12 | POST /api/v1/installments |
ISS-2.7 |
| P6.2 點數兌換 | RedeemPoints |
SDD-003 §13 | POST /api/v1/rewards/redemptions |
RWD-5.2 |
| P7.1 清算比對 | RunClearing |
SDD-003 §14 | POST /api/v1/clearing/runs |
ISS-2.13 |
| P7.2 爭議處理 | OpenDispute |
SDD-003 §15 | POST /api/v1/disputes |
— |
| P2.3 重複入帳防範 | DetectDuplicatePosting |
SDD-003 §5 | 系統內部 | ISS-2.3 |
| P4.3 舊資料轉換 | RunMigration |
— | POST /api/v1/migration-jobs |
SYS-3 |
6. 資料流完整性檢核
| 檢核項 | 標準 |
|---|---|
| 每個處理程序有輸入與輸出 | 100% |
| 每個資料存放有寫入者與讀取者 | 100% |
| 無「黑洞」處理程序(有輸入無輸出) | 0 |
| 無「奇蹟」處理程序(有輸出無輸入) | 0 |
| 每個 L2 處理程序對應一個用例 | 100% |
| 每個用例對應一支 API 或排程 | 100% |