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

# 根拠レポート：enterprise-models.csv

## 本レポートについて

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

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**1.00**
  - 根拠あり：144 / 144、根拠なし：0
- 優先レビュー（高）
  1. **SlaEvent create_notifications**: 複数通知先への配信ロジックが複雑（E-11参照）
  2. **AppliedSla スコープ群**: SQLクエリの正確性を実行時に確認推奨（E-03参照）
  3. **CopilotMessage validate_message_attributes**: 許可キーリストの妥当性確認（E-07参照）

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

- E-01: `enterprise/app/models/account_saml_settings.rb`
- E-02: `enterprise/app/models/agent_capacity_policy.rb`
- E-03: `enterprise/app/models/applied_sla.rb`
- E-04: `enterprise/app/models/article_embedding.rb`
- E-05: `enterprise/app/models/captain_inbox.rb`
- E-06: `enterprise/app/models/company.rb`
- E-07: `enterprise/app/models/copilot_message.rb`
- E-08: `enterprise/app/models/copilot_thread.rb`
- E-09: `enterprise/app/models/custom_role.rb`
- E-10: `enterprise/app/models/inbox_capacity_limit.rb`
- E-11: `enterprise/app/models/sla_event.rb`
- E-12: `enterprise/app/models/sla_policy.rb`

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

### AccountSamlSettings (UT-ENT-001 〜 UT-ENT-017)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | accountリレーションが存在する | E-01 L20 `belongs_to :account` | ○ |
| C-02 | account_idのpresence検証 | E-01 L22 `validates :account_id, presence: true` | ○ |
| C-03 | sso_urlのpresence検証 | E-01 L23 `validates :sso_url, presence: true` | ○ |
| C-04 | certificateのpresence検証 | E-01 L24 `validates :certificate, presence: true` | ○ |
| C-05 | idp_entity_idのpresence検証 | E-01 L25 `validates :idp_entity_id, presence: true` | ○ |
| C-06 | X509証明書検証メソッド | E-01 L72-78 `certificate_must_be_valid_x509` | ○ |
| C-07 | saml_enabled?メソッド | E-01 L33-35 | ○ |
| C-08 | certificate_fingerprintメソッド | E-01 L37-47 | ○ |
| C-09 | set_sp_entity_idメソッド | E-01 L51-54 | ○ |
| C-10 | update_account_users_providerコールバック | E-01 L30, L64-66 | ○ |
| C-11 | reset_account_users_providerコールバック | E-01 L31, L68-70 | ○ |

### AgentCapacityPolicy (UT-ENT-018 〜 UT-ENT-027)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-12 | accountリレーション | E-02 L20 `belongs_to :account` | ○ |
| C-13 | inbox_capacity_limitsリレーション | E-02 L21 `has_many :inbox_capacity_limits, dependent: :destroy` | ○ |
| C-14 | inboxes throughリレーション | E-02 L22 `has_many :inboxes, through: :inbox_capacity_limits` | ○ |
| C-15 | account_usersリレーション | E-02 L23 `has_many :account_users, dependent: :nullify` | ○ |
| C-16 | name検証（presence, length） | E-02 L25 `validates :name, presence: true, length: { maximum: MAX_NAME_LENGTH }` | ○ |
| C-17 | MAX_NAME_LENGTH=255 | E-02 L18 `MAX_NAME_LENGTH = 255` | ○ |
| C-18 | account検証 | E-02 L26 `validates :account, presence: true` | ○ |

### AppliedSla (UT-ENT-028 〜 UT-ENT-048)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-19 | accountリレーション | E-03 L21 `belongs_to :account` | ○ |
| C-20 | sla_policyリレーション | E-03 L22 `belongs_to :sla_policy` | ○ |
| C-21 | conversationリレーション | E-03 L23 `belongs_to :conversation` | ○ |
| C-22 | sla_eventsリレーション | E-03 L25 `has_many :sla_events, dependent: :destroy_async` | ○ |
| C-23 | account_idユニーク制約 | E-03 L27 `validates :account_id, uniqueness: { scope: %i[sla_policy_id conversation_id] }` | ○ |
| C-24 | sla_status enum定義 | E-03 L30 `enum sla_status: { active: 0, hit: 1, missed: 2, active_with_misses: 3 }` | ○ |
| C-25 | filter_by_date_rangeスコープ | E-03 L32 | ○ |
| C-26 | filter_by_inbox_idスコープ | E-03 L33 | ○ |
| C-27 | filter_by_team_idスコープ | E-03 L34 | ○ |
| C-28 | filter_by_sla_policy_idスコープ | E-03 L35 | ○ |
| C-29 | filter_by_label_listスコープ | E-03 L36-38 | ○ |
| C-30 | filter_by_assigned_agent_idスコープ | E-03 L39-41 | ○ |
| C-31 | missedスコープ | E-03 L42 | ○ |
| C-32 | push_event_dataメソッド | E-03 L46-59 | ○ |
| C-33 | push_conversation_eventコールバック | E-03 L44, L64-72 | ○ |
| C-34 | ensure_account_idメソッド | E-03 L74-76 | ○ |

