吳 兵,王春華
(1.安徽工貿職業技術學院計算機系,安徽淮南 232001;2.山東省成武縣振興中學,山東成武 274200)
?
自定義病歷模板在EMR中的實現*
吳 兵1,王春華2
(1.安徽工貿職業技術學院計算機系,安徽淮南 232001;2.山東省成武縣振興中學,山東成武 274200)
醫院管理工作中電子病歷系統(EMR)的使用提高了醫院信息化工作的水平,但各大小類型不同醫院對于EMR中病歷格式規范不盡相同[1],因此病歷模板的定制增加了EMR開發工作的難度,提出一種基于用戶自定義病歷模板的應用技術,讓用戶在EMR軟件界面中通過拖拽控件、定義標注圖形等實現自己需要的電子病歷模板.該應用技術的實現提高了EMR系統的通用性.
病歷;EMR;自定義;模板
現階段EMR的病歷模板一般采用XML格式或者Word格式,不論采取何種格式,在EMR開發工作中,需要調研用戶醫院各個臨床醫療科室的病歷書寫規范,盡管國家衛生部門對于病歷書寫有相關的一些規范指導,但具體到每一家醫院,由于各個醫院大小類型,以及業務范圍不同,所使用的病歷樣式內容也不盡相同,總是存在一些偏差[2].因此,EMR設計開發人員需要根據每種類型醫院的病歷格式,甚至每家不同醫院分別在軟件開發階段設計不同的模板.這種由軟件開發人員定制模板的方式不利于EMR軟件的維護,降低了軟件的通用性.
在EMR系統中提供一個用戶可以隨意拖拽控件、標注、圖形的UI界面,該界面分為包含“控件”,“標注”,“圖形”等元素的工具箱區域和類似Word空白頁面的繪制區域.在繪制區域中用戶可通過鼠標拖拽工具箱中的元素,以及添加相應的文字說明,從而完成一份符合本院需求的病歷模板,根據病歷模板標題結構生成對應的SQL數據庫表,病歷內容存放在數據庫表中,最終EMR可根據此模板調取病歷內容嵌入打印.以上基于用戶自定義的方式生成病歷模板,提高了EMR軟件的通用性,降低了軟件維護成本,既是應用軟件也是一種工具軟件.
1.1 Net中可視化控件拖拽功能
在應用程序中通過對控件的MouseEnter、MouseMove、MouseDown等來實現在WinForm窗體上控件的拖拽.其中主要經過步驟,首先鼠標移動至窗體控件上左鍵點擊并按下時發生MouseDown事件,此時由事件參數MouseEventArgs返回控件所在窗體坐標點,其次拖拽移動時發生MouseMove事件,在此事件中獲取控件新坐標點,最后賦值給控件新坐標點[3].
1.2 SQL數據庫技術
微軟的SQL Server 從7.0到目前成熟的2008版本提供了關于應用軟件數據管理強大的功能,原則上只要硬件條件允許,可以無限創建數據庫表[4].在前端程序語言中結合SQL結構化查詢語言可以方便的對關系型數據進行增、刪、改、查等操作.從病歷模板到相應的數據庫表生成,必然要使用SQL結構化查詢語言(CREATE TABLE),如:CREATE TABLE 表名稱(列名稱1 數據類型,列名稱2 數據類型,列名稱3 數據類型…….).
1.3 C#中Word類庫的使用
在程序中創建word文檔可以通過微軟提供的Microsoft Word X Object Library,其中X代表版本號.在C#中Word對象模型包含五大對象,其中,Application 代表Microsoft Word應用程序本身,Document 代表一個Word文檔,Selection 代表當前選中的區域,Bookmarks 表示書簽,Range 代表一塊區域,與Selection類似,不過一般不可見.
每次編寫代碼時,都應從Application對象開始.在Word中處理某個特定文檔時,這個文檔就稱為活動文檔,并且可通過Application對象的ActiveDocument屬性引用.如下:
Word.Application wapp = new Microsoft.Office.Interop.Word.Application();wapp.Visible = true;
2 自定義病歷模板功能實現
2.1 病歷元素集合表
在VS2010開發環境中參照紙質病歷采集病歷中的標題、符號以及圖形,形成標題集、符號集,對應新建數據庫表為標題表、符號表.標題集中各標題元素采用動態生成Lable標簽控件的方式,每個Lable控件Text屬性為對應的標題表中的Title_name字段內容.符號集類似生成,所不同之處在于一些特殊符號無法在數據庫表中存儲,因此在表中設置一字段Char_speci為特殊字符標識,如上標字符#,則字段Char _name存儲內容為“#”,對應字段Char _speci內容為“Superscript”代表上標,Superscript在程序Word對象當中代表元素上標屬性,在設置特殊字符Char _name與Char _speci應遵循Word類庫中的語意.為保存標題符號所在窗體的位置,以便在窗體加載時呈現設置好的自定義病歷模板樣式需要創建標題符號位置表.主要生成三個表結構見表1~3:

表1 標題表

表2 符號表

表3 標題符號位置表
2.2 自定義病歷窗體Form
窗體中在合適的位置設置可供用戶檢索選擇的標題和符號集合,采用.Net提供的TextBox和ListView控件進行檢索并展示,在TextBox控件的TextChanged事件中代碼:
private void txtTitle_TextChanged(object sender, EventArgs e)
{
string strSql = "select * from EMR_TitleTable where Title_name like′ %"+txtTitle.Text+ "%′ ";
DataSet dsTitle = SqlBaseClass.Query(strSql);
lvTitle.Items.Clear();
foreach (DataRow dr in dsTitle.Tables[0].Rows)
{
ListViewItem liv = new ListViewItem();
liv.SubItems[0].Text = dr["Title_id"].ToString();//標題編碼
liv.SubItems.Add(dr["Title_name"].ToString());//標題名稱
liv.SubItems.Add(dr["Title_font"].ToString());//字體
liv.SubItems.Add(dr["Title_size"].ToString());//大小
liv.SubItems.Add(dr["Title_info"].ToString());//標題備注
lvTitle.Items.Add(liv);
}
}
標題txtTitle控件檢索標題元素并展示的效果圖,如圖1所示:

