# 医疗病历质控系统 - 新版流程说明 ## 📋 更新日期 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`