部门费用排名、人均费用、费用率与增速预警,人均分母缺失就写不可计算,绝不硬算
dept-cost-analysisSKILL.md 为准。> **本地运行,零网络、免 API Key、数据不出电脑。** > 四项诚实承诺:① 算不出就说算不出,绝不编造数字;② 高危动作强制人工确认;③ 幂等断点,绝不重复副作用;④ 全程留痕可审计。 # 部门费用与降本分析 部门费用排名谁都会算,真正容易错的是**分母**:人数取的是不是本期的人?上期数据是不是和本期混在一起累加了? 一个人都没有的部门,人均费用到底是 0 还是算不出来? 本包把口径定死: - **人数与收入只取「本期」**——上期行只用于算增长率,绝不重复计入人数与收入 - **人均费用 = 部门费用合计 / 部门人数**:人数缺失写「—」并标不可计算,人数为 0 写「不可计算:部门人数为 0」,绝不除出 0 或 Infinity - **费用率 = 部门费用合计 / 部门收入**:收入缺失写「—」,收入为 0 写「不可计算:部门收入为 0」 - **增长率需要两个期间**:只有一个期间标「无法校验」,上期费用为 0 标「不可计算:…增长率无定义」 - **增长率 > 50% 记高风险,> 30% 记中风险**,并额外输出一份 `dc_降本清单.csv` 直接可用于降本讨论 ## 输入:一张部门费用明细表 | 列名 | 必填 | 说明 | |---|---|---| | 部门 / 责任部门 / 成本中心 | 是 | 按部门归集 | | 费用项目 / 费用类别 / 科目名称 | 是 | 这一笔是什么费用 | | 发生额 / 金额 / 费用金额 | 是 | 这一笔多少钱 | | 期间 / 月份 / 会计期间 / 年月 | 否 | 形如 `2026-09`。缺这一列时无法算增长率 | | 人数 / 部门人数 / 在职人数 | 否 | 算人均费用用 | | 收入 / 部门收入 / 营业收入 | 否 | 算费用率用 | > 部门行允许重复——同一部门一个月的多个费用科目就是多行,本包按部门聚合。 > 人数与收入也允许多行,**只累加「本期」**行;上期行只进增长率的分母计算,不进人数 / 收入。 ## 输出四件套 | 文件 | 内容 | |---|---| | `dc_主表.csv` | 部门 / 费用合计 / 笔数 / 人数 / 人均费用 / 费用率 / 增长率 / 增速备注 | | `dc_异常表.csv` | 增速过快、人均或费用率不可计算、金额缺失或为负(带风险等级) | | `dc_校验表.csv` | 本期期间、可比上期、费用合计、口径说明、剔除行数 | | `dc_降本清单.csv` | 可直接用于降本讨论的部门清单(按费用合计降序) | | `fin-log.jsonl` | 处理日志(追加) | ## 用法 ```bash PY="<python 3.8+ 路径>" # 纯标准库 "$PY" <skill目录>/scripts/dept_cost.py 部门费用表.xlsx --execute ``` **默认不写盘**——不加 `--execute` 只打印预览。 ```bash "$PY" dept_cost.py 部门费用表.xlsx --out-dir _out --operator 张三 --execute ``` ## 真实输出 ``` 已生成 dc_降本清单.csv(5 个部门) 方案:部门费用表.xlsx(21 行,5 个部门,本期 = 2026-09) 部门 费用合计 笔数 人数 人均费用 费用率 环比/同比 技术部 508000.00 2 18.0 28222.22 56.44% 20.95% 销售部 374000.00 3 12.0 31166.67 22.26% 36.50% 财务部 224000.00 2 6.0 37333.33 56.00% 5.66% 客服部 152000.00 2 5.0 30400.00 47.50% 5.56% 行政部 132000.00 2 4.0 33000.00 — 106.25% (全部部门合计) 1390000.00 11 45.0 30888.89 — — --- 异常表(2 条)--- [中] 销售部 费用比上期增长 36.50%,增速偏快(+100000.00 元),建议关注 [高] 行政部 不可计算:部门收入为 0;费用比上期增长 106.25%,增长过快(+68000.00 元),建议列为降本重点 ``` 失败路径(实测,全部不崩溃、给假数,而是标「不可计算 / 无法校验」并进异常表): ``` --- 坏_部门费用_单期.xlsx(表里只有一个期间)--- [中] 技术部 无法校验:表里只有一个期间(2026-09),没有可比对的上期 [中] 销售部 无法校验:表里只有一个期间(2026-09),没有可比对的上期 ...(每个部门各一条) --- 坏_部门费用_人数为0.xlsx --- 生产部 200000.00 1 0.0 — — — (全部部门合计) 200000.00 1 — — — — → [中] 生产部 不可计算:部门人数为 0;不可计算:表内没有该部门的收入,无法算费用率;无法校验:表里只有一个期间((未标期间)),没有可比对的上期 --- 坏_部门费用_收入为0.xlsx --- 行政部 54000.00 1 — — — — (全部部门合计) 54000.00 1 — — — — → [中] 行政部 不可计算:表内没有该部门的人数,无法算人均费用;不可计算:部门收入为 0;无法校验:表里只有一个期间((未标期间)),没有可比对的上期 --- 坏_部门费用_金额为负.xlsx --- [高] 销售部 金额为负(-30000.00),疑似红字冲销未处理,该行已剔除,不参与费用排名 --- 坏_部门费用_金额缺失.xlsx --- [高] 销售部 金额为缺失或无法识别为数字,该行未出表 --- 坏_部门费用_空表.xlsx --- 【算不出】表里没有任何一行取得到部门与有效金额,出不了部门费用表 建议:确认部门列与金额列,或先跑 fin-table-clean 清理空行 本包不会给一个看似合理的替代数字 —— 财税场景算错比不做更危险。 ``` ## 关键设计(容易踩的坑) 1. **人数 / 收入只算本期**。表中同时存在 2026-08 与 2026-09 行时, 只有 `r["period"] == cur_p` 的行参与 `agg` 的人数与收入累加;上期行只喂给 `prev` 用于增长率。 否则「总人数」会变成两期之和,人均费用直接腰斩。 2. **期间按日期排序取最新为本期,不是按字符串排序**。用 `YYYY-MM` 正则解析后按元组排序, `2026-10` 不会排在 `2026-9` 前面。 3. **三态判定,别把「无法校验」当「通过」**: - `可计算` → 出数 - `不可计算:…` → 分母缺失或为 0(人数 / 收入 / 上期额) - `无法校验:…` → 只有一个期间,无比对对象 4. **负数行剔除而不是取绝对值**。红字冲销未处理时取绝对值会把冲销当成新增费用,导致排名失真。 5. **人均 / 费用率是部门级口径**,不是全公司平均;同一部门多行人数只累加一次(本期)。 ## 「拒绝权」:什么情况下拒绝执行 | 情况 | 处理 | |---|---| | 表里没有任何一行取得到部门与有效金额 | 拒绝输出:`【算不出】表里没有任何一行取得到部门与有效金额,出不了部门费用表` | | 缺少必须的列(部门 / 费用金额) | 拒绝输出并列出可识别的别名 | | 文件路径不存在 | 拒绝输出:`【算不出】找不到文件` | | 单行人数为 0 | 该部门人均费用标「不可计算:部门人数为 0」,不拒绝整表 | | 单行金额为负 / 金额缺失 | 该行进异常表,写明已剔除 | | 只有一个期间 | 增长率标「无法校验」,不拒绝整表 | > 注意区分:**空表拒绝整包**,单行坏数据只影响该行 / 该部门。 ## 人工复核(必读) - 「人数」取的是在职人数还是参与分摊的人数,直接决定人均费用高低,看表先确认口径 - 行政部的「费用率」为 `—` 通常是该部门不产生收入(职能部门),不是算不出来,属正常现象 - 增长率受预算下达节奏影响:季节性费用(如年终奖、审计费)会导致单月暴涨,需结合业务判断 - 费用合计包含折旧摊销等非现金项目,「降本」时不能直接按此数砍 - 本包只做部门维度的费用观测,不重复分摊共同成本;共同成本分摊请用 `cost-allocation` - 分析结果不改动任何凭证,降本结论最终由对应财务岗位确认 ## 相邻路线转交 | 用户要做的事 | 转交给 | |---|---| | 费用怎么分摊到部门 | `cost-allocation` | | 按客户 / 产品看毛利,找亏损源头 | `gross-margin-analysis` | | 超预算科目怎么压 | `budget-execution` | | 费用报销的逐笔超阈值明细 | `expense-summary` | | 降本结论写成管理层摘要 | `exec-summary` | ## 可直接复制的说法 ```text 按部门出一下费用分析:费用合计从高到低排名,同时给人均费用和费用率。 人数缺失或为 0 的部门,人均费用直接写「不可计算:部门人数为 0」,不要算成 0。 部门收入为 0 的,费用率也写不可计算,不要除出无穷大。 上期为 0 的,增长率写不可计算;只有一个期间的,写无法校验,不要当成 0 增长。 费用比上期增长超过 50% 的标高风险,超过 30% 的标中风险,我要一份降本清单。 ``` ## 做完怎么算完成 - [ ] 校验表里的「本期期间」与「可比上期」都符合预期 - [ ] 人数与收入只含本期,没有两期相加 - [ ] 所有「—(不可计算 / 无法校验)」的格子都人工确认过原因 - [ ] 没有出现人数为 0 却被算出人均费用的部门 - [ ] 增长率超过 30% / 50% 的部门都已逐一看过(预算节奏 or 真实上涨) - [ ] `dc_降本清单.csv` 与 `dc_主表.csv` 的部门口径一致 --- 本 Skill 采用 BUSL-1.1 许可(源码可见,可自由使用)。 版权所有 © 2026 律令科技(深圳)有限公司(@lexord-technology)。 本技能由律令科技(深圳)有限公司开发,**财友云(caiyouyun.cn)**发布与展示。 允许个人及企业内部免费使用、复制、修改,包括内部生产环境。 未经书面许可,不得将本 Skill 或其修改版作为商业服务对外销售、转售或提供托管服务。 各版本发布之日起 4 年后自动转为 Apache License 2.0。详见随包 `LICENSE.md`。
按工时/产量/面积/收入等动因分摊,输出分摊过程表
按产品/客户/区域/月份拆解毛利与贡献边际
账龄分段、坏账计提测算、客户风险排序
预算 vs 实际的额差率差与预警清单
盈亏平衡点、安全边际、敏感性与情景测算
月度经营分析的数字、结论与图表数据源一次产出
按部门/项目/费用类型三维汇总,本期-上期-变动额-变动率,未审批与缺发票不入正式汇总,超预算单列
理论期末=期初+入库-出库,与系统/盘点/账面三方比对,负库存与异常单价优先,按影响金额排序
一句话结论+5 个核心指标+3 个关键变化+风险影响+待决策事项,事实/假设/建议三段分开,每个结论带数据依据
按客户算收入成本毛利毛利率,亏损客户与成本缺失单列标高风险,不按 0 成本算毛利
按发票号码+代码+金额+日期组合查重,拦住重复报销与重复入账
进销项发票台账,按月/客户/税率汇总,导出 CSV
SKILL.md 为准。