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