#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""修正第二轮交付的 3 处问题（用户 2026-10-13 指令：立刻修正；安瑞科归属天隆集团）。

修正 1：关键词表「财报类」只保留体系内上市主体 → 删除 4 家非上市/子公司主体的 48 行
修正 2：召回自述行数错误 → 以实测值写入修正说明
修正 3：安瑞科归属天隆集团（内部确认）→ 更新映射表第 12 行与去重表 G2 依据

输出：数据/market_intel/minimax_2026-10-13/v2/  （原件保留，v2 为可用版）
"""
import csv
import os
import shutil
from collections import Counter

SRC = ('/Users/liuxinyuan/Desktop/Minimax工作区/客户满意度2026/'
       '行业信息推送_M1-M5_2026-10-13')
DST = '/Users/liuxinyuan/Desktop/Hermes输出-工作类/数据/market_intel/minimax_2026-10-13/v2'
os.makedirs(DST, exist_ok=True)

# ── 修正 1：关键词表 ─────────────────────────────────────────
kw = list(csv.reader(open(SRC + '/daily_push_keywords.csv', encoding='utf-8-sig')))
hdr, rows = kw[0], kw[1:]
DROP_FIN = {'佰奥莱博集团', '天隆集团', '安瑞科集团', '西安华伟科技有限公司'}
kept, dropped = [], []
for r in rows:
    if r[0] == '客户' and r[3] == '财报季报年报半年报' and r[2] in DROP_FIN:
        dropped.append(r)
        continue
    kept.append(r)

# 给被移除财报类的主体，在「全量监控」行备注里注明财报由谁承担
NOTE = {
    '天隆集团': '财报监测由体系上市主体科华生物(002022)承担，本主体不再单列财报类关键词（避免噪声）',
    '安瑞科集团': '归属天隆集团（内部确认 2026-10-13）；财报监测由体系上市主体科华生物(002022)承担',
    '西安华伟科技有限公司': '西安天隆控股子公司；财报监测由体系上市主体科华生物(002022)承担',
    '佰奥莱博集团': '无上市主体，不生成财报类关键词（原 12 行为噪声，已移除）',
}
for r in kept:
    if r[0] == '客户' and r[3] == '全量监控' and r[2] in NOTE:
        r[7] = (r[7] + '；' if r[7] else '') + NOTE[r[2]]

with open(DST + '/daily_push_keywords_v2.csv', 'w', encoding='utf-8-sig', newline='') as f:
    w = csv.writer(f)
    w.writerow(hdr)
    w.writerows(kept)

print('══ 修正 1：关键词表 ══')
print('  原 %d 行 → 修正后 %d 行（移除 %d 行财报类）' % (len(rows), len(kept), len(dropped)))
print('  移除明细:', dict(Counter(r[2] for r in dropped)))
print('  修正后按动态类型:', dict(Counter(r[3] for r in kept).most_common()))
print('  修正后 客户行:', len([r for r in kept if r[0] == '客户']),
      '｜ 竞品行:', len([r for r in kept if r[0] == '竞品']))

# ── 修正 3：映射表第 12 行 ────────────────────────────────────
mp = list(csv.reader(open(SRC + '/client_track_map_liu.csv', encoding='utf-8-sig')))
MP_NEW = ('002022 科华生物（体系上市主体）｜归属：天隆集团（内部客户归属确认，2026-10-13）'
          '｜⚠️公开侧说明：科华生物 2025 年年度报告子公司清单未出现「安瑞科」，公开可检索的唯一诊断类'
          '「安瑞科」为西安安瑞科生物科技有限公司（代理 TIANGEN/Eppendorf/Sigma-Aldrich），'
          '规模（11–16 人、注册资本 100 万）与股权结构均与集团不符 —— 归属以内部确认口径为准')
fixed12 = 0
for r in mp[1:]:
    if r[0] == '12' and r[1] == '安瑞科集团':
        r[2] = MP_NEW
        fixed12 += 1
with open(DST + '/client_track_map_liu_v2.csv', 'w', encoding='utf-8-sig', newline='') as f:
    w = csv.writer(f)
    w.writerows(mp)
print()
print('══ 修正 3：映射表 ══')
print('  第 12 行已更新:', bool(fixed12))

# ── 修正 3b：去重表 G2 依据 ──────────────────────────────────
gp = list(csv.reader(open(SRC + '/client_group_dedup.csv', encoding='utf-8-sig')))
G2_NEW = ('科华生物 2025 年年报（p149–150 企业集团构成）：西安天隆 66.50%、苏州天隆 66.50%、'
          '西安华伟间接 66.50%；安瑞科经内部客户归属确认为天隆集团成员（2026-10-13）——'
          '公开侧无佐证：科华年报子公司清单未列「安瑞科」，故归属依据为内部口径而非公开披露')
for r in gp[1:]:
    if r[0] == 'G2':
        r[8] = G2_NEW
with open(DST + '/client_group_dedup_v2.csv', 'w', encoding='utf-8-sig', newline='') as f:
    w = csv.writer(f)
    w.writerows(gp)
print('  G2 合并依据已更新为「内部确认 + 公开侧说明」')

# ── 其余原件同时搬运，便于整体使用 ────────────────────────────
for f in ('m1_competitor_sources.json', 'm2_public_sources.json', 'm3_keyword_matrix.csv',
          'm4_event_rules.json', 'm5_collector_skeleton.py', '映射表核验说明.md',
          '天隆科华体系深度分析.md'):
    try:
        shutil.copyfile(os.path.join(SRC, f), os.path.join(DST, f))
    except Exception as e:
        print('  搬运失败 %s: %s' % (f, str(e)[:40]))
print('\nv2 目录内容:', sorted(os.listdir(DST)))
