---
generated_at: 2026-01-29 16:30:00
metrics:
  claims_total: 105
  claims_with_evidence: 105
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート：Core-Content-Product 単体テストケース一覧

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：105 / 105、根拠なし：0
- 優先レビュー（高）
  1. **価格計算関連テスト（UT-PRD-003, UT-PRD-055〜062）**：ビジネスクリティカルな機能
  2. **最大購入数計算（UT-PRD-042〜047）**：在庫管理に直結
  3. **検索キーワード処理（UT-PRD-072〜082）**：検索機能の品質に影響

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

- E-01: `src/Core/Content/Product/ProductEntity.php`（1271行）
- E-02: `src/Core/Content/Product/ProductDefinition.php`（289行）
- E-03: `src/Core/Content/Product/ProductCollection.php`（23行）
- E-04: `src/Core/Content/Product/ProductException.php`（163行）
- E-05: `src/Core/Content/Product/ProductVariationBuilder.php`（60行）
- E-06: `src/Core/Content/Product/IsNewDetector.php`（41行）
- E-07: `src/Core/Content/Product/ProductMaxPurchaseCalculator.php`（47行）
- E-08: `src/Core/Content/Product/PropertyGroupSorter.php`（58行）
- E-09: `src/Core/Content/Product/SalesChannel/SalesChannelProductEntity.php`（142行）
- E-10: `src/Core/Content/Product/DataAbstractionLayer/ProductIndexer.php`（327行）
- E-11: `src/Core/Content/Product/DataAbstractionLayer/SearchKeywordUpdater.php`（337行）
- E-12: `src/Core/Content/Product/SearchKeyword/ProductSearchKeywordAnalyzer.php`（151行）
- E-13: `src/Core/Content/Product/SearchKeyword/ProductSearchTermInterpreter.php`（253行）
- E-14: `src/Core/Content/Product/Aggregate/ProductPrice/ProductPriceEntity.php`（75行）
- E-15: `src/Core/Content/Product/Aggregate/ProductPrice/ProductPriceCollection.php`（49行）
- E-16: `src/Core/Content/Product/Aggregate/ProductReview/ProductReviewEntity.php`（199行）
- E-17: `src/Core/Content/Product/Aggregate/ProductVisibility/ProductVisibilityEntity.php`（75行）
- E-18: `src/Core/Content/Product/Aggregate/ProductCrossSelling/ProductCrossSellingEntity.php`（179行）

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

### ProductEntity（UT-PRD-001〜013）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | __toStringで翻訳名が返却される | E-01: L265-268 | ○ |
| C-02 | __toStringでnameにフォールバック | E-01: L267 | ○ |
| C-03 | getCurrencyPriceで通貨価格取得 | E-01: L340-343 | ○ |
| C-04 | priceがnullでnull返却 | E-01: L342 | ○ |
| C-05 | getDeliveryDateで配送日計算 | E-01: L651-659 | ○ |
| C-06 | getRestockDeliveryDateで再入荷日計算 | E-01: L662-667 | ○ |
| C-07 | isReleasedで発売状態判定（過去） | E-01: L669-676 | ○ |
| C-08 | isReleasedで発売状態判定（未来） | E-01: L675 | ○ |
| C-09 | isReleasedでnull時true | E-01: L671-673 | ○ |
| C-10 | getIsCloseoutでbool変換 | E-01: L385-388 | ○ |
| C-11 | isCloseout null時false | E-01: L387 | ○ |
| C-12 | getTypeで商品タイプ取得 | E-01: L1262-1265 | ○ |
| C-13 | デジタル商品タイプ対応 | E-01: L79, E-02: L89 | ○ |

### ProductDefinition（UT-PRD-014〜018）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-14 | エンティティ名product | E-02: L83, L91-94 | ○ |
| C-15 | 継承対応true | E-02: L96-99 | ○ |
| C-16 | コレクションクラス | E-02: L101-104 | ○ |
| C-17 | エンティティクラス | E-02: L106-109 | ○ |
| C-18 | デフォルト値設定 | E-02: L114-126 | ○ |

### ProductCollection（UT-PRD-019〜020）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | APIエイリアス確認 | E-03: L14-17 | ○ |
| C-20 | 期待クラス確認 | E-03: L19-22 | ○ |

