---
generated_at: 2026-01-28 10:30:00
metrics:
  claims_total: 57
  claims_with_evidence: 57
  claims_without_evidence: 0
confidence_derived: 1.00
---

# 根拠レポート: filter_screen.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：57 / 57、根拠なし：0
- 優先レビュー（高）
  1. **UT-FLT-014**：FilterRepositoryImpのエラーハンドリングにおけるnull参照の問題
  2. **UT-FLT-016〜020**：initStateにおける価格初期化ロジックの複雑性
  3. **UT-FLT-031〜034**：チェックボックス選択/解除時のフィルター操作ロジック

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

- E-01: `lib/screens/filter_screen/bloc/filter_bloc.dart`（FilterBloc実装）
- E-02: `lib/screens/filter_screen/bloc/filter_state.dart`（FilterBaseState、FilterFetchState実装）
- E-03: `lib/screens/filter_screen/bloc/filter_event.dart`（FilterSortFetchEvent実装）
- E-04: `lib/screens/filter_screen/bloc/filter_repository.dart`（FilterRepositoryImp実装）
- E-05: `lib/screens/filter_screen/view/filter_screen.dart`（SubCategoriesFilterScreen実装）
- E-06: `lib/screens/filter_screen/view/sort_screen.dart`（SortBottomSheet実装）
- E-07: `lib/data_model/categories_data_model/filter_product_model.dart`（GetFilterAttribute、SortOrder、Value実装）
- E-08: `lib/screens/filter_screen/utils/index.dart`（エクスポート定義）

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

### FilterBloc関連（UT-FLT-001〜005）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | FilterSortFetchEventでフィルター取得が成功する | E-01 L28-32 | ○ |
| C-02 | リポジトリエラー時にFilterFetchState.failが発行される | E-01 L33-36 | ○ |
| C-03 | categorySlugがnullの場合空文字で処理される | E-01 L31 (`event.categorySlug ?? ""`) | ○ |
| C-04 | categorySlugが空文字の場合の処理 | E-01 L31 | ○ |
| C-05 | 初期状態がFilterInitialState | E-01 L23 | ○ |

### FilterState関連（UT-FLT-006〜010）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-06 | FilterInitialState.propsが空リスト | E-02 L21 | ○ |
| C-07 | FilterFetchState.success時にstatus=success | E-02 L29-30 | ○ |
| C-08 | FilterFetchState.fail時にstatus=fail | E-02 L32 | ○ |
| C-09 | filterModelがnullでない場合propsに含まれる | E-02 L35 | ○ |
| C-10 | filterModelがnullの場合propsに空文字 | E-02 L35 | ○ |

### FilterEvent関連（UT-FLT-011〜012）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-11 | FilterSortFetchEventがcategorySlugを保持 | E-03 L17-18 | ○ |
| C-12 | FilterSortFetchEvent.propsが空リスト | E-03 L21 | ○ |

### FilterRepository関連（UT-FLT-013〜015）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-13 | APIからフィルター属性を取得できる | E-04 L20-23 | ○ |
| C-14 | API例外時にnull参照エラー発生の可能性 | E-04 L25-29（catchでnullのままreturn） | ○ |
| C-15 | 空文字categorySlugの処理 | E-04 L20 | ○ |

