task-k.1
This commit is contained in:
392
plans/task-k.1.md
Normal file
392
plans/task-k.1.md
Normal file
@@ -0,0 +1,392 @@
|
||||
# Task K.1: CRM Report Foundation
|
||||
|
||||
## Objective
|
||||
|
||||
Create a reusable reporting foundation for all future CRM reports.
|
||||
|
||||
This task does not focus on business reports themselves.
|
||||
|
||||
Instead it builds:
|
||||
|
||||
* report architecture
|
||||
* report filters
|
||||
* report security
|
||||
* report exports
|
||||
* report datasets
|
||||
* report metadata registry
|
||||
|
||||
for all future report modules.
|
||||
|
||||
---
|
||||
|
||||
# Background
|
||||
|
||||
Completed foundations:
|
||||
|
||||
* Customer Ownership (C.1)
|
||||
* Contact Sharing (C.1)
|
||||
* Lead / Enquiry Lifecycle (D.3)
|
||||
* Won / Lost Governance (D.4)
|
||||
* Revenue Attribution (D.2.1)
|
||||
* CRM Dashboard KPI (J)
|
||||
* CRM Authorization (L)
|
||||
|
||||
The data model is now stable enough to support reporting.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.1 Report Registry
|
||||
|
||||
Add:
|
||||
|
||||
```txt
|
||||
crm_report_definitions
|
||||
```
|
||||
|
||||
Purpose:
|
||||
|
||||
Store report metadata.
|
||||
|
||||
Fields:
|
||||
|
||||
```txt
|
||||
id
|
||||
|
||||
code
|
||||
name
|
||||
|
||||
description
|
||||
|
||||
category
|
||||
|
||||
isSystem
|
||||
isActive
|
||||
|
||||
createdAt
|
||||
updatedAt
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
lead_pipeline
|
||||
enquiry_pipeline
|
||||
sales_performance
|
||||
lost_analysis
|
||||
revenue_by_customer
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.2 Report Categories
|
||||
|
||||
Seed:
|
||||
|
||||
```txt
|
||||
Pipeline
|
||||
Sales
|
||||
Revenue
|
||||
Customer
|
||||
Quotation
|
||||
Approval
|
||||
Outcome
|
||||
Executive
|
||||
```
|
||||
|
||||
Used for:
|
||||
|
||||
* report navigation
|
||||
* report grouping
|
||||
* future permissions
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.3 Shared Report Filter Model
|
||||
|
||||
Create reusable filter object.
|
||||
|
||||
Support:
|
||||
|
||||
```txt
|
||||
Date Range
|
||||
|
||||
Branch
|
||||
|
||||
Product Type
|
||||
|
||||
Sales
|
||||
|
||||
Customer
|
||||
|
||||
Customer Owner
|
||||
|
||||
Lead Source
|
||||
|
||||
Pipeline Stage
|
||||
|
||||
Won/Lost
|
||||
|
||||
Lost Reason
|
||||
```
|
||||
|
||||
Reusable across all reports.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.4 Report Query Context
|
||||
|
||||
Create:
|
||||
|
||||
```txt
|
||||
ResolvedReportContext
|
||||
```
|
||||
|
||||
Combines:
|
||||
|
||||
```txt
|
||||
Organization
|
||||
|
||||
Branch Scope
|
||||
|
||||
Product Scope
|
||||
|
||||
Ownership Scope
|
||||
|
||||
Permissions
|
||||
```
|
||||
|
||||
Must reuse CRM authorization model.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.5 Report Dataset Layer
|
||||
|
||||
Create:
|
||||
|
||||
```txt
|
||||
src/features/crm/reports/server/
|
||||
```
|
||||
|
||||
Structure:
|
||||
|
||||
```txt
|
||||
datasets/
|
||||
builders/
|
||||
filters/
|
||||
exports/
|
||||
```
|
||||
|
||||
Purpose:
|
||||
|
||||
Single source of truth for report queries.
|
||||
|
||||
Reports must never query database directly from UI routes.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.6 Report Security
|
||||
|
||||
All reports must use:
|
||||
|
||||
```txt
|
||||
resolveCrmAccess()
|
||||
```
|
||||
|
||||
and
|
||||
|
||||
```txt
|
||||
ResolvedReportContext
|
||||
```
|
||||
|
||||
Security rules inherited from:
|
||||
|
||||
* Task L
|
||||
* Task L.1
|
||||
* Task L.2
|
||||
* Task L.3
|
||||
* Task L.3.1
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.7 Report Export Foundation
|
||||
|
||||
Create common export service.
|
||||
|
||||
Supported:
|
||||
|
||||
```txt
|
||||
CSV
|
||||
Excel
|
||||
```
|
||||
|
||||
All reports share same export mechanism.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.8 Report Audit Logging
|
||||
|
||||
Entity:
|
||||
|
||||
```txt
|
||||
crm_report
|
||||
```
|
||||
|
||||
Actions:
|
||||
|
||||
```txt
|
||||
view
|
||||
export_csv
|
||||
export_excel
|
||||
```
|
||||
|
||||
Audit payload:
|
||||
|
||||
```txt
|
||||
reportCode
|
||||
filters
|
||||
userId
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.9 Report Navigation
|
||||
|
||||
Add:
|
||||
|
||||
```txt
|
||||
CRM
|
||||
└─ Reports
|
||||
```
|
||||
|
||||
Landing page only.
|
||||
|
||||
Display:
|
||||
|
||||
```txt
|
||||
Pipeline Reports
|
||||
Sales Reports
|
||||
Revenue Reports
|
||||
Customer Reports
|
||||
Outcome Reports
|
||||
Approval Reports
|
||||
```
|
||||
|
||||
No business reports yet.
|
||||
|
||||
Only report catalog.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.10 Foundation APIs
|
||||
|
||||
Add:
|
||||
|
||||
```txt
|
||||
GET /api/crm/reports
|
||||
|
||||
GET /api/crm/reports/catalog
|
||||
|
||||
GET /api/crm/reports/filters
|
||||
```
|
||||
|
||||
Purpose:
|
||||
|
||||
Report discovery.
|
||||
|
||||
No heavy report execution yet.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.11 Permissions
|
||||
|
||||
Add:
|
||||
|
||||
```txt
|
||||
crm.report.read
|
||||
crm.report.export
|
||||
```
|
||||
|
||||
Future reports inherit these permissions.
|
||||
|
||||
---
|
||||
|
||||
# Scope K1.12 Documentation
|
||||
|
||||
Create:
|
||||
|
||||
```txt
|
||||
docs/adr/0017-report-foundation.md
|
||||
|
||||
docs/implementation/task-k1-report-foundation.md
|
||||
```
|
||||
|
||||
Document:
|
||||
|
||||
* report architecture
|
||||
* security model
|
||||
* dataset model
|
||||
* export model
|
||||
|
||||
---
|
||||
|
||||
# Explicit Non-Scope
|
||||
|
||||
Do NOT build:
|
||||
|
||||
* Lead Report
|
||||
* Sales Report
|
||||
* Revenue Report
|
||||
* Customer Report
|
||||
* Executive Report
|
||||
|
||||
Those belong to:
|
||||
|
||||
```txt
|
||||
K.2
|
||||
K.3
|
||||
K.4
|
||||
K.5
|
||||
K.6
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# Deliverables
|
||||
|
||||
1. Report Registry
|
||||
2. Report Catalog
|
||||
3. Shared Filters
|
||||
4. Dataset Layer
|
||||
5. Export Foundation
|
||||
6. Security Foundation
|
||||
7. Report Navigation
|
||||
8. Audit Logging
|
||||
9. ADR 0017
|
||||
|
||||
---
|
||||
|
||||
# Definition of Done
|
||||
|
||||
Task K.1 is complete when:
|
||||
|
||||
* Reports menu exists
|
||||
* Report catalog exists
|
||||
* Shared filter model exists
|
||||
* Dataset architecture exists
|
||||
* Export foundation exists
|
||||
* Security foundation exists
|
||||
* Report permissions exist
|
||||
* Report ADR exists
|
||||
|
||||
Result:
|
||||
|
||||
```txt
|
||||
CRM Report Center Foundation = READY
|
||||
|
||||
Ready for:
|
||||
|
||||
K.2 Pipeline Reports
|
||||
K.3 Outcome Analytics
|
||||
K.4 Revenue Analytics
|
||||
K.5 Sales Performance
|
||||
K.6 Customer Analytics
|
||||
K.7 Approval Analytics
|
||||
```
|
||||
Reference in New Issue
Block a user