4.5 KiB
Task D.3.1: Leads / Enquiries Navigation Separation
Goal
แยกเมนู Leads และ Enquiries ออกจากกันเพื่อลดความสับสนของผู้ใช้งาน
Business Process ยังคงเป็น:
Lead
↓ Assign To Sales
Enquiry
↓
Quotation
↓
Won / Lost
แต่ UX จะถูกแยกเป็น 2 Workspace
CRM
├── Dashboard
├── Leads
├── Enquiries
├── Quotations
├── Approvals
└── Settings
Important:
Task นี้เป็น UX Separation เท่านั้น
Do NOT create:
crm_leads
Do NOT duplicate:
API
Schema
Database
Server Service
ยังคงใช้
crm_enquiries
เป็น Single Source of Truth
Scope D3.1.1 Navigation
Update:
src/config/nav-config.ts
Add:
CRM
├ Leads
└ Enquiries
Remove old combined menu if exists.
Permissions:
Leads menu:
crm.lead.read
Enquiries menu:
crm.enquiry.read
Scope D3.1.2 Routes
Add:
/dashboard/crm/leads
/dashboard/crm/leads/[id]
Keep:
/dashboard/crm/enquiries
/dashboard/crm/enquiries/[id]
Rules:
Leads page:
pipelineStage = lead
Enquiries page:
pipelineStage = enquiry
Scope D3.1.3 Reuse Existing Module
Do NOT create:
src/features/crm/leads
Reuse:
src/features/crm/enquiries/**
Implementation pattern:
getEnquiries({
pipelineStage: "lead"
})
getEnquiries({
pipelineStage: "enquiry"
})
Shared:
API
Types
Mutations
Queries
Schema
Server Service
Scope D3.1.4 Leads UI
Leads page should focus on Marketing workflow.
Columns:
Code
Lead Source
Company
Contact
Assigned Sales
Created By
Created At
Age
Status
Actions:
View
Edit
Assign To Sales
Mark Lost
Hide:
Quotation Count
Revenue
Chance %
Quotation Value
Scope D3.1.5 Enquiries UI
Enquiries page should focus on Sales workflow.
Columns:
Code
Project
Billing Customer
Enquiry Owner
Chance %
Estimated Value
Quotation Count
Next Follow-up
Status
Actions:
View
Edit
Create Quotation
Follow-up
Won
Lost
Scope D3.1.6 Detail Page Labels
Lead Detail:
Lead Information
Lead Source
Lead Owner
Assigned Sales
Enquiry Detail:
Enquiry Information
Project Information
Enquiry Owner
Follow-ups
Quotations
Both pages may internally reuse the same component.
Only labels and visibility differ.
Scope D3.1.7 Permissions
Add:
crm.lead.read
crm.lead.create
crm.lead.update
crm.lead.assign
crm.lead.delete
Map existing behavior:
marketing
admin
super_admin
Default:
Marketing:
Lead permissions
Sales:
Enquiry permissions
Managers:
Both
Scope D3.1.8 Dashboard Alignment
Dashboard cards should use:
Lead:
pipelineStage = lead
Enquiry:
pipelineStage = enquiry
Links:
Lead KPI
→ /dashboard/crm/leads
Enquiry KPI
→ /dashboard/crm/enquiries
Scope D3.1.9 Query Freshness
After:
Assign Lead
Convert Lead → Enquiry
Won
Lost
Invalidate:
lead list
enquiry list
lead detail
enquiry detail
dashboard KPI
Rules:
Assigned lead should disappear from Leads immediately and appear in Enquiries immediately.
No manual refresh allowed.
Scope D3.1.10 ADR Update
Update:
docs/adr/0011-lead-enquiry-ownership-model.md
Add section:
Navigation Separation
Document:
Lead and Enquiry are separate UX workspaces.
Lead and Enquiry are NOT separate domain entities.
Both are stored in crm_enquiries.
pipelineStage determines business state.
Explicit Non-Scope
Do NOT implement:
crm_leads table
Lead API
Lead schema
Lead server service
Campaign module
Lead scoring
Marketing automation
Import/Export redesign
Output
- Files Added
- Files Modified
- Navigation Changes
- Route Changes
- Permission Changes
- Query Invalidation Added
- Dashboard Changes
- ADR Updates
- Remaining Risks
Definition of Done
✔ Leads menu exists
✔ Enquiries menu exists
✔ Leads page shows only lead-stage records
✔ Enquiries page shows only enquiry-stage records
✔ Lead assignment moves record between pages immediately
✔ Dashboard links point correctly
✔ No duplicate lead module created
✔ No new database table created
✔ Existing enquiry APIs reused
✔ ADR updated