基于Django的放射治疗流程管理系统的设计与实现
2023-06-10付廷岩孙亚平吴晓东赵旺兄
付廷岩 孙亚平 梁 瑞 吴晓东 樊 婷 赵旺兄 张 可
宁夏回族自治区人民医院 宁夏银川 750002
随着近年来肿瘤发病率越来越高、放疗设备和工作人员数量不断扩大,接受放射治疗的患者量迅速增多[1],医院放疗科产生和需要处理的医学信息量呈几何倍数增长,管理难度逐渐增大。若能及时、准确、完好地处理和应用这些信息,将是对医院信息系统(hospital information system,HIS)的有力完善,也是提高放射治疗信息管理水平的重要举措[2-3]。
1 当前放疗流程信息化需求分析
放射治疗科是医院信息化建设和应用非常复杂的科室,所涉及的学科、角色、设备及数据众多。据统计,目前拥有多种计算机控制的大型设备(模拟机、后装机、加速器等)的放疗机构,放疗信息系统(radiotherapy information system,RTIS)的应用比例还不到30%[4-5]。大部分放疗机构通过线上-线下、纸质-电子相结合的方式完成患者的放射治疗及放疗信息的管理。此管理模式需要HIS-放疗局域网络-纸质单据三方配合完成。HIS负责患者的收费、病历及随访等;局域网络负责患者定位、靶区勾画、计划制作及治疗等;纸质单据则起着衔接和记录各流程的作用。此模式存在以下不足:
①除HIS和放疗局域网络(如ARIA)外,还需要填写以下表格:模拟定位CT申请单、放射治疗定位及首次摆位记录单、放射治疗CT模拟定位-复位登记表、计划申请单、放射治疗记录单、放射治疗安全核查单、乳腺托架参数记录单(限乳腺癌患者)。此模式不能满足三甲医院全流程电子化、无纸化的管理要求;同时随着患者数量的增多,纸质单据的保存将是一件耗时、耗力的事情,也会造成资源的浪费。②以上网络、单据分布在不同场所及不同时间,大部分信息属于重复录入;另一些信息属于继承关系,录入前需查找核对。这都存在手工录入效率低,因书写或字迹难以辨认导致的出错率高的问题。③纸质单据只有一份,使用时必须通过借阅或电话询问等方式实现;资料经过频繁查阅容易造成存放混乱、缺损或丢失;这都使得信息传递不流畅、不快捷,无法做到高效的管理。
1.1 功能需求
为了解决我院放疗流程管理信息化程度低、患者信息出错率高的问题,运用信息化手段管理放疗信息势在必行。根据我院放疗流程及信息化需求,确定的系统功能模块如下:
①患者基本信息管理功能,信息按需录入并保存在服务器,使用时自动读取;每个信息有格式要求,录入、调取时自动核对,保证信息的一致性。②流程管理功能。包含患者定位、靶区勾画、物理计划、患者治疗等流程的时间、进度、责任人等相关信息的管理。
放射治疗工作流程见图1:首先主治医生根据肿瘤患者的病情制定个体化的放疗方案;随后预约并进行体位固定膜等的制作;接着预约并在大孔径CT的引导下行放疗前的定位,确定放疗病变部位以及放疗等中心点的位置;同步上传患者CT影像资料至放射治疗计划系统(treatment planning system,TPS);然后由医师根据病变部位确定并勾画放疗靶区,制定放疗剂量并填写处方剂量及危及器官剂量限值;物理师根据计划申请单设计放疗计划方案,完成后提交放疗主任医师评估;如果计划评估未通过,需要继续优化或者重新设计;若评估通过,则可进行计划验证以及预约放疗机房;最后按序进行患者的放射治疗。本系统需要对以上各流程进行管理,以及对各流程产生时间、责任人等关键信息进行记录。③报表自动生成:能自动生成并导出相关报表,如设备使用情况、工作量统计及病种统计等。
图1 放射治疗流程
1.2 性能需求及关键技术
自主研发既可以充分利用现有设备和系统,又可以解决放疗信息系统通用性差、价格昂贵的问题。目前国内多家有技术能力的医院进行了放疗信息系统RTIS的自主研发[6],类似国外大型企业管理软件的发展趋势,它们已经使用了浏览器/服务器(browser/server,B/S)结构,或者正在经历从服务器-客户机(client-server,C/S)结构到B/S的转变,RTIS系统结构以前也是以C/S结构为主[3,7-11],近年来出现了B/S结构的使用[12-16]。B/S模式是WEB兴起后的一种网络结构,通过使用浏览器的方式统一了客户端,并将实现系统功能的核心部分集中到服务器上,显著简化了系统的开发、使用和维护。B/S结构下的软件分布性强,通过页面的增加即可实现功能的增加,具有业务处理便捷、扩展简单方便的特点;同时还具有共享性强、升级方便、维护方便的特点。本文根据各个模块特点,和系统的操作响应速度、软件维护量和安全等多方面需求,基于B/S结构开发了放疗流程信息管理系统,用户可以直接通过安装在客户端的浏览器与安装在服务器上的数据库进行交互,能更好地应对放疗科日益增长的业务需求。
RTIS所使用数据库服务器以SQL类型为主,包括SQL SERVERA[3]、SQL Server 2000[7]、SQL Server 2005[8]、SQL Server 2008[9]、MySQL[10-14]。本文选择开放源代码的MySQL作数据库,其具有使用简便、功能强、运行速度快、管理方便、安全可靠性强等优点。
目前RTIS编程语言框呈现多样性,如Visual Foxpro[3]、Delphi[7]、Visual C#.NET[8]、JavaScript[9]、PHP[10;12]、C++Qt[11]、Nutz[13]、python+Django[14]、ASP[16]、Power-Builder 9i[17]等。本文使用Python语言编写的一套开放源代码的Web框架-Django框架作为开发框架。Django具有很强的可扩展性,本身集成了ORM、模板引擎、模型绑定、Session、缓存等组件,这些组件以“插件”的形式很方便地服务于整个框架。如将ORM框架嵌入Django,开发人员可通过操作模型类和对象完成数据库表的增、删、改、查,而不需要直接面向数据库编程。同时,Django强调快速开发和代码复用(或者称为Do Not Repeat Yourself,DRY)原则,可以简便、快速地开发数据库驱动网站[18]。本系统设计采用的Django版本是2.2.12。
根据Python语言的运行需要以及系统的调试需求,需满足以下要求:
①软硬件需要操作系统为Windows 2000及以上版本;CPU 2.4 GHz以上;内存512以上;硬盘80 GB以上;VGA显示器或更高。②当信息数据录入、修改和删除等操作时,应尽量缩短系统的响应时间与更新时间;尽量避免由于用户的误操作所引起的系统宕机。③系统应该具有可扩展性,当有新的信息管理条件添加时,能方便地对系统进行扩充。
2 放射治疗流程管理系统设计
根据需求,对系统进行模块化设计,具体结合图1,设计为患者总览、患者定位/复位、物理计划、患者治疗、系统管理等模块。
2.1 基本信息模块
患者总览模块包含患者信息登记、待定位、计划制作、待加新、治疗中、治疗暂停、在科、已出院患者等8个子信息模块。
①患者信息登记子模块。根据单位实际放疗工作情况,对所有的患者信息包括姓名、性别、身份证号、年龄、联系方式、身高、体质量、住址、主管医生、诊断病种、部位等进行统一管理。主治医师有创建、删除、修改的权限,其他工作人员可以查看。后续各模块信息的创建都依赖于患者基础信息部分。②各治疗状态子信息模块。医务人员可以直观查看每个状态的患者量、病种、主管医生等关键信息。更详细的信息可以通过点击姓名上的超链接进行查看。系统模块中的所有报表都可以批量筛选、一键导出、一键打印。
2.2 放疗流程管理模块
放疗流程管理模块包括定位/复位、物理计划、患者治疗部分。各子模块设计逻辑相似,均包含流程相应表单的创建与查询管理。医务人员的权限根据岗位不同而不同,分不可见、可见不可编辑、可编辑等多种。每个模块都有一键表单推荐创建或特定模板选择功能。本系统还设计了任务推送功能,自患者放疗流程信息建立,系统可根据进度自动推送任务或提醒给医务人员处理。这也是本系统的一个特点:基于模块化思路,开发任务驱动模式的应用软件,可以很好地推动任务的执行,使各岗位间以及各流程间的任务实现无缝对接,有利于信息管理以及放疗工作效率的提升。
①患者定位模块。包括待定位、定位申请、定位进行、已定位子模块。其中待定位管理包括对患者定位要求,模具制作等关键部分的创建、修改、删除(见图2);定位申请为定位时间的预约;定位进行为图像传输目标等定位信息、定位技师、定位日期的记录;已定位部分管理为只完成定位未进入治疗的患者报表。一键推荐的患者定位要求见图3。②物理计划模块。包含靶区勾画(见图4)、计划制作、计划评估中的患者报表显示,以及指定条件的计划统计子模块。其中靶区勾画子模块显示此状态的患者,靶区勾画完成后医师需填写计划申请单并点击“待提交”按钮,便跳转至制作计划子模块;物理师计划制作完成时,点击此子模块中“提交”按钮,跳转至计划评估子模块;若计划通过,医师点击“通过并签字”按钮,自动链接到计划申请单中的签字部分并按需签字、补充治疗信息,完成后将跳转至患者治疗模块中的待加新子模块中;若计划不满足要求,点击“评估不通过”按钮,将返回上一子模块。③患者治疗模块。包括待加新、放疗中、放疗暂停、当日待放疗、已完成治疗患者子模块。待加新子模块中需要医师完善处方、治疗野数、是否加急、有无增敏剂、拟治疗日期等信息,技师确认后便进入放疗中子模块;放疗开始、结束、暂停、每日治疗日期都将自动记录到表单中,见图5。④护理/费用模块。由于收费及护理相关管理由HIS实现,而此流程管理系统与HIS及ARIA物理隔离,故此子模块留待扩展。
图2 患者定位模块中待定位界面
图3 一键推荐的患者定位要求
图4 患者物理计划模块中靶区勾画界面
图5 放射治疗记录单
⑤统计分析模块。用户可以根据实际情况,以单一条件或复合条件查询相关患者的放疗信息、医务人员工作量、设备使用情况等记录。对于查询到的记录,根据用户权限,可以进行修改和删除等处理,也可以通过报表导出。
2.3 系统管理模块
系统管理模块包括医务人员/用户管理、设备/材料管理两个子模块。
①医务人员信息管理子模块。根据各岗位工种和放疗流程,对放疗工作人员的信息进行统一管理,包括记录和查看人员姓名、工种,联系方式等关键信息。使用该系统前,用户需要注册,填写以上信息。同时,用户可以在此模块进行用户名与密码的修改,以及账户的注销。②材料/设备信息管理子模块。放疗科室的设备种类较多,主要包括定位设备和治疗设备。目前占据主流地位的治疗设备主要为医用直线加速器,还有TOMO、伽马刀、射波刀、陀螺刀、质子加速器等;放疗中使用的材料则更多,如各种挡铅、体位固定架、热塑膜、发泡胶等。为了方便管理,对患者进行信息管理时,需要添加所使用设备和材料的分类、属性、名称、规格、供应商等信息;同时,还需要对以上信息实现创建、修改、删除等处理的功能。
3 放射治疗流程管理系统实现
3.1 数据库设计
本文在数据库设计时,以保证系统业务需求为前提,以具有较好的数据一致性和系统扩展性,以及高效的数据查询效率为导向,采用开放性跨平台的开源型关系数据库MySQL作为数据库,通过主键、唯一索引、外键以及分表等方法实现表单的建立。根据放疗流程系统的模块设计,在数据库中分别建立用户表、患者信息表、模拟定位CT申请单、放射治疗定位及首次摆位记录单、放射治疗CT模拟定位-复位登记表、计划申请单、放射治疗记录单、放射治疗安全核查单、乳腺托架参数记录单(限乳腺癌患者)等。为了保证数据的完整性,该系统对数据库中一些关键的字段(如患者姓名、主治医生、放疗设备型号等)设置为非空字段,即必须需要用户在前端填写。
3.2 系统首页界面
本系统前端首页使用了基于layui的轻量级前端后台管理框架layuimini,它是一款简洁、易用的后台框架模板,面向所有层次的前后端程序,无需复杂操作,只需提供一个接口就直接初始化整个框架。本文稍微修改layuimini源代码后的首页见图6。
图6 系统首页界面
3.3 功能实现
本系统需要实现的功能包括数据导入与展示、数据查询以及报表打印等,其中数据的导入与展示是最基本也是最重要的功能。这些功能的实现原理参见文献[18],也可以用Django的MVT(model-view-template)模式来说明:Model层即数据存取层,负责处理与数据相关的所有事务,包括数据实体的定义及对数据的CRUD(增删改查)操作,数据模型以Python类的形式定义;Template层即表现层,处理与表现相关的决定,如在页面或其他类型文档中如何显示,前端框架代码也放置于此;View层即业务逻辑层,该层包含存取模型及调取恰当模板的相关逻辑,相当于模型与模板之间的桥梁。
经过测试,该系统运行稳定;基本达到了预期效果,实现了以下功能:信息一次性录入、全程通用的功能,信息的全流程电子化处理和管理功能,相关资料一键生成电子表单并打印功能及电子化归档、电子化保存以及智能统计分析功能。
4 结论
本文针对放疗流程管理时大多数机构采用人工全流程纸质化管理,信息化水平低、出错率高、管理效率低的现状,通过对当前放疗流程信息化的需求作详尽分析,结合信息管理技术的发展趋势,基于B/S结构设计并开发了一个放疗流程管理系统。该系统采用前后端不分离技术,以PyCharm为开发平台,以MySQL作为服务器的数据库,利用Python语言及其Django开发框架实现各模块的功能。
该系统在一定程度上满足了放疗管理事务的规范化、无纸化办公要求,为各流程间建立了及时有效的沟通机制,可以快捷、准确地查询患者信息,同时为患者治疗过程和疗效的科学评价提供工具。