#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""全预混低温保存 · 客户案例卡 v2（含 MD2091 / 2–8℃ 1 个月 / −20℃ 1 年 三条件）"""
import json
import os
import re
import sys

sys.path.insert(0, '/Users/liuxinyuan/Desktop/Hermes输出-工作类/脚本')
import brand_kit as BK  # noqa: E402

W = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
ACT = json.load(open(os.path.join(W, '数据/daily_activities_mcp.json'), encoding='utf-8'))['items']
OUT = os.path.join(W, '销售分析/MD2091_全预混保存_客户案例卡_2026-10-20.html')
KEYS = ('MD2091', 'MD2104', 'PM2104', 'M2331', 'M2274', '全预混', '单管', '2-8', '4℃', '4度', '-20', '冻融', '加速', '18个月')


def clean(t):
    t = re.sub(r'<[^>]+>', '', t or '')
    t = re.sub(r'!\[\]\([^)]*\)', '', t)
    t = re.sub(r'<!--.*?-->', '', t)
    return re.sub(r'\s+', ' ', t).strip()


def pick(cust, day, anchor=''):
    best, score = None, -1
    for a in ACT:
        c = a.get('field_5f20fc')
        c = c.get('label') if isinstance(c, dict) else c
        if c != cust or str(a.get('start_time'))[:10] != day:
            continue
        body = clean(a.get('field_b99055'))
        sc = sum(1 for k in KEYS if k in body) + (10 if anchor and anchor in body else 0)
        if sc <= score:
            continue
        sents = [s.strip() for s in re.split(r'(?<=[。；;])', body) if s.strip()]
        keyw = (anchor,) if anchor else ('MD2091', 'MD2104', 'PM2104', '2-8', '4℃', '4度', '-20', '冻融', '全预混')
        idx = [i for i, s in enumerate(sents) if any(k in s for k in keyw)]
        keep = []
        for i in idx:
            if i > 0 and sents[i - 1] not in keep:
                keep.append(sents[i - 1])
            if sents[i] not in keep:
                keep.append(sents[i])
        best = (' '.join(keep) or body, (a.get('owner') or {}).get('name_cn') or '', str(a.get('work_item_id') or ''))
        score = sc
    return best or ('', '', '')

