食品标签与配料表合规核对(免费版)
完全本地运行:引擎已经打包在本技能里(
engine/目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限。
什么时候用
谁会在什么时候用:食品生产企业(焙烤、饮料、调味品、速冻、预制菜、代用茶、坚果炒货……)的 品控 / 研发 / 标签专员 / 食品安全管理员,在每个新品上市和每次包材改版这两个节点上, 都必须把标签与配料表核一遍。市场监管抽检是直接拿标签与配料表去对投料记录的 —— 对不上就是虚假标示;标签错一项就是下架 + 罚款 + 召回,改版漏换一张旧标签同样要召回。
这 6 件事是每次都要核的硬项:
- 配料表顺序 —— 配料表要按加入量递减排列,量大的在前(只有同量才可以并列)。 顺序错是标签抽检里最容易被直接判不合格的一条。
- 配料与投料记录一致性 —— 投料记录里有、配料表上没有(漏标), 或者配料表写了、投料记录里没有(抄错配方 / 虚假标示),两边都必须点出来。
- 致敏物质提示 —— 含麸质谷物、甲壳类、鱼、蛋、花生、大豆、乳、坚果、芝麻这几类, 只要投料里有(包括复配原料带入的),标签的「致敏物质」栏就必须提示。
- 营养成分表算术复算 —— 每 100g 能量 = 蛋白质×17 + 脂肪×37 + 碳水化合物×17(kJ), NRV% 要能按营养素参考值复算出来(能量 8400kJ、蛋白质 60g、脂肪 60g、碳水 300g、钠 2000mg)。
- 同一批次重复登记 / 同一产品同一天两个标签版本 —— 重复登记会让两边各算一套; 同一天两张不同版本的标签,是换版管理上最典型的漏项。
- 字段合法性 —— 净含量单位(只认 g / kg / mL / L)、日期格式、数值为负或为零、必需字段缺失。
每条结论都带原文行号与行内容,可被第三方用同一口径复算; 材料不足时不给结论,会明确列出还缺什么。
这个免费版查什么(6 项)
- 配料表顺序 —— 按加入量递减(量大的在前,同量可并列),与投料记录逐位比对,倒挂就报位次与两边的量。
- 配料与投料记录一致性 —— 双向点名:投料里有、配料表没有 / 配料表有、投料记录没有。
- 致敏物质提示 —— 投料里出现的每一类致敏物质都必须在「致敏物质」栏被提示;多提示的也会点出来。
- 营养成分表算术复算 —— 能量按 17 / 37 / 17 复算,NRV% 按营养素参考值复算,对不上就给出差额与复算式。
- 同一批次重复登记 / 同产品同日两个标签版本 —— 同一产品 + 同一批次号只能有一行。
- 字段合法性 —— 净含量单位非法、日期认不出来、数值为负或为零、必需字段空着或写成占位符。
必需列(缺任何一列都只报「材料不足」,绝不给结论): 产品名称、配料表、投料记录、净含量、规格、生产日期、保质期、贮存条件、营养成分表、致敏物质、 标签版本、核对基准日。
这个免费版不查(跑 --sample 会如实列出这 5 项未执行):
生产日期/保质期与贮存条件矛盾检测、标签与包材版本对应关系(跨表比对)、净含量与规格/箱规复算、
宣称与配料矛盾、分产品×分配料汇总清单。这些项一项都没有执行,所以也不会说「这些项没问题」。
怎么用
node scripts/run.mjs --sample # 先看样例
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
node scripts/run.mjs --input 你的材料.json --json
入参就一张表:把 Excel 里的表头 + 数据行一起复制成文本粘进 {"text": "…"}(Tab 分隔最稳)。
表头写中文全称即可(如「配料表」「投料记录」「致敏物质」)。投料记录写成
「小麦粉 45kg、棕榈油 12kg、…」这种「物料 + 数量 + 单位」的形态,本工具才能复算顺序与一致性。
材料里可以带 --- 包材版本台账 --- 段(免费版会跳过这一段,不会因此报错)。
常见错法(核这张台账最容易栽的 5 个坑)
- 把配料表当"配方摘抄",而不是"按投料量排序的结果"。 同一款饼干换了供应商、换了油脂比例,投料量早就变了,配料表还是去年那份顺序 —— 这是抽检里最直接的判不合格项。正确做法:先看投料记录的量,再排配料表的次序, 写完两边放在一起逐位对一遍。
- 投料记录里的辅料、复配原料不提现在配料表里(漏标)。 最常见的漏项是「复配膨松剂」「食用香精」「复配防腐剂」这类:投料单上有一行, 配料表里却没有。复配原料还要拆到它的原始配料再排位置,不能当成一种料写。 反过来,配料表里写了却查不到投料的物料更要立刻查清楚。
- 致敏物质只按"主料"写,忘了辅料和复配原料带入的。 小麦粉、酱油(含大豆与小麦)、乳粉、蛋黄粉、芝麻这类,很多是从辅料里带进来的; 投料记录里出现了就必须提示。另外标签上完全没有致敏物质这一栏时, 不要以为"没写就没问题"——材料不足时本工具会说材料不足,绝不会说"没问题"。
- 营养成分表各算各的,不复算能量与 NRV%。 化验报告改了蛋白质或脂肪,能量却还是上一版;或者 NRV% 用了别的参考值。 正确做法:每 100g 能量 = 蛋白质×17 + 脂肪×37 + 碳水化合物×17(膳食纤维按 8 kJ/g 另算), NRV% 用 GB 28050 的参考值重算并取整。
- 同一批次登记两次、或者同一天挂着两个标签版本。 一个批次两行,投料记录与标签版本就各算一套,抽检时拿哪一行都能对不上; 换版期"新旧标签同时在用"如果不写清换版日期,出了召回根本查不出哪批货贴的哪张标签。
边界(请务必知道)
本工具不做这些判断(引擎 CHECKS_OUT_OF_SCOPE 里逐条列了):
- 不判定这款食品的配方本身是否合法、该用什么配料、配料能不能用 —— 本工具只核标签与投料记录的字面一致性;
- 不判定标签版式、字体字号、字符高度、营养标签版面是否符合 GB 7718 / GB 28050 的版式要求 —— 那要看实物标签;
- 不判定致敏物质是否真的低于阈值、是否属于可豁免情形(如精炼大豆油)—— 本工具只按关键词做提示核对,不建豁免库;
- 不读 .xlsx / .pdf / 实物标签图片原件、核对过程不联网核验检测报告与供应商声明的真伪。
材料不足时不给结论(连「未发现问题」也不输出),会明确列出缺什么 —— 宁可什么都不说,也不说错话。
