# データ最小化・匿名 ID 運用（予約・記録・チャット・IC カード）

**印刷・PDF**: レイアウト済み HTML は [`privacy-data-minimization-ja.html`](./privacy-data-minimization-ja.html)（ブラウザで開き **Ctrl+P（⌘+P）→ PDF に保存**）。

**正本の補足**: 画面の挙動・保存はコードが正。本書は **方針・運用・シート列の意味** を一箇所にまとめたものです（法律意見ではありません）。

---

## 1. 方針の要約

- **契約企業・運営ともに、従業員の実名・メール・電話をアプリから収集しない**ことを目標とする。
- 利用者は **社内で付与された匿名 ID（番号）** で自分を指す（チャットの書き方・予約の NFC／手入力）。
- **相談予約（`yoyaku_employee.html`）** は氏名・メール・会社名・自由記述の相談文を **フォームから送らない**。保存は **`anonymous_id` + 希望日・時間帯** が中心（Supabase `reservations`）。
- **コンディション（`check.html`）** の「ひとこと」と **食事メモ** は、画面で連絡先っぽい文字列を **送信ブロック**。API は保存直前に **メール・電話っぽいパターンをマスク**（`/api/eap/submit.js`）。
- **チャット（`chat.html`）** も同様に送信前ブロック。**`/api/gemini`** は Gemini へ送る直前に **redact（マスク）** をかける（多層防御）。
- **睡眠（`sleep.html`）** は起床予定つきの **セルフログ**（記録開始／起床完了時刻等）。ブラウザ通知は任意で、**スマホの目覚ましアプリの代替ではない**旨を画面上で説明する。
- **健康記録（health / pulse / sleep）は既定でスプレッドシートへコピーしない**（`EAP_DUAL_WRITE_HEALTH_TO_SHEET` 無効時）。
- **IC カード**は **本人が面談時に随時持参**し、**匿名 ID の確認・予約時の本人確認**に使う。**相談の具体内容は契約企業・事業所向けに開示しない**ことを前提に、**運営側のシステムに本文を載せない／載せない設計**とカード側の役割を **§3** で線引きする。

---

## 2. 予約と `dual_write`（GAS・スプレッドシート）

- **`EAP_SUBMIT_MODE=dual_write`** のとき、予約は Supabase 保存後に GAS `doPost` が **「予約一覧」シートに 1 行追加**することがあります。
- **匿名予約**（`reservationAnonymous=1`）のときの意味付け（実装どおり）:
  - **お名前**列 … **匿名 ID** を格納（列名は歴史的経緯で「お名前」だが、個人実名ではない）。
  - **所属企業名・メール・相談方法・第2・第3希望・相談内容** … 空。
  - **第1希望** … 利用者に読みやすい **「YYYY-MM-DD 午前／午後／夕方」** 形式。
  - **予約区分** … `anonymous_band`。
  - **tenantId / officeId** … URL／QR から引き継いだ **テナント・事業所コード**（会社単位の識別子であり、利用者の実名ではない）。
- **運営向けメール通知**（`RESERVATION_NOTIFY_EMAIL`）: 匿名フローでは **匿名 ID と希望日時のみ** を本文に含める実装（スプレッドシート URL は含めない）。

**共有範囲**: シートを開ける人＝個人情報にアクセスしうる立場にならないよう、Google の共有設定を最優先で管理してください。

---

## 3. IC カード・データ境界（事業所非開示・運営側の保持最小化）

### 3.1 EAP と事業所の線引き（方針）

- 本事業は **EAP の趣旨に沿い、契約企業・事業所に「相談者個人が特定されるような相談内容・セッションの具体内容」を伝えない**運用を原則とする（雇用主報告の可否・例外は **個別契約書・就業規則・法令・危機対応プロトコル** で別途整理すること）。
- システム上は **匿名 ID と予約希望（日付・時間帯）・会社／拠点を識別するコード（tenant／office）** が載り得るが、**相談本文・詳細メモは匿名予約フォームから送信しない**実装とする（§2・§3.3）。

### 3.2 IC カードに載せてよいデータ（最小セット・チェックリスト）

運営・契約企業が発行・書込みするときの **推奨の既定** は次のとおり。

| 載せてよい（既定） | 載せない／載せるなら別途設計が必要 |
|--------------------|-------------------------------------|
| **匿名 ID のみ**（予約・本人確認に必要な番号・コード） | **氏名・住所・メール・電話・社員番号・所属部署名** など特定に直結する情報 |
| （任意）**内部で管理している利用者参照キー**が別にある場合も、**実名と結びつく記載は避ける** | **相談内容の全文・面談メモ・診断名クラスの詳細**（※後述 §3.4） |
| — | **URL に長いトークンや個人情報を載せた状態**での書込み |

