FSTS Stored Procedure 與批次作業規格書(Stage 6 Final)
本文件定義新一代複委託系統之資料庫 Stored Procedure、批次作業、日切控制、重跑機制與監控原則。1
重點不是只列程序名稱,而是將每一批次作業的輸入、處理邏輯、輸出、相依、失敗處置、重跑策略與驗收口徑制度化,確保交易、清算、帳務、公司行動與資料移轉在兩年內可穩定上線。1
平台前提:MSSQL + .NET Core / ASP.NET Core + UNIX / Linux 主機。1 文件定位:呈核/設計/開發/測試共同基線文件,供 SA / DBA / Batch / SIT / UAT / 維運共同使用。1
回到 Planning 總覽。
1. 文件適用與日切原則
| 項目 | 內容 |
|---|---|
| 涵蓋範圍 | 主資料、交易、成交、費率、入出金、清算、庫存損益、公司行動、報表、監控、資料移轉 |
| 主要對象 | SA、DBA、後端開發、批次開發、SRE/維運、QA、業務驗收窗口 |
| 日切原則 | 以「先收單、後成交、再清算、最後帳務與報表」為主軸,所有批次均須可追溯、可補跑、可比對 |
| 程序設計原則 | 嚴禁將業務規則散落於前端或單一背景程式;核心帳務、狀態轉換、交割計算與公司行動分派須集中於可版控之 DB Procedure / Batch Service |
2. 規格設計原則
- 程序分層:依 Schema 區分
master/trade/risk/settlement/corpaction/interface/audit/batch - 冪等性:所有批次與程序皆須支援重複執行而不產生重覆扣帳或重覆分派
- 可重跑:批次須分為 整批重跑/區間重跑/客戶別重跑/市場別重跑 四種粒度
- 效能基線:高頻交易收單與成交入帳採即時/準即時,清算與報表採批次
- 可稽核:每次執行均需寫入
batch.BATCH_JOB_LOG與audit.AUDIT_EVENT_LOG
3. Schema 與程序命名慣例
| Schema | 用途 | 代表物件範例 | 備註 |
|---|---|---|---|
master | 主資料與參數 | usp_SyncSecurityMaster、usp_LoadHolidayCalendar | 僅維護基礎主檔,不得直接寫帳 |
trade | 委託、成交、狀態轉換 | usp_SubmitOrder、usp_ApplyExecutionReport | 須支援高併發與狀態鎖定 |
risk | 可買可賣、額度、圈存 | usp_CalcBuyingPower、usp_FreezeCash | 供前台預檢與日終重算 |
settlement | 應收應付、交割、入出金 | usp_GenSettlementObligation、usp_PostCashMovement | 所有會計來源均由此域產出 |
corpaction | 除權息與公司行動 | usp_AllocateDividend、usp_ProcessMandatoryAction | 須保留權利基準日快照 |
interface | FIX/API/FTP/銀行等對外映射 | usp_MarkOutboundFile、usp_ImportBankStatement | 對外欄位不得污染核心表 |
batch | 批次控制與排程 | usp_StartBatchJob、usp_FinishBatchJob | 保存 RunId、重跑關聯與錯誤摘要 |
audit | 稽核與追蹤 | usp_WriteAuditEvent | 供參數異動與敏感交易追溯 |
4. 核心 Stored Procedure 清單(12 支)
| 編號 | Procedure | 功能 | 主要輸入 | 主要輸出 | 執行型態 |
|---|---|---|---|---|---|
| P-001 | master.usp_SyncSecurityMaster | 同步商品主檔與交易屬性 | 商品介接/行情主檔 | SECURITY_MASTER / SECURITY_MARKET_MAP | 每日盤前+手動 |
| P-002 | trade.usp_SubmitOrder | 建立委託並做前置檢核 | 委託 API/FIX 收單 | ORDER_HDR / ORDER_AUDIT | 即時 |
| P-003 | risk.usp_CalcBuyingPower | 計算可買額度與圈存需求 | 客戶、商品、匯率、費率 | 前置檢核結果 | 即時 |
| P-004 | risk.usp_FreezeCash | 建立現金圈存 | 委託單 | CASH_LEDGER / CASH_FREEZE | 即時 |
| P-005 | trade.usp_ApplyExecutionReport | 處理 FIX 成交/拒單/撤單回報 | Execution Report | ORDER_HDR / TRADE_EXECUTION | 即時 |
| P-006 | settlement.usp_GenSettlementObligation | 產生客戶/公司/上手應收應付 | 成交資料 | SETTLEMENT_OBLIGATION | 日內多次+日終 |
| P-007 | settlement.usp_PostCashMovement | 入出金與交割扣款入帳 | 銀行檔/交割指令 | CASH_LEDGER | 日內+日終 |
| P-008 | settlement.usp_RebuildPosition | 重算庫存、成本與損益 | 成交/公司行動 | POSITION_LOT / POSITION_SUMMARY | 日終 |
| P-009 | corpaction.usp_AllocateDividend | 現金股利/利息分派 | 公司行動主檔+權利快照 | CA_ENTITLEMENT / CASH_LEDGER | 事件驅動+日終 |
| P-010 | interface.usp_ImportBankStatement | 匯入銀行對帳與入金檔 | SFTP 檔案 | BANK_STMT / CASH_LEDGER | 日內排程 |
| P-011 | batch.usp_StartBatchJob | 批次啟動登記與鎖控 | JobName / BusinessDate | BATCH_JOB_LOG | 批次前 |
| P-012 | batch.usp_FinishBatchJob | 批次完成與摘要寫回 | RunId / 結果/錯誤數 | BATCH_JOB_LOG / BATCH_STEP_LOG | 批次後 |
4.1 核心 SP 的優先級與失敗處置
| SP | 重要性 | 優先序 | 失敗處置 |
|---|---|---|---|
P-002 usp_SubmitOrder | 核心 | P0 | 寫入批次/介接錯誤佇列,保留原始訊息與 Replay Key;不得直接丟棄 |
P-003 usp_CalcBuyingPower | 高 | P0 | 同上 |
P-005 usp_ApplyExecutionReport | 核心 | P0 | 同上 |
P-006 usp_GenSettlementObligation | 核心 | P0 | 同上 |
P-001 usp_SyncSecurityMaster | 高 | P1 | 同上 |
P-004 usp_FreezeCash | 高 | P1 | 同上 |
P-007 usp_PostCashMovement | 高 | P1 | 同上 |
P-008 usp_RebuildPosition | 核心 | P1 | 同上 |
5. 批次作業架構與日切 Runbook
| Job ID | 作業名稱 | 功能摘要 | 建議時段 | 交付結果 |
|---|---|---|---|---|
| B-01 | 主檔/基礎資料載入 | 載入假日、商品、匯率、費率、上手路由 | 04:30–06:00 | 當日基礎資料齊備 |
| B-02 | 盤前風控重算 | 重算額度、庫存快照、前日未交割款 | 06:00–07:00 | 可交易基線建立 |
| B-03 | 交易中對外介接監控 | FIX Session、銀行/FTP 到檔、API 健康檢 | 交易時段持續 | 異常即時告警 |
| B-04 | 日內成交與交割暫算 | 依市場分批計算應收應付與資金需求 | 每 30–60 分 | 降低日終壓力 |
| B-05 | 收盤後清算 | 彙整成交、費率、稅費、換匯與交割資料 | 依市場收盤後 | 結算主檔產生 |
| B-06 | 庫存與損益重建 | 重算 lot、平均成本、已實現/未實現損益 | 21:00–23:00 | 對帳與查詢基線 |
| B-07 | 公司行動處理 | 事件分派、通知、稅額、追補計算 | 日終/事件日 | 權益分派完成 |
| B-08 | 會計/報表拋送 | 總帳介接、公會/內控/營運報表 | 23:00–01:00 | 外部系統/管理報表完成 |
| B-09 | 備援與備份 | 資料庫備份、批次摘要封存、查核點建立 | 日終最後 | 可復原與可稽核 |
6. 程序設計模板(所有 SP 必備規格)
| 項目 | 內容 |
|---|---|
| 輸入參數 | BusinessDate、RunId、OperatorId、MarketCode、AccountNo、IsRerun、ReplayFrom 等 |
| 輸出參數 | ReturnCode、ErrorCode、AffectedCount、WarningCount、SummaryMessage |
| 交易控管 | 需明確定義 transaction scope;跨多表帳務必須使用顯性交易與例外回滾 |
| 鎖控策略 | 高頻收單採 row-level + optimistic check;日終批次以 partition / business date 範圍鎖控 |
| 冪等鍵 | 以 BusinessDate + Account + Market + TradeNo / EventNo 作為自然唯一識別 |
| 錯誤回傳 | 嚴禁只回傳 SQL 例外字串,必須映射為標準錯誤碼與分類 |
6.1 共通驗收重點
- 相同輸入重跑時不得造成重複入帳或重複分派
- 回傳碼、錯誤碼與影響筆數需完整落表
- 資料異常時須可依
RunId/BusinessDate/AccountNo追溯
6.2 關鍵 SP 處理步驟範例
P-002 trade.usp_SubmitOrder:5
- 建立收單追蹤碼與原始訊息封存
- 驗證客戶資格、商品可交易屬性、市場狀態、交易時段與幣別
- 呼叫
risk.usp_CalcBuyingPower試算可買可賣與圈存需求 - 寫入
ORDER_HDR/ORDER_AUDIT,狀態標示為NEW_PENDING - 送入對外路由佇列,等待 FIX / API 實際送單結果
P-005 trade.usp_ApplyExecutionReport:5
- 以
SenderComp/TargetComp/MsgSeqNum/ClOrdID/ExecID還原來源 - 依
OrdStatus/ExecType決定狀態轉換規則 - 新成交通知時建立
TRADE_EXECUTION,並更新累計成交量價 - 若撤單成功則釋放剩餘圈存或額度
- 寫入
audit與對外通知佇列
P-006 settlement.usp_GenSettlementObligation:5
- 以市場、帳戶、交割日彙總當日成交
- 套用客戶費率、上手費率、交易所費、稅費與匯率
- 分別產生客戶、公司、上手三層 obligation
- 建立可重跑快照與差異摘要
- 供交割、對帳、會計與報表共用
P-008 settlement.usp_RebuildPosition:5
- 依成交與公司行動時間序重新展開 lot
- 計算平均成本、已實現與未實現損益
- 寫入
POSITION_LOT與POSITION_SUMMARY - 產出與前版快照差異,用於平行測試比對
7. 批次失敗處置與重跑策略矩陣
| 場景 | 允許重跑粒度 | 前置條件 | 風險控制 | 最終確認 |
|---|---|---|---|---|
| 商品主檔同步失敗 | 整批/市場別 | 來源檔重新驗證完成 | 以 hash 比對避免重覆更新 | 同步摘要一致 |
| FIX 成交回報漏接 | 訊息級 Replay | 取得 SeqNum 區間 | 依 ExecID 冪等檢查 | 成交總量一致 |
| 清算計算異常 | 整批/帳戶別/市場別 | 前次結果可回滾 | 先封鎖會計與報表下游 | obligation 差異為 0 |
| 公司行動分派錯誤 | 事件別/帳戶別 | 權利快照鎖定 | 補正分錄與追補通知 | 權益數與現金分派一致 |
| 資料移轉對帳差異 | 批次/資料域 | 差異原因分類完成 | 不得直接人工改核心表 | 對帳報表簽認 |
8. 效能與營運門檻
- 日內高頻程序需提供平均耗時、95/99 百分位耗時與錯誤率監控
- 所有日終批次需提供開始時間、結束時間、影響筆數、重跑次數與失敗原因分類
- 關鍵程序需預留分區鍵、覆蓋索引與批次日期條件,以避免全表掃描
- 批次服務與資料庫程序版本需雙向對應,嚴禁『程式版與 DB 版不同步』
9. Review 結論
本文件已將批次與 Stored Procedure 從「只列作業名單」提升為「可設計、可分工、可驗收、可維運」的規格基線。
若要真正上線成功,後續必須以此文件對齊三件事:
- 批次順序不得被畫面需求打亂
- 核心帳務與公司行動不得繞過標準程序直接改表
- 所有重跑都必須保留
RunId與前後差異快照
相關頁面
- 邏輯模型:邏輯資料模型(
TRD_ORDER、STL_*、FEE_CHARGE) - 物理 DDL:實體資料表 DDL(schema 分域對應)
- API/FIX:API/FIX Message Mapping(P-002、P-005 的輸入來源)
- 介接規格:介接規格書(P-010 的 SFTP 規範)
- 資料移轉:資料移轉計畫(§7 場景 5)
- 測試案例:測試案例書(SIT-ACC-001、SIT-CA-001)
- 驗收矩陣:驗收矩陣
- Cutover:Cutover Runbook(§日切排程對齊)
補充資訊
2026-04-23 呈核版確認(不帶編號前綴)
- 本頁內容與呈核版(
_raw/projects/fsts/docs/project/planning/富邦證券_新一代複委託系統_StoredProcedure與批次作業規格書.md,不帶編號前綴)同步對齊11 - 呈核版為相同來源的精簡呈核格式,正文排版更乾淨但結構、Schema 分工、核心 12 支 SP、9 個日切批次、重跑矩陣、效能門檻完全一致121314
- 呈核版 §六 明列所有 SP 必備規格欄位(
BusinessDate/RunId/OperatorId/MarketCode/AccountNo/IsRerun/ReplayFrom等),與 19 版一致15 - 呈核版 §九 Review 結論亦同「批次順序不得被畫面需求打亂;核心帳務不得繞過標準程序直接改表;重跑必須保留 RunId 與前後差異快照」三要件16
參考資料
呈核版(不帶編號前綴):