CQL 教育專區

CQL 架構與表達邏輯模型

臨床品質語言 (CQL) 是一種高階、特定領域的語言,專注於臨床品質,面向測量和決策支援工件作者。此語言還描述了一種機器可讀的規範表示,稱為表達邏輯模型(ELM),實際系統執行則是以ELM為主,旨在實現臨床知識的共享。透過工具,可以將CQL與ELM互相轉換,將複雜的邏輯轉換為可執行程式。
https://cql.hl7.org/01-introduction.html
cover-image
cover-image

CQL 開發環境與工具

(1) 傳統開發CQL所需要的工具為Visual Studio Code。在VS Code環境下透過plugin的步驟安裝CQFramework Clinical Quality Landuage Extension,藉由此外掛程式,VS Code可執行CQL以及觀看ELM資訊。詳細資訊可參考:
https://github.com/cqframework/vscode-cql/wiki/User-Guide。
https://github.com/cqframework/cqf-exercises。

(2) Clinical Decision Support (CDS) Authoring Tool 是一個基於 Web 的應用程式,開發者可直接創作HL7標準之臨床質量語言(CQL)語句,而無需完全理解如何撰寫 CQL 之規範。
創作的基礎是使用廣泛類型(如 Condition)定義元素,並應用一個或多個值集和代碼來指定更具體的概念(如 Diabetes)。可以使用修飾符進一步細化這些元素,以指示特定狀態、最新值、與特定值的比較等。
CDS 創作工具是 CDS Connect 專案的一部分,由美國醫療保健研究和品質局 (AHRQ) 贊助開發。完整的使用及開發流程請參考下列連結資訊 : https://cds.ahrq.gov/authoring/documentation 。

註 : 開始使用 CDS Authoring Tool 之前,必須先註冊兩個帳戶,CDS Authoring Tool 帳戶以及UMLS 術語服務帳戶。

(3) 透過生成式AI及大語言模型適當的訓練,未來也將有機會成為開發CQL的工具。
cover-image

CQL 結構範例

本範例以世界衛生組織 (WHO) 對於孕婦產前護理的建議(A2.1) :鐵和葉酸補充劑,進行說明。建議孕婦每日口服鐵和葉酸補充劑, 包含30 毫克至 60 毫克元素鐵和 400 微克(0.4 毫克)葉酸,以預防孕產婦貧血、產後敗血症、低出生體重和早產。
ECA規則(Event - Condition - Act):
每次接觸時,如果檢測到貧血,建議每天攝取 120 毫克元素鐵和 400 微克葉酸(建議 A.2.1),否則建議每天攝取 30 至 60 毫克元素鐵和 400 微克葉酸(建議 A.2.1)。

資料元素 :
貧血定義:
血紅素濃度 < 11 g/dL,孕齡 < 12 週 或 孕齡 > 28 週
血紅素濃度 < 10.5 g/dL,孕齡在 13 週至 27 週之間

為了表達上述計算,我們需要以下元素:
血紅素 (Hb) 濃度 (LOINC)
胎齡(週)
預計預產期(計算胎齡)
懷孕狀況 (LOINC)

以下說明CQL進行此計算之程式碼結構:
(1)宣告、引用函式庫與Valueset、codesystem設定

ANCA2-1

(2)資料元素與邏輯規則訂定義:

ANCA2-2

(3)決策及建議:

ANCA2-3

CQL 如何與 FHIR Resource 配合使用

納入條件:
患者年齡 >=35 歲且 <=70 歲且BMI >=25kg/m2 (最新值)
或 患者年齡 >=18 歲且 <35 歲且BMI >=25kg/m2 (最新值)且包含以下其中一項(糖尿病家族史、多囊性卵巢綜合症、種族 = 非裔美國人、種族 = 西班牙裔或拉丁裔)
或 患者年齡 >=18 歲且 <=70 歲且BMI >=23kg/m2(最新值)且種族 = 亞裔美國人
或 患者年齡 >=18 歲且 <=70 歲 妊娠糖尿病

排除條件:
懷孕
或過去 42 週內的妊娠觀察
或過去 12 個月患有糖尿病
或過去 12 個月內患有糖尿病前期(活動期、復發期)
或過去 12 個月內空腹血糖 (IFG) 受損(活躍、復發)
或過去 12 個月內糖耐量受損 (IGT)(活動性、復發性)
或血紅素 A1C 測試結果,過去 3 年內的最新值
或空腹血糖測試結果,過去 3 年內的最新數值
或葡萄糖耐受測試結果,過去 3 年內的最新值

應用程式分析JSON ELM用以確認需要哪些資料,然後向FHIR伺服器進行相應的查詢。從 EHR 檢索到必要的 FHIR 資料後,將使用它和JSON ELM呼叫 CQL 執行引擎庫,以計算結果。

需用的FHIR資源:
Patient Resource : 生日、性別、種族
Observation Resource : BMI (LOINC)
Condition Resource : 妊娠糖尿病、糖尿病前期、空腹血糖 (IFG) 受損、糖耐量受損 (IGT) … (SNOMED CT、ICD-10-CM)

diabete-1

diabete-2

於CQL中將同個概念但不同CodeSystem的碼進行聚合:
方法1.Concept for aggregating codes
方法2.建立ValueSet

diabete-3

diabete-4

定義簡單的品質測量

假設我們想定義一個品質測量標準,用於識別在過去一年中接受過 HbA1c 檢測的糖尿病患者。CQL 程式碼如下所示:

brary DiabetesHbA1c version '1.0.0'

using FHIR version '4.0.1'

context Patient

define InInitialPopulation:
   exists (
      [Condition: "diabetes mellitus"] D
         where D.clinicalStatus.coding.code = 'active'
   )

define InDenominator:
   InInitialPopulation

define InNumerator:
   exists (
      [Observation: "HbA1c"] H
         where H.effectiveDateTime during Interval[start of "Measurement Period" - 1 year, end of "Measurement Period"]
   )


InInitialPopulation:此定義了主診斷為糖尿病的患者。
分母:分母包括初始人群中的所有患者。
InNumerator:分子包括在測量期間進行過 HbA1c 測試的患者。

臨床決策支援規則

創建一個臨床決策支持規則,以提醒臨床醫生糖尿病患者在過去一年中沒有進行 HbA1c 檢測。
CQL 程式碼如下:

library DiabetesHbA1cAlert version '1.0.0'

using FHIR version '4.0.1'

context Patient

define HasDiabetes:
   exists (      [Condition: "diabetes mellitus"] D         where D.clinicalStatus.coding.code = 'active'   )

define LastHbA1cTest:
   [Observation: "HbA1c"] H
      where H.effectiveDateTime during Interval[start of "Measurement Period" - 1 year, end of "Measurement Period"]
      sort by effectiveDateTime desc

define NoRecentHbA1cTest:
   HasDiabetes and not exists (LastHbA1cTest)

define Alert:
   if NoRecentHbA1cTest then
      'Patient has not had an HbA1c test in the past year. Consider ordering one.'


HasDiabetes:識別診斷為糖尿病的患者。
LastHbA1cTest:檢索過去一年內最近的 HbA1c 檢測。
NoRecentHbA1cTest:檢查糖尿病患者最近是否沒有進行 HbA1c 檢測。
警報:如果患者在過去一年中沒有進行過 HbA1c 測試,則生成警報。
cover-image