#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""生成客观版数据汇总（新文件名，避免 iCloud 同步覆盖）：
   - 2026 年统一取 1–10 月（截至 10-20）
   - 去掉汇报口吻与主观论断，改为客观陈述
"""
import os
import shutil

from docx import Document
from docx.shared import Pt

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


def set_para(old, new):
    for p in d.paragraphs:
        if p.text.strip().startswith(old):
            for r in list(p.runs)[1:]:
                r._element.getparent().remove(r._element)
            if p.runs:
                p.runs[0].text = new
            else:
                p.add_run(new)
            return True
    print('MISS:', old[: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 月　｜　经营数据汇总')
for row in d.tables[0].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个月改善闭环跟进中”。')

# 删一句话总结，追加第 6 条
for p in list(d.paragraphs):
    if p.text.strip().startswith('一句话给总经理'):
        p._p.getparent().remove(p._p)
five = next(p for p in d.paragraphs if p.text.strip().startswith('5. 客诉'))
sixp = d.add_paragraph()
sixp.paragraph_format.space_after = Pt(4)
r = sixp.add_run('6. 特殊要求：ERP 订单备注结构化提取 32 条，其中包装/标签 20 条、交付/物流 8 条、质检/文件 2 条、价格/账期 1 条、其他 1 条。')
r.font.size = Pt(10.5); r.font.name = '微软雅黑'
five._p.addnext(sixp._p)

# ── 二三六七 标题与注释
set_para('二、三年经营总览', '二、销售规模与月度分布')
set_para('注：金额为 ERP 订单“价税合计”', '注：金额为 ERP 订单“价税合计”，标准销售订单且非赠品；2026 年取数至 10 月 20 日，金额 46.33 万元；2024、2025 年为全年数。')
set_para('图 1　近三年销售额', '图 1　近三年销售额（万元）')
set_para('图 2　月度销售额对比', '图 2　月度销售额对比（万元）')
set_para('单位：万元。2024 年 8–9 月为全年低点', '单位：万元。2024 年 8–9 月为三年低点（0.08 / 0.25 万元）；2025 年 4 月单月 25.9 万元为三年最高；2026 年 8 月 0.02 万元、9 月为 0，10 月恢复至 2.59 万元。')
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('四、集团口径：今年增量其实来自基灵（西安）', '四、集团口径：西安单体与基灵分主体统计')
set_para('集团合计同比：2026 年 1–9 月 51.88',
        '按 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 万元）合计占年度目标 58.3%，为占比最高的两项。')
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]
vals = {'销售额（万元）': '46.33', '同比': '−56.4%', '订单数（笔）': '26', '单均金额（万元）': '1.78',
        '订单行（条）': '222', '赠品行（条）': '110', 'FMD 直扩占比': '53.5%'}
for row in t1.rows:
    k = row.cells[0].text.strip()
    if k in vals:
        cell_set(row, 3, vals[k])
cell_set(t1.rows[0], 3, '2026 年（1–10 月）')

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

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

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

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