三表勾稽核验官
为什么需要它
月末结账,三张表拉出来,资产负债表差 100,000。你知道有问题,但不知道差在哪一行。
接下来两小时你在做什么:把每个小计行重算一遍,把损益表逐项加一遍,对现金流量表的汇总行。这些都是加法,但你要手工做 40 分钟,而且做完不敢确认。
更麻烦的是那种「表内自洽、逐项不平」的情况:净利润 = 利润总额 − 所得税 ✅,但营业利润 ≠ 收入 − 成本 − 各项费用。因为汇总行是手敲的,不是公式算的。这种错改一个数就能让全表看起来平,然后错着交出去。
这个 Skill 不做账、不生成报表、不给会计判断。它只做一件事:在你交出去之前,把该平的都加一遍。
什么时候用
- 月度/季度/年度结账,报表要交老板、交集团、交审计
- 报银行、报税、投标要出财务报表
- 代账公司交付客户报表之前
- 用 AI 或模板生成过报表,需要确认汇总行没被改坏
- 做完审计调整,重出报表
在「表做完」和「交出去」之间,跑一遍。四十秒。
三种跑法
一、一个 xlsx,三个 sheet(最常见)
python3 scripts/tiecheck.py 报表.xlsx
sheet 名里含「资产负债」「利润」「现金流」的会被自动认出来。名字不一样也行,脚本会按内容判断(有「资产总计」的是资产负债表,有「净利润」的是利润表,有「经营活动」的是现金流量表)。
不需要装 openpyxl。 .xlsx 本质是 zip + XML,脚本自带一个 90 行的读取器,只用标准库。
二、三张表分别是 CSV
python3 scripts/tiecheck.py --bs 资产负债表.csv --is 利润表.csv --cf 现金流量表.csv
只查一张也行:
python3 scripts/tiecheck.py --bs 资产负债表.csv
三、接进你的结账流程
python3 scripts/tiecheck.py 报表.xlsx --quiet --json
echo $? # 0 平 / 1 需确认 / 2 不平
2 就别往下走了。
表要怎么准备
一句话:第一列是项目名称,后面每列是一个期间。
项目,期末余额,期初余额
货币资金,4826500.00,3912000.00
应收账款,8760000.00,6420000.00
...
- 有「行次」「附注」列会自动跳过,不影响
- 千分位逗号、全角空格、
¥、元、括号负数(1,200)都能正确解析 - 空、
-、—、/视为无数据,不当作 0 - 项目名带「一、」「减:」「其中:」前缀会自动去掉再匹配
examples/报表样例.md是一份可直接对照的样例(三张主表全文,含两处故意埋的错)
查什么
七组关系,每组对每个期间列各跑一次。
| 检查 | 判据 | 平不了通常意味着 |
|---|---|---|
| 资产 = 负债 + 权益 | 资产总计 − (负债合计 + 所有者权益合计) | 少录科目、本年利润未结转、小计行被手改 |
| 左右两边总计 | 资产总计 = 负债和所有者权益总计 | 有一边的合计行取数范围不对 |
| 净利润 | 净利润 = 利润总额 − 所得税费用 | 退税时符号写反,或净利润取了税后数又减一次税 |
| 营业利润逐项 | 收入 − 成本 − 税金 − 销售 − 管理 − 研发 − 财务(±其他损益项) | 汇总行是手敲的;或某项费用重复计入 |
| 三类净额之和 | 经营 + 投资 + 筹资(±汇率影响)= 现金净增加额 | 净增加额取到了含汇率影响的行,或小计行漏项 |
| 现金滚动 | 期初 + 净增加额 = 期末 | 期末数含了非现金等价物 |
| 期末现金 vs 货币资金 | 两者相等(差额另行说明) | 存在受限资金(正常);现金反而更多(异常) |
再加一组跨表核对:
| 检查 | 说明 |
|---|---|
| 未分配利润变动 = 净利润 | 不等时不定性为错。提盈余公积、分红、以前年度调整都会造成差异——但若这些都没发生,就是本年利润没结转 |
以及三条跨期预警(不是错,是值得问一句的地方):
- 存货增速比收入快 30 个百分点以上 → 押错货,或有存货没结转成本(会同时虚增利润)
- 应收增速比收入快 20 个百分点以上 → 放宽信用换收入,或回款出问题。这两种在报表上长得一模一样
- 毛利率同比变动超 5 个百分点 → 审计一定会要求解释
输出怎么读
❌ 资产总计 ≠ 负债合计 + 所有者权益合计 [期末余额]
应为 27,100,000.00 实际 27,200,000.00 差额 100,000.00
差的 100,000.00 通常来自:少录一个科目、未结转本年利润……
三个标记,优先级不同:
- ❌ 不平 —— 必须查清才能交。别改公式把它改平,那叫掩盖。
- 🟡 需确认 —— 可能是正常业务,但你要有说法。审计问起来答不上来的,都在这类。
- 🔵 提示 —— 只是告诉你这里有个差异存在,通常有两种解释。
已通过的项默认折叠成一行。想看全部加 -v。
三条判断原则
一、先查差额,再改公式
差额 100,000 是个线索,不是个障碍。把公式改成 =SUM(...)+100000 能让表变平,但差额还在,只是你看不见了。
差额的大小和形状往往直接指向原因:整数(100,000、50,000)通常是漏录或手敲;带小数(13,742.86)通常是某笔业务只入了一边。
二、勾稽平 ≠ 报表对
这个工具只能证明「加减没错」。它证明不了:
- 科目分类对不对(该资本化的费用化了)
- 收入确认时点合不合规
- 关联方往来有没有披露
- 存货跌价准备该不该提
它把「算术错误」这一类风险清零,剩下的还是人的事。
三、先修根因,再修报表
差额来自「本年利润没结转」,就去补结转凭证;不要在两处各改一半让它凑平。后者会让下一期期初数带着一个说不清的尾巴,明年这个时候你会再查一次。
交付边界
售卖模式:买断制,一次性付费,交付全部明文——SKILL.md、两个脚本、样例报表、勾稽规则表全部可读可改。无隐藏模块,无联网校验,无授权服务器。
包含:七组勾稽关系的完整判据与容差处理、跨表核对、三条跨期预警、xlsx 轻量读取器(不依赖 openpyxl)、可直接接进流程的退出码与 JSON 输出、《三表勾稽规则表》(每条关系的取数口径、常见成因、修法)。
不包含:不做账、不生成报表、不调平差额、不给会计或税务判断。发现不平之后怎么查,是你的活——工具只负责把它指出来,指到具体是哪一组关系、哪个期间列、差多少。
关于依赖:Python 3.8+,仅标准库(zipfile、xml、csv、re、json)。不需要 pandas,不需要 openpyxl,不需要联网。
关于格式:支持 .xlsx 与 .csv/.tsv。不支持 .xls(97-2003 二进制格式)——那是完全不同的文件结构,请先另存为 .xlsx。也不支持 PDF 报表,请用原始表格文件。
关于数据安全:所有计算在本机完成,不上传、不联网、不写日志。报表留在你自己的硬盘上——这是它能进企业财务流程的前提。