


摘? 要: 文章介紹了狂犬病暴露登記及預防接種系統的設計。系統前臺采用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