Files
his/MD/design/PHASE3_FILL_DESIGN.md
chenqi 575f5d6c32 fix(database): 修复数据库字典重复和表结构缺失问题
- 删除手术状态下拉框的重复字典数据,保留每组中dict_code最小的记录
- 修复HisBaseEntity列缺失问题,为多个表添加create_by、update_by、update_time等基础字段
- 为adm_patient表添加邮政编码、户籍地址、监护人信息、患者来源等缺失字段
- 添加文化程度字典类型和相关字典数据,补充3919到3914等10个学历级别选项
- 为adm_patient_identifier表创建tenant_id和patient_id的联合索引以提升查询性能
- 修复prescription_intercept_log和clinical_pathway_execution表的基础实体字段缺失
- 为wor_device_request表增加医嘱退回相关的back_reason、performer_check_id等字段
- 创建EMPI核心表empi_person和empi_person_id_mapping用于全局患者主索引管理
- 为empi_merge_log表添加create_time字段以完善审计信息
- 更新院感管理和评审保障模块的设计文档,明确各模块实现状态和缺失功能
2026-06-17 11:46:56 +08:00

46 KiB
Raw Blame History

Phase 3 — 空壳补全 + 统计报表 + EMPI + 其他 详细设计

属性
文档类型 详细设计
版本 v1.0
日期 2026-06-17
范围 37个模块的补全与增强

一、总体概述

Phase 3 分为四大类工作:

类别 模块数 说明
A. 后端骨架补全 8 empi / quality / followup / drugtrace / cssd / preopmanage / reconstruction / empienhanced
B. 统计报表补全 5 质控指标自动采集 / DRG-DIP分析 / 经营分析 / 数据导出 / 可视化仪表盘
C. 合理用药增强 1 肝肾功能调量
D. 传染病报告 1 门诊传染病上报

注:前端空壳审计发现所有 237 个 Vue 文件均已含 <script> 逻辑(可能已补全),本设计聚焦后端业务逻辑补全。


二、模块详细设计


2.1 EMPI企业主患者索引

2.1.1 已有代码分析

文件 行数 状态
Controller EmpiController.java 76 完整9端点
Controller EmpiEnhancedController.java 97 完整(照片/家属/合并日志)
Controller EmpiIdVerificationController.java 63 完整(身份证验证)
AppService EmpiAppServiceImpl.java 129 完整9方法全实现
Entity EmpiPerson / EmpiPersonIdMapping / EmpiFamilyMember / EmpiIdVerification / EmpiMergeLog / EmpiPatientPhoto 147 全部完整
Service 6个IService + 6个ServiceImpl 94 全部空壳MyBatis-Plus默认方法够用
Mapper 6个Mapper接口 46 全部空壳BaseMapper够用
Listener EmpiSyncListener.java 109 完整Patient保存自动同步EMPI

Flyway: V2026_0616_1empi_person + empi_person_id_mapping、V20empi_patient_photo + empi_family_member + empi_merge_log、V2026_0616_2fix create_time

2.1.2 缺失功能

# 功能 优先级 说明
1 重复检测算法 P0 新注册时自动检测姓名+身份证+手机号相似度,提示可能重复
2 合并回滚 P1 合并操作支持撤销
3 跨系统同步队列 P1 大批量注册时异步处理
4 全局ID分配策略优化 P2 当前UUID截断需考虑分布式唯一性

2.1.3 业务流程

重复检测流程:
  前端输入患者信息 → EmpiController.register
    → EmpiAppServiceImpl.registerPerson
      → 1. 查询 empi_person WHERE (name LIKE ? OR id_card_no = ? OR phone = ?)
      → 2. 计算相似度(姓名编辑距离、身份证完全匹配、手机号匹配)
      → 3. 相似度 > 0.7 → 返回候选列表,前端展示"疑似重复"弹窗
      → 4. 用户确认"新增" → 执行注册
      → 5. 用户确认"合并" → 执行 mergePersons

2.1.4 数据库设计

无需新建表。已有表结构完整。

需新增字段Flyway迁移

-- V2026_0618_1__empi_duplicate_detection.sql
ALTER TABLE empi_person ADD COLUMN IF NOT EXISTS name_pinyin VARCHAR(100);
ALTER TABLE empi_person ADD COLUMN IF NOT EXISTS name_initials VARCHAR(20);
ALTER TABLE empi_person ADD COLUMN IF NOT EXISTS last_sync_time TIMESTAMP;
ALTER TABLE empi_person ADD COLUMN IF NOT EXISTS sync_status VARCHAR(20) DEFAULT 'SYNCED';

2.1.5 API接口

端点 方法 说明
/empi/person/register POST 已有,增强:加重复检测前置逻辑
/empi/person/check-duplicate POST 新增:接收 name/idCardNo/phone返回疑似重复列表
/empi/person/merge POST 已有
/empi/person/unmerge/{mergeLogId} POST 新增:回滚合并操作
/empi/person/statistics GET 已有
/empi/person/linked-patients/{globalId} GET 已有
/empi/person/list GET 已有

2.1.6 前端设计

empienhanced 模块 4 个 Vue 文件已有完整 script 逻辑(前端已完成),无需补全。


2.2 Quality病历质控 + 质控指标)

2.2.1 已有代码分析

文件 行数 状态
Controller EmrQualityController.java 33 完整6端点
Controller QualityEnhancedController.java 81 完整5端点指标CRUD+医嘱统计)
Controller BusinessAnalyticsController.java 62 完整3端点经营分析
AppService EmrQualityAppServiceImpl.java 83 部分实现executeTerminalCheck 硬编码 PASSgetCompletionRate 返回全零
Entity QualityCoreIndicator / QualityOrderStatistics / BusinessAnalytics / EmrDefect / EmrQualityScore 106 全部完整
Service 3个IServiceIndicator/OrderStats/Analytics 21 空壳
Service EmrDefect / EmrQualityScore 缺失Service层 直接通过Mapper访问

Flyway: V11emr_quality_score + emr_defect、V20quality_core_indicator + quality_order_statistics、V23business_analytics

2.2.2 缺失功能

