SPR Day01 医院信息系统HIS开发
1 医院信息系统(HIS)概述
1.1 医院信息系统(HIS)介绍
1.1.1医院IT系统概述
当谈论医院中的不同系统时,以下是一些常见的医疗信息系统的缩写及其对应的含义:
HIS - 医院信息系统(Hospital Information System):HIS是医院内部的综合信息管理系统,用于管理医院的日常运营和管理工作。它包括患者登记、排班、收费、库存管理等功能,旨在协调医院的各个部门。
CIS - 临床信息系统(Clinical Information System):CIS主要用于管理与患者临床护理相关的信息,包括电子病历(EMR)、医嘱管理、药物管理等。CIS帮助医生和护士记录和访问患者的临床数据。
LIS - 医学检验信息系统(Laboratory Information System):LIS用于管理医学实验室的运营,包括检验请求、样本跟踪、结果报告等。它有助于提高实验室的效率和准确性。
PACS - 影像存档与通信系统(Picture Archiving and Cmmunication System):PACS用于管理医学图像,如X射线、CT扫描和MRI等。它允许医生和技术人员存储、检索和共享医学图像。
EMR - 电子病历(Electronic Medical Records):EMR是电子化的患者医疗记录,包括诊断、诊疗过程、处方、检查结果等。EMR取代了传统的纸质病历,提供了更好的数据管理和共享。
RIS - 放射信息系统(Radiology Information System):RIS是与医学影像相关的信息系统,包括放射科排班、图像存档、报告生成等。它有助于协调医学影像的工作流程。
这些系统在医院中相互协作,以提供全面的医疗信息管理和改善患者护理。初学者在医院信息系统领域可以了解这些系统的作用和如何协同工作,以更好地理解医院内部的信息技术基础设施。
1.1.2 什么是医院信息系统
HIS是医院使用的一种特殊计算机系统。它帮助医院管理各种医疗信息,让医院更高效地运行。这些信息包括患者的记录、医生的排班、药物存货等等。
HIS能做什么?
-
病患管理:HIS让医院轻松管理患者信息。医院可以记录患者的名字、年龄、病历、医疗记录等等。
-
挂号和排队:患者可以在HIS系统上挂号,避免长时间等待。医院可以更好地管理医生的排班,确保每个人都能及时得到服务。
-
药品管理:HIS有助于管理医院的药物存货。它可以告诉医院哪些药物需要再订购,以确保不会缺货。
-
医疗账单:HIS可以生成医疗账单,方便患者支付费用。
-
医疗记录:医生可以使用HIS记录患者的病情和治疗方案。这对于病患的追踪和医疗历史记录很有帮助。
为什么HIS重要?
HIS可以提高医院的效率,减少错误,让医疗服务更好。患者也可以更轻松地获取医疗服务。这对医院和患者都有好处。
1.2 HIS系统采购
1.2.1 公立医院HIS系统
HIS系统的主要用户是各级公立医院,而公立医院的信息系统采购通常由国家进行统一的招标采购过程。在这一过程中,各大HIS系统提供商,如东软集团、卫宁健康、中联信息等,都提供经过验证的成熟软件系统。下图是2019年公立医院HIS系统中标统计:
这些HIS系统需要应对庞大的医院运营需求,因此它们通常是庞大而复杂的,经过多年的发展和完善,已成为成熟的解决方案。作为一名初级开发者或实习生,参与这些系统的核心开发可能会超出能力范围,因为这需要深厚的专业知识和经验。
然而,作为开发者,你可能会从事与HIS系统相关的外围服务系统的开发。这些外围服务可以包括:
-
接口开发: 开发与HIS系统集成的接口,以确保数据的顺畅传输。
-
数据分析和报告: 开发用于分析医院数据和生成报告的工具,以支持医院管理和决策。
-
移动应用: 开发移动应用程序,供医院员工或患者使用,以便访问HIS系统的某些功能。
-
用户培训: 协助医院内部用户了解如何使用HIS系统,提供培训和支持。
虽然你可能不会直接参与核心HIS系统的开发,但参与外围服务系统的开发将为你提供宝贵的经验,并有助于你建立对医院信息系统的理解。这将是一个有益的职业发展阶段,为日后深入该领域做好准备。
1.2.2 私立医院HIS系统
私立医院通常不需要庞大而复杂的大型HIS系统,相反,它们更需要小型、高效且定制化的HIS系统以满足其特定需求,价格也更加敏感。因此,许多小型HIS供应商专门为这些私立医院提供技术支持和适用的解决方案。这类规模较小的HIS系统更适合大学生参与,特别是作为实习生成员,因为它们通常提供更多机会参与核心业务流程的开发和针对具体私立医院的系统定制开发。
在这个项目的背景下,你将参与开发面向小型医院的HIS系统,如牙科诊所等。这个机会将使你能够:
-
了解实际需求: 通过参与定制开发,你将深入了解小型医院的实际需求,包括诊疗流程、患者管理和财务要求。
-
核心业务开发: 你将有机会参与核心业务流程的开发,如患者挂号、病历管理、收费系统等,从而锻炼你的开发技能。
-
系统定制: 针对不同私立医院的特定需求进行系统定制,这将培养你的问题解决和定制开发技能。
-
团队协作: 你将与项目团队合作,学习如何与其他成员协同工作,以实现项目目标。
总之,参与小型私立医院HIS系统的开发将为你提供宝贵的实践经验,帮助你建立更深入的行业理解,并提供良好的职业发展机会。
1.2.3私立医院HIS采购流程
\1. 需求分析和规划:
医院确定他们的特定需求,以及他们希望对现有HIS系统进行哪些二次定制开发。这可能包括特定的功能增强、定制化的界面或其他改进。
软件企业进行初步评估,确定他们的现有系统是否能够满足医院的需求。
\2. 合同签订:
私立医院与选定的软件企业签订定制开发合同。合同中明确了需求、时间表、费用等方面的细节。
\3. 定制开发:
软件企业进行二次定制开发,根据医院的具体需求对现有HIS系统进行修改和扩展。
医院在整个过程中提供反馈,确保满足他们的期望。
\4. 系统测试和验证:
软件企业对修改后的系统进行内部测试,以确保其质量和功能正常。
私立医院也参与测试,验证系统是否按照他们的要求进行了修改。
\5. 实施和部署:
软件企业协助医院将修改后的系统部署到他们的服务器,并进行集成。
医院开始在实际运营中使用系统,同时软件企业提供支持。
\6. 培训:
软件企业提供培训,以确保医院员工了解并能正确使用二次定制开发的系统。
\7. 支持和维护:
软件企业提供定期的支持和维护,确保系统持续稳定运行,并根据医院的反馈进行调整。
这一过程主要侧重于对现有HIS系统的个性化定制开发,以满足医院特定的需求。软件企业与医院之间的合作仍然包括需求分析、开发、测试、实施、培训和维护等步骤,但目标是使HIS系统适应医院的特定业务流程和需求。
1.2.4 开发团队与过程
小型私立医院HIS软件开发项目时,项目的规模相对较小,但团队人数适中。以下是一些关于项目规模和团队的更详细描述:
团队规模:我们的开发团队总共有八名成员,包括开发人员、前端工程师、数据库管理员和项目经理。这个规模使我们能够高效地分工合作,确保项目按计划推进。
开发团队:开发团队由三名后端开发人员(包括我)、两名前端工程师、一名运维/数据库管理员、一名项目经理和一名质量保证工程师组成。这种多样性的技能和职能有助于覆盖项目中的各个方面。
项目规模:项目的规模可以描述为中等规模。我们的目标是为私立口腔科医院开发一个全面的HIS系统,包括病历管理、在线挂号、患者信息管理、医生和科室管理等多个模块。尽管规模适中,但这些功能对医院的日常运营至关重要。
项目期限:整个项目的预计期限为六个月,我们将在这段时间内完成系统的设计、开发、测试和部署。
协同工作:团队成员之间的密切协作对于项目的成功非常重要。我们定期召开会议、进行代码审查,并通过协同工具进行沟通,以确保项目的顺利推进。
尽管项目规模相对较小,但这为我们提供了更多的机会来积累宝贵的经验和技能,同时保持了项目的高质量和高效率。这也使我们能够更加亲近地与客户(私立医院)合作,根据他们的需求进行定制,以满足他们特定的医疗服务要求。
2 HIS系统开发
2.1 系统需求概述
2.1.1 HIS用例关系
HIS系统用例关系如下图所示:
人事管理员:通过SMS人事模块进行医生排班,安排医生负责诊疗工作,特别是专家医生的值班时间。他们还管理医护人员的基本信息、资质和合同等人事事务。
患者:可以通过APP选择科室和医生进行挂号,也可以亲临收费窗口办理挂号手续。他们提供个人信息,预约就诊,查看医生的可用时间和排队情况等功能。
挂号收费员:负责窗口挂号和收费工作,在PMS模块中进行挂号和收费操作,同时负责保存账单和打印发票。他们确保患者在挂号时进行费用支付并提供有关费用和支付方式的信息。
门诊医生:负责患者的诊疗工作,利用DMS模块处理患者的诊疗工作。在首诊时,根据患者的病情描述,开具检查/检验/处置申请。他们评估病情,提供治疗建议,记录病历,以及与其他医护人员协同工作以确保患者得到全面的医疗服务。
医技医生:在患者缴费后,负责处理检查/检验/处置工作,并提交上传结果。他们执行各种医疗检查、检验,以及协助医生进行处置操作,确保快速和准确的诊断和治疗。
门诊医生:根据医技医生提供的结果进行确诊,并开具成药/草药处方。他们负责制定治疗计划、药物管理,以及跟踪患者的进展。
药房管理员:在患者缴费后,负责为患者提供所开具的药品。他们管理药房库存,确保合适的药物配发给患者,同时提供用药指导。
这些详细的描述展示了各个模块之间的交互和职责,为HIS系统中的各类用户提供了更全面的服务。
2.1.2 私立HIS系统业务核心业务流程
HIS核心诊疗过程概述:
参与者:
\1. 挂号收费员: 负责患者现场挂号,收集患者基本信息,生成挂号信息,并计算相关费用。
\2. 门诊医生: 负责接待患者,进行初步诊断,并根据患者情况开具检查、检验和处置申请。
\3. 医技医生: 负责执行门诊医生开具的检查、检验和处置申请,记录检查和检验结果。
\4. 药房管理员: 负责提供患者所需的药品和医疗用品,根据门诊医生的处方。
流程:
\1. 患者现场挂号: 患者到医院挂号处进行挂号。挂号收费员会收集患者的基本信息,生成挂号信息,并计算挂号费用。
\2. 门诊医生初诊: 患者按照挂号顺序进入门诊诊室,医生与患者交流,进行初步诊断,询问症状和病史。根据诊断结果,医生可能会开具检查、检验和处置申请。
\3. 检查和检验申请: 门诊医生根据患者的需要开具检查、检验和处置申请。这些申请包括进行特定的医疗检查和检验,或执行特定的医疗处置。
\4. 费用结算: 在诊疗过程中,挂号收费员会计算与检查、检验和处置相关的费用。患者需要进行费用结算。
\5. 检查和检验: 医技医生会执行门诊医生开具的检查和检验申请,例如X光、血液检查等。检查结果将被记录。
\6. 记录检查和检验结果: 医技医生将检查和检验的结果录入系统。这些结果将与患者的电子病历关联,供门诊医生进行诊断。
\7. 门诊医生诊断: 门诊医生会根据检查和检验结果进行最终诊断,并制定治疗计划。如果需要,医生会为患者开具药品处方。
\8. 药品处方: 根据诊断,门诊医生为患者开出药品处方。药房管理员会根据处方提供患者所需的药品。
\9. 医疗处置: 如果患者需要医疗处置,医技医生会在相应的处置室进行医疗处置。这包括各种治疗程序。
\10. 药品发放: 患者到医院药房领取处方中开具的药品。药房管理员会核对患者信息,提供所需的药品。
整个流程从挂号到诊断、治疗,包括检查、检验和药物处方,确保患者获得全面的医疗服务,由不同的医院工作人员协作完成。
2.2 系统概要设计
2.2.1 系统部署架构
系统规模和用户活跃度:
这一系统适用于小规模的私立医院,每日活跃用户数量不会超过千人。鉴于这一情况,我们选择采用单体架构,而不是微服务架构。微服务架构通常用于应对更大规模的用户活跃度,但同时伴随着分布式一致性问题和更高的开发与运维成本。因此,我们认为单体架构足以满足需求,既能够提供足够的性能,又易于维护。
架构类型:
该系统采用单体架构,为小规模医院提供了足够的性能和可维护性。此外,我们使用Nginx反向代理进行分布式部署,以提高系统的可靠性和性能。反向代理有助于负载均衡,降低单一故障点的影响,同时提供更出色的系统响应时间。
数据库部署:
在数据库方面,我们采用了MySQL的主从复制方式,这不仅确保了数据备份,还提高了系统性能。主从架构实现了读写分离,使系统能够有效地处理并发请求。
全文检索引擎:
为提高医生的工作效率,我们引入了Elasticsearch搜索引擎,实现了药品和疾病信息的全文检索。这不仅加速了处方开具过程,还使医生能够更快地编写病历,从而提升医疗服务质量。
消息队列:
系统使用消息队列处理异步消息,特别是用于处理未付款的超时检验和检查单,确保及时处理这类问题。
动静分离架构:
为进一步提高性能和可靠性,系统采用了动静分离的架构。静态前端资源和移动应用程序(APP)都部署在Nginx中,实现了高效的静态资源访问和请求分发。这一架构优化了系统的响应速度和用户体验。
部署和监控工具:
系统的部署和监控工具是现代化的,它们确保了系统能够在各种情况下平稳运行,并迅速识别和解决潜在问题。监控工具可以提前检测性能问题,以避免系统中断和故障。
综上所述,该系统架构既精简又高效,满足了小规模医院的需求,提供了可靠的技术支持,确保了患者信息、财务数据、人事信息以及诊断记录的高效管理。这种系统设计使医院能够在日常运营中取得卓越的成果。
2.1.5 技术栈
私立医院HIS系统采用了多种技术,以确保系统的高效性和可维护性。
前端方面,PC端采用Vue和Element UI技术实现,为用户提供友好的用户界面。而移动端则采用uni-app技术,以适配不同移动设备,确保患者和医生在手机上也能方便地使用系统。
后端采用了Spring Boot和MyBatis技术,为系统提供强大的后台支持。这些框架不仅提高了开发效率,还确保了系统的可扩展性。
数据库方面,系统采用MySQL,并结合MyCat实现了读写分离。这有助于提升系统性能,并确保数据的备份和可靠性。
采用Elasticsearch搜索引擎,提升系统的全文检索性能,弥补数据库全文检索的性能弱点。
系统还使用了RabbitMQ,用于异步通信。特别是针对超过12小时没有处理的药品处方和处置申请,系统能够自动进行处理,确保医疗流程的顺畅。
开发过程中,项目团队使用了多种工具,包括IDEA、VSCode、HBuilderX、Git和Maven,以协同开发和管理项目,保障了项目的高效推进和版本控制。
2.1.1 私立医院HIS组成部分
从系统模块的角度描述HIS(医院信息系统)的功能性需求,包括以下主要模块:
\1. 患者管理模块(PMS - Patient Management System):
-
患者注册和信息记录:能够注册新患者并记录其个人信息,如姓名、联系信息、诊断历史等。
-
挂号和排队管理:支持患者的在线挂号、诊室排队和号源管理。
-
患者档案查询:医生和护士能够查看和更新患者档案。
\2. 财务管理模块(BMS - Billing Management System):
-
账单生成:自动生成患者的医疗账单,包括挂号费、诊疗费和药品费用等。
-
支付和发票:支持患者付款、电子账单和发票生成。
-
财务报表:生成财务报表,用于监控医院的财务状况。
\3. 人事管理模块(SMS - Staff Management System):
-
员工信息管理:记录员工的个人信息、资格、排班信息等。
-
权限管理:分配不同员工角色的权限,以确保数据安全。
\4. 诊断管理模块(DMS - Diagnosis Management System):
-
医生工作站:提供医生的工作环境,包括患者诊断、处方和治疗计划记录。
-
护士工作站:护士可以记录护理信息、患者体征和药物给予。
-
实验室管理:处理实验室检验申请、结果记录和报告。
-
药房管理:管理药品库存、处方和药品发放。
-
病历管理:记录患者的病历、症状和医疗历史。
\5. 患者移动应用模块:
-
预约挂号:患者可以使用移动应用程序在线预约挂号。
-
个人记录查询:患者能够查看和更新其个人信息记录。
这些模块构成了HIS系统的核心功能性需求,涵盖了患者管理、财务管理、人事管理、诊断管理以及提供移动应用服务。系统需要满足各个模块的需求,以支持医院的运营和提供高质量的医疗服务。
2.3 系统详细设计
2.3.1 HIS系统数据库设计
本HIS系统数据库四个模块,患者管理模块、财务管理模块、人事管理模块、诊断管理模块,合计33个数据表。
其中包括:
\1. 患者管理模块 (PMS - Patient Management System):
pms_patient: 存储患者的基本信息,如姓名、性别、联系信息。
\2. 财务管理模块 (BMS - Billing Management System):
bms_bills_record: 存储医院账单流水信息。
bms_invoice_exp: 包含费用科目信息。
bms_invoice_record: 记录发票信息,与患者费用相关。
bms_operator_settle_record: 包括日结信息,与财务相关。
bms_settlement_cat: 存储结算类别信息。
\3. 人事管理模块 (SMS - Staff Management System):
sms_dept: 包括科室信息。
sms_description: 包括科室、员工的描述信息。
sms_login_log: 记录员工的登录信息。
sms_permission: 存储操作权限信息。
sms_registration_rank: 包括挂号级别信息。
sms_role: 存储角色信息。
sms_role_permission_relation: 记录员工角色与权限的关系。
sms_skd: 存储排班信息。
\4. 诊断管理模块 (DMS - Diagnosis Management System):
dms_registration: 记录患者的就诊信息,就是挂号表。
dms_case_history: 存储病历信息,包括病人病史。
dms_case_model 和 dms_case_model_catalog: 包括病历模板信息和目录。
dms_dise 和 dms_dise_catalog: 包括诊断类型(疾病)信息和疾病分类目录。
dms_dosage: 存储药品剂型信息。
dms_drug, dms_drug_model_item:存储药品信息,包含成药、草药。
dms_drug_refund_item_record: 存储退药信息。
dms_herbal_item_record, dms_herbal_model_item, dms_herbal_prescription_record: 存储草药处方记录信息。
dms_medicine_item_record, dms_medicine_model_item, dms_medicine_prescription_record: 存储成药处方记录信息。
dms_non_drug 和 dms_non_drug_item_record: 存储非药品项目(处置)信息和记录。
dms_non_drug_model: 非药品(处置)模板信息。
2.3.2 项目模块划分
在使用IDEA作为开发工具的项目中,我们采用以下模块结构方案:
\1. HIS-app:这是患者前端模块,其核心业务是患者挂号,采用UniAPP技术实现。
\2. HIS-web:桌面管理端模块,采用Vue和ElementUI技术实现。这部分针对桌面应用程序的管理和操作。
\3. HIS-master:web后端模块,进一步细分为以下子模块:
a. HIS-api:后端通信接口模块,用于封装控制器层,同时也是后端打包的主模块。
b. HIS-common:通用模块,包括工具类和数据传输对象(DTO)。这些工具和数据传输对象可供各部分模块使用,以增加代码重用性和一致性。
c. HIS-mbg:数据访问层模块,包含Mapper、查询参数和Entity。这些代码是通过MyBatis生成的,用于数据库操作。
d. HIS-service:业务层模块,包括以下四个服务模块:
-
BMS财务模块:处理财务相关业务逻辑。
-
DMS诊断模块:管理诊断和医生工作站的相关功能。
-
PMS患者管理模块:处理患者管理相关任务。
-
SMS人事管理模块:管理医院员工信息和权限设置。
这种模块划分有助于项目的组织和维护,使不同功能的代码更易于管理和扩展,同时也提高了代码的可维护性和可扩展性。
2.3.3 诊疗业务流程设计
患者就医流程始于挂号,患者可以选择使用手机应用程序或前往窗口办理挂号手续。挂号完成后,患者前往医生处接受初步诊断。医生依据患者的症状陈述和体格检查的结果,可能会开具各种检查和检验申请,患者随后前往相应的检查和检验科室进行相应的检查。
医技医生负责执行这些检查和检验,并将结果记录在系统中。医生接收这些检查和检验结果后,综合分析并根据其诊断结果,开具中西药处方或提出治疗处置建议。患者可以前往医院药房领取药物,或者在医技医生处完成进一步的治疗。这个流程最终实现了完整的诊疗过程,为患者提供了全面的医疗服务。
流程概括如下图:
/
2.3.4 HIS系统详细功能
2.4 挂号功能实现
2.4.1 挂号功能概述
挂号功能属于患者管理模块DMS的功能。
挂号功能是医疗诊疗服务的初始步骤,病人可以通过APP软件或者前台窗口来完成挂号。一旦完成挂号,HIS系统将分配一个唯一的诊疗ID,以便唯一标识每位病人。以下是窗口挂号界面和手机挂号界面的说明:
窗口挂号界面:
手机界面如下:
实现这个挂号过程的步骤如下:
\1. 选择科室和医生: 用户首先浏览可用的科室和已排班的医生。他们可以浏览医生的个人信息、专业背景等,以便做出明智的选择。
\2. 提交挂号信息: 用户在界面上选择好挂号所需的信息,如科室、医生、就诊时间等。这些信息将被打包并提交给控制器。
\3. 控制器处理请求: 控制器接收并解析表单参数,然后将这些参数传递给业务层。
\4. 业务层处理挂号逻辑: 业务层执行以下逻辑操作:
创建病人ID: 如果这是病人的首次就诊,系统将创建一个唯一的病人ID,作为该病人的唯一标识。
创建挂号记录: 如果这不是专家号,系统将直接创建挂号记录,包括科室、医生、就诊时间等信息。
专家号挂号处理: 如果挂的是专家号,系统会进一步检查排班信息是否可用,以及是否还有剩余号源。如果满足条件,系统会扣减相应号源,然后创建挂号记录。
创建账单记录: 系统会为挂号生成相应的费用信息,创建账单记录以供结算。
创建发票记录: 最后,系统会生成一份发票,将挂号费用和相关信息反馈给病人。
这一系列步骤确保了挂号过程的顺畅和透明性,使病人能够方便地选择医生和科室,并且使医院能够有效地管理挂号信息和费用记录。
2.4.2 挂号详细流程
在项目中,挂号流程的详细处理如下:
\1. 前端挂号接口API声明位于:HIS-web/src/api/regist.js
\2. 挂号的界面是HIS-web/src/views/registWork/index.vue。用户在该界面提交挂号请求。
3.一旦前端界面提交了挂号请求,后端的请求处理控制器位于HIS-api中的DmsRegistrationController.java。这个控制器中的createRegistration()方法用于处理挂号请求。
\4. createRegistration()方法在控制器中被调用,它会进一步调用业务层以处理挂号请求。业务层的实现类位于HIS-dms-service中的DmsRegistrationServiceImpl.java,具体方法为createRegistration()。
\5. createRegistration()方法的处理流程如下:
-
a. 通过身份证号查询是否存在患者,如果患者不存在,表示患者是首次来医院看病,需要先创建患者信息。
-
b. 如果是普通号,直接在dmsRegistration表中添加挂号信息。
-
c. 如果是专家号,会获取专家排班信息,然后判断排班信息是否还有挂号限额。如果有挂号限额,系统会扣减挂号限额后在dmsRegistration表中添加挂号信息。
-
d. 在bms_bills_record中记录用户挂号缴费信息,然后在bms_invoice_record中记录给用户开具的发票信息。
挂号请求的详细代码可以在DmsRegistrationServiceImpl的createRegistration()方法中找到,该方法包含了上述流程的具体实现。
这一流程描述了从前端挂号请求到后端的处理,包括患者信息查询、挂号类型判断、专家排班信息检查以及财务信息记录。这一过程确保了挂号流程的顺利进行并记录了相关数据,以提供高效和准确的挂号服务。
可以参考如下createRegistration()的序列图:
2.5 初诊功能实现
2.5.1 初诊功能概述
初诊功能属于诊断管理模块DMS的功能。
初诊功能是医院信息系统(HIS)的重要组成部分,它涉及患者挂号后的首次就诊过程。在初诊中,医生与患者首次见面,进行病情诊断和信息收集。以下是初诊功能的详细步骤:
\1. 患者挂号与约定时间就诊:患者在挂号后按照约定时间前来医院就诊。医生根据挂号信息安排就诊。
\2. 医生与患者沟通:医生与患者第一次见面,进行病情诊断。患者首先主诉病情,详细描述目前的患病情况和感受。
\3. 病史和过敏史收集:医生询问患者的病史、过敏史以及其他相关信息,以获取完整的医疗背景资料。
\4. 开具检查/检验申请单:医生依据自身经验和患者的病情,在HIS系统中开具检查和检验申请单,这些检查和检验将提供可观的诊断依据。
\5. 患者缴费:患者拿到检查/检验申请单后,前往医院的缴费窗口完成费用支付。这确保了患者可以进一步前往检查科室或检验科室进行相应的检查和检验。
HIS系统在初诊过程中提供以下信息支持:
-
待诊患者列表:系统根据登录医生的ID,获取待诊患者列表。考虑到医生可能需要代替同一科室的医生进行诊断,系统还会列出属于本科室的其他等待患者,以方便医生的选择。
-
患者信息记录:医生在HIS系统中选择患者后,可以记录患者的主诉、过往病史、过敏史等信息。这有助于建立完整的病例记录和协助医生的诊断过程。
-
检查/检验单生成:医生可以在HIS系统中开具检查和检验单,并将其打印交给患者,以指导后续的检查和检验流程。
初诊过程结束后,患者将前往医院的检查科室或检验科室完成后续的检查和检验,从而为最终诊断提供更多依据。这一流程确保了患者能够获得全面的医疗服务,并使医生能够更好地了解患者的病情以做出准确的诊断。
2.5.2 患者信息列表功能实现
进入首诊页面显示用户信息如上图所示:
在页面显示用户信息,其实现步骤如下:
\1. 前端代码首先发起一个查询患者列表的请求,同时提交了当前医生的ID。
\2. 后端控制器 PmsDiagnosisPatientController 中的 refreshPatient 方法负责处理该请求。refreshPatient 方法将请求进一步委托给 PmsPatientService 中的 refreshPatient 方法。
\3. PmsPatientServiceImpl 中的 refreshPatient 方法具体负责实现用户信息列表功能。它首先根据当前医生的ID查询所在科室的ID,然后根据科室ID查询首诊患者列表。同时,根据当前医生的ID还需要查询排班信息,以根据排班信息获取本班次的患者列表。此外,进一步的分类操作也在此步骤完成,将患者分为首诊患者、正在接受诊断的患者(即,需要进行检查的患者)、以及已确诊的患者。
\4. 控制器将这些不同的列表信息返回给前端页面。前端页面将这些信息分成四个不同的列表来显示患者信息。这四个列表分别是科室待诊患者、当前医生待诊患者、正在接受诊断的患者、以及已经确诊的患者。
通过以上步骤,实现了患者列表功能。前端页面能够以清晰的方式展示不同类别的患者信息,为医生提供了更便捷的患者管理工具。这一流程有效地组织和展示患者数据,帮助医生更好地处理不同诊断阶段的患者。
2.5.3 患者信息列表功能详细流程
\1. getDeptIdByStaffId 方法:此方法根据医生的ID来查找医生所属的部门的ID。这一步是为了确定医生所在的科室。
\2. getDeptWaitList 方法:该方法用于查询科室待诊患者的列表。这包括了在医生所在科室等待诊断的患者。
\3. getPersonalPatientList 方法:这个方法负责查询医生个人的患者列表,包括个人待诊、个人诊中和个人已诊的患者。
\4. splitPatientListResult 方法:此方法的主要功能是将从 getDeptWaitList 和 getPersonalPatientList 获取的患者列表拆分成不同类别的患者,包括科室待诊、个人待诊、诊中和已诊的患者列表。
这些步骤构成了患者信息列表功能的详细流程。首先确定医生所在的科室,然后查询科室待诊患者和医生个人的患者信息,最后将这些信息分成不同的类别,以便医生能够更方便地管理和诊断患者。这一流程有助于提供精确的患者信息,并提供了更好的医疗服务管理工具。
详细的序列图如下:
2.5.4 绑定初诊患者功能
在待诊患者列表中选择一个患者会弹出绑定患者功能对话框:
在选择绑定患者对话框中,当用户点击"确定"按钮后,系统将向服务器发送请求,将患者的状态标记为已绑定,并将该患者与医生的排班记录进行关联,以示已成功安排患者进入就诊状态。具体的实现代码可以在PmsPatientServiceImpl中的bindPatient方法中找到。具体的步骤在此略去。
2.5.5提交初诊信息
提交初诊信息界面如下:
/
这个界面旨在支持医生与患者之间的沟通,以了解患者对病情的叙述,将叙述内容记录在主诉中,并获取病史、过敏史等信息,将这些信息填写到表单中。此外,医生还可以进行初步诊断。医生通过点击保存按钮,将这些信息保存到HIS系统中。
提交初诊功能的实现流程如下:
\1. 客户端请求:客户端向服务器的DmsCaseHistoryController控制器发出请求,控制器的submitPriliminaryDised方法负责处理提交的初诊信息。这个方法将调用业务层的dmsCaseHistoryService的insertPriliminaryDise方法来处理。
\2. DmsCaseHistoryServiceImpl实现:在DmsCaseHistoryServiceImpl中,dmsCaseHistoryService实现了插入初诊信息的功能。
\3. 处理流程:dmsCaseHistoryService方法的处理流程首先获取用户的挂号信息。然后,将医生首诊提交的主诉、病史等信息插入到病历表dms_case_history中。在添加病历时,会将病历状态设置为“初诊结束”。
这一流程确保了医生可以有效记录患者的初诊信息,并将其存储到HIS系统中,从而为后续的医疗流程提供重要的基础信息。
2.6 开具检查单功能实现
2.6.1 开具检查、检验单功能
提交初诊后,医生通常需要开具检查和检验申请单,以客观了解患者的病情。该界面如下所示:
在这个界面上,医生可以使用“新增项目”功能来选择适当的检查或检验项目,并添加具体的检查要求,然后开立检查申请单,以便后续打印并交给患者。
这个界面的处理过程如下:
\1. 在界面上,通过点击“开立项目”功能,向服务器发送请求。控制器使用DmsNonDrugItemRecordController中的apply方法来处理检查和检验申请的“开立项目”功能。控制器将调用业务层DmsNonDrugItemRecordService中的apply方法,以详细处理该功能。
\2. 在业务层的实现类DmsNonDrugItemRecordServiceImpl中,处理了检查和检验申请的开具流程。具体步骤包括将页面上选定的检查和检验项目逐条保存到非药品记录表dms_non_drug_item_record中。
更详细的信息请参考业务层的代码。这一过程使医生能够有效地开立检查和检验申请单,以便对患者的病情进行全面评估,并确保必要的测试和检查得以进行。
2.6.2 超时检查单处理
在医疗信息系统中,医生为患者开立检查单后,如果患者未能及时缴费,可能会导致未处理的超时订单问题。为了解决这个问题,一种经典的方法是利用RabbitMQ的延迟队列。这也是一个常见的RabbitMQ面试问题。
解决这个问题的方法是,在创建检查和检验单时,同时将其插入到RabbitMQ的延迟队列中,并约定在12小时后进行消费。当在12小时后处理检查单时,系统会检查是否已经收到缴费。如果尚未收到缴费,将对检查单进行标记,并将其记录下来,随后销毁掉。这样就有效地解决了超时订单问题,确保医院的订单系统始终保持有效和清晰。
参考代码DmsNonDrugItemRecordController:
@ApiOperation(value = "开立项目") @RequestMapping(value = "/apply", method = RequestMethod.POST) @ResponseBodypublic CommonResult apply(@RequestBody DmsNonDrugItemRecordListParam dmsNonDrugItemRecordListParam, BindingResult result){ List<Long> currentIdList = dmsNonDrugItemRecordService.apply(dmsNonDrugItemRecordListParam); if(currentIdList == null || currentIdList.size() <= 0){ return CommonResult.failed("开立失败"); }else{ //获取订单超时时间,假设为30s long delayTimes = 60 * 1000 *60 *12; //发送延迟消息 for(Long id : currentIdList){ rabbitMQOrderSender.sendMessage(id, PrescriptionsType.NON_DRUG, delayTimes); } return CommonResult.success("开立成功"); } }
面试时的应对问题
在面试中,您可能会面对以下两个问题:
\1. 您的系统如何使用RabbitMQ解决问题? 您可以回答说,我们的系统使用RabbitMQ的延迟队列来解决超时检查单的问题。通过将待处理的检查单插入延迟队列,并在一定时间后检查其状态,系统可以及时处理未缴费的订单,确保医院的订单流程高效运作。
\2. 您的系统有哪些特色功能? 在这方面,您可以强调您的系统具备高度的订单管理和处理能力,以确保患者的医疗订单得到及时处理。通过使用RabbitMQ的延迟队列,您的系统不仅解决了超时订单问题,还展示了对订单管理的创新方法,提高了医院流程的效率和可靠性。这是您系统的一个重要特色功能。、
3 面试题目:
1、请陈述一下你做的HIS项目?
2、你项目开发周期,几个人参与,分工是什么?你负责什么?
3、说说项目的技术栈是什么?
4、你负责的模块是什么?说说你们项目的亮点是什么?
5、你们项目使用了RabbitMQ,说说RabbitMQ有几种交换机?RabbitMQ如何保证可靠消费的?你们项目使用RabbitMQ解决了什么问题?
HI系统代码Git地址:https://codeup.aliyun.com/64b5e9d771f685caf082a46b/UJSD2307_HIS.git
标签:his,医生,系统,HIS,患者,挂号,信息 From: https://www.cnblogs.com/wecandoallthings/p/18527712