4. 食品批次与效期管理对接口的要求

在食品制造场景中,批次与效期不是两个孤立字段,而是贯穿采购、生产、仓储、销售全过程的“主线索”。ERP 侧重计划、成本与业务单据,MES 侧重现场执行与过程控制,两者对批次和效期的理解必须一致,否则就会出现“ERP 里批次已入库、MES 里查不到对应原料”“仓库按 FIFO 发货、质量部门却要求 FEFO”等典型冲突。本节围绕批次号生成规则、效期计算、FIFO/FEFO 策略以及从原料到成品的追溯链路,说明接口应如何设计数据传递。

一、批次号生成规则:谁生成、在哪生成、如何保证唯一

批次号生成首先要明确“权威源”。常见做法是:原料批次由 ERP 采购收货环节生成,生产批次由 MES 在生产工单下达或首件报工时生成,成品批次在包装完工时由 MES 回传 ERP。接口设计的关键是避免双方各自编码导致同一批物料出现两个编号。

一个可落地的编码规则示例(示例规则,非行业强制标准)为:工厂码(2) + 产线/仓库码(2) + 年月日(6) + 班次(1) + 流水号(4),例如 01A12406151 0032 表示 01 工厂、A1 产线、2024 年 6 月 15 日、白班、第 32 批。接口层面需要传递的不只是批次号字符串,还应包括:批次号、物料编码、生成时间、生成系统、批次状态(待检/合格/冻结/报废)。ERP 与 MES 应约定“批次号一经生成不可修改”,状态变更通过接口事件传递,而不是覆盖原记录。

建议在接口契约中明确批次号的最大长度、字符集(如仅允许大写字母与数字)、是否允许重复使用。食品行业常见批次号长度为 12~20 位,过短易冲突,过长不利于标签打印与人工识读。

二、效期与保质期的计算:从生产日期到到期日的接口字段

效期计算的核心是“基准日期 + 保质期时长 = 到期日”。基准日期在不同物料上可能不同:原料通常取收货日期或供应商生产日期,成品通常取包装完工日期。接口必须明确每个物料采用哪种基准,否则同一批货在 ERP 和 MES 中会算出不同的到期日。

计算示例(示例参数):某低温酸奶成品保质期为 21 天,包装完工日期为 2024-06-15,则到期日为 2024-07-06;若企业规定“到期日前 3 天进入预警”,则预警日为 2024-07-03。接口中应传递:生产日期、保质期天数、到期日、预警日、剩余保质期(可按天或按小时)。剩余保质期不建议由双方各自计算,而应由权威系统计算后下发,接收方只做展示与校验。

对于保质期以月为单位的物料,需约定月末处理规则,例如“1 月 31 日生产、保质期 1 个月”到期日应取 2 月 28 日或 29 日,接口文档中必须写明该规则,避免 ERP 按自然月、MES 按 30 天计算产生偏差。

三、FIFO 与 FEFO:策略差异如何体现在接口数据中

FIFO(先进先出)按入库时间排序,FEFO(先到期先出)按到期日排序。食品行业对短保、临期敏感物料通常采用 FEFO,对包装材料等可采用 FIFO。接口设计上,MES 在领料或发货时需要向 ERP 请求“可用批次清单”,ERP 返回的批次列表应携带入库时间、到期日、剩余数量、质量状态,由 MES 按策略排序并锁定批次。

关键点在于:策略不应硬编码在某一端。建议在物料主数据中增加“出库策略”字段(FIFO/FEFO),随物料主数据接口同步到 MES;MES 按该字段选择排序键。若 ERP 直接下发“推荐批次”,则接口需返回推荐依据(按入库时间或按到期日),便于现场人员判断异常。

批次与效期数据在 ERP 与 MES 间的传递链路 ERP(业务与计划层) 采购收货 生成原料批次号 物料主数据 保质期 / 出库策略 库存批次台账 入库时间 / 到期日 销售发货 按策略选批 MES(现场执行层) 工单下达 生成生产批次号 领料执行 FIFO / FEFO 选批 过程记录 原料批次绑定 完工入库 成品批次回传 接口契约 批次号 / 物料编码 生产日期 / 到期日 保质期 / 预警日 批次状态 / 数量 出库策略字段 追溯关联关系 唯一性校验 + 状态机 不可修改批次号 追溯链路:原料批次 → 生产批次 → 成品批次 → 销售去向 接口需保存“批次—批次”关联关系,支持正向与反向查询

四、批次追溯链路:从原料到成品的数据关联

追溯链路要求接口能够回答两个方向的问题:正向是“这批原料用到了哪些成品批次”,反向是“这个成品批次用了哪些原料批次”。实现上,MES 在领料投料时记录“原料批次—生产批次”的消耗关系,在包装完工时记录“生产批次—成品批次”的产出关系,再通过接口将这两类关联关系同步到 ERP 或企业追溯平台。

接口数据建议采用“关系记录”形式,每条记录包含:上游批次号、下游批次号、关系类型(消耗/产出/返工)、数量、发生时间、工位或工序。示例:原料批次 RM240610A07 消耗 120 kg 投入生产批次 01A12406151 0032,产出成品批次 FG2406150032。当发生质量投诉时,可先由成品批次反查生产批次,再反查原料批次与供应商,从而在数分钟内圈定受影响范围。

追溯关系一旦写入不应被物理删除。若发生批次拆分、合并或返工,应通过新增关系记录并标注关系类型来表达,保留原始链路,否则追溯链会断裂。

五、接口落地时的校验与异常处理

实际对接中,最常见的异常是批次号重复、到期日为空、状态不一致。建议在接口层设置三类校验:一是批次号唯一性校验,接收方发现重复时拒绝写入并返回错误码;二是必填字段校验,生产日期、到期日、保质期至少有一组完整;三是状态机校验,例如“冻结”批次不得出现在可用批次清单中。

下面是一段接口请求与响应的字段示例(示例数据,仅用于说明结构):

{
  "batchNo": "01A12406151 0032",
  "materialCode": "FG-YOGURT-500",
  "productionDate": "2024-06-15",
  "shelfLifeDays": 21,
  "expiryDate": "2024-07-06",
  "warningDate": "2024-07-03",
  "batchStatus": "QUALIFIED",
  "sourceSystem": "MES",
  "parentBatches": [
    {"batchNo": "RM240610A07", "relation": "CONSUME", "qty": 120}
  ]
}

接收方应返回处理结果与错误明细,例如 {"result":"FAIL","code":"BATCH_DUPLICATE","message":"批次号已存在"}。对于批量同步场景,建议采用“逐条校验、部分成功”的策略,并记录失败清单供人工处理,而不是整批回滚导致现场停工。

综上,批次与效期接口设计的核心不是字段多少,而是权威源清晰、计算规则统一、策略字段可配置、追溯关系可累积。把这四点写进接口契约并在联调阶段用真实批次数据验证,才能让 ERP 与 MES 在食品效期管理上真正对齐。