---
generated_at: 2026-02-24 23:10:00
metrics:
  claims_total: 114
  claims_with_evidence: 110
  claims_without_evidence: 4
confidence_derived: 0.96
---

# 根拠レポート：inventory.csv

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim：主張）を検証しています：

1. **根拠の有無確認**：各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**：主張の内容が根拠と矛盾していないか
3. **網羅性**：参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」：根拠あり、「△」：根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.96**
  - 根拠あり：110 / 114、根拠なし：4
- 優先レビュー（高）
  1. **C-08（境界値：quantity=0）**：quantity=0の許容可否がコードから明確に読み取れない
  2. **C-53（境界値：adjustment=0）**：adjustment=0の許容可否がコードから明確に読み取れない
  3. **C-92, C-99（ユニーク制約エラー）**：データベース層の制約違反時の具体的エラーメッセージが未確認

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `packages/modules/inventory/src/services/inventory-module.ts` - メインサービス実装（1229行）
- E-02: `packages/modules/inventory/src/services/inventory-level.ts` - 在庫レベルサービス実装（73行）
- E-03: `packages/modules/inventory/src/repositories/inventory-level.ts` - リポジトリ実装（76行）
- E-04: `packages/modules/inventory/src/models/inventory-item.ts` - 在庫アイテムモデル定義（44行）
- E-05: `packages/modules/inventory/src/models/inventory-level.ts` - 在庫レベルモデル定義（37行）
- E-06: `packages/modules/inventory/src/models/reservation-item.ts` - 予約アイテムモデル定義（41行）
- E-07: `packages/modules/inventory/src/utils/apply-decorators.ts` - エンティティフック実装（46行）
- E-08: `packages/modules/inventory/src/joiner-config.ts` - Joiner設定（28行）
- E-09: `packages/modules/inventory/src/index.ts` - モジュールエクスポート（7行）
- E-10: `packages/core/types/src/inventory/index.ts` - TypeScript型定義（参照）

## 3) Claims と根拠の対応（レビューの主戦場）

### InventoryModuleService - createReservationItems
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | 単一の予約アイテムが正常に作成されること | E-01 L224-255 | ○ |
| C-02 | 複数の予約アイテムが正常に作成されること | E-01 L224-255 | ○ |
| C-03 | allow_backorder=trueの場合は在庫不足でも作成できること | E-01 L173-177, L271 | ○ |
| C-04 | 予約作成時にreserved_quantityが正しく更新されること | E-01 L279-307 | ○ |
| C-05 | 存在しないinventory_item_idの場合はエラーになること | E-01 L160-171 | ○ |
| C-06 | 存在しないlocation_idの場合はエラーになること | E-01 L160-171 | ○ |
| C-07 | 在庫不足の場合はエラーになること | E-01 L185-190 | ○ |
| C-08 | quantity=0の場合の挙動 | **根拠なし** | △ |

### InventoryModuleService - createInventoryItems
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-09 | 単一の在庫アイテムが正常に作成されること | E-01 L313-342 | ○ |
| C-10 | 複数の在庫アイテムが正常に作成されること | E-01 L313-342 | ○ |
| C-11 | location_levelsが除外されること | E-01 L211-221, L332 | ○ |
| C-12 | すべてのオプションフィールドがnullableで作成できること | E-04 L8-21 | ○ |
| C-13 | メタデータを含む在庫アイテムが作成できること | E-04 L21 | ○ |

### InventoryModuleService - createInventoryLevels
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | 単一の在庫レベルが正常に作成されること | E-01 L353-385 | ○ |
| C-15 | 複数の在庫レベルが正常に作成されること | E-01 L353-385 | ○ |
| C-16 | reserved_quantityが除外されること | E-01 L199-209, L374 | ○ |
| C-17 | stocked_quantityがデフォルト値0で作成されること | E-05 L8 | ○ |

### InventoryModuleService - updateInventoryItems
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-18 | 単一の在庫アイテムが正常に更新されること | E-01 L396-438 | ○ |
| C-19 | 複数の在庫アイテムが正常に更新されること | E-01 L396-438 | ○ |
| C-20 | location_levelsが除外されること | E-01 L417 | ○ |
| C-21 | 存在しないidの場合はエラーになること | E-01（依存サービス） | ○ |

