---
generated_at: 2026-02-24 10:30:00
metrics:
  claims_total: 70
  claims_with_evidence: 68
  claims_without_evidence: 2
confidence_derived: 0.97
---

# 根拠レポート：customer.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.97**
  - 根拠あり：68 / 70、根拠なし：2
- 優先レビュー（高）
  1. **UT-CUS-046**：存在しないグループ関係削除時の挙動（実際のDB挙動の確認が必要）
  2. **UT-CUS-053**：条件付きユニーク制約の動作確認が必要
  3. **UT-CUS-062**：条件付きユニーク制約の動作確認が必要

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

- E-01: `packages/modules/customer/src/services/customer-module.ts`（CustomerModuleServiceクラス定義、メソッド実装）
- E-02: `packages/modules/customer/src/models/customer.ts`（Customerモデル定義）
- E-03: `packages/modules/customer/src/models/address.ts`（CustomerAddressモデル定義）
- E-04: `packages/modules/customer/src/models/customer-group.ts`（CustomerGroupモデル定義）
- E-05: `packages/modules/customer/src/models/customer-group-customer.ts`（CustomerGroupCustomerモデル定義）
- E-06: `packages/modules/customer/src/joiner-config.ts`（joinerConfig定義）
- E-07: `packages/modules/customer/src/index.ts`（モジュールエクスポート）
- E-08: `packages/modules/customer/src/types/services/address.ts`（住所DTO型定義）
- E-09: `packages/modules/customer/src/types/services/customer-group-customer.ts`（グループ顧客DTO型定義）

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | createCustomers: 単一の顧客を作成できること | E-01（L93-120） | ○ |
| C-02 | createCustomers: 複数の顧客を配列で作成できること | E-01（L98-101, L119） | ○ |
| C-03 | createCustomers: 顧客作成時に住所も同時に作成できること | E-01（L139-155） | ○ |
| C-04 | createCustomers: 必須項目なしでも作成可能 | E-02（全フィールドnullable） | ○ |
| C-05 | createCustomers: 空の住所配列で作成可能 | E-01（L141-143 条件分岐） | ○ |
| C-06 | createCustomers_: トランザクション内処理 | E-01（L122-158 @InjectTransactionManager） | ○ |
| C-07 | updateCustomers: 単一IDで更新 | E-01（L161-165） | ○ |
| C-08 | updateCustomers: 複数IDで一括更新 | E-01（L167-171） | ○ |
| C-09 | updateCustomers: セレクタ条件で更新 | E-01（L173-177） | ○ |
| C-10 | updateCustomers: 存在しないID時のエラー | E-01（依存サービスの挙動） | ○ |
| C-11 | updateCustomers_: 文字列ID判定 | E-01（L214-218 isString判定） | ○ |
| C-12 | updateCustomers_: 配列ID判定 | E-01（L219-223 Array.isArray判定） | ○ |
| C-13 | updateCustomers_: セレクタ判定 | E-01（L224-229 else分岐） | ○ |
| C-14 | createCustomerGroups: 単一グループ作成 | E-01（L240-244） | ○ |
| C-15 | createCustomerGroups: 複数グループ作成 | E-01（L246-249） | ○ |
| C-16 | createCustomerGroups: 重複名エラー | E-04（L16-22 nameユニーク制約） | ○ |
| C-17 | createCustomerGroups_: トランザクション処理 | E-01（L272-288 @InjectTransactionManager） | ○ |
| C-18 | updateCustomerGroups: 単一ID更新 | E-01（L291-295） | ○ |
| C-19 | updateCustomerGroups: 複数ID更新 | E-01（L297-301） | ○ |
| C-20 | updateCustomerGroups: セレクタ更新 | E-01（L303-307） | ○ |
| C-21 | updateCustomerGroups_: ID/配列判定 | E-01（L353-366） | ○ |
| C-22 | updateCustomerGroups_: 単一ID結果返却 | E-01（L373-374 groups[0]返却） | ○ |
| C-23 | addCustomerToGroup: 単一ペア追加 | E-01（L380-383） | ○ |
| C-24 | addCustomerToGroup: 複数ペア追加 | E-01（L385-388） | ○ |
| C-25 | addCustomerToGroup: 存在しない顧客IDエラー | E-05（customer belongsTo） | ○ |
| C-26 | addCustomerToGroup: 存在しないグループIDエラー | E-05（customer_group belongsTo） | ○ |
| C-27 | addCustomerToGroup_: 配列結果マッピング | E-01（L411-416） | ○ |
| C-28 | addCustomerToGroup_: 単一結果返却 | E-01（L419） | ○ |
| C-29 | createCustomerAddresses: 単一住所作成 | E-01（L428-431） | ○ |
| C-30 | createCustomerAddresses: 複数住所作成 | E-01（L423-426） | ○ |
| C-31 | createCustomerAddresses: デフォルト配送先設定 | E-03（L8 is_default_shipping） | ○ |
| C-32 | createCustomerAddresses: デフォルト請求先設定 | E-03（L9 is_default_billing） | ○ |
| C-33 | createCustomerAddresses: 複数デフォルト配送先エラー | E-03（L33-36 ユニーク制約） | ○ |
| C-34 | createCustomerAddresses: 複数デフォルト請求先エラー | E-03（L27-31 ユニーク制約） | ○ |
| C-35 | createCustomerAddresses_: 単一を配列変換 | E-01（L465） | ○ |
| C-36 | updateCustomerAddresses: 単一ID更新 | E-01（L471-475） | ○ |
| C-37 | updateCustomerAddresses: 複数ID更新 | E-01（L477-481） | ○ |
| C-38 | updateCustomerAddresses: セレクタ更新 | E-01（L483-487） | ○ |
| C-39 | updateCustomerAddresses_: 文字列ID処理 | E-01（L531-537） | ○ |
| C-40 | updateCustomerAddresses_: 配列ID処理 | E-01（L538-542） | ○ |
| C-41 | updateCustomerAddresses_: セレクタ処理 | E-01（L543-548） | ○ |
| C-42 | removeCustomerFromGroup: 単一ペア削除 | E-01（L562-565） | ○ |
| C-43 | removeCustomerFromGroup: 複数ペア削除 | E-01（L566-569） | ○ |
| C-44 | removeCustomerFromGroup_: $or検索 | E-01（L586-588） | ○ |
| C-45 | removeCustomerFromGroup_: ID抽出削除 | E-01（L589-592） | ○ |
| C-46 | removeCustomerFromGroup_: 存在しない関係削除 | **根拠なし（DB挙動依存）** | △ |
| C-47 | __joinerConfig: joinerConfig返却 | E-01（L88-90）, E-06 | ○ |
| C-48 | Customer: cusプレフィックス | E-02（L8 prefix: "cus"） | ○ |
| C-49 | Customer: has_accountデフォルトfalse | E-02（L14 default(false)） | ○ |
| C-50 | Customer: addressesカスケード削除 | E-02（L25-26 cascades delete） | ○ |
| C-51 | Customer: groupsデタッチ | E-02（L27 cascades detach） | ○ |
| C-52 | Customer: email+has_accountユニーク | E-02（L29-35 indexes） | ○ |
| C-53 | Customer: 条件付きユニーク | E-02（L33 where条件） | △ |
| C-54 | CustomerAddress: cuaddrプレフィックス | E-03（L6 prefix: "cuaddr"） | ○ |
| C-55 | CustomerAddress: is_default_shippingデフォルト | E-03（L8 default(false)） | ○ |
| C-56 | CustomerAddress: is_default_billingデフォルト | E-03（L9 default(false)） | ○ |
| C-57 | CustomerAddress: customerリレーション | E-03（L21-23 belongsTo） | ○ |
| C-58 | CustomerAddress: billing制約 | E-03（L27-31） | ○ |
| C-59 | CustomerAddress: shipping制約 | E-03（L32-37） | ○ |
| C-60 | CustomerGroup: cusgroupプレフィックス | E-04（L7 prefix: "cusgroup"） | ○ |
| C-61 | CustomerGroup: nameユニーク | E-04（L16-22） | ○ |
| C-62 | CustomerGroup: 条件付きユニーク | E-04（L20 where条件） | △ |
| C-63 | CustomerGroup: customersデタッチ | E-04（L23-25 cascades detach） | ○ |
| C-64 | CustomerGroup: name translatable | E-04（L8 translatable()） | ○ |
| C-65 | CustomerGroupCustomer: cusgcプレフィックス | E-05（L6 prefix: "cusgc"） | ○ |
| C-66 | CustomerGroupCustomer: customerリレーション | E-05（L9-11 belongsTo） | ○ |
| C-67 | CustomerGroupCustomer: customer_groupリレーション | E-05（L12-14 belongsTo） | ○ |
| C-68 | joinerConfig: CUSTOMER定義 | E-06（Modules.CUSTOMER） | ○ |
| C-69 | Module: CustomerModuleService登録 | E-07（L4-6） | ○ |
| C-70 | Module: CUSTOMER識別子 | E-07（Modules.CUSTOMER） | ○ |

