七步财报分析法 Skill(v7.1 · 笔记风格版 + 大厂研报版式)
> 基于饶刚《简明财务分析》提出的"七步法",专为二级市场投资者设计。数据来源支持本地CSV / 联网MCP在线拉数 / 手动输入三种方式,无本地CSV时亦可经用户授权联网或MCP拉三张表闭环产出(见§1.0前置依赖自检 与 §1.1.1 ONLINE档)。分析前先经 Phase 0 指标生成(调用内置 scripts/ 引擎,把任意来源的财务数据组装成三张原始表 → 产出 output.csv 标准化指标表 + 辅助CSV,见§1.11),七步分析统一读 output.csv 与 Phase 0 辅助CSV,单入口闭环。使用预定义HTML模板(report_template.html)进行占位符填充,确保输出报告CSS一致、图表可用。启动自动依赖自检并引导安装缺失数据源(见§1.0),按资料丰度自适应验证(见§1.1.1),异常点强制✅闭环。
> 作者信息(Author & Attribution)
> 本 Skill 由 松幽 创作并维护。公众号「松幽舒苑」、视频号「松幽Ai提效」持续分享 AI 提效实战技巧、企业财报分析框架与投资研究方法论。本 Skill 以 MIT 协议开源,转载、二次分发、上架至任意 WorkBuddy 兼容商店时,请保留此署名区块与上方 author 字段。
触发词
- "七步财报分析" / "用七步法分析XXX" / "财报分析" / "七步财务分析"
- "帮我分析这家公司的财报" / "seven step financial analysis"
一、快速启动
1.1 AI 响应清单
用户发起后,AI 依次执行:
- 确认分析目标:公司名称、股票代码、分析期间(默认近10年2016-2025)
- 确认数据来源并组装三张原始表(由§1.0 自检结果驱动,四选一;最终都落成 3 张原始表 CSV:资产负债表 / 利润表 / 现金流量表):
- 方式A:已有CSV数据 → 用户提供路径(归入 RICH/MEDIUM/LEAN 档,见§1.1.1)
- 方式B:在线拉数(ONLINE)→ 经§1.0 检到至少一个数据源后,调用westock-mcp(MCP)或westockdata/neodata-financial-search/a-stock-dataskill 拉三张表 → 落 3 张原始表 CSV
- 方式C:手动输入 → AI列出数据清单,用户逐项提供(仅适合个别字段补数)→ 落 3 张原始表
- 方式D:零依赖兜底 → §1.0 检到零数据源且用户拒装时,走 §1.10 WebSearch 独立拉数兜底 → 落 3 张原始表,仍出报告但标⚠️数据缺口 - Phase 0 指标生成(必走):把步骤2 的 3 张原始表(+ 可选 segment/headcount/forecast CSV)→ 调用内置
scripts/指标引擎(见§1.11)→ 产出output.csv+ 辅助CSV → 进入七步分析 - 确认PDF年报(可选但推荐):用户提供PDF路径用于 RICH 模式深度验证;不提供则走 MEDIUM/LEAN 范式(见§1.1.1),异常点仍须✅闭环
- 执行分析:Phase 1 生成初版HTML → Phase 2 按资料丰度自适应验证(RICH全量✅闭环 / MEDIUM旁证✅已解释 / LEAN✅已解释或⚠️缺口)
1.0 前置依赖自检与引导安装(分享友好 · 启动首步 preflight)
> 位置:AI 响应清单第 0 步。本 skill 设计为可分享,别人电脑可能未装数据源依赖;本步确保「缺什么引导装什么」,绝不静默代装。
检测目标(5 类依赖:4 个数据源 + 1 个指标引擎):
| 依赖 | 类型 | 作用 | 检测方式 |
|---|---|---|---|
westock-mcp(腾讯自选股) |
MCP 连接器 | 拉 A股三张表/财报/行情 | 查连接器状态是否 connected |
westockdata |
skill | 金融市场结构化数据查询(等价于 wb-finance-skill) | 查可用 skills 列表 |
neodata-financial-search |
skill | 自然语言财务数据搜索 | 查可用 skills 列表 |
a-stock-data |
skill | A股全栈数据工具包 | 查可用 skills 列表 |
| 执行逻辑(数据源 ≥1 即可;指标生成引擎已内置): | |||
- 指标生成引擎已内置:Phase 0 调用本 skill 自带的 scripts/ 目录脚本(build_metrics.py 等 8 个)产出 output.csv;Python 环境用 command -v python3 自动探测。仅当辅助输入为 xlsx/xls(分业务/员工)时需免费安装 openpyxl(xlsx)或 xlrd==1.2.0(老 xls):pip install openpyxl xlrd==1.2.0,纯 CSV 辅助输入无需安装。 |
|||
- 数据源 ≥1 即可:ONLINE 范式只需「至少一个可用数据源」:westock-mcp(MCP) 或 westockdata 或 neodata-financial-search 或 a-stock-data 任一可用即可走在线拉数。4 个列为推荐集(装得越全,交叉验证越强),不强制全装。 |
|||
1. AI 启动即检测:MCP 状态由环境注入的「连接器状态」判定;skill 由可用 skills 列表 / Skill 工具判定。记录哪些可用、哪些缺失。 |
|||
| 2. 至少一个数据源可用 → 进入 §1.1,选 方式B(ONLINE 拉数)。 | |||
| 3. 零数据源可用 → 输出《依赖安装引导清单》(见下),说明「至少装一个即可」,暂停等用户处理。 | |||
| 4. 用户安装/启用后,AI 重检(依赖用户回话「装好了」触发);有任一数据源即进 ONLINE;绝不静默代装(安全边界:安装动作须用户确认)。 | |||
| 5. 用户拒绝安装 / 环境无法装 → 降级 §1.10 WebSearch 独立拉数兜底,仍走七步;报告头标注「本报告基于 WebSearch 独立拉数,可信度受限(⚠️数据缺口),非 workspace 结构化数据源」。 |
《依赖安装引导清单》模板(输出给用户):
⚠️ 七步财报 Skill 的「在线拉数」至少需要以下任一数据源;当前均未检测到,请至少安装一个即可开始:
【1】腾讯自选股 MCP(westock-mcp)
· 作用:拉取 A股 三张表/财报/行情
· 安装:WorkBuddy 左侧「连接器」→ 找到「腾讯自选股(westock-mcp)」→ 点击「连接/启用」
· 完成后告诉我一声,我会自动重检
【2】westockdata(金融市场结构化数据查询 skill)
· 安装:专家/技能市场 → 搜索「westockdata」→ 安装;
或对话中让我用「find-skills / marketplace-skill-installer」帮你装
【3】neodata-financial-search(自然语言财务搜索 skill)
· 安装:同上,搜索「neodata-financial-search」→ 安装
【4】a-stock-data(A股全栈数据工具包 skill)
· 安装:同上,搜索「a-stock-data」→ 安装
✅ 装好至少一个数据源【1-4】后回我「装好了」,我重检通过即开始。(指标生成引擎已内置,无需额外安装)
(若暂时不想装数据源:直接说「先用 WebSearch 拉」,我走 WebSearch 独立拉数兜底(§1.10)仍出报告)
1.1.1 资料丰度三档评估(客观决策树,降AI主观误判)
启动后按以下客观阈值判定当前资料档位,自动归入、不强行追问用户;判定结论写入报告「数据来源与口径说明」框,并标注当前处于 RICH/MEDIUM/LEAN 哪一档,读者一眼可知本报告可信度档位。
| 档位 | 客观判定(满足即归入) | 处理范式 |
|---|---|---|
| RICH 资料多 | workspace 内有 ≥3 年 PDF年报/招股书/MD摘录 原文 且 有结构化CSV | 全量异常点✅闭环(引PDF原文);增量公告走§1.9补数流;irm仅背景框 |
| MEDIUM 资料中 | 有结构化CSV + 部分公告PDF/中报,但无完整PDF年报原文 | 异常点优先✅已解释(引CSV/招股书旁证);关键异常尝试 WebSearch 年报片段;irm背景框 |
| LEAN 资料少 | 仅结构化CSV,或CSV+external web,无PDF年报/招股书原文 | 异常点✅已解释(引CSV/行业常识/公开数据);真无源→⚠️数据缺口(方向说明+🥉),绝不写"未验证"卡死;irm禁止当事实 |
| ONLINE 纯在线 | workspace 无 CSV/PDF(或仅用户口述),且§1.0 检到至少一个数据源、用户授权联网/MCP 拉数 | 拉三张表→落 3 原始表 → Phase 0 产出 output.csv→转 MEDIUM/LEAN 处理;接口数据标🥈,WebSearch交叉验证标🥉;异常点仍三态✅闭环 |
> ONLINE 流闭环(v6.2 修单文件断点):检测源 → 拉资产负债表/利润表/现金流量表 → 落 3 张原始表 CSV(对齐 01_中间产物_CSV输入/ 三文件格式)→ 进 Phase 0(§1.11) 调 metrics-csv 引擎产出 output.csv + 辅助CSV → 按 MEDIUM/LEAN 分流(异常点仍三态✅闭环)。废弃 v6.1 的 online_cache.csv 单列约定,统一经 Phase 0,避免「单文件 vs 三文件」喂不进的断点。
> 评估结论写入报告「数据来源与口径说明」框,并标注当前处于 RICH/MEDIUM/LEAN/ONLINE 哪一档,读者一眼可知本报告可信度档位。
1.2 数据验证铁律
| 规则 | 说明 |
|---|---|
| 每步重读CSV | 禁止依赖之前步骤的内存缓存 |
| CSV已有数据禁止手动计算 | 直接引用CSV中的值 |
| 缺失数据才去外部获取 | API / PDF / WebSearch 补充;ONLINE 拉数须先落 3 张原始表 → Phase 0 产出 output.csv(见§1.11),不另写适配层 |
| 异常点必须✅闭环 | 每点终态只能是:✅已验证(引PDF/年报原文)或 ✅已解释(引招股书/CSV/行业常识旁证);真无源→⚠️数据缺口(方向说明+🥉),严禁留⚠️未验证/❌无法验证/部分解释 |
| CSV列序需确认 | 先检查列标题年份方向(新→旧 或 旧→新) |
| 零幻觉 | 每个数字必须可追溯到§1.4某档来源;irm互动记录禁止作为公司确认事实(见§1.6) |
| 数据来源归口(Phase 0) | 核心第1–7步指标读 output.csv 指标名行(见§1.11 命名与「步骤标题块+指标名」二维定位);第4步业务构成/第6步人员效率/第3步前瞻读 Phase 0 在 02_指标产出/ 产出的辅助CSV(segment/headcount/forecast),非 output.csv 核心列;第8步八问/第9步同行=推理叙事不读行;禁再读原始三张表(原始表仅 Phase 0 输入用) |
1.3 异常点回溯触发条件
| 触发条件 | 验证内容 | 查阅年报章节 |
|---|---|---|
| 营收/利润增长率绝对值 > 30% | 增长原因真实性 | MD&A + 主营业务分析 |
| 毛利率跳变 > 5pct | 成本结构变化原因 | 主营业务分析 + 附注 |
| 业务结构根本性改变 | 战略转型是否属实 | 主营业务分析 + MD&A |
| 经营现金流与净利润长期不匹配 | 盈利质量真实性 | 现金流量表附注 |
| 资产负债表异常大额项目 | 财务操纵风险 | 附注(相关科目) |
1.4 数据可信度分级(全报告统一符号 + 决策边界)
| 符号 | 级别 | 来源示例 | 引用标注要求 |
|---|---|---|---|
| 🥇 | 原版官方 | PDF年报原文 / cninfo官方公告PDF / 招股书 | 直接引用,最可信 |
| 🥈 | 结构化精选 | 本workspace CSV / 本workspace精选MD摘录 / 中报PDF | 引用注明文件 |
| 🥉 | 外部旁证 | 业绩会纪要 / 券商研报 / WebSearch / 历史旧产出 | 标"external 源,非workspace PDF",注明以公司公告为准 |
| 🚫 | 非公司确认 | irn互动记录(仅投资者提问,无官方回复) | 仅作背景框,带"非公司确认"标注,禁当事实 |
决策边界(消歧):同为公司产出,本workspace现产=🥈,历史旧产出/外部抓取=🥉;官方公告PDF永远=🥇,无论新旧。
ONLINE 拉数专属分级:接口(westock-mcp / westockdata / neodata-financial-search / a-stock-data)拉来的结构化数据 = 🥈 结构化精选,标注「接口名 + 拉取日期」;需 WebSearch 交叉验证的片段 = 🥉 外部旁证,注明以公司公告为准。
1.5 异常点零幻觉闭环铁律
- 每个异常点终态三选一,且必须写验证来源:
1.✅ 已验证(202X年报):…原文…
2.✅ 已解释(招股书/CSV旁证):…
3.⚠️ 数据缺口(方向:…,待补XX资料)— 仅 LEAN 模式仍查不到的极个别情况 - 硬禁:任何步骤正文/异常点表/结论不得出现「未验证」「无法验证」「部分解释」「待年报验证」等悬空表述。
- 2017类历史缺口:若无年报PDF,用招股书旁证+CSV定性解释,标✅已解释,不得标缺口。
1.6 irn 互动记录零幻觉硬约束
- irn/互动易页面默认视为仅投资者提问流、无公司官方回复(宁德实测确认;其他公司同理默认)。
- 例外:若用户明确提供「公司官方回复」证据,则该部分可作🥇/🥈来源;否则一律🚫。
- 处理:仅作「市场关注热点」背景框,标题带「🚫 非公司确认」;严禁把任何提问内容当作公司确认事实写进结论/数据。
- 若需引用热点(如宜春锂矿复产、固态电池中试),表述为「市场关注:投资者多次问及XX,公司未公开回应」。
1.7 期次隔离规则
- 中报 H1 数据(如 2026H1)与年报 YOY(2025 vs 2024)必须分列标注,不得混算同比。
- 报告内凡出现中报数据,括注「(2026H1,与年报YOY隔离)」;图表单独分区。
1.8 排版与呈现规则(固化本次整改 + 预写模板CSS注释)
- 关键提示框:
{{WARNING_BOX}}必须用<ul><li>分行(≤5条,每条一行);report_template.html已固化:
css /* §1.8: WARNING_BOX 须用 ul/li 分行,≤5条,每条一行;ul{list-style:disc} li{margin:5px 0;line-height:1.7} */ .warning-box ul { margin: 8px 0 4px 20px; padding: 0; list-style: disc; } .warning-box ul li { margin: 5px 0; line-height: 1.7; } - 长段分行:盈利质量四关系等叙述,按句号分行、列表化,单段≤2句号,禁止堆长句。
- 异常点表:每行一个异常点,状态列只填 ✅已验证/✅已解释/⚠️数据缺口,不得写未验证。
- 状态精确度:回购/分红/评级等「已公告未实施」必须标「待股东会审议/董事会通过待实施」,不得写成已落地。
- LEAN 可信度声明模板(资料少模式专用,写入数据来源框):
> ⚠️ 本报告基于 LEAN 模式生成:部分结论以 🥉 外部旁证 / 行业常识支撑,可信度低于 RICH 模式;异常点均已 ✅闭环或标注⚠️数据缺口,无悬空"未验证"。建议补充 PDF 年报后升级为 RICH 模式复验。
1.8.1 行文风格规范(v7.0 笔记风格 · 强制)
> 本节是全报告叙述层的总纲,所有步骤结论必须按此风格书写。源自老板原始笔记《"七步八问"财务分析法》的行文方式(实测反馈:机械标签让读者困惑,自然表达才通俗易懂)。
- 动词式标题:每步结论标题用「第X步:看XXX(意义:XXX)」格式(如"第2步:看成本费用构成(意义:理解盈利结构,识别效率变化)"),不用"诊断/评估"等书面腔词。
- 结构三段式:每步 = 目的(一句话说清这步看什么)→ 数据/分析(做什么 + 为什么看 + 怎么看)→ 告诉普通投资者(3条以内大白话结论)。
- 接地气语言:多用生活化比喻(体检、真金白银、外快、三板斧、现金牛、拖油瓶、心电图),拒绝术语堆砌;专业名词首次出现配一句大白话解释(可参考
references/术语人话词典.md)。 - 判断给依据:凡"优/良/警戒、高/低、强/弱"类判断,必须用大白话说清依据或给出可复算算式(含
=与数字),不甩裸结论(阈值参考references/阈值标尺库.md,但以自然语言呈现,不写"标尺库§X"式编号引用)。 - 反面可能:每个关键判断至少附一条「也可能是…」(参考
references/反面假设清单.md),避免单一解读。 - 案例佐证:有真实案例(科沃斯/石头科技/卓胜微等)时优先用案例讲道理,比抽象表述有说服力。
- 前后印证:每步结论末尾自然交代与前后步骤的关联(如"负债率呼应第1步自由现金流"),不用"🔗"符号。
- 禁机械标签:全报告禁止出现【一问】【二算】【三标】【四链】【五用】及"标尺库§X"式编号引用等读者看不懂的框架标签。
1.9 特别模块:最新事件与增量公告补数(Phase 2.5)
> 当老板追加近期公告/互动记录链接时,走此工作流(本次 3 链接实战沉淀)。不称"第10步"(技能分析章为第1–9步,避免结构冲突)。
四步补数流:
1. 抽文字层:cninfo PDF 用 curl -sL -A "Mozilla/5.0" 直链下载 + pdfplumber 抽(WebFetch 读不了 FlateDecode 压缩流);irm 互动记录直接读页面。
2. 分级(§1.4):公告PDF→🥇;业绩会纪要→🥉;irm→🚫。
3. 映射补数(见下表 §1.9.1):公告关键事实并入对应 step。
4. 插入+隔离:中报/公告数据与年报YOY按§1.7隔离;irm背景框带🚫非公司确认。
§1.9.1 补数映射表:
| 公告关键事实 | 并入步骤 | 状态精确度 |
|---|---|---|
| 专利数 / 市占率 / 新品矩阵 | 第4步 看业务构成 | 已公告事实,直接并入 |
| 中期分红 / 评级上调 / 回购增厚EPS | 第8步 八问商业模式 | 分红/回购为"已公告未实施" |
| 回购精确参数(股数/价格/用途)/ 中期分红 / 评级 / irn背景 | 特别模块(Phase 2.5) | 待股东会审议/董事会通过待实施 |
| 数据来源分级 | 附录 | 🥇/🥈/🥉/🚫 标注 |
补数注意事项:回购/分红为"方案已公告未实施",状态精确度(§1.8)。
1.10 WebSearch 独立拉数兜底(零依赖路径 · 分享友好)
> 当§1.0 检到零数据源且用户拒绝/无法装 MCP/skill 时,用内置 WebSearch 拉结构化财务数据,落 3 张原始表后进 Phase 0 产出 output.csv(单入口闭环,正是老板担心的「分享给没装依赖的人」的真实可用路径)。
- 按「公司名 + 资产负债表/利润表/现金流量表 + 年份」分次搜索(东方财富/新浪财经等公开页)。
- 从结果抽取关键科目(营收/净利/经营现金流/总资产/净资产/负债等)按年填入。
- 落 3 张原始表 CSV(资产负债表/利润表/现金流量表,对齐
01_中间产物_CSV输入/三文件格式)→ 进 Phase 0(§1.11) 调 metrics-csv 引擎产出output.csv+ 辅助CSV。 - 标 🥉 外部旁证,注明「WebSearch 拉取,以公司公告为准」;缺失科目标 ⚠️数据缺口(Phase 0 产出 output.csv 时仍按§1.11 命名,缺失指标行留空待补)。
> 此路径数据完整度低于 MCP/skill,仅作兜底;引导安装仍是首选。但它保证了「纯无依赖也能出报告」,不卡死。
1.11 Phase 0 指标生成(内置指标引擎 · scripts/ 目录)
> 把任意来源的财务数据统一组装成三张原始表 → 调用本 skill 自带的 scripts/ 指标引擎 → 产出 output.csv 标准化指标表 + 辅助CSV,七步分析只读这些产物(单入口闭环,修掉 v6.1 ONLINE 单文件断点)。这是 v6.2 相对 v6.1 的核心新增。
输入:
- 必选:3 张原始表(资产负债表 / 利润表 / 现金流量表 CSV),来自方式A/B/C/D 的组装结果(见§1.0/§1.1.1/§1.10)
- 可选模块输入(有则跑、无则优雅跳过,落同目录):
- segment.xlsx(分产品/分地区收入)→ 业务构成(第4步)
- headcount.xlsx(员工人数/薪酬/研发人员)→ 人员效率(第6步)
- forecast_input.csv(券商一致预期明细)→ 经 build_forecast.py 产出伴侣文件 forecast_consensus.csv(前瞻,第1/3步读取)
> 辅助输入格式约束(V7 实跑验证):segment/headcount 须为 xlsx/xls 格式——metrics-csv 引擎的 build_segment.py/build_headcount.py 仅吃 xlsx/xls(纯 csv 辅助输入会被优雅跳过、不报错,见§1.11 验证实录)。ONLINE/WebSearch 产出的辅助数据若为 csv,第4步业务构成/第6步人员效率将标 ⚠️数据缺口(方向:待补 xlsx 版 segment/headcount);要业务构成/人员效率请用 xlsx 源(如 00_源数据_原始财报/ 的 xlsx)。forecast 经 build_forecast.py 注入无此限制。
调用(跨机器可移植,自动探测 Python 路径):
PY="$(command -v python3 || command -v python)"
# 核心(仅三张表)
$PY "$HOME/.workbuddy/skills/seven-step-financial-analysis/scripts/build_metrics.py" \
<资产负债表.csv> <利润表.csv> <现金流量表.csv> [输出目录]
# 或端到端(含可选模块,缺则跳过)
$PY "$HOME/.workbuddy/skills/seven-step-financial-analysis/scripts/orchestrate.py" \
--in <含3原始表+可选segment/headcount/forecast目录> --out <产出目录>
- 输出目录固定
{公司名}_七步财报分析/02_指标产出/(对齐现有宁德布局 00→01→02→04)。
output.csv 行结构(分析读取约定,已核实 02_七步指标产出/output.csv):
- 第 1 列 = 指标名;第 2…N+1 列 = 年份值(新→旧);后 2 列预留空。
- 步骤以标题行分隔:「第一步:看营收数据 (…)」…「第七步:看收益率 (…)」。
- 指标名按内置 references/SOP_七步财报分析指标公式.md §3.5 标准命名(营业收入/毛利率/经营利润/净营运资产/ROIC/ROE/资本开支…),分析 9 步按此名读取,禁读原始表列名(见§1.2 铁律)。
数据契约(核心7步 / 辅助 / 推理 三类读取边界,修 K1):
- ① 第1–7步核心指标(营收/利润/毛利/增长率/资产/负债/ROE等)→ 读 output.csv 指标名行,按「步骤标题块 + 指标名」二维定位(同名指标跨步时必带步骤块,见 S2)。
- ② 第4步业务构成 / 第6步人员效率 → 由 Phase 0 经 segment/headcount 输入注入 output.csv 对应步区域(非原始三表);第3步前瞻一致预期经 build_forecast.py 产出伴侣文件 forecast_consensus.csv(不进 output.csv,保持主表历史实际纯结构),由第1/3步读取;无输入则对应步标 ⚠️数据缺口(见各步指针)。
- ③ 第8步八问 / 第9步同行 = 基于指标的推理叙事,不读行;仅引用前7步 + 辅助CSV 结论。
- ④ 禁再读原始三表:所有数值来自 output.csv + 辅助CSV,原始三表仅 Phase 0 输入用。
> 注:v6.1 的 online_cache.csv 单列约定已废弃,统一改为「落 3 原始表 → Phase 0」;ONLINE/WebSearch 兜底同样走此路径(见§1.1.1/§1.10 修改)。
二、执行流程规范
2.1 单步执行流程
每步通用流程(10步):
0. 重新读取CSV文件(Read工具)
1. 列出本步需要的数据科目和时间范围
2. 从CSV中提取目标数据(优先CSV)
3. 检查数据完整性,缺失则用API/PDF/WebSearch补充
4. 执行该步骤的所有分析动作
5. 以表格+文字形式展示分析过程
6. 识别异常点并标注
7. 异常点回溯年报验证(按1.3节触发条件)
8. 按规范格式给出本步结论
9. 保存本步独立Markdown报告到工作区
10. 告知用户"第X步完成,进入下一步"
2.2 文件保存规范
- 每步独立MD报告:
{工作区根目录}/{公司名}_七步财报分析/第X步-{步骤名称}.md - 编码:UTF-8
- 最终HTML报告:
{工作区根目录}/{公司名}_七步财报分析/{公司名}_七步财报分析.html
三、第1步:看营收数据
3.1 数据抽取模板
数据来源(Phase 0):读 output.csv 第1步标题块下「营业收入 / 归母净利润 / 扣非净利润 / 经营净现金流 / OCF÷归母净利润」指标名行(按§1.11 二维定位)。
| 年份 | 营业收入(亿) | 归母净利润(亿) | 净利润率 | 扣非净利润(亿) | 经营净现金流(亿) | OCF/归母净利润 |
|---|---|---|---|---|---|---|
| 2016 | ... | ... | ... | ... | ... | ... |
3.2 分析动作清单
- [ ] 看营收/利润的绝对规模,心里先有个数
- [ ] 看营收/利润的成长轨迹(哪年爆发、哪年掉队),算 CAGR
- [ ] 验盈利质量四关系:扣非/归母、经营利润 vs 金融利润、OCF/归母、自由现金流
- [ ] 对照券商一致预期,看市场对它未来增长怎么看
- [ ] 异常点标注(增长率 > ±30%)
- [ ] 结论写作要求:①关键比率必须给可复算算式(含
=与数字,注明口径:平均/期末、是否含资本化研发)②判断"优/良/警戒"时用大白话说清依据,别只甩结论③每个判断至少想一条反面可能(「也可能是…」)④最后落到普通投资者该盯什么;每步末与前后步骤互相印证
3.3 结论模板
## 第1步:看营收数据(意义:建立基本面轮廓,评估盈利质量)
**目的**:先摸清这家公司有多大、赚不赚钱、钱赚得实不实,心里有个底。
### 一、规模与成长:这家公司什么体量、跑得多快?
- 营收从[A亿]→[B亿],年复合增速 X%(算一算:营收 CAGR = (B÷A)^(1/年数)−1,区间[起]-[止])
- 归母净利润从[A亿]→[B亿],年复合增速 Y%
- 净利润率 Z%——赚钱能力在同行业里大致处于[高/中/低]
### 二、盈利质量四关系:利润是不是"真金白银"?
1. **扣非 vs 归母**(主业纯度):扣非/归母 = A÷B = [0.84]
- 怎么看:比值常年 >0.9 说明主业扎实;明显低于 0.8 就要警惕利润里掺了"外快"(政府补助、卖资产等一次性收益),明年未必还有
2. **经营利润 vs 金融利润**(利润来源):经营利润/归母 = [0.8]
- 怎么看:对非金融企业,主业才是根本。金融利润占比过高(如 >50%),要么主业乏力,要么公司更像"投资平台"(例:泰格医药过半利润来自公允价值变动)
3. **经营净现金流/归母**(现金含量):OCF/归母 = [1.1]
- 怎么看:利润是账面数,现金才是真钱。比值长期 <0.6,说明利润可能是赊销堆出来的,含金量存疑
4. **自由现金流**(真实盈利):OCF − CAPEX = [正/负]
- 怎么看:持续为正 = 公司能自给自足;持续为负 = 靠借钱/融资续命,风险信号
### 三、未来展望:市场预期它跑多快?
- 历史CAGR [X%] vs 券商一致预期 [Y%] → [合理/偏高/偏低]
- 怎么看:预期远高于历史 = 市场在讲"增长故事",要警惕兑现不了;预期明显低于历史 = 市场可能认为高增长阶段已过(例:卓胜微预期从三位数增速回落到 12%,PE 和市值随之大缩水)
### 四、异常点
- [ ] 年份 + 描述 + 验证状态
### 五、这一步告诉普通投资者
- 1) 先看体量:多大的公司、多赚钱 2) 再看含金量:扣非和现金流实不实 3) 最后对预期:股价里已装了多少"故事"
- 这一步像体检先量身高体重血压,虽不能确诊,但能快速圈出重点方向,引导后面几步深挖
四、第2步:看成本费用构成
4.1 数据抽取模板
数据来源(Phase 0):读 output.csv 第2步标题块下「毛利率 / 净利率 / 毛利率-净利率差值 / 研发费用率 / 管理费用率 / 销售费用率 / 财务费用率」指标名行。
| 年份 | 毛利率 | 净利率 | 毛利率-净利率差值 | 研发费用率 | 管理费用率 | 销售费用率 | 财务费用率 |
|---|---|---|---|---|---|---|---|
| 2016 | ... | ... | ... | ... | ... | ... | ... |
4.2 分析动作清单
- [ ] 算毛利率、净利率,看趋势(毛利率理解商业模式,净利率看综合效率)
- [ ] 看毛利率−净利率差值(期间费用总侵蚀程度)
- [ ] 拆四项费用率:研发/管理/销售/财务
- [ ] 判断成本驱动类型(技术驱动?品牌驱动?规模效应?高杠杆?)
- [ ] 结论写作要求:①关键比率给可复算算式(含
=与数字,注明口径)②判断"优/良/警戒"用大白话说明依据③每个判断至少一条反面可能(「也可能是…」)④落到普通投资者该盯什么;每步末与前后步骤互相印证
4.3 结论模板
## 第2步:看成本费用构成(意义:理解盈利结构,识别效率变化)
**目的**:搞清公司赚钱靠的是真本事(产品竞争力)还是硬烧钱(费用堆出来的增长)。
### 一、毛利率:产品本身赚不赚钱?
- 毛利率 = (营收−营业成本)÷营收 = [值],近3年波动 [X pct]
- 怎么看:毛利率高 = 有定价权/品牌/技术壁垒(例:科沃斯毛利率从 2013 年 28.59% 升到 2021 年 51.41%,正是代工转自主品牌的结果);持续下滑则要警惕价格战或竞争优势削弱
- 反面可能:毛利率高也可能是行业短期供需错配(缺货涨价),不是持久的壁垒
### 二、净利率:扣完所有费用还剩多少?
- 毛利率−净利率差值 = [X]→[Y] pct
- 怎么看:差值就是期间费用+减值的总侵蚀。毛利率高但净利率低 = 费用猛吃利润,要重点查费用结构
### 三、费用结构:钱都花哪去了?
- 研发费用率 [X%]→[Y%](技术/产品驱动型公司关键指标;查「开发支出」科目防研发资本化粉饰利润)
- 销售费用率 [X%]→[Y%](持续高企 = 靠砸钱换增长;例:科沃斯 24.74% vs 石头科技 7.55%,两种打法)
- 管理费用率 [X%]→[Y%](收入增速 vs 费用增速:收入跑赢费用 = 规模效应显现)
- 财务费用率 [X%]→[Y%](财务费用 = 利息收入−利息支出;为负 = 存款息>贷款息,账上闲钱多)
### 四、异常点
- [ ] 年份 + 描述 + 验证状态
### 五、这一步告诉普通投资者
- 1) 高毛利 = 有护城河,但要防"虚高" 2) 费用率赛跑看规模效应 3) 研发资本化是利润粉饰警戒线
五、第3步:看增长
5.1 数据抽取模板
数据来源(Phase 0):核心读 output.csv 第3步标题块下「营收增长率 / 归母净利润增长率 / 扣非净利润增长率」行;历史CAGR vs 券商预期CAGR 的部分读 Phase 0 经 build_forecast.py 产出的伴侣文件 forecast_consensus.csv(不进 output.csv,见§1.11 数据契约②)。
| 年份 | 营收增长率 | 归母净利润增长率 | 扣非净利润增长率 |
|---|---|---|---|
| 2017 | ... | ... | ... |
5.2 分析动作清单
- [ ] 看营收/利润逐年增长率(波动和异常点)
- [ ] 算历史 CAGR,与券商一致预期 CAGR 对比
- [ ] 生命周期定位(彼得·林奇五类:缓慢/稳定/快速/周期/困境反转)
- [ ] 识别关键转折点,追溯背后原因
- [ ] 结论写作要求:①关键比率给可复算算式(含
=与数字,注明口径)②判断"优/良/警戒"用大白话说明依据③每个判断至少一条反面可能(「也可能是…」)④落到普通投资者该盯什么;每步末与前后步骤互相印证
5.3 结论模板
## 第3步:看增长(意义:把握核心趋势,评估未来潜力)
**目的**:判断这家公司的成长是真的、可持续的,还是昙花一现。
### 一、增长率趋势:增长稳不稳、有没有异常?
- 营收增长率:[波动范围],转折点:[年份]
- 归母增长率:[波动范围],转折点:[年份]
- 怎么看:逐年增速是"心电图",异常负增长或骤升骤降都是深挖信号(例:科沃斯 2019 年净利暴跌 75%→2020 年暴增 430%,背后是退出低端代工、押注自主品牌)
### 二、CAGR 对比:历史 vs 预期
- 历史 CAGR [X%] vs 券商预期 [Y%] → [合理/偏高/偏低]
- 怎么看:预期远高于历史 = 市场在讲"增长故事",兑现难度大(警惕戴维斯双杀);预期低于历史 = 市场认为高增长已过,可能反而低估
### 三、生命周期定位
- 类型:[缓慢/稳定/快速/周期/困境反转]
- 判定依据:增速 + 空间 + 竞争,对照林奇五类。注意:周期型、困境反转型公司增速参考价值低,重点应放在拐点判断上
### 四、异常点
- [ ] 年份 + 描述 + 验证状态
### 五、这一步告诉普通投资者
- 1) 戴维斯双杀 = 业绩估值一起跌,高增长股最怕预期减速 2) CAGR 看长期,别被单年数据误导 3) 增长质量比速度重要:量增/价增/并表增,量增最实
六、第4步:看业务构成
6.1 数据抽取模板
数据来源(Phase 0):读 Phase 0 经 segment.xlsx 注入 output.csv 的业务构成行(分产品/分地区收入、占比、毛利率);无 segment 输入则本步标 ⚠️数据缺口(方向:业务构成待补 segment.xlsx)。
| 年份 | 业务1名称 | 营收(亿) | 占比 | 毛利率 | 业务2名称 | 营收(亿) | 占比 | 毛利率 |
|---|---|---|---|---|---|---|---|---|
| 2016 | ... | ... | ... | ... | ... | ... | ... | ... |
6.2 分析动作清单
- [ ] 各业务营收占比趋势(谁在扩张、谁在收缩)
- [ ] 各业务毛利率对比(哪个业务最赚钱)
- [ ] 核心利润引擎识别(哪一业务贡献最多利润)
- [ ] 业务结构风险评估(单一业务依赖度?)
- [ ] 结论写作要求:①关键比率给可复算算式(含
=与数字,注明口径)②判断"优/良/警戒"用大白话说明依据③每个判断至少一条反面可能(「也可能是…」)④落到普通投资者该盯什么;每步末与前后步骤互相印证
6.3 结论模板
## 第4步:看业务构成(意义:拆解收入引擎,定位驱动力来源)
**目的**:穿透汇总数字,看清公司的钱具体是哪块业务赚来的——增长引擎是谁、现金牛是谁、拖油瓶是谁。
### 一、收入结构:业务版图怎么变的?
- 各业务营收占比:业务1 [X%]→[Y%]、业务2 [X%]→[Y%]
- 怎么看:占比变化反映战略重心转移(例:科沃斯代工业务占比持续下降、自主品牌持续上升,对应"添可"新品牌的故事)。单一业务占比 >70% 属高集中风险
### 二、毛利率对比:哪个业务最赚钱?
- 各业务毛利率 [对比];利润贡献 vs 收入贡献对照(利润贡献 = 业务利润÷总利润)
- 怎么看:营收大 ≠ 利润高。低毛利业务可能"赔本赚吆喝",把收入做大却赚不到钱,要防这种虚胖
### 三、核心利润引擎
- 结论:[XX业务] 是主要利润来源(贡献 [X%] 利润),是现金牛/增长引擎/拖油瓶
- 第二曲线:[能否扛住主业下滑] 测算
### 四、结构风险
- 单一业务风险:[高/中/低](占比 >70% 属高风险)
- 第二曲线决定天花板:靠一款产品打天下,还是有多条腿走路
### 五、异常点
- [ ] 描述 + 验证状态
### 六、这一步告诉普通投资者
- 1) 看利润贡献,不是看收入贡献 2) 单一依赖是风险 3) 第二曲线决定天花板
- 这一步是财务数据与公司实际经营连接的桥梁:用分部数据验证管理层讲的战略故事是否属实
七、第5步:看资产负债
7.1 数据抽取模板
数据来源(Phase 0):读 output.csv 第5步标题块下「流动资产 / 货币资金 / 存货 / 非流动资产 / 总资产 / 资产负债率 / 归母净资产 / 营运资本(WC) / WC÷营收」指标名行。
| 年份 | 流动资产(亿) | 货币资金(亿) | 存货(亿) | 非流动资产(亿) | 总资产(亿) | 资产负债率 | 归母净资产(亿) | WC(亿) | WC/营收 |
|---|---|---|---|---|---|---|---|---|---|
| 2016 | ... | ... | ... | ... | ... | ... | ... | ... | ... |
7.2 分析动作清单
- [ ] 看资产结构(流动 vs 非流动占比,重/轻资产判断)
- [ ] 看资产负债率趋势 + 有息/无息债务拆分
- [ ] 算营运资本(WC)占收入比重(产业链地位判断)
- [ ] 扫异常资产项目(大额商誉、在建工程、存货增速)
- [ ] 结论写作要求:①关键比率给可复算算式(含
=与数字,注明口径)②判断"优/良/警戒"用大白话说明依据③每个判断至少一条反面可能(「也可能是…」)④落到普通投资者该盯什么;每步末与前后步骤互相印证
7.3 结论模板
## 第5步:看资产负债(意义:评估资产效率和财务风险)
**目的**:看看这家公司家底厚不厚、钱从哪来、债多不多,扛不扛得住风雨。
### 一、资产结构:钱都压在什么上面?
- 流动资产占比 [X%];1元收入固定资产 = 固定资产÷营收 = [X元]
- 怎么看:重资产(制造业,固定资产占比高)vs 轻资产(软件/品牌,靠人脑)——重资产经营杠杆高、对产能利用率敏感,轻资产扩张更灵活(例:石头科技代工模式资产远轻于科沃斯)
### 二、负债安全:借的钱多不多、贵不贵?
- 资产负债率 = 总负债÷总资产 = [X%];有息债务÷总负债 = [X%]
- 怎么看:资产负债率 <50% 较安全、>70% 要警惕;有息债少、无息债多 = 占上下游便宜、现金流健康(例:科沃斯 2021 年负债率 52.37% 但几乎全是有息之外的无息负债)
- 反面可能:账上负债低也可能藏着表外负债/租赁负债,要看附注
### 三、营运资本(WC):做生意要垫多少钱?
- WC = 应收+存货+预付 − 应付−预收−合同负债 = [X亿];1元收入WC = WC÷营收 = [X元]
- 怎么看:WC 为负或很小 = 占用上下游资金经营,产业链地位强势(格力、茅台);WC 大 = 自己垫钱做生意,可能处于弱势或商业模式使然(贸易商囤货)
### 四、异常项目扫描
- 商誉/在建工程/存货增速 vs 收入增速对比(存货增速 >> 收入 = 滞销警戒)
- 存贷双高(货币资金高且借款高)= 资金占用异常,需警惕
### 五、异常点
- [ ] 描述 + 验证状态
### 六、这一步告诉普通投资者
- 1) 无息负债多 = 产业链地位强 2) WC 为负 = 占上下游款 3) 商誉、存货暴涨是雷区
八、第6步:看投入产出
8.1 数据抽取模板
数据来源(Phase 0):读 Phase 0 经 headcount.xlsx 注入 output.csv 的人员效率行(员工人数 / 人均收入 / 人均归母净利润 / 人均薪酬 / 1元收入需固定资产 / 1元收入需长期资产 / 人均固定资产);无 headcount 输入则本步标 ⚠️数据缺口(方向:人员效率待补 headcount.xlsx)。
| 年份 | 员工人数 | 人均收入(万元) | 人均归母净利润(万元) | 人均薪酬(万元) | 1元收入需固定资产 | 1元收入需长期资产 | 人均固定资产(万元) |
|---|---|---|---|---|---|---|---|
| 2016 | ... | ... | ... | ... | ... | ... | ... |
8.2 分析动作清单
- [ ] 算人均效率(人均收入、人均利润、人均薪酬)
- [ ] 看资本密集度(1元收入需固定资产/长期资产)
- [ ] 判断商业模式:轻资产 vs 重资产?资金输出型 vs 输入型?
- [ ] 商业模式分类:制造驱动/技术驱动/市场驱动/资源驱动
- [ ] 结论写作要求:①关键比率给可复算算式(含
=与数字,注明口径)②判断"优/良/警戒"用大白话说明依据③每个判断至少一条反面可能(「也可能是…」)④落到普通投资者该盯什么;每步末与前后步骤互相印证
8.3 结论模板
## 第6步:看投入产出(意义:核心视角,理解商业模式本质)
**目的**:用"三板斧"(营运资本、固定资产、人员)看清这家公司到底靠什么资源赚钱——是轻是重、是人力密集还是技术/资本密集。
### 一、营运资本:流动资金占不占钱?
- 1元收入WC = WC÷营收 = [X元]
- 怎么看:为负或很小 = 占上下游资金(格力、茅台模式);大 = 需要垫资经营,可能竞争弱势或商业模式使然
### 二、固定资产:重资产还是轻资产?
- 1元收入固定资产 = 固定资产÷营收 = [X元]
- 怎么看:比率高 = 重资产(京东方、化工,巨额前期投入、经营杠杆高);比率低 = 轻资产(互联网、品牌设计)。横向对比同行判断是行业共性还是企业个性
### 三、人员效率:人海战术还是精兵强将?
- 人均收入 = 营收÷员工总数 = [X万元];人均利润 = 净利润÷人数 = [X万元]
- 收入增速 vs 人数增速:收入跑赢人数 = 规模效应(例:石头科技人均收入 541 万 vs 科沃斯 167 万,因模式不同)
- 人员结构(研发/生产/销售占比)→ 驱动类型(技术/制造/市场驱动)
### 四、商业模式判断
- 收入增速 vs 人数增速:收入>人数 = 规模效应
- 结论:[轻/重资产]、[技术/制造/市场驱动]、[资金输出/输入型]
### 五、异常点
- [ ] 描述 + 验证状态
### 六、这一步告诉普通投资者
- 1) WC 为负 = 占上下游款(格力茅台) 2) 人均收入高 = 人效强 3) 规模效应看收入是否跑赢人数
- 三板斧合起来就是一家公司的商业模式画像:轻还是重、靠人还是靠钱、资金占用还是输出
九、第7步:看收益率(杜邦分析)
9.1 数据抽取模板
数据来源(Phase 0):读 output.csv 第7步标题块下「ROE / ROA / ROIC / 销售净利率 / 总资产周转率 / 权益乘数」指标名行(杜邦三因素拆解用同日输出)。
| 年份 | ROE | ROA | ROIC | 销售净利率 | 总资产周转率(次) | 权益乘数 |
|---|---|---|---|---|---|---|
| 2016 | ... | ... | ... | ... | ... | ... |
9.2 分析动作清单
- [ ] 看 ROE/ROA/ROIC 趋势(绝对水平 + 历史变化)
- [ ] 杜邦三因素拆解:ROE = 净利率 × 周转率 × 权益乘数
- [ ] 判断驱动因素:高利润 / 高周转 / 高杠杆?
- [ ] 对比 ROE vs ROA(杠杆贡献度)
- [ ] 拆解周转率(应收/存货/固定资产周转天数)
- [ ] 结论写作要求:①关键比率给可复算算式(含
=与数字,注明口径)②判断"优/良/警戒"用大白话说明依据③每个判断至少一条反面可能(「也可能是…」)④落到普通投资者该盯什么;每步末与前后步骤互相印证
9.3 结论模板
## 第7步:看收益率(意义:综合评估股东回报和资产效率)
**目的**:用 ROE 这个"终极成绩单"回答一个问题——股东每投 1 元,一年能赚多少?这钱是真本事赚的,还是借钱撑的?
### 一、ROE 水平与趋势:赚钱效率高不高?
- ROE = [X%](近3年 [A]→[B]);ROA = [X%];ROIC = [X%]
- 怎么看:持续 >15-20% 是优秀公司的标志(巴菲特最看重 ROE,科沃斯 2021 年 ROE 高达 49%);趋势向上说明盈利能力增强
### 二、杜邦拆解:高 ROE 靠什么撑起来的?
- ROE = 净利率 [X%] × 周转率 [X次] × 权益乘数 [X]
- 三种赚钱模式:
- **高利润模式**:净利率高(奢侈品、高端软件)
- **高周转模式**:周转快(零售、快消)
- **高杠杆模式**:借得多(银行、地产)——风险也最大,下行期放大亏损
- 怎么看:立讯精密高 ROE 主要靠高周转+高杠杆而非高净利率,理解这一点才知道它的盈利质量边界
### 三、ROA 与杠杆效应
- ROE vs ROA 差 = [X pct](差越大,杠杆贡献越高)
- 怎么看:ROE 显著高于 ROA = 靠债务放大回报。杠杆是双刃剑,景气放大收益、衰退放大亏损
### 四、ROIC 与运营效率
- ROIC [X%] vs WACC [X%](若引用 WACC 必须给推导或删除,禁止空降数字)
- 怎么看:ROIC > WACC = 真正在创造价值;ROIC 与 ROE 偏差大要探究原因(是否有大量非经营性资产/负债)
- 周转天数:应收账款 [X天]、存货 [X天]、固定资产 [X天]——应收拉长 = 回款变差,存货增加 = 可能滞销
### 五、异常点
- [ ] 描述 + 验证状态
### 六、这一步告诉普通投资者
- 1) ROE 高可能是真本事,也可能是借来的 2) 高杠杆下行放大亏损 3) ROIC>WACC 才创造真价值
- 收益率是七步分析的"终点站":利润(赚多少)× 周转(转多快)× 杠杆(借多少),三者的乘积决定股东回报
十、第8步:八问商业模式
10.1 八问清单
数据来源(Phase 0):本步为推理叙事,不读行;基于前7步 output.csv + 辅助CSV(segment/headcount/forecast)结论综合判断因果(见§1.11 数据契约③)。
| # | 问题 | 核心关注 | 优先级(周期企业) |
|---|---|---|---|
| 1 | 靠什么赚钱? | 商业模式和核心驱动力 | 中 |
| 2 | 顺风还是逆风? | 外部宏观环境、周期位置 | 高 |
| 3 | 空间有多大? | 行业天花板和成长空间 | 中 |
| 4 | 竞争格局好不好? | 行业集中度、竞争态势 | 高 |
| 5 | 护城河是什么? | 品牌/技术/成本/网络效应 | 高 |
| 6 | 管理层行不行? | 能力、诚信、战略眼光 | 高 |
| 7 | 风险在哪里? | 经营/财务/行业/政策风险 | 高 |
| 8 | 未来会怎样? | 短期/中期/长期预测 | 中 |
10.2 执行规范
- [ ] 结合前7步发现的异常点作为"八问"切入点(例:科沃斯 2019 年收入利润下滑 → 用非财务信息探究原因)
- [ ] 搜集非财务资料:券商研报/公司公告/行业新闻/管理层访谈
- [ ] 财务数据提供线索,非财务信息解释因果;非财务故事用财务数据验证(双循环验证)
- [ ] 不同类型企业侧重不同(周期企业→重点问顺风逆风+竞争格局;科技→重点问护城河;消费→重点问品牌渠道)
- [ ] 八问答案整合为商业逻辑全景图,用于估值和投资决策
- [ ] 写作要求:每问给结论时,①答案必须回指前七步的具体数字作证据(禁止形容词空断言)②附一个"什么情况会推翻这个判断"③给出跟踪指标
10.3 结论模板
## 第8步:八问商业模式(意义:把财务数据讲成商业故事)
**目的**:七步财务分析看的是"数据",这一步看的是"生意"——把前面的数字串成一个完整商业故事,判断这到底是不是一门好生意。
### 一问 靠什么赚钱?
- 答案:靠 [XX业务] 高毛利赚钱(毛利率 [X%],回指第2步/第4步)
- 反证:若毛利率跌破 [X%] 则护城河松动
- 跟踪:毛利率、业务占比
### 二问 顺风还是逆风?
- 答案:处于 [成长期/成熟期/周期下行](回指第3步生命周期 + 第1步趋势)
- 反证:若宏观/政策转冷则逻辑逆转(例:集采对恒瑞、OLED 对京东方)
- 跟踪:行业景气度、政策变化
### 三问 空间有多大?
- 答案:未来3年预期 CAGR [X%](回指第3步一致预期 + 外部行业数据)
- 反证:若行业天花板被高估则增速不及
- 跟踪:行业规模、渗透率
### 四问 竞争格局好不好?
- 答案:[CR5/市占率],优于/劣于同业(回指第9步同行对比)
- 反证:若新进入者破局则格局恶化
- 跟踪:份额变化、价格战迹象
### 五问 有什么优势(护城河)?
- 答案:[品牌/技术/成本/网络效应] 护城河(回指第2步毛利率 + 第7步 ROIC)
- 反证:若高毛利来自短期供需错配(缺货涨价)则属虚高
- 跟踪:毛利率、ROIC、份额
### 六问 管理层行不行?
- 答案:[可验证事实:资本开支回报/承诺兑现率/减持回购记录/关联交易](禁止拍脑袋)
- 反证:若减持频繁或承诺落空则扣分
- 跟踪:减持公告、承诺兑现率
### 七问 风险在哪里?
- 答案:风险矩阵(触发条件 + 影响量级 + 观察指标)(回指第5步异常项目 / 第1步自由现金流)
- 反证:若风险未兑现则优于预期
- 跟踪:对应风险指标
### 八问 未来会怎样?
- 答案:[趋势判断](整合①-⑦ + 第3步预期 + 估值段)
- 反证:若关键假设失效则判断作废
- 跟踪:关键指标
### 综合评级
- 投资评级:[买入/持有/卖出](须基于上述证据链,禁止形容词空断言)
- 适合/不适合投资者类型
十一、第9步:同行对比
11.1 对比规范
数据来源(Phase 0):同行对比指标读 output.csv 指标名行(ROE/毛利率/人均等,见§1.11);对比对象同样经对方 Phase 0 产出、口径一致;本步为横向推理叙事(数据契约③)。
- 选择3家同行业/业务相似公司
- 数据口径一致(财年/会计政策)
11.2 六维对比指标
| 维度 | 指标 |
|---|---|
| 增长能力 | 营收/净利润增长率、CAGR |
| 盈利能力 | 毛利率、净利率 |
| 费用结构 | 销售费用率、研发费用率 |
| 资产效率 | 1元收入需WC、1元收入需固定资产 |
| 人员效率 | 人均收入、人均净利润、人均薪酬 |
| 收益率 | ROE、ROA、ROIC、杜邦三因素 |
11.3 结论模板
## 第9步:同行对比(意义:横向对标,定位企业相对竞争力)
**目的**:孤立的数字没有意义,跟同行一比才知道这家公司是优等生还是中等生。
### 一、六维真数据对比(强制真数据三列,无数据标⚠️数据缺口,**禁止"同行普遍…"糊弄**)
| 维度 | 本公司 | 同行A | 同行B | 同行C | 差异来源(模式/阶段/会计口径) |
|------|--------|------|------|------|-------------------------------|
| 增长能力(CAGR) | [X] | [X] | [X] | [X] | [先查会计口径再下结论] |
| 盈利能力(毛利率/净利率) | [X] | [X] | [X] | [X] | |
| 费用结构(销售/研发率) | [X] | [X] | [X] | [X] | |
| 资产效率(1元WC/固定资产) | [X] | [X] | [X] | [X] | |
| 人员效率(人均收入) | [X] | [X] | [X] | [X] | |
| 收益率(ROE/ROIC) | [X] | [X] | [X] | [X] | |
### 二、盈利/财务安全优势
- 本公司 vs 同行:毛利率 [X% vs Y%]、负债率 [X% vs Y%]——定位优/良/警戒
### 三、规模差距
- 营收/利润规模 vs 同行(倍数 = 本公司÷同行 = [X倍])
### 四、估值含义(✅ 对接 dynamic-valuation skill)
- 推导链:合理价值 = [FY3有效盈利 × 动态估值倍数 ÷ (1+贴现率)³] + 三年分红
· FY3有效盈利 = 一致预期 × 0.9(默认打折,出处 dynamic-valuation v3.2;可设 CONSENSUS_DISCOUNT=1.0 关闭并备注)
· 动态估值倍数 = [X](依据增长潜力 / 护城河等级)
· 贴现率 = [WACC 或要求回报,须给推导]
- 输出:合理价值区间 [Low ~ High](**禁止无推导单点目标价**)
- X值判定:低估 / 偏低 / 合理 / 偏高 / 高估 / 泡沫 / 无法判断
### 五、综合风险评级
- 结合六维 + 第8步风险矩阵 → [评级]
> ⚠️ 术语隔离硬约束:护城河(定性五类)在第8步、护城河系数(定量 1.25/1.0/0.8/0.6)在估值段;竞争格局(定性)在第8步、竞争格局系数(HHI/CR5)在估值段。分节呈现,**禁止同名混用**。
十二、Phase 2:年报异常点验证(按资料丰度自适应)
> Phase 2 必执行:无论是否提供PDF年报,异常点都必须✅闭环(按§1.5硬禁,禁留"未验证/无法验证")。验证深度按§1.1.1资料丰度三档自适应。所有档位引用的指标均来自 Phase 0 产出的 output.csv + 辅助CSV(见§1.11),异常点回溯时优先核对 output.csv 对应指标名行:
> - RICH → 定位PDF年报章节(MD&A→附注→报表)逐点✅闭环
> - MEDIUM → CSV/招股书旁证✅已解释 + 关键异常 WebSearch 年报片段
> - LEAN → CSV/行业常识✅已解释,真无源→⚠️数据缺口(方向+🥉)
> - ONLINE → 接口数据🥈 + WebSearch年报片段交叉验证✅已解释;真无源→⚠️数据缺口(方向+🥉),异常点仍三态✅闭环
> 当老板追加近期公告/互动记录链接时,走§1.9特别模块(Phase 2.5)补数。
12.1 验证流程(5步)
Step 1: 从初版报告中提取所有异常点(⚠️ / 需验证: / 需关注: 标注)
↓
Step 2: 按§1.1.1范式分流:RICH→PDF年报章节逐点;MEDIUM→CSV/招股书旁证+WebSearch;LEAN→CSV/行业常识;ONLINE→接口数据🥈+WebSearch交叉验证
↓
Step 3: 使用 pdfplumber-extractor skill(或§1.9 curl+pdfplumber 直抽cninfo PDF)提取相关文本
↓
Step 4: AI分析异常原因,生成验证结论(✅ 已验证(引原文)/ ✅ 已解释(引旁证)/ ⚠️ 数据缺口(方向+🥉))
↓
Step 5: 产出验证报告MD + 更新最终投资建议
12.2 年报章节查阅优先级
| 异常类型 | 优先查阅章节 | 搜索关键词 |
|---|---|---|
| 营收/利润异常增长 | MD&A → 主营业务分析 | 主营业务收入 销量 价格 |
| 毛利率异常跳变 | MD&A → 成本分析 | 营业成本 饲料成本 原材料 |
| 经营现金流异常 | 现金流量表附注 | 销售商品收到现金 应收账款 存货 |
| 扣非净利润异常 | 非经常性损益明细 | 非经常性损益 政府补助 资产处置 |
| 资产负债率异常 | 有息债务附注 | 短期借款 长期借款 资产负债率 |
12.3 验证报告结构(使用 verification_template.md)
- 验证总结:✅已验证 / ✅已解释 / ⚠️数据缺口 统计
- 详细验证结果:每个异常点的年报原文引用(或旁证来源) + 验证结论
- 报告修正建议:数据修正 + 分析结论修正
- 最终投资建议(更新版)
12.4 异常情况处理
| 异常情况 | 处理方式 |
|---|---|
| PDF年报缺失(LEAN无源异常点) | 标⚠️数据缺口(方向说明+🥉),禁写"未验证/无法验证";建议补PDF后升级RICH复验 |
| 年报中未找到相关内容 | ✅已解释(引CSV/招股书旁证)或⚠️数据缺口(方向) |
| 异常点过多(>20个) | 分批分析,每批 ≤ 10个 |
十三、最终HTML报告生成
13.1 生成方案:模板占位符填充
使用预定义 report_template.html,AI 只做 {{占位符}} 替换,不修改CSS/结构。
13.2 模板文件清单
| 文件 | 位置 | 说明 |
|---|---|---|
report_template.html |
skills/seven-step-financial-analysis/ |
完整HTML模板(CSS + 结构 + 图表渲染脚本) |
assets/chart.umd.min.js |
skills/seven-step-financial-analysis/assets/ |
Chart.js v4.4.1 本地库(随报告拷贝即可离线渲染) |
assets/chartjs-plugin-datalabels.min.js |
skills/seven-step-financial-analysis/assets/ |
数据标签插件 v2.2.0 本地库 |
verification_template.md |
skills/seven-step-financial-analysis/ |
验证报告模板(Phase 2使用) |
13.3 占位符清单
文件级(替换1次):
| 占位符 | 示例 |
|---|---|
{{COMPANY_NAME}} |
牧原股份 |
{{STOCK_CODE}} |
002714.SZ |
{{INDUSTRY}} |
生猪养殖 |
{{REPORT_DATE}} |
2026年7月2日 |
{{INVESTMENT_RATING}} |
持有(周期底部可考虑买入) |
{{KPI_CARDS}} |
KPI卡片HTML |
{{WARNING_BOX}} |
风险警示HTML |
{{DATA_SOURCE_BOX}} |
数据来源与口径说明框HTML(含 RICH/MEDIUM/LEAN/ONLINE 档位徽章,见§1.1.1) |
{{RATING_CLASS}} |
评级徽章配色类:rating-buy / rating-hold / rating-sell(对应 买入/持有/卖出) |
{{CHART_YEARS}} |
X轴年份数组(JSON):['2016','2017',...,'2025'],须与实际数据区间一致;驱动全部图表X轴、标题年份区间、增长率图(从次年算起) |
{{DATA_YEAR_RANGE}} |
年份区间文案:2016—2025(用于副标题、footer) |
{{DATA_YEAR_DESC}} |
年份区间完整描述:2016—2025(10年)(用于 meta-row「分析期间」) |
步骤级(替换9次):{{STEP1_CONTENT}} ~ {{STEP9_CONTENT}}
图表数据(16个):{{CHART1_DATA_REVENUE}} ~ {{CHART16_DATA_DEBT_RATIO}} 等
业务板块(支持 N 段):
- {{BUSINESS_SEGMENT_NAMES}}:板块名数组(JSON),如 ['白酒','系列酒','其他']
- {{CHART7_DATA_SEGMENTS}}:各板块收入占比序列(JSON 数组的数组),[[...],[...],[...]] 与 NAMES 顺序对应
- {{CHART8_DATA_SEGMENTS}}:各板块毛利率序列(JSON 数组的数组),同上
> ⚠️ v6.5 起废弃旧占位符 {{BUSINESS_SEGMENT_1_NAME}} / {{BUSINESS_SEGMENT_2_NAME}} / {{CHART7_DATA_SEGMENT1_RATIO}} / {{CHART7_DATA_SEGMENT2_RATIO}} / {{CHART8_DATA_SEGMENT1_GROSS_MARGIN}}(仅支持 2 段,多业务被截断)。统一改用上方 N 段占位符。
13.4 执行流程
0. 【推荐】自动生成图表数据:运行 `build_report_data.py <output.csv> --out <产出目录>`,
产出 `report_data.json`(16 组图表 JSON + CHART_YEARS + 板块变量,键名即占位符名)与
`report_prefilled.html`(图表/年份/板块占位符已填,仅叙事占位符待填)。
AI 直接读取粘贴图表 JSON,或基于 report_prefilled.html 补写叙事,根除"手填图表数组出错"。
1. 读取模板(或基于 report_prefilled.html):Read('skills/seven-step-financial-analysis/report_template.html')
2. 编写9步MD报告(遵守第十四章规范)
3. 替换文件级占位符(公司名/代码/日期/评级/KPI/警告/档位徽章/评级配色类)
4. 替换步骤级占位符(生成每步HTML内容)
5. 替换图表数据占位符(16个图表JSON数据数组,须与 `{{CHART_YEARS}}` 区间长度一致)
——【推荐】先运行 `build_report_data.py` 自动生成值(见步骤0),直接读取 `report_data.json` 粘贴,避免手填
6. **替换年份与板块变量**:填 `{{CHART_YEARS}}`(X轴年份数组)、`{{DATA_YEAR_RANGE}}` / `{{DATA_YEAR_DESC}}`(年份文案)、`{{BUSINESS_SEGMENT_NAMES}}` + `{{CHART7_DATA_SEGMENTS}}` / `{{CHART8_DATA_SEGMENTS}}`(N 段板块,数组长度须等于板块数)
7. **拷贝图表库**:`cp -r skills/seven-step-financial-analysis/assets/ <产出目录>/`(与 .html 同级,保证断网/分享后仍可渲染图表;模板已本地引用 `assets/`,缺失时自动回退 CDN)
8. 保存HTML、验证无残留 {{
9. 可选:生成PDF(需要Playwright,等待图表渲染后再转)
13.5 CSS设计系统(不可修改)
模板CSS核心变量:
:root {
--navy: #0a1628; /* 深蓝(主色) */
--gold: #c8943b; /* 金色(强调色) */
--green: #0d7c3b; /* 绿色(涨,中国惯例) */
--red: #b71c1c; /* 红色(跌,中国惯例) */
--blue: #1e5fb4; /* 蓝色(链接/图表) */
}
禁止修改模板CSS:AI只能替换 {{占位符}},不修改CSS变量或样式规则。
> v7.1 视觉升级说明(2026-08-18 老板反馈"太丑/太普通/没美学"后的版式重构):
> 仅换 CSS 变量/颜色 ≠ 视觉升级,必须做版式重构。当老板对报告颜色/版式不满时,按 references/报告视觉设计系统.md 全量重构:
> - 执行摘要:双列头部(标题组/徽章组)+ 数据底座 meta 卡(替代裸段落)+ 6 KPI 卡片网格(3×2,渐变顶条+emoji+涨红跌绿徽章)+ 3 张风险卡(彩色左边条分级+跟踪点)
> - Step 标题:大号半透明数字水印(0X 背景)+ 三层布局(编号/大标题/副标题)+ 64px 紫金渐变色条
> - 数据表:深色渐变表头+金色边线+数值列右对齐+最新年高亮+斑马纹+外层圆角阴影;状态列用圆角徽章(非裸 ✅)
> - Insight 卡:"告诉普通投资者"列表 → 3 列卡片(顶部紫边+emoji)
> - 关键数字加金色背景高亮(注意排除 .rating-*/.tier-*/.status-* 徽章类)
> - 涨红跌绿按中国惯例(涨=红粉 #d63384、跌=绿 #16a34a)配浅底徽章
> 参考成品:美的集团七步财报分析.html(2026-08-18 版)。
> v6.5 模板升级说明:在 v6.4(图表库本地化 + 16 图独立容错 + 档位徽章 + 语义上色)基础上进一步——
> - 年份动态化:X 轴与所有图表标题年份区间由 {{CHART_YEARS}} 驱动,支持任意区间(非 2016–2025 也不错位);副标题 / meta-row / footer 改用 {{DATA_YEAR_RANGE}} / {{DATA_YEAR_DESC}}。
> - 业务板块支持 N 段:图7(收入结构)、图8(分板块毛利率)基于 {{BUSINESS_SEGMENT_NAMES}} + {{CHART7_DATA_SEGMENTS}} / {{CHART8_DATA_SEGMENTS}} 动态生成,不再截断多业务。
> - KPI delta 方向着色:.kpi-delta 默认中性灰,须由 AI 按涨跌方向加 .up/.down 类(红绿依中国惯例)。
> - 移动端适配:新增 @media 规则(≤900/768/480px),容器/KPI 网格/图表高度随断点收缩,手机端图表高度降至 260px。
>
> v6.4 模板升级说明:图表库已本地化(随报告拷贝 assets/ 即可离线渲染,缺失时自动回退 CDN);16 个图表各自独立容错,单图数据异常不影响其余图表。新增语义化类(供 AI 生成内容时使用,勿改其定义):涨色 .up/.d、跌色 .down/.r(替代正文写死 style="color:#0d7c3b");投资评级徽章 .rating-badge.rating-buy/.rating-hold/.rating-sell;KPI 涨跌 .kpi-delta.up/.kpi-delta.down;数据档位徽章 .tier-rich/.tier-medium/.tier-lean/.tier-online。
13.6 生成后验证
- [ ] 搜索
{{确认无残留占位符 - [ ] 浏览器打开HTML,检查16个图表是否正常渲染(断网状态下应仍可见,验证 assets/ 已随报告拷贝)
- [ ] 检查表格边框、结论框样式
- [ ] 确认「数据来源与口径说明」档位徽章已填充(RICH/MEDIUM/LEAN/ONLINE 其一),且与§1.1.1档位判定一致
- [ ] 确认投资评级徽章配色正确(买入=绿 / 持有=金 / 卖出=红,由
{{RATING_CLASS}}控制) - [ ] 确认
{{CHART_YEARS}}已填且长度与各图表数据数组一致;副标题 / meta-row / footer 年份文案({{DATA_YEAR_RANGE}}/{{DATA_YEAR_DESC}})与实际区间吻合 - [ ] 确认业务板块
{{BUSINESS_SEGMENT_NAMES}}与{{CHART7_DATA_SEGMENTS}}/{{CHART8_DATA_SEGMENTS}}数组长度一致(支持 ≥2 段);图7/图8 已渲染全部板块而非仅 2 段 - [ ] KPI 卡片的涨跌 delta 已按方向加
.up(绿,向好)/.down(红,恶化)类,无一律绿色误导 - [ ] 打印预览(Ctrl+P)检查分页和图表可见性
- [ ] 手机窄屏(DevTools ≤480px)检查 KPI 单列、图表高度收缩、无横向溢出
- [ ] 图表数据完整性(v7.1 新增,必查
references/图表数据完整性检查.md):16 图逐图检查——①「历史 vs 预期」对比图的预期数据集不得为[null,null](无 forecast 就删数据集或补一致预期);② 业务口径跨年变更(如美的 2024 起合并「暖通+消费电器」)必须分段画图,禁止单张堆叠面积图跨全时段;③ 引用的 Chart.js 插件必须已在 HTML 加载(模板只内置 datalabels,无 annotation,需要分割线时用图例后缀/虚线数据点替代);④ 全部<script>块node --check语法通过(HTML 不能直接 check,用 Python 提取 script 块逐个 check) - [ ] canvas 数 =
__reg注册数 = 模板图表数(16),无空数据集data:[]
十四、Markdown编写规范
14.1 关键规则
| 规则 | 说明 |
|---|---|
| 列表前加空行 | **分析:**\n\n- 第一项 ✓,不要紧贴 |
| 表格前加空行 | **数据:**\n\n\| 年份 \| ✓,不要紧贴 |
| 表格分隔行正确 | 必须有 \|------\|------\| 行 |
| 粗体强调关键信息 | **结论**:XXX |
| 引用块标注发现 | > **核心发现**:XXX |
14.2 图表嵌入映射
| 步骤 | 对应图表 |
|---|---|
| 第1步 | 图1(营收净利趋势)、图2(盈利质量) |
| 第2步 | 图3(毛利率净利率)、图4(费用率) |
| 第3步 | 图5(增长率)、图6(CAGR对比) |
| 第4步 | 图7(收入结构)、图8(业务毛利率) |
| 第5步 | 图9(资产结构)、图10(负债率)、图11(WC) |
| 第6步 | 图12(人均效率) |
| 第7步 | 图13(ROE/ROA/ROIC)、图14(杜邦)、图15(周转天数) |
| 第8步 | 无图表 |
| 第9步 | 图16(同行对比) |
14.2.1 图表容器嵌入语法(必读 · 否则图表不渲染)
> 关键规则:模板用 <canvas id="chartN"> 渲染图表(Chart.js 4)。STEP_CONTENT 是 markdown+HTML 混合内容,AI 写每步正文时必须按以下结构嵌入 canvas 容器,否则图表区是空 HTML 容器、打开报告看不到图。
标准嵌入片段(每个图表复制一份,canvas id 与图表编号一致):
<div class="chart-body">
<canvas id="chart1"></canvas>
<div class="chart-skeleton"></div>
</div>
完整 STEP_CONTENT 模板(第1步示例,markdown + 笔记风格文字 + 图表容器):
<section id="step1" class="step-card">
## 第1步:看营收数据(意义:建立基本面轮廓,评估盈利质量)
**目的**:先摸清这家公司有多大、赚不赚钱、钱赚得实不实。
### 一、规模与成长
[此处填数据 + 分析文字,笔记风格]
### 二、盈利质量四关系
[此处填扣非/OCF/自由现金流分析,笔记风格]
<div class="chart-body">
<canvas id="chart1"></canvas>
<div class="chart-skeleton"></div>
</div>
<div class="chart-body">
<canvas id="chart2"></canvas>
<div class="chart-skeleton"></div>
</div>
### 三、告诉普通投资者
- 1) 先看体量 ...
- 2) 再看含金量 ...
### 四、异常点
| 年份 | 异常点 | 状态 |
|------|--------|------|
</section>
硬性要求:
- 每步的 STEPn_CONTENT 必须包裹在 <section id="stepN" class="step-card">...</section> 中(侧栏导航、滚动高亮、按页打印都依赖这个类名)
- 该步对应图表的 <canvas id="chartN"> 容器必须出现在该步的 STEPn_CONTENT 内(canvas 容器在哪里,就在哪里渲染图表)
- canvas 容器顺序可自由安排(一般放在文字叙述之后或关键数据之后),但不能漏
- 多图步骤(图1/图2 在第1步)就放多个 <canvas id="chartN"> 容器
- chart-skeleton 是加载占位符,可选但建议保留(图表渲染成功后会自动隐藏)
十五、PDF生成方案(可选)
15.1 前置安装
pip install playwright
playwright install chromium
15.2 生成流程
from playwright.sync_api import sync_playwright
def html_to_pdf(html_path, pdf_path):
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto(f'file://{html_path}', wait_until='networkidle')
page.wait_for_timeout(2000) # 等待Chart.js渲染
page.pdf(path=pdf_path, print_background=True)
browser.close()
模板已内置 @media print 优化(分页、图表不跨页分割)。
十六、输出文件清单
{工作区根目录}/{公司名}_七步财报分析/
├── 第1步-看营收数据.md
├── ...
├── 第9步-同行对比.md
├── {公司名}_七步财报分析.html # 初版HTML
├── {公司名}_七步财报分析.pdf # 可选:PDF版
├── 验证报告.md # 可选:Phase 2输出
└── {公司名}_七步财报分析_验证版.html # 可选:修正版
十七、踩坑经验
经验 #1:CSV列序方向不确定
不同CSV文件列序可能从新→旧或旧→新。读取后先检查列标题年份方向。
经验 #2:模板占位符必须完全匹配
替换后用 grep '{{' 确认零残留。使用JSON格式输出图表数据数组。
经验 #3:第2步必须包含"毛利率-净利率差值"
判断期间费用总侵蚀程度的关键指标,不可遗漏。
经验 #4:结论按规范格式输出
每步结论严格按模板的结构化分块(定性/溯因/验质/展望)。
经验 #5:HTML模板CSS不可修改
CSS(:root变量和样式规则)为只读模板,AI只能替换占位符。
经验 #6:Markdown列表/表格前必须加空行
Python markdown库要求列表和表格前有空行,否则不渲染。
经验 #7:Chart.js数据数组格式必须正确
使用严格JSON格式(无尾随逗号),浏览器F12检查Console错误。
经验 #8:PDF生成需等待渲染
Playwright转换前必须 wait_for_timeout(2000),否则图表丢失。
经验 #9:无PDF年报走LEAN范式,禁止跳过Phase 2
用户未提供PDF路径 → 走LEAN范式(§1.1.1),异常点仍须✅已解释或⚠️数据缺口闭环,不得跳过Phase 2。
经验 #10:数据获取优先CSV
CSV中已有的数据禁止手动计算,缺失数据才去API/PDF/搜索补充。
经验 #11:异常点必须✅闭环,禁留"未验证/无法验证"
老板硬要求:任何异常点终态只能是 ✅已验证 / ✅已解释 / ⚠️数据缺口,不得写"未验证""无法验证""部分解释""待年报验证"等悬空表述(见§1.5)。
经验 #12:数据分级🥇🥈🥉🚫,irm零幻觉
来源按🥇原版官方 / 🥈结构化精选 / 🥉外部旁证 / 🚫非公司确认 标注;irm互动记录默认非公司确认(仅投资者提问、无官方回复),除非用户提供官方回复证据,否则禁当事实(见§1.4/§1.6)。
经验 #13:cninfo PDF 须 curl下载+pdfplumber
WebFetch 读不了 FlateDecode 压缩流,公告PDF 用 curl -sL -A "Mozilla/5.0" 直链下载 + pdfplumber 抽文字层(见§1.9)。
经验 #14:期次隔离(中报H1 vs 年报YOY)
中报 H1 数据与年报同比必须分列标注、不混算;凡出现中报数据括注「(2026H1,与年报YOY隔离)」(见§1.7)。
经验 #15:资料丰度三档自适应,LEAN也有应对方案
启动按§1.1.1客观阈值判 RICH/MEDIUM/LEAN,不强行追问用户;LEAN 模式用🥉分级+方向说明兜底,并写入可信度声明模板,异常点仍须✅闭环(见§1.1.1/§1.8)。
经验 #16:无CSV也能出报告(ONLINE 第4档)
分享给他人时对方常无本地CSV;启动§1.0自检数据源,检到至少一个(westock-mcp/westockdata/neodata-financial-search/a-stock-data)即走 ONLINE:拉三张表→落 3 张原始表→进 Phase 0(§1.11)产出 output.csv→喂七步模板(v6.2 已废弃 v6.1 的 online_cache.csv 单文件约定)。零数据源且拒装时降级 §1.10 WebSearch 兜底,仍出报告但标⚠️缺口。
经验 #17:Phase 0 是衔接流命门(落3原始表→引擎→output.csv)
API/接口返回字段名千差万别,但 v6.2 不要求分析 skill 自己归一化——先把三张表落盘,交由 Phase 0 的 metrics-csv 引擎(build_metrics.py)统一算出 output.csv(指标名行结构),七步模板只读 output.csv,杜绝「字段名不一致臆造科目」的崩点。沿用经验#1 年份方向先查(新→旧/旧→新)。
经验 #18:依赖引导安装,绝不静默代装
skill 分享后别人电脑可能零依赖;§1.0 输出《依赖安装引导清单》含 4 类依赖安装步骤,装好至少一个即重检通过;安装动作须用户确认,AI 绝不自动执行安装命令(安全边界)。免费原则:仅用 westock/neodata-financial-search/a-stock-data/WebSearch 免费源,禁付费 API。
经验 #19:Phase 0 统一入口,任意来源单闭环
v6.2 起分析 skill 在七步分析前必走 Phase 0:任意来源(用户CSV/ONLINE拉数/WebSearch兜底)先组装成 3 张原始表 → 调用内置 scripts/ 引擎产出 output.csv + 辅助CSV → 七步分析统一读这些产物。引擎已内置在 skill 中(无需额外安装)。
经验 #20:output.csv 指标行读取需「步骤标题块 + 指标名」二维定位
output.csv 跨步骤有同名指标(如「营业收入」在步1/步3),分析须按「步骤标题块 + 指标名」二维定位,否则会读到错误步骤的行(修 S2);第4步/第6步/前瞻读的是 Phase 0 经 segment/headcount/forecast 输入注入 output.csv 的对应行(非原始三表),数据契约边界见§1.11。
经验 #21:ONLINE/WebSearch 统一落三原始表 → Phase 0,修 v6.1 单文件断点
v6.1 的 ONLINE 落 online_cache.csv 单文件,但方式A 读的是 3 个分开的原始表,单文件 vs 三文件对不上、喂不进(潜伏断点);v6.2 统一为「落 3 原始表 → Phase 0」,所有来源同一入口,断点消除(见§1.1.1/§1.10/§1.11)。
经验 #22:图表"有容器无内容"= 数据集全 null,先查数据再查代码
症状:某图标题/坐标轴正常但图区空白。根因多是 build_forecast.py 没跑→「预期 CAGR」数据集 data:[null,null],Chart.js 不画 null 柱子。修复:删空数据集或补机构一致预期值(Wind/同花顺区间,公开可验证);装配后必须逐图 grep data:[…null…] 排查(详见 references/图表数据完整性检查.md)。
经验 #23:业务分类跨年变更 → 图表必须分段画,禁止单图跨全时段
症状:图7/图8(收入结构/分板块毛利率)中间大片空白段。根因:公司改披露口径(美的 2024 起「暖通+消费电器」并为「智能家居业务」),旧代码 11 个业务名混画 10 年,每业务只在自己年份窗口有值→堆叠面积图遇 null 出空白段。修复:确认 按产品(项目)分类 CSV 业务名窗口→按两段时间段(细分段+合并段)分别画;合并段图例加「(合并)」后缀、折线虚线+方块点区分。详见 references/图表数据完整性检查.md。
经验 #24:Chart.js 插件未加载就引用 → 整图 JS 报错
模板只内置 chartjs-plugin-datalabels(assets/ 或 CDN),没有 annotation 插件。想画"口径变更"分割虚线若直接用 annotation:{annotations:{…}} 配置 → 未注册插件 JS 报错。替代:图例「(合并)」后缀 / 虚线数据点 / 容器绝对定位 CSS 竖线,不引 annotation。
经验 #25:HTML 文件不能直接 node --check,须提取 script 块逐个验
node --check report.html 报 ERR_UNKNOWN_FILE_EXTENSION。用 Python re.findall(r'<script[^>]*>(.*?)</script>', html, re.DOTALL) 提取全部 script 块写到临时 .js 再逐个 node --check;模板 JS 引用 DOM 变量(window.__reg 等)不报错属正常(非运行时检查)。命令见 references/图表数据完整性检查.md。
十八、版本历史
| 版本 | 日期 | 核心变化 |
|---|---|---|
| v1.0 | 初始 | AI写HTML/CSS/Chart.js |
| v2.0 | - | 新增CSV数据验证、异常回溯 |
| v4.0 | - | 引入模板占位符方案 |
| v4.1 | - | 新增MD编写规范、图表嵌入步骤 |
| v4.2 | - | 新增年报验证(第13步) |
| v4.3 | - | 新增异常点深度验证(第14步) |
| v5.0 | 2026-07 | 合并重复章节、修复路径硬编码、删除冗余文件引用、统一版本号、明确Phase 2可选 |
| v6.0 | 2026-07-29 | 双范式(资料丰度RICH/MEDIUM/LEAN自适应)+ 零幻觉闭环铁律 + 数据可信度分级🥇🥈🥉🚫 + irn零幻觉硬约束 + 增量公告补数工作流(§1.9)+ 期次隔离(§1.7)+ 排版规则(§1.8);Phase 2 由"可选跳过"改为"按资料丰度必执行" |
| v6.1 | 2026-07-29 | 新增 §1.0 前置依赖自检与引导安装(分享友好,至少装一个数据源即可,绝不静默代装)+ ONLINE 第4档(无CSV经授权联网/MCP拉数→落 online_cache.csv→喂模板)+ §1.10 WebSearch 独立拉数兜底(零依赖也能出报告)+ 四档决策树 + 数据分级补 ONLINE 拉数🥈/🥉;快速启动扩为四选一 |
| v6.2 | 2026-07-29 | 内置指标生成引擎(§1.11):任意来源先组装 3 原始表 → 调用内置 scripts/ 引擎产出 output.csv + 辅助CSV → 七步分析统一读(数据契约:核心7步读 output.csv / 第4·6步·前瞻读辅助CSV / 八问·同行推理不读行);引擎已内置无需额外安装;快速启动改三步式;修 ONLINE/WebSearch 单文件断点(统一落 3 原始表 → Phase 0) |
| v6.3 | 2026-07-31 | 引擎合并为内置 scripts/(8 个 Python 脚本 + 2 个 references),零外部 skill 依赖;署名嵌入(author 字段 + 署名块);硬编码路径清零;跨机器可移植 |
| v6.4 | 2026-08-02 | HTML 报告模板升级(规划/设计对齐方法论):① 图表库本地化(Chart.js+datalabels 收进 assets/,随报告拷贝即离线可用,缺失自动回退 CDN);② 16 图独立 <script> 容错,单图/单占位符异常不再全图崩;③ 落地 §1.1.1 数据档位徽章({{DATA_SOURCE_BOX}} + RICH/MEDIUM/LEAN/ONLINE 动态配色);④ 清理旧版重复死 CSS、将 inline 写死色改为语义化 .up/.down/.rating-* 类;⑤ 投资评级/KPI delta 按买卖持有动态着色 |
| v6.5 | 2026-08-02 | HTML 报告模板二次升级(数据适应性与端到端体验):① 年份动态化——{{CHART_YEARS}} 驱动全部图表 X 轴/标题年份区间,支持任意区间(非 2016–2025 也不错位),副标题/meta-row/footer 改用 {{DATA_YEAR_RANGE}}/{{DATA_YEAR_DESC}};② 业务板块支持 N 段——图7/图8 基于 {{BUSINESS_SEGMENT_NAMES}}+{{CHART7_DATA_SEGMENTS}}/{{CHART8_DATA_SEGMENTS}} 动态生成,多业务不再截断(废弃旧 SEGMENT1/2 两占位符);③ KPI delta 默认中性灰、按涨跌方向加 .up/.down 类;④ 新增移动端 @media(≤900/768/480px),容器/KPI 网格/图表高度随断点收缩 |
| v7.0 | 2026-08-03 | 报告叙事层改版(笔记风格):① 结论模板全面从「一问·二算·三标·四链·五用」机械框架改为老板原始笔记行文——动词式标题「第X步:看XXX(意义:XXX)」+「目的→数据抽取→做什么/为什么/怎么看→告诉普通投资者」自然结构;② 每步保留数据抽取表格、图表嵌入(16图)与异常点闭环,图表数据仍走 build_report_data.py 自动生成;③ 判断"优/良/警戒"改为大白话说明依据,反面可能「也可能是…」保留为写作要求;④ 术语词典/反面假设清单/阈值标尺库保留为 references 写作弹药(内部使用),不再以强制标签呈现给读者;⑤ 保留商店版全部视觉化图表与深蓝金棕 CSS(v6.3 模板资产) |
| v7.1 | 2026-08-18 | 视觉版式重构 + 图表数据完整性门禁:① 新增 references/报告视觉设计系统.md——大厂研报版式(Stripe/Apple/Tesla 混搭):执行摘要卡片化(数据底座 meta 卡 + 6 KPI 网格 + 3 风险卡)、step 数字水印标题、数据表 v2(渐变表头+数值右对齐+斑马纹)、状态徽章、insight 卡、关键数字金色高亮、深色模式适配、响应式;② 新增 references/图表数据完整性检查.md——三类图表坑(数据集全 null 空白 / 业务口径跨年变更错位 / 插件未加载 JS 报错)+ 16 图逐图检查点 + JS 语法验证命令;③ §13.5 补视觉升级说明、§13.6 补图表数据完整性验证项;④ 踩坑经验新增 #22-#25 |
十九、开源协议(MIT License)
本 Skill 以 MIT 协议开源,原文如下:
MIT License
Copyright (c) 2026 松系智能体
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.