### InventoryModuleService - updateInventoryLevels
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | 単一の在庫レベルが正常に更新されること | E-01 L481-543 | ○ |
| C-23 | 複数の在庫レベルが正常に更新されること | E-01 L481-543 | ○ |
| C-24 | reserved_quantityが除外されること | E-01 L502 | ○ |
| C-25 | 存在しない在庫レベルの場合はエラーになること | E-01 L520-527 | ○ |

### InventoryModuleService - updateReservationItems
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-26 | 単一の予約アイテムが正常に更新されること | E-01 L554-712 | ○ |
| C-27 | 複数の予約アイテムが正常に更新されること | E-01 L554-712 | ○ |
| C-28 | quantityを変更した場合にreserved_quantityが正しく調整されること | E-01 L640-654 | ○ |
| C-29 | location_idを変更した場合に両方のlocationのreserved_quantityが調整されること | E-01 L618-639 | ○ |
| C-30 | 存在しない予約アイテムIDの場合はエラーになること | E-01 L597-607 | ○ |
| C-31 | 在庫不足の場合はエラーになること | E-01 L682-688 | ○ |

### InventoryModuleService - delete/softDelete/restore
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-32 | 在庫レベルが正常に削除されること | E-01 L460-478 | ○ |
| C-33 | 存在しない在庫レベルの場合は何もせずに終了すること | E-01 L473-475 | ○ |
| C-34 | 指定ロケーションの全在庫レベルがソフト削除されること | E-01 L440-452 | ○ |
| C-35 | 複数のlocationIdを指定した場合に全て削除されること | E-01 L443 | ○ |
| C-36 | 予約アイテムが正常に削除されること | E-01 L714-738 | ○ |
| C-37 | 削除時にreserved_quantityが正しく減少すること | E-01 L734-737 | ○ |
| C-38 | 複数の予約アイテムが削除できること | E-01 L718 | ○ |
| C-39 | 予約アイテムがソフト削除されること | E-01 L740-766 | ○ |
| C-40 | ソフト削除時にreserved_quantityが正しく減少すること | E-01 L762-765 | ○ |
| C-41 | ソフト削除された予約アイテムが復元されること | E-01 L768-794 | ○ |
| C-42 | 復元時にreserved_quantityが正しく増加すること | E-01 L790-793 | ○ |
| C-43 | 指定ロケーションの全予約がソフト削除されること | E-01 L796-826 | ○ |
| C-44 | ロケーション削除時にreserved_quantityが正しく調整されること | E-01 L822-825 | ○ |
| C-45 | 指定ラインアイテムの全予約がソフト削除されること | E-01 L834-864 | ○ |
| C-46 | ラインアイテム削除時にreserved_quantityが正しく調整されること | E-01 L860-863 | ○ |
| C-47 | ソフト削除された予約がラインアイテム単位で復元されること | E-01 L872-902 | ○ |
| C-48 | 復元時にreserved_quantityが正しく増加すること | E-01 L898-901 | ○ |

### InventoryModuleService - adjustInventory
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-49 | 在庫数量が正しく調整されること（増加） | E-01 L968-1000 | ○ |
| C-50 | 在庫数量が正しく調整されること（減少） | E-01 L968-1000 | ○ |
| C-51 | バッチ形式で複数の在庫調整ができること | E-01 L929-966 | ○ |
| C-52 | 存在しない在庫レベルの場合はエラーになること | E-01 L981-986 | ○ |
| C-53 | adjustment=0の場合の挙動 | **根拠なし** | △ |

