52 lines
1.6 KiB
Markdown
52 lines
1.6 KiB
Markdown
# 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
|
||
```
|