Fab Forward Dev/

DDD ドキュメント

Sales CRM コンテキストマップ / Context Map

Sales CRM のバウンデッドコンテキスト間の関係性・統合パターン・データオーナーシップを定義する。

対応ドメイン: docs/ddd/pms/02-context-map.md (PMS 側のコンテキストマップ) → 知識ベース: knowledge/05-architecture-patterns/ddd-tactical.md (BC 統合パターン)


全体マップ


バウンデッドコンテキスト一覧

#コンテキスト英語名エンティティ責務
1営業パイプラインSales PipelineAccount, Deal, Activity, Comment, DuplicateCandidate案件管理・営業活動の記録・コメント・重複検出
2顧客サクセスCustomer SuccessContact, Account (共有)担当者管理・関係構築
3オペレーションOperationsDailyReport, Activity (共有)日報・活動集計・分析
4ファイル管理File ManagementFile, QuoteTemplate, QuoteDocumentドキュメント・名刺・見積書管理
5認証・権限IAMUser, StaffGroup, CompanySettings認証・RBAC・企業設定
6設定ConfigurationCustomFieldConfigカスタムフィールド管理
7レポート・分析ReportingPipelineReport, ActivitySummary, GoalProgressパイプライン集計・活動分析・目標進捗 (読取専用投影)
8目標管理Goal TrackingGoal, GoalValue目標定義・目標値管理

コンテキスト間関係

Sales CRM 内部

上流 (Upstream)下流 (Downstream)パターン説明
Sales PipelineCustomer SuccessShared KernelAccount, Contact を共有。Contact 作成時に Account が必須
Sales PipelineOperationsCustomer-SupplierDeal の進捗を日報に反映。Activity 実績を日報に集計
Customer SuccessOperationsCustomer-SupplierActivity 実績を日報の activitySummaries に集計
IAM全コンテキストGeneric Subdomain全エンティティの salesRep, group, createdBy, updatedBy が Users を参照
ConfigurationSales PipelineGeneric SubdomainAccount, Contact, Deal にカスタムフィールドを動的追加
File ManagementSales PipelineConformistFile は Account, Contact, Deal に多対多で関連付け
Sales PipelineReportingProjectionDeal データを PipelineReport に集計 (読取専用)
Activity TrackingReportingProjectionActivity データを ActivitySummary に集計 (読取専用)
IAMReportingGeneric Subdomainレポートの RBAC スコーピングに User.role を使用
Sales PipelineFile ManagementCustomer-SupplierQuoteDocument が Deal/Account/Contact を参照。PDF を File として保存
Goal TrackingSales PipelineCustomer-SupplierGoal が Deal データを集計対象として参照
Goal TrackingActivity TrackingCustomer-SupplierGoal が Activity データを集計対象として参照
Goal TrackingReportingProjectionGoalProgress を GoalValue + 実績データから投影
Activity TrackingIAMGeneric SubdomainCalendarSync/EmailCapture が User を参照

Sales CRM → PMS (外部連携)

上流下流パターンデータフロー
Sales PipelineIntegration ContractsConformistSales は共有コントラクトの型定義に準拠
Integration ContractsPMS (見積・受注)ACLPMS は Anti-Corruption Layer で独自モデルに変換
PMS (見積・受注)Sales PipelineACLProductionTracking で製造進捗を Sales に反映
Sales CRM                Integration              PMS
┌──────────┐            ┌──────────┐            ┌──────────┐
│ Deal     │──成約──▶   │ Create   │──ACL──▶    │ 受注     │
│ (won)    │            │ Order    │            │ (Order)  │
│          │            │ Request  │            │          │
│          │◀─進捗──    │ Domain   │◀─Events──  │ 製作指示 │
│ +produc- │            │ Event    │            │ (WO)     │
│  tion    │            │          │            │          │
│  Tracking│            │          │            │          │
└──────────┘            └──────────┘            └──────────┘

データオーナーシップ

データオーナー共有先同期方式
取引先 (Account)Sales CRMPMS (得意先マスタ)CustomerSyncPayload (API)
担当者 (Contact)Sales CRM
案件 (Deal)Sales CRMPMS (受注)CreateOrderRequest (成約時)
活動 (Activity)Sales CRM
日報 (DailyReport)Sales CRM
製品カタログPMSSales CRMProductCatalogResponse (API)
製造進捗PMSSales CRMDomainEvent (Webhook)
見積回答PMSSales CRMQuoteResponse (API)

共有エンティティ

エンティティ共有する BC調整方式
AccountSales + Customer Success + File MgmtContact/Deal/File 作成時に既存 Account を選択
ActivitySales + OperationsDailyReport が Activity を参照して集計
User全コンテキストsalesRep / createdBy / updatedBy で参照
StaffGroupIAM + 全コンテキスト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.tsintegration-contracts パッケージからの再エクスポート
設定config.ts環境変数ベースの接続設定 (API URL, Key, Webhook Secret)
クライアントservices/pmsClient.tsPMS API 呼び出し
イベント処理services/eventProcessor.tsPMS → Sales のドメインイベント変換
Webhook 認証services/webhookAuth.tsHMAC 署名検証
応答拡張hooks/enrichDealResponse.tsDeal 応答に ProductionTracking を付加
フィールド拡張hooks/extendDealFields.tsDeal に externalOrderId フィールドを追加
Account 拡張hooks/extendAccountFields.tsAccount に 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