Files
leaudit-platform-backend/docs/权限与地区隔离/新平台评查点与评查组真实模型梳理.md
T

248 lines
7.2 KiB
Markdown

# 新平台评查点与评查组真实模型梳理
## 1. 先给结论
前面把“新平台评查点”理解成老库 `evaluation_points` 主表,这是错误的。
当前代码里实际上并存两套链路:
1. 新平台主链路
`入口模块 -> 一级业务大类分组 -> 二级业务子类型分组 -> 规则集 -> 规则版本(YAML) -> 文档评查结果`
2. 旧兼容链路
`/api/v3/evaluation-points` -> `docauditai.evaluation_points`
也就是说:
- 新平台“评查组/评查点分组”是真正的主配置骨架。
- 新平台运行时真正承载评查规则内容的,不是 `evaluation_points` 行数据,而是 `leaudit_rule_sets + leaudit_rule_versions` 中的 YAML 规则。
- 旧的“评查点管理”页面和 `/v3/evaluation-points` 目前仍然挂在老库兼容链路上,还没有完全切到新平台主模型。
## 2. 新平台真实对象关系
### 2.1 一级分组不是老地区分组
新平台一级分组已经不是“梅州/揭阳/省级”这种地区概念,而是业务大类根:
- 合同
- 行政卷宗
- 后续新增业务大类
对应证据:
- `scripts/创建sql/migrate_rule_groups_to_business_roots.sql`
- `fastapi_modules/fastapi_leaudit/services/impl/documentServiceImpl.py`
- `fastapi_modules/fastapi_leaudit/services/impl/evaluationPointGroupServiceImpl.py`
其中迁移脚本已经把目标写得很清楚:
- 一级分组 = 业务大类
- 二级分组 = 具体业务类型
- 规则集 = 挂在二级分组下
- 入口模块 = 绑定一级分组
### 2.2 二级分组才是运行时的“业务子类型”
二级分组必须绑定具体 `document_type_id`,用于表达:
- 建设工程合同
- 买卖合同
- 行政许可-新办
- 行政许可-延续
上传文档时,后端校验 `group_id` 是否属于当前 `document_type_id`,见:
- `documentServiceImpl.py``_resolveDocumentGroupId`
说明当前系统真实运行时,文档已经开始依赖:
- 文档类型
- 二级分组
- 一级根分组
而不是依赖老 `evaluation_points` 主表。
### 2.3 真正承载“评查点内容”的是规则集与规则版本
新平台分组页不是在维护老式点表,而是在维护:
- `leaudit_rule_group_bindings`
- `leaudit_rule_sets`
- `leaudit_rule_versions`
并且“新建规则集/YAML”动作会:
1. 根据二级分组推导 `rule_type`
2. 调用 `RuleService.CreateVersion(...)`
3. 生成规则版本 YAML
4. 反查对应 `rule_set_id`
5. 自动把规则集绑定到当前二级分组
对应代码:
- `evaluationPointGroupServiceImpl.py``CreateRuleDraft`
- `ruleServiceImpl.py``CreateVersion` / `ListSets` / `GetContent`
这说明新平台里的“评查点”更接近:
- 规则 YAML 中的一条条规则项
- 或某个规则集里的规则集合
而不是老系统那种独立的 `evaluation_points` 业务主表记录。
## 3. 前端页面语义已经分叉
### 3.1 `rule-groups` 页面是新平台主入口
前端 `RuleGroupsClient.tsx` 的语义已经非常明确:
- 展示一级业务大类
- 展示二级子类型
- 给二级子类型绑定规则集
- 直接创建规则 YAML 草稿
- 查看规则集可用版本和可用规则数
这页对应的是新平台主模型,不是老分组页换皮。
### 3.2 `rules/list`、`rules/new` 仍然是旧评查点页面
前端这两页仍在调用:
- `/api/v3/evaluation-points`
后端服务 `EvaluationPointServiceImpl` 明确连接:
- `LEGACY_RULE_DB_NAME`
- 默认库 `docauditai`
说明这两页还是旧兼容页面,并没有真正迁到新平台主链路。
## 4. 文档评查运行链路怎么命中分组
当前文档链路已经和新分组模型发生真实耦合:
1. 文档上传时可带 `group_id`
2. 后端校验该 `group_id` 必须是有效二级分组
3. 系统再反解一级根分组,用于归档和版本链路
4. 文档列表、详情、统计也会回查 `leaudit_evaluation_point_groups`
对应代码集中在:
- `documentServiceImpl.py`
这意味着:
- 分组模型已经进入实际业务运行面
- 它不是“还没启用的设计稿”
## 5. 为什么我前面会判断错
因为仓库里仍保留了“评查点管理”老接口与老页面:
- `EvaluationPointController`
- `EvaluationPointServiceImpl`
- `legal-platform-frontend/app/(audit)/rules/*`
它们让表面上看起来仍像“评查点主表驱动”。
但继续往下看新分组页、规则集页、文档上传与文档评查链路,就会发现当前新平台实际已经是:
- 分组承接业务结构
- 规则集承接规则内容
- 文档按分组与规则集运行
所以真正的问题不是“给老 `evaluation_points` 补 tenant_code 就完了”,而是:
- 哪些页面仍停留在旧兼容链路
- 哪些运行链路已经切到新分组模型
- 租户边界应该落在新分组/文档/规则集哪一层
## 6. 当前最重要的纠偏结论
### 6.1 不应再把旧 `evaluation_points` 当成新平台主模型
旧链路只能视为:
- 兼容管理页
- 过渡接口
- 待迁移遗留
不能再把它作为后续“租户化/权限化/评查模块改造”的主战场。
### 6.2 新平台真正要分析的核心表
后续围绕评查点/评查组,应优先分析这些对象:
- `leaudit_evaluation_point_groups`
- `leaudit_rule_group_bindings`
- `leaudit_rule_sets`
- `leaudit_rule_versions`
- `leaudit_documents.group_id`
- `leaudit_review_point_audits`
### 6.3 “评查点”一词在当前系统里有双重含义
当前仓库里“评查点”至少有两层语义:
1. 旧语义
老库 `evaluation_points` 里的单条配置记录
2. 新语义
规则集/YAML 里的具体规则项,以及文档评查结果里的单个 review point
后续文档和代码改造必须把这两个概念拆开命名,否则一定继续误判。
建议统一命名:
- 旧链路:`legacy_evaluation_point`
- 新链路配置骨架:`rule_group / subtype_group`
- 新链路规则内容:`rule_set / rule_version / yaml_rule`
- 运行结果:`review_point_result`
## 7. 对后续改造的直接影响
### 7.1 评查模块后续工作应拆成两条线
第一条:新平台主链路
- 分组
- 文档类型
- 入口模块
- 文档上传
- 规则集绑定
- 评查运行结果
第二条:旧兼容链路
- `/v3/evaluation-points`
- 旧评查点列表/新增/编辑页面
- 老库 `docauditai.evaluation_points`
### 7.2 现在优先级更高的不是“继续补旧点评租户字段”
而是先回答这几个问题:
1. 新平台二级分组是否需要直接租户化
2. 规则集绑定是否需要租户边界
3. 文档上传时的 `group_id` 选择是否需要按租户过滤
4. 文档评查结果是否需要按租户隔离回查
5.`rules/list``rules/new` 是否继续保留,还是迁入新规则集页
## 8. 下一步建议
建议后续按下面顺序继续:
1. 先梳理“新平台主链路的租户边界设计”
重点看:入口模块、文档类型、一级分组、二级分组、文档上传、文档列表、规则集绑定
2. 再单独梳理“旧评查点兼容链路去留方案”
明确:
- 继续兼容多久
- 是否只读
- 是否要做迁移映射
3. 最后才决定是否还要继续改 `/v3/evaluation-points`
否则会继续在“旧兼容页”和“新运行主链路”之间来回误伤。