老唐读财报(现金流 + 盈利 + 资产回报 + 安全)
用途
对单只 A 股进行多维财务质量扫描:现金流含金量、偿债安全性、营业收入盈利能力、资产回报率、成长性、管理层能力。
输出
一个自包含的 HTML 报告 + 8 张 PNG(所有图表均带数据点数值标签):
现金流视角(三条含金量判定图)
- 图1:经营活动现金流量净额 vs 净利润
- 图2:销售商品、提供劳务收到的现金 vs 营业收入
- 图3:期末现金及现金等价物余额 / 投资活动现金流出 / 现金分红(含付息)/ 有息负债
安全性与回报视角
- 图4:安全性指标——现金债务比(折线 + 安全线 y=1)
- 图5:营业收入视角——毛利率 / 营业利润率 / 净利率
- 图6:资产视角——净资产收益率 ROE / 总资产收益率 ROA
成长性视角(年度 + 季度,连续排列)
- 图7:成长性(年报)——营业收入 / 营业利润 / 资产 / 净资产 同比增长率
- 图9:季报同比增长率(单季 YoY)——营收 / 营业利润 / 总资产 / 净资产
- 图10:季报环比增长率(单季 QoQ)——营收 / 营业利润 / 总资产 / 净资产
> 图9/图10 使用双 Y 轴:左侧为营收/总资产/净资产,右侧单独为营业利润(因其单季波动幅度通常远大于其他三项)。
管理层能力视角
- 图8:管理层能力——应收账款 / 存货 / 固定资产 / 总资产 周转率
数据表
- 核心指标表:金额指标(亿元)
- 五条标准判定表:逐年度 PASS / WARN / FAIL
- 安全性表:现金债务比三级口径
- 盈利能力与资产回报表:毛利率 / 营业利润率 / 净利率 / ROE / ROA
- 成长性与管理层能力表:各增长率与各周转率
- 季报增长明细表:单季营收/营业利润、同比、环比、总资产/净资产同比/环比
> 上述四张分析表(核心指标、盈利能力、成长性+管理层能力、季报明细)均额外带一列「点评」:自动标记明显负向信号——如利润率转负或较上年跌超 2pp、营收/营业利润/资产/净资产负增长、应收/存货/总资产周转率较上期降超 5%、单季同/环比转负、现金<有息负债、现金净增为负等,并用红字高亮负值单元格。
报告开头:综合分析结论
报告正文开头(标题下、图表前)自动生成一段综合分析结论区块:给出最新报告期的整体判断徽章(稳健健康 / 总体可控·局部需关注 / 承压 / 警惕)、五标准逐条最新判定(带 PASS/WARN/FAIL 徽章与理由)、近 N 期各标准达标率概览,以及基于最新期的负向信号及原因分析清单(利润含金量、盈利变化、成长性、周转率、现金与负债等,每条信号附一段「为什么会出现」的原因解读)。
负向信号的归因不是固定模板,而是按当期实际数据分支(见§数据条件化归因),并优先引用报表内硬证据(信用减值、资产减值、财务费用摆动)佐证或否证。若用户要求/AI 已联网调研,可再用 --insight <md> 注入一段「结合公司实际情况的深度分析」(见§深度分析),自动追加到结论区负向信号之后,承载行业景气度、分部业务、非经常性损益/汇兑、减值、股东回报等定性判断。结论由 build_conclusion + _neg_signals_with_cause 综合生成,深度分析段落由 --insight 注入。
负向信号归因:数据条件化(重要)
自动归因不是固定模板,而是按当期实际数据分支给出不同解释,避免"模板归因"误导判断。已实现的条件化规则:
| 信号 | 触发条件 | 归因分支 |
|---|---|---|
| 净资产下滑 | 当期净利润 > 0 | 指向大额分红/股份回购(股东回报动作),并附 ROE 交叉验证;明确说明"非亏损吞噬权益、通常不应视为经营恶化" |
| 净资产下滑 | 当期净利润 ≤ 0 | 判定为亏损直接吞噬权益,是实质性风险信号 |
| 存货周转率降 | 营收仍在增长 | 指向主动备货/逆势抢份额(旺季、出口海运周期、新品铺货),需结合库龄判断是"好库存"还是滞销;若同期毛利率也降,则补一句"以价换量" |
| 存货周转率降 | 营收未增长 | 判定为产销错配、需求不及预期,隐含跌价风险 |
| 应收周转率降 | 营收仍在增长 | 指向主动放宽信用/OBM 占比上升(品牌直营账期长);并提示"关键看信用减值是否同步扩大" |
| 应收周转率降 | 营收未增长 | 判定为回款困难、下游占款,需警惕渠道资金链 |
报表内的"硬证据"信号(自动检测,优先于推测):
- 信用减值损失计提扩大 —— 坏账真金白银在计提,是回款质量变差的最硬证据(补充了
信用减值损失字段) - 资产减值损失计提扩大 —— 多含商誉减值,指向前期并购标的不及预期(补充了
资产减值损失字段) - 财务费用大幅摆动(汇兑损益反转) —— 财务费用由净收益翻转为净费用(或反之)且摆动显著时提示;并说明"外币汇兑损失计入经常性、套保收益计入非经常性"的口径错位,会造成扣非净利与归母净利背离(补充了
财务费用字段)
> 减值类信号设置了重要性门槛(增量需 > 0.5 亿 且 > 营收的 0.05%),且当基数极小(增幅 ≥ 5 倍)时不显示百分比、改定性描述,避免出现"+7645%"这类误导性数字。
五条判定标准
| # | 标准 | 放宽口径 |
|---|---|---|
| 1 | 经营活动现金流量净额 > 净利润 > 0 | 无 |
| 2 | 销售商品、提供劳务收到的现金 ≥ 营业收入 | 无 |
| 3 | 投资活动现金流出 > 投资活动现金流入,且主要用于扩张 | 需从年报附注剔除理财产品滚动申购/赎回 |
| 4 | 现金及现金等价物净增加额 > 0 | 剔除当年现金分红(含付息)后 > 0 |
| 5 | 期末现金及现金等价物余额 ≥ 有息负债 | 期末现金 + 可迅速变现金融资产 ≥ 有息负债 |
安全性指标(单一指标)
现金债务比 = 现金及现金等价物 / 有息负债(≥ 1 即"现金单独覆盖全部有息负债")。
三级口径(逐级放宽):
- 严格:现金及现金等价物 / 全部有息负债 ≥ 1
- 放宽A:(现金及现金等价物 + 可迅速变现金融资产净值) / 全部有息负债 ≥ 1
- 放宽B(基本安全线):(现金及现金等价物 + 可迅速变现金融资产净值) / 一年内到期的有息负债 ≥ 1
> 背后含义:公司的现金及可迅速变现金融资产合计能覆盖一年内到期的有息负债,即算基本安全;保守者可要求覆盖全部有息负债。
> 注:原文主式写作"现金及现金等价物 − 有息负债 ≥ 1",结合其"比"之名、≥1 阈值与"覆盖"释义,本 Skill 按比率(除法)口径实现。
新增指标计算口径
| 指标 | 公式 | 说明 |
|---|---|---|
| 毛利率 | (营业收入 − 营业成本) / 营业收入 | 反映产品竞争力 |
| 营业利润率 | 营业利润 / 营业收入 | 反映核心经营盈利能力,最重要 |
| 净利率 | 净利润 / 营业收入 | 反映最终盈利水平 |
| ROE(净资产收益率) | 净利润 / 平均净资产 | 平均净资产=(期末+期初)/2 |
| ROA(总资产收益率) | 净利润 / 平均总资产 | 平均总资产=(期末+期初)/2 |
> 期初值取上一年度期末值;第一个可用年份无期初,用期末值近似(首年 ROE/ROA 为近似值)。
成长性与管理层能力指标计算口径
| 指标 | 公式 | 说明 |
|---|---|---|
| 营业收入增长率 | 营业收入(当年)/营业收入(上一年) − 1 | 成长性的核心 |
| 营业利润增长率 | 营业利润(当年)/营业利润(上一年) − 1 | |
| 资产增长率 | 总资产(当年)/总资产(上一年) − 1 | |
| 净资产增长率 | 归母净资产(当年)/归母净资产(上一年) − 1 | |
| 应收账款周转率 | 营业收入 / 平均应收账款 | 平均=(期初+期末)/2 |
| 存货周转率 | 营业成本 / 平均存货 | 平均=(期初+期末)/2 |
| 固定资产周转率 | 营业收入 / 固定资产净值 | |
| 总资产周转率 | 营业收入 / 平均总资产 | 平均=(期初+期末)/2 |
季报增长(单季)口径:
| 指标 | 计算 | 说明 |
|---|---|---|
| 单季营收 / 单季营业利润 | 累计值 − 上一季末累计(Q1 直接取累计) | 利润表为累计值,需拆出单季 |
| 同比 (YoY) | 本季单季 ÷ 去年同季单季 − 1 | 前 4 期 |
| 环比 (QoQ) | 本季 ÷ 上一季 − 1 | 前 1 期;Q1 环比即较去年 Q4 |
| 总资产 / 净资产 同比 / 环比 | 时点数直接 ÷ 对应期 − 1 | 资产负债表为期末时点数 |
> 年报数据下"同比"与"环比"均指较上一年度,故图7 成长性统一用同比增长率呈现;季报(图9/图10)才提供真正的单季环比与同比。
> 所有图表(图1–图10)均在每个数据点上方标注具体数值。
用法
直接对 AI 说:
用老唐读财报 600887 伊利股份
用老唐读财报 600887 伊利股份 中报
或:
# 年报(默认)
python laotang-read-financials/cashflow_analysis.py --code 600887 --name 伊利股份 --years 8 --outdir ./output
# 中报 / 一季报 / 三季报(5 条标准 + 全套图表同样套用到该报告期)
python laotang-read-financials/cashflow_analysis.py --code 600887 --name 伊利股份 --report 中报 --years 6 --outdir ./output
python laotang-read-financials/cashflow_analysis.py --code 600887 --report 0630 --years 6 --outdir ./output
参数说明:
--code:股票代码,如600887、sh600887、sz000858--name:公司名称(仅用于标题)--report:报告期,取值年报(1231)/一季报(0331)/中报(0630)/三季报(0930),默认年报;可用中文名或日期后缀--years:取最近 N 个该报告期(跨年度同报告期构成序列),默认 8--quarters:季报增长展示最近 N 个季度,默认 12--outdir:输出目录,默认当前目录--insight:可选,传入一份 Markdown 文件(如--insight ./midea_2026h1_insight.md),内容将作为「结合公司实际情况的深度分析」整段注入到 HTML/MD 报告的综合分析结论区(负向信号清单之后)。支持二级标题##、三级标题###、加粗**、无序列表-、以及 Markdown 表格,脚本会自动转为对应样式;非表格/标题/列表的连续段落按<p>渲染。若不传,则只在自动归因基础上输出,不含外部调研结论。- 输出文件名:年报为
cashflow_<code>.html,其余为cashflow_<code>_<后缀>.html(如cashflow_600887_0630.html);同时输出同名.md(如cashflow_600887_0630.md),图表以 base64 内嵌、单文件自包含,可直接导入 mdnice / wechat-format 等公众号排版工具发布。MD 与 HTML 配色一致:负值用红色、五标准 PASS/WARN/FAIL 用绿/橙/红、点评列异常用橙色/正常用灰色,均以内联<span style="color:...">实现(排版工具与 GitHub 均支持)。
结合公司实际情况的深度分析(工作流)
单纯靠报表数字自动归因,常会给出"模板化"甚至误导的结论(例如把"大额回购/分红导致的净资产下滑"误判为经营恶化)。因此本 skill 规定:当用户要求"结合公司实际/实际情况分析"时,AI 必须先联网调研,再改写归因,并用 --insight 注入报告。标准动作:
- 跑出基础报告:先正常生成 HTML/MD(不含
--insight),拿到自动归因清单与五标准判定。 - 联网调研真实经营面(WebSearch/WebFetch),重点覆盖:
- 行业景气度:同行业整体零售/出货量增速、政策(如国补退坡/以旧换新)、上游成本(铜、塑料、芯片)波动;
- 分部业务:营收/毛利增速按业务板块(如智能家居/ToB/楼宇科技/机器人/工业技术)、按地区(国内/海外、OBM 占比)拆分,识别"收入与毛利双降"板块;
- 非经常性损益与汇兑:扣非 vs 归母净利背离(常因汇兑损益计入经常性、套保收益计入非经常性)、财务费用净收益↔净费用反转;
- 减值:信用减值(应收坏账)、资产减值(商誉/存货/长期资产),对照资产负债表商誉余额变动;
- 股东回报动作:期内回购、分红方案的金额与节奏。 - 逐条对照改写:把自动归因每条信号,用调研到的事实重新定性——能证伪的明确"假警报"(如净资产下滑系回购分红)、能实锤的用硬数据支撑(如信用减值 +75% 且坏账计提扩大)、半真半假的拆开看(如存货周转率降一半源于出口爆单主动备货)。
- 写成 insight markdown:按
## 标题/### 子标题/**加粗**/- 列表/ Markdown 表格组织,保存为文件,重跑脚本时传--insight。 - 重跑生成最终报告:
python cashflow_analysis.py ... --insight <file>。
> 范例:美的 2026H1 中报,自动归因把"净资产下滑"标为风险;联网调研后发现系累计回购超 450 亿 + 中期分红、ROE 反升,判定为假警报;并补全「扣非 -25% 主因汇兑损失 59.76 亿」「商誉减值 +351% 指向工业技术板块收入 -12.7%」等系统未标出的真信号。相关 insight 文件示例:output/midea_2026h1_insight.md。
> 说明:中报/季报为单期累计值(中报=上半年、三季报=前三季度),与年报口径不可直接相加;周转率因营收为区间内累计而资产为时点数,较年报口径偏低属正常。图9/图10 季报增长视图始终包含全部报告期(含中报),与上方报告期主分析互补。
数据与口径说明
- 年报口径数据来源:
akshare.stock_financial_report_sina(新浪财经,合并报表),仅取年度报告(报告日YYYY1231)做同比 - 季报口径数据来源:
akshare.stock_profit_sheet_by_report_em/stock_balance_sheet_by_report_em(东方财富,按报告期);利润表为累计值,单季值需拆解 - 金额单位:亿元(原始数据为元,图表与报告已换算)
- 有息负债 = 短期借款 + 一年内到期的非流动负债 + 长期借款 + 应付债券
- 现金分红(含付息)= 现金流量表"分配股利、利润或偿付利息支付的现金"
- 可迅速变现金融资产:以"交易性金融资产"近似
依赖
pip install akshare matplotlib pandas numpy
注意
- 标准 3 的"理财产品滚动"无法仅通过主表完全剔除,系统会提示需人工核对年报附注。
- 本分析为财务质量辅助参考,不构成投资建议。
以下为 AI 内部执行指令
内部工作流
当用户请求现金流量表分析时:
- 确认股票代码;若用户提供中文名称,先用 akshare / 其他工具解析成代码。
- 检查 Python 环境是否已安装
akshare matplotlib pandas numpy;如未安装,创建隔离 venv 安装。 - 运行脚本(先出基础报告):
bash python laotang-read-financials/cashflow_analysis.py --code <code> --name <name> --years 8 --quarters 12 --outdir <output_dir> - 若用户要求「结合公司实际/实际情况分析」或你判断需要定性研判(如负向信号涉及净资产、减值、汇兑等易被误读项):
- 用 WebSearch / WebFetch 联网调研行业景气度、分部业务、非经常性损益/汇兑、减值、股东回报动作;
- 把自动归因逐条用事实重新定性,写成 insight markdown(见§深度分析),重跑脚本追加--insight <file>注入。 - 将生成的
cashflow_<code>[_后缀].html与同名.md通过present_files展示给用户(HTML 含自包含图表与深度分析段;MD 供公众号发布)。 - 用 1-2 段自然语言简要总结:哪几条标准长期 PASS / WARN / FAIL;毛利率/营业利润率/净利率趋势;ROE/ROA走势;季报单季营收/利润同比增速是否放缓或修复;是否存在理财滚动、有息负债高企、ROE下滑等需要进一步关注的点;若注入了深度分析,额外点出经调研后「被证伪的假警报」与「系统未标出但更值得盯的真信号」。