2. 追溯对象建模
追溯系统能否跑通,第一步不在扫码枪,也不在数据库,而在于“追溯对象”是否被定义清楚。原材料、半成品、成品是物理形态,批次和序列号是标识手段,物料清单(BOM)是结构关系。四者缺一,追溯链就会在某个环节断掉:要么知道东西在哪却不知道它由什么组成,要么知道组成却无法定位到具体那一件。本节的任务,是把这些对象抽象成可存储、可关联、可查询的数字化模型。
一、四类实体:从物理对象到数据记录
原材料、半成品、成品在追溯模型中都属于“物料实体”,区别在于所处工艺阶段和是否可独立销售。建模时通常用一张物料主数据表承载它们的共性字段:物料编码、名称、规格、计量单位、物料类型(原材料/半成品/成品)、保质期、默认存储条件。物料类型决定了后续追溯的粒度策略——原材料往往按批次管理,成品可能按批次或序列号管理。
批次(Lot/Batch)是“同一条件下连续产出的一组物料”的标识。它的关键字段包括:批次号、物料编码、生产日期、供应商或产线、数量、状态(待检/合格/冻结/报废)。批次号的价值在于把成百上千件物料压缩成一个可追溯单元,牺牲个体精度换取管理成本。序列号(Serial Number)则相反,它标识单件,字段包括序列号、物料编码、生产时间、关键工艺参数、当前状态。序列号适用于高价值、需单件追责或法规强制的产品,如汽车安全件、医疗器械。
选择批次还是序列号,本质是追溯粒度与成本的权衡。可以用一个简单判据:若某物料的单件差异会影响最终质量判定或责任归属,就上序列号;否则用批次。例如同批钢材的化学成分一致,用批次即可;而每台发动机的装配扭矩不同,必须用序列号。
二、BOM:把实体连成结构
物料清单描述“一个成品由哪些半成品和原材料构成,各用多少”。在追溯模型中,BOM不是一张静态表,而是带版本和有效期的关系结构。典型字段包括:父物料编码、子物料编码、用量、单位、版本号、生效日期、失效日期。版本管理至关重要——同一成品在不同时期可能使用不同供应商的零件,追溯时必须按生产日期匹配当时有效的BOM版本,否则会得出错误的组成关系。
BOM通常分层展开:成品层、半成品层、原材料层。追溯时从成品批次向下展开到原材料批次,称为正向追溯;从原材料批次向上找到受影响的成品批次,称为反向追溯。两个方向共用同一套BOM关系,只是遍历方向相反。
三、数字化表达:标识、关系与事件
把上述对象落成数据模型,核心是三件事:给每个对象一个唯一标识,用关系表记录对象之间的连接,用事件表记录对象状态的变化。唯一标识建议采用“物料编码+批次号/序列号”的组合主键,避免不同物料批次号重复。关系表至少包含“批次父子关系”和“序列号-BOM用料关系”两类。事件表则记录入库、领料、生产、检验、出库等动作,每个事件带时间戳和操作对象标识。
下面这张图展示了一个成品批次如何通过BOM和用料关系,向下关联到半成品批次与原材料批次,并向上保留反向查询路径。图中同时标出了批次与序列号两种粒度在结构中的位置。
四、建模时的关键约束
第一,标识唯一性。批次号在全局唯一还是物料内唯一,必须在建模阶段定死。若采用“物料内唯一”,查询时必须同时带物料编码,否则会串批。第二,时间有效性。BOM版本、供应商变更、工艺参数调整都带生效区间,追溯查询要按事件发生时间选择正确版本。第三,粒度一致性。若成品按序列号管理,其关键用料也应能关联到序列号或至少关联到该序列号所属的生产批次,否则单件追溯会退化成批次追溯。
一个可执行的建模检查清单如下,可直接用于评审数据模型是否满足追溯要求:
| 检查项 | 合格判据 | 常见问题 |
|---|---|---|
| 物料主数据 | 物料编码唯一,物料类型明确 | 同一物料多编码,类型缺失 |
| 批次/序列号 | 标识规则文档化,生成不重复 | 手工编号导致重号 |
| BOM版本 | 有生效/失效日期,可回溯历史 | 直接覆盖旧版本 |
| 用料关系 | 记录父批次与子批次的实际消耗 | 只记理论用量,不记实际批次 |
| 事件时间 | 所有状态变化带时间戳 | 时间缺失或时区不一致 |
最后要强调:数字化表达不是把纸质台账搬进数据库。它的目标是让“任意一个成品批次,能在秒级回答它用了哪些原材料批次;任意一个原材料批次,能反向列出它流入了哪些成品批次”。只要数据模型能稳定支撑这两个查询,追溯对象建模就算达标。