# T589 — crm-stats-api-three-dimensions > Status: `done` > Milestone: `M5` > Kind: `feat` > Est. change: `~200 lines` ## Goal 完成後系統應:`GET /api/v1/crm/stats` 回關鍵字轉換率、回覆版本成功率、成交來源三維度,樣本 < 5 只給絕對數並標「樣本不足」。 ## Depends on - T548、T572 ## Inputs - Spec:`../spec.md` §4.8、§9.5(ST-01~ST-03) ## Outputs ### 程式變更(預期路徑) | 路徑 | 動作 | 說明 | |------|------|------| | `apps/backend/generate/api/crm.api` | edit | stats resp type(三維度+`insufficient_sample` 標記) | | `apps/backend/internal/logic/crm/getCrmStatsLogic.go` | edit | 聚合查詢 | | `apps/backend/internal/module/crm/usecase/stats.go` | add | 三維度計算與樣本門檻判斷 | ### 行為變更 - 關鍵字維度:以 watch `term` 為單位,`won/accepted`,附 accepted/replied/won 絕對數。 - 回覆版本維度:以 `variant` 為單位,`(replied + won) / used`(`used` 來自 T548 的 `MarkUsed`)。 - 來源維度:`radar`/既有海巡/`manual_import` 的成交筆數(P0 不含金額)。 - 任一維度樣本 < 5:`insufficient_sample=true`,**只回絕對數**,不回百分比與排名。 ## Out of scope - 金額維度(P1) - 圖表(T591 用既有元件) ## Acceptance - [x] ST-01:accepted 8/won 2 → 顯示轉換率與絕對數 - [x] ST-02:樣本 3 → `insufficient_sample=true` 且無百分比 - [x] ST-03:三種來源分列 - [x] 指令: ```bash cd apps/backend && make gen-api && go test ./internal/logic/crm/... ./internal/module/crm/... -count=1 ```