# 阶段二:国内到仓、测量计费与组托 > 对应全景流程: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`