# 功能 优先级 说明
1 executeTerminalCheck 真实逻辑 P0 当前硬编码全部PASS需实现5项检查的真实判定
2 getCompletionRate 真实逻辑 P0 当前返回全零,需从 emr_quality_score 统计真实完成率
3 质控指标自动采集 P0 定时任务从各业务表聚合指标数据
4 EmrDefect/EmrQualityScore Service层 P1 补全缺失的Service接口和实现
5 缺陷自动检测规则引擎 P2 根据规则自动发现病历缺陷

2.2.3 业务流程

终末质控检查流程:
  EmrQualityController.terminalCheck(encounterId)
    → EmrQualityAppServiceImpl.executeTerminalCheck
      → 1. 查询 emr_quality_score WHERE encounter_id = ? AND check_type = 'TERMINAL'
      → 2. 查询 emr_defect WHERE encounter_id = ? AND defect_type = 'TERMINAL'
      → 3. 逐项检查:
         - 入院记录24h完成: 查 emr_quality_score WHERE emr_type='ADMISSION' AND create_time - encounter_admit_time < 24h
         - 首次病程8h完成: 查 emr_quality_score WHERE emr_type='FIRST_COURSE' AND create_time - encounter_admit_time < 8h
         - 日常病程及时: 查最近7天 daily_course 记录数 >= 1
         - 出院记录完整: 查 emr_quality_score WHERE emr_type='DISCHARGE' AND score >= 80
         - 签名完整: 查 encounter 所有 EMR 记录的 sign_status 全部为 SIGNED
      → 4. 汇总结果,写入 EmrQualityScore
      → 5. 返回 {checks, totalItems, passItems, score}

病历完成率统计流程:
  EmrQualityController.completionRate(startDate, endDate)
    → EmrQualityAppServiceImpl.getCompletionRate
      → 1. SELECT COUNT(DISTINCT encounter_id) FROM encounter WHERE admit_date BETWEEN ? AND ?
      → 2. SELECT COUNT(DISTINCT encounter_id) FROM emr_quality_score WHERE check_type='TERMINAL' AND score >= 60
      → 3. SELECT COUNT(DISTINCT encounter_id) FROM emr_defect WHERE severity='CRITICAL' AND rectify_status='PENDING'
      → 4. completionRate = completedEmr / totalEncounters * 100
      → 5. 返回 {totalEncounters, completedEmr, overdueEmr, completionRate}

质控指标自动采集流程(定时任务):
  QualityAutoCollectJob.execute (每日凌晨2:00)
    → 1. 从 encounter 表统计: 住院天数、入出院人次、手术人次
    → 2. 从 prescription 表统计: 处方合格率、抗菌药物使用率
    → 3. 从 emr_quality_score 表统计: 病历合格率、甲级病案率
    → 4. 从 emr_defect 表统计: 缺陷率、逾期整改率
    → 5. 写入 quality_core_indicator 表
    → 6. 更新 actual_value 和 status达标/未达标)

2.2.4 数据库设计

无需新建表。已有表结构完整。

需新增 Flyway 迁移:

-- V2026_0618_2__quality_enhancement.sql
ALTER TABLE quality_core_indicator ADD COLUMN IF NOT EXISTS data_source VARCHAR(50);
ALTER TABLE quality_core_indicator ADD COLUMN IF NOT EXISTS collect_time TIMESTAMP;
ALTER TABLE quality_core_indicator ADD COLUMN IF NOT EXISTS trend_data JSONB;

ALTER TABLE emr_quality_score ADD COLUMN IF NOT EXISTS encounter_admit_time TIMESTAMP;
ALTER TABLE emr_quality_score ADD COLUMN IF NOT EXISTS check_items JSONB;

2.2.5 API接口

端点 方法 说明
/emr-quality/runtime-check/{encounterId} GET 已有(运行时检查)
/emr-quality/terminal-check/{encounterId} GET 已有,需补全逻辑
/emr-quality/scores/{encounterId} GET 已有
/emr-quality/defects/{encounterId} GET 已有
/emr-quality/defect-statistics GET 已有
/emr-quality/completion-rate GET 已有,需补全逻辑
/quality-enhanced/indicator/page GET 已有
/quality-enhanced/indicator/add POST 已有
/quality-enhanced/indicator/summary GET 已有
/quality-enhanced/indicator/collect POST 新增:手动触发指标采集
/quality-enhanced/indicator/trend/{code} GET 新增:指标趋势数据
/quality-enhanced/order-stats/page GET 已有
/business-analytics/page GET 已有
/business-analytics/summary GET 已有
/business-analytics/trend GET 新增:经营趋势数据

2.2.6 前端设计

quality 模块前端页面emr-quality / quality-enhanced / business-analytics 目录下的 Vue 文件)已有 script 逻辑,无需补全。


2.3 Followup门诊随访管理

2.3.1 已有代码分析

文件 行数 状态
Controller FollowupController.java 411 完整24端点5子模块全实现
AppService 缺失 无 AppService 层,业务逻辑全在 Controller
Entity FollowupPlan / FollowupTask / FollowupRecord / SatisfactionSurvey / ComplaintRecord 56 全部完整
Service 5个IService + 5个ServiceImpl 60 全部空壳

Flyway: V32followup_plan + followup_task + followup_record + satisfaction_survey + complaint_record

2.3.2 缺失功能

# 功能 优先级 说明
1 AppService层提取 P0 Controller 直接调用 Service违反分层架构
2 随访计划自动生成规则 P0 出院/门诊结束后按病种规则自动生成
3 随访任务分配算法 P1 按医生工作量自动分配
4 随访提醒(短信/微信) P2 定时任务检查到期任务
5 满意度调查模板 P2 可配置的调查问卷模板

2.3.3 业务流程

随访计划自动生成流程:
  FollowupPlanAutoGenerateJob.execute (每日凌晨1:00)
    → 1. 查询最近7天出院的 encounter (status = 'DISCHARGED')
    → 2. 对每个出院患者,按病种查询随访规则配置
    → 3. 生成 FollowupPlan:
       - patientId / patientName / encounterId
       - diseaseCode / diseaseName
       - followupType = 'TELEPHONE'(默认电话随访)
       - frequency = 'WEEKLY'(默认每周)
       - totalTimes = 规则配置的次数默认4次
       - responsibleDoctor = 主治医生
       - startDate = 出院日期 + 7天
       - status = 'ACTIVE'
    → 4. 自动拆解 FollowupTask按频率生成N个任务
    → 5. 发送通知给 responsibleDoctor

