- 新增租户配置工具类TenantOptionUtil,支持租户配置项获取及临时兼容方案 - 实现药房共通服务PharmacyDispensaryCommonService,提供初始化、药品查询、分页等功能 - 开发药房发药单服务PharmacyDispensaryDispensingOrderService,支持发药单详情及编辑操作 - 创建药房损益单服务PharmacyDispensaryProfitLossOrderService,处理损益单业务逻辑 - 构建药房请领单服务PharmacyDispensaryRequisitionOrderService,请领流程管理 - 设计药房退库单服务PharmacyDispensaryReturnToWarehouseOrderService,退库业务处理
282 lines
9.8 KiB
Markdown
282 lines
9.8 KiB
Markdown
# 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
|