---
generated_at: 2026-01-29 12:00:00
metrics:
  claims_total: 100
  claims_with_evidence: 100
  claims_without_evidence: 0
confidence_derived: 1.00
---

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

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：100 / 100、根拠なし：0
- 優先レビュー（高）
  1. **CurrencyFormatterのフォーマット処理**：NumberFormatterの動作確認が実環境依存
  2. **CurrencyValidatorのデフォルト通貨保護**：Defaults::CURRENCYの値確認が必要
  3. **CurrencyRuleのmatch処理**：RuleComparisonの内部動作確認が必要

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

- E-01: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyEntity.php`
- E-02: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyDefinition.php`
- E-03: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyCollection.php`
- E-04: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyFormatter.php`
- E-05: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyValidator.php`
- E-06: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyLoadSubscriber.php`
- E-07: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/CurrencyEvents.php`
- E-08: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Rule/CurrencyRule.php`
- E-09: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/SalesChannel/CurrencyRoute.php`
- E-10: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/SalesChannel/AbstractCurrencyRoute.php`
- E-11: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/SalesChannel/CurrencyRouteResponse.php`
- E-12: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/SalesChannel/SalesChannelCurrencyDefinition.php`
- E-13: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Aggregate/CurrencyCountryRounding/CurrencyCountryRoundingEntity.php`
- E-14: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Aggregate/CurrencyCountryRounding/CurrencyCountryRoundingDefinition.php`
- E-15: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Aggregate/CurrencyCountryRounding/CurrencyCountryRoundingCollection.php`
- E-16: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Aggregate/CurrencyTranslation/CurrencyTranslationEntity.php`
- E-17: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Aggregate/CurrencyTranslation/CurrencyTranslationDefinition.php`
- E-18: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/System/Currency/Aggregate/CurrencyTranslation/CurrencyTranslationCollection.php`
- E-19: `/Users/tomoka.baba/Work/shopware-trunk/src/Core/Framework/DataAbstractionLayer/Pricing/CashRoundingConfig.php`

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | CurrencyEntity.getIsoCode()はisoCodeを返却する | E-01 (L60-63) | ○ |
| C-02 | CurrencyEntity.setIsoCode()はisoCodeを設定する | E-01 (L65-68) | ○ |
| C-03 | CurrencyEntity.getFactor()はfactorを返却する | E-01 (L70-73) | ○ |
| C-04 | CurrencyEntity.setFactor()はfactorを設定する | E-01 (L75-78) | ○ |
| C-05 | factorに0を設定可能（境界値） | E-01 (L75-78) | ○ |
| C-06 | factorに負の値を設定可能（境界値） | E-01 (L75-78) | ○ |
| C-07 | CurrencyEntity.getSymbol()はsymbolを返却する | E-01 (L80-83) | ○ |
| C-08 | CurrencyEntity.setSymbol()はsymbolを設定する | E-01 (L85-88) | ○ |
| C-09 | CurrencyEntity.getShortName()はshortNameを返却する | E-01 (L90-93) | ○ |
| C-10 | shortNameはnullable型 | E-01 (L30) | ○ |
| C-11 | CurrencyEntity.getName()はnameを返却する | E-01 (L100-103) | ○ |
| C-12 | nameはnullable型 | E-01 (L32) | ○ |
| C-13 | CurrencyEntity.getPosition()はpositionを返却する | E-01 (L110-113) | ○ |
| C-14 | CurrencyEntity.getTranslations()はCurrencyTranslationCollectionを返却する | E-01 (L120-123) | ○ |
| C-15 | translationsはnullable型（遅延ロード） | E-01 (L36) | ○ |
| C-16 | CurrencyEntity.getOrders()はOrderCollectionを返却する | E-01 (L130-133) | ○ |
| C-17 | CurrencyEntity.getSalesChannels()はSalesChannelCollectionを返却する | E-01 (L140-143) | ○ |
| C-18 | CurrencyEntity.getSalesChannelDefaultAssignments()はSalesChannelCollectionを返却する | E-01 (L150-153) | ○ |
| C-19 | CurrencyEntity.getIsSystemDefault()はbool/nullを返却する | E-01 (L170-173) | ○ |
| C-20 | isSystemDefaultはnullable型 | E-01 (L48) | ○ |
| C-21 | CurrencyEntity.getItemRounding()はCashRoundingConfigを返却する | E-01 (L210-213) | ○ |
| C-22 | CurrencyEntity.getTotalRounding()はCashRoundingConfigを返却する | E-01 (L220-223) | ○ |
| C-23 | CurrencyEntity.getCountryRoundings()はCurrencyCountryRoundingCollectionを返却する | E-01 (L200-203) | ○ |
| C-24 | CurrencyEntity.getTaxFreeFrom()はfloat/nullを返却する | E-01 (L230-233) | ○ |
| C-25 | taxFreeFromはnullable型 | E-01 (L58) | ○ |
| C-26 | CurrencyDefinition.getEntityName()は"currency"を返却する | E-02 (L39-42) | ○ |
| C-27 | CurrencyDefinition.getCollectionClass()はCurrencyCollection::classを返却する | E-02 (L44-47) | ○ |
| C-28 | CurrencyDefinition.getEntityClass()はCurrencyEntity::classを返却する | E-02 (L49-52) | ○ |
| C-29 | CurrencyDefinition.since()は"6.0.0.0"を返却する | E-02 (L54-57) | ○ |
| C-30 | defineFields()は必須フィールドを定義する | E-02 (L59-83) | ○ |
| C-31 | CurrencyCollection.getApiAlias()は"currency_collection"を返却する | E-03 (L14-17) | ○ |
| C-32 | CurrencyCollection.getExpectedClass()はCurrencyEntity::classを返却する | E-03 (L19-22) | ○ |
| C-33 | CurrencyFormatter.formatCurrencyByLanguage()は通貨フォーマット文字列を返却する | E-04 (L29-39) | ○ |
| C-34 | decimalsがnullの場合はContext.getRounding().getDecimals()を使用 | E-04 (L31) | ○ |
| C-35 | 金額が0の場合もフォーマット可能 | E-04 (L29-39) | ○ |
| C-36 | 金額が負の場合もフォーマット可能 | E-04 (L29-39) | ○ |
| C-37 | 小数点以下桁数が0の場合もフォーマット可能 | E-04 (L36) | ○ |
| C-38 | 存在しない言語IDの場合はInconsistentCriteriaIdsExceptionがスロー | E-04 (L27-28) | ○ |
| C-39 | reset()はformatter配列を空にする | E-04 (L41-44) | ○ |
| C-40 | getFormatter()は同一ロケールでキャッシュを使用 | E-04 (L46-53) | ○ |
| C-41 | CurrencyValidator.getSubscribedEvents()はPreWriteValidationEventを購読 | E-05 (L23-28) | ○ |
| C-42 | preValidate()はデフォルト通貨以外の削除を許可 | E-05 (L30-66) | ○ |
| C-43 | preValidate()はデフォルト通貨の削除を拒否 | E-05 (L42-60) | ○ |
| C-44 | preValidate()はDeleteCommand以外を無視 | E-05 (L36) | ○ |
| C-45 | preValidate()はCurrency以外のエンティティを無視 | E-05 (L36) | ○ |
| C-46 | CurrencyLoadSubscriber.getSubscribedEvents()はCURRENCY_LOADED_EVENTを購読 | E-06 (L17-23) | ○ |
| C-47 | setDefault()はデフォルト通貨にisSystemDefault=trueを設定 | E-06 (L28-35) | ○ |
| C-48 | setDefault()は非デフォルト通貨にisSystemDefault=falseを設定 | E-06 (L28-35) | ○ |
| C-49 | setDefault()は複数エンティティを処理可能 | E-06 (L30) | ○ |
| C-50 | setDefault()はPartialEntityも処理可能 | E-06 (L21-22, L26-27) | ○ |
| C-51 | CurrencyRule.match()はEQ演算子で一致時にtrueを返却 | E-08 (L33-36) | ○ |
| C-52 | CurrencyRule.match()はEQ演算子で不一致時にfalseを返却 | E-08 (L33-36) | ○ |
| C-53 | CurrencyRule.match()はNEQ演算子で不一致時にtrueを返却 | E-08 (L33-36) | ○ |
| C-54 | CurrencyRule.match()はNEQ演算子で一致時にfalseを返却 | E-08 (L33-36) | ○ |
| C-55 | currencyIdsが空配列の場合はfalseを返却 | E-08 (L33-36) | ○ |
| C-56 | currencyIdsがnullの場合はfalseを返却 | E-08 (L28) | ○ |
| C-57 | getConstraints()はcurrencyIdsとoperatorの制約を返却 | E-08 (L38-44) | ○ |
| C-58 | getConfig()はRuleConfigを返却 | E-08 (L46-51) | ○ |
| C-59 | CurrencyRoute.getDecorated()はDecorationPatternExceptionをスロー | E-09 (L35-38) | ○ |
| C-60 | CurrencyRoute.buildName()は"currency-route-{salesChannelId}"を返却 | E-09 (L40-43) | ○ |
| C-61 | CurrencyRoute.load()はCurrencyRouteResponseを返却 | E-09 (L51-56) | ○ |
| C-62 | CurrencyRoute.load()はcacheTagCollector.addTag()を呼び出す | E-09 (L53) | ○ |
| C-63 | CurrencyRouteResponse.getCurrencies()はCurrencyCollectionを返却 | E-11 (L15-18) | ○ |
| C-64 | SalesChannelCurrencyDefinition.processCriteria()はEqualsFilterを追加 | E-12 (L15-18) | ○ |
| C-65 | CurrencyCountryRoundingEntity.getCurrencyId()はcurrencyIdを返却 | E-13 (L29-32) | ○ |
| C-66 | CurrencyCountryRoundingEntity.getCountryId()はcountryIdを返却 | E-13 (L39-42) | ○ |
| C-67 | CurrencyCountryRoundingEntity.getItemRounding()はCashRoundingConfigを返却 | E-13 (L49-52) | ○ |
| C-68 | CurrencyCountryRoundingEntity.getTotalRounding()はCashRoundingConfigを返却 | E-13 (L59-62) | ○ |
| C-69 | CurrencyCountryRoundingEntity.getCurrency()はCurrencyEntityを返却 | E-13 (L69-72) | ○ |
| C-70 | currencyはnullable型（遅延ロード） | E-13 (L25) | ○ |
| C-71 | CurrencyCountryRoundingEntity.getCountry()はCountryEntityを返却 | E-13 (L79-82) | ○ |
| C-72 | countryはnullable型（遅延ロード） | E-13 (L27) | ○ |
| C-73 | CurrencyCountryRoundingDefinition.getEntityName()は"currency_country_rounding"を返却 | E-14 (L28-31) | ○ |
| C-74 | CurrencyCountryRoundingDefinition.since()は"6.4.0.0"を返却 | E-14 (L23-26) | ○ |
| C-75 | CurrencyCountryRoundingDefinition.getParentDefinitionClass()はCurrencyDefinition::classを返却 | E-14 (L43-46) | ○ |
| C-76 | CurrencyCountryRoundingDefinition.defineFields()は必須フィールドを定義 | E-14 (L48-74) | ○ |
| C-77 | CurrencyCountryRoundingCollection.getApiAlias()は"currency_country_rounding_collection"を返却 | E-15 (L14-17) | ○ |
| C-78 | CurrencyTranslationEntity.getCurrencyId()はcurrencyIdを返却 | E-16 (L23-26) | ○ |
| C-79 | CurrencyTranslationEntity.getShortName()はshortNameを返却 | E-16 (L33-36) | ○ |
| C-80 | shortNameはnullable型 | E-16 (L17) | ○ |
| C-81 | CurrencyTranslationEntity.getName()はnameを返却 | E-16 (L43-46) | ○ |
| C-82 | CurrencyTranslationEntity.getCurrency()はCurrencyEntityを返却 | E-16 (L53-56) | ○ |
| C-83 | CurrencyTranslationDefinition.getEntityName()は"currency_translation"を返却 | E-17 (L18-22) | ○ |
| C-84 | CurrencyTranslationDefinition.getParentDefinitionClass()はCurrencyDefinition::classを返却 | E-17 (L39-42) | ○ |
| C-85 | CurrencyTranslationDefinition.defineFields()はshortNameとnameを定義 | E-17 (L44-51) | ○ |
| C-86 | CurrencyTranslationCollection.getCurrencyIds()は通貨IDの配列を返却 | E-18 (L17-20) | ○ |
| C-87 | 空コレクションのgetCurrencyIds()は空配列を返却 | E-18 (L17-20) | ○ |
| C-88 | CurrencyTranslationCollection.filterByCurrencyId()は指定IDでフィルタリング | E-18 (L22-25) | ○ |
| C-89 | 一致なしの場合filterByCurrencyId()は空コレクションを返却 | E-18 (L22-25) | ○ |
| C-90 | CurrencyTranslationCollection.getLanguageIds()は言語IDの配列を返却 | E-18 (L30-33) | ○ |
| C-91 | CurrencyTranslationCollection.filterByLanguageId()は指定IDでフィルタリング | E-18 (L35-38) | ○ |
| C-92 | CurrencyTranslationCollection.getApiAlias()は"currency_translation_collection"を返却 | E-18 (L40-43) | ○ |
| C-93 | CurrencyEvents.CURRENCY_WRITTEN_EVENTは"currency.written" | E-07 (L10) | ○ |
| C-94 | CurrencyEvents.CURRENCY_DELETED_EVENTは"currency.deleted" | E-07 (L12) | ○ |
| C-95 | CurrencyEvents.CURRENCY_LOADED_EVENTは"currency.loaded" | E-07 (L14) | ○ |
| C-96 | CashRoundingConfig.getDecimals()はdecimalsを返却 | E-19 (L18-21) | ○ |
| C-97 | CashRoundingConfig.getInterval()はintervalを返却 | E-19 (L28-31) | ○ |
| C-98 | CashRoundingConfig.roundForNet()はroundForNetを返却 | E-19 (L38-41) | ○ |
| C-99 | CashRoundingConfig.setDecimals()はdecimalsを設定 | E-19 (L23-26) | ○ |
| C-100 | CashRoundingConfig.setInterval()はintervalを設定 | E-19 (L33-36) | ○ |