## 4) 不足情報（Unknown / Missing）
- **UT-CUS-046**: 存在しないグループ関係の削除時、DBレベルでどのような挙動になるかはランタイム依存。list結果が空配列の場合、delete([])の挙動は内部サービス実装に依存。
  - 候補：統合テストでの実行確認 / customerGroupCustomerService実装の確認
- **UT-CUS-053, UT-CUS-062**: 条件付きユニーク制約（WHERE deleted_at IS NULL）の動作は、MikroORM/DBレベルの実装に依存。ソースコードで定義は確認できるが、実際の動作確認は統合テストが必要。
  - 候補：MikroORM ドキュメント / 統合テスト

## 5) リスクフラグ（レビュー観点）
- **リスク0（低）**: モデル定義関連テストケース（UT-CUS-048〜070）- コード定義から直接導出
- **リスク1（中）**: サービスメソッドのオーバーロード関連テストケース - 型シグネチャは確認済みだが、実行時の挙動確認推奨
- **リスク1（中）**: エラー系テストケース（UT-CUS-010, 025, 026, 033, 034） - 依存サービスの実装に依存
- **リスク2（高）**: 条件付きユニーク制約テストケース（UT-CUS-053, 062） - DB/ORM挙動の確認が必要

## 6) レビュアーチェックリスト（最小）
- [ ] 高優先度テストケース（優先度「高」）の期待結果が妥当か確認
- [ ] ユニーク制約関連のテストケースが実際のDB制約と一致するか確認
- [ ] カスケード削除/デタッチの挙動がビジネス要件と一致するか確認
- [ ] 境界値テストケース（空配列、存在しないデータ）のカバレッジが十分か確認
- [ ] 条件付きユニーク制約（deleted_at IS NULL）の動作を統合テストで検証
