罚款与违约金台账核对(免费版)
完全本地运行:引擎已经打包在本技能里(
engine/目录)。 核对过程不需要联网、不需要 API Key、没有调用次数上限。
什么时候用
谁、在什么时候、为什么必须做:财务和出纳在每个月做账、以及年度汇算清缴之前,都要把罚款与违约金台账核一遍 —— 合同违约金、行政处罚、税收滞纳金、赔付款项混在一张表里,方向(应收/应付)、依据文件、已收已付与余额、跨期与重复登记,任何一处错都会跟着带到报表和汇算:方向记反了余额归属整个反过来;该收的没收,到年底直接变坏账;把行政罚款、税收滞纳金的金额计进了成本费用,汇算清缴时就要作纳税调增。
这张表逐项核对什么(每条结论都带原文行号,第三方可用同一份输入复算):
· 余额 = 应计金额 − 已收付金额(逐行复算) · 合计行逐列复核(每一列的合计是否等于各行之和) · 同一单号重复检测 · 关键字段空缺与占位符检测 · 方向(应收/应付)与金额符号一致性检测 · 日期倒挂检测(发生日期不得晚于到期日期或实际收付日期)
与已有能力的区别:发票类工具核的是单张发票的要素,账龄类工具核的是应付账龄与付款排期;本工具核的是**「罚款与违约金」这一本台账内部的可算关系与口径一致性**。
材料不足时不给结论,会明确列出还缺什么。
这个免费版查什么
(检查项由引擎的 CHECKS_* 导出,跑 --sample 会打印实际执行了哪些。)
本版不执行下面这些(会如实列进 scope.checks_not_run,不会用默认值编结论):不得税前扣除项被计入费用的纳税调整判定、应收未收与逾期天数、已付未取得依据文件、跨期未结转、同一事项重复登记、按金额排序的处理清单 —— 共 6 项,见下面「需要完整档时(可选)」。
怎么用
node scripts/run.mjs --sample # 先看样例
node scripts/run.mjs --input 你的材料.json # 跑自己的材料
入参写法(Tab 分隔粘贴最稳,必须含表头):
{"text": "单号\t事项类型\t方向\t对方单位\t依据文件\t应计金额\t已收付金额\t余额\t所属期间\t发生日期\t到期日期\t收付日期\t计入费用金额\n…"}
必需列:单号、事项类型、方向、对方单位、应计金额、已收付金额、余额、所属期间、发生日期、到期日期、收付日期。完整档的税前扣除判定还会用「依据文件」「计入费用金额」,缺列时完整档会如实报"这项没跑",不会猜。
常见错法(这张台账里真的会有人这么填)
- 方向列写「收」「付」「收付」这类简写,或者干脆空着 —— 方向认不出来,余额该算谁的应收、谁的应付就说不清,后面每一步对账都跟着错。
- 应计金额填含税价,或者把已经收到的钱直接写进「应计金额」而不是「已收付金额」 —— 两边口径一混,余额复算必然对不上。
- 用负数表示方向(应付填 -5000,或者收款行金额带负号)—— 方向已经由方向列表达,金额再带符号等于把方向反着又记了一遍,合计与余额的符号全乱。
- 同一笔行政罚款换个单号补登一行(先写「罚款」后写「行政处罚」),或者同一事项在两个月各记一行 —— 应计金额和余额一起翻倍,还看不出哪一笔是真的。
- 收付日期早于发生日期(钱先付了才想起来登记),或者到期日期填成了上一年 —— 逾期天数怎么算都不对,催收也没依据。
- 合同违约金、赔付款项和行政罚款混写在同一个「事项类型」里(例如统一写「罚款及其他」)—— 事项类型一糊,到了汇算就分不清哪些要调增。
- 合计行手工维护:明细加了一行、合计忘了改,或者合计只加了一部分明细 —— 上报的余额和账上差一截,还看不出来差在哪一笔。
需要完整档时(可选)
本免费版是完整可用的核心产出,本版本不包含下面这些项:
- 不得税前扣除项(行政罚款、税收滞纳金)被计入费用的纳税调整判定(逐条列出调整金额)
- 应收未收与逾期天数判定(按核对基准日算逾期天数;缺到期日期时如实指出无法判定)
- 已付未取得依据文件的判定(已付了钱却没有依据文件的那几笔)
- 跨期未结转判定(发生日期与所属期间不一致、余额还挂着)
- 同一事项重复登记判定(同类型、同对方、同金额的行)
- 按金额排序的处理清单(每条带原文行号与建议动作)
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
边界(请务必知道)
本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断:不给税务或法律意见,也不判断某笔罚款到底能不能税前扣除(那要按具体法条与主管税务机关口径),只做表内可算关系与口径一致性核对。
材料不足时不给结论,也不会输出「未发现问题」。
