report-analyst — 上市公司定期报告解读器
能力总览
| 模块 | 能力 |
|---|---|
| 数据获取 | 东方财富 F10(三大报表/主要指标/业绩预告/快报)、巨潮资讯(公告原文 PDF 链接)、东财新闻搜索(舆情 + 情感打分);全部经统一 Transport(重试/退避/限频/gzip),SQLite 缓存 TTL 断点续跑 |
| 财务指标 | 30+ 指标:营收/归母/扣非及增速、毛利率/净利率/ROE(摊薄)/ROA、杜邦三因子、资产负债率/流动/速动/利息保障、应收/存货/应付周转与现金循环周期、净现比/收现比/自由现金流、EPS/BPS |
| 纵向对比 | 同比/环比/多期序列、CAGR、连续增长季数、拐点检测、科目异动雷达(默认 |变动|≥30% 自动标注) |
| 横向对比 | 同业自动识别(行业成分股)或手工指定;指标 × 公司对标表、排名与分位数(分母按实际有值家数计,同业缺值不虚高、唯一有值不误判领先)、与同业中位数差;相同点(走势/结构一致)与不同点(排名极值/方向背离)自动提炼 |
| 量化评分 | 五维 0-100(盈利 30% / 成长 25% / 偿债 15% / 营运 15% / 现金流 15%)→ 综合分 + A+~D 评级;评分入库,按报告期真实时序与上期评分对比(Q1<H1<Q3<年报,不受字符串序干扰) |
| 解读引擎 | 规则引擎产出结构化 Finding(亮点/风险/异动/趋势/共性/差异,含证据与严重度),自动汇成中文摘要段落 |
| 导出 | Word / PDF / PPT / Excel / Markdown / HTML;全部经统一文档 IR(标题/段落/表格/图片块),三端版式一致;中文字体检测链(微软雅黑→苹方→Noto→文泉驿),Word 逐 run 写 eastAsia、PDF 注册 TTF、matplotlib rcParams 注入 |
| 知识库 | 11 类目标:markdown / obsidian / sqlite / json / csv / ima / dify / notion / yuque / siyuan / flomo;联网目标幂等(ima 三态:未变跳过/变更追加更新段;dify/yuque/siyuan/notion 原地更新)+ 单目标失败隔离;kb pull 从知识库读回历史笔记用于跨期评分对比与素材合并 |
| 红旗体检 | 经营现金流连续为负、净现比背离、应收/存货增速显著超营收、扣非亏损、商誉/净资产过高、审计非标意见、分红送转提取 |
快速上手
# 离线 demo(无需联网,用 sample 样本数据跑通全流程)
python scripts/cli.py demo
python scripts/cli.py demo 600519 2024A --formats word,pdf,ppt
# 获取并分析某公司某期定期报告(period 为位置参数)
python scripts/cli.py analyze 600519 2024A
# 列出可用报告期 / 只取数
python scripts/cli.py periods 600519
python scripts/cli.py fetch 600519 2024A
# 纵向 + 横向对比并导出(report 默认导出 word,pdf,ppt)
python scripts/cli.py report 600519 2024A --peers 000858,600809
python scripts/cli.py report 600519 2024A --formats word,pdf,ppt,excel,markdown,html
# 登记知识库目标并同步(目标持久化在 kb_state.json)
python scripts/cli.py kb add mymd markdown D:/notes/reports
python scripts/cli.py kb add myima ima --kb-id <ima知识库ID>
python scripts/cli.py kb list
python scripts/cli.py kb push --code 600519 --period 2024A # 推送全部目标
python scripts/cli.py kb push mymd --code 600519 --period 2024A # 推送指定目标
# 从知识库读回评分历史(跨期对比)
python scripts/cli.py kb pull --code 600519
python scripts/cli.py kb pull mymd --code 600519
报告期写法
2024A/2024年报、2024H1/2024半年报、2024Q1/2024一季报、2024Q3/2024三季报
(半年报/年报为累计值;一季报/三季报同为累计口径,单季指标由引擎自动拆分环比)。
环境变量
| 变量 | 用途 |
|---|---|
REPORT_ANALYST_DATA_DIR |
SQLite 缓存目录(默认 ~/.report-analyst/data) |
REPORT_ANALYST_OUT |
报告输出目录(默认 ~/.report-analyst/outputs;不要放进 skill 包内,避免二进制上传被拒) |
REPORT_ANALYST_CHARTS_DIR |
图表 PNG 目录(默认系统 tempdir) |
REPORT_ANALYST_CN_FONT |
指定中文字体文件/字体名(PDF 注册与图表兜底) |
REPORT_ANALYST_CACHE_TTL |
缓存秒数(默认 21600) |
IMA_CLIENT_ID / IMA_API_KEY |
ima 凭证(仅发往 ima.qq.com;亦支持 IMA_OPENAPI_CLIENTID / IMA_OPENAPI_APIKEY) |
DIFY_API_KEY / DIFY_BASE_URL |
Dify Dataset API |
NOTION_TOKEN |
Notion integration token(目标需配 database_id) |
YUQUE_TOKEN / SIYUAN_TOKEN / SIYUAN_ENDPOINT / FLOMO_WEBHOOK |
语雀 / 思源 / flomo 凭证 |
目录结构
scripts/全部源码(sources/ 数据源、export/ 六格式导出、knowledge_base/ 11 类知识库)tests/pytest 全量测试(联网全部经 FakeTransport 离线模拟)sample/离线 demo 样本(build_sample.py生成demo_routes.json,虚构数据)references/数据口径与评分规则说明templates/知识库笔记模板
设计红线
- 任何网络请求只走
http_util.Transport,测试 100% 可离线。 - 图表 PNG 与导出文件默认落在 skill 包外(二进制上传禁令)。
- 中文字体三端(matplotlib / python-docx / reportlab)统一由
fonts.py检测注册,缺一端即视为缺陷。 - 知识库写入幂等 + 失败隔离:单目标异常不拖垮其余目标。