按人部门类别汇总报销金额与笔数并超阈值标出,缺金额或缺维度的行单列,合计必须守恒
expense-summarySKILL.md 为准。> **本地运行,零网络、免 API Key、数据不出电脑。** > 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。 # 费用报销汇总 报销表汇总看着简单,做错却很隐蔽:某行金额没填、某行忘了填部门, 如果这行「照常加进合计」,三个维度加总会比总账多出一截; 如果这行被悄悄丢掉,合计又会对不上账面。 本包的原则:**缺一样就整行单列,不参与任何维度合计,并在异常表里写明缺的是什么。** 这样「输入 = 主表 + 异常」永远守恒,合计对不上时不用猜是哪一行的问题。 ## 输入 / 输出 ### 输入:1 个报销明细表(.xlsx / .csv) | 列 | 必须 | 说明 | |---|---|---| | 报销金额 | **必须** | 缺失 / 不是数字 → 单列;≤ 0 → 单列 | | 员工(报销人) | **必须** | 缺失 → 无法归属到「按员工」维度,整行单列 | | 部门 | **必须** | 缺失 → 无法归属到「按部门」维度,整行单列 | | 费用类型(费用类别) | **必须** | 缺失 → 无法归属到「按类别」维度,整行单列 | | 报销单号 | 可选 | 只是让异常表更好查 | ### 输出:四件套(进 `_out/`,源文件一个字节都不动) | 文件 | 内容 | |---|---| | `exp_主表.csv` | 三个维度分别一行(按员工 / 按部门 / 按费用类别):金额、笔数、金额占比、笔数占比、单笔均值、超阈值标志 | | `exp_异常表.csv` | 被排除的行:缺什么、金额多少、风险等级、原始行号 | | `exp_校验表.csv` | 判定口径、阈值、笔数与金额守恒、各类排除行数 | | `fin-log.jsonl` | 处理日志(追加) | ## 用法 ```bash PY="<python 3.8+ 路径>" # 纯标准库,无需 pip install "$PY" <skill目录>/scripts/expense_sum.py 报销明细.xlsx --execute ``` 常用参数: ```bash # 改阈值:金额超 5 万、笔数超 20 笔即标出 "$PY" expense_sum.py 报销明细.xlsx --alert-amount 50000 --alert-count 20 --execute # 指定输出目录 + 记录操作人 "$PY" expense_sum.py 报销明细.xlsx --out-dir _out --operator 张三 --execute # 先预览、确认无误再落盘 "$PY" expense_sum.py 报销明细.xlsx ``` **默认不写盘**——不加 `--execute` 只打印预览。 ## 真实输出样例 实测(10 笔报销,阈值 2 万元 / 10 笔): ``` 方案:exp_报销明细_好表.xlsx(10 行数据,10 列) --- 汇总结果(主表,共 16 行)--- 维度 维度值 报销金额 笔数 金额占比 笔数占比 单笔均值 超阈值标志 按员工 吴九 6800.00 1 7.05% 10.00% 6800.00 正常 按员工 周八 2400.00 1 2.49% 10.00% 2400.00 正常 按员工 孙七 3000.00 1 3.11% 10.00% 3000.00 正常 按员工 张三 27200.00 2 28.19% 20.00% 13600.00 金额超 20000 按员工 李四 41600.00 2 43.11% 20.00% 20800.00 金额超 20000 按员工 王五 5200.00 1 5.39% 10.00% 5200.00 正常 按员工 赵六 8800.00 1 9.12% 10.00% 8800.00 正常 按员工 郑十 1500.00 1 1.55% 10.00% 1500.00 正常 按部门 技术部 11800.00 2 12.23% 20.00% 5900.00 正常 按部门 财务部 34000.00 3 35.23% 30.00% 11333.33 金额超 20000 按部门 销售部 50700.00 5 52.54% 50.00% 10140.00 金额超 20000 按费用类别 办公 32800.00 2 33.99% 20.00% 16400.00 金额超 20000 按费用类别 培训 3000.00 1 3.11% 10.00% 3000.00 正常 按费用类别 差旅 12200.00 3 12.64% 30.00% 4066.67 正常 按费用类别 招待 39700.00 3 41.14% 30.00% 13233.33 金额超 20000 按费用类别 设备 8800.00 1 9.12% 10.00% 8800.00 正常 合计:有效 10 笔 / 96500.00 元 ``` 异常路径实测(缺金额 / 负金额 / 缺维度): ``` --- 异常表(5 条,不参与合计)--- [高] 行2 BX101 钱一 报销金额缺失或不是数字,本行不参与任何合计 [中] 行3 BX102 孙七 部门缺失,无法归属到对应维度,本行不参与任何合计 [中] 行4 BX103 周八 费用类别缺失,无法归属到对应维度,本行不参与任何合计 [高] 行5 BX104 报销金额非正(-3000.00):疑似未填写或红字冲销,本行不参与任何合计;员工、部门、费用类别缺失,无法归属到对应维度,本行不参与任何合计 [中] 行6 BX105 吴九 报销金额非正(0.00):疑似未填写或红字冲销,本行不参与任何合计 ``` 校验表的守恒行: ``` 守恒断言(输入 = 主表 + 异常),10 笔 = 10 笔 + 0 行;金额守恒 96500.00 = 96500.00 + 0.00,差异 0.00 缺金额被排除的行,0 行 ``` 缺列时直接拒绝,不给半张表: ``` 【算不出】表里找不到 「员工」、「部门」、「费用类别」 列,无法汇总 建议:补上对应列或改表头后重跑 ``` ## 拒绝权:什么情况下拒绝执行 | 情况 | 本包做法 | |---|---| | 没有「报销金额」列 | 拒绝:算不出任何合计 | | 没有「员工 / 部门 / 费用类别」列 | 拒绝:无法归属维度,汇总口径不成立 | | 某行金额缺失或不是数字 | 整行单列入异常表,不参与合计 | | 某行金额为 0 或负 | 整行单列入异常表(疑似未填 / 红字冲销) | | 某行缺员工 / 部门 / 费用类别 | 整行单列入异常表,不进任何维度 | | 输入金额 ≠ 主表 + 异常(差 > 0.01 元) | 拒绝输出并打印差异 | | 文件不存在 / 表为空 | 拒绝并提示 | **本包不会用「0」代替缺失金额,也不会把维度缺失的行硬塞进某一类里。** ## 关键设计 1. **维度缺失 = 整行排除**。有人可能想「部门空着就归到『未分类』」, 但那样各维度合计就无法互相印证了。本包选择整行单列,守恒才有意义。 2. **三个维度别重复求和**。同一笔钱同时属于「员工 / 部门 / 类别」三个维度, 三个维度各自之和都等于总金额;把三个维度加在一起会变成三倍。 3. **阈值只标不改**。金额超阈值、笔数超阈值只在「超阈值标志」列打标, 不删数、不改数,阈值本身写进校验表备查。 4. **占比的分母是有效金额 / 有效笔数**。分母为 0 时写「占比不可计算」, 不输出 0% 冒充结果。 5. **笔数与金额两套守恒都查**:输入行数 = 有效笔数 + 异常行数, 输入金额 = 主表金额 + 异常表金额,差 0.01 元以内。 ## 人工复核(必读) - 「报销金额」是**实报金额**还是**申请金额**?本包按列名为准,口径不一致会直接影响占比 - 金额为 0 的行被排除了。如果贵司确实存在「0 元报销」业务(如纯跑腿), 请在明细里单独标注,再考虑放宽本包的排除规则 - 负数金额通常是红字冲销,要跟被冲销的原始单一起看,别只盯这一行 - 超阈值只是「值得看一眼」,不等于「有问题」;差旅、招待、设备的行业水平差异极大 - 员工重名(同名不同人)会让「按员工」汇总失真,必要时先用工号做维度 ## 相邻路线转交 | 用户要做的事 | 转交给 | |---|---| | 报销单合规审核(超标 / 缺票 / 重复) | `expense-reimburse-check` | | 费用标准与超标判定 | `expense-reimburse-check` | | 部门费用排名与人均降本 | `dept-cost-analysis` | | 预算 vs 实际差异 | `budget-execution` | | 管理层一页摘要 | `exec-summary` | ## 可直接复制的说法 ```text 把这张报销明细按员工、部门、费用类别三个维度汇总一下, 金额和笔数都要,占比也给我,超过 2 万或者超过 10 笔的标出来。 金额空着、填成 0 或者负数的行,单独列一张异常表,不要参与合计。 员工、部门、费用类别任何一个字段空着的行也单独列出来, 我要的是「输入 = 主表 + 异常」能对得上,合计不能多也不能少。 分母为 0 的时候写「不可计算」,不要给我 0%。 ``` ## 做完怎么算完成 - [ ] 主表三个维度的合计已互相核对,都等于有效金额合计 - [ ] 校验表「守恒断言」的笔数与金额差异都是 0 - [ ] 异常表里每一行都被人工追过:是漏填、还是红字冲销 - [ ] 缺金额被排除的行数 + 金额非正的行数 + 维度缺失的行数 = 异常表行数 - [ ] 阈值已按本公司实际口径调整,并写进校验表 - [ ] 已加 `--execute` 落盘到 `_out/`,原表未改动 --- 本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。 版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。 本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。 允许个人及企业内部免费使用、复制、修改,包括内部生产环境。 未经书面许可,不得将本 Skill 或其修改版作为商业服务对外销售、转售或提供托管服务。 各版本发布之日起 4 年后自动转为 Apache License 2.0。详见随包 `LICENSE.md`。
按工时/产量/面积/收入等动因分摊,输出分摊过程表
按产品/客户/区域/月份拆解毛利与贡献边际
账龄分段、坏账计提测算、客户风险排序
预算 vs 实际的额差率差与预警清单
盈亏平衡点、安全边际、敏感性与情景测算
月度经营分析的数字、结论与图表数据源一次产出
理论期末=期初+入库-出库,与系统/盘点/账面三方比对,负库存与异常单价优先,按影响金额排序
按部门/项目/供应商汇总增长贡献,区分一次性与持续性费用,识别单价上涨/重复采购/供应商集中
一句话结论+5 个核心指标+3 个关键变化+风险影响+待决策事项,事实/假设/建议三段分开,每个结论带数据依据
按客户算收入成本毛利毛利率,亏损客户与成本缺失单列标高风险,不按 0 成本算毛利
按发票号码+代码+金额+日期组合查重,拦住重复报销与重复入账
进销项发票台账,按月/客户/税率汇总,导出 CSV
SKILL.md 为准。