# 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