电子病历文档的编辑器
技术领域
本发明涉及一种电子病历文档编辑技术,尤其是涉及一种具有数据元和数据组的电子病历文档的编辑器。
背景技术
目前实现电子病历文档编辑功能主要有两种实现方案:
一种方案是基于Word开发,直接将MS Word作为一个控件,形成一个编辑容器。这种方案简单,也有强大的编辑功能,直接使用的医生也易上手。但是,基于Word开发的电子病历文档,存在以下几个缺陷:1、病历文档无法实现结构化存储;2、实现病历文档的数据元和数据组的编辑控制、保密浏览很困难。
另一种方案是基于浏览器通过html实现,首先定制html页面作为病历的模板,医生编辑病历时在html页面的模板基础上录入。但是,基于浏览器通过html实现,则存在打印控制困难,打印和编辑时效果不一致,难以实现所见即所得的效果,另外录入内容格式完全受模板限制,不能方便地录入自由文本。
发明内容
为了克服现有技术在书写电子病历文档时,无法实现结构化存储,导致电子病历文档中的数据元和数据组的编辑控制困难等缺陷,本发明提供一种具有数据元和数据组的电子病历文档的编辑器,支持录入结构化的数据元和数据组内容,可以解决电子病历文档中数据元同步的问题,并实现电子病历文档中数据元和数据组的编辑控制、保密浏览、数据验证等功能。
本发明采用如下技术方案实现:一种电子病历文档的编辑器,其包括:
窗体界面模块,用于提供电子病历文档编辑的窗体界面;
文档存储模块,用于将电子病历文档的数据存储在特定的数据结构;
文档排版模块,用于对电子病历文档的数据进行排版,生成显示对象;
文档显示模块,用于将显示对象绘制到窗体界面模块提供的窗体界面上;
连接在窗体界面模块与文档存储模块之间的事件模块,用于与窗体界面模块通信,处理windows窗体消息,实现事件响应机制;
由窗体界面通过windows消息映射事件来驱动文档存储模块修改其存储的电子病历文档数据,实现对电子病历文档的编辑。
其中,所述编辑器还包括:
连接文档存储模块的文档导入导出模块,用于将外部数据导入到电子病历文档的文档存储模块中,或者将文档存储模块中的数据导出到外部。
其中,电子病历文档在文档存储模块中使用xml格式进行存储。
其中,电子病历文档的数据在文档存储模块中以树形存储结构进行存储,根节点为电子病历文档,且电子病历文档可以包含若干个“数据组”、“数据元”或/和“文本”的子节点。
其中,文档排版模块在创建排版对象时,当遇到文本节点则创建文本显示对象,当遇到数据组节点则创建数据组显示对象,当遇到数据元则创建数据元显示对象,所有创建的文本显示对象、数据组显示对象和数据元显示对象按树形存储结构组织显示对象树。
其中,由文档显示模块遍历所述显示对象树,将所有显示对象绘制到窗体界面上。
其中,在不同的电子病历文档中同一标识符的数据元对应的数据是一致的。
其中,当数据元的属性设置为只读时,在电子病历文档录入时不允许临床医生修改该数据元对应的数据;
其中,数据元具有用于数据验证的属性,当临床医生编写电子病历文档后保存时,遍历电子病历文档的树形存储结构,对树形结构中每一个数据元节点的属性和数据元的值进行数据验证。
其中,数据元具有密浏览属性,当第三方系统通过接口调阅电子病历文档时,不显示具有密浏览属性的数据元对应的数据内容。
与现有技术相比,本发明具有如下有益效果:
本发明提供一种具有数据元和数据组的电子病历文档编辑器,具有如下有益技术效果:
1)所见即所得的编辑效果,支持录入自由文本功能,同时支持录入结构化的数据元和数据组内容,为后期的电子病历检索和统计奠定基础。
2)解决了电子病历文档中数据元同步的问题,如在A电子病历文档中书写了主诉,在B电子病历文档打开时主诉能够同步。
3)实现了电子病历文档中数据元和数据组的编辑控制,比如数据元可以设置为只读,在电子病历文档录入时不允许医生修改该数据元内容。
4)实现了电子病历文档中数据元和数据组的数据验证。
5)实现了电子病历文档中数据元和数据组的保密浏览。
附图说明
图1是用于对电子病历文档进行编辑的编辑器结构示意图;
图2是电子病历文档的树形存储结构示意图;
图3电子病历文档中数据元的同步处理流程示意图;
图4是设置电子病历文档中数据元的属性的流程示意图;
图5是对电子病历文档中数据元进行验证的流程示意图;
图6是一个具体实例中对数据元和数据组的验证效果示意图;
图7是设置电子病历文档中数据元保密浏览的流程示意图;
图8是一个具体实例中对电子病历文档保密浏览的验证效果示意图。
具体实施方式
本发明提供一种实现具有数据元和数据组的电子病历文档(以下又简称为“病历文档”)编辑器,支持录入结构化的数据元和数据组内容,可以解决电子病历文档中数据元同步的问题,并实现电子病历文档中数据元和数据组的编辑控制、保密浏览、数据验证等功能。
电子病历文档编辑来编辑器来完成,如图1所示,用于对电子病历文档进行编辑的编辑器包括:窗体界面模块、事件模块、文档存储模块、文档导入导出模块、文档排版模块和文档显示模块。其中,文档存储模块用于将电子病历文档的数据存储在特定的数据结构中;文档排版模块用于对电子病历文档的数据进行排版,生成显示对象;文档显示模块用于将显示对象绘制到窗体界面模块提供的窗体界面上;事件模块用于与窗体界面模块通信,处理windows窗体消息,实现事件响应机制;文档导入导出模块用于实现电子病历文档的打开、保存、复制、粘贴等功能,并将外部数据导入到电子病历文档的文档存储模块中,或者将文档存储模块中的数据导出到外部。
在电子病历文档的编辑器中,文档导入导出模块将外面数据导入到文档存储模块,文档存储模块的改变导致文档排版模块进行重新排版处理,文档排版模块生成电子病历文档的显示对象,通过显示对象将电子病历文档的内容绘制到窗体界面,窗体界面通过windows消息映射事件来驱动文档存储模块修改其内部的数据,从而编辑电子病历文档。
电子病历文档在文档存储模块中使用xml格式进行存储。其中xml格式描述如下:
其中,节点MedicalRecord表示病历文档,DataGroup表示数据组,DataElement表示数据元,Text表示文本内容,在这个xml基础上还可以继续扩展,比如定义图像的节点、表格的节点、单元格的节点等。
并且,电子病历文档的数据在文档存储模块中以树形存储结构进行存储,如图2所示。其中根节点为电子病历文档,病历文档可以包含“数据组”、“数据元”、“文本”等子节点。“数据组”节点可以包含“数据组”(数据组是可嵌套的)、“数据元”、“文本”等子节点。“数据元”节点可以包含“文本”子节点。
而文档排版模块在创建排版对象时,按如图2所介绍的树形结构对电子病历文档的数据结构进行遍历:当遇到文本节点则创建文本显示对象,当遇到数据组节点则创建数据组显示对象,当遇到数据元则创建数据元显示对象,所有创建的文本显示对象、数据组显示对象和数据元显示对象,也是按图2所示结构以树形结构组织显示对象树。
当文档显示模块需要向窗体界面模块的窗体界面上绘制电子病历文档时,遍历电子病历文档的所述显示对象树,依次的将所有显示对象绘制到窗体界面上。
由于一份电子病历文档中的数据元可能会同时出现在多份不同的电子病历文档中,这时需要保证不同的电子病历文档中同一标识符的数据元的数据是一致的。
如图3所示,当电子病历文档书写完成时,保存提交,这时需要遍历表示电子病历文档的树形存储结构,从树形存储结构中找到需要同步的数据元信息并保存到数据库中,同时将电子病历文档也保存到数据库中。当打开该病人的另一份电子病历文档时,首先,从数据库中获取该份电子病历文档,解析存储该份电子病历文档的xml文件数据,生成电子病历文档的存储树形结构;然后,遍历这份电子病历文档的树形存储结构,当遇到需要同步的数据元时,从数据库中获取最新的一份电子病历文档中对应的数据元数据,并将获取的数据元数据在当前电子病历文档的树形存储结构进行更新;最后,再通知文档排版模块将排版对象根据电子病历文档的存储结构变化做出响应,调整显示对象的信息,并重新绘制到窗体界面模块的窗体界面中。
另外,电子病历中某些数据元是只读的,比如“姓名”这个数据元,在病程记录的病历文档中是不允许医生修改的,避免医生的误操作。如图4所示,需要为数据元对象添加只读属性,表示数据元对象是否只读。当制作病历模板的时候,由维护人员设置数据元的只读属性是否为真(True)。当临床医生编写电子病历文档时,如果尝试修改数据元,编辑器判断改数据元的只读属性是否为真,如果是真,则直接返回而不做任何处理。
按照电子病历的书写基本规范,有些数据元是不允许为空的;有些数据元的字数有一定限制,例如“主诉”一般不超过20字;对于数值类元素进行合法验证(包括数值是否合法,是否超过范围等等);对于数据元中性别特征的验证(如女性不能出现喉结,男性不能出现子宫附件类的明显不合理的描述);有些数据元需要重点关注,即要医生在书写病历时必须是确认过的(如性别在病历模板中可能已经默认为男,当医生书写病历时应该选择好性别,如果没有对性别这个数据元做任何操作,病历文档编辑器会认为是不合法的,以避免医生忘记选择而使用了病历模板中默认的数据)。所以,在电子病历文档保存前,应该对电子病历文档进行数据验证,以确保医生录入的病历是规范的。
如图5所示,实现对电子病历文档进行数据验证时,首先为数据元定义各种属性用于数据验证。当制作电子病历模板的时候,由维护人员设置数据元的各种属性。当临床医生编写电子病历文档后保存时,电子病历文档的编辑器遍历树形存储结构,对树形结构中每一个数据元节点进行验证,验证的方法就是根据数据元的属性和数据元的值判断其合理性,然后将验证结果以xml文件返回,该xml文件中记录所有验证不通过的数据元的验证提示信息。
在一个实施例中,对数据元和数据组的验证效果如图6所示,比如,电子病历中患者年龄没有书写,进行验证时会提示“年龄为空”的提示信息。
某些情况下,可能需要对一些病历数据元的内容进行保密。比如第三方系统(如健康档案系统)通过调用电子病历系统接口查看病历时,出于对该病历病人信息保密的考虑,希望将病历中病人姓名、性别、年龄等一些信息隐藏起来。
如图7所示,实现保密浏览时,在制作病历模板的时候,由维护人员设置数据元的是否保密浏览属性。当第三方系统通过接口调阅病历文档时,病历文档编辑器再为内存数据结构中的数据元创建显示对象时,根据数据元的保密浏览属性生成相应的字符内容用于显示,如果数据元是保密浏览的,那么显示数据元字符内容时用“*”代替实际的数据元字符内容。
在一个实施例中,对数据元和数据组的保密浏览如图8所示,比如,电子病历中当“病史陈述者”数据元的保密浏览属性为真“True”时,在显示电子病历时,“病史陈述者”对应的内容显示若干个“*”代替实际的数据元字符内容。
综上,本发明提供一种具有数据元和数据组的电子病历文档编辑器,具有如下有益技术效果:
1)所见即所得的编辑效果,支持录入自由文本功能,同时支持录入结构化的数据元和数据组内容,为后期的电子病历检索和统计奠定基础。
2)解决了电子病历文档中数据元同步的问题,如在A电子病历文档中书写了主诉,在B电子病历文档打开时主诉能够同步。
3)实现了电子病历文档中数据元和数据组的编辑控制,比如数据元可以设置为只读,在电子病历文档录入时不允许医生修改该数据元内容。
4)实现了电子病历文档中数据元和数据组的数据验证。
5)实现了电子病历文档中数据元和数据组的保密浏览。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。