中小企业财务模型
把用户的自然语言需求,转化为一份能直接填报、公式已连通、口径已对齐行业的 Excel 财务模型。
核心原则
> 行业决定「口径」,模型决定「结构」。两者都确定之前,不生成任何表格。
同一张"利润表",工业企业要按品种法分摊制造费用,施工企业要按完工百分比法确认收入,房地产企业要按项目分期结转成本 —— 结构相同、口径完全不同。所以本技能的第一动作永远是判定行业与模型,而不是先建 Sheet。
三条不可妥协的规则:
| # | 规则 | 说明 |
|---|---|---|
| 1 | 判定闸门 | 行业:命中默认七类 → 不再追问,直接交付该行业模版;落在七类之外 → 先输出「参考迁移声明」(本 skill 将参考 {参考行业} 的《{模型名}》,创建 {用户行业} 的《{模型名}》),再直接创建。模型:不能唯一确定 → 必须追问(2~4 个候选),不臆断、不"先做一版给你看看" |
| 2 | 公式优先 | 交付的工作簿必须是公式连通的活模型,禁止只填静态数字的死表格 |
| 3 | 不臆造数据 | 用户的真实经营数据由用户填报;需要示例时用明确标注的【示例】占位值,并集中放在"假设"页 |
五步工作流
按顺序执行,第 1、2 步是闸门,未通过不得进入第 3 步。
用户输入需求
│
├─ 第 0 步:需求接收与结构化
│ 剥离需求中的「行业信息」「模型诉求」「企业特征」「特殊约束」四类要素
│
├─ 第 1 步:行业判定 ← 判定闸门
│ 命中默认七类 → 读取对应行业档案,直接交付(不再就行业追问)
│ 落在七类外 → 映射到最接近的参考档 + 输出「参考迁移声明」→ 直接创建
│ 无法判断 → 调用 AskUserQuestion 追问(最多 2 轮)
│
├─ 第 2 步:模型判定 ← 闸门
│ 能唯一确定 → 读取对应模型规格 + 与行业的适配差异
│ 不能确定 → 给出 2~4 个候选模型供用户选择
│
├─ 第 3 步:生成模版
│ 读行业档案 + 模型规格 + 生成规范 → 产出 .xlsx + 结构说明
│
└─ 第 4 步:反馈迭代
定位变更点 → 评估影响面 → 最小化重生成 → 输出变更说明
第 0 步:需求接收与结构化
把用户的原始诉求拆成四类要素,逐项记录:
| 要素 | 说明 | 缺失时的处理 |
|---|---|---|
| 行业信息 | 用户提到的行业、产品、业务模式、项目类型 | 进入第 1 步追问 |
| 模型诉求 | 用户想解决的管理问题("想控成本""想定价格""想知道这个项目值不值得投") | 先做「诉求 → 模型」反查(见下方反查表),仍不唯一则追问 |
| 企业特征 | 规模、组织架构、是否有多个产品线/项目/门店/车辆、是否多期核算 | 影响 Sheet 的行维度设计,缺失时追问或按最简形态生成并标注 |
| 特殊约束 | Excel 版本、是否需要月度分解、是否需部门维度、是否需要图表 | 影响函数选型,缺失时按 Excel 2016 保守处理并说明 |
诉求 → 模型反查表(用户常不说模型名,只说管理问题):
| 用户这么说 | 指向模型(控制表模版正式名) |
|---|---|
| "明年要花多少钱""资金怎么安排""各部门报预算" | 全面预算模型 |
| "ROE 为什么降了""怎么把利润率和周转率串起来""给各部门定 KPI" | 经营分析模型(基于杜邦分析体系) |
| "这批产品成本到底多少""制造费用怎么分摊""毛利率不准" | 成本计算-标准成本模型(定额/标准口径,工业企业已内置)/ 成本计算-作业成本模型(作业动因口径,工业企业已内置)——按成本分配口径二选一;两者共用一份 model-cost-accounting.md |
| "该卖多少钱""怎么定价才有竞争力""要不要打折" | 产品定价模型 |
| "这个项目值不值得投""几年能回本""内部收益率多少" | 项目投资决策分析模型 |
| "销量要多少才不亏""保本点在哪""要不要接这个低价单" | 本量利CVP模型 |
| "战略怎么落地""怎么考核部门""除了财务还看什么" | 平衡记分卡BSC模型 |
| "资金台账怎么记""承兑汇票/票据台账""银行贷款台账""这个月钱够不够、票据什么时候到期、贷款还剩多少" | 资金管理台账模型(控制表第 11 行,七行业均已内置成品) |
| "做个月度资金计划""归集资金需求再安排付款""要生产采购/基建/设备/薪酬/费用报销的付款明细表""哪几个月会缺钱、要准备多少融资" | 月度资金计划模型(控制表第 12 行,七行业均已内置成品) |
| "账上钱够不够""会不会断流""回款和付款怎么匹配" | 现金流量管理模型(控制表未列 · 技能扩展规格) |
> 本表按用户提问习惯排列;模型的正式清单、控制表行序与规格文件对照见「第 2 步:模型判定」的模型索引表。
> 复合诉求(如"做一套明年预算,还要能看各部门的杜邦分解")→ 按主模型 + 挂载模型处理,见 references/industry-model-matrix.md 的「复合模型组合」章节。
第 1 步:行业判定(闸门)
本技能覆盖七类行业,全部定义在 references/industries/:
| 行业 | 档案 | 一句话特征 | 对应国民经济行业门类 |
|---|---|---|---|
| 工业企业 | industry-manufacturing.md | 有生产环节,需归集料工费、分摊制造费用 | C 制造业(13—43) |
| 商品流通企业 | industry-commerce.md | 买进卖出,核心是进销存与毛利管理 | H 批发和零售业(63、65) |
| 施工企业 | industry-construction.md | 按项目/工程核算,完工百分比法确认收入 | E 建筑业(47—50) |
| 房地产开发企业 | industry-realestate.md | 项目分期开发,成本对象是"期/栋",预售与结转错配 | K 房地产业(72,重点 721) |
| 旅游饮食服务企业 | industry-hospitality.md | 服务业,核心是翻台率/入住率/人均消费等运营指标 | I 住宿和餐饮业(66—67)+ O 居民服务和其他服务业(82—83) |
| 交通运输企业 | industry-transport.md | 按车辆/线路/航次核算,成本主体是油耗、路桥、折旧 | F 交通运输、仓储和邮政业(51—59) |
| 软件与信息技术服务业 | industry-software.md | 无实体存货,成本对象是项目/合同/产品线,人力是第一生产要素 | G 信息传输、计算机服务和软件业(63、64、65,重点 65) |
七类行业与《国民经济行业分类》(GB/T 4754)的完整对照(含 A—T 全 20 门类的覆盖判定、中类细分、边界情形归位规则)见 references/industries/index.md 的「行业 → 国民经济行业分类与代码 对照表」。
> 用户若直接给出 GB/T 4754 的门类字母或大类代码(如"C 制造业""行业代码 522"),按 index.md 的对照表直接归位到上表某一档,无需再追问行业。
判定规则(按优先级):
- 用户直接说了行业名 → 采纳并映射到上表("我做物流的" → 交通运输企业)
- 用户给出了国民经济行业代码(门类字母或 2/3/4 位代码)→ 查 index.md 对照表归位
- 用户描述了业务但不点名("我们有车间""我们是做批发的""我们接工程")→ 用下方特征反查
- 用户描述跨多个行业或确实无法判断 → 必须追问,不得默认取"工业企业"
- 用户所述行业落在七类之外(其余 12 个门类)→ 不再追问行业本身,改走「参考迁移」:按下方映射表选定参考档 → 输出参考迁移声明 → 直接创建
> 本步的核心是两种情形的分流:
>
> - 情形 A · 命中默认七类 → 直接交付。定位到该行业的模版(有内置成品时优先复制成品做增量改造),不再就行业向用户确认,也不要求用户在七类中再挑一次。
> - 情形 B · 落在七类之外 → 先声明、再创建。先输出「参考迁移声明」(见下文固定句式),随后照常执行第 2、3 步产出该行业名下的模版。不得静默套用某一档口径,不得停在声明处等待确认,也不得以"无法提供"收尾。
业务特征 → 行业反查:
| 用户描述里的关键词 | 判定 |
|---|---|
| 车间、产线、BOM、工单、料工费、制造费用、在制品、完工入库 | 工业企业 |
| 进货、批发、零售、门店、SKU、库存周转、供应商账期、库存商品 | 商品流通企业 |
| 工程、项目、标段、甲方、竣工结算、工程进度、分包、施工合同 | 施工企业 |
| 拿地、地块、容积率、预售、一期二期、按揭、开发成本、结转 | 房地产开发企业 |
| 酒店、餐厅、民宿、客房、餐厅、翻台率、入住率、客单价、景区 | 旅游饮食服务企业 |
| 车队、运输、线路、运费、油耗、路桥费、车辆折旧、单程、航次 | 交通运输企业 |
| 软件、SaaS、系统集成、项目开发、定制开发、订阅、人月、功能点、验收、驻场、IT 运维、云资源 | 软件与信息技术服务业 |
追问话术模板(行业不明时):
> 为了把口径做准,我需要先确认一下贵司属于哪类企业(不同行业的科目体系和成本口径差别很大):
> - 工业企业(有生产/加工环节)
> - 商品流通企业(进货后直接销售)
> - 施工企业(承接工程/项目施工)
> - 房地产开发企业(开发楼盘并销售)
> - 旅游饮食服务企业(酒店/餐饮/旅游服务)
> - 交通运输企业(车队/物流/运输服务)
> - 软件与信息技术服务业(软件 / SaaS / 系统集成 / IT 服务)
>
> 直接说行业名或简单描述业务都可以。
> 注意:本模板仅在行业信息缺失、或同时命中多档无法判断主口径时使用。若用户已说明行业且该行业落在七类之外,不要用本模板——改用下方「情形 B」的参考迁移声明,避免把口径选择的责任推回给用户。
情形 B 详解:行业落在默认七类之外 → 参考迁移
本技能默认覆盖 7 档行业 / 8 个国民经济行业门类——C 制造业、E 建筑业、F 交通运输仓储和邮政业、G 信息传输、计算机服务和软件业、H 批发和零售业、I 住宿和餐饮业、K 房地产业、O 居民服务和其他服务业(I 与 O 合并为"旅游饮食服务企业"一档)。
用户所述行业落在其余 12 个门类(A 农林牧渔、B 采矿、D 电力燃气及水的生产和供应、J 金融、L 租赁和商务服务、M 科学研究技术服务、N 水利环境和公共设施管理、P 教育、Q 卫生社会保障和社会福利、R 文化体育和娱乐、S 公共管理和社会组织、T 国际组织)时,按以下三步处理(缺一不可):
| 顺序 | 动作 | 要点 |
|---|---|---|
| 1 | 映射参考档 | 查下方「参考档三分法」与「门类映射表」,选定最接近的一档默认行业作为参考口径。映射规则是先定的,不是临场发挥 |
| 2 | 输出参考迁移声明 | 用固定句式告知用户,四要素缺一不可:参考哪一档 + 哪份模版 + 创建到哪个行业 + 哪份模版 |
| 3 | 直接创建 + 留痕 | 照常执行第 2、3 步产出模版;结构说明中必须加「口径差异说明」章节,逐条列出参考口径与用户实际行业的差异、不适用模块、缺失模块 |
> 红线:不得静默套用某一档口径(不声明就按工业或服务口径出表),也不得以"无法提供"收尾。声明是动作前置说明,不是询问——声明后直接创建,不需要用户再确认。
参考档三分法(选档依据:先看业务实质,再看门类)
| 业务实质 | 参考档 | 判据 |
|---|---|---|
| 有生产/采掘/加工环节(把投入变成产出) | 工业企业 | 需归集料工费、分摊间接费用,成本对象是产品/工作面 |
| 项目制、合同制交付(一项一算、按进度确认) | 施工企业 | 成本对象是项目/合同,含垫资与回款、按里程碑收款 |
| 人力与场地为主的服务(无实体存货) | 旅游饮食服务企业 | 成本主体是人工与场地租金,按服务期间或人次确认收入 |
| 人力密集、按人月/项目交付、无实体存货(G 门类已覆盖) | 软件与信息技术服务业 | 成本动因是人月,收入按履约进度(投入法)或订阅期确认——G 门类(软件 / 信息技术服务 / SaaS / 系统集成 / 定制开发)直接归本档交付,不再参考旅游档 |
| 有实体存货的买进卖出 | 商品流通企业 | 进销存是核心,按进价与售价核算 |
| 载具/线路的位移服务 | 交通运输企业 | 成本对象是单车/单线/航次,成本动因是里程 |
门类 → 参考档映射表(12 个未覆盖门类的默认落点)
| 门类 | 门类名称 | 参考档 | 选档理由 |
|---|---|---|---|
| A | 农、林、牧、渔业 | 工业企业 | 种植/养殖/加工均需归集料工费,生物资产近似在制品 |
| B | 采矿业 | 工业企业 | 采掘即生产,按工作面归集料工费并分摊间接费用 |
| D | 电力、燃气及水的生产和供应业 | 工业企业 | 按产量归集分摊成本,固定成本占比高,成本性态与制造业一致 |
| J | 金融业 | 旅游饮食服务企业 | 服务业形态、无实物成本要素(差异最大,须重点声明) |
| L | 租赁和商务服务业 | 旅游饮食服务企业 | 场地租金与人力为主、按服务期间确认收入 |
| M | 科学研究、技术服务和地质勘查业 | 施工企业 | 以项目/合同为成本对象、按履约进度确认收入 |
| N | 水利、环境和公共设施管理业 | 施工企业 | 工程类业务,按单项工程核算(景区管理子类改参照旅游饮食服务) |
| P | 教育 | 旅游饮食服务企业 | 场地与师资为主、按学习人次确认收入 |
| Q | 卫生、社会保障和社会福利业 | 旅游饮食服务企业 | 人力密集、按人次服务(床位 ≈ 客房,与旅游档同构) |
| R | 文化、体育和娱乐业 | 旅游饮食服务企业 | 以客流/会员数/客单价为核心运营指标,与旅游口径同构 |
| S | 公共管理和社会组织 | 旅游饮食服务企业 | 服务型主体、无实体存货(差异大,仅适用非营利口径的简化预算) |
| T | 国际组织 | 旅游饮食服务企业 | 无实质可比档;若确无经营实体,改按通用管理会计骨架交付 |
高频细分 → 参考档(用户说的是细分业务名时,用本表取更精确的落点)
| 用户这么说 | 门类 | 参考档 |
|---|---|---|
| 软件 / SaaS / 内容 / 平台服务 / 游戏 / 直播 / 系统集成 / 项目制定制开发 / IT 运维服务 | G(覆盖内) | 软件与信息技术服务业 —— 属情形 A,直接交付,不走参考迁移 |
| 自营电商 / 网络零售(自有仓储与库存) | H(覆盖内) | 商品流通企业 —— 属情形 A,直接交付,不走参考迁移(GB/T 4754 的互联网零售归 H 批发和零售业) |
| 银行 / 券商 / 保险 / 基金 | J | 旅游饮食服务企业 |
| 律所 / 会计师所 / 管理咨询 / 猎头 | L | 旅游饮食服务企业(人工工时即成本动因) |
| 检测 / 认证 / 设计院 | M | 施工企业(项目制交付) |
| 污水处理 / 园林绿化 / 环卫 | N | 施工企业 |
| 学校 / 培训机构 | P | 旅游饮食服务企业 |
| 医院 / 诊所 / 养老院 | Q | 旅游饮食服务企业(床位≈客房) |
| 影视 / 出版 / 健身房 / KTV / 场馆 | R | 旅游饮食服务企业 |
| 政府 / 事业单位 / 协会 | S | 旅游饮食服务企业 |
> 若用户业务同时命中多档(如"互联网 + 自营仓"):按成本占比最高的那块业务定参考档,并在「口径差异说明」中写明另一块的差异。
固定句式 · 参考迁移声明(必须按此句式输出,四要素缺一不可)
> 您提到的 {用户所述行业} 属于国民经济行业分类的 {门类字母} {门类名称},不在本 skill 默认覆盖的七类行业之内。
>
> 本 skill 将参考 {参考行业} 的《{模型名}》模版,创建 {用户所述行业} 的《{模型名}》。
>
> - 参考理由:{一句话,取自上表「选档理由」}
> - 口径差异:参考口径与 {用户所述行业} 实际做法的差异,将在结构说明的「口径差异说明」章节逐条列出(含不适用模块与缺失模块),供您核对调整。
> - 如需换档,或改用不绑行业口径的通用管理会计骨架,告知即可切换。
完整示例(真实走法)
> 用户:"我们是做 SaaS 的,想要一份明年的全面预算表。"
>
> → 第 1 步:门类 G,已在覆盖内(软件与信息技术服务业)→ 情形 A:直接交付,无需声明
> → 第 2 步:模型 = 全面预算模型(唯一命中)
> → 第 3 步:直接生成——但注意全面预算模型尚未做软件行业配置版(该行业目前内置成品为 9 类中的其他模型,全面预算仍是六行业版),
> 因此本模型按「参考迁移」处理并声明:「本 skill 将参考 旅游饮食服务企业 的《全面预算模型》模版,创建 软件与信息技术服务业 的《全面预算模型》。」
> 随后照常生成,并在结构说明附「口径差异说明」(如:删生产预算;采购预算改为云资源/带宽/内容采购;新增订阅收入递延与获客成本 CAC 用户资产;人员成本权重上调至 50%~70%)
> 同一行业「部分模型已配置、部分未配置」是常态:如软件与信息技术服务业在经营分析 / 项目投资 / CVP / BSC / 标准成本 / 作业成本 / 产品定价 / 资金管理台账 / 月度资金计划 这 9 类为情形 A(内置成品直接交付),
> 而全面预算 / 现金流量管理为情形 B(参考迁移)。判定时按「行业 × 模型」逐个交叉格判断,不要一次性对整个行业下结论。
> 模型尚未确定时:先走第 2 步追问模型;待模型唯一确定后,把「行业参考档 + 模型名 + 用户行业」合并成一句声明,再进入第 3 步。声明与交付可在同一轮完成。
第 2 步:模型判定(闸门)
本技能覆盖九类模型,逐行对齐《财务模型控制表.xlsx》第 3~12 行共 10 行(其中第六类「成本计算」承载第 8、9 两行),全部定义在 references/models/:
| 控制表行 | 模版名称(控制表正式名) | 技能内简称 | 规格 | 解决的决策问题 |
|---|---|---|---|---|
| 第 3 行 | 全面预算模型 | 全面预算 | model-comprehensive-budget.md | 明年资源怎么分配、目标怎么拆到月/部门 |
| 第 4 行 | 经营分析模型 | 杜邦分析 | model-dupont.md | ROE 变动归因、部门 KPI 与盈利能力的关联 |
| 第 5 行 | 项目投资决策分析模型 | 项目投资 | model-capex.md | NPV / PI / IRR / 回收期,投或不投 |
| 第 6 行 | 本量利CVP模型 | CVP | model-cvp.md | 保本点、目标利润销量、经营杠杆 |
| 第 7 行 | 平衡记分卡BSC模型 | BSC | model-bsc.md | 财务/顾客/内部流程/学习创新四维战略落地 |
| 第 8 行 | 成本计算-标准成本模型 | 成本计算(标准成本) | model-cost-accounting.md | 按定额/标准口径归集与分摊成本、单位成本(已内置工业企业成品 v2.0) |
| 第 9 行 | 成本计算-作业成本模型 | 成本计算(作业成本) | model-cost-accounting.md | 按作业动因归集与分摊成本、单位成本(已内置工业企业成品 v1.0) |
| 第 10 行 | 产品定价模型 | 产品定价 | model-pricing.md | 定价区间、折扣底线、利润最大化(已内置工业企业成品 v1.0) |
| —(控制表未列) | 现金流量管理模型 | 现金流量 | model-cashflow.md | 现金缺口预警、回款付款匹配、滚动预测 |
| 第 11 行 | 资金管理台账(技能内称「资金管理台账模型」) | 资金台账 | 见下文「第八类模型(资金管理台账)」(七行业齐备 · 工业企业基准版 v1.0) | 月度资金台账 / 承兑汇票台账 / 银行贷款台账三本台账登记与监控 |
| 第 12 行 | 月度资金计划表(技能内称「月度资金计划模型」) | 资金计划 | 见下文「第九类模型(月度资金计划)」(七行业齐备 · 工业企业基准版 v1.0) | 月度资金需求归集、付款排程与执行、缺口预警与融资额 |
> 口径说明(六条):
> ① 控制表把「成本计算」拆为标准成本(第 8 行)与作业成本(第 9 行)两行(差别在成本分配表口径:定额/标准 vs 作业动因);两行均已交付工业企业基准版内置成品(工业企业-成本计算-标准成本模型.xlsx / 工业企业-成本计算-作业成本模型.xlsx),规格库暂以一份 model-cost-accounting.md 同时承载两行——生成时按用户选择的分配口径取用对应章节(该文件已并列两个基准实现的页结构对照),规格文件拆分列为待办。
> ② 控制表已于 2026-09-29 扩为 10 行:新增第 11 行「资金管理台账」与第 12 行「月度资金计划表」,两行在控制表六行业列全部标「内置」(12 个「内置」格 = 控制表的 6 个行业 × 2 行)。⚠ 控制表只有 6 个行业列(工业 / 商品流通 / 施工 / 房地产开发 / 旅游饮食服务 / 交通运输),本技能另有软件与信息技术服务业配置版,故本技能实际交付的资金类成品为 14 份(6 行列 × 2 行 + 软件 2 份)——文档中凡「控制表六行业列」均指控制表本身的列数,不随技能新增行业而变。本技能这两类原本作为「控制表未列」的技能扩展规格交付,现转为正式模版,章节编号沿用第八类 / 第九类,与行号一一对应。⚠ 技能章节名与成品文件名保留「…模型」后缀与「月度资金计划」简称(控制表第 12 行正式名为「月度资金计划表」)——三处命名并存,路由与对账时以控制表行号为准。
> ③ 控制表第 8/9/10 行在工业企业列均标「内置」,三者的工业企业基准版均已交付成品:工业企业-成本计算-标准成本模型.xlsx(v2.0)、工业企业-成本计算-作业成本模型.xlsx(v1.0)、工业企业-产品定价模型.xlsx(v1.0)。前两者共用一套分步法骨架(差别只在成本分配口径),第三者复用前两者的成本口径继续推到价格——用户若先问成本再问定价,可直接以同一套产品/BOM/工序数据串起三个模型。
> ④ 「资金计划」与「资金台账」是姊妹模型(控制表第 12 行 / 第 11 行),均已内置七行业成品:资金计划管「钱要怎么花」(事前编排 + 事中跟踪,明细表一行一笔 + 按计划付款月 SUMIFS 归集),资金台账管「钱花到哪去了」(事后登记,三本台账 + 三视角恒等)。两者按同一月度口径可逐月对账(计划 vs 实际)。用户若同时要「编付款计划」和「记台账」,可两个都交付。
> ⑤ 第八、九两类模型已于 2026-09-29 完成六行业参数化迁移、2026-10-09 扩至七行业(「共享引擎 + 行业配置包」架构,新增行业 = 增加一个配置包、无需改引擎),七行业各有成品可直接交付;架构与配置键见下文「第八类模型」的〈行业配置层〉小节。
> ⑥ 现金流量管理模型仍不在控制表内(控制表 10 行无此行),但它是本技能既有的成熟规格,命中「钱够不够、会不会断流」类诉求时照常调用,仅在交付说明中标注「控制表未列」 —— 十类模型中这是唯一仍标「未列」的一类。
判定规则:
- 用第 0 步的「诉求 → 模型反查表」定位;命中唯一模型 → 情形 A(该「行业 × 模型」交叉格已覆盖)直接进入第 3 步;情形 B(该交叉格未覆盖)先输出「参考迁移声明」再进入第 3 步
- 命中多个模型 → 判断用户主诉求(要决策/要分析/要管控),选主模型,其余作为挂载页或后续迭代项
- 完全无法判定 → 给出 2~4 个最可能候选,用 AskUserQuestion 让用户选,并附一句"每个模型解决什么问题"
追问话术模板(模型不明时):
> 想确认一下您最想解决的是哪个问题,这决定表格的结构:
> - A. 明年怎么花钱、目标怎么拆 → 全面预算模型
> - B. 赚的钱为什么变少、各部门贡献多少 → 经营分析模型(杜邦分析体系)
> - C. 单个产品成本算不准、毛利对不上 → 成本计算模型(标准成本 / 作业成本)
> - D. 该定什么价、最低能打几折 → 产品定价模型
> - E. 这个项目值不值得投、几年回本 → 项目投资决策分析模型
> - F. 卖多少才不亏、要不要接这个低价单 → 本量利CVP模型
> - G. 战略怎么落到部门考核 → 平衡记分卡BSC模型
> - H. 现金流会不会断、钱怎么周转 → 现金流量管理模型(控制表未列)
> - I. 下个月各口子要付多少钱、付款怎么排、缺多少钱 → 月度资金计划模型(控制表第 12 行);若还要「逐票、逐笔、逐账户登记台账」→ 再叠加 资金管理台账模型(控制表第 11 行)
>
> 可以多选,我会做成主模型 + 挂载页的形式。
闸门通过后,必须同时读取:
1. 对应行业档案 references/industries/<industry>.md
2. 对应模型规格 references/models/<model>.md
3. references/industry-model-matrix.md 中该「行业 × 模型」交叉格的适配差异(这一步最常被忽略,却是"同一模型在不同行业长得不一样"的关键)
4. references/workbook-conventions.md 的生成规范
第 3 步:生成模版
执行顺序:
- 确认 Excel 版本:用户告知 > 从上一步对话推断 > 默认 Excel 2016(保守,不使用 XLOOKUP / LET / LAMBDA / FILTER 动态数组)
- 确定工作簿骨架:读模型规格里的「Sheet 结构」,按行业档案的「Sheet 调整」增删
- 写脚手架:调用
python scripts/scaffold_xlsx.py --industry <行业> --model <模型> --out <路径> --excel-version <版本>生成基础工作簿(含 Sheet、表头、公式骨架、假设页、说明页) - 行业化改造:按行业档案替换科目名称、成本核算方法、行业特有指标
- 补齐公式:确保所有计算单元格是公式而非硬编码值;跨 Sheet 引用用命名区域或明确的
'Sheet'!A1形式 - 校验:调用
python scripts/scaffold_xlsx.py --verify <路径>检查公式引用完整性、除零、循环引用 - 输出结构说明:按 assets/structure-note-template.md 生成一份说明(每个 Sheet 的用途、需填报区域、公式逻辑、行业口径说明)
- 交付:用
present_files呈现 .xlsx 与结构说明
工作簿统一约定(详见 references/workbook-conventions.md):
- Sheet 顺序:
说明→假设→输入→ 各计算页 →输出/看板 - 颜色约定:蓝字 = 需用户填报;黑字 = 公式自动计算;绿字 = 跨页引用;红字 = 校验/预警
- 命名:Sheet 名用中文且有业务含义(如
销售预算而非Sheet1);关键区域定义命名区域 - 单位:一律在表头标注(元 / 万元),并全表统一
- 页首表头(v1.3 起,全部模型/全部工作表统一):第 1 行
表格名称:<工作表名>
(01 编制说明页为模型全称)、第 2 行编制单位:__________ 编制人:______ 编制时间:____年__月__日、
第 3 行 口径/备注说明(原第 2 行说明行下移一行);第 4 行起仍是列标题与数据区。
表头恒占 3 行、sheet_header()返回值恒为 4,因此改造不引起任何公式行位移;
第 1~3 行合并到 P 列(含实际值/差额/达成率三列的页由add_actual_columns扩到 R 列);
由_budget_core.sheet_header()统一实现(封面页build_note()同步;工业企业专用生成器
build_mfg_budget.sheet_header()与脚手架scaffold_xlsx.py四类页保持一致文案常量
HDR_TABLE_LABEL/MAKE_INFO_LINE)
含三表联动的模型(全面预算 / 现金流量管理 / 项目投资分析)必读:
references/verified-patterns-budget.md
这份文件记录了已通过「配平校验 12/12 月 = 0 + 现金勾稽 12/12 月 = 0」验证的实现范式,
包含 9 个关键工程要点(现金流量表间接法恒等式骨架、利息不得双重扣减、
跨表引用必须带表名、比率行汇总不得 SUM、示例数据量级纪律、
独立公式求值器写法等)。生成任何三表联动模型前先读它,可避免最常见的配平失败。
第 4 步:反馈迭代
用户提出修改时,不要整份重做,按以下顺序处理:
| 步骤 | 动作 |
|---|---|
| 1. 定位 | 判断变更属于哪一类:① 行业口径调整 ② 模型结构增减 ③ 字段/行维度调整 ④ 公式逻辑修正 ⑤ 格式与呈现 |
| 2. 影响面 | 列出受影响的 Sheet 与公式链路(例如改"收入确认方法"会一路影响利润表、现金流、杜邦分解) |
| 3. 最小重生成 | 只改必要部分;优先在原文件上增量修改,保留用户已填数据 |
| 4. 变更说明 | 明确告诉用户:改了什么、影响哪些页、用户需要重新填报哪些区域 |
> 保留数据原则:若用户已在旧文件里填了数据,增量修改时必须保住这些数据;结构性变更导致无法保留时,先提示用户再执行。
脚本
| 脚本 | 用途 | 用法 |
|---|---|---|
| scripts/intake.py | 需求结构化:把用户原话解析成四类要素,输出缺口清单与追问建议 | python scripts/intake.py --text "用户原话" |
| scripts/match_model.py | 行业 × 模型匹配:反查行业、反查模型、返回交叉格适配差异与复合模型组合建议 | python scripts/match_model.py --text "用户原话" |
| scripts/scaffold_xlsx.py | 生成 / 校验工作簿:产出含 Sheet、表头、公式骨架的 .xlsx;--verify 校验公式 |
python scripts/scaffold_xlsx.py --industry 工业企业 --model 全面预算模型 --out out.xlsx |
| scripts/verify_formulas.py | 独立公式求值校验器(Evaluator):不依赖 Excel 求值全部公式,输出错误清单;支持 NPV/IRR/SLN/MIRR/^ |
python scripts/verify_formulas.py out.xlsx |
| scripts/validate_built_models.py | 批量验收:一次完成「公式零错误 + ★ 校验行归零 + 基准行业词无残留 + 替换副产物扫描」三项硬性检查,用于行业参数化改造后的回归;--allow <词> 显式声明良性碰撞词(如施工企业的「计件工资」会被「计价」词表误伤) |
python scripts/validate_built_models.py assets/built-models 本量利CVP模型 --baseline 工业企业 |
| scripts/build_treasury_ind.py | 资金管理台账生成器(10 页 · 三本台账)。七行业参数化:--industry 单出、--all --outdir 批量。行业差异全部收敛于 scripts/_packs_treasury.py |
python scripts/build_treasury_ind.py --all --outdir ./out |
| scripts/build_fundplan_ind.py | 月度资金计划生成器(12 页 · 6 类付款明细 + 三维度归集 + 缺口预警)。七行业参数化,同上一脚本的调用形态;行业差异收敛于 scripts/_packs_fundplan.py | python scripts/build_fundplan_ind.py --industry 施工企业 --out 施工企业-月度资金计划.xlsx |
脚本均为只读参考实现,主流程可绕过脚本直接按 references 手工构建工作簿;但生成后的公式校验必须执行。
> 维护本技能时的两条硬规则(本技能已两次踩中):
> ① 同一文件的多条编辑必须串行提交——并发提交时常常只保留一条、其余静默丢失(编辑工具仍返回"成功")。每轮编辑后必须回读或 grep 复核落盘结果,不要以编辑返回成功为准。
> ② 引用章节位置一律用模型正式名,不要用序号——industry-model-matrix.md 的明细节标题已改为「模型名 + 〔控制表第 N 行〕」;历史上按「第 N 节」的引用在矩阵重排后全部失效(build_bsc_mfg.py / build_capex_mfg.py / build_cvp_mfg.py 与两份结构说明现已全部改为按模型名引用)。
目录结构
sme-financial-model/
├── SKILL.md 本文件:五步工作流与路由
├── references/
│ ├── industries/ 七类行业档案
│ │ ├── index.md 行业总览、反查表、GB/T 4754 门类对照表
│ │ ├── industry-manufacturing.md 工业企业(门类 C 制造业 13—43)
│ │ ├── industry-commerce.md 商品流通企业(门类 H 批零 63、65)
│ │ ├── industry-construction.md 施工企业(门类 E 建筑业 47—50)
│ │ ├── industry-realestate.md 房地产开发企业(门类 K 房地产业 72)
│ │ ├── industry-hospitality.md 旅游饮食服务企业(门类 I 66—67 + O 82—83)
│ │ ├── industry-transport.md 交通运输企业(门类 F 交运仓储邮政 51—59)
│ │ └── industry-software.md 软件与信息技术服务业(门类 G 信息传输/计算机服务/软件 63—65)
│ ├── models/ 九类模型规格(含控制表第 11/12 行的资金两类)
│ │ ├── index.md 模型总览与反查表
│ │ ├── model-comprehensive-budget.md
│ │ ├── model-dupont.md
│ │ ├── model-cost-accounting.md
│ │ ├── model-pricing.md
│ │ ├── model-capex.md
│ │ ├── model-cvp.md
│ │ ├── model-bsc.md
│ │ └── model-cashflow.md
│ ├── industry-model-matrix.md 行业 × 模型适配矩阵(含复合模型组合)
│ ├── workbook-conventions.md 工作簿生成规范(命名/颜色/公式/版本)
│ └── glossary.md 术语与口径对照(七行业科目对照表)
├── scripts/
│ ├── intake.py 需求结构化
│ ├── match_model.py 行业×模型匹配
│ ├── scaffold_xlsx.py 工作簿生成与校验
│ ├── _budget_core.py 六行业全面预算共享引擎(研发页/人力归类/三表联动/利润表加计)
│ ├── verify_formulas.py 独立公式求值校验器(Evaluator)
│ ├── validate_built_models.py 批量验收:公式零错误 + ★ 校验行归零 + 基准行业词无残留 + 替换副产物扫描(--baseline 指定基准行业)
│ └── build_{mfg,retail,transport,realestate,construction,hospitality}_budget.py
│ 六行业全面预算模型生成器(--out 指定输出文件)
│ ├── build_dupont_mfg.py 经营分析模型**共享引擎**(--out <文件> [--budget <全面预算模型.xlsx>] [--no-charts];16 页,默认即工业企业口径,04/05/07/12 为五行业复用的通用页构建器;--budget 自动抽取《工业企业-全面预算模型》报表数据)
│ ├── build_dupont_ind.py 六行业经营分析模型生成器(--industry 商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务 --out <文件> [--no-charts];行业差异收敛于 INDUSTRIES 配置字典,04/05/07/12 通用页复用 build_dupont_mfg 引擎)
│ ├── build_capex_mfg.py 项目投资决策分析模型**共享引擎**(--out <文件>;16 页:五方法页 + 数据汇总表 + 敏感/情景 + 结论;v1.2 抽出 `IND` 行业配置字典与 `set_industry()` 配置层,默认即工业企业口径;配套求值器需支持 NPV/IRR/SLN/^)
│ ├── build_capex_ind.py 六行业项目投资决策分析模型生成器(--industry 商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务 --out <文件> [--all --outdir <目录>];复用 build_capex_mfg 引擎,行业差异(vocabulary/口径/折旧对象/产能口径/成本要素/示例方案)全部收敛于行业配置字典——**新增行业 = 增加一个配置包**,无需改引擎)
│ ├── build_cvp_mfg.py 本量利 CVP 模型**共享引擎**(--out <文件> [--no-charts];16 页:编制说明/假设与目标〔唯一输入页〕/成本性态分解〔含高低点法〕/本量利数据汇总表/CVP主表/保本分析/目标利润分析/产销计划/敏感性分析/经营杠杆分析/多产品CVP/接单决策/产线控制与激励/情景分析/图表/结论与建议;默认即工业企业口径,配套 `VOCAB`/`PROTECT` 词表替换层与 `set_industry()` 配置层)
│ ├── build_cvp_ind.py 六行业本量利 CVP 模型生成器(--industry 商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务 --out <文件> [--all --outdir <目录>] [--no-charts];复用 build_cvp_mfg 引擎,行业差异(量纲词表/成本项目/示例数据/口径说明/页签命名)全部收敛于 INDUSTRIES 配置字典——**新增行业 = 增加一个配置包**,无需改引擎;`check_overrides()` 自检 01 页六处口径文案是否已被覆盖)
│ ├── build_bsc_mfg.py 平衡记分卡 BSC 模型**共享引擎**(--out <文件> [--no-charts];16 页:编制说明/假设与目标〔全局参数〕/战略目标与战略地图/指标体系〔输入页〕/指标字典/数据采集-公司级〔输入页〕/得分计算-公司级/部门记分卡/部门月度得分/趋势看板/因果链分析/行动计划〔输入页〕/激励挂钩/目标阶梯与情景/图表/结论与建议;四维度 16 项指标 + 7 部门记分卡 + 月度年度双口径 + 23 条 ★ 校验行〔87~89 个校验单元格〕;雷达图/折线图/柱状图三个图表部件;v1.1 抽出行业配置层——`VETO_LABEL/VETO_UNIT/VETO_WORD` + 40 余个 `P_*` 文案全局量 + `set_industry(cfg)`,默认即工业企业口径)
│ ├── build_bsc_ind.py 六行业平衡记分卡 BSC 模型生成器(--industry 商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务 --out <文件> [--all --outdir <目录>] [--no-charts];调用 `set_industry(cfg)` 注入行业配置后复用 build_bsc_mfg 全部 16 页构建器;行业差异(行业名/口径文案/16 项指标/7 部门与负责人/战略目标/维度主题/否决项〔指标·单位·阈值·用语〕/行动计划文案/六条建议的第③④条/示例数据水位)全部收敛于五个配置包——**新增行业 = 增加一个配置包**,无需改引擎)
│ ├── build_cost_mfg.py 成本计算-标准成本模型生成器(--out <文件>;12 页:编制说明/假设与参数/成本对象与在制品台账/物料BOM定额表/工序成本定额表/成本费用归集表/成本分配表/车间成本汇总/车间在制品与结转/单位成本表/成本差异分析/出入库与结转;v2.0 起为**分步法·逐步结转(综合结转)**——3 个车间断阶成本中心各自核算在制品,06 页三层结构;含 `_guard_text()` 文本守卫,拒收以 `=` 开头的自然语言。**同时作为作业成本模型的复用引擎**)
│ ├── build_abc_mfg.py 成本计算-作业成本模型生成器(--out <文件>;13 页,**复用 build_cost_mfg 引擎**——导入 `build_cost_mfg` 为 `M` 并重定向其模块级 `S_*` 页名常量,复用其 03~06、09~13 共 9 个页面构建器,仅重写 01/02 页并新增 **07 作业识别与动因率表** / **08 作业成本分配表**;`renumber_pages()` 顺延被复用页的「NN 页」文字、`sync_titles()` 校正 A1 表格名称;新增**独立路径校验**可捕获基准列引用错误)
│ ├── build_pricing_mfg.py 产品定价模型生成器(--out <文件>;16 页:编制说明/假设与目标/物料BOM表/工序成本表/设备台账/工装台账/人工工时表/制造费用台账/物流费用表/成本卡/成本基础价/竞品对标与市场价/定价测算/折扣与降价决策/敏感性分析/产品定价汇总表;**复用 build_cost_mfg 的助手函数与产品·车间·断阶·BOM·工序·实际工时全部基础数据**,保证与标准成本模型同口径;三结合定价 + 制造费用按定额机器工时分配并拆变动/固定;53 条 ★ 勾稽。**跨页引用必须带 `'页名'!` 前缀**,漏写会形成"合法的同页错引")
│ ├── build_treasury_ind.py 资金管理台账**共享引擎**(--out <文件> [--industry 商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务业] [--all --outdir <目录>];10 页:编制说明/假设与参数/月度资金台账/资金收支明细/银行账户余额台账/承兑汇票台账/承兑汇票汇总分析/银行贷款台账/贷款还本付息计划/资金看板与预警;默认即工业企业口径;v1.1 抽出 `_IND_KEYS` 白名单 + `snapshot_baseline()` + `set_industry()` 配置层,`_sample()` 自洽断言在切换行业后重跑)
│ ├── _packs_treasury.py 台账六行业**配置包**(纯数据字典 `INDUSTRIES = {商品流通/施工/房地产开发/旅游饮食服务/交通运输/软件与信息技术服务业}`;每包含行业名·口径文案·三本台账科目清单·票据 10 张·贷款 4 笔·账户 3 个·12 个月现金流与期初余额;文件尾部 `_selfcheck()` 在导入时即校验「账户恰为 3 个 / Σ新增放款 ≡ 台账合计 / Σ还本 ≡ 台账合计 / 各序列恰 12 个月」)
│ ├── build_fundplan_ind.py 月度资金计划**共享引擎**(--out <文件> [--industry …] [--all --outdir <目录>];12 页:编制说明/假设与参数/资金需求归集表/6 类付款明细表/付款排程与执行表/资金平衡与缺口预警/月度资金计划看板;默认即工业企业口径;同款 `_IND_KEYS` + `set_industry()` 配置层,页名一致性护栏断言「6 张明细表页名 == SHEETS[3:9]」)
│ ├── _packs_fundplan.py 资金计划六行业**配置包**(纯数据字典;每包含 12 个页名·6 张明细表的(页名, 一级类别, 行元组, 二级分类)·12 个月回笼·期初可动用·当前月·安全储备月数·大额与审批阈值;每行 11 元组=一行一笔付款登记;`_selfcheck()` 校验行数 ≤36、申请单号唯一、二级分类已声明、月份/日期/付款方式/优先级枚举合法、薪酬表须覆盖 1~12 月)
│ ├── build_cost_software.py 成本计算-标准成本模型·**软件与信息技术服务业版**(wrapper:覆盖 `build_cost_mfg` 模块级数据常量 + 文案再皮肤;12 页)
│ ├── build_abc_software.py 成本计算-作业成本模型·**软件与信息技术服务业版**(wrapper:**先出标准版 → 再 import `build_abc_mfg`**,否则页名常量被改写致 `KeyError`;13 页)
│ ├── build_pricing_software.py 产品定价模型·**软件与信息技术服务业版**(wrapper:覆盖 `build_pricing_mfg` 常量 + 派生量 `NP/NS` 同步 + `build_note/build_assum` monkeypatch;16 页)
│ └── check_star_cvp.py ★ 校验行专项复核:读取生成的 xlsx,用 Evaluator 求值全部 ★ 单元格并统计各页条数(用法同 verify_formulas.py)
└── assets/
├── structure-note-template.md 结构说明文档模板
├── excel-version-compatibility.md 函数版本兼容矩阵
└── built-models/ 内置成品模型(已通过全量公式校验,可直接交付或改造)
├── 工业企业-全面预算模型.xlsx
├── 商品流通企业-全面预算模型.xlsx
├── 交通运输企业-全面预算模型.xlsx
├── 房地产开发企业-全面预算模型.xlsx
├── 施工企业-全面预算模型.xlsx
├── 旅游饮食服务企业-全面预算模型.xlsx
├── 工业企业-本量利CVP模型.xlsx
├── 商品流通企业-本量利CVP模型.xlsx
├── 施工企业-本量利CVP模型.xlsx
├── 房地产开发企业-本量利CVP模型.xlsx
├── 旅游饮食服务企业-本量利CVP模型.xlsx
├── 交通运输企业-本量利CVP模型.xlsx
├── 软件与信息技术服务企业-本量利CVP模型.xlsx (**第七行业 · 门类 G · v1.0 · 16 页 · 1,107 公式**)
├── 工业企业-经营分析模型.xlsx
├── 商品流通企业-经营分析模型.xlsx
├── 施工企业-经营分析模型.xlsx
├── 房地产开发企业-经营分析模型.xlsx
├── 旅游饮食服务企业-经营分析模型.xlsx
├── 交通运输企业-经营分析模型.xlsx
├── 软件与信息技术服务企业-经营分析模型.xlsx (**第七行业 · 门类 G · v1.0 · 16 页 · 13,264 公式**)
├── 工业企业-项目投资决策分析模型.xlsx
├── 商品流通企业-项目投资决策分析模型.xlsx
├── 施工企业-项目投资决策分析模型.xlsx
├── 房地产开发企业-项目投资决策分析模型.xlsx
├── 旅游饮食服务企业-项目投资决策分析模型.xlsx
├── 交通运输企业-项目投资决策分析模型.xlsx
├── 软件与信息技术服务企业-项目投资决策分析模型.xlsx (**第七行业 · 门类 G · v1.0 · 16 页 · 3,368 公式**)
├── 工业企业-平衡记分卡BSC模型.xlsx
├── 商品流通企业-平衡记分卡BSC模型.xlsx
├── 施工企业-平衡记分卡BSC模型.xlsx
├── 房地产开发企业-平衡记分卡BSC模型.xlsx
├── 旅游饮食服务企业-平衡记分卡BSC模型.xlsx
├── 交通运输企业-平衡记分卡BSC模型.xlsx
├── 软件与信息技术服务企业-平衡记分卡BSC模型.xlsx (**第七行业 · 门类 G · v1.0 · 16 页 · 1,116 公式 · 否决项=数据安全事故率**)
├── 工业企业-成本计算-标准成本模型.xlsx (控制表第 8 行 · 分步法·逐步结转 v2.0 · 12 页)
├── 工业企业-成本计算-作业成本模型.xlsx (控制表第 9 行 · 两阶段作业分摊 v1.0 · 13 页)
├── 工业企业-产品定价模型.xlsx (控制表第 10 行 · 三结合定价 v1.0 · 16 页)
├── 软件与信息技术服务企业-成本计算-标准成本模型.xlsx (**第七行业 · v1.0 · 12 页 · 764 公式**)
├── 软件与信息技术服务企业-成本计算-作业成本模型.xlsx (**第七行业 · v1.0 · 13 页 · 969 公式**)
├── 软件与信息技术服务企业-产品定价模型.xlsx (**第七行业 · v1.0 · 16 页 · 847 公式**)
├── 工业企业-资金管理台账.xlsx (控制表第 11 行 · 三本台账 v1.0 · 10 页 · 工业基准)
├── 工业企业-月度资金计划.xlsx (控制表第 12 行 · 6 类付款明细 + 三维度归集 + 缺口预警 v1.0 · 12 页 · 工业基准)
├── 商品流通企业-资金管理台账.xlsx (控制表第 11 行 · v1.1 · 七行业参数化)
├── 施工企业-资金管理台账.xlsx (控制表第 11 行 · v1.1 · 七行业参数化)
├── 房地产开发企业-资金管理台账.xlsx (控制表第 11 行 · v1.1 · 七行业参数化)
├── 旅游饮食服务企业-资金管理台账.xlsx (控制表第 11 行 · v1.1 · 七行业参数化)
├── 交通运输企业-资金管理台账.xlsx (控制表第 11 行 · v1.1 · 七行业参数化)
├── 软件与信息技术服务企业-资金管理台账.xlsx (控制表第 11 行 · v1.1 · 第七行业 · 10 页 · 1,090 公式)
├── 商品流通企业-月度资金计划.xlsx (控制表第 12 行 · v1.1 · 七行业参数化)
├── 施工企业-月度资金计划.xlsx (控制表第 12 行 · v1.1 · 七行业参数化)
├── 房地产开发企业-月度资金计划.xlsx (控制表第 12 行 · v1.1 · 七行业参数化)
├── 旅游饮食服务企业-月度资金计划.xlsx (控制表第 12 行 · v1.1 · 七行业参数化)
├── 交通运输企业-月度资金计划.xlsx (控制表第 12 行 · v1.1 · 七行业参数化)
├── 软件与信息技术服务企业-月度资金计划.xlsx (控制表第 12 行 · v1.1 · 第七行业 · 12 页 · 1,173 公式)
└── 结构说明/ 各模型结构说明(含历次改造记录)
├── 资金管理台账-结构说明.md (**七行业合并版** · 12 节 · 2026-09-29 / 2026-10-09 增补第七行业)
└── 月度资金计划-结构说明.md (**七行业合并版** · 12 节 · 2026-09-29 / 2026-10-09 增补第七行业)
内置成品模型(built-models)
六行业全面预算模型(14~16 页:编制说明/假设目标/销售/成本/采购/研发/人员/部门费用/资本支出/投资融资/利润表/资产负债表/现金流量表/执行监控)为已验证的最终版本,公式求值校验零错误,全部校验行(★配平/现金勾稽/间接法核对/间接法−总额法/归类校验/费用分解校验)恒为 0。用户要全面预算模型时,优先复制内置成品再按需求增量改造(第 4 步迭代流程),不要从零重搭;需要重生成时用对应 build_*_budget.py --out <文件> 并以 verify_formulas.py 校验。
统一口径(六行业一致;全面预算模型尚未做软件与信息技术服务业配置版,该行业的全面预算仍走「参考迁移」):
- 人员薪酬归集链路:人力预算页「按费用科目归类」→ 利润表三费 = 部门费用 + 人员归类(防双计:研发人员人工只走人力页,研发费用专表仅编 7 项非人工科目)
- 期间费用页研发费用单列「研发部门」块(7 个二级科目 + 小计),三费分解处只保留研发费用行
- 现金流量表:间接法为准则口径,总额口径经「其他经营活动现金收支净额(轧差)」行闭环
- 除说明/假设/执行监控外,各页年度汇总后附 实际值/差额/达成率 三列(预算跟踪用)
- 页首表头:第 1 行「表格名称:<表名>」、第 2 行「编制单位/编制人/编制时间」填空行、第 3 行口径说明;
01 编制说明页沿用左侧留白版式,表头落在 B2(表格名称,模型全称)与 B3(编制三项)
第二类模型(经营分析模型):
- 工业企业-经营分析模型.xlsx(16 页:编制说明/假设与目标/数据采集-报表数据/数据采集-科目余额表数据/数据采集-部门科目余额表数据/杜邦分析表/销售和应收/生产和成本/部门费用/研发费用/采购和应付/存货/长期资产/权益与长短期借款/部门KPI关联/改善追踪),基于杜邦三因子(ROE = 销售净利率 × 总资产周转率 × 权益乘数),含连环替代法归因、月度同比环比与部门项目维度
- 明细维度(v1.1):科目余额表页采集 客户收入/客户应收/供应商应付 + 销售/管理/研发/制造费用二级科目(各块末行轧差+★勾稽);部门科目余额表页采集 10 部门期间费用;05 页客户明细+CR5、06 页制造费用二级明细、07 页「费用科目×部门」双维度、08 页研发二级科目、09 页供应商明细+CR5 全部引用采集页,单一数据源
- 列布局(v1.3,参考《格式.xlsx》后精简):分析页(04-12) C..N=本年1-12月、O=年度汇总/年末、P=上年合计(流量)/上年末(存量)、Q/R=增减额/同比%(NC=18;v1.2 分析页的上年逐月列已删除,改由 03 采集页承载,见 v1.7)。行助手:row_calc 的 prior 回调自动以 prior(PT) 生成 P 列公式(p_expr 优先);row_in 的 p_val 传标量(to_prior 返回上年合计、stock_prior 返回上年末);avg_row 的 P 列默认引源表 P(上年末近似上年平均),04 页平均总资产/净资产用 p_expr 取 02 页 prior_avg_ 参数(连环替代依赖);06 制造费用明细各项含「占制造成本比」、07 费用二级明细各项含「占营业收入比」、08 研发费用二级明细各项含「占营业收入比」
- 逐项组合图(v1.4,add_item_charts,版式对标《格式.xlsx》/Excel「布局3」):06/07/08 每个明细项配一张图(T 列锚定、纵向 18 行距、16×8.4cm)——数据=蓝色 0000FF 柱状图(主轴 axPos=l、会计式金额格式)、占比=黄色 FFFF00 折线图+圆点标记(次轴 axId=200、axPos=r、0% 格式);横向分类轴 = 月份(表头行,必须用 strRef 文本轴,用 set_categories 的 numRef 会被当作数值轴)、axPos=b、轴标题「月份」;主轴标题「金额(元)」+ majorGridlines,次轴标题「占比」(无网格线);图例 legendPos=b(底部)、overlay=0;line.x_axis.delete=True 隐藏重复分类轴;系列名用 SeriesLabel(v=...) 手工设置以避免带上单元格的前导全角空格。组合图配方:line.y_axis.axId=200 → bar.y_axis.crosses="max" → bar += line → bar.legend=Legend()
- 图表开关:--no-charts 生成纯表格版(模块级 CHART_ON 开关,两处 add_chart 调用均受其控制;04 页 ROE 折线图同样在开关内)。当前 desktop 与 built-models 内的《工业企业-经营分析模型.xlsx》即为 --no-charts 版本(包内无 chart/drawing 部件)。
- 生成器陷阱(已修):即时 f-string 的 o_expr/p_expr 里引用 {a}/{rr_} 这类只存在于 lambda 默认参数的变量,会解析到 __main__ 的全局 a = ap.parse_args()(argparse.Namespace),生成 =...ONamespace(out=...) 垃圾公式且求值器静默通过——验证脚本必须扫描公式串中的 {/}/Namespace/None token;同文件多条 Edit 并发提交可能丢失(每次只保留一条),编辑后必须逐条 grep 复核
- 页首表头(v1.6 · 2026-09-14,与六行业全面预算模型统一):全部 16 页第 1 行 表格名称:<页签名>(01 编制说明页为 表格名称:工业企业 · 经营分析模型(杜邦分析体系))、第 2 行 编制单位:___ 编制人:___ 编制时间:___、第 3 行口径说明;第 4 行起才是列标题与数据区(表头 3 行、sheet_header() 恒返回 4,公式行号零位移)。01 页由 build_note() 调 sheet_header(ncol=10) 生成。改造后复检:4265 公式零错误、★ 校验行(含"校验"字样者)4 条全零、数据区与改造前逐格比对 0 差异
- 月度同比/环比与累计口径对比行(v1.7 · 2026-09-14):落实「经营分析逐月做同比/环比;资产/负债/权益按 1-当月累计比较,利润表按逐月发生额与累计额比较」的要求——①03 采集页拆为 30 列:C..N=本年1-12月、O=年度汇总、P..AA=上年同月1-12月(蓝字填报)、AB=上年合计/上年末、AC=增减额、AD=同比%;②分析页(04-12)沿用 18 列,P_REG 继承 03 源行的对比口径,row_calc 在每个数据行下方自动追加对比行:流量行「同比% / 环比% / 1-当月累计 / 累计同比%」,存量行「同比% / 环比%」,比率行「同比(pp)/ 环比(pp)/ 累计比例 / 累计同比(pp)」,差额行「同比差 / 环比差」;③比率一律用百分点差(pp);④03 采集页本身不生成对比行(保持采集页精简);⑤上年同月公式用 pr_ref/pr_cum/pr_cum_of/pr_div/pr_mul/pr_avg 助手构造,cum_spec(num_items, den_items) 同时给出本年与上年累计口径(item 为 [(sheet|None, row, sign), …]);⑥03 三页统一 30 列表头(本年1-12月/年度汇总·年末/上年1-12月/上年合计·上年末/增减额/同比%),row_calc 数据页计算行自动以 prior(col) 逐列回填 P..AA(合计行上年同月不断档),check_row_data 让 ★ 勾稽扩展覆盖 P..AA+AB 列,部门占比行补上年占比(P..AA/AB/AC)。「其他/轧差」行上年列=报表数−已列明细(src_pvals 逐月倒算)、利润总额上年序列=净利润+所得税(自洽)、BS 差异由「其他非流动资产(轧差)」上年列作配平锚。行扩展陷阱(必守):追加对比行后,任何 SUM(C:N) 区域求和与 r-1/r-2 行引用都会错位——所有区域求和改为显式单元格相加,所有相对行引用改为捕获行变量;求值器需支持 N() 以配合 IF(N(x)=0,…) 零保护;校验引用口径陷阱:★ 勾稽引用分析页时其 P 列=上年合计,与数据页 P 列(上年同月1月)语义不同——明细勾稽应直引 03 数据页源行(如制造费用直引 '03 数据采集-报表数据'!r65 而非 06 页中转行)
- v1.7 复检:0 公式错误、18 个 ★ 校验行全零、03 页 10 个 ★ 在 C..N+O+P..AA+AB 全列归零、0 垃圾 token、0 图表部件;合计/总计/净值行 P..AA 公式齐全;占比行含上年占比。修复连带效应:03 计算行 P..AA 回填前,04 页 BS 类行(平均总资产/净资产)同比因上年同月缺失被算成 +100.6%/+98.7%,回填后修正为 +8.7%/−0.1%;桌面文件与 built-models MD5 一致(v1.2.1 标题改名后重新同步)
- 数据联动:build_dupont_mfg.py --out <文件> --budget <全面预算模型.xlsx> 自动从《工业企业-全面预算模型》抽取利润表/资产负债表/生产成本/采购/研发/部门费用/现金流数据;不带 --budget 时使用内置示例数据
- 抽取关键口径:BS 行取全精度(逐行独立舍入会使 round(资产方) 与 round(负债+权益方) 差 1 分,配平校验无法归零);净利润 = 利润总额 − 所得税倒算;期末材料库存按「期初+采购−领用」实际滚算(预算模型采购额下限为 0 时目标期末 ≠ 实际期末);总经办组费用 = 利润表管理费用 − 前两组(轧差保勾稽);简化 BS 缺项经 ca/nca/cl/ncl/eq 五个「轧差行」与全面预算模型完全配平
- 求值器配套修复:verify_formulas.py 的 _split_add/_split_mul/_split_op/_split_args/_balanced 已支持单引号工作表名*(页名含连字符 - 时,旧版会把 - 误判为减号导致跨页引用求值为 0);生成公式时跨页区域引用只在首单元格带页名前缀('S'!O6:O10,勿写成 'S'!O6:'S'!O10);跨页单引用必须带页名前缀
六行业经营分析模型(v1.0 · 2026-09-14 首次生成、2026-10-09 新增软件与信息技术服务业,商品流通/施工/房地产开发/旅游饮食服务/交通运输/软件与信息技术服务企业-经营分析模型.xlsx,结构说明见 assets/built-models/结构说明/经营分析模型-结构说明.md——2026-09-14 起该文件为「工业企业基准版 + 六行业」合并版,原名《五行业-经营分析模型-结构说明.md》已并入并更名):
- 按用户要求依据《财务模型控制表》、参考工业企业版 v1.7 格式参数化生成:16 页结构与对比行引擎(30 列采集页、同比/环比/累计对比行、pp 口径、★ 全列勾稽)与工业企业版完全一致
- 实现方式:build_dupont_ind.py 导入 build_dupont_mfg 引擎并复用其 04/05/07/12 四个通用页构建器,仅重写行业相关页(01/02/03 三页采集、06 行业专项、08-11、13/14),行业差异(口径说明、部门、成本要素、专项运营指标、目标值、示例数据)全部收敛于 INDUSTRIES 配置字典——新增行业 = 增加一个配置包,无需改引擎
- 行业专项要点:商品流通(进销存/售罄率/坪效/单件毛利)、施工(履约进度/回款率/垫资比例,合同资产计入存货行)、房地产开发(预售合同负债轧差/去化率/签约均价/单方成本,土地增值税毛估口径)、旅游饮食服务(RevPAR/翻台率/客单价/餐饮成本率,业务线收入拆分)、交通运输(车辆利用率/里程利用率/百公里油耗/单公里成本,车队成本要素)、软件与信息技术服务(人均产值/人月单价/人员利用率/项目毛利率/合同履约进度/NDR/CAC/研发投入占比/研发资本化率/DSO;存货行改「合同履约成本 / 未完工项目」;部门 8 个:销售部 / 交付中心 / 研发中心 / 售前技术支持部 / 产品部 / 财务部 / 人力资源部 / 质量与安全部)
- 生成:python scripts/build_dupont_ind.py --industry <行业> --out <文件> --no-charts;校验:六模型均 0 公式错误、24 个★校验行全列归零、0 垃圾 token、0 图表部件(软件版 16 页 / 13,264 公式 / 18 条 ★ 校验行全零)
- 踩坑记录(make_data 数据构造):split_detail() 恒追加一个轧差行——[sell] + split_detail(admin, dept_sh) 的行数比 dept_names 多 1,导致末行轧差(当月 0.2×admin)从未写入、部门勾稽差 -25500/月;修复为显式分摊数取 dept_names-2 个并归一化(合计 0.88),末部门自动轧差兜底。凡用 split_detail 拼部门/明细行,行数必须按"显式份数+1"核对
第三类模型(项目投资决策分析模型)· 七行业:
七个行业均按《财务模型控制表》第 5 行要求构建:五种方法页(净现值法 / 现值指数法 / 内含报酬率法 / 投资回收期法 / 投资报酬率法)+ 项目投资决策数据汇总表 + 编制说明 + 假设与目标;数据维度 = 按项目(内置 3 个备选方案)、项目周期假设 10 年;用途 = 评估投资项目经济与社会效益。六行业共用同一引擎(build_capex_mfg.py),行业差异收敛于行业配置字典——工业企业版即引擎默认口径,另五行业由 build_capex_ind.py 注入配置。
工业企业-项目投资决策分析模型.xlsx(v1.2 · 2026-09-14,scripts/build_capex_mfg.py,结构说明见 assets/built-models/结构说明/项目投资决策分析模型-结构说明.md):
- 控制表标注:工业企业为控制表中唯一显式标注"内置"的行业,是本模型的基准版;v1.2 把全模型文案与口径抽为 IND 行业配置字典(默认即工业口径),因此本文件既是工业版生成器,也是七行业共享引擎
- 16 页结构:01 编制说明 / 02 假设与目标(全模型唯一输入入口,所有蓝字填报项集中于此)/ 03 项目投资决策数据汇总表(按 NPV 最大原则自动给出推荐方案)/ 04 投资明细 / 05 投资时间表 / 06 经营预测 / 07 折旧与摊销 / 08 项目现金流量表 / 09 净现值法 / 10 现值指数法 / 11 内含报酬率法 / 12 投资回收期法 / 13 投资报酬率法 / 14 敏感性分析 / 15 情景分析 / 16 结论与建议
- 时间轴:C = 建设期(第 0 年)、D..M = 运营期第 1..10 年、N = 合计(存量类行取末期值、比率类行取运营期平均),共 11 个时点;页首表头 3 行(sheet_header() 恒返回 4),与其余模型统一
- 多产品结构(v1.1 新增):每方案最多 N_PRODUCTS = 3 个产品槽位,产品参数为四元组 (名称, 设计产能, 销售单价, 单位变动成本);06 页按产品分块列示「设计产能 → 预计销量(= 设计产能 × 该方案达产率)→ 销售单价 → 营业收入 → 单位变动成本 → 变动成本」,再汇总为营业收入合计 / 变动成本合计 / 边际贡献。汇总行用显式单元格相加(=D11+D18+D25)而非区域求和,避免行插入后错位;不投产的槽位把设计产能填 0(销量、收入、成本自动为 0,无需删行);达产率按方案统一设定并作用于该方案全部产品
- 期间费用逐项扣减(v1.1 新增):02 页把原「年固定付现成本」拆为 固定制造费用 + 销售费用(项目新增)+ 管理费用(项目新增)+ 研发费用(项目新增) 四项明细(键 {code}_mfg/_sell/_admin/_rd),合计行 {code}_fc 自动汇总;06 页四项逐行列示后进入利润总额 = 边际贡献 − 年固定付现成本合计 − 折旧。三项期间费用指项目运营新增部分,不含原有业务期间费用,避免重复计算
- 核心口径:折现率 = WACC 自动计算(02 页 债务成本×(1−所得税率)×债务占比 + 股权成本×权益占比);折现系数 = 1/(1+WACC)^t(t = 0..10);所得税 = MAX(利润总额,0)×税率(亏损年度不计税);经营净现金流 = 净利润 + 折旧(折旧非付现成本加回);期末回收 = 固定资产余值(原值×残值率)+ 全额回收铺底流动资金
- 工业企业适配:① 产能爬坡与达产率(第 1~3 年逐年爬坡、第 4 年起稳定,规避"首年即满产"高估收益);② 直线法折旧 SLN(原值, 预计残值, 折旧年限);③ 设备残值率 5%;④ 分年投入(建设期第 0/1 年按「投入占比」分摊,方案丙新厂建设 60%/40%);⑤ 内置 3 个备选方案(甲 新增自动化装配线 / 乙 现有产线技改升级 / 丙 新建生产车间),支持多方案并列对比
- 五方法实现要点:① 09 NPV 用「函数法 NPV(WACC, 第1~10年净现金流) + 第 0 年净现金流」与「逐期折现明细法 Σ(CFt × 折现系数)」双向校验,规避 Excel NPV() 假定现金流在期末、首期投资必须单独加总的重复折现陷阱;② 10 PI = 未来现金流入现值 ÷ 现金流出现值(流入/流出均须含全部年度,行汇总用 total="sum" 而非排除第 0 年的 sumop,否则分母偏小导致 PI 溢出);③ 11 IRR = IRR(第0年..第10年净现金流),附 NPV@IRR 舍入到元的收敛校验;④ 12 回收期 静态/动态均用嵌套 IF 插值(累计净现金流/累计折现净现金流首次 ≥ 0 的年份 − 1 + 上年未收回额 ÷ 当年净现金流,未回收时显示"未回收");⑤ 13 ARR = 年均净利润 ÷ 平均投资额,平均投资额 =(项目总投资 + 期末回收额)÷ 2
- 辅助分析:14 页单因素 7 因素(销售单价 / 单位变动成本 / 预计销量〔三类均同时作用于全部产品〕/ 期间费用〔销售+管理+研发〕/ 固定制造费用 / 初始投资额 / 折现率)× 5 档敏感系数,采 ±10% 中心差分 (NPV(+10%) − NPV(−10%)) ÷ (0.2 × 基准NPV)(保留符号;勿用双侧百分比平均,会丢符号)+ 双因素矩阵(单价 × 销量);15 页乐观/中性/悲观三情景(含期间费用乘数)的 NPV / IRR / 静态回收期对比;16 页综合评价矩阵 + 经济与社会效益 + 风险提示 + 建议条件
- 生成与校验:python scripts/build_capex_mfg.py --out <文件>;v1.2 参数化后复检 0 公式错误、29 条 ★ 校验行全零、0 垃圾 token、0 假公式、0 图表部件(04/05/06/07/08/09/10/11/12/13 页共 29 条数据校验行;06 页每方案 2 条:营业收入合计核对 + 费用明细合计核对),且与 v1.1 零回归(示例结果逐格一致)。示例结果:NPV 甲 212.7 万 / 乙 782.8 万 / 丙 737.8 万,PI 1.19 / 2.42 / 1.28,IRR 12.64% / 33.26% / 14.10%,静态回收期 5.79 / 3.00 / 5.82 年,推荐方案乙(NPV 最大);敏感系数排序 单价 +30.8 > 单位变动成本 −20.9 > 销量 +10.0 > 初始投资 −5.2 > 折现率 −2.8 > 期间费用 −2.6 > 固定制造费用 −2.1;情景(甲)乐观 1,388.3 万 / 中性 212.7 万 / 悲观 −935.3 万
- 求值器扩展(配套,scripts/verify_formulas.py):新增 NPV(Excel 语义:首个值发生在 t=1,第 0 年需另加)/ IRR(牛顿迭代 + 二分回退)/ SLN / MIRR 与幂运算符 ^。陷阱:^ 的解析必须置于 _split_mul 之后(Excel 优先级:^ 高于乘除、低于一元负号),若前置于乘除之前,1/(1+WACC)^i 会把整个左操作数并入指数,导致折现系数异常、PI 溢出为 1e63
- 多产品改造陷阱(v1.1 踩坑):① 敏感性/情景页原以假设页单一 _price/_vc 单元格构造净现金流公式,改造后须改为逐产品循环(prod_qrows(code) 返回 [(06页销量行, 单价key, 单位成本key), …]),乘数同时作用于全部产品;② SCENARIOS 元组由 5 元扩为 6 元(插入期间费用乘数 fe)后,所有解包处都要同步——本文件内有 3 处 for … in SCENARIOS,漏改一处即 ValueError: too many values to unpack(一处仅用名称可写 for name, *_ in SCENARIOS)
- 占位值纪律:所有示例值(投资额、各产品产能/单价/单位变动成本、达产率、四项费用、折旧年限等)均标注【示例】并集中登记在 02 页假设清单;全模型仅 02 页需填报
五行业项目投资决策分析模型(v1.0 · 2026-09-14,商品流通/施工/房地产开发/旅游饮食服务/交通运输企业-项目投资决策分析模型.xlsx,结构说明见 assets/built-models/结构说明/项目投资决策分析模型-结构说明.md):
- 实现方式(配置层参数化):build_capex_ind.py 导入 build_capex_mfg 引擎,调用 M.set_industry(cfg) 注入行业配置后复用其全部 16 页构建器。引擎与行业解耦——页结构、公式链路、WACC/折现系数、五方法算法、★ 校验与行业无关;行业差异全部收敛于配置字典。新增行业 = 增加一个配置包,无需改引擎。set_industry() 先用 _IND_BASE 快照复位(避免批量生成时跨行业配置串味),并清空 POS/REF 注册表
- 行业差异的收敛点(配置字典键):slot/slot_tag(品类/作业类型/业态/业务线/线路)、cap_param_name/cap_unit(设计经营量·件/年 → 年台班能力·台班/年 → 可租赁面积·㎡/年 → 年接待能力·人次/年 → 年运营里程·公里/年)、vc_label/vc_unit、ramp_param_prefix(爬坡率/达产率/出租率)、dep_word/asset_word(摊销·长期资产 / 折旧·施工机械 / 折旧·投资性房地产 / 摊销·长期资产 / 折旧·营运车辆)、inv_items(5 项投资构成)、cost_items(4 项固定付现成本,键固定为 mfg/sell/admin/rd 以适配敏感性引擎)、schemes(3 个备选方案)、s_data(示例数据)、以及全部页首说明/脚注/★ 校验说明/风险与效益提示/建议动作/版本记录
- 五行业行业特征适配(每方案最多 3 个槽位;单件/单位口径随行业变化):
| 行业 | 门类 | 产能口径 | 单位变动成本 | 折旧/摊销对象 | 投资构成(5 项) | 固定费用首项 |
|---|---|---|---|---|---|---|
| 商品流通企业 | H 批零 | 设计经营量 × 爬坡率(件/年) | 单位进价成本(元/件) | 装修与设备按经营期摊销 | 店面装修与工程 / 货架与冷链设备 / 信息系统与收银设备 / 其他开办费用 / 铺底存货 | 门店与仓储固定费用(租金/物业) |
| 施工企业 | E 建筑业 | 年台班能力 × 达产率(台班/年) | 台班变动成本(元/台班) | 施工机械直线折旧 | 施工机械购置 / 周转材料 / 临时设施 / 其他费用(运输安装/证照/安措) / 铺底流动资金 | 项目部与机械队固定费用 |
| 房地产开发企业 | K 房地产业 | 可租赁面积 × 出租率(㎡/年) | 单位运营变动成本(元/㎡·年) | 投资性房地产直线折旧 | 土地出让金及契税 / 前期工程费 / 建筑安装工程费 / 装修与配套设施 / 铺底营运资金 | 开发间接与物业固定管理费 |
| 旅游饮食服务企业 | I 住宿餐饮 + O 居民服务 | 年接待能力 × 爬坡率(人次/年) | 人均变动成本(元/人次) | 装修、家具布草与厨房设备按经营期摊销 | 装修工程 / 家具与布草 / 厨房与设备 / 开办费用 / 铺底流动资金 | 场地租赁与物业(固定部分) |
| 交通运输企业 | F 交运仓储邮政 | 年运营里程 × 达产率(公里/年) | 单公里变动成本(元/公里) | 营运车辆直线折旧 | 车辆购置 / 车辆购置税与上牌 / 车载设备与箱体 / 首年保险及其他 / 铺底流动资金 | 车管与司机固定人工 |
- 行业专属残值/折旧假设:商品流通 残值率 3%、摊销 6 年(仓配中心 10 年 / 5%);施工 残值率 5%、折旧 8 年(分公司 10 年);房地产 残值率 60%~70%、折旧 15~30 年(残值率体现期末物业变现价值);旅游 残值率 5%、摊销 5~10 年;交通 残值率 10%(含车辆期末残值)、折旧 8 年
- 生成:
python scripts/build_capex_ind.py --industry 商品流通|施工|房地产开发|旅游饮食服务|交通运输 --out <文件>,或--all --outdir <目录>一次生成五份 - 校验结果:五模型均 0 公式错误、29 条 ★ 校验行全零(与工业版结构一致)、0 垃圾 token、0 假公式、0 图表部件
- 示例结果(推荐方案取 NPV 最大者):
| 行业 | 方案甲 NPV | 方案乙 NPV | 方案丙 NPV | PI(甲/乙/丙) | IRR(甲/乙/丙) | 推荐 |
|---|---|---|---|---|---|---|
| 商品流通企业 | +19.0 万 | +40.6 万 | −405.3 万 | 1.07 / 1.31 / 0.65 | 10.30% / 14.66% / 1.81% | 方案乙(改造升级) |
| 施工企业 | +193.0 万 | +116.4 万 | +530.5 万 | 1.31 / 1.46 / 1.46 | 14.79% / 17.45% / 16.74% | 方案丙(区域分公司) |
| 房地产开发企业 | +3,054.6 万 | +2,612.0 万 | +6,720.1 万 | 1.45 / 2.16 / 1.70 | 15.92% / 27.42% / 19.08% | 方案丙(商业综合体) |
| 旅游饮食服务企业 | +1,300.8 万 | +933.9 万 | +2,193.3 万 | 1.72 / 2.32 / 1.58 | 20.13% / 31.42% / 18.50% | 方案丙(度假民宿集群) |
| 交通运输企业 | −78.1 万 | +205.4 万 | +523.3 万 | 0.90 / 1.52 / 1.29 | 7.06% / 18.60% / 14.11% | 方案丙(城际客运线) |
- 分歧提示(教学价值):五行业推荐方案均由 NPV 最大原则给出,但与 PI/IRR 排序并不总是一致(典型:商品流通乙 PI/IRR 最高而规模最小、施工丙 NPV 最大而乙 PI/IRR 最高、旅游乙 PI 2.32 最高而丙 NPV 最大),正是「投资规模差异较大时各指标可能冲突」的直观演示,模型中已在 03 页说明与 16 页结论处要求说明取舍理由
- 各方案的年均营业收入、年均净利润、年均经营净现金流、静态/动态回收期、ARR 均已完整测算(可从各模型 03 页汇总表读取)
第四类模型(本量利 CVP 模型)· 七行业齐备
工业企业-本量利CVP模型.xlsx(v1.0 · 2026-09-14,scripts/build_cvp_mfg.py,结构说明见 assets/built-models/结构说明/本量利CVP模型-结构说明.md):
- 控制表依据(第 6 行):基础表单 = 以「利润 =(单价 − 单位变动成本)× 销量 − 固定成本」测算目标利润 + 本量利数据汇总表 + 编制说明 + 假设与目标;数据维度 = 按项目、产品;用途 = ① 产销计划工具 ② 产线控制、激励。控制表该行六行业列均为「内置」;本技能已交付七个行业版本(工业版为引擎默认口径,另六行业由
build_cvp_ind.py注入配置生成,含 2026-10-09 新增的软件与信息技术服务业) - 工业企业适配口径:固定成本 = 制造费用中的固定部分 + 期间费用;变动成本 = 直接材料 + 计件人工 + 变动制造费用(含混合成本按高低点法分解出的变动部分)
- 16 页结构:01 编制说明 / 02 假设与目标(全模型唯一输入入口,蓝字填报项全部集中于此)/ 03 成本性态分解 / 04 本量利数据汇总表 / 05 CVP主表 / 06 保本分析 / 07 目标利润分析 / 08 产销计划 / 09 敏感性分析 / 10 经营杠杆分析 / 11 多产品CVP / 12 接单决策 / 13 产线控制与激励 / 14 情景分析 / 15 图表 / 16 结论与建议
- 成本性态分解(本模型第一动作,03 页):① 变动成本按「单位产品口径(元/件)」分 6 项(直接材料/计件人工/能源动力/机物料/销售佣金/运输);② 固定成本按「年度总额(元/年)」分 8 项;③ 混合成本用高低点法分解——
单位变动成本 =(高点成本 − 低点成本)÷(高点业务量 − 低点业务量)、固定部分 = 高点成本 − 单位变动成本 × 高点业务量,并设「还原 − 高点实际成本 = 0」校验;④ 汇总出分产品单位变动成本 + 混合分解单位变动成本、固定成本总额 - 多产品结构:
N_P = 3个产品槽位(工业示例:甲 数控机床标准机型 A / 乙 定制机型 B / 丙 机床功能部件 C),横轴 6 列 = 序号/指标/产品1/产品2/产品3/合计·加权平均;加权平均一律用SUMPRODUCT(值区间, 销量区间)/Σ销量的销量加权口径,保本与目标利润测算均取该口径 - 核心算法:保本销量 = 固定成本 ÷ 单位边际贡献;目标利润销量 =(固定成本 + 税前目标利润)÷ 加权平均单位边际贡献;税前目标利润 = 目标税后利润 ÷(1 − 所得税率);DOL = 边际贡献 ÷ 利润;销量敏感系数恒等于 DOL(本模型已设校验行固化该恒等式)
- 分产品保本与固定成本分摊:05/06 页分产品保本点以「固定成本按各产品边际贡献额占比分摊」为前提;11 页再与「加权平均法(综合口径)」并列对比,说明两种口径在结构变动时的背离
- 产销计划(08 页):年销量 × 12 个月季节系数(合计 100%)拆月 → 月度销量;再按各产品产销率(产量÷销量)倒推月度产量,并做「期初 + 本期产量 − 本期销量 = 期末库存」的滚动库存平衡
- 产线控制与激励(13 页):以边际贡献(而非收入或利润)为考核指标,按
边际贡献额 × 计提比例(示例 3%)自动测算各产线奖金;对边际贡献率低于「最低边际贡献率」判据的产品自动标注「未达标,不扩大规模」,避免为摊薄固定成本而盲目扩产 - 接单决策(12 页):相关成本法——增量边际贡献 − 机会成本(被挤占正常订单量 × 正常单位边际贡献)= 净增量利润,并倒推最低可接受单价 = 单位变动成本 + 机会成本 ÷ 订单数量;固定成本在相关范围内属无关成本,不进入决策
- 图表(15 页):
LineChart本量利图(收入线 / 总成本线 / 固定成本线,交点为保本点)+BarChart利润-产能利用率图;数据全部引自 05 页 0%~100% 十一档测算,并设「图表数据 − CVP主表数据 = 0」校验 - 工作簿规范:16 页均设页首 3 行表头(
sheet_header()恒返回 4,公式行号零位移);颜色约定 蓝字+浅黄底=输入、黑字=公式、绿字=跨页引用、红字+浅红底=★ 校验行 - 生成与校验:
python scripts/build_cvp_mfg.py --out <文件>(--no-charts生成纯表格版);复检结果 0 公式错误 / 1108 个公式、41 条真实 ★ 校验行全部归零、0 图表部件遗漏(chart1/chart2 均正常嵌入) - 示例结果(全为【示例】占位值):
| 指标 | 数值 |
|---|---|
| 分产品单位变动成本(甲/乙/丙) | 722 / 1,592 / 236 元/件 |
| 加权平均单价 · 单位变动成本 · 单位边际贡献 | 1,054.69 / 667.76 / 386.94 元/件 |
| 固定成本总额(= 8 项固定 + 2 项混合分解固定部分) | 2,354.4 万元/年 |
| 边际贡献合计 · 综合边际贡献率 | 3,792 万元 · 37.0% |
| 利润 · 税后利润 | 1,437.6 万元 · 1,078.2 万元 |
| 综合保本销量 · 保本产能利用率 | 60,846.8 件 · 38.0% |
| 安全边际率 · 经营杠杆系数 DOL | 37.9% · 2.64 |
| 目标利润销量(税后目标 1,200 万元 → 税前 1,600 万元) | 102,197.0 件(目标产能利用率 64.0%,现销量差 −4,197 件) |
| 单价临界降幅 · 销量临界降幅 | −13.9% · −37.9%(= 安全边际率) |
| 单位变动成本临界升幅 · 固定成本临界升幅 | +22% · +61% |
| 敏感系数(按绝对值排序) | 单价 +7.19 > 单位变动成本 −4.55 > 销量 +2.64(= DOL)> 固定成本 −1.64 |
| 情景利润(乐观 / 中性 / 悲观) | +2,299.1 万 / +1,437.6 万 / −405.6 万(悲观情景安全边际率 −19.63%,跌破保本点) |
| 低价订单(单价 250 元、8,000 件、不挤占产能) | 净增量利润 +11.2 万元 → 接受(最低可接受单价 236 元) |
- 教学价值:产品丙(机床功能部件)边际贡献率仅 9.23%(收入占比 9.06% 但边际贡献占比仅 2.28%),低于 25% 的最低要求 → 04/13 页判据自动标注「未达标,不扩大规模」,直观演示「高收入占比 ≠ 高贡献」;同时 DOL 2.64 < 上限 3.0 但已不低,10 页月度 DOL 显示淡季杠杆显著抬升,是「淡季亏损放大」的量化解释
六行业本量利 CVP 模型(v1.0 · 2026-09-14;2026-10-09 新增软件与信息技术服务业)
商品流通/施工/房地产开发/旅游饮食服务/交通运输/软件与信息技术服务企业-本量利CVP模型.xlsx,生成器 scripts/build_cvp_ind.py,结构说明见 assets/built-models/结构说明/本量利CVP模型-结构说明.md(该文件自 2026-09-14 起为「工业企业基准版 + 六行业」合并版)。
- 实现方式(配置层参数化):
build_cvp_ind.py导入build_cvp_mfg引擎,调用M.set_industry(cfg)注入行业配置后复用其全部 16 页构建器。引擎与行业解耦——页结构、公式链路、混合成本高低点法、保本/目标利润/DOL/敏感性/情景算法、41 条 ★ 校验全部与行业无关;行业差异收敛于配置字典。新增行业 = 增加一个配置包,无需改引擎 - 词表替换层(
VOCAB/PROTECT):引擎是「词汇内嵌」的(模板文案中硬编码了「产品/销量/产能/产线/产销率/件」等工业词),行业化通过两层替换实现——① 整句级(sheet 名 → 01 页口径文案 → 单位标签 → 成本词组);② 词级(工业企业→行业名、产品→槽位名、销量→行业量名、设计产能→产能口径、产能→能力简称、产销率→行业比率名、产量→行业产出名、库存→存货名、产线→部门/门店/车队、扩产/排产/生产/产销激励/产销计划 等)。_sub()分两阶段:先跑多字规则(不冻结),再冻结PROTECT=["计件","部件","按件","文件","软件","组件","中间件"]后跑单字规则(如件→数量单位),避免「文件→本文㎡」类污染;2026-10-09 因软件行业新增三个词条——「软件 / 组件 / 中间件」都含「件」字,若不冻结会被单字规则误改为「软人月 / 组人月 / 中间人月」;规则按长度降序排序,防止短词吞长词 -
check_overrides()自检:对 01 编制说明页 6 处关键口径文案(口径段 / 成本结构段 / 变动成本段 / 固定成本段 / 混合成本段 / 目标段)逐条断言已被行业文案覆盖,防止「生成成功但口径仍是工业企业」的静默错误 -
量纲转换(七行业的「销量/产能/库存」重映射):
| 行业 | 槽位 | 业务量 | 业务量名 | 产能口径(单位) | 产出名 | 比率名 | 存货名 | 考核单元 |
|---|---|---|---|---|---|---|---|---|
| 工业企业 | 产品 | 件 | 销量 | 设计产能(件/年) | 产量 | 产销率 | 库存 | 产线 |
| 商品流通企业 | 品类 | 件 | 销量 | 设计经营量(件/年) | 进货量 | 进货率 | 库存 | 门店 |
| 施工企业 | 工程 | ㎡ | 结算量 | 年施工能力(㎡/年) | 施工量 | 施工完成率 | 未结算量 | 项目部 |
| 房地产开发企业 | 业态 | ㎡ | 销售面积 | 可售面积(㎡) | 新开工面积 | 开发推货比 | 可售存货 | 项目 |
| 旅游饮食服务企业 | 业务 | 人次 | 接待量 | 年接待能力(人次/年) | 可供量 | 供给满足率 | 可售资源储备 | 经营部门 |
| 交通运输企业 | 线路 | 车公里 | 运营量 | 年运力(车公里/年) | 可运量 | 运力配置率 | 运力储备 | 车队 |
| 软件与信息技术服务业 | 业务线 | 人月 | 人月数 | 可交付人月(人月/年) | 实际交付人月 | 人员利用率 | 未完工项目(合同履约成本) | 交付团队 |
- 成本项目重映射(每行业 6 项变动 + 8 项固定 + 2 项混合,全部重新定义):
| 行业 | 变动成本 6 项(合计口径) | 固定成本特征项 | 混合成本 2 项 |
|---|---|---|---|
| 商品流通企业 | 商品进价 + 进货运杂费 + 包装与损耗 + 变动销售费用 | 门店/仓储固定费用(租金/物业)+ 装修货架冷链折旧 | 门店水电能耗;物流配送与车辆费用 |
| 施工企业 | 人工费 + 材料费 + 机械使用费 + 措施费 + 专业分包费 + 现场变动费用 | 项目部固定人员 + 施工机械折旧 + 驻地临建摊销 | 现场临时用电用水;周转材料租赁 |
| 房地产开发企业 | 前期工程费 + 建筑安装工程费 + 基础设施费 + 公共配套费 + 开发间接费变动部分 + 销售代理费 | 土地成本(土地出让金与契税)按项目一次性计入固定成本(体现「土地前置投入、建安随面积变动」) | 项目现场管理费;销售中心与样板区运营费 |
| 旅游饮食服务企业 | 客用品与布草洗涤 + 餐饮原材料 + 能耗水电 + 计件服务人工 + 渠道佣金(OTA)+ 增值服务采购 | 固定人工(管理/前厅/客房/厨房)+ 装修与设备折旧 + 场地租金 | 公共区域能耗与物业;洗涤与后勤运输 |
| 交通运输企业 | 燃油费 + 路桥通行费 + 司机计件薪酬 + 车辆维修与轮胎 + 保险年检 + 场站装卸费 | 固定人工(调度/管理/后勤)+ 车辆折旧 + 场站租金 | 车辆保养与场站水电;车辆租赁与调度 |
| 软件与信息技术服务业 | 直接人力(计时/计件人工)+ 外包与分包 + 云资源与带宽 + 第三方软件许可 + 渠道与代理佣金 + 差旅与实施费用(均按人月口径) | 研发与运营固定费用(固定人工:管理 / 售前 / 预研 / 质量 + 办公场地租金与物业 + 服务器与设备折旧 + 软件工具与平台摊销 + 基础云资源保底)+ 期间费用 | 办公与机房能耗水电;差旅与外部培训费 |
- 页签命名行业化(含「产线控制与激励」→ 考核单元控制与激励):
| 行业 | 08 页(用途①) | 11 页 | 13 页(用途②) |
|---|---|---|---|
| 工业企业 | 08 产销计划 | 11 多产品CVP | 13 产线控制与激励 |
| 商品流通企业 | 08 购销计划 | 11 多品类CVP | 13 门店控制与激励 |
| 施工企业 | 08 施工与结算计划 | 11 多工程CVP | 13 项目部控制与激励 |
| 房地产开发企业 | 08 销售与开发计划 | 11 多业态CVP | 13 项目控制与激励 |
| 旅游饮食服务企业 | 08 接待与排班计划 | 11 多业务CVP | 13 经营部门控制与激励 |
| 交通运输企业 | 08 运输与调度计划 | 11 多线路CVP | 13 车队控制与激励 |
| 软件与信息技术服务业 | 08 交付与排产计划 | 11 多业务线CVP | 13 交付团队控制与激励 |
- 行业化判据阈值(
02 假设与目标全局参数,可按需改):
| 行业 | 最低边际贡献率 | 安全边际率下限 | DOL 上限 | 目标税后利润 | 奖金计提比例 |
|---|---|---|---|---|---|
| 工业企业 | 25.0% | 30.0% | 3.0 | 1,200 万 | 3.0% |
| 商品流通企业 | 16.0% | 30.0% | 3.0 | 300 万 | 4.0%(购销激励) |
| 施工企业 | 16.0% | 30.0% | 3.0 | 400 万 | 2.0%(承揽激励) |
| 房地产开发企业 | 40.0% | 25.0% | 5.0 | 2,000 万 | 1.5%(销售激励) |
| 旅游饮食服务企业 | 35.0% | 25.0% | 5.0 | 600 万 | 3.0%(经营部门激励) |
| 交通运输企业 | 20.0% | 30.0% | 3.0 | 300 万 | 2.5%(揽货激励) |
| 软件与信息技术服务业 | 35.0% | 25.0% | 5.0 | 8,000 万 | 3.0%(项目激励) |
> 房地产与旅游饮食服务为重资产/人力密集行业,固定成本占比高、杠杆天然偏大,故 DOL 上限放宽到 5.0、安全边际率下限降到 25%。软件与信息技术服务业同为人力密集(固定人工与办公场地刚性、工资社保不可延后),最低边际贡献率取 35%(人力成本占比高、CMR 天然低于制造与流通)、安全边际率下限 25%、DOL 上限 5.0;所得税率取 15%(多数为高新技术企业);奖金按边际贡献额 × 3% 计提给交付团队。
- 示例结果(全为【示例】占位值,七行业横向可比):
| 行业 | 设计产能 | 预计量 | 综合保本量 | 保本产能利用率 | 安全边际率 | DOL | 综合 CMR | 销售收入 | 固定成本总额 | 利润 | 税后利润 | 目标利润销量 | 目标利用率 | 单价临界降幅 | 接单净增量利润 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 工业企业 | 160,000 件 | 98,000 件 | 60,847 件 | 38.03% | 37.91% | 2.64 | 36.69% | 10,336 万 | 2,354.4 万 | 1,437.6 万 | 1,078.2 万 | 102,197 件 | 63.87% | −13.91% | +11.2 万 |
| 商品流通企业 | 640 万件 | 490 万件 | 305.2 万件 | 47.69% | 37.71% | 2.65 | 16.28% | 8,700 万 | 882.5 万 | 534.2 万 | 400.7 万 | 443.6 万件 | 69.31% | −6.14% | +6.5 万 |
| 施工企业 | 10 万 ㎡ | 6 万 ㎡ | 3.19 万 ㎡ | 31.90% | 46.83% | 2.14 | 15.26% | 8,996 万 | 730 万 | 643.0 万 | 482.3 万 | 5.52 万 ㎡ | 55.21% | −7.15% | +20.5 万 |
| 房地产开发企业 | 5.4 万 ㎡ | 3.9 万 ㎡ | 3.08 万 ㎡ | 57.04% | 21.03% | 4.76 | 51.00% | 29,130 万 | 11,733.5 万 | 3,124.0 万 | 2,343.0 万 | 3.78 万 ㎡ | 70.00% | −10.72% | +24.5 万 |
| 旅游饮食服务企业 | 74 万人次 | 48 万人次 | 35.73 万人次 | 48.29% | 25.55% | 3.91 | 56.26% | 8,270 万 | 3,464.0 万 | 1,189.0 万 | 891.8 万 | 43.99 万人次 | 59.44% | −14.38% | +3.6 万 |
| 交通运输企业 | 1,160 万车公里 | 794 万车公里 | 511.7 万车公里 | 44.12% | 35.55% | 2.81 | 22.06% | 5,838.8 万 | 830 万 | 457.8 万 | 343.4 万 | 758.4 万车公里 | 65.38% | −7.84% | +5.8 万 |
| 软件与信息技术服务业 | 35,000 人月 | 28,000 人月 | 17,128.4 人月 | 48.94% | 38.83% | 2.58 | 39.88% | 90,800 万 | 22,150 万 | 14,058.8 万 | 11,950.0 万 | 24,406.5 人月 | 69.73% | −15.48% | +36.0 万 |
- 敏感系数排序(按绝对值,★ 校验「销量/人月数敏感系数 = DOL」在七行业均成立):
| 行业 | 第 1 位 | 第 2 位 | 第 3 位 | 第 4 位 |
|---|---|---|---|---|
| 工业企业 | 单价 +7.19 | 单位变动成本 −4.55 | 销量 +2.64 | 固定成本 −1.64 |
| 商品流通企业 | 单价 +16.29 | 单位变动成本 −13.63 | 销量 +2.65 | 固定成本 −1.65 |
| 施工企业 | 单价 +13.99 | 单位变动成本 −11.86 | 销量 +2.14 | 固定成本 −1.14 |
| 房地产开发企业 | 单价 +9.32 | 销量 +4.76 | 单位变动成本 −4.57 | 固定成本 −3.76 |
| 旅游饮食服务企业 | 单价 +6.96 | 销量 +3.91 | 单位变动成本 −3.04 | 固定成本 −2.91 |
| 交通运输企业 | 单价 +12.75 | 单位变动成本 −9.94 | 销量 +2.81 | 固定成本 −1.81 |
| 软件与信息技术服务业 | 单价 +6.46 | 单位变动成本 −3.88 | 人月数 +2.58 | 固定成本 −1.58 |
-
教学价值:「单价敏感系数恒居第一」在七行业均成立;但房地产、旅游饮食服务(低变动成本率/高 CMR)的销量敏感系数反超单位变动成本敏感系数——这两类行业的单位变动成本本身占售价比例低,降本空间有限,「把量做上去」比「压单位成本」对利润的边际贡献更大,与商品流通/施工/交通(变动成本率高)恰好相反。这一反直觉结论正是本模型 09 页存在的意义
-
示例判据结论(体现「未达标自动标注」的教学设计):
| 行业 | 综合 CMR 判据 | 安全边际率判据 | DOL 判据 | 税后利润判据 | 结构判据(低于最低 CMR 的槽位) |
|---|---|---|---|---|---|
| 工业企业 | 达标 | 达标 | 正常 | 未达成 | 产品丙 9.23% |
| 商品流通企业 | 达标(16.28%) | 达标 | 正常 | 达成 | 品类甲 15.17% |
| 施工企业 | 未达标(15.26%) | 达标 | 正常 | 达成 | 工程甲 15.11% / 工程丙 13.35% |
| 房地产开发企业 | 达标(51.00%) | 不足(21.03%) | 正常(4.76) | 达成 | 业态丙 34.72% |
| 旅游饮食服务企业 | 达标(56.26%) | 达标(25.55%) | 正常(3.91) | 达成 | 业务乙 30.00% |
| 交通运输企业 | 达标(22.06%) | 达标 | 正常 | 达成 | 线路甲 16.18% |
| 软件与信息技术服务业 | 达标(39.88%) | 达标(38.83%) | 正常(2.58) | 达成(11,950 万 ≥ 8,000 万) | 无——三条业务线 CMR 均 ≥ 35%(35.81% / 37.80% / 51.24%) |
- 有意留出的「未达标」情形(作为判据功能的演示,非模型缺陷):① 工业「税后利润未达成」(1,078.2 万 < 目标 1,200 万)、产品丙 CMR 9.23% ≪ 25%;② 施工「综合 CMR 未达标」(15.26% < 16%,工程类行业薄利特征);③ 房地产「安全边际率不足」(21.03% < 25%,同时 DOL 4.76 逼近上限 5.0)——低安全边际 + 高经营杠杆 = 最危险组合,正是房地产行业风险画像的量化表达。软件与信息技术服务业是七行业中唯一「全部判据达标」的版本(三条业务线 CMR 35.81% / 37.80% / 51.24% 均不低于 35% 门槛、安全边际率 38.83% > 25%、DOL 2.58 ≪ 5.0、税后利润 11,950 万 > 目标 8,000 万)——但接单决策页给出反向教学点:低价订单 22,000 元/人月仅比参照业务线单位变动成本 21,940 元/人月 高 60 元,净增量利润仅 +36.0 万元(边际贡献率 0.27%),提醒「达标」不等于「可以随便接低价单」
- 生成与校验:
python scripts/build_cvp_ind.py --industry 商品流通 --out "商品流通企业-本量利CVP模型.xlsx"
python scripts/build_cvp_ind.py --all --outdir ./out # 一次生成六份
python scripts/verify_formulas.py "商品流通企业-本量利CVP模型.xlsx" # 0 公式错误
python scripts/check_star_cvp.py "商品流通企业-本量利CVP模型.xlsx" # 41 条 ★ 全部归零
- 校验结果:六模型均 16 页 / 1,108 个公式 / 41 条 ★ 校验行全部归零 / 0 公式错误 / 0 残留工业词(软件版 16 页 / 1,107 公式 / 41 条 ★ 全零;
validate_built_models.py需--allow 计件人工 --allow 排产—— 「直接人力(计时/计件人工)」与「08 交付与排产计划」是该行业的正常用词,非替换残留)(由scripts/validate_built_models.py批量扫描验证:不含「工业企业/制造费用/计件人工/设计产能/产销计划/产线控制与激励/产品甲乙丙/数控机床/扩产/排产/直接材料/厂房/车间」等基准行业词,也无「设计设计」「文㎡」类替换副产物),与工业版公式结构零回归(工业版逐格比对仅 4 处差异,均为本次有意修复的奖金精度与提示文案) - 踩坑记录(行业化改造):① 单字规则
件→数量单位会把「文件」改写成「本文㎡」——必须配合PROTECT冻结与两阶段替换;② 模板里的{tags[j]}设计{cn}在槽位名已含「设计」时会产生「品类甲设计设计经营量」,须让模板只输出{槽位}{产能口径};③ 引擎内CHART_ON为模块级开关,批量生成后须复位,否则--no-charts一旦生效会带到下一份文件;④ 奖励金行若对「边际贡献额 × 计提比例」做 ROUND,会与 ★ 校验的「奖金合计 − 边际贡献合计 × 计提比例」产生分位差——奖金单元格存全额精度,仅靠数字格式显示为整数
第五类模型(平衡记分卡 BSC 模型)· 七行业齐备
七份工作簿:工业企业-平衡记分卡BSC模型.xlsx(v1.1 · 2026-09-14,基准版,scripts/build_bsc_mfg.py)+ 商品流通企业 / 施工企业 / 房地产开发企业 / 旅游饮食服务企业 / 交通运输企业 / 软件与信息技术服务企业-平衡记分卡BSC模型.xlsx(v1.1 · 2026-09-14 / 2026-10-09,scripts/build_bsc_ind.py);结构说明见 assets/built-models/结构说明/平衡记分卡BSC模型-结构说明.md(2026-09-14 起为「七行业」合并版)。
以下 16 页结构、核心算法、部门约束、因果链、激励归一化、目标阶梯与情景等机制为七行业共用;工业口径的指标与部门见本节,六行业差异见下文的「六行业版」小节。
- 控制表依据(第 7 行):基础表单 = 围绕企业的战略目标,利用 BSC 从财务 / 顾客 / 内部过程 / 学习与创新四个方面建立相应的目标以及衡量该目标是否实现的指标,其他包括编制说明、假设与目标;数据维度 = ① 月度、年度汇总 ② 部门;用途 = 利用 BSC 从四个方面对企业进行全面的测评。控制表该行六行业列均标「内置」;本技能已交付七个行业版本(工业版为引擎默认口径,另六行业由
build_bsc_ind.py注入配置生成,含 2026-10-09 新增的软件与信息技术服务业) - 16 页结构:01 编制说明 / 02 假设与目标(全局参数:战略目标、四维度权重、评分参数、评价等级、部门清单与绩效权重、激励系数档、奖金池、阶梯系数)/ 03 战略目标与战略地图 / 04 指标体系(输入页)/ 05 指标字典 / 06 数据采集-公司级(输入页)/ 07 得分计算-公司级 / 08 部门记分卡 / 09 部门月度得分 / 10 趋势看板 / 11 因果链分析 / 12 行动计划(输入页)/ 13 激励挂钩 / 14 目标阶梯与情景 / 15 图表 / 16 结论与建议
- 填报页共 4 页(其余 12 页为公式页):02 全局参数与战略目标、04 指标目标值与权重、06 月度实际值、12 行动计划
- 四维度 16 项指标(每维度 4 项,权重合计 100%):
- 财务 35%:营业收入达成率(10%)、综合毛利率(8%)、单位制造成本下降率(9%)、经营性现金流达成率(8%)
- 顾客 25%:准时交付率(8%)、客户满意度(7%)、客户投诉率(5%·逆向)、新客户收入占比(5%)
- 内部过程 25%:一次交检合格率(8%)、设备综合效率 OEE(6%)、采购及时到货率(5%)、安全生产事故率(6%·逆向·否决项)
- 学习与创新 15%:员工流失率(5%·逆向)、培训完成率(4%)、人均产出(3%)、新产品收入占比(3%)
- 核心算法:
指标得分 = 达成率(封顶 120%)× 权重 × 100(满分 100 分);正向指标达成率 = 实际÷目标,逆向 = 目标÷实际(实际为 0 取封顶);年度得分 = AVERAGE(12 个月得分);维度得分 = Σ 该维度 4 项;综合得分 = Σ 四维度;达标判定 = IF(达成率≥100%,"达标",IF(≥95%,"基本达标","未达标")) - 部门维度(本模型的核心设计约束):每项指标归口唯一主责部门 ⇒
Σ部门得分 ≡ 公司综合得分(已固化为 08/09 页 ★ 校验行)。部门绩效权重 = 该部门主责指标权重合计(自动汇总),因此部门得分率 = 部门得分 ÷(部门权重 × 100)成为消除权重差异、可跨部门横向比较的无量纲指标,用于排名、等级判定与绩效系数取值。示例 7 部门与权重:销售部 30% / 生产部 21% / 财务部 19% / 质量部 13% / 人力资源部 9% / 采购部 5% / 研发部 3% - 因果链量化(11 页):把战略地图的「学习与创新 → 内部过程 → 顾客 → 财务」量化为领先指标(驱动层)vs 滞后指标(结果层)的达成率对比,自动判定「投入是否已转化为结果」——领先达成率低于滞后即为不可持续(在消耗存量能力)
- 激励归一化(13 页):
奖金基数 = 奖金池 × 部门权重、绩效系数 = 按部门得分率查档、实发奖金 = 奖金池 × (基数×系数) ÷ Σ(基数×系数)——归一化保证 Σ实发 ≡ 奖金池(不超发、不结余),两条 ★ 校验行固化 - 目标阶梯与情景(14 页):三档阶梯(底线 0.70 / 目标 0.85 / 挑战 1.00 × 满分)输出「已达挑战 / 已达目标 / 达底线 / 未达底线」;情景分析对 16 项指标年度实际值施加 ±10%(正向 ×(1±10%)、逆向 ×(1∓10%))后重算综合得分,中性情景得分 ≡ 07 页得分(★ 校验,确保情景引擎无偏差)
- 图表(15 页):
RadarChart四维度雷达图(当前 vs 满分)+LineChart月度综合得分趋势(含合格线)+BarChart部门得分率对比;三图表均基于公式区域,数据变化自动更新;--no-charts可生成纯表格版 - 工作簿规范:16 页均设页首 3 行表头(
sheet_header()恒返回 4,公式行号零位移);颜色约定 蓝字+浅黄底=输入、黑字=公式、绿字=跨页引用、红字+浅红底=★ 校验行 - 生成与校验:
python scripts/build_bsc_mfg.py --out <文件>(--no-charts生成纯表格版);复检结果 0 公式错误 / 1,104 个公式 / 23 条 ★ 校验行(88 个校验单元格)全部归零 / chart1~3 正常嵌入 - 示例结果 · 工业企业(全为【示例】占位值):
| 层级 | 年度得分 | 满分 | 达成率 | 等级 |
|---|---|---|---|---|
| 财务维度 | 30.40 | 35 | 86.9% | 良好 |
| 顾客维度 | 22.93 | 25 | 91.7% | 优秀 |
| 内部过程维度 | 23.85 | 25 | 95.4% | 优秀 |
| 学习与创新维度 | 12.38 | 15 | 82.5% | 良好 |
| 综合得分 | 89.56 | 100 | 89.6% | 良好 |
| 安全否决调整后综合得分 | 89.56 | — | — | 事故率 0.258 ≤ 0.30,未触发折减 |
- 达标分布:达标 3 项 / 基本达标 7 项 / 未达标 6 项(F3 单位制造成本下降率 50.0%、C4 新客户收入占比 65.0%、P2 OEE 85.4%、P3 采购及时到货率 88.1%、L1 员工流失率 70.3%、L4 新产品收入占比 64.4%)
- 部门排名(按部门得分率):财务部 98.9%(1) > 质量部 98.9%(2) > 销售部 93.7%(3) > 采购部 88.1%(4) > 人力资源部 83.3%(5) > 生产部 76.0%(6) > 研发部 64.4%(7)
- 激励分配(奖金池 120 万元):实发 2.07 万(研发部,系数 0.70)~ 38.53 万(销售部,系数 1.30);最高系数 1.50(财务部/质量部)
- 目标阶梯:财务 / 顾客 / 内部过程「已达目标」,学习与创新「达底线」,综合 89.56 介于目标 85 与挑战 100 之间
- 情景:乐观 98.73 / 中性 89.56 / 悲观 81.22(悲观仍高于合格线 70 分)
- 教学价值:① 「学习与创新」(82.5%) 与「财务」(86.9%) 达成率最低,构成「驱动层短板 → 结果层承压」的完整因果演示;② 研发部只挂 1 项指标(权重 3%),单项失分即跌至 64.4%「待改进」——「一个部门一个指标」时指标选择风险极高,是最值得向用户提示的管理启示;③ 12 个月中有 3 个月单月事故率超过 0.30 阈值但年度汇总仅 0.258,若改用「月度超标即否决」口径结论完全不同——否决项口径必须事先明确
- 实现踩坑(生成 BSC 时必避):① 页签常量与列号常量重名——07 页「年度实际」列号若命名
S_ACT会覆盖页签常量S_ACT(12 行动计划),触发TypeError: expected string or bytes-like object, got 'int';② 跨页引用助手必须分两种语义——_sref()返回不带=的片段供拼接、_x()自动补=供整格写入,若只写一个函数并在整格写入处调用,单元格会退化为文本字面量(求值器读到字符串而非数字,★ 校验恒为非零且不报错,极难发现);③ 每页列标题必须在sec()之后——sheet_header()只占 1~3 行并返回 4,直接接hrow()会使列标题写在表头第 3 行上、数据整体上移一行;构建器内应用assert r == <行号常量>锁死行号;④ 下游页面不要用「首行+偏移」猜上游行位置,改用模块级全局(如TREND_COMP_ROW)由上游写入;⑤ 不要用 Excel 的&拼接数字——独立求值器不支持&,自动判读结论必须写成整句文本的 IF 分支
六行业版(配置层参数化,v1.1 · 2026-09-14;2026-10-09 新增软件与信息技术服务业)
商品流通企业 / 施工企业 / 房地产开发企业 / 旅游饮食服务企业 / 交通运输企业 / 软件与信息技术服务企业-平衡记分卡BSC模型.xlsx,生成器 scripts/build_bsc_ind.py。
- 实现方式(引擎与行业解耦):
build_bsc_ind.py导入build_bsc_mfg引擎,调用M.set_industry(cfg)(先复位基线快照、再写入行业全局量)注入行业配置后复用其全部 16 页构建器。页结构、公式链路、评分算法、★ 校验行、图表全部与行业无关;行业差异收敛于六个配置包。新增行业 = 增加一个配置包,无需改引擎 - 行业差异的全部落脚点(9 类):① 行业名与 01 页编制口径;② 16 项指标映射;③ 7 个部门与负责人;④ 5 条战略目标;⑤ 四维度主题与因果链口径(
dim_theme/P_CHAIN/P_DIM_SRC);⑥ 否决项(指标 / 单位 / 阈值 / 用语veto_label·unit·rate·word);⑦ 行动计划根因与措施文案(P_ACT_*);⑧ 16 页六条主线建议的第 ③④ 条(P_ADVICE);⑨ 示例数据水位 - 16 项指标的行业重映射(保持 9 项同构 + 7 项行业化,权重分配七行业完全一致):
| 编码 | 维度 | 商品流通 | 施工 | 房地产开发 | 旅游饮食服务 | 交通运输 | 软件与信息技术服务 |
|---|---|---|---|---|---|---|---|
| F1/F2/F4 | 财务 | 营业收入达成率 / 综合毛利率 / 经营性现金流达成率(七行业同构) | 同左 | 同左 | 同左 | 同左 | 同左(毛利率按项目/产品线加权) |
| F3 | 财务 | 采购成本率下降率 | 单位施工成本下降率 | 单方开发成本下降率 | 单位客均成本下降率 | 单公里运输成本下降率 | 人力成本率下降率 |
| C1 | 顾客 | 订单履约及时率 | 工期履约率 | 交付准时率 | 预订单履约率 | 准点率 | 项目交付准时率 |
| C2/C3 | 顾客 | 客户满意度 / 客户投诉率(施工为业主满意度/投诉率) | 业主满意度 / 业主投诉率 | 客户满意度 / 客户投诉率 | 客户满意度 / 客户投诉率 | 客户满意度 / 客户投诉率 | 客户满意度(按合同额/ARR 加权)/ 客户投诉率 |
| C4 | 顾客 | 新客户收入占比 | 新签合同额占比 | 新客户成交占比 | 新客户收入占比 | 新客户收入占比 | 新客户收入占比(SaaS 可换 NDR 口径) |
| P1 | 内部过程 | 订单履约准确率 | 一次验收合格率 | 工程一次验收合格率 | 客房卫生达标率 | 车辆完好率 | 一次验收合格率(或千行缺陷率) |
| P2 | 内部过程 | 库存周转次数 | 施工机械完好率 | 开发计划节点达成率 | 客房入住率 | 里程利用率 | 研发计划达成率(里程碑/迭代) |
| P3 | 内部过程 | 采购及时到货率 | 材料及时到货率 | 招标采购及时率 | 食材及时到货率 | 配件及时到货率 | 需求变更率(逆向) |
| P4 | 内部过程 | 食品安全事故率(否决) | 安全事故率(否决) | 重大安全质量事故率(否决) | 食品安全事故率(否决) | 行车责任事故率(否决) | 数据安全事故率(否决) |
| L1/L2 | 学习与创新 | 员工流失率 / 培训完成率(七行业同构) | 同左 | 同左 | 同左 | 同左 | 同左(含研发与实施一线员工) |
| L3 | 学习与创新 | 人均产出 | 人均产值 | 人均产出 | 人均产出 | 人均产值 | 人均产出(万元/人·月) |
| L4 | 学习与创新 | 自有品牌收入占比 | 装配式与新技术收入占比 | 自持与多元收入占比 | 非客房收入占比 | 新能源车辆运营占比 | 新技术/自研产品收入占比 |
- 否决项逐行业口径(恒为
IND[11],即内部过程维度第 4 项——引擎硬约束):
| 行业 | 否决指标 | 单位 | 阈值 | 用语 |
|---|---|---|---|---|
| 商品流通 | 食品安全事故率 | 次/百万件 | 0.20 | 红线否决 |
| 施工 | 安全事故率 | 次/百万工时 | 0.30 | 安全否决 |
| 房地产开发 | 重大安全质量事故率 | 次/百万工时 | 0.10 | 红线否决 |
| 旅游饮食服务 | 食品安全事故率 | 次/万餐次 | 0.15 | 食品安全否决 |
| 交通运输 | 行车责任事故率 | 次/百万公里 | 0.30 | 安全否决 |
| 软件与信息技术服务 | 数据安全事故率 | 次/百万用户 | 0.20 | 红线否决 |
(折减系数六行业统一 0.60,可在 02 页改)
- 部门设置(各 7 个,权重合计均 100%):商品流通 = 营运部 19% / 采购部 14% / 配送中心 16% / 财务部 19% / 质量管理部 11% / 人力资源部 9% / 市场部 12%;施工 = 商务部 31% / 项目部 14% / 工程管理部 13% / 安全质量部 11% / 财务部 19% / 人力资源部 9% / 技术中心 3%;房地产开发 = 营销部 15% / 财务部 19% / 成本合约部 14% / 工程部 22% / 客服部 12% / 项目开发部 9% / 人力资源部 9%;旅游饮食服务 = 客房部 22% / 餐饮部 18% / 市场营销部 15% / 服务质量部 12% / 财务部 19% / 人力资源部 9% / 采购部 5%;交通运输 = 市场营销部 27% / 财务部 19% / 运营调度部 15% / 维修保障部 13% / 车队 11% / 安全部 6% / 人力资源部 9%;软件与信息技术服务 = 销售部 22% / 财务部 19% / 研发中心 18% / 交付中心 16% / 质量与安全部 11% / 人力资源部 9% / 产品部 5%(部门全称「软件与信息技术服务企业」,主责人:销售总监 / 财务总监 / 研发总监 / 交付总监 / 质量与安全总监 / 人力资源总监 / 产品总监)
- 生成:
python scripts/build_bsc_ind.py --industry 商品流通 --out "商品流通企业-平衡记分卡BSC模型.xlsx",或--all --outdir <目录>一次生成六份 - 示例结果(六行业,全为【示例】占位值):
| 行业 | 综合得分 | 等级 | 否决调整后 | 未达标项 | 奖金池 | 部门得分率区间 |
|---|---|---|---|---|---|---|
| 商品流通企业 | 89.60 | 良好 | 89.60(未触发) | 6 | 100 万 | 99.1%(质量管理部)~ 69.7%(采购部) |
| 施工企业 | 91.12 | 优秀 | 91.12(未触发) | 5 | 130 万 | 98.2%(项目部)~ 64.1%(技术中心) |
| 房地产开发企业 | 89.31 | 良好 | 89.31(未触发) | 7 | 150 万 | 100.0%(工程部)~ 69.5%(成本合约部) |
| 旅游饮食服务企业 | 88.38 | 良好 | 53.03(已触发食品安全否决 → 不合格) | 7 | 90 万 | 96.3%(财务部)~ 72.1%(采购部) |
| 交通运输企业 | 89.62 | 良好 | 89.62(未触发) | 6 | 110 万 | 102.3%(安全部)~ 76.5%(运营调度部) |
| 软件与信息技术服务企业 | 89.71 | 良好 | 89.71(未触发,事故率 0.20 未超阈值) | 6 | 120 万 | 97.3%(质量与安全部)~ 75.9%(产品部) |
- 两个教学样本:① 施工企业 91.12 是唯一落「优秀」档(≥90)的版本,且判读为「领先指标达成率低于滞后指标」(当期业绩在消耗存量能力)——与工业版结论相反,可对比讲解 11 页因果链判据;② 旅游饮食服务企业是唯一触发否决的版本:食品安全事故率年度 0.2233 > 阈值 0.15,07 页「食品安全否决调整后综合得分」= 88.38 × 0.60 = 53.03,等级由「良好」直接跌至「不合格」,16 页自动输出整改要求
- 六行业复检:0 公式错误 · 23 条 ★ 校验行全部归零(87~89 个校验单元格,随未达标项数浮动)· 0 基准行业词残留 · 0 重复词 · chart1~3 正常嵌入;
validate_built_models.py七份一次性验收「总体 全部通过」 - 软件与信息技术服务业的三个观察点:① 四个维度达成率 92.6% / 90.3% / 91.6% / 84.1%,短板落在「学习与创新」(核心技术人才与自研产品投入不足)——与工业版同向但更陡(工业 89.6% 综合、学习与创新 82.5%);② 7 部门得分率极差 21.4 个百分点(97.3% ~ 75.9%),末位是只挂 1 项 5% 权重指标的产品部(需求变更率),与工业版「研发部只挂 1 项 3% 指标」同属「单指标部门」风险的复现;③ 否决项阈值 0.20 次/百万用户,年度实际 0.185(余量仅 7.5%)未触发折减,但 6 月的单月值 0.23 已超阈值——是七行业中阈值最贴近实际值的版本,讲解「否决项口径必须事先明确(年度汇总 vs 任一月份超标即否决)」时,比旅游饮食服务的「已触发」更适合做边界敏感性演示
- 参数化踩坑(v1.1 新增,生成其他行业 BSC 时必避):⑥ 配置键大小写映射——引擎全局量大写(
IND/GOALS/DEPTS/VETO_RATE)、配置包小写(ind/goals/depts/veto_rate),必须经build_bsc_ind._inject(cfg)做键映射,不要把配置包直接传给set_industry()(未知键被静默忽略,引擎会沿用上一行业全局量,症状为「结果与配置不符」且 12 页断言行动计划缺少未达标指标);⑦ 指标数 16 / 每维度 4 项 / 权重合计 100% / 否决项固定在IND[11],由_check()强制校验;⑧ 部门数建议固定 7(08/09/13 页行数随之浮动,验证脚本不会报错但会改变 ★ 校验单元格数,记录时必须写明行业);⑨ 示例数据水位必须逐行业标定——目标值量纲差异极大(毛利率 12%~55%、人均产出 2~30 万元/人·月),直接复用工业水位会让综合得分虚高到 94~97(全部「优秀」),建议先用达成率 = min(max(实际÷目标, 0), 1.2)试算再加权反推水位
第六类模型(成本计算)· 工业企业基准版 —— 标准成本 v2.0 + 作业成本 v1.0
> 控制表把「成本计算」拆为第 8 行 标准成本与第 9 行 作业成本两行,两者共用同一套 12 页骨架与分步法·逐步结转口径,唯一结构性差别是成本分摊环节:标准成本为单页 07 成本分配表(按定额/标准工时直接分摊),作业成本为07 作业识别与动因率表 + 08 作业成本分配表两页(资源动因 → 作业动因两阶段分摊)。因此实现上以标准成本生成器为引擎、作业成本生成器复用之,下游页(09 汇总起)完全一致。
>
> 共用页骨架(两模型一致):01 编制说明 / 02 假设与参数 / 03 成本对象与在制品台账 / 04 物料BOM定额表 / 05 工序成本定额表 / 06 成本费用归集表 / …分摊环节… / 车间成本汇总 / 车间在制品与结转 / 单位成本表 / 成本差异分析 / 出入库与结转。标准成本共 12 页;作业成本因分摊环节占两页共 13 页,且其「08 车间成本汇总」起页码较标准成本顺延一位(标准成本 08~12 ↔ 作业成本 09~13),跨模型引用页号时必须逐页核对。
成本计算-标准成本模型 · 工业企业基准版 v2.0
工业企业-成本计算-标准成本模型.xlsx(v2.0 · 2026-09-15,生成器 scripts/build_cost_mfg.py,结构说明见 assets/built-models/结构说明/成本计算-标准成本模型-结构说明.md):
- 控制表依据(第 8 行):基础表单 = 按一定的成本对象,对生产、经营过程中所发生的成本费用进行归集,以确定各对象的总成本与单位成本;数据维度 = ① 多种产品 ② 多工序和车间 ③ 在制品和产成品;用途 = ① 成本、费用归集 ② 在制品和产成品成本计算。控制表该行六行业列均为
N/A(未标注「内置」),目前仅交付工业企业一版;其他行业走第 1 步「参考迁移」分支(先声明参考工业口径,再直接创建) - 12 页结构:01 编制说明 / 02 假设与参数 / 03 成本对象与在制品台账 / 04 物料BOM定额表 / 05 工序成本定额表 / 06 成本费用归集表 / 07 成本分配表 / 08 车间成本汇总 / 09 车间在制品与结转 / 10 单位成本表 / 11 成本差异分析 / 12 出入库与结转
- 控制表三维度落点:①「多种产品」= 04/05 定额表与 10 单位成本表按 3 个产品分别列示;②「多工序和车间」= 3 个车间断阶成本中心 —— ①一车间·下料冲压(OP1)→ 冲压件、②一车间·机加工(OP2)→ 机加工半成品、③二车间·装配测试(OP3)→ 产成品;③「在制品和产成品」= 03 台账按断阶登记期初在产 / 本月投产 / 完工转出 / 工费完工程度,09 页逐阶切分并结转
- v2.0 核心口径:分步法 · 逐步结转(综合结转) —— 半成品随实物逐阶结转,下一阶「本月投产数量」自动等于上一阶「完工转出」,末阶完工转出即产成品;跨车间(一车间 → 二车间)的转入半成品单独计入车间投入,而车间内部断阶之间的转移不重复计入
- 在制品核算:双约当产量法 —— 料性投入(直接材料 + 转入半成品)按 100% 折约当;加工成本(直接人工 + 制造费用)按各断阶工费完工程度折约当;每个断阶独立切分「完工转出 / 期末在产」
- 06 成本费用归集表三层结构(v2.0 重构):车间 → 成本项目(直接材料 / 直接人工 / 制造费用)→ 二级明细项目。一车间 = OP1 + OP2 两个断阶小计之和;二车间 = OP3;全厂合计独立成块(取数来源以自然语言注明,不得以
=开头) - 09 页两个新增块:块四「车间在制品成本汇总」 按车间口径汇总(期初 + 本期新增〔料+工+费〕 + 跨车间转入 − 移出),附全厂物料平衡 ★;块五「产成品成本还原」 综合结转下产成品的「转入半成品」掩盖了前阶料/工/费结构,按各阶料性占比与工费比逐步分解还原为料/工/费,附 ★ 还原校验
- 其他要点:六因素差异分解(材料价格/用量、人工工资率/效率、制费耗费/效率)+ 加权平均结转 + 出入库结转主营业务成本
- 校验:
python scripts/verify_formulas.py <文件>(独立求值器 0 错误)+python scripts/validate_built_models.py assets/built-models 成本计算(★ 全归零、无「文本误当公式」);现状 12 页 / 783 公式 / 31 条 ★ 勾稽全归零 / 0 求值错误 - 生成:
python scripts/build_cost_mfg.py --out <文件> - 示例结果:06 页 一车间 1,368,687.00 / 二车间 2,681,621.40 / 全厂 4,050,308.40;09 页 P01 末阶单位成本 429.39(= 还原后 单位材料 329.97 + 单位人工 62.47 + 单位制费 36.96);全厂在制品期末 380,747.25 = 期初 313,620.00 + 本期新增 4,050,308.40 − 移出产成品 3,983,181.15;10 页 P01 标准成本 418.00 / 加权 389.75;11 页总差异 +91,253.90(材料 +68,858.40 / 人工 +20,275.20 / 制费 +2,120.30);12 页结转主营业务成本 3,807,414.10
- 踩坑记录(成本模型专属,改本模型前必读):
①jref()返回的拼接串必须加=前缀 —— 漏写会落盘为纯文本,症状是「★ 勾稽全绿但表是死的」(本模型曾一次中招 16 处);
② 自然语言不得以=开头 —— openpyxl 会把"= 08 页本期生产费用合计"当公式落盘(Excel 打开即#NAME?,而独立求值器静默算成 0、★ 勾稽照常归零,校验全绿但表是坏的);txt()/lab()已加_guard_text()在生成期直接抛错;
③ 车间在制品不得直接对各断阶小计求和 —— 会把车间内部断阶之间的半成品转移重复计入,虚增车间投入/产出;必须按「期初 + 料+工+费新增 + 跨车间转入 − 移出」的车间级口径重算;
④ 04 页新增「领用断阶」列后,标准单价由 D 列移到 E 列 —— 遗漏引用列会使 10 页加权平均标准成本出现异常值(曾出现 87.05);列位移后必须全量复检对该表的引用。
成本计算-作业成本模型 · 工业企业基准版 v1.0
工业企业-成本计算-作业成本模型.xlsx(v1.0 · 2026-09-15,生成器 scripts/build_abc_mfg.py,结构说明见 assets/built-models/结构说明/成本计算-作业成本模型-结构说明.md):
- 控制表依据(第 9 行):基础表单 / 数据维度 / 用途与第 8 行完全相同,唯一差别是成本分配表的口径(作业动因 vs 定额标准)。控制表该行六行业列均为
N/A,目前仅交付工业企业一版;其他行业走「参考迁移」分支 - 13 页结构:01 编制说明 / 02 假设与参数〔含车间断阶设置表 + 作业动因设置表(10 作业)〕/ 03 成本对象与在制品台账 / 04 物料BOM定额表 / 05 工序成本定额表 / 06 成本费用归集表 / 07 作业识别与动因率表 / 08 作业成本分配表 / 09 车间成本汇总 / 10 车间在制品与结转 / 11 单位成本表 / 12 成本差异分析 / 13 出入库与结转
- 两阶段分摊(ABC 的核心):第一阶段「资源动因」——06 页 7 项制造费用按资源动因比例(每作业一行比例矩阵,行合计 100%)归集到 10 个作业,得各作业成本;第二阶段「作业动因」——作业成本 ÷ 动因量 = 动因率,再按「断阶 × 产品」的动因量分摊。07 页承载第一阶段(块一 作业库识别 / 块二·块三 资源→作业归集 / 块四 动因量台账 / 块五 作业成本与动因率),08 页承载第二阶段(分摊额 = 动因量 × 动因率)
- 10 作业 · 三级划分(四级分类法收敛为三级):单位级 = 机器工时(A02 一车间机器运行 / B01 二车间装配线运行);批级 = 换型次数(A01)、检验次数(A03、B02 测试)、搬运次数(A04、B04)、包装批次(B03);生产维持级 = 工单数(A05、B05 车间管理与支持)
- 与标准成本版共用的口径:3 个车间断阶(一车间·下料冲压 / 一车间·机加工 / 二车间·装配测试)、分步法·逐步结转(综合结转)、双约当产量法、06 页三层结构、09 页的「车间在制品成本汇总」与「产成品成本还原」两块——09~13 页与标准版同源同构(页号顺延一位)
- 校验:
python scripts/verify_formulas.py <文件>(独立求值器 0 错误)+python scripts/validate_built_models.py assets/built-models 成本计算-作业成本(★ 全归零、无「文本误当公式」、无垃圾 token);现状 13 页 / 988 公式 / 39 条 ★ 勾稽全归零 / 0 求值错误 - 生成:
python scripts/build_abc_mfg.py --out <文件> - 示例结果:07 页 资源费用 一车间 209,000.00 / 二车间 133,700.00 / 全厂 342,700.00 = Σ 作业成本(A01-A05 = 26,600/100,050/6,000/6,000/70,350;B01-B05 = 62,850/15,700/3,150/1,750/50,250);08 页各产品制费 P01 160,607.90 / P02 122,081.62 / P03 60,010.48;10 页还原 P01 330.03 + 62.57 + 34.25 = 426.85;11 页单位实际成本 P01 426.85 / P02 474.84 / P03 214.27(⚠ 重点关注,差异率 10.0%);12 页总差异 +91,253.90;13 页结转主营业务成本 3,804,154.86;全厂在制品期末 382,536.78 = 期初 313,620.00 + 本期 4,050,308.40 − 移出 3,981,391.62
- 核心教学点(ABC vs 标准成本):全厂制造费用完全一致(342,700.00),但单品分摊被重排——小批量产品 P03 由标准口径的 32,853.54 升至 60,010.48(+82.7%),P01/P02 相应下降(−7.4% / −10.5%)。原因是 P03 的换型、检验、搬运、包装次数相对其产量远高于大批量产品,单工时基准把批级作业成本摊薄给了大批量产品。ABC 让「小批量订单看着毛利高、实际亏」显性化,这正是第 8/9 两行必须并列交付的原因
- 引擎复用方式(改本模型前必读):
build_abc_mfg.py顶部import build_cost_mfg as M,随后把M的模块级S_*页名常量整体改写为作业成本版的页名(M.S_NOTE, M.S_ASSUM, M.S_OBJ = S_NOTE, S_ASSUM, S_OBJ,其后各页同理)——标准版引擎的所有跨页引用都走这些常量、无硬编码页名,故重定向后其 9 个页面构建器(03~06、09~13)可直接复用。配套三步收尾:①renumber_pages(wb, sheets)用正则把复用页说明文案里的07~12 页顺延为08~13 页;②sync_titles(wb)把被复用页 A1 的「表格名称」(构建器内硬编码)改成顺延后的正式页名;③ 新增 07/08 两页时,其取数一律引用「页名常量 + 行号」的jref()拼接串(jref()返回值必须补=前缀,否则落盘为纯文本) - 踩坑记录(作业成本专属):
① ★ 恒等式抓不到基准列错引 —— 「Σ 分摊 ≡ 作业成本」两边同错同消,独立求值器照样全绿;必须补独立路径校验:08 页「Σ 各作业列小计 − Σ 该车间各作业成本」(左式按各产品动因量逐行累加、右式用动因量合计 × 动因率)与「全厂分摊合计 − 06 页制造费用合计(不经 07 页)」。本模型曾因 08 页基准列引用错行而「★ 全绿但数字错」,正是靠独立路径抓出
②build_act内曾留… if False else None的残留语句 —— 导致 07 页块二取数空转;修正为直接引用 06 页制造费用明细行(为此在build_cost_mfg.build_oh中新增oh_item_rows回传各费用项目行号,该改动对标准成本版为 0 差异,已回归验证)
③renumber_pages()的正则须排除已带数字前缀的场景 —— 用(?<![0-9])(0[7-9]|1[0-2])( ?页)并配sync_titles()处理 A1 标题,否则会出现「09 车间成本汇总」被写成「010」或复用页标题与新页号不一致
④ 资源费用只在 06 页录一次 —— 07 页只录「资源动因比例」与「作业动因量」,金额一律取数,避免双头维护
企业化改造:把工业企业基准版改造为「指定企业 / 指定产品」专用版
> 2026-09-24 实战验证(芯碁微装 · 直写光刻设备,标准 + 作业两版并列交付)。只替换数据、不动公式链路,两版仍严格同源可比。
- 做法:写一个 wrapper 脚本,
import build_cost_mfg as M→ 覆盖其模块级数据常量 → 再import build_abc_mfg as A注入 ABC 数据 → 分别调M.build_all()/A.build_all()。需要覆盖的量:STAGES / WS_LIST / WS_STAGES / NS / NW、PRODUCTS / NP、MATERIALS / NM、BOM、USED、PROC_STD、PROC_ACT、OH_ITEMS、OH_COST、WIP、SALES、OPEN_INV、STD_WAGE、STD_OH;ABC 侧另需ACTIVITIES / NA / ACT_W / RES_RATIO / DRIVER_QTY。派生量(NS/NW/NP/NM)必须同步覆盖,否则range(NM)类循环仍按旧计数走。 - 必踩的坑(import 顺序):
build_abc_mfg在 import 时会改写 M 的模块级页名常量(M.S_ALLOC = "08 作业成本分配表"等)。若在标准版生成前 import 它,M.build_all()会去找作业版页名并抛KeyError: 'Worksheet 08 作业成本分配表 does not exist.'。正确顺序:先M.build_all()出标准版,再 import ABC 引擎。 - 文案再皮肤:引擎说明性文案里硬编码了基准版口径词(断阶名、投料说明、编制说明段、02 页断阶表「投料:铝合金铸件(M01)」等)。生成后做一次非公式文本单元格的全局替换(跳过以
=开头的单元格),替换表按长度降序排(先机加工半成品再机加工,否则产出物名会被截断重组)。 - 标定律(两条经验):① 覆盖
STD_OH时必须按实发制费 ÷ 定额工时约当重新标定,直接沿用基准版的 42 元/定额工时会把「耗费差」从 −241 放大到 +248,828(占制费 55%),差异结构被标准率标定误差掩盖;② 目标成本结构(如「材料占 95%」)应在覆盖数据后先手算总量再回填,本案产出结构与披露口径 95.1/1.9/2.1 吻合到 95.81/1.85/2.34。 - 验收(脚本会漏检):
verify_formulas.py只按「校验」二字抓行,而成本模型的 ★ 行标签是「勾稽」,会整片漏检。需自写扫描:遍历所有含「★」的单元格逐行求值 + 基准行业词残留扫描。本案标准版 39 条 / 作业版 50 条 ★ 全零、0 求值错误、0 残留词。
叠加「项目/工号成本层」:把成本对象从「机型」升到「合同号/WBS」
> 2026-09-24 实战(芯碁微装 · 直写光刻设备,两版各追加 3 页)。触发词:用户说「一级成本对象是合同号/工号(项目 WBS),二级才是台份、部件、工序」「一套工单同时喂两个口径」。
- 为什么单靠基准版不够:03~12 页的成本对象是「机型 × 断阶」,出的是单台成本;但项目型离散制造真正要管的是单工号毛利与 EAC,且同一批工单成本在管理口径(项目成本)与财务口径(存货/履约成本/期间费用)两个去向之间要能对得上。因此需要在既有工作簿之上叠一层页,而不是改公式链路。
- 落位:新增独立模块(本案
_project_layer.py),签名build_project_layer(wb, pg, s_obj, s_wip, w_rows, rd_rows, M, shift=0);在M.build_all()/A.build_all()之后对内存 wb 追加 3 页,再由renumber_pages/sync_titles/ reskin 统一收尾。shift参数承载作业成本版的页码偏移(+1),避免两版页名常量各自硬编码。 - 三页分工(可直接复用):
① 项目工号台账(WBS·工单绑定)——块一 一级成本对象(工号/合同/客户/机型构成/合同台数金额/完工/已验收/未验收/交付进度);块二 二级(工号 × 机型台份展开,按交付状态分列 已验收/发出商品/库存商品);块三 三级工单台账,每张工单并列「管理口径去向」「财务口径去向」两列;块四 工号级参数(售价、运输吊装与安装调试单价、试制费、质保计提率、EAC 偏差预警阈值、毛利率预警线)。
② 工号成本归集与专属成本——块一 台份成本归集(料/工/费 按 10 页单位成本 × 各料工费占比拆分);块二 项目专属成本(运输吊装/安装调试/试制与型式试验/质保计提,并拆「履约性(资本化→合同履约成本)」与「费用化(→销售费用/研发费用)」);块三 本月发生 → 累计 → EAC(= 累计 + 尚需)。
③ 双口径分流与项目毛利——块一 财务口径六个去向分流(①主营业务成本 ②发出商品 ③库存商品 ④合同履约成本 ⑤销售费用—质保 ⑥研发费用—试制);块二 管理↔财务双口径桥;块三 项目毛利与 EAC 滚动;块四 时段法投入法收入成本配比。 - 设计要点(必须遵守):
① 专属成本绝不进 06 页制造费用 —— 否则单台制造成本虚高。它按工号直接归属,且必须分「履约性/费用化」,两者去向不同(资产 vs 期间费用)。本案专属成本占工号成本 12.9%,漏记即高估项目毛利率 3~5 个百分点。
② 现货/常规订单不是工号口径 —— 台账块二末尾单列「— 现货」行,其成本流转仍由出入库页承接;项目毛利只对工号计算,强行并入会污染毛利率。
③ 履约进度用投入法(累计成本 ÷ EAC),与「台数交付进度」不必一致(一个投入进度、一个产出进度),模型内注明,不要强行勾稽两者。
④ EAC 必须月度滚动 —— 台账留「月初累计成本/尚需成本/月初已确认收入」三个填报列,填上月结存即可滚动;EAC 一变,履约进度、累计确认收入、当期毛利同步调整。
⑤ 跨页引用前缀!极易漏写 —— 写f"'{nm}'!E{row}"时一旦漏掉!,会变成指向本页同列的合法公式(求值器不报错、★ 也照样归零),只表现为数值全错。本案在块二/块三取数上连中数处。写完必须 dump 数值核对,不能只看 ★ 全绿。 - 验收清单(两版各 +5 条 ★):完工台份勾稽|交付状态勾稽|台份成本勾稽|与出入库页勾稽(两个独立路径交汇)|专属成本勾稽|工号成本勾稽|工号台份成本勾稽(须剔除现货)|累计成本勾稽|财务分流勾稽|逐行分流勾稽(逐工号都要对上,不是只对总数)|双口径桥勾稽|毛利勾稽|进度勾稽|本期收入勾稽|本期成果勾稽。本案合计:标准版 55 条 ★ 全零 / 15 页,作业版 66 条 ★ 全零 / 16 页,均 0 求值错误、0 基准词残留。
成本计算(标准成本 / 作业成本)· 软件与信息技术服务业版 v1.0
软件与信息技术服务企业-成本计算-标准成本模型.xlsx(v1.0 · 2026-10-09,生成器 scripts/build_cost_software.py,12 页 · 764 公式)
+ 软件与信息技术服务企业-成本计算-作业成本模型.xlsx(v1.0 · 2026-10-09,生成器 scripts/build_abc_software.py,13 页 · 969 公式)。
- 为什么用 wrapper 而不是配置包:成本计算与产品定价只有工业企业版引擎(控制表第 8/9/10 行其余行业列为
N/A),引擎以「车间 / 断阶 / 物料 BOM / 工序 / 机器工时」为骨架,行业口径深度嵌入模块级常量,不适合再抽配置层。故采用 wrapper:build_cost_software.py导入build_cost_mfg→ 覆盖模块级数据常量(PRODUCTS/STAGES/MATERIALS/BOM/STD_WAGE/STD_OH/ACTIVITIES/RES_RATIO/DRIVER_QTY等)→ 调M.build_all()→reskin_wb()做文案再皮肤 - 口径映射(工业 → 软件):成本对象 产品 → 产品线(项目/合同);数量单位 件 → 人月;加工阶段 车间断阶 → 交付阶段(阶段① 需求分析与设计 / 阶段② 编码与单元测试 / 阶段③ 集成测试与交付);料 BOM 定额 → 外购资源人月定额;人工费率 元/工时 → 标准人月费率 25,000 元/人月;制造费用分配率 → 预算间接费用分配率 3,477 元/人月;在制品 → 未完工项目(合同履约成本)
- 成本中心:研发交付中心(承担阶段①②)+ 实施交付中心(承担阶段③)。⚠ 引擎
build_alloc/build_sum硬编码以「一车间」「二车间」作为WS_STAGES的键,故内部键沿用,仅在展示层(reskin_wb)改写为「研发交付中心 / 实施交付中心」 - 产品线(三条,人月口径):P01 定制开发服务 / P02 运维与技术服务 / P03 SaaS 订阅
- 外购资源主数据(M01~M05,全部折算为「人月」口径,元/人月):云资源与带宽 2,000 / 第三方软件许可 900 / 外包与分包人月 18,000 / 测试设备与工具 600 / 差旅与实施耗材 1,200
- 作业成本版(13 页 = 标准版 12 页 + 插入 07 作业识别与动因率表):10 个作业 · 三级划分——单位级 = 编码与开发(动因:功能点数);批级 = 需求调研与分析(需求条目数)、架构与详细设计(设计工时)、单元测试与代码审查(测试用例数)、集成测试(测试用例数)、部署与环境搭建(部署批次)、用户验收与培训(验收批次)、数据迁移与上线(迁移批次);运营维持级 = 研发管理与支持(工单数)、实施管理与支持(项目数)。成本动因从「机器工时/换型次数」整体切换为「功能点/测试用例/需求条目/批次/工单」
- 生成与校验:
python scripts/build_cost_software.py --out <文件>(标准成本 12 页)python scripts/build_abc_software.py --out <文件>(作业成本 13 页)- 复检:两份均 0 公式错误;标准成本 12 页 / 764 公式 / 31 条 ★ 勾稽全归零;作业成本 13 页 / 969 公式 / 39 条 ★ 勾稽全归零;0 工业词残留
- ⚠ 本项目记录到一条跨模型缺陷(2026-10-09 修复):项目投资模型的
dep_intro(07 折旧与摊销页首说明)原为引擎硬编码的「工业企业重资产特征:…」,行业配置没有覆盖,导致六个非工业行业版全部沿用工业文案。已在build_capex_ind._fill()中改为按行业派生、并为六个配置包各写专属文案;六个行业版全部重新生成,逐格比对仅 07 页 A3 一处变化、29 条 ★ 校验行仍全归零。教训:行业参数化改造后,必须跑一遍validate_built_models.py的「基准行业词残留」扫描——只跑公式校验抓不到硬编码文案。
第七类模型(产品定价)· 工业企业基准版 v1.0
> 控制表第 10 行,基础表单 = 产品定价汇总表 / 物料BOM表 / 工序成本表 / 设备台账 / 工装台账 / 人工工时表 / 制造费用台账 / 物流费用表;用途 = ① 产品成本快速、准确计算 ② 制定最具有竞争力的价格;该行六行业列仅「工业企业」标「内置」,其余 N/A。产品、车间、BOM、工序信息全部继承标准成本模型(生成器直接 import build_cost_mfg 的模块级常量),使"算成本"与"定价格"两套模型口径不漂移。
产品定价模型 · 工业企业基准版 v1.0
工业企业-产品定价模型.xlsx(v1.0 · 2026-09-15,生成器 scripts/build_pricing_mfg.py,结构说明见 assets/built-models/结构说明/产品定价模型-结构说明.md):
- 16 页结构:01 编制说明 / 02 假设与目标 / 03 物料BOM表 / 04 工序成本表 / 05 设备台账 / 06 工装台账 / 07 人工工时表 / 08 制造费用台账 / 09 物流费用表 / 10 成本卡 / 11 成本基础价 / 12 竞品对标与市场价 / 13 定价测算 / 14 折扣与降价决策 / 15 敏感性分析 / 16 产品定价汇总表
- 三结合定价逻辑(本模型的方法论主干):
- 成本导向:单位变动成本 → 变动成本价(绝对底价);单位完全成本 → 完全成本价(保本价);完全成本 ×(1+目标成本利润率) → 成本加成价;完全成本 ÷(1−最低毛利率) → 最低毛利价(折扣底线)
- 市场导向:竞品不含税价 ×(1 + 本产品差异系数) → 竞品对标顶价
- 价值导向:客户感知价值(客户愿付上限)
- 合成:
市场顶价 = MIN(竞品对标顶价, 客户感知价值);建议价 = MIN(市场顶价, MAX(成本加成价, 完全成本价))——永不卖低于完全成本;渠道净价 = 建议价 ×(1 − 佣金率 − 返利率) - 四个关键设计决定:① 成本侧用定额(标准)成本口径,07 页实际工时/人工仅用于 10 页定额 vs 实际对照(差异率 >5% 标注「重点关注」),不参与定价;② 制造费用按定额机器工时分配(设备密集口径,分母用定额而非实际,避免产量波动同时扭曲成本与价格);③ 制造费用拆变动/固定两性态(固定 = 管理人员薪酬/折旧/修理/劳保/办公;变动 = 工装摊销/水电动力),供 13 页边际贡献与保本销量、15 页敏感性使用;④ 折旧费与工装摊销由 05/06 台账取数进 08 制造费用台账,不重复填报(08 页有两条取数勾稽 + 一条独立路径勾稽兜底)
- 两个口径陷阱(模型内置防错):① 加成率 ≠ 毛利率——目标成本利润率 28% ⟺ 毛利率 21.875%(= r ÷ (1+r)),差 6 个百分点以上,11 页块二专放换算表;② 折扣参照价必须是「建议不含税价」,拿挂牌含税价当基数会让折扣率与毛利率口径错配(打 9 折实际只让 9 折 ÷ 1.13 的毛利)
- 校验:
python scripts/verify_formulas.py <文件>(独立求值器 0 错误)+python scripts/validate_built_models.py assets/built-models 产品定价模型 --baseline 工业企业(结论:通过);现状 16 页 / 871 公式 / 53 条 ★ 勾稽全归零 / 0 求值错误 / 0 文本误当公式 - 生成:
python scripts/build_pricing_mfg.py --out <文件> - 示例结果(3 产品 × 3 断阶 × 2 车间):单位完全成本 P01 454.26 / P02 514.17 / P03 214.19;市场顶价 P01 604.80 / P02 682.50 / P03 232.80;建议不含税价 P01 581.45 / P02 658.14 / P03 232.80;建议含税价 657.04 / 743.70 / 263.06;渠道净价 517.49 / 585.74 / 207.19(低于完全成本 214.19,毛利率 −3.38%);保本销量 831.5 / 570.9 / 787.5,安全边际率 83.03% / 81.59% / 59.62%;保底折扣率 2.344% / 2.344% / −15.007%;敏感性中心格利润 623,239.83 / 446,300.03 / 36,290.23
- 两个教学样本:① P03(配件组件 C)是"市场顶价不支撑成本加成价"的典型——按 28% 目标利润率应卖 274.16 元,但竞品价 240 元(本产品还差 −3% 品牌溢价)、客户只认 245 元 → 市场顶价 232.80 元,毛利率仅 7.99%(< 20% 最低要求),且扣渠道费后渠道净价已亏。模型自动判「须降本」而非"降价将就",并给出定价行动建议「市场顶价低于成本加成价,按市场价成交,优先降本」;② P01/P02 的保底折扣率只有 2.344%——因为目标成本利润率 28% 折成毛利率 21.875%,仅比 20% 的最低毛利率要求高 1.875 个百分点,定价定得越贴成本,谈判让利空间越薄
- 踩坑记录(定价模型专属,改本模型前必读):
① 跨页引用漏写'页名'!前缀会形成"合法的同页错引" —— 本模型首轮中招 4 处(12 页价格空间取 11 页完全成本价、13 页「完全成本价/成本加成价」两列、14 页「最低毛利价」列),公式变成=C7/=D9这类语法完全合法、求值器不报错的同页引用,后果是价格链条整体错位。build_pricing_mfg.py内所有跨页单引用必须写成f"={Q(S_BASE)}!{col}{row}";Q()是页名加引号的助手(页名含空格时必须加引号)。
② ★ 恒等式抓不到"两边同错同消" —— 必须补独立路径校验。14 页「折扣底线勾稽(最低毛利价 ×(1−最低毛利率) − 单位完全成本)」与 11 页「最低毛利价勾稽」互为独立路径;12 页「价格空间 −〔市场顶价 − 完全成本价〕」也是独立路径。
③ ★ 全绿 ≠ 数值合理 —— 上述 4 处错引修复前,若只看 ★ 通过率会漏判;必须叠加业务量级抽查(如"建议价是否落在变动成本价与市场顶价之间""渠道净价是否跌破完全成本")。建议生成后写一个临时 peek 脚本用verify_formulas.Evaluator打印关键行数值做人工合理性检查。
④ 文案判据必须覆盖"负值/退化"分支 —— 16 页「关键提醒」原公式误引了 16 页自身的表头/数值单元格(F{QD['row'][p]}用了 13 页的行号去指 16 页),且未覆盖"保底折扣率为负"的情形,对已跌破折扣底线的 P03 仍输出"折扣空间充足"。修正为引用块一对应产品行(H{SR[p]}/G{SR[p]}/N{SR[p]}/M{SR[p]})并补负值分支。
⑤ 企业化改造(wrapper 复用本生成器)的十个坑(2026-09-28 定制设备版 + 微生物检测仪器版 v2/v3 实战验证):
· 自行组装调用链极易漏build_note()—— 若按build_assum → … → build_summary手写组装而跳过首行,01 编制说明页会整页空白,且后续追加内容错位到第 2 行;组装时务必照抄build_all()的全部调用顺序。
·check1()的col参数不能传 2 —— 该助手的标签恒写在 B 列,传col=2会让公式覆盖标签;而校验脚本按「A 列 == ★ 或 B 列以 ★ 开头」识别,于是这条勾稽被静默漏统计(表现为勾稽条数少算)。改用col=3。
· 文案 reskin 必须处理公式内的字符串字面量 —— 判据类文案(「渠道毛利可接受」「市场空间偏薄」)与 ★ 行标签都嵌在 IF 公式的"..."里,只遍历非公式单元格会整片漏改。做法:对=开头的单元格用re.sub(r'"([^"]*)"', …)单独替换引号内容,其余走纯文本替换。
·PROC_ACT是「月度总量」口径,不是单件口径 —— 该常量存各产品各断阶的当月实际工时与实际人工总额(基准版 1,040 h 对应 4,900 件)。按单件口径填会让 10 页「单位人工(实际)」反向低 40% 以上。正确设定:定额工时 × 月销量 × (1 + 超工时率),实际工资率单独体现;实际工资率 × 上浮率建议控制在 1.10~1.20,既让 10 页差异率 > 5% 的「重点关注」标注真实触发,又不至于失真。
·validate_built_models.py --baseline 工业企业对工业口径改造版会大面积误报 —— 其BASE_WORDS含「制造费用 / 车间 / BOM / 直接材料」,而仍是工业口径的改造版本就该保留这些词(曾一次报 177 处、另一次 252 处「残留」)。应另写扫描脚本,只查基准版专有词(旧产品名、旧工序名、旧材料名、旧渠道词);且扫描词表要排除本版自有的合法用词(如微生物检测仪器版的「OP4 精密机加工」—— 工艺名与基准版的「OP2 机加工」同名不同指)。
· 断阶数 ≠ 3 时必须重写 02 页build_assum()—— 断阶机制本身是通用的(NS = len(STAGES),全流程按range(NS)循环;08 页的两车间汇总列虽固定两列,但车间内断阶数取WS_STAGES映射,故 4+4 分配无需改该页),唯一真硬编码在 02 页块四的「投料说明」:写成src = {0: ..., 1: ..., 2: ...}[k]的三键字典,断阶数 ≠ 3 时直接KeyError。改法:在 wrapper 中整页重写该函数,把投料说明改为按 BOM 的「领用断阶」字段自动派生——
feeds = "、".join(f"{m[1]}({m[0]})" for m in MATERIALS if m[5] == k),src = f"投料:{feeds}" if feeds else "无新增直接材料,承接前阶半成品成本"。这样断阶数与材料数都可自由增减。注意不要去改基准版build_pricing_mfg.py本身:改成派生式会改变基准版的输出文案(如「承接前阶冲压件成本」→「承接前阶半成品成本」),使内置成品的金标准基线失效。
· 工序数扩展后 04/07 页会自动变长,勾稽条数不变但公式数暴增 —— 3 断阶 → 8 断阶后公式数由 881 升至 1,006(+125),而 ★ 勾稽条数只由 55 升至 56(多出的是新增页的自建勾稽)。验收时不要用公式数做判据,要以「勾稽全归零 + 0 求值错误 + 残留词清零 + 关键行数值合理性」四条叠加判定。
· 用户直接给部件清单时,必须声明「部件级 BOM」的防重复计费口径(2026-09-28 微生物检测仪器 v3 实战)—— 若用户给的物料是部件/组件(如「1800 舱体」「VHP102 部件」「在线浮游菌采样器」)而非原材料(钢板、塑料粒子),则 03 页每行的定额单价必须定义为外协 / 采购价;若该部件为自制,须按「外协可比价(剔除本厂工序人工与制造费用)」填报。否则会与 04 / 07 / 08 页已计入的工序人工与制造费用重复计费,完全成本虚高、定价被推高。此口径务必写进 03 页脚注(同时在 01 / 17 页呼应),因为这是部件级 BOM 定价最常见的错误。配套:把物料编码按分类加前缀(S 结构件 / F 功能部件 / E 电子元器件 / A 辅料),并在 03 页追加「块四 材料成本结构(按物料分类)」做四类小计 + 占比 + 勾稽——分类占比是降本优先级的直接依据。
· 03 页新增列时,「块三 单位材料成本」必须留在 C 列 —— 10 页对 03 页是硬引用03 物料BOM表!C{块三行}(两处:build_card的单位直接材料、build_card的来源页勾稽)。因此块一 / 块二的列位可自由扩展(如插入「分类」列),块三的列位不能动。同理 17 页对 03 页取「块二 单位材料成本」用的是I列,块二列位一变必须同步改。对照表:
| 位置 | 基准版列 | v3 加「分类」后 | 可否移动 |
| --- | --- | --- | --- |
| 块一 标准单价 | E | F | 可动 |
| 块二 单位材料成本 | H | I | 可动(须同步 17 页取数) |
| 块三 单位材料成本 | C | C(保持不动) | 不可动(10 页硬引用) |
· 16 页「关键提醒」的判据必须按「严重度」排序,不能按「常见度」(已修正基准版build_summary)—— 原实现的首个分支是IF(H<G,"市场顶价低于成本加成价,按市场价成交,优先降本", …),其中 H = 市场顶价、G = 成本加成价。当某产品的市场顶价甚至低于完全成本价(即已无法定价)时,该分支会先命中并输出温和提示,把更严重的「不可定价」情形吞掉,与 13 页「不可定价:建议价低于完全成本,须先降本」、14 页「无折扣空间,须先降本」的结论自相矛盾。修正为把IF(H<F,"市场顶价低于完全成本价,不可定价,须先降本", …)提到首位(F = 完全成本价)。通用教训:任何多分支判据文案,都要按「后果严重度」排序并逐一验证极端样本能命中正确分支。
· 投料说明在物料数变多后会撑爆一行,须按分类归纳 —— 31 项物料按断阶分组后,单个工序(如「整机装配」)最多挂 18 项,直接罗列会让该行难以阅读。做法:先按分类分组,每类只列前 3~4 个名称再补「等 N 项」,并把说明列宽从 16 加到 50 以上:
feeds = [(i, m) for i, m in enumerate(MATERIALS) if m[5] == k],再按CATS分组拼f"{cat}:{names}{more}"。
产品定价模型 · 软件与信息技术服务业版 v1.0
软件与信息技术服务企业-产品定价模型.xlsx(v1.0 · 2026-10-09,生成器 scripts/build_pricing_software.py,16 页 · 847 公式)。同样是 wrapper(build_pricing_mfg 只有工业版),覆盖 STD_WAGE/STAGES/WS_LIST/WS_STAGES/PRODUCTS/MATERIALS/BOM/PROC_STD/PROC_ACT/EQUIPMENT/TOOLING/OH_ITEMS/LOGISTICS/COMPETITOR/*_LADDER 等常量,并同步覆盖派生量 NP/NS、monkeypatch build_note/build_assum。
- 页名随行业改名:03 定额人月与外购表 / 04 交付阶段成本表 / 05 服务器与设备台账 / 06 工具与平台台账 / 07 人月投入表 / 08 交付中心费用台账 / 09 渠道与交付费用表 / 16 产品线定价汇总表
- 与标准成本版同源:产品线、交付阶段、人月定额全部取自
build_cost_software的同一套常量 —— 「算成本」与「定价格」口径不漂移,43 条 ★ 勾稽(53 条中的定价侧)可逐格与成本版对照 - 三结合定价结果(示例,元/人月):
| 产品线 | 单位变动成本 | 单位完全成本 | 成本加成价 | 市场顶价 | 建议价(不含税) | 建议价毛利率 | 渠道净价毛利率 | 保底折扣率 | 定价结论 |
|---|---|---|---|---|---|---|---|---|---|
| P01 定制开发服务 | 20,070 | 29,670 | 47,472 | 49,280 | 47,472(成本加成价,含税 50,320.32) | 38% | 33% | 11% | 建议价可执行,折扣不超过保底折扣率 |
| P02 运维与技术服务 | 15,270 | 20,070 | 32,112 | 31,900 | 31,900(市场顶价 < 成本加成价 → 按市场价成交) | 37% | 32% | 10% | 市场顶价低于成本加成价,优先降本 |
| P03 SaaS 订阅 | 19,730 | 23,330 | 37,328 | 36,570 | 36,570(同上) | 36% | 31% | 9% | 市场顶价低于成本加成价,优先降本 |
- 教学样本:三条产品线的建议价毛利率落在 36%~38%,都恰好压着「35% 最低毛利要求」的上沿——P02 / P03 的市场顶价低于成本加成价,模型自动判「按市场价成交、优先降本」而不是硬扛成本加成价;P03(SaaS)的渠道净价毛利率 31% 已接近 30% 的心理底线,提示订阅制的渠道分成比例必须与续约成本一并测算。
- 生成与校验:
python scripts/build_pricing_software.py --out <文件>;复检 16 页 / 847 公式 / 53 条 ★ 勾稽全归零 / 0 公式错误 / 0 工业词残留
第八类模型(资金管理台账)· 控制表第 11 行 · 七行业齐备(工业企业基准版 v1.0)
> 控制表第 11 行(《财务模型控制表.xlsx》2026-09-29 扩为 10 行后新增,控制表六行业列均标「内置」;本技能另交付软件与信息技术服务业配置版,实际 7 个行业版本)。命中「资金台账 / 承兑汇票台账 / 银行贷款台账 / 票据台账 / 贷款台账 / 资金够不够、票据什么时候到期、贷款还剩多少」类诉求时调用。与现金流量管理模型是互补关系:现金流量模型是预测(未来 12 个月会不会断流),资金管理台账是登记 + 监控(逐票、逐笔、逐账户把当下管住)。
资金管理台账模型 · 七行业(工业企业基准版 v1.0 · 六行业配置版 v1.1)
工业企业-资金管理台账.xlsx(v1.0 · 2026-09-29,生成器 scripts/build_treasury_ind.py,结构说明 工业企业-资金管理台账-结构说明.md);
六个行业版 {商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务}企业-资金管理台账.xlsx(v1.1 · 2026-09-29 / 2026-10-09,同一引擎 + 配置包 scripts/_packs_treasury.py,结构说明 资金管理台账-结构说明.md 七行业合并版)——软件版:安全月数 1.3(工资社保按月刚性、不可延后,若项目制占比高、DSO > 120 天应上调至 1.5~2.0)、票据保证金比例 30%、借款综合年利率 3.85%、增值税 6%、企业所得税 15%(高新技术企业)。
- 10 页结构:01 编制说明 / 02 假设与参数 / 03 月度资金台账 / 04 资金收支明细 / 05 银行账户余额台账 / 06 承兑汇票台账 / 07 承兑汇票汇总分析 / 08 银行贷款台账 / 09 贷款还本付息计划 / 10 资金看板与预警
- 三视角恒等:03 页是资金池视角(期初 + 流入 − 流出 = 期末)、04 页是现金流量表视角(经营/投资/筹资三大活动,直接法)、05 页是账户视角(各银行账户月末余额)。三者必须恒等:
期末余额 = 期初 + 净流量 = 各账户余额合计(03!C13:N13 与 05!C10:N10 双向对账) - 票据台账口径(本模型最易错之处):
- 台账含两个方向:
开出=我司开票给供应商(到期解付,现金流出,银承需保证金);收到=客户以票据付货款(到期收款,其现金已含在 04 页销售回款中,不重复列示) - 跨年票据必须按「期序号 =(年差)×12 + 月份」归集(06 页 K/L 列)。绝不能用
MONTH()——否则 2027-01 到期的票会被并入 2026 年 1 月,期末余额凭空多出来 - 保证金按未到期票据逐票加权:
SUMPRODUCT((出票期序号 ≤ 当月) × (到期期序号 > 当月) × 保证金金额)。商承与「收到」方向一律为 0,用「票面余额 × 统一比例」会系统性高估受限资金 - 贴现票据属台账外登记:只进现金流量(04 页贴现流入)与贴现息,不冲减在手票据余额,否则与「到期收款」重复扣减,期末余额会被扣成负数
- 贷款台账口径:08 页逐笔登记「期初余额 / 本年新增放款 / 本年计划还本 / 期末余额 = 期初 + 新增 − 还本」;09 页按月滚动同一恒等式。双向勾稽:09 页 12 月期末 = 08 页期末合计;09 页全年还本 = 08 页计划还本合计;09 页全年新增 = 08 页新增合计(02 页 ③④ 条)
- 安全现金线:
本月资金流出合计 × 安全月数(逐月滚动,不用年度均值);资金缺口 = MAX(0, 安全线 − 可动用资金);保证金占用属受限资金,不计入可动用资金 - 校验:
python scripts/verify_formulas.py <文件>(独立求值器 0 错误)+python scripts/validate_built_models.py assets/built-models 资金管理台账(结论:通过);七份现状:10 页 / 1,065~1,091 公式(软件版 1,090)/ 23 条 ★ 校验行全归零 / 0 求值错误 / 0 文本误当公式(逐份结果见结构说明第九节) - ⚠ 2026-10-09 修掉求值器一个缺陷:
verify_formulas.py的_crit()把数值条件(如COUNTIF(rng,">0"))当字符串比较("0.0" > "0"在字典序下为真),导致看板「资金不足月数」恒显示 12(真值 2~4)。已改为_num_crit()先做数值化;修正后七份模型的「资金不足月数」与「资金达标月数」恒互补(2+10 / 3+9 / 4+8),可作为该行的自洽断言。Excel 本身计算一直是对的,只是独立求值器错报 - 生成:
python scripts/build_treasury_ind.py --out <文件>(工作簿自带自洽断言_sample():票据进出平、保证金流量与存量相符、贷款期末 = 台账合计、账户合计 = 台账期末,任一不成立直接 AssertionError 拒绝出表);六行业批量:--all --outdir <目录>,单出某行业:--industry 施工企业 --out <文件> - 示例结果(六行业对照,完整表见结构说明第八节;金额单位:万元):
| 行业 | 安全月数 | 期初资金 | 年末资金余额 | 年末可动用 | 年末票据 | 年末借款 | 全年利息 | 资金不足月数 | 最大单月缺口 | 建议融资额 |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 工业企业 | 0.8 | 800.0 | 680.6 | 665.6 | 135.0 | 820.0 | 41.8 | 4 | 452.0 | 452 |
| 商品流通企业 | 1.0 | 800.0 | 935.8 | 917.8 | 135.0 | 1,150.0 | 56.9 | 4 | 349.9 | 350 |
| 施工企业 | 2.0 | 2,500.0 | 3,264.8 | 3,264.8 | 790.0 | 2,800.0 | 116.9 | 4 | 2,147.8 | 2,148 |
| 房地产开发企业 | 2.5 | 9,600.0 | 10,636.6 | 10,231.6 | 1,950.0 | 5,900.0 | 324.6 | 3 | 591.9 | 592 |
| 旅游饮食服务企业 | 0.8 | 350.0 | 767.0 | 738.5 | 95.0 | 550.0 | 41.1 | 2 | 75.1 | 76 |
| 交通运输企业 | 1.2 | 450.0 | 1,040.9 | 1,018.4 | 140.0 | 1,210.0 | 58.1 | 2 | 353.6 | 354 |
| 软件与信息技术服务企业 | 1.3 | 1,520.0 | 1,736.4 | 1,715.4 | 190.0 | 1,020.0 | 36.8 | 3 | 267.8 | 268 |
> ⚠ 期初余额是示例数据、不是行业口径 —— 商品流通 / 施工 / 房地产三家的期初值经过一次量级校准(600→800 万、1,200→2,500 万、3,000→9,600 万),目的是让「资金不足月份数」落在合理区间(2~4 个月)。安全月数、保证金比例、贷款利率、税率这些才是行业口径(安全月数 0.8~2.5 的行业差异明确对应「刚性支出占比」:施工 / 房地产垫资重 → 2.0 / 2.5,旅游 / 工业现金流相对均匀 → 0.8,软件 1.3(人工按月刚性发放,且项目回款 DSO 常 90~180 天)),期初余额只是让示例数据讲得通的起点。用户拿去做企业化改造时,第一件事就是换成自己的实际期初余额。
- 踩坑记录(台账模型专属,改本模型前必读):
① 期初结转行不能写成"本行第 12 列"自引用 ——crow()逐月写公式时若把「上月期末」写成N{本行},第 12 个月就是自己引用自己 → Excel 弹循环引用警告。正确做法是用上一月列字母 + 期末行号:[AV("open_cash")] + [f"{get_column_letter(FIRST_M + j - 1)}{end_row}" for j in range(1, 12)],且end_row需在写期初行前预先算出行号(beg + 4之类)。本模型 03 / 07 / 09 三页的期初行都踩过
②crow(exprs)里的月列极易被硬编码成C—— 写成[f"C{a}-C{b}" for _ in range(12)]会让 12 个月算出同一个值,而 ★ 校验行(用{col}正确展开)反而全归零,形成"校验全绿、表是错的"的假绿。已把crow()改为支持{c}模板串(crow(ws, r, idx, name, f"{{c}}{a}-{{c}}{b}")),所有跨月公式一律用模板,禁止列表推导里写死列字母。识别信号:某行 12 个月数值完全相同
③check_row()返回的是(行号, 下一行号)元组,不是行号 —— 写成r = C.check_row(...)会在下一句r + 1时抛TypeError: can only concatenate tuple。必须_, r = C.check_row(...)
④ 子区间 SUM 的末行号要在最后一个irow/srow之后再取 —— 筹资流出小计写成SUM(f2:f4)且f4 = r - 1放在「分配股利」行之前求值,会把股利行漏在区间外,表现为只有 12 月差一个股利金额。所有SUM(x:y)的y必须紧跟最后一个成员行之后赋值
⑤ 构建顺序必须服从依赖,不能照页序 —— 02 页的跨台账校验引用 04/05/06/07/08/09 的行号,03 与 05 又互相对账,互为先后依赖。做法:先把 10 张表全部create_sheet(保证页序),再按依赖顺序调用构建函数,最后用PENDING_CHECKS((页名, 行号, 键)三元组)统一回填延迟校验公式
⑥ 账户余额拆分留 ±0.01 尾差会让 ★ 归零判定翻车 —— 按 45%/30%/25% 拆三个账户时,各自round(x, 2)后合计与总额差 ≤0.01,validate_built_models.py的容差恰为> 0.01。做法:让最后一个账户吸收尾差(a2 = round(free - a0 - a1, 2)),并在_sample()里断言< 0.005
⑦ 改完生成器必须重新cp到assets/built-models/再跑验收 —— 验收脚本读的是技能目录里的副本,工作区文件改了而副本没同步,会拿旧结果当"没修好"(本次 2 条 ±0.01 假警报即由此产生)
⑧ 「年度汇总」列(O 列)的口径必须按行型三分类,绝不能一律SUM—— 写入工具irow/crow/srow都带kind参数(sum→=SUM(C:N)、end→=N{r}取 12 月末值、avg→=AVERAGE(C:N)、none→ 留空),必须逐行显式选对:- 流量行(发生额:各月现金流入流出、利息、还本、净流量)→
kind="sum" - 余额行 / 水平值(期初余额、期末余额、票据余额、借款余额、安全现金线)→
kind="end" - 累计行(累计计划数、累计完成数、累计缺口)→
kind="end"(累计值本身就是"年初至当月的累计",横着加 12 个月等于把同一笔钱重复计 12 次) - 比率行(占比、完成率、利率)→
kind="avg" - 期初承接行(逐月由上月末结转,年度汇总无意义)→
kind="none"
踩坑实况:资金计划的 10 / 11 页曾把「累计计划付款 / 累计已完成付款 / 累计完成率 / 累计资金缺口 / 可动用资金合计 / 期末可动用资金 / 安全储备线」7 类行全写成SUM(C:N),导致交通企业「累计计划付款」年度汇总显示 38,850 万(而全年计划付款只有 6,068 万)、「可动用资金合计」显示 11,768 万(而年末只有 493 万)——数值荒谬却不触发任何校验(★ 校验行只比对月度列,不看年度汇总列)。诊断办法:① 比对「同一指标在别的页用的是不是=N」(12 页看板一直用=N,与 10/11 页自相矛盾);② 正则扫描 O 列是否被别的公式引用(改前必做)——实测资金计划成品 0 处引用(可放心改),但台账 09 页有 6 处(C22=O8、C24=O8−Σ08!M5:M8、C25=O13、C26=O7、C28=O7−Σ08!L5:L8、C30=O13/AVERAGE(C15:N15)),动这几行的kind前必须同步评估;③ 逐处按行型改正后,用「11 页O18是否等于 12 页看板同名指标O9」做自洽断言(六行业均通过)
⑨SUMIFS的状态条件不要用"<>"—— 纯 Python 的formulas求值引擎对SUMIFS(范围, 状态列, "已付", 金额列, "<>")静默返回 0 而不报错,会把状态汇总算成 0、★ 校验行随之变成大额负数(缓存值错但表面"无错误")。写法上该条件也是冗余的:状态公式本身为IF($G5<=0,"",…),金额为空的行状态必为空串,状态="已付"已隐含金额非空。一律单条件SUMIFS。同理COUNTIFS在本技能独立求值器里恒返回 0 → 笔数统计一律SUMPRODUCT((范围=值)*1)
⑩ 期初余额属"示例数据",不是行业口径 —— 七行业配置里OPEN_CASH只影响「资金不足月份数 / 最大缺口」这类结论的量级观感,安全性、保证金比例、利率、税率才是真口径。把某行业的期初值改大改小不算口径变更(本次商品流通 600→800、施工 1,200→2,500、房地产 3,000→9,600 即是量级校准),但改动前必须先确认它没有出现在任何口径说明文案里(IND_NOTE中若有「期初资金 X 万元」的硬编码字样,改值时必须同步改文案)
- 流量行(发生额:各月现金流入流出、利息、还本、净流量)→
行业配置层(第八、九两类模型共用架构)
这两类模型都是「共享引擎 + 行业配置包」:引擎只有一份(页结构、公式链路、校验行全部写死),行业差异全部下沉到纯数据配置包。新增一个行业 = 增加一个配置包,不改引擎一行。
三个组件(两类模型实现一致,函数名与语义完全相同):
| 组件 | 位置(台账 / 资金计划) | 作用 |
|---|---|---|
_IND_KEYS 可配置键白名单 |
build_treasury_ind.py:168 / build_fundplan_ind.py:360 |
显式列出允许被行业覆盖的模块级变量名。传进来的配置键不在白名单内 → raise KeyError,防止拼错键名后静默不生效(症状是"某几处文案还是工业口径、却不报错") |
snapshot_baseline() |
同上(…_ind.py:182 / :370) |
首次调用时把当前(工业企业)口径的所有白名单键冻结成基线快照,幂等;供下一步复位 |
set_industry(cfg) |
同上(…_ind.py:190 / :378) |
三步注入:① 用基线快照把全部白名单键复位 ② 覆盖配置包里的键(键名非法即抛错)③ S.clear(); S.update(_sample()) 重跑示例数据与自洽断言 |
⚠ 为什么必须「先复位再覆盖」 —— 批量生成五个行业时若只覆盖不复位,上一行业未覆盖到的键会串味到下一行业(典型症状:某个行业的 01 页口径说明里还留着上一行业的措辞,或某几笔示例明细还是上一行业的科目,且不报任何错)。复位保证了每个行业都是「工业基线 + 本行业差异」的干净叠加。
各引擎的额外护栏(set_industry 内断言):
- 台账:len(ACCOUNTS) == 3(引擎第 4 行是票据保证金专户公式行,账户数必须恰为 3)
- 资金计划:det_names == SHEETS[3:9](6 张明细表页名必须逐个等于 SHEETS[3..8])+ len(SHEETS) == 12;同时把 CATS 重建为配置里的 6 个一级类别
配置包自身的护栏(_packs_*.py 文件尾部 _selfcheck(),导入时即执行,把矛盾挡在生成之前):
- 台账 _packs_treasury.py:483:账户恰 3 个;Σ LOAN_NEW ≡ Σ(各笔本年新增放款)、Σ LOAN_REPAY ≡ Σ(各笔本年计划还本)(对不上会让 09 页与 08 页的余额勾稽不平);SALE_IN/PURCH_OUT/…/DIVIDEND_OUT 各恰 12 个月;DRAFTS 元组 7 元、LOANS 元组 12 元
- 资金计划 _packs_fundplan.py:1205:12 页 / 6 张明细表 / 页名与 SHEETS[3:9] 一致 / 6 个一级类别互不相同;每张明细表行数 1~36(预留区上限)、二级分类不得重复、申请单号全局唯一、行元组 11 元、金额 >0、计划付款月 1~12、计划付款日 1~31、付款方式 ∈ {电汇, 银行承兑, 现金}、优先级 ∈ {刚性, 弹性}、实际付款月 ≥ 计划月且 ≤ 已付月份;薪酬明细表须覆盖 1~12 月
调用方式:
# 台账
python scripts/build_treasury_ind.py --industry 施工企业 --out 施工企业-资金管理台账.xlsx
python scripts/build_treasury_ind.py --all --outdir ./out # 一次出五个行业
# 资金计划(同形)
python scripts/build_fundplan_ind.py --industry 房地产开发企业 --out 房地产开发企业-月度资金计划.xlsx
python scripts/build_fundplan_ind.py --all --outdir ./out
新增第七个行业时要做的事:在 _packs_*.py 里加一个纯数据字典 → 登记进 INDUSTRIES 与 ORDER → 跑一次引擎(_selfcheck() 与 set_industry() 的断言会当场告诉你哪一处数据自相矛盾)→ 无需改 build_*_ind.py。
第九类模型(月度资金计划)· 控制表第 12 行 · 七行业齐备(工业企业基准版 v1.0)
> 控制表第 12 行(2026-09-29 新增,控制表六行业列均标「内置」;本技能另交付软件与信息技术服务业配置版;控制表正式名为「月度资金计划表」,技能章节名与成品文件名沿用「月度资金计划」)。命中「月度资金计划 / 资金计划表 / 归集资金需求 / 付款计划 / 付款排程 / 生产采购付款明细 / 基建付款明细 / 设备付款明细 / 薪酬付款明细 / 费用报销明细 / 下个月要付多少钱、钱够不够付」类诉求时调用。与第八类资金管理台账的分工见第 2 步口径说明④;与现金流量管理模型的分工:现金流量模型偏年度预测(12 个月会不会断流),本模型是月度可执行的付款编排(逐笔登记 + 三维度归集 + 排程考核 + 融资额)。
月度资金计划模型 · 七行业(工业企业基准版 v1.0 · 六行业配置版 v1.1)
工业企业-月度资金计划.xlsx(v1.0 · 2026-09-29,生成器 scripts/build_fundplan_ind.py,结构说明 工业企业-月度资金计划-结构说明.md);
六个行业版 {商品流通|施工|房地产开发|旅游饮食服务|交通运输|软件与信息技术服务}企业-月度资金计划.xlsx(v1.1 · 2026-09-29 / 2026-10-09,同一引擎 + 配置包 scripts/_packs_fundplan.py,结构说明 月度资金计划-结构说明.md 七行业合并版)——软件版的 6 张明细表为 04 人力薪酬 / 05 外包与分包 / 06 云资源与软件订阅 / 07 办公与场地 / 08 费用报销 / 09 税费与融资,与工业版「生产采购 / 基建 / 设备 / 薪酬 / 费用报销 / 税费与融资」完全不同形(配置包的 DET_SHEETS 已参数化)。行业配置层与第八类完全同构(_IND_KEYS / snapshot_baseline() / set_industry() / 配置包尾部 _selfcheck()),见上文〈行业配置层〉小节。
- 12 页结构:01 编制说明 / 02 假设与参数 / 03 资金需求归集表 / 04 生产采购付款明细表 / 05 基建付款明细表 / 06 设备付款明细表 / 07 薪酬付款明细表 / 08 费用报销付款明细表 / 09 税费与融资付款明细表 / 10 付款排程与执行表 / 11 资金平衡与缺口预警 / 12 月度资金计划看板
- 明细表是「登记表」不是「矩阵表」(本模型最核心的设计):一张图只画一列,明细表一行一笔(A~N 14 列:序号/申请单号/收款方/二级分类/合同号/事由/金额 G/计划付款月 H/计划付款日/付款方式/优先级/付款状态 L/实际付款月/备注),明细区固定第 5~40 行。月度矩阵由 03 页
SUMIFS(金额列 G, 计划付款月列 H, m)归集而来。不要让用户按月建列——那是预算表的形态,付款明细天然是流水形态 - 三维度归集:① 付款类别(6 类 ↔ 6 张明细表)② 刚性程度(刚性/弹性)③ 付款方式(电汇/银行承兑/现金),外加各类别占比结构。归集口径是计划付款月(现金出账月),不是发票月/到货月
- 付款状态自动判定:
=IF($G5<=0,"",IF($M5>0,"已付",IF($H5<当前月,"逾期未付","待付"))),12 个月随 02 页「当前月份」参数整体刷新 - 资金平衡口径:
安全储备线 = 本月付款需求 × 安全储备月数(逐月滚动);资金缺口 = MAX(0, 付款需求 + 安全储备线 − 可动用资金);可动用资金 = 期初可动用 + 本月计划回笼。两个融资口径不要混用:建议外部融资额 = 各月缺口最大值(年初一次性到位)vs 累计资金缺口 = 各月缺口之和(逐月拆借的授信下限) - 完成率考核口径:「已完成」按计划付款月归属(
SUMIFS(金额, 计划月, m, 状态, "已付")),跨月实际支付不打乱当月分母 - 校验:
python scripts/verify_formulas.py <文件>(独立求值器 0 错误)+python scripts/validate_built_models.py assets/built-models 月度资金计划 --allow 计件工资(结论:通过);七份现状:12 页 / 1,172~1,173 公式(软件版 1,173)/ 23 条 ★ 校验行全归零 / 0 求值错误 / 0 文本误当公式 - 生成:
python scripts/build_fundplan_ind.py --out <文件>(生成期自带_validate()自洽断言:金额 >0、月份 1~12、枚举合法、明细行数 ≤36、各维度合计互等,任一不成立直接拒绝出表);六行业批量:--all --outdir <目录> - 示例结果(六行业对照,金额单位:万元):
| 行业 | 安全储备月数 | 期初可动用 | 明细笔数 | 年度资金需求 | 刚性占比 | 已完成笔数 | 逾期笔数 | 累计完成率 | 缺口月数 | 累计缺口 | 建议融资额 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 工业企业 | 0.8 | 3,200.0 | 107 | 32,213.2 | 85.2% | 69 | 2 | 68.2% | 5 | 2,567.9 | 939.4 |
| 商品流通企业 | 0.8 | 600.0 | 108 | 10,926.8 | 68.0% | 70 | 1 | 63.5% | 6 | 567.9 | 248.0 |
| 施工企业 | 1.2 | 1,200.0 | 109 | 14,535.1 | 89.5% | 71 | 2 | 65.6% | 8 | 6,585.0 | 2,104.8 |
| 房地产开发企业 | 1.0 | 3,000.0 | 107 | 31,495.7 | 81.1% | 63 | 1 | 52.1% | 3 | 1,916.5 | 1,185.7 |
| 旅游饮食服务企业 | 0.8 | 350.0 | 111 | 7,084.5 | 73.3% | 68 | 3 | 63.4% | 6 | 1,250.2 | 432.3 |
| 交通运输企业 | 1.2 | 450.0 | 113 | 6,068.4 | 86.7% | 71 | 2 | 67.1% | 8 | 2,140.5 | 906.4 |
| 软件与信息技术服务企业 | 1.5 | 1,400.0 | 106 | 7,904.9 | 77.0% | 50 | 3 | 45.7% | 7 | 2,250.8 | 726.0 |
⚠ 施工企业「8 个月缺口」是正常的行业特征,不是模型错误 —— 垫资施工 + 安全储备 1.2 个月,缺口月数天然高于其他行业;同理房地产开发企业只有 3 个月缺口(期内资金相对充裕但缺口集中在拿地 / 工程款集中的 3 月与 11 月,单月金额大)。判断"数据是否合理"要看行业叙事,不要只比数字大小。
- 七行业明细表构成(金额万元,配置包 DET_SHEETS):
- 商品流通:商品采购 5,584.5 / 仓储物流 1,147.4 / 门店与设备 1,089.7 / 薪酬 1,104.9 / 费用报销 888.3 / 税费与融资 1,112.0
- 施工:材料与分包 7,734.4 / 项目现场 1,092.1 / 机械设备 1,555.7 / 薪酬 1,587.4 / 费用报销 463.0 / 税费与融资 2,102.5
- 房地产:土地与工程款 12,160.0 / 材料与设备 5,500.0 / 销售与营销 3,430.0 / 薪酬 2,743.7 / 费用报销 960.0 / 税费与融资 6,702.0
- 旅游饮食服务:食材与物资采购 2,001.8 / 场地与物业 1,194.8 / 设备与装修改造 758.6 / 薪酬 2,139.7 / 费用报销与平台费用 298.1 / 税费与融资 691.5
- 交通运输:燃油与路桥 1,751.5 / 车辆与维修 878.1 / 保险与运营 481.1 / 薪酬 1,765.9 / 费用报销 327.8 / 税费与融资 864.0
- 软件与信息技术服务:人力薪酬 3,283.7 / 外包与分包 1,012.6 / 云资源与软件订阅 946.4 / 办公与场地 918.0 / 费用报销 528.8 / 税费与融资 1,215.4(人力薪酬占比 41.5%,是七行业中人力刚性最集中的版本;云资源与软件订阅一项即占 12.0%,对应「云成本随用量浮动、但保底带宽刚性」的双重特征)
- 踩坑记录(资金计划模型专属,改本模型前必读):
① 明细表 SUMIFS 的条件列极易错位 —— 金额是 G、计划付款月是 H、付款方式是 J、优先级是 K、状态是 L、实际付款月是 M。写 sumifs_cond(sheet, col, val, m=None) 时必须传 m(月份条件),漏传会让 12 个月算出同一个「全年合计」,而 ★ 校验行反而更容易全绿(典型假绿)。docstring 已写明
② ★ 校验行不能写成「链接值 − 其被链接的源单元格」 —— 那是代数恒等式,永远为 0,只能防手工覆盖,发现不了 SUMIFS 写法错误。必须走独立路径:绕过 03 页直接从 6 张明细表重新 SUMIFS(G, H, m) 一遍再比对(10 页校验①、11 页校验① 即此形态)。验证手段:反向注入测试 —— 故意把被校验单元格改成错值,看校验行是否从 0 变为非 0(旧写法在全绿中漏报,新写法报出「9 月差 25,407,001」)
③ COUNTIFS 在本技能的独立求值器里恒返回 0(且不报错)→ 笔数统计(10 页 C27:N29)一律用 SUMPRODUCT((范围=m)*1),不要用 COUNTIFS
④ 付款状态判据必须用数值比较,不能用字符串比较 —— 写成 IF($M5<>"","已付",…) 时空单元格与空串在不同求值器下语义不一致(实测把「实际月为空」误判成「已付」)。正确:IF($M5>0,"已付",…),空单元格按 0 处理
⑤ 合计行的行号变量要在写行之前取 —— R["pri_total"] = r 若写在 crow(...) 之后,r 已被推进,公式会自引用本行 → 循环引用(03 页 C19:N19 / C26:N26 踩过)。所有 R[...] 行号登记一律先取行号、再写行
⑥ _budget_core.check_row() 不给回调返回值补 = —— 回调返回裸算式会落盘为纯文本(求和恒 0、求值器不报错)。本模型用 chkrow() 包一层统一补 =,新增校验行必须走 chkrow
⑦ 三页以上的矩阵页必须用显式行号常量 —— 10/11/12 页的块标题、数据行、校验行、注释行全部锚定常量(E_PLAN/E_DONE/…/E_CHK3、B_BEG/…/B_CHK2、D_NEED/…/D_JUDGE)并逐处 assert r == E_xxx 作回归护栏。用「上一个返回值 +1」的推进方式,一旦中间插入一行就整块错位(本次踩过 预期 14,实际 9)
⑧ 02 页的跨页校验要用文本「✓」而非数值 —— 若写成数值 0,会被批量验收脚本当成「★ 校验行」计入 23 条口径,与各页真校验行混在一起。本模型 02 页三条写 =IF(ROUND(差额,2)=0,"✓","不平,请检查")
⑨ 改完生成器必须重新 cp 到 assets/built-models/ 再跑验收,并把交付目录(E:\workbuddy资料\企业财务模型\)一并同步 —— 验收脚本读技能目录副本、用户看的是交付目录
⑩ 「年度汇总」列(O 列)是按行型取值的,不是一律求和 —— 本模型是重灾区(10 页 / 11 页共 7 类行曾全部误写 SUM(C:N),详见第八类踩坑 ⑧ 的完整口径与诊断办法)。写入时一律用 crow/irow/srow 的 kind 参数显式声明:流量行 sum、余额行与累计行 end、比率行 avg、期初承接行 none
⑪ 状态汇总不要用 SUMIFS(…, "<>") —— 6 张明细表共 18 个状态汇总单元格(薪酬表 G50/G51/G52、报销表 G52/G53/G54 等)曾写成双条件 SUMIFS,纯 Python formulas 引擎静默返回 0、★ 校验 ② 随之变成 0 − 明细合计 的大额负数(工业版实测 −181,000,000)。改为单条件 SUMIFS(金额列 G, 状态列 L, "已付") 即正确(状态公式本身含 IF($G5<=0,"",…),已隐含金额非空)。注意:Excel 本身对该写法求值正确,只有本技能的独立求值器会算错 —— 所以这个坑不会在 Excel 里暴露,只会在缓存值与 ★ 校验上暴露
⑫ 验收脚本的「基准行业词残留」扫描会误伤合法复合词 —— 例如施工企业的「计件工资」命中「计价」词表、被报为残留。不要为绕过它而改业务词,用 --allow <词> 显式声明为良性碰撞词:python scripts/validate_built_models.py assets/built-models 月度资金计划 --allow 计件工资。(脚本内部已把 BAD_PATTERNS 改成反向引用 r"(设计|规划)\1",避免「规划设计」这类合法复合词被误伤)
常见场景速查
| 用户说 | 走法 |
|---|---|
| "帮我做个明年的预算表" | 行业未定 → 追问行业 → 全面预算模型 |
| "我们是做批发的,要一份明年的预算表" | 行业命中默认六类(商品流通企业)→ 情形 A:不再就行业追问,直接按商品流通口径交付内置成品 商品流通企业-全面预算模型.xlsx,再按需求增量改造 |
| "我们是做工程的,想算项目投资回报" | 行业 = 施工企业(直接命中)→ 项目投资决策分析模型 |
| "我们国民经济行业代码是 522" | 查 index.md 对照表 → 52 属门类 F → 交通运输企业 → 再判模型 |
| "成本算不准" | 行业未定 → 追问;软件与信息技术服务业 → 直接交付 软件与信息技术服务企业-成本计算-标准成本模型.xlsx(12 页)或 软件与信息技术服务企业-成本计算-作业成本模型.xlsx(13 页,动因而为功能点/测试用例/工单数);若工业企业 → 先判分配口径:产品品种单一、工时与资源消耗基本同向 → 交付 工业企业-成本计算-标准成本模型.xlsx(v2.0,多品种 + 多工序车间断阶 + 在制品/产成品三层口径,分步法·逐步结转,12 页);间接费用占比高、多品种且批量差异大、换型/检验/搬运频繁 → 交付 工业企业-成本计算-作业成本模型.xlsx(v1.0,两阶段作业分摊 + 10 作业三级划分,13 页);两者可并列交付做口径对照。若商品流通 → 成本计算-标准成本模型(进价法/售价法);行业在六类外 → 先声明参考工业口径再创建 |
| "卖多少才不亏""保本点在哪" | 七行业均已内置成品 → 直接交付对应的 工业企业 / 商品流通企业 / 施工企业 / 房地产开发企业 / 旅游饮食服务企业 / 交通运输企业 / 软件与信息技术服务企业-本量利CVP模型.xlsx(16 页,含成本性态分解〔高低点法〕/本量利数据汇总表/保本/目标利润/产销计划/产线或门店·项目·车队激励/敏感性/经营杠杆/接单决策/情景分析);行业不同则量纲、成本项目与判据阈值不同,见 references/models/model-cvp.md 的量纲映射表 |
| "要不要接这个低价单" | 本量利CVP模型(12 接单决策页:相关成本法 + 最低可接受单价);若客户明确问"该定什么价" → 产品定价模型 |
| "该定什么价""最低能打几折""竞争对手卖 X 元我卖多少" | 软件与信息技术服务业 → 直接交付 软件与信息技术服务企业-产品定价模型.xlsx(16 页,人月口径三结合定价,含 SaaS 渠道分成与续约成本提示);工业企业 → 直接交付 工业企业-产品定价模型.xlsx(v1.0,16 页,三结合定价:成本导向〔变动成本价/完全成本价/成本加成价/最低毛利价〕+ 市场导向〔竞品对标顶价〕+ 价值导向〔客户感知价值〕→ 建议价 + 渠道净价 + 保本销量 + 折扣底线 + 降价销量门槛 + 价格×销量敏感性);产品/车间/BOM/工序与标准成本模型同一套数据,若用户此前拿过成本模型可直接衔接。行业在六类外 → 先声明参考工业口径再创建。控制表该行其余 5 行业为 N/A |
| "战略怎么落地""怎么考核部门""除了财务还看什么" | 七行业均已内置成品 → 直接交付对应的 工业企业 / 商品流通企业 / 施工企业 / 房地产开发企业 / 旅游饮食服务企业 / 交通运输企业 / 软件与信息技术服务企业-平衡记分卡BSC模型.xlsx(16 页,四维度 16 指标 + 7 部门记分卡 + 月度/年度双口径 + 因果链量化 + 目标阶梯与情景 + 激励归一化分配 + 雷达图/折线图/柱状图);行业不同则 16 项指标、否决项(恒为内部过程维度第 4 项)与责任部门不同,见 references/models/model-bsc.md 的指标重映射表与否决项阈值表 |
| "想做一套完整的经营分析" | 追问主诉求 → 通常是 全面预算 + 经营分析(杜邦体系) + BSC 的复合组合 |
| "我们是做 SaaS 的""我们是做软件/系统集成的" | 门类 G,已在覆盖内 → 情形 A:直接交付——按模型分别取用 软件与信息技术服务企业-{本量利CVP / 平衡记分卡BSC / 经营分析 / 项目投资决策分析 / 资金管理台账 / 月度资金计划 / 成本计算-标准成本 / 成本计算-作业成本 / 产品定价}模型.xlsx;仅「全面预算」「现金流量管理」两类仍需情形 B |
| "我是开医院的""我们是律所" | 门类 Q / L,不在默认七类内 → 情形 B:先输出参考迁移声明,再直接创建 —— 例:「本 skill 将参考 旅游饮食服务企业 的《{模型名}》模版,创建 SaaS 的《{模型名}》。」→ 随后照常生成,结构说明附「口径差异说明」章节。(注意:自营电商/网络零售属门类 H,是覆盖内行业 → 走情形 A 直接交付商品流通企业模版;项目制定制开发参照施工企业) |
| "做一个月的资金计划表""归集资金需求再安排付款""要生产采购/基建/设备/薪酬/费用报销的付款明细表" | 控制表第 12 行(月度资金计划表) → 按用户行业直接交付对应的 {行业}-月度资金计划.xlsx(七行业均已内置成品;v1.0 工业基准 / v1.1 六行业配置版,12 页,6 类付款明细登记 + 三维度归集 + 付款排程执行 + 缺口预警 + 融资额)。若用户同时要「登记台账」→ 再交付同行业的 {行业}-资金管理台账.xlsx(姊妹模型,控制表第 11 行) |
| "帮我记资金台账""票据什么时候到期、贷款还剩多少""这个月钱够不够" | 控制表第 11 行(资金管理台账) → 按用户行业直接交付对应的 {行业}-资金管理台账.xlsx(七行业均已内置成品;v1.0 工业基准 / v1.1 六行业配置版,10 页,月度资金台账 + 承兑汇票台账 + 银行贷款台账三本台账 + 三视角恒等 + 资金看板预警) |
| "帮我改一下,要加部门维度" | 走第 4 步迭代:影响面 = 收入/费用/预算各页行维度 → 增量改 + 变更说明 |
红线清单
- 不臆断、不静默套用、不空手收尾:该「行业 × 模型」交叉格已覆盖 → 直接按该行业口径交付,不再就行业追问;交叉格未覆盖(含已覆盖行业的未配置模型,如软件行业的全面预算)→ 必须先用固定句式声明「本 skill 将参考 {参考行业} 的《{模型名}》模版,创建 {用户行业} 的《{模型名}》」,再直接创建,并在结构说明中附「口径差异说明」;行业信息缺失、或同时命中多档无法判断主口径时,仍须追问。禁止静默套用某档口径,也禁止以"无法提供"收尾
- 不臆造数据:示例值必须标注【示例】并集中在假设页
- 不只做静态表:交付必须公式连通
- 不越界承诺:本技能产出管理会计模型,不构成审计意见、税务申报依据或投资建议;涉及税务处理时提示用户咨询专业税务顾问
- 不破坏用户数据:迭代时优先增量修改