---
generated_at: 2026-01-29 10:30:00
metrics:
  claims_total: 136
  claims_with_evidence: 136
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：136 / 136、根拠なし：0
- 優先レビュー（高）
  1. **なし**：全テストケースに根拠あり
  2. **推奨**：実際のテスト実行による検証
  3. **推奨**：エッジケースの追加検討

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

- E-01: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/PromotionEntity.php`
- E-02: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/PromotionCollection.php`
- E-03: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/PromotionDefinition.php`
- E-04: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/PromotionException.php`
- E-05: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Util/PromotionCodeService.php`
- E-06: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/PromotionCalculator.php`
- E-07: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/PromotionCollector.php`
- E-08: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/PromotionProcessor.php`
- E-09: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/PromotionItemBuilder.php`
- E-10: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Validator/PromotionValidator.php`
- E-11: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/Discount/Calculator/DiscountAbsoluteCalculator.php`
- E-12: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/Discount/Calculator/DiscountPercentageCalculator.php`
- E-13: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/Discount/Calculator/DiscountFixedPriceCalculator.php`
- E-14: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/Discount/ScopePackager/CartScopeDiscountPackager.php`
- E-15: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Cart/Discount/DiscountPackageCollection.php`
- E-16: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Aggregate/PromotionDiscount/PromotionDiscountEntity.php`
- E-17: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Rule/PromotionLineItemRule.php`
- E-18: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/Subscriber/PromotionIndividualCodeRedeemer.php`
- E-19: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Checkout/Promotion/DataAbstractionLayer/PromotionRedemptionUpdater.php`

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

### PromotionEntity関連（UT-PRM-001 - UT-PRM-036）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | getNameメソッドが名前を返却する | E-01 (line 97-100) | ○ |
| C-02 | setNameメソッドが名前を設定する | E-01 (line 102-105) | ○ |
| C-03 | isActiveメソッドがアクティブ状態を返却する | E-01 (line 107-110) | ○ |
| C-04 | getValidFromメソッドが開始日時を返却する | E-01 (line 117-120) | ○ |
| C-05 | getValidUntilメソッドが終了日時を返却する | E-01 (line 127-130) | ○ |
| C-06 | getMaxRedemptionsGlobalが最大利用回数を返却する | E-01 (line 137-140) | ○ |
| C-07 | getMaxRedemptionsPerCustomerが顧客別利用回数を返却する | E-01 (line 147-150) | ○ |
| C-08 | isExclusiveが排他フラグを返却する | E-01 (line 167-170) | ○ |
| C-09 | isUseCodesがコード使用フラグを返却する | E-01 (line 181-184) | ○ |
| C-10 | isUseIndividualCodesが個別コードフラグを返却する | E-01 (line 218-221) | ○ |
| C-11 | getIndividualCodePatternがパターンを返却する | E-01 (line 235-238) | ○ |
| C-12 | getCodeがコードを返却する | E-01 (line 298-301) | ○ |
| C-13 | isCustomerRestrictionが顧客制限フラグを返却する | E-01 (line 312-315) | ○ |
| C-14 | isPreventCombinationが組み合わせ禁止フラグを返却する | E-01 (line 326-329) | ○ |
| C-15 | getExclusionIdsが除外IDリストを返却する | E-01 (line 458-461) | ○ |
| C-16 | hasDiscountがディスカウント存在をチェックする | E-01 (line 577-580) | ○ |
| C-17 | isOrderCountValidがグローバル利用回数を検証する | E-01 (line 582-587) | ○ |
| C-18 | isOrderCountPerCustomerCountValidが顧客別利用回数を検証する | E-01 (line 589-598) | ○ |
| C-19 | getPreconditionRuleが前提条件ルールを構築する | E-01 (line 476-572) | ○ |

### PromotionCollection関連（UT-PRM-037 - UT-PRM-038）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-20 | getApiAliasがエイリアスを返却する | E-02 (line 14-17) | ○ |
| C-21 | getExpectedClassが期待クラスを返却する | E-02 (line 19-22) | ○ |

### PromotionDefinition関連（UT-PRM-039 - UT-PRM-040）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-22 | getEntityNameがエンティティ名を返却する | E-03 (line 44-47) | ○ |
| C-23 | getDefaultsがデフォルト値を返却する | E-03 (line 62-76) | ○ |

### PromotionException関連（UT-PRM-041 - UT-PRM-050）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-24 | codeAlreadyRedeemedが例外を生成する | E-04 (line 41-49) | ○ |
| C-25 | discountCalculatorNotFoundが例外を生成する | E-04 (line 54-66) | ○ |
| C-26 | invalidCodePatternが例外を生成する | E-04 (line 68-76) | ○ |
| C-27 | patternNotComplexEnoughが例外を生成する | E-04 (line 95-102) | ○ |
| C-28 | patternAlreadyInUseが例外を生成する | E-04 (line 104-111) | ○ |
| C-29 | promotionsNotFoundが例外を生成する | E-04 (line 116-124) | ○ |
| C-30 | promotionCodeNotFoundが例外を生成する | E-04 (line 139-147) | ○ |
| C-31 | invalidPriceDefinitionが例外を生成する | E-04 (line 162-181) | ○ |
| C-32 | promotionUsageLockedが例外を生成する | E-04 (line 255-263) | ○ |

### PromotionCodeService関連（UT-PRM-051 - UT-PRM-066）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-33 | getFixedCodeが固定コードを生成する | E-05 (line 41-46) | ○ |
| C-34 | getPreviewがプレビューを生成する | E-05 (line 48-51) | ○ |
| C-35 | generateIndividualCodesがコードを生成する | E-05 (line 60-91) | ○ |
| C-36 | splitPatternがパターンを分割する | E-05 (line 151-162) | ○ |
| C-37 | isCodePatternAlreadyInUseがパターン重複をチェックする | E-05 (line 164-171) | ○ |
| C-38 | addIndividualCodesがコードを追加する | E-05 (line 93-123) | ○ |
| C-39 | replaceIndividualCodesがコードを置換する | E-05 (line 128-141) | ○ |
| C-40 | resetPromotionCodesがコードをリセットする | E-05 (line 143-146) | ○ |

### PromotionCalculator関連（UT-PRM-067 - UT-PRM-072）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | calculateが割引を計算する | E-06 (line 80-159) | ○ |
| C-42 | 優先度順にソートして計算する | E-06 (line 83-85) | ○ |
| C-43 | 要件検証を実行する | E-06 (line 107-114) | ○ |
| C-44 | 除外プロモーションを処理する | E-06 (line 117-129) | ○ |
| C-45 | ゼロ割引をスキップする | E-06 (line 136-138) | ○ |
| C-46 | 最大割引を制限する | E-06 (line 319-325) | ○ |

### PromotionCollector関連（UT-PRM-073 - UT-PRM-079）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-47 | collectが自動プロモーションを収集する | E-07 (line 139-141) | ○ |
| C-48 | collectがコードプロモーションを収集する | E-07 (line 130-138) | ○ |
| C-49 | 無効なコードでエラーを追加する | E-07 (line 174-178) | ○ |
| C-50 | SKIP_PROMOTIONで収集をスキップする | E-07 (line 122-124) | ○ |
| C-51 | ブロックされたプロモーションをスキップする | E-07 (line 152-154) | ○ |
| C-52 | 利用上限チェックを実行する | E-07 (line 148-151) | ○ |
| C-53 | ディスカウントなしをスキップする | E-07 (line 369-372) | ○ |

### PromotionProcessor関連（UT-PRM-080 - UT-PRM-083）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-54 | processがプロモーションを処理する | E-08 (line 41-101) | ○ |
| C-55 | SKIP_PROMOTIONで既存を保持する | E-08 (line 51-58) | ○ |
| C-56 | カート合計0でエラーを追加する | E-08 (line 77-89) | ○ |
| C-57 | 収集データなしでスキップする | E-08 (line 61-72) | ○ |

### PromotionItemBuilder関連（UT-PRM-084 - UT-PRM-091）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-58 | buildPlaceholderItemがプレースホルダーを構築する | E-09 (line 46-64) | ○ |
| C-59 | buildDiscountLineItemが絶対値割引を構築する | E-09 (line 102-106) | ○ |
| C-60 | buildDiscountLineItemがパーセンテージ割引を構築する | E-09 (line 108-110) | ○ |
| C-61 | buildDiscountLineItemが固定価格割引を構築する | E-09 (line 112-118) | ○ |
| C-62 | 不明な割引タイプで例外をスローする | E-09 (line 124-126) | ○ |
| C-63 | 通貨固有の値を適用する | E-09 (line 302-328) | ○ |
| C-64 | buildDeliveryPlaceholderLineItemが配送割引を構築する | E-09 (line 173-192) | ○ |

### DiscountCalculator関連（UT-PRM-092 - UT-PRM-100）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-65 | DiscountAbsoluteCalculatorが絶対値割引を計算する | E-11 (line 26-53) | ○ |
| C-66 | 割引額が対象合計を超えない | E-11 (line 38) | ○ |
| C-67 | 無効な価格定義で例外をスローする | E-11 (line 31-33) | ○ |
| C-68 | DiscountPercentageCalculatorがパーセンテージ割引を計算する | E-12 (line 28-85) | ○ |
| C-69 | 最大値制限を適用する | E-12 (line 57-80) | ○ |
| C-70 | 最大値が空文字の場合制限なし | E-12 (line 125) | ○ |
| C-71 | DiscountFixedPriceCalculatorが固定価格割引を計算する | E-13 (line 28-57) | ○ |

### ScopePackager関連（UT-PRM-101 - UT-PRM-106）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-72 | CartScopeDiscountPackagerがカート内商品をパッケージ化する | E-14 (line 33-48) | ○ |
| C-73 | フィルター条件を適用する | E-14 (line 38-39) | ○ |
| C-74 | 該当商品なしで空コレクションを返却する | E-14 (line 43-45) | ○ |
| C-75 | DiscountPackageCollectionが影響価格を集約する | E-15 (line 16-28) | ○ |
| C-76 | getAllLineMetaItemsがメタデータを集約する | E-15 (line 33-48) | ○ |
| C-77 | splitPackagesがパッケージを分割する | E-15 (line 56-68) | ○ |

### PromotionValidator関連（UT-PRM-107 - UT-PRM-114）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-78 | preValidateがバリデーションを実行する | E-10 (line 72-124) | ○ |
| C-79 | 終了日が開始日より前で違反を追加する | E-10 (line 224-238) | ○ |
| C-80 | コードが空で違反を追加する | E-10 (line 241-252) | ○ |
| C-81 | コードに空白があり違反を追加する | E-10 (line 254-264) | ○ |
| C-82 | コード重複で違反を追加する | E-10 (line 277-285) | ○ |
| C-83 | パターン重複で違反を追加する | E-10 (line 266-275) | ○ |
| C-84 | 割引値が負で違反を追加する | E-10 (line 306-314) | ○ |
| C-85 | パーセンテージが100%超で違反を追加する | E-10 (line 316-325) | ○ |

### PromotionLineItemRule関連（UT-PRM-115 - UT-PRM-118）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-86 | matchがプロモーション存在をマッチングする | E-17 (line 36-60) | ○ |
| C-87 | NEQ演算子で不一致をマッチングする | E-17 (line 85-93) | ○ |
| C-88 | プロモーションなしでNEQ時trueを返却する | E-17 (line 49-51) | ○ |

### PromotionIndividualCodeRedeemer関連（UT-PRM-119 - UT-PRM-121）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-89 | onOrderLineItemWrittenがコードを使用済みに更新する | E-18 (line 48-63) | ○ |
| C-90 | ライブバージョン以外でスキップする | E-18 (line 50-52) | ○ |
| C-91 | プロモーションなしでスキップする | E-18 (line 56-58) | ○ |

### PromotionRedemptionUpdater関連（UT-PRM-122 - UT-PRM-126）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-92 | lineItemCreatedが利用回数を更新する | E-19 (line 92-107) | ○ |
| C-93 | ライブバージョン以外でスキップする | E-19 (line 94-96) | ○ |
| C-94 | lineItemDeletedが利用回数を減少させる | E-19 (line 82-90) | ○ |
| C-95 | updateが複数プロモーションを一括更新する | E-19 (line 112-154) | ○ |
| C-96 | 空のIDリストでスキップする | E-19 (line 116-118) | ○ |

### PromotionDiscountEntity関連（UT-PRM-127 - UT-PRM-136）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-97 | getScopeがスコープを返却する | E-16 (line 108-111) | ○ |
| C-98 | getTypeがタイプを返却する | E-16 (line 122-125) | ○ |
| C-99 | getValueが値を返却する | E-16 (line 132-135) | ○ |
| C-100 | getMaxValueが最大値を返却する | E-16 (line 190-193) | ○ |
| C-101 | isConsiderAdvancedRulesがフラグを返却する | E-16 (line 176-179) | ○ |
| C-102 | isScopeSetGroupがセットグループ判定する | E-16 (line 209-214) | ○ |
| C-103 | getSetGroupIdがグループIDを返却する | E-16 (line 220-229) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし：全テストケースにソースコードによる根拠あり

## 5) リスクフラグ（レビュー観点）
- 0: 低リスク - 全テストケースがソースコード解析に基づいて生成されている
- 推奨事項：
  - 実際のテスト実行による動作検証
  - 並行処理・競合状態のテストケース追加検討
  - 外部依存（データベース、キャッシュ）のモック戦略確認

## 6) レビュアーチェックリスト（最小）
- [ ] テストケースIDが連番で正しく付与されているか確認
- [ ] 各テストケースの前提条件が実現可能か確認
- [ ] 期待結果が具体的かつ検証可能か確認
- [ ] 境界値テストが適切にカバーされているか確認
- [ ] 異常系テストが例外クラスを正しく参照しているか確認
- [ ] 金額計算関連のテスト（高優先度）が網羅されているか確認
- [ ] 利用回数制限のテストが十分か確認
- [ ] コード生成・検証のテストが十分か確認