随访任务执行流程:
  FollowupController.executeTask(task)
    → 1. 更新 task: result / actualDate / operatorName
    → 2. 如果 result = 'SUCCESS':
       - plan.completedTimes += 1
       - 如果 completedTimes >= totalTimes → plan.status = 'COMPLETED'
    → 3. 如果 result = 'ABNORMAL':
       - task.abnormalFlag = true
       - 生成 FollowupRecord含异常描述
       - 通知 responsibleDoctor

2.3.4 数据库设计

无需新建表。已有表结构完整。

需新增 Flyway 迁移:

-- V2026_0618_3__followup_enhancement.sql
ALTER TABLE followup_plan ADD COLUMN IF NOT EXISTS auto_generated BOOLEAN DEFAULT FALSE;
ALTER TABLE followup_plan ADD COLUMN IF NOT EXISTS rule_config JSONB;
ALTER TABLE followup_task ADD COLUMN IF NOT EXISTS reminder_sent BOOLEAN DEFAULT FALSE;
ALTER TABLE followup_task ADD COLUMN IF NOT EXISTS reminder_time TIMESTAMP;
ALTER TABLE followup_record ADD COLUMN IF NOT EXISTS symptoms TEXT;
ALTER TABLE followup_record ADD COLUMN IF NOT EXISTS medication_detail TEXT;

2.3.5 API接口

端点 方法 说明
/followup/plan/page GET 已有
/followup/plan/add POST 已有
/followup/plan/update PUT 已有
/followup/plan/delete/{id} DELETE 已有
/followup/plan/complete/{id} PUT 已有
/followup/plan/auto-generate POST 新增:手动触发计划生成
/followup/task/page GET 已有
/followup/task/today GET 已有
/followup/task/execute PUT 已有
/followup/task/{id}/abnormal PUT 已有
/followup/record/page GET 已有
/followup/record/add POST 已有
/followup/survey/page GET 已有
/followup/survey/stats GET 已有
/followup/complaint/page GET 已有
/followup/complaint/handle PUT 已有
/followup/complaint/close/{id} PUT 已有
/followup/statistics/overview GET 新增:随访完成率/异常率/满意度综合统计

2.3.6 前端设计

followup 模块前端页面followup-plan / followup-task / followup-record / satisfaction-survey / complaint-record 目录)需检查是否有对应 Vue 页面。如缺失需补全 CRUD 页面。


2.4 DrugTrace药品追溯码管理

2.4.1 已有代码分析

文件 行数 状态
Controller DrugTraceController.java 270 完整16端点5子模块
AppService 缺失 业务逻辑全在 Controller
Entity DrugTraceCode / DrugTraceBatch / DrugTraceScan / DrugTraceAlert 184 全部完整
Service 4个IService + 4个ServiceImpl 72 全部空壳

Flyway: V36drug_trace_code + drug_trace_batch + drug_trace_scan + drug_trace_alert

2.4.2 缺失功能

# 功能 优先级 说明
1 AppService层提取 P0 Controller直接调Service违反分层
2 自动预警生成 P0 近效期/过期药品自动创建预警记录
3 批量扫码入库 P1 支持一次扫码批量操作
4 追溯链可视化 P2 从采购到使用的全链路时间线

2.4.3 业务流程

自动预警流程(定时任务):
  DrugTraceAlertJob.execute (每日凌晨3:00)
    → 1. 查询 drug_trace_code WHERE expiry_date BETWEEN NOW() AND NOW()+30天 AND status='ACTIVE'
    → 2. 对每条记录生成 DrugTraceAlert:
       - alertType = 'EXPIRING_SOON'
       - alertLevel = 'WARNING'
       - alertContent = "药品{drugName}批次{batchNo}将于{expiryDate}过期"
       - relatedCodeId = code.id
       - status = 'PENDING'
    → 3. 查询 drug_trace_code WHERE expiry_date < NOW() AND status='ACTIVE'
    → 4. 对每条记录生成 DrugTraceAlert:
       - alertType = 'EXPIRED'
       - alertLevel = 'CRITICAL'
       - status = 'PENDING'
    → 5. 查询 drug_trace_scan WHERE scan_result != 'SUCCESS'(异常扫码)
    → 6. 生成异常扫码预警

扫码追溯流程:
  DrugTraceController.recordScan(scan)
    → 1. 验证 traceCode 是否存在 → DrugTraceCode
    → 2. 检查药品是否过期 → 生成过期预警
    → 3. 记录 DrugTraceScan
    → 4. 如果 scanType = 'INBOUND' → 更新 DrugTraceBatch.receivedQuantity
    → 5. 如果 scanType = 'DISPENSE' → 检查库存是否充足
    → 6. 返回扫码结果

2.4.4 数据库设计

无需新建表。已有表结构完整。

需新增 Flyway 迁移:

-- V2026_0618_4__drugtrace_enhancement.sql
ALTER TABLE drug_trace_code ADD COLUMN IF NOT EXISTS current_quantity INTEGER;
ALTER TABLE drug_trace_code ADD COLUMN IF NOT EXISTS location_code VARCHAR(50);
ALTER TABLE drug_trace_scan ADD COLUMN IF NOT EXISTS related_batch_id BIGINT;
ALTER TABLE drug_trace_scan ADD COLUMN IF NOT EXISTS quantity_change INTEGER;

2.4.5 API接口

端点 方法 说明
/drugtrace/code/page GET 已有
/drugtrace/code/add POST 已有
/drugtrace/code/verify/{traceCode} GET 已有
/drugtrace/batch/page GET 已有
/drugtrace/batch/add POST 已有
/drugtrace/batch/{id}/receive PUT 已有
/drugtrace/scan/page GET 已有
/drugtrace/scan/record POST 已有
/drugtrace/scan/trace/{traceCode} GET 已有
/drugtrace/alert/page GET 已有
/drugtrace/alert/add POST 已有
/drugtrace/alert/{id}/handle PUT 已有
/drugtrace/statistics GET 已有
/drugtrace/scan/batch-inbound POST 新增:批量扫码入库
/drugtrace/trace/chain/{traceCode} GET 新增:全链路追溯时间线
/drugtrace/alert/auto-generate POST 新增:手动触发预警生成

