222 lines
9.8 KiB
Markdown
222 lines
9.8 KiB
Markdown
# LeAudit 文档域表结构设计
|
||
|
||
> **状态**: 已落地到 `leaudit_platform` 数据库(17 张表,全中文注释)
|
||
> **设计基准**: `/home/wren-dev/Porject/leaudit/src/leaudit` 源码分析
|
||
|
||
## 1. 设计依据
|
||
|
||
本设计基于对 `leaudit` 源码的完整分析,对齐其真实的处理管线、数据模型和产出物类型。
|
||
|
||
### 1.1 LeAudit 处理管线(7 阶段)
|
||
|
||
```text
|
||
文件输入
|
||
→ Stage 1: Normalize(解析 → OCR → 分类 → 案卷分段 → 印章增强 → markdown 渲染)
|
||
→ Stage 2: Rules Resolve(加载 RulesFile)
|
||
→ Stage 3: Extract(字段抽取 → hydrate → multi-entity → derived → grounding)
|
||
→ Stage 4: Detect Phase(draft / executed 判定)
|
||
→ Stage 5: Evaluate(规则引擎 → 16 种 check 类型 → pass/fail/skip)
|
||
→ Stage 6: Rescue(失败规则补救:review → agent → pass/fail 翻转)
|
||
→ Stage 7: Finalize → Persist
|
||
```
|
||
|
||
### 1.2 LeAudit 自身存储模型(仅供参考,不做 leaudit-platform 真相源)
|
||
|
||
LeAudit 有一套自己的 SQLAlchemy ORM 表(`storage/models/`)。**leaudit-platform 不使用 LeAudit 的这套存储**。bridge 层(`storage_adapter.py`)已经绕过它,直接将结果写入 leaudit-platform 的 `leaudit_*` 表。
|
||
|
||
---
|
||
|
||
## 2. 设计原则
|
||
|
||
### 2.1 完全独立于业务表
|
||
|
||
所有 LeAudit 域表统一 `leaudit_*` 前缀,与老 `docauditai` 的 `documents` / `evaluation_points` 等表完全隔离。
|
||
|
||
### 2.2 数据库存索引,OSS 存真身
|
||
|
||
- OCR JSON、normalized JSON、markdown、页面图、裁切图 → OSS 文件
|
||
- 数据库只存元数据、状态、OSS 地址
|
||
|
||
### 2.3 一次执行一个 Run
|
||
|
||
每次文档进入 LeAudit 处理链,生成一条 `leaudit_audit_runs` 记录。支持重跑、版本回放、模型对比。
|
||
|
||
### 2.4 结果与产物解耦
|
||
|
||
- 结果表(rule_results / field_results)→ "这次跑出了什么"
|
||
- 产物表(artifacts)→ "这次跑的过程中生成了哪些文件"
|
||
|
||
---
|
||
|
||
## 3. 完整表清单
|
||
|
||
| # | 表名 | 用途 | 状态 |
|
||
|---|------|------|------|
|
||
| 1 | `leaudit_documents` | LeAudit 平台内部文档主表 | ✅ 已创建 |
|
||
| 2 | `leaudit_document_files` | 文档文件版本管理 | ✅ 已创建 |
|
||
| 3 | `leaudit_audit_runs` | 每次处理执行的主索引记录 | ✅ 已创建 |
|
||
| 4 | `leaudit_artifacts` | OCR/normalize/manifest/markdown/图片等文件产物索引 | ✅ 已创建 |
|
||
| 5 | `leaudit_rule_results` | 规则级评查结果(逐条规则一行) | ✅ 已创建 |
|
||
| 6 | `leaudit_field_results` | 字段级抽取结果 | ✅ 已创建 |
|
||
| 7 | `leaudit_run_metrics` | 各阶段耗时与计数统计 | ✅ 已创建 |
|
||
| 8 | `leaudit_run_errors` | 各阶段错误与诊断 | ✅ 已创建 |
|
||
| 9 | `leaudit_rescue_outcomes` | Rescue 补救结果 | ✅ 已创建 |
|
||
| 10 | `leaudit_rule_sets` | 规则集主表 | ✅ 已创建 |
|
||
| 11 | `leaudit_rule_versions` | 规则版本表 | ✅ 已创建 |
|
||
| 12 | `leaudit_rule_type_bindings` | 文档类型与规则集绑定 | ✅ 已创建 |
|
||
| 13 | `jwt_tokens` | JWT 令牌管理 | ✅ 已创建 |
|
||
| 14 | `leaudit_document_types` | 文档类型定义 | ✅ 已创建 |
|
||
| 15 | `leaudit_entry_modules` | 入口模块/导航菜单 | ✅ 已创建 |
|
||
| 16 | `leaudit_evaluation_point_groups` | 评查点规则组(PID 树形) | ✅ 已创建 |
|
||
| 17 | `leaudit_evaluation_points` | 规则点/评查点元数据 | ✅ 已创建 |
|
||
|
||
> 所有表均含 `create_time` / `update_time` / `delete_time` 三时间戳 + 中文列注释。
|
||
> 详细建表 SQL 见 `scripts/schema_v2_add_evaluation_tables.sql`。
|
||
|
||
---
|
||
|
||
## 4. 核心表结构(文档执行域)
|
||
|
||
### 4.1 `leaudit_documents`
|
||
|
||
LeAudit 平台内部文档主表。当前不再依赖旧系统文档表。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| `id` | bigint PK | 主键,自增 |
|
||
| `biz_document_id` | bigint UNIQUE | 内部追踪号,沿用旧字段名以兼容历史库 |
|
||
| `type_id` | bigint | 文档类型 ID → `leaudit_document_types.id` |
|
||
| `processing_status` | varchar(64) | waiting / running / completed / failed |
|
||
| `current_run_id` | bigint | 最新有效 `leaudit_audit_runs.id` |
|
||
| `create_time` / `update_time` / `delete_time` | timestamptz | 标准时间戳 |
|
||
|
||
### 4.2 `leaudit_document_files`
|
||
|
||
文档文件表。一份文档可以有多个物理文件版本。
|
||
|
||
| 字段 | 类型 | 说明 |
|
||
| --- | --- | --- |
|
||
| `id` | bigint PK | 主键 |
|
||
| `document_id` | bigint FK | 关联 `leaudit_documents.id` |
|
||
| `file_role` | varchar(64) | primary / attachment / scan / ocr_result |
|
||
| `file_name` / `file_ext` / `mime_type` / `file_size` | — | 文件基本信息 |
|
||
| `sha256` | varchar(64) | 文件 SHA256 |
|
||
| `oss_url` | varchar(2048) | OSS 地址(真源) |
|
||
| `local_path` | varchar(1024) | 本地临时路径 |
|
||
| `is_active` | boolean | 当前生效文件 |
|
||
| `created_by` | bigint | 上传者 |
|
||
|
||
### 4.3 `leaudit_audit_runs`
|
||
|
||
核心追踪表。每次进入 LeAudit 主链生成一条记录。
|
||
|
||
| 字段分类 | 字段 | 说明 |
|
||
|---------|------|------|
|
||
| **标识** | `id` / `document_id` / `document_file_id` / `run_no` | 主键 + 关联 + 序号 |
|
||
| **触发** | `trigger_source` / `trigger_user_id` / `task_id` | 触发来源/人/Celery ID |
|
||
| **状态** | `status` / `phase` | pending→running→completed/failed |
|
||
| **规则溯源** | `rule_set_id` / `rule_version_id` / `rule_type_id` | 使用的规则版本 |
|
||
| | `rule_source_oss_url` / `rule_source_sha256` / `rule_local_cache_path` | 规则文件定位 |
|
||
| **模型快照** | `engine_version` / `llm_provider` / `llm_model` / `vlm_provider` / `vlm_model` / `ocr_provider` / `ocr_model` | 可追溯差异来源 |
|
||
| **Rescue** | `rescue_mode` / `rescue_applied` | 补救配置与执行标记 |
|
||
| **结果汇总** | `total_score` / `passed_count` / `failed_count` / `skipped_count` / `result_status` | 总量统计 |
|
||
| **时间** | `started_at` / `finished_at` / `create_time` / `update_time` | 时间追踪 |
|
||
|
||
### 4.4 `leaudit_artifacts`
|
||
|
||
统一产物表。记录一次 run 过程中产生的所有文件型中间产物。
|
||
|
||
**artifact_type 枚举(20 种)**:`original_doc` / `normalized_doc` / `render_png` / `render_pdf` / `ocr_json` / `extract_json` / `evaluate_json` / `rescue_json` / `quality_report` / `diff_report` / `cross_review` / `merged_result` / `final_report` / `vlm_render` / `vlm_vis_page` / `vlm_vis_subdoc` / `vlm_vis_field` / `vlm_debug` / `rescue_debug` / `pipeline_log`
|
||
|
||
### 4.5 `leaudit_rule_results`
|
||
|
||
规则级结果表。对齐 LeAudit `EvaluationResult.rules` 的实际字段。
|
||
|
||
| 字段分类 | 关键字段 | 说明 |
|
||
|---------|---------|------|
|
||
| **归属** | `run_id` / `rule_version_id` / `document_id` | 三重定位 |
|
||
| **规则标识** | `rule_id` / `rule_name` / `risk` / `score` | 规则基本信息 |
|
||
| **结果** | `passed` / `status` / `skip_reason` / `confidence` | 判定结果 |
|
||
| **消息** | `pass_message` / `fail_message` | 通过/失败文案 |
|
||
| **细节** | `stages` (jsonb) / `extracted_fields` (jsonb) / `field_positions` (jsonb) / `rule_meta` (jsonb) | 结构化详情 |
|
||
| **整改** | `remediation` (jsonb) / `rescue_applied` / `rescue_passed` | 补救信息 |
|
||
| **兜底** | `result_payload` (jsonb) | 完整 RuleResult JSON 备份 |
|
||
|
||
### 4.6-4.9 辅助表
|
||
|
||
- **`leaudit_field_results`**: 字段级抽取结果(value_text / confidence / grounding_score / hard_failed 等)
|
||
- **`leaudit_run_metrics`**: 各阶段耗时(ocr/normalize/extract/evaluate/rescue_seconds)+ 计数统计
|
||
- **`leaudit_run_errors`**: 各阶段错误(stage / level / error_code / message / detail_json)
|
||
- **`leaudit_rescue_outcomes`**: Rescue 补救结果(diagnosis / final_status / llm_calls / vlm_calls)
|
||
|
||
---
|
||
|
||
## 5. 规则管理域表
|
||
|
||
详见 [DSL 规则域表结构设计](dsl_rule_schema_design.md)。
|
||
|
||
| 表 | 用途 |
|
||
|----|------|
|
||
| `leaudit_rule_sets` | 规则集主表(rule_type / rule_name / current_version_id) |
|
||
| `leaudit_rule_versions` | 规则版本(oss_url / file_sha256 / metadata_* 快照) |
|
||
| `leaudit_rule_type_bindings` | 文档类型 ↔ 规则集绑定(binding_mode / priority) |
|
||
|
||
---
|
||
|
||
## 6. 评查点管理域表
|
||
|
||
| 表 | 用途 |
|
||
|----|------|
|
||
| `leaudit_evaluation_point_groups` | 评查点规则组(PID 树形层级) |
|
||
| `leaudit_evaluation_points` | 规则点/评查点(code / score / scoring_config / references_laws) |
|
||
| `leaudit_document_types` | 文档类型定义(code / classification_keywords / extraction_mode) |
|
||
| `leaudit_entry_modules` | 入口模块(name / path / areas / icon_path) |
|
||
|
||
---
|
||
|
||
## 7. 表关系图
|
||
|
||
```text
|
||
leaudit_entry_modules
|
||
└── leaudit_document_types
|
||
├── leaudit_documents
|
||
│ ├── leaudit_document_files
|
||
│ └── leaudit_audit_runs
|
||
│ ├── leaudit_artifacts (N)
|
||
│ ├── leaudit_run_metrics (1)
|
||
│ ├── leaudit_run_errors (N)
|
||
│ ├── leaudit_rule_results (N)
|
||
│ ├── leaudit_field_results (N)
|
||
│ └── leaudit_rescue_outcomes (N)
|
||
└── leaudit_rule_type_bindings
|
||
└── leaudit_rule_sets
|
||
├── leaudit_rule_versions
|
||
└── leaudit_evaluation_point_groups
|
||
└── leaudit_evaluation_points
|
||
```
|
||
|
||
---
|
||
|
||
## 8. OSS 路径约定
|
||
|
||
详见 [基础设施重设计](infrastructure_redesign.md) 第一节。
|
||
|
||
```text
|
||
# 业务文档
|
||
bdocs/{region}/{type_code}/{doc_id}/{version}/{file_role}.{ext}
|
||
|
||
# 评查产物
|
||
artifacts/{region}/{run_id}/{artifact_type}/{detail}.{ext}
|
||
```
|
||
|
||
---
|
||
|
||
## 9. 最终结论
|
||
|
||
- 所有表 `leaudit_*` 前缀,与老系统完全隔离
|
||
- `leaudit_documents` 现阶段是平台内部文档主表,不再要求外部 `documents.id`
|
||
- `leaudit_audit_runs` 是每次处理的唯一追踪单位
|
||
- `leaudit_artifacts` 统一管理所有文件产物,数据库只存索引
|
||
- `leaudit_rule_results` 粒度到逐条规则,结构与 LeAudit `RuleResult` 对齐
|
||
- 数据库已全部建表完成,含中文注释和三时间戳
|