Fab Forward Dev/

DDD ドキュメント

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

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

対応ドメイン: docs/ddd/sales/02-context-map.md (Sales CRM 側のコンテキストマップ)


全体マップ


コンテキスト間関係

Sales CRM → Integration Contracts → PMS

上流 (Upstream)下流 (Downstream)パターンデータフロー
Sales PipelineIntegration ContractsConformistSales はコントラクト仕様に準拠
Integration ContractsQuotation & OrderACL (Anti-Corruption Layer)PMS は独自モデルに変換して取り込み
Integration ContractsSystem AdminACL顧客マスタ同期時に PMS 形式へ変換

PMS 内部

上流 (Upstream)下流 (Downstream)パターン説明
見積・受注外注手配Customer-Supplier受注確定時に購入品明細から PurchaseOrder を自動生成
見積・受注製作指示Customer-Supplier受注確定時に製作品明細から ProductionInstruction を自動生成
見積・受注売上・請求Customer-Supplier受注に対して検収・売上を計上
外注手配受入Customer-Supplier発注に対して入荷処理
受入買掛・支払Customer-Supplier受入実績から仕入・買掛を計上
売上・請求原価分析Downstream売上データを原価比較に使用
製作指示原価分析Downstream労務費データを原価比較に使用
受入原価分析Downstream材料費データを原価比較に使用

Sales CRM 内部

上流 (Upstream)下流 (Downstream)パターン説明
営業パイプライン顧客活動管理Shared KernelAccount, Contact を共有
営業パイプライン日報・分析Customer-SupplierDeal の進捗を日報に反映
顧客活動管理日報・分析Customer-SupplierActivity 実績を日報に集計
認証・権限全コンテキストGeneric Subdomain全機能で User を参照

データオーナーシップ

マスタデータのオーナー

データオーナー方向理由
顧客 (Customer)Sales CRMSales → PMS営業が取引先を最初に登録。PMS は同期先
製品カタログ (Product)PMSPMS → Sales品番・BOM は生産管理が管理。Sales はミラー
社員 (Employee)PMSPMS (内部)社員マスタは PMS が保持。Sales は参照のみ
区分 (Classification)PMSPMS (内部)区分マスタ (単位・費目・ステータス等) は PMS のコード体系
仕入先 (Supplier)PMSPMS (内部)発注・支払は PMS の業務

トランザクションのオーナー

データオーナー説明
案件 (Deal)Sales CRMパイプライン管理は Sales の責務
受注 (Order)PMSDeal から変換後は PMS が管理
手配・製作指示PMS製造工程は完全に PMS
売上・入金PMS経理処理は PMS
活動・日報Sales CRM営業活動の記録は Sales

統合パターン詳細

Anti-Corruption Layer (ACL)

PMS は Integration Contracts のデータを直接取り込まない。 必ず ACL で自ドメインのモデルに変換する。

CreateOrderRequest (contract)
  ↓ ACL 変換
  ├─ customer_code → 得意先マスタで存在確認
  ├─ line_items[]  → SalesOrder + PurchaseOrder/ProductionInstruction を自動生成
  │                   (手配品区分に応じてルーティング)
  └─ delivery_date → SalesOrder.dueDate

Event-Driven (イベント駆動)

PMS → Sales の通知はドメインイベント経由。 Sales は Eventual Consistency を許容する。

PMS: ProductionInstruction.status = 'completed'
  ↓ DomainEvent: work_order.completed
  ↓ Integration Contracts (Webhook)
  ↓ Sales: ProductionTracking.status = 'completed'

Shared Kernel

Sales CRM 内で「営業パイプライン」と「顧客活動管理」は Account / Contact エンティティを共有する。 変更時は両チーム合意が必要。


チーム境界 (Team Topology)

コンテキスト担当チーム備考
Sales PipelineSales チームフロントエンド + API
Customer SuccessSales チーム
OperationsSales チーム日報・分析
Integration Contracts両チーム共同コントラクト変更は合意必須
Quotation & OrderPMS チーム
Procurement / ReceivingPMS チーム
ProductionPMS チーム
Sales & BillingPMS チーム
Accounts PayablePMS チーム
Cost AnalysisPMS チーム
System AdminPMS チームマスタ管理