通院履歴管理仕様 (FR-006)
| 項目 | 内容 |
|---|---|
| 対象FR | FR-006(通院履歴管理) |
| 優先度 | 中 |
| ステータス | 詳細化済み |
概要
ユーザーは登録済みペットの通院記録(受診日、病院名、診察内容、費用)を登録・管理できる。次回予定日を記録することで、FR-010(通知・リマインド)の通院リマインド起点としても機能する。
入力フィールド
| フィールド | 型 | 必須 | バリデーション |
|---|---|---|---|
| visited_on | date | ○ | ISO 8601 日付形式(YYYY-MM-DD)、未来日不可 |
| clinic_name | varchar | ○ | 1〜100文字、前後の空白はトリム |
| diagnosis | text | - | 最大2000文字 |
| cost | integer | - | 0以上(円単位) |
| next_visit_date | date | - | visited_on 以降の日付であること |
| memo | text | - | 最大500文字 |
- 費用は日本円(税込総額)を整数で記録する
- 病院名は自由入力テキスト(将来マスタ化する余地を残す)
next_visit_dateは FR-010 の通院リマインド通知の起点となる
APIエンドポイント
全エンドポイントで認証必須(__Host-session Cookie)。
| メソッド | パス | 概要 |
|---|---|---|
| POST | /api/pets/:petId/vet-visits | 通院記録登録 |
| GET | /api/pets/:petId/vet-visits | 通院記録一覧 |
| GET | /api/pets/:petId/vet-visits/:visitId | 通院記録詳細 |
| PATCH | /api/pets/:petId/vet-visits/:visitId | 通院記録更新 |
| DELETE | /api/pets/:petId/vet-visits/:visitId | 通院記録削除(論理削除) |
POST /api/pets/:petId/vet-visits — 通院記録登録
リクエストボディに入力フィールドを指定して通院記録を登録する。
- 成功時:
201 Created、作成された通院記録を返す - ペットが存在しない / 他ユーザーのペット / 論理削除済み:
404 Not Found
{ "data": { "id": 1, "petId": 1, "visitedOn": "2026-02-10", "clinicName": "にゃんこ動物病院", "diagnosis": "定期健康診断。異常なし。", "cost": 5500, "nextVisitDate": "2026-08-10", "memo": null, "createdAt": "2026-02-18T10:00:00Z", "updatedAt": "2026-02-18T10:00:00Z" }}GET /api/pets/:petId/vet-visits — 通院記録一覧
指定ペットの通院記録一覧を返す。論理削除済みの記録は含まない。visited_on の降順(新しい順)で返す。
- 成功時:
200 OK - 記録なし: 空配列を返す(エラーではない)
- ペットが存在しない / 他ユーザーのペット / 論理削除済み:
404 Not Found
{ "data": [ { "id": 2, "petId": 1, "visitedOn": "2026-02-10", "clinicName": "にゃんこ動物病院", "diagnosis": "定期健康診断。異常なし。", "cost": 5500, "nextVisitDate": "2026-08-10", "memo": null, "createdAt": "2026-02-18T10:00:00Z", "updatedAt": "2026-02-18T10:00:00Z" } ]}GET /api/pets/:petId/vet-visits/:visitId — 通院記録詳細
指定IDの通院記録を返す。
- 成功時:
200 OK - 存在しない / 他ユーザーのペットの記録 / 論理削除済み:
404 Not Found
PATCH /api/pets/:petId/vet-visits/:visitId — 通院記録更新
指定したフィールドのみ部分更新する。リクエストボディに含まれないフィールドは変更しない。
- 成功時:
200 OK、更新後の通院記録を返す - 存在しない / 他ユーザーのペットの記録 / 論理削除済み:
404 Not Found
DELETE /api/pets/:petId/vet-visits/:visitId — 通院記録削除
論理削除(deleted_at に現在日時を設定)する。
- 成功時:
204 No Content - 存在しない / 他ユーザーのペットの記録 / 既に削除済み:
404 Not Found
認可ルール
- 全エンドポイントで認証必須
- 自分が登録したペットの通院記録のみ操作可能(他ユーザーのペットIDを指定した場合は
404を返し、存在の有無を漏らさない) - 論理削除済みペットに紐づく通院記録へのアクセスは
404を返す - 論理削除済みの通院記録へのアクセスは
404を返す
エッジケース
visited_onが未来日 →422 Unprocessable Entitynext_visit_dateがvisited_onより前の日付 →422 Unprocessable Entitycostが負の値 →422 Unprocessable Entity- 論理削除済みペットへの通院記録登録 →
404 Not Found - 削除済み通院記録への更新・再削除 →
404 Not Found - ペットの論理削除時 → 通院記録は保持される(ペット復元時にデータが残る)
拡張予定(現時点ではスコープ外)
- 病院名のマスタテーブル化(オートコンプリート、住所・電話番号管理)
- 通院記録への添付ファイル(診断書、検査結果等)
- 家族共有時の共有ペットの通院記録へのアクセス(FR-011で対応)
- 通院リマインド通知の実装(FR-010で対応)
検証方法
- 通院記録を登録し、一覧・詳細で取得できること
- 必須フィールド(visited_on, clinic_name)未指定時にバリデーションエラーが返ること
- 未来日の受診日が拒否されること
- next_visit_date が visited_on より前の場合に拒否されること
- 費用に負の値を指定した場合にバリデーションエラーが返ること
- 他ユーザーのペットの通院記録にアクセスした場合に
404が返ること - PATCH で指定したフィールドのみが更新され、他フィールドが変更されないこと
- DELETE 後に一覧・詳細から表示されなくなること
- ペット論理削除後も通院記録データがDBに保持されていること
- 未認証状態で全エンドポイントが
401を返すこと