docs(erp): define freight ingestion tasks

This commit is contained in:
QiuSW
2026-07-28 22:39:18 +08:00
parent 78dc595815
commit cc847c9aed
15 changed files with 547 additions and 6 deletions
+44
View File
@@ -14,6 +14,8 @@
统一 Backend API
|
+--> SQLite / 文件存储
|
+--> loopback ERP Connector ----> 顺运宝 ERP
^
|
Android 采购 App --------------------> VLM Provider
@@ -29,6 +31,8 @@ Android 采购 App --------------------> VLM Provider
- 拼多多是第三方受控边界,只能由 Android 设备在已登录会话中操作。
- VLM 配置和 Key 位于手机,Key 使用 Android Keystore 包装的加密存储;管理后端不
保存、下发或代理模型调用。
- ERP 账号、验证码会话、Cookie 和 JWT 只存在于 loopback Python Connector;
Go 后端只接收最小化规范货运数据。
## 二、模块职责
@@ -128,6 +132,29 @@ App 支持两个显式模式:
- `MANUAL_FIRST`:从原始标题/SKU 产生有界搜索词,由人员判断候选,不要求 VLM。
- `AI_ASSISTED`:使用 App 本地配置的 OpenAI 兼容 provider 做需求提取和候选评估。
### 2.4 顺运宝 ERP Connector
Connector 是外部系统防腐层,不属于采购任务状态机:
```text
Admin 创建 sync run
-> Go 后台 worker 调用 loopback Connector
-> Connector 使用受控 ERP 会话查询 list/listTotal/listByStock
-> Connector 规范化并去除收件 PII
-> Go 同事务 upsert freight order/items
-> Admin 复核 procurement request
-> 显式生成不可变 purchase task
```
- Python 进程默认只监听 `127.0.0.1`,使用独立服务密钥;Go 不传输或保存 ERP 密码。
- 精确单号只是查询条件,外部身份固定为 `stock.id` 和 `details[].id`。
- Connector 不写本项目 SQLite,不调用 Roubao/拼多多/VLM,也不打印响应 body。
- Go handler 只创建 sync run;外部查询由有界 worker 执行,避免把验证码或 ERP
延迟绑定到浏览器请求。
- 未确认的 `productThumb` 只按 ERP 引用保存,不能拼接 URL 或越权下载。
- ERP 接口由页面协议观察得到,正式生产前需确认开放 API、服务账号、调用频率、
缓存和个人信息处理权限。
模式在 execution 开始时固定并写入结果;AI 失败后只能由人员明确切换,不能静默降级。
App 同时固定 provider ID、model、prompt/schema version 和证据 SHA-256,作为非秘密
provenance 回传。Key、Authorization、完整 endpoint 和供应商原始响应正文不回传。
@@ -457,6 +484,23 @@ IDLE
- 管理和 App 登录在 bcrypt 前共享一个内存有界限流器,但使用独立 scope + 服务端
`RemoteAddr` 键;成功登录清零,超限返回 `429` 与 `Retry-After`。
### ERP 货运来源层
| 表 | 主要内容 |
| --- | --- |
| `erp_sync_runs` | 查询模式、匿名查询 hash、时间范围、状态、计数、错误码和成功水位 |
| `freight_orders` | creator、source system、external stock id、来源单号、店铺、状态、ERP 时间、canonical hash/revision |
| `freight_order_items` | freight order、external item id、标题、规格、SKU、数量、图片引用、采购状态、canonical hash/revision |
| `procurement_requests` | 货运明细 revision 的不可变采购字段、校验状态、参考图和来源变化状态 |
| `purchase_task_sources` | procurement request/revision 与现有 purchase task 的幂等关联 |
货运层只保存采购所需字段,不保存 receiver、receiverTel、receiverAddr、Cookie、JWT
或完整原始 JSON。重复同步按外部 ID upsert;内容 hash 不变时不增加 revision。
来源变化只产生新 revision/状态,绝不修改已生成的采购任务。
一个货运单可以有多个商品明细;一个采购任务仍保持单商品、单 SKU、单参考图。
缺少明确标题/SKU/正整数数量/有效参考图的请求停在 `NEEDS_REVIEW/NEEDS_IMAGE`。
### `purchase_tasks`
| 字段 | 约束 | 说明 |