危险化学品出入库与领用台账核对(免费版)
完全本地运行:引擎已经打包在本技能里(
engine/目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限。
什么时候用
谁会在什么时候用:生产企业、实验室、仓储的安环(EHS)/ 库管 / 财务,在每个月 做危化品台账自查、安全检查资料准备、月度盘点对账这些固定节点上,必须把这张表核一遍才能往下走。
为什么每个月都必须核:危化品(含易制爆 / 易制毒)按安全生产与危化品管理要求要建 出入库台账与领用记录,做到「双人收发、双人记账、账物相符」,并每月与仓库盘点、领用单、 MSDS / 安全标签、储存条件记录对上。对不上就是重大隐患(应急管理部门的检查项): 账物不符、领用与退库对不上、超期未复检、超量储存,任何一条被查到都要限期整改。
这张表(危险化学品出入库与领用台账)会逐项核对什么:期初库存 / 本期入库 / 本期出库 / 期末库存的逐行勾稽、 期末库存与盘点实存的差异与差异率、领用量与退库量对实际消耗的勾稽、同一品名同一批次同一天的重复登记、 合计行逐列复核(数量列与金额列)、必需列的空白 / 占位符 / 数值格式 / 负数。
每条结论都带原文行号与原文行内容(含具体数字),可被第三方用同一口径复算; 材料不足(例如缺「本期出库」列、只贴了一段说明文字)时不给结论,会明确列出还缺什么。
这个免费版查什么
本免费版只做表内数量与金额的逐行复算与列间勾稽; 不做实物是否真的与台账相符的判定,不做储存场所与安全设施是否达标的判定,不做证件资质认定。
范围就是下面这六项(跑 --sample 会打印实际执行了哪些):
- 数量勾稽 —— 期初库存 + 本期入库 − 本期出库 = 期末库存。逐行按 品名+规格 复算,差额不为零即列出并给出差额。
- 账实核对 —— 期末库存(账)vs 盘点实存(实),逐行给出差额与差异率(差异 = 盘点实存 − 期末库存,差异率 = 差异 ÷ 期末库存)。
- 领用与退库勾稽 —— 领用量 − 退库量 = 实际消耗(表里没有「实际消耗」列时对「本期出库」),逐行。
- 重复登记检测 —— 同一 品名 + 同一 批次 + 同一 日期 登记两次即点名,并点出前一行的行号。
- 合计行逐列复核 —— 「合计 / 总计 / 小计」行的每个数量列(期初 / 入库 / 出库 / 期末 / 盘点 / 领用 / 退库 / 消耗) 与金额列,都要等于明细行之和;逐列点名差在哪一列。
- 空白 / 占位符 / 数值格式 / 负数 —— 必需列(品名 / 规格 / 批次 / 单位 / 期初库存 / 本期入库 / 本期出库 / 期末库存 / 盘点实存 / 领用量 / 退库量 / 日期)空白或写成「—」「待补」、数值认不出(不会悄悄当成 0)、 库存为负(负库存)、数量为负、金额为负。
「合计」行只参与第 5 项复核,不参与逐行勾稽 —— 否则一份台账里的合计会被当成一条明细再算一遍。
怎么用
node scripts/run.mjs --sample # 先看内置样例(一张干净台账,应报 0 条问题)
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
node scripts/run.mjs --input 你的材料.json --json
入参两种写法:
{"text": "(把表头和数据行一起贴进来,Tab 分隔最稳)"}- 直接把台账(含表头)从 Excel 复制成文本存成文件,用
--input指过去
退出码:0 已执行检查 / 1 缺少入参 / 3 材料不足(不给结论)/ 4 入参读不到或无法解析 / 9 未预期错误。
出参
--json 输出一份 JSON:
status——success表示检查已执行;insufficient_input表示材料不足,此时没有结论,missing逐条列出还缺什么result.findings[]—— 每条含level(P0/P1/P2)、category、line(原文行号)、message(含原文行内容与具体数字)、advice;账实不符还带diff与diff_rateresult.summary—— 明细行数、合计行数、问题条数、P0/P1/P2 计数,以及期初 / 入库 / 出库 / 期末 / 盘点 / 领用 / 退库 / 消耗 / 金额的合计与账实差异合计result.checks_executed—— 本次真的执行了哪些检查result.checks_not_run—— 本次没执行哪些检查(如实列出,不会用默认值假装做过)result.checks_out_of_scope—— 本工具根本不做的判断result.note—— 零发现时出现,说明"通过"只覆盖上面写明的口径
常见错法(本产品专属)
- 期末库存直接手改成盘点实存,把差异抹平 —— 期初 + 入库 − 出库 就不再等于期末库存,第 1 项和第 2 项会同时报出来。 盘盈盘亏要走审批并留痕,账与实两个数都要留着,不能拿实盘数去倒推账面数。
- 领用记录只填「领用量」,退库的料不登记 —— 领用量 − 退库量 就比实际消耗大,第 3 项报不符; 退回车间的料要开退库单并冲减消耗,不能当成新的入库(记成负领用也会被「数量为负」抓到)。
- 同一个批次的料当天分两次出库,记成两行同样的品名 + 批次 + 日期 —— 被判重复登记; 要么合并成一行,要么在备注里写明两张单据号,让两条记录能被区分。
- 「合计」行手打、只加数量不加金额 —— 第 5 项同时核数量列与金额列,哪一列对不上就点名哪一列; 漏一行、多一行、或把「盘点实存」混进「期末库存」都会在这里露出来。
- 必需列留空或写占位符(规格写「—」、批次写「待补」、数量写「壹佰贰拾」) —— 空白 / 占位符会让那一行的 勾稽整项做不了,只能报「关键字段缺失」;看不懂的数值不会当成 0,会单独报「数值无法解析」, 本工具不替你猜一个默认值。
不包含什么
下面这 5 项不在本免费版里,也不会用默认值假装产出(checks_not_run 会如实列出):
- 超量储存(单一品种期末库存 > 许可 / 规定上限,需表里有「许可上限」列)
- 复检 / 有效期到期(按「有效期至」列判断已过期或 30 天内到期)
- 双人复核缺失(收发人 / 记账人列为空,或同一人既收发又记账)
- 储存条件记录缺失(温湿度 / 隔离要求列)与台账期间不连续
- 分品名×分仓库汇总清单(按差异量排序,给出可整改动作)
需要完整档时(可选)
本免费版是完整可用的核心产出,本版本不包含下面这些项:
- 超量储存:单一品种期末库存 > 许可/规定上限(需表里有「许可上限」列)⇒ 报出超出量
- 复检/有效期到期:按「有效期至」列判断已过期或 30 天内到期(基准日取台账最后一条业务日期)
- 双人复核缺失:收发人或记账人列为空、或同一人既收发又记账
- 储存条件记录缺失(温湿度/隔离要求列)与台账期间不连续检测
- 分品名×分仓库汇总清单(按差异量排序,给出可整改动作)
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
边界(请务必知道)
- 本工具不做引擎
CHECKS_OUT_OF_SCOPE里列的那些判断:不判定实物是否真的与台账相符(那是现场盘点与监盘的职责)、 不判定该品种是否属于危化品 / 易制爆 / 易制毒或是否需备案(那是应急管理与公安部门的认定权)、 不判定储存场所与安全设施是否达标、不判定 MSDS / 安全标签的文字内容是否合规、不读取 .xlsx / .pdf 原件、 核对过程不联网核验许可证与备案证明真伪。 - 材料不足时不给结论,也不会输出「未发现问题」。
- 核对全部在本机用 Node 标准库完成,你的台账不出本机。
