コンテンツにスキップ

通院履歴管理仕様 (FR-006)

項目内容
対象FRFR-006(通院履歴管理)
優先度
ステータス詳細化済み

概要

ユーザーは登録済みペットの通院記録(受診日、病院名、診察内容、費用)を登録・管理できる。次回予定日を記録することで、FR-010(通知・リマインド)の通院リマインド起点としても機能する。

入力フィールド

フィールド必須バリデーション
visited_ondateISO 8601 日付形式(YYYY-MM-DD)、未来日不可
clinic_namevarchar1〜100文字、前後の空白はトリム
diagnosistext-最大2000文字
costinteger-0以上(円単位)
next_visit_datedate-visited_on 以降の日付であること
memotext-最大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 Entity
  • next_visit_datevisited_on より前の日付 → 422 Unprocessable Entity
  • cost が負の値 → 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 を返すこと