#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""把《呈总经理》版改成客观数据汇总：2026 年取 1–10 月，去掉汇报口吻与主观论断。"""
import os
import shutil

from docx import Document
from docx.shared import Pt

P = '/Users/liuxinyuan/Desktop/Hermes输出-工作类/销售分析/西安佰奥莱博_近三年经营简报_呈总经理_20261021.docx'
shutil.copy(P, P.replace('.docx', '_bak_before_obj.docx'))
d = Document(P)


def set_para(old_prefix, new_text, size=None, bold=None):
    for p in d.paragraphs:
        if p.text.strip().startswith(old_prefix):
            for r in list(p.runs)[1:]:
                r._element.getparent().remove(r._element)
            first = p.runs[0] if p.runs else p.add_run('')
            first.text = new_text
            if size:
                first.font.size = Pt(size)
            if bold is not None:
                first.font.bold = bold
            return True
    print('MISS para:', old_prefix[:40])
    return False


def cell_set(row, col, text):
    c = row.cells[col]
    for r in list(c.paragraphs[0].runs)[1:]:
        r._element.getparent().remove(r._element)
    if c.paragraphs[0].runs:
        c.paragraphs[0].runs[0].text = text
    else:
        c.paragraphs[0].add_run(text)


# 标题与基本信息
set_para('近三年经营情况简报', '近三年经营数据汇总')
set_para('2024 — 2026 年 9 月', '2024 — 2026 年 10 月　｜　经营数据汇总')
t0 = d.tables[0]
for row in t0.rows:
    if row.cells[0].text.strip() == '数据区间':
        cell_set(row, 1, '2024-01-01 至 2026-10-20（ERP 订单明细，价税合计）')

# 一、数据要点
set_para('一、三年概述', '一、数据要点')
set_para('结论一｜', '1. 销售额：2024 年 39.78 万元；2025 年 109.64 万元，同比 +175.6%；2026 年 1–10 月 46.33 万元，同比 −56.4%（2025 年同期 106.36 万元）。')
set_para('结论二｜', '2. 产品结构：FMD 直扩系列占销售额比例 2024 年 6.8%、2025 年 57.1%、2026 年 1–10 月 53.5%；主销货号由 FM513 转为 FMD5084-000901 与 FMD2011。')
set_para('结论三｜', '3. 月度节奏：2026 年 8 月销售额 0.02 万元、9 月为 0，10 月为 2.59 万元；8–9 月有测试单、无成交。原因在现有活动记录中未说明，需销售确认。')
set_para('结论四｜', '4. 应收：截至 2026-10-21，应收 27.17 万元，其中逾期 18.19 万元（占 66.9%），最长逾期 62 天；2026 年 10 月回款为 0。')
set_para('结论五｜', '5. 客诉：近两年 5 起，4 起已关闭，1 起（2026-05-18 FM5144-007701 漏液）状态为“3个月改善闭环跟进中”。')
# 删掉“一句话给总经理”段
for p in list(d.paragraphs):
    if p.text.strip().startswith('一句话给总经理'):
        p._p.getparent().remove(p._p)
# 新增第 6 条：特殊要求（插在结论五之后）
anchor = next(p for p in d.paragraphs if p.text.strip().startswith('5. 客诉'))
newp = d.add_paragraph()
newp.paragraph_format.space_after = Pt(4)
r = newp.add_run('6. 特殊要求：ERP 订单备注结构化提取 32 条，其中包装/标签 20 条、交付/物流 8 条、质检/文件 2 条、价格/账期 1 条、其他 1 条。')
r.font.size = Pt(10.5); r.font.name = '微软雅黑'

# 二、三、六、七 标题与口径
set_para('二、三年经营总览', '二、销售规模与月度分布')
set_para('注：金额为 ERP 订单“价税合计”', '注：金额为 ERP 订单“价税合计”，标准销售订单且非赠品；2026 年取数至 10 月 20 日，金额 46.33 万元；2024、2025 年为全年数。')
set_para('图 1　近三年销售额', '图 1　近三年销售额（万元）')
set_para('图 2　月度销售额对比', '图 2　月度销售额对比（万元）')
set_para('三、产品结构：从通用预混到直扩冻干', '三、产品结构与货号变化')
set_para('图 3　FMD 直扩系列占比', '图 3　FMD 直扩系列占销售额比例')
set_para('结构判断：', '数据观察：')
set_para('1）客户已把 RNA 直扩', '1）2025 年 FMD5084-000901（RNA 直扩）与 FMD2011（DNA 直扩）合计占销售额 57.1%，取代 FM513 成为主销；2）常规液体预混（FM513、FM5144、FM507）仍在采购，2026 年 1–10 月合计占 26.3%；3）2026 年 7 月完成 FMD5084-000901 → FMD5084-007703-DB 的编码与名称变更，客户在我方体系上存在版本迭代，具体绑定程度需结合客户确认。')

