コンテンツにスキップ

ワクチン履歴管理仕様 (FR-007)

項目内容
対象FRFR-007(ワクチン履歴管理)
優先度
ステータス詳細化済み
依存FRFR-003(ペット登録)、FR-013(マスタデータ管理: ワクチン種類)
関連FRFR-006(通院履歴管理)、FR-010(通知・リマインド)

概要

ユーザーはペットのワクチン接種記録(接種日、ワクチン種類、次回予定日)を登録・管理できる。ワクチン種類はマスタテーブルから選択するか、自由入力で記録する。接種記録は任意で通院記録(FR-006)と紐付けできる。

入力フィールド

フィールド必須バリデーション
vaccineTypeIdinteger-存在する vaccine_types.id であること
vaccineTypeOthervarchar-vaccineTypeId 未指定時のみ有効、1〜50文字
vaccinatedOndate未来日不可
nextDueDatedate-vaccinatedOn より後の日付であること
visitIdinteger-存在する vet_visits.id であること、かつ同一ペットの通院記録であること
memotext-最大500文字
  • ワクチン種類は vaccineTypeIdvaccineTypeOther のいずれか一方が必須(両方未指定はバリデーションエラー)
  • vaccineTypeIdvaccineTypeOther の両方が指定された場合は vaccineTypeId を優先し、vaccineTypeOthernull として保存する
  • visitId は FR-006(通院履歴管理)の実装後に有効化する。FR-006 未実装時はフィールドとして受け付けるが無視する

APIエンドポイント

全エンドポイントで認証必須(__Host-session Cookie)。

メソッドパス概要
POST/api/pets/:petId/vaccinationsワクチン接種記録登録
GET/api/pets/:petId/vaccinationsワクチン接種記録一覧
GET/api/pets/:petId/vaccinations/:vaccinationIdワクチン接種記録詳細
PATCH/api/pets/:petId/vaccinations/:vaccinationIdワクチン接種記録更新
DELETE/api/pets/:petId/vaccinations/:vaccinationIdワクチン接種記録削除(論理削除)

POST /api/pets/:petId/vaccinations — 接種記録登録

リクエストボディに入力フィールドを指定してワクチン接種記録を登録する。

  • 成功時: 201 Created、作成された接種記録を返す
  • ペットが存在しない / 他ユーザーのペット / 論理削除済み: 404 Not Found
  • vaccineTypeId が存在しない場合: 422 Unprocessable Entity
  • visitId が存在しない / 他ペットの通院記録の場合: 422 Unprocessable Entity
{
"data": {
"id": 1,
"petId": 1,
"vaccineTypeId": 2,
"vaccineTypeOther": null,
"vaccinatedOn": "2026-02-15",
"nextDueDate": "2027-02-15",
"visitId": null,
"memo": "3種混合ワクチン接種、異常なし",
"createdAt": "2026-02-18T10:00:00Z",
"updatedAt": "2026-02-18T10:00:00Z"
}
}

GET /api/pets/:petId/vaccinations — 接種記録一覧

指定ペットのワクチン接種記録一覧を返す。論理削除済み記録は含まない。vaccinatedOn の降順(新しい順)でソートする。

  • 成功時: 200 OK
  • 記録なし: 空配列を返す(エラーではない)
  • ペットが存在しない / 他ユーザーのペット / 論理削除済み: 404 Not Found
{
"data": [
{ "id": 2, "vaccinatedOn": "2026-02-15", "..." : "..." },
{ "id": 1, "vaccinatedOn": "2025-02-10", "..." : "..." }
]
}

GET /api/pets/:petId/vaccinations/:vaccinationId — 接種記録詳細

指定IDのワクチン接種記録を返す。

  • 成功時: 200 OK
  • 存在しない / 他ユーザーのペットの記録 / 論理削除済み: 404 Not Found

PATCH /api/pets/:petId/vaccinations/:vaccinationId — 接種記録更新

指定したフィールドのみ部分更新する。リクエストボディに含まれないフィールドは変更しない。

  • 成功時: 200 OK、更新後の接種記録を返す
  • 存在しない / 他ユーザーのペットの記録 / 論理削除済み: 404 Not Found
  • vaccineTypeId が存在しない場合: 422 Unprocessable Entity
  • visitId が存在しない / 他ペットの通院記録の場合: 422 Unprocessable Entity

DELETE /api/pets/:petId/vaccinations/:vaccinationId — 接種記録削除

論理削除(deleted_at に現在日時を設定)する。

  • 成功時: 204 No Content
  • 存在しない / 他ユーザーのペットの記録 / 既に削除済み: 404 Not Found

認可ルール

  • 全エンドポイントで認証必須
  • 自分が登録したペットに属する接種記録のみ操作可能(他ユーザーのペットIDを指定した場合は 404 を返し、存在の有無を漏らさない)
  • 論理削除済みペットの接種記録へのアクセスは 404 を返す
  • 論理削除済み接種記録へのアクセスは 404 を返す

エッジケース

  • vaccineTypeIdvaccineTypeOther の両方が指定された場合 → vaccineTypeId を優先し、vaccineTypeOthernull として保存する
  • vaccineTypeIdvaccineTypeOther の両方が未指定の場合 → 422 Unprocessable Entity
  • nextDueDatevaccinatedOn 以前の場合 → 422 Unprocessable Entity
  • vaccinatedOn が未来日の場合 → 422 Unprocessable Entity
  • 削除済みペットに対する接種記録の登録・取得 → 404 Not Found
  • 削除済み接種記録への更新・再削除リクエスト → 404 Not Found
  • visitId に他ペットの通院記録IDを指定した場合 → 422 Unprocessable Entity(自ペットの通院記録のみ紐付け可能)
  • FR-006 未実装時に visitId を指定した場合 → フィールドを無視し null として保存する

拡張予定(現時点ではスコープ外)

  • 通知・リマインド連携(FR-010で対応: 次回予定日に基づくワクチン接種リマインド)
  • 家族共有時の共有ペットの接種記録へのアクセス(FR-011で対応)
  • 接種証明書のアップロード機能
  • ワクチン接種履歴のエクスポート(PDF等)

検証方法

  • 接種記録登録 → 一覧取得 → 詳細取得の一連フローが完了すること
  • ワクチン種類が vaccineTypeId / vaccineTypeOther のいずれかで指定必須であること(両方未指定時に 422 が返ること)
  • 存在しない vaccineTypeId 指定時に 422 が返ること
  • vaccinatedOn に未来日を指定した場合に 422 が返ること
  • nextDueDatevaccinatedOn 以前の場合に 422 が返ること
  • 他ユーザーのペットIDで操作した場合に 404 が返ること
  • PATCH で指定したフィールドのみが更新され、他フィールドが変更されないこと
  • DELETE 後に一覧・詳細から表示されなくなること
  • visitId に自ペットの通院記録を指定して紐付けできること
  • visitId に他ペットの通院記録を指定した場合に 422 が返ること