---
# System prepended metadata

title: IG Analyzer top level design
tags: [IGAnalyzer]

---

IG Analyzer top level design
====

1. IG 解析與分析 (輸入處理)

* 應用程式首先讀取並解析一個 .tgz 格式的 IG 套件。
透過 IGClass 和底層的 IGService，它載入 IG 中所有的 StructureDefinition 資源，以理解其定義的 Profile、邏輯模型等。
* 最關鍵的步驟是，它會從「邏輯模型」中生成一個名為 QList 的內部對應表。這個列表建立了邏輯欄位 (例如 TWBPatient.Name) 與其在 FHIR Profile 中的具體路徑 (例如 Patient.name) 之間的映射關係。這個 QList 是所有後續處理的基礎。

2. 範例資料轉換 (中介處理)

StagingService 負責將 IG 中的範例 FHIR 資源轉換為其他格式。它有兩種主要模式：
* Staging 模式: 產生一個扁平化的、基於 FHIR 原始結構的 JSON，用於資料預處理。
* FUME 模式: 這是更核心的模式。它會將範例資料轉換成一個鍵值對的 JSON。其鍵 (key) 不是直接使用 FHIR 的欄位名，而是透過 IGClass.GetApplyModelByPath 方法，查詢 QList 對應表，將 FHIR 欄位路徑轉換為目標邏輯模型的欄位路徑（例如，Patient.birthDate 會被轉換成 TWBPatient.BirthDate）。

3. FUME 映射腳本生成 (輸出處理)

這是應用程式最主要的功能。IGClass 透過以下步驟生成 FUME 腳本：
* 建立結構樹 (BuildTreeView): 根據所選 Profile 的 StructureDefinition 建立一個完整的元素樹。
* 補全與修復樹 (FixFumeTreeView): 遞迴地補全樹中缺失的節點（例如 CodeableConcept 的 coding 和 system），確保結構的完整性。
* 生成 FUME 文本 (GetFUMEText): 走訪修復後的樹，將其轉換為 FUME 語法。在此過程中，它同樣使用 GetApplyModelByPath 方法查詢 QList，將每個 FHIR 元素映射到其在目標邏輯模型中的對應欄位，並寫入 FUME 腳本中。