コンテンツにスキップ

顧客詳細・メモ・タグ

Document ID: SRS-CUS-002 Parent: SRS-ROOT-001 v0.5 Version: 0.2 Status: Implemented (API + Web UI 最小) Last Updated: 2026-05-06 Depends on: SRS-CUS-001 v0.2, SRS-TEN-002 v0.2, SRS-TEN-003 v0.2, SRS-MST-001 v0.6 依存される: SRS-RES-002 v0.5

本書は SRS-ROOT-001 v0.5 に従う。


顧客詳細画面で基本情報の閲覧・更新、メモ追加、タグ付与、論理削除を扱う。

Phase 1 のメモ type は memo のみ、タグは 8 色プリセット、bulk apply は不採用。


  • As a 店長, I want to 顧客の基本情報を詳細画面で更新したい, so that 連絡先や指名情報を保てる
  • As a スタッフ, I want to 顧客メモを残したい, so that 次回来店時の接客に活かせる
  • As a 受付, I want to 顧客にタグを付けたい, so that 検索や注意喚起に使える
  • As a 店長, I want to 顧客を論理削除したい, so that 退会対応と法的保持を両立できる

  1. 顧客一覧から顧客詳細を開く
  2. 基本情報を編集して保存する
  3. メモ欄に memo を追記する
  4. タグを新規作成または既存から付与する
  5. 必要に応じて顧客を論理削除する
  • AF-1 メモ編集者は作成者でなくてもよい
  • AF-2 archived タグは新規付与候補に出さないが、既存顧客への表示は残す
  • AF-3 削除した note は 7 日以内なら restore 可能(UI は Phase 2 で公開)
  • AF-4 顧客の物理削除は cleanup-deleted-customers-for-store ジョブが 90 日後に実行(SRS-WRK-001)
  • EF-1 archived tag と同名 tag の新規作成: 409 CUSTOMER_TAG.NAME_CONFLICT
  • EF-2 note 空文字: 422 CUSTOMER_NOTE.INPUT_INVALID
  • EF-3 既に削除済み顧客への note 追加: 422 CUSTOMER.DELETED
  • EF-4 タグ未存在: 404
  • EF-5 他店舗 tag を付与: 404

  • 基本情報カード
  • タグ一覧と付与フォーム
  • メモ時系列
  • 予約一覧サマリ
  • 論理削除ボタン
  • note body: 1..5000
  • tag name: 1..50
  • tag color: 8 色 enum
  • detail update は CUS-001 と同一入力ルール

MethodPath用途permission
GET/api/admin/customers/{id}詳細取得admin:customer:read
PATCH/api/admin/customers/{id}基本情報更新admin:customer:update
DELETE/api/admin/customers/{id}論理削除admin:customer:update
GET/api/admin/customers/{id}/notesnote 一覧admin:customer:read
POST/api/admin/customers/{id}/notesnote 作成admin:customer:update
PATCH/api/admin/customers/{id}/notes/{noteId}note 更新admin:customer:update
DELETE/api/admin/customers/{id}/notes/{noteId}note 論理削除admin:customer:update
POST/api/admin/customers/{id}/notes/{noteId}/restorenote 復元admin:customer:update
GET/api/admin/customer-tagstag 一覧admin:customer:read
POST/api/admin/customer-tagstag 作成admin:customer:update
PATCH/api/admin/customer-tags/{tagId}tag 更新admin:customer:update
POST/api/admin/customers/{id}/tags/{tagId}tag 付与admin:customer:update
DELETE/api/admin/customers/{id}/tags/{tagId}tag 解除admin:customer:update

Phase 1 では admin:customer:update 1 個に集約(細分化は Phase 2 OQ)。

customer_note:

  • id
  • type: 'memo'
  • body
  • author_operator_id NULL 許容
  • created_at, updated_at, deleted_at

customer_tag:

  • id, name, color, is_archived

tag color enum: slate | red | orange | amber | green | teal | blue | pink

  • CUSTOMER.DELETED
  • CUSTOMER_NOTE.INPUT_INVALID
  • CUSTOMER_NOTE.RESTORE_WINDOW_EXPIRED
  • CUSTOMER_TAG.NAME_CONFLICT
  • CUSTOMER_TAG.ARCHIVED

カラム制約
iduuidPK
store_iduuidNOT NULL, FK
customer_iduuidNOT NULL, 複合 FK
typevarchar(20)NOT NULL DEFAULT ‘memo’, CHECK = 'memo'
bodytextNOT NULL, CHECK btrim(body) <> ''
author_operator_iduuidNULL, FK → operator(id)(TEN-002 後に有効)
created_attimestamptzNOT NULL
updated_attimestamptzNOT NULL
deleted_attimestamptzNULL
制約UNIQUE(store_id, id)
カラム制約
iduuidPK
store_iduuidNOT NULL, FK
namevarchar(50)NOT NULL, CHECK btrim(name) <> ''
colorvarchar(20)NOT NULL, CHECK IN (8 colors)
is_archivedbooleanNOT NULL DEFAULT false
created_at, updated_attimestamptzNOT NULL
制約UNIQUE(store_id, id)
制約UNIQUE(store_id, name)
カラム制約
store_iduuidNOT NULL
customer_iduuidNOT NULL
tag_iduuidNOT NULL
created_attimestamptzNOT NULL
PK(store_id, customer_id, tag_id)

0018_customer_crm.sql で CUS-001 と同時導入。

permission は admin:customer:read (CUS-001) + admin:customer:update(CUS-002)の 2 つ。


  • Phase 1 は memo のみ
  • karte / sketch は Phase 2 で type 値域拡張
  • 同店舗の全 operator が編集可
  • ABAC(作成者のみ編集)は OQ
  • deleted_at 採用
  • 復元は 7 日以内のみ
  • 7 日経過後は purge_deleted_customer_notes ジョブで物理削除(SRS-WRK-001)
  • name は store 内 unique(archived 含む)
  • archived タグは新規 link 不可だが既存 link は表示
  • 8 色プリセット
  • deleted_at のみ
  • 紐付く customer_note, customer_tag_link は保持
  • 90 日後に cleanup-deleted-customers-for-store が cascade 物理削除
  • customer.update / delete
  • customer_note.create / update / delete / restore
  • customer_tag.create / update / link / unlink

  • detail 取得 p95 300ms
  • note 一覧は 200 件まで即時表示

  • admin:customer:read
  • admin:customer:update

PII マスキングは Phase 2 OQ。


  • GWT-1: 顧客基本情報更新 → updated_at が更新される
  • GWT-2: staff A 作成の note を staff B が更新 → 成功(同店舗 operator 全員可)
  • GWT-3: archived tag と同名の新規作成 → CUSTOMER_TAG.NAME_CONFLICT
  • GWT-4: note を 3 日後に restore → 復元される
  • GWT-5: note を 8 日超で restore → CUSTOMER_NOTE.RESTORE_WINDOW_EXPIRED
  • GWT-6: 顧客 delete → deleted_at セット、tag/note は保持

  • Unit: tag color check, restore window
  • Integration: note CRUD, tag apply/remove, customer logical delete

  • purge_deleted_customer_notes
  • cleanup-deleted-customers-for-store

#内容扱い
OQ-CUS-002-01作成者限定 ABACPhase 2
OQ-CUS-002-02カルテ構造化Phase 2 SRS-CUS-005
OQ-CUS-002-03スケッチ画像Phase 2

VersionDateAuthorChange
0.12026-05-05Codex / yudai初版
0.22026-05-05yudai (with Codex co-design)Round 2 反映: migration 番号 0018 確定、permission を admin:customer:update 1 個に集約