趙新 王火劍



摘 要:目前實現醫療數據合規控費的監控系統大多采用傳統命令式編碼實現,其中將業務規則邏輯與業務系統進行捆綁。當業務規則邏輯或規則知識庫發生變更時,則需要研發人員重新修改編碼,且非研發人員無法靈活地進行規則編輯維護。為解決上述問題,引入Jboss的KIE可視化配置管理系統,業務專家可通過該系統自定義編輯規則文件,并引用Drools規則引擎對規則文件進行解析。因此,只需維護規則文件即可,而無需采用傳統命令式編碼實現業務規則,減少了系統開發與維護工作量。業務系統調用Drools規則引擎進行校驗、解析規則文件,并與醫療數據進行匹配碰撞,從而實現了規則邏輯和業務系統解耦,避免了醫療政策變化對業務系統的影響,增強了系統適用性與靈活性。
關鍵詞:Drools;規則引擎;可視化;醫療數據合規
DOI:10. 11907/rjdk. 182781 開放科學(資源服務)標識碼(OSID):
中圖分類號:TP319文獻標識碼:A 文章編號:1672-7800(2019)007-0163-04
Application of Drools Rule Engine in Medical Data Compliance System
ZHAO Xin1,WANG Huo-jian2
(1. Run Technologies CO., LTD.,Beijing 100096,China;
2. Network Security Corps of Zhejiang Public Security Bureau, Hangzhou 310000,China)
Abstract: At present, most of the monitoring systems for implementing medical data compliance control fees are implemented by traditional imperative coding, in which business rule logic and business system bundles are implemented.When the business rule logic or rule knowledge base changes, the R&D personnel need to re-edit the code implementation, and non-R&D personnel cannot flexibly perform rule editing and maintenance. In order to solve the above problems, JBoss' Drools rule engine and KIE visual configuration management system are cited. The business experts can visualize the custom editing rule logic and rule knowledge base, and develop the rule logic without hard coding, which reduces the development and maintenance of the system. The business system calls the Drools rule engine to check and parse the rules file, and the medical data is matched and collided, thereby realizing the decoupling of the rule logic and the business system, avoiding the influence of the medical policy change on the business system, and enhancing the applicability of the system and flexibility.
Key Words: Drools;rule engine;visualization;medical data compliance
作者簡介:趙新(1987-),女,北京銳安科技有限公司數據分析師,研究方向公安大數據分析。
0 引言
醫保部門通過制定大量業務規則進行醫保基金的審核控費,以減少醫保基金的不合理支出,提高基金使用率。如今很多信息技術已應用于醫院醫保的精細化管理中[1]。本文的醫療數據合規審核系統主要依托規則庫對醫療機構上傳的結算單數據進行逐單逐項審核,以實現醫保結算單審核的自動化處理,縮小人工抽檢范圍與審核盲區,降低人工抽審工作量,從而減少人工成本,并提高審單準確性與工作效率。
目前有很多學者與機構對醫保審核系統進行了研究[2],已有較為成熟的產品在各大醫院得到應用,并取得顯著成效[3]。但目前醫療合規智能系統規則是通過硬編碼實現的,每個規則都需要單獨開發實現。其中規則邏輯與業務系統捆綁,當業務規則改變或新增業務規則時,則需要重新梳理邏輯,開發或修改代碼,不易于系統維護。所以本文采用JBOSS開源的Drools 規則引擎,并引入drools的KIE可視化配置管理系統對原系統進行優化。目前Drools規則引擎已發展相當成熟,并廣泛應用于企業營銷[6]、物聯網[7]、制造業[8]、金融保險[9]等領域。引進drools規則引擎的優勢主要有以下幾方面:①業務規則與系統解耦。將規則從系統中剝離,從原有代碼轉變為規則文本文件,Drools引擎提供了規則知識庫的組織管理方式;②規則知識庫可視化與自定義設置。在規則知識庫中可以靈活修改或新增規則邏輯及規則明細;③規則流程化管理。Drools引擎集成流程引擎JBPM,可以通過組織不同規則及執行順序,形成業務工作流;④規則編制方式多樣化。KIE框架提供了電子表格、導向規則表、商業過程等高級別編制方式,業務人員與用戶可以參與規則編制過程;⑤簡化應用系統開發。無需進行編碼開發規則的邏輯實現,且規則可視化維護完成后直接編譯發布即可,無需重啟應用系統,從而減少了系統開發的編碼量與維護成本。
1 Drools規則引擎
Drools是JBoss公司開發的一款基于Java語言、開源的規則引擎。該規則引擎從業務層中獨立出一套處理業務邏輯的API接口,從而實現了規則邏輯與業務系統的完全解耦。
本文使用Drools6.5版本,規則引擎執行過程為:推理引擎(Interface Engine)加載解析規則文件(Production Memory),然后加載匹配數據(Working Memory),調用ReteOO算法進行匹配,得出匹配結果,其匹配規則的生命周期由Agenda進行管理。Drools規則解析過程如圖1所示。
2 KIE可視化配置管理
Drools引擎提供了可視化配置編輯管理的KIE系統,可按照規則引擎支持的規則文件格式維護所需的知識庫,從而將規則知識庫從業務系統中剝離。知識庫主要涉及以下幾個方面:
(1)審核數據模型。定義規則所用的審核數據模型,將模型的jar包導入KIE系統。系統解析jar包,在定義規則時,可動態使用審核數據模型中的對象及對象屬性。
(2)規則文件。規則文件可以是.drl、xls、brl或.gdst文件。其中,常用的描述文件是.drl和 xls 文件,而 xls 文件更直觀且易于維護,更容易被業務人員理解。因本文的醫保規則是規則邏輯+規則知識數據,所以使用導向性決策表(.dgst)定義規則。該規則文件支持模板+數據的格式,且可以可視化地選擇數據模型對象及對象屬性,并編輯規則條件,如in、not in、<=、>=、!=等條件。對于較復雜的規則邏輯,可使用編寫腳本的方式將Java代碼直接嵌入規則文件中。
業務專家人員可自定義新增業務規則,如新增“限老年人用藥”規則,并可對已有監控規則中的具體明細條目進行編輯,如新增、修改、刪除某些限老年人使用的藥品項目。規則從系統中解耦,從原有代碼轉變為規則文本文件,研發人員無需硬編碼實現規則邏輯,從而減少了開發與維護工作量。
(3)工作流。KIE可視化配置界面使用JBPM6實現規則流程編輯,在規則定義時,必須增加ruleflow-group屬性列用于流程編排。編排工作流時,用戶可自定義所需的監控規則及規則執行順序,從而滿足不同場景的應用要求。如在重點關注某類疾病的場景中,可將該類疾病的部分規則進行組合使用。
3 系統應用
3.1 系統設計
項目目前采用組件模式開發,所以對JBOSS提供的KIE框架進行二次開發,封裝成通用業務規則引擎,并在通用的基礎上封裝偏向不同業務的規則引擎組件。系統框架分為以下四層,如圖2所示。
圖2 醫療數據合規系統框架
(1)應用系統層。應用系統層通過spring bean集成業務規則引擎組件,主要功能為定義監控審核任務,并通過配置規則引擎需要的參數,啟動規則引擎組件服務,注入醫療業務數據,如就診信息、結算信息、處方信息等。
(2)業務規則引擎組件層。 業務規則引擎組件在通用引擎提供技術的基礎上,將應用系統數據轉化成具體業務模型數據。業務規則引擎拆分數據中的元素,分別插入規則引擎,例如從審核實體里拆分Person、TreatInfo、SettleInfo、Hospital、Doctor以及診療信息里的處方,分別插入規則引擎作為Fact,審核模型如圖3所示。
圖3 Drools規則引擎審核數據模型
(3)通用引擎組件層。封裝KIE API、多線程處理模型、消息隊列模型與異常模型以供業務規則引擎組件使用,該組件層面向KieSession知識庫,規則流程使用Kie框架API,也體現了項目面向流程開發的原則。
該組件層對KieSession進行封裝,在收到需審核的數據后,需要主動調用fireAllRules方法執行工作流中編輯的所有規則。Drools規則引擎對規則文件進行解析,加載醫療模型數據,Drools推理引擎調用ReteOO算法執行匹配規則,輸出匹配結果。
(4)第三方引擎層。引用JBOSS KIE框架提供的API。
3.2 數據流向
醫療數據合規系統數據流向如圖4所示。
(1)應用系統加載醫保系統數據,構造審核實體數據單元。以某人的某次就診結算信息為單元,封裝就診信息、結算信息、醫囑信息、處方信息等,將數據注入到業務規則引擎配置的消息通道。
(2)業務規則引擎組件從配置的消息通道中讀入數據。
圖4 數據流向
(3)將業務模型數據轉換成引擎能識別的審核數據元素。啟動相應審核流程,將審核數據元素注入到通用引擎提供的API中。
(4)Drools引擎接收數據輸入,初始化kieSession,動態加載KIE發布的業務規則和工作流,或靜態加載生成的業務規則jar包。規則引擎完成工作流啟動,解釋業務規則,對審核數據元素進行處理,并根據業務規則作出相應決策。
(5)審核流程完成后通知應用系統審核完成,并返回審核結果,即醫療數據是否合規,若違規,則進行違規提醒。
3.3 規則審核示例
以“限兒童規則”為例,主要流程如下:
(1)業務規則定義“限兒童規則”,KIE可視化配置示例如圖5所示。
其中每一行配置一條規則,每一列為該條規則的邏輯條件。業務專家人員可在“編輯器”->“決策表”功能里可視化地自定義編輯規則邏輯,如再添加一個科室條件等。同時可以點擊“添加行”,增加一條限兒童使用的規則明細。該規則的邏輯實現及知識庫數據無需研發人員在業務系統中進行編碼開發,只需按圖5示例配置規則文件,即可實現規則邏輯、數據與業務系統解耦。
(2)定義業務應用場景,編輯jbpm6工作流,此例中將“限兒童規則”添加到工作流。審核任務將執行該業務應用場景的工作流,并加載該工作流配置的所有規則文件。
(3)審核模型信息。患者張三,32歲,北醫三院門診就診,診斷結果為“風寒感冒”,醫囑處方中包含 “康泰克”、“銀翹解毒片”、“小兒止咳顆粒(編碼340200038)”等,對張三此次就診情況封裝審核模型,將審核模型注入Drools引擎。
(4)Drools規則引擎解析工作流中配置的“限兒童規則”文件,并加載張三患者的就診模型數據,將兩者進行匹配碰撞。匹配到張三大于18歲,且處方中包含“小兒止咳顆粒(編碼340200038)”藥品,則該處方醫療數據違規,輸出匹配結果“直接扣款,扣款金額xx元,處方違規”,以及提醒信息:“小兒止咳顆粒只能用于18歲以下兒童”。
(5)Drools引擎審核完成,將步驟(4)中的審核結果返回業務應用系統,審核任務結束。
3.4 Drools優化
在實時監控審核任務執行情況時,發現內存使用率持續超過了90%。因Drools引擎是基于RETEOO算法的,而該算法是通過犧牲空間換取時間,在形成匹配網絡時保留了中間結果,易造成內存溢出,故需要進行JVM內存優化,并且運行完規則引擎后需調用dispose方法釋放內存[19]。
4 結語
對于規則頻繁發生變化的情況,業務領域專家可根據行業政策、知識等及時調整規則文件,而無需進行硬編碼實現。調整完規則文件后可進行動態發布,業務系統更新加載新發布的規則知識庫,無需重啟應用即可快速響應需求變更。
該規則引擎亦存在一些不足,除內存消耗較大外,其對于某些特殊場景的規則實現比較復雜,無法通過配置完成,需要編寫Drools語法腳本,不便于業務人員維護。在使用決策表規則文件時,若規則中捆綁知識數據過多,將使可視化配置系統加載渲染速度較慢,且在業務系統調用引擎進行規則匹配時,匹配效率不高。
由此可以看出,Drools規則引擎可應用于任何與商業規則、業務規則,甚至數據清洗規則相關的場景,且隨著規則引擎工具的不斷發展與完善,其在實際項目工程中的應用將越來越廣泛。
參考文獻:
[1] 吳旭東,陳慶瑩,宮明. 現代信息技術在醫院醫保精細化管理中的應用[J]. 實用醫藥雜志,2017,34(1):83-86.
[2] 王芬芬,朱超雷,陳磊,等. 醫保智能審核系統設計[J]. 解放軍醫院管理雜志,2016,23(10):928-931,968.
[3] 范玉改,李大奇. 醫保智能審核系統的應用與成效分析[J]. 中國醫院,2017,21(5):60-62.
[4] 尚爾路.? 規則自動生成技術研究及其在醫保審核中的應用[D]. 成都:電子科技大學,2017.
[5] 繆姝妹,劉云,景慎旗,等. 基于ODM規則引擎的CDS醫療監控平臺建設探討[J]. 中國衛生信息管理雜志,2018,15(5):592-596.
[6] 張樂. 基于規則引擎Drools的企業營銷系統的設計與實現[D]. 南京:東南大學,2016.
[7] 池深啟. 輕量級規則引擎Drools在物聯網平臺中的應用研究[D]. 杭州:浙江工業大學,2017.
[8] 牛凱. 規則引擎Drools在制造業J2EE系統中的應用研究[J]. 成組技術與生產現代化,2014,31(2):7-13.
[9] 余昀錦. 保險行業中Drools規則引擎的研究與應用[D]. 北京:北京郵電大學,2014.
[10] 陶曉俊,朱敏. 基于規則引擎的企業服務開發模式[J]. 計算機技術與發展,2008(2):115-118.
[12] THU E E,NWE N. Transforming model oriented program into Android source code based on Drools rule engine[J]. Journal of Computer & Communications,2017,5(3):49-59.
[13] 張淵,夏清國. 基于Rete算法的JAVA規則引擎[J]. 科學技術與工程,2006(11):1548-1550.
[14] 童毅. 規則引擎中模式匹配算法及規則引擎應用的研究[D]. 北京:北京郵電大學,2010.
[15] 黃穎.? 基于規則引擎的合同歸并生產解決方案[C]. 全國冶金自動化信息網2018年會論文集,2018.
[16] KINYUA J,WEPPENAAR D V,VERMAAK H. An intelligent maintenance management system based on multi-agent systems and the Drools planner[C]. Wuhan:International Conference on Computational Intelligence & Industrial Application,2010.
[17] 藍雯飛,邢志寶,強小利. 一種Drools規則引擎封裝模型及其實現[J]. 中南民族大學學報:自然科學版,2015,34(3):95-99.
[18] 湯冬冬. 基于Drools的分布式業務規則引擎的設計與實現[D]. 大連:大連理工大學,2016.
[19] 劉金龍. drools規則引擎模式匹配效率優化研究及實現[D]. 成都:西南交通大學,2007.
(責任編輯:黃 健)