Page:
T-223
Pages
00-ai-start-here
01-vision
02-requirements
03-tech-stack
04-architecture
05-coding-rules
06-tasks
07-user-stories
08-interaction-checklist
Design
Home
Integrations-shunyunbao-contract
PPT
T-001
T-002
T-003
T-004
T-101
T-102
T-103
T-104
T-201
T-202
T-203
T-204
T-205
T-206
T-207
T-208
T-209
T-210
T-211
T-212
T-213
T-214
T-215
T-216
T-217
T-218
T-219
T-220
T-221
T-222
T-223
T-224
T-225
T-226
T-227
T-228
T-229
T-230
T-231
T-232
T-233
T-234
T-235
T-236
T-237
T-238
T-239
T-240
T-241
T-242
T-243
T-244
T-245
T-246
T-247
T-248
T-249
T-250
T-251
T-252
T-253
T-254
T-255
T-256
T-257
T-258
T-259
T-260
T-261
T-262
T-263
T-264
T-265
T-266
T-267
T-268
T-269
T-270
T-271
T-272
T-273
T-274
T-275
T-276
T-277
T-278
T-279
T-280
T-281
Task-Template
Tasks
agent-context
api
clean-state-checklist
current-state
routes
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
同步来源:
docs/tasks/T-223.md· commitafc651f75a3a
id: T-223 title: 待采购需求提取与任务生成 phase: 2 deps:
- T-222
status: DONE
created: 2026-07-28
context_ref:
78dc595work_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
方案
- 每个货运商品明细按来源 revision 生成一条 procurement request,不合并多 SKU。
- 确定性提取标题、规格/SKU 和正整数数量;优先保留原始
productSpec、sku/variationSku,不调用 VLM 改写。 productThumb仍无法解析时标记NEEDS_IMAGE;Admin 使用现有受控图片上传并 绑定参考图后才能进入READY。- Admin 在详情核对标题、SKU、数量和图片后显式生成
purchase_task。使用 procurement request id + revision 作为幂等来源,重复点击返回同一任务。 - 来源更新不修改已有任务:未生成时追加新 revision;已生成后显示
SOURCE_CHANGED并要求人员决定是否取消旧任务和生成新版本。 - 被取消、已采购或状态语义未确认的 ERP 明细默认不可生成,允许的状态值必须来自 脱敏样本/人工配置,不根据数字猜测。
验收要点
- 一货运单多商品形成多条独立采购需求。
- 缺标题/SKU/数量/图片、明确取消或未人工确认时不能生成任务。
- 同一 revision 并发/重试只生成一个采购任务。
- 来源变化不覆写 PENDING/CLAIMED/RUNNING/终态任务。
- 生成任务可被现有 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。