税务与涉税申报技能包(免费版)
完全本地运行:批量壳与 14 项涉税检查规则都打包在本技能里(
scripts/engine/)。 不对外发材料、不写任何文件(结果只打到 stdout)、没有次数上限。
什么时候用
谁会在什么时候用:企业税务会计 / 代账公司的涉税岗,在每次申报之前。申报要核的不是一个数, 而是十几张互相关联的底稿;一张张手核既慢,又说不清哪一项这次到底核没核。
这个工具做什么:--input 对象目录 时,目录里每个子目录就是一个对象(一个客户 / 一套申报材料);
本工具逐对象跑 14 项涉税检查(每一项内部还有若干子检查),最后每个对象输出一行结论:
对象名 / 14 项各自「通过 / 有问题(几条) / 未执行」/ 问题条数与 P0、P1 计数。
每条问题都带对象名 + 原文文件与行号(例如 申报材料.txt:5),可被第三方用同一份材料复算;
某个对象没交材料时,那个对象单独标「未执行」,不会拖累其他对象,也不会被算成"没问题";
只交了一部分材料时(只覆盖了部分检查项),会额外报一条 P2 检查项未执行(材料只覆盖了一部分),
把"没核的那几项"点名列出——绝不能因为跑了几项就当成 14 项都跑过了。
本包包含以下 14 项检查(每项都是一个独立引擎,逐字节复用,规则一行没改)
- 农产品收购发票与进项抵扣核对
- 应付暂估与发票未到核对
- 增值税进项税额认证与抵扣核对
- 进项税额转出核对
- 增值税附加税费核对
- 印花税计税依据核对
- 研发费用加计扣除归集核对
- 出口退税申报单证一致性核对
- 企业所得税纳税调整核对
- 预缴企业所得税核对
- 递延所得税与暂时性差异核对
- 房产税与城镇土地使用税申报核对
- 土地增值税预缴与清算核对
- 环境保护税申报核对
这个免费版查什么(分层如实说明)
免费版是完整可用的核心产出——"一次跑完所有对象"这件事本身就在免费版里做完了:
- 免费版执行:上面 14 项涉税检查(逐对象全跑),外加批量壳自己的覆盖缺口检查 (材料只覆盖一部分时明确报一条,见上)。
- 免费版不包含(完整档追加的那些项由引擎的
CHECKS_WITHHELD如实列出,跑--sample会打印): 跨对象汇总台账、跨对象风险排序处理清单、跨对象共性问题归类、申报台账导出(Markdown / CSV)。 - ⚠️ 两个档位都不包含:上面 14 项里每一项自己声明未实现的检查项(例如「农产品收购发票与进项
抵扣核对」的"扣除率与政策参考口径不一致提示")。它们在那 14 个上游免费包里就没实现,本包只是复用
它们的规则,绝不会因为"另有完整档"就假装跑过。这些项在结果里叫
scope.sub_checks_not_run, 每一项各自列出,一条都不藏。
怎么用
node scripts/run.mjs --sample # 单对象样例(内置,14 项全跑)
node scripts/run.mjs --sample-batch # 3 个对象样例(干净 / 有一处硬伤 / 没交材料)
node scripts/run.mjs --input 对象目录 # 批量:每个子目录 = 一个对象
node scripts/run.mjs --input 对象目录 --json # 机器可读
对象目录这样放(每个对象的一套材料里,每张表用 === 检查名 === 分段,Tab 分隔最稳):
对象目录/
豫州商贸有限公司(2026-02 申报)/申报材料.txt
中岳建材有限公司(2026-02 申报)/申报材料.txt
一个文件里放全部 14 张表、或者拆成 14 个文件放进同一个子目录,都可以——引擎按表头认表。
目录里没有子目录时,直接把每个文件当一个对象;.json 文件里若写 {"text":"…"} 就按 JSON 取正文。
规则是哪来的(复用,不是重写)
那 14 项涉税检查(含各自的子检查逻辑)是逐字节拷贝进本技能包 scripts/engine/parts/ 的,
本包只做"对象目录 → 逐对象跑 14 项 → 每个对象一行结论"的编排与汇总,没有改写任何一条核对规则。
常见错法(这个产品专属,逐条都真实踩过)
--input指到了"某个对象的文件",却以为在跑批量:--input指向的应当是对象目录 (里面每个子目录才是一个对象)。直接指一个对象的文件,就只会出 1 个对象的结果。- 把
=== 检查名 ===分段行删掉了:引擎按表头找表,分段行不是必需的,但分段行没了就容易 把两张表的行粘在一起,表头后面跟着别人的明细行。分段名本身就是给"这个对象到底核了哪几项"用的。 - 一个对象的材料放进了另一个对象的目录:结论会挂在错的对象名下。交付前扫一眼每行结论里的
对象名与问题明细里的
文件:行号。 - 把「未执行」读成「没问题」:材料没交、表头认不出时,本工具不给结论,只标「未执行」。 把「未执行」当通过,是这类批量工具最常见的翻车方式。
- 用空格而不是 Tab 分隔列:解析优先按 Tab,其次按"2 个及以上空格"。金额里带空格(如
1 000.00) 会被拆成两列,凭空多出"关键字段缺失"。从 Excel 复制时用 Tab。 - 合计行没写在第一列:合计行要写在身份列(期间 / 月份 / 项目 …)那一格为「合计 / 总计 / 小计」。 写到别的列上不会被当成合计行,而是当成一条明细,于是"合计与明细之和不符"这种误报就出来了。
- 把两个对象的表拼成一个文件当一个对象跑:14 项会全部命中同一个对象的行号,结论对不上人。 一个对象一个子目录,是本工具的基本假设。
需要完整档时(可选)
本免费版是完整可用的核心产出,本版本不包含下面这些项:
- 跨对象汇总台账(全部对象 × 全部 14 项检查合并成一张总表)
- 跨对象风险排序处理清单(按 P0/P1/P2 排序,带对象名与原文文件行号)
- 跨对象共性问题归类(同一问题命中 2 个及以上对象时合并成一条共性项)
- 申报台账导出(Markdown 与 CSV 文本,直接用于申报前复核说明)
同名工具的完整档是另一个独立商品(条款与条件以它自己的商品页为准);两档的差别就是上面这些,没有别的。
边界(请务必知道)
本工具不做引擎 CHECKS_OUT_OF_SCOPE 里列的那些判断(判断某项支出能不能抵扣、适用哪档税率、
代替纳税申报、出鉴证意见与税务意见、核对发票真伪、读电子税务局/开票系统导出文件);材料不足时
不给结论(认不出表头就不出结论,绝不套用默认值)。它只核表内与表间的算术和勾稽关系,
不替代你的专业判断。