2.4.6 前端设计

drugtrace 模块前端页面需检查是否有对应 Vue 文件。如缺失需补全。


2.5 CSSD消毒供应中心追溯

2.5.1 已有代码分析

文件 行数 状态
Controller CssdController.java 161 完整12端点5子模块
AppService 缺失 业务逻辑全在 Controller
Entity CssdTray / CssdTraceRecord / CssdSterilizeBatch / CssdSterilizeItem / CssdExpiryAlert 51 全部完整
Service 5个IService + 5个ServiceImpl 70 全部空壳

Flyway: V31cssd_tray + cssd_trace_record + cssd_sterilize_batch + cssd_sterilize_item + cssd_expiry_alert

2.5.2 缺失功能

# 功能 优先级 说明
1 AppService层提取 P0 Controller直接调Service违反分层
2 扫码状态流转校验 P0 scanTrace 的 statusFlow Map 逻辑有bugMap.of键值对误用
3 灭菌批次关联器械包 P1 批次完成时自动更新关联器械包状态
4 过期预警自动生成 P1 定时检查器械包灭菌有效期

2.5.3 业务流程

CSSD核心流程扫码追溯:
  CssdController.scanTrace(params)
    → 1. 根据 trayCode 查找 CssdTray
    → 2. 根据 stepType 确定新状态:
       RECYCLE → WASHING → WASH → DISINFECTING → DISINFECT → PACKING → PACK → STERILIZING → STERILIZE → STORED → STORE → DISTRIBUTED
    → 3. 更新 tray: status / currentLocation
    → 4. 如果 stepType = 'STERILIZE': sterilizeCount += 1, lastSterilizeTime = now
    → 5. 如果 stepType = 'DISTRIBUTE': totalUses += 1
    → 6. 保存 CssdTraceRecord
    → 7. 返回 {tray, step, nextStep}

灭菌批次释放流程:
  CssdController.releaseBatch(id, releaseBy)
    → 1. 验证批次状态 = COMPLETED
    → 2. 验证三项监测全部 PASS生物/化学/物理)
    → 3. 如果任一不通过 → 返回失败
    → 4. 更新 batchStatus = RELEASED / releaseBy / releaseTime
    → 5. 更新关联器械包状态为 STORED

2.5.4 数据库设计

无需新建表。已有表结构完整。

需新增 Flyway 迁移:

-- V2026_0618_5__cssd_enhancement.sql
ALTER TABLE cssd_tray ADD COLUMN IF NOT EXISTS sterilize_validity_days INTEGER DEFAULT 180;
ALTER TABLE cssd_tray ADD COLUMN IF NOT EXISTS last_distribute_time TIMESTAMP;
ALTER TABLE cssd_sterilize_batch ADD COLUMN IF NOT EXISTS tray_ids JSONB;
ALTER TABLE cssd_trace_record ADD COLUMN IF NOT EXISTS photo_url VARCHAR(500);

2.5.5 API接口

端点 方法 说明
/cssd/tray/page GET 已有
/cssd/tray/add POST 已有
/cssd/tray/update PUT 已有
/cssd/trace/scan POST 已有,需修复 statusFlow bug
/cssd/trace/history/{trayId} GET 已有
/cssd/sterilize/page GET 已有
/cssd/sterilize/add POST 已有
/cssd/sterilize/complete/{id} PUT 已有
/cssd/sterilize/release/{id} PUT 已有
/cssd/expiry/alerts GET 已有
/cssd/stats/overview GET 已有
/cssd/tray/{id}/detail GET 新增:器械包详情含追溯历史
/cssd/sterilize/batch-detail/{id} GET 新增:批次详情含关联器械包

2.5.6 前端设计

cssd 模块前端页面需检查是否有对应 Vue 文件。


2.6 PreopManage术前讨论管理

2.6.1 已有代码分析

文件 行数 状态
Controller PreopDiscussionController.java 161 完整7端点
AppService 缺失 业务逻辑全在 Controller
Entity PreopDiscussion / PreopParticipant 60 全部完整
Service 2个IService + 2个ServiceImpl 24 全部空壳

Flyway: V14sys_preop_discussion + sys_preop_participant

2.6.2 缺失功能

# 功能 优先级 说明
1 AppService层提取 P0 Controller直接调Service违反分层
2 签名后自动流转状态 P0 所有参与者签名后自动将状态从SUBMITTED→REVIEWING
3 讨论记录导出PDF P1 生成术前讨论记录PDF文档
4 与手术审批模块联动 P1 checkRequired 已有,需在手术审批时调用

2.6.3 业务流程

术前讨论完整流程:
  1. 创建讨论 → status = DRAFT(0)
  2. 提交讨论 → status = SUBMITTED(1)
  3. 参与者逐个签名 → signStatus = 1
  4. 所有参与者签名完成 → 自动流转 status = REVIEWING(2)
  5. 科主任审核:
     - 通过 → status = APPROVED(3)
     - 驳回 → status = REJECTED(5)
  6. 审核通过后,手术审批模块可读取讨论结论

签名自动流转逻辑:
  PreopDiscussionController.sign(discussionId, userId)
    → 1. 查找参与者记录
    → 2. 更新 signStatus = 1
    → 3. 检查该讨论所有参与者是否全部签名
    → 4. 如果全部签名 AND 当前状态 = SUBMITTED(1)
       → 自动更新 status = REVIEWING(2)
       → 通知科主任审核

2.6.4 数据库设计

无需新建表。已有表结构完整。

需新增 Flyway 迁移:

-- V2026_0618_6__preop_enhancement.sql
ALTER TABLE sys_preop_discussion ADD COLUMN IF NOT EXISTS pdf_url VARCHAR(500);
ALTER TABLE sys_preop_discussion ADD COLUMN IF NOT EXISTS auto_transition BOOLEAN DEFAULT TRUE;
ALTER TABLE sys_preop_participant ADD COLUMN IF NOT EXISTS sign_order INTEGER;

2.6.5 API接口

