# 官方月度报告数据提取（诊断原料）

## 文件来源

路径：`~/Desktop/Hermes输出-工作类/hermas工作台数据库/月度销售额数据/`

三个文件（按部门）：
- `1、2026上半年月度数据-诊断原料大客户销售部.xlsx`
- `2、2026上半年月度数据-诊断原料销售拓展部.xlsx`
- `3、2026上半年月度数据-生命科学销售部.xlsx`

每个文件含5个Sheet（生命科学部仅3个）。

## Sheet结构

### Sheet 1："1）年度指标达成情况"
部门级月度目标 vs 实际完成。结构：
- Row 4: `部门 | '' | '月份' | '1月' | '2月' | ... | '12月'`
- Row 5: `'大客户销售部' | '' | '月度目标' | 目标值1 | 目标值2 | ...`
- Row 6: `'' | '' | '实际完成' | 实际值1 | 实际值2 | ...`
- Row 7: `'' | '' | '达成率' | 比率1 | 比率2 | ...`

列映射：Col0=部门, Col2=标签, Col[2+i]=i月值（i从1开始, Col3=1月...Col8=6月）

### Sheet 2："2）过程指标（月度绩效）达成情况"
每人月度绩效明细。**两个部门列结构不同**：

**大客户部（9列）**：Col0=部门, Col1=姓名, Col2=拜访, Col3=测试总发放, Col4=NGS发放, Col5=反馈, Col6=反馈率, Col7=订单数, Col8=订单金额

**销售拓展部（11列）**：Col0=部门, Col1=姓名, Col2=拜访总数, Col3=NGS客户拜访数, Col4=测试发放数, Col5=NGS测试单, Col6=反馈数, Col7=反馈率, Col8=NGS采购单, Col9=订单数, Col10=订单金额

⚠️ 每个文件仅含当月数据（不是1-6月的全部），月度累计需要多个月份的文件。

### Sheet 5：近三年销售数据
部门级三年月度明细：
- Row 4/5/6: `'' | '部门名' | '2024/2025/2026年' | 1月值 | ... | 12月值`
- Row[1]=部门名, Row[2]=年份, Row[2+m]=m月金额

## 提取代码参考

```python
def parse_target_sheet(ws, data_start_row=4):
    """提取月度目标/实际/达成率"""
    result = {}
    for row in ws.iter_rows(min_row=data_start_row, max_row=data_start_row+3, values_only=True):
        label = str(row[2]).strip() if row[2] else ''
        if '目标' in label:
            for i in range(1, 7):
                result[f"{i}月"] = result.get(f"{i}月", {})
                result[f"{i}月"]['target'] = round(float(row[2+i])) if row[2+i] else 0
        elif '完成' in label or '实际' in label:
            for i in range(1, 7):
                result[f"{i}月"] = result.get(f"{i}月", {})
                result[f"{i}月"]['actual'] = round(float(row[2+i])) if row[2+i] else 0
    for m in range(1, 7):
        key = f"{m}月"
        if key in result:
            t, a = result[key].get('target', 0), result[key].get('actual', 0)
            result[key]['rate'] = round(a/t*100, 1) if t > 0 else 0
    return result

def parse_3year_sheet(ws, data_start_row=4):
    """提取三年逐月金额"""
    result = {}
    for row in ws.iter_rows(min_row=data_start_row, max_row=data_start_row+3, values_only=True):
        year = str(row[2]).strip() if row[2] else ''
        if '2024' in year or '2025' in year or '2026' in year:
            yr = year[:4]
            result[yr] = {}
            for m in range(1, 13):
                try: result[yr][f"{m}月"] = round(float(row[2+m]))
                except: result[yr][f"{m}月"] = 0
    return result
```

## 同比计算

从 `diag_dept_monthly.json` 直接计算：
```python
for dept in ['大客户部', '销售拓展部']:
    dm = d['depts'][dept]['monthly']
    h25 = sum(dm['2025'][f'{m}月'] for m in range(1,7))
    h26 = sum(dm['2026'][f'{m}月'] for m in range(1,7))
    yoy = round((h26-h25)/h25*100, 1)
```

## 2026 H1 实际数据（2026-07-04）

| 部门 | H1实际 | H1目标 | 达成率 | 同比(2025 H1) |
|------|--------|--------|--------|--------------|
| 大客户部 | 787w | 1532w | 51.4% | +10.7% |
| 销售拓展部 | 1354w | 1489w | 90.9% | +64.9% |
| 合计 | 2140w | 3020w | 70.9% | +39.8% |