### SubCategoriesFilterScreen関連（UT-FLT-016〜040）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-16 | superAttributesにprice含む場合の初期化 | E-05 L37-42 | ○ |
| C-17 | superAttributes空時にdataから価格取得 | E-05 L44-45 | ○ |
| C-18 | superAttributesがnullの場合の処理 | E-05 L37 (`widget.superAttributes ?? []`) | ○ |
| C-19 | data.minPriceがnull時にデフォルト0 | E-05 L44 (`widget.data?.minPrice ?? 0`) | ○ |
| C-20 | data.maxPriceがnull時にデフォルト1 | E-05 L45 (`widget.data?.maxPrice ?? 1`) | ○ |
| C-21 | fetchFilterDataでtemp/showTempマップ構築 | E-05 L56-105 | ○ |
| C-22 | 価格フィルターの解析 | E-05 L78-80 | ○ |
| C-23 | filterAttributesが空の場合の処理 | E-05 L61 | ○ |
| C-24 | filtersがマッチしない場合の処理 | E-05 L69-72 | ○ |
| C-25 | 複数フィルター値のカンマ区切り解析 | E-05 L76-88 | ○ |
| C-26 | AppBarにfilterByタイトル表示 | E-05 L131 | ○ |
| C-27 | クリアボタン表示 | E-05 L150-151 | ○ |
| C-28 | 価格スライダー表示 | E-05 L230-273 | ○ |
| C-29 | CheckboxListTile表示 | E-05 L281-368 | ○ |
| C-30 | options空時のListView | E-05 L278 | ○ |
| C-31 | チェックON時にfiltersに追加 | E-05 L291-314 | ○ |
| C-32 | チェックOFF時にfiltersから削除 | E-05 L315-337 | ○ |
| C-33 | 既存フィルターに値追加 | E-05 L292-308 | ○ |
| C-34 | 最後の値削除時にエントリ削除 | E-05 L328-329 | ○ |
| C-35 | 価格スライダー変更時のfilters更新 | E-05 L244-252 | ○ |
| C-36 | 価格スライダー変更時のsuperAttributes更新 | E-05 L254-269 | ○ |
| C-37 | 戻るボタン押下時のpop | E-05 L114-119 | ○ |
| C-38 | superAttributes空時のwidget.superAttributesをpop | E-05 L117-119 | ○ |
| C-39 | クリアボタン押下時のsuperAttributesリセット | E-05 L136 | ○ |
| C-40 | クリアボタン押下時のfilters削除 | E-05 L137-139 | ○ |

### SortBottomSheet関連（UT-FLT-041〜050）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-41 | initState時にFilterSortFetchEvent発行 | E-06 L40 | ○ |
| C-42 | appStoragePrefからソート値取得 | E-06 L44-46 | ○ |
| C-43 | FilterInitialState時にLoader表示 | E-06 L59-60 | ○ |
| C-44 | FilterFetchState時にsortList表示 | E-06 L62-64 | ○ |
| C-45 | RadioListTile表示 | E-06 L115-154 | ○ |
| C-46 | クリアボタン押下時にsortフィルター削除 | E-06 L84-85 | ○ |
| C-47 | クリアボタン押下時にappStoragePrefクリア | E-06 L90 | ○ |
| C-48 | ソート選択時にfilters更新 | E-06 L130-137 | ○ |
| C-49 | ソート選択時にappStoragePref保存 | E-06 L127 | ○ |
| C-50 | ソート選択時にFetchSubCategoryEvent発行 | E-06 L139-142 | ○ |

### データモデル関連（UT-FLT-051〜057）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-51 | GetFilterAttribute.fromJson | E-07 L33-34 | ○ |
| C-52 | minPrice/maxPriceのnull許容 | E-07 L19-20 | ○ |
| C-53 | GetFilterAttribute.toJson | E-07 L37 | ○ |
| C-54 | SortOrder.fromJson | E-07 L135-136 | ○ |
| C-55 | SortOrder.toJson | E-07 L138 | ○ |
| C-56 | Value.fromJson | E-07 L148 | ○ |
| C-57 | Value.toJson | E-07 L150 | ○ |

## 4) 不足情報（Unknown / Missing）
- 全てのテストケースに対してソースコード上の根拠が確認できました
- 特に不足情報はありません

## 5) リスクフラグ（レビュー観点）
- **リスクレベル1（中リスク）**: FilterRepositoryImp.getFilterProductsメソッドにおいて、例外発生時にnullのままreturnするためnull参照エラーが発生する可能性あり（UT-FLT-014）
- **リスクレベル1（中リスク）**: SubCategoriesFilterScreenのinitStateにおける価格初期化ロジックが複雑で、条件分岐が多い（UT-FLT-016〜020）
- **リスクレベル0（低リスク）**: その他のテストケースは標準的なBLoCパターンとFlutter Widgetのテストであり、リスクは低い

## 6) レビュアーチェックリスト（最小）
- [ ] FilterRepositoryImpのエラーハンドリングにおいてnull安全性が確保されているか確認
- [ ] SubCategoriesFilterScreenのinitStateにおける価格初期化の全パターンが網羅されているか確認
- [ ] チェックボックス選択/解除時のフィルター操作ロジックが正しく動作するか確認
- [ ] SortBottomSheetのソート選択時にappStoragePrefへの保存が適切に行われるか確認
- [ ] データモデル（GetFilterAttribute、SortOrder、Value）のJSON変換が正しいか確認
