把系统导出的脏表变成标准表:日期统一、金额转数值、名称按映射表替换,空值/重复/无法匹配进异常表,输出四件套
fin-table-cleanSKILL.md 为准。> **本地运行,零网络、免 API Key、数据不出电脑。** > 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。 # 财务明细表清洗标准化 财务自动化的第一步。系统导出的明细表通常日期写法不统一、金额带千分位和货币符号、部门名称各写各的,手动清洗耗时且容易漏。本包把这一步固化成可重复运行的流程。 ## 输出四件套(每次运行必有,缺一不可) | 文件 | 内容 | |---|---| | `clean_主表.csv` | 清洗后的标准表,附 `_来源文件` 与 `_原始行号` | | `clean_异常表.csv` | 被排除的行,附异常原因、风险等级、原始行号 | | `clean_校验表.csv` | 行数与金额守恒校验 + 人工复核声明 | | `fin-log.jsonl` | 处理日志(追加),含输入文件指纹、规则版本、操作人 | **金额守恒**:输入金额 = 主表金额 + 异常表金额。差异超过 0.01 元时**停止输出**并说明原因,绝不给出对不上账的结果。 ## 环境准备 ```bash PY="<python 3.8+ 路径>" # 纯标准库,无需 pip install 任何东西 "$PY" <skill目录>/scripts/table_clean.py <文件> [参数] ``` ## 用法 ### 先出方案 + 预览(默认,不写盘) ```bash table_clean.py 报销明细.xlsx --date-cols 日期 --amount-cols 金额 \ --map 部门映射.csv --map-cols 部门 --key 报销单号 ``` 真实输出: ``` 方案:报销明细.xlsx | 工作表=Sheet1 | 数据行=7 | 列数=8 日期列统一: ['日期'] 金额列转数值: ['金额'] 名称映射: ['部门'] → 4 条规则 唯一键: 报销单号 清洗结果:7 行 → 主表 5 行 / 异常 2 行 --- 主表预览(前 20 行,未写盘)--- BX001 | 2026-01-05 | 行政中心 | 张三 | 办公用品 | 1200.5 | FP001 | 已审批 BX002 | 2026-01-08 | 销售中心 | 李四 | 差旅费 | 3680 | FP002 | 已审批 --- 异常预览(前 10 行)--- 行5 金额非数字 行8 名称无法匹配映射表 [预览模式] 未写盘。确认无误后加 --execute 执行。 ``` ### 确认后写盘 ```bash table_clean.py 报销明细.xlsx --date-cols 日期 --amount-cols 金额 \ --map 部门映射.csv --map-cols 部门 --key 报销单号 --execute --operator 张三 ``` 真实输出的校验表: ``` 规则版本 | 1.0 主表行数 | 5 异常行数 | 2 输入行数 | 7 主表金额合计 | 15581.0 异常表金额合计 | 980.0 守恒差异(入-主-异) | 0.0 人工复核 | 本结果由本地工具生成,仅供财务复核使用;入账 / 付款 / 申报 / 税务口径 / 重大异常的最终结论必须由对应财务岗位人工确认。 ``` ### 抓疑似重复:多列组合键 单号相同只是最简单的重复。改个单号、发票号却一样,才是重复报销的常见形态: ```bash table_clean.py 报销明细.xlsx --key 发票号,金额 --key-mode any ``` 真实输出:`行6 唯一键重复(发票号+金额 与第2行相同)` `--key-mode all`(默认)要求组合列全部相同才算重复;`any` 是任一列相同即标记疑似,用于风险筛查。 ## 参数 | 参数 | 说明 | |---|---| | `--date-cols` | 日期列,统一为 `YYYY-MM-DD`(认得 `2026/1/5`、`20260108`、`2026-01-11`) | | `--amount-cols` | 金额列,转数值(认得 `1,200.50`、`¥10000`、首尾空格) | | `--map` / `--map-cols` | 名称映射表(两列:原名,标准名)+ 要映射的列。**必须限定列**,全表替换会误伤备注 | | `--dict` | 字段字典 CSV:列名,类型,必填,标准名(可同时改列名为标准名) | | `--key` / `--key-mode` | 唯一键,单列或多列组合;`all` / `any` | | `--preview N` | 预览行数,默认 20(小样本试跑) | | `--execute` | 真正写盘;不加则只预览 | | `--operator` / `--rule-version` | 写进处理日志的操作人与规则版本 | ## 安全与边界(拒绝权) - **源文件零改动**:输出一律进 `_out/`,绝不覆盖、绝不删除原文件 - **默认预览**:不加 `--execute` 一行都不写 - **日期不自动猜**:数字 `3680` 不会当成日期(Excel 序列号下它是 1910-01-27)。要不要按日期解析,由你指定列决定 - **金额识别不了就进异常表**:`abc` 不会被当成 0,也不会被猜成别的数 - **列名不存在直接拒绝**:不猜近似列名,会列出表里的真实列名 - **金额不守恒时停止输出**:这是硬约束,不是警告 ## 人工复核(必读) 本包只做**格式标准化与异常挑出**,不判断业务。以下必须由财务确认: - 被排除的异常行是不是真的该排除(尤其是"名称无法匹配"——可能只是映射表没维护全) - 金额列口径是含税还是不含税 - 清洗后的结果能否作为入账、付款、申报的依据 ## 相邻路线转交 | 用户要做的事 | 转交给 | |---|---| | 全表异常检查(负数、超阈值、状态矛盾) | `fin-anomaly-scan` | | 多张表合并成一个 | `fin-table-merge` | | 外发或试跑前要脱敏 | `fin-data-mask` | ## 自检清单 - [ ] 预览模式确实没写盘 - [ ] `_out/` 里的文件没有覆盖源文件 - [ ] 校验表金额守恒差异为 0 - [ ] 异常表每一行都能定位到原始行号 --- 本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。 版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。 本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。 允许个人及企业内部免费使用、复制、修改,包括内部生产环境。 未经书面许可,不得将本 Skill 或其修改版作为商业服务对外销售、转售或提供托管服务。 各版本发布之日起 4 年后自动转为 Apache License 2.0。详见随包 `LICENSE.md`。
按标准字段模板合并多张 Excel/CSV,保留来源文件与来源部门列,业务唯一键查重,输出合并表/重复表/缺字段表
从大表抽样 20-50 行并对姓名/税号/银行卡/手机号/金额做保形脱敏,供试跑与外发,原表零改动
结构异常(空值/重复/格式/公式不成立)+ 业务异常(负数/超阈值/跳变/状态矛盾)分级,保留原始行号与影响金额
按发票号码+代码+金额+日期组合查重,拦住重复报销与重复入账
进销项发票台账,按月/客户/税率汇总,导出 CSV
多银行 CSV/Excel 流水归一化成统一字段与方向标记
流水与账面按金额+日期窗口匹配,输出已勾对/单边与余额调节表
从业务单据表按科目映射批量生成凭证草稿,借贷平衡预检
40+ 指标(偿债/营运/盈利/成长)+ 多期趋势与同业占位
增值税/附加/个税/印花税/所得税预缴,附公式与政策依据
金额大写、含税不含税互算、价税分离、尾差分摊、百分比反算
从带文本层的数电票 PDF 抽取号码/日期/金额/税率/购销方
SKILL.md 为准。