**確認**: 書込み前に「このバイト列を別の NFC 読取アプリで読んだとき、当事者以外が見てよいか」を一度見る。

### 3.3 サーバへ送らない項目（匿名予約・コード上の確約）

匿名フロー（`reservationAnonymous=1`）では、`/api/eap/submit` は **`full_name` / `company` / `email` / `detail` を保存しない**（null）。送信される中心は **`anonymous_id`** と **`prefer1`**（希望日時）、および **`tenant_id` / `office_external_id`**（どの契約・拠点か）。

**事業所向けに送らない**ことと **運営 DB に載せない**ことは別論点だが、**本文・詳細はこの経路では載せない**設計とする。

### 3.4 「相談内容の記録をカードにのみ載せ、運営が本文を保持しない」とするとき

次の考え方は **製品仕様というより運営ポリシーと現場運用**に依存する。導入するときは **書面（内部規程または契約企業向け説明）でスコープを固定**すること。

1. **意図**  
   - 運営の **クラウド・DB・社内ファイルサーバに、相談の具体内容（面談メモ全文など）を集約しない**。
   - 記録の所在を **本人保有メディア（IC カード）** に寄せ、**運営は複製・バックアップとして抱えない**。

2. **「保持しない」で含める範囲（ブレ防止）**  
   - **サーバ・バックアップ DB に載せない**だけでなく、原則として **支援者 PC のローカル既定保存・クラウド同期フォルダ・チャット・メール下書き・スクリーンショット** にも **相談本文を残さない**運用を対象に含めるかどうかを決める（アプリは強制できない）。
   - **監査・監督・危機対応**で例外があり得る場合は、**どの役割が・どこまで・いつ破るか**を別紙で定義する（法律意見ではない）。

3. **カード保存の技術的・現実的リスク**  
   - 一般的な NFC タグへの書込みは **暗号化なしで読める**ことが多く、**紛失・盗難・無断読取**時に本文が第三者に見えるリスクがある。
   - **容量・耐久・書換回数**の制限があり、**バックアップがない**とカード故障＝記録喪失になりうる。
   - **個人面談の記録をどこまで残すべきか**は、資格・団体指針・契約で論点になりうるため、**士業・監督団体との整合**を検討することが望ましい。

4. **現実的な折衷（検討用）**  
   - **カード**: 匿名 ID のみ（または最小メタ）。  
   - **相談の継続記録**: 本人が紙または本人デバイスで管理／または別同意に基づく別保管。  
   のように **役割分担**すると、予約システムとの境界が明瞭になる。

### 3.5 運用手順（面談時持参・発行〜返却）

1. **発行時（面談・窓口など）**  
   - 利用者一人につき **匿名 ID** を決め、**本人保有の IC カード／タグ** の **NDEF テキスト**（または URL レコード）に **§3.2 の最小セット**のみ書き込む。  
   - 相談内容をカードに書く運用にする場合も **長文・識別情報の過載を避け**、§3.4 のリスクを周知する。
2. **利用時**  
   - `yoyaku_employee.html` の **「カードをかざして予約」** で読み取り、またはカード忘れ時は **同じ ID を手入力**。
3. **面談時**  
   - **本人がカードを持参**し、**予約者確認・ID 確認**に用いる（運営がカードを預り続けない）。
4. **面談終了後**  
   - **カードは利用者に返却**（運営・支援側が無断で複製・保管しない方針とする）。

**技術メモ**: Web NFC は **HTTPS の Chrome（Android）** などで利用可能。iPhone の Safari は **手入力フォールバック**。

---

## 4. 関連ファイル

| 種別 | ファイル |
|------|-----------|
| 予約 UI | `yoyaku_employee.html` |
| チャット UI | `chat.html` |
| 記録 UI | `check.html` |
| クライアント共通チェック | `js/eap-privacy-lite.js` |
| API（記録マスク） | `api/eap/submit.js` |
| API（チャット redact） | `api/gemini.js` |
| GAS・シート | `code.gs` |
| DB 予約列追補 | `docs/sql/06_reservations_anonymous_id.sql` |
| 巡回枠マスタ（Sheet の列の意味） | `docs/reservation_slots_admin.md` |
| 巡回枠を DB で読む・環境変数 | `docs/reservation-supabase-ja.md`、`docs/sql/07_visit_slots.sql` |
| テーブル列の日本語 COMMENT | `docs/sql/08_schema_comments_ja.sql` |
| 面談音声→要約→QR（完全ローカル・保存しない CLI） | `tools/local_minutes_qr_cli_README-ja.md`、`tools/local_minutes_qr_cli.py` |

---

**改訂**: 実装を変えたら **本ファイル**・**`docs/DOCUMENT-INDEX-ja.md`**・**オーナー手順書**・**初心者ガイド**・**弁護士カンペ**の矛盾が出ないように更新してください。
