674 lines
13 KiB
Markdown
674 lines
13 KiB
Markdown
# 内部公文模块业务逻辑梳理
|
||
|
||
## 1. 文档目的
|
||
|
||
本文档用于明确当前 `leaudit-platform` 中 `govdoc`(内部公文模块)的业务定位、核心对象、标准流程、权限边界与结果语义。
|
||
|
||
这份文档的目标不是讲技术实现,而是先把“这个模块业务上到底是什么、用户怎么用、系统应该怎么理解”说清楚,作为后续前后端对接补齐和修复的业务基线。
|
||
|
||
---
|
||
|
||
## 2. 模块定位
|
||
|
||
`govdoc` 模块是当前平台中的一个一等业务模块,不是外挂独立系统。
|
||
|
||
它的核心业务目标是:
|
||
|
||
- 上传一份内部公文文件
|
||
- 按公文格式规范自动发起审查
|
||
- 输出结构化问题、规则检查结果、结构/大纲/实体识别结果
|
||
- 提供 HTML 报告、批注 DOCX、原文下载
|
||
- 全流程复用当前平台的账号、权限、地区、文档主档、OSS、异步任务体系
|
||
|
||
一句话概括:
|
||
|
||
**内部公文模块本质上是平台里的“公文格式审查模块”。**
|
||
|
||
---
|
||
|
||
## 3. 业务边界
|
||
|
||
### 3.1 本模块负责的事
|
||
|
||
- 公文文档上传
|
||
- 自动格式审查
|
||
- 审查结果展示
|
||
- 审查历史留痕
|
||
- 规则查看
|
||
- 报告下载
|
||
|
||
### 3.2 本模块不负责的事
|
||
|
||
- 公文流转审批
|
||
- 协同编辑
|
||
- 发文流程管理
|
||
- 独立规则平台
|
||
- 第二套独立文档系统
|
||
- 通用 RAG / 合同评审 / 交叉评查
|
||
|
||
因此,第一阶段不要把 `govdoc` 理解成“公文业务平台”,而应理解成“公文格式审查能力模块”。
|
||
|
||
---
|
||
|
||
## 4. 审查对象
|
||
|
||
从现有页面文案、规则展示和引擎能力看,`govdoc` 模块重点审查的是“公文格式规范”,而不是公文业务内容是否正确。
|
||
|
||
它重点关注的对象包括但不限于:
|
||
|
||
- 标题
|
||
- 发文字号
|
||
- 主送机关
|
||
- 正文层级
|
||
- 附件标记
|
||
- 附件标题
|
||
- 署名
|
||
- 成文日期
|
||
- 字体字号
|
||
- 行距
|
||
- 标点
|
||
- 禁用表述
|
||
- 易混词
|
||
- 文种合法性
|
||
- 层级编号规范
|
||
- 需要 AI/语义辅助判断的规则
|
||
|
||
因此,模块输出的“分数”和“问题”,本质上是:
|
||
|
||
**公文格式规范符合度结果,不是业务内容质量结果。**
|
||
|
||
---
|
||
|
||
## 5. 核心业务对象
|
||
|
||
本模块建议围绕以下 4 层业务对象展开。
|
||
|
||
### 5.1 文档
|
||
|
||
文档是平台主档中的一份公文文件。
|
||
|
||
业务语义:
|
||
|
||
- 用户上传的一份公文文件
|
||
- 是平台中的主对象
|
||
- 需要标记该文档属于 `govdoc` 模块
|
||
|
||
建议复用:
|
||
|
||
- `leaudit_documents`
|
||
- `leaudit_document_files`
|
||
|
||
同时在主档中补充模块标识,例如:
|
||
|
||
- `engine_type = 'govdoc'`
|
||
|
||
### 5.2 审查运行(Run)
|
||
|
||
Run 表示:
|
||
|
||
- 某份文档的一次审查执行记录
|
||
- 同一份文档可以有多次 run
|
||
- 新 run 不覆盖旧 run
|
||
- run 是执行留痕,不是业务主对象
|
||
|
||
### 5.3 规则结果
|
||
|
||
规则结果表示:
|
||
|
||
- 每条规则对当前文档检查后的结果
|
||
|
||
单条规则最终状态不是只有“通过/不通过”,而是:
|
||
|
||
- `pass`
|
||
- `fail`
|
||
- `skipped`
|
||
|
||
其中 `skipped` 表示:
|
||
|
||
- 条件不足,无法检查
|
||
- 或外部依赖能力异常,临时跳过
|
||
|
||
### 5.4 报告产物
|
||
|
||
审查完成后会产出一组可展示或可下载的结果文件,例如:
|
||
|
||
- HTML 报告
|
||
- 批注 DOCX
|
||
- 段落 HTML
|
||
- 原文下载
|
||
- 其他结构化中间结果
|
||
|
||
---
|
||
|
||
## 6. 主对象结论
|
||
|
||
结合当前业务确认,推荐正式拍板如下:
|
||
|
||
- **业务主对象是文档,不是 run**
|
||
- run 是文档的一次审查执行留痕
|
||
|
||
原因:
|
||
|
||
- 列表页已经确定为文档列表
|
||
- 首页统计按文档最新结果计算
|
||
- 删除、下载原文、权限继承都天然是文档维度
|
||
- 用户面对的是“这份公文”,而不是技术上的 run
|
||
|
||
---
|
||
|
||
## 7. 详情页主键结论
|
||
|
||
推荐正式拍板如下:
|
||
|
||
- **详情页路由主键使用 `documentId`**
|
||
- 页面默认展示该文档“最新一次 run”的结果
|
||
- 历史 run 在详情页内切换查看
|
||
|
||
推荐语义:
|
||
|
||
- 页面入口面向文档
|
||
- 页面内容展示 run 结果
|
||
- 最新 run 为默认视图
|
||
|
||
不建议直接把页面主键设计成 `runId`,否则会带来这些问题:
|
||
|
||
- 用户难以理解自己打开的是“哪份文档”
|
||
- 同一文档多次审查后页面入口不稳定
|
||
- 列表页与详情页的主对象不一致
|
||
|
||
---
|
||
|
||
## 8. 标准业务流程
|
||
|
||
### 8.1 进入模块
|
||
|
||
用户进入 `govdoc` 模块后,可以看到:
|
||
|
||
- 模块首页/概览
|
||
- 最近文档
|
||
- 统计数据
|
||
|
||
### 8.2 上传公文
|
||
|
||
用户上传一份公文文件。
|
||
|
||
第一阶段支持的文件类型应以现有前端为准,例如:
|
||
|
||
- `doc`
|
||
- `docx`
|
||
- `wps`
|
||
|
||
上传成功后:
|
||
|
||
- 创建平台文档主档
|
||
- 文档被标记为 `govdoc`
|
||
|
||
### 8.3 自动发起审查
|
||
|
||
已确认第一阶段默认行为为:
|
||
|
||
- 上传成功后自动发起审查
|
||
|
||
也就是:
|
||
|
||
- 上传成功
|
||
- 立即创建一条新的 run
|
||
- 投递异步任务处理
|
||
|
||
因此在业务上:
|
||
|
||
- 上传 ≠ 审查结果已经出来
|
||
- 上传 = 文档入库 + 自动创建 run
|
||
|
||
### 8.4 异步执行审查
|
||
|
||
Worker 异步执行完整审查链路,包括:
|
||
|
||
- 读取原文
|
||
- 解析段落与样式
|
||
- 识别段落角色
|
||
- 抽取实体
|
||
- 加载规则
|
||
- 执行规则评估
|
||
- 生成问题结果
|
||
- 生成报告产物
|
||
- 回写数据库与 OSS
|
||
|
||
### 8.5 查看详情
|
||
|
||
用户打开某份文档详情后,默认应看到:
|
||
|
||
- 该文档最新一次 run 的结果
|
||
|
||
包括:
|
||
|
||
- 问题列表
|
||
- 已通过规则
|
||
- 已跳过规则
|
||
- 结构面板
|
||
- 大纲面板
|
||
- 实体面板
|
||
- 报告下载
|
||
|
||
### 8.6 查看历史审查记录
|
||
|
||
同一份文档允许存在多个 run。
|
||
|
||
已确认需要保留历史 run,因此:
|
||
|
||
- 新 run 不覆盖旧 run
|
||
- 历史记录在详情页中查看
|
||
- 第一阶段前端不主动开放“重跑按钮”,但底层模型要支持
|
||
|
||
---
|
||
|
||
## 9. 列表页业务定义
|
||
|
||
已确认列表页应为:
|
||
|
||
- **文档列表**
|
||
|
||
不是:
|
||
|
||
- run 列表
|
||
|
||
因此每一行表示的是:
|
||
|
||
- 一份公文文档
|
||
|
||
展示的是该文档当前/最近一次审查摘要,例如:
|
||
|
||
- 文档名称
|
||
- 文件类型
|
||
- 上传时间
|
||
- 当前状态
|
||
- 最新分数
|
||
- 最新问题数
|
||
- 最近一次审查时间
|
||
|
||
为什么不能做成 run 列表:
|
||
|
||
- 同一份文档多次重跑会出现多行重复记录
|
||
- 用户业务上关心的是“这份公文当前状态如何”
|
||
- 列表页会与文档权限、删除语义、首页统计口径冲突
|
||
|
||
---
|
||
|
||
## 10. Run 的业务定位
|
||
|
||
Run 是内部执行留痕,不是页面主对象,但它在业务上必须存在。
|
||
|
||
Run 的业务价值:
|
||
|
||
- 记录某次审查什么时候发起
|
||
- 记录谁触发了审查
|
||
- 记录本次状态、阶段、分数、错误信息
|
||
- 保留历史版本,支持追踪和回溯
|
||
|
||
当前业务确认:
|
||
|
||
- 需要支持重跑
|
||
- 但前端第一阶段不开放重跑按钮
|
||
- 处理方式与其他文档类型保持一致
|
||
|
||
因此应理解为:
|
||
|
||
- 能力层支持多 run
|
||
- 数据层必须保留历史 run
|
||
- 交互层是否开放重跑,可后续逐步释放
|
||
|
||
---
|
||
|
||
## 11. 结果页业务语义
|
||
|
||
结果页中几个核心对象的业务含义如下。
|
||
|
||
### 11.1 Findings
|
||
|
||
Findings 是最细粒度的问题明细。
|
||
|
||
其业务语义是:
|
||
|
||
- 某条规则在某一段落或某个结构位置上发现的问题
|
||
|
||
典型信息包括:
|
||
|
||
- 规则 ID
|
||
- 规则名称
|
||
- 严重级别
|
||
- 分类
|
||
- 位置
|
||
- 实际值
|
||
- 期望值
|
||
- 建议
|
||
- 证据文本
|
||
|
||
本质上是“段落级问题清单”。
|
||
|
||
### 11.2 Checked Rules
|
||
|
||
这是规则维度的检查结果。
|
||
|
||
每条规则的最终状态只有一个:
|
||
|
||
- `pass`
|
||
- `fail`
|
||
- `skipped`
|
||
|
||
这个列表用于回答:
|
||
|
||
- 哪些规则通过了
|
||
- 哪些规则失败了
|
||
- 哪些规则因为条件不足被跳过了
|
||
|
||
### 11.3 Structure
|
||
|
||
Structure 表示:
|
||
|
||
- 文档结构统计
|
||
|
||
它关注的是:
|
||
|
||
- 识别出了哪些结构角色
|
||
- 各角色出现了多少次
|
||
- 是否缺少预期结构
|
||
- 样式是否一致
|
||
|
||
### 11.4 Outline
|
||
|
||
Outline 表示:
|
||
|
||
- 文档大纲树
|
||
|
||
本质上是标题层级结构,用于帮助用户快速跳到对应段落。
|
||
|
||
### 11.5 Entities
|
||
|
||
Entities 表示:
|
||
|
||
- 从公文中识别出的关键实体
|
||
|
||
例如:
|
||
|
||
- 标题
|
||
- 发文字号
|
||
- 主送机关
|
||
- 附件
|
||
- 署名
|
||
- 日期
|
||
- 文种
|
||
|
||
---
|
||
|
||
## 12. 右侧结果面板的业务定义
|
||
|
||
当前详情右侧面板可归纳为 3 类结果:
|
||
|
||
### 12.1 问题
|
||
|
||
显示:
|
||
|
||
- 所有失败规则对应的问题明细
|
||
|
||
这是用户最主要的修正文档入口。
|
||
|
||
### 12.2 已通过
|
||
|
||
显示:
|
||
|
||
- 当前 run 中已通过的规则
|
||
|
||
作用:
|
||
|
||
- 帮助用户知道哪些规范项已经满足
|
||
|
||
### 12.3 已跳过
|
||
|
||
显示:
|
||
|
||
- 当前 run 中未被真正执行的规则
|
||
|
||
典型原因:
|
||
|
||
- 目标实体未识别到
|
||
- 检查条件不满足
|
||
- 外部智能检查服务不可用
|
||
|
||
业务上要明确:
|
||
|
||
- `skipped` 不算失败
|
||
- 但也不等于通过
|
||
|
||
---
|
||
|
||
## 13. 评分语义
|
||
|
||
已确认分数语义为:
|
||
|
||
- **格式审查分**
|
||
|
||
它表示:
|
||
|
||
- 这份公文在格式规范层面的符合程度
|
||
|
||
不表示:
|
||
|
||
- 公文业务内容质量
|
||
- 法律风险程度
|
||
- 审批流转质量
|
||
|
||
因此用户看到的分数,本质上是格式规范扣分结果。
|
||
|
||
---
|
||
|
||
## 14. 首页统计口径
|
||
|
||
已确认首页统计应按:
|
||
|
||
- **文档最新结果**
|
||
|
||
而不是:
|
||
|
||
- 所有历史 run 累加
|
||
|
||
因此统计时应遵循:
|
||
|
||
- 一份文档多次重跑,只按最新结果参与当前统计
|
||
- “本月评查文件数”按文档数,不按 run 数
|
||
- “问题数”“通过率”也按文档最新结果计算
|
||
|
||
如果按所有 run 统计,会导致:
|
||
|
||
- 文档数量虚高
|
||
- 问题数虚高
|
||
- 同一文档反复重跑导致指标失真
|
||
|
||
---
|
||
|
||
## 15. 权限模型
|
||
|
||
本模块应使用独立的 `govdoc` 权限命名空间,不与其他模块混用。
|
||
|
||
### 15.1 模块级权限
|
||
|
||
- `govdoc:module:read`
|
||
|
||
### 15.2 文档权限
|
||
|
||
- `govdoc:document:create`
|
||
- `govdoc:document:read`
|
||
- `govdoc:document:update`
|
||
- `govdoc:document:delete`
|
||
|
||
### 15.3 Run 权限
|
||
|
||
- `govdoc:run:create`
|
||
- `govdoc:run:read`
|
||
- `govdoc:run:retry`
|
||
|
||
### 15.4 结果与报告权限
|
||
|
||
- `govdoc:result:read`
|
||
- `govdoc:report:read`
|
||
|
||
### 15.5 规则权限
|
||
|
||
- `govdoc:rule:read`
|
||
- `govdoc:rule:manage`
|
||
|
||
---
|
||
|
||
## 16. 数据范围规则
|
||
|
||
当前业务确认如下。
|
||
|
||
### 16.1 普通用户(common)
|
||
|
||
- 只能看自己上传/自己触发的文档与结果
|
||
- 不能通过参数查看别人数据
|
||
|
||
### 16.2 地区管理员(admin)
|
||
|
||
- 只能看本地区数据
|
||
- 即使前端传入其他 `region`,后端也必须拦截
|
||
|
||
### 16.3 全局角色
|
||
|
||
- `super_admin`
|
||
- `provincial_admin`
|
||
|
||
可看更大范围或全量数据
|
||
|
||
---
|
||
|
||
## 17. 结果与报告权限继承原则
|
||
|
||
已确认以下资源不单独放宽:
|
||
|
||
- findings
|
||
- entities
|
||
- HTML 报告
|
||
- 批注 DOCX
|
||
- 原文下载
|
||
|
||
统一原则:
|
||
|
||
- **能否查看结果 = 能否查看该文档**
|
||
|
||
也就是说:
|
||
|
||
- 不能看这份文档,就不能看它的任何结果和报告产物
|
||
|
||
---
|
||
|
||
## 18. 删除语义
|
||
|
||
已确认删除语义为:
|
||
|
||
- **软删除文档**
|
||
|
||
业务含义:
|
||
|
||
- 删除的是文档在模块中的业务可见性/状态
|
||
- 不是立刻物理删除 OSS 文件
|
||
- 历史 run 和产物先保留
|
||
|
||
因此第一阶段不应把“删除文档”理解成“彻底清除所有数据”。
|
||
|
||
---
|
||
|
||
## 19. 文档修改权限
|
||
|
||
已确认普通用户默认不应具备较高的文档管理权限。
|
||
|
||
推荐权限语义:
|
||
|
||
- 普通用户可 `create/read`
|
||
- 普通用户默认不具备 `update/delete`
|
||
|
||
因此:
|
||
|
||
- `govdoc:document:update`
|
||
- `govdoc:document:delete`
|
||
|
||
应高于:
|
||
|
||
- `govdoc:document:create`
|
||
- `govdoc:document:read`
|
||
- `govdoc:run:create`
|
||
|
||
---
|
||
|
||
## 20. 规则模块关系
|
||
|
||
已确认规则模块口径为:
|
||
|
||
- **按照现有规则模块功能怎么做,内部公文模块就怎么接**
|
||
|
||
这意味着:
|
||
|
||
- `govdoc` 不额外发明一套私有规则治理方式
|
||
- 规则版本、生效规则、规则选择逻辑,应尽量复用平台现有规则体系
|
||
- `govdoc` 只是作为一个业务模块接入既有规则治理框架
|
||
|
||
因此第一阶段不建议:
|
||
|
||
- 单独做一套 `govdoc` 私有规则选择交互
|
||
- 单独维护一套与平台脱节的规则管理入口
|
||
|
||
---
|
||
|
||
## 21. 第一阶段用户可见能力
|
||
|
||
第一阶段用户可见能力应聚焦在:
|
||
|
||
- 上传公文
|
||
- 自动格式审查
|
||
- 查看问题
|
||
- 查看结构/大纲/实体
|
||
- 下载报告
|
||
|
||
不作为第一阶段重点暴露的能力:
|
||
|
||
- 手动重跑按钮
|
||
- 高级规则版本选择
|
||
- 复杂模块配置页
|
||
|
||
其中:
|
||
|
||
- 重跑能力底层可以支持
|
||
- 规则版本能力可先遵循现有平台规则模块现状
|
||
|
||
---
|
||
|
||
## 22. 推荐正式拍板结论
|
||
|
||
为了保证后续前后端对接和修复方向稳定,推荐正式拍板以下两条:
|
||
|
||
### 22.1 主对象结论
|
||
|
||
- 主对象 = 文档
|
||
|
||
### 22.2 详情页结论
|
||
|
||
- 详情页路由 = `documentId`
|
||
- 页面默认展示该文档最新 run
|
||
- 历史 run 在详情页内部切换查看
|
||
|
||
这两条一旦定稿,以下模块都会更清晰:
|
||
|
||
- 列表页
|
||
- 详情聚合
|
||
- 权限继承
|
||
- 首页统计
|
||
- 历史记录展示
|
||
- 下载与删除语义
|
||
|
||
---
|
||
|
||
## 23. 一句话总结
|
||
|
||
`govdoc` 模块应被定义为:
|
||
|
||
**以“公文文档”为主对象、以“审查 run”为执行留痕、以“规则结果 + 报告产物”为输出、复用平台统一底座的内部公文格式审查模块。**
|