v1.0.0 の歴史資料当時の説明です。現在の仕様とは異なる箇所があります。現行版の対応記事 →資料一覧へ

DEEP GUIDE 01

本人確認の申請から審査まで

顧客の申請と管理者の審査を、状態の変化として追う。

このガイドで追う一件

未確認の顧客が本人確認を申請し、管理者が承認する一件を考えます。申請をもう一度押した場合と、承認済みの顧客が再申請した場合も比べます。

コードを読む順番

以下は MiniBank v1.0.0 の確認先です。マイグレーションは順に適用されるため、関数の最終形を調べるときは後続の変更も確認してください。

  1. 1

    顧客が申請する

    顧客向け API はログイン中の利用者を確認し、CustomerService の submitKycApplication を呼びます。画面のボタンだけで状態を決めず、サーバー側へ渡します。

    確認するファイルsrc/app/api/v1/customers/me/kyc-submit/route.ts

  2. 2

    状態を pending に移す

    submit_kyc_application は顧客行をロックし、not_started または rejected から pending へ移します。既に pending なら同じ行を返すため、応答が失われた後の再送でも申請を増やしません。

    確認するファイルsupabase/migrations/20260822090001_create_submit_kyc_application_function.sql

  3. 3

    管理者が審査する

    承認 API は Origin、管理者セッション、対象 ID、冪等性キーを確かめてから approveKyc を呼びます。申請者自身が承認できる経路にはしません。

    確認するファイルsrc/app/api/v1/admin/kyc/[customerId]/approve/route.ts

  4. 4

    遷移の前提を確かめる

    管理者の審査は pending を起点とするよう制限されています。画面に見えた状態が古くても、確定時の状態を基準に判断します。

    確認するファイルsupabase/migrations/20260822090002_restrict_kyc_review_to_pending.sql

失敗時・範囲外の確認

既に verified の顧客による再申請は拒否されます。審査の途中で状態が変わった場合も、古い画面表示だけで承認できないことが重要です。外部の本人確認事業者との照合は、この題材の範囲外です。

ここまでで説明できること

本人確認を「画面上のチェック」ではなく、権限を持つ人だけが動かせる状態遷移として説明できます。