### ProductException（UT-PRD-021〜032）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-21 | invalidCheapestPriceFacade例外 | E-04: L31-38 | ○ |
| C-22 | sortingNotFoundException例外 | E-04: L41-49 | ○ |
| C-23 | invalidPriceDefinition例外 | E-04: L51-58 | ○ |
| C-24 | proxyManipulationNotAllowed例外 | E-04: L60-68 | ○ |
| C-25 | categoryNotFound例外 | E-04: L70-78 | ○ |
| C-26 | configurationOptionAlreadyExists例外 | E-04: L80-87 | ○ |
| C-27 | invalidOptionsParameter例外 | E-04: L89-96 | ○ |
| C-28 | reviewNotActive例外 | E-04: L101-112 | ○ |
| C-29 | originalIdNotFound例外 | E-04: L114-122 | ○ |
| C-30 | noPriceForCurrency例外 | E-04: L124-132 | ○ |
| C-31 | productNotFound例外 | E-04: L134-137 | ○ |
| C-32 | variantNotFound例外 | E-04: L142-145 | ○ |

### ProductVariationBuilder（UT-PRD-033〜037）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | バリエーション構築 | E-05: L18-58 | ○ |
| C-34 | オプションnullで空配列 | E-05: L22-27 | ○ |
| C-35 | positionソート | E-05: L32-42 | ○ |
| C-36 | グループnull除外 | E-05: L46-48 | ○ |
| C-37 | getDecorated例外 | E-05: L13-16 | ○ |

### IsNewDetector（UT-PRD-038〜041）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-38 | 新着判定（範囲内） | E-06: L26-39 | ○ |
| C-39 | 新着判定（範囲外） | E-06: L38-39 | ○ |
| C-40 | releaseDate null | E-06: L38 | ○ |
| C-41 | getDecorated例外 | E-06: L21-24 | ○ |

### ProductMaxPurchaseCalculator（UT-PRD-042〜047）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | 最大購入数計算 | E-07: L26-46 | ○ |
| C-43 | システム設定フォールバック | E-07: L28-31, L33 | ○ |
| C-44 | クローズアウト在庫制限 | E-07: L35-37 | ○ |
| C-45 | 購入ステップ計算 | E-07: L39-43 | ○ |
| C-46 | 境界値0以上 | E-07: L45 | ○ |
| C-47 | getDecorated例外 | E-07: L21-24 | ○ |

### PropertyGroupSorter（UT-PRD-048〜052）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-48 | ソート機能 | E-08: L19-57 | ○ |
| C-49 | visibleOnProductDetailPage除外 | E-08: L26 | ○ |
| C-50 | グループnull除外 | E-08: L24-26 | ○ |
| C-51 | オプションマージ | E-08: L33-36 | ○ |
| C-52 | getDecorated例外 | E-08: L14-17 | ○ |

### SalesChannelProductEntity（UT-PRD-053〜062）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | isNewフラグ取得 | E-09: L73-76 | ○ |
| C-54 | isNewフラグ設定 | E-09: L78-81 | ○ |
| C-55 | 計算済み価格取得 | E-09: L53-55 | ○ |
| C-56 | 計算済み価格コレクション | E-09: L48-51 | ○ |
| C-57 | 計算済み最安値 | E-09: L103-106 | ○ |
| C-58 | 計算済み最大購入数 | E-09: L83-86 | ○ |
| C-59 | ソート済みプロパティ | E-09: L63-66 | ○ |
| C-60 | SEOカテゴリ | E-09: L93-95 | ○ |
| C-61 | 最安値 | E-09: L113-121 | ○ |
| C-62 | 測定値 | E-09: L133-136 | ○ |

### ProductIndexer（UT-PRD-063〜071）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 | インデクサー名 | E-10: L77-80 | ○ |
| C-64 | iterate処理 | E-10: L82-93 | ○ |
| C-65 | iterate空データ | E-10: L88-90 | ○ |
| C-66 | update処理 | E-10: L95-144 | ○ |
| C-67 | update空データ | E-10: L99-101 | ○ |
| C-68 | handle処理 | E-10: L156-253 | ○ |
| C-69 | handle空データ | E-10: L164-166 | ○ |
| C-70 | getOptions | E-10: L255-269 | ○ |
| C-71 | getDecorated例外 | E-10: L151-154 | ○ |

