节点一:先解决 SKU 识别问题
我会把 SKU 主数据当作库存同步的地基。一个标准 SKU 至少需要包含平台展示名、规格组合、条码、包装单位、是否组合商品、替代关系和状态生效时间。对于服饰、食品和美妆等容易出现批次或规格差异的品类,还要补充颜色、尺码、保质期或版本字段。
如果渠道 A 把“蓝色-M”写成 BL-M,渠道 B 写成 BLUE_M,仓库又按内部货号 10086 存储,那么同步程序即便成功运行,也可能把两种商品合并或拆开。我的判断原则是:业务人员能看懂的名称用于展示,系统必须以稳定的标准编码作为关联主键。
建议的主数据检查项
- 是否存在一对多或多对一的渠道编码映射。
- 同一条码是否意外绑定了多个销售规格。
- 组合商品是否有组件库存扣减规则。
- 禁售、下架和换版状态是否有生效时间。
节点二:把“库存”拆成状态流
实物库存、可售库存和可承诺库存不能混用。以一个仓库为例,实物有 1,000 件,其中 60 件待质检、35 件残次、120 件被订单锁定,安全库存设为 80 件,那么在没有其他限制时,可承诺量可以按 1,000-60-35-120-80=705 件理解。这个公式只是示例,实际还要考虑预留、渠道配额、在途可售规则和仓库处理能力。
我会把状态变更设计成可解释的动作:收货增加待检,质检通过转入可售,创建订单转入锁定,出库减少实物并进入在途,签收完成履约,退货入仓进入待检,质检通过后回到可售。每次状态变化都应带有时间、来源和操作主体。
节点三:让分仓决策可回放
多仓不是“哪个仓有货就发哪个仓”这么简单。分仓需要同时考虑仓库库存、距离、履约时效、仓库处理能力、商品组合完整度、渠道约束和退货回流成本。若只按即时库存分配,可能把一件套装拆到两个仓,也可能把远仓货发给近仓客户,最终增加物流和退货。
我建议保存分仓时的输入快照:下单时各仓可售量、订单目的地、渠道承诺时效、分仓规则版本和最终选择结果。之后出现延迟或退货,才能区分是当时没有库存、规则选择了远仓,还是仓库处理没有达到承诺。
节点四:把退货当作反向履约
正向履约是“订单到客户”,逆向履约是“客户到仓库再到库存”。退货单必须继承原订单号、原子订单、原 SKU、原发货仓、包裹号和签收时间,并新增退货原因、申请时间、到仓时间、质检结果、责任归属和最终处置。
我不会把“客户不喜欢”“质量问题”“发错货”全部作为文本备注,因为文本很难统计。更实用的方式是设置一级原因、二级原因与补充说明,例如一级为发货错误,二级为颜色错误,补充说明保留人工描述。这样既能统计,又不会丢失现场信息。