銀行エンジニアリング 18:営業日・EOD・BOD — 銀行の1日の区切り
銀行システムには「今日は何日の業務か」という営業日(Business Date)があり、日の終わり(EOD)と始まり(BOD)に特別な手順があります。MiniBank v7の営業日管理と、v8以降の機能との関係を学びます。
v8以降に実装した台帳・記帳エンジンなどを実際に動かし、正常時と異常時の両方から銀行システムの構造を学ぶ。
Prerequisite: BANKING SYSTEMLEARNING GOALS
このページで学ぶこと
- Business Date とカレンダー日付の違い
- v7の営業日の状態とEOD/BOD
- 営業日外に記帳が止まる理由
PLAIN LANGUAGE
まず、ここだけつかむ
営業日(Business Date)は、取引をどの日の業務として扱うかを決める日付です。
v7の営業日は OPEN → EOD → CLOSED → BOD → 翌日の OPEN と進み、要所で独立した確認が入ります。
営業日が OPEN でない間は、v8以降の記帳も含めて金融操作が BD001 で止まります。
DIFFICULT PARTS, STEP BY STEP
難しいポイントを、順番にほどく
専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。
Business Date
業務上の日付です。
締め処理と取引の日付を一致させるためです。
ops.business_day_state.business_date。
EOD / BOD
日の終わりと始まりの処理です。
その日の数字を確定し、翌日を正しく始めるためです。
v7の営業日管理(start_eod・close・start_bod・open_next)。
Business Day Gate
営業日外の記帳を止める仕組みです。
締め中に数字が動かないようにするためです。
仕訳テーブルのトリガー ops.require_business_day_open。
Level 1 基礎:暦の日付と業務の日付
夜中の0時を過ぎても、銀行の中では前日の締め処理が続いていることがあります。取引をどの日の業務として扱うかを決めるのが営業日(Business Date)です。
Level 2 銀行業務:v7の営業日の状態
- 01OPEN(通常営業)
- 02EOD_RUNNING(日の終わりの処理中)
- 03EOD_REVIEW(結果の確認中)
- 04CLOSED(締め完了)
- 05BOD_RUNNING(翌日の開始処理)
- 06OPEN(営業日を1日進めて再開)
- EODの開始・中止、締め、BODの開始・翌日オープンは管理責任者が行い、締めと翌日オープンなどは開始した人とは別の人が行う(独立した確認)
- 締めには、日次処理の完了と、未解決の照合調査がないことが必要
- 営業日が OPEN でない間は、v7の金融操作は BD001 で拒否される
Level 3 システム:v8〜v11との関係
- v8のBusiness Eventと、すべての仕訳は同じ営業日ゲートを通るため、営業日が OPEN でない間は v8の記帳・v9の他行送金の受付・v10の仮受金なども BD001 で止まる(DBテストで確認)
- Operations Center の Core Banking は、営業日が OPEN でなければ AMBER になる
- v10の会計の日次締め(gl.daily_close)は、v7の営業日(EOD/BOD)とは独立した「会計の検査と記録」。両者を連動させる処理はMiniBankにはない
異常時:EOD中に未処理の取引が見つかった
| 段階 | 内容 |
|---|---|
| 症状 | EOD_REVIEW 中に、結果不明の他行送金や照合差異が見つかった |
| 判断 | 照合の調査が未解決のままでは v7 の締めは通らない。v10の会計締めでも補助元帳の差異は BLOCKED になる |
| 対応 | 調査を解決してから締める。日次処理が失敗・未開始の場合に限り、開始者とは別の管理責任者がEODを中止して OPEN に戻せる |
| 注意 | EOD中は新しい記帳ができないため、照会などで状態を進める操作も止まることがある |
Level 4 アーキテクチャ:1本のゲートで守る
営業日の判定を各機能に実装すると、新しい機能を追加したときに漏れが生じます。MiniBankは仕訳テーブルそのものにゲート(ops.require_business_day_open)を掛けているため、v8以降に追加した機能も自動的に同じ規則に従います。
どこを確認すればよいか
- 管理画面「日次処理・調査」(v7の営業日管理)
- Operations Center の Core Banking と EOD/Incident
CHECK YOUR UNDERSTANDING
3問で理解チェック
答えを頭の中で考えてから、各項目を開いて確認してください。
Q1EOD中にv9の他行送金を受け付けられますか?
受け付けられません(BD001)。
Q2v10の会計締めはv7のEODと連動していますか?
していません。独立した検査と記録です。
Q3EODを開始した本人が締めを完了できますか?
できません。別の管理責任者が行います。
完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。
SOURCE TRAIL
根拠と関連教材
CURRENT IMPLEMENTATIONは確認したrepository内の実装です。HISTORICAL IMPLEMENTATIONは導入・修正の履歴で、後続migrationによる再定義があり得ます。RELATED LESSONは教材への案内で、実装の一次Sourceではありません。ASSUMPTIONは仮定、UNKNOWNは未確認を表します。
確認基点: d02eae8914f39cbf06bfe422dc39c71886f82b3e / 2026-09-11。稼働環境への適用確認: UNKNOWN。パス実在の自動検査と、記述した技術的事実の確認は別です。
Implementation Status: IMPLEMENTED IN MINIBANK(この教材が扱うコードの範囲)
- RELATED LESSON/docs/be-closing会計の日次締め(v10)
- HISTORICAL IMPLEMENTATION
supabase/migrations/20260919103649_add_business_day_control.sqlv7の営業日管理(EOD/BOD)の導入 - CURRENT IMPLEMENTATION
scripts/banking/v12-operations.test.mjs例外・照合差異・承認キュー、追跡、インシデント、営業日外の停止のDBテスト