### ArticleEmbedding (UT-ENT-049 〜 UT-ENT-054)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-35 | articleリレーション | E-04 L17 `belongs_to :article` | ○ |
| C-36 | has_neighbors設定 | E-04 L18 `has_neighbors :embedding, normalize: true` | ○ |
| C-37 | account_id委譲 | E-04 L22 `delegate :account_id, to: :article` | ○ |
| C-38 | update_response_embeddingコールバック | E-04 L20, L26-30 | ○ |

### CaptainInbox (UT-ENT-055 〜 UT-ENT-058)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-39 | captain_assistantリレーション | E-05 L18 `belongs_to :captain_assistant, class_name: 'Captain::Assistant'` | ○ |
| C-40 | inboxリレーション | E-05 L19 `belongs_to :inbox` | ○ |
| C-41 | inbox_idユニーク制約 | E-05 L21 `validates :inbox_id, uniqueness: true` | ○ |

### Company (UT-ENT-059 〜 UT-ENT-076)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-42 | Avatarable include | E-06 L21 `include Avatarable` | ○ |
| C-43 | account_id検証 | E-06 L22 `validates :account_id, presence: true` | ○ |
| C-44 | name検証 | E-06 L23 `validates :name, presence: true, length: { maximum: Limits::COMPANY_NAME_LENGTH_LIMIT }` | ○ |
| C-45 | domain形式検証 | E-06 L24-27 | ○ |
| C-46 | domainユニーク制約 | E-06 L28 | ○ |
| C-47 | description検証 | E-06 L29 | ○ |
| C-48 | accountリレーション | E-06 L31 `belongs_to :account` | ○ |
| C-49 | contactsリレーション | E-06 L32 `has_many :contacts, dependent: :nullify` | ○ |
| C-50 | ordered_by_nameスコープ | E-06 L34 | ○ |
| C-51 | search_by_name_or_domainスコープ | E-06 L35-37 | ○ |
| C-52 | order_on_contacts_countスコープ | E-06 L38-44 | ○ |

### CopilotMessage (UT-ENT-077 〜 UT-ENT-090)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-53 | copilot_threadリレーション | E-07 L19 `belongs_to :copilot_thread` | ○ |
| C-54 | accountリレーション | E-07 L20 `belongs_to :account` | ○ |
| C-55 | message_type enum | E-07 L22 `enum message_type: { user: 0, assistant: 1, assistant_thinking: 2 }` | ○ |
| C-56 | message_type検証 | E-07 L24 `validates :message_type, presence: true` | ○ |
| C-57 | message検証 | E-07 L25 `validates :message, presence: true` | ○ |
| C-58 | validate_message_attributes | E-07 L60-67 | ○ |
| C-59 | ensure_accountメソッド | E-07 L52-54 | ○ |
| C-60 | push_event_dataメソッド | E-07 L30-38 | ○ |
| C-61 | enqueue_response_jobメソッド | E-07 L40-48 | ○ |
| C-62 | broadcast_messageコールバック | E-07 L28, L56-58 | ○ |

### CopilotThread (UT-ENT-091 〜 UT-ENT-100)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-63 | userリレーション | E-08 L20 `belongs_to :user` | ○ |
| C-64 | accountリレーション | E-08 L21 `belongs_to :account` | ○ |
| C-65 | assistantリレーション | E-08 L22 `belongs_to :assistant, class_name: 'Captain::Assistant'` | ○ |
| C-66 | copilot_messagesリレーション | E-08 L23 `has_many :copilot_messages, dependent: :destroy_async` | ○ |
| C-67 | title検証 | E-08 L25 `validates :title, presence: true` | ○ |
| C-68 | push_event_dataメソッド | E-08 L27-35 | ○ |
| C-69 | previous_historyメソッド | E-08 L37-47 | ○ |

