---
# System prepended metadata

title: IG自動化
tags: [FHIR, IGAnalyzer]

---

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