# 2024年数据矫正 + Patch工具陷阱

## 2024年ERP数据矫正（2026-07-04实战）

**问题**：build_diag.py输出2024年=3702w，用户反馈实际=3447w。

**根因**：build_diag.py对2024年分两段处理——1-4月用`2024全年订单.xlsx`，5-12月用ERP16K。但ERP16K中**2024年数据为0**（该文件实际覆盖2025-2026），导致5-12月段为空，后续手动调整又引入重复计算。

**矫正步骤**：
1. 从`2024全年订单.xlsx`直接聚合全部产品（排除测试/赠品，不限于"核酸诊断"）→ 3448w
2. 按销售员/区域/月度/客户四维同步更新
3. 验证：月度=销售员=区域三者必须完全一致（客户维度允许<2%集团聚合损耗）
4. 重建LTC/潜力股等派生数据

**关键文件差异**：
- `2024全年订单.xlsx`：全年3448w（权威源）
- `erp销售订单_20260328*.xlsx`：2024年数据=0（仅覆盖2025-2026）

## 王昕伟数据断层

王昕伟仅出现在2024全年订单文件中（ERP16K和2026文件均无其记录），build_diag.py遗漏其537w核酸诊断订单。修复：直接从2024订单文件按`Col4=王昕伟 + Col25=核酸诊断`提取，补入所有JSON。

## 黄明月2024年

黄明月2024年无诊断原料订单（两个ERP文件中均为0），2025年才接手大客户1。

## Patch工具 `\n` 转义陷阱

**症状**：patch修改HTML的`<script>`内JS代码后，`node --check`报`Unexpected token`。

**根因**：patch的`new_string`中真实换行符被序列化为字面`\\n`。

**修复**：
```python
import re
html = html.replace('\\n', '\n')  # 仅限<script>标签内
```

**预防**：每次patch修改JS代码后立即运行`node --check`验证。

## HTTP服务器僵尸检查

**症状**：`open`页面后空白，但JS语法/HTML结构/JSON数据全部正确。

**根因**：`python3 -m http.server`进程存在但不响应（`curl`返回`Empty reply from server`）。

**检查**：`curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:8765/"` → 非200则重启。

## 新ERP文件列结构（2026年）

| 列 | 旧ERP(16K) | 新ERP(2026H1) |
|----|-----------|--------------|
| 区域 | Col22=区域# (5大区) | **Col5=区域** (23细分) |
| 产品过滤 | Col24=产品类型#="核酸诊断" | **Col25=产品大类#**="核酸诊断" |
| 金额 | Col3 | Col13 |

⚠️ 新文件必须用Col25过滤诊断原料（Col24已细分为核酸扩增原料/NGS/提取试剂等）。Col5直接聚合会包含非诊断原料部门订单。
