- 删除手术状态下拉框的重复字典数据,保留每组中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字段以完善审计信息 - 更新院感管理和评审保障模块的设计文档,明确各模块实现状态和缺失功能
46 KiB
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_1(empi_person + empi_person_id_mapping)、V20(empi_patient_photo + empi_family_member + empi_merge_log)、V2026_0616_2(fix 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 硬编码 PASS,getCompletionRate 返回全零 |
| Entity | QualityCoreIndicator / QualityOrderStatistics / BusinessAnalytics / EmrDefect / EmrQualityScore | 106 | 全部完整 |
| Service | 3个IService(Indicator/OrderStats/Analytics) | 21 | 空壳 |
| Service | EmrDefect / EmrQualityScore 缺失Service层 | — | 直接通过Mapper访问 |
Flyway: V11(emr_quality_score + emr_defect)、V20(quality_core_indicator + quality_order_statistics)、V23(business_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: V32(followup_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: V36(drug_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: V31(cssd_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 逻辑有bug(Map.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: V14(sys_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: V31(reconstruction_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 EmpiEnhanced(EMPI增强)
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: V2(rational_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: V9(epidemic 相关表)
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_analytics 表,BusinessAnalyticsController 已有 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 1(P0 — 核心补全)
| 优先级 | 模块 | 任务 |
|---|---|---|
| 1 | quality | 修复 executeTerminalCheck / getCompletionRate 硬编码 |
| 2 | cssd | 修复 scanTrace statusFlow Map bug |
| 3 | reconstruction | 修复 addTask 模拟桩 → 真实异步 |
| 4 | empi | 实现重复检测算法 |
| 5 | rationaldrug | 实现肝肾功能调量核心逻辑 |
| 6 | epidemic | 实现传染病分类管理 + 病例筛查 |
Sprint 2(P1 — 架构补全)
| 优先级 | 模块 | 任务 |
|---|---|---|
| 7 | followup | AppService 层提取 + 自动计划生成 |
| 8 | drugtrace | AppService 层提取 + 自动预警 |
| 9 | cssd | AppService 层提取 + 灭菌批次联动 |
| 10 | preopmanage | AppService 层提取 + 签名自动流转 |
| 11 | reconstruction | AppService 层提取 + 状态回调 |
| 12 | empienhanced | AppService 层提取 |
Sprint 3(P2 — 报表增强)
| 优先级 | 模块 | 任务 |
|---|---|---|
| 13 | reportmanage | DRG/DIP 分析 Controller + Service |
| 14 | reportmanage | 经营分析增强(趋势/对比/结构) |
| 15 | reportmanage | 通用数据导出 |
| 16 | reportmanage | 可视化仪表盘增强 |
| 17 | quality | 质控指标自动采集定时任务 |
Sprint 4(P3 — 体验优化)
| 优先级 | 模块 | 任务 |
|---|---|---|
| 18 | 所有模块 | 前端页面补全(如Vue文件确实缺失) |
| 19 | 所有模块 | 前端联调 + E2E测试 |
| 20 | 公共 | 枚举补充 + 定时任务注册 |
七、关键设计决策
| 决策 | 选择 | 理由 |
|---|---|---|
| AppService层提取策略 | 保持Controller端点不变,仅提取业务逻辑到AppService | 遵循铁律7(禁止修改已有公开方法签名) |
| 数据库新增字段 | 全部使用 ALTER TABLE ADD COLUMN(IF NOT EXISTS) | 遵循铁律18(禁止破坏原有功能) |
| 定时任务框架 | 使用 Spring @Scheduled | 项目已有此模式,无需引入新依赖 |
| 导出格式 | Excel(POI) + CSV + PDF(iText) | 项目已有 ExcelFillerUtil/CsvFillerUtil |
| 肝肾功能数据来源 | 从检验模块(lab)查询最近检验结果 | 遵循铁律20(数据来源必须验证) |
| 3D重建异步处理 | 保留模拟实现,增加 PROCESSING 中间状态 | 实际对接需第三方服务,Phase 3 先完成框架 |
📅 文档完成时间: 2026-06-17 | 版本: v1.0