端点 方法 说明
/preop-discussion/page GET 已有
/preop-discussion/detail GET 已有
/preop-discussion/add POST 已有
/preop-discussion/submit PUT 已有
/preop-discussion/sign PUT 已有,需增强:自动流转状态
/preop-discussion/review PUT 已有
/preop-discussion/check-required GET 已有
/preop-discussion/statistics GET 已有
/preop-discussion/export-pdf/{id} GET 新增导出讨论记录PDF

2.6.6 前端设计

preopmanage 模块前端页面需检查是否有对应 Vue 文件。


2.7 Reconstruction影像3D重建

2.7.1 已有代码分析

文件 行数 状态
Controller Reconstruction3DController.java 137 部分实现addTask 是模拟桩直接设COMPLETED
AppService 缺失 业务逻辑全在 Controller
Entity ReconstructionTask / ReconstructionResult / ReconstructionReport 33 全部完整
Service 3个IService + 3个ServiceImpl 54 全部空壳

Flyway: V31reconstruction_task + reconstruction_result + reconstruction_report

2.7.2 缺失功能

# 功能 优先级 说明
1 addTask 真实异步处理 P0 当前直接设COMPLETED需改为 PROCESSING + 异步回调
2 AppService层提取 P0 Controller直接调Service违反分层
3 重建任务状态回调 P1 第三方重建服务完成后回调更新状态
4 DICOM数据关联 P1 从PACS获取DICOM影像数据

2.7.3 业务流程

3D重建任务流程:
  1. 医生提交重建请求 → Reconstruction3DController.addTask
     → 创建 ReconstructionTask, status = PENDING
     → 调用第三方3D重建服务异步
     → 更新 status = PROCESSING
  2. 第三方服务完成 → 回调 /reconstruction/task/{id}/callback
     → 更新 status = COMPLETED / completeTime
     → 创建 ReconstructionResult包含3D模型文件路径
  3. 医生查看结果 → /reconstruction/result/list/{taskId}
  4. 医生撰写报告 → /reconstruction/report/add
     → 创建 ReconstructionReport, status = DRAFT
  5. 提交报告 → status = REPORTED
  6. 审核报告 → status = VERIFIED

2.7.4 数据库设计

无需新建表。已有表结构完整。

需新增 Flyway 迁移:

-- V2026_0618_7__reconstruction_enhancement.sql
ALTER TABLE reconstruction_task ADD COLUMN IF NOT EXISTS callback_url VARCHAR(500);
ALTER TABLE reconstruction_task ADD COLUMN IF NOT EXISTS priority INTEGER DEFAULT 0;
ALTER TABLE reconstruction_task ADD COLUMN IF NOT EXISTS error_message TEXT;
ALTER TABLE reconstruction_result ADD COLUMN IF NOT EXISTS model_file_url VARCHAR(500);
ALTER TABLE reconstruction_result ADD COLUMN IF NOT EXISTS file_size BIGINT;

2.7.5 API接口

端点 方法 说明
/reconstruction/task/page GET 已有
/reconstruction/task/add POST 已有,需改为异步
/reconstruction/task/{id} GET 已有
/reconstruction/task/cancel/{id} PUT 已有
/reconstruction/task/{id}/callback POST 新增:第三方回调更新状态
/reconstruction/result/list/{taskId} GET 已有
/reconstruction/result/add POST 已有
/reconstruction/report/page GET 已有
/reconstruction/report/add POST 已有
/reconstruction/report/submit/{id} PUT 已有
/reconstruction/report/verify/{id} PUT 已有
/reconstruction/stats GET 已有
/reconstruction/doctors GET 已有

2.7.6 前端设计

reconstruction 模块前端页面需检查是否有对应 Vue 文件。


2.8 EmpiEnhancedEMPI增强

2.8.1 已有代码分析

文件 状态
Controller EmpiEnhancedController.java在empi模块内 完整(照片/家属/合并日志 CRUD
前端 4个Vue文件empienhanced目录 已有完整script
后端AppService 缺失Controller直接调Service 需补AppService层

2.8.2 缺失功能

# 功能 优先级 说明
1 AppService层提取 P0 EmpiEnhancedController 直接调 Service
2 照片存储优化 P1 当前未对接OSS/MinIO

2.8.3 数据库设计

无需新建表。V20 已创建 empi_patient_photo / empi_family_member / empi_merge_log。


2.9 合理用药增强 — 肝肾功能调量

2.9.1 已有代码分析

文件 行数 状态
Controller RationalDrugController.java 111 完整
AppService RationalDrugAppServiceImpl.java 283 完整实现:审核/批量审核/统计/趋势/配伍检查/剂量检查
Entity DrugDosageRange / DrugInteractionRule / PrescriptionAuditLog 全部完整

Flyway: V2rational_drug_system 表drug_dosage_range 等)

2.9.2 缺失功能

# 功能 优先级 说明
1 肝肾功能参数输入 P0 auditPrescription 当前只按 population 检查,不按肝肾功能分级
2 肝肾功能剂量调整规则 P0 基于 eGFR/Child-Pugh 分级自动调整剂量
3 肾功能不全药物警示 P1 特定药物在肾功能不全时自动告警

2.9.3 业务流程

肝肾功能调量流程:
  1. 医生开具处方 → RationalDrugController.audit
  2. RationalDrugAppServiceImpl.auditPrescription:
     → 原有: 配伍禁忌检查 + population 剂量检查
     → 新增: 肝肾功能检查
       a. 查询患者最近一次检验结果eGFR / ALT / AST / Child-Pugh
       b. 根据 eGFR 分级:
          - G1 (≥90): 正常剂量
          - G2 (60-89): 减量25%
          - G3 (30-59): 减量50%
          - G4 (15-29): 减量75% 或禁用
          - G5 (<15): 禁用
       c. 根据 Child-Pugh 分级:
          - A级: 正常剂量
          - B级: 减量50%
          - C级: 禁用
       d. 查询 drug_dosage_range WHERE population = 'RENAL_G{level}' 或 'HEPATIC_{level}'
       e. 如果无对应规则 → 生成 MANUAL 审核结果
       f. 如果有规则 → 按规则调整剂量范围检查
  3. 返回审核结果(含肝肾功能调整建议)

2.9.4 数据库设计

需新增 Flyway 迁移:

