銀行エンジニアリング 24:融資の基本 — 申込・審査・決裁・実行は別の出来事
融資の申込は、お金を動かしません。人が審査し、別の人が決裁し、さらに実行して初めて貸付金と預金が同時に増えます。MiniBank v14の個人向け学習用融資で、その区切りを確かめます。
v8以降に実装した台帳・記帳エンジンなどを実際に動かし、正常時と異常時の両方から銀行システムの構造を学ぶ。
Prerequisite: BANKING SYSTEMLEARNING GOALS
このページで学ぶこと
- 申込・審査・決裁・実行を分ける理由
- 提案した人が決裁できない仕組み
- 実行の直前に確認すること
PLAIN LANGUAGE
まず、ここだけつかむ
融資の申込は、お金を動かしません。審査・決裁・実行は別の記録です。
提案した人は決裁できず、実行の直前に承認の有効性と担当者の権限を確かめ直します。
実行すると、貸付金(資産)と顧客預金(負債)が1つの仕訳で同時に増えます。
DIFFICULT PARTS, STEP BY STEP
難しいポイントを、順番にほどく
専門用語を覚えることより、「なぜ必要か」「このシステムのどこで使うか」を理解することが目標です。
Maker / Checker
提案する人と決裁する人を分ける仕組みです。
1人の誤りや不正で融資が実行されないようにするためです。
lending.propose と lending.decide。同じ人は LN013。
承認の有効性
承認は期限と前提が変わると使えなくなることです。
承認後に状況が変わっても、古い承認で実行しないためです。
14日の期限、revision、権限の再確認(LN012・LN014)。
申込と実行の分離
申込・承認では資金を動かさず、実行で初めて計上することです。
資金の確定を1か所にして、二重実行を防ぐためです。
lending.disburse が貸付金と預金を同じ仕訳で計上。
Level 1 基礎:貸すと、銀行の資産と預金が同時に増える
顧客へお金を貸すと、銀行には「返してもらう権利」(貸付金という資産)が生まれ、同時に顧客の預金(銀行の負債)が同じ額だけ増えます。お金が金庫から出ていくのではなく、帳簿の両側が同時に増えます。
だから融資は、申込を受けた時点では何も起きません。実行したときに初めて貸付金と預金が計上されます。MiniBankでは、申込・審査・決裁・実行がそれぞれ別の記録になります。
- 01申込(SUBMITTED):お金は動かない
- 02審査の提案(UNDER_REVIEW):担当者が根拠を確認
- 03決裁(APPROVED):別の管理責任者が承認。まだお金は動かない
- 04実行(DISBURSED):貸付金と預金を同時に計上
Level 2 銀行業務:誰が何をできるか(職務の分離)
顧客に見えるのは状態だけです。審査の根拠や内部の判断理由は、顧客向けの画面にも API にも出ません。
| 役割 | できること | できないこと |
|---|---|---|
| 申込人(顧客) | 自分の申込・契約の参照、申込、取下げ、本人資金での返済 | 他人の申込の参照、審査、実行 |
| maker(審査の担当) | 審査を引き受け(claim)、根拠を確認して承認または否決を提案 | 自分の提案の決裁、融資の実行 |
| checker(管理責任者) | 別の人の提案を承認または否決、承認済みの融資を実行 | 自分が提案した・担当した案件の決裁 |
| 管理責任者(分類) | 延滞の分類を提案。別の管理責任者が確認 | 自分だけで分類を確定 |
Level 3 システム:MiniBankでの実装
- lending.claim → lending.propose → lending.decide → lending.disburse の順に進む。各段階で、その時点で有効な権限をDBが確認する
- 提案には revision が付く。決裁は「表示した revision」を指定し、その後に提案が変わっていれば LN014 で拒否される
- 提案者・claim した人が決裁しようとすると LN013。権限(operator か admin_manager か)の検査とは別に、人の同一性もDBが見る
- 承認の有効期限は承認日から14日(営業日)。期限切れ・無効化・決裁者や担当者の権限失効があれば、実行は LN012 で拒否される
- 実行は貸付金(LOAN_RECEIVABLE、GL 1300)を借方、顧客預金を貸方に1つの仕訳で計上し、同時に契約と12回分の返済予定を作る
- 同じ冪等キーの再送は元の結果、別の内容や別の担当者なら LN009、実行済みの申込への別キーの実行は LN019
異常時:承認したあとで担当者の権限がなくなった
| 段階 | 内容 |
|---|---|
| 症状 | 承認済みの融資を実行しようとすると LN012 で拒否される |
| 原因 | 決裁者または審査担当者の権限が、承認後に失効した(または承認が無効化された・期限が切れた) |
| 確認 | 仕訳は1行もない。申込は APPROVED のまま、契約はまだない |
| 対応 | 管理責任者が承認を無効にして申込を審査待ち(担当者なし)に戻し、有効な担当者で提案と決裁をやり直す(revision が進み、古い承認は使えない)。担当者が権限を失った審査中の案件も、同じ操作で戻せる |
Level 4 アーキテクチャ:承認は許可であって、資金移動ではない
承認を「お金を動かした」と同じに扱うと、承認のあとに状況が変わったとき(口座の凍結、権限の失効、商品の見直し)に危険です。MiniBankは承認と実行を別の記録にし、実行の瞬間に条件を全部確かめ直します。貸付金と顧客預金は、Posting Engineの1つの仕訳として同時に計上されます。
どこを確認すればよいか
- 顧客画面「ローン」:申込と状態(審査待ち → 承認済み → 融資実行済み)
- 管理画面「融資・与信」:申込と審査、提案、決裁、実行
- 運用センター:決裁待ち・実行待ちのキュー
CHECK YOUR UNDERSTANDING
3問で理解チェック
答えを頭の中で考えてから、各項目を開いて確認してください。
Q1融資を申し込むと口座残高は増えますか?
増えません。実行されるまでお金は動きません。
Q2提案者が自分で決裁しようとするとどうなりますか?
LN013 で拒否されます。権限があっても、人の同一性をDBが見ます。
Q3承認のあとで決裁者の権限が失効したら、実行できますか?
できません。実行の直前に権限を確かめ直し、LN012 で拒否されます。
完全に暗記する必要はありません。大切な考え方を説明できそうなら押してください。
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/loans融資審査と債権管理の一般的な考え方
- RELATED LESSON/docs/be-posting-engine仕訳を作る入口(v8)
- CURRENT IMPLEMENTATION
supabase/migrations/20260930100000_v14_lending.sqllending.claim / lending.propose / lending.decide / lending.invalidate審査の担当・提案・決裁・承認の無効化(提案者と決裁者は別の人) - CURRENT IMPLEMENTATION
supabase/migrations/20260930100000_v14_lending.sqllending.disburse / lending.apply申込と融資の実行(貸付金と預金を1つの仕訳で計上) - CURRENT IMPLEMENTATION
scripts/banking/v14-lending.test.mjs審査・決裁・実行・利息・返済・延滞・分類・訂正・競合・権限のDBテスト