新版料放行了还不算:线束物料有效期、FEFO 发料与开封时效 MES 闸门
✦
← 海蓝智能

新版料放行了还不算:线束物料有效期、FEFO 发料与开封时效 MES 闸门

楼主:小杉 · 2026-11-03 01:13 · 浏览 7

小杉 楼主

面向:线束过程工程(PE/IE)、仓储物流、来料检验(IQC)、质量(QE)与制造信息化(MES)人员

写在前面

上一篇讲的是供应商变更这条链:PCN 登记与评估、来料批次带 pcn_rev 版本属性、新版首批加严 IQC、与 ECO 生效时刻对齐、投料扫码做新旧料互锁。走完那五道闸门,一批物料的状态变成了 RELEASED——版本对、检验过、授权齐。

但 RELEASED 只说明这批料「到货那一刻」是合格的,没说明它「用的那一刻」还合格。线束里有不少物料是会随时间和环境变化的:

  • 压敏胶带的初粘力、持粘力会随存放时间与温湿度变化;
  • 带胶热缩管里的热熔胶层有储存条件要求;
  • 双组份密封胶、灌封胶混合后有适用期(pot life),超时就不能再用;
  • 硅橡胶防水栓、密封圈一类弹性体件,供应商通常会给出储存条件和期限;
  • 部分尼龙(PA)类注塑件的韧性与含水率相关,有的供应商以防潮包装出货,并给出开封后的使用建议。

而且上一篇的版本切换本身会制造「老料」:新版料一放行,旧版剩余料要么在旧版工单里消耗完、要么退库隔离——消耗不完、退库没人管的那部分,最容易一放就过期。常见断点有这些:

  1. 收货只记物料号和批次,不记生产日期 / 到期日,到期只能靠仓管翻标签;
  2. 发料按「离门口最近」而不是按到期先后,同一物料新批次先用、老批次压到过期;
  3. 整箱放行了,拆包上线后没有开封计时,开封时效、混胶适用期全靠人记;
  4. 过期料「复验延期」没有次数和期限上限,延着延着就成了默认可用;
  5. 投料扫码只校验 RELEASED,不校验「此刻是否仍在有效期内」。

本文把「放行之后 → 投料之前」这段时间拆成五道 MES/WMS 闸门:有效期主数据与收货赋值 → FEFO 发料(与版本互锁共存)→ 开封 / 混胶计时 → 临期预警与复验延期 → 投料实时有效性校验与追溯。

文中字段名、状态码、天数与小时数均为作者示例。具体储存条件、有效期和开封时效以物料供应商的技术数据表(TDS)/ 规格书和客户要求为准;涉及 IATF 16949 等体系要求时只做方法层归纳,不摘抄条款、不编造限值。

一、要求从哪里来(方法层归纳)

来源 公开资料中的要点 对软件的含义
供应商 TDS / 规格书 给出储存温湿度、保质期、开封后或混合后的使用时限 有效期规则要按「物料号 × 供应商」维护,而不是全厂一刀切
IATF 风格的库存管理(二次解读) 库存周转、先进先出等方式管理,防止物料劣化,识别呆滞料 发料策略、库龄统计、劣化料隔离要系统化
可追溯性要求(线束行业常见实践) 成品追到原材料批次 投料记录除批次外,还要能证明「投料时在有效期内」
线束 MES 常见实践 扫码投料、批次状态门禁 状态校验从「静态状态位」升级为「状态 + 时间」双重判断

取用边界:只归纳方法层;正文中的天数、小时数、复验次数均为作者示例,需按 TDS 和企业程序替换。

放行之后到投料之前的五道闸门(作者示意)

二、闸门 ①:有效期主数据与收货赋值

有效期规则是物料主数据的一部分,建议最小字段如下:

字段(示例) 含义 示例值
shelf_life_basis 有效期起算依据 MFG_DATE(生产日期)/ RECEIPT_DATE(收货日)
shelf_life_days 未开封有效期 按 TDS 填写
open_life_hours 开封后可用时长(无此要求则为空) 按 TDS 填写
pot_life_minutes 混合后适用期(双组份) 按 TDS 填写
storage_class 储存条件类别 AMBIENT / CONTROLLED / DRY_PACK
retest_allowed 是否允许到期复验延期 true / false
max_retest_count 复验延期次数上限 示例:1