-- V2026_0618_8__rationaldrug_renal_hepatic.sql
ALTER TABLE drug_dosage_range ADD COLUMN IF NOT EXISTS renal_adjustment VARCHAR(200);
ALTER TABLE drug_dosage_range ADD COLUMN IF NOT EXISTS hepatic_adjustment VARCHAR(200);
ALTER TABLE drug_dosage_range ADD COLUMN IF NOT EXISTS contraindicated_renal VARCHAR(20);
ALTER TABLE drug_dosage_range ADD COLUMN IF NOT EXISTS contraindicated_hepatic VARCHAR(20);

CREATE TABLE IF NOT EXISTS drug_renal_hepatic_rule (
    id BIGINT PRIMARY KEY,
    drug_code VARCHAR(50) NOT NULL,
    drug_name VARCHAR(200),
    renal_function_field VARCHAR(50),
    renal_threshold_min DECIMAL(10,2),
    renal_threshold_max DECIMAL(10,2),
    renal_adjustment_type VARCHAR(20),
    renal_adjustment_value DECIMAL(5,2),
    hepatic_function_field VARCHAR(50),
    hepatic_threshold VARCHAR(50),
    hepatic_adjustment_type VARCHAR(20),
    hepatic_adjustment_value DECIMAL(5,2),
    enabled VARCHAR(1) DEFAULT '1',
    del_flag VARCHAR(1) DEFAULT '0',
    create_time TIMESTAMP,
    update_time TIMESTAMP
);

2.9.5 API接口

端点 方法 说明
/rationaldrug/audit POST 已有,需增强:加肝肾功能参数
/rationaldrug/batch-audit POST 已有
/rationaldrug/statistics GET 已有
/rationaldrug/trend GET 已有
/rationaldrug/interaction/check POST 已有
/rationaldrug/dosage/check POST 已有
/rationaldrug/renal-hepatic/rule/page GET 新增:肝肾功能规则分页查询
/rationaldrug/renal-hepatic/rule/add POST 新增:添加规则
/rationaldrug/renal-hepatic/rule/update PUT 新增:更新规则
/rationaldrug/renal-hepatic/rule/delete/{id} DELETE 新增:删除规则
/rationaldrug/renal-hepatic/check POST 新增:独立肝肾功能检查接口

2.9.6 前端设计

rationaldrug 模块 3 个 Vue 文件已有完整 script 逻辑。需新增"肝肾功能规则管理"页面。


2.10 传染病报告

2.10.1 已有代码分析

文件 行数 状态
Controller EpidemicController.java 20 完整4端点
AppService EpidemicAppServiceImpl.java 30 基本完整report / confirmReport / getReports / getStatistics
Entity EpidemicReport 完整

Flyway: V9epidemic 相关表)

2.10.2 缺失功能

# 功能 优先级 说明
1 传染病分类管理 P0 按法定传染病分类(甲/乙/丙)管理
2 病例自动筛查 P0 从门诊诊断中自动筛查疑似传染病
3 上报CDC接口 P1 对接疾控中心上报系统
4 统计报表 P1 按病种/科室/时间段统计

2.10.3 业务流程

门诊传染病报告流程:
  1. 医生诊断 → clinicmanagement 模块写入诊断
  2. 疑似传染病筛查(定时任务):
     → 查询今日门诊诊断 WHERE diagnosis_code IN (法定传染病编码列表)
     → 对每个疑似病例生成 EpidemicReport
     → status = 'SUSPECTED'
     → 通知防保科确认
  3. 防保科确认:
     → 确认为传染病 → status = 'CONFIRMED' → 填写 cdcConfirmNo
     → 排除 → status = 'EXCLUDED'
  4. 上报CDC:
     → 调用 CDC 上报接口
     → status = 'REPORTED'
  5. 统计:
     → 按病种统计发病数
     → 按科室统计报告数
     → 按时间段统计趋势

2.10.4 数据库设计

需新增 Flyway 迁移:

-- V2026_0618_9__epidemic_enhancement.sql
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS disease_category VARCHAR(20);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS disease_code VARCHAR(50);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS disease_name VARCHAR(200);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS department_id BIGINT;
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS department_name VARCHAR(100);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS doctor_id BIGINT;
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS doctor_name VARCHAR(100);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS diagnosis_code VARCHAR(50);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS diagnosis_name VARCHAR(200);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS patient_phone VARCHAR(20);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS patient_address VARCHAR(500);
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS report_to_cdc BOOLEAN DEFAULT FALSE;
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS cdc_report_time TIMESTAMP;
ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS report_source VARCHAR(50);

CREATE TABLE IF NOT EXISTS epidemic_disease_config (
    id BIGINT PRIMARY KEY,
    disease_code VARCHAR(50) NOT NULL,
    disease_name VARCHAR(200) NOT NULL,
    category VARCHAR(20) NOT NULL,
    report_limit_hours INTEGER DEFAULT 24,
    enabled VARCHAR(1) DEFAULT '1',
    del_flag VARCHAR(1) DEFAULT '0',
    create_time TIMESTAMP,
    update_time TIMESTAMP
);

2.10.5 API接口

端点 方法 说明
/epidemic/report POST 已有
/epidemic/report/confirm/{id} PUT 已有
/epidemic/report/list GET 已有
/epidemic/statistics GET 已有
/epidemic/report/page GET 新增:分页查询
/epidemic/report/suspected GET 新增:疑似病例列表
/epidemic/report/confirm PUT 新增:确认/排除传染病
/epidemic/report/to-cdc/{id} POST 新增上报CDC
/epidemic/config/page GET 新增:传染病配置管理
/epidemic/config/add POST 新增:添加传染病配置
/epidemic/statistics/trend GET 新增:趋势统计
/epidemic/statistics/by-disease GET 新增:按病种统计

2.10.6 前端设计

epidemic 模块前端页面需检查是否有对应 Vue 文件。如缺失需补全。


三、统计报表补全5项

reportmanage 模块已有 21 个 Controller + 21 个 AppService + 78 个 DTO + 21 个 Mapper共 16663 行,非常完整。以下 5 项为缺失的统计能力。

3.1 质控指标自动采集

归属: quality 模块(见 2.2 节)

