- 新增 MD/specs/IRON_RULES.md — 执行铁律汇总(v2.0, 8条铁律) - 新增 MD/specs/BACKEND_DEVELOPMENT_STANDARD.md — 后端开发规范 - 新增 MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md — 前端开发规范 - 新增 healthlink-his-ui/AGENTS.md — 前端铁律引用 - 更新 healthlink-his-server/AGENTS.md — 同步规范文档引用 - 修复10个文档缺失的元数据(文档类型标签) - 全部30个文档通过命名规范和元数据检查
940 lines
33 KiB
Markdown
940 lines
33 KiB
Markdown
# HealthLink HIS 三甲医院达标详细设计方案
|
||
|
||
> **文档类型**: 架构设计
|
||
> **适用范围**: 三甲达标架构
|
||
> **版本**: v1.0
|
||
|
||
> **目标**: 完全符合三级甲等综合医院信息化评审标准
|
||
> **依据**: 国家卫健委三甲评审标准(2022)、电子病历评级≥4级、互联互通≥四级甲等
|
||
> **编制日期**: 2026-06-06
|
||
> **核心原则**:
|
||
> 1. 不修改原有函数签名,扩展功能通过新建Service/AppService实现
|
||
> 2. 新建表和字段通过Flyway框架管理
|
||
> 3. 每个模块开发完成后必须通过完整测试
|
||
|
||
---
|
||
|
||
## 一、现状能力与差距分析
|
||
|
||
### 1.1 已有能力(✅ 可用,无需大改)
|
||
|
||
| 模块 | 状态 | 已有Controller/Service | 说明 |
|
||
|---|---|---|---|
|
||
| 门诊挂号 | ✅ 完整 | RegistrationController | 预约/当日/退号/多身份 |
|
||
| 门诊收费 | ✅ 完整 | ChargeController | 收费/退费/日结 |
|
||
| 门诊医生站 | ✅ 完整 | DoctorStationAdviceController | 处方/检验检查申请/病历 |
|
||
| 护士工作站 | ✅ 基础 | NursingRecordController | 医嘱执行/生命体征/护理记录 |
|
||
| 药品管理 | ✅ 完整 | pharmacymanage/* | 药库/药房/发药/退药 |
|
||
| 住院管理 | ✅ 完整 | PatientHomeController | 入院/床位/转科/出院/押金 |
|
||
| 检验检查 | ✅ 完整 | check/*, lab/* | LIS配置/检查类型/项目管理 |
|
||
| 统计报表 | ✅ 完整 | reportmanage/* | 20+报表接口 |
|
||
| DRG/DIP | ✅ 基础 | ybmanage/* | 基础框架已有 |
|
||
| 手术排程 | ✅ 基础 | SurgicalScheduleController | 手术申请/排程/查询 |
|
||
| 手术管理 | ✅ 基础 | SurgeryController | 手术信息CRUD |
|
||
|
||
### 1.2 关键差距(❌ 需开发)
|
||
|
||
| 差距模块 | 三甲要求 | 当前状态 | 优先级 | 预估工期 |
|
||
|---|---|---|---|---|
|
||
| **合理用药系统** | 处方100%审核 | 仅有基础处方点评框架 | 🔴 P0 | 5天 |
|
||
| **麻醉记录系统** | 互联互通必测项I-13 | 仅有手术排程,无麻醉记录 | 🔴 P0 | 5天 |
|
||
| **电子签名/CA** | 三甲硬性要求 | 仅有密码验证框架 | 🔴 P0 | 3天 |
|
||
| **院感管理** | 评审必查 | 完全缺失 | 🔴 P0 | 5天 |
|
||
| **病案首页管理** | 病案首页数据质量 | 仅有基础统计 | 🔴 P0 | 5天 |
|
||
| **护理评估体系** | 多种量表评估 | 仅基础护理记录 | 🟡 P1 | 5天 |
|
||
| **医嘱闭环管理** | 开立→审核→执行→完成 | 部分实现 | 🟡 P1 | 3天 |
|
||
| **危急值管理** | 检验危急值闭环 | 完全缺失 | 🟡 P1 | 3天 |
|
||
| **电子病历结构化** | 结构化+模板+留痕 | 基础模板已有 | 🟡 P1 | 5天 |
|
||
| **抗菌药物管控** | 分级管理/权限控制 | 完全缺失 | 🟡 P1 | 3天 |
|
||
| **处方点评系统** | 合理用药管控 | 仅基础框架 | 🟡 P1 | 3天 |
|
||
| **数据集成平台(ESB)** | 互联互通四级甲等 | 完全缺失 | 🟡 P1 | 5天 |
|
||
| **患者主索引(EMPI)** | 数据标准化基础 | 完全缺失 | 🟡 P1 | 3天 |
|
||
|
||
---
|
||
|
||
## 二、分阶段详细设计
|
||
|
||
### Phase 1: 核心安全模块(3周)
|
||
|
||
---
|
||
|
||
#### Sprint 7: 合理用药系统 (5天)
|
||
|
||
**业务背景**: 三甲医院要求门诊处方审核率≥100%,住院医嘱审核率≥100%。系统必须在医生开方时实时拦截不合理处方。
|
||
|
||
**已有基础**: `PrescriptionReviewRecord`实体、`ReviewPrescriptionRecordsController`审方接口
|
||
|
||
**需要新增的功能**:
|
||
|
||
##### 7.1 处方前置审核引擎
|
||
|
||
**业务流程**:
|
||
```
|
||
医生开方 → 系统自动审核 → 合理 → 通过
|
||
→ 不合理 → 拦截弹窗 → 医生确认/修改
|
||
→ 需人工审核 → 药师审核 → 通过/驳回
|
||
```
|
||
|
||
**审核规则(按优先级)**:
|
||
1. **配伍禁忌检查**: 两药/三药相互作用(禁忌/严重/一般三级)
|
||
2. **过敏检测**: 患者过敏史自动匹配药品成分
|
||
3. **剂量审查**: 超剂量/低剂量预警(按年龄/体重/肝肾功能)
|
||
4. **重复用药**: 同类/同成分重复使用检查
|
||
5. **妊娠/哺乳用药**: 特殊人群用药警示
|
||
6. **儿童用药**: 按体重/体表面积计算剂量
|
||
7. **肝肾功能调量**: 根据化验结果自动建议调量
|
||
|
||
**新增Service**:
|
||
```java
|
||
// 合理用药审核引擎(新建,不修改原有代码)
|
||
public interface IRationalDrugReviewService {
|
||
// 处方前置审核
|
||
PrescriptionReviewResult reviewPrescription(PrescriptionReviewParam param);
|
||
// 药品相互作用检查
|
||
List<DrugInteraction> checkDrugInteraction(List<String> drugCodes);
|
||
// 过敏检查
|
||
List<AllergyAlert> checkAllergy(Long patientId, List<String> drugCodes);
|
||
// 剂量检查
|
||
List<DoseAlert> checkDose(DoseCheckParam param);
|
||
// 重复用药检查
|
||
List<DuplicateAlert> checkDuplicate(List<String> drugCodes);
|
||
}
|
||
```
|
||
|
||
**新增数据库表(Flyway)**:
|
||
```sql
|
||
-- V2026_007__rational_drug_review.sql
|
||
|
||
-- 药品相互作用规则表
|
||
CREATE TABLE sys_drug_interaction_rule (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
drug_code_a VARCHAR(50) NOT NULL, -- 药品A编码
|
||
drug_code_b VARCHAR(50) NOT NULL, -- 药品B编码
|
||
drug_name_a VARCHAR(200),
|
||
drug_name_b VARCHAR(200),
|
||
interaction_level VARCHAR(20) NOT NULL, -- 禁忌/严重/一般
|
||
description TEXT, -- 描述
|
||
suggestion TEXT, -- 处理建议
|
||
severity INT DEFAULT 1, -- 严重程度 1-5
|
||
status CHAR(1) DEFAULT '0', -- 0正常 1停用
|
||
tenant_id INT,
|
||
create_by VARCHAR(64),
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||
update_by VARCHAR(64),
|
||
update_time TIMESTAMP
|
||
);
|
||
|
||
-- 药品过敏规则表
|
||
CREATE TABLE sys_drug_allergy_rule (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
drug_code VARCHAR(50) NOT NULL,
|
||
drug_name VARCHAR(200),
|
||
allergy_component VARCHAR(200), -- 过敏成分
|
||
cross_reaction_drugs TEXT, -- 交叉反应药品
|
||
description TEXT,
|
||
status CHAR(1) DEFAULT '0',
|
||
tenant_id INT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 剂量范围规则表
|
||
CREATE TABLE sys_drug_dose_rule (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
drug_code VARCHAR(50) NOT NULL,
|
||
drug_name VARCHAR(200),
|
||
dose_type VARCHAR(20), -- 单次/日总量
|
||
min_dose DECIMAL(10,2),
|
||
max_dose DECIMAL(10,2),
|
||
unit VARCHAR(20),
|
||
age_min INT, -- 最小年龄
|
||
age_max INT, -- 最大年龄
|
||
weight_min DECIMAL(5,2), -- 最小体重
|
||
weight_max DECIMAL(5,2), -- 最大体重
|
||
renal_adjust CHAR(1) DEFAULT '0', -- 肾功能调整
|
||
hepatic_adjust CHAR(1) DEFAULT '0', -- 肝功能调整
|
||
status CHAR(1) DEFAULT '0',
|
||
tenant_id INT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 处方审核记录表(扩展已有表)
|
||
-- 在已有 prescription_review_record 表基础上增加字段
|
||
ALTER TABLE prescription_review_record ADD COLUMN IF NOT EXISTS review_rules JSONB;
|
||
ALTER TABLE prescription_review_record ADD COLUMN IF NOT EXISTS auto_review_result VARCHAR(20);
|
||
ALTER TABLE prescription_review_record ADD COLUMN IF NOT EXISTS review_time TIMESTAMP;
|
||
ALTER TABLE prescription_review_record ADD COLUMN IF NOT EXISTS drug_details JSONB;
|
||
```
|
||
|
||
**测试用例(20个)**:
|
||
1. 正常处方审核通过
|
||
2. 配伍禁忌药物拦截(禁忌级别)
|
||
3. 配伍禁忌药物预警(一般级别)
|
||
4. 过敏药物拦截
|
||
5. 超剂量预警
|
||
6. 低剂量预警
|
||
7. 重复用药拦截
|
||
8. 妊娠用药警示
|
||
9. 儿童用药按体重计算
|
||
10. 肾功能不全剂量调整
|
||
11. 肝功能不全剂量调整
|
||
12. 多药联用审查
|
||
13. 抗菌药物分级限制
|
||
14. 处方审核结果查询
|
||
15. 审核规则配置
|
||
16. 无权限访问拒绝
|
||
17. 空处方审核
|
||
18. 大处方预警
|
||
19. 审核统计查询
|
||
20. 处方点评导出
|
||
|
||
---
|
||
|
||
##### 7.2 抗菌药物分级管理
|
||
|
||
**业务背景**: 三甲医院要求抗菌药物使用率≤60%,必须实行分级管理。
|
||
|
||
**分级标准**:
|
||
- **非限制使用级**: 经临床长期应用证明安全、有效,对细菌耐药性影响较小的抗菌药物
|
||
- **限制使用级**: 与非限制使用级相比较,在疗效、安全性、耐药性、价格等方面存在局限性
|
||
- **特殊使用级**: 不良反应明显,不宜随意使用或临床需要倍加保护以免细菌过快产生耐药性的抗菌药物
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IAntibioticManageService {
|
||
// 查询抗菌药物使用统计
|
||
AntibioticUsageStats getUsageStats(Long departmentId, Date startDate, Date endDate);
|
||
// 查询医生抗菌药物处方权限
|
||
AntibioticPermission checkPermission(Long doctorId, String antibioticLevel);
|
||
// 抗菌药物处方审批(特殊使用级需审批)
|
||
R<?> approveAntibiotic(AntibioticApprovalParam param);
|
||
// DDD监测
|
||
List<DDDMonitorDto> getDDDMonitoring(Date startDate, Date endDate);
|
||
}
|
||
```
|
||
|
||
**新增数据库表**:
|
||
```sql
|
||
-- V2026_007__antibiotic_management.sql
|
||
|
||
-- 抗菌药物目录表
|
||
CREATE TABLE sys_antibiotic_drug (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
drug_code VARCHAR(50) NOT NULL,
|
||
drug_name VARCHAR(200),
|
||
generic_name VARCHAR(200),
|
||
antibiotic_level VARCHAR(20) NOT NULL, -- 非限制/限制/特殊
|
||
ddd_value DECIMAL(10,2), -- 限定日剂量
|
||
ddd_unit VARCHAR(20),
|
||
atc_code VARCHAR(50), -- ATC分类代码
|
||
status CHAR(1) DEFAULT '0',
|
||
tenant_id INT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 抗菌药物使用记录表
|
||
CREATE TABLE sys_antibiotic_usage (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
encounter_id BIGINT NOT NULL,
|
||
patient_id BIGINT NOT NULL,
|
||
doctor_id BIGINT NOT NULL,
|
||
department_id BIGINT,
|
||
drug_code VARCHAR(50) NOT NULL,
|
||
drug_name VARCHAR(200),
|
||
antibiotic_level VARCHAR(20),
|
||
dosage DECIMAL(10,2),
|
||
dosage_unit VARCHAR(20),
|
||
frequency VARCHAR(50),
|
||
route VARCHAR(50),
|
||
start_time TIMESTAMP,
|
||
end_time TIMESTAMP,
|
||
usage_days INT,
|
||
ddd_value DECIMAL(10,2),
|
||
ddd_sum DECIMAL(10,4), -- DDD累计
|
||
approval_status VARCHAR(20), -- 待审批/已批准/已拒绝
|
||
approver_id BIGINT,
|
||
approval_time TIMESTAMP,
|
||
status CHAR(1) DEFAULT '0',
|
||
tenant_id INT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 抗菌药物医生权限表
|
||
CREATE TABLE sys_antibiotic_permission (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
doctor_id BIGINT NOT NULL,
|
||
doctor_name VARCHAR(100),
|
||
department_id BIGINT,
|
||
allowed_levels JSONB, -- 允许使用的级别 ["非限制","限制","特殊"]
|
||
valid_from DATE,
|
||
valid_to DATE,
|
||
status CHAR(1) DEFAULT '0',
|
||
tenant_id INT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
#### Sprint 8: 手术麻醉系统 (5天)
|
||
|
||
**业务背景**: 互联互通测评必测项I-13,三甲评审现场检查必查项。
|
||
|
||
**已有基础**:
|
||
- `OpSchedule`(手术排程实体)、`OperatingRoom`(手术室实体)
|
||
- `SurgicalScheduleController`(手术排程接口)
|
||
- `SurgeryController`(手术管理接口)
|
||
|
||
**需要新增的功能**:
|
||
|
||
##### 8.1 麻醉评估系统
|
||
|
||
**业务流程**:
|
||
```
|
||
术前评估 → ASA分级 → 气道评估 → 麻醉方案 → 知情同意 → 术中记录 → 苏醒评估
|
||
```
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IAnesthesiaService {
|
||
// 术前麻醉评估
|
||
AnesthesiaAssessment createAssessment(AnessmentAssessmentParam param);
|
||
// ASA分级评估
|
||
ASAResult assessASA(ASAAssessmentParam param);
|
||
// 气道评估
|
||
AirwayAssessment assessAirway(AirwayAssessmentParam param);
|
||
// 麻醉方案制定
|
||
AnesthesiaPlan createPlan(AnesthesiaPlanParam param);
|
||
// 术中记录
|
||
IntraOpRecord recordIntraOp(IntraOpRecordParam param);
|
||
// 麻醉苏醒评估
|
||
RecoveryAssessment assessRecovery(RecoveryAssessmentParam param);
|
||
// 查询麻醉记录
|
||
AnesthesiaRecord getRecord(Long surgeryScheduleId);
|
||
}
|
||
```
|
||
|
||
**新增数据库表**:
|
||
```sql
|
||
-- V2026_008__anesthesia_system.sql
|
||
|
||
-- 麻醉评估表
|
||
CREATE TABLE sys_anesthesia_assessment (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
surgery_schedule_id BIGINT NOT NULL, -- 关联手术排程
|
||
encounter_id BIGINT NOT NULL,
|
||
patient_id BIGINT NOT NULL,
|
||
assessment_date TIMESTAMP,
|
||
assessor_id BIGINT,
|
||
|
||
-- ASA分级
|
||
asa_level VARCHAR(10), -- ASA I-VI
|
||
asa_description TEXT,
|
||
|
||
-- 气道评估
|
||
airway_assessment JSONB, -- 气道评估详细数据
|
||
mallampati_grade VARCHAR(10), -- Mallampati分级 I-IV
|
||
mouth_opening DECIMAL(5,2), -- 张口度(cm)
|
||
neck_mobility VARCHAR(50), -- 颈部活动度
|
||
thyromental_distance DECIMAL(5,2), -- 甲颏距离(cm)
|
||
dental_prostheses CHAR(1), -- 假牙 0无 1有
|
||
|
||
-- 心肺评估
|
||
cardiac_function VARCHAR(50), -- 心功能分级
|
||
pulmonary_function VARCHAR(50), -- 肺功能
|
||
ekg_result TEXT, -- 心电图结果
|
||
|
||
-- 实验室检查
|
||
lab_results JSONB, -- 实验室检查结果
|
||
|
||
-- 综合评估
|
||
overall_risk VARCHAR(20), -- 低/中/高/极高
|
||
contraindications TEXT, -- 禁忌症
|
||
special_notes TEXT, -- 特殊注意事项
|
||
|
||
status VARCHAR(20), -- 草稿/已提交/已审核
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 麻醉方案表
|
||
CREATE TABLE sys_anesthesia_plan (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
assessment_id BIGINT NOT NULL,
|
||
surgery_schedule_id BIGINT NOT NULL,
|
||
anesthesia_type VARCHAR(50), -- 全麻/椎管内/神经阻滞/局部/复合
|
||
anesthesia_method TEXT, -- 具体麻醉方法
|
||
monitor_plan TEXT, -- 监测方案
|
||
airway_management TEXT, -- 气道管理方案
|
||
fluid_plan TEXT, -- 输液方案
|
||
blood_plan TEXT, -- 输血方案
|
||
pain_management TEXT, -- 镇痛方案
|
||
special_requirements TEXT, -- 特殊要求
|
||
planned_by_id BIGINT,
|
||
plan_time TIMESTAMP,
|
||
status VARCHAR(20), -- 草稿/已提交/已批准
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 术中麻醉记录表
|
||
CREATE TABLE sys_anesthesia_intra_record (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
surgery_schedule_id BIGINT NOT NULL,
|
||
encounter_id BIGINT NOT NULL,
|
||
|
||
-- 时间节点
|
||
patient_entry_time TIMESTAMP, -- 患者入室时间
|
||
anesthesia_start_time TIMESTAMP, -- 麻醉开始时间
|
||
surgery_start_time TIMESTAMP, -- 手术开始时间
|
||
surgery_end_time TIMESTAMP, -- 手术结束时间
|
||
anesthesia_end_time TIMESTAMP, -- 麻醉结束时间
|
||
patient_exit_time TIMESTAMP, -- 患者出室时间
|
||
|
||
-- 生命体征(定时采集)
|
||
vital_signs_data JSONB, -- [{time, systolic, diastolic, heart_rate, spo2, temp, etco2, ...}]
|
||
|
||
-- 麻醉用药
|
||
anesthesia_medications JSONB, -- [{drug_name, dose, unit, time, route, operator}]
|
||
|
||
-- 非麻醉用药
|
||
non_anesthesia_medications JSONB, -- [{drug_name, dose, unit, time, reason}]
|
||
|
||
-- 液体出入量
|
||
fluid_input JSONB, -- [{type, volume_ml, time}]
|
||
fluid_output JSONB, -- [{type, volume_ml, time}]
|
||
blood_loss_ml INT, -- 出血量
|
||
blood_transfusion_ml INT, -- 输血量
|
||
urine_output_ml INT, -- 尿量
|
||
|
||
-- 术中事件
|
||
intra_events JSONB, -- [{event_type, time, description, handling}]
|
||
|
||
-- 气道管理
|
||
airway_management JSONB, -- {intubation_type, tube_size, depth, ...}
|
||
|
||
-- 麻醉医师
|
||
primary_anesthesiologist_id BIGINT, -- 主麻
|
||
assistant_anesthesiologist_id BIGINT, -- 助麻
|
||
|
||
status VARCHAR(20), -- 进行中/已完成
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 麻醉苏醒评估表
|
||
CREATE TABLE sys_anesthesia_recovery (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
intra_record_id BIGINT NOT NULL,
|
||
surgery_schedule_id BIGINT NOT NULL,
|
||
recovery_time TIMESTAMP,
|
||
consciousness_level VARCHAR(50), -- 清醒/嗜睡/模糊/昏迷
|
||
respiratory_rate INT,
|
||
heart_rate INT,
|
||
blood_pressure VARCHAR(50),
|
||
spo2 DECIMAL(5,2),
|
||
temperature DECIMAL(5,2),
|
||
pain_score INT, -- NRS评分 0-10
|
||
恶心_nausea CHAR(1), -- 0无 1有
|
||
vomiting CHAR(1), -- 0无 1有
|
||
Aldrete_score INT, -- Aldrete评分 0-10
|
||
discharge_eligible CHAR(1), -- 0不达标 1达标
|
||
extubation_time TIMESTAMP, -- 拔管时间
|
||
special_notes TEXT,
|
||
assessor_id BIGINT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 知情同意书表
|
||
CREATE TABLE sys_consent_form (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
encounter_id BIGINT NOT NULL,
|
||
patient_id BIGINT NOT NULL,
|
||
form_type VARCHAR(50), -- 手术/麻醉/输血/其他
|
||
surgery_schedule_id BIGINT,
|
||
form_template_id BIGINT,
|
||
form_content TEXT, -- 知情同意书内容
|
||
patient_name VARCHAR(100),
|
||
patient_signature_data TEXT, -- 患者签名(base64)
|
||
patient_sign_time TIMESTAMP,
|
||
doctor_signature_data TEXT, -- 医生签名(base64)
|
||
doctor_sign_time TIMESTAMP,
|
||
witness_signature_data TEXT, -- 见证人签名(base64)
|
||
witness_sign_time TIMESTAMP,
|
||
status VARCHAR(20), -- 待签署/已签署/已撤回
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
##### 8.2 手术记录系统
|
||
|
||
**业务流程**:
|
||
```
|
||
手术申请 → 科室审批 → 医务科审批 → 手术排程 → 术前准备 → 手术执行 → 术后医嘱
|
||
```
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface ISurgeryRecordService {
|
||
// 创建手术记录
|
||
SurgeryRecord createRecord(SurgeryRecordParam param);
|
||
// 记录术中信息
|
||
void recordIntraOp(IntraOpParam param);
|
||
// 记录植入物
|
||
void recordImplant(ImplantRecordParam param);
|
||
// 记录标本
|
||
void recordSpecimen(SpecimenRecordParam param);
|
||
// 术后医嘱自动生成
|
||
List<Advice> generatePostOpOrders(Long surgeryRecordId);
|
||
// 手术统计
|
||
SurgeryStatistics getStatistics(Long departmentId, Date startDate, Date endDate);
|
||
}
|
||
```
|
||
|
||
**新增数据库表**:
|
||
```sql
|
||
-- V2026_008__surgery_record.sql
|
||
|
||
-- 手术记录表(扩展已有op_schedule)
|
||
ALTER TABLE op_schedule ADD COLUMN IF NOT EXISTS surgery_record_id BIGINT;
|
||
ALTER TABLE op_schedule ADD COLUMN IF NOT EXISTS post_op_diagnosis TEXT;
|
||
ALTER TABLE op_schedule ADD COLUMN IF NOT EXISTS post_op_orders JSONB;
|
||
|
||
-- 手术记录详细表
|
||
CREATE TABLE sys_surgery_record (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
surgery_schedule_id BIGINT NOT NULL,
|
||
encounter_id BIGINT NOT NULL,
|
||
patient_id BIGINT NOT NULL,
|
||
|
||
-- 手术团队
|
||
surgeon_id BIGINT, -- 主刀
|
||
assistant1_id BIGINT, -- 助手1
|
||
assistant2_id BIGINT, -- 助手2
|
||
assistant3_id BIGINT, -- 助手3
|
||
scrub_nurse_id BIGINT, -- 器械护士
|
||
circulating_nurse_id BIGINT, -- 巡回护士
|
||
|
||
-- 手术时间
|
||
incision_time TIMESTAMP, -- 切皮时间
|
||
closure_time TIMESTAMP, -- 缝合时间
|
||
total_surgery_minutes INT, -- 手术总时长
|
||
|
||
-- 手术信息
|
||
surgical_site VARCHAR(200), -- 手术部位
|
||
approach VARCHAR(100), -- 手术入路
|
||
implant_records JSONB, -- [{implant_name, serial_no, manufacturer, quantity}]
|
||
specimen_records JSONB, -- [{specimen_type, description, send_to_pathology}]
|
||
|
||
-- 出血与输血
|
||
estimated_blood_loss INT, -- 估计出血量(ml)
|
||
actual_blood_loss INT, -- 实际出血量(ml)
|
||
blood_transfusion_units INT, -- 输血量(单位)
|
||
|
||
-- 并发症
|
||
intraoperative_complications JSONB, -- [{type, description, time, handling}]
|
||
postoperative_complications JSONB, -- [{type, description, time, handling}]
|
||
|
||
-- 手术级别
|
||
surgery_level VARCHAR(20), -- 一/二/三/四级
|
||
surgery_classification VARCHAR(50), -- 急诊/限期/择期
|
||
|
||
-- 感染控制
|
||
infection_risk CHAR(1), -- 0低 1中 2高
|
||
isolation_type VARCHAR(50), -- 隔离类型
|
||
antibiotic_prophylaxis CHAR(1), -- 0无 1有预防性抗菌药物
|
||
|
||
status VARCHAR(20), -- 进行中/已完成
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 植入物记录表
|
||
CREATE TABLE sys_implant_record (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
surgery_record_id BIGINT NOT NULL,
|
||
implant_name VARCHAR(200),
|
||
implant_model VARCHAR(100),
|
||
serial_no VARCHAR(100), -- 序列号/批号
|
||
manufacturer VARCHAR(200),
|
||
specification VARCHAR(200),
|
||
quantity INT DEFAULT 1,
|
||
implant_site VARCHAR(200), -- 植入部位
|
||
Implant_time TIMESTAMP,
|
||
status CHAR(1) DEFAULT '0',
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
#### Sprint 9: 院感管理系统 (5天)
|
||
|
||
**业务背景**: 三甲评审要求医院感染监测报告率达标,院感管理是评审必查项。
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IInfectionControlService {
|
||
// 院感病例监测
|
||
List<InfectionCase> monitorInfection(Date startDate, Date endDate);
|
||
// 院感病例上报
|
||
void reportCase(InfectionCaseReportParam param);
|
||
// 院感预警
|
||
List<InfectionAlert> getAlerts(Long departmentId);
|
||
// 院感统计
|
||
InfectionStatistics getStatistics(Date startDate, Date endDate);
|
||
// 多重耐药菌监测
|
||
List<MDRORecord> monitorMDRO(Date startDate, Date endDate);
|
||
|
||
// 手卫生管理
|
||
void recordHandHygiene(HandHygieneRecordParam param);
|
||
HandHygieneStats getHandHygieneStats(Long departmentId, Date startDate, Date endDate);
|
||
|
||
// 职业暴露管理
|
||
void reportExposure(OccupationalExposureParam param);
|
||
void trackExposure(Long exposureId, ExposureFollowUpParam param);
|
||
List<OccupationalExposure> getExposureRecords(Date startDate, Date endDate);
|
||
|
||
// 环境监测
|
||
void recordEnvironmentMonitor(EnvironmentMonitorParam param);
|
||
List<EnvironmentMonitor> getEnvironmentMonitorRecords(Long departmentId, Date startDate, Date endDate);
|
||
}
|
||
```
|
||
|
||
**新增数据库表**:
|
||
```sql
|
||
-- V2026_009__infection_control.sql
|
||
|
||
-- 院感病例表
|
||
CREATE TABLE sys_infection_case (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
encounter_id BIGINT NOT NULL,
|
||
patient_id BIGINT NOT NULL,
|
||
infection_type VARCHAR(50), -- 医院感染/社区感染
|
||
infection_site VARCHAR(100), -- 下呼吸道/泌尿道/血液/手术部位/其他
|
||
pathogen_code VARCHAR(50),
|
||
pathogen_name VARCHAR(200),
|
||
drug_resistance JSONB, -- [{drug_name, resistance_type}]
|
||
diagnosis_basis TEXT, -- 诊断依据
|
||
report_time TIMESTAMP,
|
||
reporter_id BIGINT,
|
||
department_id BIGINT,
|
||
status VARCHAR(20), -- 疑似/确认/已排除/已处理
|
||
treatment_plan TEXT,
|
||
outcome TEXT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 手卫生记录表
|
||
CREATE TABLE sys_hand_hygiene (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
staff_id BIGINT NOT NULL,
|
||
staff_name VARCHAR(100),
|
||
department_id BIGINT,
|
||
observation_time TIMESTAMP,
|
||
observation_type VARCHAR(50), -- 两前三后/手卫生五个时刻
|
||
correct_flag CHAR(1), -- 0不正确 1正确
|
||
handrub_type VARCHAR(50), -- 洗手液/速干手消毒剂
|
||
observer_id BIGINT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 职业暴露记录表
|
||
CREATE TABLE sys_occupational_exposure (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
staff_id BIGINT NOT NULL,
|
||
staff_name VARCHAR(100),
|
||
department_id BIGINT,
|
||
exposure_type VARCHAR(50), -- 锐器伤/血液体液暴露/化学暴露/其他
|
||
exposure_source VARCHAR(200), -- 暴露源描述
|
||
source_patient_name VARCHAR(100),
|
||
source_patient_hiv VARCHAR(20),
|
||
source_patient_hbv VARCHAR(20),
|
||
source_patient_hcv VARCHAR(20),
|
||
exposure_time TIMESTAMP,
|
||
exposure_site VARCHAR(100), -- 暴露部位
|
||
exposure_amount VARCHAR(100), -- 暴露量
|
||
immediate_handling TEXT, -- 立即处理措施
|
||
risk_assessment VARCHAR(20), -- 低/中/高
|
||
follow_up_plan TEXT, -- 随访计划
|
||
follow_up_records JSONB, -- [{time, result, note}]
|
||
report_time TIMESTAMP,
|
||
reporter_id BIGINT,
|
||
status VARCHAR(20), -- 登记中/处置中/随访中/已结案
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
|
||
-- 环境监测表
|
||
CREATE TABLE sys_environment_monitor (
|
||
id BIGSERIAL PRIMARY KEY,
|
||
department_id BIGINT,
|
||
monitor_type VARCHAR(50), -- 空气/物表/手/消毒剂
|
||
monitor_item VARCHAR(100), -- 监测项目
|
||
monitor_result VARCHAR(200), -- 监测结果
|
||
standard_value VARCHAR(200), -- 标准值
|
||
is_qualified CHAR(1), -- 0不合格 1合格
|
||
monitor_time TIMESTAMP,
|
||
monitor_by_id BIGINT,
|
||
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
---
|
||
|
||
### Phase 2: 病案与护理体系(3周)
|
||
|
||
#### Sprint 10: 病案管理系统 (5天)
|
||
|
||
**业务背景**: 三甲要求病案首页24小时归档率≥90%,主要诊断编码正确率≥95%。
|
||
|
||
**已有基础**: `InpatientMedicalRecordHomePageCollectionController`(病案首页统计)
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IMedicalRecordManagementService {
|
||
// 病案首页数据自动采集
|
||
MedicalRecordHome autoCollectHome(Long encounterId);
|
||
// ICD-10编码推荐
|
||
List<ICD10Code> recommendDiagnosisCode(String diagnosisName);
|
||
// ICD-9-CM-3手术编码映射
|
||
List<ICD9CM3Code> mapSurgeryCode(String surgeryName);
|
||
// 首页数据质量校验
|
||
HomeQualityResult validateHomeQuality(Long homeId);
|
||
// 病案质控
|
||
MedicalRecordAudit auditRecord(MedicalRecordAuditParam param);
|
||
// DRG自动分组
|
||
DRGGroupingResult autoDRGGrouping(Long encounterId);
|
||
// 病案归档
|
||
void archiveMedicalRecord(Long encounterId);
|
||
// 病案借阅
|
||
MedicalRecordBorrow borrowRecord(MedicalRecordBorrowParam param);
|
||
// 病案封存/解封
|
||
void sealRecord(Long recordId, boolean seal);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
#### Sprint 11: 护理评估体系 (5天)
|
||
|
||
**业务背景**: 三甲要求护理评估完成率≥95%,入院评估8小时内完成。
|
||
|
||
**已有基础**: `VitalSignsController`(生命体征)、`NursingRecordController`(护理记录)
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface INursingAssessmentService {
|
||
// 入院护理评估
|
||
NursingAssessment createAdmissionAssessment(AdmissionAssessmentParam param);
|
||
// Braden压疮风险评估(自动评分)
|
||
BradenScore assessBraden(BradenAssessmentParam param);
|
||
// Morse跌倒风险评估(自动评分)
|
||
MorseScore assessMorse(MorseAssessmentParam param);
|
||
// NRS2002营养风险评估
|
||
NRS2002Score assessNRS2002(NRS2002AssessmentParam param);
|
||
// 疼痛评估(NRS/VAS)
|
||
PainScore assessPain(PainAssessmentParam param);
|
||
// Caprini VTE风险评估
|
||
CapriniScore assessCaprini(CapriniAssessmentParam param);
|
||
// Barthel自理能力评估
|
||
BarthelScore assessBarthel(BarthelAssessmentParam param);
|
||
// 评估时间轴(动态变化追踪)
|
||
List<AssessmentTimeline> getTimeline(Long patientId, String assessmentType);
|
||
|
||
// 护理计划
|
||
NursingPlan createPlan(NursingPlanParam param);
|
||
// 护理交接班
|
||
NursingHandover createHandover(NursingHandoverParam param);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### Phase 3: 数据集成与标准化(3周)
|
||
|
||
#### Sprint 12: 患者主索引+主数据 (3天)
|
||
|
||
**业务背景**: 互联互通四级甲等基础,统一患者身份标识。
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IEMPIService {
|
||
// 患者身份匹配
|
||
String matchPatient(PatientMatchParam param);
|
||
// 患者身份合并
|
||
void mergePatient(Long primaryId, Long secondaryId);
|
||
// 患者身份拆分
|
||
void splitPatient(Long mergedId);
|
||
// 主数据同步
|
||
void syncMasterData(MasterDataSyncParam param);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
#### Sprint 13: 数据集成平台ESB (5天)
|
||
|
||
**业务背景**: 互联互通四级甲等核心,所有系统通过集成平台互联。
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IESBService {
|
||
// 发送消息
|
||
void sendMessage(ESBMessage message);
|
||
// 接收消息
|
||
ESBMessage receiveMessage(String messageId);
|
||
// 服务注册
|
||
void registerService(ESBServiceRegistry service);
|
||
// 服务发现
|
||
ESBServiceRegistry discoverService(String serviceName);
|
||
// 消息监控
|
||
ESBMonitor getMonitor(Date startDate, Date endDate);
|
||
// CDA文档生成
|
||
CDADocument generateCDA(String documentType, Long encounterId);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
### Phase 4: 智能化与决策支持(3周)
|
||
|
||
#### Sprint 14: 危急值管理系统 (3天)
|
||
|
||
**业务背景**: 医疗质量安全核心制度,检验危急值必须闭环管理。
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface ICriticalValueService {
|
||
// 危急值规则配置
|
||
void configureRules(List<CriticalValueRule> rules);
|
||
// 检验结果自动匹配危急值
|
||
List<CriticalValueAlert> matchCriticalValue(Long inspectionResultId);
|
||
// 危急值通知
|
||
void notifyCriticalValue(Long alertId, List<Long> notifyUserIds);
|
||
// 危急值确认
|
||
void confirmCriticalValue(Long alertId, CriticalValueConfirmParam param);
|
||
// 危急值处置
|
||
void handleCriticalValue(Long alertId, CriticalValueHandleParam param);
|
||
// 危急值统计
|
||
CriticalValueStats getStats(Date startDate, Date endDate);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
#### Sprint 15: 电子病历结构化 (5天)
|
||
|
||
**业务背景**: 电子病历应用管理规范要求修改留痕、版本管理、电子签名。
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IStructuredEMRService {
|
||
// 结构化病历创建
|
||
StructuredEMR createEMR(EMRCreateParam param);
|
||
// 病历修改(留痕)
|
||
void modifyEMR(Long emrId, EMRModifyParam param);
|
||
// 版本历史
|
||
List<EMRVersion> getVersionHistory(Long emrId);
|
||
// 版本对比
|
||
EMRDiff compareVersions(Long versionId1, Long versionId2);
|
||
// 病历模板管理
|
||
EMRTemplate saveTemplate(EMRTemplateParam param);
|
||
// 病历完整性检查
|
||
EMRCompletenessResult checkCompleteness(Long emrId);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
#### Sprint 16: 医保智能审核 (5天)
|
||
|
||
**业务背景**: 医保基金使用监督管理条例,防范骗保、规范使用。
|
||
|
||
**已有基础**: `ybmanage/*`(医保管理模块)
|
||
|
||
**新增Service**:
|
||
```java
|
||
public interface IInsuranceAuditService {
|
||
// 事前审核(开方时)
|
||
PreAuditResult preAudit(PreAuditParam param);
|
||
// 事中审核(住院中)
|
||
List<InAuditAlert> inAudit(Long encounterId);
|
||
// 事后审核(结算后)
|
||
PostAuditResult postAudit(Long settlementId);
|
||
// DRG/DIP优化建议
|
||
DRGOptimizationSuggestion optimizeDRG(Long encounterId);
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 三、测试计划
|
||
|
||
### 每个Sprint测试矩阵
|
||
|
||
| 测试类型 | 内容 | 通过标准 |
|
||
|---|---|---|
|
||
| **接口测试** | 所有新增API端点 | 正常/异常/边界各至少1个用例 |
|
||
| **白盒测试** | Service层方法 | 覆盖率≥80% |
|
||
| **黑盒测试** | 业务流程完整性 | 关键流程100%覆盖 |
|
||
| **冒烟测试** | 核心功能可用性 | 所有核心接口返回200 |
|
||
| **回归测试** | 原有功能不受影响 | 158个已有测试全部通过 |
|
||
|
||
### 测试用例设计原则
|
||
|
||
1. **正常流程测试**: 每个API至少1个正常用例
|
||
2. **边界条件测试**: 空值/极值/特殊字符/超长文本
|
||
3. **异常处理测试**: 无权限/参数错误/数据不存在/并发冲突
|
||
4. **数据一致性测试**: 事务完整性、级联操作
|
||
5. **性能测试**: 并发场景(可选,P2优先级)
|
||
|
||
---
|
||
|
||
## 四、实施路线图
|
||
|
||
```
|
||
Phase 1 (Week 1-3): 核心安全模块
|
||
├── Sprint 7: 合理用药系统 (5天) → 20个测试用例
|
||
├── Sprint 8: 手术麻醉系统 (5天) → 25个测试用例
|
||
└── Sprint 9: 院感管理系统 (5天) → 20个测试用例
|
||
|
||
Phase 2 (Week 4-6): 病案与护理
|
||
├── Sprint 10: 病案管理系统 (5天) → 20个测试用例
|
||
└── Sprint 11: 护理评估体系 (5天) → 25个测试用例
|
||
|
||
Phase 3 (Week 7-9): 数据集成
|
||
├── Sprint 12: EMPI + 主数据 (3天) → 15个测试用例
|
||
└── Sprint 13: ESB集成平台 (5天) → 20个测试用例
|
||
|
||
Phase 4 (Week 10-12): 智能化
|
||
├── Sprint 14: 危急值管理 (3天) → 15个测试用例
|
||
├── Sprint 15: 电子病历结构化 (5天) → 20个测试用例
|
||
└── Sprint 16: 医保智能审核 (5天) → 20个测试用例
|
||
|
||
总计: 12周 (约3个月)
|
||
总用例数: 预计 220+ 个接口测试
|
||
```
|
||
|
||
---
|
||
|
||
## 五、质量保障
|
||
|
||
### 5.1 开发规范铁律
|
||
|
||
1. **不修改原有函数签名** — 扩展功能通过新建Service/AppService实现
|
||
2. **数据库变更通过Flyway** — 所有新建表和字段使用Flyway版本化管理
|
||
3. **代码审查** — 每个PR必须经过Code Review
|
||
4. **单元测试** — Service层覆盖率≥80%
|
||
5. **接口测试** — 每个API端点必须有测试用例
|
||
|
||
### 5.2 铁律
|
||
|
||
1. 修改完必须测试才能提交
|
||
2. 新建表和字段必须通过Flyway
|
||
3. 测试通过后才提交代码
|
||
4. 前后端API路径必须对齐
|
||
5. 每个Sprint完成后进行完整回归测试
|
||
6. 白盒测试+黑盒测试+冒烟测试+接口测试+回归测试全部通过后才能提交
|
||
|
||
---
|
||
|
||
> **文档版本**: v1.0
|
||
> **最后更新**: 2026-06-06
|