IG自動化 === 目前台灣官方已公布的IG已接近十個,而且數量持續穩定增加中,這意味著應該有一個IG應用程式標準作業流程,目前的想法如下圖: ![IG自動化](https://hackmd.io/_uploads/Syh7CFhNWe.png) 每一個IG都提供相對應的定義檔IG Package,內容包含: * StructureDefinition * Apply Model * ValueSet/CodeSystem 其中Apply Model是從使用者的角度出發,從一般使用者的角度說明IG所需要的資訊(欄位),同時提供與profile的對應關係。StructureDefinitiony說明了每一個profeil element的詳細定義,也包含Element與ValueSet/CodeSystem的對應。也就是說,IG Package提供開發IG應用程式所需要的資訊。 另外,我們也對IG應用程式開發作拆解,思考後續自動化的可能性。一般而言,IG應用程式的開發包含以下工作: 1. 了解IG所需要的欄位,整理既有系統資料與IG欄位對應的關係,並確認欄位是否存在,若不存在則需要新增欄位。同時解析院內代碼與IG使用代碼之間的關係。 2. 使用FHIR標準API/SDK,開發IG專屬之API/SDK。 3. 開發人機介面,並根據使用者/系統輸入資料,呼叫IG API/SDK,產生FHIR資料,包含Profile與Bundle。 自動化的關鍵在IG API的開發,既然所有必需的資料IG Package都已經提供,我們應該可以將IG API產生的過程自動化(或半自動化)。結合[FUME](https://www.fume.health/)與IG Package,完成IG API開發的自動化,相關資料可參考: > https://hackmd.io/@hongyu0324/fume101 > https://hackmd.io/@hongyu0324/ig-analyzer-vacc > https://hackmd.io/@hongyu0324/FHIRIGApp > https://hackmd.io/@hongyu0324/ig2code 詳細過程如下圖所示: ![IG自動化-1](https://hackmd.io/_uploads/Syf2-qnVZx.png) 第一個步驟當然是匯入IG Package,解析所有的StructureDefinition後,我們可以產生Profile Tree,這樣的樹狀結構包含了所有Profile Element特徵與父子上下階層關係,在IG Package中,包括Pattern、Binding、Fixed與Slicing提供了Element的資料模板、代碼關聯、預設值與設定樣板。Slicing的觀念較為複雜,可參考: > https://hackmd.io/@hongyu0324/slicing 產生Profile Tree後,我們可以將IG API必要的資料萃取出來,建立FUME Tree,將IG API所需的內容具體化,這時就必須參考IG Package的內容,包含Pattern、Binding、Fixed與Slicing等訊息。 最後就是將FUME Tree的內容,轉換為FUME FLASH格式,同時將FLASH5轉換成為FHIR StructureMap上傳至FHIR Server,結合FUME,我們就可以完成IG API的自動化開發。 ![IG自動化-2](https://hackmd.io/_uploads/rk7DD53E-x.png) IG API自動化將成為IG導入的過程重要的關鍵。 > https://hackmd.io/@hongyu0324/newig