report-review · git:20261015.bd0de42 · 2026-10-15 · sha256 c8e058557b9b2f70

report-review git:20261015.bd0de42A

Immutable. This exact content never changes and is served at /api/v1/blob/c8e058557b9b2f70.

---
name: "report-review"
description: "报告多维度审查(QA)技能:对已生成的投资研究报告/持仓诊断报告(Markdown 或 HTML)做数据核验、口径核验、计算自洽、图表一致性、逻辑客观性、来源引用与合规七维度 review,输出分级问题清单。当报告生成完毕后自动调用做交付前审核,或用户要求 review/审查/校对某份报告时调用。不产出分析内容,只负责'审得对不对'。"
---

# 报告多维度审查 Skill(业务技能)

## 定位

`.agents/business/` 存放**交付/生产**类技能。本技能与 `html-report` 配对:

| 技能 | 职责 | 时机 |
|---|---|---|
| `html-report` | 怎么把分析结果**做成**报告 | 生成时 |
| `report-review`(本技能) | 报告**审得对不对** | **生成后、交付前(自动触发)** |

**自动触发规则**:任何报告(`reports/**/*.md`、`reports/**/*.html`、`watchlist/**/*.md`)生成或修改完毕后,必须自动调用本技能完成 review,向用户输出审查结论后才算交付完成。用户单独要求 "review / 审查 / 核对 / 校对" 某份报告时同样调用。

## 七个审查维度

按顺序执行,前 5 个维度必须**实证核验**(跑 CLI / 算数 / 读图表 JS),不允许只凭报告自述判断。

### D1 · 行情与基础数据核验

- 报告中每个**价格 / 涨跌幅 / 市值 / 规模**逐项与本地 CLI 对账:
  ```bash
  bun run main.ts -s sh603799 --pretty          # 个股/ETF 现价、涨跌、市值
  bun run main.ts -f 006493 --pretty            # 基金净值
  bun run main.ts --dividend sh603799           # 股息率
  ```
- 输出一张「报告值 vs 实测值」对照表,精确到报告披露的小数位。

### D2 · 时间窗口与口径核验 ⭐ 最高频错误

**同一只股票在不同时间窗口下的"最高价 / 回撤 / 分位"完全不同。** 必须核实报告口径词与实际取数窗口一致:

| 报告用词 | 合法口径 | 核验方法 |
|---|---|---|
| "年内高点/年内最高" | 自然年至今 | `--kline <code> --period monthly` 找全年 max high |
| "90 日高点 / 8/14 以来" | 明确窗口 | `--period weekly/daily` 对应窗口 max high |
| "距高点回撤 -X%" | 写明是哪个高点 | (现价/该窗口最高价-1)×100 复算 |
| "PE 分位" | 必须写明区间 | 近 1 年 / 近 10 年 / 基日以来三者数值差异巨大,禁止混用 |

⚠️ 陷阱:只看近 2 个月 K 线会把"阶段高点"误当"年内高点"。**凡报告出现"年内/今年/YTD"字样,必须用 monthly K 线验证**。

**接口降级**:K 线接口 socket 故障时(`--kline` 连续失败),改用公开披露的收盘价/盘中价快照交叉验证(证券之星行情快报、每经、交易所),并在报告中标注口径与数据来源;**不可因接口不可用而跳过核验**。

**复权口径**:K 线接口通常为前复权,行情快报为不复权价,两者可差一个分红额(例:华友 1/26 盘中高点 82.17 不复权 / 81.67 前复权,差额即 2026-05 分红 0.5 元)。引用"高点/低点/回撤基准"时必须标注复权口径。

### D3 · 计算自洽性

- 复算所有派生数字:持仓成本/市值/浮亏额/浮亏%/回本涨幅/仓位占比/PE/PB。
- 常用公式:回本涨幅 = 成本/现价 - 1;PE = 市值/净利润;PB = 市值/净资产。
- 交叉校验:正文、指标卡、图表 JS 三处同一数字必须一致。

### D4 · 估值与财务口径

- PE 是静态(上年报)/ TTM / 年化 / 动态哪种口径?报告若并列多种口径,各自注释是否清晰?
- 周期股低 PE 警示:低 PE 常出现在盈利顶部,报告是否提示"便宜有便宜的原因"?
- 分位数数据标注来源与区间(见 D2)。

### D5 · 图表与文本一致性

- 打开 `assets/charts.js`(或内联 JS),**逐项核对 series 数据与正文数字**。
- 检查坐标轴是否**截断**(`yAxis.min/max` 把关键数据裁掉会视觉误导,如 K 线图 min/max 未覆盖年内高点)。
- 检查数据窗口是否与正文口径一致(正文讲"年内",图表只画 8/14 以来 = 口径错位)。
- 每个 chart 是否有 `<figcaption>` 标题;引用参考线标注(如"年内高点 X")是否与 D2 核验结果一致。