圖1 檢索效果圖
選擇列表中標題確定后,則動態生成Lable控件放置在窗體一側,通過鼠標左鍵點擊Lable控件進行拖拽到合適位置,鼠標MouseDown事件中返回的MouseEventArgs參數值,獲取標題或者符號Lable在窗體中新坐標位置,并在程序中設置變量保存新坐標值和標題符號元素在數據庫中表主鍵.主要代碼如下:
private Label CurrentSelctLable;//獲取當前選中的Label,用于標簽的拖拽功能
List
private void LableMouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{ movePoint = e.Location; CurrentSelctLable = (Label)sender; }
}
private void LableMouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{ CurrentSelctLable.Location = new Point(CurrentSelctLable.Location.X + e.X - movePoint.X, CurrentSelctLable.Location.Y + e.Y - movePoint.Y);
}
}
private void LabelClick(object sender, EventArgs e)
{
CurrentSelctLable = (Label)sender;
}
鼠標雙擊ListView時,動態生成Label標簽并加入List集合中,indexLable為當前集合元素索引值.用戶經過拖拽標題或符合元素后,在窗體上形成類似word頁面效果,如圖2所示:

圖2 窗體頁面word效果
標題右側陰影為內容填寫控件,該控件也是動態生成,通過用戶拖拽到合適位置的.
2.3 病歷窗體的保存及Word模板的生成
經過用戶拖拽動態生成的控件形成自定義病歷窗體后,需要把這些控件及控件相應的窗體位置保存,在下一次打開該窗體或者打開編輯病歷內容窗體時呈現出來.利用控件的Loaction屬性可獲取當前標題、符號以及內容填寫控件在窗體中坐標位置,標題符號控件名稱、內容控件名稱以及控件位置坐標這三個重要屬性通過運行程序代碼保存至數據庫標題符號位置表中.初始化病歷模板窗體時可遍歷標題符號位置表,獲取標題符號編碼,在相應表中的名稱和標題字符控件位置字段內容(TitleChar _loaction),利用字段TitleChar_type動態生成標題符號以及編輯內容控件.
利用微軟提供的Word對象模型可在應用程序編寫上實現對word文檔的創建、打開、讀寫等操作.基于醫院病歷的格式,在word中設置若干個表格,采用表格式填寫的方式.窗體上標題符號元素可直接寫入新建word表格中,部分編輯內容采用插入書簽的方式在word文檔中進行標注,word中各個標題之間的距離可參照自定義窗體上各個標題元素之間的距離按照合適的比例大小在word表格中用單元格進行控制. 主要代碼如下:
Public void InsertText(string bookmark, string text) //插入一段文字,text為文字內容
{
objectoStart =bookmark;
objectrange =wordDoc.Bookmarks.get_Item(refoStart).Range;
Paragraphwp =wordDoc.Content.Paragraphs.Add(refrange);
wp.Format.SpaceBefore= 6;
wp.Range.Text =text;
wp.Format.SpaceAfter =24;
wp.Range.InsertParagraphAfter();
wordDoc.Paragraphs.Last.Range.Text =" n";
}
利用.Net類庫提供的控件拖拽功能與Word二次開發技術,并結合數據庫表存儲實現用戶自定義電子病歷模板的功能,一方面提供EMR軟件的通用性,另一方面也減少了軟件工作人員的維護工作量.比較現階段應用較廣泛的EMR,采用用戶自定義的方式定制病歷模板,把病歷模板具體內容由醫療專業人員完成,解決了以往病歷內容一旦有所改動,那么軟件開發人員必須從底層修改程序代碼的問題,從而真正實現EMR軟件適用于不同級別、不同地區醫院.
[1]姚志洪,劉雷.中國醫療衛生信息化進展[M].上海交通大學出版社,2010.
[2]夏洪斌,蔡劍飛,陳金雄等.結構化電子病歷系統應用與體會[J].醫療衛生裝備,2009.30(5):46-47.
[3]Ian Griffiths. Programming C# 5.0[M]. O′Reilly Media, Inc,USA.,2012.
[4]徐人鳳.SQLServer2005數據庫及應用[M].高等教育出版社,2007.
[5]Christian nagel,jay glynn,MorganSkinner.C#高級編程(第九版)[M].清華大學出版社,2014.
Implementation of User-defined Medical Record Template in EMR
WU Bing1, WANG Chun-hua2
(1. Department of Computer Science, Anhui Industry &Trade Vocational Technical College, Huainan Anhui 232001, China;2. Zhenxing Middle School of Chengwu, Chengwu Shandong 274200, China)
The use of electronic medical record system (EMR) in hospital work management improves the level of hospital information work, but EMR format specifications are not the same in different types of hospitals. Therefore, the medical record template customization also increased the difficulty of the development of EMR. This paper presents an application technology based on user defined medical record template, which allows users to use the drag and drop control in the EMR software interface to define the graphics and other electronic medical records. Meanwhile, the application technology improves the generality of the EMR.
medical record;EMR;user-defined;template
1673-2103(2016)05-0063-05
2016-10-01
安徽省高等學校省級質量工程項目(2015sjjd048)
吳兵(1973-),男,安徽淮南人,講師,碩士,研究方向:企業ERP.
TP311.5
A