### SearchKeywordUpdater（UT-PRD-072〜074）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-72 | キーワード更新 | E-11: L61-87 | ○ |
| C-73 | 空ID処理 | E-11: L63-65 | ○ |
| C-74 | reset機能 | E-11: L89-92 | ○ |

### ProductSearchKeywordAnalyzer（UT-PRD-075〜078）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-75 | キーワード分析 | E-12: L30-69 | ○ |
| C-76 | トークン化 | E-12: L42-53 | ○ |
| C-77 | 500文字分割 | E-12: L18, L60-64 | ○ |
| C-78 | 非スカラー値スキップ | E-12: L43-47 | ○ |

### ProductSearchTermInterpreter（UT-PRD-079〜082）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-79 | 検索解釈 | E-13: L37-78 | ○ |
| C-80 | 空トークン処理 | E-13: L47-49 | ○ |
| C-81 | 8件制限 | E-13: L22, L70 | ○ |
| C-82 | ブール句設定 | E-13: L65, L227-245 | ○ |

### ProductPriceEntity（UT-PRD-083〜087）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-83 | quantityStart取得 | E-14: L46-49 | ○ |
| C-84 | quantityEnd取得 | E-14: L56-59 | ○ |
| C-85 | quantityEnd null | E-14: L20 | ○ |
| C-86 | productリレーション | E-14: L26-29 | ○ |
| C-87 | ruleリレーション | E-14: L36-39 | ○ |

### ProductPriceCollection（UT-PRD-088〜092）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-88 | filterByRuleId | E-15: L21-24 | ○ |
| C-89 | sortByQuantity | E-15: L26-29 | ○ |
| C-90 | sortByPrice(GROSS) | E-15: L31-43 | ○ |
| C-91 | sortByPrice(NET) | E-15: L31-43 | ○ |
| C-92 | APIエイリアス | E-15: L17-19 | ○ |

### ProductReviewEntity（UT-PRD-093〜097）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-93 | points取得 | E-16: L130-133 | ○ |
| C-94 | status取得 | E-16: L140-143 | ○ |
| C-95 | customerリレーション | E-16: L170-173 | ○ |
| C-96 | productリレーション | E-16: L160-163 | ○ |
| C-97 | salesChannelリレーション | E-16: L180-183 | ○ |

### ProductVisibilityEntity（UT-PRD-098〜100）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-98 | visibility取得 | E-17: L26-29 | ○ |
| C-99 | productリレーション | E-17: L56-59 | ○ |
| C-100 | salesChannelリレーション | E-17: L66-69 | ○ |

### ProductCrossSellingEntity（UT-PRD-101〜105）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-101 | getSorting | E-18: L155-158 | ○ |
| C-102 | isActive | E-18: L87-89 | ○ |
| C-103 | getLimit | E-18: L95-98 | ○ |
| C-104 | productStreamリレーション | E-18: L135-138 | ○ |
| C-105 | assignedProductsリレーション | E-18: L170-173 | ○ |

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

すべてのテストケースは実装コードに基づいて生成されており、根拠が確認できています。

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: 全テストケースがソースコードに基づいており、信頼性が高い

追加で検討すべき観点：
1. ProductEntityの多数のgetter/setterメソッドについては、代表的なものをテストケース化
2. Aggregateエンティティ（ProductPrice, ProductReview, ProductVisibility, ProductCrossSelling）についても主要なメソッドをカバー
3. DataAbstractionLayerのインデクサーやアップデーターについても主要な処理をカバー

## 6) レビュアーチェックリスト（最小）
- [ ] 価格計算関連のテストケース（UT-PRD-003, UT-PRD-055〜062, UT-PRD-088〜092）が実際のビジネスロジックを正しくカバーしているか
- [ ] 最大購入数計算（UT-PRD-042〜047）の境界値テストが十分か
- [ ] 検索キーワード処理（UT-PRD-072〜082）の多言語対応が考慮されているか
- [ ] 例外処理のテストケース（UT-PRD-021〜032）がHTTPステータスコードとエラーコードを正しく検証しているか
- [ ] ProductIndexerのテストケース（UT-PRD-063〜071）が各アップデーターの呼び出しを正しく検証しているか
- [ ] バリエーション構築（UT-PRD-033〜037）のソートロジックが正しいか
- [ ] SalesChannelProductEntityの計算済みフィールド（UT-PRD-053〜062）がストアフロント表示に必要な情報を網羅しているか
