3. 追溯标识体系设计
追溯系统的第一道工程决策,不是选数据库,而是确定"用什么标识把物理对象锚定到数据记录上"。标识体系一旦上线,后续所有采集、关联、查询都建立在它之上,改造成本极高。本节把追溯标识拆成三层:对象层(GTIN、序列号、监管码)、包装层(SSCC)、生产层(批号、内部批次编码),并给出唯一性策略与编码规则设计方法。
一、三层标识的分工
GTIN(Global Trade Item Number)标识的是"产品种类",不是"这一件产品"。同一款 500mL 装饮料,无论生产多少瓶,GTIN 只有一个,通常为 GTIN-13 或 GTIN-14。它回答的是"这是什么",不回答"这是哪一批、哪一件"。
SSCC(Serial Shipping Container Code)标识的是"物流单元",即一个托盘、一个周转箱、一个整箱集合。SSCC 是 18 位数字,由扩展位(1 位)+ GS1 厂商识别码 + 序列参考(由厂商自行分配)构成。它回答的是"这一托货是哪一个物流单元",是出入库、发运、收货环节的追溯锚点。
批号(Lot/Batch)标识的是"同一批生产出来的集合"。它回答的是"这批货是什么时候、哪条线、哪批原料做出来的",是质量追溯、召回、保质期管理的核心粒度。序列号(Serial Number)标识的是"单件",粒度最细,用于高价值、强监管或需要单件履历的产品。监管码是特定行业(如药品、烟草、部分食品)由监管机构规定的编码,通常与 GTIN、批号、序列号组合使用,具有法定格式。
内部批次编码则是企业自建的、用于内部生产管理的批次标识,它可能包含产线、班次、日期、原料批次等信息,与对外批号可以一致,也可以映射。
二、编码规则设计:从字段到校验
内部批次编码是本节最需要动手设计的部分。一个可落地的规则应当满足:可读、可解析、可校验、可扩展。以某食品厂为例,内部批次编码采用 16 位定长结构:
格式:PP LL YYMMDD SS NNN C
示例:01 A3 250318 02 007 6
PP 2位 工厂代码(01=一厂,02=二厂)
LL 2位 产线代码(A3=灌装3线)
YYMMDD 6位 生产日期(2025-03-18)
SS 2位 班次(01=早班,02=中班,03=夜班)
NNN 3位 当日流水号(001~999)
C 1位 校验位(前15位加权模10)
校验位计算采用 GS1 通用的模 10 算法:从右往左,奇数位权重 3、偶数位权重 1,求和后取 10 的补数。以示例前 15 位 01A325031802007 为例,字母 A 按 ASCII 或映射表转为数字(如 A=10),逐位加权求和后得到校验位 6。这样在扫码或手工录入时,系统可即时判断编码是否被误读。
对外批号可以与内部批次编码一致,也可以单独设计。若客户或法规要求批号格式简洁(如 20250318A),则需在系统中建立"对外批号 ↔ 内部批次编码"的映射表,保证双向可查。
三、唯一性策略与冲突处理
唯一性不是"看起来不重复",而是要在定义域内可证明不重复。设计时按以下顺序确定:
- GTIN:由 GS1 或国家物品编码中心分配,企业不得自行编造。若产品规格、包装、名称变更,应申请新 GTIN,而不是复用旧码。
- SSCC:18 位,扩展位通常为 0,厂商识别码固定,序列参考由企业按"日期 + 流水"或纯流水分配。关键约束是同一厂商识别码下序列参考不得回绕复用。
- 批号:在"厂商 + GTIN + 生产日期"范围内唯一。若同日同品有多批,用班次或流水号区分。
- 序列号:在"GTIN + 批号"范围内唯一。高值产品建议全局唯一,避免跨批冲突。
- 监管码:按监管机构规则生成,通常包含校验位和加密段,企业只负责申请与关联,不自行定义格式。
常见冲突场景:① 同一批号被两个产线同时使用;② SSCC 序列参考跨年回绕导致重复;③ 序列号在换批后重新从 0001 开始,但系统未按批号隔离;④ 手工录入批号时漏位或错位。对应措施:产线代码纳入批次编码、SSCC 序列参考采用"年份 + 流水"、序列号唯一性约束加上批号字段、所有编码入口增加校验位验证。
四、标识与数据模型的对应
标识设计最终要落到数据表上。建议至少建立四张核心表:product(GTIN、名称、规格)、packaging(SSCC、层级、父级 SSCC)、batch(批号、内部批次编码、GTIN、生产日期、产线、班次)、serial(序列号、GTIN、批号、状态)。表之间通过外键关联,查询时从 SSCC 向下展开到序列号,或从序列号向上回溯到批次和原料。
实际落地时,先用一个真实产品跑通"GTIN + 批号 + SSCC"的最小闭环:生成一批内部批次编码,打印箱码和托码,扫码入库,再模拟一次召回查询,验证能否在 3 步内从 SSCC 定位到具体批次和产线。这个闭环跑通后,再逐步引入序列号和监管码,避免一次性设计过度复杂。
设计检查清单:① 每个标识是否有明确的定义域和唯一性约束?② 编码是否包含校验位?③ 对外批号与内部批次编码是否有映射?④ SSCC 序列参考是否会回绕?⑤ 序列号是否按批号隔离?⑥ 监管码是否按法定规则申请?⑦ 数据表外键是否完整?⑧ 召回查询能否在 3 步内完成?