#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成「客户→赛道映射表」输入模板（给 MiniMax Code 做 demo 用）。

- 客户名单：~/.hermes/profiles/baorui-sales/customer_attribution.json（刘子研，20 家，权威源）
- 上市标注：巨潮 topSearch 实测（2026-10-13，两轮关键词）
输出：经营分析/客户赛道映射表_刘子研_输入模板_2026-10-13.md + .csv
"""
import json
import os

W = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
SRC = os.path.expanduser('~/.hermes/profiles/baorui-sales/customer_attribution.json')
cust = json.load(open(SRC, encoding='utf-8'))['salespeople']['刘子研']
names = cust['customers']

a1 = json.load(open(os.path.join(W, '数据/market_intel/客户上市状态_2026-10-13.json'), encoding='utf-8'))
a2 = json.load(open(os.path.join(W, '数据/market_intel/客户上市状态_补测.json'), encoding='utf-8'))

LISTED = {
    '丽珠集团': ('000513', '丽珠集团', '本体'),
    '海尔施集团': ('601206', '海尔施', '本体'),
    '深圳市新产业生物医学工程股份有限公司': ('300832', '新产业', '本体'),
    '上海科华生物工程股份有限公司': ('002022', '科华生物', '本体'),
    '上海之江生物科技股份有限公司': ('688317', '之江生物', '本体'),
    '厦门艾德生物医药科技股份有限公司': ('300685', '艾德生物', '本体'),
    '复星集团': ('600196', '复星医药', '关联主体（采购主体可能为下属子公司，需确认）'),
    '安瑞科集团': ('03899.HK', '中集安瑞科', '关联主体（港股，需确认采购主体）'),
    '东方基因集团': ('688298', '东方生物', '关联主体（需确认采购主体）'),
    '杭州迪安生物技术有限公司': ('300244', '迪安诊断', '关联主体（迪安诊断下属，需确认采购主体）'),
}
SUSPECT = {'佰奥莱博集团': ('300836', '佰奥智能', '⚠️ 疑似同名误匹配（非同一主体），请勿采用')}

rows = []
for i, nm in enumerate(names, 1):
    if nm in LISTED:
        code, short, rel = LISTED[nm]
        mark = '%s %s ｜ %s' % (code, short, rel)
    elif nm in SUSPECT:
        code, short, rel = SUSPECT[nm]
        mark = '%s %s ｜ %s' % (code, short, rel)
    else:
        mark = '未匹配到上市主体（未上市 / 或为非上市子公司）'
    rows.append((i, nm, mark))

md = []
md.append('# 客户 → 赛道 → 对标公司 映射表（输入模板 · 刘子研岗位）\n')
md.append('> 客户名单来源：我司客户归属表（`customer_attribution.json`，2026-10-12 更新，大客户部/大客户1，共 20 家）  ')
md.append('> 上市标注来源：巨潮资讯 `topSearch` 接口实测（2026-10-13，两轮关键词）  ')
md.append('> 用途：交给 MiniMax Code 产出 **demo 映射表**，用于与我方本地成品版对比参考\n')
md.append('---\n')
md.append('## 一、20 家客户（第 3 列已由我方代填，其余列待填）\n')
md.append('| # | 客户名称 | 关联上市主体 / 证券代码（我方已填，来源：巨潮） | 赛道 | 主营与终端应用 | 对标公司 | 关注关键词 | 来源 URL |')
md.append('|---|---|---|---|---|---|---|---|')
for i, nm, mark in rows:
    md.append('| %d | %s | %s |  |  |  |  |  |' % (i, nm, mark))
md.append('')
md.append('---\n')
md.append('## 二、字段口径（每列到底要什么）\n')
md.append('| 列 | 要求 | 示例 |')
md.append('|---|---|---|')
md.append('| **赛道** | 该客户终端所处细分赛道（不要写"医疗器械"这种大词）。建议从以下取值中选，可多选：分子诊断-核酸检测（PCR/qPCR）、分子诊断-测序（NGS/tNGS/mNGS）、分子诊断-恒温扩增（LAMP/RPA）、分子 POCT、化学发光/免疫诊断、血凝/生化、ICL 第三方检验、科研试剂/生命科学工具、原料与 CDMO、动物诊断、司法/海关检测 | 分子诊断-核酸检测（PCR/qPCR） |')
md.append('| **主营与终端应用** | 一句话：主业是什么、主要产品/检测项目、终端去向（临床/科研/动物/工业） | 传染病核酸检测试剂（呼吸道、肝炎），面向临床；同时做仪器 |')
md.append('| **对标公司** | 与该客户同赛道、且**我方竞品**清单内的公司优先（见第五节）；无对应时填同赛道其他公司 | 圣湘生物、达安基因、之江生物 |')
md.append('| **关注关键词** | 3–6 个用于每日检索的词：该客户的产品线词 + 该赛道事件词（如"获批""中标""集采""新品""扩产""融资"） | 呼吸道多重核酸检测、获证、集采、原料替代 |')
md.append('| **来源 URL** | **该行事实的公开来源链接**（官网/公告/招股书/新闻）。**无 URL 的行不得保留** | https://www.cninfo.com.cn/... |')
md.append('')
md.append('---\n')
md.append('## 三、粘贴给 MiniMax Code 的提示词\n')
md.append('```')
md.append('你是产业研究员。请为下面 20 家企业的「客户→赛道→对标公司」映射表补全空缺列，输出 CSV。\n')
md.append('已有列：序号、客户名称、关联上市主体/证券代码（不要改动这一列）。')
md.append('需要你填：赛道、主营与终端应用、对标公司、关注关键词、来源URL。\n')
md.append('硬性要求：')
md.append('1. 每行必须给出公开来源 URL（官网/交易所公告/年报/权威新闻），无 URL 的行不要输出；')
md.append('2. 不得编造、不得推测；无法确认的填「待确认」，宁可空也不要猜；')
md.append('3. 「赛道」列按上面模板给定的取值填写，不要用「医疗器械」这类大词；')
md.append('4. 「对标公司」优先从这 8 家里选：诺唯赞、翌圣、菲鹏、全式金、迈迪安（Meridian）、罗氏诊断、宝生物（Takara）、赛默飞；')
md.append('5. 不要询问、不要推测我方的采购金额、价格、客诉等内部信息；本任务只用公开资料；')
md.append('6. 输出 UTF-8 CSV，文件名 client_track_map_liu.csv，列顺序与模板一致。\n')
md.append('（此处粘贴第一节的 20 行表格）')
md.append('```\n')
md.append('---\n')
md.append('## 四、验收规则（我方）\n')
md.append('1. **逐行查 URL**：无 URL 或 URL 打不开的行退回；')
md.append('2. **赛道取值**必须落在第二节给定的取值域内；')
md.append('3. **对标公司**须与客户终端赛道自洽（可交叉验证）；')
md.append('4. 「待确认」占比超过 30% 视为不合格（说明公开信息不足，应收窄客户范围）。')
md.append('')
md.append('---\n')
md.append('## 五、我方 8 家重点竞品（供「对标公司」列优先选用）\n')
md.append('诺唯赞（688105）｜ 翌圣生物 Yeasen ｜ 菲鹏生物 Fapon ｜ 全式金 TransGen ｜ 迈迪安 Meridian ｜ 罗氏诊断 Roche ｜ 宝生物 Takara（2026-06-12 已退市）｜ 赛默飞 Thermo Fisher\n')
md.append('')
md.append('---\n')
md.append('## 六、口径说明（重要）\n')
md.append('- **客户名单属公司数据**，是否交给外部工具由你决定；本文件仅在本地工作区留档，我方不做外发通道。')
md.append('- 第 3 列「关联上市主体」= **公开可查的对应上市主体**，不等于采购主体；标注「关联主体」的行需人工确认归属。')
md.append('- 佰奥莱博集团一行标注了疑似同名误匹配，**请勿采用**该代码。')
md.append('- 未匹配上市的 9 家不等于不重要：其中含地方 ICL、医院、非上市试剂厂，属赛道内关键样本。')

open(os.path.join(W, '经营分析/客户赛道映射表_刘子研_输入模板_2026-10-13.md'), 'w', encoding='utf-8').write('\n'.join(md))

with open(os.path.join(W, '经营分析/客户赛道映射表_刘子研_输入模板_2026-10-13.csv'), 'w', encoding='utf-8-sig') as f:
    f.write('序号,客户名称,关联上市主体及代码,赛道,主营与终端应用,对标公司,关注关键词,来源URL\n')
    for i, nm, mark in rows:
        f.write('%d,%s,"%s",,,,,%s' % (i, nm, mark, ''))

print('✅ 模板已生成（md + csv）')
print('   20 行客户；第 3 列已代填：%d 家匹配上市主体，%d 家未匹配，1 家疑似误匹配已标注' % (
    len(LISTED), len(names) - len(LISTED) - len(SUSPECT)))
