# 从原始数据源完整重建 JSON 数据文件

## 触发条件
- 用户说"根据原始数据更新所有数据"
- 用户提供 `销售分析/` 目录路径
- 需要从零重建所有派生 JSON（而非增量更新单个文件）

## 数据源目录
`~/Desktop/Hermes输出-工作类/销售分析/`

### 核心源文件

| 文件 | 格式 | 内容 |
|------|------|------|
| `2026订单分析/2024全年订单.xlsx` | 2列透视表 | 合同月份 + 价税合计（2024年月度总额） |
| `2026订单分析/2025全年订单.xlsx` | 同上 | 2025年月度总额 |
| `2026订单分析/2026年1-6月订单.xlsx` | 同上 | 2026年1-6月月度总额 |
| `客户分析报告_2024-2026.xlsx` | 多Sheet | 集团年度汇总、Top30、年度趋势等 |
| `工作汇报分析_2026年1-5月.xlsx` | 多Sheet | 全员销售明细、部门月度汇总 |
| `工作汇报分析_2026年3-5月.xlsx` | 多Sheet | 全员排名（含3-5月月度明细） |

### 文件列结构（2024/2025全年订单）
```
Col0: 合同月份 (2024-01...2024-12)
Col1: 求和项:价税合计2 （浮点数）
```
- 无表头行标记，Row2开始是数据
- 行数 = 12月（2024）/ 12月（2025）/ 6月（2026 H1）

### 客户分析报告 - 集团年度汇总 Sheet
```
Col0: 集团简称
Col1: 部门（大客户销售部/销售拓展部/生命科学销售部）
Col2-5: 2024正常/测试/赠品/售后
Col6-9: 2025正常/测试/赠品/售后
Col10-13: 2026正常(1-5月)/测试/赠品/售后
Col14: 2026年化预估
Col15: 2025→2026年化增长率
```
注意：2026数据仅覆盖1-5月，不含6月。

### 工作汇报分析 - 部门月度汇总 Sheet
```
Col0: 部门（大客户部/生命科学销售部/销售拓展部）
Col1-5: 1月-5月金额
Col6: 合计
Col7: 占比
```
- 1-5月数据，不含6月
- 部门名可能缩写（大客户·大客户部、拓展·销售拓展部）

## 重建流程

### Step 1: 提取月度总额 → diag_monthly.json
```python
# 从三个订单文件提取，格式统一为 [{"month":"2024-01","amount":3234528.38},...]
# 使用 openpyxl load_workbook(read_only=True, data_only=True)
# 按 month 排序
```

### Step 2: 提取客户数据 → diag_customers.json
```python
# 从客户分析报告_集团年度汇总 sheet
# 2024 = Col2+3+4+5（正常+测试+赠品+售后）
# 2025 = Col6+7+8+9
# 2026 = Col10+11+12+13（仅1-5月）
# 输出: [{"name":"圣湘集团","dept":"大客户销售部","y2024":...,"y2025":...,"y2026":...,"amount":...},...]
```

### Step 3: 提取部门区域 → diag_regions.json
```python
# 从客户数据按 dept 聚合
# dept 映射: 大客户销售部→大客户部, 销售拓展部→销售拓展部, 生命科学销售部→生命科学销售部
# 输出: [{"name":"大客户部","amount":...,"customer_count":...},...]
```

### Step 4: 提取人员数据 → diag_salespeople.json + diag_kpis.json
```python
# 从 工作汇报分析_2026年1-5月 → 全员销售明细 sheet
# 每行: 排名, 姓名, 部门, 1月, 2月, 3月, 4月, 5月, 合计, 年度目标, 备注
# 部门名需规范化：大客户部/拓展/生命科学等
# 保留旧 diag_salespeople.json 中的 y2024/y2025 数据（原始文件无此数据）
```

### Step 5: 重建部门月度 → diag_dept_monthly.json
```python
# 2024/2025: 保留旧数据（原始文件中无部门月度明细）
# 2026 Jan-May: 从工作汇报分析_部门月度汇总 提取
# 2026 Jun: 从 diag_process_kpis.json 提取（summary.amount）
# 生命科学销售部: 2024/2025填0（旧数据中无此部门历史）
```

### Step 6: 重建汇总 → diag_summary.json
```python
# total_revenue = y2024 + y2025 + y2026
# customers统计: active(y2026>0) / at_risk(y2026=0且y2025>0) / dormant(其他)
# h1_2026: 从 diag_dept_monthly 计算部门actual，从 diag_monthly_targets 取target
# process_jun: 从 diag_process_kpis 复制
```

### Step 7: 更新月度目标实际值 → diag_monthly_targets.json
```python
# 合计 actuals: 从 diag_monthly.json H1 数据更新
# 部门 actuals: 从 diag_dept_monthly.json 2026 数据更新
# rate = actual / target * 100
```

## 交叉验证清单

重建完成后必须执行：
- `diag_monthly.amount` H1合计 == `diag_summary.h1_2026.合计.actual`
- `diag_summary.total_revenue` == `diag_monthly` 三年总和
- `diag_monthly_targets.合计.actual` 各月 == `diag_monthly.amount` 对应月
- `diag_customers` 各年合计 ≤ `diag_monthly` 对应年（客户数据为子集）
- `diag_dept_monthly` 三部门合计 ≈ `diag_monthly`（允许生命科学部差异）

## 重要注意事项

1. **execute_code 沙箱无 openpyxl**：必须用 `terminal` 调用 `python3 -c "..."` 或 heredoc
2. **customer 2026 仅1-5月**：客户分析报告不含6月，与月度订单的总额会有差异
3. **保留旧数据**：对于原始文件未覆盖的维度（2024/2025部门月度、2024/2025个人年度），保留旧 JSON 中的值
4. **部门名映射**：原始文件中的部门名（大客户销售部）需映射到标准化名称（大客户部）
