Market sizing mece foundation
Skill EthanYoQ/Skill-hub/skills/06-data-search/market-sizing-mece-foundation
Reusable AI agent skills for Codex, Claude Code etc. — AI coding workflows, SKILL.md templates, and automation practices. 面向 Codex、Claude Code等agents 的可复用 AI Agent Skill 技能库:AI 编程工作流、SKILL.md 模板与自动化实践。
npx -y skills add EthanYoQ/Skill-hub --skill market-sizing-mece-foundationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
L0 foundation for all medical market-sizing tasks. Use this skill whenever a task involves MECE department/age/region/indication slicing, evidence grading, drug-target three-state activity matrix, or cross-department patient-flow sizing. Trigger phrases: "市场多大", "market sizing", "用药占比", "竞品格局", "患者流". Disease-specific L1 skills (ifi-market-sizing-skill, etc.) must reference this first.
SKILL.md
36.4 KB, as published. Nobody here has run it
Medical Market Sizing — MECE Foundation (L0)
一句话定义: 所有医药市场调研 market sizing 任务的跨疾病共性骨架 — 包括 MECE 切分原则、证据分级、药物-靶点三态活性矩阵、Phase 0 通用澄清问题库、Agent 输出 schema 契约。疾病特化 skill (L1) 继承本 skill 后再加专属内容。
定位:本 skill 是 L0 Foundation。疾病特化 skill 是 L1(如
ifi-market-sizing-skill抗真菌、oncology-sizing-skill肿瘤、cv-sizing-skill心血管)。L1 必须在开头引用本 skill,并只维护本疾病专属部分(锚点文献、NMPA 药物清单、专家团队、专属诊疗路径)。
1. MECE 切分原则(核心 Iron Law)
MECE = Mutually Exclusive, Collectively Exhaustive(互斥 + 穷尽)
做医药市场调研时,常见的 4 个切分维度必须分别保证 MECE:
| 维度 | 切分示例 | MECE 陷阱 |
|---|---|---|
| 科室 | 血液科 / 呼吸科(含 RICU)/ 综合 ICU / 感染科 / 肿瘤科 / 器官移植 | ❌ 综合 ICU 里的呼吸相关患者被重复算到"呼吸科" |
| 年龄 | 成人 / 儿童(0-17)— 或更细分新生儿/婴幼/青少年 | ❌ "成人"默认包含儿童但没标注 |
| 地理 | 华北/华东/华南/西南/西北/东北 — 或省级 | ❌ 国家级数据不能按科室再拆 |
| 适应症 | 预防 / 经验性治疗 / 诊断驱动 / 目标治疗 / 挽救治疗 | ❌ "一线治疗"同时包含经验+目标模糊 |
MECE 违反的工程根源
MECE 错误通常不在方法论层,而在 Phase 2 数据抓取层。以下三个漏洞必须在 L2 data-agent-template 中堵住:
- 搜索词模糊:"ICU" 搜出综合 ICU + RICU 混杂
- 数据 schema 不强制:返回数据无
ward_type字段,下游无法过滤 - 数据不足时默认顶替:综合 ICU 数据被无声填入呼吸科空白
MECE 修复三件套(L0 强制)
所有 L1 疾病 skill 必须实施:
A. Phase 0 强制 MECE 提问(见第 4 节模板库)
Q: 按科室切分时是否走 MECE 互斥?
A-1 严格互斥(推荐默认):呼吸科 ∩ 综合 ICU = ∅,综合 ICU 数据剔除
A-2 包含归口:呼吸科 + X% 归口的综合 ICU 患者(标注系数)
A-3 不区分:仅在单一科室独立调研时使用
B. Phase 2 搜索词模板按 MECE 模式过滤(见第 6 节)
C. Agent 输出强制 schema(见第 7 节)每条证据含 dept_attribution + ward_type / age_group / region / indication_stage 必要字段
2. 证据分级标准(跨疾病统一)
| 等级 | 符号 | 定义 | 市场分析可用性 |
|---|---|---|---|
| 最高 | 🟢 | 中国多中心 RWE(≥5 中心或 n≥200)或国家级指南/登记 | 可直接用于市场分析 |
| 重要 | 🔵 | 中国单中心 RWE n≥50 或区域多中心 | 可谨慎参考,标注局限 |
| 参考 | 🟡 | 单中心 n<50 / 摘要 / 学位论文 / 行业咨询估算 | 仅作补充参考 |
| 国际 | ⚪ | 国际多中心 / 指南(非中国数据) | 标注"非中国数据"后可参考 |
| 估算 | 🟠 | 基于数据的合理推算 | 必须标注推算逻辑和假设 |
特殊规则:
- 指南推荐 ≠ 真实世界比例,两者分列
- 企业赞助但经同行评审 → 正常分级 + 标注赞助方
- 会议摘要 vs 期刊全文 → 以期刊版为准
- 处方分析 / DDD → 等级随中心数和样本量判定
3. 药物-靶点 三态活性矩阵(跨疾病通用)
不得用二态(✅/✗)描述药物 × 靶点关系。必须三态:
| 符号 | 含义 | 判断标准 | 处方含义 |
|---|---|---|---|
| 🟢 说明书适应症 | 药监局(NMPA/FDA/EMA)说明书明确列出 | 查药监官网说明书原文 | 可正常处方,医保支付顺畅 |
| 🟡 超说明书(off-label) | 药理学有活性,说明书未列 | 有证据源之一:指南推荐 / RWE / 体外/体内药理学 | 依据指南/共识处方,须告知患者+留档 |
| ❌ 无活性 | 固有耐药 / 无靶点 / 药代不可达 | 有药理学证据(MIC/靶点缺失/PK 失败) | 绝对不应使用 |
| — | 不适用 | 该场景与该药无交集 | N/A |
证据码系统(每个 🟡 和 ❌ 必须附)
| 证据码 | 来源类型 | 示例 |
|---|---|---|
[数字] | 药监说明书 | [1] = 伏立康唑 NMPA 2005 说明书 |
[G#] | 指南/共识 | [G2] = ESCMID/ECMM/ERS CPA 2016 |
[R#] | RWE 文献 | [R1] = 武汉 220 例 CPA PMC12864492 |
[P#] | 药理学 | [P1] = 伏立康唑 MIC90 对 C. neoformans 0.12-0.25 μg/mL |
填写步骤(通用于任何疾病)
- 查药监说明书原文 → 有 → 🟢 +
[数字] - 无说明书 → 查指南 → 推荐 → 🟡 +
[G#] - 查 RWE → 有临床实践 → 🟡 +
[R#] - 查 PK/MIC → 药理学支持 → 🟡 +
[P#] - 均否定 → ❌ 无活性 +
[P#](需耐药机制证据)
典型误区(任何领域都会犯)
| 药物 × 靶点 | 二态误判 | 三态正解 |
|---|---|---|
| 伏立康唑 × 隐球菌 | ❌ | 🟡 (IDSA 备选, MIC 低) |
| 奥希替尼 × EGFR Exon20ins | 🟢 | 🟡 (部分活性, NCCN 二线, NMPA 未批亚型) |
| SGLT2i × HFpEF | 因国而异 | 视药监批件状态三态 |
3.1 三态核查自问表(v1.2 新增 · Iron Law · 防止简化误判)
背景:v2.0 → v2.1 审阅发现 HTML agent 在"简化三态矩阵(每药 × 每病原 1 格)"时,将原文 🟢[批件号] 错误简化成 🟡(超说明书)。根因:从多阶段原始矩阵简化到单格视图时,agent 未把"NMPA 批件是否明确列出该病原"作为独立判断维度,而是误以为"不是一线 = 超说明书"。
v1.2 补丁:每填一格三态前,强制回答以下 5 问;任何 1 问答 Yes,必须 🟢 · 不得降级:
Q1. 该药 NMPA 说明书「适应症」章节是否原文提到该病原 / 靶点?
(不是"作用机制"或"药理学",而是具体适应症原文)
Q2. 原文是否含以下关键词之一:
"<病原名>感染" / "对<病原>的治疗" / "<病原>的预防" /
"对<药物 A>耐药的<病原>" / "难治性<病原>" / "挽救治疗"?
Q3. 若 Q1/Q2 为 Yes 但限定在"某亚场景"(如粒缺 vs 非粒缺 / 儿童 vs 成人 /
一线 vs 挽救),该亚场景在本报告 MECE 范围内是否占主流(≥50%)?
Q4. 若 Q3 为 No (主流场景超出批件),那一格是否应该标 🟢(预防)+ 🟡(治疗)
双态,而非一刀切 🟡?
Q5. 若所有批件都无,查指南(中国指南 2A 级/2B 级推荐)— 有 → 🟡 · 无 → ❌
简化规则(从 5 阶段 × N 病原 × M 药 缩减到 1 格 × N 病原 × M 药):
- 5 阶段中 ≥3 阶段 🟢 → 单格 🟢
- 1-2 阶段 🟢 + 其他 🟡 → 单格 🟢(预防/治疗)注脚区分
- 全部 🟡 → 单格 🟡
- 全部 ❌ → 单格 ❌
- 混合 🟢+🟡+❌ → 单格 🟢(若主流场景内 🟢)· 不可降级为 🟡
违反时的典型信号:
- 看到"药物 A 在 XX 场景算超说明书"就直接降级整个 🟢 → 🟡
- 忘了"NMPA 批件"与"指南首选"是两个维度 — 批件 🟢 ≠ 一线
- 简化时把"条件限定"(如"13 岁以上")当作"超说明书"—— 不对,只要批件列出,仍是 🟢
3.2 NMPA 批件查证清单(v1.2 新增 · 医药类强制)
填三态前,每个药物必须先完成以下两步查证:
Step A:NMPA 说明书原文查证
- 官方渠道:https://www.nmpa.gov.cn/ 搜索药品名 → 打开药品说明书 PDF
- 第二渠道:https://www.yaozh.com/ 药智网(国内镜像)
- 第三渠道:丁香园专业版 drugs.dxy.cn
- 必须摘抄"适应症"章节原文(不是产品介绍/药理学章节)
Step B:批件证据码系统化归档
- 每个 🟢 必须附批件号 + 年份 + 适应症原文摘抄
- 每个 🟡 必须附 [G#]/[R#]/[P#] 证据码(L0 第 3 节)
- 每个 ❌ 必须附 [P#] 耐药机制证据
不得使用"推测"或"国际外推"代替 NMPA 查证。国际 FDA/EMA 批件在中国任务中仅作 ⚪ 参考,不能自动等价中国 🟢。
4. Phase 0 通用澄清问题库(强制触发)
Iron Law:无论用户是否给"研究规划摘要",执行前必须输出 3-5 条澄清问题。已给摘要时,审视摘要中未覆盖/有歧义的维度。
通用 13 维度检查清单(v1.2 从 12 → 13 维度)
| # | 维度 | 必问情景 | 默认建议 |
|---|---|---|---|
| 1 | MECE 边界 | 跨科室/跨人群时必问 | 严格互斥(剔除邻接科室) |
| 2 | 年龄范围 | 有儿童年龄限制药物时必问 | 成人为主,儿童限制标注 |
| 3 | 地理范围 | 有地域差异病原时必问 | 中国大陆全国,重大差异单列 |
| 4 | 证据窗口 | 有 COVID-19 影响时必问 | 默认隔离 2020-2022 |
| 5 | 市场分母口径 | 任何市场调研必问 | 院内 vs 全口径选一 |
| 6 | 药物范围 | 是否含非抗真菌/邻接治疗药? | 明确列清 |
| 7 | 输出语言 | 中/英/双语 | 中文(国内任务) |
| 8 | 目标读者 | 药企/KOL/投资方/政策 | 中立多方可读 |
| 9 | 报告呈现顺序 | 咨询式 vs 学术式 | 咨询式(TOC+图表索引+附录) |
| 10 | 立场 | 中立第三方 vs 特定产品 | 中立 |
| 11 | 科室归属边界(MECE 跨科室) | 科室切分时必问(关键) | 严格 MECE(剔除综合 ICU 等邻接独立科室) |
| 12 | 科室内疾病/病因细分(v1.2 新增 Iron Law) | 每次做科室 market sizing 必问 | 见下方"科室内细分粒度参考表";不同疾病的 IFI 发生率/治疗方案/药物比例差异极大,严禁合并为单一"高危池" |
| 13 | MRR 骨架 | 是否加 TAM/SAM/SOM | 加(sizing 核心) |
科室内疾病/病因细分粒度参考表(v1.2 新增)
血液科 v1.2 前复盘:新版报告把 AML/HSCT/MDS 合并为"高危层单一池",完全丢失了每种疾病的 IFI 发生率/预防用药比例。 Iron Law:Phase 0 必须问"科室内按什么疾病/病因拆分",每个亚人群必须在瀑布图中作为独立分支(不可合并)。
| 科室 | 疾病/病因最小拆分粒度 | 说明 |
|---|---|---|
| 血液科 | allo-HSCT · auto-HSCT · AML诱导 · AML维持 · ALL · NHL · HL · MM · MDS-IST · CML · CLL · 再障ATG · CAR-T · 非恶性血液病 | 参照 CAESAR 2.0 亚人群分层 |
| 呼吸科 | 4 大入口(免疫缺陷/RICU/慢性肺病/免疫正常)× 7 分型(IPA/CPA/ABPA/隐球菌/毛霉/PJP/念珠菌) | 树状分支已在 ifi-market-sizing-skill 验证 |
| 综合 ICU | 高危宿主 swim-lane(免疫抑制 · 长期激素 · COPD · DKA · CTD · SICU术后)× 5 病原(念珠菌 · 曲霉 · PJP · 毛霉 · 隐球菌)× 病毒叠加(IAPA/CAPA) | MECE 剔除 RICU;每个病原必须独立分支,不共用诊断/治疗节点 |
| SOT 器官移植 | 肝 · 肾 · 心 · 肺 · 胰 · 小肠 | 各器官 IFI 风险与预防用药差异大 |
| 实体肿瘤 | 按癌种(肺 · 消化道 · 血液转移)× 治疗线(化疗/靶向/免疫) | — |
数据不足时 🟠 推算填空,但分支结构必须保留。
Phase 0 输出模板
=== Phase 0 澄清问题(请回复后再执行)===
1. [维度]:[具体问题]
- 默认建议:[值]
2. …
=== 等用户回复 ===
=== 收到回复后输出研究规划摘要 ===
5. Red Flags — 违反 Phase 0 或 MECE 的警示信号
看到这些念头立即停下来:
| 念头 | 为什么是违规信号 |
|---|---|
| "用户已给摘要,直接执行" | 摘要不等于 12 维度对齐,须审视缺口 |
| "科室就是 X 科室,不用区分" | 科室内部有亚专业(RICU vs 病房),必须区分 |
| "数据不够,用邻接科室顶替" | MECE 违反,宁可留空 🟠 推算 |
| "ICU 就是 ICU" | 综合 ICU vs 专科 ICU(RICU/CCU/NICU/SICU)完全不同 |
| "成人和儿童差不多" | 药物年龄限制严格,必须分层 |
| "先干再说,有问题再改" | MECE 一旦污染,返工成本 10x |
6. Phase 2 数据抓取 · MECE 模式搜索词模板
科室 MECE 切分(以本骨架覆盖的常见科室)
呼吸科(RICU only,严格互斥)
PubMed: ("respiratory intensive care unit" OR "respiratory ICU" OR RICU OR
"respiratory ward") AND <disease keywords> AND China
NOT ("medical ICU" OR MICU OR "surgical ICU" OR SICU OR
"mixed ICU" OR "general ICU")
CNKI: "呼吸重症" OR "呼吸ICU" OR "呼吸科ICU" -综合ICU -MICU -SICU
期刊: 中华结核和呼吸杂志 / 中华呼吸与危重症医学杂志
团队: 呼吸与危重症医学科 KOL(如曹彬/解立新/施毅)
综合 ICU(不含 RICU)
PubMed: ("medical ICU" OR "surgical ICU" OR "mixed ICU" OR "general ICU" OR
MICU OR SICU) AND <disease> NOT respiratory
血液科(不含其他)
PubMed: ("hematology ward" OR "HSCT unit" OR "bone marrow transplant" OR
"leukemia ward") AND <disease>
儿科(不含成人)
PubMed: (pediatric OR paediatric OR "children" OR neonatal OR NICU OR PICU)
AND <disease>
科室归属过滤关键词
搜索完成后,对每条返回的文献用以下关键词判断科室归属:
- RICU / 呼吸 ICU / 呼吸重症 / 呼吸与危重症 →
ward_type: RICU - MICU / 内科 ICU / 医学 ICU →
ward_type: MICU - SICU / 外科 ICU →
ward_type: SICU - 综合 ICU / 中心 ICU / mixed ICU / general ICU →
ward_type: general_ICU - ICU(无限定) →
ward_type: unclear(默认剔除)
7. Agent 输出 Schema 契约(文档级,Phase 1 软约束)
Phase 1 只在文档层写清楚约定(当前状态)。升级条件:L2 data-agent 上线后, 将本 schema 移至
scripts/validate_schema.py并在 pipeline 中硬阻塞。 主 agent 在启动 Phase 2 data-agent 时,必须将本 schema 嵌入 agent prompt。
证据条目 schema
evidence_item:
study_name: string # 研究名或作者+年份
sample_size: int
evidence_grade: 🟢|🔵|🟡|⚪|🟠
pmid_doi: string # 必须有,否则降级为 🟡
ward_type: RICU|MICU|SICU|general_ICU|mixed|unclear # 必填
dept_attribution: respiratory|ICU_independent|hematology|oncology|other # 必填
age_group: adult|pediatric|mixed|unclear
region: national|province|municipal|single_center
indication_stage: prevention|empirical|DD|target|salvage|maintenance
time_window: YYYY-YYYY
schema 违反时的处理
- 缺
ward_type或为unclear→ 该条从"目标口径基线"剔除,降级到"参考" - 缺
dept_attribution→ 同上 ward_type与目标科室不匹配(如做呼吸科但 ward_type = MICU)→ 强制剔除,可放入"邻接科室对照"附录- 数据不足无法填目标口径 → 留空 + 🟠 推算,绝不以邻接科室数据顶替
8. L1 疾病特化 skill 的编写规范
L1 应该维护什么
✅ 专属内容(L1 必有):
- 疾病 NMPA 药物清单(如抗真菌 14 药 / 肿瘤靶向药组 / 降压药组)
- 疾病锚点文献(如 Zhou EID 2020 真菌负担 / CAESAR 血液 IFI)
- 疾病专家团队(如抗真菌的施毅/曹彬 vs 肿瘤的孙燕/吴一龙)
- 疾病专属诊疗路径(如真菌 4 入口 vs 肿瘤 5 线治疗)
- 疾病专属的 NMPA 适应症表(通用三态规则来自 L0,具体药-病原映射是 L1 专属)
L1 不应该维护什么
❌ 应在 L0 的内容(L1 不重复):
- MECE 原则(抽象)
- 证据分级 🟢🔵🟡⚪🟠
- 三态活性矩阵 规则
- Phase 0 通用 12 维度
- Phase 2 通用搜索词模板
- Agent schema 契约
- Red Flags 通用列表
L1 引用 L0 的方式
L1 SKILL.md 开头:
> **依赖**:本 skill 是 L1 疾病特化,继承 L0 `market-sizing-mece-foundation`。
> 使用本 skill 前请先读 L0 的 MECE 原则、证据分级、三态矩阵、Phase 0 问题库、
> Phase 2 搜索词模板、Agent schema 契约。
9. 已知失败模式(跨疾病通用)
| # | 失败模式 | 根因 | 修复规则 |
|---|---|---|---|
| 1 | MECE 违反 - 邻接科室混入 | Phase 2 搜索词不严格 + 无 ward_type schema | 第 6-7 节 |
| 2 | 无适应症被误标为无活性 | 二态表达不足 | 第 3 节三态 |
| 3 | 超说明书无证据来源 | 缺证据码系统 | 第 3 节 [G#/R#/P#] |
| 4 | Phase 0 漏触发 | 用户给摘要就跳过 | 第 4 节 Iron Law |
| 5 | 数据不足以邻接科室顶替 | 缺 schema 强制 | 第 7 节"强制剔除"规则 |
| 6 | 成人药物套用儿童 | 年龄维度漏 MECE | 第 1 节 + 第 4 节 |
10. LP 决策图(Leverage Points)呈现规范
v1.1 新增。LP 决策图是基于 market sizing 结论按 Impact 排序的策略切入点可视化,在最终报告作为独立章节(通常第 7 章)呈现。
10.1 LP 定义
- LP = Leverage Point,指"该杠杆点改进后可直接受益的年度患者数"
- MECE 原则:LP 之间不重叠,覆盖市场主要未满足需求
- 通常 5-10 个 LP 为宜,按 Impact 中位数从大到小排列
10.2 LP Impact 三列量化
| 字段 | 含义 |
|---|---|
| Impact low | 保守估算(最低识别率/最小可及率) |
| Impact mid | 排序基准(仅作优先级参考,非精确值) |
| Impact high | 乐观估算(最高识别率/最大可及率) |
10.3 LP 在瀑布图上的标注(Mermaid 实现)
关键原则:LP 标签必须是独立于业务节点的视觉元素,而非混在节点文字内。
错误示范(节点内前缀,视觉淹没):
C_CPA["🏆 <b>LP1</b> CPA 长程未满足 · Impact 127-345k<br/>CPA 20-30%..."]
正确示范(独立 stadium badge + 虚线连接):
C_CPA["<b>CPA</b> 20-30% 🟢<br/>Zhou 2020 现患 48.9万..."]
LP1(["🏆 LP1"]):::lpBadgeCrown
LP1 -.- C_CPA
classDef lpBadge fill:#DC2626,stroke:#7F1D1D,stroke-width:3px,color:#FFFFFF,font-weight:bold
classDef lpBadgeCrown fill:#F59E0B,stroke:#78350F,stroke-width:4px,color:#FFFFFF,font-weight:bold
10.4 LP Badge 视觉分层(三态)
| Tier | 配色 | 粗边 | 适用 |
|---|---|---|---|
| 🏆 Crown(最大杠杆点) | 金底 #F59E0B / 深棕边 #78350F | 4px | Impact 最大的 1 个 LP |
| 🔴 Standard(标准) | 红底 #DC2626 / 深红边 #7F1D1D | 3px | 其他可嵌入瀑布图的 LP |
| ⬜ Cross-entry(跨入口) | 灰底 · 虚线边 | 2px dashed | 跨多入口亚组的 LP(如儿童、年龄分层),无法嵌入瀑布图时用灰虚线,报告另附亚组图 |
10.5 LP 跨入口情况
当一个 LP 在多个入口/分支都有作用点时,在每个 subgraph 内各放一个 badge(用后缀区分):
LP3_A(["🔬 LP3"]):::lpBadge
LP3_A -.- DX_A %% 入口 A 的 LP3
LP3_B(["🔬 LP3"]):::lpBadge
LP3_B -.- DX_B %% 入口 B 的 LP3
这让瀑布图中同一 LP 的多个作用点都被标注,避免"挂哪个好"的取舍。
10.6 LP Icon 语义建议(emoji)
| Icon | 语义 | 示例 |
|---|---|---|
| 🏆 | Champion / 最大杠杆 | LP1 必用 |
| 🎯 | Target / 识别精准 | 如"门诊识别率提升" |
| 🔬 | Lab / 诊断基建 | 如"mNGS 协同检测" |
| 🌿 | Long-tail / 长尾稳定 | 如"免疫正常长程用药" |
| ⚙️ | Gear / 规范化治理 | 如"指南化/AFS 规范" |
| 💊 | Drug / 药物窗口 | 如"新药独家窗口" |
| 👶 | Baby / 儿童亚组 | LP 跨入口儿童专属 |
| 🌍 | Globe / 地域差异 | LP 跨地区 |
Icon 可自定义,但必须每个 LP 专属不重复。
10.7 报告章节结构(7. LP 决策图)
七、LP 决策图(Leverage Points)
├ 7.1 LP 在患者流瀑布图上的具体位置
│ └ 图 7.1(含独立 LP badge + 虚线连接)
│ └ 阅读指南 callout(说明 badge 配色分层 / 跨入口处理)
├ 7.2 LP 排序表(按 Impact 中位数)
│ └ 字段:LP# | 策略切入点 | Impact 区间 | 中位数 | 关键依据 | 原编号
│ └ ⚠️ 不要有"瀑布图位置"列(已在图上标,冗余)
├ 7.3 跨入口 LP 单独说明(如有)
└ 7.4 LP 量化方法说明
10.8 LP 立场规范(中立第三方)
严禁在 LP 策略建议中出现具体药物/产品推荐。
- ❌ 错:"可通过伊曲康唑 TDM 普及 + 医保长疗程支付破局"
- ✅ 对:"需解决三大摩擦——长程 TDM 工具普及、医保长疗程支付机制、基层诊疗路径教育。属于全市场结构性机会,不偏向任何单一产品"
同样语言的正/反对照见第 12 节"去产品化语言规范"。
11. 报告呈现:字体与配色规范(参照 market-research-reports)
v1.1 新增。所有 market sizing 报告的 HTML/PDF 渲染参照
market-research-reportsskill 的market_research.sty调色板和字号,以保证咨询公司级专业度。
11.1 调色板(与 MRR 对齐)
| 角色 | Hex | RGB | 用途 |
|---|---|---|---|
| Primary Navy | #003366 | 0,51,102 | h1 标题、表头色 |
| Secondary Blue | #336699 | 51,102,153 | h2/h3、强调文字 |
| Accent Blue | #0078D7 | 0,120,215 | callout box / 链接 |
| Accent Green | #008060 | 0,128,96 | data hint box、🟢 A 级证据 |
| Warning Orange | #FF8C00 | 255,140,0 | 🟡 C 级 / 🟠 估算 |
| Alert Red | #C62828 | 198,40,40 | warning box / 🔴 风险 |
11.2 字号(MRR LaTeX 11pt 正文对齐)
| 层级 | HTML PDF | 备注 |
|---|---|---|
| 正文 | 11pt | 对齐 MRR 11pt(非 10.5pt) |
| 表格 | 10pt | 含 font-variant-numeric: tabular-nums 对齐数字 |
| h1 | 22pt / 700 | 章节标题,navy · 2.5pt 下边框 |
| h2 | 15pt / 700 | 小节,navy · 4pt 左边框(blue) |
| h3 | 12pt / 600 | blue |
| h4 | 11pt / 600 | gray-700 |
| caption | 9pt italic | 图表注释 |
| 行距 | 1.65 | 正文;表格 1.5 |
11.3 字体家族(中英混排)
:root {
--font-sans: 'Source Han Sans CN', 'Noto Sans SC', 'PingFang SC',
'Microsoft YaHei', -apple-system, 'Helvetica Neue', Arial, sans-serif;
--font-mono: 'JetBrains Mono', 'Consolas', 'Menlo', monospace;
}
优先级理由:思源黑体 SC(Source Han Sans CN)→ 苹方(PingFang SC)→ 微软雅黑,覆盖 macOS/Windows,视觉最一致。
11.4 Box 环境(对齐 MRR 四色系)
| 类型 | 边色 · 背景 | 用途 |
|---|---|---|
.callout | 蓝 #0078D7 · 浅蓝 #E6F1FB | Key Insight / 说明 |
.warning | 红 #C62828 · 浅红 #FFEBEE | Critical Risk |
.datahint | 绿 #008060 · 浅绿 #C8E6C9 | Market Data Box |
(可选) .recommendation | 紫 #6A1B9A · 浅紫 | 策略建议(但 market sizing 立场通常用 callout) |
12. 去产品化语言规范(中立第三方 Iron Law)
v1.1 新增。所有 market sizing 报告默认"中立第三方"立场时,LP 建议 / 策略切入点 / 结论章节严禁偏袒具体药物/产品。
12.1 禁语示例
| ❌ 错(偏袒单一产品) | ✅ 对(中立市场视角) |
|---|---|
| "可通过伊曲康唑 TDM 破局" | "需解决长程 TDM 工具普及摩擦" |
| "单伊曲康唑长程处方即增量 2-3 亿元" | "长程抗真菌处方扩量 → 整个三唑类赛道扩容" |
| "艾沙康唑毛霉独家窗口" | "毛霉识别与精准用药闭环 → 多烯类+口服序贯市场同步扩容" |
| "对某药企的决策工具有临床教育价值" | "规范化 AFS 决策 → 整体降低资源浪费" |
12.2 通用模式
结构:
- "【痛点规模】 → 【解决摩擦】 → 【带动整个赛道/子市场】"
动词选择:
- ✅ 扩容 / 规范 / 普及 / 识别 / 基建 / 教育 / 闭环
- ❌ 首选 / 最佳 / 优于 / 碾压 / 主导 / 独占
主体措辞:
- ✅ "整个 [赛道/品类] 规模性扩容"
- ✅ "结构性机会,不偏向任何单一产品"
- ✅ "市场基建 / 行业共建"
- ❌ "【某药】 市场份额提升 X%"(除非明确是该药企定制报告)
12.3 例外:特定产品策略导向报告
如 Phase 0 明确 report_stance: 特定产品策略导向(如 XXX 药企委托),则 LP 建议可包含该产品推荐。但必须在封面和执行摘要明确标注立场,避免读者误解为中立第三方观点。
13. 工程:两遍渲染 PDF 生成页码(Chrome headless)
v1.1 新增。Chrome headless 不支持 CSS
target-counter(attr(href url), page)和leader(),直接用失效。 Paged.js polyfill 在 Chrome headless 中渲染超时不稳。 推荐方案:Python 两遍渲染法(可靠 · 零外部依赖)。
13.1 流程
Pass 1: 渲染 HTML → PDF (TOC 页码占位空)
↓
Pass 2: pypdf 扫描每页文本,搜章节标题关键字首次出现的页 → 得到 {anchor: page_num}
↓
Pass 3: 正则替换 HTML 中的 <span class="page"></span> 为 <span class="page">N</span>
↓
Pass 4: 再次渲染 HTML → PDF(最终带页码)
13.2 HTML TOC 结构契约
<div class="toc">
<ol>
<li><a href="#ch1">
<span class="title">一、执行摘要</span>
<span class="dots"></span>
<span class="page"></span> <!-- 占位,两遍渲染脚本注入 -->
</a></li>
...
</ol>
</div>
CSS:
.toc a { display: flex; align-items: baseline; gap: 6pt; }
.toc a .title { white-space: nowrap; }
.toc a .dots { flex: 1; border-bottom: 1pt dotted #ccc; transform: translateY(-2pt); }
.toc a .page { white-space: nowrap; font-variant-numeric: tabular-nums; color: #666; }
13.3 Python 参考脚本
见仓库 output/build_pdf_two_pass.py。核心逻辑:
TOC_ANCHORS = [('#ch1', '一、执行摘要'), ('#ch2', '二、研究方法'), ...]
def measure_page_numbers(pdf_path):
reader = PdfReader(str(pdf_path))
pages = [(p.extract_text() or '') for p in reader.pages]
result = {}
for href, keyword in TOC_ANCHORS:
# 从第 4 页开始搜(跳过 TOC 本身)
for i in range(2, len(pages)):
if keyword in pages[i]:
result[href] = i + 1 # 1-indexed
break
else:
result[href] = None
return result
def inject_page_numbers(html_path, page_map):
html = html_path.read_text(encoding='utf-8')
for href, page_num in page_map.items():
pattern = (
r'(<a href="' + re.escape(href) + r'">'
r'<span class="title">[^<]+</span>'
r'<span class="dots"></span>'
r'<span class="page">)(</span></a>)'
)
html = re.sub(pattern, r'\g<1>' + str(page_num or '—') + r'\g<2>', html)
html_path.write_text(html, encoding='utf-8')
13.4 WPS/Adobe 占用 PDF 文件的 fallback
def pick_pdf_path():
try:
if PRIMARY.exists():
PRIMARY.rename(PRIMARY) # 测试可写
return PRIMARY
except PermissionError:
print(f'⚠ {PRIMARY.name} 被其他程序占用, fallback 到 {FALLBACK.name}')
return FALLBACK
14. 署名规则(强制规范 · 所有输出物)
v1.1 新增。所有 market sizing 报告、流程图、交付物封面必须包含 skill 署名。
14.1 标准文字(精确匹配)
Skill Presented by:YongQi, SimonSu, RuiYu, YingJi
格式要点:
- 冒号后无空格 (
by:YongQi) - 姓名之间用英文逗号+空格 (
,) - 4 人顺序固定:YongQi, SimonSu, RuiYu, YingJi
- 禁止使用中点分隔符
·(v1.0 用过,v1.1 起废弃) - 禁止使用中文顿号
、
14.2 出现位置
| 载体 | 位置 | 字号/样式 |
|---|---|---|
| PDF/HTML 报告 | 封面 · 最后一行(方法依据下方) | 小字灰色 9pt · color: var(--gray-500) |
| Mermaid HTML 流程图 | header 底部 credit 行 | 11px 半透明 · opacity: .65 |
| Mermaid .mmd 源文件 | 文件顶部 comment 区 | %% Skill Presented by: YongQi, SimonSu, RuiYu, YingJi |
| docx 封面 | 最末段 | 16pt 灰色 · color: '888888' |
| 参数包 yaml | 文件头注释 | # 署名: Presented by YongQi, SimonSu, RuiYu, YingJi |
14.3 替换脚本(跨项目迁移时用)
import re
from pathlib import Path
# 统一替换各种旧格式为新标准
PATTERNS = [
(r'YongQi\s*·\s*SimonSu\s*·\s*RuiYu(?!\s*,?\s*YingJi)',
'YongQi, SimonSu, RuiYu, YingJi'),
(r'YongQi,\s*SimonSu,\s*RuiYu(?!\s*,?\s*YingJi)',
'YongQi, SimonSu, RuiYu, YingJi'),
(r'YongQi、SimonSu、RuiYu(?!.*YingJi)',
'YongQi, SimonSu, RuiYu, YingJi'),
]
for fp in Path('.').rglob('*'):
if fp.suffix in ('.md', '.mmd', '.js', '.yaml', '.yml', '.html'):
content = fp.read_text(encoding='utf-8')
for pat, repl in PATTERNS:
content = re.sub(pat, repl, content)
fp.write_text(content, encoding='utf-8')
15. 流程图验证 Iron Law(v1.2 新增 · 强制机器约束)
背景:v1.2 前三次复盘发现同类流程图缺陷跨项目复现 —— Mermaid 语法错误、分支无终点、多源汇聚交叉。 根因:规则在文档里,但子 agent 生成 .mmd 后无机器验证,直接嵌入 PDF 才暴露。 Iron Law:所有
.mmd文件在渲染 PNG/嵌入 PDF 之前,必须运行references/flowchart-validator.py通过。 return code = 2 阻塞渲染流水线,return code = 1 软警告。
15.1 标准流水线(L1 报告生成器必须遵守)
# Step 1: 结构 + 语法验证(硬约束)
python references/flowchart-validator.py output/flowchart.mmd
if return_code == 2: 停止,根据错误信息修复 .mmd,重跑
if return_code == 1: 软警告,记录但可继续
# Step 2: 验证通过后才渲染 PNG
mmdc -i output/flowchart.mmd -o output/flowchart.png -w 5000 --scale 2 ...
# Step 3: 嵌入 HTML/PDF
15.2 Validator 覆盖的 7 项自动检查
| # | 检查项 | 类型 | v1.2 前真实错误 |
|---|---|---|---|
| 1 | mmdc 渲染测试 | 硬错误 | ICU Parse error on line 1: ---config |
| 2 | YAML frontmatter 首行位置 | 硬错误 | ICU %% 注释 放在 --- 前 → mermaid 10.9+ 失败 |
| 3 | 每个叶子 ● 终止(规则 2) | 硬错误 | ICU LP ●=0 所有分支悬空;血液科 3 个 _PROPH 叶子无终止 |
| 4 | 复杂图 ≥3 subgraph(规则 4) | 软警告 | ICU subgraph=0 swim-lane 丢失 |
| 5 | 无多入度 ≥3 共用节点(规则 15) | 软警告 | ICU HOSTS --> A&B&C&D&E, 然后 A/B/C/D/E --> DIAG 多源汇聚 |
| 6 | 必须含诊断层 | 软警告 | 纯流行病图会触发 |
| 7 | 必须含治疗层 | 软警告 | 纯路由图会触发 |
15.3 flowchart-rules 同步新增(规则 13-15,写入 L1 flowchart-rules.md)
- 规则 13 · YAML frontmatter 首行:若使用
---frontmatter,第 1 行必须是---。前面不得有注释/空行/任何字符。 - 规则 14 · validator 必须通过:所有
.mmd必须通过 validator 才能渲染 PNG。 - 规则 15 · 禁止多源汇聚共用节点:非明确评估/路由/汇聚节点(
EVAL_ / ROUTER / SCREEN / END_ / DIAG / RETURN),入度不得 ≥ 3。多分支需要经过相同诊断/治疗节点时,必须拆成独立节点(如DIAG_CAND / DIAG_ASP / DIAG_PJP),即使文字相同。
15.4 合规率统计(自检)
本 skill 发布时,对历史 3 个项目的 .mmd 文件做合规回溯:
| 项目 | .mmd 文件 | 硬错误数 | 软警告数 | 修复后 |
|---|---|---|---|---|
| 呼吸科(v1.3.3) | flowchart.mmd + flowchart_lp.mmd | 0 | 0-1 | ✅ |
| ICU(v1.0) | patient_flow_normal.mmd | 2(frontmatter + ●终止) | 1 | ❌ → 需重跑 |
| ICU(v1.0) | lp_decision_map.mmd | 2(同上) | 2(subgraph=0 + 多入度) | ❌ → 需重跑 |
| 血液科(v2.0) | flowchart.mmd | 1(3 叶子无 ●) | 1(H_MAINT 多入度) | ❌ → 需重跑 |
Iron Law 效果:如果 validator 在 v1.2 前就存在,三个项目都会在渲染阶段被拦截,不会进入用户可见的 PDF。
16. 医学术语规范对照表(v1.3 新增 · 跨疾病通用)
背景:v2.1 审阅发现 HTML agent 把 "breakthrough IFI"(预防期感染)中文化为"IFI 爆发",这是严重医学术语错误。"爆发"(outbreak)是公共卫生疫情暴发含义,与个体患者"突破性感染"(breakthrough infection)完全不同。
Iron Law:所有 medical market sizing 报告必须严格遵守以下中英医学术语对照表,禁止任意意译。
16.1 常见英→中医学术语(任何领域通用)
| English | ✅ 正确中文 | ❌ 错误中文(常见误译) | 注释 |
|---|---|---|---|
| breakthrough infection | 突破性感染 / 突破 | ❌ 爆发(爆发=outbreak 疫情含义) | 特指预防/治疗期间仍发生的感染 |
| outbreak | 暴发 / 疫情暴发 | ❌ 爆发 | "暴"字正,群体性 |
| prophylaxis | 预防 / 预防治疗 | ❌ 先期治疗 | 一级预防 = 未感染时预防 |
| empirical therapy | 经验治疗 / 经验性治疗 | ❌ 经验主义治疗 | FN 无真菌证据时 |
| diagnostic-driven therapy (DD) | 诊断驱动治疗 | ❌ 诊断指导治疗(不推荐)/ 先发治疗(错误) | 有微生物阳性但未 proven |
| targeted therapy (IFI 领域) | 目标治疗 | ❌ 靶向治疗(=molecular targeted 分子靶向) | 区别于肿瘤"靶向治疗" |
| salvage therapy | 挽救治疗 | ❌ 营救治疗 | 一线失败后 |
| refractory | 难治 / 难治性 | ❌ 耐药(耐药=resistant) | 治疗无应答 |
| relapse | 复发 | ❌ 爆发 / 再发(不精准) | 缓解后再发 |
| persistence | 持续感染 | ❌ 持续性 | |
| colonization | 定植 | ❌ 殖民化 | 无感染征象 |
| proven | 确诊(级) | ❌ 确定 / 验证 | EORTC/MSG 定义 |
| probable | 临床诊断(级) | ❌ 可能诊断 | EORTC/MSG 定义 |
| possible | 拟诊(级) | ❌ 可能 / 疑诊(部分场景可) | EORTC/MSG 定义 |
| incidence | 发病率 | ❌ 发生率(语境敏感) | 新发/时间单位 |
| prevalence | 患病率 / 现患率 | ❌ 流行率(不精准) | 某时点已有病例 |
| cumulative incidence | 累积发生率 | ❌ 累积发病率(可混用) | 某时间窗内新发 |
| attributable mortality | 归因死亡率 | ❌ 相关死亡率 | 该病直接导致 |
| all-cause mortality | 全因死亡率 | ❌ 总死亡率 | 各原因死亡合计 |
| off-label | 超说明书 / 超适应症 | ❌ 标签外(不专业) | 中文正式报告 |
| on-label | 说明书内 / 适应症内 | ❌ 批件内(可混用) | |
| TDM (therapeutic drug monitoring) | 治疗药物监测 | ❌ 药物浓度监测(不精准) | 含浓度+疗效评估 |
| GVHD (graft-versus-host disease) | 移植物抗宿主病 | ❌ 宿主抗移植物病(倒置) | 免疫学术语 |
| CRS (cytokine release syndrome) | 细胞因子释放综合征 | ❌ 细胞因子风暴(colloquial · 不规范) | CAR-T 后 |
| ICANS | 免疫效应细胞相关神经毒性综合征 | ❌ CAR-T 神经毒性(不规范) | CAR-T 后 |
| high-dose methotrexate (HD-MTX) | 大剂量甲氨蝶呤 | ❌ 高剂量 MTX(直译) | ALL 化疗 |
16.2 使用规则
- 报告正文/流程图/表格/图注:全部使用"✅ 正确中文"
- 引用原文献/共识名称:可保留原词不变(如 "2025 免疫/靶向治疗感染共识" 是官方名)
- 英文缩写:首次出现附中文全称 + 英文缩写,之后可仅用缩写
- Phase 4 质量审核必查:grep 以下关键词必须零命中:
命中即阻塞交付。grep -n "爆发\|确诊分级\|标签外\|营救治疗\|先期治疗" output/**/*.md evidence/**/*.md
16.3 跨领域等价术语(肿瘤/心血管等)
肿瘤领域"靶向治疗"合法(特指分子靶向 molecular targeted therapy),但在抗感染语境必须用"目标治疗"。疾病领域切换时必须重新校准术语表。
17. 版本
- v1.0:从 ifi-market-sizing-skill v1.2 提取共性骨架
- v1.1:LP 决策图规范(§10) + MRR 字体对齐(§11) + 去产品化语言(§12) + 两遍渲染 PDF 工程(§13)
- v1.2:Iron Law §15 流程图验证器 + Phase 0 从 12 → 13 维度 + flowchart-rules.md 新增规则 13-15
- v1.3(本版):
- §3.1 三态核查自问表(5 问 Iron Law)+ §3.2 NMPA 批件查证清单
- §16 医学术语规范对照表(22 条英→中对照 · 防止 "breakthrough → 爆发" 类误译)
- 根因:v2.0 → v2.1 审阅发现 HTML agent 简化三态矩阵时误判 · 术语"爆发"医学语境错误
- 计划 v1.4:补充肿瘤/心血管科疾病细分粒度表 + flowchart-templates/ 样板库
- 计划 Phase 2:L2 agent prompt schema 硬验证 + L3 跨报告一致性 meta skill