陶胖子版财务报表可视化分析(公司无关版 v3)
> 输入:一份 A 股上市公司年报 + 一份「数据字典 JSON」(可选:用 extract_pdf.py 从 PDF 自动整理)。
> 输出:一份单文件离线可用的 HTML(Chart.js 已内联),框架、样式、21+ 张图与「比亚迪_2025年报指标图表_修正.html」完全一致,但全部填充该公司真实数据。
与 v1 / v2 的关键区别(重要)
- v1 是「比亚迪模板换皮」:模板硬编码比亚迪 2025 数值,脚本只替换约 11 个
{{}}占位符,换其他公司时 21 张图仍画比亚迪数据、极易误导。 - v2 已彻底重构为「公司无关」:模板不含任何某公司数值,21 张图的
D数据对象、核心指标总览表、每张图文字解读全部由数据字典 JSON 驱动。 - v3 在此之上增强:
1. 缺数据不再崩溃:D 中任意缺值(null)都能安全渲染——分季度/业务分部/现金流构成/FCF/资产负债结构等所有max/sum/比较均有 null 防护,缺失项显示「—」并在解读注明「数据缺失/年报未披露」,绝不伪造(v2 对含 null 的数组会直接TypeError)。
2. 修复 ㉑ 股东回报解读错位(v2 把 EPS 与每股净资产做对比,v3 改为 上年→本年 正确口径)。
3. 新增可选 PDF 提取器scripts/extract_pdf.py:从年报 PDF 自动整理数据字典 JSON(单位自适应、合并口径优先、含「非/流动/递」前缀与换行标签等防误判),提取不到的字段自动置 null;生成后请人工核对关键数字(自动提取为「快捷起点」,JSON 驱动才是保证正确的核心)。
触发场景
- 用户提供了一份中国上市公司年度报告 PDF/数据,并希望得到可分享的、填充真实数据的 HTML 可视化。
- 用户已按本技能的数据字典格式准备好了 JSON。
- 用户明确提及「陶胖子版财务报表可视化分析」。
工作流(最短路径)
- (可选)从 PDF 自动整理数据字典:
bash python scripts/extract_pdf.py "某公司:2025年年度报告.pdf" --out xx_data.json --stock 600000 # 提取不到的字段自动置 null;强烈建议人工核对营收/净利/负债等关键数字后再生成 - 准备数据字典 JSON:结构见
examples/haile_data.json(海量数据 2025 实例)。包含三块:
-meta:company/year/stock_code/auditor/unit
-table:核心指标总览表的所有行(cat/metric/cur/pre/yoy/comment)
-D:21 张图所需的全部数据(金额单位统一为「亿元」,比率/天数为数值;缺值用 null) - 执行生成:
bash python scripts/generate.py --data 你的数据字典.json --out 输出.html - 核对结果:脚本打印公司、年份、营收、归母净利;输出单文件 HTML。
- 交付:在浏览器打开 HTML(离线可用),或用
present_files展示。
数据字典 D 结构(21 图)
D 是一个对象,键名固定,值即各图数据。完整键名与含义见 examples/haile_data.json 与 references/metrics.md:
| 键 | 对应图 | 说明 |
|---|---|---|
| overview / npGrow | ① ② | 营收/净利/扣非(本年 vs 上年) |
| quarter | ③ | Q1–Q4 营收/归母/经营现金流 |
| seg | ④ | 业务分部营收(两年)与毛利率 |
| quality / roe | ⑤ ⑥ | 盈利质量率、ROE/ROA |
| profitComp / cashContent | ⑦ ⑧ | 营业利润构成、利润含金量 |
| lev / solvency / ibd | ⑨ ⑩ ⑪ | 资本结构、短期偿债、有息负债 |
| turnover / arAp / ccc | ⑫ ⑬ ⑭ | 营运能力、现金循环周期 |
| cfYoy / cfIn / cfOut / fcf | ⑮ ⑯ ⑰ ⑱ | 现金流质量与自由现金流 |
| assetStruct / liabStruct | ⑲ ⑳ | 资产/负债结构占比 |
| shareholder | ㉑ | EPS / 每股净资产 / 分红比率 |
> 所有金额数组单位统一为亿元;比率/天数/倍数为纯数字;缺值用 null(图表留空不画)。
文件结构
taopangzi-financial-viz/
├── SKILL.md # 本文件
├── scripts/
│ ├── generate.py # 核心生成器(JSON → HTML,公司无关,null 安全)
│ └── extract_pdf.py # 可选:PDF → 数据字典 JSON(缺值置 null)
├── assets/
│ ├── base.css # 样式(与修正版一致)
│ ├── chart.umd.js # Chart.js v4 内联版(离线可用)
│ └── chart_init.js # 21 张图的初始化代码(数据驱动,无硬编码)
├── references/
│ └── metrics.md # 21 个指标的公式与口径说明
└── examples/
└── haile_data.json # 海量数据 2025 数据字典(可直接参考/套用)
依赖与运行要求
- Python ≥ 3.10;可选
pdfplumber(仅extract_pdf.py需要) - 输出 HTML 完全自包含,可在断网环境下打开(Chart.js 已内联)
- 正确性由数据字典保证:自动提取(extract_pdf.py)是快捷起点,请基于年报核对关键数字(营收/净利/负债/分红等)后生成;缺数据一律用
null,报告会显示「—」而非错误数字。
给使用者的速记
| 用户说 | 你应该做 |
|---|---|
| 「帮我做一份 XX 年报分析」 | 先跑 extract_pdf.py 出数据字典 JSON(核对关键数字),再 generate.py --data xx.json 生成 |
| 「这个比例没对」 | 修改 JSON 中对应字段后重跑 |
| 「某张图没数据」 | 检查对应 D 字段是否为 null——null 会显示「—」并注明「数据缺失」,补上真实值即可 |
| 「把这个 HTML 发我」 | 用 present_files 工具展示生成的 HTML |
示例提示词(可直接复制给 WorkBuddy)
> 触发前提:本技能需要一份「数据字典 JSON」(结构见 examples/haile_data.json)。下面提示词覆盖三种常见用法。
场景 A:我已有数据字典,直接生成报告
用「陶胖子版财务报表可视化分析」技能,基于数据字典 xx_data.json,生成一份离线 HTML 年报可视化分析报告,输出到 report.html。
场景 B:我只有年报 PDF,先帮你整理数据字典再生成
我要做【某公司】2025 年报的可视化分析。请按技能 examples/haile_data.json 的字段结构,从年报 PDF 帮我整理出一份数据字典 JSON(覆盖 21 张图所需的 D 字段 + 核心指标总览表 table),然后运行技能生成 HTML。金额统一折算成亿元。
场景 C:改某个指标后重跑
把数据字典里「资产负债率」本年值改为 35.2%,并同步更新 table 对应行,重新生成 HTML。
场景 D:批量 / 换公司
按同一份数据字典模板,分别生成 A 公司、B 公司 2025 年报的 HTML 可视化报告,并对比两者的盈利质量与现金流。
作者
陶胖子(独立研究者 / 教师)。本技能基于其「比亚迪 2025 年报可视化修正版」的方法论封装,v2 升级为可适配任意 A 股上市公司的公司无关版本——模板不硬编码任何公司数值,图表与文字解读全部由数据字典驱动。