TransLead CRM
Sales CRM DDD インスタンス — Payload CMS + Drizzle ORM 実装
fab-forward-sales 実装設定 / Implementation Configuration
目的:
fab-forward-sales(Sales CRM) の実装仕様書。 DDD モデル (docs/ddd/sales/) の「インスタンス」として、実装済みのコレクション・フィールド・業務ルール・ アクセス制御を正規のソースコードから導出し記録する。ベンチマーク元: TransLead CRM (
fab-forward-sales/benchmark_translead/) テクノロジースタック: Next.js + Payload CMS + Drizzle ORM + PostgreSQL リポジトリ:~/repos/fab-forward-sales→ DDD モデル:
docs/ddd/sales/(ドメインモデル仕様) → 知識ベース:docs/knowledge/06-crm-fundamentals/,07-sales-management/,09-japanese-sales-culture/
1. コレクション一覧 (Collections)
出典:
src/collections/index.ts
| コレクション | Slug | 日本語 | カテゴリ | DDD 集約 | 実装ファイル |
|---|---|---|---|---|---|
| Accounts | accounts | 取引先 | master | Sales Pipeline | src/collections/Accounts.ts |
| Contacts | contacts | 担当者 | master | Sales Pipeline | src/collections/Contacts.ts |
| Deals | deals | 案件 | transaction | Sales Pipeline | src/collections/Deals.ts |
| Activities | activities | 活動 | transaction | Activity Tracking | src/collections/Activities.ts |
| DailyReports | daily-reports | 日報 | transaction | Activity Tracking | src/collections/DailyReports.ts |
| Files | files | ファイル | transaction | File Management | src/collections/Files.ts |
| Users | users | ユーザー | master | IAM | src/collections/Users.ts |
| StaffGroups | staff_groups | 部署グループ | master | IAM | src/collections/StaffGroups.ts |
| CompanySettings | company_settings | 企業設定 | config | IAM | src/collections/CompanySettings.ts |
| CustomFieldConfigs | custom_field_configs | カスタムフィールド | config | Configuration | src/collections/CustomFieldConfigs.ts |
計画中のコレクション / エンドポイント
| 名称 | 種別 | DDD 集約 | DDD 仕様 | 状態 |
|---|---|---|---|---|
| Comments | transaction | Sales Pipeline | → see sales-pipeline.md §Comment | ✅ 実装済み |
/api/reports/pipeline | read-only API | Reporting | → see reporting.md §PipelineReport | ✅ 実装済み |
/api/reports/activities | read-only API | Reporting | → see reporting.md §ActivitySummary | ✅ 実装済み |
| QuoteTemplates | config | Quote Management | → see quote-management.md §QuoteTemplate | ✅ 実装済み |
| QuoteDocuments | transaction | Quote Management | → see quote-management.md §QuoteDocument | ✅ 実装済み |
| Goals | config | Goal Tracking | → see goal-tracking.md §Goal | ✅ 実装済み |
| GoalValues | transaction | Goal Tracking | → see goal-tracking.md §GoalValue | ✅ 実装済み |
/api/reports/goals | read-only API | Goal Tracking | → see goal-tracking.md §GoalProgress | ✅ 実装済み |
| DuplicateCandidates | transaction | Sales Pipeline | → see sales-pipeline.md §DuplicateDetection | ✅ 実装済み |
/api/dedup/candidates | read-only API | Sales Pipeline | → see sales-pipeline.md §DuplicateCandidate | ✅ 実装済み |
/api/dedup/detect | action API | Sales Pipeline | → see sales-pipeline.md §DuplicateDetection | ✅ 実装済み |
/api/dedup/merge | action API | Sales Pipeline | → see sales-pipeline.md §DuplicateDetection | ✅ 実装済み |
/api/dedup/:id/dismiss | action API | Sales Pipeline | → see sales-pipeline.md §DuplicateDetection | ✅ 実装済み |
| CalendarSync | config | Activity Tracking | → see activity-tracking.md §CalendarSync | (計画中) |
| EmailCapture | config | Activity Tracking | → see activity-tracking.md §EmailCapture | (計画中) |
/api/settings/custom-fields/:id/impact-count | read-only API | Configuration | → see custom-fields.md §AffectedRecordCount | ✅ 実装済み |
2. 区分マスタ (Enumerations — SSOT)
出典:
src/lib/constants/labels.ts,src/lib/types/roles.ts
2.1 案件タイプ — DEAL_TYPE_VALUES
// src/lib/constants/labels.ts:65
export const DEAL_TYPE_VALUES = ["negotiation", "inquiry", "lead"] as const;
| 値 | 日本語ラベル | TransLead 対応 |
|---|---|---|
negotiation | 商談 | 商談 |
inquiry | 引合 | 引合・リード (統合) |
lead | リード | 引合・リード (統合) |
TransLead は
inquiryとleadを「引合・リード」として統合 (2値)。実装では 3値に分離。
2.2 案件ステータス — DEAL_STATUS_VALUES
// src/lib/constants/labels.ts:84
export const DEAL_STATUS_VALUES = ["open", "won", "lost"] as const;
| 値 | 日本語ラベル |
|---|---|
open | 進行中 |
won | 成約 |
lost | 失注 |
2.3 活動タイプ — ACTIVITY_TYPE_VALUES
// src/lib/constants/labels.ts:26
export const ACTIVITY_TYPE_VALUES = ["call", "meeting", "inquiry", "email", "email_received", "other"] as const;
| 値 | 日本語ラベル | TransLead 対応 |
|---|---|---|
call | 電話発信 | 電話 |
meeting | 面談 | 打ち合わせ |
inquiry | 電話受信 | 問い合わせ |
email | メール送信 | メール |
email_received | メール受信 | (なし — 実装で追加) |
other | その他 | (なし — 実装で追加) |
2.4 ファイルタイプ — FILE_TYPE_VALUES
// src/lib/constants/labels.ts:103
export const FILE_TYPE_VALUES = ["proposal", "quote", "contract", "business_card", "other"] as const;
| 値 | 日本語ラベル |
|---|---|
proposal | 提案書 |
quote | 見積書 |
contract | 契約書 |
business_card | 名刺 |
other | その他 |
2.5 ユーザーロール — USER_ROLE_VALUES
// src/lib/types/roles.ts:13
export const USER_ROLE_VALUES = ["admin", "manager", "sales_rep", "executive"] as const;
| 値 | 日本語 | 説明 |
|---|---|---|
admin | 管理者 | 全権限 + ユーザー管理 + 設定変更 |
manager | 営業マネージャー | チーム管理 + 全レポート閲覧/編集 |
sales_rep | 営業担当者 | 自分の担当分のみ (定義済み、コレクションレベルは部分実装) |
executive | 経営者 | 全データ閲覧 (読取専用) |
出典:
src/lib/types/roles.ts— ROLES 定数に permission 定義あり。
2.6 カスタムフィールドタイプ
// src/types/customField.ts
export type FieldType = "text" | "number" | "date" | "dropdown" | "checkbox";
export type EntityType = "account" | "contact" | "deal";
3. フィールド定義 (全コレクション)
3.1 accounts — 取引先
出典:
src/collections/Accounts.ts:77-231
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
name | text | ✓ | ✓ | 取引先名 |
website | text | WEBサイト URL | ||
phone | text | 代表電話 | ||
postalCode | text | 郵便番号 (XXX-XXXX) | ||
address | text | 住所 | ||
coordinates | point | 座標 (lat/lng) — TransLead にない拡張 | ||
group | text | StaffGroups.slug | ||
salesRep | → users | 営業担当 | ||
dealCount | number | 案件数 (computed, readOnly, default: 0) | ||
activityCount | number | 活動件数 (computed, readOnly, default: 0) | ||
lastActivityAt | date | 最終活動日 (computed, readOnly) | ||
nextActivityAt | date | 次回活動予定日 (computed, readOnly) | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) | ||
version | number | 楽観ロック (readOnly, default: 0) |
Hooks: beforeChange → 楽観ロック検証 + version++ + AuditService Access: RBAC 実装済み (§4 参照)
3.2 contacts — 担当者
出典:
src/collections/Contacts.ts:62-178
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
name | text | ✓ | ✓ | 担当者名 |
nameKana | text | カナ (ソート用) — TransLead にない拡張 | ||
title | text | 部署 | ||
email | メールアドレス | |||
phone | text | 電話番号 | ||
mobile | text | 携帯番号 | ||
account | → accounts | ✓ | ✓ | 所属取引先 |
group | text | StaffGroups.slug | ||
salesRep | → users | 営業担当 | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) | ||
version | number | 楽観ロック (readOnly, default: 0) |
Hooks: beforeChange → AuditService + 楽観ロック検証 + version++ Access: RBAC 実装済み (§4 参照)
3.3 deals — 案件
出典:
src/collections/Deals.ts:68-222
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
name | text | ✓ | ✓ | 案件名 |
dealType | select | ✓ | DEAL_TYPE_OPTIONS | |
status | select | ✓ | ✓ | DEAL_STATUS_OPTIONS (default: "open") |
amount | number | 金額 (円) | ||
probability | number | 確度 0-100 (min:0, max:100) | ||
expectedCloseDate | date | 成約予定日 | ||
account | → accounts | ✓ | ✓ | 関連取引先 |
contact | → contacts | 関連担当者 (任意) | ||
commentCount | number | コメント数 (computed, readOnly, default: 0) | ||
group | text | StaffGroups.slug | ||
salesRep | → users | 営業担当 | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) | ||
version | number | 楽観ロック (readOnly, default: 0) |
Hooks: beforeChange → 楽観ロック検証 + version++ + AuditService Access: RBAC 実装済み (§4 参照)
3.4 activities — 活動
出典:
src/collections/Activities.ts:124-261
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
activityType | select | ✓ | ACTIVITY_TYPE_OPTIONS | |
subject | text | ✓ | ✓ | 件名 |
description | textarea | 詳細 | ||
activityDate | date | ✓ | ✓ | 活動日 |
duration | number | 所要時間 (分) | ||
account | → accounts | ✓ | ✓ | 関連取引先 |
contact | → contacts | 関連担当者 (任意) | ||
deal | → deals | 関連案件 (任意) | ||
group | text | StaffGroups.slug | ||
salesRep | → users | 営業担当 | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) | ||
version | number | 楽観ロック (readOnly, default: 0) |
Hooks: beforeValidate → account 必須 + activityType 検証 + subject 空文字 + duration > 0 Hooks: beforeChange → 楽観ロック + AuditService Access: RBAC 実装済み (§4 参照)
3.5 daily-reports — 日報
出典:
src/collections/DailyReports.ts:91-236
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
user | → users | ✓ | ✓ | 報告者 |
reportDate | date | ✓ | ✓ | 報告日 |
dealSummaries | array | 案件サマリー配列 | ||
↳ deal | → deals | ✓ | 案件参照 | |
↳ probability | number | 確度 (0-100) | ||
↳ status | text | ステータス | ||
↳ comment | textarea | コメント | ||
activitySummaries | array | 活動サマリー配列 | ||
↳ activity | → activities | ✓ | 活動参照 | |
↳ outcome | text | 結果 | ||
notes | textarea | 所感・メモ | ||
nextActions | textarea | 次のアクション | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) |
Hooks: beforeValidate → user + reportDate ユニーク制約 Hooks: beforeChange → AuditService + user 自動設定 Access: RBAC 実装済み (§4 参照)
3.6 files — ファイル
出典:
src/collections/Files.ts:62-226
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
fileName | text | ✓ | ファイル名 | |
fileSource | select | ✓ | link / upload (default: link) | |
url | text | 条件付 | fileSource=link 時必須、http(s) のみ | |
description | textarea | 説明 | ||
fileType | select | ✓ | FILE_TYPE_OPTIONS | |
fileUrl | text | 非推奨 (後方互換) | ||
fileSize | number | ファイルサイズ (KB) | ||
uploadedBy | → users | アップロード者 | ||
relatedContact | → contacts | 関連担当者 | ||
relatedDeal | → deals | 関連案件 | ||
relatedAccount | → accounts | 関連取引先 | ||
group | text | StaffGroups.slug | ||
salesRep | → users | 営業担当 | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) | ||
version | number | 楽観ロック (readOnly, default: 0) |
URL バリデーション: javascript: 禁止、http: / https: のみ許可
Access: RBAC 実装済み (§4 参照)
3.7 users — ユーザー
出典:
src/collections/Users.ts:93-223
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
username | text | ✓ | ✓ (unique) | [a-z0-9_]+ パターン |
full_name | text | ✓ | 表示名 | |
email | (auth) | ✓ | Payload 認証用 | |
group | text | StaffGroups.slug | ||
role | select | ✓ | USER_ROLE_OPTIONS (default: sales_rep) | |
status | select | ✓ | active / inactive (default: active) | |
notes | textarea | 管理者メモ | ||
password_changed_at | date | パスワード変更日時 (readOnly) | ||
must_change_password | checkbox | 初回パスワード変更 (default: true) | ||
last_login | date | 最終ログイン (readOnly) | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) |
Auth 設定: tokenExpiration=7200s, maxLoginAttempts=3, lockTime=900000ms Access: RBAC 実装済み (§4 参照)
3.8 staff_groups — 部署グループ
出典:
src/collections/StaffGroups.ts:32-62
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
name | text | ✓ | グループ表示名 | |
slug | text | ✓ | ✓ (unique) | 一意識別子 |
sortOrder | number | 表示順 (default: 0) |
Access: read=全員, create/update/delete=admin のみ
3.9 company_settings — 企業設定
出典:
src/collections/CompanySettings.ts:132-265
| フィールド | 型 | 必須 | 備考 |
|---|---|---|---|
company_name | text | ✓ | 企業名 (maxLength: 100) |
postal_code | text | XXX-XXXX 形式 (beforeChange で検証) | |
prefecture | text | 都道府県 | |
city | text | 市区町村 | |
street_address | text | 番地・建物名 | |
logo_url | text | ロゴ画像 URL (readOnly) | |
logo_file_key | text | ストレージキー (readOnly) | |
business_hours_start | text | HH:MM 形式 | |
business_hours_end | text | HH:MM 形式 (start < end 検証) | |
fiscal_year_start_month | number | 1-12 | |
createdBy | → users | 作成者 (readOnly) | |
updatedBy | → users | 最終更新者 (readOnly) | |
version | number | 楽観ロック (readOnly, default: 0) |
シングルトンパターン: beforeChange で既存レコード存在チェック → 2件目作成禁止 Access: read=全員, create/update/delete=admin のみ
3.10 custom_field_configs — カスタムフィールド
出典:
src/collections/CustomFieldConfigs.ts:131-269
| フィールド | 型 | 必須 | インデックス | 備考 |
|---|---|---|---|---|
entity_type | select | ✓ | ✓ | account / contact / deal |
field_name | text | ✓ | ✓ | ^[a-z_][a-z0-9_]*$ パターン |
display_name | text | ✓ | ユーザー表示名 | |
field_type | select | ✓ | text / number / date / dropdown / checkbox | |
description | textarea | 項目説明 | ||
is_required | checkbox | 必須フラグ (default: false) | ||
display_order | number | ✓ | ✓ | 表示順 (default: 0) |
is_system_field | checkbox | システム項目 (readOnly, default: false) | ||
type_properties | json | タイプ固有設定 (options, min/max, etc.) | ||
createdBy | → users | 作成者 (readOnly) | ||
updatedBy | → users | 最終更新者 (readOnly) | ||
version | number | 楽観ロック (readOnly, default: 0) |
予約語: src/types/customField.ts:120 — id, created_at, updated_at, created_by, updated_by, version, deleted_at, deleted_by
ユニーク制約: entity_type + field_name (beforeChange で検証)
dropdown 検証: options 配列に最低 1 要素必須
number 検証: min_value ≤ max_value
Access: 全操作 admin のみ
4. アクセス制御 (RBAC) 実装状況
出典: 各コレクションの
accessプロパティ → 完全な RBAC 仕様:iam.md§RBAC データアクセスマトリクス
| コレクション | read | create | update | delete | 実装状況 |
|---|---|---|---|---|---|
| accounts | RBAC | RBAC | RBAC | admin only | ✅ 実装済み |
| contacts | RBAC | RBAC | RBAC | admin only | ✅ 実装済み |
| deals | RBAC | RBAC | RBAC | admin only | ✅ 実装済み |
| activities | RBAC | RBAC | RBAC | admin only | ✅ 実装済み |
| daily-reports | RBAC | open | RBAC | admin only | ✅ 実装済み |
| files | RBAC | RBAC | RBAC | admin only | ✅ 実装済み |
| users | RBAC | admin | RBAC | admin | ✅ 実装済み |
| staff_groups | open | admin | admin | admin | ✅ 実装済み |
| company_settings | open | admin | admin | admin | ✅ 実装済み |
| custom_field_configs | admin | admin | admin | admin | ✅ 実装済み |
RBAC 詳細 (実装済みコレクション)
accounts, contacts, deals, activities, files (共通パターン — src/lib/access/salesRepScoped.ts):
- read: admin/manager/executive → 全件、sales_rep →
{ salesRep: { equals: user.id } } - create: admin/manager/sales_rep → 許可、executive → 不可
- update: admin/manager → 全件、sales_rep →
{ salesRep: { equals: user.id } }、executive → 不可 - delete: admin のみ
daily-reports:
- read: admin/manager/executive → 全件、sales_rep →
{ user: { equals: user.id } } - update: admin/manager → 全件、sales_rep →
{ user: { equals: user.id } } - delete: admin のみ
users:
- read: admin/manager/executive → 全件、sales_rep →
{ id: { equals: user.id } } - update: admin → 全件、その他 →
{ id: { equals: user.id } }
→ see
iam.md§RBAC データアクセスマトリクス (per-collection × per-role 完全定義) → see05-business-rules.md§10 RBAC データスコーピング (ルール RBAC-001 〜 RBAC-005)
5. 共通パターン (Cross-cutting)
5.1 楽観ロック
実装済みコレクション: accounts, contacts, deals, activities, daily-reports, files, company_settings, custom_field_configs
beforeChange:
if update && incomingVersion !== currentVersion:
→ 409 Conflict + { latestData, modifiedBy, modifiedAt }
else:
version = currentVersion + 1
if create:
version = 0
全コレクション楽観ロック実装完了 ✅
5.2 監査フィールド
出典:
src/lib/services/AuditService.ts
全コレクションの beforeChange で applyAuditFields() を呼び出し:
- create:
createdBy = req.user.id,updatedBy = req.user.id - update:
updatedBy = req.user.id
5.3 タイムスタンプ
全コレクション: timestamps: true → Payload が createdAt, updatedAt を自動管理
6. PMS 連携 (Integration Layer)
出典:
src/integrations/pms/
| レイヤー | ファイル | 実装済み |
|---|---|---|
| 型定義 | types.ts | ✅ |
| 設定 | config.ts | ✅ |
| コレクション | collections/Products.ts, ProductionTracking.ts | ✅ |
| API エンドポイント | endpoints/pmsQuotes.ts, pmsOrders.ts, pmsProducts.ts, pmsEvents.ts | ✅ |
| クライアント | services/pmsClient.ts | ✅ |
| イベント処理 | services/eventProcessor.ts | ✅ |
| Webhook 認証 | services/webhookAuth.ts | ✅ |
| 応答拡張 | hooks/enrichDealResponse.ts, extendDealFields.ts, extendAccountFields.ts | ✅ |
7. ERD (Entity Relationship Diagram)
出典:
src/lib/erd/deriveSchema.ts— Payload コレクション定義から自動導出 API:GET /api/erd(admin 認証必須)
┌──────────────────┐
│ staff_groups │
│ (部署グループ) │
│ name, slug, sort│
└───────┬──────────┘
│ slug → group (text 参照)
┌───────────────┼───────────────┐
│ │ │
┌────────┴────────┐ ┌────┴──────┐ ┌──────┴──────┐
│ users │ │ company_ │ │ custom_ │
│ (ユーザー) │ │ settings │ │ field_ │
│ username (UQ) │ │ (企業設定) │ │ configs │
│ role (RBAC) │ │ singleton │ │ entity_type │
│ status │ └───────────┘ │ + field_name│
│ auth (Payload) │ │ = UQ │
└────────┬────────┘ └─────────────┘
│ FK: salesRep, createdBy, updatedBy
│
┌────────┴──────────────────────────────────────┐
│ ┌──────────┐ 1:N ┌──────────┐ │
│ │ accounts │───────│ contacts │ │
│ │ (取引先) │ │ (担当者) │ │
│ │ name (IX)│ │ name (IX)│ │
│ │ coords │ │ account │ │
│ │ (point) │ │ (FK, IX) │ │
│ └────┬─────┘ └────┬─────┘ │
│ │ 1:N │ N:1 │
│ ┌────┴─────┐ │ ┌──────────┐ │
│ │ deals │──N:1───────┘ │ files │ │
│ │ (案件) │ │ (ファイル) │ │
│ │ dealType │ │ fileType │ │
│ │ status │ │ fileSource│ │
│ │ (IX) │ │ → account │ │
│ │ amount │ │ → contact │ │
│ │ probab. │ │ → deal │ │
│ └────┬─────┘ └──────────┘ │
│ │ 1:N │
│ ┌────┴──────────┐ ┌───────────────┐ │
│ │ activities │ │ daily_reports │ │
│ │ (活動) │ │ (日報) │ │
│ │ activityType │ │ user (FK,IX) │ │
│ │ subject (IX) │ │ reportDate(IX) │ │
│ │ actDate (IX) │ │ user+date = UQ │ │
│ │ account(FK,IX)│ │ dealSummaries[]│ │
│ │ contact (FK) │ │ → deals │ │
│ │ deal (FK) │ │ actSummaries[] │ │
│ └───────────────┘ │ → activities │ │
│ └───────────────┘ │
└───────────────────────────────────────────────┘
8. TransLead ベンチマーク差分
TransLead CRM にあって本実装にない機能。DDD 仕様化済みの機能と未着手の拡張候補を区分する。
DDD 仕様化済み (Phase 2 で DDD に昇格)
| TransLead 機能 | DDD 仕様 | 実装状況 |
|---|---|---|
| 案件コメント CRUD | → see sales-pipeline.md §Comment | ✅ 実装済み |
| RBAC データスコーピング | → see iam.md §RBAC データアクセスマトリクス | ✅ 実装済み |
| パイプライン分析・加重金額 | → see reporting.md §PipelineReport, §ActivitySummary | ✅ 実装済み |
DDD 仕様化済み (Phase 5 で DDD に昇格)
| TransLead 機能 | DDD 仕様 | 実装状況 |
|---|---|---|
| 見積書生成 | → see quote-management.md §QuoteTemplate, §QuoteDocument, rules QT-001〜 | ✅ 実装済み |
| 目標管理 | → see goal-tracking.md §Goal, §GoalValue, §GoalProgress, rules GL-001〜 | ✅ 実装済み |
| 重複チェック | → see sales-pipeline.md §DuplicateDetection, rules DUP-001〜 | ✅ 実装済み |
| カレンダー連携 | → see activity-tracking.md §CalendarSync, rules CAL-001〜 | (計画中) |
| メール連携 | → see activity-tracking.md §EmailCapture, rules EM-001〜 | (計画中) |
| 日報楽観ロック | → see activity-tracking.md §DailyReport version, rules DR-001 | ✅ 実装済み |
| カスタムフィールド影響件数 | → see custom-fields.md §AffectedRecordCount, rules CF-002 | ✅ 実装済み |
未着手の拡張候補
| TransLead 機能 | 概要 | DDD 拡張候補 |
|---|---|---|
| 確度グレード制 (S/A/B/C/D/F) | 数値 0-100 ではなくグレード | UI 層で変換テーブル対応可 |
| プッシュ通知 | コメント通知・デバイス管理 | Cross-cutting に Notification BC 追加 |
| 多言語ラベル | 8言語フィールドラベル | Configuration BC に i18n 追加 |
| 一括インポート UI | seed 用 CSV パーサーのみ | Cross-cutting に ImportJob 追加 |