465 lines
5.1 KiB
Markdown
465 lines
5.1 KiB
Markdown
# Task D.3: Lead / Enquiry Ownership Refinement
|
|
|
|
## Goal
|
|
|
|
ปรับ CRM Pipeline ให้สอดคล้องกับ Business Process ล่าสุด
|
|
|
|
Current:
|
|
|
|
```txt
|
|
Lead (unassigned enquiry)
|
|
↓
|
|
Opportunity (assigned enquiry)
|
|
↓
|
|
Quotation
|
|
↓
|
|
Won / Lost
|
|
```
|
|
|
|
New Business Flow:
|
|
|
|
```txt
|
|
Lead
|
|
↓ Assign To Sales
|
|
Enquiry
|
|
↓
|
|
Quotation
|
|
↓
|
|
Won / Lost
|
|
```
|
|
|
|
Important:
|
|
|
|
Task D.3 focuses on ownership, visibility, permissions, and lifecycle only.
|
|
|
|
Lead and Enquiry continue using the same underlying business fields and form structure.
|
|
|
|
Do NOT split the Lead form and Enquiry form yet.
|
|
|
|
Future form differences will be handled in a separate task if business requirements diverge.
|
|
|
|
---
|
|
|
|
# Business Rules
|
|
|
|
## Lead
|
|
|
|
Owner:
|
|
|
|
```txt
|
|
Marketing (MK)
|
|
```
|
|
|
|
Purpose:
|
|
|
|
```txt
|
|
Lead collection
|
|
Lead qualification
|
|
Lead nurturing
|
|
```
|
|
|
|
Status examples:
|
|
|
|
```txt
|
|
new
|
|
contacted
|
|
qualified
|
|
disqualified
|
|
assigned
|
|
```
|
|
|
|
Lead may exist without sales assignment.
|
|
|
|
---
|
|
|
|
## Enquiry
|
|
|
|
Owner:
|
|
|
|
```txt
|
|
Sales
|
|
```
|
|
|
|
Purpose:
|
|
|
|
```txt
|
|
Project follow-up
|
|
Opportunity development
|
|
Competitor tracking
|
|
Quotation preparation
|
|
```
|
|
|
|
Enquiry begins when:
|
|
|
|
```txt
|
|
Lead assigned to Sales
|
|
```
|
|
|
|
or
|
|
|
|
```txt
|
|
Sales creates enquiry directly
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D3.1 Pipeline Terminology Refinement
|
|
|
|
Replace current KPI and workflow terminology.
|
|
|
|
Old:
|
|
|
|
```txt
|
|
Lead = enquiry without assignment
|
|
Opportunity = enquiry with assignment
|
|
```
|
|
|
|
New:
|
|
|
|
```txt
|
|
Lead = marketing-owned pipeline stage
|
|
|
|
Enquiry = sales-owned pipeline stage
|
|
```
|
|
|
|
Rules:
|
|
|
|
* Stop using Opportunity terminology in UI where practical
|
|
* Use Lead and Enquiry terminology consistently
|
|
* Preserve existing data compatibility
|
|
|
|
---
|
|
|
|
# Scope D3.2 Enquiry Pipeline Stage
|
|
|
|
Add field:
|
|
|
|
```txt
|
|
pipelineStage
|
|
```
|
|
|
|
Allowed values:
|
|
|
|
```txt
|
|
lead
|
|
enquiry
|
|
closed_won
|
|
closed_lost
|
|
```
|
|
|
|
Default:
|
|
|
|
```txt
|
|
lead
|
|
```
|
|
|
|
Rules:
|
|
|
|
### Marketing-created lead
|
|
|
|
```txt
|
|
pipelineStage = lead
|
|
assignedToUserId = null
|
|
```
|
|
|
|
### Assign to sales
|
|
|
|
Automatically:
|
|
|
|
```txt
|
|
pipelineStage = enquiry
|
|
assignedToUserId = salesUserId
|
|
assignedAt = now()
|
|
```
|
|
|
|
### Reassign
|
|
|
|
Keep:
|
|
|
|
```txt
|
|
pipelineStage = enquiry
|
|
```
|
|
|
|
### Won
|
|
|
|
```txt
|
|
pipelineStage = closed_won
|
|
```
|
|
|
|
### Lost
|
|
|
|
```txt
|
|
pipelineStage = closed_lost
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D3.3 Assign Flow Refinement
|
|
|
|
Current assign flow already exists.
|
|
|
|
Update behavior:
|
|
|
|
Assign:
|
|
|
|
```txt
|
|
Lead
|
|
↓
|
|
Enquiry
|
|
```
|
|
|
|
When assign executes:
|
|
|
|
```txt
|
|
assignedToUserId
|
|
assignedAt
|
|
assignedBy
|
|
pipelineStage = enquiry
|
|
```
|
|
|
|
Audit:
|
|
|
|
```txt
|
|
assign
|
|
lead_to_enquiry
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D3.4 MK Visibility Policy
|
|
|
|
Marketing users must be able to monitor progress.
|
|
|
|
MK can view:
|
|
|
|
```txt
|
|
Lead
|
|
Enquiry
|
|
Follow-ups
|
|
Status
|
|
Pipeline Stage
|
|
Assigned Sales
|
|
Won/Lost Result
|
|
```
|
|
|
|
MK cannot view:
|
|
|
|
```txt
|
|
Quotation Amount
|
|
Quotation Item
|
|
Quotation Cost
|
|
Discount
|
|
Margin
|
|
Approval Data
|
|
```
|
|
|
|
MK cannot:
|
|
|
|
```txt
|
|
Edit enquiry owned by sales
|
|
Create quotation
|
|
Modify quotation
|
|
Approve quotation
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D3.5 Sales Visibility Policy
|
|
|
|
Sales can:
|
|
|
|
```txt
|
|
View assigned enquiries
|
|
Edit assigned enquiries
|
|
Create quotations
|
|
Manage follow-ups
|
|
View quotation pricing
|
|
```
|
|
|
|
Rules remain compatible with existing assignment ownership.
|
|
|
|
---
|
|
|
|
# Scope D3.6 Dashboard KPI Alignment
|
|
|
|
Update KPI service layer.
|
|
|
|
New definitions:
|
|
|
|
### Lead Count
|
|
|
|
```txt
|
|
pipelineStage = lead
|
|
```
|
|
|
|
### Enquiry Count
|
|
|
|
```txt
|
|
pipelineStage = enquiry
|
|
```
|
|
|
|
### Won Count
|
|
|
|
```txt
|
|
pipelineStage = closed_won
|
|
```
|
|
|
|
### Lost Count
|
|
|
|
```txt
|
|
pipelineStage = closed_lost
|
|
```
|
|
|
|
Remove dependency on:
|
|
|
|
```txt
|
|
assignedToUserId == null
|
|
```
|
|
|
|
for lead calculation.
|
|
|
|
---
|
|
|
|
# Scope D3.7 Revenue Rules
|
|
|
|
No revenue logic change.
|
|
|
|
Still use:
|
|
|
|
```txt
|
|
Quotation Amount
|
|
Revenue Attribution
|
|
Project Party Governance
|
|
```
|
|
|
|
from Task D.2.1.
|
|
|
|
---
|
|
|
|
# Scope D3.8 UI Labels
|
|
|
|
Update CRM wording.
|
|
|
|
Examples:
|
|
|
|
```txt
|
|
Assign Sales
|
|
→ Convert To Enquiry
|
|
|
|
Assigned Sales
|
|
→ Enquiry Owner
|
|
|
|
Open Opportunities
|
|
→ Active Enquiries
|
|
```
|
|
|
|
Do not rename database tables.
|
|
|
|
Only update business-facing labels.
|
|
|
|
---
|
|
|
|
# Scope D3.9 Backward Compatibility
|
|
|
|
Do NOT:
|
|
|
|
```txt
|
|
Create crm_leads table
|
|
Split enquiry form
|
|
Split enquiry schema
|
|
Split enquiry API
|
|
```
|
|
|
|
Continue using:
|
|
|
|
```txt
|
|
crm_enquiries
|
|
```
|
|
|
|
as the single source of truth.
|
|
|
|
Lead vs Enquiry is determined by:
|
|
|
|
```txt
|
|
pipelineStage
|
|
```
|
|
|
|
and ownership.
|
|
|
|
---
|
|
|
|
# Scope D3.10 ADR
|
|
|
|
Create:
|
|
|
|
```txt
|
|
docs/adr/0011-lead-enquiry-ownership-model.md
|
|
```
|
|
|
|
Document:
|
|
|
|
```txt
|
|
Lead ownership
|
|
Enquiry ownership
|
|
Assignment flow
|
|
MK visibility restrictions
|
|
Won/Lost lifecycle
|
|
```
|
|
|
|
This ADR supersedes the Opportunity terminology frozen in Task J.0.
|
|
|
|
---
|
|
|
|
# Explicit Non-Scope
|
|
|
|
Do NOT implement:
|
|
|
|
```txt
|
|
crm_leads table
|
|
Lead form
|
|
Lead API
|
|
Lead import
|
|
Campaign module
|
|
Marketing automation
|
|
Lead scoring
|
|
New dashboard widgets
|
|
```
|
|
|
|
---
|
|
|
|
# Output
|
|
|
|
1. Files Added
|
|
2. Files Modified
|
|
3. Pipeline Changes
|
|
4. Ownership Changes
|
|
5. Visibility Rules Added
|
|
6. KPI Changes
|
|
7. ADR Added
|
|
8. Migration Notes
|
|
9. Remaining Risks
|
|
|
|
---
|
|
|
|
# Definition of Done
|
|
|
|
✔ Lead and Enquiry terminology updated
|
|
|
|
✔ Assign converts Lead → Enquiry
|
|
|
|
✔ MK can monitor enquiries
|
|
|
|
✔ MK cannot see quotation pricing
|
|
|
|
✔ Sales owns enquiries
|
|
|
|
✔ Dashboard KPI follows pipelineStage
|
|
|
|
✔ No duplicate Lead module created
|
|
|
|
✔ Existing enquiry form reused
|
|
|
|
✔ Existing data remains compatible
|
|
|
|
✔ ADR created
|