计件工资与工序单价核对(免费版)
完全本地运行:引擎已经打包在本技能里(engine/ 目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限。
什么时候用
谁会在什么时候用:有计件工的企业(制造 / 服装 / 电子组装)的车间统计与发薪会计, 在每个月发薪前都要把计件工资表核一遍才敢把应付计件工资交给出纳。 这张表最容易在三个地方出错,而三个都会在发薪日直接引发劳资纠纷: 工序单价用错档、返工/报废扣款被重复扣、合格数量与产量记录不符。
与已有能力的区别:工资表发放前核对核的是个税 / 社保 / 合计口径这一层 (实发 = 应发 − 扣款、个税按累计预扣税率表);本能力核的是计件产量 × 工序单价这一层 (计件工资、返工/报废扣款、保底补差、应付计件工资)。两层不同,同一个月可以各跑一遍。
这张表会逐项核对什么(免费版执行的 7 项):
- 计件工资 = 合格数量 × 工序单价
- 应付计件工资 = 计件工资 − 返工扣款 − 报废扣款 + 保底补差 + 加班补差
- 合格数量是否大于产量(合格数不可能多于产量)
- 负值检测(数量 / 单价 / 金额 / 扣款 / 补差为负)
- 合计行逐列复核(产量、合格数量、返工/报废数量、计件工资、各项扣款与补差、应付计件工资)
- 同一员工同一工序是否出现多行(重复计酬线索)
- 空白与占位符检测
每条结论都带表内原文行号(形如「员工「张美玲」的工序「锁边」(第 2 行)」), 可由第三方用同一份输入和同一口径复算;材料不足时不给结论,会明确列出还缺什么。
这个免费版查什么
检查项以引擎导出的 CHECKS_GIVEN 为准,跑一次 --sample 就能看到实际执行了哪些。
结果里的 scope.missing_columns 与 scope.skipped_checks 会如实列出
「因为表里没有这一列、所以这一项没有执行」——不会把没查的当成查过了。
怎么用
node scripts/run.mjs --sample # 先看样例
node scripts/run.mjs --input 你的计件工资表.json # 跑自己的材料({"text": "含表头的表文本"})
最少要有这些列:员工、工序、工序单价、合格数量、计件工资、应付计件工资。 其余列(小组、产量、返工数量、报废数量、返工扣款、报废扣款、保底工资、保底补差、加班补差) 有就一起核,没有就不核并如实列出来。从 Excel 连表头一起复制成文本、Tab 分隔最稳。
常见错法(这张表里真的会有人这么填)
- 同一道工序在表里出现两个单价档:锁边这一行写 1.20、另一行写 1.00,两行各自"看起来都对", 只有把同一工序的行摆在一起才看得出来(免费版会算出这一行计件工资与复算不符, 但不判断哪一档才是工序标准单价 —— 那是完整档的加项)。
- 返工与报废把同一批不合格品扣两次:一件不合格品先算返工(扣一次),又填进报废数量(再扣一次), 表现为"扣款折合数量 > 这一行的不合格数量"(免费版只核票面金额,重复扣要完整档才查)。
- 把产量直接抄进合格数量列:整批产量当合格数填,合格数就大于产量了(免费版会当场报出来)。
- 保底补差填成了保底工资:低于保底的员工,应补的是"保底工资 − 净计件工资"这个差额; 有人把保底工资金额整笔填进补差列,应付计件工资就凭空多出一截。
- 合计行没跟着更新:加了一行新人、改了合格数量,合计还是上一次的; 合计行错了,整批发放总额跟着错,银行代发总额也对不上。
需要完整档时(可选)
本免费版是完整可用的核心产出,本版本不包含下面这些项:
- 工序单价与工序标准单价不符检测(标准单价取 payload.std_rates,未提供时取同一工序多数行所用单价)
- 保底补差复算(保底补差 = 保底工资 − 净计件工资,低于保底要补、高于保底不补)
- 返工 / 报废扣款重复扣检测(扣款折合数量超过这一行的不合格数量)
- 计件工资与产量记录不平检测(产量 − 返工数量 − 报废数量 ≠ 合格数量)
- 发薪前必须处理清单与差异归因(按差额从大到小排序,逐条带员工 / 工序行号、建议动作与归因口径)
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
边界(请务必知道)
本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断:不判断工序单价、保底工资、加班补差该定多少、 不判断返工/报废扣款该不该扣、不核考勤工时与加班费是否符合劳动法、不与银行代发流水或个税申报表做跨系统核对、 不读 .xlsx(需要你先导出成文本)。不给劳动法或薪酬合规意见,只核这张表内部可算的算术关系。
材料不足时不给结论,也不会输出「未发现问题」;本次没有执行的检查项会如实列在 scope.checks_not_run 里。
