APP下载

狂犬病暴露登记及预防接种系统设计及分析

2019-03-16姚伟

计算机时代 2019年2期

摘  要: 文章介绍了狂犬病暴露登记及预防接种系统的设计。系统前台采用Ext JS,后台采用M语言的Caché数据库,并尝试在JS中通过调用VB类方法作为中间件,再去调用PB类方法去实现打印疫苗计划接种标签。系统根据医疗规范进行规则设置并提醒护士,以确保医疗安全。在信息查询及统计报表编制过程中采取了以M语言为主,SQL语句为辅的两种语言相结合。系统的应用提高了临床工作质量及效率并为上级部门提供了准确的数据保证。

关键词: Ext JS; Caché; 类方法; 动态库

中图分类号:TP311          文献标志码:A     文章编号:1006-8228(2019)02-30-04

Design and analysis of rabies exposure registration and vaccination system

Yao Wei

(Equipment & Information Department, People's Hospital of YangZhong City, Zhenjiang, Jiangsu 212200, China)

Abstract: This paper introduces the development of a rabies exposure registration and vaccination system. The system adopts Ext JS and M language Caché database, and tries to use VB class method as middleware in JS, and then PB class method to print vaccination label. In order to ensure medical safety, the system sets rules according to medical norms and reminds nurses. In the process of information query and statistical report preparation, the combination of M language and SQL language is adopted. The application of the system improves the quality and efficiency of clinical work and provides accurate data guarantee for higher departments.

Key words: Ext JS; Caché; class method; dynamic link library

0 引言

狂犬病是由狂犬病病毒引起的一种急性传染病,属于人畜共患自然疫源性疾病[1]。犬为主要宿主动物和传染源[2],通过携带狂犬病病毒的犬、猫等动物咬伤或抓伤等使病毒侵入中枢神经系统,并在神经细胞内繁殖复制,一旦发病,无一例外,均死亡[3]。由于目前狂犬病无药可治,因此,只能以预防为主。为了能更准确高效地管理我院狂犬病的暴露登记及预防接种情况,信息科开发了一套暴露登记及预防接种的系统,目前该系统已正式应用于临床,该系统的应用可为今后信息的追溯查询及统计分析提供参考依据。

1 开发环境简介

系统设计为B/S架构,系统基于我院HIS生产库Caché数据库环境,开发操作系统平台为Windows,前端采用Ext JS,后台采用M语言开发。前台Ext JS具有UI组件丰富,外观漂亮,浏览器兼容性好,不管后台是用什么语言开发的都不会受影响等优点。后台Caché数据库是美国Intersystems公司产品,后关系型数据库中的领头羊。Caché数据库对大多数国内IT人员来说还是比较陌生,然而在国外特别是国外的医疗领域中,Caché数据库所占的比例是最大的,被医疗界公认为首选数据库。官方数据显示,Caché数据库的数据查询速度约为其他数据库的7~20倍,并方便的支持关系型数据库和对象型数据库[4]。

2 开发过程介绍

2.1 患者信息查詢

只需扫描挂号小条上的登记号,通过调取类方法ClassMethod QueryInfo(cardno As %String) As %String,从患者院内建卡信息表中获取基本信息,既减少工作人员负担又保证了档案信息的准确性。暴露登记信息中的具体内容,和业务部门沟通后设置了默认值,提高了录入速度,见图1。

2.2 预防接种登记

⑴ 护士可通过暴露登记日期、登记号、姓名、身份证号、联系电话进行任意组合模糊查询,便于快速定位患者暴露登记信息[5]。查询类方法ClassMethod QueryRabiesPatExecute(ByRef qHandle As %Binary, patcardno, patname, patid, pattele, chkdate, patdate) As %Status。

部分主要代码:

s result=##class(%Library.ResultSet).%New()

ssqlStr="select ID,PatId,PatDate,PatName,Sex,Birthday,

IdCard, TelePhone,ExposedDate…  from sqluser

.DHC_YzRabiesReg where  1=1 "

//将SQL查询语句赋值给ssqlStr变量

i patcardno'="" s sqlStr=sqlStr_" and "_"PatId=

"_"'"_patcardno_"'" …… //根据模糊查询条件拼装SQL查询语句

d result.Prepare(sqlStr)

d result.Execute()

While(result.Next())

{ s RabRowId=result.Data("ID")

s PatNo=result.Data("PatId")…

d OutputRow1  //查询出符合条件记录并输出

}

d result.Close()

点击查询后见图2。

⑵ 如患者当天为首次接种,系统将自动推算出后续计划接种日期,以首次接种日期为基准,如为五针法则间隔3、7、14、28天,如为2-1-1法则间隔7、21天,非首次接种则直接从系统中调取计划接种记录。见图3。

调取计划接种记录类方法ClassMethod

QueryNurPlanInjectExecute(ByRef qHandle As %Binary, rabdr) As %Status // rabdr为入参,是患者暴露登记主键,此方法出参为计划接种表RowId、暴露登记RowId、注射方式、计划注射日期

{ fs xRowId=$o(^User.DHCYZInjectPlanI

("IndexRabiesRegPlanDr",rabdr,xRowId)) q:xRowId=""d

//rabdr为节点,遍历索引^User.DHCYZInjectPlanI,找到xRowId主键

.s Method=$listget(^User.DHCYZInjectPlanD(xRowId),2)

//通过主索引遍历后执行$l获取注射方式

.s PlanDate=$listget(^User.DHCYZInjectPlanD(xRowId),3)

//通过主索引遍历后执行$l获取计划注射日期

.s PlanDate=$zd(PlanDate,3)

//将系统内保存的日期转化为yyyy-mm-dd格式

.s ret=rabdr_"^"_MethodName_"^"_PlanDate

//拼装需输出的字符串

.d OutputRow1

set Data=$lb(Prowid,rabdr,MethodName,PlanDate)

//出参数据组合

}

⑶ 在护士给患者接种疫苗前需填报此次注射的相关信息,在记录保存前必须经过两个类方法的规则校验⑴、ClassMethod DataPass(rbrowid, PatDate, nowmethoddr) ,此方法将对此次注射疗程规则进行判断,如上次是5-0针,而此次注射登记必须为5-3针法,不允许选择其他疗程方式。见图4。

⑷ ClassMethod InjJudge(RabRegRowId, injdate, injmethod),此方法主要判断此次注射日期是否提前,因根据疫苗注射的严格规定,不允许提前注射。见图5。

2.3 预防接种计划标签打印

如首次注射疫苗接种填报成功后,系统会自动弹出框提醒护士打印一标签给患者,贴在患者病历内侧,标签内容主要是疫苗接种计划日期表,点击打印按钮后系统将调用PB编制的打印窗口页面,打印标签则与我院输液瓶签同规格7*6cm大小。

具体实现步骤:

⑴ 新建window窗体w_printcard和数据窗口dw_printcard。

⑵ 通过PB开发工具新建一类uo_rabgetinfo,方法名为getinfo,入参为infostr,具体代码为:

OpenWithParm(w_printcard,string(infostr)) return infostr

⑶ 新建COM/MTS/COM+/Component組件,命名为printcard.dll。

⑷ 在w_printcard的open事件中对传入的参数进行解析。

ll_pos=pos(as_parm, '^') //传入参数以”^”作为分隔符

do while ll_pos>0

ll_item ++

as_data[ll_item]=left(as_parm, ll_pos-1)

as_parm=mid(as_parm, ll_pos+1)

ll_pos=pos(as_parm, '^')

loop

ll_item ++

as_data[ll_item]=as_parm //循环时将以”^”为分隔符,将分隔出来的字符串保存在as_data[]中,后续将显示在数据窗口中;

⑸ 在VB中新建ActiveXdll控件,工程命名为Classvbtopb类模块名为Class1,引用在PB中生成的printcard.dll文件。

⑹ 在Class1类中新建 test方法;

Public Function test(information As String) As String

Dim obj As New uo_rabgetinfo

//实例化PB中类uo_rabgetinfo

Dim i

i=obj.getinfo(information) //调用PB中类方法getinfo

End Function

⑺ 编译生成VB动态库文件Classvbtopb.dll。

⑻ 在系统应用过程中,需先在客户端c:\windows\system32下先后注册printcard.dll和Classvbtopb.dll两个文件。

⑼ Ext JS中实现瓶签打印功能主要代码,打印标签窗口。见图6。

obj.btnPrint_OnClick=function() {

if (row==0) { ExtTool.alert("提示", "请选中患者基本

信息!") ;return; }

//通过调取类方法ObjDHCYZInjectDetailSrv

.PrintPlanInjectDetail,入参row为暴露登记表中主索引ROWID,从表中获取需打印在瓶签上患者的基本信息及注射计划日期等

var getstr=ObjDHCYZInjectDetailSrv

.PrintPlanInjectDetail(row);

//新建名为CacheDllobj的Active对象,其中工程名

Classvbtopb,类模块名Class1

var CacheDllobj=new ActiveXObject('Classvbtopb.Class1');

//调用test方法, 并返回打印成功或失败消息

var rtn=CacheDllobj.test(getstr);

alert(rtn);

};

2.4 各类统计报表

根据疾控中心及院部管理部门要求,编制了患者接种疫苗计划一览表、疫苗注射人员工作量以及监测暴露人群情况汇总等报表。所有统计报表后台全部采用了M语言和SQL语句相结合语法,汇总表最终通过润乾报表展现。见图7。

此报表后台类方法为class(web.DHCYZInjectDetail).RbReport(stdate, enddate),入参stdate,enddate为统计起始日期和终止日期,主要实现代码

Import SQLUser

Class web.DHCYZInjectDetail Extends

%RegisteredObject

{ ClassMethod RbReport(stdate, enddate) As %String

{ s stdate=$zdh(stdate,3)

//日期转化成记录在数据库里格式化

s enddate=$zdh(enddate,3)

//暴露等级 一级

&SQL(SELECT count(*) INTO :firlv from sqluser

.DHC_YzRabiesReg

where PatDate between :stdate and :enddate

and ExposedLevel=1)

//疫苗接种全程 调用方法InjectProc

set proc=..InjectProc(stdate, enddate)

//未接种调用方法UndoInject

set noproc=..UndoInject(stdate,enddate)

}

}

3 系统的应用

⑴ 降低错登及漏登记情况:暴露登记及预防接种系统直接调用患者在HIS中的基本信息,无须护士手工录入,特别在防止安全隐患方面起到了良好的作用,且为正确统计提供了可靠的依据。

⑵ 节省人力及物力:当前我院注射工作量平均每天80人次,为了保证治疗准确性,原来每次患者来院都需在记录本上找之前注射信息,注射后又需在登记本上记录签名,非常耗时,而且登记本保存比较麻烦,需要大量的空间进行资料的保存,系统的使用可在几秒钟内快速定位患者暴露登记信息及注射信息,然后与病历内标签上核对后签名,这大大降低了护士登记及审核所需的时间。涉及每月上报数据较多,原需一个护士花1-2天时间统计,现只需几秒钟大大节省了人力提高了效率。

⑶ 为管理提供了可靠依据:此系统具备完整的登记、查询和统计功能,可提供一定时期临床护士的接种登记工作量及患者注射监测暴露人群情况汇总等情况,此举为医院对门诊质量管理及对工作人员的绩效考核提供了客观依据,提高了管理水平。详细的记录保存,为医院的科研、教学提供了宝贵的资料,也为医院工作提供了分析和决策的数据依据,取得了很好的效果。

通过几个月的应用与实践,目前系统运行稳定,应用效果显著,大大提高了医护人员的工作效率。下一步将利用Ext JS新技术在界面展现及数据交互上进行优化,涉及后台代码利用Caché数据库特有的快速索引技术进行逐步调整以提高数据统计速度。另外此系统数据在狂犬病预防等科研方面对广大医院信息工作者和医护人员有利用价值。

参考文献(References):

[1] 金祝平,庞志峰.2010年金华市狂犬病暴露病例流行病学特征分析[J].中国预防医学杂志,2011.12(9):782-784

[2] 赵东丽,赵夏钗,吴月华.690例狂犬病暴露人群流行病学特征分析[J].中国公共卫生管理,2013.29(3):364-365

[3] 肖雷,王鳳双,唐莹,等.2008-2014年北京市顺义区狂犬病暴露人群流行病学特征分析[J].中国生物制品学杂志,2016.29(3):283-287

[4] 雷舜东,吴帮华,黄海莹,李玉明,张红.Caché数据库在医院信息系统中的优势[J].实用医院临床杂志,2012.1:162-165

[5] 李成亮,姚伟.Caché数据库简单模糊查询的研究与分析[J].计算机时代,2017.1:51-54