收货时,系统根据主数据为每个批次计算并写入 expiry_at:

{
  "lot_id": "L-20261103-0457",
  "part_number": "TAPE-PVC-19",
  "supplier_lot": "S2610-118",
  "pcn_rev": "B",
  "mfg_date": "2026-10-12",
  "expiry_at": "(按 shelf_life_basis + shelf_life_days 计算)",
  "storage_class": "CONTROLLED",
  "lot_status": "QUARANTINE"
}

(以上 JSON 为作者示例。)

闸门规则(示例):

规则 拒绝码(示例)
物料主数据要求有效期,但收货时未录入生产日期 SL_MFG_DATE_MISSING
到货时剩余有效期低于收货门槛(门槛按企业规定) SL_SHORT_ON_ARRIVAL
储存类别为 CONTROLLED,但目标库位不是受控库位 SL_STORAGE_MISMATCH

第一条最常见:供应商标签上有生产日期,但收货扫码只解析了料号和批次。解析不到生产日期的标签,应当在收货端补录或拒收,而不是默认用收货日起算——默认用收货日会让有效期凭空变长。

三、闸门 ②:FEFO 发料,并与版本互锁共存

对有有效期的物料,发料策略建议从 FIFO(先进先出)改为 FEFO(先到期先出):同一物料可能有不同供应商、不同生产日期的批次,入库先后不等于到期先后。

但这里有一个上一篇留下的约束:发料不能跨版本。FEFO 的候选集必须先按工单 BOM 要求的 pcn_rev 过滤,再在同一版本内按到期先后排序:

# 作者示例:FEFO 候选批次
def pick_lots(order, part, qty, now):
    need_rev = order.bom.required_rev(part)
    cands = [l for l in stock(part)
             if l.lot_status in ("RELEASED", "DEVIATION")
             and l.pcn_rev == need_rev            # 先满足版本互锁
             and l.expiry_at > now + margin(part)]  # 预留在线消耗时间
    cands.sort(key=lambda l: l.expiry_at)        # 同版本内先到期先出
    return allocate(cands, qty)

跳批(不按系统推荐批次发料)允许存在,但必须留原因,例如「推荐批次在高位库位,叉车不在班」:

情况 闸门动作(示例)
实发批次 = 推荐批次 通过
实发批次晚于推荐批次到期,且填写原因 通过,记录 FEFO_SKIP 与原因
实发批次晚于推荐批次到期,未填原因 拒绝:FEFO_SKIP_NO_REASON
候选集为空,但存在过期或版本不符批次 拒绝:FEFO_NO_VALID_LOT,提示仓储与计划

margin(part) 是一个容易被忽略的参数:一卷胶带从发料到用完可能要跨几个班次,发料时还剩 2 小时有效期的批次,到了工位上已经过期。这个余量按物料在线消耗速度设定,属于企业经验值。

四、闸门 ③:开封计时与混胶适用期

整箱放行、整箱有效期,并不代表拆包后还能用这么久。有开封时效要求的物料,需要在拆包那一刻生成一个子批次(或称「开封单元」),并开始计时:

事件(示例) 系统动作
工位扫码拆包 生成 open_unit_id,记录 opened_at、工位、操作员
计时到期前一段时间(示例:剩余 10%) 工位终端预警
计时到期 open_unit 状态置 EXPIRED,投料扫码拒绝
未用完退回 按规则判定:重新密封可退回(需记录)或直接报废

开封单元:从整箱有效期到开封计时(作者示意)

双组份密封胶 / 灌封胶的适用期更短,建议做成配胶单:

# 作者示例:配胶单
mix_id: MIX-20261103-031
resin_lot: L-RES-1027
hardener_lot: L-HRD-1019
ratio_check: PASS            # 称重或计量设备回传
mixed_at: 2026-11-03T09:12
pot_life_minutes: "按 TDS"   # 由主数据带出
status: ACTIVE               # 超时自动置 EXPIRED
consumers: []                # 使用该批胶的工单 / SN 逐个追加

