# 数据页新增「派生分类维度」——关键词规则设计 + 互斥校验

场景：用户说「把 X 类要求分单独类别统计」「再单列一类」。X 不是数据里已有的字段值，而是要从标题/正文里认出来的**派生维度**。

## 1. 先量再定规则，不要凭想象切分
用 Python 对数据源的 items 跑候选关键词组，逐组打印「新增命中数 + 这些条目原本的类别分布」，再抽样本人工核对。规则放宽后误抓会成片出现，每改一次都要重新抽样复核。

## 2. 两级规则：强词含备注，弱词只看标题正文
- **强词**（显式业务表述，如 NA 级 / 核酸残留 / 无核酸 / 去核酸 / RNase / DNase / 人源·宿主残留）→ 匹配 `标题 + 正文 + 备注`。
- **弱词**（菌名 / 背景 / 起线 / NTC / 无模板这类泛化词）→ **只匹配标题 + 正文**。
- WHY：备注字段常是 ERP 原始备注原文，会把同一张订单里无关的要求一起带进来，用弱词扫备注必然误抓。

## 3. 语境排除
标题属于别的语境时必须拦掉：例「标题含 标签 / 中文名称 / logo，且正文无 控制·质检·残留·背景·起线」→ 那是标签要求，不是残留要求。写完打印被排除的条目清单核一遍。

## 4. 互斥还是叠加，必须显式定，并在页面里写明
- 「分单独类别」= 从原类别**移出**、成为独立互斥类别（原类别计数要减掉）。
- 保留原类别 + 另加标记 = 交叉维度，页面要写清「不互斥」。
- 两种都可能被要：用户说「把残留在质量标签里的拿出来」时就是**移出**。页面每行给 `原：某类别` 小字，既互斥又可追溯，数据原文不动。

## 5. 硬校验：分桶求和必须等于总数
`新类别计数 + 其余各类计数之和 == 总条数`。这一条同时抓「重复计入」和「漏计」，比逐项核对快。渲染后用一句 JS 把芯片上的数字求和做断言，并在回复里报出这个等式。

## 6. 改统计口径时，检查有没有重复调整
同一处统计若分两次补丁调整（一次加在中间变量里、一次又加在 KPI 表达式里），会静默多算（实测「涉及类别数」被算成 9 而应为 8）。规则：**每个补丁后都读一次渲染出来的数字**，不要相信「公式看起来对」。