# (客户, 日期, SKU, 标签, 桶, 标题, 判断, 条件原文, 强度, 边界)
SPEC = [
 ('苏州天隆生物科技有限公司', '2026-09-17', 'MD2091', ['2-8℃', '1个月', '全预混', '正面'], '2-8-1m',
  '王小舟 · 分子流水线项目', '客户要求 2–8℃ 全预混存 1 周–1 个月（含模板）；DNA 项目在测 MD2091「表现较好」，但低浓度不满足快速需求，9 月初已拿拆分版自调。',
  '2–8℃ 全预混 1 周–1 个月', '中（条件未写死）', '记录未写明 MD2091 的结果是在 2–8℃ 下取得。'),
 ('苏州天隆生物科技有限公司', '2026-09-17', 'MD2104-003003', ['2-8℃', '1个月', '全预混', '正面'], '2-8-1m',
  '呼吸道快检 · 003003 已做到 1 个月', '陈昂/娄轩/朱娜：MD2104-003003 是当前最好的一款，2–8℃ 全预混存放 1 个月、室温 8 小时性能没问题，更久未测。',
  '2–8℃ 全预混 1 个月 + 室温 8h', '高（客户明确时长）', '同一客户，非 MD2091；作为"该客户已实现 1 个月"的旁证。'),
 ('苏州天隆生物科技有限公司', '2026-09-24', 'PM2104-003006', ['2-8℃', '模拟运输', '全预混', '正面'], '2-8-1m',
  '模拟运输 2–8℃ 2 天', '使用 PM2104-003006（0725 批次）模拟运输（2–8℃、2 天、全预混）表现良好，对照瀚海新酶荧光值下降 50%；0902 批个别靶标低 10–20%。',
  '2–8℃ 2 天模拟运输', '高（有对照）', '时长是 2 天，不是 1 个月，不能直接当 1 个月证据。'),
 ('苏州天隆生物科技有限公司', '2026-10-15', 'MD5104-003010-DB', ['2-8℃', '1个月', '全预混', '需求'], '2-8-1m',
  '5× buffer 版本需求', '客户需求：2–8℃ 全预混 1 个月、检测 30 分钟内；要求把 MD2104-092401 的 buffer 提到 5×，已按 MD2104-003003 调出 MD5104-003010-DB。',
  '2–8℃ 全预混 1 个月', '需求（未给结果）', '这是需求记录，不是验证结果。'),
 ('青岛嘉智生物技术有限公司', '2026-08-26', 'MD2091-001102', ['4℃', '1个月', '全预混', '负面'], '4c',
  '非瘟/RT 单管 · 终端 4℃ 1 个月', '终端要求 4℃ 全预混 1 个月、37℃ 加速 7 天；MD2091-001102 临界值检出不如 M2181-4-095203。',
  '4℃ 全预混 1 个月（终端硬指标）', '高（明确）', '唯一明确 4℃ 全预混硬指标且我司未占优的客户。'),
 ('上海之江生物科技股份有限公司', '2026-09-30', '全预混体系', ['4℃', '3个月', '全预混', '进行中'], '4c',
  '疾控场景 · 全预混快速', '需要全预混快速 30–40 分钟体系（500T，DNA/RNA 分开）；先做 T0，通过后做单管加速验证，4℃ 三个月。',
  '4℃ 三个月', '需求（刚送测）', '尚无结果；之江自身预混采购量小，疾控场景推进慢。'),
 ('圣湘生物科技股份有限公司', '2026-07-31', 'MD2091-000811', ['4℃', '全预混', '正面'], '4c',
  'DNA 直扩预混 · 首轮', '两款中 MD2091-000811-DB 表现较好，即时扩增符合需求，进入加速验证。',
  'DNA 直扩预混（4℃ 项目）', '高（首轮）', '后续 4℃/加速阶段出现反转，见同客户负面卡。'),
 ('圣湘生物科技股份有限公司', '2026-08-13', 'MD2091-000811', ['4℃', '加速', '负面'], '4c',
  '4℃ 预混与加速反转', '周老师呼吸道预混项目 4℃ 预混性能不好、荧光值下降较多；朱军桥项目 MD2091-000811 加速后更容易起线。',
  '4℃ 预混 / 加速', '高（明确负面）', '4℃ 那条未标明货号，需与客户确认是否为 MD2091 体系。'),
 ('圣湘生物科技股份有限公司', '2026-10-13', 'MD2104-092401', ['4℃', '加速', '负面'], '4c',
  '4℃ 3 天 · VIC 不达标', '初步 4℃ 预混 3d 结果显示 B 管 VIC 通道不能满足项目要求（高 GC），本周五出 4℃ 7d 结果。',
  '4℃ 预混 3 天', '高（明确负面）', '与 08-13 的 4℃ 结论一致，说明是体系性问题而非偶发。'),
 ('圣湘生物科技股份有限公司', '2026-09-17', 'E07 / E40 / E20', ['-20℃', '不冻结', '全预混', '需求'], 'm20',
  '国产替代 · −20+5℃ 不冻结', '新项目要求：5U Taq、可不冻干、−20+5℃ 保存不冻结、快速抗逆全预混；已发 E07 / E40 / E20-014301 三款。',
  '−20+5℃ 不冻结', '需求（已送测）', '是"不冻结"的特殊条件，与常规 −20℃ 冷冻不同。'),
 ('洛阳普泰生物技术有限公司', '2026-09-30', '全预混体系', ['-20℃', '18个月', '全预混', '需求'], 'm20',
  'RT 全预混 · 18 个月', '客户新的 RT 全预混需求：全预混 −20℃ 18 个月，常规程序；客户要我们的冻融、热加速与实时数据，内部尚未提供。',
  '−20℃ 18 个月', '需求（数据未给）', '18 个月超出我们现有任何验证时长。'),
 ('龙阔（苏州）生物工程有限公司', '2026-10-19', 'M2331 / M2274-088901', ['-20℃', '冻融6次', '全预混', '负面'], 'm20',
  '动保全预混替换项目', '需求：−20℃ 长期、冻融 6 次稳定、含引探全预混 37℃ 1 个月加速；我方推荐的两款体系均不能确保全预混 1 个月稳定，RNA 尤差，且报价超客户目标。',
  '−20℃ 长期 + 冻融 6 次 + 37℃ 1 个月', '高（我方自评不满足）', '价格 0.6 元/T 的目标也未达，属双重不匹配。'),
 ('湖南冠牧生物科技有限公司', '2026-10-12', 'MD2104-003001', ['-20℃', '冻融', '全预混', '负面'], 'm20',
  'RNA 预混 · 冻融循环失效', '−20℃ 保存条件下性能 OK；但模拟终端「−20℃ 1 周→冻融 3 次→37℃ 3 天→冻融 3 次」后靶标与内标 Ct 滞后、基本不起线（M2274-073702 滞后 2 Ct）；客户试剂盒效期 1 年。',
  '−20℃ + 冻融 3 次 + 37℃ 3 天', '高（明确负面）', '测试是"非预混"形态（酶一管、buffer+引探一管），不能直接等同于全预混失效。'),
 ('广州维伯鑫生物科技有限公司', '2026-10-08', '蓝耳全预混试剂', ['-20℃', '3个月', '全预混', '正面'], 'm20',
  '蓝耳 · −20℃ 实时稳定性', '引物探针全预混 −20℃ 放置 3 个月，我司与羿圣的试剂都没问题；下一次是第 6 个月测试。',
  '−20℃ 3 个月（进行中）', '中（阶段结论）', '3 个月，距离 1 年还差 9 个月。'),
 ('广州易安生物技术有限公司', '2026-08-12', 'E29-000702 / E29-020308', ['-20℃', '1周', '全预混', '正面'], 'm20',
  '引物探针全预混 · 1 周', '25 μL 体系加 40U，引物探针全预混 −20℃ 放置 1 周，与现配现用基本一致。',
  '−20℃ 1 周', '中（短时）', '仅 1 周，不能外推到 1 年。'),
 ('上海美吉生物医药科技有限公司', '2026-09-03', '超预混体系', ['-20℃', '负面', '全预混'], 'm20',
  '−20℃ 24h 检不出', '客户反馈：超预混 −20℃ 24 小时无法检出，但 2–8℃、37℃ 反而稳定；预混后 −20℃ 个别孔 Ct 差异大。',
  '−20℃ 24 小时', '高（客户实测）', '客户同时怀疑孔位坏孔，尚在排查，不能直接归因配方。'),
 ('上海美吉生物医药科技有限公司', '2026-09-18', '全预混单管', ['2-8℃', '短时', '全预混', '正面'], '2-8-1m',
  '内部 830 稳定性 · 2–8℃ 短时', '不同形式全预混单管于 2–8℃ 放置 2h/4h/6h，扩增 Rn 值较即时配制无显著差异。',
  '2–8℃ 2/4/6 小时', '中（内部实验）', '短时实验，不覆盖 1 个月。'),
 ('江苏硕世生物科技股份有限公司', '2026-09-11', 'M2274-000306', ['24℃', '加速', '负面'], 'hot',
  'RT 单管 · 24℃ 5 天掉 70%', '公卫 RT 单管筛选中，我司 000306 因 24℃ 5 天荧光下降太多被客户弃用，仅争取到 088901 第二次测试机会。',
  '24℃ 5 天加压', '高（明确负面）', '属高温热稳定性，不是 2–8℃/−20℃ 条件，单独列示避免混口径。'),
 ('上海万子健生物科技有限公司', '2026-07-13', 'FMD5104-074901 等', ['室温', '12个月', '需求'], 'other',
  '含引探室温 12 个月', 'HIV 血浆/血清提取项目适配 POCT；计划做含引探室温 12 个月稳定，已推荐 FMD5104-074901、FMD0104-002401。',
  '室温 12 个月', '需求', '室温 12 个月是另一种条件，不等于 −20℃ 1 年。'),
 ('苏州翊创生物科技有限公司', '2026-08-19', '微流控芯片', ['-20℃', '8℃运输', '需求'], 'other',
  '−20℃ 保存 + 8℃ 运输', '薄膜微流控芯片原计划常温注册，现改为 −20℃ 保存、8℃ 运输。',
  '−20℃ 保存 / 8℃ 运输', '需求', '储存与运输条件分离，需分别验证。'),
 ('宁波海尔施基因科技股份有限公司', '2026-10-14', 'MD2091', ['全预混', '温度未给', '正面'], 'mixonly',
  '痰液提取全预混 · MD2091 最好', '三款平行测试中 MD2091 效果最好（000811 大肠杆菌假阳、020314 曲线较差），客户同意继续测 MD2091。',
  '痰液提取全预混（温度未指明）', '高（同场景对比）', '未给温度与时长，不能当 2–8℃ 证据。'),
 ('江苏宏微特斯医药科技有限公司', '2026-09-11', 'MD2091', ['全预混', '温度未给', '进行中'], 'mixonly',
  '一体机 · 全预混不冻干', '一体机磁提、全预混、不冻干、30min 快速程序，已送测 MD2091；客户仍在稳定性评估中。',
  '全预混（温度未指明）', '进行中', '无结论。'),
 ('武汉正大康瑞生物科技有限公司', '2026-10-15', 'MD2091-092402', ['37℃加速', '全预混', '正面'], 'hot',
  '细小项目 · 37℃ 7D 通过', '性能测试 + 37℃ 7D 热加速后，我司匹配 MD2091-092402；客户开始收集临床样本，之后进入议价。',
  '37℃ 7D 热加速', '高', '是加速条件，不等于 2–8℃ 或 −20℃ 实地保存。'),
 ('湖南冠牧生物科技有限公司', '2026-09-17', 'MD2091-092402 / 000804', ['全预混', '温度未给', '进行中'], 'mixonly',
  '3 个全预混体系做稳定性验证', '客户把 3 个全预混体系 + 1 个 DNA 预混体系列入稳定性验证，已给 MD2091-092402 / 000804 双组份试用装。',
  '全预混（温度未指明）', '进行中', '结果未回。'),
 ('广州悦洋生物技术有限公司', '2026-09-30', 'MD2091-000804', ['全预混', '温度未给', '进行中'], 'mixonly',
  '非瘟直扩 · 稳定性验证', '采购 MD2091-000804 后续做稳定性验证；单管项目多家原料一起验证，预计国庆后出结果。',
  '全预混 / 单管（温度未指明）', '进行中', '结果未回。'),
]

