国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      一種cda引擎系統(tǒng)及實(shí)現(xiàn)方法

      文檔序號(hào):6634596閱讀:407來(lái)源:國(guó)知局
      一種cda引擎系統(tǒng)及實(shí)現(xiàn)方法【專利摘要】本發(fā)明涉及信息醫(yī)療領(lǐng)域,尤其涉及一種CDA引擎系統(tǒng)及實(shí)現(xiàn)方法。所述系統(tǒng)包括文檔模板提取模塊、數(shù)據(jù)規(guī)則制定模塊、事件處理模塊、數(shù)據(jù)封裝模塊、CDA文檔生成模塊及CDA文檔解析模塊。本發(fā)明提供的CDA引擎系統(tǒng)針對(duì)現(xiàn)有的醫(yī)療文檔,建立與CDA標(biāo)準(zhǔn)兼容的引擎,將醫(yī)療數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一的CDA文檔,并且存儲(chǔ)在數(shù)據(jù)中心,以提供瀏覽和下載服務(wù),使醫(yī)療服務(wù)人員能夠在任何時(shí)間、任何地點(diǎn)都能及時(shí)獲取必要的信息,以支持高質(zhì)量的醫(yī)療服務(wù),從而達(dá)到有效控制醫(yī)療費(fèi)用的不合理增長(zhǎng)、減少醫(yī)療差錯(cuò)、提高醫(yī)療與服務(wù)質(zhì)量的目標(biāo)?!緦@f(shuō)明】—種CDA引擎系統(tǒng)及實(shí)現(xiàn)方法【
      技術(shù)領(lǐng)域
      】[0001]本發(fā)明涉及信息醫(yī)療領(lǐng)域,尤其涉及一種CDA引擎系統(tǒng)及實(shí)現(xiàn)方法。【
      背景技術(shù)
      】[0002]本世紀(jì),醫(yī)療衛(wèi)生產(chǎn)業(yè)最具吸引力的產(chǎn)業(yè)目標(biāo)就是建立一個(gè)國(guó)家級(jí)的、可互操作的健康醫(yī)療框架系統(tǒng)。2003年,我國(guó)衛(wèi)生部頒布了《全國(guó)衛(wèi)生信息化發(fā)展規(guī)劃綱要》,提出了力爭(zhēng)在2010年前,逐步建成比較完善的以公共衛(wèi)生信息系統(tǒng)為重點(diǎn)的國(guó)家衛(wèi)生信息系統(tǒng)的衛(wèi)生信息化建設(shè)的目標(biāo)。從而有效地發(fā)揮我國(guó)醫(yī)療衛(wèi)生系統(tǒng)的數(shù)據(jù)資源優(yōu)勢(shì),充分利用醫(yī)療資源,增強(qiáng)國(guó)家對(duì)重大疾病、疫情的快速反應(yīng)能力。其中,制定全國(guó)性的醫(yī)療數(shù)據(jù)標(biāo)準(zhǔn)是必不可少的環(huán)節(jié)。經(jīng)過(guò)數(shù)年的摸索研究,中國(guó)衛(wèi)生信息化專家意識(shí)到中國(guó)無(wú)必要從頭開(kāi)始摸索一套新的衛(wèi)生信息交換標(biāo)準(zhǔn),引入國(guó)際標(biāo)準(zhǔn)是必然趨勢(shì)。2006年5月,HL7China的成立就意味著中國(guó)將借鑒國(guó)際標(biāo)準(zhǔn)“生產(chǎn)和運(yùn)營(yíng)”模式。HL7是由一系列HL7標(biāo)準(zhǔn)子集組成的ISO標(biāo)準(zhǔn),包括HL7V2.5、V3以及CDARelease2等標(biāo)準(zhǔn),其中臨床文檔架構(gòu)(ClinicalDocumentArchitecture,CDA)規(guī)范了臨床電子文檔在交換過(guò)程中的數(shù)據(jù)結(jié)構(gòu),這是成功實(shí)施HL7的一個(gè)非常重要因素。[0003]在現(xiàn)有技術(shù)中,申請(qǐng)?zhí)枮镃N200710068477.3的專利公開(kāi)了一種醫(yī)療信息系統(tǒng)集成引擎,用于解決醫(yī)療機(jī)構(gòu)中各異構(gòu)醫(yī)療信息系統(tǒng)的集成互連問(wèn)題,包括消息接收解析組件、工作流驅(qū)動(dòng)組件和消息組織發(fā)送組件,消息解析組件接收來(lái)自各醫(yī)療信息系統(tǒng)的消息,對(duì)消息進(jìn)行解析后產(chǎn)生對(duì)應(yīng)的待處理事件,工作流驅(qū)動(dòng)組件根據(jù)工作流驅(qū)動(dòng)配置處理待處理事件,將待處理事件數(shù)據(jù)歸檔于醫(yī)療數(shù)據(jù)中心并產(chǎn)生待發(fā)送消息,消息組織發(fā)送組件組織待發(fā)送消息,并將待發(fā)送消息發(fā)送給對(duì)應(yīng)的醫(yī)療信息系統(tǒng)。該發(fā)明解決了各異構(gòu)醫(yī)療信息系統(tǒng)兩兩之間的集成問(wèn)題,減少了集成復(fù)雜度。然而,并沒(méi)有生成數(shù)據(jù)統(tǒng)一的CDA文檔,因而無(wú)法提供瀏覽和下載服務(wù),使醫(yī)療服務(wù)人員能夠在任何時(shí)間、任何地點(diǎn)都能及時(shí)獲取必要的信息,也無(wú)法使居民掌握和獲取自己完整的健康資料,參與健康管理,享受持續(xù)、跨地區(qū)、跨機(jī)構(gòu)的醫(yī)療衛(wèi)生服務(wù)?!?br/>發(fā)明內(nèi)容】[0004]針對(duì)【
      背景技術(shù)
      】中所出現(xiàn)的問(wèn)題,本發(fā)明首先提供了一種CDA引擎系統(tǒng),所述系統(tǒng)完成從中間數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),按規(guī)則將數(shù)據(jù)組合成符合標(biāo)準(zhǔn)的CDA文檔,所述系統(tǒng)包括以下模塊:文檔模板提取模塊,用于抽取指定CDA樣例文件中固定的靜態(tài)結(jié)構(gòu)信息存入模板數(shù)據(jù)庫(kù)中;數(shù)據(jù)規(guī)則制定模塊,用于完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充;事件處理模塊,用于處理插入到事件隊(duì)列中的事件;數(shù)據(jù)封裝模塊,用于將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中;CDA文檔生成模塊,用于生成CDA文檔。[0005]優(yōu)選的是,所述文檔模板提取模塊包括CDA樣例文件、模板數(shù)據(jù)庫(kù)以及事件調(diào)度模塊。[0006]在上述任一方案中優(yōu)選的是,所述文檔模板提取模塊進(jìn)一步用于:監(jiān)聽(tīng)啟動(dòng);查詢數(shù)據(jù)庫(kù)中是否有需要處理的樣例文檔;判斷是否有新樣例需要處理;無(wú)新樣例文檔,則進(jìn)入短暫休眠狀態(tài)并繼續(xù)查詢;有新樣例文檔,則生成所有事件事例對(duì)象;將事件添加進(jìn)事件管理器中;調(diào)用事件處理器處理事件;處理器處理提取模板事件;進(jìn)行模板數(shù)據(jù)的抽取、存儲(chǔ)。[0007]在上述任一方案中優(yōu)選的是,所述數(shù)據(jù)規(guī)則制定模塊包括數(shù)據(jù)規(guī)則制定者、中間數(shù)據(jù)庫(kù)以及模板數(shù)據(jù)庫(kù)。[0008]在上述任一方案中優(yōu)選的是,所述數(shù)據(jù)規(guī)則制定模塊進(jìn)一步用于:獲取模板樣例文件;學(xué)習(xí)模板并提取需要制定規(guī)則的數(shù)據(jù)結(jié)構(gòu);查詢并返回模板庫(kù)中相關(guān)模板規(guī)則和組分信息;整理需要填充的數(shù)據(jù)的組分信息、模板規(guī)則ID及默認(rèn)值;查詢并返回所述模板中業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);整理模板信息和業(yè)務(wù)數(shù)據(jù)信息;填充數(shù)據(jù)規(guī)則到模板庫(kù)。[0009]在上述任一方案中優(yōu)選的是,所述事件處理模塊包括事件添加模塊、事件監(jiān)聽(tīng)模塊以及事件處理模塊。[0010]在上述任一方案中優(yōu)選的是,所述事件處理模塊進(jìn)一步用于:新增一個(gè)事件;添加所述事件到等待處理隊(duì)列;監(jiān)聽(tīng)事件隊(duì)列并獲取所述事件;查找事件處理器,創(chuàng)建處理器實(shí)例處理事件;所述事件處理成功則監(jiān)聽(tīng)器繼續(xù)運(yùn)行,事件處理不成功則將所述事件轉(zhuǎn)入異常隊(duì)列。[0011]在上述任一方案中優(yōu)選的是,所述事件處理不成功則:通過(guò)重新創(chuàng)建同類事件和/或修改事件狀態(tài)為等待處理以使事件重新進(jìn)入事件隊(duì)列等待處理。[0012]在上述任一方案中優(yōu)選的是,所述數(shù)據(jù)封裝模塊包括數(shù)據(jù)加載模塊和數(shù)據(jù)填充模塊。[0013]在上述任一方案中優(yōu)選的是,所述數(shù)據(jù)封裝模塊進(jìn)一步用于:通過(guò)數(shù)據(jù)加載模塊完成數(shù)據(jù)加載;通過(guò)數(shù)據(jù)填充模塊獲取數(shù)據(jù)封裝對(duì)象進(jìn)而得到帶有數(shù)據(jù)的封裝對(duì)象。[0014]在上述任一方案中優(yōu)選的是,所述CDA文檔生成模塊包括CDA創(chuàng)建模塊、Sect1n創(chuàng)建模塊、入口創(chuàng)建模塊以及入口關(guān)系創(chuàng)建模塊。[0015]在上述任一方案中優(yōu)選的是,所述CDA文檔生成模塊進(jìn)一步用于:創(chuàng)建CDAbuilder對(duì)象以及CDA文檔對(duì)象;從數(shù)據(jù)庫(kù)中得到所述CDA文檔對(duì)象所要使用的模板并填入header的信息;利用工具類填入CDA文檔的屬性信息;循環(huán)調(diào)用Sect1n創(chuàng)建模塊創(chuàng)建Sect1n;利用工具類填寫(xiě)Sect1n的屬性循環(huán)調(diào)用入口創(chuàng)建模塊創(chuàng)建入口;利用工具類填寫(xiě)入口屬性;循環(huán)調(diào)用入口關(guān)系創(chuàng)建模塊創(chuàng)建入口關(guān)系;利用工具類填寫(xiě)入口關(guān)系屬性并填寫(xiě)具體組分及值;返回CDAbuilder類生成物理CDA文件。[0016]在上述任一方案中優(yōu)選的是,所述系統(tǒng)進(jìn)一步包括:CDA文檔解析模塊,所述CDA文檔解析模塊用于完成CDA文檔的解析。[0017]在上述任一方案中優(yōu)選的是,所述CDA文檔解析模塊進(jìn)一步用于:提取CDA文檔類型值,根據(jù)CDA類型加載所有模板數(shù)據(jù);遍歷Sect1n、入口以及關(guān)系入口,從模板數(shù)據(jù)庫(kù)中提取表名;循環(huán)表對(duì)象中的組分列表;根據(jù)組分類型調(diào)用對(duì)應(yīng)的解析工具,進(jìn)行數(shù)據(jù)解析填充;解析完成后,將數(shù)據(jù)提交至數(shù)據(jù)封裝層進(jìn)行數(shù)據(jù)存儲(chǔ)。[0018]本發(fā)明還提供了一種CDA引擎系統(tǒng)實(shí)現(xiàn)方法,數(shù)據(jù)提供者提供用來(lái)填充CDA文檔的原始數(shù)據(jù),數(shù)據(jù)規(guī)則制定者建立中間數(shù)據(jù)庫(kù)和模板庫(kù)之間的數(shù)據(jù)規(guī)則,外圍系統(tǒng)使用生成出來(lái)的CDA文檔,所述方法包括以下步驟:通過(guò)文檔模板提取模塊抽取指定CDA樣例文件中固定的靜態(tài)結(jié)構(gòu)信息存入模板數(shù)據(jù)庫(kù)中;通過(guò)數(shù)據(jù)規(guī)則制定模塊完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充;借助于事件處理模塊對(duì)插入到事件隊(duì)列的事件進(jìn)行處理;通過(guò)數(shù)據(jù)封裝模塊將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中;通過(guò)CDA文檔生成模塊完成CDA文檔的生成。[0019]優(yōu)選的是,所述文檔模板提取模塊包括CDA樣例文件、模板數(shù)據(jù)庫(kù)以及事件調(diào)度模塊。[0020]在上述任一方案中優(yōu)選的是,所述步驟抽取指定CDA樣例文件中固定的靜態(tài)結(jié)構(gòu)信息存入模板數(shù)據(jù)庫(kù)中包括以下步驟:監(jiān)聽(tīng)啟動(dòng);查詢數(shù)據(jù)庫(kù)中是否有需要處理的樣例文檔;判斷是否有新樣例需要處理;無(wú)新樣例文檔,則進(jìn)入短暫休眠狀態(tài)并繼續(xù)查詢;有新樣例文檔,則生成所有事件事例對(duì)象;將事件添加進(jìn)事件管理器中;調(diào)用事件處理器處理事件;處理器處理提取模板事件;進(jìn)行模板數(shù)據(jù)的抽取、存儲(chǔ)。[0021]在上述任一方案中優(yōu)選的是,所述數(shù)據(jù)規(guī)則制定模塊包括數(shù)據(jù)規(guī)則制定者、中間數(shù)據(jù)庫(kù)以及模板數(shù)據(jù)庫(kù)。[0022]在上述任一方案中優(yōu)選的是,所述步驟通過(guò)數(shù)據(jù)規(guī)則制定模塊完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充包括以下步驟:獲取模板樣例文件;學(xué)習(xí)模板并提取需要制定規(guī)則的數(shù)據(jù)結(jié)構(gòu);查詢并返回模板庫(kù)中相關(guān)模板規(guī)則和組分信息;整理需要填充的數(shù)據(jù)的組分信息、模板規(guī)則ID及默認(rèn)值;查詢并返回所述模板中業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);整理模板信息和業(yè)務(wù)數(shù)據(jù)信息;填充數(shù)據(jù)規(guī)則到模板庫(kù)。[0023]在上述任一方案中優(yōu)選的是,所述事件處理模塊包括事件添加模塊、事件監(jiān)聽(tīng)模塊以及事件處理模塊。[0024]在上述任一方案中優(yōu)選的是,所述步驟借助于事件處理模塊對(duì)插入到事件隊(duì)列的事件進(jìn)行處理包括以下步驟:新增一個(gè)事件;添加所述事件到等待處理隊(duì)列;監(jiān)聽(tīng)事件隊(duì)列并獲取所述事件;查找事件處理器,創(chuàng)建處理器實(shí)例處理事件;所述事件處理成功則監(jiān)聽(tīng)器繼續(xù)運(yùn)行,事件處理不成功則將所述事件轉(zhuǎn)入異常隊(duì)列。[0025]在上述任一方案中優(yōu)選的是,所述步驟事件處理不成功則將所述事件轉(zhuǎn)入異常隊(duì)列進(jìn)一步包括:通過(guò)重新創(chuàng)建同類事件和/或修改事件狀態(tài)為等待處理以使事件重新進(jìn)入事件隊(duì)列等待處理。[0026]在上述任一方案中優(yōu)選的是,所述數(shù)據(jù)封裝模塊包括數(shù)據(jù)加載模塊和數(shù)據(jù)填充模塊。[0027]在上述任一方案中優(yōu)選的是,所述步驟通過(guò)數(shù)據(jù)封裝模塊將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中包括以下步驟:通過(guò)數(shù)據(jù)加載模塊完成數(shù)據(jù)加載;通過(guò)數(shù)據(jù)填充模塊獲取數(shù)據(jù)封裝對(duì)象進(jìn)而得到帶有數(shù)據(jù)的封裝對(duì)象。[0028]在上述任一方案中優(yōu)選的是,所述CDA文檔生成模塊包括CDA創(chuàng)建模塊、Sect1n創(chuàng)建模塊、入口創(chuàng)建模塊以及入口關(guān)系創(chuàng)建模塊。[0029]在上述任一方案中優(yōu)選的是,所述步驟通過(guò)CDA文檔生成模塊完成CDA文檔的生成中包括以下步驟:創(chuàng)建CDAbuilder對(duì)象以及CDA文檔對(duì)象;從數(shù)據(jù)庫(kù)中得到所述CDA文檔對(duì)象所要使用的模板并填入header的信息;利用工具類填入CDA文檔的屬性信息;循環(huán)調(diào)用Sect1n創(chuàng)建模塊創(chuàng)建Sect1n;利用工具類填寫(xiě)Sect1n的屬性循環(huán)調(diào)用入口創(chuàng)建模塊創(chuàng)建入口;利用工具類填寫(xiě)入口屬性;循環(huán)調(diào)用入口關(guān)系創(chuàng)建模塊創(chuàng)建入口關(guān)系;利用工具類填寫(xiě)入口關(guān)系屬性并填寫(xiě)具體組分及值;返回CDAbuilder類生成物理CDA文件。[0030]在上述任一方案中優(yōu)選的是,所述方法進(jìn)一步包括:通過(guò)CDA文檔解析模塊完成CDA文檔的解析。[0031]在上述任一方案中優(yōu)選的是,所述步驟通過(guò)CDA文檔解析模塊完成CDA文檔的解析中包括以下步驟:提取CDA文檔類型值,根據(jù)CDA類型加載所有模板數(shù)據(jù);遍歷Sect1n、入口以及關(guān)系入口,從模板數(shù)據(jù)庫(kù)中提取表名;循環(huán)表對(duì)象中的組分列表;根據(jù)組分類型調(diào)用對(duì)應(yīng)的解析工具,進(jìn)行數(shù)據(jù)解析填充;解析完成后,將數(shù)據(jù)提交至數(shù)據(jù)封裝層進(jìn)行數(shù)據(jù)存儲(chǔ)。[0032]通用XAdapter是為醫(yī)療機(jī)構(gòu)接入XC0NNECT建立的一個(gè)統(tǒng)一的數(shù)據(jù)交換中轉(zhuǎn)平臺(tái),將從第三方系統(tǒng)中提取到的數(shù)據(jù)傳輸?shù)奖镜豖C0NNECT存儲(chǔ)庫(kù),或通過(guò)本地XC0NNECT存儲(chǔ)庫(kù)中的下載指定遠(yuǎn)程XC0NNECT的文檔,并存儲(chǔ)到本地XC0NNECT文檔庫(kù)。XAdapter的架構(gòu)目標(biāo)可理解為醫(yī)療機(jī)構(gòu)、社區(qū)或工作站,接入健康網(wǎng)絡(luò)的適配器,通過(guò)XAdapter實(shí)現(xiàn)健康數(shù)據(jù)的提交和下載。CDAEngine完成從一個(gè)中間數(shù)據(jù)庫(kù)讀取數(shù)據(jù),然后按一定的規(guī)則將數(shù)據(jù)組裝成符合CDAR2標(biāo)準(zhǔn)的CDA文檔,這份CDA文檔交由XAdapter適配器的Gateway提交到XC0NNECT的文檔庫(kù);CDAEngine還能解析CDA文檔,從CDA文檔中提取數(shù)據(jù)保存到中間數(shù)據(jù)庫(kù)。[0033]約束:第三方系統(tǒng)與XAdpter可共享一個(gè)約定結(jié)構(gòu)的中間數(shù)據(jù)庫(kù),CDAEngine從中間數(shù);據(jù)庫(kù)中讀取數(shù)據(jù),按規(guī)則生成CDA文檔;CDAEngine被定為處理符合HL7CDAR2標(biāo)準(zhǔn)的XML結(jié)構(gòu)消息內(nèi)容。[0034]工作原理基本工作原理已知CDA文檔是由Header和Body組成,我們?cè)谶@里通過(guò)structrureBody來(lái)說(shuō)明工作原理。在一份CDA文檔中,有多個(gè)Sect1n章節(jié),在structureBody的component下。[0035]每一個(gè)Sect1n章節(jié)使用templateID和code來(lái)進(jìn)行約束,這些約束就是模版規(guī)貝U。如果CDA文檔只需要到達(dá)Level2級(jí)別,那么在Sect1n的Text中存儲(chǔ)文本結(jié)構(gòu)的數(shù)據(jù),如果要實(shí)現(xiàn)Level3級(jí)別,則在Sect1n下用enrty和componet來(lái)表達(dá)。我們用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)模版規(guī)則,主要包括模版表、模版規(guī)則表、模版ID表、模版屬性表、數(shù)據(jù)規(guī)則表(紅色數(shù)據(jù)表多個(gè),每個(gè)數(shù)據(jù)表的結(jié)構(gòu)都需要在數(shù)據(jù)規(guī)則表中描述)、組分表,下面通過(guò)這些表的結(jié)構(gòu)進(jìn)一步說(shuō)明工作原理。[0036]模版UUID生成規(guī)則,使用關(guān)鍵值組合計(jì)算MD5得到,多個(gè)關(guān)鍵值使用“\n”分割,每個(gè)關(guān)鍵值占一行。[0037]Document模版,使用templateID值+CODE值,生成MD5得到UUID;Sect1n模版,使用templateID值+CODE值,生成MD5得到UUID,如果Sect1n沒(méi)有templateID和CODE值時(shí),使用“sect1n”字符串生成MD5值;Entry模版,主要使用templateID值,生成MD5得到UUID,沒(méi)有templateID時(shí),使用具體形態(tài)名,如“act、observat1n”字符串生成MD5值;模版的UUID值只和模版的靜態(tài)結(jié)構(gòu)有關(guān)系,即無(wú)論在那些CDA文檔中,只要Sect1n的templateID、CODE值相同,則模版UUID也相同;但是模版的templateID有多個(gè)OID且不存在順序關(guān)系,因此我們按照字符串升序方式對(duì)templateID排序;模版的CODE值,我們?nèi)ode和CodeSystem兩個(gè)關(guān)鍵值。[0038]數(shù)據(jù)規(guī)則原理數(shù)據(jù)填充規(guī)則是指在生成CDA時(shí),按照什么樣的規(guī)則從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),然后按照什么樣的規(guī)則將數(shù)據(jù)填充到CDA文檔對(duì)象中。[0039]一份CDA文檔的所有數(shù)據(jù)按規(guī)則插入到中間數(shù)據(jù)庫(kù)(源數(shù)據(jù)庫(kù))的各張表中,每張表都有一個(gè)DIID文檔實(shí)例ID來(lái)表示數(shù)據(jù)屬于那份CDA文檔;在插入數(shù)據(jù)時(shí)先向文檔表中寫(xiě)入數(shù)據(jù),生成文檔實(shí)例ID(使用UUID計(jì)算得到),設(shè)置文檔的相關(guān)數(shù)據(jù)(文檔類型、標(biāo)題、創(chuàng)建時(shí)間等),然后向數(shù)據(jù)表寫(xiě)入數(shù)據(jù),最后向任務(wù)觸發(fā)表寫(xiě)入數(shù)據(jù),創(chuàng)建一個(gè)生成任務(wù)。這種關(guān)系結(jié)構(gòu)允許用文檔實(shí)例ID,將一份CDA文檔的所有數(shù)據(jù)從數(shù)據(jù)庫(kù)從檢索出來(lái)。一張數(shù)據(jù)表中所包含的數(shù)據(jù)(可能是一條記錄,也可能是多條記錄),將按規(guī)則填充到一個(gè)模版結(jié)構(gòu)中(一個(gè)模版結(jié)構(gòu)可能需要多張表的數(shù)據(jù)來(lái)填充)。一般規(guī)律為,一個(gè)被循環(huán)使用Entry模版對(duì)應(yīng)一張數(shù)據(jù)表,在Entry模版中存在嵌套關(guān)系時(shí),數(shù)據(jù)表之間即有父子孫關(guān)系。一個(gè)Sect1n模版對(duì)應(yīng)一張數(shù)據(jù)表,如果數(shù)據(jù)表只用來(lái)存儲(chǔ)Sect1n的Title和Text值,則可使用通用文本表。[0040]生成CDA片段對(duì)象時(shí),從模版規(guī)則表中可得到需要加載那些數(shù)據(jù)表,然后通過(guò)文檔實(shí)例ID從數(shù)據(jù)庫(kù)中一次加載這些表的數(shù)據(jù),按照數(shù)據(jù)封裝規(guī)則將數(shù)據(jù)和數(shù)據(jù)填充規(guī)則進(jìn)行封裝。一條記錄有多個(gè)字段組成,每一個(gè)字段表示CDA片段對(duì)象的一個(gè)值,我們將一個(gè)CDA片段對(duì)象定義為一個(gè)組分(認(rèn)為在處理CDA文檔時(shí),是一個(gè)不可在分割的塊,如Code、Value等節(jié)點(diǎn),存儲(chǔ)一個(gè)CE或⑶類型數(shù)據(jù),一個(gè)CE數(shù)據(jù)需要code、displayName、codeSystem、codeSystemName四個(gè)數(shù)據(jù)項(xiàng)),那個(gè)這個(gè)組分由多個(gè)字段構(gòu)成,每個(gè)字段自然與數(shù)據(jù)表字段對(duì)應(yīng)了。封裝數(shù)據(jù)時(shí),數(shù)據(jù)表的每個(gè)字段被封裝成DBField對(duì)象,值也封裝到DBField中;數(shù)據(jù)規(guī)則表和組分表信息被封裝成一個(gè)DBPartof對(duì)象,一個(gè)DBPartof對(duì)象由多個(gè)DBField對(duì)象構(gòu)成得到一個(gè)列表;一個(gè)數(shù)據(jù)表DBTable對(duì)象由多個(gè)DBPartof對(duì)象構(gòu)成得到一個(gè)列表。[0041]數(shù)據(jù)表對(duì)象DBTable對(duì)象控制記錄條數(shù),使用一個(gè)nextO方法滾動(dòng)記錄游標(biāo),這樣在生成CDA文檔時(shí),從模版規(guī)則表得到構(gòu)造當(dāng)前模版的方法,然后得到數(shù)據(jù)表DBTable對(duì)象,通過(guò)數(shù)據(jù)表記錄條數(shù)while(table,nextO),控制模版的循環(huán);在每個(gè)循環(huán)中,調(diào)用getPartListO可得到需要構(gòu)造那些CDA片段(組分),分別構(gòu)造并填充數(shù)據(jù)。如此這樣迭代循環(huán),完成所有模版規(guī)則的處理。解析CDA文檔時(shí)通過(guò)模版規(guī)則識(shí)別文檔結(jié)構(gòu),解析到一個(gè)模版時(shí),通過(guò)調(diào)用getPartListO可得到需要提取數(shù)據(jù)的CDA片段,提取數(shù)據(jù)寫(xiě)入DBTable對(duì)象中,一個(gè)循環(huán)產(chǎn)生一條記錄,最后調(diào)用DBTable的saveO方法將數(shù)據(jù)插入到數(shù)據(jù)表。[0042]任務(wù)觸發(fā)原理CDA引擎的任務(wù)采用事件方式觸發(fā),事件的產(chǎn)生有多種方式,如可采用監(jiān)視數(shù)據(jù)表、監(jiān)視磁盤(pán)目錄、監(jiān)聽(tīng)端口等多種方式。在CDA引擎中設(shè)計(jì)一套事件調(diào)度處理流程來(lái)處理事件,我們把產(chǎn)生事件的對(duì)象叫做事件監(jiān)聽(tīng)器角色,把實(shí)際處理事件的對(duì)象叫做事件處理器,完成事件流程處理的對(duì)象叫做事件管理器角色。事件根據(jù)業(yè)務(wù)需要定義事件類型,每種事件處理器只能處理一種事件類型,事件處理器注冊(cè)到事件管理器,事件監(jiān)聽(tīng)器創(chuàng)建事件,將事件添加到事件管理器的隊(duì)列中,事件被處理時(shí),通過(guò)事件回調(diào)方式產(chǎn)生事件處理回調(diào),夠外部在事件被開(kāi)始處理、處理完成、處理時(shí)發(fā)生異常的處理相關(guān)事務(wù)。[0043]XAdapter包括兩個(gè)重要的組件,一個(gè)組件是Gateway負(fù)責(zé)提交CDA文檔,訂閱文檔通知,下載CDA文檔;一個(gè)組件是CDAEngin負(fù)責(zé)從中間數(shù)據(jù)庫(kù)讀取數(shù)據(jù)生成CDA文檔,解析指定的CDA文檔,提取數(shù)據(jù)到中間數(shù)據(jù)庫(kù)。我們可以把CDAEngine理解為一個(gè)黑箱,他從一個(gè)源中間數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),把數(shù)據(jù)按一定的規(guī)則進(jìn)行組裝,得到符合HL7CDAR2標(biāo)準(zhǔn)的CDA文檔;他能讀取一份給定的CDA文檔,從文檔中抽取數(shù)據(jù)并將數(shù)據(jù)保存到一個(gè)目標(biāo)中間數(shù)據(jù)庫(kù)中。[0044]任務(wù)事件結(jié)構(gòu)對(duì)于CDA引擎處理的事件類型目前有CDA的提取、CDA的解析等,這些事件的請(qǐng)求以某種結(jié)構(gòu)傳遞過(guò)來(lái)并保存在數(shù)據(jù)庫(kù)的表中,創(chuàng)建事件的等待處理隊(duì)列,等待事件監(jiān)聽(tīng)器的監(jiān)聽(tīng)。事件監(jiān)聽(tīng)器通過(guò)輪詢獲取需要處理的事件,通過(guò)查找交由相應(yīng)的事件處理器進(jìn)行處理,并最終完成具體的任務(wù)(如CDA的解析等)。這個(gè)可以保存在數(shù)據(jù)庫(kù)表中的事件的結(jié)構(gòu),即我們的任務(wù)事件結(jié)構(gòu)。與之相關(guān)的還有事件管理器、處理器等輔助結(jié)構(gòu)。事件管理器包括以下內(nèi)容:名稱、事件隊(duì)列、線程池、注冊(cè)的處理器列表、運(yùn)行標(biāo)志。整個(gè)CDAEngine被分為6層,基礎(chǔ)框架層、事件處理層、數(shù)據(jù)封裝層、模板規(guī)則層、文檔處理層和和UI服務(wù)層。其中CDA文檔處理層包括生成、解析、模板提取和任務(wù)觸發(fā),模板規(guī)則層包括OHTAP1、模板規(guī)則、數(shù)據(jù)規(guī)則。[0045]基礎(chǔ)框架層CDAEngine部署為一個(gè)標(biāo)準(zhǔn)的JavaWeb應(yīng)用,可在各類Web容器下部署運(yùn)行,基礎(chǔ)框架米用Spring+Hibernate方法,Spring管理Bean,整合Hibernate,管理BeonCP數(shù)據(jù)庫(kù)連接池,初始化啟動(dòng)CDAEngine的事件管理器。[0046]事件處理層事件處理層工作在Spring容器中,由Spring復(fù)雜初始化和啟動(dòng)。在Spring的配置文件中定義事件管理器的容器ICDAEngine實(shí)現(xiàn)類,通過(guò)屬性注入所需要的事件管理器、事件處理器、事件監(jiān)聽(tīng)器等Bean對(duì)象,并在Spring框架啟動(dòng)時(shí)調(diào)用start方法啟動(dòng),Web應(yīng)用停止時(shí),Spring調(diào)用stop方法停止。[0047]事件處理層是整合CDAEngine組件的接口層,通過(guò)事件將CDAEngine的業(yè)務(wù)流程貫穿起來(lái)。實(shí)現(xiàn)從事件監(jiān)聽(tīng)器創(chuàng)建一個(gè)事件,加入到事件隊(duì)列,事件被調(diào)度處理,分配并啟動(dòng)事件處理線程,啟動(dòng)事件處理過(guò)程,處理完畢或異常時(shí)通過(guò)回調(diào)方式通知,完成一個(gè)事件處理流程。生成CDA文檔、解析CDA文檔、提取CDA樣例模板規(guī)則,均被視作一個(gè)事件處理。[0048]數(shù)據(jù)封裝層數(shù)據(jù)封裝層工作在Spring容器中,使用Spring的JDBC組件的JdbcTemplate來(lái)處理數(shù)據(jù)庫(kù)操作。數(shù)據(jù)封裝層的主要作用是將物理數(shù)據(jù)庫(kù)中的表和字段按照規(guī)則(數(shù)據(jù)填充規(guī)則)封裝成CDA文檔處理層使用的TCF(Table表、Componet組分和Field字段)對(duì)象結(jié)構(gòu),是數(shù)據(jù)庫(kù)與CDA文檔處理之間的數(shù)據(jù)通道。它向上提供符合CDA文檔結(jié)構(gòu)的TCF對(duì)象操作,向下提供JDBC物理數(shù)據(jù)庫(kù)操作。[0049]模板規(guī)則層模板規(guī)則層工作在基礎(chǔ)框架層的Hibernate層上,模板規(guī)則層的主要功能維護(hù)模板數(shù)據(jù)庫(kù),提供模板提取和模板解析操作。當(dāng)從CDA樣例文件中提取到模板數(shù)據(jù)后,按規(guī)則將數(shù)據(jù)存儲(chǔ)到模板數(shù)據(jù)庫(kù)中,生成模板規(guī)則庫(kù);當(dāng)生成和解析CDA文檔時(shí),負(fù)責(zé)檢索模板規(guī)則庫(kù)完成模板規(guī)則的查詢。[0050]模板數(shù)據(jù)庫(kù)中除了模板規(guī)則外,還包含數(shù)據(jù)填充規(guī)則,因此模板規(guī)則層是CDAEngine的原理實(shí)現(xiàn)層,這層的代碼可能被其他各層調(diào)用(模板規(guī)則層從代碼結(jié)構(gòu)上不易體現(xiàn),例如模板的解析規(guī)則可能體現(xiàn)在模板提取模塊,模板的使用規(guī)則體現(xiàn)生成和解析模板,數(shù)據(jù)填充規(guī)則體現(xiàn)數(shù)據(jù)封裝層中)。[0051]文檔處理層文檔處理層泛指完成對(duì)CDA文檔進(jìn)行處理的所有實(shí)現(xiàn),如提取樣例文檔模板規(guī)則、生成和解析CDA文檔等。[0052]提取樣例文檔模板模塊,實(shí)現(xiàn)提取模板事件處理器,完成從一份給定的CDA樣例文檔中提取模板規(guī)則數(shù)據(jù),保存規(guī)則數(shù)據(jù)到模板數(shù)據(jù)庫(kù)。[0053]生成CDA文檔模塊,實(shí)現(xiàn)生成CDA處理器,按照文檔模板規(guī)則組織數(shù)據(jù),使用OHT的API生成CDA文檔。[0054]解析CDA文檔模塊,實(shí)現(xiàn)解析CDA處理器,匹配給定CDA文檔的類型,查找符合的模板規(guī)則,按照模板規(guī)則解析和數(shù)據(jù)填充規(guī)則,提取數(shù)據(jù)。[0055]UI服務(wù)層UI界面服務(wù)層向CDAEngine的界面提供后臺(tái)數(shù)據(jù)服務(wù)支持,CDAEngine需要一個(gè)Π界面用于管理文檔類型、模板規(guī)則、衛(wèi)生事件、數(shù)據(jù)規(guī)則和查看工作日志。[0056]系統(tǒng)的功能性需求層1)CDA文檔模版提取需求,按約定規(guī)則提取CDA樣例文件模版規(guī)則;2)模版數(shù)據(jù)填充規(guī)則需求,模版規(guī)則到中間數(shù)據(jù)庫(kù)之間的對(duì)應(yīng)關(guān)系,實(shí)現(xiàn)數(shù)據(jù)填充和抽取規(guī)則;3)模版數(shù)據(jù)庫(kù),實(shí)現(xiàn)存儲(chǔ)和管理模版規(guī)范、數(shù)據(jù)規(guī)則;4)事件處理需求,實(shí)現(xiàn)事件隊(duì)列、事件調(diào)度、事件回調(diào);5)數(shù)據(jù)封裝需求,將中間數(shù)據(jù)庫(kù)按照規(guī)則封裝成CDA文檔結(jié)構(gòu)的TCF(表、組分、字段)對(duì)象結(jié)構(gòu);6)CDA文檔生成,實(shí)現(xiàn)從中間數(shù)據(jù)庫(kù)按模版規(guī)則生成CDA文檔;7)CDA文檔解析,實(shí)現(xiàn)讀取CDA文件,按照模版規(guī)則解析,抽取數(shù)據(jù)到中間數(shù)據(jù)庫(kù)。[0057]主要步驟描述提取文檔模板:1)事件監(jiān)聽(tīng)器掃描樣例文檔庫(kù)數(shù)據(jù),并加載所有是否處理字段為“A”的記錄;2)將加載到的所有樣例記錄的是否處理字段改為“P”;3)為所有樣例文檔創(chuàng)建事件對(duì)象,并將記錄的id值設(shè)置到事件對(duì)象的文檔UUID屬性中;4)將所有事件對(duì)象添加到事件管理器中;5)事件管理器調(diào)用提取模板的事件處理器,并將事件對(duì)象傳入;6)提取模板的事件處理器調(diào)用模板數(shù)據(jù)提取操作。[0058]抽取模板1)調(diào)用ClinicalDocument模板數(shù)據(jù)提取操作:創(chuàng)建TemplateUUID,提取屬性;2)調(diào)用Sect1n模板數(shù)據(jù)提取操作:創(chuàng)建TemplateUUID,提取屬性;3)調(diào)用Entry模板數(shù)據(jù)提取操作:創(chuàng)建TemplateUUID,提取屬性;4)調(diào)用EntryRelat1nship模板數(shù)據(jù)提取操作:創(chuàng)建TemplateUUID,提取屬性;5)將所有數(shù)據(jù)合并為數(shù)據(jù)列表(合并重復(fù)位置的模板數(shù)據(jù));6)將數(shù)據(jù)庫(kù)中和當(dāng)前樣例UUID相同的模板規(guī)則、樣例文檔數(shù)據(jù)刪除;7)過(guò)濾掉模板數(shù)據(jù)結(jié)果集中在數(shù)據(jù)庫(kù)中已存在的模板、模板ID、模板靜態(tài)屬性、模板靜態(tài)組分?jǐn)?shù)據(jù);8)將抽取到的模板數(shù)據(jù)保存到模板數(shù)據(jù)庫(kù)中;9)修改文檔庫(kù)表中當(dāng)前樣例記錄的是否處理狀態(tài):正常處理(“C”),出現(xiàn)異常(“E”)。[0059]制定數(shù)據(jù)規(guī)則O獲取CDASample文件;2)從CDASample文件中找出需要填充規(guī)則的組分信息;3)從模板數(shù)據(jù)庫(kù)的模板規(guī)則表中獲取需要的源數(shù)據(jù)表的名稱;4)根據(jù)源數(shù)據(jù)表的名稱,到相應(yīng)的源數(shù)據(jù)庫(kù)中獲取跟此CDA相關(guān)的業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);5)從模板庫(kù)中獲取相應(yīng)的組分信息;6)對(duì)應(yīng)組分、業(yè)務(wù)數(shù)據(jù)與模板的關(guān)系;7)填充模板規(guī)則到模板庫(kù)的數(shù)據(jù)規(guī)則表中。[0060]事件處理O前提是Spring注入了事件處理器;2)CDAEngine載入事件處理器;3)事件監(jiān)聽(tīng)器時(shí)刻處在運(yùn)行狀態(tài),以監(jiān)聽(tīng)事件;4)添加事件隊(duì)列到事件監(jiān)聽(tīng)器,事件監(jiān)聽(tīng)器監(jiān)聽(tīng)到新事件并獲取事件;5)事件監(jiān)聽(tīng)器根據(jù)事件類型獲取處理器類別;6)創(chuàng)建線程,獲取事件處理器實(shí)例對(duì)事件進(jìn)行處理。[0061]生成CDA文檔O事件處理器建立生成CDA文檔的任務(wù);2)CDA文檔建立類從DAO中得到所有的相應(yīng)模板信息;3)調(diào)用創(chuàng)建Sect1n的方法;4)利用CDA工具類填充自身屬性,靜態(tài)組分,templateld,id等屬性;5)調(diào)用創(chuàng)建Entry的方法;6)利用CDA工具類填充自身屬性,靜態(tài)組分,templateld,id等屬性;7)調(diào)用創(chuàng)建EntryRelat1nship的方法;8)利用CDA工具類填充自身屬性,靜態(tài)組分,templateld,id等屬性;9)調(diào)用CDAtools中的addComponent方法來(lái)創(chuàng)建和加入組分;10)把建立出的組分加入到EntryRelat1nship;11)把建立出的EntryRelat1nship加入到Entry;12)把建立出的Entry加入到Sect1n;13)把建立出的Sect1n加入到CDA文檔;14)把生成出的文檔存入到物理硬盤(pán)。[0062]解析CDA文檔1)調(diào)用DAO層,提取所有當(dāng)前文檔類型的模板數(shù)據(jù)列表;2)循環(huán)解析Sect1n層;3)循環(huán)解析Entry層;4)循環(huán)解析EntryRelat1nship層;5)提取當(dāng)前層的TemplateUUID值;6)通過(guò)TemplateUUID值到模板數(shù)據(jù)列表中查找對(duì)應(yīng)的表名稱;7)通過(guò)表名稱到數(shù)據(jù)封裝層獲取ITable實(shí)例對(duì)象;8)提取ITable對(duì)象中的組分列表數(shù)據(jù);9)循環(huán)組分列表,根據(jù)組分類型調(diào)用對(duì)應(yīng)的組分解析操作;10)解析完所有組分?jǐn)?shù)據(jù);11)調(diào)用數(shù)據(jù)封裝層,將所有ITable對(duì)象存入數(shù)據(jù)庫(kù)中。[0063]數(shù)據(jù)儲(chǔ)存1)創(chuàng)建數(shù)據(jù)封裝對(duì)象;2)從模版數(shù)據(jù)庫(kù)獲取所有組分列表;3)創(chuàng)建組分及組分的各個(gè)字段,并將組分add到數(shù)據(jù)封裝對(duì)象中;4)返回空的數(shù)據(jù)對(duì)象;5)獲取組分的對(duì)象并為組分的字段設(shè)置相應(yīng)數(shù)據(jù);6)保存數(shù)據(jù)封裝對(duì)象;7)數(shù)據(jù)封裝將數(shù)據(jù)保存到目標(biāo)數(shù)據(jù)庫(kù)。[0064]事件處理相關(guān)接口:事件接口IEvent,創(chuàng)建事件需要實(shí)現(xiàn)IEvent接口;事件監(jiān)聽(tīng)接口IEventListener,事件構(gòu)造者角色不實(shí)現(xiàn)這個(gè)接口,通過(guò)擴(kuò)展AbstractEventMaker對(duì)象實(shí)現(xiàn),接口只作為CDAEngine的注冊(cè)接口使用;事件管理接口IEventManager,實(shí)現(xiàn)事件管理接口,對(duì)事件等待隊(duì)列進(jìn)行輪詢,獲取到未被處理事件,并查找相應(yīng)的事件處理器;事件處理接口IEventProcessor,事件處理者角色要實(shí)現(xiàn)事件處理接口,一個(gè)事件處理器只能處理一種事件類型;事件回調(diào)接口IEventCallback,在創(chuàng)建事件對(duì)象時(shí),注冊(cè)回調(diào)對(duì)象,回調(diào)對(duì)象實(shí)現(xiàn)事件回調(diào)接口,當(dāng)事件開(kāi)始、結(jié)束處理或有異常時(shí),事件處理線程會(huì)自動(dòng)回調(diào)相應(yīng)的方法在相應(yīng)的事件回調(diào)方法中完成業(yè)務(wù)邏輯;事件隊(duì)列接口IEventQueue,將創(chuàng)建的事件對(duì)象加入到事件隊(duì)列,每次輪詢的時(shí)候從事件隊(duì)列接口的實(shí)現(xiàn)中取走一個(gè)事件進(jìn)行處理。[0065]本發(fā)明提供的CDA引擎系統(tǒng)針對(duì)現(xiàn)有的醫(yī)療文檔,建立與CDA標(biāo)準(zhǔn)兼容的引擎,將醫(yī)療數(shù)據(jù)轉(zhuǎn)換為統(tǒng)一的CDA文檔,并且存儲(chǔ)在數(shù)據(jù)中心,以提供瀏覽和下載服務(wù),同時(shí)系統(tǒng)易用、安全、擴(kuò)展性強(qiáng)。[0066]通過(guò)CDA引擎生成的CDA文檔,使醫(yī)療服務(wù)人員能夠在任何時(shí)間、任何地點(diǎn)都能及時(shí)獲取必要的信息,以支持高質(zhì)量的醫(yī)療服務(wù);使公共衛(wèi)生工作者能全面掌控人群健康信息,做好疾病預(yù)防、控制和健康促進(jìn)工作;使居民能掌握和獲取自己完整的健康資料,參與健康管理,享受持續(xù)、跨地區(qū)、跨機(jī)構(gòu)的醫(yī)療衛(wèi)生服務(wù);使衛(wèi)生管理者能動(dòng)態(tài)掌握衛(wèi)生服務(wù)資源和利用信息,實(shí)現(xiàn)科學(xué)管理和決策,從而達(dá)到有效控制醫(yī)療費(fèi)用的不合理增長(zhǎng)、減少醫(yī)療差錯(cuò)、提聞醫(yī)療與服務(wù)質(zhì)量的目標(biāo)。【專利附圖】【附圖說(shuō)明】[0067]圖1是按照本發(fā)明的CDA引擎系統(tǒng)實(shí)現(xiàn)方法的一實(shí)施例的流程圖。[0068]圖2是圖1所示實(shí)施例中文檔模板提取模塊完成模板抽取、存儲(chǔ)的調(diào)度流程圖。[0069]圖3是圖1所示實(shí)施例中文檔模板提取模塊完成模板抽取、存儲(chǔ)的流程圖。[0070]圖4是圖1所示實(shí)施例中數(shù)據(jù)規(guī)則制定模塊完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充的流程圖。[0071]圖5是圖1所示實(shí)施例中事件處理模塊對(duì)插入到事件隊(duì)列的事件進(jìn)行處理的流程圖。[0072]圖6是圖1所示實(shí)施例中數(shù)據(jù)封裝模塊將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中的流程圖。[0073]圖7是圖1所示實(shí)施例中CDA文檔生成模塊生成CDA文檔的流程圖。[0074]圖8是圖1所示實(shí)施例中CDA文檔解析模塊完成對(duì)CDA文檔解析的流程圖?!揪唧w實(shí)施方式】[0075]下面參照附圖結(jié)合示例性的實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。[0076]實(shí)施例1:圖1為本發(fā)明的CDA引擎系統(tǒng)實(shí)現(xiàn)方法流程圖,數(shù)據(jù)提供者提供用來(lái)填充CDA文檔的原始數(shù)據(jù),數(shù)據(jù)規(guī)則制定者建立中間數(shù)據(jù)庫(kù)和模板庫(kù)之間的數(shù)據(jù)規(guī)則,外圍系統(tǒng)使用生成出來(lái)的CDA文檔,如圖所示,所述方法包括以下步驟:通過(guò)文檔模板提取模塊抽取指定CDA樣例文件中固定的靜態(tài)結(jié)構(gòu)信息存入模板數(shù)據(jù)庫(kù)中;通過(guò)數(shù)據(jù)規(guī)則制定模塊完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充;借助于事件處理模塊對(duì)插入到事件隊(duì)列的事件進(jìn)行處理;通過(guò)數(shù)據(jù)封裝模塊將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中;通過(guò)CDA文檔生成模塊完成CDA文檔的生成;通過(guò)CDA文檔解析模塊完成CDA文檔的解析。[0077]CDA引擎內(nèi)部有源標(biāo)準(zhǔn)庫(kù)、目標(biāo)標(biāo)準(zhǔn)庫(kù)和模版庫(kù),三個(gè)數(shù)據(jù)庫(kù),源和目標(biāo)分別用于生成和解析CDA文檔;標(biāo)準(zhǔn)庫(kù)是為了滿足生成和解析CDA文檔而定義的內(nèi)部數(shù)據(jù)庫(kù),標(biāo)準(zhǔn)庫(kù)和中間數(shù)據(jù)庫(kù)之間通過(guò)數(shù)據(jù)遷移工具,進(jìn)行數(shù)據(jù)同步;模版庫(kù)用于存儲(chǔ)模版規(guī)則,是CDA引擎的規(guī)則庫(kù)。[0078]CDA引擎部署為一個(gè)標(biāo)準(zhǔn)的JavaWeb應(yīng)用,可在各類Web容器下部署運(yùn)行,基礎(chǔ)框架米用Spring+Hibernate方法,Spring管理Bean,整合Hibernate,管理BeonCP數(shù)據(jù)庫(kù)連接池,初始化啟動(dòng)CDA引擎的事件管理器。[0079]本實(shí)施例中,通過(guò)CDA引擎生成的CDA文檔,使醫(yī)療服務(wù)人員能夠在任何時(shí)間、任何地點(diǎn)都能及時(shí)獲取必要的信息,以支持高質(zhì)量的醫(yī)療服務(wù);使公共衛(wèi)生工作者能全面掌控人群健康信息,做好疾病預(yù)防、控制和健康促進(jìn)工作;使居民能掌握和獲取自己完整的健康資料,參與健康管理,享受持續(xù)、跨地區(qū)、跨機(jī)構(gòu)的醫(yī)療衛(wèi)生服務(wù);使衛(wèi)生管理者能動(dòng)態(tài)掌握衛(wèi)生服務(wù)資源和利用信息,實(shí)現(xiàn)科學(xué)管理和決策,從而達(dá)到有效控制醫(yī)療費(fèi)用的不合理增長(zhǎng)、減少醫(yī)療差錯(cuò)、提聞醫(yī)療與服務(wù)質(zhì)量的目標(biāo)。[0080]實(shí)施例2:圖2為圖1所示實(shí)施例中文檔模板提取模塊完成模板抽取、存儲(chǔ)的流程圖。如圖所示,包括以下步驟:監(jiān)聽(tīng)啟動(dòng);查詢數(shù)據(jù)庫(kù)中是否有需要處理的樣例文檔;判斷是否有新樣例需要處理;無(wú)新樣例文檔,則進(jìn)入短暫休眠狀態(tài)并繼續(xù)查詢;有新樣例文檔,則生成所有事件事例對(duì)象;將事件添加進(jìn)事件管理器中;調(diào)用事件處理器處理事件;處理器處理提取模板事件;進(jìn)行模板數(shù)據(jù)的抽取、存儲(chǔ)。[0081]如圖3模板提取具體操作流程圖所示,所述文檔模板提取模塊的功能是抽取指定CDA樣例文件中相對(duì)固定的靜態(tài)結(jié)構(gòu)信息存入模板數(shù)據(jù)庫(kù)中。包括CDA樣例文檔頭中的templateld、realmCode、typeld、code、title、confidentialityCode>IanguageCode>vers1nNumber信息;sect1n(章節(jié))的屬性、templateld、code、title信息;Entry(Act>Encounter、Observat1n、Observat1nMedia、Organizer、Procedure、Reg1nOfInterestsSubstanceAdministrat1n、Supply)的templateld、statusCode信息;以及Entry下的復(fù)雜組分層中的templateld等。模板uuid生成規(guī)則,組分ID規(guī)則(節(jié)點(diǎn)名:組分類型):樣例uuid:組分ID+templatelD+code+vers1nNumber;Sect1n:組分ID+屬性+templateID+code+title+text;其他模板:組分ID+屬性+templateID。[0082]模板提取模塊通過(guò)實(shí)現(xiàn)事件監(jiān)聽(tīng)類監(jiān)視數(shù)據(jù)庫(kù),發(fā)現(xiàn)有新的樣例數(shù)據(jù)就生成事件對(duì)象,然后調(diào)用AbstractEventMaker的addEvent方法將事件存入事件管理器中。事件管理器異步輪循事件列表來(lái)處理事件實(shí)例。發(fā)現(xiàn)新事件后分配線程進(jìn)行處理。每一次模板提取是由事件處理器進(jìn)行調(diào)用的。模板提取模塊通過(guò)實(shí)現(xiàn)IEventProcessor接口,在process方法中調(diào)用ReadTemplateMain.readTemplate操作進(jìn)行模板數(shù)據(jù)抽取、數(shù)據(jù)過(guò)濾、存儲(chǔ)。ReadTemplateMain.readTemplate操作調(diào)用ReadTemplate.readTemplate抽取樣例模板數(shù)據(jù),處理完成后返回封裝好的HibernateP0J0對(duì)象實(shí)例列表,再由ReadTemplateMain.readTemplate調(diào)用Dao層將數(shù)據(jù)保存進(jìn)數(shù)據(jù)庫(kù)。在提取模板過(guò)程中ReadTemplate.readTemplate操作會(huì)根據(jù)CDA的層次結(jié)構(gòu)調(diào)用不同的內(nèi)部解析操作(例如readSect1n、readAct等),在每層的提取操作中都會(huì)進(jìn)行MD5加密、模板UUID提取、模板位置提取操作。[0083]異常事件流:在提取一份CDA模板的過(guò)程中,在任何一個(gè)環(huán)節(jié)出現(xiàn)異常,都會(huì)將模板庫(kù)中文檔庫(kù)表的當(dāng)前樣例記錄的是否處理字段值修改為“E”,并將異常拋給調(diào)用函數(shù),最終拋給任務(wù)事件處理。由任務(wù)事件處理模塊執(zhí)行異常函數(shù)進(jìn)行異常處理。[0084]實(shí)施例3:圖4是圖1所示實(shí)施例中數(shù)據(jù)規(guī)則制定模塊完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充的流程圖。如圖所示,步驟包括:獲取模板樣例文件;學(xué)習(xí)模板并提取需要制定規(guī)則的數(shù)據(jù)結(jié)構(gòu);查詢并返回模板庫(kù)中相關(guān)模板規(guī)則和組分信息;整理需要填充的數(shù)據(jù)的組分信息、模板規(guī)則ID及默認(rèn)值;查詢并返回所述模板中業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);整理模板信息和業(yè)務(wù)數(shù)據(jù)信息;填充數(shù)據(jù)規(guī)則到模板庫(kù)。[0085]數(shù)據(jù)填充規(guī)則用于表示源數(shù)據(jù)庫(kù)中數(shù)據(jù)表的表字段值與某種類型的組分的組分字段值之間的對(duì)應(yīng)關(guān)系,并描述了組合成的組分對(duì)應(yīng)于文檔中的位置信息,對(duì)于不與任何表字段關(guān)聯(lián)的組分字段值,我們?yōu)槠渲付ㄒ粋€(gè)默認(rèn)值。[0086]在錄入數(shù)據(jù)填充規(guī)則時(shí),需已知源數(shù)據(jù)庫(kù)的相關(guān)數(shù)據(jù)表的表結(jié)構(gòu)、組分及其組成信息,并且需熟悉CDA模板的文檔結(jié)構(gòu)。[0087]對(duì)于一份新的CDA文檔模板,CDA引擎能夠自動(dòng)學(xué)習(xí)該文檔的結(jié)構(gòu),提取文檔結(jié)構(gòu)到模板數(shù)據(jù)庫(kù)。但是對(duì)于數(shù)據(jù)的填充規(guī)則無(wú)法自動(dòng)提取,該過(guò)程需人工干預(yù)。[0088]在生成CDA時(shí),數(shù)據(jù)填充規(guī)則指定了按照什么樣的規(guī)則從數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),按照什么樣的規(guī)則將數(shù)據(jù)填充到CDA文檔對(duì)象中。在解析CDA時(shí),數(shù)據(jù)填充規(guī)則用于從文檔指定位置提取業(yè)務(wù)數(shù)據(jù),存儲(chǔ)到指定目標(biāo)位置。[0089]數(shù)據(jù)填充規(guī)則中包括6個(gè)重要部分,即數(shù)據(jù)表的名稱、表字段的名稱、組分ID、組分字段的名稱、模板規(guī)則ID(用于關(guān)聯(lián)該組分的字段值在CDA文檔中的位置)、默認(rèn)值。[0090]數(shù)據(jù)規(guī)則制定模塊工作在基礎(chǔ)框架層的Hibernate層上,主要功能維護(hù)模板數(shù)據(jù)庫(kù),提供模板提取和模板解析操作。當(dāng)從CDA樣例文件中提取到模板數(shù)據(jù)后,按規(guī)則將數(shù)據(jù)存儲(chǔ)到模板數(shù)據(jù)庫(kù)中,生成模板規(guī)則庫(kù);當(dāng)生成和解析CDA文檔時(shí),負(fù)責(zé)檢索模板規(guī)則庫(kù)完成模板規(guī)則的查詢。[0091]實(shí)施例4:圖5是圖1所示實(shí)施例中事件處理模塊對(duì)插入到事件隊(duì)列的事件進(jìn)行處理的流程圖。如圖所示,包括以下步驟:新增一個(gè)事件;添加所述事件到等待處理隊(duì)列;監(jiān)聽(tīng)事件隊(duì)列并獲取所述事件;查找事件處理器,創(chuàng)建處理器實(shí)例處理事件;所述事件處理成功則監(jiān)聽(tīng)器繼續(xù)運(yùn)行,事件處理不成功則將所述事件轉(zhuǎn)入異常隊(duì)列。[0092]本實(shí)施例對(duì)插入到事件隊(duì)列的事件進(jìn)行處理,事件監(jiān)聽(tīng)器對(duì)事件隊(duì)列進(jìn)行定時(shí)輪詢,查找并獲得未被處理的事件交由事件處理器進(jìn)行處理。[0093]基本事件流新增事件出現(xiàn)時(shí),事件監(jiān)聽(tīng)器通過(guò)對(duì)事件隊(duì)列的輪詢獲取到未被處理的事件,根據(jù)事件的類型查找相應(yīng)的事件處理器,事件處理器創(chuàng)建一個(gè)單獨(dú)的線程對(duì)該事件進(jìn)行處理。[0094]異常事件流事件處理發(fā)生異常時(shí),該事件狀態(tài)置為處理異常,稍后通過(guò)人工干預(yù)等方式對(duì)該事件進(jìn)行處理,比如重新創(chuàng)建同類事件、修改事件狀態(tài)為等待處理以使事件重新進(jìn)入事件隊(duì)列等待處理。[0095]實(shí)施例5:圖6是圖1所示實(shí)施例中數(shù)據(jù)封裝模塊將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中的流程圖。如圖所示,包括以下步驟:加載數(shù)據(jù);觸發(fā)數(shù)據(jù)加載;獲取表信息;返回表信息;獲取數(shù)據(jù)信息;返回?cái)?shù)據(jù)信息;數(shù)據(jù)加載完成;數(shù)據(jù)加載成功;獲取數(shù)據(jù)封裝對(duì)象;創(chuàng)建封裝對(duì)象;返回組分字段與表字段對(duì)應(yīng);為數(shù)據(jù)封裝對(duì)象setDatas得到帶有數(shù)據(jù)的封裝對(duì)象;結(jié)束。[0096]本實(shí)施例中,對(duì)CDA文檔中所使用具體數(shù)據(jù)封裝到某個(gè)對(duì)象中,CDA在使用這些數(shù)據(jù)時(shí),只需要獲取封裝好的對(duì)象即可。具體表中的屬性與文檔中sect1n等的屬性進(jìn)行對(duì)應(yīng),對(duì)于非具體表數(shù)據(jù)或固定數(shù)據(jù),則采用默認(rèn)值的形式在表中存儲(chǔ),以達(dá)到封裝的效果。[0097]基本事件流通過(guò)模版規(guī)則ID,在數(shù)據(jù)規(guī)則表中獲取相應(yīng)的記錄,根據(jù)這些記錄明確所涉及的數(shù)據(jù)庫(kù)表、組分,以及組分字段名和數(shù)據(jù)庫(kù)表字段名的對(duì)應(yīng)(或者是組分字段的默認(rèn)值),通過(guò)關(guān)聯(lián)的組分ID確定所有組分及其字段值,進(jìn)而封裝成所需要的對(duì)象。針對(duì)ANY類型的組分,數(shù)據(jù)規(guī)則表中所對(duì)應(yīng)的字段,則是數(shù)據(jù)表中存放指針的字段,通過(guò)查詢標(biāo)準(zhǔn)庫(kù)中的具體表的字段獲取指針值,由該指針在ANY相關(guān)的兩個(gè)表中獲取組分的相關(guān)信息異常事件流對(duì)于異常事件,此用例的異常在數(shù)據(jù)加載和數(shù)據(jù)填充兩個(gè)階段都可能出現(xiàn)。異常事件流包括:獲取的表信息不正確導(dǎo)致無(wú)法獲取數(shù)據(jù)或者獲取數(shù)據(jù)不符合;所需組分信息在模板庫(kù)中不存在;組分字段在數(shù)據(jù)庫(kù)表中無(wú)對(duì)應(yīng)字段;為數(shù)據(jù)封裝對(duì)象setData時(shí)類型或格式不匹配。[0098]實(shí)施例6:圖7是圖1所示實(shí)施例中CDA文檔生成模塊生成CDA文檔的流程圖。如圖所示,包括以下步驟:開(kāi)始;創(chuàng)建CDADocument對(duì)象;從數(shù)據(jù)庫(kù)中得到此對(duì)象應(yīng)用的模板;填入Header信息;利用工具類填寫(xiě)屬性;填入Sect1n對(duì)象;創(chuàng)建Sect1n對(duì)象;利用工具類填寫(xiě)屬性;填寫(xiě)Entry對(duì)象;創(chuàng)建Entry對(duì)象;利用工具類填寫(xiě)屬性;填入;填入EntryRelat1nship對(duì)象;創(chuàng)建EntryRelat1nship對(duì)象;利用工具類填寫(xiě)屬性;填寫(xiě)具體組分;生成CDA文檔;結(jié)束。[0099]實(shí)施例7:圖8是圖1所示實(shí)施例中CDA文檔解析模塊完成對(duì)CDA文檔解析的流程圖。如圖所示,包括以下步驟:提取CDA文檔類型值,根據(jù)CDA類型加載所有模板數(shù)據(jù);遍歷Sect1n、入口以及關(guān)系入口,從模板數(shù)據(jù)庫(kù)中提取表名;循環(huán)表對(duì)象中的組分列表;根據(jù)組分類型調(diào)用對(duì)應(yīng)的解析工具,進(jìn)行數(shù)據(jù)解析填充;解析完成后,將數(shù)據(jù)提交至數(shù)據(jù)封裝層進(jìn)行數(shù)據(jù)存儲(chǔ)。[0100]本實(shí)施例是對(duì)一份標(biāo)準(zhǔn)CDA文檔進(jìn)行業(yè)務(wù)數(shù)據(jù)提取(前提是要解析的CDA文檔類型的模板信息已經(jīng)抽取到模板庫(kù)中),并保存到目標(biāo)中間數(shù)據(jù)庫(kù)的過(guò)程。[0101]為了更好地理解本發(fā)明,以上結(jié)合具體實(shí)施例對(duì)本發(fā)明作了詳細(xì)說(shuō)明。但是,顯然可對(duì)本發(fā)明進(jìn)行不同的變型和改型而不超出權(quán)利要求限定的本發(fā)明更寬的精神和范圍。因此,以上實(shí)施例具有示例性而沒(méi)有限制的含義。【權(quán)利要求】1.一種CDA引擎系統(tǒng),所述系統(tǒng)完成從中間數(shù)據(jù)庫(kù)中讀取數(shù)據(jù),按規(guī)則將數(shù)據(jù)組合成符合標(biāo)準(zhǔn)的CDA文檔,其特征在于,所述系統(tǒng)包括以下模塊:文檔模板提取模塊,用于抽取指定CDA樣例文件中固定的靜態(tài)結(jié)構(gòu)信息存入模板數(shù)據(jù)庫(kù)中;數(shù)據(jù)規(guī)則制定模塊,用于完成模板庫(kù)中數(shù)據(jù)規(guī)則的填充;事件處理模塊,用于處理插入到事件隊(duì)列中的事件;數(shù)據(jù)封裝模塊,用于將CDA文檔使用的數(shù)據(jù)封裝到對(duì)象中;CDA文檔生成模塊,用于生成CDA文檔。2.根據(jù)權(quán)利要求1所述的CDA引擎系統(tǒng),其特征在于,所述文檔模板提取模塊包括CDA樣例文件、模板數(shù)據(jù)庫(kù)以及事件調(diào)度模塊。3.根據(jù)權(quán)利要求2所述的CDA引擎系統(tǒng),其特征在于,所述文檔模板提取模塊進(jìn)一步用于:監(jiān)聽(tīng)啟動(dòng);查詢數(shù)據(jù)庫(kù)中是否有需要處理的樣例文檔;判斷是否有新樣例需要處理;無(wú)新樣例文檔,則進(jìn)入短暫休眠狀態(tài)并繼續(xù)查詢;有新樣例文檔,則生成所有事件事例對(duì)象;將事件添加進(jìn)事件管理器中;調(diào)用事件處理器處理事件;處理器處理提取模板事件;進(jìn)行模板數(shù)據(jù)的抽取、存儲(chǔ)。4.根據(jù)權(quán)利要求1所述的CDA引擎系統(tǒng),其特征在于,所述數(shù)據(jù)規(guī)則制定模塊包括數(shù)據(jù)規(guī)則制定者、中間數(shù)據(jù)庫(kù)以及模板數(shù)據(jù)庫(kù)。5.根據(jù)權(quán)利要求4所述的CDA引擎系統(tǒng),其特征在于,所述數(shù)據(jù)規(guī)則制定模塊進(jìn)一步用于:獲取模板樣例文件;學(xué)習(xí)模板并提取需要制定規(guī)則的數(shù)據(jù)結(jié)構(gòu);查詢并返回模板庫(kù)中相關(guān)模板規(guī)則和組分信息;整理需要填充的數(shù)據(jù)的組分信息、模板規(guī)則ID及默認(rèn)值;查詢并返回所述模板中業(yè)務(wù)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu);整理模板信息和業(yè)務(wù)數(shù)據(jù)信息;填充數(shù)據(jù)規(guī)則到模板庫(kù)。6.根據(jù)權(quán)利要求1所述的CDA引擎系統(tǒng),其特征在于,所述事件處理模塊包括事件添加模塊、事件監(jiān)聽(tīng)模塊以及事件處理模塊。7.根據(jù)權(quán)利要求6所述的CDA引擎系統(tǒng),其特征在于,所述事件處理模塊進(jìn)一步用于:新增一個(gè)事件;添加所述事件到等待處理隊(duì)列;監(jiān)聽(tīng)事件隊(duì)列并獲取所述事件;查找事件處理器,創(chuàng)建處理器實(shí)例處理事件;所述事件處理成功則監(jiān)聽(tīng)器繼續(xù)運(yùn)行,事件處理不成功則將所述事件轉(zhuǎn)入異常隊(duì)列。8.根據(jù)權(quán)利要求7所述的CDA引擎系統(tǒng),其特征在于,所述事件處理不成功則:通過(guò)重新創(chuàng)建同類事件和/或修改事件狀態(tài)為等待處理以使事件重新進(jìn)入事件隊(duì)列等待處理。9.根據(jù)權(quán)利要求1所述的CDA引擎系統(tǒng),其特征在于,所述數(shù)據(jù)封裝模塊包括數(shù)據(jù)加載模塊和數(shù)據(jù)填充模塊。10.根據(jù)權(quán)利要求9所述的CDA引擎系統(tǒng),其特征在于,所述數(shù)據(jù)封裝模塊進(jìn)一步用于:通過(guò)數(shù)據(jù)加載模塊完成數(shù)據(jù)加載;通過(guò)數(shù)據(jù)填充模塊獲取數(shù)據(jù)封裝對(duì)象進(jìn)而得到帶有數(shù)據(jù)的封裝對(duì)象。【文檔編號(hào)】G06F19/00GK104392123SQ201410656418【公開(kāi)日】2015年3月4日申請(qǐng)日期:2014年11月18日優(yōu)先權(quán)日:2014年11月18日【發(fā)明者】呂軍震,劉樾涵,于國(guó)方,趙凱,武佳申請(qǐng)人:新博卓暢技術(shù)(北京)有限公司
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1