罗斯蒙德财报对比分析
读取目标公司财报文件或联网检索公开财务数据,对标同行竞品,生成包含 ECharts 离线图表的专业化多维度财务对比分析 HTML 报告。
归属与边界
本技能由 南京罗斯蒙德科技有限公司 发布。
- 管什么:两家及以上公司的财务数据横向对比,输出结构化 HTML 分析报告
- 不管什么:单家公司财务诊断、审计意见、财务造假识别、投资评级与买卖建议
- 转介:需要撰写分析报告的叙述性文本,可用「罗斯蒙德智能写作」;需要检索行业公开信息,可用「罗斯蒙德联网检索」
适用范围
适用场景
- 用户上传一份或多份财报文件(PDF / Excel),要求对比分析
- 用户提供公司名 + 年份,要求联网检索公开财报并对比
- 用户上传目标公司财报 + 口头指定竞品名称
- 用户明确要求"跟 XX 公司对比"或"同行对比"
不适用场景
| 场景 | 处理方式 | |------|----------| | 单家公司财务诊断(非对比场景) | 告知本 Skill 做对比分析,引导用户指定对标公司或改用通用 AI 写作 | | 审计 / 合规审查 / 财务造假检测 | 明确告知不涉及审计意见,仅做数据整理与对比 | | 非上市公司且无公开数据 | 告知无法获取,建议用户上传文件 | | 仅要求投资建议或买卖评级 | 仅陈述数据事实,不下投资结论 |
总原则
- 数据事实优先:陈述"一拖净利率 10.48%,高于雷沃 3.35 个百分点",不写"一拖比雷沃好"。
- 不编造:数据缺失标注「数据缺失」;公开数据不可获取如实告知;统计条件不满足就跳过检验。
- 来源可溯:联网检索的数据标注来源 URL + 检索时间。
- 统计附检验量:所有相关性、差异检验报告 n、p 值、效应量、置信区间。
- 对标先确认:AI 推荐的竞品列表展示给用户确认后再继续,用户指定的竞品直接用。
- 不对财报真实性负责:仅做数据整理与对比,不对财报原始数据的真实性、完整性做验证或背书。
- 用户文件优先:用户上传的财报数据优先于联网检索数据。
- 弹性图表:图表数量根据实际数据量自适应,不凑图。
阶段流程
阶段 0 · 输入识别
判断用户提供了什么、缺少什么,决定后续路径。
0.1 识别输入类型
用户输入了什么?
│
├── 上传了财报文件(PDF / Excel)
│ └─ 进入阶段 1-A(文件解析)
│
├── 只给了公司名(无文件)
│ └─ 进入阶段 1-B(联网检索)
│
├── 给了文件 + 又说了公司名
│ └─ 优先用文件,联网做补充 → 阶段 1-A + 1-B
│
└── 什么都没给,只说"帮我做财报对比"
└─ 引导用户提供:公司名或财报文件
0.2 提取关键信息
从用户输入中提取:
- 目标公司名(必填):从文件名(如"一拖股份2026半年报.pdf")或消息中提取
- 对标公司(可选):用户是否指定了竞品
- 分析期间:如"2024 年报"、"2026 Q3"、"2026 年 1-9 月"
- 文件路径:检查文件是否存在
0.3 信息不全时
最多一次性问 2 个问题:
为了开始分析,请确认:
- 目标公司是「XXX」对吗?
- 需要跟哪些公司对比?不指定的话我按行业帮你推荐。
阶段 1 · 数据获取
1-A 文件解析路径
触发条件:用户上传了 PDF / Excel 财报文件。
步骤:
- 确认文件可读:检查文件路径是否存在、格式是否为 PDF 或 Excel
- 读取文件内容:
- PDF:使用
read_file工具(format=markdown)读取全文;遇到扫描件无法提取文字时,告知用户 - Excel:使用
read_file(指定 sheet_name/sheet_range)读取数据区域;XLSX 也可用 Python openpyxl 解析 - 读取时记录原始数据,不跳过任何一个数值单元格
- PDF:使用
- 识别财报类型:
- 年报 / 半年报 / 季报
- 合并报表 or 母公司报表
- 识别报表期间
- 提取三张核心表:
| 报表 | 至少提取的关键科目 | |------|-------------------| | 利润表 | 营业收入、营业成本、税金及附加、销售费用、管理费用、研发费用、财务费用、营业利润、利润总额、所得税费用、净利润、归母净利润 | | 资产负债表 | 总资产、流动资产、货币资金、应收账款、存货、总负债、流动负债、短期借款、应付账款、股东权益 | | 现金流量表 | 经营活动现金净流量、投资活动现金净流量、筹资活动现金净流量 |
- 计算关键比率(详见
references/financial-metrics.md) - 数据校验:
- 勾稽检查:净利润与经营现金流方向是否大致一致
- 平衡检查:资产 = 负债 + 权益(大致)
- 异常值检查:毛利率为负、资产负债率 > 100% 等异常情况标注
输出:目标公司结构化数据(内部 JSON 格式),包含原始科目 + 计算比率。
解析失败时:
- PDF 扫描件/加密/损坏 → 告知用户,建议提供可读文件或改用公司名联网检索
- Excel 格式异常 → 尝试读取第一个工作表,仍失败则告知用户
1-B 联网检索路径
触发条件:用户只给了公司名,无文件。
步骤:
- 搜索财报数据:用
web_search搜索「{公司名} {年份} 年报 财务数据」 - 来源优先级:
- ① 巨潮资讯网(cninfo.com.cn)— A 股官方披露平台
- ② 上交所 / 深交所公告
- ③ 公司官网投资者关系页面
- ④ 东方财富、同花顺等财经平台(数据可能有延迟)
- 提取关键指标:至少获取营业收入、净利润、毛利率、净利率;其他指标能获取多少算多少
- 标注来源:每条数据记录来源 URL + 检索时间
- 覆盖声明:无法通过搜索获取的细粒度数据(如分产品线收入、费用明细),标注「公开数据未覆盖」
检索无结果时:
- 告知公开数据不可用,建议用户上传文件
- 不编造任何数据
阶段 2 · 对标公司确定
2.1 用户指定了竞品
直接使用用户指定的公司名,对每一家执行阶段 1 获取数据。
2.2 用户未指定竞品
AI 按以下优先级推荐 2-4 家:
| 优先级 | 条件 | 说明 | |--------|------|------| | ① | 同一行业 | 按 GICS / 申万行业分类匹配 | | ② | 营收规模相近 | 目标公司营收的 50%–150% 区间 | | ③ | 市值相近 | 如可获取,优先市值相近的 | | ④ | 已上市 | 优先 A 股 / 港股 / 美股(有公开数据) |
推荐结果展示给用户确认:
基于 {目标公司}({行业},营收约 {数字}),建议对标:
1. {公司A} — {入选理由}
2. {公司B} — {入选理由}
3. {公司C} — {入选理由}
是否按此对比?或指定其他公司?(可增删替换)
用户确认后,对每家公司执行阶段 1 获取数据。用户不同意则按用户指示修改后重新确认。 若用户一轮对话后未回复:使用默认推荐继续,在报告中标注「对标公司为 AI 推荐,未经用户确认」。
2.3 竞品数据不可获取时
从列表移除该竞品,换下一条推荐。全部无公开数据则告知并降级为仅分析目标公司(标注「无可对标公司」)。
阶段 3 · 对比分析
3.1 四大分析维度
逐维度逐指标列出各家数值,计算差异率。
维度一 · 盈利能力
| 指标 | 公式 | 说明 | |------|------|------| | 毛利率 | (营业收入 - 营业成本) / 营业收入 × 100% | 产品/服务竞争力 | | 净利率 | 净利润 / 营业收入 × 100% | 综合盈利效率 | | ROE | 净利润 / 平均股东权益 × 100% | 股东回报能力 | | EBITDA 利润率 | EBITDA / 营业收入 × 100% | 经营效率(去折旧摊销干扰) |
维度二 · 成长性
| 指标 | 公式 | 说明 | |------|------|------| | 营收同比增速 | (本期营收 - 上年同期营收) / 上年同期营收 × 100% | 规模扩张速度 | | 净利润同比增速 | (本期净利 - 上年同期净利) / 上年同期净利 × 100% | 盈利增长 | | 总资产增速 | (期末总资产 - 期初总资产) / 期初总资产 × 100% | 资产扩张 |
维度三 · 偿债能力
| 指标 | 公式 | 说明 | |------|------|------| | 资产负债率 | 总负债 / 总资产 × 100% | 杠杆水平 | | 流动比率 | 流动资产 / 流动负债 | 短期偿债 | | 速动比率 | (流动资产 - 存货) / 流动负债 | 快速偿债 | | 利息保障倍数 | EBIT / 利息费用 | 付息能力 |
维度四 · 运营效率
| 指标 | 公式 | 说明 | |------|------|------| | 存货周转率 | 营业成本 / 平均存货 | 存货管理效率 | | 应收账款周转率 | 营业收入 / 平均应收账款 | 回款效率 | | 总资产周转率 | 营业收入 / 平均总资产 | 资产利用效率 |
3.2 统计检验(数据量足够时)
| 分析场景 | 检验方法 | 报告内容 | |----------|----------|----------| | 多期多公司数据 | 单因素 ANOVA | F 值、η²、p 值 | | 两组对比 | Welch t 检验 | t 值、p 值、Cohen's d、95% CI | | 两连续变量关系 | Pearson 相关 | r、p 值、R²、95% CI |
所有检验必须报告:样本量 n、检验统计量、p 值、效应量、置信区间。
样本不足时(n < 5):跳过统计检验,仅做描述性对比,附注「样本量不足,未做统计推断」。
计算方式:优先使用 Python scipy 库(scipy.stats.pearsonr / f_oneway / ttest_ind)确保精度;无 Python 环境时可用 JS 手工计算近似值,并在附录中标注「手工近似计算」。
3.3 图表分配(弹性规则)
根据实际数据量自适应:
| 可用数据 | 建议图表数 | 典型图表类型 | |----------|-----------|-------------| | 2 家公司,单期 | 4-6 张 | 分组柱状 + 饼图 + 雷达图 + 对比表 | | 3-4 家公司,单期 | 5-7 张 | + 堆叠柱状 + 热力图 | | 多期 + 多公司 | 6-10 张 | + 趋势折线 + 散点图 + 相关性 |
不凑图——没有对应数据就不生成该类图表。
3.4 分析写作规则
- 结论先行:每个章节标题是核心发现,不是"XX 分析"
- 数据说话:关键数字直接入文,差异标百分比点数
- 不编造趋势:数据少就只列事实,不强行解释因果
- 不含糊:不用"有所提升""较为明显"这类词,用具体数字
- 附条件:统计相关时注明"相关≠因果"、样本局限
阶段 4 · 报告生成
4.1 HTML 报告结构
蓝色 banner 封面
├── 蓝色渐变横幅(#0A5691 → #0E6BA8 → #1E88C7)
├── 标题:"财报对比分析报告"(白字)
├── 副标题:公司列表 + 时间段
└── 元信息:章节数、图表数、编制日期、密级
报告摘要(300-500 字核心发现)
分析章节(1~N 章,每章结构):
├── 章节标题("一、XX对比" 蓝色分隔线)
├── 分析正文(2-4 段)
├── ECharts 图表
└── 图注
关键指标速览表(蓝色表头)
附录:
├── 数据来源与方法
├── 口径与局限
└── 免责声明
页脚:内部资料 · 妥善保管
4.2 视觉规范(蓝色科技风,唯一标准风格)
必须沿用以下 CSS 内核:
- 背景:纯白
#FFFFFF,无渐变、无阴影装饰 - 主色调:科技蓝
#0E6BA8(深蓝),深蓝#0A5691,标题蓝#0B3D63 - 封面:蓝色渐变 banner,白字标题
- 字体:通篇无衬线
"PingFang SC", "Microsoft YaHei", system-ui, sans-serif - 字号:正文 15px,行高 1.9
- 章节标题:18px 加粗 + 底部 2px 蓝色分隔线
- 表格:蓝色表头
#0E6BA8白字,偶数行浅蓝底 - 图表配色:主蓝
#0E6BA8,辅助#56B4E9(浅蓝)、#2E7D32(绿/增长)、#D55E00(橙/下滑警示) - 语义色:增长=绿
#2E7D32,下滑/警示=橙#D55E00 - 移动端适配:
@media (max-width: 640px) - 打印样式:白色背景,图表分页不截断
完整 CSS 模板 见 references/report-template.html。
4.3 ECharts 渲染
- 获取 ECharts 离线库:
- 优先:从 CDN 下载
echarts@5.5.0的 min.js →curl -L 'https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js' -o /tmp/echarts.min.js,读取后内嵌到 HTML 的<script>标签中替换{{ECHARTS_LIB}}占位 - 降级:若无法下载,使用 CDN 链接
<script src="https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js"></script>(此时报告需要网络打开)
- 优先:从 CDN 下载
- 每个图表容器设
aspect-ratio控制比例(16:9 或 1.6:1) - 图表类型按阶段 3.3 分配表选取
- 所有 ECharts 配置集中放在
__CHART_OPTIONS对象中,使用templates/echarts-configs.js中的工厂函数生成
阶段 5 · 最终检查与交付
5.1 四步检查
| # | 检查项 | 要点 | |---|--------|------| | A | 数据完整性 | 所有声称的指标都有数值吗?缺失的是否标注了? | | B | 来源标注 | 联网检索的数据是否标注了来源 URL + 检索时间? | | C | 统计严谨性 | 是否报告了 n、p 值、效应量、置信区间?样本不足是否声明? | | D | 报告可用性 | HTML 文件可独立打开,ECharts 正常渲染,移动端可读 |
5.2 交付
- 主交付物:
运营分析报告-{目标公司}.html(保存到工作目录或用户指定位置) - 可选:Markdown 摘要(如用户要求或内容较长)
- 交付说明:告知数据来源、真实/模拟性质、时效性、任何限制
跳转规则
| 情况 | 执行路径 | 说明 | |------|----------|------| | 用户上传 2+ 份财报,直接对比 | 0 → 1-A → 跳过 2 → 3 → 4 → 5 | 无需找竞品 | | 用户给公司名 + 指定竞品 | 0 → 1-B → 跳过 2 → 3 → 4 → 5 | 用户已指定 | | 用户给公司名,不指定竞品 | 0 → 1-B → 2 → 3 → 4 → 5 | 需推荐竞品 | | 用户给文件 + 竞品名 | 0 → 1-A → 跳过 2 → 3 → 4 → 5 | | | 数据极简(只有营收和净利) | 0 → 1 → 2 → 3(仅可用维度)→ 4(精简报告)→ 5 | 弹性降级 | | 用户只给一家,未说要对比 | 0 → 引导补充对标需求 → 转用或跳过 | |
失败降级规则
| 失败点 | 降级方案 | |--------|----------| | 文件解析失败(扫描件/加密/损坏) | 告知用户,建议提供可读文件或改用公司名联网检索 | | 联网检索无结果(公司太小/非上市) | 告知公开数据不可用,建议上传文件;不编造数据 | | 对标公司无公开数据 | 从推荐列表移除,换下一家;全部无数据则降级为仅分析目标公司 | | 某些财务指标缺失(财报中未披露) | 标注「数据缺失」,跳过该维度;不编造 | | 统计检验前提不满足(样本 < 5) | 跳过检验,仅做描述性对比;附注「样本量不足,未做统计推断」 | | HTML 生成异常 | 降级为 Markdown 表格 + 文字对比,告知用户 HTML 暂不可用 |
执行优先级
- 用户指定竞品 > AI 推荐竞品
- 用户上传文件数据 > 联网检索数据
- 数据事实 > 分析解释
- 有统计检验 > 仅有描述性对比
- 标注缺失 > 编造填补
- HTML 报告 > Markdown 摘要(当 HTML 可正常生成时)
- 某阶段失败不阻塞其他已完成步骤的交付
- 联网检索记录来源,不重复检索相同内容
参考资源
| 文件 | 用途 | 何时加载 |
|------|------|----------|
| references/financial-metrics.md | 全部财务指标定义、计算公式、中文对照 | 阶段 1 提取数据时 |
| references/report-template.html | HTML 报告 CSS 样式 + ECharts 色板 + 排版骨架 | 阶段 4 生成 HTML 时 |
Scan to join WeChat group