法人の支払依頼・承認・記帳を理解する
銀行v4の機能です。DB・API・画面を実装し隔離環境で検証しています。v4のVercel配置は未確認です。実在人物や実資金は使いません。
口座の所有者と操作する人
預金の所有者は法人です。個人は自分のIDでログインし、所属に応じて操作します。閲覧者は残高・明細、担当者は支払申請と実行、承認者は他者の支払の承認、法人管理者は所属・設定を管理します。銀行の審査担当者は別の役割です。
支払依頼→承認→出納実行→記帳→証跡確認
v3の直接振込に対し、v4は確認コードの入力後に承認待ちとなります。この時点で残高は動きません。別の承認者が口座番号・名義・金額・摘要・手数料を確認し、担当者が承認内容で実行します。画面の学習用OTPは、独立した第二要素認証でも業務承認でもありません。
画面→APIの認証・入力検証→DBの現行所属確認→法人・口座のロック→残高・状態・限度額の確認→複式仕訳→取引と監査、の順です。資金移動と成功記録を同時に確定し、失敗時は部分的な記帳を残しません。
承認内容と二重振込
出金口座・振込先・金額・手数料・摘要・申請者はDBで変更不可です。変更する場合は取消して新規申請します。成功済みの再実行は同じ取引を返し、否認・取消済みは実行できません。担当者や承認者の所属変更は既存の承認を失効させ、権限を再付与しても古い承認は復活しません。
法人全体の限度額
日本時間の日付で、全口座・全担当者の成功額を合算します。口座や担当者を分けても日次上限を回避できません。学習用の最大値は1件50万円、日次100万円、手数料0円。未実行・失敗・取消は枠を消費せず、逆仕訳でも使用済み枠を戻しません。残高・凍結・限度額は実行時にも再確認します。
設定にも二者確認
所属の追加・変更・再有効化と限度額変更は、法人管理者の申請を別の法人管理者が確認します。提案者と確認者は変更対象本人を兼ねられません。途中で権限や設定が変われば提案は失効します。所属の無効化は即時に効き、元申請者にも失効後の例外アクセスはありません。
新規登録は申請者だけで、管理者権限を自動付与しません。法人管理者0名の復旧、または1名から第2管理者を準備する初期追加に限り、異なる銀行管理者2名が確認します。2名以上なら法人内の通常経路を使います。この経路に承認者付与・上限変更・送金は含めません。
v4のデモ
- 法人利用で架空法人を登録・審査申請します。
- 銀行担当者の法人審査で承認し、銀行管理者2名で初期法人管理者を1名ずつ、合計2名準備します。
- 法人管理者が口座を開設。所属変更の申請・確認で担当者・承認者・閲覧者を登録し、銀行の既存入金操作で架空資金を記帳します。
- 担当者が10万円を申請しコードを入力。承認待ちでは残高が減らないことを確認します。
- 別の承認者が内容を承認し、担当者が実行。取引・仕訳IDと監査を確認します。
- 自己承認・未承認実行・取消後実行・失効後操作の拒否を確認します。
v5:指定日支払
担当者は申請時に日本時間の当日から90日先までの指定日を選べます。土日祝も扱う学習用の暦日で、実銀行の営業日ではありません。指定日は承認画面にも表示され、変更は取消と新規申請が必要です。
指定日になっても自動送金はせず、元の担当者が実行します。指定日前は旧API経由でも拒否します。残高は予約・拘束しないため、実行時に残高・凍結・権限・日次上限を再確認します。遅れて実行しても実際の実行日で記帳し、指定日へ遡及しません。
実装:supabase/migrations/20260914124821_corporate_value_date_product.sql、DB検証:scripts/banking/corporate.test.mjs。
日次運用・調査・移行
日次運用・調査は、DBが管理する一つの論理営業日を OPEN → EOD_RUNNING → EOD_REVIEW → CLOSED → BOD_RUNNING → 翌日のOPENへ進めます。EOD開始と同時に新しい金融更新をDB境界で止めますが、既存取引の本人向け結果照会は止めません。満期処理と照合が成功し、差異がない根拠を、EOD開始者とは別の銀行管理者が確認して初めて締められます。
日次処理は自動起動せず、失敗時も自動再送・別backendへの切替・逆仕訳をしません。記録済みの成功対象は再実行せず、失敗対象だけを管理者が明示的に再試行できます。失敗したEODを中止する場合も別担当者が行い、同じ営業日をOPENへ戻して原因を修正します。UTCのイベント時刻、日本時間の日次上限、法人の指定日、定期預金満期、論理営業日は混同しません。
v3の成功済み仕訳・取引・残高と既存管理者を維持し、未完了要求は監査付きで失効します。既存の銀行・法人権限重複は移行完了を拒否し、自動剥奪しません。全migration成功前に公開してはいけません。
実装と検証の根拠
- src/app/api/v1/corporate/route.ts:認証・入力・エラー境界
- supabase/migrations/20260914122440_corporate_approval_controls.sql:内容固定・承認・実行
- supabase/migrations/20260914122607_corporate_settings_dual_control.sql:設定二者確認・権限revision
- supabase/migrations/20260914123047_corporate_revocation_and_upgrade_guards.sql:失効後閲覧拒否・移行検査
- scripts/banking/corporate.test.mjs:DB正常・異常・並行テスト
- docs/delivery/evidence/v4:環境別証拠
教材(現在133教材)のURL・学習進捗・Learning Loop保存形式は、法人機能の追加で変更していません。実銀行接続・実本人確認・法令適合認証は対象外です。