Files
leaudit-platform-backend/docs/HANDOFF.md
T

450 lines
18 KiB
Markdown
Raw 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.
# 开发交接文档 — leaudit-platform
> 本轮整理时间:2026-04-29 ~ 2026-05-04
> 工作目录:`/home/wren-dev/Porject/leaudit-platform`
> 当前主线:前端 `new_doc_review` + 后端 `fastapi_modules/fastapi_leaudit`
---
## 仓库信息
| 项目 | 路径 | 分支 | Remote |
|------|------|------|--------|
| 后端 | `/home/wren-dev/Porject/leaudit-platform` | `main` | 当前未配置 remote |
| 前端 | `/home/wren-dev/Porject/leaudit-platform/new_doc_review` | `wren` | `http://git.7bm.co:1024/jande/new_doc_review.git` |
## 数据库 / 环境
| 项目 | 当前值 |
|------|--------|
| 后端 API | `http://nas.7bm.co:8096` |
| 前端开发地址 | `http://nas.7bm.co:5173` / 本地 `http://localhost:5173` |
| PostgreSQL Host | `nas.7bm.co` |
| PostgreSQL Port | `54302` |
| Database | `leaudit_platform` |
| DB User | `docauditai_admin` |
说明:
- 仓库内不记录数据库密码,仍需通过安全渠道获取
- 当前用户已明确允许按现在配置的真实库继续联调
- 文档里的“旧系统 / 老库”通常指 `docauditai` 侧历史表,不是让前端继续直接走旧接口
---
## 一、先看结论
当前项目状态可以直接概括成 4 句话:
1. 首页入口、菜单、RBAC、文档类型、规则组、文档上传这条主链路已经基本串起来了。
2. 当前主要问题不是“完全不能用”,而是“新旧模型并存,部分语义还没完全收口”。
3. 当前正确方向很明确:前端尽量统一走新后端接口,PostgREST 只保留存量过渡,不再新增依赖。
4. 还要继续收口的核心是:上传后评查链路、文档类型到规则集的关系表达、以及旧字段旧文案清理。
### 当前正式阅读顺序
1. `docs/HANDOFF.md`
2. `docs/迁移与兼容/旧接口文档导航.md`
3. `docs/权限与地区隔离/权限与地区隔离文档导航.md`
4. `docs/leaudit/README.md`
5. `docs/规则编辑/README.md`
---
## 二、本轮已完成的关键工作
### 1. 文档列表详情 / 更新 / 删除已从 PostgREST 迁到新后端接口
后端已补接口:
- `GET /api/documents/{id}`
- `PUT /api/documents/{id}`
- `DELETE /api/documents/{id}`
实现口径:
- 文档列表、详情、更新、删除都围绕 `leaudit_documents` / `leaudit_document_files`
- 删除为软删除,并自动维护最新版本标记
- 更新允许维护 `documentNumber``remark``isTestDocument``auditStatus` 等元数据
对应文档:
- `docs/文档管理/文档上传与列表接口分析.md`
### 2. 文档数据隔离已补到后端强约束
当前规则:
- `super_admin` / `provincial_admin`:看全量
- `admin`:只能看本地市 `region = user.area`
- `common`:只能看自己上传的文档
已覆盖范围:
- 文档列表
- 文档详情
- 文档更新
- 文档删除
这意味着“每个地市管理员只能改各自数据”的要求,已经不只是前端过滤,而是后端接口层强制执行。
### 3. 上传页主依赖已改为新接口
已完成:
- `GET /api/document-types`
- `GET /api/documents/list` 支持 `userId`、日期范围等过滤
- `GET /api/v2/system/queue/status`
- `POST /api/upload` 前端已改为扁平 `multipart/form-data`
当前口径:
- 主文件上传已经走新后端
- 合同附件上传仍然是要继续收口的重点场景,因为它与规则抽取、评查触发紧密耦合
### 4. 文档类型 CRUD 与绑定能力已切到新后端
后端已支持:
- `GET /api/document-types`
- `GET /api/document-types/{id}`
- `POST /api/document-types`
- `PUT /api/document-types/{id}`
- `DELETE /api/document-types/{id}`
当前文档类型支持维护:
- 编码 / 名称 / 描述
- 入口模块绑定
- 启停状态
- 规则集绑定(`ruleSetIds`
说明:
- 这部分是“文档类型绑定入口模块”和“文档类型绑定规则集”的基础设施
- 目前页面 UI 仍在继续按老系统风格收口,但主接口已具备
### 5. 文档类型子页权限问题已收口一轮
已补的关键修复:
- `route-alias` 从零散判断升级为配置表
- 给新建/编辑/详情/结果页补齐父列表权限映射
- 新增约束文档,明确:什么时候该加 alias,什么时候该补真实菜单路由
- 已增加独立测试脚本,`npm run test:route-aliases` 可直接回归
关键文件:
- `new_doc_review/app/utils/route-alias.shared.js`
- `new_doc_review/docs/route-alias-guidelines.md`
已覆盖的典型路径:
- `/documents/list -> /documents`
- `/document-types/new -> /document-types`
- `/contract-template/detail/:id -> /contract-template/list`
- `/contract-draft/:id -> /contract-template/list`
- `/chat-with-llm/chat -> /chat-with-llm`
- `/chat-with-llm/dataset-manager -> /chat-with-llm`
### 6. 首页、菜单、最小可见路由与真实 RBAC 路由已补齐
这轮不只是 alias 修了一下,而是把“用户能否看到模块、能否从侧边栏稳定进入”的缺口补了:
- `minimal-scope.ts` 已补 `/contract-template``/cross-checking``/document-types`
- 后端 `rbacServiceImpl.py` 同步补最小可见路由逻辑
- 已新增并执行首页 / 前端路由范围 seed 脚本
结果:
- `chat-with-llm`
- `contract-template`
- `cross-checking`
- `document-types`
这些模块不再只靠历史残留路由“碰运气出现”,而是进入了真实的 RBAC 可见范围。
### 7. Sidebar 已补路径兜底,不再只依赖 sessionStorage
之前问题:
- 直接刷新子页面或从地址栏直开,侧边栏上下文容易丢失
已完成:
- `new_doc_review/app/components/layout/Sidebar.tsx` 增加基于路径的 fallback 识别
- 已覆盖 settings / cross-checking / chat / contract-template / contract-draft 等模块
结果:
- 刷新后仍能显示正确模块上下文
- 用户不会因为 sessionStorage 丢失而看到错误的侧栏状态
### 8. 合同管理模块命名已统一一轮
统一方向:
- 模块层叫:`合同管理`
- 子功能叫:`模板搜索``模板列表`
已覆盖:
- 路由 seed
- 最小路由 scope
- 页面标题与描述
- 侧边栏模块名
说明:
- 这次统一的是“首页入口 / 侧边栏 / 页面标题”的基础口径
- 仍需继续检查细碎页面文案,避免出现“合同模板 / 合同管理 / 模板列表”混用过多
### 9. 规则集可用性问题已定位到真实规则文件并修复
发现的问题:
- `借款合同` 的规则集显示“可用规则数 0”
- 根因不是前端,而是 MinIO 上真实规则文件 DSL 非法
已修复:
- `rules/contract_loan/rules.yaml`
- `new_doc_review/mock-data/leaudit-rules/packs/yc/contract_loan/rules.yaml`
- 同步替换了 MinIO 对象并保留备份
结果:
- `contract.loan.general``usableRuleCount` 已恢复为 `10`
### 10. 评查点分组与评查点主数据已进入“新接口包旧数据”的过渡形态
这是当前系统最容易混乱的部分,结论要写清楚:
- 前端页面与后端接口层,正在往新系统接口收口
- 但评查点分组 / 评查点主数据的正式新库模型还没有完全替代旧数据
- 所以这部分当前采用的是:**新接口 + 老库存量数据** 的过渡方案
已补接口:
- `GET /api/v3/evaluation-point-groups/by-document-types`
- `GET /api/v3/evaluation-point-groups/{id}/children`
- `GET /api/v3/evaluation-points`
- `GET /api/v3/evaluation-points/{id}`
- `POST /api/v3/evaluation-points`
- `PUT /api/v3/evaluation-points/{id}`
- `DELETE /api/v3/evaluation-points/{id}`
- `GET /api/v3/evaluation-points/attribute-types`
当前业务解释:
- 一级分组:业务大类根节点
- 二级分组:实际挂评查点、挂规则集的子类型节点
- 文档类型绑定的是一级分组范围
- 业务页面实际使用时,再展开到对应二级分组与规则
### 11. 规则组迁移方案文档与脚本已经补齐
已补充:
- `scripts/创建sql/precheck_rule_group_migration.sql`
- `scripts/创建sql/migrate_rule_groups_to_business_roots.sql`
- `scripts/创建sql/migrate_rule_groups_to_doc_type_roots.sql`
- `docs/评查点分组/评查点分组迁移执行前检查清单.md`
说明:
- 这部分还属于“迁移方案与执行准备已就绪”
- 是否在正式库落地,需要按检查清单逐步执行
### 12. 合同上传失败原因已开始朝前端可读化方向收口
当前已明确的真实报错语义包括:
- 当前文档类型未绑定可用规则数
- 入口模块配置异常
- 某规则集不可运行 / 规则文件异常
说明:
- 这块产品表达要统一成“可用规则数”,不要再出现“可用版本”旧说法
- 页面上还需要继续把这些错误稳定映射成用户可理解提示
### 13. 系统使用统计口径已经收口到“两份主文档 + 一期三视角”
当前这块不要再按“需求 / 表设计 / 接口设计 / 任务拆解”四散维护,已经统一收口为两份主文档:
- `docs/系统使用统计/系统使用统计最终版.md`
- `docs/系统使用统计/系统使用统计实施版.md`
当前正式口径:
- 功能定位是“使用统计”,不是“全量行为审计”
- 一期只统计:登录、上传、评查
- 一期前端页面只做 3 个视角:
- 总览
- 按部门
- 按地区
- 页面入口放在“系统设置”
- 地区管理员只能看本地区数据,必须由后端做地区隔离
当前实现状态:
- 后端统计接口、登录补数、评查触发人补数、RBAC 与 SQL 已落地
- SQL 已统一整理到 `scripts/创建sql/`
- 上线与验收入口文档统一看:
- `scripts/创建sql/README.md`
- `docs/系统使用统计/系统使用统计实施版.md`
---
## 三、当前业务逻辑口径
### 1. 入口模块、文档类型、规则组、规则集之间的关系
当前建议口径:
1. 入口模块:业务入口容器,例如合同、卷宗、后续新增模块
2. 文档类型:属于某个入口模块下的具体业务类型
3. 一级分组:该文档类型所属的评查业务大类
4. 二级分组:该业务大类下的实际子类型
5. 规则集:挂在二级分组下的具体可执行规则包
也就是:
`入口模块 -> 文档类型 -> 一级分组 -> 二级分组 -> 规则集 -> 上传抽取评查`
### 2. 为什么规则集挂在二级分组下
原因不是硬编码,而是为了和老系统评查实际执行逻辑对齐:
- 一级分组负责定义“这类文档能进入哪棵规则树”
- 二级分组才是实际选择具体规则配置的位置
- 上传或评查运行时,最终命中的也是子类型级别的规则集
### 3. 为什么不能继续新增 PostgREST 依赖
因为现在最容易出问题的地方,几乎都和它有关:
- 路径找不到
- 结构和现有后端不一致
- 权限口径分裂
- 老字段命名污染当前页面文案
所以现在的原则已经很明确:
- 已经有新后端接口的页面,不再回退到 PostgREST
- 还没替换完的地方,只做过渡,不扩散
---
## 四、关键代码位置速查
### 后端
| 位置 | 作用 |
|------|------|
| `fastapi_modules/fastapi_leaudit/controllers/documentController.py` | 文档上传、列表、详情、更新、删除 |
| `fastapi_modules/fastapi_leaudit/services/impl/documentServiceImpl.py` | 文档主服务实现、数据隔离、版本链处理 |
| `fastapi_modules/fastapi_leaudit/services/impl/auditServiceImpl.py` | 上传后触发评查 |
| `fastapi_modules/fastapi_leaudit/controllers/rbacAdminController.py` | RBAC 管理接口 |
| `fastapi_modules/fastapi_leaudit/services/impl/rbacAdminServiceImpl.py` | 角色、用户、权限管理逻辑 |
| `fastapi_modules/fastapi_leaudit/services/impl/rbacServiceImpl.py` | 路由权限、最小可见路由、菜单可见性 |
| `fastapi_modules/fastapi_leaudit/controllers/evaluationPointGroupController.py` | 评查点分组 v3 接口 |
| `fastapi_modules/fastapi_leaudit/services/impl/evaluationPointGroupServiceImpl.py` | 分组树、按文档类型反查分组 |
| `fastapi_modules/fastapi_leaudit/controllers/evaluationPointController.py` | 评查点主数据 v3 接口 |
| `fastapi_modules/fastapi_leaudit/services/impl/evaluationPointServiceImpl.py` | 评查点列表/详情/增删改 |
| `fastapi_modules/fastapi_leaudit/services/impl/ruleServiceImpl.py` | 规则集列表、可用规则数、规则文件校验 |
| `fastapi_modules/fastapi_leaudit/controllers/usageStatsController.py` | 系统使用统计接口 |
| `fastapi_modules/fastapi_leaudit/services/impl/usageStatsServiceImpl.py` | 登录统计写入、总览/部门/地区统计查询 |
### 前端
| 位置 | 作用 |
|------|------|
| `new_doc_review/app/api/files/files-upload.ts` | 上传主文件 / 附件相关前端调用 |
| `new_doc_review/app/api/files/documents.ts` | 文档列表、详情、更新、删除 API |
| `new_doc_review/app/api/document-types/document-types.ts` | 文档类型 CRUD 与绑定接口 |
| `new_doc_review/app/api/evaluation_points/rules.ts` | 评查点列表、详情、按文档类型分组查询 |
| `new_doc_review/app/api/evaluation_points/rule-groups.ts` | 评查点分组页 API |
| `new_doc_review/app/components/layout/Sidebar.tsx` | 侧边栏模块识别与路径 fallback |
| `new_doc_review/app/hooks/usePermission.tsx` | 路由权限判断与 alias 应用 |
| `new_doc_review/app/utils/route-alias.shared.js` | 子页权限映射配置表 |
| `new_doc_review/app/routes/document-types.*` | 文档类型列表 / 新建编辑页 |
| `new_doc_review/app/routes/documents.*` | 文档列表 / 编辑页 |
| `new_doc_review/app/routes/rule-groups*` | 评查点分组页 |
| `new_doc_review/app/routes/rules.*` | 评查点规则列表 / 新建编辑页 |
| `new_doc_review/app/routes/files.upload.tsx` | 上传页 |
### 规则 / 脚本 / 文档
| 位置 | 作用 |
|------|------|
| `rules/contract_loan/rules.yaml` | 借款合同规则集修复点 |
| `scripts/创建sql/README.md` | SQL 总导航、执行顺序、上线手册入口 |
| `scripts/创建sql/seed_frontend_route_scope.sql` | 前端真实路由范围 seed |
| `scripts/创建sql/user_rbac_seed.sql` | RBAC 基础 seed |
| `scripts/创建sql/seed_home_entry_modules.sql` | 首页入口模块 seed |
| `scripts/创建sql/precheck_rule_group_migration.sql` | 分组迁移前检查 |
| `scripts/创建sql/migrate_rule_groups_to_business_roots.sql` | 按业务根迁移分组 |
| `scripts/创建sql/migrate_rule_groups_to_doc_type_roots.sql` | 按文档类型根迁移分组 |
| `docs/README.md` | 当前模块化文档总导航 |
---
## 五、下一步最该做什么
### P0:必须继续做
1. 合同附件上传与抽取评查链路继续收口
- 当前用户强调:合同附件上传是正式业务链的一部分
- 需要继续明确:附件追加 -> 合并上传 -> 抽取 -> 评查 的最终接口与页面反馈
2. 文档类型绑定页与规则组页的语义继续收口
- 用户已经多次反馈“看不直观”
- 核心不是再堆字段,而是要把“入口模块 / 文档类型 / 一级分组 / 二级分组 / 规则集”的层级展示清楚
3. 上传失败提示继续前端友好化
- 明确提示“哪个规则集不可用 / 哪个入口模块配置异常 / 当前文档类型没有可用规则数”
- 避免只弹统一 400/500
4. 系统使用统计前端继续按“一期三视角”联调
- 只优先保证“总览 + 按部门 + 按地区”整体可用
- 先不要继续扩展复杂驾驶舱、全量明细审计、额外统计口径页面
- 所有实现口径统一以 `docs/系统使用统计/系统使用统计最终版.md` 为准
5. 继续清理文档与代码中的旧术语
- `可用版本` 统一改为 `可用规则数`
- 避免“规则组 / 分组 / 规则集 / 评查点”混用造成误解
### P1:建议继续做
1. 评查点分组正式迁移是否执行
- 现在脚本和方案已具备
- 但正式执行前要先完成 precheck 并确认现网数据
2. 文档列表页与上传页剩余 PostgREST 旁路彻底清理
- 已经不是主依赖,但要继续排查存量调用
3. 规则组页 UI 再向老系统样式收口
- 用户多次强调不要大改配色
- 要沿用现有系统保守风格,不做“新设计感”重构
### P2:后续再做
1. 历史文档与临时脚本继续归档清理
2. 合同管理与 AI 对话模块命名细节再统一
3. 少量无数据导致的详情 404 页面做更友好空态提示
---
## 六、当前用户 / 角色 / 权限状态
当前已知关注角色:
- `super_admin`
- `provincial_admin`
- `admin`
- `common`
当前已经明确生效的权限方向:
- RBAC 管理接口已补细粒度权限检查
- 中文化 403 提示已打通
- 文档相关接口已带地区 / 用户隔离
- 前端子页权限映射已补一轮,但后续新页面仍要按 `route-alias-guidelines.md` 判断是否该进 alias
---
## 七、接手时不要再踩的坑
1. 不要再把“评查点分组页看到的树”理解成纯前端写死结构
- 现在目标是后端接口给树,前端只负责展示与管理
2. 不要遇到 403 就直接继续堆 alias
- 先判断:这是子页派生权限问题,还是后端根本没注册真实菜单路由
3. 不要新增 PostgREST 依赖
- 当前主线是迁出,不是再混回去
4. 不要把“文档类型绑定规则集”和“规则组页绑定规则集”理解成互斥逻辑
- 它们是不同层级的配置入口,最终都要服务同一条上传评查链路
5. 不要在文档里继续留下带密码的连接信息
---
## 八、配套主文档
- `docs/README.md`:后端 `/docs` 总导航
- `docs/迁移与兼容/旧接口文档导航.md`:接口文档导航
- `docs/权限与地区隔离/权限与地区隔离文档导航.md`:权限主线导航
- `docs/系统使用统计/系统使用统计最终版.md`:系统使用统计业务口径
- `docs/系统使用统计/系统使用统计实施版.md`:系统使用统计实施与上线口径
- `docs/leaudit/README.md`:后端架构主线
- `docs/规则编辑/README.md`:规则链路主线
- `new_doc_review/docs/route-alias-guidelines.md`:前端子页权限映射规范