# 内部公文模块业务逻辑梳理

## 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”为执行留痕、以“规则结果 + 报告产物”为输出、复用平台统一底座的内部公文格式审查模块。**
