48 家公司入库 · 8 个细分行业 · 22 份年报通用性测试 · 解析从 165 秒降到 3 秒
原则没变:数字由代码算,校验不过就不生成。
上一篇结尾说过下一步要做的事:**放一份年报进去,自动产出同样质量的分析。**这次基本做到了。
现在能做什么
上传一份年报(PDF / Excel / Word),大约 5 秒后得到:
- 三大报表解析,并做数值校验:资产 = 负债 + 权益、现金流闭合、利润勾稽。有一条不过就拒绝生成。
- 自动判断细分行业,按年报里「分行业」收入表的占比来定,不靠公司名猜。
- 三套评分:
- 健康分(盈利 / 偿债 / 现金 / 成长 / 营运,各 20 分)
- Z 分(破产风险)
- F 分(财务质量 9 项)
- 多年趋势和同行对比:自动放进同一细分,算出排名和中位数。
- 财务分析报告:可导出 Word。数字全部来自程序,文字只负责解释;文中出现程序数据里找不到的数字,会标出来让人核对。
「行业」比想象中难
证监会的行业分类太粗。比亚迪属于「汽车制造业」没错,宁德时代被归到「电气机械」,药明康德的主营业务在分行业表里写的是「化学业务」。
所以现在用的是两级标签:大类 › 细分,例如「制造业 › 新能源」「批发零售 › 医药商业」。判断依据按顺序是:
- 年报「分行业」收入表的占比,最可靠
- 主营业务描述里的关键词
- 公司名做最后的细化,比如分行业写「零售」,但公司叫「益丰药房」,就归医药商业
集团公司的跨行业业务也拆开了:同仁堂是「医药 50% + 医药商业 49%」,龙蟠科技是「新能源 78% + 汽车化学品 22%」,每块业务分别和对应的同行比较。
一次超时:165 秒 → 3 秒
有人上传了一份 370 页的年报,120 秒后超时。
查下来,不是解析表格慢,是「找页」慢:识别行业、定位报表、读主营业务、找分部表、判断是否扫描件,五个步骤各自把整本 PDF 从头读了一遍。
改法很简单:用 pypdfium2 把整本 PDF 的文字只读一次,各步骤共用;精确读表格仍用原来的 pdfplumber,只读报表那几页。
| 年报 | 页数 | 之前 | 之后 |
|---|---|---|---|
| 中国建筑 | 370 | 165 秒 | 3 秒 |
| 万科A | 298 | 84 秒 | 4 秒 |
22 份测试年报重跑,结果一个数字都没变。
同行库:48 家
从巨潮资讯批量下载了 48 份 2025 年年报,按正常上传的流程逐份解析,核对全过才入库:
| 细分 | 家数 |
|---|---|
| 医药 / 新能源 | 各 8 |
| 汽车整车 | 7 |
| 家用电器 | 6 |
| 医药商业 / 工程机械 / 白酒 | 各 5 |
| 食品饮料 | 4 |
批量跑的过程中又发现了几个只有大样本才会暴露的问题:
- 比亚迪营收被算成 8 亿:单位写成「报表的单位为:千元」,多了一个「为」字没认出来
- 五粮液找不到报表:封面写「2025年度报告」,不是常见的「2025年年度报告」
- 苏泊尔资产负债不平:报表跨页后表格列数变了,读错了列
都修了。还剩两家没能入库:一家的报表是扫描图片,另一家的年报里找不到报表正文。
一个有意思的例子:比亚迪的 Z 分
比亚迪 2024 年的健康分 87、F 分 9/9,Z 分却只有 0.19,「危险」。
不矛盾。Z 分只看资产负债结构:比亚迪的流动负债大于流动资产,大量占用供应商货款和客户预收款,这让它现金流很好,但在 Z 分公式里会被重扣。
所以现在 Z 分不在安全区时,页面会自动写出原因,并提醒结合另外两项一起看。单一指标没有意义,得看它和什么比 —— 和上一篇说的一样。
和别人的工具比,还差什么
老实列一下:
- 扫描件年报读不了(服务器内存只有 1.7 GB,放不下 OCR)
- 只支持 A 股中文年报,港股 / 英文报表不行
- 没有半年报、季报
- 数字还不能点回 PDF 原页查看出处
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时