Skip to content

EVIDENCE PACK — LTV Phase 1

Version: 1.0
Date: 20/04/2026
Author: PO/BA
Purpose: Bằng chứng đối chiếu code/screen/config trước khi khóa Solution Lock và sinh PRD


File này dùng để làm gì: gom bằng chứng từ codebase và tài liệu design đã chốt để tránh tự suy diễn solution cho LTV Phase 1. Nên đọc trước: Stakeholder AskCurrent DB / Config FactsReuse Candidates.

1) Stakeholder Ask

AskBusiness reasonPriority
Chuẩn hóa chỉ số LTV cho 1 khách hàngCó nền số liệu chung cho CAC/LTV, retention, chi nhánh, nhóm dịch vụMust
Chốt cách gắn Nguồn gốc LTV chuẩn cho từng kháchĐọc đúng hiệu quả nguồn khách, không bị raw source động làm vỡ lịch sửMust
Backfill tối đa cho khách cũSếp cần nhìn bức tranh lịch sử, không chỉ khách mới sau ngày bật tính năngMust
Có bảng phân tích để business tự đọcPhase 1 dừng ở mức metric + bảng phân tích, chưa cần dashboard chiến lượcMust
Không suy diễn quá mức khi dữ liệu thiếu rõGiữ độ tin cậy của số liệu, chấp nhận Chưa xác địnhMust

2) Existing UI Layout

SCR / ScreenCurrent component / routeLayout summaryScreenshot / code ref
Report shell hiện códiva-admin/src/modules/report/pages/Reports.tsx và các pages trong src/modules/report/pagesModule report đang theo pattern filter + table/cards + export, phù hợp để thêm report analytics mớiCodebase discovery
Customer Cycle Reportdiva-admin/src/modules/report/pages/CustomerCycleReport.tsxCó shell tab report và pattern split theo nhiều góc nhìn (Tổng quan, Chu kỳ mua hàng, Chu kỳ khách hàng)CustomerCycleReport.tsx
Rank / Customer Revenue reportdiva-admin/src/modules/report/components/rank/CustomerRevenueReportTable.tsxĐã có pattern bảng khách hàng + pagination + export client-sideCustomerRevenueReportTable.tsx
HTML brief cho sếpdocs/guides/ltv-phase1-proposal.htmlTài liệu business-facing để chốt phương án và giải thích scope phase 1ltv-phase1-proposal.html

3) As-Is UI Inventory

SCRSection / TabCurrent fields / columns / CTAOrderNotes
LTV ReportChưa có màn chuyên biệtChưa có danh sách khách theo LTV, chưa có bảng tổng hợp LTV theo nguồn/chi nhánh/dịch vụN/AĐây là feature mới
Customer source maintenanceMaster data nguồn kháchDanh mục nguồn khách đang là cấu hình động, dùng cho nhập liệu và filterN/AKhông phải canonical source cho LTV

4) Current DB / Config / Master Data Facts

AreaCurrent factRefKeep / Extend / Replace
Customer revenueĐã có customer_revenue để ghi nhận doanh thu theo khách, có action type cho payment/refunddiva-backend/pkg/store/customer_revenue.goKeep + Extend
AggregationĐã có materialized view customer_revenue_stats tổng hợp total_sales, total_revenue, total_debt theo customer_id1706669141375_customer_revenue_stats/up.sqlKeep + Extend
First paid logicCodebase đã có dấu hiệu dùng invoice.paid_at làm mốc order đầu tiêndiva-backend/pkg/store/kpi_metric.goKeep
Customer sourceecommerce_user.customer_source đang là mảng raw source trên hồ sơ kháchdiva-backend/pkg/store/ecommerce_user.goKeep as raw source
Source dashboardDashboard source hiện đọc trực tiếp từ master_data + ecommerce_user.customer_source1695093908449_run_sql_migration/up.sqlKeep for ops, not for LTV canonical
Refund logicrefund_wallet, refund_cash ở lớp customer revenuecustomer_revenue.goKeep
Source historyChưa tìm thấy bằng chứng có bảng lịch sử customer_source theo thời gianCodebase discoveryGap to respect

5) Reuse Candidates

CandidateCurrent assetClassificationDelta needed
Nền doanh thu theo kháchcustomer_revenue + customer_revenue_stats🔧 ExtendThêm lớp chuẩn hóa đúng business rule của LTV Phase 1
Mốc first paidGetFirstOrderAt dùng invoice.paid_at✅ ReuseDùng cùng nguyên tắc cho LTV
Report shell FECác report table/filter/pagination/export hiện có trong diva-admin/src/modules/report🔧 ExtendDựng report LTV theo pattern cũ
Raw source master datacustomer_source trên ecommerce_user + master data✅ ReuseChỉ dùng như raw input, không dùng trực tiếp làm canonical
Snapshot nguồn gốc LTVChưa có🆕 Build mớiCần storage + audit + manual override flow
Mapping versionChưa có🆕 Build mớiCần versioning để khóa logic map theo thời gian

6) Affected Screens / Routes / Files

TypeItemWhy affected
FE modulediva-admin/src/modules/report/*Cần thêm report LTV Phase 1
FE componentReport filter / table patternsReuse pattern cho customer-level analytics
BE storecustomer_revenue.go, kpi_metric.goLà nền logic doanh thu theo khách và first paid
DBcustomer_revenue_stats và bảng mới cho snapshot/mappingCần làm lớp canonical cho LTV/source
Master datacustomer_sourceCần map từ raw source sang normalized source
Docsdocs/superpowers/specs/2026-04-20-ltv-phase1-design.mdLà design intent đã chốt

7) Risks Of Speculative Design

RiskWhat could be wrongly assumedHow Evidence Pack prevents it
Dùng raw source hiện tại làm lịch sử chuẩnSẽ rewrite lịch sử khách cũ khi user sửa hồ sơGhi rõ codebase chưa chứng minh có source history
Gọi tất cả view là LTV theo ...Dễ nhầm giữa all-time LTV và revenue phát sinh trong kỳKhóa semantics ngay từ design/PRD
Phân bổ LTV toàn vòng đời cho nhiều nhóm dịch vụSai nghĩa customer-level metricChốt phase 1 chỉ dùng nhóm dịch vụ khởi đầu
Remap source tùy ý theo thời gianSố liệu giữa các tháng sẽ không so sánh đượcBắt buộc mapping_version + snapshot lưu version