第 6 章 / 全 27 章
顧客管理と個人情報保護
顧客管理 は加盟店ごとの顧客マスタ(Customer)と保存されたカード情報(PaymentToken)を扱う画面です。あわせて、管理画面全体での 個人情報のマスク表示・解除の記録・保持期間による匿名化 の仕組みを説明します。
顧客マスタ
| 項目 | 説明 |
|---|---|
| ユーザーID | 加盟店側の顧客ID(取引の「ユーザーID」)。加盟店 × ユーザーID で 1 件 |
| 氏名 / メール / 電話 | 取引作成時の値で自動作成・更新されます(電話は API / 加盟店側の登録用) |
| 保存されたカード | 取引時のカード(ブランド・下 4 桁・有効期限・不正検知用ハッシュ)。カード番号そのものは保存しません |
| 取引履歴 | 顧客に紐づく取引(Payment.customerRef) |
| 匿名化 | 保持期間経過またはマスターの手動操作で個人情報を消去した状態 |
- 取引は
POST /api/payments/ 決済リンク / 定期課金 / 公開 API のいずれで作られても、加盟店IDとユーザーIDから顧客に紐づきます - 既存の取引は seed 時(および
npm run db:link-customers)の 冪等なバックフィル で顧客に紐づけます - 横断検索(Ctrl+K)は顧客(ユーザーID・氏名・メール)も対象です
マスク表示
管理画面(PSP 側)では個人情報を次の形で表示します。
| 種類 | 表示 |
|---|---|
| 氏名 | 姓のみ(山田 **) |
| メール | 先頭 2 文字 + ***@ドメイン(ta***@example.com) |
| 電話 | 下 4 桁のみ(***-****-5678) |
| 接続元 IP | 第 4 オクテットをマスク(203.0.113.***) |
- 対象: 取引一覧 / 詳細、定期課金、未消込入金、メール送信ログ、横断検索、顧客一覧、操作ログの変更前後(保存時点でマスク)
- マスク解除(admin / cs): 詳細画面の「マスク解除」で実値を表示します。1 回ごとに操作ログ
pii.unmask(対象・項目)が記録されます - CSV 出力: 全体設定「CSV の個人情報」が「マスク」なら全ロールでマスク値、「フル」なら admin / accounting のみ実値を出力します
- 加盟店管理画面 では自社の顧客データはマスクせずに表示します(加盟店自身のデータのため)
保持期間と匿名化
- 全体設定の 個人情報の保持期間(か月、既定 24) を最終取引から過ぎた顧客は、日次 cron(
/api/cron/anonymize、JST 4:00)が匿名化します: 氏名・メール・電話を消去、紐づく取引の氏名・メール・接続元 IP・カード識別情報を消去、保存されたカードトークンを削除。金額・ステータスなど帳簿情報は残ります - 顧客に紐づかない古い取引(加盟店やユーザーIDの無いもの)も同じ基準で個人情報を消去します
- 実行結果は 匿名化バッチ(顧客管理 → 匿名化バッチタブ)と操作ログ
pii.anonymize_batch、通知センター(pii.anonymized、admin)に記録されます - 操作ログの保持期間(年、既定 7) を過ぎた操作ログは同じ cron が削除し、
audit_log.pruneとして記録します - 手動匿名化(admin): 顧客詳細の「匿名化する」から理由を入力して実行します。操作ログ
pii.anonymizeに理由が残ります。元に戻せません。匿名化された顧客が再び取引すると、新しいデータで保持期間が再開します
権限
| 操作 | ロール |
|---|---|
| 顧客の閲覧(マスク) | 全員 |
| マスク解除 | admin / cs |
| 手動匿名化 | admin |
| 保持期間・CSV 設定 | admin(全体設定) |