Files
leaudit-platform-backend/docs/内部公文模块/内部公文模块实施进展与运行依赖说明.md

397 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 内部公文模块实施进展与运行依赖说明
## 1. 文档目的
本文档只回答 3 个问题:
- 当前 `govdoc` 模块代码已经接到了哪一步
- 现在还缺哪些实现与运行依赖
- 当前为什么仍不能视为“可正式运行”
本文档基于 2026-05-17 当前仓库实际代码状态整理,不讨论理想方案,只描述现状。
---
## 2. 当前实施进展
### 2.0 2026-05-17 运行面最新结论
本次联调补充确认了一个非常关键的事实:
- `govdoc` 前后端链路现在已经接到了当前 `leaudit-platform`
- `GET /api/govdoc/documents` 不再是之前的 `404`
- 当前未登录访问时,接口返回 `401 Unauthorized`
- 当前未登录访问 `http://172.16.0.59:5173/govdoc/audits?entryModuleId=3` 时,会被正常重定向到 `/login`
这说明:
- “文档列表没有接到 1 后端”这个问题,按 2026-05-17 当前代码与运行验证结果看,**已经不是接口未接通问题**
- 当前更真实的阻塞已经变成:
- 运行进程是否真的按当前仓库拉起
- 浏览器是否带了有效登录态
- 正式部署是否还混用了旧项目或错误上游
本次实测时,以下链路已确认成立:
- `legal-platform-frontend``/api/govdoc/*` 代理会转发到当前后端 `http://127.0.0.1:8096/api/govdoc/*`
- 后端 `8096` 确认加载的是当前仓库 `fastapi_admin.app:app`
- `GET /api/govdoc/documents?page=1&pageSize=1` 已到达当前后端,并返回认证失败而非路由不存在
结论:
- **当前剩余主阻塞不是“列表接口没接上”,而是“运行部署链路混乱 + 登录态/正式进程不稳定”。**
### 2.1 业务基线已明确
当前业务口径已经明确:
- `govdoc` 是“内部公文格式审查模块”
- 主对象是“文档”,不是 `run`
- 上传后可自动触发审查
- 历史 `run` 需要保留
- 详情应以 `documentId` 为主,默认展示最新一次 `run`
这部分结论已在已有业务文档中明确,不再重复展开。
### 2.2 后端基础骨架已形成
当前后端已具备以下基础结构:
- `controller` 层已有 `govdoc` 路由入口
- `service` 层已有 `GovdocServiceImpl`
- `bridge` 层已有 `tasks / runner / storage_adapter / input_resolver / result_adapter`
- `engine` 层已有 `govdoc_engine` 解析、规则执行、结构/大纲、报告相关代码
- `model``DDL` 已具备 `govdoc_runs / govdoc_rule_results / govdoc_report_artifacts` 基础定义
说明:
- 这代表模块已经不是“纯占位”,而是已经具备一条从文档到运行结果的后端主链路雏形。
### 2.3 文档与运行主链路已有实际实现
当前 `GovdocServiceImpl` 已经实现了以下能力:
- 文档上传
- 文档列表
- 文档详情
- 创建运行 `CreateRun`
- 运行状态查询
- 运行结果读取
- findings / entities / structure / outline 读取
- 原文下载
- HTML / DOCX 报告地址读取
- 规则列表 / 规则详情读取
说明:
- 这意味着服务层已经不是之前那种“多数方法占位返回空壳”的阶段。
- 当前更准确的判断应是:**后端主链路基本接通,但仍存在关键运行依赖缺口和若干结果完整性缺口。**
### 2.4 worker / bridge / DDL 的 P0 已完成一轮修复
截至当前代码状态,以下确定性断点已完成修复:
- `dispatch_govdoc_task` 已支持透传 `rulesPath`
- `govdoc_execute_task` 已支持接收 `rulesPath`
- `GovdocRunner.Execute()` 已显式校验 `rulesPath`
- `UpdateRunStatus()` 已兼容 `phase / Phase`
- `govdoc_runs.rules_path` 已补入 model / DDL
- `govdoc_rule_results.skip_reason` 已补入 model / DDL
这部分修复的意义是:
- 任务链不再因为参数签名不一致、字段缺列这类低级错位直接报错
- 但“能跑到哪一步”仍取决于上游运行依赖是否齐全
---
## 3. 当前已完成项
从“能不能形成后端最小闭环”角度看,当前已完成项如下。
### 3.1 文档主档复用已接上
- 上传公文时,已复用 `leaudit_documents`
- 原始文件已复用 `leaudit_document_files`
- 上传后会把 `engine_type` 标记为 `govdoc`
### 3.2 运行记录域已接上
- 已创建 `govdoc_runs`
- 已支持记录 `status / phase / total_score / result_status`
- 已支持写入 `task_id / started_at / finished_at`
### 3.3 规则结果域已接上
- 已支持写入 `govdoc_rule_results`
- 已支持读取 `result / severity / category / message`
- 已支持读取 `skip_reason`
### 3.4 异步任务链已接上
- 已支持 `CreateRun -> dispatch_govdoc_task -> govdoc_execute_task -> GovdocRunner.Execute`
- 已支持 worker 中更新 run/document 状态
### 3.5 结果读取链已接上
- 已支持从 `govdoc_runs + govdoc_rule_results` 读取结果摘要
- 已支持组装 `checkedRules / findings / structure / outline`
- 已支持详情页所需的最新运行与历史运行信息
---
## 4. 当前待完成项
以下内容属于“主链路已经搭上,但还没有真正闭环”。
### 4.1 规则文件已落位,但规则来源策略仍是临时写法
当前实现里,`GovdocServiceImpl._resolve_rules_path()` 仍只尝试两个固定候选路径:
- `/home/wren-dev/Porject/leaudit-platform/rules/govdoc/govdoc_general/rules.yaml`
- `/home/wren-dev/Porject/leaudit-platform/rules/govdoc_general/rules.yaml`
按 2026-05-17 当前仓库实际状态看:
- 第一条路径对应的规则文件已经存在
- 当前真实运行也已经证明 `govdoc` 审查链路可以成功加载该规则并完成一次完整审查
因此:
- 现在的问题已经不是“规则文件本体不存在”
- 而是**规则来源策略仍然是硬编码单规则集**
当前仍待补的问题是:
- 不支持按文种/类型切换不同规则集
- 不支持按地区/版本切换规则集
- 不支持平台化规则绑定与管理
这不是当前链路跑不通的主阻塞,但它是后续正式化接入前必须收口的技术债。
### 4.2 govdoc 专用规则资产已入库,但尚未平台化
当前仓库已存在明确的 `govdoc` 规则目录:
- `rules/govdoc/govdoc_general/rules.yaml`
这说明:
- `govdoc` 已经不再处于“只有代码骨架,没有规则资产”的阶段
- 后端规则读取、规则列表、规则详情的最小语义已经有了真实落点
但当前仍只能视为“单规则集可运行”:
- 规则目录结构尚未接入统一规则管理策略
- `rules_path` 仍主要服务于当前单套内部公文规则
- 规则版本、切换与配置来源还没有平台化闭环
### 4.3 报告产物主闭环已打通,但历史运行仍需补跑
当前代码已补齐正式报告产物生成与写库:
- 审查完成后会生成 `annotated_docx`
- 审查完成后会生成 `html_report`
- 审查完成后会生成 `paragraph_html`
- 产物会落入 `govdoc_report_artifacts`
并且已做过真实运行验证。
但仍有两个现实问题没有自动消失:
- 历史上在修复前跑成功的 run,并不会自动补出产物
- 这类历史 run 需要重新触发一次审查,才能补齐正式报告文件
### 4.4 页面接入已通,但真实登录态联调尚未完成
虽然本文档不展开前端全部细节,但从当前代码与运行态核对结果看,前端接入边界已经比较明确:
- `/govdoc/audits` 已接到当前 `legal-platform-frontend`
- 页面真实数据请求走的是 `/api/govdoc/* -> 8096/api/govdoc/*`
- 未登录访问时,`app/(audit)/layout.tsx -> requireAuth()` 会先基于 `user_info` cookie 重定向到 `/login`
- `/api/*` 请求上的 `Authorization``middleware.ts``access_token` cookie 注入
因此当前状态更适合描述为:
- 前端页面和代理链路已经接通
- 当前仍缺“带真实登录态”的完整回归验收
- 当前若页面跳 `/login` 或接口 `401`,不能再直接判断为“govdoc 没接后端”
---
## 5. 当前已知运行阻塞
以下是“现在就会影响模块能否真实跑通”的已知阻塞。
### 5.1 阻塞一:正式运行进程与旧链路混用
这是当前最关键、最真实的运行阻塞。
现状:
- 当前仓库后端标准端口应为 `8096`
- 当前仓库 worker 应从 `leaudit-platform/scripts/start_worker.sh` 启动
- 实机上曾长期存在旧 worker
- `python start_worker_with_routing.py --config-port 8096`
- `cwd=/home/wren-dev/Porject/docauditai`
- 实机联调过程中还出现过:
- `5173` 前端入口存在
-`8096` 没有当前仓库后端在监听
- 因此页面表现为 `502 / 404 / 500` 来回切换
结果:
- 浏览器打开页面,不代表当前仓库后端已经真正生效
- 即使代码已经修好,只要正式进程仍混用旧项目,上层依然会报错
结论:
- **当前 `govdoc` 最大阻塞已经不是接口代码未接通,而是部署运行链路未彻底切回当前仓库。**
### 5.2 阻塞二:旧 `docauditai` worker 仍长期存活
当前机器上已确认存在旧进程:
- `python start_worker_with_routing.py --config-port 8096`
- `cwd=/home/wren-dev/Porject/docauditai`
- `PPID=1`
- 标准输出与错误输出落在 `/tmp/worker_8096.log`
这说明它更像是:
- 历史上人工或脚本后台拉起后长期遗留的旧 worker
它与当前仓库的主要冲突点不是抢占 `8096` HTTP 端口,而是:
- 它仍可能消费旧 `docauditai` 任务链路
- 它会制造“页面是新的,执行链还是旧的”的混合运行态
- 它会严重干扰“问题究竟在当前仓库还是旧仓库”的判断
在没有确认任务投递、结果写回、旧队列消费都已切到当前仓库前,不宜只凭主观感觉直接停掉该进程。
### 5.3 阻塞三:规则来源策略仍是临时写法
当前 `_resolve_rules_path()` 只使用硬编码候选路径。
这意味着即便后续补了规则文件,也仍然存在以下待补问题:
- 不支持按文档类型选择不同规则
- 不支持按地区 / 版本 / 规则集切换
- 不支持平台化规则管理
这个问题不一定导致“立刻报错”,但会阻碍后续正式上线。
### 5.4 阻塞四:当前终端启动方式不等于正式部署方式
本次排障中还发现一个容易误判的问题:
- 在当前 Codex 执行环境里,普通“后台启动后退出命令”的方式,子进程可能随会话一起被回收
- 因此会出现:
- 日志显示 `startup complete`
- 但随后端口马上消失
这个现象说明:
- 不能把当前临时终端会话,等同于正式 supervisor / systemd / PM2 / nginx upstream 部署环境
- 正式部署必须由稳定守护方式接管
- 不能仅凭一次临时 shell `start` 成功,就判断运行问题已经彻底解决
这属于运行验证边界,不属于 govdoc 业务逻辑问题。
---
## 6. 当前运行依赖清单
从“要让 `govdoc` 至少完成一次真实审查”角度,当前最小运行依赖如下。
### 6.1 数据库依赖
- `leaudit_documents`
- `leaudit_document_files`
- `govdoc_runs`
- `govdoc_rule_results`
- `govdoc_report_artifacts`
并且需执行当前 `schema_add_govdoc_module.sql`,保证以下列存在:
- `govdoc_runs.rules_path`
- `govdoc_rule_results.skip_reason`
- `leaudit_documents.engine_type`
### 6.2 文件与存储依赖
- 上传文档需能写入 OSS / MinIO
- worker 执行时需能下载原始文档到本地临时目录
### 6.3 异步任务依赖
- Celery worker 需可消费当前 `leaudit-platform` 队列
- 当前实际队列为 `leaudit.normal` / `leaudit.urgent`
- worker 进程需可访问数据库、OSS、本地临时目录
### 6.4 规则引擎依赖
- 必须存在可用的 `govdoc rules.yaml`
- `rulesPath` 必须能被 service 层解析出来
- worker 所在运行环境必须能读取该规则文件
### 6.5 解析与报告依赖
- `python-docx` 相关解析依赖需正常
- 段落解析、规则执行、结构/大纲构建需可正常运行
- 审查完成后需能生成并上传正式报告产物
---
## 7. 当前剩余细节清单
从“业务语义已经基本对齐”往“可稳定交付”推进,当前剩余细节主要有这些:
### 7.1 运行部署侧
- 正式 `8096` 后端进程要固定切到当前 `leaudit-platform`
- 正式 worker 要确认只消费当前 `leaudit-platform` 队列
-`docauditai``start_worker_with_routing.py` 需要在确认安全前置条件后退出正式链路
- `5173` 对应的 nginx / 前端上游要固定指向当前前端服务
- 需要一份正式重启与巡检手册,避免以后又混回旧进程
### 7.2 数据与历史运行侧
- 修复前的历史成功 run 需要补跑一次,才能产出正式报告文件
- 需要确认 `leaudit_documents.current_run_id` 是否都正确指向最新成功 run
### 7.3 产品细节侧
- `canonical.docx``result.json` 还没有作为显式产物沉淀
- 前端某些展示位仍以 `run completed` 为主判断,而不是严格以产物存在性判断
- 按钮开放策略还需要继续保持“和其他文档类型一致,但不额外放出不该开放的按钮”
### 7.4 验收侧
- 需要带真实登录态回归验证:
- 列表页
- 详情页
- HTML 报告
- DOCX 报告
- 段落联动视图
- 重跑与历史 run 切换
---
## 8. 当前结论
截至 2026-05-17`govdoc` 当前真实状态应表述为:
- 业务语义基线已经明确
- 后端主链路已经接通
- 正式报告产物主闭环已经补齐
- 前端列表/详情接口已接到当前后端契约
- 当前 `rules/govdoc/govdoc_general/rules.yaml` 已存在且已被真实运行验证过
- 当前最主要问题已经转为运行部署链路不稳定,而不是业务逻辑未实现
因此后续工作重点不应再回到“列表接口有没有接上”,而应转向:
- 固化正式运行方式
- 清理旧 worker / 旧上游
- 带登录态做完整联调验收