This commit is contained in:
phaichayon
2026-06-17 16:04:19 +07:00
parent 5be6c54272
commit 04a886ea26
57 changed files with 6477 additions and 105 deletions

View File

@@ -0,0 +1,540 @@
# Task J: CRM Dashboard KPI & Sales Analytics
## Background
Task J.0 KPI Definition Freeze completed.
Task D.2.1 Revenue Attribution and Party Governance completed.
Dashboard implementation MUST follow:
```txt
Lead Definition
Opportunity Definition
Revenue Attribution Rules
Project Party Reporting Rules
```
No dashboard logic may redefine KPI formulas.
---
# Must Read
```txt
Layout.md
.agents/skills/kiranism-shadcn-dashboard
docs/adr/0010-revenue-attribution-governance.md
docs/implementation/technical-debt.md
src/features/crm/reporting/server/**
src/features/crm/customers/**
src/features/crm/enquiries/**
src/features/crm/quotations/**
src/features/foundation/approval/**
src/features/foundation/document-artifact/**
src/db/schema.ts
```
---
# Goal
Replace CRM placeholder dashboard with a production KPI dashboard powered by real CRM data.
Route:
```txt
/ dashboard / crm
```
No mock data allowed.
---
# Scope J1: Dashboard Foundation
Create:
```txt
src/features/crm/dashboard/**
```
Recommended structure:
```txt
api/
types.ts
service.ts
queries.ts
server/
service.ts
components/
dashboard-summary-cards.tsx
dashboard-funnel.tsx
dashboard-sales-ranking.tsx
dashboard-followups.tsx
dashboard-approval-metrics.tsx
dashboard-revenue-cards.tsx
dashboard-hot-projects.tsx
```
Use:
```txt
Server Components First
React Query
PageContainer
Bento Grid Layout
```
Follow:
```txt
Layout.md
kiranism-shadcn-dashboard
```
---
# Scope J2: Executive Summary Cards
Cards:
## Lead
```txt
Lead Count
New Leads
Unassigned Leads
Lead Aging Average
```
Formula:
```txt
pipelineStage = lead
```
---
## Opportunity
```txt
Opportunity Count
Open Opportunities
Hot Opportunities
Opportunity Value
```
Formula:
```txt
pipelineStage = opportunity
```
Source:
```txt
crm_enquiries.estimatedValue
```
---
## Quotation
```txt
Draft Quotations
Pending Approval
Approved Quotations
Sent Quotations
```
---
## Revenue
```txt
Quotation Value
Won Value
Lost Value
```
Use frozen revenue rules.
---
# Scope J3: Sales Pipeline Funnel
Create funnel widget:
```txt
Lead
Opportunity
Quotation
Pending Approval
Approved
Closed Won
```
Display:
```txt
Count
Value
Conversion %
```
Formulas must follow Task J.0.
---
# Scope J4: Revenue Analytics
Use:
```txt
src/features/crm/reporting/server/**
```
Cards:
```txt
Top End Customers
Top Billing Customers
Top Contractors
Top Consultants
```
Metrics:
```txt
Revenue
Quotation Count
Won Revenue
```
Revenue Attribution:
```txt
End Customer
Fallback Billing Customer
```
must follow ADR.
---
# Scope J5: Sales Ranking
Create table:
Columns:
```txt
Sales Person
Lead Count
Opportunity Count
Quotation Count
Approved Quotations
Won Revenue
Conversion Rate
```
Ownership:
```txt
Lead / Opportunity
→ assignedToUserId
Quotation
→ salesmanId
```
Use KPI Freeze definitions.
---
# Scope J6: Follow-up Dashboard
Source:
```txt
crm_enquiry_followups
crm_quotation_followups
```
Cards:
```txt
Due Today
Due This Week
Overdue
Completed
```
Table:
```txt
Upcoming Follow Ups
```
Display:
```txt
Date
Customer
Opportunity
Assigned Sales
```
---
# Scope J7: Approval Analytics
Source:
```txt
approval module
```
Cards:
```txt
Pending Approvals
Approved Today
Rejected Today
Returned Today
```
Metrics:
```txt
Average Approval Time
```
Table:
```txt
My Pending Approvals
```
---
# Scope J8: Hot Projects
Source:
```txt
crm_enquiries.isHotProject
crm_quotations.isHotProject
```
Widget:
```txt
Top Hot Opportunities
```
Display:
```txt
Project
Customer
Value
Assigned Sales
Probability
```
---
# Scope J9: Global Filters
Add filters:
```txt
Date Range
Branch
Sales Person
Project Party Role
Product Type
```
Use:
```txt
nuqs
```
Rules:
```txt
organization scoped
server query aware
```
---
# Scope J10: Permissions
Add:
```txt
crm.dashboard.read
crm.dashboard.export
```
Rules:
```txt
super_admin
organization_admin
sales_manager
```
full access
sales:
```txt
own scope only (future-ready)
```
For now:
```txt
organization scope allowed
```
Document as technical debt.
---
# Scope J11: Export
Support:
```txt
CSV
Excel
```
Exports:
```txt
Sales Ranking
Revenue Analytics
Pipeline Funnel
```
Use current export patterns.
Do NOT generate PDF dashboards.
---
# Scope J12: Performance Rules
Required:
```txt
Aggregate queries
Server-side calculations
No N+1 queries
Pagination for tables
Reusable KPI service layer
```
Dashboard should remain fast with:
```txt
100k+
quotations
enquiries
customers
```
---
# Scope J13: Audit
Audit:
```txt
crm_dashboard_export
```
Actions:
```txt
export_csv
export_excel
```
Reading dashboard does not require audit.
---
# Explicit Non-Scope
Do NOT implement:
```txt
AI Forecasting
Predictive Sales
Power BI
Data Warehouse
Notification Center
Report Builder
```
---
# Output
1. Files Added
2. Files Modified
3. KPI Widgets Added
4. Revenue Analytics Added
5. Sales Ranking Added
6. Approval Analytics Added
7. Export Added
8. Permissions Added
9. Remaining Risks
10. Task K Readiness
---
# Definition of Done
✔ Dashboard uses real data
✔ KPI summary cards complete
✔ Revenue analytics complete
✔ Sales ranking complete
✔ Approval analytics complete
✔ Follow-up analytics complete
✔ Pipeline funnel complete
✔ Filters working
✔ Export working
✔ No mock data
✔ Ready for Task K Report Center