Sales CRM ドメインイベントカタログ / Domain Events Catalog
Sales CRM で発生するドメインイベントの一覧。
イベント名・トリガー・ペイロード・購読者を定義する。
→ 対応ドメイン: docs/ddd/pms/04-domain-events.md (PMS 側のイベントカタログ)
凡例
| 列 | 説明 |
|---|
| Event Type | コード上のイベント識別子 |
| トリガー | イベントが発火する条件 |
| 発行元 | イベントを生成するコンテキスト |
| 購読者 | イベントを受信するコンテキスト |
1. 営業パイプライン (Sales Pipeline)
内部イベント
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| 案件作成 | deal.created | 新規 Deal を保存 | Operations (日報連携) |
| 案件更新 | deal.updated | Deal の status/amount/probability 変更 | Operations |
| 案件成約 | deal.won | Deal.status → won | PMS (CreateOrderRequest) |
| 案件失注 | deal.lost | Deal.status → lost | — (内部ログ) |
| 取引先作成 | account.created | 新規 Account を保存 | — |
| 取引先更新 | account.updated | Account フィールド変更 | — |
| 担当者作成 | contact.created | 新規 Contact を保存 | — |
| 活動記録 | activity.logged | 新規 Activity を保存 | Account (lastActivityAt 更新) |
| コメント追加 | comment.added | 案件にコメント投稿 | Deal (commentCount 更新) |
PMS 連携イベント (送信)
| イベント名 | Event Type | トリガー | ペイロード先 |
|---|
| 受注依頼 | CreateOrderRequest | Deal 成約 (won) | PMS API |
| 顧客同期 | CustomerSyncPayload | Account 作成/更新 | PMS API |
| 見積依頼 | QuoteRequest | 見積依頼作成 | PMS API |
deal.won → CreateOrderRequest ペイロード
interface CreateOrderRequest {
customer_code: string; // Account の PMS 連携コード
order_date: string; // ISO 8601
due_date: string; // 納期
line_items: {
product_code: string; // PMS 製品コード
quantity: number;
unit_price: number;
description?: string;
}[];
total_amount: number;
correlation_id: string; // Deal.id (トレーサビリティ用)
schema_version: string; // コントラクトバージョン
}
2. PMS → Sales CRM (受信イベント)
PMS から Webhook 経由で受信するドメインイベント。
イベント処理フロー
PMS (Webhook)
│
▼
webhookAuth.ts (HMAC 署名検証)
│
▼
eventProcessor.ts (イベントルーティング)
│
├─▶ ProductionTracking 作成/更新
│
└─▶ Deal.productionTracking 仮想フィールド (afterRead)
受信イベント一覧
| Event Type | 日本語 | ステータス遷移 | 処理内容 |
|---|
OrderReceived | 受注受付 | → ordered | ProductionTracking 作成 |
WorkOrderCreated | 作業指示作成 | → ordered | workOrders 配列に追加 |
ProductionScheduled | 生産計画確定 | → scheduled | estimatedCompletion 設定 |
ProductionApproved | 生産承認 | → scheduled | — |
ProductionStarted | 製作開始 | → in_progress | — |
ProductionCompleted | 製作完了 | → completed | qualityMetrics 更新 |
DefectRecorded | 不良記録 | (変更なし) | defect_qty, defect_rate 更新 |
PurchaseOrderIssued | 発注発行 | (変更なし) | — |
GoodsReceived | 入荷完了 | (変更なし) | — |
OrderFulfilled | 出荷完了 | → shipped | actualCompletion 設定 |
DomainEvent ペイロード (受信)
interface DomainEvent {
event_id: number; // 連番 (冪等性チェック用)
event_type: string; // EventType
correlation_id: string; // Deal.id or Order No
occurred_at: string; // ISO 8601
actor_id: string; // PMS ユーザー ID
version: number; // スキーマバージョン
payload: {
order_number: string; // PMS オーダー番号
work_order_id?: number; // 作業指示 ID
work_type?: string; // 作業種別
completed_qty?: number; // 完了数
defect_qty?: number; // 不良数
scheduled_date?: string; // 予定日
actual_completion_date?: string; // 実完了日
[key: string]: unknown;
};
}
冪等性 (Idempotency)
イベント処理は冪等性を保証:
lastEventId で処理済みイベントをスキップ
event_id <= lastEventId の場合は { processed: false } を返す
- 未知のイベントタイプはログ出力のみ (クラッシュしない)
3. レポート・分析 (Reporting)
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| レポート生成 | report.generated | PipelineReport または ActivitySummary の集計リクエスト | — (ログ記録) |
レポートは読取専用プロジェクションのため、状態変更イベントは発生しない。
report.generated は監査・利用状況追跡目的のオプショナルイベント。
comment.added ペイロード
interface CommentAddedEvent {
dealId: string; // 対象案件 ID
commentId: string; // 新規コメント ID
authorId: string; // 投稿者 ID
body: string; // コメント本文 (truncated)
occurredAt: string; // ISO 8601
}
3.5 見積管理 (Quote Management)
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| 見積書作成 | quote.created | 新規 QuoteDocument を保存 (draft) | — |
| 見積書発行 | quote.issued | QuoteDocument.status → issued (PDF 生成) | File Management (File 作成) |
quote.issued ペイロード
interface QuoteIssuedEvent {
quoteId: string; // 見積書 ID
quoteNumber: string; // 見積番号
dealId: string; // 関連案件 ID
accountId: string; // 宛先取引先 ID
totalAmount: number; // 合計金額
fileId: string; // 生成された PDF の File ID
occurredAt: string; // ISO 8601
}
3.6 目標管理 (Goal Tracking)
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| 目標評価 | goal.evaluated | GoalProgress の集計リクエスト | — (ログ記録) |
Goal Tracking は読取専用投影に近い性質のため、状態変更イベントは最小限。
goal.evaluated は目標達成率の監査・通知目的のオプショナルイベント。
goal.evaluated ペイロード
interface GoalEvaluatedEvent {
goalId: string; // 目標項目 ID
userId: string; // 対象ユーザー ID (全体目標時は null)
periodStart: string; // 期間開始日 (ISO 8601)
periodEnd: string; // 期間終了日 (ISO 8601)
targetValue: number; // 目標値
actualValue: number; // 実績値
achievementRate: number; // 達成率 (%)
occurredAt: string; // ISO 8601
}
3.7 重複検出 (Duplicate Detection)
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| 重複検出 | duplicate.detected | バッチジョブが類似レコードを検出 | — (管理者通知) |
| 重複統合 | duplicate.merged | DuplicateCandidate の手動統合 | Sales Pipeline (関連データ移行) |
duplicate.detected ペイロード
interface DuplicateDetectedEvent {
entityType: string; // account / contact
sourceId: string; // 元レコード ID
targetId: string; // 重複候補 ID
similarityScore: number; // 類似度スコア
occurredAt: string; // ISO 8601
}
3.8 カレンダー連携 (Calendar Sync)
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| カレンダー同期 | calendar.synced | Activity → 外部カレンダーへの同期完了 | — (ログ記録) |
| カレンダー同期エラー | calendar.sync_failed | 外部カレンダー API エラー | — (ユーザー通知) |
3.9 メール取り込み (Email Capture)
| イベント名 | Event Type | トリガー | 購読者 |
|---|
| メール取り込み | email.captured | 受信メール → Activity 自動作成 | Activity Tracking (Activity 作成) |
| メール取り込みエラー | email.capture_failed | メールサーバー接続/認証エラー | — (ユーザー通知) |
email.captured ペイロード
interface EmailCapturedEvent {
emailAddress: string; // 送信元メールアドレス
contactId: string; // マッチした Contact ID
activityId: string; // 作成された Activity ID
subject: string; // メール件名
occurredAt: string; // ISO 8601
}
4. 監査イベント (Audit Events)
全コレクション共通の監査フィールド自動設定。
全コレクションの beforeChange フックで自動的に監査フィールドを設定:
| 操作 | 設定されるフィールド | トリガー |
|---|
| create | createdBy, updatedBy | レコード作成時 |
| update | updatedBy | レコード更新時 |
// applyAuditFields の処理
if (operation === "create") {
data.createdBy = req.user.id;
}
data.updatedBy = req.user.id;
5. 楽観ロックイベント (Conflict Events)
| イベント名 | トリガー | 応答 |
|---|
version.conflict | incomingVersion !== currentVersion | 409 Conflict + latestData |
// 409 応答ペイロード
{
latestData: { /* 最新レコード全体 */ },
modifiedBy: "user-id",
modifiedAt: "2026-01-25T10:30:00Z"
}
6. 製造進捗ステータス遷移図
ProductionTracking コレクション
| フィールド | 型 | 説明 |
|---|
| deal | → Deal | 関連案件 |
| orderNumber | string | PMS オーダー番号 |
| correlationId | string | 相関 ID |
| overallStatus | ProductionStatus | ordered / scheduled / in_progress / completed / shipped |
| completionPct | number | 完了率 (0-100) |
| estimatedCompletion | Date | 予定完了日 |
| actualCompletion | Date | 実際の完了日 |
| qualityMetrics | JSON | completed_qty, defect_qty, defect_rate |
| workOrders | Array | 作業指示リスト |
| events | Array | イベント履歴 |
| lastEventId | number | 最後に処理したイベント ID |
| lastUpdatedFromPms | Date | PMS からの最終更新日時 |