# 核心业务流程说明:订单 → 库存 → 采购 → 到货 → 入库 --- ## 一、全局概览 系统的核心是一条**履约闭环**,通过**库存**这个中枢连接两条链路: - **正向链路(消耗库存)**:买家下单 → 支付 → 锁定库存 → 发货扣减库存 → 签收 → 完成 - **反向链路(补充库存)**:库存低于安全线 → 生成补货建议 → 创建采购单 → 审批 → 下单给供应商 → 到货 → 质检 → 合格品入库 → 库存恢复 两条链路的交汇点是库存:订单侧不断消耗可用库存,采购侧不断补充可用库存。当可用库存低于安全库存时,系统自动触发补货建议,形成自循环。 --- ## 二、数据模型说明 ### 2.1 订单(Orders) 一张订单记录一笔买家交易的完整信息,核心字段分为以下几组: **订单标识**:订单号(系统自动生成,格式为「渠道编码-日期-5位流水号」,例如 SHOPIFY-20260601-00001)、渠道订单号(来自外部平台的原始订单号) **状态字段**(四个独立维度): - 订单状态:待支付 → 已支付 → 已分配 → 已发货 → 已签收 → 已完成(另有已取消、已退款两个终态) - 支付状态:待支付 → 待确认 → 部分支付 → 已支付 - 发货状态:未发货 → 待拣货 → 待发货 → 已发货 → 已签收 - 退款状态:未退款 → 待退款 → 已退货待入库 / 已退款 / 已补发 → 已完成 **买家信息**:买家ID、姓名、邮箱、电话、国家、会员等级、历史订单数、累计消费金额 **收货信息**:收件人姓名、电话、国家、州/省、城市、区县、邮编、详细地址、经纬度 **金额信息**:商品金额、税金、运费、折扣、优惠券抵扣、实付金额(= 商品金额 + 税金 + 运费 - 折扣 - 优惠券抵扣)、退款金额、币种、汇率 **物流信息**:发货方式、承运商名称、运单号、物流追踪链接 **归属信息**:销售渠道ID、发货仓库ID、处理人ID/姓名 **关联信息**:父订单ID(拆单场景)、合并目标订单ID(合单场景)、原始订单ID(补发场景) ### 2.2 订单明细(OrderItem) 每张订单包含一条或多条订单明细,每条明细对应一个SKU: - SKU信息:SKU ID、SKU编码、商品标题、商品图片、分类、规格、条码 - 数量与价格:购买数量、单价、小计(= 单价 × 数量)、成本价、利润、利润率 - 库存追踪:可用数量、锁定数量、在途数量、已预留数量、已发货数量、已退货数量 - 标记:是否赠品 ### 2.3 库存(Inventory) 每条库存记录对应一个「SKU + 仓库」的唯一组合: - **可用数量**:当前可以被新订单使用的库存。订单分配时减少,取消时恢复,采购入库时增加 - **锁定数量**:已被订单占用但尚未发货的库存。订单分配时增加,发货时清零,取消时减少 - **在途数量**:已下采购单但尚未到货入库的数量(当前仅做记录,不参与可用库存计算) - **安全库存**:低于此值时触发预警和补货建议 - **预警状态**:正常 / 低于安全库存(系统自动计算,不可手动修改) 三者关系:**物理库存 = 可用数量 + 锁定数量**。在途数量是独立的参考值。 ### 2.4 库存变动日志(InventoryLog) 每一次库存变动都会生成一条日志,记录: - 变动来源:ORDER_ALLOCATION(订单分配)、ORDER_SHIPMENT(订单发货)、PURCHASE_ARRIVAL(采购入库)、STOCKTAKE(盘点)、TRANSFER(调拨) - 变动类型:LOCK(锁定)、UNLOCK(解锁)、INCREMENT(增加)、SHIP(发货扣减)、STOCKTAKE_GAIN(盘盈)、STOCKTAKE_LOSS(盘亏)、TRANSFER_OUT(调出)、TRANSFER_IN(调入) - 变动前后数量、操作人、关联订单ID/单号 ### 2.5 采购单(PurchaseOrder) 采购单用于向供应商采购商品以补充库存,核心字段: **单据信息**:采购单号(格式为 PO-日期-5位流水号)、供应商ID、目标仓库ID、SKU种类数、总金额、币种(默认CNY)、税金、运费、预计到货日期 **状态**:草稿 → 已提交 → 已审批 → 已下单 → 部分到货 → 全部到货 → 已关闭 / 已完成(另有已拒绝、已取消两个终态) **到货进度**:待到货 → 部分到货 → 全部到货(系统根据采购项的累计到货数量自动更新) ### 2.6 采购项(PurchaseOrderItem) 每张采购单包含一条或多条采购项,每条对应一个SKU: - SKU信息:SKU ID、SKU编码、商品标题 - 采购信息:采购数量、单价、小计 - 到货追踪:累计到货数量、累计合格数量(到货和质检时自动累加) ### 2.7 到货单(PurchaseArrival) 到货单记录供应商的一次发货到达,关联到对应的采购单: - 到货单号、关联采购单ID、到货仓库、到货时间、操作人 - 状态:已到货 同一张采购单可以产生多张到货单(分批到货场景)。 ### 2.8 到货项(PurchaseArrivalItem) 每张到货单包含一条或多条到货项: - 关联采购项ID(追溯到采购单中的具体SKU) - SKU ID、预期数量(从采购项同步)、实际到货数量 - 质检结果:合格数量、不合格数量、质检状态(待质检 / 合格 / 不合格) ### 2.9 售后单(AfterSale) 售后单记录买家的退款/退货/补发请求: - 售后单号、关联订单ID/单号、买家信息 - 售后类型、退款金额、退款原因、责任归属 - 审核状态:待审核 → 已审批 / 已拒绝 - 退款状态:未退款 → 待退款 → 已退货待入库 / 已退款 / 已补发 → 已完成 - 退货物流:退货承运商、退货单号 - 补发信息:补发仓库ID、补发SKU ID、补发订单ID ### 2.10 发货单(ShippingOrder) 发货单记录一次发货操作,关联到对应的订单: - 发货单号(格式 SHP-时间戳)、关联订单ID/单号、发货仓库 - SKU种类数、应发数量、实发数量 - 物流信息:承运商名称、运单号 - 状态:待拣货 → 待发货 → 已发货 → 已签收 - 退货状态:未退货 / 已退货 --- ## 三、订单履约链路(正向) ### 3.1 创建订单 **触发方式**:手动创建、外部渠道同步 **系统自动处理**: 1. 校验销售渠道是否存在(如指定了渠道) 2. 校验发货仓库是否存在(如指定了仓库) 3. 自动生成订单号(格式:渠道编码-日期-5位流水号,例如 SHOPIFY-20260601-00001) 4. 初始化所有状态字段:订单状态=待支付,支付状态=待支付,发货状态=未发货,退款状态=未退款 5. 默认币种 USD,汇率 1.00 6. 记录创建时间 **订单号生成规则**:取渠道编码(如无渠道则用 OMS)+ 当天日期 + 自增序号(5位补零)。序号基于时间戳生成,同一天内保证不重复。 **创建后的订单状态**:订单已录入系统,等待买家支付。此时不影响任何库存。 ### 3.2 确认支付 **触发方式**:操作人员确认买家已付款 **前置条件**:订单状态必须为「待支付」 **系统自动处理**: 场景一 — 简单确认(不传支付金额): 1. 校验订单状态为「待支付」,否则报错 2. 将订单状态更新为「已支付」 3. 将支付状态更新为「已支付」 4. 记录支付时间 5. 写入操作日志(类型:ORDER,内容:支付确认,备注含金额) 6. 写入状态事件时间线 7. **自动触发库存分配**(见 3.3 节) 场景二 — 带金额确认(传入实际支付金额和交易流水号): 1. 校验订单状态为「待支付」 2. 比对实际支付金额与订单应付金额: - 实际金额 >= 应付金额 → 支付状态 = 已支付 - 实际金额 < 应付金额 → 支付状态 = 部分支付 3. 记录交易流水号 4. 记录支付时间 5. 写入操作日志和状态事件 6. 仅当支付状态为「已支付」(非部分支付)时,才自动触发库存分配 **业务说明**:部分支付的订单不会自动分配库存,需要等待全额到账后手动触发分配。 ### 3.3 库存分配(锁定库存) **触发方式**:支付确认后自动触发,也可手动触发 **前置条件**:订单状态必须为「已支付」 **系统自动处理**: 1. 校验订单状态为「已支付」 2. 获取订单下所有明细项(SKU列表) 3. **逐一校验每个 SKU 的可用库存是否 >= 购买数量** 4. 如果任何一个 SKU 库存不足,**整体失败**,已锁定的 SKU 自动回滚(事务机制) 5. 全部校验通过后,对每个 SKU 执行锁定操作: - 该 SKU 对应库存记录的「可用数量」减少购买数量 - 该 SKU 对应库存记录的「锁定数量」增加购买数量 - 写入库存变动日志(来源:ORDER_ALLOCATION,类型:LOCK,记录变动前后数量) - 自动重新计算该库存记录的预警状态(可用 < 安全库存 → 标记为「低于安全库存」) 6. 将订单状态更新为「已分配」 7. 写入状态事件(内容:库存锁定完成,备注含 SKU 数量) **分配失败的场景**: - 某 SKU 无库存记录(该 SKU 从未入库) - 某 SKU 可用库存 < 购买数量 - 失败后所有已锁定的库存自动释放,订单状态保持「已支付」不变 **业务说明**:分配是一个原子操作,不存在「部分锁定」的情况。要么全部 SKU 锁定成功,要么全部不锁定。 ### 3.4 发货 发货分两步完成。 **第一步:录入物流信息** **触发方式**:操作人员填写承运商和运单号 **前置条件**:发货单状态为「待拣货」 **系统自动处理**: 1. 校验发货单存在 2. 校验发货单状态为「待拣货」,否则报错 3. 记录承运商名称和运单号 4. 将发货单状态更新为「待发货」 5. 写入订单状态事件(内容:运单号已录入,备注含承运商+单号) **第二步:确认发货** **触发方式**:操作人员确认货物已交由承运商 **前置条件**:发货单状态为「待发货」,且运单号不能为空 **系统自动处理**: 1. 校验发货单存在 2. 校验运单号非空 3. 校验发货单状态为「待发货」 4. 对订单中每个 SKU 执行库存扣减: - 该 SKU 对应库存记录的「锁定数量」减少购买数量(归零) - 写入库存变动日志(来源:ORDER_SHIPMENT,类型:SHIP) 5. 将发货单状态更新为「已发货」,记录发货时间 6. 同步更新关联订单:订单状态→已发货,发货状态→已发货,记录运单号、承运商、发货时间 7. 写入状态事件 **业务说明**:发货时只扣减锁定数量,不扣减可用数量(因为可用数量在分配时已经扣减过了)。发货后锁定数量归零,意味着这部分库存已经物理离开仓库。 ### 3.5 签收 **触发方式**:确认买家已收到货物 **前置条件**:订单状态为「已发货」 **系统自动处理**: 1. 校验订单状态为「已发货」 2. 将订单状态更新为「已签收」 3. 记录签收时间 4. 写入状态事件(内容:已签收,备注:买家已确认收货) 同步更新发货单状态为「已签收」。 ### 3.6 完成 **触发方式**:订单进入终态 **前置条件**:订单状态为「已签收」 **系统自动处理**: 1. 校验订单状态为「已签收」 2. 将订单状态更新为「已完成」 3. 写入状态事件 **业务说明**:完成后的订单可以进入售后流程(退款/补发)。 ### 3.7 取消订单 **触发方式**:操作人员主动取消 **前置条件**:订单未完成(已完成和已取消的订单不能取消) **系统自动处理**: 1. 校验订单不是「已取消」状态 2. 如果订单当前是「已分配」状态(已锁定库存),则**自动释放所有已锁定的库存**: - 对每个明细 SKU:锁定数量减少,可用数量恢复 - 写入库存变动日志(来源:ORDER_ALLOCATION,类型:UNLOCK) - 自动重新计算预警状态 3. 将订单状态更新为「已取消」 4. 写入状态事件和操作日志(含取消原因) **业务说明**:取消操作会自动释放库存,确保不会出现「幽灵锁定」。已支付但未分配的订单取消时不需要释放库存。 ### 3.8 拆单 **触发方式**:操作人员将一张订单拆分为两张 **前置条件**: - 原订单状态为「已支付」或「已分配」 - 拆出的每个 SKU 数量 > 0 且 < 原订单中该 SKU 的数量 - 拆出的 SKU 库存充足(如果原订单已分配,需要额外校验) **系统自动处理**: 1. 校验原订单状态 2. 校验拆分数量合法(不为0,不超过原数量) 3. 校验每个拆出 SKU 的可用库存 >= 拆出数量 4. 创建子订单: - 订单号 = 原订单号 + "-S" - 继承原订单的渠道、买家、收货地址等全部信息 - 订单状态 = 待支付 - 记录父订单ID 5. 将拆出的 SKU 从原订单移到子订单: - 子订单创建新的明细项(复制 SKU 信息,数量为拆出数量) - 原订单明细项数量减少(数量和小计同步更新) 6. 子订单金额计算: - 商品金额 = 各明细小计之和 - 运费和税金按金额比例从原订单分摊 - 实付金额 = 商品金额 + 运费 + 税金 7. 原订单金额自动重新计算 8. 写入状态事件(原订单记录拆单完成,备注含子订单号) **业务说明**:拆单后产生两张独立的订单,各自走后续的发货流程。子订单继承原订单的支付状态(已支付),不需要重新支付。 ### 3.9 合单 **触发方式**:操作人员将两张订单合并为一张 **前置条件**: - 两张订单均为「待创建」或「已支付」状态 - 同一仓库(或其中一方未指定仓库) - 同一币种 **系统自动处理**: 1. 校验两张订单状态 2. 校验仓库和币种一致 3. 将来源订单的所有明细项复制到目标订单(创建新的明细项) 4. 来源订单状态更新为「已取消」,记录合并目标订单ID 5. 目标订单的金额重新计算(商品金额 = 所有明细小计之和) 6. 运费取两者较大值 7. 目标订单实付金额重新计算 8. 写入状态事件(目标订单记录合单完成,备注含来源订单号) **业务说明**:合单后来源订单作废,目标订单包含两个订单的所有商品。运费取较大值而非累加,因为合并发货通常比分开发货更经济。 --- ## 四、库存管理 ### 4.1 库存盘点 **触发方式**:操作人员输入实际盘点数量 **系统自动处理**: 1. 校验库存记录存在 2. 校验盘点数量 >= 0 3. 计算差异 = 实际盘点数量 - 当前可用数量 4. 将可用数量更新为实际盘点数量 5. 写入库存变动日志: - 差异 > 0:变动类型 = STOCKTAKE_GAIN(盘盈) - 差异 < 0:变动类型 = STOCKTAKE_LOSS(盘亏) - 差异 = 0:变动类型 = STOCKTAKE(平账) 6. 自动重新计算预警状态 **业务说明**:盘点会直接覆盖可用数量,而非增量调整。盘盈说明实际库存比系统记录多(可能有未记录的入库),盘亏说明实际库存比系统记录少(可能有丢失或未记录的出库)。 ### 4.2 库存调拨 **触发方式**:操作人员发起仓库间调拨 **系统自动处理**: 1. 校验源仓库和目标仓库不同 2. 校验调拨数量 > 0 3. 校验源仓库有该 SKU 的库存记录,且可用数量 >= 调拨数量 4. 从源仓库扣减可用数量,写入日志(类型:TRANSFER_OUT) 5. 在目标仓库增加可用数量,写入日志(类型:TRANSFER_IN) 6. 如果目标仓库没有该 SKU 的库存记录,系统自动创建一条(初始可用数量为0,然后加上调拨数量) 7. 两端都自动重新计算预警状态 **业务说明**:调拨是原子操作,源仓库扣减和目标仓库增加要么同时成功,要么同时失败。 ### 4.3 安全库存预警 **触发方式**:每次库存变动后自动检查 **判断逻辑**: - 可用数量 < 安全库存 → 预警状态 = 「低于安全库存」 - 可用数量 >= 安全库存 → 预警状态 = 「正常」 **影响范围**:预警状态为「低于安全库存」的 SKU 会被补货建议扫描到。 --- ## 五、采购链路(反向) ### 5.1 补货建议生成 **触发方式**:手动触发 **系统自动处理**: 1. 扫描所有可用数量 < 安全库存的库存记录 2. 对每个低库存 SKU: - 跳过已有待处理建议的 SKU(避免重复建议) - 计算建议数量 = 安全库存 - 可用数量 + 锁定数量 - 在途数量 - 如果结果 <= 0,跳过(在途库存已足够补货) - 查询该 SKU 的默认供应商(从供货能力表获取) - 如果默认供应商有最小起订量(MOQ)且建议数量 < MOQ,则将建议数量上调至 MOQ - 创建补货建议记录,状态为「待处理」 3. 返回生成的建议数量 **建议记录包含**:SKU ID、商品标题、仓库ID、安全库存、当前库存、在途数量、建议采购数量、建议供应商ID **业务说明**:补货建议不是采购单,只是一种建议。需要操作人员审核后才能转为采购单。 ### 5.2 从补货建议生成采购单 **触发方式**:操作人员选择多条建议,一键生成 **系统自动处理**: 1. 校验所有选中的建议存在且状态为「待处理」 2. 校验每条建议都有指定供应商 3. **按供应商分组**:同一供应商的建议合并为一张采购单 4. 对每个供应商分组: - 创建采购单(状态=草稿,到货进度=待到货,币种=CNY) - 为每条建议创建采购项: - 从供货能力表获取该 SKU 的阶梯价格 - 采购数量 = 建议数量 - 小计 = 单价 × 数量 - 汇总采购单总金额和 SKU 种类数 - 更新补货建议状态为「已生效」(表示已生成采购单) 5. 返回所有生成的采购单ID **业务说明**:多条建议可以合并为一张采购单(只要供应商相同),减少采购单数量。 ### 5.3 采购单审批流程 **状态流转**:草稿 → 已提交 → 已审批 → 已下单 **提交**: - 前置条件:采购单状态为「草稿」 - 将状态更新为「已提交」,等待审批人审批 **审批通过**: - 前置条件:采购单状态为「已提交」 - 将状态更新为「已审批」 - 审批通过后,操作人员可以向供应商正式下单 **审批拒绝**: - 前置条件:采购单状态为「已提交」 - 将状态更新为「已拒绝」,记录拒绝原因 - 被拒绝的采购单不能再次提交,需要新建 **下单给供应商**: - 前置条件:采购单状态为「已审批」 - 将状态更新为「已下单」 - 此后进入等待到货阶段 **取消采购单**: - 前置条件:采购单不是「已关闭」或「已完成」状态 - 将状态更新为「已取消」,记录取消原因 - 已下单后仍可取消(例如供应商无法供货) ### 5.4 到货确认 **触发方式**:仓库人员确认供应商货物到达 **前置条件**:采购单状态为「已下单」或「部分到货」 **系统自动处理**: 1. 创建到货单,关联采购单ID,记录到货仓库和到货时间 2. 校验到货单未被重复确认(已确认的到货单不能再次确认) 3. 对每个到货项: - 校验该 SKU 的累计到货数量(已有到货 + 本次到货)不超过采购数量 - 如果超过,报错并提示剩余可到货数量 - 从采购项同步预期数量 - 创建到货项记录(实际到货数量、质检状态=待质检) 4. 更新采购单的到货进度: - 遍历所有采购项,比较累计到货数量与采购数量 - 所有 SKU 累计到货 >= 采购数量 → 到货进度 = 全部到货,采购单状态 = 全部到货 - 有部分 SKU 到货但未全部到齐 → 到货进度 = 部分到货,采购单状态 = 部分到货 - 同步更新采购项的累计到货数量 **业务说明**: - 同一采购单支持多次到货(分批送货场景)。每次到货创建一张新的到货单。 - 到货数量校验是基于累计值的,例如采购100个,第一次到60个,第二次最多再到40个。 - 到货确认后,货物进入「待质检」状态,尚未入库。 ### 5.5 质检 **触发方式**:质检人员对到货商品进行检验 **质检通过**: 1. 将到货项的质检状态更新为「合格」 2. 合格数量 = 实际到货数量,不合格数量 = 0 3. 更新采购项的累计合格数量(累加本次合格数量) 4. **自动执行入库**(见 5.6 节) 5. 更新采购单到货进度 **质检不合格**: 1. 将到货项的质检状态更新为「不合格」 2. 合格数量 = 0,不合格数量 = 实际到货数量 3. 更新采购项(合格数量为0,但到货数量已计入) 4. 更新采购单到货进度 5. **不执行入库**(不合格品不进入可用库存) **业务说明**:质检结果直接决定货物是否入库。质检不合格的货物不进入可用库存,需要后续处理(退货给供应商或让步接收)。 ### 5.6 入库 **触发方式**:质检通过后自动执行,无需手动操作 **系统自动处理**: 1. 查找该 SKU + 到货仓库对应的库存记录 2. 如果库存记录存在: - 可用数量 += 合格数量 - 写入库存变动日志(来源:PURCHASE_ARRIVAL,类型:INCREMENT,关联采购单ID和到货单号) - 自动重新计算预警状态(如果可用数量恢复到安全库存以上,预警自动解除) 3. 如果库存记录不存在(该仓库首次有此 SKU),当前逻辑不做处理(需要先手动创建库存记录) **业务说明**:入库是采购链路的终点,也是库存恢复的起点。入库后,之前因订单消耗而降低的可用库存得到补充,如果已触发过补货建议,预警状态会自动解除。 ### 5.7 关闭采购单 **触发方式**:操作人员手动关闭 **前置条件**: - 采购单状态为「部分到货」或「全部到货」 - 所有已到货的 SKU 必须已完成质检(不能有到货数量 > 0 但合格数量 = 0 且未标记为不合格的项目) **系统自动处理**: 1. 校验所有采购项:如果有到货但未质检完成的项,报错 2. 将采购单状态更新为「已关闭」 **业务说明**:关闭是一个管理动作,表示这张采购单的业务已终结。部分到货的采购单也可以关闭(例如剩余部分不再采购)。 --- ## 六、售后链路 ### 6.1 售后审核 **审核状态**:待审核 → 已审批 / 已拒绝 **审批通过**:售后单进入退款流程,操作人员可以选择退款、退货退款或补发 **审批拒绝**:售后单终结,记录拒绝原因 ### 6.2 退款状态流转 退款状态独立于审核状态,经历以下路径: **路径一 — 直接退款(无需退货)**: - 未退款 → 待退款 → 已退款 → 已完成 - 适用场景:小额退款、质量问题协商退款 **路径二 — 退货退款**: - 未退款 → 待退款 → 已退货待入库 → 已退款 → 已完成 - 买家填写退货物流单号后进入「已退货待入库」 - 仓库确认收到退货后执行退款,进入「已退款」 **路径三 — 补发**: - 未退款 → 待退款 → 已补发 - 不退款,而是重新发一件商品给买家 - 系统自动创建一张新的补发订单(继承原订单的渠道、买家、收货地址等信息) - 原售后单记录补发订单的关联关系 ### 6.3 退款与订单状态联动 当售后退款完成(退款状态变为「已退款」)时,同步更新关联订单的退款状态为「已退款」。 ### 6.4 补发订单 补发订单是一张独立的新订单,系统自动完成以下处理: 1. 继承原订单的渠道ID、买家信息(姓名、ID)、收货信息(姓名、电话、地址) 2. 币种继承原订单 3. 内部备注标记为「售后补发单,原售后单: XXX」 4. 原售后单记录补发订单ID --- ## 七、状态机汇总 ### 7.1 订单状态 ``` 待支付 ──→ 已支付 ──→ 已分配 ──→ 已发货 ──→ 已签收 ──→ 已完成 │ │ │ │ └──→ 已取消 ←┘ └──→ 已取消 └──→ 已退款 ``` 任何未完成的状态都可以直接取消(已分配状态取消时会释放库存)。 ### 7.2 发货单状态 ``` 待拣货 ──→ 待发货 ──→ 已发货 ──→ 已签收 ``` 单向流转,不可回退。 ### 7.3 采购单状态 ``` 草稿 ──→ 已提交 ──→ 已审批 ──→ 已下单 ──→ 部分到货 ──→ 全部到货 ──→ 已关闭/已完成 │ │ │ └──→ 已取消 └──→ 已拒绝 └──→ 已取消 ``` ### 7.4 退款状态 ``` 未退款 ──→ 待退款 ──→ 已退款 ──→ 已完成 │ ├──→ 已退货待入库 ──→ 已退款 │ └──→ 已补发 ``` --- ## 八、关键业务规则 | 序号 | 规则 | 详细说明 | |-----|------|---------| | 1 | 订单分配原子性 | 任一 SKU 库存不足则整体失败,已锁定的自动回滚,不存在部分锁定 | | 2 | 到货数量不可超采 | 每个 SKU 的累计到货数量不能超过采购单中该 SKU 的采购数量,系统按累计值校验 | | 3 | 质检与入库联动 | 质检通过 → 自动入库(可用数量增加);质检不合格 → 不入库 | | 4 | 安全库存自动预警 | 任何库存变动(锁定/解锁/增减/盘点/调拨)后自动检查,无需手动操作 | | 5 | 取消自动释放库存 | 已分配的订单取消时,系统自动释放所有已锁定的库存 | | 6 | 拆单库存校验 | 拆单前校验拆出的每个 SKU 可用库存是否充足 | | 7 | 合单条件严格 | 必须同仓库、同币种、均为未发货状态 | | 8 | 采购单关闭前置条件 | 所有已到货的 SKU 必须已完成质检(不能有到货但未质检的项) | | 9 | 补发创建新订单 | 售后补发会创建一张全新的独立订单,而非修改原订单 | | 10 | 每次操作留痕 | 所有状态变更记录操作日志和事件时间线,包含操作人、时间、变更内容 | | 11 | 分批到货支持 | 同一采购单可多次到货,每次创建独立到货单,累计数量达标后自动更新采购单状态 | | 12 | 补货建议去重 | 同一 SKU + 仓库已有待处理建议时,不会重复生成 | | 13 | 补货建议满足MOQ | 建议数量如果低于供应商最小起订量,自动上调至MOQ | | 14 | 调拨自动建记录 | 目标仓库无该SKU库存记录时,调拨自动创建 | | 15 | 盘点直接覆盖 | 盘点输入的是绝对数量而非增量,直接覆盖可用数量 |