Files
docs/头程到尾程分阶段流程/阶段二-国内到仓测量计费与组托.md
2026-09-24 17:02:32 +08:00

594 lines
29 KiB
Markdown
Raw Permalink Blame History

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.
# 阶段二:国内到仓、测量计费与组托
> 对应全景流程:F08~F13。
> 阶段起点:Order 已审核通过,Firstleg 正式国内入库单已创建,统一主状态为 `WAIT_MEASURE`。
> 普通订单终点:测量审核通过,主状态进入 `WAIT_SPLIT`。
> 一件代发终点:测量审核后进入 `WAIT_PALLETIZE`,完成清点、归托和封托后进入 `WAIT_SPLIT`。
> 本文记录当前可执行流程。费用是并行状态,不作为进入 `WAIT_SPLIT` 的前置条件。
## 1. 阶段目标和边界
本阶段要完成七件事:
1. 用稳定入仓码、箱码识别实际到仓货物;
2. 保存设备测量、人工测量、称重图片、OCR 原值和人工修正值;
3. 核对实收箱数、实测尺寸、重量、预计托数和现场证据;
4. 审核并冻结本次有效测量结果;
5. 生成可独立维护、发布和确认的费用版本;
6. 在需要时执行国内扣货或解除,并完整保留证据;
7. 对一件代发订单完成逐箱 SKU 清点、归托和封托。
本阶段不负责模拟柜、排柜、订舱、拖车、装柜、国内出仓、海外入库或尾程出库。普通订单进入 `WAIT_SPLIT` 仅表示已具备后续分柜条件,不表示已入柜、已离仓或已经生成海外库存。
## 2. 角色、终端与权限
| 角色 | 终端 | 主要操作 | 边界 |
|---|---|---|---|
| 国内仓收货/测量员 | Admin、测量设备 | 按入仓码定位、录入或接收尺寸、上传称重图片、确认重量、提交测量 | 不审核自己的权限外任务,不改订单客户归属和原始申报 |
| 国内仓现场主管 | Admin | 复核箱数、尺寸、重量和证据,处理现场差异 | 不直接改费用价格簿和客户账务 |
| 测量审核员 | Admin | 单票或批量审核、驳回;有专项权限时异常放行 | 不通过修改数据库绕过证据或状态门禁 |
| 费用操作员 | Admin | 查看系统试算、调整允许字段、确认并发布费用版本 | 不修改测量原始证据,不越权跨客户操作 |
| 企业费用确认人 | Client | 查看已发送的当前费用版本并确认 | 不能看到未发布版本、其他客户或内部成本 |
| 扣货操作员 | Admin | 发起 HOLD、上传凭证、按规则解除 | 已拣货、装柜或出仓后不能手工扣货/解除 |
| 国内 PDA 操作员 | PDA | 一件代发逐箱清点、扫码归托、封托、规则内解封 | 不创建临时箱码,不直接改测量和费用 |
| Firstleg 服务 | 后端 | 拥有入库单、箱码、测量、审核、费用来源、组托和主流程状态 | 不拥有客户资金主账、公共仓储主档或订单交易主数据 |
| Finance 服务 | 后端 | 接收不可变费用来源,维护后续账务 | 不成为测量、箱码或主流程状态权威 |
页面按钮是否可见只能作为操作提示,服务端仍需校验身份、数据范围、权限、当前状态、版本和幂等键。
## 3. 阶段输入与作业前检查
### 3.1 从阶段一接收的权威数据
| 数据 | 来源 | 本阶段用途 |
|---|---|---|
| 客户、订单号、入仓码 | Order/Firstleg | 识别货主和整票任务 |
| 国内收货仓 | Order 冻结快照、Warehouse 主档 | 限定实际作业仓和资源范围 |
| 渠道、目的类型、目的仓/地址 | Order 冻结快照 | 费用试算和后续分柜参考 |
| 货物 `itemNo`、SKU、申报箱数 | Order 申报快照 | 箱数核对、一件代发清点 |
| 申报尺寸、重量、体积 | Order 申报快照 | 差异对比,不覆盖实测值 |
| 履约类型 | Order/Firstleg | 判断普通订单或 `ONE_CLICK_DROPSHIP` |
| 稳定箱码及箱内 SKU | Firstleg | 测量、PDA 和装柜全过程复用 |
### 3.2 现场开始前检查
- 当前作业仓必须与入库单国内收货仓一致;
- 入仓码必须可查询到唯一正式入库单;
- 箱码必须来自系统已生成的稳定箱码池,不得用临时手写编号替代;
- 订单处于允许采集测量的状态,已提交或已审核的测量批次不可继续修改;
- 测量设备、秤、相机和网络可用;无法自动识别时必须保留图片并走人工确认;
- 一件代发必须能够读取每个物理箱与完整 SKU 的冻结关系;
- 操作员要先区分“申报箱数”和“实际确认箱数”,不得把客户申报直接当作实收事实。
订单尚处于 `PENDING_REVIEW` 时,系统可允许提前采集测量数据,但不能完成测量审核、计价或进入分柜。正式交接仍以订单审核通过和入库单有效为准。
## 4. F08 国内到仓与箱码识别
### 4.1 按入仓码收货定位
入口:Admin → 入库管理/统一入库工作台 → 货品与测量。
操作步骤:
1. 扫描或输入入仓码;
2. 核对订单号、客户、国内仓、履约类型和申报箱数;
3. 查看该票稳定箱码是否已经生成;
4. 按实际到货逐箱核对外包装上的箱码;
5. 对缺码、重码、无法识别或与本票不匹配的箱子先隔离,不直接进入测量;
6. 确认现场货物与页面显示为同一客户、同一入仓码后再开始采集。
系统中的“正式到仓”不是靠操作员另造一个新业务编号完成。入仓码负责整票定位,箱码负责物理箱身份,后续设备、人工测量、PDA 组托和装柜继续复用相同映射。
### 4.2 普通订单箱码
- 每个物理箱使用稳定 `boxCode`;
- 箱码可以由客户或平台下载打印,但是否打印不影响系统中箱码的有效性;
- 测量记录必须关联稳定箱码或明确的箱规数量,不能只写自由文本;
- 后续装柜完成时按最终实装事实冻结并向下游传递箱码/箱数。
### 4.3 一件代发箱码
- `fl_inbound_carton_label` 表示物理箱;
- 箱内一条或多条 SKU 关系在箱码生成时冻结;
- 标签展示箱内 SKU,但二维码/条码仍只携带稳定箱码;
- 缺少 SKU 的货物不能生成合格的一件代发箱唛;
- PDA 清点时扫描这个箱码读取整箱 SKU,不重新手工创建商品明细。
### 4.4 到仓差异登记
| 差异 | 现场处理 | 系统处理原则 |
|---|---|---|
| 少箱/分批到货 | 标识未到箱,暂不虚增实收 | 测量总箱数必须基于实际确认结果 |
| 多箱 | 隔离并查明所属 | 未建立合法箱码关系前不得并入本票 |
| 箱码破损 | 用入仓码和订单信息核验后补打原箱码 | 不生成第二个物理身份 |
| 箱码属于其他订单 | 隔离并通知主管 | 禁止强行绑定当前入仓单 |
| 外包装异常 | 拍照、备注并按异常规则处理 | 证据与业务事实关联,不能只在线下沟通 |
## 5. F09 尺寸测量与称重
### 5.1 页面和数据组成
入口:Admin → 入库管理 → 货品与测量。
一次完整测量至少包含:
- 测量批次:入库单、批次状态、采集来源、提交人和时间;
- 测量明细:箱码/箱规、长、宽、高、箱数、体积、设备或人工来源;
- 重量结果:称重图片、OCR 原值、采用值、毛重/净重、确认状态;
- 辅助信息:预计托数、测量时间、设备号/事件号、备注和差异原因;
- 审计字段:创建人、修改人、版本、提交与审核历史。
客户申报值、设备原始值、OCR 原值、人工修正值和最终计费采用值必须并行保留,不能用最终值覆盖原始证据。
### 5.2 设备自动测量
第三方设备按接口提交入仓码或箱码、长宽高、数量、设备标识和事件号。
操作要求:
1. 先在设备端确认扫描的是当前物理箱;
2. 设备上传后在 Admin 核对是否归入正确入仓单;
3. 核对尺寸单位、箱数和设备时间;
4. 重复回调使用同一事件号幂等处理,不生成重复测量;
5. 设备数据异常时保留原值,另行人工修正,不删除原始记录。
单次批量测量明细最多 500 条。超过时应按现场批次拆分,而不是截断数据。
### 5.3 人工补录尺寸
适用场景:设备不可用、个别箱复核、非标货或设备数据需要纠正。
操作步骤:
1. 点击新增/编辑测量明细;
2. 选择稳定箱码或填写明确箱规及对应箱数;
3. 填写长、宽、高,三项都必须大于 0;
4. 填写测量时间;
5. 上传必要的测量图片,单个文件不得超过页面限制(当前为 5 MB);
6. 写明人工补录或修正原因;
7. 保存后重新核对明细箱数合计。
人工补录可以替换可编辑批次中的业务测量项,但不得抹掉同一物理箱已经冻结的扫码身份、设备事件和原始取证。
### 5.4 称重图片与 OCR
操作步骤:
1. 上传能够清晰看到秤面读数和货物关联的称重图片;
2. 等待 OCR 返回识别值;
3. 将 OCR 原值与图片读数比对;
4. 正确时确认采用;不正确时填写人工修正值和原因;
5. 确认单位统一换算为系统采用单位;
6. 将每张有效图片设置为已确认;
7. 确保最终总重量大于 0。
即使整票只有 1 箱,也至少需要 1 张已确认重量图片。真实 OCR 凭证未配置或识别失败时,可以保留失败结果后人工确认;这是一条有证据的降级路径,不等于允许无图录重量。
每张有效重量图片只能计重一次。重复上传、同图重复确认或同一重量被不同图片重复累计时,必须先消除重复再提交。
### 5.5 保存前与提交前校验
点击“保存测量数据”时保存当前可编辑批次;点击“提交审核”前至少检查:
- 存在至少一条有效测量明细;
- 所有长宽高、箱数、时间和必要附件合法;
- 测量明细确认箱数合计等于整票实际确认总箱数;
- 至少有一张已确认重量图片,全部有效图片均已处理;
- 最终总重量大于 0;
- 预计托数为合法正数或满足页面当前规则;
- 页面没有尚未保存的修改;
- 当前批次没有被其他人提交或审核;
- 订单已经审核通过,具备提交审核资格。
系统尝试依据已确认重量和提交动作建立整票连续库位占用/预留。资源不足等非致命问题应显示明确警告并由仓库处理;不得把警告伪装成已完成物理入库,也不得让位置建议覆盖测量事实。
## 6. F10 测量审核与初始计价
### 6.1 审核入口
入口:Admin → 入库管理 → 测量审核。
审核员按单票或批量打开待审任务,核对:
- 客户、入仓码、订单号和国内仓;
- 申报箱数与实际确认箱数差异;
- 每组箱规的长宽高、数量和体积;
- 称重图片、OCR 原值、人工采用值和修正原因;
- 总重量、总体积和预计托数;
- 客户尺寸规则或价格簿所需维度;
- 是否存在重复图片、重复箱码、缺失证据或异常备注。
### 6.2 审核通过
点击审核通过后,服务端在同一受控流程中:
1. 再次校验当前状态、批次版本和证据完整性;
2. 冻结本次有效测量结果;
3. 计算或准备初始费用版本;
4. 普通订单主状态进入 `WAIT_SPLIT`;
5. 一件代发主状态进入 `WAIT_PALLETIZE`;
6. 写入审核人、审核时间和状态历史。
初始计价失败或产生警告时,不应回滚已经合法完成的测量审核,也不能把普通订单从 `WAIT_SPLIT` 拉回旧的计费状态。页面需要明确展示“测量已通过、计价待处理”这两个独立结果。
批量审核时,每票都必须返回独立结果。部分失败不能让操作员误以为整批全部成功;失败项按入仓码展示原因并保留在待处理列表。
### 6.3 审核驳回
发现数据或证据不合格时填写明确原因并驳回:
- 驳回原因应说明需要修正的字段或证据;
- 原测量批次和审核历史保留,不原地覆盖成新记录;
- 操作员按原因修正允许编辑的数据后重新提交;
- 历史 `MEASURE_REJECTED` 只作为事实和恢复入口,不代表可以绕过审核直接分柜。
### 6.4 异常放行
异常放行只适用于已驳回测量,且必须同时满足:
- 环境已开启对应开关;
- 当前用户具备专项权限;
- 被放行批次确实处于已驳回状态;
- 填写非空放行原因;
- 完整记录操作人、时间、原驳回原因和放行原因。
异常放行不能变成常规“跳过审核”按钮,也不能补造不存在的称重或测量证据。
## 7. F11 费用生成、发布与客户确认
### 7.1 费用与主流程的关系
费用是与主状态并行的业务维度:
```text
测量审核通过 ──→ 主流程:WAIT_SPLIT(普通)/ WAIT_PALLETIZE(一件代发)
└──────→ 费用:初算 → 人工维护 → 确认/发布 → 客户确认 → 条件满足后冻结
```
因此:
- 费用未发送不阻止普通订单进入 `WAIT_SPLIT`;
- 客户未确认费用不把主流程回退;
- 装柜完成也不能代替客户自动确认费用;
- 费用的最终冻结需“客户已确认”和“本票已装柜完成”同时成立。
### 7.2 系统初算
入口:Admin → 入库管理 → 费用。
系统基于已审核测量结果和有效价格簿生成版本化费用,操作员应检查:
- 计费采用的是哪一组实测重量、体积和计费量;
- 命中的渠道、目的地区域和价格簿版本;
- 是否命中客户专属 ACTIVE 价格簿;未命中时才回退公共 ACTIVE 价格簿;
- 计价模型是重量、体积、仓库费率、区域重量阶梯或其他当前有效模型;
- 基础费用、附加费、币种、税费或调整项是否完整;
- 系统警告是否说明缺价格、缺映射或数据不满足模型。
同柜区域重量阶梯可能在阶段三根据同柜、同客户的最终有效成员聚合后重算;固定模型成员不参与阶梯聚合。此处初算是当前版本事实,不承诺后续永不变化。
### 7.3 人工调整
允许调整时:
1. 选择当前费用版本;
2. 查看系统基准量、基准单价和基准金额;
3. 在服务端允许的范围内修改;当前规则以系统基准量为中心限制上下 10%,含边界;
4. 填写调整原因;
5. 完成二次确认;
6. 保存为新版本,由服务端重新计算金额。
页面不能只提交最终总额来绕开计费规则。版本、基准、调整值、原因、操作人和时间都要可追溯。
### 7.4 平台确认与发送
操作员确认费用明细无误后执行页面上的确认/发送操作:
1. 复核客户、入仓码、币种和当前版本;
2. 确认没有待处理计价警告;
3. 发布当前费用明细;
4. 将费用状态置为客户可见的 `SENT`;
5. 记录发送人、发送时间和版本。
“发送费用”表示发布当前费用版本供客户查看,不等于已经收款、核销或形成最终财务结算。
### 7.5 客户查看和确认
入口:Client → 头程订单/入库费用。
客户只有在以下条件同时满足时才能看到费用:
- 费用属于当前登录客户;
- 测量已经审核通过;
- `feeStatus=SENT`;
- 存在已发布明细。
客户确认时携带当前 `expectedFeeVersion` 和幂等键。成功后记录确认成员和时间。
若装柜完成前平台生成并重新发送新版本,旧版本客户确认快照被清空,客户需要确认新版本。旧版本、未发送版本或同一幂等键携带不同参数都必须冲突失败,不能静默覆盖。
## 8. F12 国内扣货与解除
### 8.1 适用目的
HOLD 用于在存在费用、资料、风控、货损或其他明确风险时阻断后续物理履约写入。它不是删除订单,也不修改客户和测量事实。
### 8.2 发起扣货
入口:Admin → 统一订单/入库详情 → 扣货。
操作步骤:
1. 确认当前入仓单尚未发生不允许回退的实物动作;
2. 选择或填写扣货原因;
3. 上传有效凭证;
4. 核对入仓码、客户和当前版本;
5. 二次确认后提交;
6. 查看 HOLD 状态、操作人和时间线是否写入。
扣货生效后,分柜、拣货、装柜、出仓等后续物理写操作必须由服务端阻断,不能只在前端隐藏按钮。
### 8.3 解除扣货
1. 打开当前有效 HOLD;
2. 核对风险是否已经消除;
3. 填写解除原因并补充凭证;
4. 携带当前版本和幂等键提交;
5. 系统关闭当前 HOLD,但保留发起与解除历史;
6. 重新评估主状态允许的下一步动作。
已经发生拣货、装柜或出仓时,禁止通过手工扣货/解除改变已发生的物理事实。此时应进入对应阶段的异常流程。
## 9. F13 一件代发国内清点组托
### 9.1 进入条件
一件代发测量审核通过后不直接进入 `WAIT_SPLIT`,而是:
- 主状态为 `WAIT_PALLETIZE`;
- 按预计托数预生成 `DP` 托盘码;
- 箱码与箱内 SKU 已冻结且可被 PDA 读取;
- 不创建国内库存;
- 组托完成后才交给分柜。
预计托数与实际已生成托盘数不一致时禁止开始作业,应先修正任务或重新生成合法托盘,不允许 PDA 临时造托盘码。
### 9.2 Admin 打印托盘信息单
入口:Admin → 一件代发组托任务。
1. 打开入仓码对应任务;
2. 核对预计托数和已生成 `DP` 托盘列表;
3. 逐托打印 A4 信息单,每托一页;
4. 核对 Code 128 托盘码、入仓码、总箱数和 SKU 清单;
5. 将标签贴到对应空托或托盘作业位。
信息单用于识别和作业,不展示容易过期的实时作业状态。实际状态以 PDA/服务端为准。
### 9.3 PDA 逐箱清点与归托
入口:国内 PDA → 一件代发清点组托。
允许两种顺序:
```text
先扫托盘 → 连续扫箱并清点 → 确认归托
先扫箱并清点 → 扫目标托盘 → 确认归托
```
逐箱操作:
1. 扫描稳定箱码;
2. PDA 展示整箱 SKU、商品名称和应点数量;
3. 按完整 SKU 清点实点数量;
4. 有差异时填写原因并按现场异常规则处理,不能直接改冻结 SKU;
5. 扫描目标 `DP` 托盘码;
6. 确认该箱归托;
7. 继续下一箱,直到本票全部箱处理完成。
同仓多票在当前规则允许时可以共用一个开放托盘。共托不会改变箱子所属客户、订单、入仓码和 SKU;系统必须保存逐箱归属,不能只保存托盘总数量。
### 9.4 封托与解封
封托前检查:
- 托盘上所有箱均已完成 SKU 清点;
- 物理箱数与系统箱数一致;
- 托盘标签清晰且与 PDA 当前托盘一致;
- 没有未处理差异或重复归托;
- 共托场景下各参与任务的数据均完整。
操作员在 PDA 点击封托。封托后该托成为阶段三的整托候选。
未进入装柜计划前可按权限和规则解封。共托解封时,所有参与任务和入仓单的相关状态必须同步恢复,不能只恢复其中一票。托盘进入有效装柜计划后不得在本阶段任意解封。
### 9.5 组托完成判定
系统只有在以下条件同时满足时将一件代发入仓单从 `WAIT_PALLETIZE` 推进到 `WAIT_SPLIT`:
- 本票所有稳定箱码均已清点;
- 每箱完整 SKU 均已核对;
- 每箱恰好归属一个有效参与托盘;
- 本票实际参与的所有托盘均已封托;
- 没有开放托盘仍包含本票箱子;
- 箱数、SKU 数量和托盘冻结快照核平。
预计生成但实际未使用的空托盘不应伪造为已作业托盘;最终事实以实际参与且完成的托盘为准。
## 10. 状态机与可用动作
### 10.1 主流程状态
| 当前状态 | 条件/操作 | 下一状态 | 说明 |
|---|---|---|---|
| `PENDING_REVIEW` | 可提前采集测量 | 不变 | 不能审核测量、计价或分柜 |
| `WAIT_MEASURE` | 保存测量 | 不变 | 可反复保存未提交批次 |
| `WAIT_MEASURE` | 提交测量审核 | 不变/待审维度变化 | 已提交批次冻结 |
| `WAIT_MEASURE` | 审核驳回 | 驳回事实 | 修正后重新提交 |
| `WAIT_MEASURE` | 普通订单审核通过 | `WAIT_SPLIT` | 费用并行处理 |
| `WAIT_MEASURE` | 一件代发审核通过 | `WAIT_PALLETIZE` | 必须先完成清点组托 |
| `WAIT_PALLETIZE` | 全部箱和实际托盘完成 | `WAIT_SPLIT` | 不创建国内库存 |
| `WAIT_SPLIT` | 合法解封导致组托不再完整 | `WAIT_PALLETIZE` | 仅限未进入装柜计划等允许条件 |
测量批次状态、审核状态、费用状态、HOLD 状态和托盘状态是独立维度,不能把它们拼成一条虚假的单状态流水线。
### 10.2 费用状态关键约束
| 费用事实 | 平台可修改 | 客户可见/确认 | 最终冻结 |
|---|---|---|---|
| 未生成/初算警告 | 是 | 否 | 否 |
| 已生成、未发送 | 是 | 否 | 否 |
| `SENT`、客户未确认 | 是,可生成新版本 | 可见、可确认 | 否 |
| 客户已确认、尚未装柜完成 | 仍可按规则生成新版本并重新发送 | 新版本需重新确认 | 否 |
| 客户已确认且装柜完成 | 否 | 已确认 | 是 |
### 10.3 HOLD 的正交关系
HOLD 不必改变主状态文字,但会阻断后续物理履约动作。解除后继续从原主状态判断下一步,不自动跳过测量、组托或分柜条件。
## 11. 数据归属与流转
### 11.1 关键数据所有者
| 数据 | 权威系统 | 下游消费者 |
|---|---|---|
| 客户申报、订单交易状态 | Order | Firstleg、页面查询 |
| 入库单、入仓码映射 | Firstleg | Admin、设备、PDA、后续装柜 |
| 稳定箱码、箱内 SKU | Firstleg | 测量、PDA、装柜事件、尾程 |
| 公共仓库、库位、托盘资源 | Warehouse | Firstleg 作业引用 |
| 测量原始值、人工采用值、证据 | Firstleg | 计价、审核、后续审计 |
| 费用来源和版本 | Firstleg | Client、Finance |
| 应收应付、收付款、核销 | Finance | 财务终端与对账 |
| 文件对象 | File | 各业务通过合法文件引用使用 |
### 11.2 数据流
```text
Order 审核快照
↓
Firstleg 正式入库单 + 稳定箱码
↓
设备/人工尺寸 + 称重图片/OCR + 人工确认
↓
测量审核冻结 ──────────────→ 主流程 WAIT_SPLIT / WAIT_PALLETIZE
├→ 初始费用版本 → 平台维护/发送 → 客户确认 → Finance 来源
├→ 仓位连续占用/预留尝试 → Warehouse 资源
└→ 一件代发 PDA 逐箱清点 → DP 托盘冻结 → WAIT_SPLIT
```
### 11.3 必须保留的快照和历史
- 原始客户申报与最终实测同时存在;
- 设备事件号、设备原值、人工修正值和原因;
- 原始称重图片、OCR 原值、采用值和确认人;
- 每次测量提交、驳回、通过和异常放行;
- 每个费用版本、价格簿来源、系统基准、人工调整和客户确认;
- 每次 HOLD 发起、证据、解除和版本;
- 一件代发每箱 SKU 实点、归托、封托和解封历史。
## 12. 正常分支、异常与恢复
| 场景 | 系统行为 | 操作员处理 |
|---|---|---|
| 订单未审核但货先到 | 允许按当前规则采集,禁止审核/计价/分柜 | 保留测量草稿,等待订单审核 |
| 查不到入仓码 | 不创建临时正式入库单 | 隔离货物,核对订单提交/审核结果 |
| 箱码破损 | 原身份仍有效 | 核验后补打相同箱码 |
| 设备重复上报 | 按事件号幂等,不重复计量 | 核对已有记录,不换事件号盲重试 |
| 设备值异常 | 原值保留 | 人工复测并写修正原因 |
| OCR 失败 | 失败结果和图片保留 | 人工读取、录入并确认 |
| 重量图片重复 | 禁止重复计重 | 删除/作废重复采用关系后重算 |
| 明细箱数不等于实收总箱数 | 禁止提交 | 查找漏测、重复测量或到货差异 |
| 预计托数无效 | 禁止提交或组托 | 仓库重新评估并保存 |
| 页面有未保存修改 | 禁止提交审核 | 先保存再提交 |
| 测量被并发提交 | 版本冲突 | 刷新后查看权威结果 |
| 审核通过但计价失败 | 主状态按审核结果推进,费用显示待处理 | 修复价格簿/映射后重算,不回退测量 |
| 费用版本过期 | 客户确认冲突 | 刷新并确认当前已发送版本 |
| HOLD 生效 | 后续实物写入失败关闭 | 处理风险后按证据解除 |
| 一件代发箱内 SKU 不符 | 不直接改冻结清单 | 记录差异并由有权流程纠正来源 |
| 开放共托仍含本票箱子 | 本票不能完成组托 | 完成或按规则拆解参与托盘 |
| 封托后需调整 | 仅未进入装柜计划时可解封 | 有权解封、修正、重新封托 |
| PDA 请求超时 | 不确定是否成功 | 先查询箱/托当前状态,再用原幂等语义处理 |
## 13. 阶段完成判定
### 13.1 普通订单
- [ ] 入仓码、订单、客户和国内仓对应正确
- [ ] 稳定箱码和实收箱数可追溯
- [ ] 测量明细箱数与实际确认总箱数一致
- [ ] 尺寸、重量、图片和人工修正证据完整
- [ ] 至少一张重量图片已确认且总重量大于 0
- [ ] 测量批次已审核通过并冻结
- [ ] 主状态为 `WAIT_SPLIT`
- [ ] 初始费用已生成,或计价警告已作为独立待办暴露
- [ ] 若存在 HOLD,下一阶段明确知道当前不可继续物理履约
- [ ] 重复提交和重复审核不会产生重复事实
### 13.2 一件代发订单
除普通测量条件外,还必须满足:
- [ ] 每个物理箱和完整 SKU 来源可追溯
- [ ] 每箱均已完成 SKU 清点
- [ ] 每箱恰好归属一个实际参与托盘
- [ ] 所有实际参与托盘均已封托
- [ ] 共托参与关系和逐箱归属完整
- [ ] 最终托盘冻结快照存在
- [ ] 主状态已从 `WAIT_PALLETIZE` 进入 `WAIT_SPLIT`
- [ ] 未因组托创建国内库存
费用是否已经发送、客户是否已经确认,不作为本阶段主流程交接到阶段三的硬门槛;但必须作为并行待办清晰展示和持续跟踪。
## 14. 易用性与数据流评审问题
以下问题先记录,后续优化阶段逐项决策:
1. 到仓页是否需要独立的“实收登记”动作和时间戳,还是继续由首次合法测量/扫码体现到仓?
2. 订单未审核时允许提前测量,页面应如何醒目标识“仅采集、不可审核”,避免仓库误判流程已放行?
3. 箱数差异是否需要结构化的少箱、多箱、破损和错货原因,而不是仅填备注?
4. 真实 OCR 供应商凭证、现场秤图片式样和识别准确率应由谁验收?
5. 连续库位预留失败目前作为警告时,仓库如何看到并闭环处理,是否需要独立待办?
6. “发送费用”是否应改名为“发布给客户”,以避免被误解为发送账单或已完成结算?
7. 计价失败但主流程已进入 `WAIT_SPLIT` 时,是否需要跨页面的费用红点、责任人和超时提醒?
8. HOLD 的发起责任、审批规则、证据类型和解除责任是否已经形成可审计 SOP?
9. 一件代发允许跨订单共托时,业务是否确认允许跨客户;若允许,拆托、异常和费用责任如何分摊?
10. PDA 清点发现 SKU 差异时,目前应走哪个权威纠错入口,谁能修改冻结来源并触发重新打印?
11. 预计托数与实际托数变化时,是否需要保留预测偏差指标,为仓容和装柜优化提供数据?
12. 客户费用确认与装柜完成共同冻结的规则,页面是否充分解释“已确认但尚未冻结”。
## 15. 阶段三交接包
交给阶段三“模拟柜、排柜、订舱、拖车、预装、装柜与出仓”的权威输入包括:
- 入仓单、订单号、入仓码、客户和国内仓;
- 渠道、目的类型、目的仓/地址快照;
- 已审核的最终箱数、重量、体积和箱规;
- 稳定箱码及必要的箱内 SKU 关系;
- 普通订单预计托数和库位占用/预留结果;
- 一件代发实际封托的 `DP` 托盘、逐箱归属和 SKU 冻结快照;
- 当前主状态 `WAIT_SPLIT`;
- 当前有效 HOLD 及阻断原因;
- 费用当前版本、发布/客户确认状态和未处理计价警告。
阶段三可以基于最终装柜成员重算尚未冻结的费用,但不得覆盖本阶段的原始测量、证据或一件代发逐箱组托事实。
## 16. 事实来源
- `docs/归档/头程到尾程/头程下单到尾程出库现状流程全景清单.md`
- `docs/入库测量与计费/README.md`
- `docs/入库测量与计费/入库测量与计费需求优化版-v2-测量计费入库主流程.md`
- `docs/统一订单主状态与操作契约.md`
- `apps/admin-web/AGENTS.md`
- `apps/admin-web/src/modules/inbounds/measurement/InboundMeasurementDialog.vue`
- `apps/admin-web/src/modules/inbounds/measurement/InboundMeasurementPanel.vue`
- `apps/admin-web/src/modules/inbounds/fee/InboundFeePanel.vue`
- `apps/admin-web/src/modules/inbounds/components/InboundWorkflowWorkspace.vue`
- `apps/admin-web/src/modules/inbounds/components/InboundTaskList.vue`
- `baiyue-firstleg/firstleg/AGENTS.md`
- `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/InboundMeasurementService.java`
- `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/MeasurementReviewService.java`
- `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/InitialInboundPricingService.java`
- `baiyue-firstleg/firstleg/src/main/java/com/baiyue/firstleg/service/DropshipPalletizationService.java`
- `baiyue-firstleg/firstleg/src/main/resources/openapi/dropship-palletization-v1.yaml`