# D-Watch

清掃ロボット稼働モニタリングビューアー。DFA Robotics 内製開発。

- **はじめに読む**: [`docs/getting-started.md`](docs/getting-started.md) — 開発者向けセットアップ手順
- **コードの地図**: [`docs/code-map.md`](docs/code-map.md) — 非エンジニア向け。どのファイル・関数・数値が何を司っているか
- **構成と依存の向き**: [`docs/architecture.md`](docs/architecture.md) — エンジニア向け。触ってはいけないものの正
- **仕様**: [`docs/spec.md`](docs/spec.md) — 機能一覧と開発フェーズ
- **サンプルデータ**: [`docs/fixtures.md`](docs/fixtures.md) — DB接続前の開発用データ仕様
- **開発コンテキスト**: [`CLAUDE.md`](CLAUDE.md) — Cursor / Claude Code は必ずこれを読む
- **決定事項**: [`docs/decisions.md`](docs/decisions.md) — なぜこの仕様なのか
- **API契約**: [`d-watch-api.yaml`](d-watch-api.yaml) — OpenAPI 3.0

---

## セットアップ

```bash
npm install
cp .env.example .env.local   # 接続情報を記入
npm run dev                  # http://localhost:3000
```

### サンプルデータで開発する（DB接続前）

実DBが用意される前は、`lib/fixtures/` のサンプルデータで開発します。

```bash
# .env.local
USE_FIXTURES=true
```

APIルートがサンプルデータを返すため、DBなしで全画面を開発できます。
DB接続時は `USE_FIXTURES=false` にするだけで、**画面側のコードは変更不要**です。

用意すべきデータのケース（判定の境界値、L1〜L3、契約フラグ4パターン、空配列など）は
[`docs/fixtures.md`](docs/fixtures.md) を参照してください。

### Prismaスキーマの取り込み

DBはTeamWorksが構築します。**マイグレーションは作りません。**

```bash
npx prisma db pull      # 実スキーマを schema.prisma に取り込む
npx prisma generate
```

取り込んだ内容とテーブル定義書（28テーブル）に食い違いがあれば、実装を止めて確認してください。

**この突き合わせだけはM1で早めに実施します**（カラム名の食い違いが後から見つかると全画面に波及するため）。
画面開発は引き続き fixture のまま進めます。

### テスト

```bash
npm test                # 判定ロジックの期待値表テストを含む
```

判定ロジック（◎○△×、L1〜L3、KPI計算、丸め）は**必ずテストで固定**します。
[`CLAUDE.md`](CLAUDE.md) の 4.1〜4.5 が仕様の正です。

---

## 開発フロー

- ブランチ: `main` + featureブランチ（GitHub Flow）
- **`main` への直接pushは禁止**（ブランチ保護。必ずPR経由）
- PRの承認は必須にしていないが、`lib/judge/`（判定ロジック）を触るPRは相互確認する
- PRを作るとCI（Lint / テスト / ビルド）が自動で走る。**赤いまま放置しない**
- API契約を変える時は `d-watch-api.yaml` を先に修正する

### 担当分担

| 担当 | 範囲 |
|---|---|
| **Daigo**（環境） | リポジトリ/CI、Prisma接続、点検記録の独自ストア、デプロイ、PRレビュー |
| **たけうち りき**（開発） | 画面実装（モック移植 + API接続）、APIルート実装 |

判定ロジック（`lib/judge/`）は両名で確認します。

### Cursor 利用時の注意

- **Privacy Mode を必ずONにする**（会社のコードを扱うため）
- アカウントは会社ドメインのメールアドレスで作成する

---

## 責任分界

| 領域 | 担当 |
|---|---|
| MySQL DB本体 / データ収集 / サマリ集計バッチ | TeamWorks（外部） |
| APIサーバー / ビューアー / 点検記録 | DFA（本リポジトリ） |

DBは原則**読み取り専用**です。書き込みは `robot_error_reports` / `control_error_histories` の
`status` / `comment` / `responded_at` / `resolved_at` の4カラムのみ。

---

## 現在の状況

**M0（環境準備）まで完了。** 次は M1（判定ロジック `lib/judge/` + 期待値表テスト）と M2（画面実装）。

| ディレクトリ | 内容 |
|---|---|
| `lib/types/` | `d-watch-api.yaml` から起こした型定義 |
| `lib/config/` | 閾値（90/70/10、猶予30分、L2=2日/L3=3日）。**ハードコード禁止** |
| `lib/fixtures/` | サンプルデータ。境界値・異常系を仕込んである |
| `lib/db/` | `USE_FIXTURES` による fixtures / Prisma の切替 |
| `app/api/clean-logs/` | **動く見本のAPIルート。** 他の一覧APIはこの形を真似する |

TeamWorks待ちの項目は [`docs/spec.md` §4](docs/spec.md) を参照。
待ちの間はモック/スタブで先行し、解消後に差し替えます。
