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、批号、序列号组合使用,具有法定格式。

内部批次编码则是企业自建的、用于内部生产管理的批次标识,它可能包含产线、班次、日期、原料批次等信息,与对外批号可以一致,也可以映射。

追溯标识三层结构与关联关系 对象层 · 标识"是什么" GTIN-13 / GTIN-14(品类) 序列号 SN(单件) 监管码(法定格式) 包装层 · 标识"哪一单元" SSCC-18(物流单元) 箱码 / 托码(层级包装) AI(00) 应用标识符 生产层 · 标识"哪一批" 对外批号 Lot 内部批次编码(产线/班次) AI(10) 批号 / AI(21) 序列 关联规则(示例) 1 个 SSCC 托盘 → 包含 N 个箱码 → 每箱含 M 个单品 GTIN + 序列号;同一托盘内所有单品共享同一批号 Lot。 追溯查询路径:SSCC → 箱码 → GTIN + SN → Lot → 内部批次 → 原料批次 / 产线 / 班次。 唯一性策略要点 GTIN 全局唯一(GS1 分配);SSCC 全局唯一(厂商识别码 + 序列参考);批号在"厂商 + GTIN + 时间"范围内唯一;序列号在"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 步内完成?