PMS コンテキストマップ / Context Map
バウンデッドコンテキスト間の関係性・統合パターン・データオーナーシップを定義する。
→ 対応ドメイン:
docs/ddd/sales/02-context-map.md(Sales CRM 側のコンテキストマップ)
全体マップ
コンテキスト間関係
Sales CRM → Integration Contracts → PMS
| 上流 (Upstream) | 下流 (Downstream) | パターン | データフロー |
|---|---|---|---|
| Sales Pipeline | Integration Contracts | Conformist | Sales はコントラクト仕様に準拠 |
| Integration Contracts | Quotation & Order | ACL (Anti-Corruption Layer) | PMS は独自モデルに変換して取り込み |
| Integration Contracts | System Admin | ACL | 顧客マスタ同期時に PMS 形式へ変換 |
PMS 内部
| 上流 (Upstream) | 下流 (Downstream) | パターン | 説明 |
|---|---|---|---|
| 機種マスタ | 見積・受注 | Open Host Service | EquipmentCatalog が機種コード・標準 BOM・オプションを安定 API として公開。Quotation は機種選択で QuotationLine[] を自動展開 |
| 機種マスタ | 製作指示 | Open Host Service | 受注確定時に EquipmentCatalog → GenerationRevision (manufacturedGenerationCode) の標準 BOM を ProductionInstruction に展開。MachineSerial の製番と 1:1 で紐付け |
| 機種マスタ | 外注手配 | Customer-Supplier | 機種カタログ駆動の発注は BOM 展開結果と Part.partsCategory (standard / semi-standard / on-demand) を入力として PurchaseOrder を生成。LinkedPartsSet.mandatory は自動明細追加 |
| 機種マスタ | 売上・請求 | Customer-Supplier | 修理サービスでは MachineSerial (BDI) を起点に ServiceKoban (赤伝交番) を発番。世代スナップショットを請求対象部品の SSOT として参照 |
| 見積・受注 | 外注手配 | Customer-Supplier | 受注確定時に購入品明細から PurchaseOrder を自動生成 |
| 見積・受注 | 製作指示 | Customer-Supplier | 受注確定時に製作品明細から ProductionInstruction を自動生成 |
| 見積・受注 | 売上・請求 | Customer-Supplier | 受注に対して検収・売上を計上 |
| 外注手配 | 受入 | Customer-Supplier | 発注に対して入荷処理 |
| 受入 | 買掛・支払 | Customer-Supplier | 受入実績から仕入・買掛を計上 |
| 売上・請求 | 原価分析 | Downstream | 売上データを原価比較に使用 |
| 製作指示 | 原価分析 | Downstream | 労務費データを原価比較に使用 |
| 受入 | 原価分析 | Downstream | 材料費データを原価比較に使用 |
Equipment Catalog Context (機種マスタコンテキスト)
bc-product-catalog は クリエイト・エンジニアリング型『機種カタログ駆動 (catalog-with-options)』 業態に対応する新規バウンデッドコンテキスト。EquipmentCatalog (機種マスタ) / MachineSerial (BDI ナンバー) / GenerationRevision (世代/リビジョン) / LinkedPartsSet (連動部品) の 4 集約で構成される。
- 業態スコープ: 案件主導 (job-shop) と並列の業態選択肢。テナントの
tenant-config.yamlのproductionModeでcatalog-with-options/job-shopを切り替え、両モード併用 (新設機 = catalog、修理 = job-shop) も許容する。job-shop モード時は本コンテキストの利用は任意。 - 対 Quotation / Sales Order: Open Host Service として機種コード・標準 BOM テンプレート・オプションコードを公開し、見積〜受注は機種マスタを 上流 として参照する。Quotation 側は機種コードを必須選択し標準 BOM を自動展開する Conformist 寄りの実装となる。
- 対 Production: 製作指示は
MachineSerial.productionOrderNumber(テックスの製番) と 1:1 で紐付き、BOM 展開はEquipmentCatalog → GenerationRevision (manufacturedGenerationCode)を 上流 とする Open Host Service。世代スナップショットは ProductionInstruction の集約 ID 体系の SSOT。 - 対 Procurement: Customer-Supplier で外注手配の 上流。BOM 展開結果と
Part.partsCategory(3 階層分類) が発注計画ロジックの入力。LinkedPartsSet.mandatoryの起点部品が修理発注に追加されると連動部品が自動明細追加される (PC-008)。 - 対 Sales & Billing: Customer-Supplier で 上流。修理見積〜売上の起点となる
MachineSerial(BDI) の世代コードを参照し、ServiceKoban (赤伝交番) 経由のサービス売上で世代違い部品の混入を防ぐ。 - オーナーシップ: 機種マスタの登録・更新・世代切替は 設計ロール (例: 山本さん相当) に限定し、
LinkedPartsSetの編集権限も同ロールに紐付ける (PC-009)。
Sales CRM 内部
| 上流 (Upstream) | 下流 (Downstream) | パターン | 説明 |
|---|---|---|---|
| 営業パイプライン | 顧客活動管理 | Shared Kernel | Account, Contact を共有 |
| 営業パイプライン | 日報・分析 | Customer-Supplier | Deal の進捗を日報に反映 |
| 顧客活動管理 | 日報・分析 | Customer-Supplier | Activity 実績を日報に集計 |
| 認証・権限 | 全コンテキスト | Generic Subdomain | 全機能で User を参照 |
データオーナーシップ
マスタデータのオーナー
| データ | オーナー | 方向 | 理由 |
|---|---|---|---|
| 顧客 (Customer) | Sales CRM | Sales → PMS | 営業が取引先を最初に登録。PMS は同期先 |
| 製品カタログ (Product) | PMS | PMS → Sales | 品番・BOM は生産管理が管理。Sales はミラー |
| 機種マスタ (EquipmentCatalog) | PMS (Equipment Catalog Context) | PMS (内部) | 機種コード・標準 BOM テンプレート・オプション・連動部品は機種マスタコンテキストが SSOT。設計ロールが編集権限を持つ |
| 筐体追跡 (MachineSerial / BDI) | PMS (Equipment Catalog Context) | PMS (内部) | BDI ナンバーはテナント全体で一意。受注確定で発番、製造〜出荷〜据付〜修理を長期トレース |
| 社員 (Employee) | PMS | PMS (内部) | 社員マスタは PMS が保持。Sales は参照のみ |
| 区分 (Classification) | PMS | PMS (内部) | 区分マスタ (単位・費目・ステータス等) は PMS のコード体系 |
| 仕入先 (Supplier) | PMS | PMS (内部) | 発注・支払は PMS の業務 |
トランザクションのオーナー
| データ | オーナー | 説明 |
|---|---|---|
| 案件 (Deal) | Sales CRM | パイプライン管理は Sales の責務 |
| 受注 (Order) | PMS | Deal から変換後は 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 Pipeline | Sales チーム | フロントエンド + API |
| Customer Success | Sales チーム | |
| Operations | Sales チーム | 日報・分析 |
| Integration Contracts | 両チーム共同 | コントラクト変更は合意必須 |
| Equipment Catalog | PMS チーム | 設計ロール (山本さん相当) が機種マスタ・世代・連動部品の編集権限を持つ |
| Quotation & Order | PMS チーム | |
| Procurement / Receiving | PMS チーム | |
| Production | PMS チーム | |
| Sales & Billing | PMS チーム | |
| Accounts Payable | PMS チーム | |
| Cost Analysis | PMS チーム | |
| System Admin | PMS チーム | マスタ管理 |