Sales CRM コンテキストマップ / Context Map
Sales CRM のバウンデッドコンテキスト間の関係性・統合パターン・データオーナーシップを定義する。
→ 対応ドメイン: docs/ddd/pms/02-context-map.md (PMS 側のコンテキストマップ)
→ 知識ベース: knowledge/05-architecture-patterns/ddd-tactical.md (BC 統合パターン)
全体マップ
バウンデッドコンテキスト一覧
| # | コンテキスト | 英語名 | エンティティ | 責務 |
|---|
| 1 | 営業パイプライン | Sales Pipeline | Account, Deal, Activity, Comment, DuplicateCandidate | 案件管理・営業活動の記録・コメント・重複検出 |
| 2 | 顧客サクセス | Customer Success | Contact, Account (共有) | 担当者管理・関係構築 |
| 3 | オペレーション | Operations | DailyReport, Activity (共有) | 日報・活動集計・分析 |
| 4 | ファイル管理 | File Management | File, QuoteTemplate, QuoteDocument | ドキュメント・名刺・見積書管理 |
| 5 | 認証・権限 | IAM | User, StaffGroup, CompanySettings | 認証・RBAC・企業設定 |
| 6 | 設定 | Configuration | CustomFieldConfig | カスタムフィールド管理 |
| 7 | レポート・分析 | Reporting | PipelineReport, ActivitySummary, GoalProgress | パイプライン集計・活動分析・目標進捗 (読取専用投影) |
| 8 | 目標管理 | Goal Tracking | Goal, GoalValue | 目標定義・目標値管理 |
コンテキスト間関係
Sales CRM 内部
| 上流 (Upstream) | 下流 (Downstream) | パターン | 説明 |
|---|
| Sales Pipeline | Customer Success | Shared Kernel | Account, Contact を共有。Contact 作成時に Account が必須 |
| Sales Pipeline | Operations | Customer-Supplier | Deal の進捗を日報に反映。Activity 実績を日報に集計 |
| Customer Success | Operations | Customer-Supplier | Activity 実績を日報の activitySummaries に集計 |
| IAM | 全コンテキスト | Generic Subdomain | 全エンティティの salesRep, group, createdBy, updatedBy が Users を参照 |
| Configuration | Sales Pipeline | Generic Subdomain | Account, Contact, Deal にカスタムフィールドを動的追加 |
| File Management | Sales Pipeline | Conformist | File は Account, Contact, Deal に多対多で関連付け |
| Sales Pipeline | Reporting | Projection | Deal データを PipelineReport に集計 (読取専用) |
| Activity Tracking | Reporting | Projection | Activity データを ActivitySummary に集計 (読取専用) |
| IAM | Reporting | Generic Subdomain | レポートの RBAC スコーピングに User.role を使用 |
| Sales Pipeline | File Management | Customer-Supplier | QuoteDocument が Deal/Account/Contact を参照。PDF を File として保存 |
| Goal Tracking | Sales Pipeline | Customer-Supplier | Goal が Deal データを集計対象として参照 |
| Goal Tracking | Activity Tracking | Customer-Supplier | Goal が Activity データを集計対象として参照 |
| Goal Tracking | Reporting | Projection | GoalProgress を GoalValue + 実績データから投影 |
| Activity Tracking | IAM | Generic Subdomain | CalendarSync/EmailCapture が User を参照 |
Sales CRM → PMS (外部連携)
| 上流 | 下流 | パターン | データフロー |
|---|
| Sales Pipeline | Integration Contracts | Conformist | Sales は共有コントラクトの型定義に準拠 |
| Integration Contracts | PMS (見積・受注) | ACL | PMS は Anti-Corruption Layer で独自モデルに変換 |
| PMS (見積・受注) | Sales Pipeline | ACL | ProductionTracking で製造進捗を Sales に反映 |
Sales CRM Integration PMS
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Deal │──成約──▶ │ Create │──ACL──▶ │ 受注 │
│ (won) │ │ Order │ │ (Order) │
│ │ │ Request │ │ │
│ │◀─進捗── │ Domain │◀─Events── │ 製作指示 │
│ +produc- │ │ Event │ │ (WO) │
│ tion │ │ │ │ │
│ Tracking│ │ │ │ │
└──────────┘ └──────────┘ └──────────┘
データオーナーシップ
| データ | オーナー | 共有先 | 同期方式 |
|---|
| 取引先 (Account) | Sales CRM | PMS (得意先マスタ) | CustomerSyncPayload (API) |
| 担当者 (Contact) | Sales CRM | — | — |
| 案件 (Deal) | Sales CRM | PMS (受注) | CreateOrderRequest (成約時) |
| 活動 (Activity) | Sales CRM | — | — |
| 日報 (DailyReport) | Sales CRM | — | — |
| 製品カタログ | PMS | Sales CRM | ProductCatalogResponse (API) |
| 製造進捗 | PMS | Sales CRM | DomainEvent (Webhook) |
| 見積回答 | PMS | Sales CRM | QuoteResponse (API) |
共有エンティティ
| エンティティ | 共有する BC | 調整方式 |
|---|
| Account | Sales + Customer Success + File Mgmt | Contact/Deal/File 作成時に既存 Account を選択 |
| Activity | Sales + Operations | DailyReport が Activity を参照して集計 |
| User | 全コンテキスト | salesRep / createdBy / updatedBy で参照 |
| StaffGroup | IAM + 全コンテキスト | group フィールドで StaffGroups.slug を参照 |
クロスコンテキストワークフロー
1. 新規案件登録フロー
User → Account 選択 (Sales)
→ Contact 選択 or 新規作成 (Customer Success)
→ Deal 作成 (Sales)
→ Activity 記録 (Sales)
→ DailyReport に反映 (Operations)
2. 案件成約 → PMS 連携フロー
Deal.status → "won" (Sales)
→ CreateOrderRequest 送信 (Integration)
→ PMS が受注登録 (PMS)
→ OrderReceived イベント (Integration)
→ ProductionTracking 作成 (Sales)
→ ProductionStarted / Completed イベント (PMS → Sales)
→ Deal.productionTracking 更新 (Sales)
3. 日報作成フロー
User → reportDate 指定 (Operations)
→ dealSummaries: 当日関連した Deal を選択 + 確度更新 (Sales参照)
→ activitySummaries: 当日の Activity を選択 (Sales参照)
→ notes, nextActions 入力
→ 一意制約: 同一 user × reportDate で重複禁止
技術的統合パターン
ACL (Anti-Corruption Layer)
Sales CRM ↔ PMS 間の ACL は src/integrations/pms/ に配置:
| レイヤー | ファイル | 責務 |
|---|
| 型定義 | types.ts | integration-contracts パッケージからの再エクスポート |
| 設定 | config.ts | 環境変数ベースの接続設定 (API URL, Key, Webhook Secret) |
| クライアント | services/pmsClient.ts | PMS API 呼び出し |
| イベント処理 | services/eventProcessor.ts | PMS → Sales のドメインイベント変換 |
| Webhook 認証 | services/webhookAuth.ts | HMAC 署名検証 |
| 応答拡張 | hooks/enrichDealResponse.ts | Deal 応答に ProductionTracking を付加 |
| フィールド拡張 | hooks/extendDealFields.ts | Deal に externalOrderId フィールドを追加 |
| Account 拡張 | hooks/extendAccountFields.ts | Account に PMS 連携フィールドを追加 |
楽観ロック (Optimistic Locking)
全主要コレクション (Account, Contact, Deal, Activity, File, CompanySettings, CustomFieldConfig) で共通パターン:
beforeChange:
if update:
if incomingVersion !== currentVersion:
→ 409 Conflict + latestData
else:
version++
if create:
version = 0