#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""审核版升级：在 MiniMax 原报告上做「增量更新」，不动已验证的数据表。

改动清单（全部为增量，不改动已核对无误的统计数字）：
  ① 表1 文件信息：文件编号 / 版本 → 留占位，由业务部门与文控填写
  ② 表3 范围：适用产品 → 按真实产品线口径更新
  ③ 5.3 样本代表性：追加「模式性盲区」论证段（终端医院 0 样本属业务模式特征）
  ④ 新增第 13 章「调研后续跟踪与现状更新（2026-10）」：说明段 + 3 张空白跟踪表（待业务部门填）
  ⑤ 第 10 章末尾加一句指向第 13 章
输出：宝锐生物客户满意度调研报告-2026（ISO13485现场审核版）_修订版-A1.docx
"""
import os
import shutil
from copy import deepcopy
from datetime import datetime

from docx import Document
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.shared import Pt, RGBColor

SRC = ('/Users/liuxinyuan/.hermes/profiles/zone-b/cache/documents/'
       'doc_54c8ee1b61aa_宝锐生物客户满意度调研报告-2026（ISO13485现场审核版）.docx')
OUTDIR = '/Users/liuxinyuan/Desktop/Hermes输出-工作类/经营分析'
OUT = os.path.join(OUTDIR, '宝锐生物客户满意度调研报告-2026（ISO13485现场审核版）_修订版.docx')


def find_cell(doc, keyword, col=1):
    """在表格里找含关键词的行，返回该行第 col 个单元格。"""
    for t in doc.tables:
        for r in t.rows:
            cells = r.cells
            if len(cells) > col and keyword in cells[0].text:
                return cells[col]
    return None


def set_cell(cell, text):
    cell.text = text


def add_para(doc, text, bold=False, size=10.5, style=None, space_after=6):
    p = doc.add_paragraph(style=style)
    run = p.add_run(text)
    run.bold = bold
    run.font.size = Pt(size)
    p.paragraph_format.space_after = Pt(space_after)
    return p


def add_table(doc, header, rows, widths=None):
    t = doc.add_table(rows=1, cols=len(header))
    t.style = 'Table Grid'
    for i, h in enumerate(header):
        c = t.rows[0].cells[i]
        c.text = ''
        r = c.paragraphs[0].add_run(h)
        r.bold = True
        r.font.size = Pt(9.5)
    for row in rows:
        cells = t.add_row().cells
        for i, v in enumerate(row):
            cells[i].text = ''
            rr = cells[i].paragraphs[0].add_run(str(v))
            rr.font.size = Pt(9.5)
    return t


def main():
    os.makedirs(OUTDIR, exist_ok=True)
    doc = Document(SRC)
    chg = []

    # ① 文件信息占位
    c = find_cell(doc, '文件编号')
    if c is not None:
        set_cell(c, '（留空，由业务部门 / 文控填写）')
        chg.append('表1 文件编号 → 留空占位')
    c = find_cell(doc, '版本 / 修订状态') or find_cell(doc, '版本')
    if c is not None:
        set_cell(c, '（留空，由文控填写）　修订说明：本次为增量修订——新增第 13 章“调研后续跟踪与现状更新”，'
                    '据业务现状更新第 2 章“适用产品”口径与 5.3 代表性论证；原有统计量未作任何改动。')
        chg.append('表1 版本/修订状态 → 留空 + 修订说明')

    # ② 范围：适用产品
    c = find_cell(doc, '适用产品')
    if c is not None:
        set_cell(c, '诊断原料与科研试剂两类业务：\n'
                    '（1）分子诊断原料：DNA/RNA 聚合酶与逆转录酶、UNG/UDG、RNase 抑制剂、'
                    'qPCR/RT-qPCR 预混液（含全预混、直扩、多重/熔解曲线）、恒温扩增（LAMP）原料、'
                    '冻干体系（含冻干保护剂）、引物/探针及配套缓冲液；\n'
                    '（2）生命科学科研试剂：面向高校与科研院所的分子生物学试剂（含 mRNA 相关产品线）。')
        chg.append('表3 适用产品 → 更新为真实产品线口径')

    # ③ 5.3 代表性补段（插入到 5.3 标题段之后的第一段之前）
    target = None
    for i, p in enumerate(doc.paragraphs):
        if p.text.strip().startswith('5.3') and '代表性' in p.text:
            target = i
            break
    if target is not None:
        anchor = doc.paragraphs[target]
        newp = add_para(doc, '', size=10.5)
        anchor._p.addnext(newp._p)
        r = newp.add_run(
            '补充说明（2026-10 修订）：本公司在分子诊断产业链中承担“上游原料供应商”角色，'
            '主要客户为体外诊断试剂生产企业与第三方检验机构，其研发、生产与质量岗位直接决定原料选型与验证，'
            '因此样本中研发类岗位占比 77.9% 与业务模式一致，属结构性特征而非抽样偏差。'
            '终端医院／临床检验科室在本次抽样中为 0 例，系取样框架以“直接采购与在谈客户”为口径所致；'
            '该群体对我方产品为间接使用，其体验经下游试剂厂传递。'
            '此覆盖缺口已在第 8 章风险项 RK-4 记录，并按第 13 章空白表由责任部门提出补采计划。')
        r.font.size = Pt(10.5)
        chg.append('5.3 追加“模式性盲区”论证段')

    # ④ 第 10 章末尾指向第 13 章
    hit10 = False
    for p in doc.paragraphs:
        if p.text.strip().startswith('10.2') or '管理体系改进项' in p.text:
            hit10 = True
            continue
        if hit10 and p.text.strip().startswith('11'):
            br = add_para(doc, '', size=10.5)
            p._p.addprevious(br._p)
            r = br.add_run('说明：本章措施的执行状态与超期预警，见第 13 章“调研后续跟踪与现状更新（2026-10）”。')
            r.font.size = Pt(10.5)
            chg.append('第10章末尾加→第13章指引')
            break

    # ⑤ 新增第 13 章
    doc.add_page_break()
    h = doc.add_paragraph()
    hr = h.add_run('13　调研后续跟踪与现状更新（2026-10）')
    hr.bold = True
    hr.font.size = Pt(14)

    add_para(doc, '本章为 2026-10 增量新增，用于证明组织在首次调研（2026-03-16～04-03）之后仍在“持续地”'
                  '监视与评审顾客反馈（ISO 13485:2016 7.2.1）。本章表格由各责任部门据实填写并签署，'
                  '填写完成后与本报告一并作为现场审核证据提交。', size=10.5)

    add_para(doc, '13.1　前期风险项与改进需求的跟踪状态', bold=True, size=11.5)
    add_para(doc, '填写说明：状态列填“已完成 / 进行中 / 未启动 / 关闭（不适用）”；完成情况须给出可核验的客观证据'
                  '（文件编号、记录编号、会议纪要或台账日期）。', size=9.5)
    add_table(doc, ['编号', '来源章节', '问题 / 改进项', '责任部门', '当前状态',
                    '已完成动作与证据（文件编号/记录号）', '完成时间', '部门签署'],
              [['C-1', '6.7 / RK-1', '批次一致性与稳定性（批间差）反馈', '质量部 / 研发部', '', '', '', ''],
               ['C-2', '6.2 / RK-2', '产品数据与资料更新不及时（38.3% 客户提出）', '市场部 / 技术支持部', '', '', '', ''],
               ['C-3', '6.4 / 表 23', '价格感知偏高（38.9% 客户列为首要不满意）', '营销中心 / 大客户部', '', '', '', ''],
               ['C-4', '6.2', '技术支持“有效解决问题”能力（33.0%）', '技术支持部', '', '', '', ''],
               ['C-5', '6.2', '技术支持“准确推荐适用产品”（22.8%）', '技术支持部 / 销售部', '', '', '', ''],
               ['C-6', 'RK-3', '低分客户（≤6 分）逐例闭环处置', '客户质量 / 大客户部', '', '', '', ''],
               ['C-7', 'RK-4', '终端用户（医院/临床检验科）覆盖缺口补采', '市场部', '', '', '', '']],
              )
    add_para(doc, '', size=6)

    add_para(doc, '13.2　本次调研成果向体系文件的转化状态', bold=True, size=11.5)
    add_table(doc, ['转化对象', '应转化内容', '目标文件 / 编号', '状态', '签署 / 日期'],
              [['顾客反馈监视程序', '本报告确立的样本有效性判定与统计口径', '', '', ''],
               ['纠正措施程序（8.5.2）', '第 10.1 章纠正措施输入 C-1～C-4', '', '', ''],
               ['风险管理（7.1）', '第 8 章风险项 RK-1～RK-4 纳入风险管理输入', '', '', ''],
               ['产品与市场策划', '6.9 / 16 题热点方向（多重 PCR、冻干等）纳入产品规划输入', '', '', '']])
    add_para(doc, '', size=6)

    add_para(doc, '13.3　覆盖缺口补采计划', bold=True, size=11.5)
    add_table(doc, ['补采对象', '拟采样方式', '样本量目标', '计划完成时间', '责任人', '状态'],
              [['终端医院 / 临床检验科室', '', '', '', '', ''],
               ['采购岗位（占比偏低）', '', '', '', '', ''],
               ['未覆盖区域重点客户', '', '', '', '', '']])
    add_para(doc, '', size=6)
    add_para(doc, '注：本章表格为空白待填，由责任部门填写并签署后生效；未完成项不构成对前文统计结论的影响——'
                  '前文统计结论以 2026 年首次调研样本为基础，本章仅记录后续监视活动。', size=9.5)

    doc.save(OUT)
    print('✅ 审核版已生成:', OUT)
    print('   改动 %d 处:' % len(chg))
    for x in chg:
        print('     ·', x)
    d2 = Document(OUT)
    print('   复核：段落 %d（原 189）｜ 表格 %d（原 65）' % (len(d2.paragraphs), len(d2.tables)))


if __name__ == '__main__':
    main()
