13 KiB
内部公文模块业务逻辑梳理
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_documentsleaudit_document_files
同时在主档中补充模块标识,例如:
engine_type = 'govdoc'
5.2 审查运行(Run)
Run 表示:
- 某份文档的一次审查执行记录
- 同一份文档可以有多次 run
- 新 run 不覆盖旧 run
- run 是执行留痕,不是业务主对象
5.3 规则结果
规则结果表示:
- 每条规则对当前文档检查后的结果
单条规则最终状态不是只有“通过/不通过”,而是:
passfailskipped
其中 skipped 表示:
- 条件不足,无法检查
- 或外部依赖能力异常,临时跳过
5.4 报告产物
审查完成后会产出一组可展示或可下载的结果文件,例如:
- HTML 报告
- 批注 DOCX
- 段落 HTML
- 原文下载
- 其他结构化中间结果
6. 主对象结论
结合当前业务确认,推荐正式拍板如下:
- 业务主对象是文档,不是 run
- run 是文档的一次审查执行留痕
原因:
- 列表页已经确定为文档列表
- 首页统计按文档最新结果计算
- 删除、下载原文、权限继承都天然是文档维度
- 用户面对的是“这份公文”,而不是技术上的 run
7. 详情页主键结论
推荐正式拍板如下:
- 详情页路由主键使用
documentId - 页面默认展示该文档“最新一次 run”的结果
- 历史 run 在详情页内切换查看
推荐语义:
- 页面入口面向文档
- 页面内容展示 run 结果
- 最新 run 为默认视图
不建议直接把页面主键设计成 runId,否则会带来这些问题:
- 用户难以理解自己打开的是“哪份文档”
- 同一文档多次审查后页面入口不稳定
- 列表页与详情页的主对象不一致
8. 标准业务流程
8.1 进入模块
用户进入 govdoc 模块后,可以看到:
- 模块首页/概览
- 最近文档
- 统计数据
8.2 上传公文
用户上传一份公文文件。
第一阶段支持的文件类型应以现有前端为准,例如:
docdocxwps
上传成功后:
- 创建平台文档主档
- 文档被标记为
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
这是规则维度的检查结果。
每条规则的最终状态只有一个:
passfailskipped
这个列表用于回答:
- 哪些规则通过了
- 哪些规则失败了
- 哪些规则因为条件不足被跳过了
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:creategovdoc:document:readgovdoc:document:updategovdoc:document:delete
15.3 Run 权限
govdoc:run:creategovdoc:run:readgovdoc:run:retry
15.4 结果与报告权限
govdoc:result:readgovdoc:report:read
15.5 规则权限
govdoc:rule:readgovdoc:rule:manage
16. 数据范围规则
当前业务确认如下。
16.1 普通用户(common)
- 只能看自己上传/自己触发的文档与结果
- 不能通过参数查看别人数据
16.2 地区管理员(admin)
- 只能看本地区数据
- 即使前端传入其他
region,后端也必须拦截
16.3 全局角色
super_adminprovincial_admin
可看更大范围或全量数据
17. 结果与报告权限继承原则
已确认以下资源不单独放宽:
- findings
- entities
- HTML 报告
- 批注 DOCX
- 原文下载
统一原则:
- 能否查看结果 = 能否查看该文档
也就是说:
- 不能看这份文档,就不能看它的任何结果和报告产物
18. 删除语义
已确认删除语义为:
- 软删除文档
业务含义:
- 删除的是文档在模块中的业务可见性/状态
- 不是立刻物理删除 OSS 文件
- 历史 run 和产物先保留
因此第一阶段不应把“删除文档”理解成“彻底清除所有数据”。
19. 文档修改权限
已确认普通用户默认不应具备较高的文档管理权限。
推荐权限语义:
- 普通用户可
create/read - 普通用户默认不具备
update/delete
因此:
govdoc:document:updategovdoc:document:delete
应高于:
govdoc:document:creategovdoc:document:readgovdoc:run:create
20. 规则模块关系
已确认规则模块口径为:
- 按照现有规则模块功能怎么做,内部公文模块就怎么接
这意味着:
govdoc不额外发明一套私有规则治理方式- 规则版本、生效规则、规则选择逻辑,应尽量复用平台现有规则体系
govdoc只是作为一个业务模块接入既有规则治理框架
因此第一阶段不建议:
- 单独做一套
govdoc私有规则选择交互 - 单独维护一套与平台脱节的规则管理入口
21. 第一阶段用户可见能力
第一阶段用户可见能力应聚焦在:
- 上传公文
- 自动格式审查
- 查看问题
- 查看结构/大纲/实体
- 下载报告
不作为第一阶段重点暴露的能力:
- 手动重跑按钮
- 高级规则版本选择
- 复杂模块配置页
其中:
- 重跑能力底层可以支持
- 规则版本能力可先遵循现有平台规则模块现状
22. 推荐正式拍板结论
为了保证后续前后端对接和修复方向稳定,推荐正式拍板以下两条:
22.1 主对象结论
- 主对象 = 文档
22.2 详情页结论
- 详情页路由 =
documentId - 页面默认展示该文档最新 run
- 历史 run 在详情页内部切换查看
这两条一旦定稿,以下模块都会更清晰:
- 列表页
- 详情聚合
- 权限继承
- 首页统计
- 历史记录展示
- 下载与删除语义
23. 一句话总结
govdoc 模块应被定义为:
以“公文文档”为主对象、以“审查 run”为执行留痕、以“规则结果 + 报告产物”为输出、复用平台统一底座的内部公文格式审查模块。