### D6 · 逻辑客观性

- **多空平衡**:看多理由与看空/证伪风险是否都呈现?是否只堆利好?
- **沉没成本**:决策建议是否围绕"成本价/回本"展开?正确的框架是"今天这个价位还愿不愿意持有"。
- **目标位语义**:反弹目标位 ≠ 回本位,是否明确标注避免误读?
- **窗口期一致**:触发条件(如"财报前不动手")与操作建议是否自洽。
- 静默假设:仓位占比、风险承受力等未给定的输入,是否以"若…则…"分支表达而非硬编码结论。

### D7 · 来源引用与合规

- 正文每个 `sup [n]` 在 footer `#cite-n` 是否都有对应条目,且来源确实支撑该句论断。
- 引用的是原始数据源还是一手转述?第三方口径是否标注?
- 免责声明必备三要素:不构成投资建议、市场有风险、以官方披露为准。

## 结构化检查脚本

机械项交给脚本(引用锚点配对、离线可开、figcaption 覆盖、口径词扫描等):

```bash
bun run .agents/business/report-review/scripts/check-report.ts <report.md|report.html>
```

- **`.html`**:生成标记 / 引用锚点配对 / figcaption / 离线可开 / 免责声明 / 图表 JS 线索 / 口径词
- **`.md`**:免责声明关键词 / 口径词 / 表格数字线索(md 无 HTML 标记项,自动跳过)

脚本只查结构项,数据正确性必须人工/Agent 实证核验(D1–D5)。

## 输出格式

```markdown
## 📋 Review 结论:<一句话总评>

### ✅ 实证通过(逐项列表 + 实测值)
### 🔴 硬伤(动摇结论的事实错误,必须改)
### 🟡 口径/表述问题(建议改)
### 🟢 分析质量评价(框架、客观性)
### 📌 修正清单(按优先级,可直接执行)
### ✅ 复查确认(修正后):逐项记录"问题 → 修正内容 → 复查结果",闭环留痕
```

分级铁律:
- **🔴 硬伤** = 事实性错误且影响结论(错的数字、错的口径、错的窗口)
- **🟡 问题** = 数字对但口径/表述有误导性
- **✅ 通过** = 实证核对一致(不能写"看起来没问题",要写实测值)

**总评必须回答两个问题**:① 数据层是否可信 ② 叙事层是否客观。

## 常见错误陷阱库(历次 review 沉淀,新增错误请追加)

| # | 陷阱 | 判定方法 | 案例 |
|---|---|---|---|
| 1 | 阶段高点冒充年内高点 | monthly K 线 max high ≠ 报告"年内高点" | 47.17(8月反弹)被写成年内高点,实为 1/26 盘中 **82.17 元** |
| 2 | 图表截断误导 | `yAxis.min/max` 未覆盖关键价位 | K 线 max:56 裁掉年内高点 82.17 |
| 3 | 回撤基准不统一 | 同文混用盘中高点/收盘高点/90日高点 | 触发线用一个基准、回撤表用另一个 |
| 4 | 分位数口径混用 | 同文出现两种区间口径 | "近 10 年 4.5% 分位"与"近 1 年 1.2%"混排 |
| 5 | "规模最大/第一"过时 | 交叉搜同类产品规模排名 | 电池 ETF 规模排名随时间变动 |
| 6 | 目标位 = 回本位误读 | 目标价全部低于成本却未标注 | 35.4→38→42 被误读为回本路径 |
| 7 | 单期分红口径失真 | 股息率与实际到账/公告核对 | 第三方单期分红数据误导 |
| 8 | 跌得多 = 便宜 | 回撤大但估值分位仍高 | 半导体设备 -25% 后 PE 分位仍 80%+ |
| 9 | 复权口径混用 | K 线(前复权)≠ 行情快报(不复权),差一个分红额 | 82.17 不复权 / 81.67 前复权被当两个数 |

## 工作流

1. 报告生成/修改完毕(或用户点名 review)
2. 跑 `check-report.ts` 过机械项(按扩展名自动分流:`.html` 走 HTML 项,`.md` 走 Markdown 项)
3. D1–D5 逐项实证:CLI 对账 → 口径核验(接口故障走降级路径)→ 复算 → 图表 JS 核对
4. D6–D7 主观审阅:客观性、来源、合规
5. 按输出格式给结论 + 修正清单
6. 有 🔴 硬伤时**主动提出可代改**,经用户确认后修正,修正后复查对应项并写入「✅ 复查确认」区块闭环

## 约定

- Review 语言跟随用户语言
- 不因报告是自己生成的就放低标准——**自审更严**
- 新发现的陷阱追加到「常见错误陷阱库」