371 lines
4.5 KiB
Markdown
371 lines
4.5 KiB
Markdown
# Task D.2.1: Revenue Attribution & Party Governance
|
|
|
|
## Goal
|
|
|
|
Freeze Revenue Attribution Rules และ Project Party Reporting Rules สำหรับ ALLA OS CRM
|
|
|
|
หลัง Task D.2.1 ผ่านแล้ว:
|
|
|
|
* Dashboard KPI
|
|
* Report Center
|
|
* Export
|
|
* Sales Analytics
|
|
|
|
ต้องใช้กติกาชุดเดียวกัน
|
|
|
|
ห้ามแต่ละ module ตีความ Revenue Owner เอง
|
|
|
|
---
|
|
|
|
# Business Problem
|
|
|
|
ตัวอย่าง:
|
|
|
|
Billing Customer:
|
|
|
|
```txt
|
|
Italian Thai
|
|
```
|
|
|
|
Project Parties:
|
|
|
|
```txt
|
|
PTT -> End Customer
|
|
Italian Thai -> Contractor
|
|
AEC -> Consultant
|
|
ALLA -> Billing Customer
|
|
```
|
|
|
|
Quotation:
|
|
|
|
```txt
|
|
5,000,000 THB
|
|
```
|
|
|
|
คำถาม:
|
|
|
|
```txt
|
|
Revenue นี้เป็นของใคร?
|
|
```
|
|
|
|
ถ้าไม่ Freeze ตอนนี้
|
|
|
|
Dashboard และ Report จะให้คำตอบไม่ตรงกัน
|
|
|
|
---
|
|
|
|
# Scope D2.1.1 Revenue Attribution Rule
|
|
|
|
## Revenue Owner
|
|
|
|
Freeze:
|
|
|
|
```txt
|
|
Revenue Owner = End Customer
|
|
```
|
|
|
|
Rules:
|
|
|
|
* ใช้ Project Party role = `end_customer`
|
|
* ถ้าไม่มี end_customer ให้ใช้ billing_customer fallback
|
|
* Dashboard ต้องใช้ Revenue Owner ในการจัดอันดับลูกค้า
|
|
|
|
Example:
|
|
|
|
```txt
|
|
Quotation = 5,000,000
|
|
|
|
Billing Customer:
|
|
Italian Thai
|
|
|
|
End Customer:
|
|
PTT
|
|
```
|
|
|
|
Revenue Attribution:
|
|
|
|
```txt
|
|
PTT = 5,000,000
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D2.1.2 Billing Customer Revenue
|
|
|
|
Freeze:
|
|
|
|
```txt
|
|
Billing Revenue
|
|
```
|
|
|
|
Definition:
|
|
|
|
```txt
|
|
Sum quotation value
|
|
where party role = billing_customer
|
|
```
|
|
|
|
Purpose:
|
|
|
|
```txt
|
|
Commercial relationship reporting
|
|
```
|
|
|
|
Example:
|
|
|
|
```txt
|
|
Italian Thai
|
|
```
|
|
|
|
ได้รับ Billing Revenue
|
|
|
|
---
|
|
|
|
# Scope D2.1.3 Contractor Revenue
|
|
|
|
Freeze:
|
|
|
|
```txt
|
|
Contractor Revenue
|
|
```
|
|
|
|
Definition:
|
|
|
|
```txt
|
|
Sum quotation value
|
|
where party role = contractor
|
|
```
|
|
|
|
Purpose:
|
|
|
|
```txt
|
|
Contractor relationship reporting
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D2.1.4 Consultant Revenue
|
|
|
|
Freeze:
|
|
|
|
```txt
|
|
Consultant Revenue
|
|
```
|
|
|
|
Definition:
|
|
|
|
```txt
|
|
Sum quotation value
|
|
where party role = consultant
|
|
```
|
|
|
|
Purpose:
|
|
|
|
```txt
|
|
Consultant relationship reporting
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D2.1.5 Multiple Party Rule
|
|
|
|
Example:
|
|
|
|
```txt
|
|
Contractor A
|
|
Contractor B
|
|
```
|
|
|
|
Rules:
|
|
|
|
```txt
|
|
Both receive full attribution
|
|
```
|
|
|
|
Meaning:
|
|
|
|
```txt
|
|
Revenue = 5,000,000
|
|
|
|
Contractor A = 5,000,000
|
|
Contractor B = 5,000,000
|
|
```
|
|
|
|
Reason:
|
|
|
|
```txt
|
|
CRM relationship analytics
|
|
Not accounting allocation
|
|
```
|
|
|
|
Do NOT prorate.
|
|
|
|
---
|
|
|
|
# Scope D2.1.6 Dashboard Reporting Rule
|
|
|
|
Dashboard must use:
|
|
|
|
```txt
|
|
crm_project_parties
|
|
crm_enquiry_customers
|
|
crm_quotation_customers
|
|
```
|
|
|
|
Dashboard must NOT use:
|
|
|
|
```txt
|
|
crm_customers only
|
|
```
|
|
|
|
as revenue source.
|
|
|
|
Project Party role is the reporting authority.
|
|
|
|
---
|
|
|
|
# Scope D2.1.7 KPI Extension
|
|
|
|
Freeze new KPI dimensions:
|
|
|
|
## End Customer
|
|
|
|
```txt
|
|
Top End Customers
|
|
Revenue by End Customer
|
|
Won Revenue by End Customer
|
|
Lost Revenue by End Customer
|
|
```
|
|
|
|
---
|
|
|
|
## Contractor
|
|
|
|
```txt
|
|
Top Contractors
|
|
Revenue by Contractor
|
|
Won Revenue by Contractor
|
|
```
|
|
|
|
---
|
|
|
|
## Consultant
|
|
|
|
```txt
|
|
Top Consultants
|
|
Revenue by Consultant
|
|
Won Revenue by Consultant
|
|
```
|
|
|
|
---
|
|
|
|
## Billing Customer
|
|
|
|
```txt
|
|
Top Billing Customers
|
|
Revenue by Billing Customer
|
|
```
|
|
|
|
---
|
|
|
|
# Scope D2.1.8 Service Layer
|
|
|
|
Create reporting helpers:
|
|
|
|
```ts
|
|
getRevenueByEndCustomer()
|
|
getRevenueByBillingCustomer()
|
|
getRevenueByContractor()
|
|
getRevenueByConsultant()
|
|
```
|
|
|
|
Rules:
|
|
|
|
* organization scoped
|
|
* respect active filters
|
|
* reusable by Dashboard and Reports
|
|
|
|
No UI required.
|
|
|
|
---
|
|
|
|
# Scope D2.1.9 Governance Documentation
|
|
|
|
Create ADR:
|
|
|
|
```txt
|
|
Revenue Attribution Governance
|
|
```
|
|
|
|
Document:
|
|
|
|
```txt
|
|
Revenue Owner Rule
|
|
Project Party Reporting Rule
|
|
Fallback Rule
|
|
Multiple Party Rule
|
|
```
|
|
|
|
Update:
|
|
|
|
```txt
|
|
docs/implementation/technical-debt.md
|
|
```
|
|
|
|
if any unresolved reporting edge cases are discovered.
|
|
|
|
---
|
|
|
|
# Explicit Non-Scope
|
|
|
|
Do NOT implement:
|
|
|
|
```txt
|
|
Dashboard UI
|
|
Charts
|
|
Export
|
|
Forecasting
|
|
Commission calculation
|
|
Accounting allocation
|
|
Profitability reporting
|
|
```
|
|
|
|
This task is governance only.
|
|
|
|
---
|
|
|
|
# Output
|
|
|
|
1. Revenue Attribution Rules Frozen
|
|
2. Revenue Owner Frozen
|
|
3. Project Party Reporting Rules Frozen
|
|
4. KPI Dimensions Frozen
|
|
5. Service Layer Added
|
|
6. ADR Added
|
|
7. Remaining Risks
|
|
8. Task J Readiness
|
|
|
|
---
|
|
|
|
# Definition of Done
|
|
|
|
✔ Revenue Owner frozen
|
|
|
|
✔ End Customer attribution frozen
|
|
|
|
✔ Billing attribution frozen
|
|
|
|
✔ Contractor attribution frozen
|
|
|
|
✔ Consultant attribution frozen
|
|
|
|
✔ Multiple party rule frozen
|
|
|
|
✔ Dashboard reporting rule frozen
|
|
|
|
✔ KPI dimensions frozen
|
|
|
|
✔ ADR created
|
|
|
|
✔ Ready for Task J Dashboard KPI
|