# ERP文件列结构差异（旧 vs 新）

## 关键区别

| 特性 | 旧ERP (`erp销售订单_20260328_*.xlsx`) | 2024/2025全年订单 | 新订单 (`2026年1-6月订单.xlsx`) |
|------|--------------------------------------|-----------------|--------------------------------|
| 行数 | 16,096行 | ~7K行 | ~16,600行 |
| 区域列 | Col22=区域#（仅5大区） | Col23=区域#（5大区） | **Col5=区域**（23细分区域） |
| 产品过滤 | Col24=产品类型# = "核酸诊断" | Col25=产品大类# = "核酸诊断" | Col25=产品大类# = "核酸诊断" |
| 客户列 | Col0 | Col3 | Col4 |
| 销售员列 | Col2 | Col4 | Col6 |
| 金额列 | Col3=价税合计 | Col11=价税合计 | Col13=价税合计 |
| 日期列 | Col1=合同日期 | Col0=合同日期 | Col0=合同日期 |
| 单据类型 | Col5 | Col1 | Col1 |
| 是否赠品 | Col13 | Col13 | Col15 |

## 过滤诊断原料的正确方式

**旧ERP**：`str(row[24]).strip() == '核酸诊断'`

**2024/2025全年订单**：`str(row[25]).strip() == '核酸诊断'`（用产品大类#）

**新订单(2026)**：`str(row[25]).strip() == '核酸诊断'`（产品大类#，不是产品类型#！）

❌ 错误：用 Col24 过滤新文件 → 只能匹配到 `核酸扩增原料`，遗漏 NGS/提取试剂等子类
✅ 正确：用 Col25 过滤 → `核酸诊断` 大类包含所有子类

## 区域数据提取

**Col5（新文件独有）包含23个细分区域**：大客户1、大客户2、北京、华北、华南1、华南2、华南3、上海1、上海2、浙江、江苏、福建、华中、华西 + 科研子区域

**⚠️ Col5直接聚合的陷阱**：Col5聚合的总额（~4585w H1）远高于诊断原料销售部月度报告（~2140w H1），因为Col5包含**所有部门**的核酸诊断产品订单（含生命科学部等），不仅仅是诊断原料销售部（大客户部+销售拓展部）。

**正确的区域数据来源**：用销售员归属来细分区域，而非Col5直接聚合。build_diag.py 的做法：建立销售员→区域映射 → 按销售员聚合订单 → 归入对应区域。

## 宝锐系内部采购排除

三家关联公司：珠海宝锐生物科技、珠海横琴宝锐生物科技、珠海宝泰仪生物科技 —— 内部采购不计入销售额。build_diag.py 重构数据时必须排除。当前累计约35.9w（全部来自刘新元，归属"全国"区域）。

## 2024年数据矫正（关键）

**致命Bug**: ERP16K (`erp销售订单_20260328_*.xlsx`) 中**2024年数据=0**。build_diag.py 用 month_range 将2024年切分为二段——1-4月用2024全年订单、5-12月用ERP16K——导致5-12月数据全部遗漏，系统显示3702w而实际应为3448w。

矫正：2024年全部从 `2024全年订单.xlsx` 聚合（全部产品，排除测试/赠品 = 3448w，核酸诊断口径 = 3359w）。校验：ERP16K中 `isinstance(row[1], datetime) and row[1].year == 2024` 应为0行。

## build_diag.py 的 proc() 参数速查

```python
# 2024全年订单: dt=0, tp=1, cust=3, sp=4, amt=11, cat=25, gift=13
# 旧ERP (16K):   dt=1, tp=5, cust=0, sp=2, amt=3,  cat=24, gift=13
# 2025全年订单:  dt=0, tp=1, cust=3, sp=5, amt=12, cat=26, gift=14
# 新订单 (2026):  dt=0, tp=1, cust=4, sp=6, amt=13, cat=25, gift=15
```
