Files
alla-allaos-fullstack/plans/task-d.3.1.md
phaichayon c0cc880be2 lead menu
nquiry menu
2026-06-19 10:39:11 +07:00

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

  1. Files Added
  2. Files Modified
  3. Navigation Changes
  4. Route Changes
  5. Permission Changes
  6. Query Invalidation Added
  7. Dashboard Changes
  8. ADR Updates
  9. 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