实现方式: 在 QualityEnhancedController 中新增 /quality-enhanced/indicator/collect 端点,由定时任务 QualityAutoCollectJob 每日凌晨调用。

数据源:

指标 数据源表 聚合方式
病历合格率 emr_quality_score COUNT(score >= 60) / COUNT(*)
甲级病案率 emr_quality_score COUNT(grade = 'A') / COUNT(*)
缺陷率 emr_defect COUNT(*) / encounter总数
逾期整改率 emr_defect COUNT(rectify_status = 'OVERDUE') / COUNT(*)
处方合格率 prescription_audit_log COUNT(audit_result = 'PASS') / COUNT(*)
抗菌药物使用率 prescription + drug COUNT(含抗菌药) / COUNT(*)

3.2 DRG/DIP 分析

归属: reportmanage 模块

已有基础: V28 创建了 mr_drg_grouping

新增 Controller: DrgDipAnalysisController.java

业务逻辑:

DRG/DIP分析流程:
  1. 从 mr_drg_grouping 表读取分组数据
  2. 按 DRG 组统计:
     - 入组病例数
     - 平均住院日
     - 平均费用
     - CMI病例组合指数
     - 费用消耗指数
  3. 按科室统计:
     - 各科室 DRG 分组分布
     - 各科室 CMI 值
     - 权重RW分布
  4. 异常分析:
     - 高倍率病例(实际费用 / 标准费用 > 2
     - 低倍率病例(实际费用 / 标准费用 < 0.5
     - 入组失败病例
  5. 趋势分析: 按月统计 CMI / 费用消耗指数变化

数据库:

-- V2026_0618_10__drg_dip_analysis.sql (如V28已创建mr_drg_grouping则无需新建)
-- 确认 mr_drg_grouping 表字段:
-- id, patient_id, encounter_id, drg_code, drg_name, dip_code, dip_name,
-- rw (权重), cmi, actual_cost, standard_cost, los (住院天数),
-- standard_los, cost_ratio, los_ratio, group_status, create_time

CREATE TABLE IF NOT EXISTS mr_drg_analysis_summary (
    id BIGINT PRIMARY KEY,
    stat_period VARCHAR(20) NOT NULL,
    department_id BIGINT,
    department_name VARCHAR(100),
    drg_code VARCHAR(50),
    drg_name VARCHAR(200),
    case_count INTEGER DEFAULT 0,
    avg_cost DECIMAL(12,2),
    avg_los DECIMAL(5,1),
    avg_rw DECIMAL(5,3),
    cost_ratio_avg DECIMAL(5,2),
    los_ratio_avg DECIMAL(5,2),
    high_ratio_count INTEGER DEFAULT 0,
    low_ratio_count INTEGER DEFAULT 0,
    create_time TIMESTAMP,
    update_time TIMESTAMP,
    del_flag VARCHAR(1) DEFAULT '0'
);

API接口:

端点 方法 说明
/report/drg-dip/summary GET DRG/DIP综合分析概览
/report/drg-dip/by-department GET 按科室分析
/report/drg-dip/by-drg GET 按DRG组分析
/report/drg-dip/abnormal GET 异常病例分析
/report/drg-dip/trend GET 趋势分析
/report/drg-dip/export GET 导出分析报告

前端页面: reportmanage/drgAnalysis/index.vue

3.3 经营分析

归属: reportmanage 模块

已有基础: V23 创建了 business_analyticsBusinessAnalyticsController 已有 page/add/summary

新增能力: 趋势分析、科室对比、收入结构分析

新增 Controller 方法(在 BusinessAnalyticsController 中追加):

经营分析增强:
  1. 趋势分析: 按月统计收入/成本/利润/患者数变化
  2. 科室对比: 各科室收入排名、人均创收、成本占比
  3. 收入结构: 门诊/住院/检查/检验/药品/手术 各占比
  4. 同比环比: 与去年同期/上月对比

API接口(在 BusinessAnalyticsController 追加):

端点 方法 说明
/business-analytics/trend GET 收入趋势分析
/business-analytics/department-compare GET 科室对比分析
/business-analytics/revenue-structure GET 收入结构分析
/business-analytics/yoy-comparison GET 同比环比分析
/business-analytics/export GET 导出经营分析报告

3.4 数据导出

归属: reportmanage 模块

已有基础: ReportController 中已有 CsvFillerUtil / ExcelFillerUtil 工具类

新增通用导出能力:

数据导出流程:
  1. 前端选择报表类型 + 筛选条件 + 导出格式(Excel/CSV/PDF)
  2. 调用 /report/export 接口
  3. 后端根据报表类型查询数据
  4. 使用 ExcelFillerUtil/CsvFillerUtil 生成文件
  5. 返回文件下载流

新增 Controller: DataExportController.java

API接口:

端点 方法 说明
/report/export/excel POST 通用Excel导出
/report/export/csv POST 通用CSV导出
/report/export/pdf POST 通用PDF导出
/report/export/template/{type} GET 下载导出模板
/report/export/history GET 导出历史记录

数据库:

-- V2026_0618_11__data_export.sql
CREATE TABLE IF NOT EXISTS sys_export_record (
    id BIGINT PRIMARY KEY,
    export_type VARCHAR(50) NOT NULL,
    export_format VARCHAR(20) NOT NULL,
    filter_params JSONB,
    file_path VARCHAR(500),
    file_name VARCHAR(200),
    file_size BIGINT,
    export_status VARCHAR(20) DEFAULT 'PENDING',
    export_by VARCHAR(100),
    export_time TIMESTAMP,
    download_count INTEGER DEFAULT 0,
    del_flag VARCHAR(1) DEFAULT '0',
    create_time TIMESTAMP,
    update_time TIMESTAMP
);

3.5 可视化仪表盘

归属: reportmanage 模块

已有基础: DashboardController 已有V20 创建了 sys_dashboard_config

新增能力: 多仪表盘模板 + 数据实时刷新 + 自定义布局

业务逻辑:

仪表盘配置流程:
  1. 预置仪表盘模板:
     - 院长驾驶舱: 收入/患者数/床位使用率/手术量/药占比
     - 科主任驾驶舱: 科室收入/病历质量/处方合格率/患者满意度
     - 护理驾驶舱: 护理质量/患者跌倒率/压疮发生率/满意度
     - 质控驾驶舱: 病历合格率/缺陷率/整改率/DRG指标
  2. 用户可自定义:
     - 选择展示哪些指标卡片
     - 调整卡片位置和大小
     - 设置刷新频率
  3. 数据刷新:
     - 实时指标: 每5分钟刷新当前住院人数、今日门诊量
     - 准实时指标: 每小时刷新(今日收入、处方合格率)
     - 统计指标: 每日刷新DRG指标、质控指标

API接口(在 DashboardController 追加):

端点 方法 说明
/dashboard/config GET 获取仪表盘配置
/dashboard/config/save POST 保存仪表盘配置
/dashboard/data/{template} GET 获取仪表盘数据
/dashboard/data/realtime GET 获取实时指标数据
/dashboard/card/{cardType} GET 获取单个卡片数据

四、公共基础设施

4.1 定时任务汇总

任务 模块 频率 说明
QualityAutoCollectJob quality 每日 02:00 质控指标自动采集
DrugTraceAlertJob drugtrace 每日 03:00 药品近效期/过期预警
CssdExpiryCheckJob cssd 每日 04:00 器械包灭菌有效期检查
FollowupPlanAutoGenerateJob followup 每日 01:00 随访计划自动生成
FollowupReminderJob followup 每日 08:00 随访任务提醒
EpidemicScreeningJob epidemic 每日 06:00 传染病疑似病例筛查

4.2 枚举补充

需新增的枚举:

枚举类 位置
EmpiDuplicateLevel common/enums/ HIGH / MEDIUM / LOW / NONE
CssdStepType common/enums/ RECYCLE / WASH / DISINFECT / PACK / STERILIZE / STORE / DISTRIBUTE
QualityCheckType common/enums/ RUNTIME / TERMINAL
DrugAlertType common/enums/ EXPIRING_SOON / EXPIRED / ABNORMAL_SCAN / BATCH_RECALL
RenalFunctionGrade common/enums/ G1 / G2 / G3 / G4 / G5
HepaticFunctionGrade common/enums/ A / B / C
EpidemicDiseaseCategory common/enums/ CATEGORY_A / CATEGORY_B / CATEGORY_C
ReconstructionTaskStatus common/enums/ PENDING / PROCESSING / COMPLETED / FAILED / CANCELLED
ExportFormat common/enums/ EXCEL / CSV / PDF
DashboardTemplate common/enums/ DEAN / DIRECTOR / NURSING / QUALITY

五、Flyway 迁移汇总

版本 文件名 模块 内容
V2026_0618_1 V2026_0618_1__empi_duplicate_detection.sql empi name_pinyin / name_initials / last_sync_time / sync_status
V2026_0618_2 V2026_0618_2__quality_enhancement.sql quality indicator数据源字段 / score的check_items
V2026_0618_3 V2026_0618_3__followup_enhancement.sql followup auto_generated / reminder / symptoms
V2026_0618_4 V2026_0618_4__drugtrace_enhancement.sql drugtrace current_quantity / location / batch关联
V2026_0618_5 V2026_0618_5__cssd_enhancement.sql cssd validity_days / tray_ids / photo
V2026_0618_6 V2026_0618_6__preop_enhancement.sql preopmanage pdf_url / sign_order
V2026_0618_7 V2026_0618_7__reconstruction_enhancement.sql reconstruction callback / priority / model_file
V2026_0618_8 V2026_0618_8__rationaldrug_renal_hepatic.sql rationaldrug 肝肾功能规则表 + 剂量调整字段
V2026_0618_9 V2026_0618_9__epidemic_enhancement.sql epidemic 传染病分类 + 配置表
V2026_0618_10 V2026_0618_10__drg_dip_analysis.sql reportmanage DRG分析汇总表
V2026_0618_11 V2026_0618_11__data_export.sql reportmanage 导出记录表
V2026_0618_12 V2026_0618_12__dashboard_enhancement.sql reportmanage 仪表盘布局配置

六、开发优先级排序

Sprint 1P0 — 核心补全)

优先级 模块 任务
1 quality 修复 executeTerminalCheck / getCompletionRate 硬编码
2 cssd 修复 scanTrace statusFlow Map bug
3 reconstruction 修复 addTask 模拟桩 → 真实异步
4 empi 实现重复检测算法
5 rationaldrug 实现肝肾功能调量核心逻辑
6 epidemic 实现传染病分类管理 + 病例筛查

Sprint 2P1 — 架构补全)