### InventoryModuleService - retrieve系
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | 指定した在庫レベルが取得できること | E-01 L1002-1022 | ○ |
| C-55 | 存在しない場合はエラーになること | E-01 L1014-1019 | ○ |
| C-56 | 利用可能数量が正しく計算されること | E-01 L1032-1058 | ○ |
| C-57 | 複数ロケーションの合計が取得できること | E-01 L1050-1055 | ○ |
| C-58 | locationIdsが空配列の場合は0が返却されること | E-01 L1038-1040 | ○ |
| C-59 | 存在しない在庫アイテムIDの場合はエラーになること | E-01 L1042-1048 | ○ |
| C-60 | 在庫数量が正しく取得できること | E-01 L1068-1095 | ○ |
| C-61 | 複数ロケーションの合計が取得できること | E-01 L1087-1092 | ○ |
| C-62 | locationIdsが空配列の場合は0が返却されること | E-01 L1074-1076 | ○ |
| C-63 | 存在しない在庫アイテムIDの場合はエラーになること | E-01 L1079-1085 | ○ |
| C-64 | 予約数量が正しく取得できること | E-01 L1106-1132 | ○ |
| C-65 | 複数ロケーションの合計が取得できること | E-01 L1124-1129 | ○ |
| C-66 | locationIdsが空配列の場合は0が返却されること | E-01 L1120-1122 | ○ |
| C-67 | 存在しない在庫アイテムIDの場合はエラーになること | E-01 L1112-1118 | ○ |
| C-68 | 十分な在庫がある場合はtrueを返すこと | E-01 L1142-1155 | ○ |
| C-69 | 在庫不足の場合はfalseを返すこと | E-01 L1154 | ○ |
| C-70 | 利用可能数量と要求数量が同じ場合はtrueを返すこと | E-01 L1154（MathBN.gte） | ○ |

### InventoryModuleService - private methods
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-71 | ensureInventoryLevels: 全ての在庫レベルが存在する場合は正常に返却されること | E-01 L102-195 | ○ |
| C-72 | ensureInventoryLevels: 一部が存在しない場合はエラーになること | E-01 L160-171 | ○ |
| C-73 | ensureInventoryLevels: idで検索できること | E-01 L118-135 | ○ |
| C-74 | ensureInventoryLevels: validateQuantityAtLocation=trueで在庫チェックが行われること | E-01 L173-192 | ○ |
| C-75 | ensureInventoryLevels: 在庫不足の場合はエラーになること | E-01 L185-190 | ○ |
| C-76 | sanitizeInventoryLevelInput: reserved_quantityが除外されること | E-01 L199-209 | ○ |
| C-77 | sanitizeInventoryItemInput: location_levelsが除外されること | E-01 L211-221 | ○ |

### InventoryLevelService
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-78 | retrieveStockedQuantity: 在庫数量が正しく取得できること | E-02 L23-37 | ○ |
| C-79 | retrieveStockedQuantity: 単一のlocationIdでも配列として処理されること | E-02 L28-30 | ○ |
| C-80 | getAvailableQuantity: 利用可能数量が正しく計算されること | E-02 L39-53 | ○ |
| C-81 | getAvailableQuantity: 単一のlocationIdでも配列として処理されること | E-02 L44-46 | ○ |
| C-82 | getReservedQuantity: 予約数量が正しく取得できること | E-02 L55-69 | ○ |
| C-83 | getReservedQuantity: 単一のlocationIdでも配列として処理されること | E-02 L60-62 | ○ |

### InventoryLevelRepository
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-84 | getReservedQuantity: SQLクエリで予約数量の合計が取得できること | E-03 L13-30 | ○ |
| C-85 | getReservedQuantity: 削除済みレコードは除外されること | E-03 L25 | ○ |
| C-86 | getReservedQuantity: 該当レコードがない場合は0が返却されること | E-03 L27-29 | ○ |
| C-87 | getAvailableQuantity: SQLクエリで利用可能数量が計算できること | E-03 L32-54 | ○ |
| C-88 | getAvailableQuantity: 削除済みレコードは除外されること | E-03 L45 | ○ |
| C-89 | getStockedQuantity: SQLクエリで在庫数量の合計が取得できること | E-03 L56-74 | ○ |
| C-90 | getStockedQuantity: 削除済みレコードは除外されること | E-03 L69 | ○ |