### CustomRole (UT-ENT-101 〜 UT-ENT-108)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-70 | accountリレーション | E-09 L28 `belongs_to :account` | ○ |
| C-71 | account_usersリレーション | E-09 L29 `has_many :account_users, dependent: :nullify` | ○ |
| C-72 | PERMISSIONS定数 | E-09 L31-38 | ○ |
| C-73 | name検証 | E-09 L40 `validates :name, presence: true` | ○ |
| C-74 | permissions検証 | E-09 L41 `validates :permissions, inclusion: { in: PERMISSIONS }` | ○ |

### InboxCapacityLimit (UT-ENT-109 〜 UT-ENT-117)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-75 | agent_capacity_policyリレーション | E-10 L19 `belongs_to :agent_capacity_policy` | ○ |
| C-76 | inboxリレーション | E-10 L20 `belongs_to :inbox` | ○ |
| C-77 | conversation_limit検証 | E-10 L22 `validates :conversation_limit, presence: true, numericality: { greater_than: 0, only_integer: true }` | ○ |
| C-78 | inbox_idユニーク制約 | E-10 L23 `validates :inbox_id, uniqueness: { scope: :agent_capacity_policy_id }` | ○ |

### SlaEvent (UT-ENT-118 〜 UT-ENT-136)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-79 | accountリレーション | E-11 L25 `belongs_to :account` | ○ |
| C-80 | inboxリレーション | E-11 L26 `belongs_to :inbox` | ○ |
| C-81 | conversationリレーション | E-11 L27 `belongs_to :conversation` | ○ |
| C-82 | sla_policyリレーション | E-11 L28 `belongs_to :sla_policy` | ○ |
| C-83 | applied_slaリレーション | E-11 L29 `belongs_to :applied_sla` | ○ |
| C-84 | event_type enum | E-11 L31 `enum event_type: { frt: 0, nrt: 1, rt: 2 }` | ○ |
| C-85 | ensure_applied_sla_idメソッド | E-11 L48-50 | ○ |
| C-86 | ensure_account_idメソッド | E-11 L52-54 | ○ |
| C-87 | ensure_inbox_idメソッド | E-11 L56-58 | ○ |
| C-88 | ensure_sla_policy_idメソッド | E-11 L60-62 | ○ |
| C-89 | push_event_dataメソッド | E-11 L36-44 | ○ |
| C-90 | create_notificationsメソッド | E-11 L64-86 | ○ |

### SlaPolicy (UT-ENT-137 〜 UT-ENT-144)
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-91 | accountリレーション | E-12 L21 `belongs_to :account` | ○ |
| C-92 | name検証 | E-12 L22 `validates :name, presence: true` | ○ |
| C-93 | conversationsリレーション | E-12 L24 `has_many :conversations, dependent: :nullify` | ○ |
| C-94 | applied_slasリレーション | E-12 L25 `has_many :applied_slas, dependent: :destroy_async` | ○ |
| C-95 | push_event_dataメソッド | E-12 L27-35 | ○ |

## 4) 不足情報（Unknown / Missing）
- 根拠なしの項目はありません
- 以下の点は実行時テストで確認推奨：
  - Limits定数（COMPANY_NAME_LENGTH_LIMIT, COMPANY_DESCRIPTION_LENGTH_LIMIT）の具体的な値
  - GlobalConfigServiceの動作（AccountSamlSettings）
  - neighbor検索の実際の動作（ArticleEmbedding）

## 5) リスクフラグ（レビュー観点）
- **0（低リスク）**: リレーション定義、基本的なバリデーション
- **1（中リスク）**: スコープのSQL構文、enumマッピング
- **2（高リスク）**:
  - SlaEvent.create_notifications - 複数ユーザーへの通知ロジックが複雑
  - AccountSamlSettings.certificate_must_be_valid_x509 - セキュリティ関連の証明書検証
  - AppliedSla スコープ群 - JOINを含む複雑なクエリ

## 6) レビュアーチェックリスト（最小）
- [ ] SlaEvent.create_notifications の通知対象ユーザー抽出ロジックが正しいか確認
- [ ] AccountSamlSettings の証明書検証が実際のX509証明書で正しく動作するか確認
- [ ] AppliedSla の各スコープがJOINを含むクエリで正しく動作するか確認
- [ ] CopilotMessage.validate_message_attributes の許可キーリストが要件と一致しているか確認
- [ ] CustomRole.PERMISSIONS の権限リストがアプリケーション全体で整合性があるか確認
- [ ] InboxCapacityLimit.conversation_limit の最大値制限が必要か検討
- [ ] Company.domain のバリデーション正規表現が全ての有効なドメイン形式をカバーしているか確認
