汇报数字复核 · Report Number Check
检查同一份报告 / 一份材料内部的数字是否自洽。它回答的是:这份 PPT、周报、财报、申报材料里,自己写的数有没有"自己打自己脸"。
> 与"数据核对"类技能的区别:本工具不跨文档比对(不把 A 表对 B 表),只盯单份材料内部的逻辑自洽——同一指标自相矛盾、分量加总≠合计、占比≠100%、增长率与基期/现期对不上、单位混用。
解决的五类问题
| 规则 | 含义 | 严重度 |
|---|---|---|
CONTRADICTION |
同一指标、同一单位、同一角色被写了两个不同数值(如摘要写营收 1000 万、明细又写 1100 万) | 高危 |
UNIT_CONFLICT |
同一指标同一周期用了不同单位却没换算说明(万元 vs 亿元混用) | 中危 |
SUM_MISMATCH |
显式"合计"与"分量"之和不一致 | 高危 |
PERCENT_SUM |
各占比(百分比分量)之和偏离 100(无显式合计时) | 中危 |
RATE_RECONCILE |
增长率与基期值、现期值对不上 | 高危 |
另有 PARSE_ERROR(数值无法解析)归为 ERROR。
输入模型(claims 文件,CSV 或 JSON)
列(名称支持别名,见 references/rules-format.md):
metric必填:指标名,如营业收入、Q1 营收period选填:周期,如2025、Q1、全年(用于同周期比对)value必填:数值unit选填:单位,如万元、亿元、%、元kind选填:角色(见下)group选填:分组键,用于把"不同指标名但同属一个拆解"的行归到一起(如区域 A/B/C 同属"区域占比")
kind 取值:
actual普通数值(默认,独立陈述)component分量(应加总进 total)total合计(应等于同组 component 之和)base增长率的基期值current增长率的现期值rate增长率(百分比,如12.5表示 +12.5%)
三个子命令
# 1) 检查:对 claims 文件做数字自洽性体检
python3 scripts/report_number_check.py check -i claims.csv
python3 scripts/report_number_check.py check -i claims.json --json
python3 scripts/report_number_check.py check -i report.txt --text # 自由文本扫描
# 2) 校验:检查输入文件结构(列、列宽、kind 合法性、数值可解析)
python3 scripts/report_number_check.py validate -i claims.csv
# 3) 配置:打印默认规则、列定义、容差与退出码
python3 scripts/report_number_check.py config
--tol相对容差(默认1e-3),--atol绝对容差(默认1e-6),用于放宽/收紧判定。--json输出机器可读 JSON(stdout 为纯 JSON)。- 退出码:
0无问题 /1检出问题 /2参数或文件或解析错误。
使用示例
输入 claims.csv:
metric,period,value,unit,kind,group
营业收入,2025,1000,万元,total,
营业收入,2025,600,万元,component,
营业收入,2025,400,万元,component,
区域A,2025,40,%,component,区域占比
区域B,2025,60,%,component,区域占比
增长,2025,100,,base,
增长,2025,112,,current,
增长,2025,12,,rate,
运行 check 后:合计 1000=600+400 ✓、占比 40+60=100 ✓、增长 12% 与 100→112 吻合 ✓,输出 [OK] 未发现数字自洽性问题。
若把 营业收入 的 total 改成 1100,或把 区域B 改成 70,工具会分别报 SUM_MISMATCH / PERCENT_SUM 并给出差值。
设计纪律
- 纯标准库(
argparse/csv/json/re/math/os/sys),不联网、不连库、不执行、不读工作区路径。 - 编码自动探测
utf-8-sig → utf-8 → gbk → latin-1,Excel 导出的 GBK / 带 BOM 文件直接可用。 - 数值解析兼容千分位、货币符号(¥/$)、括号负数
(123)、百分号、%自带单位、全角数字。 - 状态标签全 ASCII(
OK/ALERT/ERROR/HIGH/MEDIUM/LOW),截图不出现缺字形方框。
边界声明
- 只做单份材料内部的数字自洽性检查,不做跨文档/跨表比对,不联网查外部数据。
- 只做"数字体检"与问题定位,不替用户下审计、鉴证或合规结论。
- 容差为工程近似,极小量级的差异可能受容差影响;涉及法律/财务结论请辅以人工复核。
- 自由文本扫描(
--text)是轻量便利模式,仅做矛盾抽取,复杂结构化核对请用 claims 文件。