# LeAudit 设计文档目录 本目录包含 `leaudit-platform` 项目的核心架构设计文档。 ## 阅读顺序 1. `docs/HANDOFF.md` 2. `document_schema_design.md` 3. `dsl_rule_schema_design.md` 4. `bridge_directory_design.md` 5. `processing_logic.md` 6. `docs/规则编辑/README.md` ## 文档索引 | 文档 | 内容 | 状态 | |------|------|------| | [document_schema_design.md](document_schema_design.md) | 文档域表结构设计 — 17 张 `leaudit_*` 表完整说明 | ✅ 已落地 | | [dsl_rule_schema_design.md](dsl_rule_schema_design.md) | DSL 规则域表结构 — 规则集/版本/绑定管理 | ✅ 核心表已落地 | | [processing_logic.md](processing_logic.md) | LeAudit 7 阶段处理流水线说明 | 📖 参考文档 | | [bridge_directory_design.md](bridge_directory_design.md) | Bridge 桥接层目录与职责设计 | ✅ 已落地 | | [infrastructure_redesign.md](infrastructure_redesign.md) | 基础设施重设计 — OSS/队列/缓存/区域隔离 | 📋 设计蓝图 | ## 当前运行参数口径 - 并发与重试参数不再单独保留为独立说明文档 - 当前约定统一如下: - 重试参数使用 `*_RETRY_MAX_ATTEMPTS` - 退避参数使用 `*_RETRY_BACKOFF_BASE_SECONDS` - 统一按指数退避计算等待时间 - 当前主要链路包括: - LLM - VLM - OCR - signature probe - 相关代码位置: - `fastapi_admin/config/_settings.py` - `fastapi_modules/fastapi_leaudit/leaudit_bridge/client_factory.py` - `fastapi_modules/fastapi_leaudit/leaudit_bridge/resilient_clients.py` - `fastapi_modules/fastapi_leaudit/leaudit_bridge/ocr_bridge.py` ## 当前边界 - 当前“系统现状、已完成事项、剩余阻塞”统一看 `docs/HANDOFF.md` - 本目录只保留相对稳定的后端架构、表结构、处理链路设计 - 原 `SYSTEM_OVERVIEW.md` 的阶段性现状内容已收口到 `docs/HANDOFF.md` 与本文件 ## 快览 ``` leaudit-platform 核心链路: 用户上传文档 → leaudit_bridge pipeline (OCR→Extract→Evaluate→Rescue) → StorageAdapter 写入 leaudit_* 表 → Controller→Service 读取结果返回前端 数据存储: PostgreSQL: 17 张 leaudit_* 表 (元数据 + 结果索引) MinIO OSS: bdocs/ + artifacts/ (文件真源) Redis: 队列 + 缓存 + 并发控制 ``` --- ## 迁移规范 从老项目 `docauditai` 迁移代码到新项目 `leaudit-platform` 时,严格遵守以下规范。 ### 一、路由 | 规则 | 说明 | |------|------| | **路由地址不变** | 前端不做任何修改,`POST /auth/login`、`POST /upload` 等全部保持原样 | | **编码按新规范** | 不用旧项目 `@router.post()` 裸写逻辑,改为 Controller → Service(接口+实现) → Model 分层 | | **响应格式统一** | 旧 `{success, data}` → 新 `Result[T]` 格式 `{code, message, data}` | | **去掉 V1/V2** | 旧项目 `app/routes/v2/` 的多版本路由全部废弃,只保留实际使用的路由 | ### 二、Service 层 | 规则 | 说明 | |------|------| | **业务逻辑原封不动** | 核心判断逻辑、优先级、算法全部保持和旧项目一致 | | **只改数据访问方式** | `asyncpg.connect()` → SQLAlchemy `GetAsyncSession()` + `text()` | | **接口+实现分离** | 每个模块定义 `IXxxService` 抽象接口 + `XxxServiceImpl` 实现 | | **不顺手优化** | 已验证的业务逻辑不做"顺便改进",避免引入新 bug | ### 三、数据库 | 规则 | 说明 | |------|------| | **全 `leaudit_*` 前缀** | 与旧 `docauditai` 库的表完全隔离,不混用 | | **新数据库独立** | `leaudit_platform@nas.7bm.co:54302`,不修改旧库结构 | | **所有表必有** | `create_time` + `update_time` + `delete_time` 三时间戳 | | **所有列必有中文注释** | `COMMENT ON COLUMN xxx IS '...'` | | **软删除** | 业务表不允许物理删除,统一用 `delete_time IS NULL` 过滤 | ### 四、配置 | 规则 | 说明 | |------|------| | **TOML → os.environ → Pydantic Settings → module export** | 配置加载链:`app.toml` → 环境变量 → `_settings.py` → `from fastapi_admin.config import XXX` | | **不硬编码** | 禁止在代码中写死 host/port/key,一律走 config 模块 | | **app.toml 不入 git** | 含数据库密码、API Key,`.gitignore` 已排除 | ### 五、Bridge 导入 | 旧引用 | 新引用 | |-------|-------| | `from core.config import XXX` | `from fastapi_admin.config import XXX` | | `from core.postgrest.client import ...` | `from fastapi_common...database import GetAsyncSession` + `text()` | | `from core.logger import log` | `from fastapi_common.fastapi_common_logger import logger` | | `from core.celery_app_limited import celery_app` | P2 阶段集成 | | `from core.utils.instance_context import ...` | 已废弃(显式参数替代 os.environ 切换) | ### 六、文件路径 | 旧路径 | 新路径 | |-------|-------| | `app/routes/v2/` | `fastapi_modules/fastapi_leaudit/controllers/` | | `app/rbac/` | `fastapi_modules/fastapi_leaudit/services/impl/` | | `services/leaudit_bridge/` | `fastapi_modules/fastapi_leaudit/leaudit_bridge/` | | `core/config.py` | `fastapi_admin/config/` | | `core/storage/` | `fastapi_common/` (通用化) | ### 七、不允许做的事 - ❌ 在老 `docauditai` 基础上直接改代码 - ❌ 在新项目中引用 `docauditai` 的任何模块 - ❌ 在新项目中直接 `import leaudit` 内核(必须走 bridge) - ❌ 跳过 Controller→Service→Model 分层直接写路由逻辑 - ❌ 数据库表不加中文注释 - ❌ 硬编码配置值