diff --git a/T-223.-.md b/T-223.-.md new file mode 100644 index 0000000..5158409 --- /dev/null +++ b/T-223.-.md @@ -0,0 +1,77 @@ + +> 同步来源:[`docs/tasks/T-223.md`](/chengma/mroubao/src/commit/afc651f75a3abc2676bb13aa8a80f6aa6a25a72e/docs/tasks/T-223.md) · commit `afc651f75a3a` + +--- +id: T-223 +title: 待采购需求提取与任务生成 +phase: 2 +deps: + - T-222 +status: DONE +created: 2026-07-28 +context_ref: 78dc595 +work_branch: null +write_paths: + - backend-api/internal/domain/** + - backend-api/internal/usecase/** + - backend-api/internal/repository/sqlite/** + - backend-api/internal/transport/httpapi/** + - backend-api/internal/transport/webui/** + - backend-api/migrations/** + - docs/api.md + - docs/routes.md + - docs/tasks/T-223.md + - docs/current-state.md +--- + +## 问题 / 背景 + +货运明细是外部可变事实,采购任务是执行时不可变快照。两者之间需要可复核的采购 +需求层,避免 ERP 重同步直接修改运行任务,也避免缺图、含糊 SKU 或错误数量进入 +Roubao 队列。 + +## 关联需求与交互 + +- 功能:F-012 +- 用户故事:US-012 +- 交互:IX-013 +- 架构/API:`procurement_requests`、`purchase_task_sources` + +## 方案 + +1. 每个货运商品明细按来源 revision 生成一条 procurement request,不合并多 SKU。 +2. 确定性提取标题、规格/SKU 和正整数数量;优先保留原始 `productSpec`、 + `sku/variationSku`,不调用 VLM 改写。 +3. `productThumb` 仍无法解析时标记 `NEEDS_IMAGE`;Admin 使用现有受控图片上传并 + 绑定参考图后才能进入 `READY`。 +4. Admin 在详情核对标题、SKU、数量和图片后显式生成 `purchase_task`。使用 + procurement request id + revision 作为幂等来源,重复点击返回同一任务。 +5. 来源更新不修改已有任务:未生成时追加新 revision;已生成后显示 + `SOURCE_CHANGED` 并要求人员决定是否取消旧任务和生成新版本。 +6. 被取消、已采购或状态语义未确认的 ERP 明细默认不可生成,允许的状态值必须来自 + 脱敏样本/人工配置,不根据数字猜测。 + +## 验收要点 + +- [x] 一货运单多商品形成多条独立采购需求。 +- [x] 缺标题/SKU/数量/图片、明确取消或未人工确认时不能生成任务。 +- [x] 同一 revision 并发/重试只生成一个采购任务。 +- [x] 来源变化不覆写 PENDING/CLAIMED/RUNNING/终态任务。 +- [x] 生成任务可被现有 Roubao claim,原始字段和参考图 hash 一致。 + +## 边界 + +- 不让 VLM 推断或修改 ERP SKU/数量。 +- 不自动决定取消旧采购任务。 +- 不抓取未经确认的第三方图片 URL。 + +## 执行记录 + +- 2026-07-28:任务合约已冻结,等待 T-222。 +- 2026-07-28:新增 v13 `procurement_requests` 与不可变 + `purchase_task_sources`;来源数字状态不猜测,由 ADMIN 显式确认是否仍需采购。 +- 2026-07-28:参考图绑定、任务和来源快照采用唯一约束与单事务;ERP 更新后旧任务 + 保持原始标题、SKU、数量和 asset,旧请求显示来源变化,当前 revision 可新建需求。 +- 2026-07-28:真实 Gin/SQLite SSR 流程完成确认需求、上传规范化参考图、生成 PENDING + 任务;同任务可由既有 Roubao claim。Playwright 三种视口无横向溢出、短按钮或页头 + 重叠;未调用 VLM 或真实 ERP。