## 批次状态机

- **DDS-Section**: 5.2 批次状态机
- **DDS-Lines**: L362-L387

### Extract

#### 状态枚举

| 状态 | 说明 | 备注 |
|------|------|------|
| `CREATED` | 批次已创建 | 初始状态 |
| `UPLOADED` | 文件上传完成 | |
| `PARSING` | 正在解析 | |
| `PARSED` | 解析完成 | |
| `NORMALIZING` | 正在标准化 | |
| `NORMALIZED` | 标准化完成 | |
| `MATCHING` | 正在去重/链路合并 | |
| `MATCHED` | 去重/链路完成 | |
| `RULE_APPLYING` | 正在应用规则 | |
| `PREVIEW_READY` | 规则映射完成，可预览 | 用户可在此阶段查看预览结果、人工确认去重 |
| `IMPORTING` | 正在导入 | 用户确认后触发 |
| `IMPORT_SUCCESS` | 全部导入成功 | 终态 |
| `PARTIAL_FAILED` | 部分失败 | 可重试 |
| `IMPORT_FAILED` | 全部失败 | 可重试 |
| `RETRYING` | 重试中 | |

#### 状态转换规则

```
[*] → CREATED: 创建批次
CREATED → UPLOADED: 文件上传完成
UPLOADED → PARSING: 触发解析
PARSING → PARSED: 解析完成
PARSING → UPLOADED: 解析失败（回退）
PARSED → NORMALIZING: 触发标准化
NORMALIZING → NORMALIZED: 标准化完成
NORMALIZED → MATCHING: 触发去重/链路
MATCHING → MATCHED: 去重/链路完成
MATCHED → RULE_APPLYING: 触发规则映射
RULE_APPLYING → PREVIEW_READY: 规则映射完成
PREVIEW_READY → IMPORTING: 用户确认导入
IMPORTING → IMPORT_SUCCESS: 全部成功
IMPORTING → PARTIAL_FAILED: 部分失败
IMPORTING → IMPORT_FAILED: 全部失败
PARTIAL_FAILED → RETRYING: 用户重试
IMPORT_FAILED → RETRYING: 用户重试
RETRYING → IMPORT_SUCCESS: 重试成功
RETRYING → PARTIAL_FAILED: 仍有失败
```

#### 实现要点

- 解析失败时状态回退至 `UPLOADED`，记录错误信息
- `PREVIEW_READY` 是用户交互节点，用户可查看预览结果和人工确认去重
- 失败状态支持重试，不需要整批重做
- 状态变更必须记录到 `audit_logs` 表
