ワクチン履歴管理仕様 (FR-007)
| 項目 | 内容 |
|---|---|
| 対象FR | FR-007(ワクチン履歴管理) |
| 優先度 | 中 |
| ステータス | 詳細化済み |
| 依存FR | FR-003(ペット登録)、FR-013(マスタデータ管理: ワクチン種類) |
| 関連FR | FR-006(通院履歴管理)、FR-010(通知・リマインド) |
概要
ユーザーはペットのワクチン接種記録(接種日、ワクチン種類、次回予定日)を登録・管理できる。ワクチン種類はマスタテーブルから選択するか、自由入力で記録する。接種記録は任意で通院記録(FR-006)と紐付けできる。
入力フィールド
| フィールド | 型 | 必須 | バリデーション |
|---|---|---|---|
| vaccineTypeId | integer | - | 存在する vaccine_types.id であること |
| vaccineTypeOther | varchar | - | vaccineTypeId 未指定時のみ有効、1〜50文字 |
| vaccinatedOn | date | ○ | 未来日不可 |
| nextDueDate | date | - | vaccinatedOn より後の日付であること |
| visitId | integer | - | 存在する vet_visits.id であること、かつ同一ペットの通院記録であること |
| memo | text | - | 最大500文字 |
- ワクチン種類は
vaccineTypeIdとvaccineTypeOtherのいずれか一方が必須(両方未指定はバリデーションエラー) vaccineTypeIdとvaccineTypeOtherの両方が指定された場合はvaccineTypeIdを優先し、vaccineTypeOtherはnullとして保存する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 EntityvisitIdが存在しない / 他ペットの通院記録の場合: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 EntityvisitIdが存在しない / 他ペットの通院記録の場合:422 Unprocessable Entity
DELETE /api/pets/:petId/vaccinations/:vaccinationId — 接種記録削除
論理削除(deleted_at に現在日時を設定)する。
- 成功時:
204 No Content - 存在しない / 他ユーザーのペットの記録 / 既に削除済み:
404 Not Found
認可ルール
- 全エンドポイントで認証必須
- 自分が登録したペットに属する接種記録のみ操作可能(他ユーザーのペットIDを指定した場合は
404を返し、存在の有無を漏らさない) - 論理削除済みペットの接種記録へのアクセスは
404を返す - 論理削除済み接種記録へのアクセスは
404を返す
エッジケース
vaccineTypeIdとvaccineTypeOtherの両方が指定された場合 →vaccineTypeIdを優先し、vaccineTypeOtherはnullとして保存するvaccineTypeIdとvaccineTypeOtherの両方が未指定の場合 →422 Unprocessable EntitynextDueDateがvaccinatedOn以前の場合 →422 Unprocessable EntityvaccinatedOnが未来日の場合 →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が返ることnextDueDateがvaccinatedOn以前の場合に422が返ること- 他ユーザーのペットIDで操作した場合に
404が返ること - PATCH で指定したフィールドのみが更新され、他フィールドが変更されないこと
- DELETE 後に一覧・詳細から表示されなくなること
visitIdに自ペットの通院記録を指定して紐付けできることvisitIdに他ペットの通院記録を指定した場合に422が返ること