From 575f5d6c32d0073dd786593363b0d4385a98aab2 Mon Sep 17 00:00:00 2001 From: chenqi Date: Wed, 17 Jun 2026 11:46:56 +0800 Subject: [PATCH] =?UTF-8?q?fix(database):=20=E4=BF=AE=E5=A4=8D=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=AD=97=E5=85=B8=E9=87=8D=E5=A4=8D=E5=92=8C?= =?UTF-8?q?=E8=A1=A8=E7=BB=93=E6=9E=84=E7=BC=BA=E5=A4=B1=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除手术状态下拉框的重复字典数据,保留每组中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字段以完善审计信息 - 更新院感管理和评审保障模块的设计文档,明确各模块实现状态和缺失功能 --- MD/GRADE3A_FULL_IMPLEMENTATION_PLAN.md | 439 ++++ MD/HEALTHLINK_HIS_PRICING_PROPOSAL_0.2.docx | Bin 0 -> 58412 bytes MD/HEALTHLINK_HIS_PRICING_PROPOSAL_0.2.md | 724 ++++++ MD/HEALTHLINK_HIS_PRICING_v0.1.docx | Bin 0 -> 187278 bytes MD/HEALTHLINK_HIS_XINCHUANG_ARTICLE.docx | Bin 0 -> 43438 bytes MD/HEALTHLINK_HIS_XINCHUANG_ARTICLE.md | 279 +++ MD/HEALTHLINK_HIS_XINCHUANG_v2.docx | Bin 0 -> 122839 bytes MD/INHOSPITAL_MODULE_CONSOLIDATION.md | 182 ++ MD/design/CODEBASE_REALITY_CHECK.md | 215 ++ MD/design/PHASE1_CORE_DESIGN.md | 2176 +++++++++++++++++ MD/design/PHASE2_REVIEW_DESIGN.md | 1314 ++++++++++ MD/design/PHASE3_FILL_DESIGN.md | 1177 +++++++++ MD/design/PHASE4_LOCAL_DESIGN.md | 1118 +++++++++ ...althlink-his-grade3a-comparison-article.md | 204 ++ MD/xinchuang_architecture.png | Bin 0 -> 81398 bytes MD/xinchuang_architecture.svg | 94 + MD/~$ALTHLINK_HIS_PRICING_PROPOSAL_0.2.docx | Bin 0 -> 162 bytes ...684_fix_surgery_status_dict_duplicates.sql | 15 + .../V48__fix_hisbaseentity_columns.sql | 88 + .../migration/V49__patient_missing_fields.sql | 25 + .../V50__bug704_education_level_dict.sql | 48 + ..._adm_patient_identifier_tenant_patient.sql | 5 + .../V52__fix_prescription_intercept_log.sql | 7 + ...ical_pathway_execution_hisbase_columns.sql | 5 + ...13_add_return_fields_to_device_request.sql | 11 + .../db/migration/V55__empi_core_tables.sql | 53 + .../V56__fix_empi_merge_log_create_time.sql | 1 + 27 files changed, 8180 insertions(+) create mode 100644 MD/GRADE3A_FULL_IMPLEMENTATION_PLAN.md create mode 100644 MD/HEALTHLINK_HIS_PRICING_PROPOSAL_0.2.docx create mode 100644 MD/HEALTHLINK_HIS_PRICING_PROPOSAL_0.2.md create mode 100644 MD/HEALTHLINK_HIS_PRICING_v0.1.docx create mode 100644 MD/HEALTHLINK_HIS_XINCHUANG_ARTICLE.docx create mode 100644 MD/HEALTHLINK_HIS_XINCHUANG_ARTICLE.md create mode 100644 MD/HEALTHLINK_HIS_XINCHUANG_v2.docx create mode 100644 MD/INHOSPITAL_MODULE_CONSOLIDATION.md create mode 100644 MD/design/CODEBASE_REALITY_CHECK.md create mode 100644 MD/design/PHASE1_CORE_DESIGN.md create mode 100644 MD/design/PHASE2_REVIEW_DESIGN.md create mode 100644 MD/design/PHASE3_FILL_DESIGN.md create mode 100644 MD/design/PHASE4_LOCAL_DESIGN.md create mode 100644 MD/healthlink-his-grade3a-comparison-article.md create mode 100644 MD/xinchuang_architecture.png create mode 100644 MD/xinchuang_architecture.svg create mode 100644 MD/~$ALTHLINK_HIS_PRICING_PROPOSAL_0.2.docx create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V47__bug684_fix_surgery_status_dict_duplicates.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V48__fix_hisbaseentity_columns.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V49__patient_missing_fields.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V50__bug704_education_level_dict.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V51__idx_adm_patient_identifier_tenant_patient.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V52__fix_prescription_intercept_log.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V53__fix_clinical_pathway_execution_hisbase_columns.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V54__bug613_add_return_fields_to_device_request.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V55__empi_core_tables.sql create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V56__fix_empi_merge_log_create_time.sql diff --git a/MD/GRADE3A_FULL_IMPLEMENTATION_PLAN.md b/MD/GRADE3A_FULL_IMPLEMENTATION_PLAN.md new file mode 100644 index 000000000..80fbfb953 --- /dev/null +++ b/MD/GRADE3A_FULL_IMPLEMENTATION_PLAN.md @@ -0,0 +1,439 @@ +# HealthLink-HIS 三甲达标完整实现计划 + +> **文档类型**: 实施计划 +> **版本**: v1.0 +> **编制日期**: 2026-06-17 +> **依据标准**: +> - 《三级医院评审标准(2022年版)》及广西实施细则 +> - 《电子病历系统应用水平分级评价标准》(≥4级 = 三甲硬性) +> - 《医院信息互联互通标准化成熟度测评方案》(≥四级甲等 = 三甲硬性) +> - 《MODULE_CAPABILITY_REQUIREMENTS.md》142项必备能力清单 +> - 《GRADE3A_GAP_ANALYSIS_AND_DESIGN.md》差距分析 + +--- + +## 一、现状总览 + +### 1.1 能力完成度 + +| 维度 | 数量 | 占比 | 说明 | +|------|:----:|:----:|------| +| 总必备能力 | **142** | 100% | 三甲评审14个模块域 | +| ✅ 已实现 | **59** | 42% | 功能完整可用 | +| ⚠️ 基础实现 | **31** | 22% | 有框架/表结构,功能未完善 | +| ❌ 缺失 | **52** | 37% | 完全没有实现 | +| **综合完成率** | — | **53%** | (59 + 31×0.5) / 142 | + +### 1.2 各模块完成率 + +| 模块 | 必备能力 | ✅已实现 | ⚠️基础 | ❌缺失 | 完成率 | 优先级 | +|------|:-------:|:-------:|:------:|:------:|:-----:|:-----:| +| 门诊医生站 | 10 | 7 | 2 | 1 | 80% | — | +| 住院医生站 | 10 | 4 | 2 | 4 | 50% | P0 | +| 护士站 | 10 | 5 | 2 | 3 | 60% | P1 | +| 合理用药 | 12 | 10 | 1 | 1 | 83% | — | +| 手术麻醉 | 12 | 6 | 2 | 4 | 58% | P0 | +| 检验(LIS) | 10 | 5 | 2 | 3 | 60% | P1 | +| 检查(PACS) | 10 | 3 | 3 | 4 | 45% | P1 | +| 电子病历 | 10 | 4 | 2 | 4 | 50% | P0 | +| 病案管理 | 10 | 2 | 3 | 5 | 35% | P0 | +| 院感管理 | 10 | 3 | 1 | 6 | 35% | P1 | +| 护理评估 | 10 | 4 | 3 | 3 | 55% | P1 | +| ESB集成 | 10 | 0 | 4 | 6 | 20% | P1 | +| EMPI | 8 | 2 | 3 | 3 | 38% | P1 | +| 统计报表 | 10 | 4 | 1 | 5 | 45% | P1 | + +### 1.3 三甲硬性指标对照 + +| 指标 | 要求 | 当前状态 | 差距 | +|------|------|---------|------| +| 处方审核率 | ≥100% | ✅ 合理用药12项能力已实现10项 | 基本达标 | +| 抗菌药物使用率 | ≤60% | ✅ 分级管控已实现 | 达标 | +| 危急值处理率 | ≥95% | ✅ LIS危急值闭环已实现 | 达标 | +| 电子病历评级 | ≥4级 | ⚠️ 部分能力缺失 | 差版本管理/时效/检索完善 | +| 互联互通成熟度 | ≥四级甲等 | ⚠️ ESB/FHIR基础框架有 | 差完整集成 | +| 首页编码正确率 | ≥95% | ✅ ICD-10编码库已实现 | 达标 | +| 术前讨论率 | 100% | ✅ 已实现(V14) | 达标 | +| 病案24h归档率 | ≥90% | ✅ 已完成(P2) | 达标 | + +--- + +## 二、52项缺失能力详细清单 + +### 2.1 住院医生站(4项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 1 | **医嘱执行闭环追踪** | 医嘱管理制度 | 扩展`order_execute_record`表,增加每步时间戳 | 3天 | +| 2 | **输血管理** | 临床用血管理规范 | 新建输血申请→配血→发血→输注→观察全流程 | 5天 | +| 3 | **临床路径执行** | 临床路径管理 | 路径入径→执行→变异记录→退出 | 5天 | +| 4 | **危急值处理记录** | 危急值管理规范 | 危急值接收→确认→处理→记录闭环 | 3天 | + +**小计**: 16天 + +### 2.2 手术麻醉(4项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 5 | **麻醉评估(ASA分级)** | 麻醉质控 | 新建`anes_assessment`表+评估工作台 | 3天 | +| 6 | **术中生命体征(5min间隔)** | 麻醉记录规范 | 新建`anes_vital_sign`表+自动采集 | 4天 | +| 7 | **麻醉小结** | 麻醉质控 | 新建麻醉总结+并发症记录 | 2天 | +| 8 | **术后随访记录** | 麻醉质控 | 24h/48h/72h随访+疼痛评估 | 3天 | + +**小计**: 12天 + +### 2.3 电子病历(4项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 9 | **病历修改留痕** | 电子病历管理规范 | 新建`emr_revision`表,diff追踪 | 3天 | +| 10 | **病历版本管理** | 电子病历管理规范 | 扩展`doc_emr`增加version字段+版本对比 | 3天 | +| 11 | **病历完整性检查** | 病历质控 | 新建`EmrCompletenessChecker`自动校验 | 2天 | +| 12 | **病历时效监控** | 病历书写规范 | 新建`EmrTimelinessMonitor`超时提醒 | 2天 | + +**小计**: 10天 + +### 2.4 病案管理(5项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 13 | **病案首页数据质量校验** | 首页数据质量≥95% | 新建`mr_homepage_quality_check`表 | 3天 | +| 14 | **病案首页上报(HQMS)** | 卫统报表 | 新建HQMS上报接口 | 3天 | +| 15 | **病案终末质控** | 病案管理规范 | 新建终末质控评分+缺陷管理 | 3天 | +| 16 | **病案示踪管理** | 病案管理 | 在架/借出/归档状态追踪 | 2天 | +| 17 | **死亡病例讨论记录** | 评审必查 | 新建死亡讨论记录+7日内完成提醒 | 2天 | + +**小计**: 13天 + +### 2.5 院感管理(6项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 18 | **院感病例自动筛查** | 院感管理办法 | 规则引擎自动匹配疑似病例 | 3天 | +| 19 | **暴发预警** | 院感管理办法 | 同科室短时间多例感染预警 | 2天 | +| 20 | **目标性监测(ICU/手术部位)** | 院感监测规范 | ICU导管/手术部位感染监测 | 3天 | +| 21 | **手卫生依从性监测** | 患者安全目标 | 手卫生执行率统计 | 2天 | +| 22 | **环境卫生学监测** | 院感管理办法 | 空气/物表/手培养结果管理 | 2天 | +| 23 | **多重耐药菌管理** | 院感管理办法 | 耐药菌检出→隔离→跟踪→解除 | 2天 | + +**小计**: 14天 + +### 2.6 检验系统LIS(3项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 24 | **室内质控(Westgard规则)** | 质量管理 | 质控图+Westgard规则+失控处理 | 3天 | +| 25 | **室间质评** | 质量管理 | 参加省级/国家级室间质评 | 2天 | +| 26 | **检验报告标准格式打印** | 基本功能规范 | 标准检验报告单模板 | 1天 | + +**小计**: 6天 + +### 2.7 检查系统PACS(4项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 27 | **DICOM图像采集存储** | DICOM标准 | PACS对接+图像存储 | 5天 | +| 28 | **结构化图文报告** | 检查规范 | 结构化报告模板+图像标注 | 3天 | +| 29 | **影像对比查看** | 临床决策 | 历史影像对比功能 | 2天 | +| 30 | **DICOM打印(胶片)** | 基本功能规范 | 胶片打印接口 | 2天 | + +**小计**: 12天 + +### 2.8 护理评估(3项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 31 | **管道滑脱风险评估** | 护理安全 | 导管类型/位置/状态评估量表 | 2天 | +| 32 | **营养风险筛查(NRS2002)** | 营养管理 | NRS2002量表+自动评分 | 2天 | +| 33 | **疼痛评估(NRS/VAS)** | 疼痛管理 | NRS/VAS评分+干预+再评估 | 2天 | + +**小计**: 6天 + +### 2.9 护士站(3项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 34 | **护理文书(一般/危重)** | 病历书写规范 | 一般/危重护理记录单模板 | 3天 | +| 35 | **护理质量指标上报** | 护理质量 | 护理敏感指标自动采集+上报 | 3天 | +| 36 | **护理交接班(重点患者)** | 护理安全 | 电子交接班+重点患者提示 | 2天 | + +**小计**: 8天 + +### 2.10 ESB集成平台(6项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 37 | **HL7 FHIR R4消息转换** | 互联互通 | FHIR资源映射+格式转换 | 5天 | +| 38 | **CDA临床文档** | 互联互通 | 入院/出院/检验/处方CDA文档 | 5天 | +| 39 | **院内编码↔标准编码映射** | 互联互通 | ICD-10/LOINC/SNOMED CT映射 | 3天 | +| 40 | **集成监控仪表盘** | 互联互通 | 消息流量/成功率/失败率可视化 | 3天 | +| 41 | **消息可靠性保障** | 互联互通 | 存储转发+确认机制+死信处理 | 3天 | +| 42 | **接口版本管理** | 互联互通 | 接口版本控制+向后兼容 | 2天 | + +**小计**: 21天 + +### 2.11 EMPI患者主索引(3项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 43 | **患者身份合并/拆分** | EMPI | 多来源患者信息合并+拆分 | 3天 | +| 44 | **重复检测算法** | 数据质量 | 身份证+姓名+手机号模糊匹配 | 3天 | +| 45 | **跨系统同步** | 互联互通 | EMPI→HIS/LIS/PACS/EMR同步 | 3天 | + +**小计**: 9天 + +### 2.12 统计报表(5项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 46 | **质控指标自动采集** | 评审指标 | 十八项核心制度执行指标 | 3天 | +| 47 | **DRG/DIP分析** | 医保支付 | 病组分布/费用结构/时间消耗 | 3天 | +| 48 | **经营分析(科室成本)** | 经营管理 | 科室成本/收益/绩效分析 | 3天 | +| 49 | **数据导出(Excel/PDF)** | 基本功能 | 多格式导出+定时推送 | 2天 | +| 50 | **可视化仪表盘** | 高级功能 | 数据大屏+图表展示 | 3天 | + +**小计**: 14天 + +### 2.13 门诊医生站(1项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 51 | **传染病报告卡** | 传染病管理 | 传染病直报卡填报+审核 | 3天 | + +**小计**: 3天 + +### 2.14 合理用药(1项缺失) + +| # | 缺失能力 | 三甲依据 | 实现方案 | 预估工时 | +|---|---------|---------|---------|:-------:| +| 52 | **肝肾功能自动调量** | 合理用药 | 根据化验结果自动建议调量 | 3天 | + +**小计**: 3天 + +--- + +## 三、31项基础实现补全清单 + +> 以下模块已有表结构/框架,但功能未完善,需补全。 + +### 3.1 需补全的基础实现 + +| # | 模块 | 当前状态 | 需补全内容 | 预估工时 | +|---|------|---------|-----------|:-------:| +| B1 | 门诊退号 | 空壳视图 | 退号流程+费用退回 | 2天 | +| B2 | 门诊退药 | 空壳视图 | 退药申请+审批+重新入库 | 2天 | +| B3 | 门诊退费 | 空壳视图 | 退费流程+医保回退 | 2天 | +| B4 | 收费详情查询 | 空壳视图 | 费用明细+发票查询 | 1天 | +| B5 | 申请单管理 | 空壳视图 | 检验检查申请单查看 | 2天 | +| B6 | 结果查看 | 空壳视图 | LIS/PACS结果统一查看 | 2天 | +| B7 | 医嘱查看与打印 | 空壳视图 | 医嘱单打印 | 1天 | +| B8 | 入院诊断 | 空壳视图 | 入院诊断录入+ICD编码 | 2天 | +| B9 | 医嘱管理 | 空壳视图 | 医嘱查询+统计 | 2天 | +| B10 | 门诊收费结算 | 空壳视图 | 结算流程完善 | 2天 | +| B11 | 排班管理 | 空壳视图 | 医生排班+号源管理 | 2天 | +| B12 | 病案管理 | 空壳视图 | 病案借阅/封存/示踪 | 3天 | +| B13 | 费用清单 | 空壳视图 | 患者每日费用清单 | 2天 | +| B14 | 手术管理 | 空壳视图 | 手术全流程管理 | 3天 | +| B15 | 服务目录 | 空壳视图 | 诊疗服务项目目录 | 2天 | +| B16 | 常用诊断 | 空壳视图 | 常用诊断维护 | 1天 | +| B17 | 中医处方 | 空壳视图 | 中药饮片处方 | 2天 | +| B18 | 床位管理 | 空壳视图 | 实时床位图+利用率统计 | 2天 | +| B19 | 费用配置 | 空壳视图 | 收费项目配置 | 1天 | +| B20 | LIS对照 | 空壳视图 | 检验项目目录对照 | 2天 | +| B21 | PACS对照 | 空壳视图 | 检查项目目录对照 | 2天 | +| B22 | 诊断对照 | 空壳视图 | 院内诊断↔ICD↔医保诊断 | 2天 | +| B23 | 货位管理 | 空壳视图 | 药品货位维护 | 2天 | +| B24 | 调价管理 | 空壳视图 | 药品/服务调价流程 | 2天 | +| B25 | 退药管理 | 空壳视图 | 药房退药流程 | 2天 | +| B26 | 自动计算 | 空壳视图 | 自动计费规则 | 2天 | + +**小计**: 49天 + +--- + +## 四、广西地方特色模块(P2) + +| # | 模块 | 广西要求 | 实现方案 | 预估工时 | +|---|------|---------|---------|:-------:| +| G1 | **壮医/中医特色** | 广西壮医药诊疗 | 壮医望诊/脉诊/目诊+中药方剂模板 | 10天 | +| G2 | **传染病直报** | 对接广西疾控 | 传染病自动筛查+直报对接 | 5天 | +| G3 | **电子健康卡** | 对接广西平台 | 健康卡申领+就诊使用 | 5天 | +| G4 | **电子票据** | 对接广西财政 | 财政电子票据+核销对账 | 5天 | +| G5 | **DRG/DIP深化** | 广西医保规则 | 广西DRG/DIP分组+费用预警 | 10天 | + +**小计**: 35天 + +--- + +## 五、实施路线图 + +### Phase 1: 核心达标(Sprint 1-4,4周) + +**目标**: 补齐P0缺失能力,达到电子病历4级基本要求 + +``` +Week 1: 住院医生站闭环 + 医嘱执行追踪 + 危急值处理 +Week 2: 麻醉评估 + 术中记录 + 麻醉小结 + 术后随访 +Week 3: 病历修改留痕 + 版本管理 + 完整性检查 + 时效监控 +Week 4: 病案首页质控 + HQMS上报 + 死亡病例讨论 + 病案示踪 +``` + +| 周 | 工作内容 | 工时 | 交付物 | +|:--:|---------|:---:|--------| +| W1 | 住院医生站4项缺失 | 16天 | 医嘱闭环+输血+临床路径+危急值 | +| W2 | 手术麻醉4项缺失 | 12天 | 麻醉评估+术中记录+小结+随访 | +| W3 | 电子病历4项缺失 | 10天 | 留痕+版本+完整性+时效 | +| W4 | 病案管理5项缺失 | 13天 | 首页质控+HQMS+终末质控+示踪+死亡讨论 | +| | **Phase 1 合计** | **51天** | | + +### Phase 2: 评审保障(Sprint 5-8,4周) + +**目标**: 补齐P1缺失能力,达到三甲评审合格线 + +``` +Week 5: 院感管理6项缺失 +Week 6: 护理评估3项 + 护士站3项 +Week 7: 检验3项 + 检查4项 +Week 8: ESB集成平台6项 +``` + +| 周 | 工作内容 | 工时 | 交付物 | +|:--:|---------|:---:|--------| +| W5 | 院感管理6项缺失 | 14天 | 自动筛查+暴发预警+目标监测+手卫生+环境+耐药菌 | +| W6 | 护理+护士6项缺失 | 14天 | 管道评估+营养筛查+疼痛评估+护理文书+质量指标+交接班 | +| W7 | LIS+PACS 7项缺失 | 18天 | 质控+室间质评+报告打印+DICOM+图文报告+影像对比+胶片 | +| W8 | ESB集成6项 | 21天 | FHIR+CDA+编码映射+监控+可靠性+版本管理 | +| | **Phase 2 合计** | **67天** | | + +### Phase 3: 能力补全(Sprint 9-12,4周) + +**目标**: 补全31项空壳视图 + 统计报表5项 + 其他缺失 + +``` +Week 9: 空壳视图第一批(门诊退号/退药/退费/收费详情/申请单/结果查看) +Week 10: 空壳视图第二批(医嘱查看/入院诊断/医嘱管理/结算/排班/病案/费用) +Week 11: 空壳视图第三批(手术/服务目录/常用诊断/中医处方/床位/费用配置) ++ 统计报表5项 +Week 12: 空壳视图第四批(LIS/PACS/诊断对照/货位/调价/退药/自动计算) ++ EMPI 3项 + 合理用药1项 + 传染病报告1项 +``` + +| 周 | 工作内容 | 工时 | 交付物 | +|:--:|---------|:---:|--------| +| W9 | 空壳视图6项 | 11天 | 门诊退号/退药/退费/收费详情/申请单/结果查看 | +| W10 | 空壳视图7项 | 14天 | 医嘱查看/入院诊断/医嘱管理/结算/排班/病案/费用 | +| W11 | 空壳视图6项+报表5项 | 20天 | 手术/服务目录/常用诊断/中医/床位/费用+统计报表 | +| W12 | 空壳视图7项+EMPI+合理用药+传染病 | 22天 | 目录对照/货位/调价/退药/计算+EMPI+调量+报卡 | +| | **Phase 3 合计** | **67天** | | + +### Phase 4: 地方特色(Sprint 13-15,3周) + +**目标**: 满足广西地方要求 + +``` +Week 13: 壮医/中医特色 + 传染病直报 +Week 14: 电子健康卡 + 电子票据 +Week 15: DRG/DIP深化 +``` + +| 周 | 工作内容 | 工时 | 交付物 | +|:--:|---------|:---:|--------| +| W13 | 壮医/中医+传染病 | 15天 | 壮医诊疗+中药方剂+传染病直报 | +| W14 | 电子健康卡+电子票据 | 10天 | 健康卡对接+财政票据 | +| W15 | DRG/DIP深化 | 10天 | 广西DRG/DIP分组+费用预警 | +| | **Phase 4 合计** | **35天** | | + +--- + +## 六、工时汇总 + +| 类别 | 模块数 | 工时 | 占比 | +|------|:-----:|:----:|:----:| +| 🔴 P0 核心达标(Phase 1) | 17项 | 51天 | 19% | +| 🟡 P1 评审保障(Phase 2) | 25项 | 67天 | 26% | +| 🔧 空壳补全+其他(Phase 3) | 37项 | 67天 | 26% | +| 🟢 P2 地方特色(Phase 4) | 5项 | 35天 | 14% | +| **合计** | **84项** | **220天** | — | + +> **并行开发估算**: +> - 2人并行: ~16周(4个月) +> - 3人并行: ~11周(3个月) +> - 4人并行: ~8周(2个月) + +--- + +## 七、关键里程碑 + +| 里程碑 | 时间 | 验收标准 | 评审支撑 | +|--------|------|---------|---------| +| **M1** | Phase 1 结束 | 电子病历4级核心能力就绪 | 电子病历评级申请 | +| **M2** | Phase 2 结束 | 三甲评审17项必测项全部覆盖 | 三甲评审自查 | +| **M3** | Phase 3 结束 | 142项必备能力完成率≥90% | 评审材料准备 | +| **M4** | Phase 4 结束 | 广西地方特色全覆盖 | 地方评审加分 | + +--- + +## 八、风险与依赖 + +### 8.1 技术风险 + +| 风险 | 影响 | 缓解措施 | +|------|------|---------| +| ESB集成平台复杂度高 | Phase 2延期 | 优先使用开源集成引擎(Kafka/RabbitMQ) | +| PACS设备对接不确定性 | 图像采集延期 | 先做框架,设备对接延后 | +| 医保接口联调周期长 | DRG/DIP延期 | 预留联调缓冲期 | + +### 8.2 外部依赖 + +| 依赖 | 影响 | 应对 | +|------|------|------| +| 广西医保平台接口文档 | DRG/DIP对接 | 提前获取文档 | +| CA签名服务商 | 电子签名 | 已有基础,扩展即可 | +| HL7 FHIR认证 | 互联互通测评 | 参考国家标准实现 | + +--- + +## 九、验证计划 + +### 9.1 每Phase验证 + +| Phase | 验证内容 | 验证方式 | +|-------|---------|---------| +| Phase 1 | 医嘱闭环→麻醉记录→病历留痕→病案首页 | 端到端流程测试 | +| Phase 2 | 院感监测→护理评估→LIS/PACS→ESB集成 | 接口联通测试 | +| Phase 3 | 空壳视图功能→统计报表→EMPI | 功能验收测试 | +| Phase 4 | 壮医模块→传染病直报→电子票据→DRG | 地方标准对照 | + +### 9.2 评审指标验证 + +| 指标 | 验证方法 | 目标值 | +|------|---------|:------:| +| 处方审核率 | 统计全院处方审核覆盖率 | 100% | +| 首页编码正确率 | 抽样检查ICD-10编码 | ≥95% | +| 病案24h归档率 | 统计出院后归档时间 | ≥90% | +| 危急值处理及时率 | 统计危急值处理时间 | ≥95% | +| 电子病历评级 | 对照4级评价标准自评 | ≥4级 | +| 互联互通成熟度 | 对照四级甲等标准自评 | ≥四级甲等 | + +--- + +## 十、与现有开发规范对齐 + +本计划严格遵循 `AGENTS.md` 中的开发规范: + +| 规范 | 对齐方式 | +|------|---------| +| **铁律1: 修改完必须测试** | 每个Phase结束运行`mvn test`+`npm run build:dev` | +| **铁律2: Flyway迁移** | 每个新模块创建`V{版本号}__{描述}.sql` | +| **铁律5: 状态值一致性** | 新增状态值走完整链路检查 | +| **铁律9: 先审核原有代码** | 每个模块开发前搜索已有代码 | +| **铁律12: 按设计文档自主开发** | 本文档确认后直接执行 | +| **铁律18: 禁止破坏原有功能** | 每次修改后编译验证 | +| **全链路6环分析** | 每个缺失能力走完整链路 | +| **Karpathy准则** | 简洁优先,精准修改 | + +--- + +> **文档版本**: v1.0 +> **最后更新**: 2026-06-17 +> **下一步**: 确认本文档后,立即开始 Phase 1 Week 1 开发 diff --git a/MD/HEALTHLINK_HIS_PRICING_PROPOSAL_0.2.docx b/MD/HEALTHLINK_HIS_PRICING_PROPOSAL_0.2.docx new file mode 100644 index 0000000000000000000000000000000000000000..e9782d323cec2280c2c115a6d0f8b8375e29e286 GIT binary patch literal 58412 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�cat{#xAvxClx33HkZ4PSj~QTw)SV z2G%PPj3i2vs32VNyoxoi&e?2KZ4TupveKM?t;@w(#k};lY!ommLOP>679>J@)=rAt zXz9T6UuBMG$`aF(6R>RPWGFhpVP=?jPCznBwKrYMXG}2FDJ6Jc!GV6@w0J zhHuql_17PoWlB)<8f^Y1Dvc!a@rzVeRdS`6knnGaPuF{em_gmX_U_-1EGlFQ0lR^+ z9eA=6jT)n%nr(wgpV~FW9Rp6Y`|yf*0{ui5G#~G``b%@FYOPg#!e~ni{O}W7?PB6MU4hDk&@--G*g$IHWyGYo2E)cRnW2*WXHU0 z7Q%c+)03xBEK=T`lNbq~&{DbdWWE}VkksG94th0CoWU&-#M!71l3F`+T6tcP!Hzdt^FjXnknDP`@kCuzaz5vF_*MDv zGGc6irCIE=WmS>3_GU5EQax#<;ntYyBhJzIt(XUHXPvao|RdMr@s;G8O9cI2&7i ze9pvmQ0yrwP+Y>{6Z3E~#GOJ}$1J$VVMPZ^Drtg>rd{&4QS5_J_;^;SP-QKWyf^iw z2KF|0%VO316rqiD*7Z-TYMbM&;dBs{c^ES?n#x$I)bE}QkGd~`UAxGZgcIC<-AtR8 zU+^q}SltNy$lb_7J8{N|`6Zk4LkxW5sE+eKGbVki7Jlitr2%ApD`f{aHQ2SYhWiml z%ES8aCxYhp8q75h!FK~OyP|elu&n1z+-?10k9T?PnOE;RF{m2%X~)$e^Ki8@rXjIUa^<+pDoVLi z6E4--9DSZbo+6Z05O6AD-l4%)LMiAZ?4RnT-2ds1kk}YGW2hfz`8632i8j4W?(wR( z5GzUkrY^PQQ6e{L#I_b7SRHWC9lsn05PMijr##I|+{Y7rUtaLO8!VCy%wiVc^?5j$ z3R1D=_quvM+<~4*Iq7V>-F4gfMq7t-QTC&x&-)z6vYj3AX?Wq`v)Xa8=Ls01kg<Yc0P zhSGnjx)NiY712eVMd%TV8^qu9h`j!ljSl3^0nIk=V!*DhDC*7G1)mrH^<*lY#AP@W~K%+(grWS!^iV^A`9<%M%iKl zH@WQrsgcLhb=*I$tlVu*7OC^a`5;{o@{ew45qxAqnwzo-}&2xs%0(A-7e!vFF@O!3+Lu`~J# zgc7OCtl8Teql_EFX*XKhodcioPIf2}`Y?l{qaZ&=$5P_)H~$kG-a#M#;l1-)*aN|_ z)URo}-nd4XUxAds3{)gF3`;BW6R7l0eL5rc+O>mh_!9ebpam* z^n*FOwxle#{)cvi$PT#=g-9rrye@^=)0M#0d5$OVSo_*I3YAN5C1(!oc`Kb0;TOuT!C&KX2NuIWO5yhUyb z&;9BbHAvSJGV2X0wxg@x`EuU4oyo*H(AmF}w5!`zQ4;9sSZc`mF<|v3=4RXzfJWFg{F?jLMeDvSN9d`BrT8Kivhs zl5L~9BrLcayTXJiOwlJ6`2*GVXH&dM_*5001n!Z_y)0POw`^{|>>QWU7cMmssj>Jb z4z{Z@2aUloMFL16&{&03!ebW{Jzcj8PJuE+Q9)g8PY1&rCs}J)JQPjXWS|(|nv-88 z@2TF4jX*U`vsK;BXOeB%p)4g1b>q_a$63UG!ktK?-Wgh3MLws&r^<)KdEUZ$g2Lzb z;<7wGK5EozczNo6tGT^d7@ L|C8J~hv569lcBY8#Xi`Y#jMq|6Kqx&}}5F$_A^ z#6I)Rb9ayaK-H_79L1ArR#B^JjESVd-ybUI{02IbvLf4xzU-tDYq2kWZ?DuG=fjaS zGOyb~f!Q6OZm_F$6=bC-UexoQy{X=&aWKPDESG2E^*Lynx9LrjV3QS)>X6qQ=f81s z(P{8{-f03{%DIZs2q>`4!I{0CShZAf=grc5-@Jx0MD*y#!oSzDO73mEJtv$}F(;A4 z>5?+md{CPKGNFM0U2$vt0RP6aM)kQsAFSU-u&NEi7Ee#EOa422tqUhr3EFeXI37y| zXkH{&p?ibTsk@AFBcXSTqlPd_YZSlr$dTTNmJMDwhj$Yz-pD)<(9T%~gDjvi9KT(r zoas2Z?*C3KaPonD7;Ww$b#SDfB)5`rPP`^KPaIpC8S~E1bV6Ao`-2IaHMxz4Rw=(# zuH2e!D-DY=T(_e(5U|51lxF|81VC*T6h058BPI~6Ko>jAqmBhh%k6Ys>p)kr2k-T% z{$$Nlco%V6FvNruD3;WKqCQfijJmdqw;WYlm@{ASx)6#Xukr)P!PIR=&suu!jLKvn zf7;2h3FL2|_Bs8dVRK+wz&e)mjemWK*!_bWhM7QKWw5-ozDlNHAq{@Tgysk0dotKh z8}kHW+#5kY#cRf*XlU}orje#|{`RA8c`I%&qHnkB>&mo7%YS@7CKRtg|6T+tl4Ux+ zY>2%*b>Z>W_&l8)M)5oHdfE$QeV=txNa3Ow^!{^LRC!*mn)z}G)W14*f4F&qdyaoV zS66t?S63|N&=++9F8jf-LoBBQP}W9t+Cl_99CLoendPb+&f`%j$!k8LnWe~HUJ3iS zywO*Pr8hlB=FV{(UnoUJ#}8Dlq*2#%g?Ql@E*ZV2*hU~7@ldqU$rZgquaxI-^27qQ zB{WqDYiiV~eYJd@^LN%jr=-3!4R(uvEedT@+(ebTAg znJujy^x&0%>KUx$WhErGezz7@k66fmcd)_qK_e;s=Dz)~e zAY#{sM#k^U9sF27CFnqn>Mvq}1Ut;YZ82#?gJfY|#@ztJ%KZKZC{_`CzFG%j^oii! z+Ye*~LzhLeLxUW)8i8DLNB+QG`&s^w71l~CeqK{M{r+T4=2HGD^>BvlKEyAvA(ywp zu82a_Co)U!Cpdu!C=6SnzukJB3vg*3OY@${UJ)3gjf_u=-!x6!9`O+kUG-Bn)#u3T z%#Jn{&v@5ygM&5>JmJ^;2U9h%yP3eb5Wi0cDzMSI23(l?ydExD4-^&&=iGFPnf=Uh z+u(`)0%R043^cl`T(|&uSzpovCZ9&HovchAkVn++6Vlk%{xOF{HKeeEd(s3~O33{|!`8}8#g=~VqNP?qS zeudt7)(l0#*!^7O#t&I4eAT*f1rLCov9SrapHcKG{H#CgX?gjP+vm9 zQNsVh4F#YawNh}Tms5Uq@Lyn|{@v*|0ANWT)Q0hUmEneX2F+(6_}S^mFg{U0;aRe# zr+sKhN5!YE=EvyQ16Bs6T+nOhO(%lzb*%IO$kU;hC}moVAO8W#CZd|AuPC_J6ACbq zf>ts-1jKU9WIuJhjsFBD8H0ln{Ppmoz*9Q<)aI9N~L zOr8AM#S?qVZx%fQ*r~cZr+pz%0igp>jFhTEmX@Jtawvj+P?);{e>=B;oMNF zy6wCG*rdonNM*=!$)FwFXrgc76@_fXVf2z9&G$7EAD?e8gv7mFL1nUqr8_{T%7gz3%nRGoIo-Hq$U)_!>p{AV3dM)RBy)no3s*nE1YHl+vWUnYY`nf{|&G zE(-|NR3OJFKVxSiHVZPD~S$jk%>?3rJKTk?(ePF0;5APIUoZd@#v~4fE8Ye_M+?#{eFRm zvMQO*fCQ_Ag73-yH&Be+x?$Wih)3bJ8DyUE5&U?0|C!& zWZXkj)y+keg=%2>YWf*}_qRt&QZ1vD@^Jr<;7CJLO`$6f$RitVj+EnHNni;CnqZJ* zpW)#wVHe*uOCj<-q~vg~SvFB4w5|-=j{@Xa;U^e1U;z*%<+c6ZR!6^f@^Qr2J0kjKHN`6&cCE+m}5LB!PjY3bI1TPZQd7 zVJ!iII0N(N@M~1g>3}+kcEtqJ2B}C#JpvuGFMa`sy6IWsF+7%vO1P9$?=firA&52q znf}khp@#bJVKjw2_vjxMTp0d6JIEDCP>J8`L8uO2pxWRgs~&PMcr@}Q&O)2=E3i%0cS zOa-ird%w=olYKpOo$`!k8gm@?cAitumr9ucNOVXVz$UcQi;y#Pre3koL7l4rOX?pJ zxSo{zw9x$``x)HjECdOy5|{(_Kf$gEfn6XecMK!nH6%buPSy4^s0YB)`N-6!ltl8i zHT1H5&T9LEZH{H9zutFw(7bap)Z2DL2rC_XY6-A5$U0=z`E<&=s{VE>+k zPXTDdJ&rz5=bf=813arTAoE85tkoC6&}Ut|kfQf`C4ep#Kl(a7>VE(H(aoqUnuxy{ z{d-cO5XNE*Fz^)0-yIr`GVt|kuFnB4ubzxg{oTa;WhWVq+Leazj?ZxMY)IaTDX}{Q ztCl0cg{)5uPW~RyZxiZY>_}WC@)|H$=@e=M7U(8ay=qukxN_Kc6X_-v+KO6RyloW4 z;{u!o-WLiO_xp|}1P6KKLd6PPp5 z&i0SUx$WaqDD<#LXXL(k7H>`+nW`d_gT}opN?hJfPzy8MVW&)ju@m|ugZZZ*R=@mf z!+IkUDS%N^ls7^LLiTAzTt5A4!}@z}@BujZQAPGE$y6ZpkI03u(|^{aPJS`BKnWv{ z3KI}t*G|Kyp4`6(SlvQjX+ZY?8hn58kI{fnYV&B%I)D-SM^KL#oS_PLwIpY;8CB3a||&rGUD< z&guw*xi3X2DPJ91=+;Few3Xp3zIP<2icAC=21u+cKKG(8JfK)Tp+DEx;eXcn-*$>U zxi2o+N}nJdFSi7L!*sWLR(D4OHd{wh-a0C zF;D^weT7X1jPYXuZULD_USKErgosGsGu?me9DoprGK}-5od+F?=oT>E{}Mm}ng}ID zcHW~^d}L}#^@Hi}=B5v@|FZ0l1szX?G;IChdqak=Z#L&A&eI=qIbNyaI^uJ=X(|_g zkR?h6%!=>ApeYlIG<|24My1cL5YzxgrS?YVFJ{wE1CcPRv54!GGJ?7*t(rWkY?R&+ zp-)P2=pS7&+I!|8e>5?1Mm(AED+EcLss19O8hH|q6L#|Lj@wDSD#rhFUaJfoE>C*5 zomjU$I{MIuk(dlS1H{PD`xPf*ojsG4A3;GMRbjTFP|%EhIZalRgNSd)#S}O4mzasO z*h@8o!*|hxjP{J6s-a-QWGT0d>_|pMysCx|ysmChDVr9>`g`-Nk=i#QRU>=AKI(DS z>d{HMLlz0vnI`&ggV;8HtWFPtMCq|N?A4q-hviAmPT;A?sE&dq0#hCD{Re^1+(j$% zCep$2KDl1|s^*#w@#%{g$cTVyHZhGD+o(uGWr%q32FEG8!%1GxIF~Lb5}fdl-$Q{d z#S^TYpJ8fbVU)gsSlHh7J}1knc}G2qHov}3#xo^NqeR7yM6G?xq4*Qy74|2>q1JAx z?8LEa!L(9>jjDc`t=6bjqxILGX@m4H>7C6*>y@`{uLLhX$1wc2QIW`-O6}SO`ru9x z?4W^lY|8SP-m$EWyP5-`wJ@Z$Ft4jtV|;m`vJX$ya8sw~v~0nhz#Zrm)s=WI+|)D{ zr6-|Bq5!T7;Z^D4(;|y`R)oLH+s@a0ud3HTO*C=4HjgDjF|OgNH0xEYPa?we+To5) z8R?lDe2StWW-%=8?(7*7112wi6j0z-&1h)WUt{Xc(2V30!Pp0iQD$h$b`xr7ROx6% z#|~0k_AXs3P9z>6d5*5thYi*lcumIhN@SnG24WYmXW@}`6-~U7*qbRuDu*VuM9+veKOk9ibgYp6=IeH^~ZB=w9uU{gWl2l*xrMJ|* z&z0@9(T?R6C?WQZ8rNPP3usj}L+9vp((|Q#B3Vp6eZB~iT5CWu9R|iVd37xOAJr5t zvWPl9<8q?X^B=*bVC2Mu*q%G(1DhlwkvV7$is!Wuj93wcM2;@i{Zr$HN`^G$q11`H zE7-4fI1OyDXYy9Ku3X;;iL7Xa6L*>7zhJG5wc90zT;DGE%yQ>}iO%+YYW2Ey**RSr zP!XE*pU*zXZ@-@1Z^pX8@f~`owOAte`f(WjLspePi-JoJf7e+&SX8z}Q^OQ1s2GV6 z2SwmhGvcPnD&WZIbrttt78bnUvpn8xmkuDb?MNMt#_qDS_%M)Ev4{LZ)Hj8o?g{$8 ztGM6v@F*wJf`H5_LxLdvTi6bcZk9$4?={>{wKN=d8e_dTbhfUfGEt=3B~rP@6DeZJ zOC;^>nL?WG$Zat+Q4Di1`9bX^q zO}Ms6u^m6z1a2U7wuCH%jWMbDbiVCHZRFVuZmgc%UEkVwE|>2-*}R6jY&_rJzuiVP zA+^2el)1WG-?}xdd%0?_Zt$Jn)8n6=IfoTJxOF~RU!zoY@m29zHBMZ=oVAVJU9Vkx zKK;J^z0$w;Xw)f-7pGMFc07&^-@f9ROlufFRwO%2gvb`Qu)BI<(*!O8pLJM{)Z6N7>)6}q+pkv) ztNEw3v6Y}l>ll(Q{{D%}ms5w@bxXi+?=pM}w7Yh$$hr(aKaVl^(0aX5zUcmD$7p+5 z8u70EYJEN};o`H=?)Bi%+1k}mzC&H7_1G}y`SSRn-u`+Q6}6Aya5rsG`}NFbf5nDh zW`=(K_r0@9=T6d<&Qc%!wMgt3^ILsX(|yytZZu-6@d@7R*~z=Af0w+*Xub&U4v&||DIC^zoxhI$2Ow}r;lCv zi5}N?dc3kuS5kihl>Qv9E%7WZ=)~QZakk5)vU*&;MSeqc@KPGPLYw%8--X2{!}5_i zMv0Sd2AS;*8SxF7?hP654Vn0raNt?!>xIw>dzk-ahR<3ii)XL?Yv9;3LeL`)-8DPU zo=tdi7o+j(z>hZmH+7TGztqxo^CXeC%(lWFrG5tEo{`32zNqmhV?;%R=!VxQ?J()NE2 zCyrzq?fEE&WxN$x4)0(Wq#D@rpikQ?JSuSC^e{m(7Ftv0;u6S;LqF>LP~G39!~SHf zYi?KjfWPqM+7V`>Tep;6T~oczc#v$fWsn?f18E5SP#PwG=pySO-_pUw+S}G3#Uk6* zpu-|Vsk2sBn3tCN)oLc8$xa(`Yr~aOzp}I zVEosE=^xntG*XkgwgCv#jIM0}0yVX38vy&S2Y~Pn`=3T~QdbWEft=CR13)0BcJ%;Y z|MdV6-eLbVf|Kb-A{_FqD0zafXL6y{mw|TTC%X8YZ$bHl@%OK|c7UAZV}`Z}1!8gD zqd%pMCE+X%Sg-7*Q@Lr9rdg(q>0lT{Ra!~CE}ZNI3BmOC-&0Xxo`wDv+`tdpuwLgo zd23m(O<#mzN0a?aXS|X%i}mT=If*7J3kyCsg}o-P zx9A8qe}Lvzp4G|tzKI_nZpHf5{b-14!;StARhJqaIZh%~H&YGEhbxj+MWxF- zK}WNXlI^@-Z#g#lM|>*E@&PNM6Iq2Xn#wzNUDaXn`Vbau8zt+Pwoszfz9&CB+>RTg2dh+n0s1Vn1AhQaMMi<)%o zFs*@fEWoBSiKU3%gmmnb#yl$MZ5&ZhJ%94Sb)~n28C!P5B5Ox6ULneDq1W(bskDJp zDt}B3B&{sihBh_F$vRM|Y92l++kezHVe5|+^9@9Dj+RAWqd0TD5_7L-1rKd5t7vja zMz~z|PtFFY{a_XjXkFX$n?~>_9N&|Pvxpbcpf@JfJkoCLHFXO|5%oNaKvphE)t!Rx zs*#^RPg>n=(d@YSa8D>?^v;Z!DX@2TeHH;b87OPOkJ85^sT5s$~3QgiLkjtz^J6km0(d>&$EU z`rsF<32#g#A42;u-*o&>YqpD*9V(yri{?Le8O!$?nWy}khgZiuKAsoNsr_Yh6W6^( z?DV(zTK!oH^j=ac_7T+UKC379Y5RZ9O`^z;pqr_+N4F-9ool_lyu+Iw^H!IGs??6- zr0nq3b8RJ4Syf+aIqxz`o3nQ`7RKVvwwCHjMf=gtpp6Eu@_3?W$!FXtIW7Cmn%&D}s0Mp2 zep8ws+*10u$c1x=U5$r`Y%vkmwTf;la5q&y=iDi9a*hUF^yZpEzs(|$+#oUj1M1^% zyJsK`4DX9_i({ozsFBWondfgMs5lJfMdB3)dczp)7Nxci>B3i;f>JFb&R#7X>3oWp z@fR1V%@0@BrU?V1II813x$A**@YJnl?Obvht-llJJlutZo4F93S@rcMum0RVUPKu> zwImSueDj({1o&6y~enbY=usy7Cd4&&w$yXPeY&?=F*=IuKd#%=3*(mWn0Ai`V!c@wjNHgw6jLw3H(u7O78{8xg= z=fzG4<%;s6!M4iFgq@Y?4oI>@~||7Ivt=xs2e+G@UlUC!ermCDq8v9LbIcQ6q#q#M5nfVYYivhj+fJUk@2pBS~`*JK{4I zX|+8<#9>3IL+Y>3$psE$R^&BobRA=vxi{EfWQ~3(?AF@khp4T)04d97kt% zwPWQ$Q$$z_ym1`!)wnIZsqKCo6T#HMHjr&&$;TDu=XKDY0MU&c7x?N)|)yog+WZXGG$JEjt(S(D>uqC?{6o`8!T=GZ$X1 z?2TnrCE>?)$zBbEA77%@jg`Kl67hIy8k8f*+HD1#!}}i{V4j!$aq{>xU1Zp{^493q zR>9Iwd`NdUy*-+jP=2Bd7WSMVQkH1j2~i%WWU(g?`&d*WSW@g3f_`SH|tU4h(J z4q-P`?&T|8*QatGTRNDkJM$jG)*=fC@s2NyYzejVo@iRi`4rUljohC0o*mY2(kWkh zY6P;g+u-w&mW3Y_bdgtxErs!=D zx+O3nopqJ`;$Z4ke^!^S52jfgWBb?LkF(oex6Fh;f$NA=K|p* z%W1mob|_R{i^v6c-KqYuuBf>KI!|C30X-^m5WymKAdO>-BK(sBSH&;xp0#e`K)TqM zV=4_!$fh##U<@xZBSh!3uV&n2+K#LVbJdyXrG`#wAn8rvHa1cORqpXe!Wv z#8J~@rnuVe)M9*x-4TL@OzwWIdoVWhu_K_79cOlTohNQmgC*5fMmqoY0<_&uRnUg2 z@)E=Xxp4q|?_Yf&aD@0x!u*0v`28m`C~i=&sLs?&K=XqbmI6?UeRi z)9OM9K{Ow{3q>NNHmf!te?N>qt0`^awsw-Vno83TTt%X2zu?M6)UWjS-Yurkn+(zl zF}ql^Thvdi3QWml6jW`JjNy4K*dDf@kQOeP_+b9PRa25_5KTK{ein zuS_3r6YJG2AE!)ar4W(qT?ISp1B>+(PII-VGYHl$v$ZjN-7gVxKHOg2Imx$CqFL)8 zHKZ~j|3yle{@+Nn=f|XLAyc1`j&4DUF*d}*_H+9aDncrPOH~lMk7X zNQ0m`d2+PXg=QH_oaN~cWuniL<hHIftjcxP<&g_DiziXPyfnn9nUdtX77e#)b zWvT!t=!{@Hexdtp*d!ji@hxV3gKy%kZt0al>pa#m{{P2gVJ~2xtIEskUR*1+&~SOu zN}YhKUQmD`x6#qbA@IpSalkN!MJeT&-DgXF=(j5;-EI7dy2)2B)ai|1GR;@q>2V?l zU)JIqn8Qv+zjC9dmRTG$rF#G9+MpsmFW$g5R#Zem;-SlnQt(lg)H^s?6PjB~qfeSL zK9-g|l&{mXhn74m+4KBECmPC`RV%?a{Wa_-yW-m=t7 z%owGRcqC!)#my?yxJG9ui+_IYlfh zBS^9l#KE>@cXCKJ1I9~m_;mp$kO3x=rVj<;Zzh-8f=b)ib>{QN{M9I6#Kq)e{%=FX zMqlc^8_36nO^3!2}pAu^H{$NQ8W-!kMgppI0}W^$jLP-pMKv7F zfzK$;H=kQ{jgiDKm%!0az({alhVcI-F``&s{=t#m+sB<5&y;e09Xte2*C#TctR2lw zgHzUmxAkwG{x?nKr`uDTLCBk82diAyxW$Ux*EGqa+}9+{FaF^(asyGcy>{a+_Br^U z(2V$vrufG(bogx8tB!wPTIM&hNk;Qa-VV0zioSAT>mbx-p>%R-E@Z??@Jpm!47Ja( z+MKPXb+ceP7Z=ieSp04R3^)D#_cwb90jU9Ae@Z=^#Bg%b$GacK_V%m!UuZ-Kq_7@m zewN==OUlDR8>5d-e@}s~an&spsQGjk5?qzsqcX(Yb~)Ne@a0f-a~t@3WMewR18ht# zM$AK#uCf6=H111n33P++YVfZQPWp@(Q?}?4&+^iFT2hNBekqVn(^&d=qri2bnXOne zv#c=902;bb=2C=7W6}^!x`iswW$gq_AiNg15IK6@+4tdCuw;F)JE~!QONOwYS@=>k zdqmiO?kw3V57A8FGz1yybQ6(Bd4fqHm=QwztN*({NH9rg=1);4N6cY_LJQrKA;AAM zZ|BjV=gp`1OV(mSkLq7QZ+;AG2@Z@i<+-)6=ZdTbdVxFYmgwV2My2>TldTH>B;2R} zRgZBu1^DdMAjo#C6}}ve;j6=Bazud7Pz`StQyyNHFPzVj06N3~IwXHU4r^J};m$+= zE2`8hD}L|L{2LR%aiL)!OLHscUPy3%a*zIB5zZg!hgQ^tNzXiu>JLq_GC1lp9%Z%= zhV>Ua9r?%741m{RK7WMh)2HJemwx_POor{=1Mo^yZ0!^5#&G(EJhK_esGAwA8csa% zDp?T5>AxU6EL2)cXTvD{jJPT#cqJfqZtf)&Ief?=v+e$T-oh1bIMy1Z)ZFH}9Kdw_ zN!HvHw^^!e>*uT$CuIt58P)~LRwJ#S*2g9dCt=J^NY*LgS=Z$Gt+@+j$5N!ek2Ay} z6@e+(0egru4d3#riJE*|B0Y|y$c%9KBys8;e3$3|d#|#cUJ;zgL2f5gCjez91I}55 zu$TU@clG`P%03G%Ny^%08UP*#^3%6oCDZFZO`+_QjGM6y5saG=>^pX+qxztM*vV|C z_i?@x(q!;HPF+*_J0bi32O(Mv`+fMUUjQ(P0M?0(Px(%4D$7nzX8#_*Z7b&KDvmm9(n3G+O_~_Iu#hWkhL)$LuhmUZAk{Ql$MQZjOE<4o_ z!Yt541PEyeBCR(We7zqLe$&Cn{yp{@DSu;?Bf3#|)D403Cw&n81tHbf6RW^H;770S zieZDBs2j3Z4Uw-`rzerrIb))lo3k45GnN7NB)heERslZoLx&=ts(!C7Oy>gGPn4SK z{Mo9q%`mq0ew-ju)m%;*P_so#)#-xs8>~cA3KzTTzsFq7W2-sckRhqx{-lWTiJL1m zA89_qNlDUb!FC>OY5^xoKho4*l<2^*KvJzgGFf^df%X{p$mFmCdTt)qm)LWDq=NJb zNQuo1s($B-Le;_->#_QCK0h(EBKPa1dr@ena1(u5EZJxdr(OQQOR>baaj5DC%oI1X z?z~`s@+T#FM|K5}ZH~TF3)9e0ehNhQoa$`@PSp@nEJ392f|B|xD3o_WB?=21K>XfL z++i(+l=`7fg_x+haTL0-btEA|_?d>>%a<=Az;plh>S!J+(fp!>sTC&U^p)?|uU{Qb z_xF}6p3>F^ctFyv`>6&^#tz@1Q5#4_$y8V2+PL!RqDR9ngqe&=OBT4POifcQ50?2^ zYE#uwD`FO7nr^D=cq{LvE%B6SN1L-60+s)zIte)Vtzh+o2O%;kvu`YDXv&gGM6)ndkNubc|i&KGupwS3q50m zDR$YPh9DWMX%^8g^3+0PY48IXm0_tOvr(yp9I`5I>Em{rj3br`C(w`5LQ^czqB9pA z;30)rUuHnYx)v8YE4e~*zQ}fYP@4+_2C<6Q(LAn@@el75OMof%7nfE^Z7yj8?NWGF zw=pyIdoP|(MP{dP!KT=ug)I!Jf#(I1EMp+4P^N*wix(U6K_Z$3VpSev|LLlMEn@6E zq>xg02BdXH>FUa2Mm32_NLt$^b>2p=2FxLz(yl~4y3RRlfw-7Y7x3-E#v`)9Sdo(Uy zU$t$9r=B~a&@zg3{OaZfGEOQp&mKf*OKnOnzu~~4G5Q0+hsNqlf)_~j#o}In7YJ<% z6j&BkFTO8euZ0so5a@8dcV(gLmeFH#Cqa$T;rY5p{l9!jHj~2y<)0E-LA`|_zi7y0 z!KB=z39J?@NRSruM(eI9m#QZKjKYN6u}I*$|)VjsnCBsMU;aLH8dqaN3(xvTT_2fP^jtZwo=#ZH3@0jWW)3klji=U4Qy- zL3##o0X?}lh45p}HFuE1)9V@wDE%Pb`-!GW^uHveLT>Ueip;66O=jxwI;EB8NwtyP zOE}tXy|ReCJ$6(Pd9tC{tiVzO(|WR#1_&AD3hd+{=*)0YAq9Q&n1~{ccaFi^qqUuf zKY`g&ivsSDZVz0U?;A5+{{b&F6xU)>)~X~QUWKac<^Eaw&7S1RK4 z7=*k}-vb>rTutz-U~A#FJ3_yt)4Py+n}BpVv~>i@Z9i3+vo2LF67aM8@W<^DN-+~wz;-%w~N`|igL;!ZJ7Su9fI z4b|hxA!IL*EHxbjZks2m5 zlv1HZSQX6h&}Y~S+!Qs_&<>iB{02{9u8*@}B%w#?v4aFKea~Z)v!FH;le0o33HHcE z>6JI3`FP4*hMrq(qWdPEUFBijH9gISV62J$XAP?@2p+h^Q5eJ@T%8OLix3Z5GfCQbvA+Zdyiu)PygivccMZW|*REfV|Z9 z7u=rAK%KnPDIj_2I>)R23XBI382ba+yTHOkQ71|+<&f6Cx4X$H_FnGkF~0NzA9f9> zL6J`cuB(|0U5KdxE|;V9;pwSpu5(%_*E1li0DbZ>eb0Rdr2h|LUjdcJvTTjJySsaE z2=49>Ai>=|Sc1E|ySsaEcPF^JyW9V9a?bnjee2!#)+~l^O?U08T|Lt?-BUdUMcD;L z@cXl&$0{LN=ilwp>Rrd+q?NpW`^5J{LnnaxfUMBR6*E3H)micv)e#sjmT0D~umKgC zrQtU(eeCCK|7v%kLT*kxVruW~9c~^U^UzqYgM+Jt+~A4%Y%y<#9B)x*k4$$jTe`m*k+M4#nHne+CuR1&ZfcP3zMU*oW}RYr0=2Y z?b`h^!KEKI5zTV_2>qd?99jN zyXEKoGB2=-D$oH(i)yGh3y-gQR=p+5h3SSGxJ|D2$Y1=HICZ)!v%e?4Tgpj2Cu1z@-1bfm@C97NTzrzoyr^UIWCe(ik`QyHPv_VyCD##i9AZg~7;Q++5b$Xk2tW z3k&@+gV>Gxl=DOR1fcny%5@USD>?cB{?S79=r+h|Q3D*!9xm|Hv2lNB_QuuJJp&v7 zwHmqc%T&PKmws@q^3(AcW+s23+AP!uctfWVx`PTTJ%tiWbs!z!Q2GxIUZT7>vOI+; z?}nw6C6YA>R3qN!s}c@uB)D^sfaMHa*^-e~s37MJ zB9xmcLMjI7q&A>!eg7fgfpTNc2)>Gx4VTOf&Ihp1KHFdevVPkcMqCN-oQYu@O?ep4 z5vPj?--y8m>gUBhH=5}5?m!|!(J3JD8dEnppO_?lwtxC;Z(JKeMWEtwAV+-8=BO)4 zJ;4;@?y}>8!FEL*3BcPHvRy&@c>@_Sf?~|L(WI_t-)UEf9g!R9M#8y9$%%0GCTE+r z(G+aE5^<9K^|iM)$%UAcL7donM@CG!NeC*!qB8QW(@vxN1RM{ORtACdjJ?P1Mi35c z;2CV7t4#y?kLs_W&L`pKcwQSWknRJ41}0lQ=t8#N-2a>6N`T^JGE}^CR6Iy$IZ{qJ z+Z7Q`K5VXB!E{h0yhOwS;pJ5L0$YD1ym@WHSMTi_zeQM12DKzQTb}E6`O3x4p{Hwb z9R7AshZi7>P{dz7TjT;Ufn^RN)5tLUM{n9C@uTNQW$IU&E|s`-f-3Whv~H8M(!6e? zrDF=|7^&Iz;j6K^vOw$R}XL_C%!NLY&Fe=Y*V>C?n7!C{(h~6SJd_M zA=js$3S< zcY?x>PFT^M_}_LRwANg}Jf;PW7{*&f-|F${M|wj$s>wew;bW;6lN#wMARs_sVRUr^ z<)R=eCkKK@qpQw0qM(ve7*nCv8joA5tQPw=VKHLTLO0ft4e9~%S;_p6A-94uFnn`i zhb5k0;-yTDc%g#oN|Y)KOOMykRSP(`kt&mcRD-}m>ls#8EUHorj;9_S&auPtbJDU6 zjz^|tiHQ#v`#qY{{Y;5MYXDVAzL|h0jX)clrK@j5VpIAm0RFGQ? z*{-5*bW%17QOo=z^{c*-kA_CEv#K7jeN|c6Y-R&fQMiebmmYE%91~47bG$|}Zg>yU zq{1Yp8pMT`zEMC8GY4Mt9nhLstU9)^3;iD=MgSsZe-SbA#$4jd>#@Esv%~=FLh~q| z*TClYwd;g~SjSGn3e$xE?L0q$g8(XLf(t;ehQ^J@3LA#&hsiDC=GaXd(^bdj{e}9|XBYf=91!`AutLPmc z{>DVx!x2QGMv)XB-_nkbL4>H~t9o+s4QqC{sLPxHL)mwZ2SCYRLjy|$aQm*?VvUFg z{*kDjoLx4G<2o}1x8{}bKX3{v?Yi4c}h$Orh@#E2j%e)HK6l@@h$ z7%0szJsx<2Bp|*zM?o(ag;qH!UQ}<#Zw|J=gq_x4ObLmWB{2Rm<9Ij1Y4s>LzB=$M z##UO|2TzScu&Z}iWjcUK4dc;!`|}2PwKU*Yt=SmYp(@}Ufa@NfMom5{R=;CN@W7}2 z73_iiQy})HV7;7y=S!qb4Y#08>}1B0fs5q1ztbD6bP#=bY0SjCo?kjqt;x+!DEld$!oU)a*pw_WnRFCR4`9?tr}P@aHM zcAWFblLVN&bwRqojKd+mBh5L2DZo>Kc^rrdKjb$+qtjujbT-bC6-~kxO$w%p_`ran zL(w3q=<;u{!JKr043scr3mJlYZ1gbJ%NFVOWP!9#;0pSC2!KDf{d$5x=b3;WfOE<$ z7xte9*J6~VC=yT*L@(O#*W2(hP)$@IP7~`P^3pL+Rp{~-1pgsS?gR7c1#^|Ua|2Hk z);)Bx0R^uojG;mWV9OWwp_vK<-G>TmUS*i8L=c=K$oz;JZ&9JkA0V5E=mXQ{1%vNs zeSoVHR2I#f)a^Xjh=4AI>DU(Jn*|~WuA1c&ALC?OcH~&u%?d|~>rrea1da%Sev!Wq zhVBN8&P_#mhO1JQZpY-bNiU}v2$K)nvgRN7Au5_BgyttFTdF8u-v%SdS!}j(BHylby)ZiN(_yQ#BPd; zdl3)o6o~M0X^El6QTz#mu+DP=h8S$wAs4!rNwyOT#aa#U1`p7kc+Cra4@L#du23pf z=}G|Wz)DJZM+uc8vNx6Zw+O>zA4k3-KeU7kz?`nv0+KXuEo7W_N`I*rg8?9{R8LJg zvfg&8Es!e#Mp9`KT>-@4Kd8xw!G&O~NWk0mv(KW0o(EP+1JRZ`O#Gv|2UFGAcZ_8P z{t~_{6GW2P{Qt7v09o?CWXnmwD>VPeO8z73^YJ z80{ODQYWSmiV{)YXb*9iU z4pA!BmBv3Ma&p;P~$vz!Z=l*6Ijz+dp)(OhE%qM!K zI0VYL9^HMZ^XvSb@ZUqYbzOaCXqkb494aAzaQ;1n`-_>Qsi?8Bk%8mi(cFtM%VG^b zGAng&LNj?ts-sn!_93blBPLyV5(>{*M1{=577TS_P7_{lIXck=Kt)cAK&D@rNEuW` zRMk|C2{zIQ-}aYh%rC@iR`XMDU!8M15Ib_y@?=#o8&neg8zdt{^ap_q7 z9(r~5r1*9IwomB!ym|X-{k~7L2;a_I{`=Q`;$ zJj*w2ug=UeDj2O=Uqw^*4PQ^qZe44Crkn!;rY$>K-BWBj+Ic)X7I=6k?hgwcn~q-oekGr-&u89-?z=2-Y)ijn?&;8-0<()SW0^AT+(hDUtYzP z-3MmgTc?)oJv-K}@fJ+X+ZkA$nzeiKaM)k_IAA_M@z_65@UD#O%-kkg_>%E^y1q=$ z96gNKG;-pgj7t3O-Nhy2&tBMnOx)?ZA7*EL?0W6yXyCWzV4Rr$tk}drdcLbERFFYi~}e>_}Ue z`Mv(WZ}8^4r~MSiF!TKD@$NaY)&drg;T68;kkH@z3DD3Ea|^tQ{nqz9I(dPF%fB`(tDOY(lZ=hHanCz!~YzaQDT z4jkLEsCjA1Jdb_;C43Gz;OX(^lxp2@_%`wU>+t4gYhZ^OaLO>m-oCCLymZ|fw8*^O zf6{n2Nu;Z+eE-Z>_O2WnIyU0w*_t&1RQ`SBV41{qoPD?J`1zJ6bx)_pro5)|#6BH= z$wjh~|L{Sm__!zZ-TBPfk)Wuhf*{uQyE&p*c$+Nvov|vr+=ZdWFJc6fT z;PouXv*U5K>959iBIfPz?owB5p{Ew?%ky{*mCcqq*9-0J#?MQBrxwajmGpaoo*j=l z(t#=KGp{seE9+t;4Kp)bEDuiY>7I+@nS_woj4m^($}EIBe5XSmHxiwZZ%ymg%y-L^ ziAK-|v~F%5Y3I{g4mKnO+xKC+@E$7#BmHkHDc9xMfgi!=S4|r9v8NmNJIfix(K_tD zk>UumJewe5yTVVqcKiO%=u@-Hfab$ zttFBLi%qipq#wZIG@>>j<7y#mV0blXZFU(AJG{``-vNNOZ%Q{58$<;MvKzsc#h;_; zohWPapF|o|G6&6B(EvidAG=5(=|ki!F%!ibiUX)B6++;IY0^$5H!yXnNT9E)$hxJU zK`iIQy~>}Us^STN8vuoBZeR-^g@?#Q>kg#nk{8Ijw7eje`G86{P`0!9z!5E^or*uf zI7=dd#1D}-sCYr}0EM}L!Z-rph?+lz0EE8_zd4C}m7YP_suBWM9Fcaax`8zT3cmm( zX?Q^ZQ`KIjCw~e7y8kYeUq#+1{tUtcFs$$i>H+|p0Vq^<19JgL$^#^+|1P}ws}QWM z`jldkccIi!;78Au#EurlPNO7jGw_Q`aR+&3tW}LR(#je$ic2}#YDg34>bhk+!XN>3 zl@;=9ex};to~`n1rVTe1$6D80rS8SdI!vwbzQUW;GuSL1NdBUrbpkc|0#o320t%ezc)wy_Aw%l z&pRlFt{I0Kujd&ne@e^`F}!cxb`8l7?T@iHcQ{Z$I%Z_#ww~Ap%G+q) zEegjGzNu?@4DC{)5#-SEtZF`69=~*OWLS-@mHlj}zZg5NEnghzGx=KUO7}ua_3e%1 zGvfHXzPmLKFVVx~+Gbf(M=Bvg@bSoES5o=V$VMVzW_sM(ATN)*EA9OTEo4&pvTg&J z&teXUgWdZK&`#liFSH=v5z=6~3-eVEchtPVQfXivCC2ofmBca%vDH2FwAwlmJw(R1 zl?yk@=AlB@wUpFnP>p5F!2*BJ17MST_B5?v+wac^CgPr)n7U?M-+!Qct<^B5kW*EYq32D^J`MI}!zrn?ts zaCBAlO5CHe>sB-*<^UOc#p7S%o=dgbcPl=UnAO#|DVpZF@4A$n|Ox5e`ZRTj- zso_dnzN>vZo~~mIR=MrH4kl*qDDzsMedKlT@$O6HXXz`h4Q318|K&pG75 z=&cc*?*PI2W2%qNncAe@`%k-v$~C-z58`bH1g_ArIk?KKkhtM!M8xQ@@27or;=g_2 zJ9OJz?p!w%9NQP*wN{$rQgC=?>f5VvSv=*C55%%_g@7fV81CZwsn3KHC)YD=_O)4c zl}B5=SKOj!p&L0Sk_Uu%ixg#GxtNCX z_8|d`_q%D6Vpw=UH^PC5XLEUhap1WL*Pi@++-rPs-pM=91m>bFSKuK}#OFh|pI=TY zLkJgyl>%%*`nXZq8L#Jp=S>;6VVDTQttNi5*e;@L$ck?pZG=QTNRrsh*HiBA(yE;X zxc-!W2yg{=dF@7NR8E*T>rrAh&OD(CD!Jd3UOSNL{k9fgg`2r-y%yC+U2r?1TpT0P zQqpvO%o*2=c>HTSxNR&8rirvM0*(7NZ!)@J0A1GswQlQsONh}Vkg@^$uknpSH}{cN zz`B7csiwG^sF-s{8)Dth-QP=YbSaH9bnY%jq7o9T!{R$M-drUlbhu;|e+~S&-64(B z5#Ilu>Pt-4sD&|L&yMRK8?{1-i~jR_wwn4Tw@qYT6Z{dgQ!nUOelMQM>XeG4J%Za3 z*g8k=2~n~1j7$Z?I*fsAv#LJOQFC0q?=zw^E6mzX{tfN8D&S5{83nm+p=VDCw(M$n z^##Sqk>X#$2+$)ec%_ReDZj;u@Tgyp_VTTLyXVyL9D->kcq{iRHq2FWm`w`_q9R~k zzS=sBN*b+aHM|Qau4N;rnX;W;N_u20Rkb&;Ly#k!w76M&!aGhZ%uE~;3ryK;t^XdG zIcW{e5mq#J6|^))YM#oL^WB2fSK2mo)DlXeeGLB#`kz0GfXJ-dOXl-5qs~0g1T)i6XtI~lBoll z6qP3CgMt)mEFj|tsy~e=V44u`jer@yW?=iOq7!-3RVilhd}D=3?iR!v%V9qRWE!sJMc(x0@FanN*NKeJO*5T&FlBbY zqu?%EXn^?h(524GujIXiA>1fd164do8afnx$B>2dy5yAZ9;4EoJ2B0QD-vsd{CeFP z`G7@2=(+8B=wZ_i-eH^JB`BT-mkdfaoQ3%ouEwaJuW?PE8vDW@&&=92!LRq9fZ+qq zCX2Brw@Bw0^RE@CI&sCGtv-=@_t2-8!eoY|Mvjam7nW7bg!7O!*T{pI^jq5)9|a_F z#E*3NIJ6ZH+l^x8mEaGC7;4wKwWiah*vx2YdqN(zNhXE`&VL%y9t!zA2WNJ7mtCaw z8nibc0u zW33h$50u$)Q2Eb=H_`dc$0i=5jneN5HuowKwP$=2--`9#;5XcqZ7pyGE_F%UyYktA z<o4_GyP6JqM+~?%s zLO(j)s1l!khc@1DU|A2vW6AQpn`|%>jNtU@^<+nv!y>8cGPiNq&RKYrY0u)kHH{dK zl_j$S&D&A}M*=51Dqf7{(8F7=4y6VH%M#Z&ioMNvE*rlekS%=9r~<;y;DQw@iUY&H zwYr7DrT{RdF1NZ$@EXtI=iJ4V*`4RSD6l5578Fp%YA$&X3zwS^#nGv|jOEvQ$W|G# zHHlCzrLFY?{i=V`42j6b62{fQS!*qm-!0-I$(7?A$4ejl36E=ygD3bT8IBoR=TRon;8gHyRKVEBATgwvjn+ta9dY4_H ztsYsERt8KaM0@P7?fI(TS~{-53NRN0QZg()mend4K+{2KM|%#CRLuzG0 z*BrCQ!&FSvK~pNc8&q+;rkI&r=2ApUe$y43(_aK;B+4TL*HiFuu)ki-kX^GMPYdhY z6tTsdmjl3%-!Hhr}9xfc*|rvG@Zv_YatC$!`%d)Id!OwmFUulxR)> zN{0PEDAuZfPy!pn;8sH%y#51;uJt>jQ<68-TLp^bbmj`X3bX<}knQ5apEr zfFcb*$#eTaLH^tmKIoR`YNF*fNP<{jaMN5*vKEqTll@zzi0uyUnE9%Zc6^e-ZN^`d zMX6j5-n0c`NzDRCY@~BT)qO7p)v8fp|r$d(CkfV5ws7Co1VJy z(ztEi$m(OF#GT#s-dX^?U6OlQ9kv@u|Dfe_eJ?c zGgqlN*aC*#K!U?`qLk`5g=fi<@C%%$23y5lkYlx+5&eF9l%vZeyCKe}v1P&DXJIOW z8D4=&|7ah*yDu67qd_@oom#(C#E9iT0WDy7!Rx~EcPFR+h&hr2oL_3rKJ}UJSS6p$ zlvaaRw+hd_?2iS0mUQ<+rmj1d+sJuGN57$qI z@XdgVxu{pQeCM^~* zh#!=|A8jOmwDE=m`ms{j7Il1h?&%%_{vwJe>I$tLh$&wB7YF+p|0#j&~ZuE1e zZlbEiEX4!{dD8iUC?C`h3Wv$$a-CM^+IaFsW=VDXuVNA{!PFpr}+t`$b}q zL{^av5|J!}pw3GZK?UX7CuXBj+Oz_v0ug<*)7m`bT+@tl3}7e7e{sPUI;s1BJ|gm@ z6S2c`j5$-xxfK-hO(}-=CuuC&CV%uWB=4?7IBwlD?df79U@u~9thlpc^sy~{p*xE& zt8o9~_^;)nKvB4V*%1k_gZRS^A_95dLI|xyY6I;}*7Djio0L0jH4fQp8Dfwp1cE$A zFC<_gFk=^xURtrch&}?6tYe|Q2J$&wvh`&ok^|MC&NT8c^p$QHv7pWkX$X8KXU0R7 zAfV1DI5_TmRs>Q?JhhfWZE;~Rfh@F?+_)Yr;45}vFrel~B20Xe2a_5ZoeVy{@x;TY zks@wB+n3Reo9r$L0b3%SA)qecPZNkAW7&$kp~i2Ix7*r#`*+O0O^Mu1WU>YC&eXU3 zPTHz@-8*LqyMdnkfvu^|dtd{h`F%@L%pTM~MgzcG!z(KK?A z$}r(agsAl^WDQJ@Z|$L87N)*J^}ReM@E5t!tG+H|!uzHS$D=s%esQJ~=lv202iSSa z9A(stAGja5lRstrl%!fW)Lby0wP9U~;-Jh3d#Pd;fyl2EJ2bGmGqw`CY^-J(M$B8}VWr}U6!~f=`-w)n^=SVnVs~)=C~C8F|0q)Ow)PHc z4sothHaeUy;gt{t=Q&hg^v#4|G7b@)s(p zrVmdYX7gnrXb>E3A4Z-wd-M}zKV?6~7kS)~Xa9&b(@RzCm@*Y!mlA~uo%@viq*~-r z2AB?#Eqc3C?YLyCbmC+mWh}9*I=Vkl=?DU8S9slmeUN+IY})g>>MixCI7>QmxNsa) zs_-r3Zy@Om`ws+;5YS<@1^P1Yr`r+>Ml*QG3OC{X%z6BbBh= zNW<6(iAXh^lL7uB#nFKPR092}Ez?BocKz@YfpT#@{FVD%t^g$V_3T z-Dm;Wa4am19S8y?s2C9|$pK~sk!s}SL(ISxV9V5coLxA=Rf+ps>ZK&ZDt};(uDo#r70an}+MD1MB=hZ|$kZBp zdCT;$g2L1>kKu98$cVVwCm91su=<)o%=|+F-!$oi1OW5@AdxuE`fK*sA0P@>paIUR zm!cP#*kkFgB8Fd(+|2ZGe021*5;W?_&!5z}KriLcfT4@k0s?E0RfZ)?fOcjymt~A$ zx8j4WubCRKY?AT9CV4aRcJaQ7Mes-i+z0IPADqGeh?Au?b0XYgL6w~RQ%E9NrqRi{ z3~CYNL0Yw3euFWtp22I)u(BNC6wE-NDyc~`knzj@NPOd&RjbCi^J2;Z{q)VfrNsGp z#@_p?rDsaHv)Ns2%%e5`a{l#8>eONV$?L$0Z~XeVle^}`SI6Xr9Mt?SnG3LC-lq>Pe0}eK*YIY^9wzKrZ7$hoCvb^`~nen#l*exjp zoq)l}9XaZHI74VawF^+RgA;q@UFl(lX>&qosVev48dXF~tIBueH1@1Qt9~kID`=Ao zfbQ-Za`$dqF39*?fj~)7*`Nh}S5KE6WsbX&Y9;d+woq2kMrK8TSQxQoxlf8R3!>mpwMC703r?_*hi&K^#a#IXU8@o2`xa_zuYvh;8+L1n2A%og5!=+ri z^hS|1mbA?`ilfUIde2#{S*=oD5W^!wjzI&9Rmotx;7D-_Yk(CZRcR|5|5zaB3Qh18 z^|CId5WB}JlF&=b!H|EX5QmkbR?{1W)avWk7~T7M*N5_}aIRk+K3a3BFhe}@D6%8S zQ53^LY28=XonIu-Wv|_)i2D~ZwvKJ<$GMcByX`%L&1dSDgse1Z!?6%CxQ*2f}t2cWP{e+_$v1!a$O8hrc4fatS?b-ka`by-wnqy=5)wr%QZw*p#_17e) zwlSQHyd(7^CW{-1C4^eBV>2&}+)51t$e67q zRc|l;^2f2_b42{N+&Y3$oU=4G717qPtavRBi-Q6dvEq zvSX{?7je41N`V@=;=$rcY?|_*qc}gua3Z_QkQJBFKI#!WsU9{*P^f;@7-9?Q?k?M8 zvp5)*#}TCcW&L|n7JC#YiA~9CE>dHDxone~AS@r?r^u~dCX2cZh$J?*WVVk1(VeW`=TWz+Z9l_jGcNWAn1cNv5Mqfh79TrJ&Qplu+f6U>D^)aBE*K5YF%L z)%7Zi0`B27KQ96I@Dl$*eu@&RtN}HR@ zJNn}MUubrF0oI1dj7+FSIlaNG01H0qw(cDc9$~@mk7LH zcA^XQDf+8JU~}>BaIQyj{}hg1!?e|Q;{E5BPD?!ucZ1ES6@5}>13Ef9bMC2nkc{?5I5Q0q3ve(N^IMU>uuT6VJ)V6#W9L^D{?N8+TT2*NaS;kT$=YUmyp-R`(?Lpg6ESRYIj#+4*|YdO5{Ez-a+EcF7G|4Gmw9^?`6ZV= z{-Ce}XnF{+kP_bhGY%Jq8U#I2f7B^g3jd3`jb^^v+67$Lf$S<<5fycBfLx*4wtPTF ztTec4iBG4+=49PCAZKvhgzn}f>xALvpRu(%XL`|APQJf^sND&2B<6=x3ZNX+IR#+o z(lUH0?Rz+31|PkEF(SB}>ijf0KYZE!FTQL-!-xnPHu><$ETuGH2)!|@PgUC(VEtvbSizsqoi8{zF+sL9Rcle>J9j@Bl0Z0v(>R9~T`S5jch%py9@Is2Ya; zXuGBF+v_GK-#)=W;9AFwf)#(IyX)`1q@u$^Mwisv?CdVCjOEI3lN&3r2PSl>=z?*=@kpFnIB;&|*vsdwCR)o5=|KByPccF^S*h-BV=r`V+{jaGsW9hG2c)$TOyg8&k0zHoeQ^#W=L7YTeUO}KF z2&*BSe&4a?^Yq0>fluH*LBbcS7F#>pjgcIA6$v|&qyMJcLZGKBdh5mC$)xA?rzSxR z&_%0;RDd}|%J}HG6IX-yfaZhv4yxN9wh=KzUpAF`u`eNe36VSnUa}1?1E~;BCrKD+ zA|F5>u(uHDV@q`p5Yo+Ge`eDL@dtgY4dT}wJ8CsX2Gs5XOCx#ndhk8N5`6)V6Y{V= zabeGJ?XAJRgxtWngyj8=>G{%C5X4Wkjk1LZ`1dxs_~837Y2K`eDIG}k2ILX&;ESxwn)W4Iy0evHV%Nlsv zisa`+yA1qc3-n+1OJ4^5HH5X#8 ze^TKH^<2#l6Zqd4!70$0dMMt1&J=<4Eg5(LrFZ?11Yrp$YOH}01 zbR+cT|IqOAglK&rhEaVY_5$1__97U0+ehemLA8ZQ@W(@555nTxh=8egHt#Kx9`P68 z7r0AE`axA5!1Yo8);@{eODIyI(Mwom?4%873Zge%5V?=05OfYBc>|InChYcLDs}ZM zl=}Z($_eN9yFQ%<1SIL;I}Wbl8^Oy-+l3Ui1{BUdm$y`y2h#ABr41u#BrWV&B!}D}|`$uvRalLAP zBE?9D9Y%ik7!TD$HJVK^c%#?`>z%zak~f$uLWGYN@C?;@RVS-dl9-y-j}~g1*{sM3 zjvcLha6dqXRbrvVU`o=C7JarnX252DKCU-XZBY5tE*-Sn9&EJi0EiPrK^ol67}{m8 z0_s}H5B4);HzDB?trew8p${?+GM*7}U~&wUt2b@m!p`~Fnkgx(O*A5m=1-uI#$Hjz zln3rC1M%RH##YhCtaO2Mnx#>pr!2=s>_d!G65~oPQ9DV!}X1(7fYcO!%QCq)OWvwSp`Nf#Bx{w@UvZL!|3iw8%H7G37m{y8J zkg)?rj56ylzZ?yLXon9 z$}b_VdA0fsm-{msmjy)86`IX3X*cA>(q^@Cz6!&ss@1lkWApWLOug};+K$H@oW!2n z9JGhf)B{T@;_?ENg}en|G)>H^xW5u#RgcaZ>p{eovDmgaNFCG#%%BOnlsZ8A)YQiLX34Ub0`|)?Ee@b=xy@u@F2x9|jJ9Df1sXzgz zx$);iWYiZ|ZHorTKHr>0!cFjC+oO3&G1uUE#^_#ZDc!5gtCE*O+Z2*U+R*qh`ov~(wGFWCqp0urmw}b6c($Z{9C893^k=vz zNu=Prxu#aRsN=Dzq5?*4m_AeH4}1FmW_;MPl`~y30qjx&9j00Kd&4OeMHDb0$D!*T zgj%VSg{?Nz9Q(NJa;q&6hhX*pQGS><|KFA0kStRc^O#0Bp!n%=l6H{c?2CknZ%n#^ zkwu9K2?UYAdTgaet7I;qUKR-b zg}0=;SJB;8v^J*!oQEy`=KPx~3LU)lPg;Faj_joBf3Rsjg-GwJ4^#ur~S=(T=FC^;v9*E4mB-y0nxZQbs?1jdR+4B_)wr@qfM1G z0^w$(#8t4eUUX2s1d#?jwNnXvY7_Yv@dOGOL!3nxccF}STBsZ4#C(gUbdky*z|-}{ zrz)|(quINdh>+v+C}I^fh})ILN?^w9t}`z5?!;Zv7OH{e!wKI=+laotv20`ak3R#!#nMf-c3CDO-P()$+6Jgs7m^AwF6ImjqU&s9$~SR5pzNK}}Q z=#zF=ZHqWa{r6TZxWgJE{JAa&5e;?F%+lZEAXXZGGmBP;)B2^?=-Pm7qoz##Jq$wZnPa0 z5fqoG8Gwy)&q;B(J8>o7ELq_rq+9i1=aT-yI3)fr48PlLTcudZflu*iEdcvPI?XcE zT0S5$wEls(N85>$GY&i540{^Veys_ zT)5A65*a^-z!0b}W5B8;LVZL-2HU|fG@gjm4RzGX9137(Gz@p1P(5XSZ0bg*z~xla z*&hKGjzpOp13ociX;5ZZJIIs~ZbERW`N>-pFdhe{n=a6eCYdJl7ER!T!dS$_7)p!j zcErGTi#~pC5twEQmfI(BYe(H88E>U*2wFXM(HHc zg2A9BxkOSoJoMF#{;3x|DoG$?65Wm&z_z$k@?R)Rxxp;ALk_?%{H0RT8ogQ|cJli`oLQXLS>F zHQ^s@4EU4A=(g(hK|;fJwUi=6wcpOq0IM}T|9y!`F29&gFDMYuJ~R*z@_#KcF>-V? zvo`r_Wl6o7l|wE&(%YI&*F~Ss5f&3MCdCd#^)Y*LULtifVO6Kk+<_ID-pTVV2MAhP zM(WT_L1rt@1m7=Ov-+#Kecs$Pgm?-cliCZqB-cS{MdUTZ+RBO4$HL@7_zRe#jifPz zB9qKY&*meg@P4EvAfFw|Hi zO=~E{TC8_Exu2N6VjAABk$ey1?qGo9t6GsOI#RuizA6)-QOx=6#}U>70-cF6zz^m& z_EQapouL}BKFEjZpuE^#mS1U5fHz9Wn;Y*-*YHinrjVfEr|Vx#ca@bbH>pUY$J6+e zql^lv@SongQIwz+_aWfiv`Wa8%$H{vsX^}B7_88kAcl$C3c7JL%`>tG!=o5ZMA6_J zo58{J1>>cupl#HAaLJ3VOM5fB%fMn`>Iu+rzCYyIidVUlS2IJs*4B%*O zv8g9!qke|HKt*r;0%V{17%KAiBdSTT%Dv#d(D2pUiYhu%ggX1o#ee0+vZn9yl17&1 zG_1pqX`BtpdOI|9cR@WNJxLdvQqMj{(#NowyU%aGOZ10(NH9a}?(P#>ZCK3M?huT% zb@y#yY>H>4n-eaXF;an@*Y5eK2hW}$;!b*wlhovYxbp z)etNT1rScRzjbpG#QUW}cH>nnlQ`2L9NCK0w?5S?ZNiVu5;w1s$tDO2tl}q&}D%`t>D4OdTYnWw4Z>sL9^PlLfm5?)seT|HDf}$_^x}1TB^Fl zZI&iZIocCy$FHpXVBne_FT_^XgFR>U*Rx}ovL3zBXRhtp=|WMg?BlXJp>~^e+!?}V zq~e_8P09%(w}^s$43m5k2x3+~ncC71?KHtXS=aZ4c}`Vyfd2a>f1tUm3*k|qIPh`RqfRa~645b-H6n(GPN+$ff0aLh91 zbe%%WkoDUZKi^En#Lg`A4}r~!qLC7XPBn;~Vp_g6j?e)ie^VDGIjoi~kZkpPjnovd zXZ+qE9&jg$fo$UC-9W5;v146C0g5`(~2mRyn%06MRS4k}s~A)N=*>oRo)F&p9@(QRThqTwTfw#PSI2 z2LksRrSCs}O|<{F+%?Z!Sq?@ZKtRthKtL$}c+J?x+EGPM-_qzKqsnT+NW>BoTEP7^ zni_jqK$>5tfC!eNW}bD6=^-fAwwJ07$uiOc^K->7Q^M?{ocNaHM!}TRRw2-DC7yW!+GBbc?QLNK1)PhSn1G&|4I{+I|7&6hRG)X92bBBi^D}o zkyGlDFdPG&Fsy)>zX^3c=na~WU>UlO;ej5;zPtC7f&+2PbuMqKj%>&Cy1}M9xYk!4mQ zjy=+Gj=4TE_CUW_$#wCdl#xL$y`dJAJzC$%adDQE0(t21&clQ*|5&| z*lWrhlYPnZ$%6fr_t&pfS1;Krcbd1{`C-7ovttUKWD#QxxZXy5uQjQZOX{v_+0{TS*1cd(2 zN$F^6WM#zo*Z$LAnSM0ox^tY~&=RSatT4cyz%s>vlcfv&D!JkBRtU2Tjn z0I5d3a(>d0ZH{JCYE_Q^zrLzs9-=be3Kz31J}-e>k^?WNl$U70*M@tm;> zJ$T4%#;?&|a!;nk<;TkUG#)PxBQ_O1R$P~53E$H^ry8y3h)DFPardA}b6IR-jI<>v z|K|{%Ihde8TD(VPtp+Yk5MKzV1Uy4~Bgj`%UE8q06({^mjFV7MTdRj9PvOfaT^|Aq zKMCsj?a_Aip>nz|LUL=yTrfTH%Dyjy^b?8J* znHTZIX!JSr{z=&q5M|egKBal0VAAk=uRbIC@iLdDThMwqhMx$#dispeJL+@Bjfo>-|v~wHdNDTdqx>LZ`EUPYei$SqW7I}s zyze7Vglmh=MPw0qs3UYPiVJJW9XU=RQc{F7q>1Ka;f?P#-~v~Gd^&IPgz({JxlEiV zc*r7K_HXu8=qKrMI}*k7Fa(LTBSejPExArpsHpj8fXdkxV-)n59EzM}dU%r<{lihv zhVeaSoSrL|UUgsTXwM{V*(u}rsg6F8!c+9 zWM-8FBx&W)fIUb&Y29Du*FnhfXr}>!3 zk9kF{QQ&7QPmd}JQrt#|zvrZgR&w_>#J)4(k-iQeaLehaH~VJeD9bsc!x|!%H3?wP zY1<-IR?jL$#$5L%NkBmk5yQ~QoUsZR`aTJ>FPUZ8BJllzaz(9IAHXL0Yh)e0!(=M{dLHR`d(mmBr z4(-BEq(TiTH+L*8ji82A_c0sO-0Tc>^#{2Wu&XLZ^5MKoveriEc-``9#I;rIP&g7lEbDORf?cRAW)2(h684BBjCT>BJgG9-+ihK{BEm%Jht&Jo1%m0q7sPGP4 z$X$M%QL2BTQ6H3wcbkp~YeLiCAjKnIlfIFQyY5wP$;8nN`bdsKDf%a{$l~%EX`X$7 zv^Q~8mMe?LZTwfxz@G0Hlp{5#GDO0M^Ob@kk=vm06yAkx*;}g%tVJ%0>}*Y1v{s|+Q!B4T7Y0$<#*n1CeKKN0Em})&v|ye zvz;Thg3nxSx%OUFD%@oYvNGzXq;f2XeR(ZaR2lojB+avsO^^AYbdUrOzh$`NBJmg^ z^mK68g8B7y(mr&&N&VqO*hFEGSMf#TJyOx@9+UKW`NFe|X-+BSEK!ik+vTnMn`hb) zZCCEKtVgTVV&L%J=tl}0x$Pdodh~Uf zmI%WRbgHi-tDxJ)9llT0W9F;G>#zKlrC&VA_Uo>Gn`L<${^+AUHW9Hi5k7@H2d$cP zayO%zn;M@AT5^eKe}_klW=Xng;>PMTHGS0&5>l2C4ly|;!)PC#ML@VS(HM5_#~6fx zWDX>X1}xMH?tB>jmerppdAB2pqnv8%+OIg zau(3|Z^xozu}tpszO93YAhstC_H|h5+HKg}@B) z{eH;U9M#BO@ZsC59NXqMYJ+f_awg8V;k{3{!ea!ckk?~Q1(VDq4|07u zJMmE^fUKPp40KE}im9$+hbVGb)n<#}aqg1YIIq}UPSn$|j}9;0yeaOAF4Qrfb?vug zXAvXvT$7fAG-urK;6o*;uB-roRT{x?FQ!*~Ko6*#h_Vqj1K(;+m{#nH+2*YBDfRqx;{NT&26r3JKyffXkkf<{8XWLad$Rp2XN z)+G~U$DNVCV;Zg2H*s`hR^mJ&M~7!0_l~k19!($#yO|_UCNM|@m z5A4jGuTprum@nv(ljj#?V|93ZYnoaZlRvn$m(a?&-q^x;KAI0NUm;YGBI-S^-%P8T z$!Hc&P}J-i9D-@j(H5eESK?Y=k zk^bC2I>P}923fiwLoz@8xjua(hec7cs~v6(pnoIi9&3+$oX_HeXpjck!{@*X)v2~! z=BPNbYd39^G5d6;qY__z8ojD-r-8S3?gi?tM!hXzZ1_xKzZ8YvW_{PC{kRh*Y)-5A zVsC9~W1XLl8u|V-Fj12#l29Y8;qH%p4MkyAyH1iBYDWxh5^@{T51w4Zon?w;ffzwT za=2D+z{}$1ZJ;SWv5Zm#*-R6n&vdULH+o-q-FXz2imcB8Of;b5X zZF&7g#~pHRyHE=jpRAWl3t+OSMcT6r=j9 zgJFqEBw4C$**Cvcb;Bdx1##n&X_AYESQD+O9lajLUx)NLB9@O{W~{1zar@S0dPw1k zn3^APyHe+?+IbOD)B>lR0^jtUG};`EUBuFMbYm?YrgU%W>wX%okyXrm5^&f;C{?d9 zKjk@J>0Y|NKO((e`= zMmGNVaV@1mvS+I=#O<%8!-n%^rN^g`dTfxIeCHN%ylo^{E&y7j`{nC!^@Zr-^pCAx zqki4cy6H>w?=K#t_SfWRz#Dg3L|L=z!<}+so8Dn=mvq=Q4MXFJu7?mA-&8%$ z>k!H1N1liS3q&uGAe^28()8JF!VA0CG4PDOc*^`JPm;eAuAUmTn7?i{Dm*R&PDWX4$L#AdNN+B%MjVIPgC$vRf1#Q`2pCHug56JgJv zK6H*F|3Ja_=?+4Q*-ZRvv_B+=hl(@*(AsBp+#uf<`PWDfa!Xo3vHSR$NRm6{DsJId;P@&E;3^A^FR z9q31V!+CzqkiNM}?CUDlc8N8-gb`pT(C-dISO0)GZJLvcE^R8MZ27(UeSL3368m?K zp{oW6uDp>tI~*!g0+Y!>g^vL83v*~&yF`7wuHUkF5XCf zY&A;WoJm{EGqQ}}uBP8ne_K$#jt8xgoDzZej|QS~`N!wGW_WCznk*0Tt(y{SJv2nV z0Rs+}DUsh3^^nhg6>6EE$4MN;9y_!8UbuNF&N8-^T$oEsL(7ougl%`n>@c`tNu$xx zVl6#WKo~o54_}t(mKW4~?uaQ$LIQEe3aDU;@hzviMOkID@75AN(}YG8uVMxZT%8@XD7lQ+;wQo@S~yWydr@er9YV z4_Ph*Ntr-##MdRHKDRY<)HlXu?v)WqVaqec;e~~;JOjAHaL9T&32EZ>GHLG)*XcB*#1T@7_yNKd|=o6AY{az8AHc-El~N!gUVczgn%^_q3v4#cMvxH_L& zp1nRj5cm`d$= zrzA$LVmgEjq<864DP^^=&SVj;(Lrh)yB|9=xecJqM3qNU?sSw-4Q}zhO83E{u}=HX zkF#scXthgZ*c^yP_A5k=1HjZ6G%nK0ijGCPtKGFBw7te`e|a z-eABr7cXIl#Z|!iiS&!Qo z0Pw-VK^Z(1c_V)HaQ}DrcGSTgP@2B~Jw6P03i|(Bz@svub~OLZWNGmi)9?P~s9@Au zdcVP(F@JzjD(j*0pe9Uz^Mtnj&GWBB3Mw2m`SKg?-T4 **上海经创贺联信息科技有限公司** + +--- + +医院信息化建设,院长们最头疼的三个问题: + +- **贵** — 传统 HIS 系统动辄百万起步,基层医院望而却步 +- **复杂** — 花了大价钱买全套系统,一半功能用不上,一半需求没覆盖 +- **不适配** — 大医院的系统搬到小医院水土不服,小医院的系统到大医院不够用 + +这三个问题的根源,其实是同一个:**HIS 系统的定价方式不透明**。你不知道自己为用不上的功能买了多少单,也不知道想加一个新模块到底要花多少钱。 + +**如果 HIS 系统能像搭积木一样,按需选配、逐个模块定价呢?** + +今天,我们把 HealthLink-HIS 的 **108 个业务模块**全部拆开,让你清清楚楚看到:每一分钱,花在了哪里。 + +--- + +## 一、HealthLink-HIS 是什么来头? + +先亮几个数据,让你对这套系统有个基本认知: + +| 维度 | 数据 | 说明 | +|------|------|------| +| 代码提交 | **2,265 次** | 40+ 工程师半年密集迭代 | +| 新增功能 | **111 项** | 覆盖门诊、住院、手术、检验等全业务 | +| Bug 修复 | **1,400+** | 系统稳定性持续打磨 | +| 业务模块 | **108 个** | 14 大业务域全覆盖 | +| 数据库表 | **181 张** | 全业务域数据模型 | +| 后端接口 | **230 个** | 45 个业务模块统一接口规范 | +| 前端页面 | **209 个** | 42 个功能模块操作体验一致 | + +**一句话总结**:这不是一套 PPT 产品,是一套已经在多家医院上线运行、经过 1,400+ 个 Bug 修复打磨的实战系统。 + +### 技术栈:走在行业前面 + +| 技术维度 | HealthLink-HIS | 行业主流 | 优势 | +|---------|:-------------:|:--------:|------| +| 后端框架 | **Spring Boot 4.0.6** | 2.x/3.x | 业内首批升级,性能与安全全面领先 | +| 运行时 | **JDK 25** | 17/21 | 最新长期支持版 | +| 前端框架 | **Vue 3 + Vite** | Vue 2/jQuery | 现代化体验,首屏加载快 3 倍 | +| 高性能表格 | **VxeTable** | el-table | 万级数据量流畅渲染 | +| 数据库 | **PostgreSQL 15+** | MySQL/Oracle | 企业级开源,零授权费 | +| 工作流 | **Flowable BPMN** | 自研/无 | 国际标准流程引擎 | +| 数据标准 | **HL7 FHIR R4** | 私有协议 | 互联互通标准协议 | +| 电子签名 | **CA 认证** | 无/第三方 | 法律效力保障 | + +### 资质与合规 + +- 符合《医院信息系统基本功能规范》(卫生部) +- 支持**电子病历应用水平分级评价 4 级及以上** +- 支持**医院信息互联互通标准化成熟度 4A 级** +- 对标《三级医院评审标准(2022版)》 +- 符合 WS/T 447、WS/T 448、WS/T 500 行业标准 +- 支持广西地方标准(壮医/瑶医、疾控直报、电子健康卡) + +--- + +## 二、部署方式:灵活适配您的基础设施 + +我们提供多种部署方式,适配不同医院的 IT 基础设施条件: + +| 部署方式 | 适用场景 | 特点 | 参考周期 | +|---------|---------|------|:------:| +| **私有化部署** | 有自建机房的二/三级医院 | 数据完全自主可控,部署在院内服务器 | 1-2周 | +| **混合云部署** | 希望兼顾安全与弹性的医院 | 核心数据院内存储,非核心业务上云 | 1-2周 | +| **SaaS 托管** | 基层医疗机构、社区卫生中心 | 零运维、按年付费、快速上线 | 3-5天 | +| **信创环境部署** | 有信创要求的公立医院 | 适配国产操作系统/数据库/中间件 | 2-3周 | + +### 服务器配置参考 + +| 医院规模 | 推荐配置 | 并发用户 | +|---------|---------|:------:| +| 一级医院(<100 床) | 4核8G / 500G SSD | 50+ | +| 二级医院(100-500 床) | 8核16G / 1T SSD + 数据库服务器 | 100+ | +| 三级医院(500+ 床) | 集群部署 / 负载均衡 / 主从数据库 | 300+ | + +> 具体配置根据实际业务量和并发需求调整,可提供免费评估服务。 + +--- + +## 三、108 个模块,逐个标价 + +> **计价基准**:工程师单价 **1,500 元/人天** +> +> 每个模块报价含:需求分析 + 设计 + 前端开发 + 后端开发 + 单元测试 + 联调 +> +> 模块可单独选购,也可按下方套餐组合 + +### 系统平台层 — HIS 运行的基础设施 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| P-01 | **系统管理** | 用户/角色/菜单/部门/岗位/字典/参数/公告/版本管理、多租户 | 10-15 | 1.5-2.5万 | +| P-02 | **监控运维** | 缓存监控、服务器指标、登录日志、操作审计、在线用户追踪 | 5-8 | 0.8-1.2万 | +| P-03 | **文件服务** | 统一文件上传/下载,多格式支持 | 3-5 | 0.3-0.8万 | +| P-04 | **工作流引擎** | Flowable BPMN 流程定义/实例/任务/表单/表达式/监听器 | 10-15 | 1.5-2.5万 | +| P-05 | **定时任务** | Cron 调度引擎,报表自动生成、数据同步 | 3-5 | 0.5-0.8万 | +| P-06 | **代码生成器** | 数据库表→CRUD 代码自动生成 | 3-5 | 0.3-0.8万 | +| P-07 | **数据导出** | Excel/PDF/CSV 多格式导出,定时推送 | 3-5 | 0.3-0.8万 | +| P-08 | **首页仪表板** | 数据驾驶舱(处方统计/收入趋势/医生工作量/快捷入口) | 5-8 | 0.5-1.2万 | +| | **平台层参考** | | **42-66** | **6-11万** | + +### 门诊管理域 — 从挂号到完诊的完整闭环 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| M-01 | **挂号预约** | 多渠道预约(窗口/自助机/线上)、退号退费、就诊卡管理、费用性质自动识别 | 10-15 | 1.5-2.5万 | +| M-02 | **分诊叫号** | 智能分诊、排队管理、LCD/语音叫号、SSE 实时推送、等候时间预估 | 6-10 | 0.8-1.5万 | +| M-03 | **门诊医生站** | 结构化病历、ICD-10 诊断(含中医体系)、处方(西药/中成药/中药饮片)、检验检查申请、手术申请、过敏史管理、传染病报卡 | 15-22 | 2-3.5万 | +| M-04 | **门诊收费** | 多支付方式(现金/微信/支付宝/医保)、发票管理、退费、日终结算 | 10-15 | 1.5-2.5万 | +| M-05 | **门诊药房** | 处方接收、发药、退药、处方审核、效期管理、管制药品管理 | 8-12 | 1-2万 | +| M-06 | **门诊治疗** | 治疗执行、皮试记录、输液管理、处方拦截 | 6-10 | 0.8-1.5万 | +| M-07 | **门诊手术** | 手术申请、术中临时医嘱、门诊手术计费 | 4-6 | 0.5-1万 | +| | **门诊域参考** | | **59-90** | **9-14.5万** | + +### 住院管理域 — 入出转全流程 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| H-01 | **入院管理** | 入院登记(双入口)、床位分配、押金管理、预交金出入 | 10-15 | 1.5-2.5万 | +| H-02 | **住院医生站** | 病程记录(8种模板)、医嘱(长期/临时)、诊断(西医+中医)、手术申请、会诊、输血、知情同意、临床路径、出院小结 | 18-28 | 3-4.5万 | +| H-03 | **护士工作站** | 医嘱执行闭环、生命体征、体温单(D3.js)、护理记录、扫码执行、交接班、输液巡视、住院记账 | 14-20 | 2-3万 | +| H-04 | **住院收费** | 费用聚合、中途结算、出院结算、每日费用清单 | 8-12 | 1-2万 | +| H-05 | **床位管理** | 实时床位状态、出院自动转清洁、利用率统计 | 5-8 | 0.8-1.2万 | +| H-06 | **医嘱闭环** | 医嘱全生命周期追踪、执行记录、超时提醒 | 5-8 | 0.8-1.2万 | +| | **住院域参考** | | **60-91** | **10-14.4万** | + +### 药品管理域 — 从采购到发药的全供应链 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| D-01 | **药品目录** | 药品主数据、分类管理、医保目录对照 | 6-10 | 0.8-1.5万 | +| D-02 | **药库管理** | 采购→验收→入库→退货→盘点→盈亏→调价,全流程单据审批 | 12-18 | 2-3万 | +| D-03 | **药房管理** | 请领→入库→发药→退药→盘点→盈亏→退回药库 | 10-15 | 1.5-2.5万 | +| D-04 | **科室物资管理** | 科室请领→发放→入库→转入/转出→盘点→盈亏→退库 | 8-12 | 1-2万 | +| D-05 | **库存管理** | 实时库存、预警、调拨、盘点、报损、调价、追溯号 | 10-15 | 1.5-2.5万 | +| D-06 | **药品追溯** | 一品一码扫码追溯、全供应链追踪、追溯预警 | 5-8 | 0.8-1.2万 | +| D-07 | **合理用药** | 药物相互作用、过敏匹配、剂量审查、重复用药、配伍禁忌、妊娠/哺乳警示、儿童用药、处方前置拦截 | 10-15 | 1.5-2.5万 | +| D-08 | **抗菌药物管控** | 三级分类、权限拦截、DDD 监测、审批流程 | 5-8 | 0.8-1.2万 | +| D-09 | **处方点评** | 自动筛查+人工点评+科室排名+统计 | 4-6 | 0.5-1万 | +| D-10 | **日终结算** | 药房日结/月结/年结 | 2-4 | 0.3-0.6万 | +| D-11 | **药品效期管理** | 3/6/12 月效期预警、先进先出、过期自动拦截 | 3-5 | 0.5-0.8万 | +| | **药品域参考** | | **75-116** | **11-18.8万** | + +### 检验检查域 — LIS + PACS + 病理 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| L-01 | **检验管理(LIS)** | 申请接收、条码管理、标本采集/接收、结果录入、报告审核/发布、参考范围、历史对比 | 14-20 | 2-3万 | +| L-02 | **危急值管理** | 自动识别→弹窗通知→确认→处置→闭环追踪 | 4-6 | 0.5-1万 | +| L-03 | **检验质控** | 室内质控(Westgard 规则)、室间质评 | 5-8 | 0.8-1.2万 | +| L-04 | **检验增强** | 检验类型/套餐/活动定义管理、历史对比 | 5-8 | 0.8-1.2万 | +| L-05 | **检查管理(PACS)** | 申请接收、预约排队、DICOM 图像采集、结构化图文报告、紧急报告、影像对比、DICOM 打印 | 12-18 | 2-3万 | +| L-06 | **3D 影像重建** | DICOM 三维重建、多平面重建(MPR)、体积渲染 | 6-10 | 1-1.5万 | +| L-07 | **病理管理** | 病理申请、标本追踪、制片流程、三级诊断、报告管理 | 8-12 | 1-2万 | +| L-08 | **医技工作站** | 检验申请单号自动生成、套餐管理、执行科室智能匹配 | 5-8 | 0.8-1.2万 | +| | **检验检查域参考** | | **59-90** | **9-14.1万** | + +### 手术麻醉域 — 高风险高价值 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| S-01 | **手术管理** | 手术申请、分级审批、手术室安排(冲突检查)、手术计费、手术统计 | 12-18 | 2-3万 | +| S-02 | **术前讨论** | 三/四级手术强制讨论、讨论记录、签名审核 | 4-6 | 0.5-1万 | +| S-03 | **麻醉管理** | 麻醉评估(ASA分级)、麻醉方案、术中记录(5分钟间隔生命体征)、复苏评估 | 8-12 | 1.2-2万 | +| S-04 | **手术安全核查** | WS/T 313 三次核查(麻醉前/切皮前/离室前) | 3-5 | 0.5-0.8万 | +| S-05 | **手术记录** | 手术团队、时间、植入物、标本、出血量、并发症 | 3-5 | 0.5-0.8万 | +| S-06 | **术后随访** | 24h/48h/72h 术后随访 | 2-4 | 0.3-0.6万 | +| S-07 | **麻醉质控** | 麻醉安全指标、不良事件上报 | 3-5 | 0.5-0.8万 | +| | **手术麻醉域参考** | | **35-55** | **5.5-9万** | + +### 电子病历域 — 直接影响电子病历评级 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| E-01 | **结构化病历** | 结构化+自由文本混合录入、ICD-10 自动编码推荐 | 6-10 | 0.8-1.5万 | +| E-02 | **模板管理** | 系统+科室+个人三级模板体系 | 4-6 | 0.5-1万 | +| E-03 | **修改追踪** | 修改留痕(原文+修改人+时间)、差异对比 | 3-5 | 0.5-0.8万 | +| E-04 | **版本管理** | 历史版本保存、版本对比 | 2-4 | 0.3-0.6万 | +| E-05 | **完整性检查** | 必填项+逻辑一致性自动检查 | 3-5 | 0.5-0.8万 | +| E-06 | **时效监控** | 入院记录 24h、首次病程 8h 等时限提醒 | 2-4 | 0.3-0.6万 | +| E-07 | **CA 电子签名** | 文书电子签名、签名验证、历史、撤销 | 4-6 | 0.5-1万 | +| E-08 | **病历检索** | 按诊断/时间/医生多维度检索 | 3-5 | 0.5-0.8万 | +| E-09 | **知识库链接** | 病历中嵌入临床指南/药物信息 | 3-5 | 0.5-0.8万 | +| E-10 | **打印归档** | 病历打印、出院自动归档、24h 归档率统计 | 3-5 | 0.5-0.8万 | +| E-11 | **病程记录** | 首次/日常/上级查房/阶段小结/抢救/转科/出院/死亡记录模板 | 5-8 | 0.8-1.2万 | +| E-12 | **知情同意** | 电子知情同意书模板+签名 | 3-5 | 0.5-0.8万 | +| | **电子病历域参考** | | **41-68** | **6.2-10.7万** | + +### 病案管理域 — DRG/DIP 分组质量的基础 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| R-01 | **病案首页** | 数据自动采集、ICD-10 编码推荐与验证、ICD-9-CM-3 手术编码 | 8-12 | 1-2万 | +| R-02 | **病案质控** | 首页数据质量检查、运行+终末病历质控 | 5-8 | 0.8-1.2万 | +| R-03 | **DRG/DIP 分组** | 自动分组、费用预警、TOP-DRG 分析、优化建议 | 8-12 | 1-2万 | +| R-04 | **病案归档** | 出院自动归档、24h 归档率追踪 | 3-5 | 0.5-0.8万 | +| R-05 | **病案借阅/封存** | 借阅审批+超期提醒、纠纷封存、病案示踪 | 4-6 | 0.5-1万 | +| R-06 | **死亡病历讨论** | 死亡病例 7 日内讨论记录 | 2-3 | 0.3-0.5万 | +| R-07 | **病案评审** | 评审计划、记录、统计 | 3-5 | 0.5-0.8万 | +| | **病案域参考** | | **33-51** | **5.1-8.3万** | + +### 护理管理域 — 患者安全的最后防线 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| N-01 | **护理评估** | Braden/Morse/NRS2002/NRS-VAS/Caprini/Barthel 六大评估量表,自动评分+预警 | 10-15 | 1.5-2.5万 | +| N-02 | **护理计划** | 基于评估结果自动生成护理计划 | 4-6 | 0.5-1万 | +| N-03 | **交班记录** | 护理交接班、重点患者提示 | 3-5 | 0.5-0.8万 | +| N-04 | **移动护理** | 扫码执行医嘱(腕带/药品/标本) | 5-8 | 0.8-1.2万 | +| N-05 | **输液管理** | 输液巡视记录、速度监控 | 3-5 | 0.5-0.8万 | +| N-06 | **评估趋势** | 历次评估结果动态趋势图 | 3-5 | 0.5-0.8万 | +| N-07 | **护理质控** | 护理敏感质量指标自动采集+上报 | 3-5 | 0.5-0.8万 | +| N-08 | **护理文书** | 一般/危重护理记录单 | 3-5 | 0.5-0.8万 | +| | **护理域参考** | | **34-54** | **5.3-8.7万** | + +### 院感管理域 — 三甲评审重点检查项 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| I-01 | **感染监测** | 自动筛查疑似感染病例、上报院感科、跟踪 | 5-8 | 0.8-1.2万 | +| I-02 | **暴发预警** | 同科室短时间多例感染预警 | 3-5 | 0.5-0.8万 | +| I-03 | **目标性监测** | ICU/手术部位/导管相关感染 | 3-5 | 0.5-0.8万 | +| I-04 | **手卫生监测** | 手卫生依从性统计 | 2-4 | 0.3-0.6万 | +| I-05 | **环境监测** | 空气/物表/手培养监测 | 2-4 | 0.3-0.6万 | +| I-06 | **多重耐药菌** | 检出→隔离→跟踪→解除 | 3-5 | 0.5-0.8万 | +| I-07 | **职业暴露** | 锐器伤/暴露事件上报+随访 | 2-4 | 0.3-0.6万 | +| I-08 | **消毒供应(CSSD)** | 器械包追溯、灭菌批次、效期预警 | 5-8 | 0.8-1.2万 | +| | **院感域参考** | | **25-43** | **4-7.2万** | + +### 医保管理域 — 直接关系到医院收入 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| Y-01 | **医保基础结算** | 门诊/住院基本医保结算 | 6-10 | 0.8-1.5万 | +| Y-02 | **目录对照** | 药品/诊疗/耗材三目录对照 | 6-10 | 0.8-1.5万 | +| Y-03 | **医保对账** | 财务对账/清算、差异处理 | 5-8 | 0.8-1.2万 | +| Y-04 | **处方上传** | 门诊处方上传/拒收/撤销 | 4-6 | 0.5-1万 | +| Y-05 | **住院医保** | 住院登记/出院结算、DRG/DIP 结算 | 6-10 | 0.8-1.5万 | +| Y-06 | **跨省结算** | 跨省异地就医直接结算 | 4-6 | 0.5-1万 | +| Y-07 | **智能审核** | 事前/事中/事后三阶段审核规则引擎 | 6-10 | 0.8-1.5万 | +| Y-08 | **DRG/DIP 优化** | 优化建议、费用结构分析 | 4-6 | 0.5-1万 | +| | **医保域参考** | | **41-66** | **5.5-10.2万** | + +### 集成平台层 — 面向三级医院的互联互通 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| J-01 | **ESB 集成平台** | 消息路由、服务注册、消息监控、死信队列 | 10-15 | 1.5-2.5万 | +| J-02 | **HL7 FHIR R4** | FHIR R4 标准消息格式 | 5-8 | 0.8-1.2万 | +| J-03 | **CDA 文档** | 临床文档架构(入院/出院/检验/处方/手术/护理) | 5-8 | 0.8-1.2万 | +| J-04 | **代码映射** | 院内编码↔标准编码映射 | 3-5 | 0.5-0.8万 | +| J-05 | **API 认证审计** | 接口调用认证+授权+审计日志 | 2-4 | 0.3-0.6万 | +| J-06 | **EMPI 患者主索引** | 身份合并/拆分、重复检测、跨系统统一标识 | 6-10 | 0.8-1.5万 | +| | **集成平台参考** | | **31-50** | **4.7-7.8万** | + +### 其他业务模块 + +| 序号 | 模块 | 功能说明 | 人天 | 报价区间 | +|:---:|------|---------|:---:|:------:| +| O-01 | **急诊管理** | 四级分诊、绿色通道(胸痛/卒中/创伤)、抢救/留观、D2T 监控 | 8-12 | 1-2万 | +| O-02 | **随访管理** | 随访计划自动生成、任务分配、满意度调查 | 6-10 | 0.8-1.5万 | +| O-03 | **中医/壮医** | 中医处方、体质辨识、民族药目录(壮药/瑶药) | 5-8 | 0.8-1.2万 | +| O-04 | **会诊管理** | 会诊申请/审批/确认、超时监控、结果反馈 | 5-8 | 0.8-1.2万 | +| O-05 | **传染病报告** | 报卡新增/审核/退回、Word 导出、统计 | 5-8 | 0.8-1.2万 | +| O-06 | **调价管理** | 药品/器械/服务调价、审批流程 | 4-6 | 0.5-1万 | +| O-07 | **支付管理** | 收费账单、电子发票、第三方支付集成 | 6-10 | 0.8-1.5万 | +| O-08 | **医嘱套餐** | 医嘱组套配置(组织级/医院级/个人级) | 4-6 | 0.5-1万 | +| O-09 | **医嘱闭环追踪** | 医嘱全生命周期执行步骤记录 | 4-6 | 0.5-1万 | +| O-10 | **跨模块集成** | 术-病理关联、会诊监控、DRG 绩效、危急值联动、手术全链路追踪 | 8-12 | 1-2万 | +| O-11 | **质量管理** | 质控增强、业务分析大屏、EMR 质量检查 | 4-6 | 0.5-1万 | +| O-12 | **食源性数据采集** | 食源性疾病数据外接采集 | 2-4 | 0.3-0.6万 | +| | **其他模块参考** | | **61-96** | **9-15.2万** | + +### 全模块汇总 + +| 业务域 | 模块数 | 人天区间 | 参考报价 | +|--------|:-----:|:------:|:------:| +| 系统平台层 | 8 | 42-66 | 6-11万 | +| 门诊管理域 | 7 | 59-90 | 9-14.5万 | +| 住院管理域 | 6 | 60-91 | 10-14.4万 | +| 药品管理域 | 11 | 75-116 | 11-18.8万 | +| 检验检查域 | 8 | 59-90 | 9-14.1万 | +| 手术麻醉域 | 7 | 35-55 | 5.5-9万 | +| 电子病历域 | 12 | 41-68 | 6.2-10.7万 | +| 病案管理域 | 7 | 33-51 | 5.1-8.3万 | +| 护理管理域 | 8 | 34-54 | 5.3-8.7万 | +| 院感管理域 | 8 | 25-43 | 4-7.2万 | +| 医保管理域 | 8 | 41-66 | 5.5-10.2万 | +| 其他业务模块 | 12 | 61-96 | 9-15.2万 | +| 集成平台层 | 6 | 31-50 | 4.7-7.8万 | +| **全量参考** | **108** | **596-936** | **约90-150万** | + +> 以上为软件开发的参考价格区间,实际报价根据医院具体需求、定制程度和接口数量确定。 + +--- + +## 四、三个版本,按需选配 + +不是每家医院都需要 108 个模块。我们根据医院等级,设计了三个标准版本: + +| 方案 | 适用对象 | 模块数 | 软件参考报价 | 实施周期 | +|------|---------|:-----:|:---------:|:------:| +| **基础版** | 一级医院/社区卫生中心 | 18 | **18-25万** | 1-2月 | +| **标准版** | 二级综合医院 | 52 | **55-70万** | 3-5月 | +| **旗舰版** | 三级综合医院 | 108 | **90-120万** | 5-8月 | +| **定制开发** | 特殊需求/已有HIS升级 | 按需 | **1,500元/人天起** | 按需 | + +### 基础版 — 一级医院 / 社区卫生服务中心 + +**适合**:基层医疗机构、社区卫生服务中心、乡镇卫生院。快速上线、经济实惠。 + +| 业务域 | 包含模块 | +|--------|---------| +| 系统平台 | 系统管理、文件服务、定时任务、首页仪表板 | +| 门诊管理 | 挂号预约、分诊叫号、门诊医生站、门诊收费、门诊药房 | +| 住院管理 | 入院管理、护士工作站、住院收费、床位管理 | +| 电子病历 | 结构化病历、模板管理 | +| 医保管理 | 医保基础结算 | +| 其他 | 调价管理、质量管理 | + +**软件 + 实施 + 接口 + 首年维保,整体投入约 25-35 万。** + +### 标准版 — 二级综合医院 + +**适合**:二级综合医院、中医医院、妇幼保健院。覆盖等级评审全部信息化条款。 + +在基础版之上新增: + +| 业务域 | 新增模块 | +|--------|---------| +| 系统平台 | + 监控运维、工作流引擎、数据导出 | +| 门诊管理 | + 门诊治疗、门诊手术 | +| 住院管理 | + 住院医生站、医嘱闭环 | +| 药品管理 | + 药品目录、药库、药房、科室物资、库存、合理用药、抗菌药物管控、处方点评、日终结算 | +| 检验检查 | + 检验(LIS)、危急值、检查(PACS)、医技工作站 | +| 手术麻醉 | + 手术管理、术前讨论、安全核查 | +| 电子病历 | + 修改追踪、版本管理、完整性检查、时效监控、CA签名、检索、知识库、归档、病程记录、知情同意 | +| 病案管理 | + 病案首页、病案质控、归档、借阅/封存 | +| 护理管理 | + 护理评估、护理计划、交班记录、护理质控 | +| 院感管理 | + 感染监测、暴发预警、多重耐药菌 | +| 医保管理 | + 目录对照、对账、处方上传、住院医保 | +| 其他 | + 急诊、随访、会诊、传染病报告、支付管理、医嘱套餐 | + +**软件 + 实施 + 接口 + 首年维保,整体投入约 70-90 万。** + +### 旗舰版 — 三级综合医院 + +**适合**:三级综合医院。全面覆盖三甲评审、DRG/DIP 支付改革、电子病历高等级评价、互联互通测评。 + +在标准版之上新增: + +| 业务域 | 新增模块 | +|--------|---------| +| 药品管理 | + 药品追溯、药品效期管理 | +| 检验检查 | + 检验质控、检验增强、3D影像重建、病理管理 | +| 手术麻醉 | + 麻醉管理、手术记录、术后随访、麻醉质控 | +| 病案管理 | + DRG/DIP分组、死亡病历讨论、病案评审 | +| 护理管理 | + 移动护理、输液管理、评估趋势、护理文书 | +| 院感管理 | + 目标性监测、手卫生、环境监测、职业暴露、CSSD | +| 医保管理 | + 跨省结算、智能审核、DRG/DIP优化 | +| 集成平台 | + ESB平台、FHIR R4、CDA文档、代码映射、API认证、EMPI | +| 其他 | + 中医/壮医、医嘱闭环追踪、跨模块集成、食源性采集 | + +**软件 + 实施 + 全量接口 + 评审支持 + 首年维保,整体投入约 130-160 万。** + +--- + +## 五、几个值得重点关注的明星模块 + +在 108 个模块中,有几个模块是评审检查和日常运营中的"高频考点": + +### 合理用药系统(1.5-2.5万) + +12 项审核能力,让处方审核率 100% 不再是口号: +- 药物相互作用检查(两药/三药配伍禁忌) +- 过敏史自动匹配 +- 剂量范围审查(超/低剂量 + 肝肾功能自动调量) +- 重复用药检查 +- 配伍禁忌审查 +- 妊娠/哺乳用药警示 +- 儿童用药按体重自动计算 +- **处方前置拦截**:不合理处方必须处理才能继续 + +### DRG/DIP 分组系统(1-2万) + +医保付费改革的核心武器: +- 主诊断+主手术 → 自动分组 +- 病组分布/费用结构/时间消耗分析 +- TOP-DRG 分析 +- 费用预警(入院即开始监控) +- 优化建议(帮助医生在保证质量的前提下控制费用) + +### 手术安全核查(0.5-0.8万) + +符合 WS/T 313 标准的三次核查:麻醉前核查 → 切皮前核查 → 离室前核查。 + +看似价格最低的模块之一,却是手术安全最关键的防线。 + +### 护理评估系统(1.5-2.5万) + +覆盖六大评估量表,自动评分+自动预警: +- Braden 压疮评估 → 自动预警 → 干预 → 跟踪 +- Morse 跌倒评估 → 风险分级 → 防护措施 +- NRS2002 营养风险筛查 +- NRS/VAS 疼痛评估 +- Caprini VTE 风险评估 +- Barthel 自理能力评估 + +--- + +## 六、实施服务体系 + +### 6.1 标准实施流程 + +我们采用经过数十家医院验证的标准化实施流程: + +| 阶段 | 内容 | 周期 | 交付物 | +|------|------|:---:|-------| +| **需求调研** | 现场调研、流程梳理、差距分析、需求确认 | 1-3周 | 需求确认书 | +| **环境部署** | 服务器部署、网络配置、安全加固 | 3-5天 | 部署报告 | +| **系统配置** | 参数配置、权限设置、字典维护、流程配置 | 1周 | 配置清单 | +| **数据迁移** | 历史数据清洗、字段映射、数据导入、数据校验 | 1-3周 | 迁移报告 | +| **用户培训** | 分角色培训、操作演练、考核通关 | 1-2周 | 培训签到表 | +| **并行运行** | 新旧系统并行、问题修复、流程优化 | 2-4周 | 问题清单 | +| **正式上线** | 切换上线、驻场陪跑、应急预案 | 1周 | 上线报告 | + +### 6.2 数据迁移服务 + +| 服务项 | 说明 | +|--------|------| +| **数据评估** | 免费评估原系统数据结构和迁移可行性 | +| **数据清洗** | 去重、纠错、标准化、编码映射 | +| **字段映射** | 原系统字段→新系统字段自动+人工映射 | +| **增量迁移** | 支持切换前最后一天的增量数据同步 | +| **数据校验** | 迁移后逐条核对,确保数据完整性 | +| **回滚预案** | 迁移失败可完整回滚,不影响业务 | + +### 6.3 培训服务体系 + +| 培训对象 | 培训内容 | 课时 | 方式 | +|---------|---------|:---:|------| +| **系统管理员** | 系统配置、用户管理、字典维护、备份恢复 | 8-16h | 现场+远程 | +| **医生** | 医生工作站、电子病历、处方、医嘱、手术申请 | 8-12h | 现场+视频 | +| **护士** | 护士工作站、医嘱执行、护理评估、体温单 | 8-12h | 现场+视频 | +| **收费员** | 挂号、收费、退费、日结、医保结算 | 4-8h | 现场 | +| **药房人员** | 发药、退药、库存管理、盘点、日结 | 4-8h | 现场 | +| **管理层** | 数据驾驶舱、统计报表、经营分析 | 2-4h | 现场+远程 | +| **院感/质控** | 院感监测、病案管理、质控操作 | 4-8h | 现场+视频 | + +> 提供培训视频和操作手册,支持新员工随时自主学习。 + +--- + +## 七、接口对接服务 + +| 接口类型 | 参考报价 | 说明 | +|---------|:------:|------| +| 检验设备对接(单台) | 0.3-0.8万 | LIS 仪器接口,支持主流品牌 | +| 影像设备对接(单台) | 0.5-1.2万 | PACS/DICOM 设备 | +| 医保平台对接 | 1-2万 | 省/国家医保平台 | +| 卫健委数据上报 | 0.8-1.5万 | HQMS/传染病直报 | +| 电子发票对接 | 0.5-1万 | 财政电子票据 | +| 银行/第三方支付 | 0.5-1万 | 微信/支付宝/银联 | +| 自助终端设备 | 0.5-1万 | 自助挂号机/取单机/报告打印机 | +| 其他第三方系统 | 0.5-2万 | 按复杂度定价 | + +--- + +## 八、售后服务分级 + +我们提供三级售后服务体系,满足不同医院的需求: + +| 服务项目 | 标准服务 | 高级服务 | 尊享服务 | +|---------|:------:|:------:|:------:| +| 适用医院 | 一级 | 二级 | 三级 | +| 首年维保 | **免费** | **免费** | **免费** | +| 续费年维保 | 软件费×15% | 软件费×15% | 软件费×12% | +| 远程支持 | 5×8h | 7×12h | 7×24h | +| 故障响应 | 4小时 | 2小时 | 1小时 | +| 现场支持 | 按需另计 | 2次/年 | 4次/年 | +| 版本升级 | 小版本免费 | 大版本免费 | 全版本免费 | +| 专属服务经理 | — | ✅ | ✅ | +| 季度巡检 | — | — | ✅ | +| 应急演练 | — | — | 1次/年 | +| 重大活动保障 | — | — | 远程值守 | + +### 服务等级协议(SLA) + +| 故障等级 | 定义 | 响应时间 | 解决时间 | +|:------:|------|:------:|:------:| +| **P0 紧急** | 系统无法使用,业务完全中断 | 30分钟 | 4小时 | +| **P1 严重** | 核心功能不可用,影响大量用户 | 1小时 | 8小时 | +| **P2 一般** | 部分功能异常,有替代方案 | 4小时 | 24小时 | +| **P3 轻微** | 界面/体验问题,不影响业务 | 8小时 | 72小时 | + +--- + +## 九、定制开发服务 + +已有 HIS 系统?也没关系。我们提供模块化定制开发服务。 + +### 9.1 人员单价 + +| 角色 | 单价(元/人天) | 说明 | +|------|:-------------:|------| +| 开发工程师 | **1,500** | 需求分析+设计+开发+自测 | +| 高级工程师 | **2,000** | 架构设计、性能优化、疑难问题 | +| 项目经理 | **1,800** | 需求调研、项目管理、交付管理 | +| 实施顾问 | **1,200** | 部署实施、培训、数据迁移 | + +### 9.2 常见定制参考价 + +| 定制项目 | 预估人天 | 参考报价 | +|---------|:------:|:------:| +| 新增业务模块(中等复杂度) | 15-25 | 2-4万 | +| 报表定制开发(单张) | 3-5 | 0.5-0.8万 | +| 第三方系统接口对接(单个) | 5-10 | 0.8-1.5万 | +| 已有模块功能增强 | 5-15 | 0.8-2.5万 | +| 流程改造/优化 | 8-20 | 1-3万 | +| 移动端功能开发 | 10-20 | 1.5-3万 | +| 大屏可视化开发 | 8-15 | 1-2.5万 | +| 单模块独立采购 | 见上方明细 | 0.3-3.5万/模块 | + +### 9.3 定制开发流程 + +``` +需求沟通(1-2天) → 方案设计与报价(2-3天) → 合同签订 → 开发实施 → 内部测试 → 用户验收 → 上线交付 +``` + +### 9.4 交付标准 + +每次定制开发交付包含: +- 功能代码(含单元测试) +- 数据库迁移脚本(Flyway 版本化) +- 接口文档(Swagger/OpenAPI 自动生成) +- 用户操作说明 +- 测试报告 + +--- + +## 十、付款方式与验收 + +### 付款节奏 + +| 阶段 | 比例 | 条件 | +|------|:---:|------| +| 合同签订 | 30% | 合同签署后 5 个工作日 | +| 系统开发完成进入测试 | 30% | 系统功能开发完成,进入内部测试阶段 | +| 系统验收 | 30% | 系统上线并通过验收 | +| 质保期满 | 10% | 首年维保期满后支付 | + +### 验收标准 + +| 验收项 | 标准 | +|--------|------| +| 功能验收 | 合同约定的核心模块功能完整可用 | +| 性能验收 | 核心页面加载 < 3秒,常规操作响应流畅 | +| 数据验收 | 历史数据迁移完成,关键数据核对无误 | +| 培训验收 | 主要岗位人员完成培训并能基本操作 | +| 稳定性 | 连续运行 3 个工作日无阻断性故障 | + +--- + +## 十一、为什么选择 HealthLink-HIS? + +| 维度 | 选择理由 | +|------|---------| +| **技术领先** | Spring Boot 4.0 + JDK 25,业内首批升级 | +| **架构扎实** | DDD 领域驱动 + Maven 多模块,业务独立演进 | +| **功能完整** | 108 个模块,14 大业务域全覆盖 | +| **质量可靠** | 2,265 次提交、1,400+ Bug 修复,持续打磨 | +| **安全合规** | JWT + 多租户隔离 + CA 签名 + 数据加密 | +| **达标有路** | 对标三甲评审标准,142 项必备能力已实现 59 项 | +| **灵活选配** | 按需选配模块,从 18 万到 120 万自由组合 | +| **灵活部署** | 支持私有云/混合云/SaaS/信创环境 | +| **持续迭代** | 首年免费维保,版本升级持续获得新功能 | + +--- + +## 联系我们 + +> **上海经创贺联信息科技有限公司** +> +> - 销售热线:18017857330 +> - 邮箱:chen.qi@jin-group.cn +> - 官网:www.health-link.com.cn +> - 地址:上海市闵行区甬虹路69号虹桥绿谷广场G座G栋505 +> +> **支持免费远程演示,欢迎扫码预约体验!** +> +> *获取您医院的定制化报价方案,只需告诉我们医院等级和核心需求。* + +--- + +## 附录:模块速查表 + +| 域 | 编号 | 模块 | 报价区间 | 基础版 | 标准版 | 旗舰版 | +|----|:---:|------|:------:|:-----:|:-----:|:-----:| +| 平台 | P-01 | 系统管理 | 1.5-2.5万 | ✅ | ✅ | ✅ | +| 平台 | P-02 | 监控运维 | 0.8-1.2万 | | ✅ | ✅ | +| 平台 | P-03 | 文件服务 | 0.3-0.8万 | ✅ | ✅ | ✅ | +| 平台 | P-04 | 工作流引擎 | 1.5-2.5万 | | ✅ | ✅ | +| 平台 | P-05 | 定时任务 | 0.5-0.8万 | ✅ | ✅ | ✅ | +| 平台 | P-06 | 代码生成器 | 0.3-0.8万 | | | ✅ | +| 平台 | P-07 | 数据导出 | 0.3-0.8万 | | ✅ | ✅ | +| 平台 | P-08 | 首页仪表板 | 0.5-1.2万 | ✅ | ✅ | ✅ | +| 门诊 | M-01 | 挂号预约 | 1.5-2.5万 | ✅ | ✅ | ✅ | +| 门诊 | M-02 | 分诊叫号 | 0.8-1.5万 | ✅ | ✅ | ✅ | +| 门诊 | M-03 | 门诊医生站 | 2-3.5万 | ✅ | ✅ | ✅ | +| 门诊 | M-04 | 门诊收费 | 1.5-2.5万 | ✅ | ✅ | ✅ | +| 门诊 | M-05 | 门诊药房 | 1-2万 | ✅ | ✅ | ✅ | +| 门诊 | M-06 | 门诊治疗 | 0.8-1.5万 | | ✅ | ✅ | +| 门诊 | M-07 | 门诊手术 | 0.5-1万 | | ✅ | ✅ | +| 住院 | H-01 | 入院管理 | 1.5-2.5万 | ✅ | ✅ | ✅ | +| 住院 | H-02 | 住院医生站 | 3-4.5万 | | ✅ | ✅ | +| 住院 | H-03 | 护士工作站 | 2-3万 | ✅ | ✅ | ✅ | +| 住院 | H-04 | 住院收费 | 1-2万 | ✅ | ✅ | ✅ | +| 住院 | H-05 | 床位管理 | 0.8-1.2万 | ✅ | ✅ | ✅ | +| 住院 | H-06 | 医嘱闭环 | 0.8-1.2万 | | ✅ | ✅ | +| 药品 | D-01 | 药品目录 | 0.8-1.5万 | | ✅ | ✅ | +| 药品 | D-02 | 药库管理 | 2-3万 | | ✅ | ✅ | +| 药品 | D-03 | 药房管理 | 1.5-2.5万 | | ✅ | ✅ | +| 药品 | D-04 | 科室物资 | 1-2万 | | ✅ | ✅ | +| 药品 | D-05 | 库存管理 | 1.5-2.5万 | | ✅ | ✅ | +| 药品 | D-06 | 药品追溯 | 0.8-1.2万 | | | ✅ | +| 药品 | D-07 | 合理用药 | 1.5-2.5万 | | ✅ | ✅ | +| 药品 | D-08 | 抗菌药物管控 | 0.8-1.2万 | | ✅ | ✅ | +| 药品 | D-09 | 处方点评 | 0.5-1万 | | ✅ | ✅ | +| 药品 | D-10 | 日终结算 | 0.3-0.6万 | | ✅ | ✅ | +| 药品 | D-11 | 药品效期 | 0.5-0.8万 | | | ✅ | +| 检验 | L-01 | 检验(LIS) | 2-3万 | | ✅ | ✅ | +| 检验 | L-02 | 危急值 | 0.5-1万 | | ✅ | ✅ | +| 检验 | L-03 | 检验质控 | 0.8-1.2万 | | | ✅ | +| 检验 | L-04 | 检验增强 | 0.8-1.2万 | | | ✅ | +| 检验 | L-05 | 检查(PACS) | 2-3万 | | ✅ | ✅ | +| 检验 | L-06 | 3D重建 | 1-1.5万 | | | ✅ | +| 检验 | L-07 | 病理 | 1-2万 | | | ✅ | +| 检验 | L-08 | 医技工作站 | 0.8-1.2万 | | ✅ | ✅ | +| 手术 | S-01 | 手术管理 | 2-3万 | | ✅ | ✅ | +| 手术 | S-02 | 术前讨论 | 0.5-1万 | | ✅ | ✅ | +| 手术 | S-03 | 麻醉管理 | 1.2-2万 | | | ✅ | +| 手术 | S-04 | 安全核查 | 0.5-0.8万 | | ✅ | ✅ | +| 手术 | S-05 | 手术记录 | 0.5-0.8万 | | | ✅ | +| 手术 | S-06 | 术后随访 | 0.3-0.6万 | | | ✅ | +| 手术 | S-07 | 麻醉质控 | 0.5-0.8万 | | | ✅ | +| 病历 | E-01 | 结构化病历 | 0.8-1.5万 | ✅ | ✅ | ✅ | +| 病历 | E-02 | 模板管理 | 0.5-1万 | ✅ | ✅ | ✅ | +| 病历 | E-03 | 修改追踪 | 0.5-0.8万 | | ✅ | ✅ | +| 病历 | E-04 | 版本管理 | 0.3-0.6万 | | ✅ | ✅ | +| 病历 | E-05 | 完整性检查 | 0.5-0.8万 | | ✅ | ✅ | +| 病历 | E-06 | 时效监控 | 0.3-0.6万 | | ✅ | ✅ | +| 病历 | E-07 | CA签名 | 0.5-1万 | | ✅ | ✅ | +| 病历 | E-08 | 病历检索 | 0.5-0.8万 | | ✅ | ✅ | +| 病历 | E-09 | 知识库 | 0.5-0.8万 | | ✅ | ✅ | +| 病历 | E-10 | 打印归档 | 0.5-0.8万 | | ✅ | ✅ | +| 病历 | E-11 | 病程记录 | 0.8-1.2万 | | ✅ | ✅ | +| 病历 | E-12 | 知情同意 | 0.5-0.8万 | | ✅ | ✅ | +| 病案 | R-01 | 病案首页 | 1-2万 | | ✅ | ✅ | +| 病案 | R-02 | 病案质控 | 0.8-1.2万 | | ✅ | ✅ | +| 病案 | R-03 | DRG/DIP | 1-2万 | | | ✅ | +| 病案 | R-04 | 归档 | 0.5-0.8万 | | ✅ | ✅ | +| 病案 | R-05 | 借阅/封存 | 0.5-1万 | | ✅ | ✅ | +| 病案 | R-06 | 死亡讨论 | 0.3-0.5万 | | | ✅ | +| 病案 | R-07 | 病案评审 | 0.5-0.8万 | | | ✅ | +| 护理 | N-01 | 护理评估 | 1.5-2.5万 | | ✅ | ✅ | +| 护理 | N-02 | 护理计划 | 0.5-1万 | | ✅ | ✅ | +| 护理 | N-03 | 交班记录 | 0.5-0.8万 | | ✅ | ✅ | +| 护理 | N-04 | 移动护理 | 0.8-1.2万 | | | ✅ | +| 护理 | N-05 | 输液管理 | 0.5-0.8万 | | | ✅ | +| 护理 | N-06 | 评估趋势 | 0.5-0.8万 | | | ✅ | +| 护理 | N-07 | 护理质控 | 0.5-0.8万 | | ✅ | ✅ | +| 护理 | N-08 | 护理文书 | 0.5-0.8万 | | | ✅ | +| 院感 | I-01 | 感染监测 | 0.8-1.2万 | | ✅ | ✅ | +| 院感 | I-02 | 暴发预警 | 0.5-0.8万 | | ✅ | ✅ | +| 院感 | I-03 | 目标监测 | 0.5-0.8万 | | | ✅ | +| 院感 | I-04 | 手卫生 | 0.3-0.6万 | | | ✅ | +| 院感 | I-05 | 环境监测 | 0.3-0.6万 | | | ✅ | +| 院感 | I-06 | 耐药菌 | 0.5-0.8万 | | ✅ | ✅ | +| 院感 | I-07 | 职业暴露 | 0.3-0.6万 | | | ✅ | +| 院感 | I-08 | CSSD | 0.8-1.2万 | | | ✅ | +| 医保 | Y-01 | 基础结算 | 0.8-1.5万 | ✅ | ✅ | ✅ | +| 医保 | Y-02 | 目录对照 | 0.8-1.5万 | | ✅ | ✅ | +| 医保 | Y-03 | 医保对账 | 0.8-1.2万 | | ✅ | ✅ | +| 医保 | Y-04 | 处方上传 | 0.5-1万 | | ✅ | ✅ | +| 医保 | Y-05 | 住院医保 | 0.8-1.5万 | | ✅ | ✅ | +| 医保 | Y-06 | 跨省结算 | 0.5-1万 | | | ✅ | +| 医保 | Y-07 | 智能审核 | 0.8-1.5万 | | | ✅ | +| 医保 | Y-08 | DRG优化 | 0.5-1万 | | | ✅ | +| 其他 | O-01 | 急诊管理 | 1-2万 | | ✅ | ✅ | +| 其他 | O-02 | 随访管理 | 0.8-1.5万 | | ✅ | ✅ | +| 其他 | O-03 | 中医/壮医 | 0.8-1.2万 | | | ✅ | +| 其他 | O-04 | 会诊管理 | 0.8-1.2万 | | ✅ | ✅ | +| 其他 | O-05 | 传染病 | 0.8-1.2万 | | ✅ | ✅ | +| 其他 | O-06 | 调价管理 | 0.5-1万 | ✅ | ✅ | ✅ | +| 其他 | O-07 | 支付管理 | 0.8-1.5万 | | ✅ | ✅ | +| 其他 | O-08 | 医嘱套餐 | 0.5-1万 | | ✅ | ✅ | +| 其他 | O-09 | 医嘱闭环 | 0.5-1万 | | | ✅ | +| 其他 | O-10 | 跨模块集成 | 1-2万 | | | ✅ | +| 其他 | O-11 | 质量管理 | 0.5-1万 | ✅ | ✅ | ✅ | +| 其他 | O-12 | 食源性采集 | 0.3-0.6万 | | | ✅ | +| 集成 | J-01 | ESB平台 | 1.5-2.5万 | | | ✅ | +| 集成 | J-02 | FHIR R4 | 0.8-1.2万 | | | ✅ | +| 集成 | J-03 | CDA文档 | 0.8-1.2万 | | | ✅ | +| 集成 | J-04 | 代码映射 | 0.5-0.8万 | | | ✅ | +| 集成 | J-05 | API认证 | 0.3-0.6万 | | | ✅ | +| 集成 | J-06 | EMPI | 0.8-1.5万 | | | ✅ | + +--- + +*HealthLink-HIS — 让医疗信息化更透明、更可靠、更智能。* + +*基于代码库实际分析:108 个业务模块 | 181+ 数据库表 | 230+ 控制器 | 209+ 前端页面* +*工程师单价基准:1,500 元/人天* diff --git a/MD/HEALTHLINK_HIS_PRICING_v0.1.docx b/MD/HEALTHLINK_HIS_PRICING_v0.1.docx new file mode 100644 index 0000000000000000000000000000000000000000..cc4e0c4eba522d6ff0108646ea8438aad917812a GIT binary patch literal 187278 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 z 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ξ4bo?dMT6JsT6UCpr> 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 **上海经创贺联信息科技有限公司** + +--- + +距离 2027 年全面信创替代的最后期限,只剩不到一年半。 + +对于公立医院来说,这已经不是"要不要做"的问题,而是"来不来得及"的问题。从操作系统到数据库,从中间件到芯片,全栈国产化替代正在从党政领域向医疗、金融、电信等八大关键行业全面铺开。 + +**而在所有需要替代的系统中,HIS(医院信息系统)可能是最难啃的那块骨头。** + +--- + +## 一、信创替代,到底在替代什么? + +"信创"全称是**信息技术应用创新**,核心目标是实现关键信息系统的**自主可控**,摆脱对国外底层技术的依赖。 + +简单来说,就是要把 IT 系统的六大基础层,从国外产品替换为国产产品: + +| 层级 | 替代前(国外) | 替代后(国产) | 代表产品 | +|------|:------------:|:------------:|---------| +| **芯片** | Intel/AMD | 国产 CPU | 鲲鹏、飞腾、龙芯、海光、兆芯、申威 | +| **操作系统** | Windows Server/CentOS | 国产 OS | 银河麒麟、统信 UOS、openEuler | +| **数据库** | Oracle/SQL Server/MySQL | 国产 DB | 达梦、人大金仓、openGauss、南大通用、OceanBase | +| **中间件** | WebLogic/WebSphere/Tomcat | 国产中间件 | 东方通 TongWeb、宝兰德 BES、中创 InforSuite | +| **办公软件** | Microsoft Office | 国产办公 | WPS、永中 Office | +| **安全产品** | 国外杀毒/防火墙 | 国产安全 | 深信服、奇安信、安恒信息 | + +**HIS 系统作为医院最核心的业务系统,横跨操作系统、数据库、中间件三大基础层**,是信创替代中难度最高、影响最大的系统之一。 + +--- + +## 二、医疗信创,时间线有多紧? + +### 政策脉络 + +| 时间 | 事件 | 影响 | +|------|------|------| +| 2020年 | 信创"2+8"体系确立 | 党政(2)+ 金融、电信、电力、石油、交通、教育、**医疗**、航空航天(8) | +| 2022年 | 国资委 79 号文 | 要求央企国企 2027 年前完成全面信创替代 | +| 2023年 | 医疗信创启动试点 | 首批试点医院开始非核心系统替代 | +| 2024年 | 信创进入加速期 | 多省发文要求公立医院制定信创替代计划 | +| 2025年 | **核心系统落地大年** | HIS、PACS、LIS 等核心临床系统开始规模化替代 | +| 2026年 | 全面推广期 | 基层医疗机构(二级以下)全面推进 | +| **2027年** | **全面替代截止** | **央企国企+公立医院 100% 信创替代** | + +### 医疗行业的特殊挑战 + +与其他行业不同,医疗信创面临三重挑战: + +- **业务连续性要求极高**:HIS 系统 7×24 小时运行,停机迁移意味着患者无法挂号、医生无法开方、药房无法发药 +- **数据量大且复杂**:一家三级医院的 HIS 数据库动辄数百张表、千万级记录,迁移不能丢一条数据 +- **上下游接口众多**:HIS 要对接医保、检验设备、影像设备、电子发票、卫健委上报等十几个外部系统,替代后所有接口都得重新验证 + +**这意味着:HIS 系统的信创替代,不是简单的"换个操作系统装一遍",而是要从架构层面就支持国产化全栈运行。** + +--- + +## 三、HealthLink-HIS 的信创合规实践 + +HealthLink-HIS 从架构设计之初就充分考虑了信创适配需求。我们的策略是:**不绑定任何单一国产产品,而是做到全栈兼容、灵活适配。** + +### 3.1 技术架构天然适配信创 + +| 技术层 | HealthLink-HIS 选型 | 信创优势 | +|--------|:------------------:|---------| +| **开发语言** | Java(Spring Boot 4.0.6) | Java 跨平台运行,不依赖特定操作系统和芯片 | +| **JDK 运行时** | OpenJDK 25 | 可无缝切换为**华为毕昇 JDK**、**阿里 Dragonwell** 等国产 JDK | +| **前端框架** | Vue 3 + Vite | B/S 架构,浏览器端运行,与操作系统无关 | +| **数据库访问** | MyBatis-Plus | 标准 SQL 抽象层,切换数据库只需改配置不改代码 | +| **工作流引擎** | Flowable BPMN | 国际标准流程引擎,国产化无兼容性问题 | +| **部署方式** | 支持容器化(Docker) | 可运行在任意国产化云平台上 | + +### 3.2 全栈信创适配矩阵 + +以下是 HealthLink-HIS 已完成或可适配的国产化产品清单: + +| 适配层 | 已适配/可适配产品 | 状态 | +|--------|-----------------|:---:| +| **CPU 芯片** | 鲲鹏 920(ARM)、飞腾 S2500/S5000C(ARM)、海光(x86) | ✅ 兼容 | +| **操作系统** | 银河麒麟 V10/V11、统信 UOS V20、openEuler 22.03+ | ✅ 兼容 | +| **数据库** | PostgreSQL(当前)、openGauss、达梦 DM8、人大金仓 KingbaseES V8 | ✅ 兼容 | +| **中间件** | 内嵌 Spring Boot(Tomcat)、可适配东方通 TongWeb、宝兰德 BES | ✅ 兼容 | +| **JDK** | OpenJDK(当前)、华为毕昇 JDK、阿里 Dragonwell、腾讯 Kona | ✅ 兼容 | +| **浏览器** | 奇安信可信浏览器、360 安全浏览器(国产内核) | ✅ 兼容 | +| **办公套件** | WPS Office(报表导出/PDF 打印兼容) | ✅ 兼容 | + +### 3.3 为什么 Java + Spring Boot 是 HIS 信创的最优解? + +在医疗信创领域,HIS 系统的技术路线大致分为三类: + +| 技术路线 | 代表 | 信创适配难度 | 风险 | +|---------|------|:----------:|------| +| **C/S + .NET + Windows** | 传统 HIS 厂商 | 🔴 极高 | 需要完全重写,等于重做一套系统 | +| **C/S + Delphi/VB** | 早期 HIS 产品 | 🔴 极高 | 技术栈已淘汰,无法适配信创 | +| **B/S + Java + Spring Boot** | **HealthLink-HIS** | 🟢 **低** | 跨平台运行,只需替换底层组件 | + +HealthLink-HIS 采用的是 **B/S + Java + Spring Boot** 架构,这是信创替代中成本最低、风险最小的技术路线: + +- **Java 跨平台**:编译一次,可在鲲鹏/飞腾/海光等任意国产芯片上运行 +- **B/S 架构**:医生护士通过浏览器使用,不依赖 Windows 客户端 +- **MyBatis-Plus 抽象层**:数据库从 PostgreSQL 切换到 openGauss/达梦,只需修改配置,不改一行业务代码 +- **Spring Boot 内嵌 Tomcat**:可直接使用,也可替换为东方通 TongWeb 等国产中间件 + +--- + +## 四、数据库替代:从 PostgreSQL 到国产数据库 + +数据库是 HIS 系统信创替代中最核心、最复杂的环节。HealthLink-HIS 支持以下国产数据库无缝切换: + +### 4.1 支持的国产数据库 + +| 数据库 | 厂商 | 特点 | 适用场景 | +|--------|------|------|---------| +| **openGauss** | 华为 | 基于 PostgreSQL 内核,兼容性最好 | 首选方案,迁移成本最低 | +| **达梦 DM8** | 达梦数据 | 国产数据库龙头,Oracle 兼容度高 | 信创认证最全,政府/医院首选 | +| **人大金仓 KingbaseES** | 人大金仓 | PostgreSQL 内核,兼容性好 | 信创项目常见选型 | +| **南大通用 GBase** | 南大通用 | 分布式数据库,高并发能力强 | 大型三级医院 | + +### 4.2 数据库迁移策略 + +| 步骤 | 内容 | 周期 | +|------|------|:---:| +| **评估** | 表结构兼容性分析、存储过程/函数差异评估 | 1-2天 | +| **适配** | MyBatis Mapper XML 方言调整、SQL 兼容性测试 | 3-5天 | +| **迁移** | 全量数据迁移 + 增量数据同步 | 1-3天 | +| **验证** | 逐表核对 + 业务功能回归测试 | 2-3天 | +| **切换** | 停机窗口切换 + 回滚预案 | 4-8小时 | + +**得益于 MyBatis-Plus 的 ORM 抽象层,HealthLink-HIS 的数据库迁移不需要修改业务代码,只需要调整方言配置和少量 Mapper SQL。** + +--- + +## 五、信创部署方案 + +### 5.1 推荐部署架构 + +``` +┌─────────────────────────────────────────────┐ +│ 国产浏览器(奇安信/360) │ +│ 医生/护士/收费员/管理层终端 │ +├─────────────────────────────────────────────┤ +│ 国产中间件(TongWeb/Spring Boot) │ +├─────────────────────────────────────────────┤ +│ 应用服务器 │ 国产 JDK(毕昇/Dragonwell)│ +│ 银河麒麟 V11 │ 鲲鹏 920 / 飞腾 S5000C │ +├─────────────────────────────────────────────┤ +│ 数据库服务器 │ │ +│ 银河麒麟 V11 │ openGauss / 达梦 DM8 │ +│ 鲲鹏 920 │ 主从热备 + 自动切换 │ +├─────────────────────────────────────────────┤ +│ 国产存储 + 国产交换机 │ +└─────────────────────────────────────────────┘ +``` + +### 5.2 信创服务器配置参考 + +| 医院规模 | 应用服务器 | 数据库服务器 | 操作系统 | +|---------|----------|-----------|---------| +| 一级医院(<100床) | 鲲鹏 920 8核16G × 1 | 鲲鹏 920 8核32G × 1 | 银河麒麟 V11 | +| 二级医院(100-500床) | 鲲鹏 920 16核32G × 2 | 鲲鹏 920 16核64G × 2(主从) | 银河麒麟 V11 | +| 三级医院(500+床) | 鲲鹏 920 集群 × 3+ | 鲲鹏 920 32核128G × 3(集群) | 银河麒麟 V11 | + +### 5.3 信创适配认证 + +HealthLink-HIS 可提供以下信创适配证明材料: +- 操作系统兼容性测试报告 +- 数据库迁移验证报告 +- 国产 CPU 运行性能测试报告 +- 全栈信创环境部署手册 +- 信创环境功能回归测试报告 + +--- + +## 六、信创替代不是推倒重来 + +很多医院对信创替代最大的顾虑是:**"我现在的 HIS 用得好好的,换信创会不会把系统搞崩?"** + +答案是:**选对技术路线,信创替代可以做到平滑过渡。** + +HealthLink-HIS 的信创替代策略是**三步走**: + +### 第一步:非核心系统先行(1-2个月) + +先替代对业务影响最小的系统: +- OA 办公系统 → 适配国产办公套件(WPS) +- 数据上报系统 → 适配国产操作系统 +- 报表系统 → 适配国产数据库只读副本 + +### 第二步:HIS 并行运行(2-3个月) + +- 在信创环境部署一套完整的 HIS +- 新旧系统并行运行,数据实时同步 +- 分科室逐步切换到信创环境 +- 验证所有业务功能和外部接口 + +### 第三步:全面切换(1个月) + +- 确认信创环境稳定运行 +- 选择业务低谷期(如凌晨)完成最终切换 +- 保留旧环境 30 天作为回滚保障 + +**整个过程不影响日常诊疗业务,医生护士几乎无感知。** + +--- + +## 七、信创合规 + 业务功能,一次到位 + +选择 HealthLink-HIS,不需要在"信创合规"和"业务功能"之间做取舍。 + +信创合规的同时,你获得的是一套**功能完整的现代化 HIS 系统**: + +| 维度 | 能力 | +|------|------| +| 业务模块 | **108 个模块**,覆盖门诊、住院、手术、药品、检验、护理、院感、病案、医保等全业务 | +| 技术架构 | Spring Boot 4.0.6 + JDK 25 + Vue 3,业内技术领先 | +| 电子病历 | 支持电子病历应用水平 4 级及以上 | +| 互联互通 | 支持 HL7 FHIR R4,互联互通成熟度 4A 级 | +| 医保对接 | DRG/DIP 支付、跨省结算、智能审核全覆盖 | +| 安全合规 | JWT + 多租户 + CA 电子签名 + 数据加密 | + +**一套系统,同时解决"信创替代"和"系统升级"两个问题。** + +--- + +## 八、信创项目报价参考 + +| 项目 | 内容 | 参考报价 | +|------|------|:------:| +| **信创评估** | 现有系统信创适配评估报告 | 免费 | +| **信创环境部署** | 国产化操作系统 + 数据库 + 中间件全栈部署 | 2-5万 | +| **数据库迁移** | PostgreSQL → openGauss/达梦 数据迁移 | 3-8万 | +| **适配测试** | 全功能回归测试 + 性能测试 + 接口验证 | 3-5万 | +| **信创认证** | 出具信创适配证明材料 | 含在项目中 | +| **驻场陪跑** | 信创环境上线驻场保障 | 按人天计费 | + +> 信创适配费用通常占软件总投入的 **5%-10%**,远低于重新采购一套信创 HIS 的成本。 + +--- + +## 九、2027 倒计时,现在该做什么? + +| 时间节点 | 建议行动 | +|---------|---------| +| **现在** | 启动信创评估,了解现有系统的国产化适配难度 | +| **2026 Q1** | 完成信创环境选型(芯片/OS/数据库/中间件) | +| **2026 Q2-Q3** | 完成 HIS 系统信创适配和并行测试 | +| **2026 Q4** | 完成全面切换,进入稳定运行期 | +| **2027 Q1** | 完成信创验收,准备上级检查 | + +**早启动 = 低风险。晚启动 = 赶工期 + 出问题。** + +--- + +## 联系我们 + +> **上海经创贺联信息科技有限公司** +> +> - 销售热线:18017857330 +> - 邮箱:chen.qi@jin-group.cn +> - 官网:www.health-link.com.cn +> - 地址:上海市闵行区甬虹路69号虹桥绿谷广场G座G栋505 +> +> **免费信创适配评估,欢迎扫码预约!** +> +> *告诉我们您医院的现有系统情况,我们为您定制信创替代方案。* + +--- + +*HealthLink-HIS — 信创合规,从架构开始。* + +Sources: +- [医疗信创攻坚倒计时](https://m.10jqka.com.cn/20260511/c676597362.html) +- [HIS系统信创政策要求汇总](https://gxhis.net/736.html) +- [2027年信创国产化替代路线图](https://cj.sina.com.cn/articles/view/6106520611/16bfa1c23001018pso) +- [信创IT领域国产化清单](https://m.sohu.com/a/1016047401_121624698/) +- [信创适配目录名单](https://m.sohu.com/a/1012969695_122411481) +- [天天开源 OpenHIS](https://gitee.com/TTopen) diff --git a/MD/HEALTHLINK_HIS_XINCHUANG_v2.docx b/MD/HEALTHLINK_HIS_XINCHUANG_v2.docx new file mode 100644 index 0000000000000000000000000000000000000000..fc343359aabb4c6d7e3c97a6fd4ff6274f1baf08 GIT binary patch literal 122839 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 w*@3R2T 版本: 1.0 | 日期: 2026-06-14 | 状态: 待确认 + +--- + +## 一、现状诊断 + +### 1.1 三个入口的实际内容 + +| 入口 | 菜单ID | 实际内容 | 代码量 | 后端 | +|------|--------|---------|--------|------| +| **住院医生工作站** | 288 | 8个tab集成:EMR + 诊断 + 医嘱 + 检验/检查/手术/输血申请 + 报告 | 诊断1072行 + 医嘱2971行 + EMR1139行 | `doctor-station/*` `reg-doctorstation/*` `document/*` | +| **住院医生增强** | 20171 | 只有1个子菜单:住院病历(EMR) | 和工作站共用同一个emr/index.vue | `document/*` | +| **住院增强** | 20221 | 6个独立子模块(1个已禁用) | 各模块独立代码 | 混用多套后端 | + +### 1.2 住院增强子模块完成度 + +| 子模块 | 状态 | 实际功能 | 后端接口 | 与工作站重叠度 | +|--------|------|---------|---------|--------------| +| 住院结算 | 可用 | 完整结算流程(中途/出院/取消) | `/in-hospital-charge/*` | **无重叠**(工作站没有) | +| 费用类型转换 | 可用 | 费用性质转换 | `/in-hospital-charge/*` | **无重叠**(工作站没有) | +| 住院诊断 | 可用 | 简易CRUD(手输就诊ID,无诊断树) | `/inpatient-manage/diagnosis/*` | **高重叠**(工作站有完整版) | +| ~~住院病历~~ | 已禁用 | 静态假数据原型 | 无 | 已禁用 | +| 医嘱管理 | 可用 | 只读 + 停嘱/恢复/签退 | `/reg-doctorstation/*` | **高重叠**(工作站有完整版) | +| 住院手术 | 可用 | 完整CRUD + 状态流转 | `/clinical-manage/surgery/*` | **无重叠**(工作站只有手术申请) | + +### 1.3 核心问题 + +1. **命名误导**:"增强"暗示是原版的升级,实际是**并行的独立模块** +2. **功能重复**:诊断、医嘱在两个入口都有,但实现和后端完全不同 +3. **体验割裂**:住院增强的子模块没有统一患者选择器,每个模块手动输就诊ID +4. **代码冗余**:住院增强的诊断/医嘱是工作站的**降级复制品** + +--- + +## 二、整合方案 + +### 2.1 设计原则 + +- **一个医生入口**:医生的所有住院操作在一个页面完成 +- **按角色分离**:护士/收费员/管理员有独立入口 +- **共享后端**:同一业务逻辑只有一套后端接口 +- **保留独立模块**:手术管理、结算等独有功能保留为独立入口 + +### 2.2 目标架构 + +``` +住院管理 (235) +├── 住院医生工作站 (288) ← 唯一的医生入口,保持现状 +│ ├── 住院病历 (EMR) +│ ├── 诊断录入 +│ ├── 临床医嘱 +│ ├── 检验/检查/手术/输血申请 +│ └── 报告查询 +│ +├── 住院护士工作站 (新建) ← 护士独立入口 +│ ├── 护理记录 +│ ├── 生命体征 +│ └── 医嘱执行 +│ +├── 住院手术管理 (20228) ← 保留独立入口(独有功能) +│ +├── 住院结算 (20222) ← 保留独立入口(独有功能) +├── 费用类型转换 (20223) ← 保留独立入口(独有功能) +│ +└── 住院医生增强 (20171) ← 废弃,删除菜单 +``` + +### 2.3 具体操作 + +#### 第一步:废弃「住院医生增强」(0代码改动) + +`住院医生增强` 只是 EMR 的快捷方式,医生工作站已有完整 EMR tab。 + +```sql +-- 停用菜单 20171(住院医生增强)及其子菜单 20172(住院病历) +UPDATE sys_menu SET status = 1, visible = 1 WHERE menu_id IN (20171, 20172); +``` + +**影响**:无。医生工作站的 EMR tab 不受影响。 + +#### 第二步:废弃「住院增强」中的重复模块 + +| 子模块 | 操作 | 原因 | +|--------|------|------| +| 住院诊断 (20224) | 停用 | 医生工作站诊断录入已完整覆盖(含诊断树、中医、食源性疾病) | +| 医嘱管理 (20226) | 停用 | 医生工作站临床医嘱已完整覆盖(含新增、签发、组套) | +| 住院病历 (20225) | 已停用 | 静态原型 | + +```sql +-- 停用重复模块 +UPDATE sys_menu SET status = 1, visible = 1 WHERE menu_id IN (20224, 20226); +``` + +#### 第三步:保留「住院增强」中的独有模块 + +| 子模块 | 操作 | 原因 | +|--------|------|------| +| 住院结算 (20222) | 保留 | 医生工作站没有结算功能 | +| 费用类型转换 (20223) | 保留 | 医生工作站没有此功能 | +| 住院手术 (20228) | 保留 | 医生工作站只有手术申请,没有手术管理(状态流转) | + +#### 第四步:清理「住院增强」目录结构 + +停用重复模块后,`住院增强` 目录下只剩 3 个有效子模块。考虑重命名目录为更准确的名称: + +```sql +-- 重命名目录为更准确的名称 +UPDATE sys_menu SET menu_name = '住院辅助功能', path = 'inHospitalAuxiliary' +WHERE menu_id = 20221; +``` + +--- + +## 三、对比详情 + +### 3.1 诊断模块对比 + +| 能力 | 医生工作站诊断 | 住院增强诊断 | +|------|--------------|------------| +| 诊断树(ICD编码) | ✅ 树形选择 | ❌ 手动输入 | +| 中医诊断 | ✅ 完整支持 | ❌ 不支持 | +| 西医诊断 | ✅ 完整支持 | ✅ 基本支持 | +| 诊断排序 | ✅ 可调整 | ❌ 不支持 | +| 主诊断标记 | ✅ | ✅ | +| 食源性疾病上报 | ✅ 自动触发 | ❌ 不支持 | +| 历史/常用诊断 | ✅ 分类展示 | ❌ 不支持 | +| 患者选择 | ✅ 左侧患者列表 | ❌ 手动输就诊ID | + +**结论**:住院增强诊断是医生工作站诊断的**降级版**,没有保留价值。 + +### 3.2 医嘱模块对比 + +| 能力 | 医生工作站医嘱 | 住院增强医嘱 | +|------|--------------|------------| +| 新增医嘱 | ✅ 完整表单(药品/项目/用法/频次) | ❌ 不支持 | +| 签发处方 | ✅ | ❌ 不支持 | +| 组套管理 | ✅ | ❌ 不支持 | +| 历史医嘱 | ✅ | ✅ | +| 停嘱/恢复 | ✅ | ✅ | +| 签退 | ✅ | ✅ | +| 组合/拆组 | ✅ | ❌ 不支持 | +| 转科/出院 | ✅ | ❌ 不支持 | +| 费用性质选择 | ✅ | ❌ 不支持 | +| 患者选择 | ✅ 左侧患者列表 | ✅ 左侧患者列表 | + +**结论**:住院增强医嘱只能看和停,不能开。是医生工作站的**只读子集**。 + +### 3.3 手术模块对比 + +| 能力 | 医生工作站 | 住院增强手术 | +|------|-----------|------------| +| 手术申请 | ✅(作为申请单) | ❌ 不支持申请 | +| 手术管理 | ❌ 无 | ✅ 完整CRUD + 状态流转 | +| 手术排期 | ❌ 无 | ✅ 计划时间 | +| 状态流转 | ❌ 无 | ✅ 待手术→手术中→已完成 | + +**结论**:两者是**互补关系**,不是重复。手术管理是独有功能,应保留。 + +--- + +## 四、后续优化建议(不在本次范围) + +1. **统一患者选择器**:将 `PatientList` 组件抽为全局共享,所有住院模块复用 +2. **护士工作站独立化**:目前护理功能散落在医生工作站的 tab 中,应独立为护士入口 +3. **手术申请→手术管理联动**:医生工作站的手术申请完成后,自动同步到手术管理模块 +4. **结算与医嘱联动**:医嘱签发后自动计入费用,减少人工操作 + +--- + +## 五、执行清单 + +| 序号 | 操作 | 风险 | 验证 | +|------|------|------|------| +| 1 | 停用菜单 20171, 20172(住院医生增强) | 无 | 刷新侧边栏确认不显示 | +| 2 | 停用菜单 20224(住院诊断) | 低 | 确认无其他模块引用 | +| 3 | 停用菜单 20226(医嘱管理) | 低 | 确认无其他模块引用 | +| 4 | 重命名菜单 20221(住院增强→住院辅助功能) | 无 | 刷新侧边栏确认名称更新 | +| 5 | 清理已禁用模块的前端代码(可选) | 低 | 编译通过 | + +> ⚠️ 所有操作通过 SQL 菜单调整,不涉及代码改动,可随时回滚。 \ No newline at end of file diff --git a/MD/design/CODEBASE_REALITY_CHECK.md b/MD/design/CODEBASE_REALITY_CHECK.md new file mode 100644 index 000000000..525d8bed1 --- /dev/null +++ b/MD/design/CODEBASE_REALITY_CHECK.md @@ -0,0 +1,215 @@ +na# HealthLink-HIS 代码库真实实现状态分析 + +> **文档类型**: 代码审计 +> **版本**: v1.0 +> **分析日期**: 2026-06-17 +> **分析范围**: 后端74个模块 + 前端89个模块 + +--- + +## 一、后端模块实现深度(按Java代码行数排序) + +### Tier 1 — 完整实现(5000+行,核心业务) + +| 模块 | Java行数 | 文件数 | Controller | AppService | Service | Mapper | 业务域 | +|------|:-------:|:-----:|:----------:|:----------:|:-------:|:------:|--------| +| reportmanage | 16,663 | 164 | 21 | 43 | 21 | 21 | 统计报表 | +| inventorymanage | 16,238 | 107 | 13 | 25 | 13 | 13 | 库存管理 | +| doctorstation | 15,000 | 91 | 12 | 17 | 11 | 11 | 门诊医生站 | +| paymentmanage | 11,619 | 57 | 5 | 1 | 4 | 5 | 收费管理 | +| ybmanage | 9,032 | 55 | 3 | 0 | 3 | 2 | 医保管理 | +| datadictionary | 8,406 | 65 | 7 | 13 | 8 | 7 | 数据字典 | +| inhospitalnursestation | 8,267 | 52 | 6 | 13 | 5 | 6 | 住院护士站 | +| pharmacymanage | 6,676 | 53 | 8 | 15 | 7 | 7 | 药品管理 | +| materialmanage | 5,449 | 46 | 9 | 1 | 11 | 10 | 物资管理 | +| document | 5,326 | 47 | 8 | 13 | 6 | 3 | 文档管理 | +| chargemanage | 5,276 | 46 | 5 | 11 | 5 | 5 | 挂号收费 | +| regdoctorstation | 5,079 | 38 | 4 | 7 | 4 | 3 | 住院医生站 | + +**小计**: 12个模块,113,332行,核心业务完整 + +### Tier 2 — 部分实现(2000-5000行,有框架有逻辑) + +| 模块 | Java行数 | 文件数 | 业务域 | 实现状态 | +|------|:-------:|:-----:|--------|---------| +| pharmacyWarehousemanage | 4,948 | 42 | 药库管理 | ✅ 完整 | +| basedatamanage | 4,867 | 44 | 基础数据 | ✅ 完整 | +| pharmacyDispensarymanage | 4,825 | 42 | 门诊药房 | ✅ 完整 | +| departmentmanage | 4,814 | 42 | 科室管理 | ✅ 完整 | +| consultation | 4,032 | 19 | 会诊管理 | ✅ 完整 | +| inpatientmanage | 3,974 | 40 | 住院管理 | ✅ 完整 | +| check | 2,803 | 27 | 检查管理 | ⚠️ 有框架 | +| clinicalmanage | 2,639 | 11 | 临床管理 | ⚠️ 手术排程有 | +| outpatientmanage | 2,505 | 22 | 门诊管理 | ⚠️ 部分功能 | +| appointmentmanage | 2,361 | 29 | 预约管理 | ✅ 完整 | +| Inspection | 2,277 | 42 | 检验管理 | ⚠️ 有框架 | +| inhospitalcharge | 2,197 | 17 | 住院收费 | ✅ 基本完整 | +| externalintegration | 2,058 | 18 | 外部集成 | ⚠️ 有框架 | + +**小计**: 13个模块,44,300行,大部分可用 + +### Tier 3 — 骨架实现(500-2000行,有表有接口缺逻辑) + +| 模块 | Java行数 | 文件数 | 业务域 | 实现状态 | +|------|:-------:|:-----:|--------|---------| +| personalization | 1,885 | 22 | 个性化 | ⚠️ 基础 | +| cardmanagement | 1,808 | 17 | 卡管理 | ⚠️ 基础 | +| adjustprice | 1,557 | 10 | 调价管理 | ⚠️ 基础 | +| patientmanage | 1,466 | 13 | 患者管理 | ⚠️ 基础 | +| triageandqueuemanage | 1,435 | 13 | 分诊叫号 | ✅ 已实现 | +| crossmodule | 1,217 | 3 | 跨模块集成 | ⚠️ 框架 | +| reportManagement | 1,147 | 11 | 报表管理 | ⚠️ 基础 | +| lab | 969 | 7 | 检验 | ⚠️ 基础 | +| nursing | 943 | 8 | 护理 | ⚠️ 基础 | + +**小计**: 9个模块,12,427行,需要补全 + +### Tier 4 — 最小骨架(<500行,仅有Controller+基本CRUD) + +| 模块 | Java行数 | 业务域 | 状态 | +|------|:-------:|--------|------| +| infection | 637 | 院感管理 | 🔴 需新建 | +| mrhomepage | 585 | 病案首页 | 🔴 需新建 | +| rationaldrug | 520 | 合理用药 | 🔴 需新建 | +| emr | 494 | 电子病历 | 🔴 需新建 | +| basicmanage | 494 | 基础管理 | ⚠️ 部分 | +| esbmanage | 494 | ESB集成 | 🔴 需新建 | +| anesthesia | 412 | 麻醉管理 | 🔴 需新建 | +| followup | 411 | 随访管理 | ⚠️ 基础 | +| catalogmanage | 406 | 服务目录 | ⚠️ 基础 | +| system | 385 | 系统管理 | ⚠️ 部分 | +| empi | 383 | 患者主索引 | 🔴 需新建 | +| emergency | 372 | 急诊管理 | ⚠️ 基础 | +| pathology | 321 | 病理管理 | 🔴 需新建 | +| orderclosedloop | 300 | 医嘱闭环 | 🔴 需新建 | +| quality | 270 | 质量管理 | ⚠️ 基础 | +| drugtrace | 270 | 药品追溯 | ⚠️ 基础 | +| ca | 142 | CA签名 | ⚠️ 基础 | +| criticalvalue | 133 | 危急值 | ⚠️ 基础 | +| antibiotic | 86 | 抗菌药物 | 🔴 需新建 | +| surgicalschedule | 76 | 手术排程 | ⚠️ 基础 | +| tcm | 70 | 中医 | 🔴 需新建 | +| epidemic | 60 | 传染病 | 🔴 需新建 | +| cssd | 161 | 消毒供应 | ⚠️ 基础 | +| preopmanage | 161 | 术前管理 | ⚠️ 基础 | +| reconstruction | 137 | 3D重建 | ⚠️ 基础 | + +**小计**: 25个模块,5,988行,大部分需重建 + +--- + +## 二、前端模块实现状态 + +### 大型模块(20+ vue文件) + +| 模块 | Vue文件数 | 业务域 | +|------|:--------:|--------| +| medicationmanagement | 81 | 药品管理 | +| inpatientNurse | 56 | 住院护士站 | +| doctorstation | 45 | 门诊医生站 | +| inHospitalManagement | 43 | 住院管理 | +| basicmanage | 39 | 基础管理 | +| inpatientDoctor | 30 | 住院医生站 | +| clinicmanagement | 30 | 门诊管理 | +| medicineStorage | 28 | 药库管理 | +| pharmacymanagement | 27 | 药房管理 | +| system | 20 | 系统管理 | +| crossmodule | 19 | 跨模块 | +| charge | 18 | 收费管理 | +| ybmanagement | 15 | 医保管理 | +| catalog | 13 | 目录管理 | +| inspection | 10 | 检查管理 | +| hospitalRecord | 10 | 病案管理 | +| monitor | 9 | 监控运维 | +| infection | 8 | 院感管理 | + +### 中型模块(5-19个vue文件) + +| 模块 | Vue文件数 | 业务域 | +|------|:--------:|--------| +| drug | 7 | 药品 | +| maintainSystem | 7 | 维护系统 | +| tool | 7 | 工具 | +| labenhanced | 6 | 检验增强 | +| flowable | 6 | 工作流 | +| review | 5 | 审查 | +| followup | 5 | 随访 | +| appoinmentmanage | 5 | 预约管理 | +| drugtrace | 4 | 药品追溯 | +| emergency | 4 | 急诊 | +| empienhanced | 4 | EMPI增强 | +| esbmanage | 4 | ESB管理 | +| casignature | 3 | CA签名 | +| emr | 3 | 电子病历 | +| mrhomepage | 3 | 病案首页 | +| rationaldrug | 3 | 合理用药 | +| pathology | 3 | 病理 | +| gf | 3 | 高级功能 | +| triageandqueuemanage | 3 | 分诊叫号 | + +### 小型模块(1-2个vue文件) + +其余40+个模块各有1-2个vue文件,多为基础框架。 + +--- + +## 三、关键发现 + +### 3.1 已完整实现的核心流程(6条) + +| # | 流程 | 后端模块 | 前端模块 | 状态 | +|---|------|---------|---------|------| +| 1 | 挂号→就诊→收费→发药 | doctorstation + chargemanage + pharmacyDispensarymanage | doctorstation + charge + drug | ✅ | +| 2 | 入院→医嘱→护理→出院 | regdoctorstation + inhospitalnursestation + inpatientmanage | inpatientDoctor + inpatientNurse + inHospitalManagement | ✅ | +| 3 | 药品采购→入库→发药→退药 | pharmacymanage + pharmacyWarehousemanage + inventorymanage | pharmacymanagement + medicineStorage + medicationmanagement | ✅ | +| 4 | 检验申请→执行→报告 | check + Inspection | inspection | ✅ | +| 5 | 手术申请→排程→执行 | clinicalmanage + surgicalschedule | surgerymanage + surgicalschedule | ✅ | +| 6 | 统计报表→导出 | reportmanage | reportmanage | ✅ | + +### 3.2 有雏形但未完成的模块(需补全) + +| 模块 | 已有 | 缺失 | 补全优先级 | +|------|------|------|:---------:| +| 合理用药(rationaldrug) | 520行+基础表 | 规则引擎+审核工作台 | P0 | +| 麻醉管理(anesthesia) | 412行+枚举 | 评估+术中记录+小结 | P0 | +| 病案首页(mrhomepage) | 585行+基础统计 | 质控+上报+DRG预入组 | P0 | +| 医嘱闭环(orderclosedloop) | 300行+基础表 | 执行记录+闭环追踪 | P0 | +| 电子病历(emr) | 494行+模板 | 留痕+版本+完整性+时效 | P0 | +| 院感管理(infection) | 637行+3张表 | 自动筛查+暴发预警+监测 | P1 | +| 护理评估(nursing) | 943行+基础 | 量表+评估计划+趋势 | P1 | +| ESB集成(esbmanage) | 494行+框架 | FHIR+CDA+监控+可靠性 | P1 | +| EMPI(empi) | 383行+基础 | 合并+重复检测+同步 | P1 | +| 危急值(criticalvalue) | 133行+基础 | 闭环流程+统计 | P1 | + +### 3.3 完全缺失的模块(需新建) + +| 模块 | 三甲要求 | 说明 | +|------|---------|------| +| 抗菌药物管控(antibiotic) | 分级管理+DDD监测 | 仅86行 | +| 传染病直报(epidemic) | 广西疾控对接 | 仅60行 | +| 中医/壮医(tcm) | 广西地方要求 | 仅70行 | +| 病理管理(pathology) | 三甲评审 | 仅321行 | + +--- + +## 四、设计文档编写策略 + +基于以上分析,详细设计应: + +1. **Tier 1-2 模块**(已完整/部分实现):只设计缺失功能,不重复已有代码 +2. **Tier 3 模块**(骨架实现):在现有骨架上补全,保留已有接口 +3. **Tier 4 模块**(最小骨架):大部分需重新设计,但保留已有表结构 +4. **完全缺失模块**:全新设计 + +每个模块设计必须包含: +- 已有代码分析(Controller/Service/Mapper/Entity清单) +- 缺失功能清单 +- 数据库变更(Flyway迁移) +- 新增API接口 +- 前端页面设计 +- 与现有代码的集成点 + +--- + +> **文档版本**: v1.0 +> **最后更新**: 2026-06-17 diff --git a/MD/design/PHASE1_CORE_DESIGN.md b/MD/design/PHASE1_CORE_DESIGN.md new file mode 100644 index 000000000..118f5343e --- /dev/null +++ b/MD/design/PHASE1_CORE_DESIGN.md @@ -0,0 +1,2176 @@ +# Phase 1(P0核心达标)17模块详细设计 + +> 文档类型: 详细设计 +> 版本: v1.0 +> 日期: 2026-06-17 +> 基于: 代码审计发现 + 三甲医院评审标准 + +--- + +## 总览 + +| # | 模块 | 已有文件数 | 已有端点 | 缺失核心功能 | +|---|------|-----------|---------|-------------| +| 1 | 住院医生站 | 125 (87+38) | 60+ | 医嘱执行闭环、输血管理、临床路径、危急值 | +| 2 | 手术麻醉 | 57 | 30+ | ASA评估、术中生命体征、麻醉小结、术后随访 | +| 3 | 电子病历 | 120+ | 40+ | 修改留痕、版本管理、完整性检查、时效监控 | +| 4 | 病案管理 | 35 | 20+ | 首页质量校验、HQMS上报、终末质控、病案示踪 | +| 5 | 药品管理 | 148 | 139+ | 药品交互检查、处方拦截、智能审核 | +| 6 | 护士站 | 55 | 31 | 护理任务管理、执行记录、交接班 | +| 7 | 检验 | 127 | 60+ | 结果自动审核、危急值处理、自动采集 | +| 8 | 检查/影像 | 93 | 55+ | PACS集成、结构化报告、影像后处理 | +| 9 | 放射增强 | 126 | 55+ | 结构化报告模板、AI辅助诊断、对比分析 | +| 10 | 收费/计费 | 86 | 62+ | 票据管理、对账、退费审核、费用报表 | +| 11 | 挂号 | 29 | 30 | 排队叫号、爽约管理、分时段预约 | +| 12 | 门诊 | 22 | 17 | 门诊病历、随访、复诊提醒 | +| 13 | 住院入出转 | 40 | 27 | 预住院、出院小结、转院、死亡登记 | +| 14 | 医保 | 55 | 35+ | 对账明细、DRG预警、医保目录同步 | +| 15 | 系统管理 | 5 | 16 | 参数配置、消息通知、定时任务管理 | +| 16 | 字典/基础数据 | 101 | 77+ | 批量导入校验、数据版本、变更审计 | +| 17 | 电子签名 | 3 | 5 | 签名模板、批量签名、签名验证增强 | + +--- + +## 1. 住院医生站(doctorstation + regdoctorstation) + +### 已有代码分析 + +| 层 | doctorstation | regdoctorstation | +|----|--------------|-----------------| +| Controller | 12 (Main/Advice/Emr/Diagnosis/Elep/InspectionLab/ChineseMedical/PtDetails/Phrase/TodayOutpatient/ReservationRecord/PendingEmr) | 4 (AdviceManage/NurseManage/SpecialAdvice/RequestFormManage) | +| AppService | 12 | 4 | +| Mapper | 11 | 3 | +| DTO | 36+ | 17+ | +| 前端 | doctorstation/ 45 vue | inpatientDoctor/ 30 vue | + +已有功能: 门诊接诊/就诊流程、门诊医嘱开立签发签退、门诊处方、检验检查申请、诊断(中医+西医)、住院医嘱管理、护理医嘱、转科出院医嘱、申请单管理。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 医嘱执行闭环追踪 | 医嘱从开立→审核→执行→完成的全链路状态追踪 | 新增 order_execute_record/order_execute_step 表(V38已建),补前端闭环视图 | +| 输血管理 | 输血申请→审批→执行→观察记录完整流程 | 新增 blood_transfusion_record 表 | +| 临床路径执行 | 入径评估→路径执行→变异记录→出径评估 | V30已建 clinical_pathway/clinical_pathway_execution,补执行界面 | +| 危急值处理记录 | 危急值通知→确认→处理→复查的闭环 | V8已建 critical_value 相关表,补住院医生站处理入口 | +| 住院病程记录 | 住院病程记录的查看和录入 | 复用 document 模块的 ProgressNote 功能 | +| 出院带药 | 出院处方开立与审核 | 复用门诊处方流程,增加出院标识 | + +### 业务流程 + +``` +住院医嘱执行闭环: + 医生开立医嘱 → 医嘱审核(上级医师) → 护士站接收 → 执行确认 + ↓ ↓ + 停嘱/取消 ← 执行异常 ← 执行中(记录时间/用量) + ↓ + 医嘱完成 → 归档 + +输血管理流程: + 医生开立输血医嘱 → 填写输血申请单 → 科室主任审批 + → 输血科审核 → 交叉配血 → 血液出库 + → 护士执行输血 → 输血观察记录(15min/30min/1h) + → 输血完成/不良反应处理 + +临床路径执行: + 入径评估(符合率判断) → 按日程执行路径项目 + → 变异记录(偏离原因) → 路径调整/出径 + → 出径评估(完成率统计) +``` + +### 数据库设计 + +```sql +-- V2026_0618__blood_transfusion_record.sql +CREATE TABLE blood_transfusion_record ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + advice_id BIGINT, + blood_type VARCHAR(10), + blood_component VARCHAR(50) NOT NULL, + blood_volume DECIMAL(10,2), + blood_unit VARCHAR(50), + cross_match_result VARCHAR(20), + indication TEXT, + doctor_id BIGINT NOT NULL, + doctor_name VARCHAR(50), + approval_status VARCHAR(20) DEFAULT 'PENDING', + approver_id BIGINT, + approver_name VARCHAR(50), + approve_time TIMESTAMP, + transfusion_start_time TIMESTAMP, + transfusion_end_time TIMESTAMP, + transfusion_nurse_id BIGINT, + transfusion_nurse_name VARCHAR(50), + pre_vital_signs TEXT, + during_vital_signs TEXT, + post_vital_signs TEXT, + adverse_reaction TEXT, + adverse_reaction_type VARCHAR(50), + status VARCHAR(20) DEFAULT 'DRAFT', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE blood_transfusion_observation ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + observation_time TIMESTAMP NOT NULL, + observation_phase VARCHAR(20), + temperature DECIMAL(4,1), + pulse INTEGER, + respiration INTEGER, + blood_pressure_high INTEGER, + blood_pressure_low INTEGER, + symptoms TEXT, + nurse_id BIGINT, + nurse_name VARCHAR(50), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +-- V2026_0619__clinical_pathway_execution_enhancement.sql +CREATE TABLE clinical_pathway_variance ( + id BIGSERIAL PRIMARY KEY, + execution_id BIGINT NOT NULL, + pathway_id BIGINT NOT NULL, + variance_date DATE NOT NULL, + variance_type VARCHAR(20) NOT NULL, + expected_item VARCHAR(200), + actual_item VARCHAR(200), + variance_reason TEXT, + adjustment_action TEXT, + record_by BIGINT, + record_by_name VARCHAR(50), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE critical_value_handle_record ( + id BIGSERIAL PRIMARY KEY, + critical_value_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + handle_type VARCHAR(20) NOT NULL, + handler_id BIGINT NOT NULL, + handler_name VARCHAR(50), + handle_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + handle_result TEXT, + 复查结果 TEXT, + doctor_id BIGINT, + doctor_name VARCHAR(50), + confirm_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +POST /healthlink-his/api/v1/inpatient-doctor/blood-transfusion/apply 申请输血 +GET /healthlink-his/api/v1/inpatient-doctor/blood-transfusion/page 输血申请分页 +PUT /healthlink-his/api/v1/inpatient-doctor/blood-transfusion/approve/{id} 审批输血 +POST /healthlink-his/api/v1/inpatient-doctor/blood-transfusion/observe 输血观察记录 +GET /healthlink-his/api/v1/inpatient-doctor/blood-transfusion/record/{id} 输血记录详情 + +GET /healthlink-his/api/v1/inpatient-doctor/pathway/evaluate/{encounterId} 入径评估 +POST /healthlink-his/api/v1/inpatient-doctor/pathway/admission 入径 +POST /healthlink-his/api/v1/inpatient-doctor/pathway/execution/record 执行记录 +POST /healthlink-his/api/v1/inpatient-doctor/pathway/variance/record 变异记录 +POST /healthlink-his/api/v1/inpatient-doctor/pathway/discharge 出径 +GET /healthlink-his/api/v1/inpatient-doctor/pathway/statistics 路径统计 + +GET /healthlink-his/api/v1/inpatient-doctor/critical-value/pending 待处理危急值 +POST /healthlink-his/api/v1/inpatient-doctor/critical-value/handle 处理危急值 +GET /healthlink-his/api/v1/inpatient-doctor/critical-value/history 处理历史 + +GET /healthlink-his/api/v1/inpatient-doctor/order-execute/trace/{adviceId} 医嘱执行追踪 +GET /healthlink-his/api/v1/inpatient-doctor/order-execute/statistics 执行统计 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 输血管理 | inpatientDoctor/BloodTransfusion.vue | 新建 | 输血申请列表+审批+观察记录 | +| 临床路径执行 | inpatientDoctor/ClinicalPathway.vue | 新建 | 路径日程表+执行+变异记录 | +| 危急值处理 | inpatientDoctor/CriticalValueHandle.vue | 新建 | 待处理列表+处理表单+复查确认 | +| 医嘱执行追踪 | inpatientDoctor/OrderExecuteTrace.vue | 新建 | 时间轴视图展示医嘱全生命周期 | + +### 关键业务规则 + +1. 输血申请必须由主治及以上医师审批,紧急情况可由值班医师代签 +2. 输血前必须完成交叉配血试验,结果阴性方可执行 +3. 输血过程中15分钟、30分钟、1小时各记录一次生命体征 +4. 发生输血不良反应立即停止输血并报告 +5. 临床路径入径率≥50%,完成率≥70% +6. 危急值30分钟内必须确认处理 + +--- + +## 2. 手术麻醉(anesthesia + clinicalmanage + surgicalschedule) + +### 已有代码分析 + +| 层 | anesthesia | clinicalmanage | surgicalschedule | +|----|-----------|---------------|-----------------| +| Controller | 2 (AnesthesiaController + AnesthesiaEnhancedController) | 2 (SurgeryController + SurgicalScheduleController) | 1 (SurgerySafetyCheckController) | +| AppService | 1 (IAnesthesiaAppService) | 2 (ISurgeryAppService + ISurgicalScheduleAppService) | 0 | +| Domain Service | 8 (Record/VitalSign/Medication/IoRecord/Followup/PostopFollowup/Specimen/QC) | 0 | 2 (SurgerySafetyCheck/OpSchedule) | +| Entity | 8 (AnesthesiaRecord/VitalSign/Medication/IoRecord/Followup/PostopFollowup/Specimen/QC) | 0 | 2 (OpSchedule/SurgerySafetyCheck) | +| Flyway | V3(VitalSign/Medication/IoRecord/Record), V19(Specimen/Followup/QC) | V19(Schedule) | V19(SafetyCheck) | +| 前端 | anesthesia/ 1 vue, anesthesiaenhanced/ 1 vue | clinicalmanage/ 1 vue | surgicalschedule/ 2 vue | + +已有功能: 麻醉记录CRUD、术中生命体征记录、用药记录、出入量、术后随访、标本管理、质控、手术CRUD、手术安排、安全核查。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| ASA分级评估 | 术前ASA分级(Ⅰ~Ⅵ级)评估表 | 新增 anes_asa_assessment 表 | +| 麻醉小结 | 麻醉结束后的综合小结记录 | 新增 anes_summary 表,扩展 AnesthesiaRecord 状态流转 | +| 麻醉前评估 | 术前访视、气道评估、禁食禁饮记录 | 新增 anes_preassess 表 | +| 术中事件记录 | 关键事件(插管/拔管/体位变换/异常)时间轴 | 新增 anes_event 表 | +| 麻醉复苏评分 | PACU Aldrete 评分记录 | 新增 anes_recovery_score 表 | +| 手术安全核查增强 | 手术三方核对(Sign In/Time Out/Sign Out) | 复用 SurgerySafetyCheck,增加流程状态管理 | + +### 业务流程 + +``` +麻醉全流程: + 术前访视(ASA评估) → 麻醉方案制定 → 麻醉前准备 + → 麻醉诱导 → 术中维持(5min生命体征+事件记录) + → 手术结束 → 麻醉苏醒(PACU评分) + → 麻醉小结 → 术后随访(Day1/Day3/Day7) + +手术安全三方核对: + Sign In(麻醉前): 患者身份/手术部位/手术方式/过敏/气道风险 + Time Out(切皮前): 团队自我介绍/确认患者/抗生素/预期困难 + Sign Out(离开前): 手术名称/器械清点/标本/术后关注事项 +``` + +### 数据库设计 + +```sql +-- V2026_0620__anesthesia_enhancement.sql +CREATE TABLE anes_asa_assessment ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + asa_grade VARCHAR(5) NOT NULL, + assessment_time TIMESTAMP NOT NULL, + assessor_id BIGINT NOT NULL, + assessor_name VARCHAR(50), + airway_assessment TEXT, + mallampati_grade VARCHAR(5), + neck_mobility VARCHAR(50), + mouth_opening_cm DECIMAL(4,1), + weight_kg DECIMAL(6,2), + height_cm DECIMAL(5,1), + bmi DECIMAL(5,1), + npo_hours INTEGER, + asa_factors TEXT, + risk_level VARCHAR(20), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE anes_preassess ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + assess_time TIMESTAMP NOT NULL, + assessor_id BIGINT NOT NULL, + assessor_name VARCHAR(50), + chief_complaint TEXT, + past_medical_history TEXT, + allergy_history TEXT, + family_history TEXT, + physical_exam TEXT, + lab_summary TEXT, + ecg_summary TEXT, + imaging_summary TEXT, + npo_status VARCHAR(20), + npo_start_time TIMESTAMP, + proposed_surgery VARCHAR(200), + proposed_anesthesia VARCHAR(50), + special_notes TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE anes_summary ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + surgery_name VARCHAR(200), + anesthesia_method VARCHAR(50), + anesthesia_start_time TIMESTAMP, + anesthesia_end_time TIMESTAMP, + surgery_start_time TIMESTAMP, + surgery_end_time TIMESTAMP, + anesthesia_duration_min INTEGER, + surgery_duration_min INTEGER, + position VARCHAR(50), + intubation_type VARCHAR(50), + intubation_time TIMESTAMP, + extubation_time TIMESTAMP, + total_fluid_ml DECIMAL(10,2), + total_blood_loss_ml DECIMAL(10,2), + total_urine_ml DECIMAL(10,2), + intraoperative_diagnosis TEXT, + complications TEXT, + blood_products TEXT, + vasopressors_used TEXT, + antibiotics_used TEXT, + discharge_condition VARCHAR(20), + discharge_destination VARCHAR(50), + pacu_arrival_time TIMESTAMP, + pacu_departure_time TIMESTAMP, + summary_by BIGINT, + summary_by_name VARCHAR(50), + summary_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE anes_event ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + event_time TIMESTAMP NOT NULL, + event_type VARCHAR(30) NOT NULL, + event_detail TEXT, + severity VARCHAR(10), + handled_by BIGINT, + handled_by_name VARCHAR(50), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE anes_recovery_score ( + id BIGSERIAL PRIMARY KEY, + record_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + score_time TIMESTAMP NOT NULL, + activity_score INTEGER DEFAULT 0, + respiration_score INTEGER DEFAULT 0, + circulation_score INTEGER DEFAULT 0, + consciousness_score INTEGER DEFAULT 0, + spo2_score INTEGER DEFAULT 0, + total_score INTEGER DEFAULT 0, + scorer_id BIGINT, + scorer_name VARCHAR(50), + discharge_ready BOOLEAN DEFAULT FALSE, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +POST /healthlink-his/api/v1/anesthesia/asa-assessment ASA评估保存 +GET /healthlink-his/api/v1/anesthesia/asa-assessment/{recordId} ASA评估查询 +POST /healthlink-his/api/v1/anesthesia/preassess 术前访视保存 +GET /healthlink-his/api/v1/anesthesia/preassess/{recordId} 术前访视查询 +POST /healthlink-his/api/v1/anesthesia/summary 麻醉小结保存 +GET /healthlink-his/api/v1/anesthesia/summary/{recordId} 麻醉小结查询 +PUT /healthlink-his/api/v1/anesthesia/complete/{recordId} 完成麻醉记录 +POST /healthlink-his/api/v1/anesthesia/event 术中事件记录 +GET /healthlink-his/api/v1/anesthesia/event/{recordId} 术中事件列表 +POST /healthlink-his/api/v1/anesthesia/recovery-score PACU评分保存 +GET /healthlink-his/api/v1/anesthesia/recovery-score/{recordId} PACU评分历史 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| ASA评估 | anesthesia/AsaAssessment.vue | 新建 | ASA分级评估表单 | +| 术前访视 | anesthesia/PreAssess.vue | 新建 | 术前访视记录表单 | +| 麻醉小结 | anesthesia/AnesSummary.vue | 新建 | 综合小结表单+打印 | +| 术中事件 | anesthesia/IntraopEvent.vue | 新建 | 事件时间轴+录入 | +| PACU评分 | anesthesia/RecoveryScore.vue | 新建 | Aldrete评分表+趋势图 | +| 完整流程 | anesthesia/AnesthesiaFlow.vue | 扩展 | 整合术前→术中→术后全流程 | + +### 关键业务规则 + +1. ASA分级必须由麻醉医师在术前完成评估 +2. 术中生命体征每5分钟自动采集一次(手动可补录) +3. 麻醉记录完成后不可修改,只能留痕 +4. PACU评分≥9分方可转出 +5. 术后随访D1/D3/D7必访,记录并发症和恢复情况 + +--- + +## 3. 电子病历(emr + document) + +### 已有代码分析 + +| 层 | emr | document | +|----|-----|---------| +| Controller | 4 (StructuredEmr/EmrRevision/EmrArchive/EmrSearch) | 8 (ProgressNote/InformedConsent/DocTemplate/DocStatisticsDefinition/DocStatistics/DocRecord/DocDefinitionOrganization/DocDefinition) | +| AppService | 1 (IStructuredEmrAppService) | 8+ | +| Domain Entity | 7 (Revision/CompletenessCheck/Timeliness/ArchiveRecord/SearchIndex/Template) | 17+ (ProgressNote/InformedConsent/RequestForm/OrderProcess/EmrTemplate/Emr/EmrDict/EmrDetail/DocTemplate/DocRecord...) | +| Domain Service | 14 | 30+ | +| 前端 | emr/ 3 vue | document/ (被 doctorstation 复用) | + +已有功能: 结构化病历模板、修改留痕(创建+查询+对比)、完整性检查、时限监控(超时列表+完成率统计)、病历归档(打印+归档+补打+统计)、病历检索、病程记录、知情同意书、文书定义/模板/统计。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 病历版本管理 | 多版本保存、版本切换、版本对比可视化 | 扩展 emr_revision 表增加 version_no 字段 | +| 病历完整性规则配置 | 可配置的完整性检查规则(必填项/必签名/时效) | 新增 emr_completeness_rule 表 | +| 病历质量评分 | 根据完整性+时效+规范性自动评分 | 新增 emr_quality_score 表 | +| 病历锁定机制 | 病历归档后锁定,修改需申请解锁 | 扩展 emr 表增加 lock_status 字段 | +| 病历模板版本管理 | 模板的版本控制和发布管理 | 扩展 doc_template 表 | + +### 业务流程 + +``` +病历生命周期: + 创建/编辑 → 保存草稿 → 提交签名 → 归档锁定 + ↑ ↓ + 申请解锁 ← 修改申请(留痕) ← 修改审核 + +完整性检查流程: + 系统定时检查 → 规则引擎匹配 → 生成检查报告 + → 推送提醒给责任医师 → 医师完善 → 重新检查 + +时限监控: + 入院记录(24h) → 首次病程(8h) → 日常病程(3天/次) + → 手术记录(24h) → 出院小结(24h) + → 超时预警 → 超时统计 → 质量考核 +``` + +### 数据库设计 + +```sql +-- V2026_0621__emr_version_and_rules.sql +ALTER TABLE emr_revision ADD COLUMN IF NOT EXISTS version_no INTEGER DEFAULT 1; +ALTER TABLE emr_revision ADD COLUMN IF NOT EXISTS change_summary TEXT; +ALTER TABLE emr_revision ADD COLUMN IF NOT EXISTS diff_content TEXT; + +CREATE TABLE emr_completeness_rule ( + id BIGSERIAL PRIMARY KEY, + rule_name VARCHAR(100) NOT NULL, + rule_type VARCHAR(30) NOT NULL, + emr_type VARCHAR(30), + rule_config TEXT NOT NULL, + severity VARCHAR(10) DEFAULT 'WARNING', + enabled CHAR(1) DEFAULT '1', + sort_order INTEGER DEFAULT 0, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE emr_quality_score ( + id BIGSERIAL PRIMARY KEY, + emr_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + completeness_score DECIMAL(5,2), + timeliness_score DECIMAL(5,2), + standard_score DECIMAL(5,2), + total_score DECIMAL(5,2), + score_level VARCHAR(10), + score_detail TEXT, + score_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + scorer_id BIGINT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +ALTER TABLE emr ADD COLUMN IF NOT EXISTS lock_status VARCHAR(10) DEFAULT 'UNLOCKED'; +ALTER TABLE emr ADD COLUMN IF NOT EXISTS lock_time TIMESTAMP; +ALTER TABLE emr ADD COLUMN IF NOT EXISTS lock_by VARCHAR(64); +ALTER TABLE emr ADD COLUMN IF NOT EXISTS current_version INTEGER DEFAULT 1; +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/emr/version/history/{emrId} 病历版本历史 +GET /healthlink-his/api/v1/emr/version/diff 版本对比 +GET /healthlink-his/api/v1/emr/version/{emrId}/{versionNo} 获取指定版本 + +GET /healthlink-his/api/v1/emr/quality/score/{emrId} 病历质量评分 +GET /healthlink-his/api/v1/emr/quality/statistics 质量统计 +POST /healthlink-his/api/v1/emr/quality/batch-check 批量质量检查 + +GET /healthlink-his/api/v1/emr/completeness-rule/page 规则分页 +POST /healthlink-his/api/v1/emr/completeness-rule 规则保存 +PUT /healthlink-his/api/v1/emr/completeness-rule/{id} 规则更新 +DELETE /healthlink-his/api/v1/emr/completeness-rule/{id} 规则删除 + +PUT /healthlink-his/api/v1/emr/lock/{emrId} 锁定病历 +PUT /healthlink-his/api/v1/emr/unlock/{emrId} 解锁病历(需申请) +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 版本管理 | emr/VersionHistory.vue | 新建 | 版本列表+对比视图(差异高亮) | +| 质量评分 | emr/QualityScore.vue | 新建 | 评分详情+趋势图 | +| 规则配置 | emr/CompletenessRule.vue | 新建 | 规则CRUD+测试 | +| 完整视图 | emr/EmrCompleteView.vue | 扩展 | 整合留痕/版本/质量/锁定 | + +### 关键业务规则 + +1. 病历归档后自动锁定,修改需提交申请经上级审批 +2. 每次修改自动创建新版本,保留完整历史 +3. 完整性规则可按科室/病种/文书类型配置 +4. 质量评分≥90为优秀,80-89为良好,70-79为合格,<70为不合格 +5. 超时病历自动推送提醒,连续超时3次升级至科室主任 + +--- + +## 4. 病案管理(mrhomepage + inhospitalmanage) + +### 已有代码分析 + +| 层 | mrhomepage | inhospitalmanage | +|----|-----------|-----------------| +| Controller | 4 (MrHomepage/MrDrg/MrManagement/DrgAnalysis) | 1 (InpatientDiagnosisController) | +| AppService | 1 (IMrHomepageAppService) | 0 | +| Domain Entity | 7 (MrHomepage/QualityCheck/Borrowing/Sealing/Tracking/DeathDiscussion/DrgGrouping) | 0 | +| Domain Service | 14 | 0 | +| 前端 | mrhomepage/ 3 vue, hospitalRecord/ 10 vue | inHospitalManagement/ 43 vue | + +已有功能: 病案首页生成/更新/查询/质控/统计/提交、DRG/DIP分组、病案借阅(申请/审批/归还)、病案封存/解封、病案示踪、死亡病例讨论、归档统计。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 首页数据质量校验 | 自动校验首页必填项、编码正确性、逻辑一致性 | 扩展 QualityCheck,增加校验规则引擎 | +| 首页HQMS上报 | 病案首页上报至HQMS国家平台 | 新增 mr_homepage_hqms_upload 表 | +| 终末质控 | 出院后7日内的病案质量终审 | 新增 mr_terminal_qc 表 | +| 病案示踪增强 | 条码/RFID示踪,实时位置追踪 | 扩展 mr_tracking,增加位置节点 | +| DRG分组预警 | 分组异常预警和自动纠错 | 新增 mr_drg_alert 表 | +| 病案统计报表 | 按科室/病种/医师的病案质量统计 | 复用 mr_archive_stats,增加维度 | + +### 业务流程 + +``` +病案首页全流程: + 自动生成(出院时) → 数据质量校验 → 人工复核 + → 修改完善 → 提交上报(HQMS) → 终末质控 + → 归档封存 → 统计分析 + +终末质控流程: + 出院7日内 → 系统自动分配质控员 → 质控员逐份审核 + → 标记问题(首页/病历/诊断/编码) → 退回修改 + → 修改完成 → 复审通过 → 质控完成 + +HQMS上报流程: + 首页提交 → 格式校验 → 数据脱敏 → 上传HQMS + → 接收回执 → 处理异常 → 上报成功 +``` + +### 数据库设计 + +```sql +-- V2026_0622__mr_management_enhancement.sql +CREATE TABLE mr_terminal_qc ( + id BIGSERIAL PRIMARY KEY, + homepage_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + qc_status VARCHAR(20) DEFAULT 'PENDING', + qc_type VARCHAR(20) NOT NULL, + qc_item VARCHAR(100), + qc_result VARCHAR(20), + qc_detail TEXT, + qc_by BIGINT, + qc_by_name VARCHAR(50), + qc_time TIMESTAMP, + review_by BIGINT, + review_by_name VARCHAR(50), + review_time TIMESTAMP, + review_result VARCHAR(20), + review_detail TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE mr_homepage_hqms_upload ( + id BIGSERIAL PRIMARY KEY, + homepage_id BIGINT NOT NULL, + upload_batch VARCHAR(50), + upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + upload_status VARCHAR(20) DEFAULT 'PENDING', + response_code VARCHAR(20), + response_msg TEXT, + retry_count INTEGER DEFAULT 0, + last_retry_time TIMESTAMP, + upload_by BIGINT, + upload_by_name VARCHAR(50), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE mr_drg_alert ( + id BIGSERIAL PRIMARY KEY, + grouping_id BIGINT NOT NULL, + alert_type VARCHAR(30) NOT NULL, + alert_level VARCHAR(10) DEFAULT 'WARNING', + alert_detail TEXT, + suggested_fix TEXT, + alert_status VARCHAR(20) DEFAULT 'OPEN', + handler_id BIGINT, + handler_name VARCHAR(50), + handle_time TIMESTAMP, + handle_result TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE mr_quality_check_rule ( + id BIGSERIAL PRIMARY KEY, + rule_name VARCHAR(100) NOT NULL, + rule_category VARCHAR(30) NOT NULL, + rule_config TEXT NOT NULL, + check_scope VARCHAR(30) DEFAULT 'HOMEPAGE', + severity VARCHAR(10) DEFAULT 'ERROR', + enabled CHAR(1) DEFAULT '1', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +POST /healthlink-his/api/v1/mr-homepage/quality-check/batch/{homepageId} 批量质控检查 +GET /healthlink-his/api/v1/mr-homepage/quality-rules 质控规则列表 +POST /healthlink-his/api/v1/mr-homepage/quality-rules 保存质控规则 + +POST /healthlink-his/api/v1/mr-homepage/hqms/upload/{homepageId} HQMS上报 +GET /healthlink-his/api/v1/mr-homepage/hqms/upload-page 上报记录分页 +POST /healthlink-his/api/v1/mr-homepage/hqms/retry/{id} 重试上报 + +GET /healthlink-his/api/v1/mr-management/terminal-qc/page 终末质控分页 +POST /healthlink-his/api/v1/mr-management/terminal-qc/assign 分配质控员 +POST /healthlink-his/api/v1/mr-management/terminal-qc/submit 提交质控结果 +POST /healthlink-his/api/v1/mr-management/terminal-qc/review 复审 + +GET /healthlink-his/api/v1/mr-management/drg-alert/page DRG预警分页 +POST /healthlink-his/api/v1/mr-management/drg-alert/handle 处理预警 + +GET /healthlink-his/api/v1/mr-management/statistics/quality 质量统计 +GET /healthlink-his/api/v1/mr-management/statistics/hqms HQMS统计 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 终末质控 | hospitalRecord/TerminalQc.vue | 新建 | 质控任务列表+审核表单 | +| HQMS上报 | hospitalRecord/HqmsUpload.vue | 新建 | 上报记录+重试+统计 | +| DRG预警 | hospitalRecord/DrgAlert.vue | 新建 | 预警列表+处理 | +| 质量报表 | hospitalRecord/QualityReport.vue | 新建 | 多维度质量统计图表 | +| 质控规则 | hospitalRecord/QcRuleConfig.vue | 新建 | 规则配置管理 | + +### 关键业务规则 + +1. 出院后24小时内自动生成病案首页 +2. 首页上报前必须通过数据质量校验 +3. 终末质控在出院7日内完成,质控员与主治医师不能为同一人 +4. DRG分组完成后自动检查CMI值合理性 +5. 病案借阅必须审批,借阅期限14天 + +--- + +## 5. 药品管理(pharmacymanage + pharmacyDispensarymanage + pharmacyWarehousemanage) + +### 已有代码分析 + +| 层 | pharmacymanage | pharmacyDispensarymanage | pharmacyWarehousemanage | +|----|---------------|------------------------|------------------------| +| Controller | 8 (WesternMedicineDispense/SummaryDispenseMedicine/ReturnMedicine/PendingMedicationDetails/MedicationDetails/MedicalDeviceDispense/InHospitalReturnMedicine/PharmacyStockAlert) | 8 (TransferOut/TransferIn/Stocktaking/StockIn/ReturnToWarehouse/Requisition/ProfitLoss/Dispensing) | 8 (StockOut/Stocktaking/Return/StockIn/ReturnToWarehouse/ProfitLoss/Purchase/DocumentManagement) | +| AppService | 7 | 10 | 10 | +| 前端 | pharmacymanagement/ 27 vue, drug/ 7 vue | medicineStorage/ 28 vue | medicineStorage/ 28 vue | + +已有功能: 西药发药/退药、汇总发药、住院退药、药品库存预警、药房/药库全套单据管理(调拨/入库/出库/盘点/报损/领用/退货/采购)。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 药品交互检查 | 开方时自动检查药物相互作用 | 新增 drug_interaction_rule 表 + 前端提示 | +| 处方前置审核 | 发药前自动审核处方合理性(配伍/剂量/禁忌) | 新增 prescription_review_record 表 | +| 高危药品管理 | 高危药品标识、双人核对、剂量限制 | 扩展药品字典增加高危标识 | +| 药品效期管理 | 近效期预警、效期追踪 | 扩展库存表增加效期字段 | +| 智能用药提醒 | 基于患者病情的用药提醒 | 新增 medication_reminder 表 | + +### 业务流程 + +``` +处方审核流程: + 医生开方 → 系统自动审核(配伍/剂量/禁忌/过敏) + → 审核通过 → 发药 + → 审核警告 → 人工确认 → 发药 + → 审核拦截 → 拒绝发药 → 通知医生修改 + +高危药品管理: + 药品标记(高危) → 发药时提示 → 双人核对 + → 核对签名 → 发药完成 +``` + +### 数据库设计 + +```sql +-- V2026_0623__pharmacy_safety_enhancement.sql +CREATE TABLE drug_interaction_rule ( + id BIGSERIAL PRIMARY KEY, + drug_code_a VARCHAR(50) NOT NULL, + drug_name_a VARCHAR(100), + drug_code_b VARCHAR(50) NOT NULL, + drug_name_b VARCHAR(100), + interaction_type VARCHAR(30) NOT NULL, + severity VARCHAR(10) NOT NULL, + description TEXT, + suggestion TEXT, + enabled CHAR(1) DEFAULT '1', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE prescription_review_record ( + id BIGSERIAL PRIMARY KEY, + prescription_no VARCHAR(50) NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + review_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + review_result VARCHAR(20) NOT NULL, + review_items TEXT, + reviewer_id BIGINT, + reviewer_name VARCHAR(50), + manual_override CHAR(1) DEFAULT '0', + override_reason TEXT, + override_by BIGINT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE medication_reminder ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + advice_id BIGINT NOT NULL, + reminder_type VARCHAR(30) NOT NULL, + reminder_content TEXT, + remind_time TIMESTAMP NOT NULL, + remind_status VARCHAR(20) DEFAULT 'PENDING', + handler_id BIGINT, + handler_name VARCHAR(50), + handle_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/pharmacy/interaction-check 药品交互检查 +GET /healthlink-his/api/v1/pharmacy/interaction-rule/page 交互规则分页 +POST /healthlink-his/api/v1/pharmacy/interaction-rule 保存规则 + +POST /healthlink-his/api/v1/pharmacy/review/record 审核记录保存 +GET /healthlink-his/api/v1/pharmacy/review/record/{prescriptionNo} 审核记录查询 + +GET /healthlink-his/api/v1/pharmacy/expiry-warning/page 效期预警分页 +GET /healthlink-his/api/v1/pharmacy/expiry-warning/stats 效期预警统计 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 交互检查 | pharmacymanagement/InteractionCheck.vue | 新建 | 交互规则配置+检查结果 | +| 处方审核 | pharmacymanagement/PrescriptionReview.vue | 新建 | 审核结果展示+人工确认 | +| 效期管理 | pharmacymanagement/ExpiryWarning.vue | 新建 | 近效期药品列表+预警 | + +### 关键业务规则 + +1. 高危药品必须双人核对后方可发药 +2. 药物相互作用检查在开方和发药两个环节均执行 +3. 药品距效期6个月预警,3个月黄灯,1个月红灯 +4. 处方审核拦截项不可人工跳过(需上级授权) +5. 每日自动统计处方合理率 + +--- + +## 6. 护士站(inhospitalnursestation) + +### 已有代码分析 + +| 层 | 文件数 | +|----|-------| +| Controller | 6 (AdviceProcess/MedicineSummary/NurseBilling/ATDManage/EncounterAutoRoll/OrgDeviceStockTake) | +| AppService | 6 | +| Mapper | 6 | +| DTO | 28 | +| 前端 | inpatientNurse/ 56 vue | + +已有功能: 医嘱处理(审核/驳回/执行/取消/作废)、药品汇总(汇总发药/取消汇总)、护士划价/计费、入出转管理(入院/转科/出院/清床)、自动滚方、科室耗材盘点。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 护理评估 | 入院护理评估、压疮评估、跌倒评估、疼痛评估 | 新增 nurse_assessment 表 | +| 护理任务管理 | 护理任务生成、分配、执行、追踪 | 新增 nurse_task 表 | +| 交接班记录 | 班次交接记录(患者情况/特殊事项/物品交接) | 新增 nurse_shift_handover 表 | +| 护理计划 | 基于评估结果的护理计划制定和执行 | 新增 nurse_care_plan 表 | +| 患者身份核对 | 扫码核对患者身份+腕带信息 | 复用 patientmanage 模块 | + +### 业务流程 + +``` +护理评估流程: + 患者入院 → 入院护理评估(首次) → 压疮风险评估(Braden) + → 跌倒风险评估(Morse) → 疼痛评估(NRS) + → 生成护理计划 → 定期复评(压疮/跌倒每7天) + +交接班流程: + 当班护士 → 汇总患者情况(特殊医嘱/待执行任务/异常) + → 填写交接记录 → 接班护士确认 + → 双方签名 → 归档 + +护理任务管理: + 医嘱生成任务 → 分配护士 → 执行记录 + → 执行确认 → 任务完成 → 统计 +``` + +### 数据库设计 + +```sql +-- V2026_0624__nursing_enhancement.sql +CREATE TABLE nurse_assessment ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + assessment_type VARCHAR(30) NOT NULL, + assessment_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + assessor_id BIGINT NOT NULL, + assessor_name VARCHAR(50), + assessment_data TEXT NOT NULL, + risk_level VARCHAR(20), + total_score DECIMAL(5,1), + next_assessment_date DATE, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE nurse_task ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + advice_id BIGINT, + task_type VARCHAR(30) NOT NULL, + task_name VARCHAR(100) NOT NULL, + task_detail TEXT, + scheduled_time TIMESTAMP, + assigned_to BIGINT, + assigned_to_name VARCHAR(50), + status VARCHAR(20) DEFAULT 'PENDING', + execute_time TIMESTAMP, + execute_by BIGINT, + execute_by_name VARCHAR(50), + execute_result TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE nurse_shift_handover ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + shift_date DATE NOT NULL, + shift_type VARCHAR(10) NOT NULL, + from_nurse_id BIGINT NOT NULL, + from_nurse_name VARCHAR(50), + to_nurse_id BIGINT NOT NULL, + to_nurse_name VARCHAR(50), + patient_count INTEGER, + special_items TEXT, + pending_tasks TEXT, + abnormal_situations TEXT, + handover_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + from_signature TEXT, + to_signature TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE nurse_care_plan ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + plan_name VARCHAR(100) NOT NULL, + diagnosis TEXT, + nursing_goals TEXT, + nursing_measures TEXT, + evaluation_criteria TEXT, + plan_status VARCHAR(20) DEFAULT 'ACTIVE', + plan_by BIGINT, + plan_by_name VARCHAR(50), + plan_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +POST /healthlink-his/api/v1/nurse-station/assessment 护理评估保存 +GET /healthlink-his/api/v1/nurse-station/assessment/{encounterId} 护理评估查询 +GET /healthlink-his/api/v1/nurse-station/assessment/pending 待评估列表 + +GET /healthlink-his/api/v1/nurse-station/task/page 护理任务分页 +POST /healthlink-his/api/v1/nurse-station/task/assign 任务分配 +POST /healthlink-his/api/v1/nurse-station/task/execute 任务执行 +GET /healthlink-his/api/v1/nurse-station/task/statistics 任务统计 + +POST /healthlink-his/api/v1/nurse-station/shift-handover/save 交接班保存 +GET /healthlink-his/api/v1/nurse-station/shift-handover/history 交接班历史 +GET /healthlink-his/api/v1/nurse-station/shift-handover/current 当前班次信息 + +POST /healthlink-his/api/v1/nurse-station/care-plan 护理计划保存 +GET /healthlink-his/api/v1/nurse-station/care-plan/{encounterId} 护理计划查询 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 护理评估 | inpatientNurse/NurseAssessment.vue | 新建 | 评估表单(多类型)+历史记录 | +| 护理任务 | inpatientNurse/NurseTask.vue | 新建 | 任务列表+分配+执行+统计 | +| 交接班 | inpatientNurse/ShiftHandover.vue | 新建 | 交接记录表单+历史查询 | +| 护理计划 | inpatientNurse/CarePlan.vue | 新建 | 计划制定+执行追踪 | + +### 关键业务规则 + +1. 入院8小时内完成首次护理评估 +2. Braden评分≤12分高危,每4小时评估一次 +3. Morse评分≥45分高危,需启动防跌倒措施 +4. 交接班必须双方签名确认 +5. 护理任务必须在计划时间内完成,超时自动预警 + +--- + +## 7. 检验(lab + Inspection) + +### 已有代码分析 + +| 层 | lab | Inspection | +|----|-----|-----------| +| Controller | 5 (LabEnhanced/LabHistory/LabActivityDefinition/InspectionType/InspectionPackage) | 9 (Laboratory/ObservationDef/SpecimenDef/Instrument/SampleCollect/LisConfig/LabReferenceRange/Icd10/ClinicalManageObservation) | +| Domain Entity | 17 (InspectionPackage/Specimen/Observation/LabActivityDefinition/InspectionLabApply/BarCode/LabReferenceRange/Icd10Code/LabResultComparison/LabInternalQc/LabExternalEqa...) | 0 | +| 前端 | labenhanced/ 6 vue, labhistory/ 1 vue | inspection/ 10 vue | + +已有功能: 检验套餐/项目/标本/仪器管理、检验申请、标本采集、LIS配置、参考范围、ICD-10编码、结果对比、室内质控、室间质评、检验历史趋势。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 结果自动审核 | 基于规则的自动审核(正常值/危急值/Delta校验) | 新增 lab_auto_review_rule 表 | +| 危急值自动通知 | 危急值发现后自动通知主管医师 | 复用 criticalvalue 模块 | +| 标本追踪 | 标本从采集→送检→接收→检测→报告全流程 | 扩展 BarCode 表增加状态节点 | +| 检验报告打印 | 标准检验报告单生成和打印 | 新增 lab_report_template 表 | + +### 业务流程 + +``` +检验全流程: + 医生开立申请 → 生成条码 → 护士采集标本 + → 标本送检(LIS) → 实验室接收 → 上机检测 + → 结果审核(自动+人工) → 报告发布 + → 危急值通知(30min) → 临床处理 + +自动审核流程: + 结果返回 → 自动审核规则匹配 + → 规则通过(正常值+Delta校验OK) → 自动审核通过 + → 规则异常(危急值/异常变化) → 转人工审核 + → 人工确认 → 报告发布 +``` + +### 数据库设计 + +```sql +-- V2026_0625__lab_enhancement.sql +CREATE TABLE lab_auto_review_rule ( + id BIGSERIAL PRIMARY KEY, + rule_name VARCHAR(100) NOT NULL, + observation_code VARCHAR(50), + rule_type VARCHAR(30) NOT NULL, + rule_config TEXT NOT NULL, + enabled CHAR(1) DEFAULT '1', + priority INTEGER DEFAULT 0, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE lab_report_template ( + id BIGSERIAL PRIMARY KEY, + template_name VARCHAR(100) NOT NULL, + template_type VARCHAR(30) NOT NULL, + template_content TEXT, + is_default CHAR(1) DEFAULT '0', + enabled CHAR(1) DEFAULT '1', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/lab/auto-review-rule/page 自动审核规则分页 +POST /healthlink-his/api/v1/lab/auto-review-rule 保存规则 +POST /healthlink-his/api/v1/lab/execute-auto-review/{applyNo} 执行自动审核 + +GET /healthlink-his/api/v1/lab/report/template/page 报告模板分页 +POST /healthlink-his/api/v1/lab/report/generate/{applyNo} 生成报告 +GET /healthlink-his/api/v1/lab/report/preview/{applyNo} 报告预览 + +GET /healthlink-his/api/v1/lab/specimen/trace/{barcode} 标本追踪 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 自动审核规则 | labenhanced/AutoReviewRule.vue | 新建 | 规则配置管理 | +| 标本追踪 | labenhanced/SpecimenTrace.vue | 新建 | 标本全流程追踪时间轴 | + +### 关键业务规则 + +1. 危急值必须在30分钟内通知临床并获得确认 +2. 自动审核通过率目标≥70% +3. 标本溶血/脂血/凝块等不合格标本必须退回重采 +4. 检验报告签发后不可修改,修改需留痕 +5. 室内质控每日至少做一次 + +--- + +## 8. 检查/影像(check) + +### 已有代码分析 + +| 层 | check | +|----|-------| +| Controller | 11 (ExamApply/ExamAppointment/RadiologyImage/RadiologyEnhanced/RadiologyComparison/SpecimenBarcode/CheckType/CheckPart/CheckMethod/LisGroupInfo/ClinicalManageObservation) | +| Domain Entity | 17 (ExamApply/ExamApplyItem/ExamAppointment/RadiologyImage/RadiologyImageReport/RadiologyUrgentReport/RadiologyStatistics/RadiologyImageComparison/DicomPrintRecord/SpecimenBarcode/CheckType/CheckPart/CheckMethod/CheckPackage...) | +| 前端 | inspection/ 10 vue, radiologyenhanced/ 1 vue, radiologycomparison/ 1 vue | + +已有功能: 检查申请、检查预约(签到/开始/完成/取消)、放射影像(上传/报告/提交/审核/打印)、影像对比、紧急报告、放射统计、DICOM打印、标本条码、检查类型/部位/方法/套餐管理。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| PACS集成接口 | 与PACS系统的影像调阅和传输 | 新增 pacs_integration_config 表 | +| 结构化检查报告 | 结构化报告模板+报告填写 | 复用 DocTemplate + 新增 report_data 字段 | +| 检查报告模板 | 按检查类型预设的报告模板 | 扩展 CheckType 增加模板关联 | +| 预约排队叫号 | 检查预约的排队叫号管理 | 新增 exam_queue 表 | +| 影像AI辅助 | AI辅助诊断标注和辅助报告 | 新增 ai_assist_record 表 | + +### 业务流程 + +``` +检查全流程: + 医生开立检查 → 生成申请单 → 患者预约 + → 排队叫号 → 检查执行(影像采集) + → 影像上传(PACS) → 影像诊断(报告) + → 报告审核 → 报告发布 → 临床查看 + +结构化报告: + 选择报告模板 → 系统预填充(患者信息/检查所见) + → 医师逐项填写 → AI辅助建议 + → 生成报告 → 审核签发 +``` + +### 数据库设计 + +```sql +-- V2026_0626__check_enhancement.sql +CREATE TABLE pacs_integration_config ( + id BIGSERIAL PRIMARY KEY, + config_name VARCHAR(100) NOT NULL, + pacs_url VARCHAR(500), + pacs_type VARCHAR(30), + auth_config TEXT, + enabled CHAR(1) DEFAULT '1', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE exam_queue ( + id BIGSERIAL PRIMARY KEY, + appointment_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + queue_no VARCHAR(20) NOT NULL, + queue_date DATE NOT NULL, + queue_status VARCHAR(20) DEFAULT 'WAITING', + call_time TIMESTAMP, + complete_time TIMESTAMP, + exam_room VARCHAR(50), + operator_id BIGINT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE ai_assist_record ( + id BIGSERIAL PRIMARY KEY, + image_report_id BIGINT NOT NULL, + ai_model VARCHAR(50), + ai_version VARCHAR(20), + input_data TEXT, + output_data TEXT, + confidence DECIMAL(5,4), + assist_result TEXT, + used_by BIGINT, + used_by_name VARCHAR(50), + use_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/exam/queue/today 今日排队列表 +POST /healthlink-his/api/v1/exam/queue/call/{id} 叫号 +PUT /healthlink-his/api/v1/exam/queue/start/{id} 开始检查 +PUT /healthlink-his/api/v1/exam/queue/complete/{id} 完成检查 + +POST /healthlink-his/api/v1/radiology/ai-assist AI辅助诊断 +GET /healthlink-his/api/v1/radiology/ai-assist/{reportId} AI辅助结果 + +GET /healthlink-his/api/v1/pacs/config/page PACS配置分页 +POST /healthlink-his/api/v1/pacs/config 保存配置 +POST /healthlink-his/api/v1/pacs/image/view/{studyUid} PACS影像调阅 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 排队叫号 | inspection/ExamQueue.vue | 新建 | 实时排队列表+叫号+状态 | +| PACS配置 | inspection/PacsConfig.vue | 新建 | PACS系统集成配置 | +| AI辅助 | inspection/AiAssist.vue | 新建 | AI辅助诊断结果展示 | + +### 关键业务规则 + +1. 急诊检查30分钟内出报告 +2. 普通检查24小时内出报告 +3. 影像诊断报告必须由执业医师签发 +4. 紧急报告立即通知临床并记录通知时间 +5. AI辅助结果仅供参考,最终诊断由医师确认 + +--- + +## 9. 放射增强(radiologyenhanced) + +### 已有代码分析 + +后端功能全部在 check 模块中实现(RadiologyEnhancedController/RadiologyImageController/RadiologyComparisonController),前端有: +- radiologyenhanced/ 1 vue +- radiologycomparison/ 1 vue + +已有功能: 紧急报告管理、放射统计、影像对比。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 结构化影像报告 | 按部位的结构化报告模板+智能填充 | 扩展 doc_template 增加影像报告模板 | +| 影像后处理 | MPR/MIP/VR等后处理功能调用 | 前端集成 Cornerstone.js | +| 随访管理 | 影像随访计划和提醒 | 新增 radiology_followup 表 | + +### 数据库设计 + +```sql +-- V2026_0627__radiology_enhancement.sql +CREATE TABLE radiology_followup ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + image_report_id BIGINT, + followup_type VARCHAR(30) NOT NULL, + followup_reason TEXT, + planned_date DATE NOT NULL, + actual_date DATE, + status VARCHAR(20) DEFAULT 'PLANNED', + reminder_sent CHAR(1) DEFAULT '0', + result_report_id BIGINT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/radiology/followup/page 随访分页 +POST /healthlink-his/api/v1/radiology/followup 创建随访 +GET /healthlink-his/api/v1/radiology/followup/pending 待随访列表 +POST /healthlink-his/api/v1/radiology/followup/complete/{id} 完成随访 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 影像随访 | radiologyenhanced/Followup.vue | 新建 | 随访计划管理+提醒 | + +### 关键业务规则 + +1. 影像随访计划基于检查结果自动生成 +2. 随访提醒在计划日期前3天发送 +3. 随访结果必须关联新的影像报告 + +--- + +## 10. 收费/计费(chargemanage + paymentmanage + inhospitalcharge) + +### 已有代码分析 + +| 层 | chargemanage | paymentmanage | inhospitalcharge | +|----|-------------|--------------|-----------------| +| Controller | 5 (OutpatientCharge/InpatientCharge/OutpatientRegistration/OutpatientRefund/OutpatientPricing) | 5 (ThreePartPay/PaymentReconciliation/PaymentContract/EleInvoice/ChargeBill) | 2 (InHospitalRegister/AdvancePaymentManage) | +| AppService | 5 | 5 | 2 | +| 前端 | charge/ 18 vue, outpatientFinance/ 1 vue | (含在charge中) | (含在charge中) | + +已有功能: 门诊/住院收费、挂号收费、退费、三方支付(签到/签退/支付/查询)、支付对账(预冲正/冲正/收费/查询)、合同管理、电子发票(开票/重开/作废/查看)、费用明细/汇总、住院登记、预交金管理。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 票据打印管理 | 收据打印、补打、作废记录 | 新增 billing_receipt_record 表 | +| 费用日报 | 每日收费汇总报表 | 新增 billing_daily_report 表 | +| 退费审核流程 | 大额退费需审批 | 新增 billing_refund_approval 表 | +| 费用对账 | HIS与医保/第三方对账 | 扩展 payment_reconciliation 增加状态追踪 | +| 住院一日清单 | 住院患者每日费用明细推送 | 新增 billing_daily_detail 表 | + +### 业务流程 + +``` +退费审核流程: + 退费申请 → 系统校验(是否已结算/是否在退费期限内) + → 金额≤1000 → 直接退费 + → 金额>1000 → 科室主任审批 → 财务审批 + → 退费执行 → 原路退款 + +住院一日清单: + 每日定时任务 → 汇总当日费用明细 + → 生成一日清单 → 推送至患者/家属 + → 可打印/查看 +``` + +### 数据库设计 + +```sql +-- V2026_0628__billing_enhancement.sql +CREATE TABLE billing_receipt_record ( + id BIGSERIAL PRIMARY KEY, + receipt_no VARCHAR(50) NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + receipt_type VARCHAR(20) NOT NULL, + amount DECIMAL(12,2) NOT NULL, + print_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + print_by BIGINT, + print_by_name VARCHAR(50), + void_status VARCHAR(20) DEFAULT 'VALID', + void_time TIMESTAMP, + void_by BIGINT, + void_reason TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE billing_refund_approval ( + id BIGSERIAL PRIMARY KEY, + refund_amount DECIMAL(12,2) NOT NULL, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + charge_item_ids TEXT, + refund_reason TEXT, + applicant_id BIGINT, + applicant_name VARCHAR(50), + apply_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + approval_level INTEGER DEFAULT 1, + approver_id BIGINT, + approver_name VARCHAR(50), + approve_time TIMESTAMP, + approval_result VARCHAR(20), + approval_remark TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE billing_daily_detail ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + bill_date DATE NOT NULL, + total_amount DECIMAL(12,2), + self_pay_amount DECIMAL(12,2), + insurance_amount DECIMAL(12,2), + item_count INTEGER, + detail_data TEXT, + generated_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/billing/refund/approval/page 退费审批分页 +POST /healthlink-his/api/v1/billing/refund/approval/submit 提交审批 +POST /healthlink-his/api/v1/billing/refund/approval/approve/{id} 审批 + +GET /healthlink-his/api/v1/billing/daily-detail/{encounterId} 一日清单查询 +POST /healthlink-his/api/v1/billing/daily-detail/generate 生成一日清单 + +GET /healthlink-his/api/v1/billing/receipt/page 票据记录分页 +PUT /healthlink-his/api/v1/billing/receipt/void/{id} 票据作废 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 退费审批 | charge/RefundApproval.vue | 新建 | 退费审批列表+审批表单 | +| 一日清单 | charge/DailyDetail.vue | 新建 | 患者每日费用明细 | +| 票据管理 | charge/ReceiptManage.vue | 新建 | 票据记录+补打+作废 | + +### 关键业务规则 + +1. 退费金额>1000元需两级审批(科室+财务) +2. 住院一日清单每日自动生成,支持在线查看和打印 +3. 票据作废需记录原因,作废后不可恢复 +4. 三方支付退费必须原路退回 +5. 对账差异>0.01元需人工核实 + +--- + +## 11. 挂号(appointmentmanage) + +### 已有代码分析 + +| 层 | appointmentmanage | +|----|------------------| +| Controller | 7 (Ticket/ScheduleSlot(空)/SchedulePool/DoctorSchedule/Dept/DeptAppthours/ClinicRoom) | +| AppService | 8 | +| 前端 | appoinmentmanage/ 5 vue, appointmentmanage/ 1 vue | + +已有功能: 号源管理(查询/预约/取消/取签到/停诊)、医生排班(CRUD+今日排班)、号源池管理、科室管理、预约工作时间、诊室管理。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 排队叫号 | 现场挂号排队叫号系统 | 新增 registration_queue 表 | +| 爽约管理 | 爽约记录+黑名单管理 | 新增 registration_no_show 表 | +| 分时段预约 | 按时间段细分预约时段 | 复用 ScheduleSlot(目前为空Controller) | +| 挂号统计 | 按科室/医生/时段的挂号量统计 | 复用现有数据,增加统计接口 | +| 预约提醒 | 预约前一天短信/微信提醒 | 新增 appointment_reminder 表 | + +### 业务流程 + +``` +预约挂号流程: + 选择科室/医生/日期/时段 → 选择号源 → 确认预约 + → 预约成功(生成预约号) → 发送预约提醒(D-1) + → 患者到院 → 取号签到 → 排队等候 → 叫号就诊 + +现场挂号流程: + 选择科室 → 选择医生 → 确认挂号 + → 缴费(挂号费) → 生成排队号 → 排队叫号 +``` + +### 数据库设计 + +```sql +-- V2026_0629__appointment_enhancement.sql +CREATE TABLE registration_queue ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + queue_date DATE NOT NULL, + queue_no VARCHAR(20) NOT NULL, + queue_type VARCHAR(20) NOT NULL, + dept_id BIGINT, + doctor_id BIGINT, + queue_status VARCHAR(20) DEFAULT 'WAITING', + call_time TIMESTAMP, + call_count INTEGER DEFAULT 0, + complete_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE registration_no_show ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + appointment_id BIGINT, + no_show_date DATE NOT NULL, + reason VARCHAR(50), + blacklisted CHAR(1) DEFAULT '0', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE appointment_reminder ( + id BIGSERIAL PRIMARY KEY, + appointment_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + reminder_type VARCHAR(20) NOT NULL, + reminder_time TIMESTAMP NOT NULL, + reminder_content TEXT, + send_status VARCHAR(20) DEFAULT 'PENDING', + send_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/appointment/queue/today 今日排队列表 +POST /healthlink-his/api/v1/appointment/queue/call 叫号 +PUT /healthlink-his/api/v1/appointment/queue/complete/{id} 就诊完成 +GET /healthlink-his/api/v1/appointment/queue/stats 排队统计 + +POST /healthlink-his/api/v1/appointment/no-show/record 爽约记录 +GET /healthlink-his/api/v1/appointment/no-show/page 爽约分页 + +GET /healthlink-his/api/v1/appointment/statistics 挂号统计 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 排队叫号 | appoinmentmanage/QueueCall.vue | 新建 | 实时排队列表+叫号按钮 | +| 爽约管理 | appoinmentmanage/NoShow.vue | 新建 | 爽约记录+黑名单 | +| 挂号统计 | appoinmentmanage/Statistics.vue | 新建 | 统计图表 | + +### 关键业务规则 + +1. 爽约3次自动进入黑名单,限制预约 +2. 叫号3次未到自动跳过 +3. 预约提醒在就诊前1天发送 +4. 同一患者同一医生每天只能挂1个号 + +--- + +## 12. 门诊(outpatientmanage) + +### 已有代码分析 + +| 层 | outpatientmanage | +|----|-----------------| +| Controller | 3 (OutpatientTreatment/OutpatientSkinTestApp/OutpatientInfusion) | +| AppService | 3 | +| 前端 | outpatientenhanced/ 1 vue | + +已有功能: 门诊处置(执行/取消)、皮试记录(CRUD)、门诊输液(患者列表/待执行/执行/撤销)。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 门诊病历 | 门诊病历的书写和查看 | 复用 document 模块的 DocRecord | +| 随访管理 | 门诊患者随访计划和执行 | 新增 outpatient_followup 表 | +| 复诊提醒 | 慢病患者复诊自动提醒 | 新增 outpatient_reminder 表 | +| 门诊处方点评 | 处方合理性点评和统计 | 新增 outpatient_prescription_review 表 | + +### 业务流程 + +``` +门诊处置流程: + 护士站查询处置单 → 扫码核对患者 → 执行处置 + → 记录执行结果 → 标记完成 + +随访流程: + 出院/门诊结束 → 生成随访计划 → 按计划提醒 + → 电话/短信随访 → 记录随访结果 → 统计分析 +``` + +### 数据库设计 + +```sql +-- V2026_0630__outpatient_enhancement.sql +CREATE TABLE outpatient_followup ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT, + patient_id BIGINT NOT NULL, + doctor_id BIGINT, + doctor_name VARCHAR(50), + followup_type VARCHAR(30) NOT NULL, + followup_reason TEXT, + planned_date DATE NOT NULL, + actual_date DATE, + status VARCHAR(20) DEFAULT 'PLANNED', + followup_result TEXT, + followup_by BIGINT, + followup_by_name VARCHAR(50), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE outpatient_reminder ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT, + reminder_type VARCHAR(30) NOT NULL, + reminder_content TEXT, + remind_date DATE NOT NULL, + send_status VARCHAR(20) DEFAULT 'PENDING', + send_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/outpatient/followup/page 随访分页 +POST /healthlink-his/api/v1/outpatient/followup 创建随访 +POST /healthlink-his/api/v1/outpatient/followup/complete/{id} 完成随访 +GET /healthlink-his/api/v1/outpatient/followup/pending 待随访列表 + +GET /healthlink-his/api/v1/outpatient/reminder/pending 待提醒列表 +POST /healthlink-his/api/v1/outpatient/reminder/generate 生成提醒 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 随访管理 | outpatientenhanced/Followup.vue | 新建 | 随访计划+执行+统计 | +| 复诊提醒 | outpatientenhanced/Reminder.vue | 新建 | 提醒列表+发送 | + +### 关键业务规则 + +1. 慢病患者每次就诊后自动生成随访计划 +2. 随访提醒通过短信/微信推送 +3. 随访完成率纳入科室考核 + +--- + +## 13. 住院入出转(inpatientmanage) + +### 已有代码分析 + +| 层 | inpatientmanage | +|----|----------------| +| Controller | 5 (NursingVitalSignsChart/VitalSigns/PatientHome/NursingRecord/Deposit) | +| AppService | 4 | +| 前端 | inHospitalManagement/ 43 vue | + +已有功能: 三测单(体温单)管理、生命体征记录、患者首页(入院/转床/转科/出院)、护理记录单(CRUD+模板)、预交金管理。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 预住院管理 | 预住院登记、检查、正式入院转归 | 新增 pre_admission 表 | +| 出院小结 | 出院小结自动生成和填写 | 复用 document 模块的 DischargeSummary | +| 转院管理 | 转院申请、审批、执行 | 新增 transfer_record 表 | +| 死亡登记 | 死亡病例登记和报告 | 新增 death_register 表 | +| 入院评估 | 入院护理评估(生活自理能力/营养/心理) | 复用 nurse_assessment(模块6) | + +### 业务流程 + +``` +预住院流程: + 预住院登记 → 术前检查 → 检查结果审核 + → 确认入院 → 分配床位 → 正式入院 + → 预住院费用转入住院费用 + +出院流程: + 医生开立出院医嘱 → 护士核对(药品/费用/物品) + → 出院宣教 → 结算出院 → 出院小结 + → 病案归档 → 随访计划 + +转院流程: + 转院申请(转出科室) → 接收医院确认 → 审批 + → 转院准备(病历/药品/物品) → 转院执行 + → 转出登记 → 接收确认 +``` + +### 数据库设计 + +```sql +-- V2026_0631__inpatient_enhancement.sql +CREATE TABLE pre_admission ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + expected_dept_id BIGINT, + expected_doctor_id BIGINT, + expected_diagnosis TEXT, + admission_reason TEXT, + pre_admission_status VARCHAR(20) DEFAULT 'PENDING', + register_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + register_by BIGINT, + register_by_name VARCHAR(50), + admission_time TIMESTAMP, + admission_encounter_id BIGINT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE transfer_record ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + transfer_type VARCHAR(20) NOT NULL, + from_dept_id BIGINT, + from_dept_name VARCHAR(100), + to_dept_id BIGINT, + to_dept_name VARCHAR(100), + to_hospital_name VARCHAR(200), + transfer_reason TEXT, + transfer_time TIMESTAMP, + transfer_by BIGINT, + transfer_by_name VARCHAR(50), + receive_by BIGINT, + receive_by_name VARCHAR(50), + status VARCHAR(20) DEFAULT 'PENDING', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE death_register ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + death_time TIMESTAMP NOT NULL, + death_cause TEXT, + death_certificate_no VARCHAR(50), + reporter_id BIGINT, + reporter_name VARCHAR(50), + report_time TIMESTAMP, + status VARCHAR(20) DEFAULT 'REPORTED', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +POST /healthlink-his/api/v1/inpatient/pre-admission 预住院登记 +GET /healthlink-his/api/v1/inpatient/pre-admission/page 预住院分页 +PUT /healthlink-his/api/v1/inpatient/pre-admission/admit/{id} 确认入院 + +POST /healthlink-his/api/v1/inpatient/transfer/apply 转院申请 +GET /healthlink-his/api/v1/inpatient/transfer/page 转院分页 +PUT /healthlink-his/api/v1/inpatient/transfer/approve/{id} 转院审批 +PUT /healthlink-his/api/v1/inpatient/transfer/execute/{id} 转院执行 + +POST /healthlink-his/api/v1/inpatient/death-register 死亡登记 +GET /healthlink-his/api/v1/inpatient/death-register/page 死亡登记分页 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 预住院 | inHospitalManagement/PreAdmission.vue | 新建 | 预住院登记+检查+入院转归 | +| 转院管理 | inHospitalManagement/Transfer.vue | 新建 | 转院申请+审批+执行 | +| 死亡登记 | inHospitalManagement/DeathRegister.vue | 新建 | 死亡登记表单+查询 | + +### 关键业务规则 + +1. 预住院期间的检查费用在正式入院时转入住院费用 +2. 转院必须经科室主任审批 +3. 死亡病例必须在24小时内完成死亡登记 +4. 死亡病例必须进行死亡讨论(复用 mrhomepage 模块) +5. 出院后48小时内完成出院小结 + +--- + +## 14. 医保(ybmanage) + +### 已有代码分析 + +| 层 | ybmanage | +|----|---------| +| Controller | 3 (YbController 1065行/YbInpatientController/YbElepController) | +| Service | 3 (IYbService/IYbEleHttpService/IYbEleBaseService) | +| Mapper | 2 | +| DTO | 28+ | +| 前端 | ybmanagement/ 15 vue | + +已有功能: 医保签到/人员信息/慢病/目录对照(3301/3302)/对总账(3201)/对明细账(3202)/清算(3203A-3205A)/商品管理(3501-3507)/结算清单(4101A)/事前事中(3101/3103)/门诊退费(2208)/冲正(2601)/费用明细(2204)/住院登记(2401-2403)/住院出院/病案上传/电子处方全生命周期。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 对账明细增强 | 对账差异自动标记和处理 | 新增 yb_reconcile_detail_enhance 表 | +| DRG预警 | 医保DRG分组异常预警和CMI监控 | 新增 yb_drg_alert 表 | +| 医保目录同步 | 定期同步医保目录更新 | 新增 yb_catalog_sync_log 表 | +| 医保费用监控 | 实时监控医保费用占比和异常 | 复用现有数据,增加统计接口 | + +### 数据库设计 + +```sql +-- V2026_0632__yb_enhancement.sql +CREATE TABLE yb_drg_alert ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + alert_type VARCHAR(30) NOT NULL, + alert_level VARCHAR(10) DEFAULT 'WARNING', + drg_code VARCHAR(20), + drg_name VARCHAR(100), + cmi_value DECIMAL(6,3), + expected_cmi DECIMAL(6,3), + alert_detail TEXT, + alert_status VARCHAR(20) DEFAULT 'OPEN', + handler_id BIGINT, + handler_name VARCHAR(50), + handle_time TIMESTAMP, + handle_result TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE yb_catalog_sync_log ( + id BIGSERIAL PRIMARY KEY, + sync_type VARCHAR(30) NOT NULL, + sync_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + sync_status VARCHAR(20) DEFAULT 'PENDING', + total_count INTEGER DEFAULT 0, + success_count INTEGER DEFAULT 0, + fail_count INTEGER DEFAULT 0, + error_msg TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/yb/drg-alert/page DRG预警分页 +POST /healthlink-his/api/v1/yb/drg-alert/handle 处理预警 +GET /healthlink-his/api/v1/yb/drg-alert/stats 预警统计 + +POST /healthlink-his/api/v1/yb/catalog-sync/trigger 触发目录同步 +GET /healthlink-his/api/v1/yb/catalog-sync/log 同步日志 + +GET /healthlink-his/api/v1/yb/fee-monitor/stats 费用监控统计 +GET /healthlink-his/api/v1/yb/fee-monitor/abnormal 异常费用列表 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| DRG预警 | ybmanagement/DrgAlert.vue | 新建 | 预警列表+处理+统计 | +| 费用监控 | ybmanagement/FeeMonitor.vue | 新建 | 实时费用监控+异常告警 | + +### 关键业务规则 + +1. DRG分组后自动检查CMI值,偏差>20%预警 +2. 医保目录每月自动同步,有更新时通知 +3. 医保费用占比超过85%自动预警 +4. 异常费用必须48小时内处理 + +--- + +## 15. 系统管理(system) + +### 已有代码分析 + +| 层 | system | +|----|--------| +| Controller | 5 (DataExport/SysAuditLog/Dashboard/ApiAuth/Home) | +| 前端 | system/ 20 vue, monitor/ 9 vue | + +已有功能: 通用Excel/PDF导出、审计日志(CRUD)、仪表盘配置(CRUD+概览)、API认证管理、首页统计。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 系统参数配置 | 全局参数管理(可热更新) | 新增 sys_config 表 | +| 消息通知 | 站内消息/短信/微信通知 | 新增 sys_notification 表 | +| 定时任务管理 | 可视化管理Quartz定时任务 | 新增 sys_scheduled_job 表 | +| 操作日志增强 | 增加请求/响应体记录 | 扩展 audit_log 增加字段 | + +### 数据库设计 + +```sql +-- V2026_0633__system_enhancement.sql +CREATE TABLE sys_config ( + id BIGSERIAL PRIMARY KEY, + config_group VARCHAR(50) NOT NULL, + config_key VARCHAR(100) NOT NULL, + config_value TEXT, + config_type VARCHAR(10) DEFAULT 'STRING', + description VARCHAR(200), + enabled CHAR(1) DEFAULT '1', + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE sys_notification ( + id BIGSERIAL PRIMARY KEY, + title VARCHAR(200) NOT NULL, + content TEXT, + notification_type VARCHAR(30) NOT NULL, + sender_id BIGINT, + sender_name VARCHAR(50), + receiver_id BIGINT, + receiver_name VARCHAR(50), + send_channel VARCHAR(20) DEFAULT 'SYSTEM', + send_status VARCHAR(20) DEFAULT 'PENDING', + read_status VARCHAR(20) DEFAULT 'UNREAD', + read_time TIMESTAMP, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); + +CREATE TABLE sys_scheduled_job ( + id BIGSERIAL PRIMARY KEY, + job_name VARCHAR(100) NOT NULL, + job_group VARCHAR(50) DEFAULT 'DEFAULT', + invoke_target TEXT NOT NULL, + cron_expression VARCHAR(100) NOT NULL, + misfire_policy VARCHAR(20) DEFAULT 'DO_NOTHING', + concurrent CHAR(1) DEFAULT '0', + enabled CHAR(1) DEFAULT '1', + last_run_time TIMESTAMP, + next_run_time TIMESTAMP, + run_count INTEGER DEFAULT 0, + description VARCHAR(200), + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/system/config/page 参数分页 +GET /healthlink-his/api/v1/system/config/group/{group} 按组查询 +POST /healthlink-his/api/v1/system/config 保存参数 +DELETE /healthlink-his/api/v1/system/config/{id} 删除参数 + +GET /healthlink-his/api/v1/system/notification/page 消息分页 +GET /healthlink-his/api/v1/system/notification/unread 未读消息 +POST /healthlink-his/api/v1/system/notification/read/{id} 标记已读 +POST /healthlink-his/api/v1/system/notification/read-all 全部已读 + +GET /healthlink-his/api/v1/system/scheduled-job/page 定时任务分页 +POST /healthlink-his/api/v1/system/scheduled-job 保存任务 +PUT /healthlink-his/api/v1/system/scheduled-job/{id} 更新任务 +PUT /healthlink-his/api/v1/system/scheduled-job/pause/{id} 暂停 +PUT /healthlink-his/api/v1/system/scheduled-job/resume/{id} 恢复 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 参数配置 | system/SysConfig.vue | 新建 | 参数分组+CRUD | +| 消息中心 | system/Notification.vue | 新建 | 消息列表+已读/未读 | +| 定时任务 | system/ScheduledJob.vue | 新建 | 任务CRUD+暂停/恢复+执行日志 | + +### 关键业务规则 + +1. 系统参数修改立即生效(热更新) +2. 定时任务支持Cron表达式配置 +3. 消息通知支持站内消息+短信+微信 +4. 操作日志保留至少180天 + +--- + +## 16. 字典/基础数据(datadictionary + basedatamanage) + +### 已有代码分析 + +| 层 | datadictionary | basedatamanage | +|----|---------------|----------------| +| Controller | 7 (Supplier/Medication/ItemDefinition/ICDCode/Disease/DiagnosisTreatment/Device) | 8 (PractitionerRole/Practitioner/OrganizationLocation/Organization/OperatingRoom/Location/Frequency/BodyStructure) | +| AppService | 8 | 7 | +| 前端 | basicmanage/ 39 vue, catalog/ 13 vue, drug/ 7 vue | + +已有功能: 供应商/药品目录/项目定价/ICD-10/病种/诊疗目录/器材目录管理(全部CRUD+导入导出)、岗位/参与者/机构/位置/手术室/频次/身体部位管理。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 数据版本管理 | 字典数据变更版本追踪 | 新增 dict_change_log 表 | +| 批量导入校验 | 导入时的数据校验和错误反馈 | 扩展现有导入功能增加校验 | +| 数据导出审计 | 字典导出操作审计 | 复用 audit_log | +| 字典数据对比 | 两套字典数据差异对比 | 新增 dict_diff 表 | + +### 数据库设计 + +```sql +-- V2026_0634__dict_enhancement.sql +CREATE TABLE dict_change_log ( + id BIGSERIAL PRIMARY KEY, + dict_type VARCHAR(50) NOT NULL, + dict_code VARCHAR(50), + change_type VARCHAR(20) NOT NULL, + old_value TEXT, + new_value TEXT, + change_by BIGINT, + change_by_name VARCHAR(50), + change_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + change_reason TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/dict/change-log/page 变更日志分页 +GET /healthlink-his/api/v1/dict/change-log/type/{dictType} 按类型查询 + +POST /healthlink-his/api/v1/dict/import/validate 导入校验 +GET /healthlink-his/api/v1/dict/import/validate/{taskId} 校验结果 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 变更日志 | basicmanage/ChangeLog.vue | 新建 | 变更历史+对比视图 | + +### 关键业务规则 + +1. 字典数据变更必须记录操作日志 +2. 已被引用的字典数据不可删除,只能停用 +3. 批量导入必须先校验再导入 +4. 字典编码全局唯一 + +--- + +## 17. 电子签名(ca) + +### 已有代码分析 + +| 层 | ca | +|----|-----| +| Controller | 1 (CaSignatureController) | +| AppService | 1 (ICaSignatureAppService) | +| 前端 | casignature/ 3 vue | + +已有功能: 签名、验证签名、签名历史、撤销签名、签名统计。 + +### 缺失功能清单 + +| 功能 | 描述 | 实现方式 | +|------|------|---------| +| 签名模板 | 常用签名模板管理 | 新增 ca_signature_template 表 | +| 批量签名 | 批量签署多份文书 | 扩展签名接口支持批量 | +| 签名验证增强 | 验证签名完整性和时间戳 | 复用现有功能,增加验证维度 | +| 签名日志 | 签名操作详细日志 | 新增 ca_signature_log 表 | + +### 数据库设计 + +```sql +-- V2026_0635__ca_enhancement.sql +CREATE TABLE ca_signature_template ( + id BIGSERIAL PRIMARY KEY, + template_name VARCHAR(100) NOT NULL, + document_type VARCHAR(50) NOT NULL, + signature_config TEXT, + is_default CHAR(1) DEFAULT '0', + enabled CHAR(1) DEFAULT '1', + created_by BIGINT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + update_time TIMESTAMP, + update_by VARCHAR(64) +); + +CREATE TABLE ca_signature_log ( + id BIGSERIAL PRIMARY KEY, + signature_id BIGINT NOT NULL, + action VARCHAR(30) NOT NULL, + document_type VARCHAR(50), + document_id BIGINT, + signer_id BIGINT, + signer_name VARCHAR(50), + action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + action_result VARCHAR(20), + ip_address VARCHAR(50), + user_agent TEXT, + del_flag CHAR(1) DEFAULT '0', + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64) +); +``` + +### API接口设计 + +``` +GET /healthlink-his/api/v1/ca-signature/template/page 模板分页 +POST /healthlink-his/api/v1/ca-signature/template 保存模板 +DELETE /healthlink-his/api/v1/ca-signature/template/{id} 删除模板 + +POST /healthlink-his/api/v1/ca-signature/batch-sign 批量签名 +GET /healthlink-his/api/v1/ca-signature/log/{documentType}/{documentId} 签名日志 +``` + +### 前端页面设计 + +| 页面 | 路径 | 类型 | 说明 | +|------|------|------|------| +| 签名模板 | casignature/SignatureTemplate.vue | 新建 | 模板CRUD | + +### 关键业务规则 + +1. 签名后文书不可篡改 +2. 签名操作必须记录IP和设备信息 +3. 批量签名最多100份/次 +4. 签名证书到期前30天提醒更新 + +--- + +## 附录:Flyway迁移文件清单 + +| 文件名 | 模块 | 说明 | +|--------|------|------| +| V2026_0618__blood_transfusion_record.sql | 住院医生站 | 输血管理表 | +| V2026_0619__clinical_pathway_execution_enhancement.sql | 住院医生站 | 临床路径+危急值处理 | +| V2026_0620__anesthesia_enhancement.sql | 手术麻醉 | ASA评估+术前访视+麻醉小结+事件+PACU | +| V2026_0621__emr_version_and_rules.sql | 电子病历 | 版本管理+规则+质量评分+锁定 | +| V2026_0622__mr_management_enhancement.sql | 病案管理 | 终末质控+HQMS+DRG预警+规则 | +| V2026_0623__pharmacy_safety_enhancement.sql | 药品管理 | 交互检查+处方审核+用药提醒 | +| V2026_0624__nursing_enhancement.sql | 护士站 | 评估+任务+交接班+护理计划 | +| V2026_0625__lab_enhancement.sql | 检验 | 自动审核规则+报告模板 | +| V2026_0626__check_enhancement.sql | 检查/影像 | PACS+排队+AI辅助 | +| V2026_0627__radiology_enhancement.sql | 放射增强 | 影像随访 | +| V2026_0628__billing_enhancement.sql | 收费/计费 | 票据+退费审批+一日清单 | +| V2026_0629__appointment_enhancement.sql | 挂号 | 排队+爽约+提醒 | +| V2026_0630__outpatient_enhancement.sql | 门诊 | 随访+提醒 | +| V2026_0631__inpatient_enhancement.sql | 住院入出转 | 预住院+转院+死亡登记 | +| V2026_0632__yb_enhancement.sql | 医保 | DRG预警+目录同步 | +| V2026_0633__system_enhancement.sql | 系统管理 | 参数+通知+定时任务 | +| V2026_0634__dict_enhancement.sql | 字典/基础数据 | 变更日志 | +| V2026_0635__ca_enhancement.sql | 电子签名 | 模板+日志 | diff --git a/MD/design/PHASE2_REVIEW_DESIGN.md b/MD/design/PHASE2_REVIEW_DESIGN.md new file mode 100644 index 000000000..a139466b4 --- /dev/null +++ b/MD/design/PHASE2_REVIEW_DESIGN.md @@ -0,0 +1,1314 @@ +# HealthLink-HIS Phase 2 详细设计 — P1评审保障 + +> **文档类型**: 详细设计 +> **版本**: v1.0 +> **日期**: 2026-06-17 +> **范围**: 6大模块组 × 25个功能域 +> **技术栈**: Spring Boot 4.0.6 + JDK 25 + MyBatis-Plus 3.5.16 + Vue 3 + Element Plus + PostgreSQL 15+ + +--- + +## 目录 + +- [1. 院感管理(infection)](#1-院感管理infection) +- [2. 护理评估(nursing)](#2-护理评估nursing) +- [3. 护士站增强(inhospitalnursestation)](#3-护士站增强inhospitalnursestation) +- [4. 检验LIS(lab + Inspection + labenhanced)](#4-检验lislab--inspection--labenhanced) +- [5. 检查PACS(check + radiologyenhanced + radiologycomparison)](#5-检查pacscheck--radiologyenhanced--radiologycomparison) +- [6. ESB集成平台(esbmanage)](#6-esb集成平台esbmanage) +- [附录A: Flyway迁移脚本汇总](#附录a-flyway迁移脚本汇总) +- [附录B: API接口清单](#附录b-api接口清单) + +--- + +## 1. 院感管理(infection) + +### 1.1 已有代码分析 + +**后端结构** + +| 层级 | 文件 | 说明 | +|------|------|------| +| Controller | `InfectionController.java` (298行) | 感染病例/手卫生/环境/抗菌/耐药/职业暴露/预警/监测 | +| Controller | `InfectionEnhancedController.java` (271行) | 暴发预警/目标性监测/手卫生/耐药/环境增强 | +| AppService | `IInfectionAppService.java` + impl | 院感业务编排 | +| Domain Service | 8个IXxxService + impl | 各子域CRUD | +| Domain Entity | 8个Entity | HirInfectionCase/AntibioticUsage/OccupationalExposure/EnvironmentalMonitor/HandHygiene/MultiDrugResistant/OutbreakWarning/TargetedSurveillance | +| Mapper | 8个Mapper | 各子域持久化 | + +**已有数据库表(V9+V17)** + +| 表名 | 来源 | 说明 | +|------|------|------| +| hir_infection_case | V9 | 感染病例 | +| hir_antibiotic_usage | V9 | 抗菌药物使用 | +| hir_occupational_exposure | V9 | 职业暴露 | +| hir_environmental_monitor | V17 | 环境监测 | +| hir_hand_hygiene | V17 | 手卫生 | +| hir_multi_drug_resistant | V17 | 多重耐药菌 | +| hir_outbreak_warning | V17 | 暴发预警 | +| hir_targeted_surveillance | V17 | 目标性监测 | + +**前端结构** + +| 目录 | 文件数 | 说明 | +|------|:------:|------| +| infection/ | 8 | 7个有script | +| infectionenhanced/ | 1 | 增强页面 | + +### 1.2 缺失功能清单 + +| # | 功能 | 优先级 | 说明 | +|---|------|:------:|------| +| 1 | 院感病例自动筛查规则引擎 | P0 | 基于诊断/检验/用药自动触发筛查 | +| 2 | 暴发预警逻辑增强 | P0 | 同科室同类型感染≥3例自动预警 | +| 3 | 目标性监测ICU/手术部位 | P0 | ICU导管日/手术部位感染率 | +| 4 | 手卫生依从性统计 | P1 | 科室/个人依从率排名 | +| 5 | 环境监测管理 | P1 | 采样计划/结果录入/合格率 | +| 6 | 多重耐药菌跟踪 | P1 | 耐药菌检出→隔离→解除闭环 | + +### 1.3 业务流程 + +#### 1.3.1 院感病例自动筛查 + +``` +电子病历/检验数据 → 规则引擎匹配 → 生成筛查记录 → 院感科审核 → 确认/排除 + ↑ ↓ + 检验结果(Microbiology) 感染病例(hir_infection_case) + 用药记录(AntibioticUsage) + 诊断编码(ICD-10) +``` + +#### 1.3.2 暴发预警 + +``` +监测数据聚合 → 阈值判断(同科室≥3例/7天) → 生成预警 → 院感科响应 → 处置记录 + ↓ + 触发应急响应流程 +``` + +#### 1.3.3 目标性监测 + +``` +ICU患者 → 导管留置天数记录 → 感染事件关联 → 计算感染率(ICU-specific) +手术患者 → 手术部位感染追踪 →SSI率计算 → 科室排名 +``` + +### 1.4 数据库设计 + +#### V47__infection_rule_engine.sql + +```sql +CREATE TABLE hir_screening_rule ( + id BIGSERIAL PRIMARY KEY, + rule_code VARCHAR(50) NOT NULL, + rule_name VARCHAR(200) NOT NULL, + rule_type VARCHAR(20) NOT NULL, + trigger_condition TEXT NOT NULL, + severity VARCHAR(20) DEFAULT 'MEDIUM', + is_enabled VARCHAR(1) DEFAULT '1', + department_scope VARCHAR(500), + icd_codes TEXT, + lab_keywords TEXT, + drug_keywords TEXT, + time_window_hours INTEGER DEFAULT 72, + threshold INTEGER DEFAULT 1, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE hir_screening_record ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + rule_id BIGINT NOT NULL, + rule_code VARCHAR(50) NOT NULL, + rule_name VARCHAR(200), + match_source VARCHAR(50) NOT NULL, + match_detail TEXT, + risk_level VARCHAR(20) DEFAULT 'MEDIUM', + status VARCHAR(20) DEFAULT 'PENDING', + reviewer_id BIGINT, + review_time TIMESTAMP, + review_remark TEXT, + confirmed_case_id BIGINT, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE hir_icu_daily_record ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + icu_type VARCHAR(50) NOT NULL, + record_date DATE NOT NULL, + ventilator_hours DECIMAL(5,2) DEFAULT 0, + central_line_days INTEGER DEFAULT 0, + urinary_catheter_days INTEGER DEFAULT 0, + has_vap VARCHAR(1) DEFAULT '0', + has_clabsi VARCHAR(1) DEFAULT '0', + has_cauti VARCHAR(1) DEFAULT '0', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE hir_ssi_tracking ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + surgery_id BIGINT, + surgery_type VARCHAR(100), + surgery_date DATE, + wound_class VARCHAR(20), + ssi_type VARCHAR(20), + diagnosis_date DATE, + pathogen TEXT, + status VARCHAR(20) DEFAULT 'ACTIVE', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE hir_hygiene_compliance ( + id BIGSERIAL PRIMARY KEY, + department_id BIGINT NOT NULL, + department_name VARCHAR(100), + monitor_date DATE NOT NULL, + monitor_type VARCHAR(50) NOT NULL, + target_count INTEGER DEFAULT 0, + actual_count INTEGER DEFAULT 0, + compliance_rate DECIMAL(5,2), + observer_id BIGINT, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); +``` + +### 1.5 API接口设计 + +#### 1.5.1 规则引擎 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/infection/rule/page` | 规则分页列表 | +| POST | `/infection/rule/add` | 新增规则 | +| PUT | `/infection/rule/update` | 修改规则 | +| DELETE | `/infection/rule/delete/{id}` | 删除规则 | +| POST | `/infection/rule/toggle/{id}` | 启用/禁用规则 | +| POST | `/infection/screening/run` | 执行筛查 | +| GET | `/infection/screening/page` | 筛查记录分页 | +| PUT | `/infection/screening/review/{id}` | 审核筛查结果 | + +#### 1.5.2 暴发预警 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/infection/outbreak/statistics` | 暴发统计 | +| POST | `/infection/outbreak/auto-detect` | 自动检测暴发 | +| GET | `/infection/outbreak/timeline/{id}` | 预警时间线 | + +#### 1.5.3 目标性监测 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/infection/icu/daily/page` | ICU日志分页 | +| POST | `/infection/icu/daily/add` | 新增ICU日志 | +| GET | `/infection/icu/rate` | ICU感染率统计 | +| GET | `/infection/ssi/page` | SSI追踪分页 | +| POST | `/infection/ssi/add` | 新增SSI记录 | +| GET | `/infection/ssi/rate` | SSI感染率统计 | + +#### 1.5.4 手卫生 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/infection/hygiene/compliance/page` | 依从性分页 | +| POST | `/infection/hygiene/compliance/add` | 录入依从性数据 | +| GET | `/infection/hygiene/ranking` | 科室排名 | +| GET | `/infection/hygiene/trend` | 依从性趋势 | + +### 1.6 前端设计 + +| 页面 | 路径 | 说明 | +|------|------|------| +| 规则管理 | `infection/ruleManage.vue` | 规则CRUD + 启用/禁用 | +| 筛查工作台 | `infection/screeningWorkbench.vue` | 待审核筛查列表 + 审核操作 | +| 暴发预警 | `infectionenhanced/outbreakDashboard.vue` | 预警大屏 + 时间线 | +| ICU监测 | `infectionenhanced/icuMonitoring.vue` | ICU日志录入 + 感染率 | +| SSI追踪 | `infectionenhanced/ssiTracking.vue` | SSI记录 + 统计 | +| 手卫生统计 | `infectionenhanced/hygieneCompliance.vue` | 依从性录入 + 排名 + 趋势 | + +--- + +## 2. 护理评估(nursing) + +### 2.1 已有代码分析 + +**后端结构** + +| 层级 | 文件 | 说明 | +|------|------|------| +| Controller | 6个 | Nursing/NursingEnhanced/NursingExecution/NursingQuality/AssessmentTrend/NursingAssessmentEnhanced | +| AppService | 2个 | INursingAppService + INursingEnhancedAppService | +| Domain Entity | 12个 | NursingAssessment/AssessmentReminder/AssessmentTrend/CarePlan/ExecutionScan/Handoff/HandoffRecord/InfusionPatrol/QualityIndicator/VitalSignsChart/AssessmentIntervention/Dynamic | + +**已有数据库表(V7+V18+V21+V22+V26+V35)** + +| 表名 | 来源 | 说明 | +|------|------|------| +| nursing_assessment | V7 | 护理评估 | +| nursing_care_plan | V7 | 护理计划 | +| nursing_handoff | V7 | 护理交接 | +| nursing_assessment_reminder | V18 | 评估提醒 | +| nursing_execution_scan | V21 | 执行扫码 | +| nursing_handoff_record | V21 | 交接记录 | +| nursing_infusion_patrol | V21 | 巡视记录 | +| nursing_quality_indicator | V22 | 质量指标 | +| nursing_assessment_intervention | V26 | 评估干预 | +| nursing_assessment_dynamic | V35 | 动态评估 | + +**前端结构** + +| 目录 | 文件数 | 说明 | +|------|:------:|------| +| nursing/ | 1 | 基础评估 | +| nurseriesenhanced/ | 2 | 增强功能 | +| nursingexecution/ | 1 | 执行记录 | +| nursingquality/ | 1 | 质量指标 | +| assessmenttrend/ | 1 | 评估趋势 | +| vitalsignschart/ | 1 | 生命体征 | + +### 2.2 缺失功能清单 + +| # | 功能 | 优先级 | 说明 | +|---|------|:------:|------| +| 1 | 管道滑脱风险评估 | P0 | Morse评分+管道分类+干预措施 | +| 2 | 营养风险筛查NRS2002 | P0 | BMI+疾病+营养评分 | +| 3 | 疼痛评估NRS/VAS | P1 | 数字评分+面部表情+部位定位 | + +### 2.3 业务流程 + +#### 2.3.1 管道滑脱风险评估 + +``` +入院评估 → 管道登记(类型/留置日期/固定方式) + ↓ +定期评估(Morse评分) → 风险分级(低/中/高) + ↓ +干预措施(标识/固定/宣教) → 效果评价 → 降低风险 +``` + +#### 2.3.2 营养风险筛查NRS2002 + +``` +入院24h内 → NRS2002筛查(BMI+疾病严重度+年龄) + ↓ +评分≥3分 → 营养不良风险 → 营养科会诊 +评分<3分 → 每周复评 + ↓ +营养干预 → 效果评价 → 复评 +``` + +#### 2.3.3 疼痛评估NRS/VAS + +``` +入院评估 → 疼痛评估(NRS 0-10 / VAS / 面部表情) + ↓ +疼痛部位定位(人体图) → 疼痛性质/持续时间 + ↓ +镇痛方案 → 效果评价 → 再评估 +``` + +### 2.4 数据库设计 + +#### V48__nursing_assessment_tools.sql + +```sql +CREATE TABLE nursing_pipe_risk_assessment ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + pipe_type VARCHAR(50) NOT NULL, + pipe_name VARCHAR(200), + insertion_date DATE, + insertion_site VARCHAR(100), + fixation_method VARCHAR(100), + morse_score INTEGER DEFAULT 0, + risk_level VARCHAR(20) DEFAULT 'LOW', + intervention_measures TEXT, + assessment_date TIMESTAMP, + assessor_id BIGINT, + assessor_name VARCHAR(100), + next_assess_date TIMESTAMP, + status VARCHAR(20) DEFAULT 'ACTIVE', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE nursing_nrs2002_screening ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + bmi DECIMAL(5,2), + bmi_score INTEGER DEFAULT 0, + disease_severity INTEGER DEFAULT 0, + age_score INTEGER DEFAULT 0, + total_score INTEGER DEFAULT 0, + has_nutrition_risk VARCHAR(1) DEFAULT '0', + screening_date TIMESTAMP, + screener_id BIGINT, + screener_name VARCHAR(100), + next_screening_date TIMESTAMP, + referral_status VARCHAR(20), + referral_time TIMESTAMP, + dietitian_id BIGINT, + nutrition_plan TEXT, + outcome TEXT, + status VARCHAR(20) DEFAULT 'ACTIVE', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE nursing_pain_assessment ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + assessment_type VARCHAR(20) NOT NULL, + pain_score INTEGER, + pain_location VARCHAR(200), + pain_location_body_map TEXT, + pain_nature VARCHAR(100), + pain_duration VARCHAR(100), + pain_frequency VARCHAR(100), + aggravating_factors TEXT, + alleviating_factors TEXT, + impact_on_sleep VARCHAR(20), + impact_on_mood VARCHAR(20), + assessment_date TIMESTAMP, + assessor_id BIGINT, + assessor_name VARCHAR(100), + next_assess_date TIMESTAMP, + status VARCHAR(20) DEFAULT 'ACTIVE', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE nursing_pain_intervention ( + id BIGSERIAL PRIMARY KEY, + pain_assessment_id BIGINT NOT NULL, + intervention_type VARCHAR(50) NOT NULL, + intervention_content TEXT, + effect_evaluation TEXT, + re_assessment_score INTEGER, + intervention_time TIMESTAMP, + operator_id BIGINT, + operator_name VARCHAR(100), + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); +``` + +### 2.5 API接口设计 + +#### 2.5.1 管道滑脱风险评估 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/nursing/pipe-risk/page` | 评估记录分页 | +| POST | `/nursing/pipe-risk/add` | 新增管道评估 | +| PUT | `/nursing/pipe-risk/update` | 修改评估 | +| GET | `/nursing/pipe-risk/morse-guide` | Morse评分指南 | +| GET | `/nursing/pipe-risk/statistics` | 科室管道风险统计 | + +#### 2.5.2 营养风险筛查NRS2002 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/nursing/nrs2002/page` | 筛查记录分页 | +| POST | `/nursing/nrs2002/add` | 新增筛查 | +| PUT | `/nursing/nrs2002/update` | 修改筛查 | +| POST | `/nursing/nrs2002/refer` | 营养科会诊转介 | +| GET | `/nursing/nrs2002/statistics` | 营养风险统计 | + +#### 2.5.3 疼痛评估 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/nursing/pain/page` | 疼痛评估分页 | +| POST | `/nursing/pain/add` | 新增评估 | +| PUT | `/nursing/pain/update` | 修改评估 | +| POST | `/nursing/pain/intervene` | 疼痛干预 | +| GET | `/nursing/pain/trend` | 疼痛趋势 | +| GET | `/nursing/pain/statistics` | 疼痛统计 | + +### 2.6 前端设计 + +| 页面 | 路径 | 说明 | +|------|------|------| +| 管道风险评估 | `nursing/pipeRiskAssessment.vue` | 管道登记+Morse评分+风险分级 | +| NRS2002筛查 | `nursing/nrs2002Screening.vue` | BMI+疾病+年龄评分+转介 | +| 疼痛评估 | `nursing/painAssessment.vue` | NRS/VAS+人体图定位+干预 | +| 疼痛趋势 | `nursing/painTrend.vue` | 疼痛评分变化曲线 | + +--- + +## 3. 护士站增强(inhospitalnursestation) + +### 3.1 已有代码分析 + +**后端结构** + +| 层级 | 文件 | 说明 | +|------|------|------| +| Controller | 6个 | AdviceProcess/ATDManage/EncounterAutoRoll/MedicineSummary/NurseBilling/OrgDeviceStockTake | +| AppService | 13个 | 完整的医嘱执行、记账、药品汇总 | +| Mapper | 6个 | 各子域持久化 | + +**已有功能**: 医嘱执行处理、ATD管理、自动滚动、药品汇总、护士记账、设备盘点 + +**前端结构** + +| 目录 | 文件数 | 说明 | +|------|:------:|------| +| inpatientNurse/ | 56 | 46个有script | + +### 3.2 缺失功能清单 + +| # | 功能 | 优先级 | 说明 | +|---|------|:------:|------| +| 1 | 护理文书(一般/危重记录单) | P0 | 三甲评审必查 | +| 2 | 护理质量指标上报 | P1 | 跌倒/压疮/管滑/给药错误 | +| 3 | 护理交接班重点患者提示 | P1 | 危重/手术/新入/特殊患者 | + +### 3.3 业务流程 + +#### 3.3.1 护理文书 + +``` +选择患者 → 选择文书类型(一般/危重/手术) + ↓ +填写评估(生命体征+意识+皮肤+管道+心理) + ↓ +护理措施记录 → 签名(CA) + ↓ +保存/提交 → 护士长审核 +``` + +#### 3.3.2 护理质量指标 + +``` +每月统计 → 跌倒发生率/压疮发生率/管滑发生率/给药错误率 + ↓ +科室填报 → 护理部审核 → 上报省卫健委 +``` + +#### 3.3.3 交接班重点提示 + +``` +交班护士 → 查看重点患者列表(危重/手术/新入/特殊) + ↓ +生成交班报告 → 接班护士确认 → 完成交接 +``` + +### 3.4 数据库设计 + +#### V49__nurse_station_enhancement.sql + +```sql +CREATE TABLE nursing_document ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + document_type VARCHAR(50) NOT NULL, + document_date DATE NOT NULL, + shift VARCHAR(20), + vital_signs TEXT, + consciousness VARCHAR(50), + skin_condition VARCHAR(100), + pipes_status TEXT, + psychological_state TEXT, + nursing_measures TEXT, + special_notes TEXT, + sign_time TIMESTAMP, + signer_id BIGINT, + signer_name VARCHAR(100), + reviewer_id BIGINT, + reviewer_name VARCHAR(100), + review_time TIMESTAMP, + review_remark TEXT, + status VARCHAR(20) DEFAULT 'DRAFT', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE nursing_quality_report ( + id BIGSERIAL PRIMARY KEY, + report_month VARCHAR(7) NOT NULL, + department_id BIGINT NOT NULL, + department_name VARCHAR(100), + indicator_type VARCHAR(50) NOT NULL, + indicator_name VARCHAR(200), + numerator INTEGER DEFAULT 0, + denominator INTEGER DEFAULT 0, + rate DECIMAL(8,4), + target_rate DECIMAL(8,4), + comparison_data TEXT, + improvement_measures TEXT, + reporter_id BIGINT, + reporter_name VARCHAR(100), + report_time TIMESTAMP, + reviewer_id BIGINT, + review_time TIMESTAMP, + review_remark TEXT, + status VARCHAR(20) DEFAULT 'DRAFT', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE nursing_shift_patient ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT NOT NULL, + department_id BIGINT NOT NULL, + patient_name VARCHAR(100), + bed_no VARCHAR(20), + admission_date DATE, + diagnosis TEXT, + priority_level VARCHAR(20) NOT NULL, + priority_reason TEXT, + key_nursing_points TEXT, + special_notes TEXT, + shift_date DATE NOT NULL, + shift_type VARCHAR(20) NOT NULL, + handover_nurse_id BIGINT, + handover_nurse_name VARCHAR(100), + receiver_nurse_id BIGINT, + receiver_nurse_name VARCHAR(100), + handover_time TIMESTAMP, + status VARCHAR(20) DEFAULT 'PENDING', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); +``` + +### 3.5 API接口设计 + +#### 3.5.1 护理文书 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/inhospital-nurse/document/page` | 文书分页列表 | +| POST | `/inhospital-nurse/document/add` | 新增文书 | +| PUT | `/inhospital-nurse/document/update` | 修改文书 | +| POST | `/inhospital-nurse/document/submit/{id}` | 提交审核 | +| POST | `/inhospital-nurse/document/review/{id}` | 护士长审核 | +| GET | `/inhospital-nurse/document/template/{type}` | 获取文书模板 | + +#### 3.5.2 护理质量指标 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/inhospital-nurse/quality/page` | 质量报告分页 | +| POST | `/inhospital-nurse/quality/add` | 新增报告 | +| PUT | `/inhospital-nurse/quality/update` | 修改报告 | +| POST | `/inhospital-nurse/quality/submit/{id}` | 提交审核 | +| GET | `/inhospital-nurse/quality/trend` | 指标趋势 | +| GET | `/inhospital-nurse/quality/compare` | 科室对比 | + +#### 3.5.3 交接班重点患者 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/inhospital-nurse/shift/priority-patients` | 重点患者列表 | +| POST | `/inhospital-nurse/shift/generate-report` | 生成交班报告 | +| POST | `/inhospital-nurse/shift/confirm` | 接班确认 | +| GET | `/inhospital-nurse/shift/history` | 交接班历史 | + +### 3.6 前端设计 + +| 页面 | 路径 | 说明 | +|------|------|------| +| 一般护理记录 | `inpatientNurse/nursingDocumentGeneral.vue` | 一般记录单表单+签名 | +| 危重护理记录 | `inpatientNurse/nursingDocumentCritical.vue` | 危重记录单+生命体征 | +| 质量指标上报 | `inpatientNurse/qualityIndicatorReport.vue` | 指标填报+趋势图 | +| 交接班管理 | `inpatientNurse/shiftManagement.vue` | 重点患者+交班报告 | + +--- + +## 4. 检验LIS(lab + Inspection + labenhanced) + +### 4.1 已有代码分析 + +**后端结构** + +| 层级 | 文件 | 说明 | +|------|------|------| +| Controller (lab) | 5个 | InspectionPackage/InspectionType/LabActivityDefinition/LabEnhanced/LabHistory | +| Controller (Inspection) | 10个 | ClinicalManage/Icd10/Instrument/Laboratory/LabReferenceRange/LisConfig/ObservationDef/SampleCollect/SpecimenDef | +| AppService (lab) | 2个 | IInspectionPackageAppService/IInspectionTypeAppService | +| AppService (Inspection) | 12个 | 完整的检验业务编排 | +| Domain Entity | 18个 | InspectionLabApply/Observation/Specimen/LabInternalQc/LabExternalEqa/LabResultComparison/LabReferenceRange等 | + +**已有数据库表(V19+V22+V30+V46)** + +| 表名 | 来源 | 说明 | +|------|------|------| +| lab_internal_qc | V19 | 室内质控 | +| lab_external_eqa | V19 | 室间质评 | +| lab_result_comparison | V22 | 结果比对 | +| lab_reference_range | V30 | 参考范围 | +| lab_activity_def_device_def | V46 | 设备定义 | + +**前端结构** + +| 目录 | 文件数 | 说明 | +|------|:------:|------| +| inspection/ | 10 | 全部无script! | +| labenhanced/ | 6 | 全部有script | +| labhistory/ | 1 | 历史查询 | + +### 4.2 缺失功能清单 + +| # | 功能 | 优先级 | 说明 | +|---|------|:------:|------| +| 1 | 室内质控Westgard规则 | P0 | 1-2s/1-3s/2-2s/R-4s/4-1s/10x | +| 2 | 室间质评 | P1 | 卫临检中心/省临检中心 | +| 3 | 检验报告标准格式打印 | P1 | 三甲要求标准格式 | + +### 4.3 业务流程 + +#### 4.3.1 室内质控Westgard规则 + +``` +每日质控 → 质控品检测 → 数据录入(L-J质控图) + ↓ +Westgard规则判断 → 失控(1-2s警告/1-3s失控/2-2s失控...) + ↓ +失控处理 → 原因分析 → 纠正措施 → 重新检测 + ↓ +质控在控 → 发放报告 +``` + +#### 4.3.2 室间质评 + +``` +接收质评样本 → 检测 → 结果录入 + ↓ +与靶值比对 → 计算偏倚 → 判定合格/不合格 + ↓ +不合格分析 → 整改措施 → 效果验证 +``` + +#### 4.3.3 检验报告打印 + +``` +报告审核 → 选择打印格式 → 预览 + ↓ +打印(含参考范围/印章/签名) + ↓ +打印记录归档 +``` + +### 4.4 数据库设计 + +#### V50__lab_quality_control.sql + +```sql +CREATE TABLE lab_qc_material ( + id BIGSERIAL PRIMARY KEY, + material_code VARCHAR(50) NOT NULL, + material_name VARCHAR(200) NOT NULL, + manufacturer VARCHAR(200), + lot_no VARCHAR(100), + expiration_date DATE, + target_values TEXT, + standard_deviation DECIMAL(10,4), + cv_coefficient DECIMAL(8,4), + level VARCHAR(20), + is_enabled VARCHAR(1) DEFAULT '1', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE lab_qc_result ( + id BIGSERIAL PRIMARY KEY, + material_id BIGINT NOT NULL, + instrument_id BIGINT, + test_date DATE NOT NULL, + test_item VARCHAR(100) NOT NULL, + result_value DECIMAL(12,4), + target_value DECIMAL(12,4), + sd_value DECIMAL(10,4), + cv_value DECIMAL(8,4), + westgard_result VARCHAR(20), + westgard_rules TEXT, + is失控 VARCHAR(1) DEFAULT '0', + operator_id BIGINT, + operator_name VARCHAR(100), + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE lab_ea_participation ( + id BIGSERIAL PRIMARY KEY, + year INTEGER NOT NULL, + quarter VARCHAR(10), + organizer VARCHAR(200), + organizer_type VARCHAR(50), + test_item VARCHAR(100) NOT NULL, + sample_no VARCHAR(50), + target_value DECIMAL(12,4), + allowed_deviation DECIMAL(10,4), + submitted_value DECIMAL(12,4), + bias_value DECIMAL(10,4), + bias_rate DECIMAL(8,4), + result_grade VARCHAR(20), + is_pass VARCHAR(1) DEFAULT '1', + analysis TEXT, + corrective_action TEXT, + status VARCHAR(20) DEFAULT 'PENDING', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE lab_report_print_log ( + id BIGSERIAL PRIMARY KEY, + report_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + encounter_id BIGINT, + print_format VARCHAR(50) NOT NULL, + print_count INTEGER DEFAULT 1, + printer_id BIGINT, + printer_name VARCHAR(100), + print_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); +``` + +### 4.5 API接口设计 + +#### 4.5.1 室内质控 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/lab/qc/material/page` | 质控品分页 | +| POST | `/lab/qc/material/add` | 新增质控品 | +| GET | `/lab/qc/result/page` | 质控结果分页 | +| POST | `/lab/qc/result/add` | 录入质控结果 | +| GET | `/lab/qc/lj-chart` | L-J质控图数据 | +| GET | `/lab/qc/westgard-check` | Westgard规则检查 | +| GET | `/lab/qc/statistics` | 质控统计 | + +#### 4.5.2 室间质评 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/lab/ea/page` | 质评记录分页 | +| POST | `/lab/ea/add` | 新增质评记录 | +| PUT | `/lab/ea/update` | 修改质评记录 | +| GET | `/lab/ea/compare` | 靶值比对 | +| GET | `/lab/ea/statistics` | 质评统计 | + +#### 4.5.3 报告打印 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/lab/report/preview/{id}` | 报告预览 | +| GET | `/lab/report/print/{id}` | 报告打印 | +| GET | `/lab/report/print-log` | 打印记录 | + +### 4.6 前端设计 + +| 页面 | 路径 | 说明 | +|------|------|------| +| 质控品管理 | `labenhanced/qcMaterialManage.vue` | 质控品CRUD | +| L-J质控图 | `labenhanced/ljQcChart.vue` | L-J质控图+Westgard判断 | +| 质控结果录入 | `labenhanced/qcResultEntry.vue` | 质控数据录入+自动判断 | +| 室间质评 | `labenhanced/eaParticipation.vue` | 质评记录+靶值比对 | +| 报告打印 | `labenhanced/reportPrint.vue` | 报告预览+打印+记录 | + +--- + +## 5. 检查PACS(check + radiologyenhanced + radiologycomparison) + +### 5.1 已有代码分析 + +**后端结构** + +| 层级 | 文件 | 说明 | +|------|------|------| +| Controller | 10个 | CheckMethod/CheckPart/CheckType/ExamApply/ExamAppointment/LisGroupInfo/RadiologyComparison/RadiologyEnhanced/RadiologyImage/SpecimenBarcode | +| AppService | 8个 | 完整的检查申请、报告审核 | +| Domain Entity | 17个 | ExamApply/RadiologyImage/RadiologyImageReport/RadiologyImageComparison/DicomPrintRecord/RadiologyStatistics/RadiologyUrgentReport等 | + +**已有数据库表(V19+V22+V30)** + +| 表名 | 来源 | 说明 | +|------|------|------| +| radiology_image | V30 | 影像图片 | +| radiology_image_report | V30 | 影像报告 | +| radiology_statistics | V19 | 放射统计 | +| radiology_urgent_report | V19 | 急诊报告 | +| radiology_image_comparison | V22 | 影像对比 | +| dicom_print_record | V30 | DICOM打印 | + +**前端结构** + +| 目录 | 文件数 | 说明 | +|------|:------:|------| +| inspection/ | 10 | 全部无script | +| radiologyenhanced/ | 1 | 增强功能 | +| radiologycomparison/ | 1 | 影像对比 | + +### 5.2 缺失功能清单 + +| # | 功能 | 优先级 | 说明 | +|---|------|:------:|------| +| 1 | DICOM图像采集存储 | P0 | WADO/DICOMweb协议 | +| 2 | 结构化图文报告 | P0 | 模板+结构化数据+签名 | +| 3 | 影像对比查看 | P1 | 同部位不同时期对比 | +| 4 | DICOM打印 | P1 | 胶片/纸张打印 | + +### 5.3 业务流程 + +#### 5.3.1 DICOM图像采集存储 + +``` +设备采集DICOM → 传输到PACS → 图像存储(FTP/对象存储) + ↓ +图像索引 → 关联检查申请 → 可浏览/下载 +``` + +#### 5.3.2 结构化图文报告 + +``` +选择模板 → 填写结构化字段 → 插入标注图像 + ↓ +生成报告 → 三级审核(初审/复审/终审) + ↓ +签章(CA) → 发布 → 临床可查 +``` + +#### 5.3.3 影像对比 + +``` +选择患者 → 选择对比检查(同部位不同时期) + ↓ +左右分屏对比 → 标注/测量 → 保存对比记录 +``` + +### 5.4 数据库设计 + +#### V51__pacs_enhancement.sql + +```sql +CREATE TABLE pacs_image_storage ( + id BIGSERIAL PRIMARY KEY, + study_uid VARCHAR(200) NOT NULL, + series_uid VARCHAR(200), + instance_uid VARCHAR(200), + patient_id BIGINT NOT NULL, + encounter_id BIGINT, + exam_apply_id BIGINT, + image_path VARCHAR(500), + storage_type VARCHAR(20) DEFAULT 'LOCAL', + file_size BIGINT, + modality VARCHAR(20), + body_part VARCHAR(100), + study_date TIMESTAMP, + wado_uri VARCHAR(500), + status VARCHAR(20) DEFAULT 'STORED', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE pacs_structured_report ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + encounter_id BIGINT, + exam_apply_id BIGINT NOT NULL, + report_template_id BIGINT, + report_type VARCHAR(50) NOT NULL, + structured_data JSONB, + findings TEXT, + impression TEXT, + recommendation TEXT, + report_images TEXT, + report_status VARCHAR(20) DEFAULT 'DRAFT', + first_reviewer_id BIGINT, + first_review_time TIMESTAMP, + second_reviewer_id BIGINT, + second_review_time TIMESTAMP, + final_reviewer_id BIGINT, + final_review_time TIMESTAMP, + sign_time TIMESTAMP, + signer_id BIGINT, + signer_name VARCHAR(100), + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE pacs_report_template ( + id BIGSERIAL PRIMARY KEY, + template_name VARCHAR(200) NOT NULL, + report_type VARCHAR(50) NOT NULL, + body_part VARCHAR(100), + structured_fields JSONB, + template_content TEXT, + is_default VARCHAR(1) DEFAULT '0', + is_enabled VARCHAR(1) DEFAULT '1', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE pacs_comparison_record ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + current_exam_id BIGINT NOT NULL, + comparison_exam_id BIGINT NOT NULL, + comparison_type VARCHAR(20) DEFAULT 'SIDE_BY_SIDE', + annotations TEXT, + measurements TEXT, + conclusion TEXT, + operator_id BIGINT, + operator_name VARCHAR(100), + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); +``` + +### 5.5 API接口设计 + +#### 5.5.1 DICOM图像 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/check/pacs/image/page` | 图像分页列表 | +| POST | `/check/pacs/image/store` | 存储图像 | +| GET | `/check/pacs/image/wado/{studyUid}` | WADO查询 | +| GET | `/check/pacs/image/series/{studyUid}` | 序列查询 | + +#### 5.5.2 结构化报告 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/check/pacs/report/template/page` | 模板分页 | +| POST | `/check/pacs/report/template/add` | 新增模板 | +| GET | `/check/pacs/report/page` | 报告分页 | +| POST | `/check/pacs/report/add` | 新增报告 | +| PUT | `/check/pacs/report/update` | 修改报告 | +| POST | `/check/pacs/report/review/{id}` | 审核报告 | +| POST | `/check/pacs/report/sign/{id}` | 签章 | +| GET | `/check/pacs/report/preview/{id}` | 报告预览 | + +#### 5.5.3 影像对比 + +| 方法 | 路径 | 说明 | +|------|------|------| +| POST | `/check/pacs/comparison/add` | 新增对比记录 | +| GET | `/check/pacs/comparison/history/{patientId}` | 对比历史 | +| GET | `/check/pacs/comparison/images` | 对比图像 | + +### 5.6 前端设计 + +| 页面 | 路径 | 说明 | +|------|------|------| +| DICOM浏览 | `radiologyenhanced/dicomViewer.vue` | 图像浏览+序列选择+工具栏 | +| 结构化报告 | `radiologyenhanced/structuredReport.vue` | 模板选择+结构化填写+签章 | +| 报告模板管理 | `radiologyenhanced/reportTemplate.vue` | 模板CRUD+字段配置 | +| 影像对比 | `radiologycomparison/comparisonView.vue` | 左右分屏+标注+测量 | + +--- + +## 6. ESB集成平台(esbmanage) + +### 6.1 已有代码分析 + +**后端结构** + +| 层级 | 文件 | 说明 | +|------|------|------| +| Controller | 4个 | EsbMessage/EsbReliability/EsbServiceRegistry/FhirCda | +| Domain Entity | 7个 | EsbMessage/EsbServiceRegistry/EsbDeadLetter/EsbMonitorStats/FhirResource/CdaDocument/CodeMapping | + +**已有数据库表(V13+V18+V29+V39)** + +| 表名 | 来源 | 说明 | +|------|------|------| +| sys_esb_message | V13 | ESB消息 | +| sys_esb_service_registry | V13 | 服务注册 | +| esb_cda_document | V18 | CDA文档 | +| esb_code_mapping | V18 | 编码映射 | +| esb_fhir_resource | V18 | FHIR资源 | +| esb_dead_letter | V29 | 死信队列 | +| esb_monitor_stats | V29 | 监控统计 | + +**前端结构** + +| 目录 | 文件数 | 说明 | +|------|:------:|------| +| esbmanage/ | 4 | 全部有script | +| fhircda/ | 1 | FHIR/CDA | + +### 6.2 缺失功能清单 + +| # | 功能 | 优先级 | 说明 | +|---|------|:------:|------| +| 1 | HL7 FHIR R4消息转换 | P0 | 互联互通测评核心 | +| 2 | CDA临床文档生成 | P0 | C-CDA/PIX/PDQ | +| 3 | 编码映射逻辑 | P0 | ICD-10/CPT/LOINC映射 | +| 4 | 集成监控仪表盘 | P1 | 消息流量/成功率/延迟 | +| 5 | 消息可靠性 | P1 | 重试/去重/顺序保证 | +| 6 | 接口版本管理 | P1 | 版本控制/兼容性 | + +### 6.3 业务流程 + +#### 6.3.1 FHIR R4消息转换 + +``` +HIS内部数据 → FHIR资源映射(Patient/Encounter/Observation) + ↓ +FHIR JSON/XML → 校验 → 发送到外部系统 + ↓ +响应处理 → 状态更新 → 日志归档 +``` + +#### 6.3.2 CDA临床文档 + +``` +临床数据采集 → CDA模板填充 → 生成C-CDA文档 + ↓ +数字签名 → XML封装 → 发送/存储 + ↓ +接收方验证 → 解析 → 导入 +``` + +#### 6.3.3 编码映射 + +``` +内部编码 → 映射表查询 → 目标编码 + ↓ +映射失败 → 人工映射 → 更新映射表 + ↓ +统计映射成功率 → 优化映射规则 +``` + +### 6.4 数据库设计 + +#### V52__esb_enhancement.sql + +```sql +CREATE TABLE esb_fhir_mapping ( + id BIGSERIAL PRIMARY KEY, + resource_type VARCHAR(50) NOT NULL, + his_entity VARCHAR(100) NOT NULL, + his_field VARCHAR(100) NOT NULL, + fhir_path VARCHAR(200) NOT NULL, + fhir_datatype VARCHAR(50), + transform_rule TEXT, + is_required VARCHAR(1) DEFAULT '0', + is_enabled VARCHAR(1) DEFAULT '1', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE esb_cda_template ( + id BIGSERIAL PRIMARY KEY, + template_code VARCHAR(50) NOT NULL, + template_name VARCHAR(200) NOT NULL, + template_type VARCHAR(50) NOT NULL, + cda_version VARCHAR(20) DEFAULT 'C-CDA', + template_content TEXT, + field_mappings JSONB, + is_default VARCHAR(1) DEFAULT '0', + is_enabled VARCHAR(1) DEFAULT '1', + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE esb_integration_log ( + id BIGSERIAL PRIMARY KEY, + message_id BIGINT, + service_code VARCHAR(100), + direction VARCHAR(10) NOT NULL, + source_system VARCHAR(100), + target_system VARCHAR(100), + request_payload TEXT, + response_payload TEXT, + http_status INTEGER, + response_time_ms INTEGER, + status VARCHAR(20) NOT NULL, + error_message TEXT, + retry_count INTEGER DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); + +CREATE TABLE esb_version_config ( + id BIGSERIAL PRIMARY KEY, + service_code VARCHAR(100) NOT NULL, + version VARCHAR(20) NOT NULL, + protocol VARCHAR(50), + endpoint_url VARCHAR(500), + is_current VARCHAR(1) DEFAULT '0', + is_enabled VARCHAR(1) DEFAULT '1', + deprecation_date DATE, + compatibility_notes TEXT, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + update_by VARCHAR(64), + update_time TIMESTAMP, + del_flag VARCHAR(1) DEFAULT '0' +); +``` + +### 6.5 API接口设计 + +#### 6.5.1 FHIR映射 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/esb/fhir/mapping/page` | 映射规则分页 | +| POST | `/esb/fhir/mapping/add` | 新增映射 | +| PUT | `/esb/fhir/mapping/update` | 修改映射 | +| POST | `/esb/fhir/convert` | 数据转换 | +| GET | `/esb/fhir/resource/{type}/{id}` | FHIR资源查询 | +| POST | `/esb/fhir/resource/{type}` | 创建FHIR资源 | + +#### 6.5.2 CDA文档 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/esb/cda/template/page` | 模板分页 | +| POST | `/esb/cda/template/add` | 新增模板 | +| POST | `/esb/cda/generate` | 生成CDA文档 | +| GET | `/esb/cda/document/{id}` | 获取CDA文档 | +| POST | `/esb/cda/sign/{id}` | 签章 | +| POST | `/esb/cda/validate` | 文档验证 | + +#### 6.5.3 编码映射 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/esb/code-mapping/page` | 映射表分页 | +| POST | `/esb/code-mapping/add` | 新增映射 | +| PUT | `/esb/code-mapping/update` | 修改映射 | +| POST | `/esb/code-mapping/translate` | 编码翻译 | +| GET | `/esb/code-mapping/statistics` | 映射统计 | + +#### 6.5.4 监控与版本 + +| 方法 | 路径 | 说明 | +|------|------|------| +| GET | `/esb/monitor/dashboard` | 监控仪表盘 | +| GET | `/esb/monitor/flow` | 消息流量 | +| GET | `/esb/monitor/error-rate` | 错误率统计 | +| GET | `/esb/version/page` | 版本配置分页 | +| POST | `/esb/version/add` | 新增版本 | +| PUT | `/esb/version/update` | 修改版本 | +| POST | `/esb/version/switch/{id}` | 切换版本 | + +### 6.6 前端设计 + +| 页面 | 路径 | 说明 | +|------|------|------| +| FHIR映射管理 | `esbmanage/fhirMapping.vue` | 映射规则CRUD+测试转换 | +| CDA文档管理 | `esbmanage/cdaDocument.vue` | 模板管理+文档生成+签章 | +| 编码映射 | `esbmanage/codeMapping.vue` | 映射表+翻译测试 | +| 集成监控 | `esbmanage/integrationDashboard.vue` | 流量/成功率/延迟大屏 | +| 版本管理 | `esbmanage/versionManage.vue` | 版本配置+切换 | + +--- + +## 附录A: Flyway迁移脚本汇总 + +| 版本 | 文件名 | 路径 | 内容 | +|------|--------|------|------| +| V47 | `V47__infection_rule_engine.sql` | `healthlink-his-application/src/main/resources/db/migration/` | 院感筛查规则/筛查记录/ICU日志/SSI追踪/手卫生依从 | +| V48 | `V48__nursing_assessment_tools.sql` | 同上 | 管道风险/NRS2002/疼痛评估/疼痛干预 | +| V49 | `V49__nurse_station_enhancement.sql` | 同上 | 护理文书/质量报告/交接班重点患者 | +| V50 | `V50__lab_quality_control.sql` | 同上 | 质控品/质控结果/室间质评/打印日志 | +| V51 | `V51__pacs_enhancement.sql` | 同上 | DICOM存储/结构化报告/报告模板/影像对比 | +| V52 | `V52__esb_enhancement.sql` | 同上 | FHIR映射/CDA模板/集成日志/版本配置 | + +## 附录B: API接口清单 + +| 模块 | 新增接口数 | 路径前缀 | +|------|:---------:|----------| +| 院感管理 | 16 | `/infection/` | +| 护理评估 | 14 | `/nursing/` | +| 护士站增强 | 13 | `/inhospital-nurse/` | +| 检验LIS | 15 | `/lab/` | +| 检查PACS | 15 | `/check/pacs/` | +| ESB集成 | 20 | `/esb/` | +| **合计** | **93** | — | + +--- + +> **文档版本**: v1.0 +> **最后更新**: 2026-06-17 +> **下次评审**: Phase 2 Sprint 1 开始前 diff --git a/MD/design/PHASE3_FILL_DESIGN.md b/MD/design/PHASE3_FILL_DESIGN.md new file mode 100644 index 000000000..68f828690 --- /dev/null +++ b/MD/design/PHASE3_FILL_DESIGN.md @@ -0,0 +1,1177 @@ +# 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 文件均已含 `