摘? 要: 文章介紹了狂犬病暴露登記及預(yù)防接種系統(tǒng)的設(shè)計。系統(tǒng)前臺采用Ext JS,后臺采用M語言的Caché數(shù)據(jù)庫,并嘗試在JS中通過調(diào)用VB類方法作為中間件,再去調(diào)用PB類方法去實現(xiàn)打印疫苗計劃接種標(biāo)簽。系統(tǒng)根據(jù)醫(yī)療規(guī)范進(jìn)行規(guī)則設(shè)置并提醒護士,以確保醫(yī)療安全。在信息查詢及統(tǒng)計報表編制過程中采取了以M語言為主,SQL語句為輔的兩種語言相結(jié)合。系統(tǒng)的應(yīng)用提高了臨床工作質(zhì)量及效率并為上級部門提供了準(zhǔn)確的數(shù)據(jù)保證。
關(guān)鍵詞: Ext JS; Caché; 類方法; 動態(tài)庫
中圖分類號:TP311? ? ? ? ? 文獻(xiàn)標(biāo)志碼: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],通過攜帶狂犬病病毒的犬、貓等動物咬傷或抓傷等使病毒侵入中樞神經(jīng)系統(tǒng),并在神經(jīng)細(xì)胞內(nèi)繁殖復(fù)制,一旦發(fā)病,無一例外,均死亡[3]。由于目前狂犬病無藥可治,因此,只能以預(yù)防為主。為了能更準(zhǔn)確高效地管理我院狂犬病的暴露登記及預(yù)防接種情況,信息科開發(fā)了一套暴露登記及預(yù)防接種的系統(tǒng),目前該系統(tǒng)已正式應(yīng)用于臨床,該系統(tǒng)的應(yīng)用可為今后信息的追溯查詢及統(tǒng)計分析提供參考依據(jù)。
1 開發(fā)環(huán)境簡介
系統(tǒng)設(shè)計為B/S架構(gòu),系統(tǒng)基于我院HIS生產(chǎn)庫Caché數(shù)據(jù)庫環(huán)境,開發(fā)操作系統(tǒng)平臺為Windows,前端采用Ext JS,后臺采用M語言開發(fā)。前臺Ext JS具有UI組件豐富,外觀漂亮,瀏覽器兼容性好,不管后臺是用什么語言開發(fā)的都不會受影響等優(yōu)點。后臺Caché數(shù)據(jù)庫是美國Intersystems公司產(chǎn)品,后關(guān)系型數(shù)據(jù)庫中的領(lǐng)頭羊。Caché數(shù)據(jù)庫對大多數(shù)國內(nèi)IT人員來說還是比較陌生,然而在國外特別是國外的醫(yī)療領(lǐng)域中,Caché數(shù)據(jù)庫所占的比例是最大的,被醫(yī)療界公認(rèn)為首選數(shù)據(jù)庫。官方數(shù)據(jù)顯示,Caché數(shù)據(jù)庫的數(shù)據(jù)查詢速度約為其他數(shù)據(jù)庫的7~20倍,并方便的支持關(guān)系型數(shù)據(jù)庫和對象型數(shù)據(jù)庫[4]。
2 開發(fā)過程介紹
2.1 患者信息查詢
只需掃描掛號小條上的登記號,通過調(diào)取類方法ClassMethod QueryInfo(cardno As %String) As %String,從患者院內(nèi)建卡信息表中獲取基本信息,既減少工作人員負(fù)擔(dān)又保證了檔案信息的準(zhǔn)確性。暴露登記信息中的具體內(nèi)容,和業(yè)務(wù)部門溝通后設(shè)置了默認(rèn)值,提高了錄入速度,見圖1。
2.2 預(yù)防接種登記
⑴ 護士可通過暴露登記日期、登記號、姓名、身份證號、聯(lián)系電話進(jìn)行任意組合模糊查詢,便于快速定位患者暴露登記信息[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_"'" …… //根據(jù)模糊查詢條件拼裝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。
⑵ 如患者當(dāng)天為首次接種,系統(tǒng)將自動推算出后續(xù)計劃接種日期,以首次接種日期為基準(zhǔn),如為五針法則間隔3、7、14、28天,如為2-1-1法則間隔7、21天,非首次接種則直接從系統(tǒng)中調(diào)取計劃接種記錄。見圖3。
調(diào)取計劃接種記錄類方法ClassMethod
QueryNurPlanInjectExecute(ByRef qHandle As %Binary, rabdr) As %Status // rabdr為入?yún)?,是患者暴露登記主鍵,此方法出參為計劃接種表RowId、暴露登記RowId、注射方式、計劃注射日期
{ fs xRowId=$o(^User.DHCYZInjectPlanI
("IndexRabiesRegPlanDr",rabdr,xRowId)) q:xRowId=""d
//rabdr為節(jié)點,遍歷索引^User.DHCYZInjectPlanI,找到xRowId主鍵
.s Method=$listget(^User.DHCYZInjectPlanD(xRowId),2)
//通過主索引遍歷后執(zhí)行$l獲取注射方式
.s PlanDate=$listget(^User.DHCYZInjectPlanD(xRowId),3)
//通過主索引遍歷后執(zhí)行$l獲取計劃注射日期
.s PlanDate=$zd(PlanDate,3)
//將系統(tǒng)內(nèi)保存的日期轉(zhuǎn)化為yyyy-mm-dd格式
.s ret=rabdr_"^"_MethodName_"^"_PlanDate
//拼裝需輸出的字符串
.d OutputRow1
set Data=$lb(Prowid,rabdr,MethodName,PlanDate)
//出參數(shù)據(jù)組合
}
⑶ 在護士給患者接種疫苗前需填報此次注射的相關(guān)信息,在記錄保存前必須經(jīng)過兩個類方法的規(guī)則校驗⑴、ClassMethod DataPass(rbrowid, PatDate, nowmethoddr) ,此方法將對此次注射療程規(guī)則進(jìn)行判斷,如上次是5-0針,而此次注射登記必須為5-3針法,不允許選擇其他療程方式。見圖4。
⑷ ClassMethod InjJudge(RabRegRowId, injdate, injmethod),此方法主要判斷此次注射日期是否提前,因根據(jù)疫苗注射的嚴(yán)格規(guī)定,不允許提前注射。見圖5。
2.3 預(yù)防接種計劃標(biāo)簽打印
如首次注射疫苗接種填報成功后,系統(tǒng)會自動彈出框提醒護士打印一標(biāo)簽給患者,貼在患者病歷內(nèi)側(cè),標(biāo)簽內(nèi)容主要是疫苗接種計劃日期表,點擊打印按鈕后系統(tǒng)將調(diào)用PB編制的打印窗口頁面,打印標(biāo)簽則與我院輸液瓶簽同規(guī)格7*6cm大小。
具體實現(xiàn)步驟:
⑴ 新建window窗體w_printcard和數(shù)據(jù)窗口dw_printcard。
⑵ 通過PB開發(fā)工具新建一類uo_rabgetinfo,方法名為getinfo,入?yún)閕nfostr,具體代碼為:
OpenWithParm(w_printcard,string(infostr)) return infostr
⑶ 新建COM/MTS/COM+/Component組件,命名為printcard.dll。
⑷ 在w_printcard的open事件中對傳入的參數(shù)進(jìn)行解析。
ll_pos=pos(as_parm, '^') //傳入?yún)?shù)以”^”作為分隔符
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 //循環(huán)時將以”^”為分隔符,將分隔出來的字符串保存在as_data[]中,后續(xù)將顯示在數(shù)據(jù)窗口中;
⑸ 在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) //調(diào)用PB中類方法getinfo
End Function
⑺ 編譯生成VB動態(tài)庫文件Classvbtopb.dll。
⑻ 在系統(tǒng)應(yīng)用過程中,需先在客戶端c:\windows\system32下先后注冊printcard.dll和Classvbtopb.dll兩個文件。
⑼ Ext JS中實現(xiàn)瓶簽打印功能主要代碼,打印標(biāo)簽窗口。見圖6。
obj.btnPrint_OnClick=function() {
if (row==0) { ExtTool.alert("提示", "請選中患者基本
信息!") ;return; }
//通過調(diào)取類方法ObjDHCYZInjectDetailSrv
.PrintPlanInjectDetail,入?yún)ow為暴露登記表中主索引ROWID,從表中獲取需打印在瓶簽上患者的基本信息及注射計劃日期等
var getstr=ObjDHCYZInjectDetailSrv
.PrintPlanInjectDetail(row);
//新建名為CacheDllobj的Active對象,其中工程名
Classvbtopb,類模塊名Class1
var CacheDllobj=new ActiveXObject('Classvbtopb.Class1');
//調(diào)用test方法, 并返回打印成功或失敗消息
var rtn=CacheDllobj.test(getstr);
alert(rtn);
};
2.4 各類統(tǒng)計報表
根據(jù)疾控中心及院部管理部門要求,編制了患者接種疫苗計劃一覽表、疫苗注射人員工作量以及監(jiān)測暴露人群情況匯總等報表。所有統(tǒng)計報表后臺全部采用了M語言和SQL語句相結(jié)合語法,匯總表最終通過潤乾報表展現(xiàn)。見圖7。
此報表后臺類方法為class(web.DHCYZInjectDetail).RbReport(stdate, enddate),入?yún)tdate,enddate為統(tǒng)計起始日期和終止日期,主要實現(xiàn)代碼
Import SQLUser
Class web.DHCYZInjectDetail Extends
%RegisteredObject
{ ClassMethod RbReport(stdate, enddate) As %String
{ s stdate=$zdh(stdate,3)
//日期轉(zhuǎn)化成記錄在數(shù)據(jù)庫里格式化
s enddate=$zdh(enddate,3)
//暴露等級 一級
&SQL(SELECT count(*) INTO :firlv from sqluser
.DHC_YzRabiesReg
where PatDate between :stdate and :enddate
and ExposedLevel=1)
//疫苗接種全程 調(diào)用方法InjectProc
set proc=..InjectProc(stdate, enddate)
//未接種調(diào)用方法UndoInject
set noproc=..UndoInject(stdate,enddate)
}
}
3 系統(tǒng)的應(yīng)用
⑴ 降低錯登及漏登記情況:暴露登記及預(yù)防接種系統(tǒng)直接調(diào)用患者在HIS中的基本信息,無須護士手工錄入,特別在防止安全隱患方面起到了良好的作用,且為正確統(tǒng)計提供了可靠的依據(jù)。
⑵ 節(jié)省人力及物力:當(dāng)前我院注射工作量平均每天80人次,為了保證治療準(zhǔn)確性,原來每次患者來院都需在記錄本上找之前注射信息,注射后又需在登記本上記錄簽名,非常耗時,而且登記本保存比較麻煩,需要大量的空間進(jìn)行資料的保存,系統(tǒng)的使用可在幾秒鐘內(nèi)快速定位患者暴露登記信息及注射信息,然后與病歷內(nèi)標(biāo)簽上核對后簽名,這大大降低了護士登記及審核所需的時間。涉及每月上報數(shù)據(jù)較多,原需一個護士花1-2天時間統(tǒng)計,現(xiàn)只需幾秒鐘大大節(jié)省了人力提高了效率。
⑶ 為管理提供了可靠依據(jù):此系統(tǒng)具備完整的登記、查詢和統(tǒng)計功能,可提供一定時期臨床護士的接種登記工作量及患者注射監(jiān)測暴露人群情況匯總等情況,此舉為醫(yī)院對門診質(zhì)量管理及對工作人員的績效考核提供了客觀依據(jù),提高了管理水平。詳細(xì)的記錄保存,為醫(yī)院的科研、教學(xué)提供了寶貴的資料,也為醫(yī)院工作提供了分析和決策的數(shù)據(jù)依據(jù),取得了很好的效果。
通過幾個月的應(yīng)用與實踐,目前系統(tǒng)運行穩(wěn)定,應(yīng)用效果顯著,大大提高了醫(yī)護人員的工作效率。下一步將利用Ext JS新技術(shù)在界面展現(xiàn)及數(shù)據(jù)交互上進(jìn)行優(yōu)化,涉及后臺代碼利用Caché數(shù)據(jù)庫特有的快速索引技術(shù)進(jìn)行逐步調(diào)整以提高數(shù)據(jù)統(tǒng)計速度。另外此系統(tǒng)數(shù)據(jù)在狂犬病預(yù)防等科研方面對廣大醫(yī)院信息工作者和醫(yī)護人員有利用價值。
參考文獻(xiàn)(References):
[1] 金祝平,龐志峰.2010年金華市狂犬病暴露病例流行病學(xué)特征分析[J].中國預(yù)防醫(yī)學(xué)雜志,2011.12(9):782-784
[2] 趙東麗,趙夏釵,吳月華.690例狂犬病暴露人群流行病學(xué)特征分析[J].中國公共衛(wèi)生管理,2013.29(3):364-365
[3] 肖雷,王鳳雙,唐瑩,等.2008-2014年北京市順義區(qū)狂犬病暴露人群流行病學(xué)特征分析[J].中國生物制品學(xué)雜志,2016.29(3):283-287
[4] 雷舜東,吳幫華,黃?,?,李玉明,張紅.Caché數(shù)據(jù)庫在醫(yī)院信息系統(tǒng)中的優(yōu)勢[J].實用醫(yī)院臨床雜志,2012.1:162-165
[5] 李成亮,姚偉.Caché數(shù)據(jù)庫簡單模糊查詢的研究與分析[J].計算機時代,2017.1:51-54