# T600 — scout-promote-to-opportunity

> Status: `done`  
> Milestone: `M6`  
> Kind: `feat`  
> Est. change: `~170 lines`

## Goal

完成後系統應：`POST /api/v1/scout/posts/:id/promote` 以**複製**方式建立新 Opportunity 並記 `source_scout_post_id`，原 ScoutPost 狀態不變。

## Depends on

- T530、T567

## Inputs

- Spec：`../spec.md` §4.10、§9.6（PR-01、PR-02）
- 既有：`apps/backend/internal/logic/scout/**`、`internal/module/scout/domain`（`outreach_status`）

## Outputs

### 程式變更（預期路徑）

| 路徑 | 動作 | 說明 |
|------|------|------|
| `apps/backend/generate/api/radar.api` 或既有 scout 契約 | edit | promote route（掛既有 `scout` group） |
| `apps/backend/internal/logic/scout/promotePostLogic.go` | add | 讀 ScoutPost → 組 Opportunity 輸入 → 跑同一套判定 → 回 `opportunity_id` |
| `apps/backend/internal/module/radar/usecase/promote.go` | add | `source=scout_promote`＋`source_scout_post_id` |

### 行為變更

- 兩邊狀態機**完全不共用**：promote 後推進 CRM 不影響 `outreach_status`。
- 同一 ScoutPost 重複 promote：以 `external_id` 去重，回既有 `opportunity_id`。
- 跑同一套五問判定與配額／計費規則（受當日上限約束）。

## Out of scope

- 前端動作（T601）
- 修改既有海巡三模式行為（必須不變）

## Acceptance

- [x] PR-01：promote 後新 Opportunity 存在且 `source_scout_post_id` 正確，原 ScoutPost 狀態不變
- [x] PR-02：CRM 推進不影響 `outreach_status`
- [x] 指令：

```bash
cd apps/backend && make gen-api && go test ./internal/logic/scout/... ./internal/module/radar/... -count=1
```
