# 内部公文模块迁移方案 ## 1. 目标定位 `govdoc-audit` 不应作为独立系统继续外挂,而应正式收口为当前 `leaudit-platform` 中的一个一等业务模块。 建议模块名: - `govdoc` - 中文显示名:`内部公文处理` 它在当前项目中的定位应为: - 一个“公文处理与格式审查模块” - 共享当前平台的用户、权限、文档、OSS、任务系统 - 拥有自己独立的规则、运行、结果、报告模型 --- ## 2. 总体迁移原则 一句话原则: - 迁“引擎” - 不迁“壳子” 应迁入当前项目的内容: - 公文解析器 - 段落角色识别 - 语义实体提取 - YAML DSL - 规则执行器 - HTML / DOCX / JSON 报告生成 不建议直接迁入的内容: - 原 `FastAPI` API 层 - 原 `SQLite` 存储层 - 原 `web` 前端 - 原本地 `var/documents` 落盘模式 原因是当前平台已经具备更成熟的基础设施: - 统一 FastAPI 应用 - JWT / RBAC - 地区隔离 - 文档主档与文件版本 - MinIO / OSS - Celery 异步任务 - bridge 执行链 因此正确方案不是再造第二个平台,而是把 `govdoc-audit` 变成当前平台中的一个能力模块。 --- ## 3. 模块化后的目标形态 ### 3.1 后端模块职责 该模块应负责: - 公文上传 - 公文格式审查 - 审查结果查询 - 规则查看 - 报告下载 - 审查过程留痕 不负责: - 通用 RAG - 合同评审 - 交叉评查 ### 3.2 前端模块职责 前端中应新增一个独立入口模块,页面建议包括: - 公文上传页 - 审查列表页 - 审查详情页 - 规则查看页 - 报告下载入口 - 模块配置页(可选) 路由建议: - `/govdoc` - `/govdoc/upload` - `/govdoc/list` - `/govdoc/detail/:documentId` --- ## 4. 推荐架构分层 建议按 6 层拆分: 1. 接口层 2. 服务层 3. 执行桥接层 4. 引擎内核层 5. 持久化层 6. 展示层 ### 4.1 接口层 建议新增: - `fastapi_modules/fastapi_leaudit/controllers/govdocController.py` 职责: - 上传公文 - 查询公文列表 - 发起审查 - 查询运行状态 - 查询结果详情 - 下载 HTML / DOCX / 原文 - 查询规则清单 控制器只做: - JWT 鉴权 - DTO 收参 - 调 service - 统一返回 Result ### 4.2 服务层 建议新增: - `fastapi_modules/fastapi_leaudit/services/govdocService.py` - `fastapi_modules/fastapi_leaudit/services/impl/govdocServiceImpl.py` 职责: - 复用当前文档服务做上传与元数据管理 - 创建公文审查 run - 调度异步任务 - 聚合查询结果 - 组织前端详情数据 ### 4.3 执行桥接层 建议新增目录: ```text fastapi_modules/fastapi_leaudit/govdoc_bridge/ __init__.py tasks.py runner.py input_resolver.py rules_resolver.py storage_adapter.py result_adapter.py report_adapter.py context_builder.py security_guard.py ``` 职责: - 从当前平台读取文档与文件元数据 - 从 OSS 下载文档到本地临时文件 - 解析规则版本并准备本地规则文件 - 调用 `govdoc` 引擎执行 - 将结果适配回当前平台数据库和 OSS 这是整个模块接入的关键层。 ### 4.4 引擎内核层 建议把 `govdoc-audit` 裁剪后并入当前仓库: ```text fastapi_modules/fastapi_leaudit/govdoc_engine/ __init__.py models.py pipeline.py parser/ dsl/ engine/ reporter/ llm/ ``` 建议迁入: - `parser/` - `dsl/` - `engine/` - `reporter/` - `llm/` - `models.py` - `pipeline.py` 明确不迁: - 原 `api/` - 原 `storage/` - 原 `services/storage_service.py` - 原 `web/` ### 4.5 持久化层 不建议继续使用原项目自己的 `SQLite + var/documents` 模式。 应基于当前平台数据库新增公文模块结果域表。 ### 4.6 展示层 不迁原 `govdoc-audit/web`。 应直接在当前前端项目中新增 `govdoc` 模块页面,复用现有: - 登录态 - 权限体系 - 侧边栏菜单 - UI 样式体系 --- ## 5. 数据模型建议 ### 5.1 应复用的平台公共表 建议直接复用: - `sso_users` - `roles` - `user_role` - `permissions` - `role_permissions` - `sys_routes` - `role_route` - `leaudit_documents` - `leaudit_document_files` 这些表负责: - 用户身份 - 权限控制 - 地区隔离 - 文档主档 - 文件版本 - OSS 关联 ### 5.2 建议补充的主档字段 建议在 `leaudit_documents` 增加一个模块标识字段,例如: - `engine_type` 可选值: - `leaudit` - `govdoc` - `rag` 这样平台可以明确知道某份文档应走哪条处理链。 ### 5.3 建议新增的公文模块结果域表 第一阶段建议至少新增: - `govdoc_runs` - `govdoc_rule_results` - `govdoc_report_artifacts` 后续可补: - `govdoc_entities` - `govdoc_rule_sets` - `govdoc_rule_versions` 推荐理解方式: - 公共主档复用 - 领域结果隔离 不要把公文模块结果硬塞进现有 `leaudit_audit_runs` / `leaudit_rule_results`。 原因: - 语义不完全一致 - 结果模型不完全兼容 - 统计口径会混乱 - 后期拆分成本更高 --- ## 6. 模块权限设计建议 建议一开始就单独定义 `govdoc` 模块权限键: - `govdoc:module:read` - `govdoc:document:create` - `govdoc:document:read` - `govdoc:document:update` - `govdoc:document:delete` - `govdoc:run:create` - `govdoc:run:read` - `govdoc:report:read` - `govdoc:rule:read` - `govdoc:rule:manage` 权限层继续复用当前平台: - JWT 鉴权 - RBAC - 地区隔离 数据范围继续遵守当前平台规则: - 省级管理员:全量 - 地区管理员:本地区 - 普通用户:本人数据 --- ## 7. 迁移实施步骤 建议分 5 期推进。 ### 第一期:内核迁入 目标: - 把 `govdoc-audit` 裁成当前项目内可调用的纯引擎内核 动作: - 新建 `govdoc_engine/` - 迁入 `parser / dsl / engine / reporter / llm` - 去掉原 `api / storage / web` 依赖 - 改成本项目统一 import 结构 - 规则文件暂放本地规则目录 产出: - 当前项目内可以本地调用一份 `.docx` 执行公文审查 ### 第二期:bridge 接入 目标: - 接入当前 worker 执行链 动作: - 新建 `govdoc_bridge/tasks.py` - 新建 `govdoc_bridge/storage_adapter.py` - 新建 `govdoc_bridge/result_adapter.py` - 复用 OSS 下载到本地临时文件 - 复用 Celery 异步执行 - 结果回写 DB + 上传 OSS 产出: - 当前项目可异步跑公文审查任务 ### 第三期:服务与接口接入 目标: - 正式形成后端模块 API 动作: - 新增 `govdocController.py` - 新增 `govdocServiceImpl.py` - 接入 JWT - 接入地区隔离 - 接入上传、列表、详情、运行状态、报告下载 产出: - 前端可以通过当前后端 API 正式使用公文模块 ### 第四期:前端模块接入 目标: - 当前平台页面可用 动作: - 新增侧边栏模块 - 新增上传页、列表页、详情页 - 详情页展示: - 分数 - findings - entities - 原文段落联动 - HTML / DOCX 报告下载 - 接入权限控制 产出: - 用户可在当前平台直接使用“内部公文处理” ### 第五期:平台化收口 目标: - 进入长期可维护状态 动作: - 规则版本化 - 报告产物统一 OSS - 文件转换 / 解析隔离执行 - LLM / OCR 白名单与审计 - 指标监控 - 错误告警 - 运行留痕 产出: - 模块正式生产可用 --- ## 8. 推荐目录结构 ```text fastapi_modules/fastapi_leaudit/ controllers/ govdocController.py services/ govdocService.py impl/ govdocServiceImpl.py govdoc_bridge/ __init__.py tasks.py runner.py input_resolver.py rules_resolver.py storage_adapter.py result_adapter.py report_adapter.py security_guard.py govdoc_engine/ __init__.py models.py pipeline.py parser/ dsl/ engine/ reporter/ llm/ models/ govdocRun.py govdocRuleResult.py govdocEntity.py govdocReportArtifact.py govdocRuleSet.py govdocRuleVersion.py ``` 文档与 SQL: ```text docs/内部公文模块/ 内部公文模块迁移方案.md 内部公文模块数据表复用与新增建议.md scripts/创建sql/ schema_add_govdoc_module.sql seed_govdoc_permissions.sql seed_govdoc_entry_module.sql ``` --- ## 9. 最终建议 最优方案不是: - 保留 `govdoc-audit` 为独立服务 - 当前平台只做代理壳 而应该是: - 把 `govdoc-audit` 裁成 `govdoc_engine` - 通过 `govdoc_bridge + Celery + OSS + RBAC + 地区隔离` - 正式并入 `leaudit-platform` 最终形成: - 平台共享底座 - 模块独立结果域 - 前后端统一接入 - 规则、报告、运行态统一纳入当前项目 这是最稳、最适合长期维护的一条路。