汽修配件与工时费结算核对(免费版)
完全本地运行:引擎已经打包在本技能里(
engine/目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限、材料不出本机。
什么时候用
谁在什么时候用:服务顾问、配件库管、结算会计在每张维修工单交车结算时、每月与保险公司 / 大客户对账时 —— 「维修工单配件与工时费明细表」是客户结算单、保险理赔单、门店收入与配件成本的原始依据, 客户签字后再改就要走红冲 / 退料流程。
这张表会逐项核对什么(免费版执行 6 类,逐条都带原文行号):
- 配件小计复算 —— 配件小计 = 数量 × 配件单价,差 0.01 也会报。
- 工时费复算 —— 工时费 = 工时 × 工时单价,差 0.01 也会报。
- 工单总额勾稽 —— 工单总额 = Σ配件小计 + Σ工时费 + Σ辅料费 − Σ折扣(按工单聚合;辅料费 / 折扣按明细行相加)。
- 重复配件行 —— 同一门店 + 同一工单号 + 同一配件名称 + 同一规格型号出现两次以上。
- 配件数量或工时为负 —— 退料 / 红字冲销行没有单独列示。
- 关键字段空缺或占位符 —— 必需列为空或写着「待填 / 待补 / — / 无 / N/A」。
每条结论都带原文行号与算式,可被第三方用同一份输入复算; 材料不足时不给结论,会明确列出还缺什么,也不会用默认值编出结论。
这个免费版查什么
上面 6 类就是本版本执行的全部检查项。跑 --sample 会在 scope.checks 里打印本次实际执行了哪些,
scope.checks_not_run 会如实列出本版本没有执行的检查项(只列出,不会伪造结论)。
怎么用
node scripts/run.mjs --sample # 先看样例(样例本身就是一张自洽的工单明细表)
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
node scripts/run.mjs --input 你的材料.json --json # 机器可读输出
入参两种写法都行:
{"text": "(把表的**表头**和若干行一起复制进来,Tab 分隔最稳)"}- 直接把「维修工单配件与工时费明细表」(含表头)从 Excel 复制成文本贴进
.json里; 文件不是合法 JSON 时整体按纯文本材料处理。
必需列(缺一列就不给结论):工单号、配件名称、数量、配件单价、配件小计、工时、工时单价、工时费、工单总额。
可选列:门店、规格型号、工时项目、辅料费、折扣、备注。
表里没有「辅料费」/「折扣」两列时按 0 计,并在 scope.aux_basis / scope.discount_basis 里标注口径来源。
出参
status:success才有结论;insufficient_input表示材料不足,此时没有result、没有findings, 只有missing(缺什么)与advice(怎么补)。result.findings[]:每条含level(P0/P1/P2)、category、line(原文行号)、message(含算式与差额)、advice、basis(引用原文整行)。result.summary:rows / stores / orders / parts / total / p0 / p1 / p2 / column_totals / parts_amount_total / labor_fee_total / aux_fee_total / discount_total / settled_total / billed_total / row_diff_total / order_diff_total / discrepancy_total / verdict(NO_ISSUE_FOUND|NEEDS_REVIEW|ERROR_FOUND)。result.scope:本次执行的checks、未执行的checks_not_run、clean_rows、aux_basis、discount_basis、tolerance、executed_locally: true、network_used: false。result.checks_out_of_scope:本工具根本不做的判断清单(边界诚实)。- CLI 退出码:
0已执行检查 /1没给入参 /3材料不足 /4入参读不到或无法解析 /9未预期错误。
常见错法(本产品专属)
- 配件小计按上一版报价倒挤:报价从 320 调到 350 之后只改了小计、没改单价(或反过来), 于是「数量 × 配件单价」与小计对不上 —— 报出来先看是哪一个被人动过。
- 把整套工时费压在共享的那一行:一张工单里几个配件共用一个工时项目(例如换机油 + 换机滤只收一次工时), 其余行必须写 0.00 工时 / 0.00 工时费;写成同一个工时费会被逐行复算抓出来重复计费。
- 工时按"标准工时"整时计费:实数工时 0.8 小时按 1.0 计、或按 0.5 小时进位后再乘单价, 工时费一列就会整体偏高几个百分点,每一行都报"工时费与工时×工时单价不符"。
- 折扣没从工单总额里扣:小计、工时费都对,但工单总额 = 配件 + 工时 + 辅料(忘了减折扣), 或者折扣被当成一行明细又加了一次 —— 工单总额勾稽会把差额直接算给你看。
- 辅料费只填在其中一行:辅料是工单级费用,本表按明细行相加的口径勾稽; 只在第一行填 30.00、其余行留空,等于表格口径不自洽(该写 0.00 的行要写 0.00)。
- 同一张工单的同一配件拆成两行(例如"前刹车片"和"前刹车片(另一侧)"都写同一个规格): 会被判重复配件行,配件费与工时费被重复汇总;分批领料请合并成一行,或在规格 / 备注里写清区别。
- 退料行直接写负数而不单独开红字工单、不写原因:负数行会把本工单的加总冲减掉, 客户与对账方都看不出来这笔钱为什么少了 —— 请单独列示并附退料单。
- 用「—」「待填」「无」「N/A」代替 0.00:占位符一律按"没填"处理,那一行核不动, 本工具对它不给结论,这张工单的总额勾稽也一并跳过;该是 0 就写 0.00。
这个免费版不包含
本免费版是完整可用的核心产出,本版本不包含下面这些项(它们会如实列在输出的 checks_not_run 里,绝不会伪造):
- 多收金额归因(单价口径 / 数量口径 / 工时口径 / 折扣口径);
- 跨门店 / 跨工单多收汇总台账(按门店与按工单归集配件费、工时费、辅料费、折扣、多收金额);
- 按多收金额从大到小的处理清单(带原文行号、归因口径与建议动作)。
同名工具的完整档是另一个独立商品(条款以它自己的商品页为准);两档的差别就是上面这些,没有别的。
需要完整档时(可选)
本免费版是完整可用的核心产出,本版本不包含下面这些项:
- 多收金额归因(单价口径 / 数量口径 / 工时口径 / 折扣口径)
- 跨门店 / 跨工单多收汇总台账(按门店与按工单归集配件费、工时费、辅料费、折扣、多收金额)
- 按多收金额从大到小的处理清单(带原文行号、归因口径与建议动作)
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
边界(请务必知道)
本工具不做引擎 checks_out_of_scope 里列的那些判断,其中最容易误解的四条:
- 不判断配件单价 / 工时单价本身是否合理(原厂价、副厂价、同城工时定额、保险定损价以报价单、厂家价目表与合同为准);
- 不判断配件是否真的装到了这台车上、工时是否真的发生了(需要现场核实派工单、旧件回收与施工影像);
- 不判断折扣 / 让利 / 保险理赔口径是否符合门店与保险公司 / 大客户的结算协议;
- 不处理负数行的会计处理与来源(本版本只把它标出来,请附退料单与红字发票)。
材料不足时不给结论,也不会输出「未发现问题」。
与相邻能力的区别:
piece-rate-wage-check核的是计件工资的单价与产量,logistics-fuel-card-check核的是油卡充值与油耗;本能力核的是汽修工单的 「数量 × 配件单价」「工时 × 工时单价」与「工单总额 = 配件 + 工时 + 辅料 − 折扣」勾稽。
