# 内部公文模块实施进展与运行依赖说明 ## 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 / 旧上游 - 带登录态做完整联调验收