BOD/SOD 的作業主要有哪些呢?

By 無名 (not verified) , 24 April 2013

想知道一下, BOD/SOD 的作業主要有哪些呢?
若遇到颱風臨時停班, 有哪些作業需要被ROLLBACK 的呢?

討論主題類別

Tags

交換票存入時通常己計入帳戶餘額(實際可用餘頟並未包括交換票金額),次營業日退票交換后帳戶餘額=實際可用餘額,如果次營業日臨時改變成非營業日,當天的取款金額仍然不可以>實際可用餘額十交換票金額,所有諸如此頰-營業日前就計入帳戶的預先交易,碰到臨時假日,都要考慮這個問題。
至於BOD,SOD代表的字義是什麼,恕在下才疏學淺,倒要請教。
由於接到站長來信,希望我幫忙回答,不得已只好硬著頭皮,勉強為之。

站長告訴我他認為是begin of day/start of day,我想他是對的。中心處理的交易通常換日即入帳戶,換日后臨時宣布假日,己經資金化的交易應該取消,但是此時可能金額己被客戶領走導致取消交易無法完成,此時則應臨櫃交易中提醒櫃員注意(有些縣市未放假)。

以台灣銀行業的資訊作業環境來看,BOD(Beginning of Day,日初作業)與 SOD(Start of Day,營業日啟動作業)是核心銀行系統(Core Banking System)每日批次與營業日切換的門檻。

政府宣布停班,但批次作業已經啟動,甚至部分已經完成,此時真正要回答的問題是:

  1. 系統目前處於哪一個營業日(Business Date)?
  2. 哪些批次已經完成,哪些尚未完成?
  3. 哪些交易已經產生不可逆的外部影響?
  4. 如何確保帳務、清算、通匯及客戶交易的一致性?
  5. 停班日要維持原營業日,還是切換至下一個營業日?

此處以傳統核心銀行主機、批次處理、日終/日初流程為背景說明。各銀行的實際作業名稱及順序可能不同,BOD 與 SOD 也不一定是同一個流程。

一、BOD 與 SOD:日初到底在跑什麼

BOD 通常指核心系統進入新營業日的日初批次;SOD 則可能是 BOD 的同義詞,也可能是涵蓋更多系統、通路與營運準備工作的「營業日啟動流程」。不同核心系統的定義不一致,這一點值得先說清楚。

以 Oracle FLEXCUBE 為例,官方文件明確定義:BOD 開啟銀行的新交易日,且 BOD 依賴前一營業日的 EOD——前一日 EOD 未完成,系統不允許啟動 BOD(Oracle FLEXCUBE System Operations User Manual)。這道閘門,正是颱風情境下最常見的決策點。

1.1 核心系統的 BOD 作業

FLEXCUBE 的日初作業處理定存利息與到期、未領存款、常設指示(Standing Instruction)執行、支票價值日(Value Date)處理、薪資處理及透支額度到期等項目(Oracle FLEXCUBE System Operations User Manual)。擴充到一般核心銀行系統,常見作業如下:

作業類別主要作業內容
營業日切換Business Date Roll、營業日曆檢核、開啟新營業日
存款業務定存到期、續存、到期解約、利息入帳
放款業務貸款到期、還款排程、利率調整、逾期狀態更新
自動轉帳Standing Instruction、預約轉帳、自動扣款
客戶與帳戶狀態帳戶狀態更新、額度到期、靜止戶(Dormant Account)處理
費用及利息手續費計算、利息計算或入帳、罰息處理
支票及票據支票價值日、到期票據及相關清算作業
批次及介面前置批次、外部系統介面、交易佇列釋放
系統初始化分行營業狀態、交易日期、通路營業旗標初始化
控制作業批次狀態檢核、控制總額(Control Total)、例外交易檢核

以上是常見的作業類型,不代表每一項都放在 BOD。部分銀行在 EOD 執行利息計算、手續費計算及總帳(GL)更新,BOD 則負責到期處理、交易日期切換及新營業日啟動。FLEXCUBE 甚至允許透過 Automatic Process Definition 設定每個批次在 EOD、BOD 或兩者觸發(Oracle FLEXCUBE Universal Banking)——從架構角度來看,「BOD 做什麼」本身就是銀行設計出來的,而非系統天生的固定邊界。

1.2 SOD 涵蓋的周邊作業

若 SOD 指整個銀行資訊環境的營業日啟動流程,通常還包括:

系統SOD 作業
Core Banking營業日切換、帳戶狀態更新
ATM/CDM營業日更新、交易佇列處理
Internet Banking/Mobile Banking營業日旗標更新、服務開放
Payment/Clearing清算日更新、待處理交易釋放
Card System卡片交易日、授權與清算批次
GL/Accounting總帳營業日更新、科目及控制資料初始化
Reporting日報、營業日報表、監控資料更新

SOD 不應視為單一 Job。它很可能是由多個系統的依賴關係串接而成的 Job Chain——核心系統 BOD 完成,不代表所有周邊系統都已完成營業日啟動。

二、停班日的真實邊界:系統其實是「半開半關」

談 Rollback 之前,得先知道停班日銀行的哪些環節還在動。這在台灣有明確的法規與實務脈絡。

依金管會「金融機構營業時間及遇天然災害發生時停止營業作業」規定,直轄市、縣市政府宣布全日停止上班時,當地金融機構全日停止對外營業;票據交換及退票紀錄作業依中央銀行規定辦理(金管會法規)。但「停止對外營業」不等於「系統停止運作」:

  • 央行於颱風日照常運作國際金融交易及交割,並主動提供銀行外幣資金——因為國際市場不因台灣放颱風假而休市(經濟日報)。
  • 財金公司跨行清算與 ATM 服務照常運作,央行並要求確保 ATM 提領順暢(中央銀行)。
  • 金管會明確鼓勵民眾於颱風期間透過自動化設備及電子銀行(網路銀行、行動銀行、語音銀行)進行金融交易(金管會新聞)。

銀行實際怎麼做?以中國信託公開說明為例:自動扣款(含基金定期定額、房貸自動扣繳)照常執行入帳;但證券交割款扣款會作回沖交易,遞延至次一營業日扣款;跨行匯款對停班縣市暫停受理,若台北市停班,預約當日匯款順延至次一營業日執行(中國信託)。

同一個停班日,同一家銀行:自動扣款照跑、證券款回沖、匯款順延。這反映出真正的主題——停班日銀行系統是「半開半關」的,哪些作業該停、哪些照常,是營運決策逐項裁定的結果,不存在單一的技術開關。央行對退票的處理也印證同一套邏輯:存款不足退票只要在次一營業日完成重提付訖、贖回或提存備付註記,就不列入退票紀錄(經濟日報)——制度設計本身就是「順延至次一營業日、事後補救」,而非「回復原狀」。

三、Rollback 不是資料庫問題:先問狀態,再談回復

假設銀行原訂 11 月 9 日(星期一)為營業日,因颱風宣布停止上班,而系統在前一晚已完成 EOD,甚至啟動了 11 月 9 日的 BOD。此時會出現三種情況:

  • EOD 已完成,BOD 尚未啟動——最單純,決策空間最大。
  • BOD 已啟動,部分批次尚未完成——需要盤點,最考驗 Runbook 品質。
  • BOD 已完成,部分系統甚至已開始接受新營業日交易——最棘手,回復成本最高。

Rollback 的範圍應由營業日狀態、批次執行狀態及交易的外部影響決定,而不是單純依照政府是否宣布停班。

3.1 三種情境的處理原則

情境處理強度原則
A. BOD/SOD 尚未啟動通常不需 Rollback僅完成前一營業日 EOD,可依營業日曆及營運決策暫停 BOD,保留原 Business Date
B. 已啟動但未完成視情況處理先判斷批次執行狀態;可重啟的批次依 Runbook 執行 Restart/Resume;已產生部分帳務異動者,確認是否需 Reverse、補償或重新執行
C. BOD 已完成且有新營業日交易高度審慎不能直接將系統回復至前一營業日;先盤點交易、清算、帳務及外部系統影響,必要時走正式的交易沖正、補償或營業日調整程序

3.2 Rollback 不等於 Database Rollback

對銀行而言,交易一旦 Commit、產生正式帳務或送交外部系統,就已超出資料庫 Transaction 的可回復範圍:

  • 核心系統已扣款
  • 交易已送交財金公司
  • 外部清算系統已接受交易

客戶已收到簡訊通知 GL 已完成過帳

此時即使核心系統能把某個批次的資料回復,外部系統、客戶帳務及總帳也不會自動回復一致。對已完成的金融交易,通常要走正式的沖正(Reversal)或補償交易(Compensating Transaction),而不是直接刪除或回復資料庫紀錄;批次重新執行也必須避免重複產生帳務。

3.3 三種技術手段,對應三種狀態

Rollback:回復尚未完成的資料庫交易。適用於 Batch Job 尚未 Commit、可依 Transaction Log 回復的異動:

BOD_JOB_001

  1. Update Account Status
  2. Update Interest
  3. Commit ← 異常發生在 Commit 之前

