#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成艾德生物五年纵览 HTML（数据驱动图表）"""
import sys
sys.path.insert(0, '/Users/liuxinyuan/Desktop/Hermes输出-工作类/脚本')
import brand_kit as BK

OUT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类/客户管理/艾德生物_2026-10/02_技术底稿/艾德生物_五年纵览_2021-2026_20261026.html'

years = ['2021', '2022', '2023', '2024', '2025']
rev = [9.17, 8.42, 10.44, 11.09, 11.98]   # 亿元
profit = [2.40, 2.64, 2.61, 2.55, 3.61]

W, H = 960, 300
L, R, T, B = 80, 40, 30, 50
maxv = 13.0


def x(i):
    return L + i * (W - L - R) / (len(years) - 1)


def y(v):
    return H - B - v / maxv * (H - T - B)


pts_r = ' '.join(f'{x(i):.1f},{y(v):.1f}' for i, v in enumerate(rev))
pts_p = ' '.join(f'{x(i):.1f},{y(v):.1f}' for i, v in enumerate(profit))
bars = ''
for i, v in enumerate(rev):
    bx = x(i) - 26
    bars += f'<rect x="{bx:.1f}" y="{y(v):.1f}" width="52" height="{H-B-y(v):.1f}" rx="4" fill="#cfe3fb"/>'
    bars += f'<text x="{x(i):.1f}" y="{H-B+18}" text-anchor="middle" font-size="12" fill="#5f7183">{years[i]}</text>'
    bars += f'<text x="{x(i):.1f}" y="{y(v)-8:.1f}" text-anchor="middle" font-size="11.5" fill="#12446e">{v:.1f}</text>'
grid = ''
for g in [0, 3.25, 6.5, 9.75, 13.0]:
    yy = y(g)
    grid += f'<line x1="{L}" y1="{yy:.1f}" x2="{W-R}" y2="{yy:.1f}" stroke="#eef3f8"/>'
    grid += f'<text x="{L-10}" y="{yy+4:.1f}" text-anchor="end" font-size="10.5" fill="#93a6b8">{g:g}</text>'

chart = f'''<svg viewBox="0 0 {W} {H}" xmlns="http://www.w3.org/2000/svg" style="width:100%;height:auto">
{grid}{bars}
<polyline points="{pts_r}" fill="none" stroke="#1a73e8" stroke-width="2.5"/>
<polyline points="{pts_p}" fill="none" stroke="#e67e22" stroke-width="2.5"/>
{''.join(f'<circle cx="{x(i):.1f}" cy="{y(v):.1f}" r="4" fill="#1a73e8"/>' for i,v in enumerate(rev))}
{''.join(f'<circle cx="{x(i):.1f}" cy="{y(v):.1f}" r="4" fill="#e67e22"/>' for i,v in enumerate(profit))}
<text x="{W-R-150}" y="20" font-size="12" fill="#1a73e8">● 营业收入（亿元）</text>
<text x="{W-R-150}" y="38" font-size="12" fill="#e67e22">● 归母净利润（亿元）</text>
</svg>'''

mix = [('检测试剂', 80.8, '#1a73e8'), ('药物临床研究服务', 10.7, '#e67e22'), ('检测服务', 7.6, '#1e8e5a')]
mixbar = '<div style="display:flex;height:34px;border-radius:8px;overflow:hidden;margin:10px 0">'
for name, pct, color in mix:
    mixbar += f'<div style="width:{pct}%;background:{color};color:#fff;font-size:12px;display:flex;align-items:center;justify-content:center">{pct}%</div>'
mixbar += '</div><div style="font-size:12px;color:#5f7183">' + ' ｜ '.join(f'{n} {p}%' for n, p, _ in mix) + ' ｜ 境外收入 2.72 亿元（22.7%）</div>'

