# LeAudit 处理逻辑说明

> 描述 leaudit 引擎的完整流水线阶段，新老项目通用。

## 1. 主链概览

`leaudit` 的完整处理链不是单一 OCR 流程，而是一条完整评查流水线：

```text
文件输入
  → normalize
  → rules resolve
  → extract
  → determine phase
  → evaluate
  → rescue
  → persist / adapt result
```

## 2. 各阶段说明

### 2.1 normalize

职责：

- 文档解析
- OCR 或文本提取
- 文档分类
- 案卷分段
- 印章/签名增强
- 统一形成归一化结果对象

产出：

- `normalized_doc`
- 原始文本
- 分类结果
- 视觉清单（VisualManifest）
- 子文档结构

### 2.2 rules resolve

职责：

- 按输入文档类型或分类结果找到 DSL 规则文件
- 解析成 `RulesFile`

leaudit-platform 做法：

- 由 bridge 层显式完成规则映射（`rules_loader.py`）
- 规则从 OSS 下载到本地临时文件后加载
- 支持 `leaudit_rule_type_bindings` 表查绑定 → `leaudit_rule_versions.oss_url` 下载

### 2.3 extract

职责：

- 按 schema 分组抽取字段
- 进行 null-field retry / deep retry
- hydrate 类型化
- multi-entity 展开
- derived 字段计算
- post-hoc grounding
- seal/signature 补充抽取

产出：

- 结构化字段
- 多实体字段
- derived 字段
- 抽取错误列表

### 2.4 determine phase

职责：

- 识别文档属于 `draft` 还是 `executed`
- 决定后续哪些规则参与执行

注意：

- `leaudit` 的策略是先用 `executed` 全量抽取，再反向判定 phase
- 接入时不要外层再强行重复做另一套 phase 判定逻辑

### 2.5 evaluate

职责：

- 执行 DSL rules
- 经过 phase filter、activate_if、confidence gate
- 逐条 rule 输出 pass/fail/skip
- 计算分数、失败原因、整改建议

产出：

- 文档级评查结果
- 规则级结果列表

### 2.6 rescue

职责：

- 对失败规则做补救判定
- 可能把失败翻转为通过

注意：

- rescue 后的最终聚合结果才是业务最终结果
- 落库时要认最终结果，不要混用 pre-rescue 和 post-rescue 状态

## 3. Bridge 层的输入要求

bridge 层（`fastapi_modules/fastapi_leaudit/leaudit_bridge/`）至少要准备：

- `document_id`
- 可读的本地文件路径
- 对应 `RulesFile`
- OCR/LLM/VLM 客户端
- 结果落库适配器（`storage_adapter.py`）

## 4. Bridge 层的输出

统一整理出：

- 文档级总结果：`total_score` / `passed_count` / `failed_count` / `skipped_count` / `timing`
- 规则级结果：`rule_id` / `rule_name` / `passed` / `status` / `score` / `risk` / `message` / `remediation`
- 抽取结果：`extraction_fields` / `derived_fields` / `multi_entity`

## 5. 对接时的关键约束

### 文件路径

`leaudit` 许多逻辑默认依赖本地文件路径，因此 bridge 层必须保证：

- 文档能以本地文件形式供其读取
- 如果文件在对象存储中，需先下载到临时路径

### 配置统一

不要让 `leaudit` 在项目里形成另一套独立配置真相源。

由项目统一注入：

- OCR 配置（`app.toml` → `fastapi_admin.config.OCR_*`）
- LLM 配置（`app.toml` → `fastapi_admin.config.LLM_*`）
- VLM 配置（`app.toml` → `fastapi_admin.config.VLM_*`）
- 并发控制配置

### 存储隔离

- `leaudit` 内部计算
- bridge 适配后写入 `leaudit_*` 统一结果表
- 不使用 leaudit 自己的默认 `documents/extractions/evaluations` 表