ANCHOR = {
 ('苏州天隆生物科技有限公司', '2026-09-17', 'MD2091'): '王小舟',
 ('苏州天隆生物科技有限公司', '2026-09-17', 'MD2104-003003'): 'MD2104-003003',
 ('苏州天隆生物科技有限公司', '2026-09-24', 'PM2104-003006'): 'PM2104-003006',
 ('苏州天隆生物科技有限公司', '2026-10-15', 'MD5104-003010-DB'): '2-8°C全预混一个月',
 ('青岛嘉智生物技术有限公司', '2026-08-26', 'MD2091-001102'): '四度全预混一个月',
 ('上海之江生物科技股份有限公司', '2026-09-30', '全预混体系'): '4°C三个月',
 ('圣湘生物科技股份有限公司', '2026-07-31', 'MD2091-000811'): 'MD2091-000811-DB',
 ('圣湘生物科技股份有限公司', '2026-08-13', 'MD2091-000811'): '4度预混性能不好',
 ('圣湘生物科技股份有限公司', '2026-10-13', 'MD2104-092401'): '4℃预混3d',
 ('圣湘生物科技股份有限公司', '2026-09-17', 'E07 / E40 / E20'): '-20+5℃',
 ('洛阳普泰生物技术有限公司', '2026-09-30', '全预混体系'): '18个月',
 ('龙阔（苏州）生物工程有限公司', '2026-10-19', 'M2331 / M2274-088901'): '冻融6次',
 ('湖南冠牧生物科技有限公司', '2026-10-12', 'MD2104-003001'): '非预混',
 ('广州维伯鑫生物科技有限公司', '2026-10-08', '蓝耳全预混试剂'): '三个月',
 ('广州易安生物技术有限公司', '2026-08-12', 'E29-000702 / E29-020308'): '放置了1周',
 ('上海美吉生物医药科技有限公司', '2026-09-03', '超预混体系'): '超预混-20度24小时',
 ('上海美吉生物医药科技有限公司', '2026-09-18', '全预混单管'): '2-8度下放置',
 ('江苏硕世生物科技股份有限公司', '2026-09-11', 'M2274-000306'): '000306',
 ('上海万子健生物科技有限公司', '2026-07-13', 'FMD5104-074901 等'): '室温12个月',
 ('苏州翊创生物科技有限公司', '2026-08-19', '微流控芯片'): '8度运输',
 ('宁波海尔施基因科技股份有限公司', '2026-10-14', 'MD2091'): '痰液提取全预混',
 ('江苏宏微特斯医药科技有限公司', '2026-09-11', 'MD2091'): '一体机',
 ('武汉正大康瑞生物科技有限公司', '2026-10-15', 'MD2091-092402'): '37℃ 7D',
 ('湖南冠牧生物科技有限公司', '2026-09-17', 'MD2091-092402 / 000804'): 'MD2091-092402',
 ('广州悦洋生物技术有限公司', '2026-09-30', 'MD2091-000804'): '稳定性验证',
}
cases = []
for cust, day, sku, tags, bucket, title, verdict, cond, strength, risk in SPEC:
    q, owner, wid = pick(cust, day, ANCHOR.get((cust, day, sku), ''))
    cases.append(dict(cust=cust, date=day, sku=sku, tags=tags, bucket=bucket, title=title,
                      verdict=verdict, cond=cond, strength=strength, risk=risk,
                      quote=q[:430], owner=owner, wid=wid))

bad = [c for c in cases if not c['quote']]
print('案例', len(cases), '｜空原文', len(bad))
json.dump({'updated': '2026-10-20', 'cases': cases}, open(os.path.join(W, '数据/premix_cases_v2.json'), 'w'),
          ensure_ascii=False, indent=1)
print('✅ 数据/premix_cases_v2.json')