优先级 模块 任务
7 followup AppService 层提取 + 自动计划生成
8 drugtrace AppService 层提取 + 自动预警
9 cssd AppService 层提取 + 灭菌批次联动
10 preopmanage AppService 层提取 + 签名自动流转
11 reconstruction AppService 层提取 + 状态回调
12 empienhanced AppService 层提取

Sprint 3P2 — 报表增强)

优先级 模块 任务
13 reportmanage DRG/DIP 分析 Controller + Service
14 reportmanage 经营分析增强(趋势/对比/结构)
15 reportmanage 通用数据导出
16 reportmanage 可视化仪表盘增强
17 quality 质控指标自动采集定时任务

Sprint 4P3 — 体验优化)

优先级 模块 任务
18 所有模块 前端页面补全如Vue文件确实缺失
19 所有模块 前端联调 + E2E测试
20 公共 枚举补充 + 定时任务注册

七、关键设计决策

决策 选择 理由
AppService层提取策略 保持Controller端点不变仅提取业务逻辑到AppService 遵循铁律7禁止修改已有公开方法签名
数据库新增字段 全部使用 ALTER TABLE ADD COLUMNIF NOT EXISTS 遵循铁律18禁止破坏原有功能
定时任务框架 使用 Spring @Scheduled 项目已有此模式,无需引入新依赖
导出格式 Excel(POI) + CSV + PDF(iText) 项目已有 ExcelFillerUtil/CsvFillerUtil
肝肾功能数据来源 从检验模块(lab)查询最近检验结果 遵循铁律20数据来源必须验证
3D重建异步处理 保留模拟实现,增加 PROCESSING 中间状态 实际对接需第三方服务Phase 3 先完成框架

📅 文档完成时间: 2026-06-17 | 版本: v1.0