|
|
@@ -0,0 +1,169 @@
|
|
|
+# 医疗病历质控系统 - 新版流程说明
|
|
|
+
|
|
|
+## 📋 更新日期
|
|
|
+2025-10-19
|
|
|
+
|
|
|
+## 🎯 核心改动
|
|
|
+
|
|
|
+### 1. 数据库表更新
|
|
|
+`quality_control_rule` 表新增字段:
|
|
|
+- `rule_desc` - 规则描述
|
|
|
+- `qc_behavior` - 质控行为(common/specific)
|
|
|
+- `del_flag` - 删除标记
|
|
|
+
|
|
|
+### 2. 实体类更新
|
|
|
+`QualityControlRule.java` 新增字段:
|
|
|
+- `ruleDesc` - 规则描述
|
|
|
+- `qcBehavior` - 质控行为
|
|
|
+
|
|
|
+### 3. 质控逻辑重构
|
|
|
+`MedicalRecordQc123Service.java` 完全重写质控流程
|
|
|
+
|
|
|
+## 🔄 新版质控流程
|
|
|
+
|
|
|
+### 流程图
|
|
|
+```
|
|
|
+开始质控
|
|
|
+ ↓
|
|
|
+查询规则表 (quality_control_rule)
|
|
|
+ ↓
|
|
|
+过滤有效规则 (qc_type_list 不为空)
|
|
|
+ ↓
|
|
|
+按 qc_behavior 分类
|
|
|
+ ├─→ common 规则 (分开质控)
|
|
|
+ │ ↓
|
|
|
+ │ 按 type 分组
|
|
|
+ │ ↓
|
|
|
+ │ 逐个 type 执行规则
|
|
|
+ │ ↓
|
|
|
+ │ 用 rule.ruleContent 查知识库
|
|
|
+ │ ↓
|
|
|
+ │ 调用大模型质控
|
|
|
+ │ ↓
|
|
|
+ │ 保存结果
|
|
|
+ │
|
|
|
+ └─→ specific 规则 (同时质控)
|
|
|
+ ↓
|
|
|
+ 合并多个 type 的内容
|
|
|
+ ↓
|
|
|
+ 用 rule.ruleContent 查知识库
|
|
|
+ ↓
|
|
|
+ 调用大模型质控
|
|
|
+ ↓
|
|
|
+ 保存结果
|
|
|
+ ↓
|
|
|
+ 完成质控
|
|
|
+```
|
|
|
+
|
|
|
+## 📊 质控行为说明
|
|
|
+
|
|
|
+### Common 规则(分开质控)
|
|
|
+- **定义**: `qc_behavior = "common"`
|
|
|
+- **行为**: 规则对每个 type 分别质控
|
|
|
+- **示例**:
|
|
|
+ - 规则A的 `qc_type_list = [0, 1, 3]`
|
|
|
+ - 执行3次质控:
|
|
|
+ 1. 规则A + type=0的内容
|
|
|
+ 2. 规则A + type=1的内容
|
|
|
+ 3. 规则A + type=3的内容
|
|
|
+
|
|
|
+### Specific 规则(同时质控)
|
|
|
+- **定义**: `qc_behavior = "specific"`
|
|
|
+- **行为**: 规则对多个 type 的内容合并后一起质控
|
|
|
+- **示例**:
|
|
|
+ - 规则B的 `qc_type_list = [0, 1, 3]`
|
|
|
+ - 执行1次质控:
|
|
|
+ - 规则B + (type=0 + type=1 + type=3 的内容合并)
|
|
|
+
|
|
|
+## 🔢 Type 对应关系
|
|
|
+
|
|
|
+| Type | 病历部分 | 字段名 |
|
|
|
+|------|---------|--------|
|
|
|
+| 0 | 入院记录 | admission_note |
|
|
|
+| 1 | 首次病程记录 | first_course_record |
|
|
|
+| 2 | 病程记录 | course_records |
|
|
|
+| 3 | 阶段小结 | stage_summary |
|
|
|
+| 4 | 查房记录 | ward_rounds |
|
|
|
+| 5 | 会诊记录 | consultation_records |
|
|
|
+| 6 | 疑难病例讨论 | difficult_case_discussion |
|
|
|
+| 7 | 超长住院讨论 | long_stay_discussion |
|
|
|
+| 8 | 死亡病例讨论 | death_case_discussion |
|
|
|
+| 9 | 抢救记录 | rescue_records |
|
|
|
+| 10 | 手术记录 | surgery_records |
|
|
|
+| 11 | 检验报告 | lab_reports |
|
|
|
+| 12 | 检查报告 | exam_reports |
|
|
|
+| 13 | 医嘱记录 | orders |
|
|
|
+| 14 | 出院小结 | discharge_summary |
|
|
|
+
|
|
|
+## 🔍 知识库调用变化
|
|
|
+
|
|
|
+### 原来
|
|
|
+```java
|
|
|
+String ragResult = fetchMatchingRules(step.label);
|
|
|
+// 传入: "主诉记录不完整,不能支持第一诊断"
|
|
|
+```
|
|
|
+
|
|
|
+### 现在
|
|
|
+```java
|
|
|
+String ragResult = fetchMatchingRules(rule.getRuleContent());
|
|
|
+// 传入: 规则的 rule_content 字段内容
|
|
|
+// 返回: 该规则对应的正反例
|
|
|
+```
|
|
|
+
|
|
|
+## 💾 结果保存
|
|
|
+
|
|
|
+### Common 规则
|
|
|
+- 每个 type 保存一条结果
|
|
|
+- `qc_type` = 对应的 type 值
|
|
|
+
|
|
|
+### Specific 规则
|
|
|
+- 只保存一条结果
|
|
|
+- `qc_type` = qcTypeList 中第一个有效的 type
|
|
|
+
|
|
|
+## 🚀 多线程支持
|
|
|
+
|
|
|
+### 串行质控(默认)
|
|
|
+```java
|
|
|
+medicalRecordQc123Service.processAllUncontrolledRecords();
|
|
|
+```
|
|
|
+
|
|
|
+### 并行质控(推荐)
|
|
|
+```java
|
|
|
+medicalRecordQc123Service.processAllUncontrolledRecords(true);
|
|
|
+```
|
|
|
+- 使用 16 个线程并行处理多份病历
|
|
|
+- 理论提升 10-15 倍速度
|
|
|
+
|
|
|
+## 📝 提示词优化
|
|
|
+
|
|
|
+新版提示词包含:
|
|
|
+- 规则编码 (ruleCode)
|
|
|
+- 规则内容 (ruleContent)
|
|
|
+- 规则描述 (ruleDesc)
|
|
|
+- 病历原文
|
|
|
+- 参考正反例(来自知识库)
|
|
|
+
|
|
|
+## ⚠️ 注意事项
|
|
|
+
|
|
|
+1. **规则过滤**: `qc_type_list` 为空或 `[]` 的规则会被自动过滤
|
|
|
+2. **空内容跳过**: 病历某部分为空时,相关规则会跳过
|
|
|
+3. **错误处理**: 单条规则失败不影响其他规则执行
|
|
|
+4. **状态管理**:
|
|
|
+ - 质控中: status = 3
|
|
|
+ - 质控完成: status = 2
|
|
|
+ - 失败回退: status = 1
|
|
|
+
|
|
|
+## 🎯 优势
|
|
|
+
|
|
|
+1. ✅ **灵活性**: 规则配置化,无需修改代码
|
|
|
+2. ✅ **可扩展**: 支持 common 和 specific 两种质控模式
|
|
|
+3. ✅ **高性能**: 支持多线程并行质控
|
|
|
+4. ✅ **易维护**: 规则与代码分离,便于管理
|
|
|
+5. ✅ **精准匹配**: 用规则内容查知识库,获取精准正反例
|
|
|
+
|
|
|
+## 📞 相关文件
|
|
|
+
|
|
|
+- 实体类: `org.ruoyi.domain.QualityControlRule`
|
|
|
+- 服务类: `org.ruoyi.chat.service.MedicalRecordQc123Service`
|
|
|
+- 多线程: `org.ruoyi.chat.executor.QcRuleExecutor`
|
|
|
+- 数据库表: `quality_control_rule`
|