## 4) 不足情報（Unknown / Missing）
- なし
  - 全てのテストケースはソースコードから直接導出されており、根拠が明確です。

## 5) リスクフラグ（レビュー観点）
- **0: 低リスク** - 全てのテストケースがソースコードから明確に導出されている
- 注意事項：
  - CurrencyFormatterはPHP intl拡張に依存するため、環境によって動作が異なる可能性あり
  - CurrencyValidatorはDefaults::CURRENCYの値に依存するため、デフォルト値の確認が必要
  - CurrencyRuleはRuleComparisonユーティリティに依存するため、その動作確認が必要

## 6) レビュアーチェックリスト（最小）
- [ ] CurrencyEntity: 全てのgetter/setterが正しく定義されているか確認
- [ ] CurrencyDefinition: 必須フィールド（factor, symbol, isoCode, itemRounding, totalRounding）のRequired flagを確認
- [ ] CurrencyFormatter: NumberFormatterの動作がロケールによって正しく変わるか確認
- [ ] CurrencyValidator: Defaults::CURRENCYの値が正しいか確認（デフォルト通貨保護）
- [ ] CurrencyLoadSubscriber: isSystemDefaultがRuntimeフィールドとして正しく設定されるか確認
- [ ] CurrencyRule: RuleComparison.uuids()の動作が正しいか確認
- [ ] CurrencyRoute: キャッシュタグが正しく生成されるか確認
- [ ] SalesChannelCurrencyDefinition: 販売チャネルIDでのフィルタリングが正しく動作するか確認
- [ ] CurrencyCountryRounding: 国別丸め設定のitem/totalRoundingが正しく機能するか確認
- [ ] CurrencyTranslation: 多言語対応（shortName, name）が正しく動作するか確認