### Models
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-91 | InventoryItem: SKUがユニーク制約を持つこと | E-04 L34-40 | ○ |
| C-92 | InventoryItem: 重複するSKUは作成できないこと | **根拠なし（DB層）** | △ |
| C-93 | InventoryItem: 削除済みアイテムと同じSKUが作成できること | E-04 L39 | ○ |
| C-94 | InventoryItem: アイテム削除時にlocation_levelsがカスケード削除されること | E-04 L31-33 | ○ |
| C-95 | InventoryItem: アイテム削除時にreservation_itemsがカスケード削除されること | E-04 L31-33 | ○ |
| C-96 | InventoryItem: reserved_quantityが計算フィールドとして取得できること | E-04 L28, E-07 L29-33 | ○ |
| C-97 | InventoryItem: stocked_quantityが計算フィールドとして取得できること | E-04 L29, E-07 L35-39 | ○ |
| C-98 | InventoryLevel: inventory_item_idとlocation_idの組み合わせがユニークであること | E-05 L29-33 | ○ |
| C-99 | InventoryLevel: 重複する組み合わせは作成できないこと | **根拠なし（DB層）** | △ |
| C-100 | InventoryLevel: stocked_quantityのデフォルト値が0であること | E-05 L8 | ○ |
| C-101 | InventoryLevel: reserved_quantityのデフォルト値が0であること | E-05 L9 | ○ |
| C-102 | InventoryLevel: incoming_quantityのデフォルト値が0であること | E-05 L10 | ○ |
| C-103 | InventoryLevel: available_quantityが計算フィールドとして取得できること | E-05 L15, E-07 L15-21 | ○ |
| C-104 | ReservationItem: 予約アイテムが正常に作成できること | E-06 | ○ |
| C-105 | ReservationItem: allow_backorderのデフォルト値がfalseであること | E-06 L8 | ○ |
| C-106 | ReservationItem: line_item_idがnullableであること | E-06 L7 | ○ |
| C-107 | ReservationItem: external_idがnullableであること | E-06 L12 | ○ |

### Utils / Config
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-108 | applyEntityHooks: OnInitでavailable_quantityが計算されること | E-07 L12-24 | ○ |
| C-109 | applyEntityHooks: stocked_quantityまたはreserved_quantityが未定義の場合はavailable_quantityが計算されないこと | E-07 L16 | ○ |
| C-110 | applyEntityHooks: reserved_quantityのFormula SQLが正しく生成されること | E-07 L29-33 | ○ |
| C-111 | applyEntityHooks: stocked_quantityのFormula SQLが正しく生成されること | E-07 L35-39 | ○ |
| C-112 | joinerConfig: InventoryItemのエイリアスが正しく設定されていること | E-08 L6-13 | ○ |
| C-113 | joinerConfig: ReservationItemのエイリアスが正しく設定されていること | E-08 L14-26 | ○ |
| C-114 | Module export: InventoryModuleServiceがMedusaモジュールとしてエクスポートされること | E-09 L1-6 | ○ |

## 4) 不足情報（Unknown / Missing）

### 境界値の振る舞い
- **C-08（quantity=0の挙動）**：コード内でquantity=0の明示的なバリデーションが確認できない。実際の挙動は実行テストが必要。
  - 候補：バリデーションロジックの追加 / ビジネス要件の確認 / 既存テストの確認

- **C-53（adjustment=0の挙動）**：同様にadjustment=0の明示的なハンドリングが確認できない。
  - 候補：バリデーションロジックの確認 / ビジネス要件の確認

### データベース層の制約
- **C-92, C-99（ユニーク制約違反エラー）**：モデル定義でユニーク制約は確認できるが、実際の制約違反時のエラーメッセージ・エラータイプはDB層（MikroORM/PostgreSQL）に依存。
  - 候補：統合テストでの確認 / MikroORMのエラーハンドリング仕様確認

## 5) リスクフラグ（レビュー観点）

| リスクレベル | 項目 | 理由 |
|---|---|---|
| 1（中） | 予約作成・更新時の在庫チェック | 金額・数量に直結するビジネスロジック |
| 1（中） | reserved_quantityの自動調整 | 複数箇所で調整が行われており、整合性の確認が必要 |
| 0（低） | モデルのデフォルト値 | コードで明確に定義されている |
| 0（低） | ソフトデリート・復元 | 標準的なパターンで実装されている |

## 6) レビュアーチェックリスト（最小）

- [ ] 予約作成時の在庫チェックロジック（allow_backorder考慮）が正しいか
- [ ] reserved_quantityの調整タイミング（作成・更新・削除・復元）が網羅されているか
- [ ] 複数ロケーションにまたがる予約更新時の在庫調整が正しいか
- [ ] ユニーク制約（SKU、inventory_item_id + location_id）の実際の挙動を確認
- [ ] 境界値（quantity=0, adjustment=0）の期待動作を確認
- [ ] カスケード削除の影響範囲を確認（location_levels, reservation_items）
