# 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
```
