Files
his/MD/architecture/DATA_FLOW_DETAILED_DESIGN.md
chenqi 11f92ebc42 feat(pharmacy): 添加药房配药模块核心功能
- 新增租户配置工具类TenantOptionUtil,支持租户配置项获取及临时兼容方案
- 实现药房共通服务PharmacyDispensaryCommonService,提供初始化、药品查询、分页等功能
- 开发药房发药单服务PharmacyDispensaryDispensingOrderService,支持发药单详情及编辑操作
- 创建药房损益单服务PharmacyDispensaryProfitLossOrderService,处理损益单业务逻辑
- 构建药房请领单服务PharmacyDispensaryRequisitionOrderService,请领流程管理
- 设计药房退库单服务PharmacyDispensaryReturnToWarehouseOrderService,退库业务处理
2026-06-21 04:35:27 +08:00

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