From 143cd1fbf835843c8521c32e54f807b805518cc1 Mon Sep 17 00:00:00 2001 From: R524809 Date: Mon, 31 Aug 2026 17:49:00 +0800 Subject: [PATCH] docs: add maintainable PPMT financial workbook --- CLAUDE.md | 4 ++++ data/ppmt/rawData/README.md | 22 +++++++++++++++++++ data/ppmt/rawData/泡泡玛特_财报分析底稿.xlsx | Bin 0 -> 25172 bytes docs/方案设计.md | 12 ++++++---- 4 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 data/ppmt/rawData/README.md create mode 100644 data/ppmt/rawData/泡泡玛特_财报分析底稿.xlsx diff --git a/CLAUDE.md b/CLAUDE.md index 843be94..7c98a9f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -45,6 +45,10 @@ pnpm test # 全量,只在改了 t ## 数据口径 +**底稿与图表数据分层。** `data/{company}/rawData/` 是唯一可维护的数据层。当前泡泡玛特的维护入口是其中的 `泡泡玛特_财报分析底稿.xlsx`:人工或 AI 从 PDF、截图、XLSX 提取的基础值先写入这份底稿,并保留来源文件、工作表和定位信息。`data/{company}/*.csv` 是图表运行时投影,只能由脚本生成,禁止手工编辑。 + +**维护明细,不维护可推导结果。** 收入、门店数、财报科目等基础值应保存;占比、同比、利润率、H2 单半年和分析分类小计应由脚本生成。若财报披露了占比,可作为核对值保留,但不是图表的唯一输入。资产负债表的“类现金/经营类资产/有息负债”等分类以独立规则映射明细科目,不复制成第二套人工数字。 + **数值默认保留一位小数。** CSV 数据列与图表展示(柱/点标签、tooltip)统一保留一位小数(如 `71.1`、`311.4%`),四舍五入;确实需要其他精度时必须在 `footnote()` 或代码注释里说明原因。 **CSV 存四位年份**(`2026H1`),简写只在显示层做。核对数据时无歧义。 diff --git a/data/ppmt/rawData/README.md b/data/ppmt/rawData/README.md new file mode 100644 index 0000000..1009760 --- /dev/null +++ b/data/ppmt/rawData/README.md @@ -0,0 +1,22 @@ +# 泡泡玛特财报分析底稿 + +本目录是泡泡玛特的唯一维护数据层。日常只维护 [泡泡玛特_财报分析底稿.xlsx](泡泡玛特_财报分析底稿.xlsx):图表使用的 `data/ppmt/*.csv` 由脚本生成,不直接编辑。 + +## 工作簿结构 + +- `说明`:维护入口、口径和颜色约定。 +- `资产负债表`:期末时点的财报明细。 +- `利润表`:半年累计与全年累计的财报明细。 +- `现金流量表`:现金流量表披露的原始明细。 +- `资产分类规则`:把财报明细映射为“类现金、投资资产、有息负债”等分析分类的规则;不维护分类金额。 +- `检查`:资产负债、现金流量的勾稽差额。出现红色警告时,应回到来源核对,不能为了消除警告而改数。 + +## 更新流程 + +1. 将新财报 PDF、截图或原始表格保留在 `data/ppmt/raw/`,作为证据文件。 +2. 由 AI 读取证据后,将直接披露的科目、期间和金额录入本工作簿的蓝色数字区域,并记录来源定位。 +3. 检查期间、单位和勾稽关系;确认后再生成图表 CSV 与图表。 + +只维护基础值:收入、门店数、财报科目等。同比、占比、利润率、H2 单半年和分析分类小计都由后续脚本计算。若财报另有披露占比,可作为核对依据,不应成为第二套手工维护的数据。 + +期间约定:`FY` 是全年累计/年末,`H1` 是上半年累计/六月末;不得把来源的 `H2` 直接当作下半年单期。金额单位为人民币亿元。 diff --git a/data/ppmt/rawData/泡泡玛特_财报分析底稿.xlsx b/data/ppmt/rawData/泡泡玛特_财报分析底稿.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ff1f4dec2eeff478787916ba6d6d01cb9a98f9c1 GIT binary patch literal 25172 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