feat(govdoc): 新增内部公文模块全链路(后端58+前端11文件)

This commit is contained in:
wren
2026-05-13 14:37:12 +08:00
parent 99699e20e1
commit 5d777599bf
63 changed files with 7608 additions and 0 deletions
@@ -0,0 +1,503 @@
# 内部公文模块迁移方案
## 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`
最终形成:
- 平台共享底座
- 模块独立结果域
- 前后端统一接入
- 规则、报告、运行态统一纳入当前项目
这是最稳、最适合长期维护的一条路。