两个关键点:配胶单自带两个组份的批次(任何一个组份过期,配胶单不可生成);用胶工位扫的是配胶单号,不是桶号——这样每个成品都能追到「哪一次混合、几点混的、用的时候过没过适用期」。

五、闸门 ④:临期预警与复验延期

临期和过期是两件事:临期要提前消化,过期要隔离处置。

阶段(示例) 触发 动作
临期 剩余有效期低于预警线(按物料设定) 推送计划与仓储:优先排产消耗,或调拨到用量大的线
到期 expiry_at 到达 批次状态自动置 EXPIRED_HOLD,库位锁定
复验 物料允许复验且未超次数 按复验项目检验,合格则延长一个复验周期
报废 / 退供 不允许复验、复验不合格或超次数 走报废或退货流程

复验延期是最容易被滥用的一环(和上一篇的临时偏差一个道理)。建议几条硬规则:

  1. 主数据不允许复验的物料,系统里没有「延期」按钮;
  2. 复验次数有上限,达到上限只能报废或退供;
  3. 延期后的有效期不能超过 TDS 允许的最长期限(如 TDS 有此规定);
  4. 复验记录要挂检验数据附件,不能只改一个日期字段。
# 作者示例:复验延期校验
def can_extend(lot, part):
    if not part.retest_allowed:
        return "SL_RETEST_NOT_ALLOWED"
    if lot.retest_count >= part.max_retest_count:
        return "SL_RETEST_LIMIT"
    if not lot.retest_record or not lot.retest_record.attachments:
        return "SL_RETEST_NO_EVIDENCE"
    return "OK"

六、闸门 ⑤:投料实时有效性校验与追溯

最后一道还是落在投料扫码。上一篇的校验逻辑检查了「状态 + 版本 + 偏差额度」,这里再加上时间维度:

投料扫码的四重校验:状态、版本、有效期、开封时效(作者示意)

# 作者示例:投料时的有效性校验(在版本互锁之后执行)
def check_time(unit, now):
    lot = unit.lot
    if lot.lot_status == "EXPIRED_HOLD" or now >= lot.expiry_at:
        return "SL_LOT_EXPIRED"
    if unit.is_open_unit and now >= unit.opened_at + unit.open_life:
        return "SL_OPEN_EXPIRED"
    if unit.is_mix and now >= unit.mixed_at + unit.pot_life:
        return "SL_POT_LIFE_EXCEEDED"
    return "OK"

投料记录建议在原有字段(supplier_lot、pcn_rev)之外,补三类字段:

字段(示例) 用途
expiry_at_feed 投料时该批次的到期时间快照
open_unit_id / opened_at 开封单元及开封时间
mix_id / mixed_at 配胶单及混合时间

一定要存快照而不是事后关联:复验延期会改写批次的 expiry_at,如果投料记录只存批次号,事后再查就分不清「投料时这批料到底在不在有效期内」。

七、追溯回看:出了问题能不能答出这三个问题

  1. 某个成品 SN 用的胶带,投料时离到期还有多久? —— expiry_at_feed 与投料时间相减;
  2. 某次配胶从混合到最后一次使用隔了多长时间? —— mix_id 的 mixed_at 与 consumers 里最后一条记录;
  3. 复验延期过的批次流入了哪些成品? —— 反查 retest_count > 0 的批次的全部投料记录。

三个都能在几分钟内答出来,物料的「时间」这条线才算接进了 MES。

八、落地顺序建议

  1. 先补 有效期主数据,并在收货端强制解析或补录生产日期(闸门 ①);
  2. 再把 投料扫码加上到期判断(闸门 ⑤ 的第一条)——这是见效最快、改动最小的一步;
  3. 然后上 开封单元与配胶单(闸门 ③),先从混胶工位开始;
  4. 接着把 发料改为 FEFO,并与版本互锁合并(闸门 ②);
  5. 最后把 临期预警与复验延期 流程化(闸门 ④),并配合库龄报表清理呆滞料。

上一篇解决的是「这批料是不是对的版本、有没有资格进厂」,这一篇解决的是「这批料在用的那一刻还能不能用」。放行是一个时刻,有效是一段时间——投料扫码那一下,两件事都要对上。

本文同步发布于 CSDN:https://blog.csdn.net/qq_29737119/article/details/169920696

登录 后参与回复