面向中国市场准入(market access)场景,而不是照搬欧美 HTA 模板。
国内 HEOR / 市场准入岗真正在做的事是:集采降价后患者的年治疗费用变了多少? 一个新产品进医保后未来五年对医保基金的预算冲击有多大?在 DRG 付费下, 某类药品的成本结构是盈余还是亏损?本项目把这些做成可复现的计算流程。
实测结果(示例数据集)
在 39 条中选记录、15 个通用名的示例数据上运行完整流程:
集采降价幅度分析
| 指标 | 数值 |
|---|---|
| 不加权平均降幅 | 54.06% |
| 按约定采购量加权平均降幅 | 78.90% |
| 中位降幅 | 84.39% |
| 降幅区间 | 0.00% – 94.56% |
| 集采前采购额(参考价口径) | 676,768,442 元 |
| 集采后采购额(中选价口径) | 152,004,878 元 |
| 采购额节省 | 524,763,563 元(节省率 77.54%) |
加权与不加权差 24.8 个百分点,这本身就是一个有意义的观察:采购量大的品种 降幅更深。只报不加权平均值会显著低估集采的实际影响 —— 这正是本项目同时给出 两个口径的原因。
患者年治疗费用变化
| 药品 | 集采前 | 集采后 |
|---|---|---|
| 吉非替尼 | 57,670 元/年 | 13,456 元/年 |
| 伊马替尼 | 35,770 元/年 | 7,694 元/年 |
| 恩替卡韦 | 4,599 元/年 | 760 元/年 |
预算影响分析(BIA,5 年,5% 贴现)
| 指标 | 数值 |
|---|---|
| 参考预算 | 11,029,211,945 元 |
| 未贴现影响 | −1,518,581,796 元 |
| 贴现后影响 | −1,328,878,288 元 |
| PSA(5000 次)均值 | −1,325,883,186 元 |
| PSA 95% CI | [−2,363,031,712, −616,569,755] |
| 单因素敏感性最大摆动 | s_max 因子 797,326,973 元 |
| 情景对比 | 乐观 −2,631,733,334 / 基准 −1,328,878,288 / 悲观 −480,100,188 |
成本-效果分析(CEA)
| 指标 | 数值 |
|---|---|
| 增量成本 ΔC | −8,216.70 元 |
| 增量效果 ΔE | +0.0800 QALY |
| ICER | −102,708.75 元/QALY(优势策略 dominant) |
| 净货币效益 NMB(WTP=10 万) | +16,216.70 元 |
| P(成本有效) | 100.0% |
| ICER 中位数(PSA) | −101,751.23 元/QALY |
Markov 队列模型与 DRG
| 模块 | 结果 |
|---|---|
| Markov(3 状态 × 10 周期) | 总成本 19,724,716 元,总 QALY 4,530.4947,生命年 7,390.08 |
| DRG(5 病组 × 600 例) | 支付 49,080,000 元,成本 48,958,800 元,结余 +121,200 元(+0.25%),保本费率 9,975.31 |
| 一致性自检 | 10/10 通过 |
| 单元测试 | 80/80 通过 |
数据来源与合规说明(重要)
国家医保局、NMPA 等站点部署了 JavaScript 反爬保护,普通 HTTP 客户端无法访问。
本项目不抓取政府网站,也不尝试绕过任何反爬保护。 工具围绕用户自备的 结构化数据设计:你从国家医保局或省级药采平台下载集采中选结果(PDF/Excel), 整理为文档化的表头后喂给工具。
examples/ 中的样本数据明确标注为示意性数据(ILLUSTRATIVE SAMPLE DATA),
不是真实药品价格,仅用于演示数据格式与计算流程。文件头、README、字段说明中均
有醒目标注。列名支持中文别名,便于直接使用中文表格。
快速开始
git clone https://github.com/leerogerstheman/ChinaHTA
cd ChinaHTA
# 用自备数据运行完整分析
python china_hta.py run --data 你的集采数据.csv --outdir 输出目录
# 用示例数据跑通全流程
python china_hta.py run --data examples/vbp_sample.csv --outdir examples/example_output
输出:SQLite + CSV + Excel(多工作表)+ Markdown 报告。
环境要求:Python 3.9+,依赖 numpy / pandas / openpyxl / XlsxWriter。
测试
python tests/run_tests.py # 或 python -m pytest tests/
ICER、贴现、Markov 队列轨迹、BIA 总额等关键计算均有手工核算的期望值断言。
开发中修复的两个真实缺陷
1. Beta 采样器静默失真(严重)
_beta_from_mean_sd 先把均值裁剪到 (0,1) 再做矩匹配。当效应量均值 ≥1 时(累计 QALY,
如 1.08),它返回的分布均值是 0.91 / sd 0.285 —— 与目标完全不符。后果:PSA 的 ΔE 均值
是 0.0080 而非 0.0800(差 10 倍),且 P(成本有效) 被错误报为 91.7% 而非 100%。
已修复:越界的 mean/sd 现在直接报错而非静默截断。
2. 示例数据免责声明未进入报告(安全相关)
cmd_run 硬编码 is_sample=False,导致 README 自己的示例命令生成的报告里没有
“示意性数据”提示 —— 存在把虚构价格读成真实数据的风险。已修复。
两个缺陷均有回归测试,并在 README §13 中记录。
验证方式(独立复算)
除单元测试外,用 csv + fractions.Fraction 精确有理数写了一个不 import src/
任何模块的独立脚本复算(避免共享 bug 自我认证):
- ICER:加权中选价 6.520763、参考价 29.032269 → ΔC=−8,216.699818、ΔE=0.08 → ICER=−102,708.747723,与管线输出一致
- BIA:逐年展开
dB*_y = T_y·s_y·(C_new−C_old)·d_y(y1..y5),贴现后合计 −1,328,878,287.81 vs 管线 −1,328,878,288 —— 全部吻合 - 一致性自检 10/10;删除全部输出后从零重跑,每一个 README 数字都精确复现
局限
- CEA 的效应增量(ΔE=+0.08 QALY)是示意性假设:集采改变的是价格而非疗效, 若 ΔE=0 则 ICER 在构造上无定义。报告与 README 中均已标注,但这是分析上最弱的一环。
- DRG 数据为合成构造(5 个病组),权重与成本指数均为示意值。
- 年用量默认 365 单位/年(已标注);真实分析需由用户提供 DDD 或说明书用法用量, 工具刻意不自行推断 DDD。
- 样本数据为示意性数据,不代表任何真实药品的实际价格
- BIA/CEA 结果高度依赖输入假设(市场规模、爬坡曲线、贴现率、效用值), 工具的作用是让假设显式化并可做敏感性分析,而非给出”正确答案”
- 输出不构成医保决策或临床建议
资源
- 源码与文档:GitHub