# HealthLink-HIS 数据流优化详细设计 > **文档类型**: 详细设计 > **版本**: v1.0 > **日期**: 2026-06-19 --- ## 一、数据流架构总览 ``` ┌─────────────────────────────────────────────────────────────────────┐ │ 数据流架构全景 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ 事件驱动层 (Event Bus) │ │ │ │ RabbitMQ + Spring Event + WebSocket │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 诊断同步 │ │ 执行反馈 │ │ 计费触发 │ │ 危急推送 │ │ │ │ 事件 │ │ 事件 │ │ 事件 │ │ 事件 │ │ │ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ │ │ │ │ │ ┌────▼─────────────▼─────────────▼─────────────▼────────────┐ │ │ │ 业务处理层 │ │ │ │ 门诊 → 住院 → 护理 → 药品 → 检验 → 病案 → 统计 │ │ │ └──────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ 数据存储层 │ │ │ │ PostgreSQL (OLTP) + ClickHouse (OLAP) │ │ │ └─────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘ ``` --- ## 二、7条关键链路详细设计 ### 链路1: 门诊→住院诊断同步 #### 业务流程 ``` 门诊诊断 → 入院申请 → 入院登记 → 自动复制诊断 → 住院病历 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 入院登记保存后 | | 事件 | `InpatientAdmissionEvent` | | 处理器 | `DiagnosisSyncHandler` | | 数据流 | adm_encounter_diagnosis → 复制到住院encounter | #### 代码位置 - 事件发布: `InpatientManageAppServiceImpl.saveAdmission()` - 事件处理: `DiagnosisSyncHandler.handleAdmissionEvent()` - 数据复制: `EncounterDiagnosisService.copyFromOutpatient()` --- ### 链路2: 医嘱→护理执行反馈 #### 业务流程 ``` 医嘱开立 → 护士执行 → 执行结果 → 通知医生 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 护士执行医嘱后 | | 事件 | `OrderExecutionEvent` | | 处理器 | `OrderExecutionFeedbackHandler` | | 通知方式 | WebSocket + 消息推送 | #### 代码位置 - 事件发布: `NursingExecutionController.executeOrder()` - 事件处理: `OrderExecutionFeedbackHandler.handleExecutionEvent()` - 通知推送: `MessageService.pushToDoctor()` --- ### 链路3: 药品→发药自动计费 #### 业务流程 ``` 处方开具 → 药品审核 → 发药确认 → 自动计费 → 库存更新 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 发药确认后 | | 事件 | `MedicationDispensedEvent` | | 处理器 | `AutoBillingHandler` | | 计费逻辑 | 根据药品单价×数量生成费用记录 | #### 代码位置 - 事件发布: `PharmacyDispensaryService.dispense()` - 事件处理: `AutoBillingHandler.handleDispensedEvent()` - 计费生成: `ChargeService.createMedicationCharge()` --- ### 链路4: 检验→危急值推送 #### 业务流程 ``` 检验报告 → 危急值识别 → 推送通知 → 医生确认 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 检验报告发布时 | | 事件 | `LabReportPublishedEvent` | | 处理器 | `CriticalValueHandler` | | 推送方式 | WebSocket + APP推送 | #### 代码位置 - 事件发布: `LabReportService.publishReport()` - 事件处理: `CriticalValueHandler.handleReportEvent()` - 推送: `MessageService.pushCriticalValue()` --- ### 链路5: 病案→DRG自动入组 #### 业务流程 ``` 出院小结 → 首页生成 → DRG入组 → 医保上传 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 出院结算后 | | 事件 | `DischargeCompletedEvent` | | 处理器 | `DrgGroupingHandler` | | 入组逻辑 | 主诊断+主手术→DRG分组 | #### 代码位置 - 事件发布: `InpatientChargeService.discharge()` - 事件处理: `DrgGroupingHandler.handleDischargeEvent()` - DRG入组: `DrgGroupingService.group()` --- ### 链路6: 护理→质控自动触发 #### 业务流程 ``` 护理记录 → 质控规则匹配 → 质控评分 → 指标汇总 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 护理记录保存后 | | 事件 | `NursingRecordSavedEvent` | | 处理器 | `NursingQualityHandler` | | 质控规则 | 基于护理文书规范的检查规则 | #### 代码位置 - 事件发布: `NursingRecordService.saveRecord()` - 事件处理: `NursingQualityHandler.handleRecordEvent()` - 指标汇总: `NursingQualityIndicatorService.aggDaily()` --- ### 链路7: 统计→实时推送 #### 业务流程 ``` 数据更新 → 统计计算 → WebSocket推送 → 前端刷新 ``` #### 技术实现 | 组件 | 实现 | |------|------| | 触发时机 | 关键业务操作后 | | 事件 | 多种业务事件 | | 处理器 | `StatisticsPushHandler` | | 推送方式 | WebSocket | #### 代码位置 - 事件监听: `StatisticsPushHandler`监听多种事件 - 统计计算: `StatisticsService.calculateRealtime()` - 推送: `WebSocketService.pushToDashboard()` --- ## 三、事件驱动架构设计 ### 3.1 事件定义 ```java // 业务事件基类 public abstract class BusinessEvent { private String eventId; private Date eventTime; private String eventType; private Long tenantId; } // 具体事件 public class InpatientAdmissionEvent extends BusinessEvent { ... } public class OrderExecutionEvent extends BusinessEvent { ... } public class MedicationDispensedEvent extends BusinessEvent { ... } public class LabReportPublishedEvent extends BusinessEvent { ... } public class DischargeCompletedEvent extends BusinessEvent { ... } public class NursingRecordSavedEvent extends BusinessEvent { ... } ``` ### 3.2 事件发布 ```java // 在业务Service中发布事件 @Service public class InpatientManageAppServiceImpl { @Autowired private ApplicationEventPublisher eventPublisher; public void saveAdmission(InpatientAdmission admission) { // 保存入院记录 admissionService.save(admission); // 发布事件 eventPublisher.publishEvent(new InpatientAdmissionEvent(admission)); } } ``` ### 3.3 事件处理 ```java // 事件处理器 @Component public class DiagnosisSyncHandler { @EventListener public void handleAdmissionEvent(InpatientAdmissionEvent event) { // 复制门诊诊断到住院 diagnosisService.copyFromOutpatient(event.getEncounterId()); } } ``` --- ## 四、实施计划 | 阶段 | 时间 | 链路 | 工时 | |------|------|------|:----:| | Phase 1 | Week 1 | 门诊→住院诊断同步 | 2天 | | Phase 1 | Week 1 | 医嘱→护理执行反馈 | 2天 | | Phase 1 | Week 2 | 药品→发药自动计费 | 2天 | | Phase 1 | Week 2 | 检验→危急值推送 | 2天 | | Phase 2 | Week 3 | 病案→DRG自动入组 | 3天 | | Phase 2 | Week 3 | 护理→质控自动触发 | 2天 | | Phase 2 | Week 4 | 统计→实时推送 | 3天 | | **合计** | **4周** | **7条链路** | **14天** | --- ## 五、验证标准 | 链路 | 验证方式 | 通过标准 | |------|---------|---------| | 门诊→住院 | 创建住院→检查诊断 | 诊断自动复制 | | 医嘱→护理 | 执行医嘱→检查通知 | 通知自动发送 | | 药品→计费 | 发药→检查费用 | 费用自动记录 | | 检验→危急值 | 发布报告→检查推送 | 推送自动发送 | | 病案→DRG | 出院→检查入组 | DRG自动入组 | | 护理→质控 | 保存记录→检查评分 | 评分自动计算 | | 统计→推送 | 业务操作→检查推送 | 数据实时推送 | --- > **文档版本**: v1.0 | **最后更新**: 2026-06-19