# 四、集团口径：去口语化
set_para('集团口径只回答一个问题', '按 1–10 月同口径，西安佰奥莱博 106.36 万元 → 46.33 万元（−56.4%）；基灵三家 0.27 万元 → 17.40 万元；集团合计 106.63 万元 → 63.73 万元（−40.2%）。集团口径降幅比西安单体小 16.2 个百分点。')
set_para('判断：', '数据观察：')
set_para('1）集团口径没有单体那么差', '1）集团口径同比 −40.2%，西安单体 −56.4%；对外引用集团数据时应注明口径与成员范围。')
set_para('2）基灵的量不是新增需求', '2）基灵 2026 年 17.40 万元中，85.6% 使用定制码，对应我方 FMD5084-000901、FM5144-007701-TP、FMD2011；是否与西安属同一终端项目，需销售确认。')
set_para('3）两个抬头必须分账考核', '3）两个抬头建议分账统计，避免同一业务在两地重复计入销售额。')

# 五、风险事项
set_para('五、风险台账（三项，按紧急度排序）', '五、风险事项')
set_para('5.1 回款：逾期占七成', '5.1 回款：逾期 18.19 万元，占应收 66.9%')
set_para('5.2 客诉：5 起，1 起未闭环', '5.2 客诉：5 起，1 起未闭环')
set_para('5.3 履约：32 条特殊要求', '5.3 特殊要求：32 条，包装与单据类为主')
set_para('2026-05-18 FM5144-007701 漏液客诉', '2026-05-18 FM5144-007701 漏液客诉状态为“3个月改善闭环跟进中”，为本期唯一未闭环客诉（见第七节建议事项）。')
set_para('要求条目来源：', '要求条目来源：ERP 订单备注结构化提取（32 条，状态均为“已生效”）；该客户 16 位联系人、多项目并行，要求需随单执行，不宜依赖人工记忆。')

# 六、商机
set_para('六、机会盘点：在手商机', '六、在手商机与目标')
set_para('另有“委托批量生产冻干球”', '另有“委托批量生产冻干球”商机（需求确认阶段，未设年度目标）。2026 年 1–10 月实际销售额 46.33 万元，对照年度目标 120 万元，完成率 38.6%；按商机台账，FMD5084（40 万元）与 FMD2011（30 万元）为年度目标占比最高的两项，两项完成情况决定全年达成。')
set_para('2027 目标建议（待拍板）', '2027 年目标测算（供参考）：')
set_para('以 2025 年峰值 109.64 万元为基准', '以 2025 年 109.64 万元为基准，2027 年保底值 87.71 万元（2025 年的 80%）、目标值 109.64 万元（与 2025 年持平）。测算前提为存量项目恢复季度采购、回款正常；该值为测算结果，需与部门年度目标对齐后确定。')

# 七、建议事项
set_para('七、行动建议（主责唯一，可按此考核）', '七、建议事项')

# 八、口径
set_para('1）销售额与订单：', '1）销售额与订单：ERP 销售订单导出——2024 全年订单、2025 全年订单（Sheet1）、销售订单_20260101-20261020；金额口径为“价税合计”，按客户名称精确匹配“西安佰奥莱博生物科技有限公司”，标准销售订单且非赠品。')
set_para('2）2026 年 1–9 月为 9 月 28 日止', '2）2026 年取数至 10 月 20 日，销售额 46.33 万元；应收账龄基准日 2026-10-21，两者时点不同，不互相替代。')

# 表 1（规模）
t1 = d.tables[1]
for row in t1.rows:
    k = row.cells[0].text.strip()
    if k == '销售额（万元）':
        cell_set(row, 3, '46.33（1–10 月）')
    elif k == '同比':
        cell_set(row, 3, '−56.4%')
    elif k == '订单数（笔）':
        cell_set(row, 3, '26')
    elif k == '单均金额（万元）':
        cell_set(row, 3, '1.78')
    elif k == '订单行（条）':
        cell_set(row, 3, '222')
    elif k == '赠品行（条）':
        cell_set(row, 3, '110')
    elif k == 'FMD 直扩占比':
        cell_set(row, 3, '53.5%')
cell_set(t1.rows[0], 3, '2026 年（1–10 月）')

# 表 2（月度）
t2 = d.tables[2]
for row in t2.rows:
    if row.cells[0].text.strip() == '2026':
        cell_set(row, 10, '2.6')
        cell_set(row, 11, '—')
        cell_set(row, 12, '—')

# 表 3（货号）
t3 = d.tables[3]
vals = [('FMD5084-000901', '15.30'), ('FMD2011', '9.20'), ('FM5144-007701-TP', '8.07'),
        ('FM513', '7.61'), ('FM5144', '2.55')]
for i, (sku, amt) in enumerate(vals, start=1):
    cell_set(t3.rows[i], 5, sku)
    cell_set(t3.rows[i], 6, amt)

# 表 7（客诉状态）
t7 = d.tables[7]
for row in t7.rows:
    if row.cells[0].text.strip() == '2026-05-18':
        cell_set(row, 2, '3个月改善闭环跟进中')

d.save(P)
print('SAVED', P, os.path.getsize(P))
