#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成销售数据包里的「07_产品验证资料.json」（产品级、按系列聚合）。

用法：python3 脚本/build_sales_validation_pack.py 刘子研 [更多姓名...]
规则：结论只用可信摘录（含性能/稳定/一致/合格/通过/检出，且不以“判定标准”开头）；
      不可靠的写空，让销售助手去读原件，不把错句当结论。
"""
import json
import os
import re
import sys

ROOT = '/Users/liuxinyuan/Desktop/Hermes输出-工作类'
IDX = os.path.join(ROOT, '数据', 'validation_index.json')
PACK = os.path.join(ROOT, '团队共享', '销售数据包')

TYPES = ['效期/实时稳定性', '运输稳定性', '加速稳定性', '冻融稳定性', '性能/扩增数据', '其他']


def typ(f):
    if any(k in f for k in ('效期', '实时稳定', '长期')):
        return '效期/实时稳定性'
    if any(k in f for k in ('运输', '物流', '航空')):
        return '运输稳定性'
    if any(k in f for k in ('加速', '55度', '45度', '37')):
        return '加速稳定性'
    if '冻融' in f:
        return '冻融稳定性'
    if any(k in f for k in ('扩增', '检出率', '灵敏度', '直扩', '对比', '分型')):
        return '性能/扩增数据'
    return '其他'


def good(c):
    c = (c or '').strip()
    return bool(re.search(r'性能|稳定|一致|合格|通过|符合|无差异|检出', c)) and not c.startswith('判定标准')


recs = json.load(open(IDX, encoding='utf-8'))
series = {}
for x in recs:
    f = x['file']
    t = typ(f)
    c = x.get('conclusion') or ''
    series.setdefault(x['sku'], []).append({
        'file': f, 'type': t, 'pages': x.get('pages'),
        'conclusion': c[:180] if good(c) else '',
        'path': x.get('path') or '',
    })

out = {'generated': '2026-10-24', 'source': '宝锐产品资料/验证数据（165 份 PDF）',
       'note': '系列级证据：同一系列下多个尾号共用；不得据系列推断具体尾号一定有验证；结论为空=需读原件',
       'series': {}}
for sku, fs in sorted(series.items()):
    c = {}
    for f in fs:
        c[f['type']] = c.get(f['type'], 0) + 1
    out['series'][sku] = {'count': len(fs), 'types': c,
                          'files': sorted(fs, key=lambda y: (TYPES.index(y['type']), y['file']))}

for user in sys.argv[1:] or ['刘子研']:
    d = os.path.join(PACK, user)
    if not os.path.isdir(d):
        print('跳过（无数据包）', user)
        continue
    p = os.path.join(d, '07_产品验证资料.json')
    json.dump(out, open(p, 'w', encoding='utf-8'), ensure_ascii=False, indent=0)
    print('写入', p, '%.0f KB｜系列 %d' % (os.path.getsize(p) / 1024, len(out['series'])))
