医疗信息系统(HIS/LIS/PACS/EMR)
医院信息系统(HIS)是数字化医院建设的核心基础设施,覆盖诊疗全流程的各个业务环节。本文从整体架构出发,深入分析 HIS、LIS、PACS、EMR 四大核心子系统的业务模型、数据架构与设计要点。
1. 医院信息系统整体架构
1.1 数字化医院全景图
现代化医院的信息系统由多个垂直子系统构成,覆盖临床、医技、管理、后勤等全业务领域:
| 子系统 | 全称 | 核心职能 |
|---|---|---|
| HIS | 医院信息系统 | 挂号收费、住院登记、药房管理、财务对账等核心业务流程 |
| EMR | 电子病历系统 | 患者病历书写、存储、质控、归档,构成患者诊疗记录 |
| LIS | 检验信息系统 | 检验申请、标本流转、仪器对接、报告审核全流程管理 |
| PACS | 影像归档与通信系统 | 医学影像存储、传输、分发与诊断报告管理 |
| RIS | 放射信息系统 | 放射科预约、登记、拍片、报告工作流管理 |
| PIS | 病理信息系统 | 病理标本采集、制片、诊断、报告管理 |
| PEIS | 体检信息系统 | 体检预约、套餐管理、结果录入、总检报告 |
| NIS | 护理信息系统 | 护理记录、医嘱执行、体温单、护理评估 |
| ORIS | 手术信息系统 | 手术排班、麻醉记录、术中护理、耗材管理 |
| CIS | 临床信息系统 | ICU/CCU 等重症监护临床数据采集与监控 |
| AIMS | 自动化信息管理系统 | 血库、消毒供应室、配液中心等辅助业务管理 |
1.2 系统间关联
各子系统通过企业服务总线(ESB)或微服务网关实现数据交换与业务协同:
- HIS 与 EMR:HIS 产生患者主索引(MPI)、挂号信息、费用信息;EMR 依赖这些信息创建就诊记录,并回写诊断结论
- HIS 与 LIS/PACS:HIS 开出检验/检查申请单,LIS/PACS 接收申请并执行,完成后回传报告结果与费用确认
- EMR 与 LIS/PACS:EMR 集成 LIS/PACS 报告,医生可在电子病历中查看检验结果与影像
- LIS 与 PACS:部分复合检查需要 LIS 结果联动 PACS 影像进行综合诊断
- 统一集成平台:所有子系统通过 HL7 v2/v3 或 FHIR 标准消息实现松耦合集成
1.3 互操作标准
HL7(Health Level Seven)
HL7 v2.x 是医疗领域最广泛使用的消息交换标准,采用竖线分隔的管道格式:
MSH|^~\&|HIS|HOSPITAL|LIS|LAB|202407101430||ORM^O01|MSG001|P|2.5
PID|1||PAT001^^^HOSPITAL||张患者||19700101|M|||北京市朝阳区^^^100000||13800138000
ORC|NW|REQ001|||CM||||^王医生
OBR|1|REQ001||CBC^全血细胞计数^L|||20240710FHIR(Fast Healthcare Interoperability Resources)是新一代 RESTful 互操作标准,基于 JSON/XML 资源模型:
{
"resourceType": "Observation",
"id": "obs-cbc-wbc",
"status": "final",
"code": {
"coding": [{ "system": "http://loinc.org", "code": "6690-2", "display": "白细胞计数" }]
},
"subject": { "reference": "Patient/pat001" },
"valueQuantity": { "value": 7.5, "unit": "10^9/L" },
"referenceRange": [{ "low": { "value": 3.5 }, "high": { "value": 9.5 } }]
}IHE(Integrating the Healthcare Enterprise)
IHE 提供了基于现有标准(HL7、DICOM)的集成规范(Integration Profiles),定义了 XDS(跨文档共享)、PIX(患者标识跨域管理)、SWF(预约工作流)等关键集成模式。
2. HIS 医院信息系统
HIS 是医院信息化的核心枢纽,管理门诊、住院、药房、财务等基础业务流程。
2.1 门诊挂号收费
2.1.1 号表维护
号表(Schedule)定义了门诊排班资源,前端与医生排班系统联动。
号表数据模型:
号表排班表 (schedule)
├─ id bigint 主键
├─ dept_id bigint 科室ID
├─ doctor_id bigint 医生ID
├─ schedule_date date 排班日期
├─ time_slot varchar 时段(上午/下午/晚上)
├─ period_seq tinyint 时段序号
├─ total_quota int 总限额
├─ remain_quota int 剩余限额
├─ appointed_quota int 已预约数
├─ visit_quota int 已就诊数
├─ reg_level tinyint 挂号级别(1-普通, 2-副主任, 3-主任, 4-特需)
├─ reg_fee decimal 挂号费
├─ treat_fee decimal 诊疗费
├─ status tinyint 状态(1-正常, 2-停诊, 3-满额)
├─ stop_reason varchar 停诊原因
├─ version int 乐观锁版本
├─ created_at datetime
├─ updated_at datetime2.1.2 挂号与退号
挂号流程:患者选择科室和医生 -> 选择号源时间段 -> 确认挂号信息 -> 支付挂号费 -> 生成挂号记录和就诊序号。
退号流程:校验退号时限(通常预约号提前一天可退,当日号不予退号) -> 退回挂号费用 -> 释放号源 -> 记录退号日志。
挂号记录表:
挂号记录表 (registration)
├─ id bigint 主键
├─ reg_no varchar 挂号单号(业务编码)
├─ patient_id bigint 患者ID
├─ patient_name varchar 患者姓名
├─ card_no varchar 就诊卡号
├─ schedule_id bigint 号表排班ID
├─ dept_id bigint 科室ID
├─ doctor_id bigint 医生ID
├─ reg_level tinyint 挂号级别
├─ reg_fee decimal 挂号费
├─ treat_fee decimal 诊疗费
├─ total_fee decimal 总费用
├─ pay_method tinyint 支付方式(1-现金, 2-微信, 3-支付宝, 4-医保, 5-银行卡)
├─ pay_status tinyint 支付状态(0-未支付, 1-已支付, 2-已退款)
├─ visit_seq int 就诊序号
├─ status tinyint 状态(1-已挂号, 2-已就诊, 3-已退号, 4-爽约)
├─ reg_time datetime 挂号时间
├─ visit_time datetime 就诊时间
├─ refund_time datetime 退号时间
├─ operator_id bigint 操作员ID
├─ created_at datetime
├─ updated_at datetime2.1.3 门诊收费
门诊收费整合处方费、检查费、检验费、治疗费等多类费用,支持一次结算。
收费数据模型:
门诊收费记录表 (outpatient_charge)
├─ id bigint 主键
├─ charge_no varchar 收费单号
├─ reg_id bigint 挂号记录ID
├─ patient_id bigint 患者ID
├─ total_amount decimal 应收总额
├─ discount_amount decimal 优惠金额
├─ pay_amount decimal 实收金额
├─ charge_type tinyint 收费类型(1-西药, 2-中成药, 3-检查, 4-检验, 5-治疗, 6-材料)
├─ pay_method tinyint 支付方式
├─ pay_status tinyint 支付状态
├─ invoice_no varchar 发票号
├─ charge_time datetime 收费时间
├─ operator_id bigint 操作员ID
├─ refund_flag tinyint 退费标志(0-正常, 1-已退费)
├─ refund_time datetime 退费时间
├─ remark varchar 备注
├─ created_at datetime
├─ updated_at datetime
门诊收费明细表 (outpatient_charge_item)
├─ id bigint 主键
├─ charge_id bigint 收费单ID
├─ item_code varchar 项目编码
├─ item_name varchar 项目名称
├─ spec varchar 规格
├─ unit varchar 单位
├─ quantity int 数量
├─ unit_price decimal 单价
├─ amount decimal 金额
├─ exec_dept_id bigint 执行科室ID
├─ doctor_id bigint 开单医生ID
├─ order_id bigint 关联医嘱ID
├─ created_at datetime2.1.4 退费
退费业务流程:定位原收费记录 -> 验证退费合法性(是否已执行、是否超出退费期限) -> 退回费用 -> 更新原记录状态 -> 生成退费凭证。支持全额退费和部分退费两种模式。退费审批流通常需要护士/药房确认未执行后再进行财务退费。
2.2 住院管理
2.2.1 入院登记
住院流程:医生开具住院通知单 -> 住院处登记 -> 分配床位 -> 预交金缴纳 -> 入区确认。
住院记录表:
住院记录表 (inpatient_admission)
├─ id bigint 主键
├─ admission_no varchar 住院号
├─ patient_id bigint 患者ID
├─ patient_name varchar 患者姓名
├─ id_card_no varchar 身份证号
├─ contact_phone varchar 联系电话
├─ contact_person varchar 联系人
├─ dept_id bigint 入院科室
├─ ward_id bigint 病区ID
├─ bed_no varchar 床位号
├─ bed_type tinyint 床位类型(1-普通, 2-医保, 3-单间, 4-VIP)
├─ admit_diagnosis varchar 入院诊断
├─ admit_doctor_id bigint 入院医生ID
├─ admit_time datetime 入院时间
├─ discharge_time datetime 出院时间
├─ discharge_diagnosis varchar 出院诊断
├─ discharge_doctor_id bigint 出院医生ID
├─ discharge_type tinyint 出院方式(1-治愈, 2-好转, 3-未愈, 4-死亡, 5-转院)
├─ status tinyint 状态(1-在院, 2-出院, 3-转科, 4-预出院)
├─ med_insurance_type varchar 医保类型
├─ med_insurance_no varchar 医保卡号
├─ created_at datetime
├─ updated_at datetime2.2.2 预交金
预交金记录表 (prepayment)
├─ id bigint 主键
├─ admission_id bigint 住院记录ID
├─ pay_type tinyint 类型(1-缴纳, 2-退回, 3-结转)
├─ amount decimal 金额
├─ pay_method tinyint 支付方式
├─ pay_time datetime 缴纳时间
├─ operator_id bigint 操作员ID
├─ receipt_no varchar 收据号
├─ remark varchar 备注
├─ created_at datetime2.2.3 每日清单
系统每日定时生成住院患者的费用明细清单,包含药品费、检查费、检验费、材料费、护理费、床位费等分类汇总。支持按日/按时间段查询,提供给患者确认。
日清单数据模型:
每日清单表 (daily_bill)
├─ id bigint 主键
├─ admission_id bigint 住院记录ID
├─ bill_date date 清单日期
├─ total_amount decimal 当日总费用
├─ drug_amount decimal 药品费
├─ exam_amount decimal 检查费
├─ lab_amount decimal 检验费
├─ material_amount decimal 材料费
├─ nursing_amount decimal 护理费
├─ bed_amount decimal 床位费
├─ treatment_amount decimal 治疗费
├─ surgery_amount decimal 手术费
├─ other_amount decimal 其他费用
├─ insurance_pay decimal 医保支付
├─ self_pay decimal 自费金额
├─ prepay_deduct decimal 预交金抵扣
├─ created_at datetime2.2.4 出院结算
出院结算流程:医生开具出院医嘱 -> 护士确认医嘱 -> 药房确认退药 -> 住院处费用汇总 -> 医保费用上传 -> 医保结算反馈 -> 患者补退费 -> 打印结算单 -> 办理出院。
结算表:
出院结算表 (settlement)
├─ id bigint 主键
├─ settlement_no varchar 结算单号
├─ admission_id bigint 住院记录ID
├─ total_amount decimal 总费用
├─ insurance_amount decimal 医保支付金额
├─ self_pay_amount decimal 自费金额
├─ prepay_total decimal 预交金总额
├─ refund_amount decimal 应退金额
├─ owe_amount decimal 欠费金额
├─ settle_time datetime 结算时间
├─ operator_id bigint 操作员ID
├─ invoice_no varchar 发票号
├─ status tinyint 状态(1-已结算, 2-已冲销, 3-已退费)
├─ created_at datetime2.2.5 医保结算
医保结算涉及与医保中心的实时交互,核心接口包括:
- 入院登记:上传住院信息获取医保登记号
- 费用上传:按医保要求将费用明细上传至医保系统(通常为每日上传或出院时批量上传)
- 结算请求:将汇总费用发送医保系统,医保返回统筹支付、个人账户支付、大病支付、自费等分项金额
- 结算撤销:发生退费或结算错误时发送撤销请求
医保结算需兼容各地不同的医保政策(职工医保、居民医保、新农合等),采用接口适配器模式处理医保局端的协议差异。
2.3 药库药房管理
2.3.1 药品字典
药品字典表:
药品字典表 (drug_dictionary)
├─ id bigint 主键
├─ drug_code varchar 药品编码(院内编码)
├─ drug_name varchar 药品名称
├─ common_name varchar 通用名
├─ english_name varchar 英文名
├─ trade_name varchar 商品名
├─ drug_category tinyint 药品分类(1-西药, 2-中成药, 3-中草药, 4-生物制品, 5-消毒剂)
├─ drug_type tinyint 药品类型(1-处方药, 2-非处方药)
├─ spec varchar 规格(如 0.25g*12片)
├─ dosage_form varchar 剂型(片剂/胶囊/注射液/颗粒等)
├─ manufacturer varchar 生产企业
├─ approval_no varchar 批准文号
├─ unit varchar 基本单位(片/支/瓶/盒)
├─ package_unit varchar 包装单位
├─ package_spec int 包装规格(每包装数量)
├─ retail_price decimal 零售价
├─ wholesale_price decimal 批发价
├─ purchase_price decimal 采购价
├─ tax_rate decimal 税率
├─ store_condition varchar 存储条件(常温/阴凉/冷藏/冷冻)
├─ expiry_days int 有效期天数
├─ narcotic_flag tinyint 麻醉药品标志(0-否, 1-是)
├─ psychotropic_flag tinyint 精神药品标志
├─ antibiotic_level tinyint 抗生素级别(0-非抗生素, 1-非限制级, 2-限制级, 3-特殊级)
├─ status tinyint 状态(1-启用, 2-停用)
├─ created_at datetime
├─ updated_at datetime2.3.2 入库出库
库存交易表:
药品库存表 (drug_inventory)
├─ id bigint 主键
├─ drug_id bigint 药品ID
├─ batch_no varchar 批号
├─ warehouse_id bigint 库房ID(药库/门诊药房/住院药房)
├─ quantity int 当前库存数量
├─ lock_quantity int 锁定数量(待发药)
├─ unit_price decimal 单价
├─ produce_date date 生产日期
├─ expiry_date date 有效期至
├─ supplier_id bigint 供应商ID
├─入库批次号 varchar 入库批次号
├─ status tinyint 状态(1-正常, 2-近效期, 3-过期, 4-冻结, 5-报废)
├─ created_at datetime
├─ updated_at datetime
药品出入库记录表 (drug_transaction)
├─ id bigint 主键
├─ transaction_no varchar 交易单号
├─ drug_id bigint 药品ID
├─ inventory_id bigint 库存ID
├─ warehouse_id bigint 库房ID
├─ batch_no varchar 批号
├─ trans_type tinyint 类型(1-入库, 2-出库, 3-报损, 4-盘点调整, 5-退供应商, 6-移库)
├─ quantity int 数量(入库为正,出库为负)
├─ unit_price decimal 单价
├─ amount decimal 金额
├─ target_warehouse_id bigint 目标库房ID(移库时使用)
├─ operator_id bigint 操作员ID
├─ audit_id bigint 审核人ID
├─ audit_time datetime 审核时间
├─ remark varchar 备注
├─ created_at datetime2.3.3 盘点
盘点流程:生成盘点计划 -> 冻结库存 -> 实物盘点录入 -> 差异计算 -> 审核调整 -> 解冻库存。支持全盘(全部药品)和抽盘(按分类/库区/药品首字母等)。
2.3.4 药房发药
门诊药房发药流程:处方审核 -> 收费确认 -> 处方传到药房 -> 自动打印配药单 -> 药师配药 -> 核对发药 -> 确认发药。住院药房发药基于医嘱,按长期医嘱(每日定时发药)和临时医嘱(即发)分别处理。
发药记录表:
发药记录表 (dispensing_record)
├─ id bigint 主键
├─ dispensing_no varchar 发药单号
├─ prescription_id bigint 处方ID
├─ patient_id bigint 患者ID
├─ drug_id bigint 药品ID
├─ inventory_id bigint 库存批次ID
├─ quantity int 发药数量
├─ dispensing_type tinyint 类型(1-门诊发药, 2-住院长期, 3-住院临时)
├─ dispensing_status tinyint 状态(0-待配药, 1-已配药, 2-已核对, 3-已发药, 4-已退药)
├─ pharmacist_id bigint 配药药师ID
├─ checker_id bigint 核对药师ID
├─ dispensing_time datetime 发药时间
├─ created_at datetime
├─ updated_at datetime2.3.5 库存预警
库存预警机制基于多维度规则:
- 下限预警:库存量低于安全库存值时触发采购建议
- 上限预警:库存积压超过最高库存值时触发停采建议
- 近效期预警:距有效期不足设定天数(如 90 天/30 天)时标黄标红
- 过期锁定:已过有效期的药品自动锁定,禁止发药
- 滞销预警:长期未出库的药品触发滞销提醒
2.4 财务对账
2.4.1 日结
每日营业结束后,各收费员对当日收费进行汇总核对:
日结记录表 (daily_settlement)
├─ id bigint 主键
├─ settlement_date date 结算日期
├─ operator_id bigint 操作员ID
├─ reg_total decimal 挂号总额
├─ drug_total decimal 药品总额
├─ exam_total decimal 检查总额
├─ lab_total decimal 检验总额
├─ treatment_total decimal 治疗总额
├─ other_total decimal 其他总额
├─ grand_total decimal 合计总额
├─ cash_total decimal 现金总额
├─ wechat_total decimal 微信总额
├─ alipay_total decimal 支付宝总额
├─ card_total decimal 银行卡总额
├─ insurance_total decimal 医保总额
├─ refund_total decimal 退费总额
├─ actual_total decimal 实收总额
├─ status tinyint 状态(1-草稿, 2-已审核, 3-已确认)
├─ audit_time datetime 审核时间
├─ auditor_id bigint 审核人ID
├─ created_at datetime2.4.2 月结与报表
月结按自然月汇总全院收入,生成财务报表:
- 收入汇总报表:按科室/收费项目/支付方式汇总收入
- 科室核算报表:各科室开单收入和执行收入分开统计
- 药品统计报表:药品消耗量排名、抗菌药物使用占比
- 医保对账报表:医保上传数据与院内数据一致性比对
- 工作量统计报表:挂号量、就诊量、住院量、手术量等运营指标
3. LIS 检验信息系统
3.1 检验流程
检验全流程可概括为:医生开单 -> 患者缴费 -> 标本采集 -> 标本核收 -> 仪器上机 -> 结果审核 -> 报告发布。
3.1.1 检验申请
医生在 EMR 或 HIS 中开出检验申请单,包含检验项目组合(如血常规、肝功能全套等)和单个检验项目。
检验申请数据模型:
检验申请单表 (lab_order)
├─ id bigint 主键
├─ order_no varchar 申请单号
├─ patient_id bigint 患者ID
├─ admission_type tinyint 就诊类型(1-门诊, 2-住院, 3-体检)
├─ reg_id bigint 挂号/住院ID
├─ dept_id bigint 开单科室
├─ doctor_id bigint 开单医生
├─ diagnosis varchar 临床诊断
├─ priority tinyint 优先级(1-急诊, 2-加急, 3-常规)
├─ status tinyint 状态(1-已开单, 2-已缴费, 3-已采样, 4-已核收, 5-检测中, 6-已审核, 7-已报告)
├─ order_time datetime 开单时间
├─ collection_time datetime 采样时间
├─ receive_time datetime 核收时间
├─ report_time datetime 报告时间
├─ report_doctor_id bigint 审核医生ID
├─ created_at datetime
├─ updated_at datetime
检验申请明细表 (lab_order_item)
├─ id bigint 主键
├─ order_id bigint 申请单ID
├─ test_code varchar 检验项目编码
├─ test_name varchar 检验项目名称
├─ test_group varchar 检验组合
├─ specimen_type varchar 标本类型(血液/尿液/粪便/脑脊液等)
├─ container varchar 容器类型
├─ quantity decimal 标本量
├─ unit_price decimal 单价
├─ status tinyint 状态
├─ result_value varchar 检验结果值
├─ result_unit varchar 结果单位
├─ ref_range varchar 参考范围
├─ abnormal_flag tinyint 异常标志(0-正常, 1-偏高, 2-偏低)
├─ result_time datetime 结果时间
├─ created_at datetime3.1.2 采样与核收
采样环节由护士或检验科人员执行标本采集,通过条码扫描确认患者身份和标本一致性。核收环节检验科确认标本是否合格(无溶血、无凝块、标本量足够),合格则签收上机,不合格则退回并备注原因。
3.2 条码管理
LIS 的核心是标本全流程条码化管理,采用唯一条码(通常为 EAN-128 格式)贯穿标本全生命周期。
条码编码规则示例:
条码结构:2位机构代码 + 8位日期 + 6位流水号 + 2位校验码
示例:01 20240710 000123 45标本信息表:
标本表 (specimen)
├─ id bigint 主键
├─ barcode varchar 条码编号(唯一条码)
├─ order_id bigint 申请单ID
├─ patient_id bigint 患者ID
├─ specimen_type varchar 标本类型
├─ collection_time datetime 采样时间
├─ collector_id bigint 采样人员ID
├─ collection_site varchar 采样部位
├─ receive_time datetime 核收时间
├─ receiver_id bigint 核收人员ID
├─ receive_status tinyint 核收状态(1-合格, 2-溶血, 3-凝块, 4-量不足, 5-其他不合格)
├─ reject_reason varchar 退回原因
├─ test_status tinyint 检测状态(0-未检测, 1-检测中, 2-已检测)
├─ instrument_id bigint 检测仪器ID
├─ test_start_time datetime 上机时间
├─ test_end_time datetime 检测完成时间
├─ report_status tinyint 报告状态(0-未发布, 1-已审核, 2-已发布)
├─ store_location varchar 标本保存位置
├─ discard_time datetime 销毁时间
├─ created_at datetime
├─ updated_at datetime3.3 仪器对接
LIS 与检验仪器之间的通讯是系统自动化的关键环节。
3.3.1 通讯方式
- 串口(RS-232):传统方式,通过串口线直连仪器,使用 ASTME1381-1382 或 HL7 协议
- TCP/IP 网络接口:现代仪器的标准方式,支持双向通讯
- 中间件(Middleware):通过仪器厂商提供的中间件采集数据,再通过数据库视图或 API 同步到 LIS
3.3.2 双向通讯与单向通讯
- 单向通讯:仪器将检测结果自动上传至 LIS,操作员在 LIS 中手动输入样本号与结果的对应关系。
- 双向通讯:LIS 向仪器发送检测指令(包含样本号和检验项目),仪器根据指令自动检测,检测完成后回传结果。双向通讯减少了人工干预,降低差错率。
双向通讯消息流:
LIS -> 仪器: 下载工作列表(样本号、项目编码、样本类型)
仪器 -> LIS: 确认接收
仪器检测中...
仪器 -> LIS: 上传结果(样本号、项目编码、数值、单位、异常标志)
LIS -> 仪器: 确认接收3.3.3 结果自动获取
LIS 通过定时轮询或消息订阅方式获取仪器检测结果。获取后进行自动判定:结果是否在参考范围内、是否达到危急值阈值、质量控制是否通过。
仪器接口配置模型:
仪器配置表 (instrument_config)
├─ id bigint 主键
├─ instrument_code varchar 仪器编码
├─ instrument_name varchar 仪器名称
├─ instrument_model varchar 仪器型号
├─ manufacturer varchar 生产厂商
├─ comm_type tinyint 通讯类型(1-串口, 2-TCP, 3-中间件)
├─ comm_params text JSON 通讯参数(串口号/波特率/IP/端口等)
├─ protocol_type tinyint 协议类型(1-ASTM, 2-HL7, 3-厂商协议)
├─ bidirectional tinyint 是否双向通讯(0-单向, 1-双向)
├─ auto_upload tinyint 是否自动上传结果(0-否, 1-是)
├─ poll_interval int 轮询间隔(秒)
├─ status tinyint 状态(1-启用, 2-停用)
├─ created_at datetime
├─ updated_at datetime3.4 危急值管理
危急值(Critical Value)是指检验结果异常到可能危及患者生命的数值,需要立即通知临床医生采取措施。
危急值管理流程:
- 仪器检测 -> LIS 自动比对危急值规则
- 触发危急值 -> LIS 发出警报(弹窗/声音/短信)
- 检验科审核确认 -> 系统自动通知开单医生
- 临床确认告警 -> 记录确认人和确认时间
- 未确认超时 -> 升级通知(电话通知上级医师或总值班)
危急值记录表 (critical_value)
├─ id bigint 主键
├─ order_item_id bigint 检验明细ID
├─ specimen_barcode varchar 标本条码
├─ patient_id bigint 患者ID
├─ test_code varchar 检验项目编码
├─ test_name varchar 检验项目名称
├─ result_value varchar 检验结果
├─ ref_range varchar 参考范围
├─ critical_low varchar 危急值下限
├─ critical_high varchar 危急值上限
├─ trigger_time datetime 触发时间
├─ confirm_lab_time datetime 检验科确认时间
├─ confirm_lab_user bigint 检验科确认人
├─ notify_time datetime 通知临床时间
├─ notify_method varchar 通知方式(系统弹窗/短信/电话)
├─ confirm_clinic_time datetime 临床确认时间
├─ confirm_clinic_user bigint 临床确认人(医生ID)
├─ status tinyint 状态(1-待确认, 2-已确认, 3-已处理, 4-超时升级)
├─ remark varchar 备注
├─ created_at datetime
├─ updated_at datetime危急值规则配置:
危急值规则表 (critical_value_rule)
├─ id bigint 主键
├─ test_code varchar 检验项目编码
├─ gender varchar 适用性别(M-男, F-女, A-全部)
├─ age_min int 最小年龄(天数)
├─ age_max int 最大年龄(天数)
├─ low_value varchar 下限值
├─ high_value varchar 上限值
├─ unit varchar 单位
├─ notify_timeout int 超时时间(分钟)
├─ escalate_user varchar 升级通知人角色
├─ status tinyint 状态(1-启用, 2-停用)
├─ created_at datetime
├─ updated_at datetime4. PACS 影像归档与通信系统
4.1 DICOM 标准
DICOM(Digital Imaging and Communications in Medicine)是医学影像领域的国际标准,定义了影像格式、通讯协议和服务。
4.1.1 DICOM 影像格式
DICOM 文件包含患者信息头和数据体两部分。信息头采用 Tag 标识,以 (组号, 元素号) 对表示:
| Tag | 含义 |
|---|---|
| (0008,0060) | 影像模态(CT/MR/XA/US/NM 等) |
| (0010,0010) | 患者姓名 |
| (0010,0020) | 患者 ID |
| (0020,000D) | 检查实例 UID |
| (0028,0010) | 影像行数 |
| (0028,0011) | 影像列数 |
| (0028,0030) | 像素间距 |
| (0028,0100) | 像素分配位数 |
DICOM 文件结构示意:
DICOM文件
├── Preamble(128字节,预留)
├── DICOM Prefix(4字节,'DICM')
├── Data Set
│ ├── Meta Information
│ ├── Patient Module(患者信息)
│ ├── Study Module(检查信息)
│ ├── Series Module(序列信息)
│ ├── Equipment Module(设备信息)
│ ├── Image Module(影像数据)
│ └── ...4.1.2 DICOM 通讯协议
DICOM 网络通讯基于 C-STORE(存储)、C-FIND(查询)、C-MOVE(传输)、C-GET(获取)等服务原语。以 DIMSE(DICOM Message Service Element)消息格式在 TCP/IP 端口 104/11112 上传输。
DICOM 关联协商(Association Negotiation):通讯前双方协商支持的 SOP Class(服务对象对类)、传输语法(Transfer Syntax,如 JPEG2000 Lossless、RLE 等),确保互通性。
4.1.3 DICOM Worklist
MWL(Modality Worklist)是 DICOM 的关键服务,通过 C-FIND 操作实现在影像设备上直接查询待检查患者列表,避免在设备端重复录入患者信息。
Worklist 查询流程:
影像设备 -> PACS: C-FIND RQ (查询条件: 检查日期=当天, 模态=CT)
PACS -> 影像设备: C-FIND RP (返回待检查患者列表)
影像设备 -> PACS: C-FIND RQ (选择患者后获取详细信息)
PACS -> 影像设备: C-FIND RP (患者信息、检查部位、检查参数等)4.2 影像存储
4.2.1 三级存储架构
| 存储级别 | 介质 | 访问速度 | 保留策略 | 典型容量 |
|---|---|---|---|---|
| 在线存储 | SSD/NVMe 阵列 | <10ms | 当前住院 + 近 3 个月 | 50-200 TB |
| 近线存储 | SAS/SATA 磁盘阵列 | <50ms | 近 3-5 年 | 0.5-2 PB |
| 离线存储 | 磁带库/蓝光光盘 | 分钟级 | 5 年以上(法规要求) | 10 PB+ |
影像存储表:
影像记录表 (image_study)
├─ id bigint 主键
├─ study_uid varchar 检查实例 UID(DICOM 唯一标识)
├─ patient_id bigint 患者ID
├─ patient_name varchar 患者姓名
├─ accession_no varchar 检查号(HIS/RIS 传入)
├─ modality varchar 影像模态(CT/MR/XA/CR/DR/US/MG/NM/PET)
├─ study_date date 检查日期
├─ study_time time 检查时间
├─ study_desc varchar 检查描述
├─ body_part varchar 检查部位
├─ dept_id bigint 检查科室
├─ referring_physician varchar 申请医生
├─ performing_physician varchar 执行医生
├─ series_count int 序列数
├─ instance_count int 影像总数
├─ total_size_bytes bigint 总大小(字节)
├─ storage_level tinyint 存储层级(1-在线, 2-近线, 3-离线)
├─ storage_path varchar 存储路径
├─ archive_status tinyint 归档状态(0-未归档, 1-已归档在线, 2-已归档近线, 3-已归档离线)
├─ study_status tinyint 状态(1-已登记, 2-已检查, 3-已报告, 4-已审核)
├─ report_id bigint 报告ID
├─ report_text text 诊断报告
├─ report_doctor bigint 报告医生ID
├─ audit_doctor bigint 审核医生ID
├─ report_time datetime 报告时间
├─ dicom_tags text JSON 格式的 DICOM 标签信息
├─ created_at datetime
├─ updated_at datetime
影像序列表 (image_series)
├─ id bigint 主键
├─ series_uid varchar 序列 UID
├─ study_id bigint 检查ID
├─ series_no int 序列号
├─ series_desc varchar 序列描述
├─ modality varchar 模态
├─ body_part varchar 部位
├─ series_date date 序列日期
├─ series_time time 序列时间
├─ instance_count int 影像张数
├─ series_size_bytes bigint 序列大小
├─ series_path varchar 存储路径
├─ created_at datetime
影像实例表 (image_instance)
├─ id bigint 主键
├─ sop_instance_uid varchar SOP 实例 UID
├─ series_id bigint 序列ID
├─ instance_no int 影像序号
├─ image_type varchar 影像类型(ORIGINAL/DERIVED等)
├─ rows int 行数
├─ columns int 列数
├─ bits_allocated int 像素位数
├─ pixel_spacing varchar 像素间距
├─ window_center decimal 窗位
├─ window_width decimal 窗宽
├─ file_path varchar 文件路径
├─ file_size_bytes bigint 文件大小
├─ thumbnail_path varchar 缩略图路径
├─ key_image tinyint 关键影像标志
├─ created_at datetime4.2.2 存储策略
影像数据量巨大(一次 CT 检查约 500-3000 张影像,约 200MB-1GB),需要合理设计存储策略:
- 分级存储管理(HSM):自动将访问频率低的影像迁移至低成本存储
- 压缩策略:无损压缩(如 JPEG Lossless)用于诊断用途,有损压缩用于临床浏览
- 去重与缓存:热数据缓存至 SSD,冷数据从近线/离线存储读取
- 数据完整性:定期对存储影像进行 MD5/SHA256 校验,防止静默数据损坏
4.3 影像分发
4.3.1 Web 端影像查看器
现代 PACS 系统通过 Web 查看器实现影像的零客户端访问,主流开源方案包括 CornerstoneJS 和 OHIF Viewer。
CornerstoneJS 是基于 JavaScript 的医学影像渲染引擎,支持:
- 标准 DICOM 影像渲染(窗宽窗位调整、缩放、平移、旋转)
- 多平面重建(MPR:冠状面、矢状面、任意斜面)
- 图像标注(长度、角度、面积、ROI 测量)
- 影像播放(动态序列/CTA 电影播放)
- 挂片协议(Hanging Protocol)支持
OHIF Viewer 是基于 Cornerstone 封装的完整影像查看器应用,内置:
- 研究浏览器(Study Browser)
- 系列缩略图导航
- 同步滚动与比较
- 测量工具包
- 报告集成
- 用户权限管理
4.3.2 WADO 协议
DICOM WADO(Web Access to DICOM Objects)定义了通过 HTTP/HTTPS 访问 DICOM 对象的标准接口:
| WADO 类型 | 说明 |
|---|---|
| WADO-URI | 通过 URL 参数请求影像(?studyUID=xxx&seriesUID=yyy) |
| WADO-RS | RESTful 风格(/studies/{studyUID}/series/{seriesUID}/instances/{instanceUID}) |
| STOW-RS | 通过 RESTful API 上传 DICOM 对象 |
| QIDO-RS | 通过 RESTful API 查询 DICOM 对象 |
4.4 AI 辅助诊断集成
PACS 与 AI 辅助诊断系统的集成模式:
- 数据推送模式:PACS 将影像自动推送至 AI 推理服务器,AI 服务器完成推理后回调 PACS 写入结果
- DICOM SR 回写:AI 分析结果以 DICOM 结构化报告(Structured Report, SR)格式写回 PACS
- 工作流编排:AI 作为中间节点嵌入影像工作流,影像先经 AI 预筛再分配给诊断医生
- 结果展示:AI 标注结果(病灶区域、测量值、优先级评分)叠加显示在 Web 查看器上
典型 AI 集成场景:
影像设备 -> PACS(存储原始影像)
PACS -> AI Server(推送影像副本)
AI Server -> PACS(回写:AI 标记 + 测量结果 + 危急评分)
医生打开 OHIF Viewer -> 加载原始影像 + AI 标注叠加层
医生审阅 -> 确认或修改 AI 结果 -> 签署报告5. EMR 电子病历系统
5.1 病历结构
5.1.1 结构化录入
遵循结构化电子病历设计原则,病历内容由数据元(Data Element)构成,支持离散化存储和语义检索。
病历数据结构:
病历文档表 (medical_record_document)
├─ id bigint 主键
├─ document_id varchar 文档唯一标识
├─ patient_id bigint 患者ID
├─ admission_id bigint 住院记录ID(门诊病历则关联挂号ID)
├─ visit_type tinyint 就诊类型(1-门诊, 2-住院, 3-急诊)
├─ document_type varchar 文档类型编码(入院记录/病程记录/出院小结/手术记录等)
├─ document_name varchar 文档名称
├─ template_id bigint 模板ID
├─ template_version int 模板版本
├─ structured_data longtext JSON 结构化的病历数据
├─ plain_text longtext 纯文本内容(供全文检索)
├─ status tinyint 状态(0-草稿, 1-已提交, 2-已归档, 3-已锁定, 4-已封存)
├─ version int 版本号
├─ parent_version_id bigint 父版本ID(修改历史)
├─ author_id bigint 创建医生ID
├─ author_dept_id bigint 创建科室ID
├─ submit_time datetime 提交时间
├─ created_at datetime
├─ updated_at datetime5.1.2 文档模板
模板系统是电子病历的核心能力,采用模板-章节-段落-数据元四级结构:
模板表 (doc_template)
├─ id bigint 主键
├─ template_code varchar 模板编码
├─ template_name varchar 模板名称
├─ document_type varchar 文档类型
├─ dept_id bigint 适用科室ID
├─ template_version int 版本号
├─ template_schema longtext 模板 JSON Schema 定义
├─ template_content longtext 模板默认内容(XML/JSON)
├─ status tinyint 状态(1-启用, 2-停用, 3-历史版本)
├─ published_at datetime 发布/生效时间
├─ created_by bigint 创建人
├─ created_at datetime
├─ updated_at datetime
模板段落定义表 (template_section)
├─ id bigint 主键
├─ template_id bigint 模板ID
├─ section_code varchar 段落编码(如 chief_complaint, present_illness 等)
├─ section_name varchar 段落名称
├─ section_seq int 段落排序
├─ parent_section_id bigint 父段落ID(支持嵌套段落)
├─ required_flag tinyint 是否必填
├─ element_defs text JSON 段落内数据元定义
├─ created_at datetime数据元(Data Element)定义示例:
{
"code": "BP_SYSTOLIC",
"name": "收缩压",
"type": "number",
"unit": "mmHg",
"range": [40, 300],
"decimal": 0,
"required": true,
"loinc": "8480-6"
}5.1.3 段落与元数据
标准病历段落(以入院记录为例):
| 段落编码 | 段落名称 | 说明 |
|---|---|---|
| chief_complaint | 主诉 | 患者主要症状及持续时间 |
| present_illness | 现病史 | 起病经过、诊疗经过 |
| past_history | 既往史 | 既往疾病、手术、过敏史 |
| personal_history | 个人史 | 生活习惯、职业暴露 |
| family_history | 家族史 | 遗传性疾病家族史 |
| physical_exam | 体格检查 | 生命体征、系统查体 |
| auxiliary_exam | 辅助检查 | 已完成的检查检验结果 |
| preliminary_diagnosis | 初步诊断 | 主要诊断及鉴别诊断 |
| treatment_plan | 诊疗计划 | 后续诊疗方案 |
5.2 病历归档
5.2.1 归档流程
患者出院后,病历由临床科室提交至病案室归档,流程如下:
- 提交:病历完成所有内容(出院小结完成、护理记录完整、各类同意书齐全)
- 完整性校验:系统自动检查必填项、缺失文书、签名完整性
- 病案室回收:病案室审核病历完整性,合格则回收,不合格退回补充
- 编码录入:ICD 诊断编码和手术编码录入
- 归档上架:纸质病历上架或电子病历正式归档(写死不可修改)
归档记录表:
病案归档表 (medical_record_archive)
├─ id bigint 主键
├─ admission_id bigint 住院记录ID
├─ archive_no varchar 病案号(病案室编号)
├─ icd_codes text JSON 诊断编码列表(ICD-10)
├─ surgery_codes text JSON 手术编码列表(ICD-9-CM-3)
├─ document_count int 归档文档数
├─ completeness tinyint 完整性(百分比)
├─ archive_status tinyint 归档状态(0-待提交, 1-已提交, 2-已回收, 3-已编码, 4-已完成)
├─ archive_time datetime 归档时间
├─ archive_operator bigint 归档操作员
├─ storage_location varchar 纸质病历存放位置(或电子存储路径)
├─ borrower_id bigint 当前借阅人ID(非空则在借出状态)
├─ borrow_time datetime 借阅时间
├─ expected_return_time datetime 预计归还时间
├─ lock_flag tinyint 锁定标志(0-正常, 1-锁定, 2-封存)
├─ lock_time datetime 锁定/封存时间
├─ lock_reason varchar 封存原因(法律诉讼/医疗纠纷等)
├─ created_at datetime
├─ updated_at datetime5.2.2 借阅管理
病历借阅管理控制病案借出与归还:
- 借阅申请:申请人提交借阅申请(含借阅原因、借阅期限)
- 审批流程:按借阅类型(临床借阅/科研借阅/法律调阅)走不同审批链
- 借阅记录:记录借出时间、预计归还时间、实际归还时间
- 超期催还:超期未归还自动发送提醒
- 查阅日志:电子病历按查阅操作(谁、什么时间、查看了哪个病历、查看了哪些文档)记录审计日志
5.3 病历质控
5.3.1 质控体系架构
病历质量控制分为三个层次:
| 质控层次 | 时间节点 | 质控方式 | 责任主体 |
|---|---|---|---|
| 一级质控 | 病历形成中 | 科室自控 | 科室质控员 |
| 二级质控 | 出院归档前 | 环节质控 | 病案科质控员 |
| 三级质控 | 归档后 | 终末质控 | 院级质控专家组 |
5.3.2 终末质控
出院归档后的病历质量评价,基于评分表逐项打分。
终末质控评分表模型:
质控评分表 (quality_control_form)
├─ id bigint 主键
├─ form_code varchar 评分表编码
├─ form_name varchar 评分表名称
├─ document_type varchar 适用病历类型
├─ total_score decimal 满分
├─ pass_score decimal 合格分数线
├─ form_schema longtext JSON 评分项定义
├─ status tinyint 状态(1-启用, 2-停用)
├─ created_at datetime
质控评分记录表 (quality_control_result)
├─ id bigint 主键
├─ archive_id bigint 归档记录ID
├─ admission_id bigint 住院记录ID
├─ form_id bigint 评分表ID
├─ reviewer_id bigint 质控员ID
├─ total_score decimal 总得分
├─ deduction_detail text JSON 扣分明细
├─ grade varchar 评定等级(优/良/中/差)
├─ review_type tinyint 类型(1-终末质控, 2-环节质控, 3-运行质控)
├─ review_time datetime 质控时间
├─ result_status tinyint 结果状态(1-合格, 2-不合格待修改, 3-复检合格)
├─ remark varchar 质控意见
├─ created_at datetime评分项定义示例:
{
"items": [
{
"code": "COMPLETENESS",
"name": "完整性",
"max_score": 30,
"children": [
{ "code": "ALL_DOCS", "name": "文书齐全", "max_score": 10, "deduct_rules": ["每缺一份扣2分"] },
{ "code": "MANDATORY_FIELDS", "name": "必填项完整", "max_score": 10, "deduct_rules": ["每缺一项扣1分"] },
{ "code": "SIGNATURES", "name": "签名完整", "max_score": 10, "deduct_rules": ["每缺签一处扣2分"] }
]
},
{
"code": "TIMELINESS",
"name": "及时性",
"max_score": 25,
"children": [
{ "code": "ADMIT_RECORD", "name": "入院记录8小时内完成", "max_score": 10, "deduct_rules": ["超时扣5分"] },
{ "code": "DAILY_RECORD", "name": "日常病程记录及时", "max_score": 10, "deduct_rules": ["超时每日扣2分"] },
{ "code": "DISCHARGE_SUM", "name": "出院小结24小时内完成", "max_score": 5, "deduct_rules": ["超时扣5分"] }
]
},
{
"code": "ACCURACY",
"name": "准确性",
"max_score": 25,
"children": [
{ "code": "DIAGNOSIS_MATCH", "name": "诊断符合率", "max_score": 10 },
{ "code": "DESCRIPTION_ACCURATE", "name": "描述准确", "max_score": 10 },
{ "code": "LOGICAL_CONSISTENCY", "name": "逻辑一致性", "max_score": 5 }
]
},
{
"code": "STANDARDIZATION",
"name": "规范性",
"max_score": 20,
"children": [
{ "code": "FORMAT_STANDARD", "name": "格式规范", "max_score": 10 },
{ "code": "TERM_STANDARD", "name": "术语规范", "max_score": 10 }
]
}
]
}5.3.3 环节质控(运行质控)
在患者住院期间对病历进行实时质控,在问题发生时就进行干预:
- 时限监控:监控入院记录是否在 8 小时内完成、日常病程记录的频次是否符合标准、出院小结是否在 24 小时内完成
- 完成度监控:必填段落是否填写、必填项是否为空
- 逻辑校验:诊断与性别不符(如男性患者诊断为子宫肌瘤)、诊断与年龄矛盾
- 一致性校验:护理记录体温与医嘱体温不一致、手术记录与麻醉记录时间矛盾
触发质控规则后,系统自动向责任医生推送提醒消息,超时未处理则升级至科室主任。
5.4 电子签名
5.4.1 CA 证书体系
电子签名基于 PKI(公钥基础设施)体系,由合法的第三方 CA(Certificate Authority,证书颁发机构)签发数字证书。
证书管理数据模型:
CA 证书表 (ca_certificate)
├─ id bigint 主键
├─ user_id bigint 用户ID
├─ cert_serial_no varchar 证书序列号
├─ cert_subject varchar 证书主题(CN=姓名, OU=科室, O=医院)
├─ issuer_dn varchar 颁发者 DN
├─ cert_type tinyint 证书类型(1-签名证书, 2-加密证书)
├─ cert_file_path varchar 证书文件存储路径
├─ thumbprint varchar 证书指纹(SHA-256)
├─ valid_from datetime 有效期起始
├─ valid_to datetime 有效期截止
├─ status tinyint 状态(1-有效, 2-已吊销, 3-已过期)
├─ revoke_time datetime 吊销时间
├─ revoke_reason varchar 吊销原因
├─ created_at datetime
├─ updated_at datetime5.4.2 时间戳
电子签名需与可信时间戳绑定,确保签名时间不可抵赖。时间戳服务(TSA,Time Stamp Authority)遵循 RFC 3161 标准。
签名记录表:
电子签名记录表 (electronic_signature)
├─ id bigint 主键
├─ document_id bigint 病历文档ID
├─ user_id bigint 签名用户ID
├─ cert_id bigint 证书ID
├─ sign_type tinyint 签名类型(1-撰写签名, 2-审核签名, 3-会诊签名, 4-知情同意)
├─ sign_data text XML/JSON 签名值(SignedInfo 节点)
├─ sign_value text Base64 编码的数字签名值
├─ timestamp_token text Base64 编码的时间戳令牌
├─ tsa_server varchar 时间戳服务器地址
├─ sign_time datetime 签名时间
├─ ip_address varchar 签名时 IP 地址
├─ device_info varchar 签名设备信息
├─ status tinyint 状态(1-有效, 2-已撤销)
├─ created_at datetime
├─ updated_at datetime5.4.3 签名流程
电子签名在系统层面的执行流程:
- 用户签署时,系统从 HSM(硬件安全模块)或 USB Key 中读取私钥
- 计算待签名文档的摘要(SHA-256)
- 使用用户私钥对摘要进行加密(签名)
- 构造 SignedInfo(包含签名算法、文档引用、摘要值)
- 将签名值嵌入文档或关联存储
- 向 TSA 请求 RFC 3161 时间戳,获取时间戳令牌
- 将时间戳令牌与签名值一起持久化存储
- 验签时:验证证书有效性(未过期/未吊销) -> 使用公钥解密签名值还原摘要 -> 重新计算文档摘要比对 -> 验证时间戳签名