profit-overview — A股利润表总览(HTML)
用途
输入 A 股代码或名称,抓取东财三大报表,复刻 Choice 个股诊断表「利润总览」sheet 的全部指标逻辑,输出自包含 HTML 报告(内联 ECharts)在 WorkBuddy 预览面板直接展示。
报告内容
| 模块 | 指标 |
|---|---|
| 指标卡 | 最新年营收 / 归母净利 / 核心利润 / 毛利率 / 净利率 / ROE |
| 核心盈利与增长 | 营业收入、归母净利、核心利润 + 各期增长 + 三年复合增速(几何平均) |
| 核心利润增减贡献率 | 营收/成本/税金/销售/管理+研发/财务/减值 对核心利润变化的贡献 |
| 利润分拆桥 | 核心利润→(减值/公允/投资/营业外/其他收益)→归母净利 |
| 盈利能力 | 毛利率、净利率、核心利润率、ROE、ROIC、有效资本回报、去杠杆回报 |
| 成本结构 | 各成本项占营收比例 |
| 周转与质量 | 应收/存货/应付周转天数、应收占收入、存货占收入、欠增占利增比 |
| 现金流质量 | 净利润 vs 经营净现金流、经营流入/流出、流入占收入、支付职工、折旧、累计差额 |
图表:16 张图,ECharts 严格按原 Excel 图表规格渲染(assets/chart_spec.json 由脚本从原模板自动提取:每系列类型 bar/line、RGB 颜色、线宽、线型、主/次轴、标题、图例、数据引用行号),数据动态、格式与原文件一致。
图表规格机制(重要)
scripts/extract_chart_spec.py用 pywin32 打开原模板,逐个读取 16 个 ChartObject 的系列格式 → 生成assets/chart_spec.json。已提取固化,勿删。profit_overview.py渲染时:数据从dump_cells行号自动关联(spec 的 val_ref 行号 ↔ 指标行),样式从 spec 读取。- 关键格式事实(提取所得,勿凭印象修改):
- ch08 贡献率 = 100% 堆积柱(7 色,只画 3 年 CDE,数据 ×100 归一化,y 轴 max 100)
- ch15 利润分拆 = 堆叠柱 6 项 + 归母净利折线(核心利润绿 50B000/其他收益棕 602000/归母蓝 0000FF)
- ch02 收入驱动力 = 收入折线放次轴(量级大)+ 5 根彩色柱(317DED/A5A5A5/00C0FF/D59B5B/47AD70)
- ch06 增速对比 = 收入增长折线 + 利润/核心增长柱,x 轴 5 点含三年复合
- ch16 费用占比 = 只有 4 个系列(营业成本/销售/管理/资产减值),无税金/财务
- 百分比图:ROIC/ROE 原值即百分数;毛利率/净利率/核心利润率/资本回报为小数需 ×100
- 系列行号 ↔ 数据:3=营收 5=归母 7=核心 13-19=贡献率 23-29=分拆 32-37=资产费用 40-42=补贴 61/62=ROIC/ROE 63-65=利润率 68/69=资本回报 74-78=现金流 81-83=周转 88-90=占比 97/103=累计差额
指标口径(复刻原表,全部已验证)
核心利润 = 营业总收入 − 营业成本 − 研发费用 − 税金及附加 − 销售费用 − 管理费用 − max(财务费用, 利息费用) − 资产减值损失 − 信用减值损失(年报累计口径)
核心利润率 = 核心利润 / 营业收入(分母是营业收入不是营业总收入)
三年复合 = (本年/上年 × 上年/前年 × 前年/大前年)^(1/3)
核心利润增减贡献率(对某年 Y,基期 Y-1,Δ=核心利润差):
- 营收贡献 = (营收_Y − 营收_{Y-1}) × 核心利润率_Y / Δ
- 成本贡献 = 营收_{Y-1} × (成本占比_{Y-1} − 成本占比_Y) / Δ (税金/销售/管理/财务/减值同理,占比差带符号)
有效资本回报 = 核心利润 × (1 − 所得税/利润总额) / (股东权益合计 − 富余资金 − 长期股权投资)
- 富余资金 = 准现金 + 周转应付 − 周转所需资金
- 准现金 = 货币资金+交易性金融资产+衍生金融资产+应收票据+应收出口退税+买入返售+公允价值金融资产+一年内非流动资产+其他流动资产+可供出售+持有至到期+其他权益工具+其他非流动金融资产
- 周转应付 = 应付票据及应付账款+预收款项+合同负债+应付职工薪酬+长期应付款+专项应付款
- 周转所需资金 = (营业总成本/365) × (应收天数+存货天数)
去杠杆回报 = 有效资本回报 / (1 + 有息有形杠杆率);杠杆率 = 有息负债/(股东权益−开发支出−商誉−长期待摊)
周转天数:应收=360×应收账款/营业总收入;存货=360×存货/营业成本;应付=360×应付账款/营业成本
欠增占利增比 = 应收增量 × 核心利润率 / 核心利润增量
数据来源(免费公开接口,无需登录)
- 利润表:
LrbAjaxNew;资产负债表:ZcfzbAjaxNew;现金流量表:XjllbAjaxNew - 参数:
companyType=4&reportDateType=1&reportType=1&dates=<财报季末,...>&code=SH688018 - 单次请求最多返回 5 期,且单批必须传满 5 个日期(否则返回错位报告期) → 抓最近 20 期(4 批 × 5)。
- 返回累计值(年报=全年累计;最新期=最新披露累计,如 2026Q1/中报)。
- 报告期:4 个最近年报(2022-2025)+ 最新披露期 + 上年同期(同比)。
运行
python <skill>/scripts/profit_overview.py <股票代码或名称> [输出目录]
- 输出:
利润总览_<公司名>_<代码>.html(自包含 ~1MB,echarts 内联)。 - 生成后必须调用 present_files 展示。
--png备选模式:导出原 Excel 图表 PNG 内嵌(需要本机 Excel + pywin32,需绕过沙箱),默认不使用。- 需要 venv:
C:/Users/sunya/.workbuddy/binaries/python/envs/default/Scripts/python.exe(含 requests)。
已知边界 / 与原表差异
- 原表 v3 的现金流量表列存在年份错位 bug(列参数停在 2020-2022 年报),本 skill 使用最新接口数据自动修正,现金流年份与利润/资产对齐。
- ROIC 在原 Choice 表为占位 0(未实现),本 skill 同样输出 0。
- 政府补贴/税费减免在原表走 EMFREE_NONRECURRING 占位(返回 0),本 skill 未单列。
- 线性外推类指标(如流入累计差额)按原表公式复刻,符号为负表示资金缺口。