html = f'''<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>艾德生物五年纵览（2021–2026H1）</title>
<style>
:root{{--pri:#1a73e8;--deep:#0d47a1;--ink:#1f2d3d;--mute:#5f7183;--line:#e3ecf4;--bg:#f4f7fb}}
*{{box-sizing:border-box;margin:0;padding:0}}html,body{{max-width:100%;overflow-x:hidden}}
body{{font-family:-apple-system,"PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--ink);line-height:1.68}}
.wrap{{max-width:1180px;margin:0 auto;padding:22px 24px 70px}}
.hero{{background:linear-gradient(135deg,#0d47a1,#1565c0 55%,#1a73e8);color:#fff;border-radius:14px;padding:26px 30px}}
.hero h1{{font-size:25px}}.hero .sub{{opacity:.9;font-size:13px;margin-top:6px}}
.hero .one{{background:rgba(255,255,255,.12);border-left:4px solid #fff;padding:12px 16px;border-radius:8px;margin-top:15px;font-size:14px}}
.kpis{{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin:18px 0}}
.kpi{{background:#fff;border-radius:11px;padding:13px 14px;box-shadow:0 1px 4px rgba(16,42,67,.08);border-top:3px solid var(--pri)}}
.kpi b{{display:block;font-size:20px;color:var(--deep)}}.kpi span{{font-size:11.5px;color:var(--mute)}}.kpi small{{display:block;font-size:10.5px;color:#93a6b8}}
.sec{{background:#fff;border-radius:12px;padding:20px 22px;margin:16px 0;box-shadow:0 1px 4px rgba(16,42,67,.07)}}
.sec h2{{font-size:17.5px;color:var(--deep);margin-bottom:12px;display:flex;gap:8px;align-items:center}}
.sec h2 em{{font-style:normal;font-size:11.5px;color:#fff;background:var(--pri);border-radius:4px;padding:2px 7px}}
.sec h3{{font-size:14.5px;color:#17456e;margin:15px 0 8px;padding-left:9px;border-left:3px solid var(--pri)}}
p{{font-size:13.6px;margin:6px 0}}ul,ol{{margin:6px 0 6px 22px;font-size:13.6px}}li{{margin:4px 0}}
table{{width:100%;border-collapse:collapse;font-size:12.8px;margin:8px 0}}
th{{background:#f1f6fb;color:#33566f;text-align:left;padding:8px 9px;border-bottom:1px solid var(--line)}}
td{{padding:8px 9px;border-bottom:1px solid #eef4f9;vertical-align:top}}tr:hover td{{background:#fbfdff}}
.tag{{display:inline-block;font-size:10.5px;color:#fff;border-radius:3px;padding:1px 6px;margin-right:5px;background:var(--pri)}}
.box{{border-radius:8px;padding:11px 14px;font-size:13px;margin:10px 0}}
.good{{background:#eef8f2;border-left:4px solid #1e8e5a}}.key{{background:#eef4fd;border:1px solid #d6e4f7}}.warn{{background:#fff8e6;border-left:4px solid #e0a800}}
.tl{{list-style:none;margin:8px 0 0;padding:0}}
.tl li{{position:relative;padding:0 0 14px 22px;border-left:2px solid #dbe6f0;margin-left:6px;font-size:13px}}
.tl li:before{{content:"";position:absolute;left:-6px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--pri)}}
.tl b{{color:#12446e}}
.foot{{margin-top:22px;font-size:12px;color:#8ba2b8;display:flex;justify-content:space-between;flex-wrap:wrap;gap:8px}}
.note{{font-size:11.5px;color:#8ba2b8;margin-top:6px}}
@media(max-width:900px){{.kpis{{grid-template-columns:repeat(2,1fr)}}table{{display:block;overflow-x:auto}}th{{white-space:normal}}}}
@media(max-width:560px){{.wrap{{padding:14px 12px 50px}}.hero{{padding:20px 18px}}.hero h1{{font-size:20px}}}}
@media print{{body{{background:#fff}}.sec{{box-shadow:none;border:1px solid #e3ecf4;break-inside:avoid}}}}
</style></head><body><div class="wrap">

<div class="hero">
<h1>艾德生物五年纵览（2021–2026H1）</h1>
<div class="sub">业绩 · 收入结构 · 主销产品 · 重大事件 · 新产品开发 ｜ 数据截至 2026 年半年报 ｜ 2026-10-26</div>
<div class="one"><b>一句话：</b>五年营收从 9.17 亿走到 11.98 亿，靠的是 PCR 伴随诊断的国内替代与日本出海；2026H1 首次出现营收、净利双降，增量押注 NGS 血液版、MRD 与更多癌种的 IHC/FISH。</div>
</div>

<div class="kpis">
<div class="kpi"><b>11.98 亿</b><span>2025 营收</span><small>+8.01%</small></div>
<div class="kpi"><b>3.61 亿</b><span>2025 归母净利</span><small>+41.74%</small></div>
<div class="kpi"><b>-3.45%</b><span>2026H1 营收增速</span><small>5.59 亿</small></div>
<div class="kpi"><b>80.8%</b><span>检测试剂收入占比</span><small>2025</small></div>
<div class="kpi"><b>35</b><span>国内 III 类证</span><small>多为独家 CDx</small></div>
</div>

<div class="sec">
<h2><em>01</em>五年业绩：一条“稳、然后承压”的曲线</h2>
{chart}
<table>
<tr><th>年度</th><th>营业收入（亿元）</th><th>同比</th><th>归母净利（亿元）</th><th>同比</th></tr>
<tr><td>2021</td><td>9.17</td><td>—</td><td>2.40</td><td>—</td></tr>
<tr><td>2022</td><td>8.42</td><td>-8.2%</td><td>2.64</td><td>+10.1%</td></tr>
<tr><td>2023</td><td>10.44</td><td>+23.9%</td><td>2.61</td><td>-0.9%</td></tr>
<tr><td>2024</td><td>11.09</td><td>+6.3%</td><td>2.55</td><td>-2.45%</td></tr>
<tr><td>2025</td><td>11.98</td><td>+8.0%</td><td>3.61</td><td>+41.7%</td></tr>
<tr><td><b>2026H1</b></td><td><b>5.59</b></td><td><b>-3.45%</b></td><td><b>1.66</b></td><td><b>-12.12%</b></td></tr>
</table>
<div class="key box"><b>读法：</b>2023 年靠疫情后恢复与新品放量冲到 10.44 亿；2024 年增速回落到 6.3%；2025 年净利大增 41.7%，主要来自费用控制与产品结构，而非收入加速；2026H1 收入转负，说明国内降价压力已经传导到报表。</div>
</div>

<div class="sec">
<h2><em>02</em>收入结构：试剂是绝对主力，海外是第二增长极</h2>
{mixbar}
<table>
<tr><th>板块</th><th>2025 占比</th><th>说明</th></tr>
<tr><td>检测试剂、软件及配套仪器</td><td>80.8%</td><td>核心利润来源，毛利率约 90%</td></tr>
<tr><td>药物临床研究服务</td><td>10.7%</td><td>为药企做伴随诊断注册与中心实验室检测，绑定新药上市</td></tr>
<tr><td>检测服务（ICL）</td><td>7.6%</td><td>厦门、上海两家实验室 + 北美实验室（CLIA/CAP）</td></tr>
</table>
<p>境外收入约 <b>2.72 亿元（22.7%）</b>，日本、韩国、欧盟、东南亚、拉美多点准入；日本部分产品已进医保。</p>
</div>

<div class="sec">
<h2><em>03</em>重大事件时间轴（2021–2026）</h2>
<ul class="tl">
<li><b>2021</b>：与海和药物达成靶向药临床研究合作；与阿斯利康签署卵巢癌 HRD 伴随诊断战略合作。</li>
<li><b>2022-06</b>：PCR-11 基因（Pan lung cancer PCR panel）获日本 PMDA 批准，成为其海外首个多基因伴随诊断；随后进入日本医保。</li>
<li><b>2023</b>：日本连续获批两项 MET 伴随诊断；与卫材（Eisai）签订全球诊断合作；与杨森中国签署战略合作；国内 III 类证增至 26 项。</li>
<li><b>2024</b>：获 TÜV 南德 IVDR 伴随诊断证书，欧盟准入体系升级；实验室通过 CAP/ISO15189。</li>
<li><b>2025-04</b>：10 基因 NGS 产品新增 EGFR 20 号外显子插入（锐珂®）伴随诊断。</li>
<li><b>2025-10</b>：EGFR/ALK/ROS1/MET/KRAS 多重荧光 PCR 试剂盒获批（国械注准20253402196）。</li>
<li><b>2025-12</b>：BRCA1/2 NGS 试剂盒获批前列腺癌适应症（国械注准20253402685），为国内首个前列腺癌 HRD 伴随诊断；艾惠捷®再获卡马替尼 CDx 标签。</li>
<li><b>2026-03</b>：PIK3CA 在日本获批伴随诊断；与和黄医药联合开发的 MET FISH 伴随诊断在中国获批（全球首款）。</li>
<li><b>2026-04</b>：HER-2 抗体试剂（IHC）获批（国械注准20263400896）。</li>
<li><b>2026-05</b>：MSI 检测试剂盒（荧光 PCR 熔解曲线法）获批（国械注准20263401021）。</li>
</ul>
</div>

<div class="sec">
<h2><em>04</em>主销产品：四条技术线，PCR 是现金牛</h2>
<table>
<tr><th style="width:10%">平台</th><th>代表产品</th><th>核心卖点</th><th>商业地位</th></tr>
<tr><td><span class="tag">PCR</span></td><td>PCR-11 基因（Pan lung）、EGFR、ALK、ROS1、KRAS/NRAS/BRAF、PIK3CA、MSI</td><td>ADx-ARMS / Super-ARMS，单管快速、特异度高；PCR-11 覆盖肺癌主要靶点，日本获批并进医保</td><td><b>现金牛</b>，国内伴随诊断证最全</td></tr>
<tr><td><span class="tag" style="background:#8e44ad">NGS</span></td><td>10 基因（组织+血浆）、BRCA1/2、HRD Panel、HANDLE 系列</td><td>ddCapture 专利；10 基因组织 LOD 1%、血浆 LOD 0.2%；MRD 模式 100,000×、0.02% 灵敏度</td><td><b>第二曲线</b>，仍在扩菜单</td></tr>
<tr><td><span class="tag" style="background:#c0392b">IHC</span></td><td>PD-L1、HER-2、ER/PR</td><td>病理判读，配套药物 CDx</td><td>补齐病理端，协同 PCR/NGS</td></tr>
<tr><td><span class="tag" style="background:#e67e22">FISH</span></td><td>ALK/ROS1/RET、MET 扩增</td><td>断裂分离/扩增探针；MET FISH 为全球首款与和黄医药联合开发</td><td>细分补充，2026 新增</td></tr>
</table>
<div class="good box"><b>对原料的含义：</b>PCR 与 NGS 两条线才有酶原料需求；IHC/FISH 主要是抗体与探针，不是我们的主战场。NGS 血浆版 0.2%、MRD 0.02% 这两个数字，直接对应“低背景 + 低输入 + UMI 建库”的原料门槛。</div>
</div>

<div class="sec">
<h2><em>05</em>新产品开发动态（2025–2026）</h2>
<table>
<tr><th>时间</th><th>产品</th><th>注册/准入</th><th>意义</th></tr>
<tr><td>2025-04</td><td>10 基因 NGS · EGFR 20ins CDx</td><td>国内新增伴随诊断标签</td><td>NGS 大 panel 继续扩标签</td></tr>
<tr><td>2025-10</td><td>EGFR/ALK/ROS1/MET/KRAS 多重荧光 PCR</td><td>国械注准20253402196</td><td>PCR 从单基因走向多重，对多重均一性要求提升</td></tr>
<tr><td>2025-12</td><td>BRCA1/2 NGS · 前列腺癌</td><td>国械注准20253402685</td><td>国内首个前列腺癌 HRD CDx</td></tr>
<tr><td>2026-03</td><td>MET FISH（与和黄医药联合）</td><td>国内获批，全球首款</td><td>FISH 线补齐 MET 扩增</td></tr>
<tr><td>2026-03</td><td>PIK3CA</td><td>日本获批 CDx</td><td>日本市场继续加深</td></tr>
<tr><td>2026-04</td><td>HER-2 IHC</td><td>国械注准20263400896</td><td>病理端与 ADC 药物配套</td></tr>
<tr><td>2026-05</td><td>MSI（荧光 PCR 熔解曲线）</td><td>国械注准20263401021</td><td>泛癌种免疫治疗标志物，PCR 平台新增应用</td></tr>
</table>
<p><b>在研与方向（公开信息）：</b>HER2 基因突变（荧光 PCR）处于审评阶段；NGS 10 基因已具备 MRD 模式（100,000×、0.02%）；海外继续推进日本、韩国、欧盟、东南亚、拉美准入。</p>
</div>

<div class="sec">
<h2><em>06</em>对我们的三个直接含义</h2>
<ol>
<li><b>PCR 仍是最大原料池</b>：多重 PCR 新证（2025-10）意味着对多重扩增均一性、引物二聚体控制的要求更高，FastAmpli 类快速高保真酶有切入空间。</li>
<li><b>NGS 血液版与 MRD 是增量</b>：血浆 LOD 0.2%、MRD 0.02% 对应低背景 NA 版、低输入建库、UMI 兼容——这正是我们 NA 系列能讲的故事。</li>
<li><b>IHC/FISH 不是我们的战场</b>：这两条线新增证再多，也不会带来酶原料需求；不要在这上面投入销售资源。</li>
</ol>
<div class="warn box"><b>风险提示：</b>艾德 NGS 建库酶目前以进口为主（行业惯例），国产替代需要注册级文件与批间数据；我们缺的正是“注册文件包”，不是酶本身。</div>
</div>

<div class="sec">
<h2><em>07</em>口径与不确定点</h2>
<p class="note">数据来源：艾德生物 2022/2023/2024/2025 年年度报告及摘要、2026 年半年度报告、NMPA 医疗器械批准送达信息、公司官网新闻、公开研报。2025 年收入结构（试剂 80.8%、药企服务 10.7%、检测服务 7.6%，境外 22.7%）来自公开财务数据整理，四舍五入后合计可能不等于 100%。</p>
<ol>
<li><b>2026 全年指引</b>：公司未在半年报给出全年指引，H2 能否回正取决于集采与出海节奏，无法从公开信息推断。</li>
<li><b>NGS 原料供应商</b>：公开资料不披露建库酶供应商，任何“已用某家”的说法都需要客户确认。</li>
<li><b>MRD 商业化形态</b>：目前以 LDT/科研合作为主还是已有注册产品，公开信息不足，需向客户核实。</li>
</ol>
</div>

<div class="foot"><span>宝锐生物 · 营销中心 ｜ 艾德生物五年纵览 ｜ 2026-10-26</span><span>内部资料 · 请勿外传</span></div>
</div></body></html>'''

html = BK.inject(html, theme='light', tag='营销中心 · 客户研究')
open(OUT, 'w', encoding='utf-8').write(html)
print('✅', OUT, len(html))