但若 BOD 採每個帳戶或每個批次區段分別 Commit,就不能假設整個 BOD 可一次回復。

Restart/Resume:從失敗的批次階段繼續。適用於已完成部分處理、有明確執行紀錄、具備 Restart Point 或 Checkpoint、且重跑不會重複入帳的設計:

BOD

  • Job 01: Business Date Initialization  COMPLETED
  • Job 02: TD Maturity Processing   COMPLETED
  • Job 03: Standing Instruction     FAILED
  • Job 04: Account Status Update    NOT STARTED

此時應先確認 Job 03 的失敗原因及是否已產生部分帳務。若具備安全的 Restart 機制,可能只需從 Job 03 重跑,而不是把 Job 01、02 全部回復。FLEXCUBE 等核心系統就是依各批次的前後依賴關係及執行狀態管理 BOD/EOD(Oracle FLEXCUBE System Operations User Manual)。

Reverse/Compensating Transaction:沖正已完成的金融交易。適用於已 Commit、已送交外部系統、已產生客戶或清算影響的交易:

Original Transaction

  1. Debit Customer Account
  2. Credit Clearing Account
  3. Send to Clearing System

若決定不執行該營業日的相關交易,可能需要沖正、對帳、再以調整後的營業日重新處理。但不是每筆交易都要沖正——若交易本身合法,只是營業日因颱風延後,保留原交易、依銀行核准的 Value Date、Posting Date 或清算日調整程序處理即可。前述中國信託對證券交割款的回沖交易,就是這類補償機制的實際案例(中國信託)。

值得注意的是,成熟的核心系統本來就假設「分行不開門」是常態。FLEXCUBE 對分行不可用(Branch Not Available)的狀態有原生支援:交易以 Tanked 狀態暫存、帳務先記錄,待分行恢復可用後由 BOD 批次釋放(Un-tanked)(Oracle FLEXCUBE Universal Banking)。換言之,颱風停班不必然觸發回復——若系統與營業日曆設計得當,「暫存、順延、次一營業日釋放」原本就是選項之一。

四、Rollback Matrix:資訊與營運單位的考量

作業階段停班決策技術處理
EOD 尚未開始停止當日 EOD保留原營業日,暫停後續批次
EOD 執行中評估是否中止依 Job 狀態執行 Restart/Resume
EOD 已完成延後 BOD保留前一營業日的完成狀態
BOD 尚未開始不啟動新營業日暫停 Business Date Roll
BOD 執行中停止後續批次檢查已完成批次、帳務及介面狀態
BOD 部分完成依批次設計處理Restart/Resume 或正式沖正
BOD 已完成評估是否維持新營業日進行帳務、清算、通路及交易對帳
新營業日交易已發生不直接回復整個系統依核准程序執行交易沖正或營業日調整

重要前提:颱風停班不代表 Business Date 必須維持不變。銀行可能有不同的營運安排:

  • 分行停止營業,但電子金融服務維持運作(金管會鼓勵的方向)
  • 部分清算服務仍依既定時程運作(ATM 跨行、央行國際金融)
  • 營業日延後,但電子通路仍接受交易
  • 維持原定營業日,只是分行不對外營業

這些情境直接決定哪些 BOD/SOD 作業應停止、哪些照常、哪些交易延後處理。

五、風險考驗

重複入帳(Duplicate Posting)。若 BOD 已完成部分定存到期或自動轉帳,重新執行時必須避免再次產生相同交易。Restart 點的設計品質,決定了颱風夜是加班兩小時還是通宵對帳。

營業日與價值日不一致(Business Date/Value Date Mismatch)。若系統已切換營業日,但銀行決定延後營業日,必須逐一確認 Business Date、Posting Date、Value Date、Transaction Date、Clearing Date 是否符合銀行核准的處理規則。不能把系統日期往回改,就以為問題解決了。

核心系統與外部系統不一致(Cross-System Inconsistency)。核心已扣款但清算未完成、交易已送出但回應未收到——先確認交易實際狀態,再決定重送、沖正或等待,而不是盲目重跑。

因此:

  • Rollback 的範圍由營業日狀態與外部影響決定,與停班宣布本身無關
  • 資料庫回復、批次重跑、交易沖正是三種不同的手段,對應三種不同的狀態
  • 停班日的系統是半開半關的,營業日去留是營運決策,先決策、後動手
  • 「暫存、順延、次一營業日釋放」往往比「回復原狀」更貼近制度設計的本意

所以, 決策者是否知道系統此刻站在哪一天。