Logo - 臺灣醫療資訊標準大平台

臺灣醫療資訊標準大平台

最新消息
簡介與沿革
部長的話
處長的話
背景說明
原電子病歷專區
FHIR
什麼是 FHIR
FHIR 教育專區
國家實作指引 (IG) 專區
實作指引 (IG) 提案暨審查作業及說明
實作指引 (IG) 草稿及提案
民間實作指引 (IG) 分享專區
TWCDI
TWCDI +
TWCDI 提案
Tool
全國專門術語平台
Rule Library
什麼是 Rule Library
CQL 教育專區
應用情境說明
CQL 測試環境
Library 資源
SMART on FHIR
什麼是 SMART
SMART 教育專區
APP 開發說明
上架流程範例
TW APP Gallery
SNOMED CT
什麼是 SNOMED CT
SCT 教育專區
SCT 官方文件與工具
SCT 資料集
LOINC
什麼是 LOINC
LOINC 教育專區
LOINC 官方文件與工具
LOINC 資料集
RxNorm
什麼是 RxNorm
RxNorm 教育專區
RxNorm 官方文件與工具
線上提問專區
最新消息
簡介與沿革部長的話處長的話背景說明原電子病歷專區
FHIR
什麼是 FHIRFHIR 教育專區
國家實作指引 (IG) 專區實作指引 (IG) 提案暨審查作業及說明實作指引 (IG) 草稿及提案民間實作指引 (IG) 分享專區
TWCDITWCDI +TWCDI 提案
Tool全國專門術語平台
Rule Library
什麼是 Rule LibraryCQL 教育專區應用情境說明CQL 測試環境Library 資源
SMART on FHIR
什麼是 SMARTSMART 教育專區APP 開發說明上架流程範例TW APP Gallery
SNOMED CT
什麼是 SNOMED CTSCT 教育專區SCT 官方文件與工具SCT 資料集
LOINC
什麼是 LOINCLOINC 教育專區LOINC 官方文件與工具LOINC 資料集
RxNorm
什麼是 RxNormRxNorm 教育專區RxNorm 官方文件與工具
線上提問專區

CQL 教育專區

首頁
什麼是 Rule Library

CQL 教育專區

CQL 架構與表達邏輯模型

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

CQL-Architecure
(圖片來源:https://cql.hl7.org/01-introduction.html)

CQL-ELM
(圖片來源:https://cql.hl7.org/01-introduction.html)

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。
如果您有測試需求,請參考 : https://github.com/AHRQ-CDS/CQL-Testing-Framework

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

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

CQL-TOOL
(圖片來源:工研院整理製作)

CQL 結構範例

以下引用 GitHub - cqframework/content-ig-walkthrough: A walkthrough of building a FHIR content implementation guide進行範例說明 :

本範例以世界衛生組織 (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 程式碼如下所示:

引用來源: Understanding Clinical Quality Language (CQL) | by Ryan Lindbeck | Medium

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 測試的患者。

品質指標建置

撰寫簡易eCQM

撰寫CQL

library mvp version '0.0.1'

using QICore version '4.1.1'
// using FHIR version '4.0.1'

include FHIRHelpers version '4.4.000' called FHIRHelpers
include SupplementalDataElements version '3.5.000' called SDE

codesystem "AdministrativeGender": 'http://terminology.hl7.org/CodeSystem/v3-AdministrativeGender'

code "Female": 'F' from "AdministrativeGender" display 'Female'


parameter "Measurement Period" default Interval[@2025-01-01, @2025-01-01)

context Patient

define "Initial Population":
    [Patient]

define "Denominator":
  "Initial Population"

define "Numerator":
  [Patient] P where P.gender = 'female'

1. Clone cqframework/ecqm-content-qicore-2025

git clone https://github.com/cqframework/ecqm-content-qicore-2025.git

2. 把剛剛寫的 CQL 放進 input/cql/

cql-file

3. 撰寫 Library 必要資訊

{
    "resourceType": "Library",
    "id": "mvp",
    "url": "http://ecqi.healthit.gov/ecqms/Library/mvp",
    "version": "0.0.1",
    "name": "mvp",
    "type": {
        "coding": [
            {
                "system": "http://terminology.hl7.org/CodeSystem/library-type",
                "code": "logic-library"
            }
        ]
    },
    "content": [
        {
            "id": "ig-loader-mvp.cql",
            "__comment__": "ig-loader-[cql file name]"
        }
    ]
}

4. 撰寫Measure

{
    "resourceType": "Measure",
    "id": "mvpMeasure",
    "url": "https://madie.cms.gov/Measure/mvpMeasure",
    "version": "Draft based on 0.2.000",
    "name": "mvpMeasure",
    "title": "mvp Measure",
    "status": "draft",
    "experimental": false,
    "date": "2025-03-31T03:01:34+00:00",
    "publisher": "TBD",
    "description": "TBD",
    "purpose": "UNKNOWN",
    "usage": "TBD",
    "copyright": "TBD",
    "effectivePeriod": {
        "start": "2025-01-01",
        "end": "2025-12-31"
    },
    "library": [
        "http://ecqi.healthit.gov/ecqms/Library/mvp"
    ],
    "disclaimer": "TBD",
    "####################": "scoring 區塊,定義計分方式",
    "scoring": {
        "coding": [
            {
                "system": "http://terminology.hl7.org/CodeSystem/measure-scoring",
                "code": "proportion",
                "display": "Proportion"
            }
        ]
    },
    "clinicalRecommendationStatement": "TBD",
    "guidance": "TBD",
    "####################": "group 區塊,定義population及分子分母",
    "group": [
        {
            "population": [
                {
                    "id": "initial-population",
                    "code": {
                        "coding": [
                            {
                                "system": "http://terminology.hl7.org/CodeSystem/measure-population",
                                "code": "initial-population",
                                "display": "Initial Population"
                            }
                        ]
                    },
                    "criteria": {
                        "language": "text/cql-identifier",
                        "expression": "Initial Population"
                    }
                },
                {
                    "id": "Denominator",
                    "code": {
                        "coding": [
                            {
                                "system": "http://terminology.hl7.org/CodeSystem/measure-population",
                                "code": "denominator",
                                "display": "Denominator"
                            }
                        ]
                    },
                    "criteria": {
                        "language": "text/cql-identifier",
                        "expression": "Denominator"
                    }
                },
                {
                    "id": "Numerator",
                    "code": {
                        "coding": [
                            {
                                "system": "http://terminology.hl7.org/CodeSystem/measure-population",
                                "code": "numerator",
                                "display": "Numerator"
                            }
                        ]
                    },
                    "criteria": {
                        "language": "text/cql-identifier",
                        "expression": "Numerator"
                    }
                }
            ]
        }
    ]
}

5. 安裝套件

./_updatePublisher.sh
./_updateCQFTooling.sh

install package

6. 更新 IG: ./_refresh.sh

refresh ig

7. 查看產生的bundle

下載範例 json

bundle

8. 上傳bundle

curl --location 'https://cdsa.bdlai.net/fhir' --data '[Bundle JSON]'

9. 進行 Measure 評估

measure evaluate

撰寫簡易eCQM 個人

P11

撰寫簡易eCQM Summary(多人)

P12

參考資料
  • FHIR® - Fast Healthcare Interoperability Resources®
  • cqf-tooling - Doc
  • QI-Core

臨床決策支援規則

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

引用來源: Understanding Clinical Quality Language (CQL) | by Ryan Lindbeck | Medium

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 測試,則生成警報。

CQL_CDS_Service
(圖片來源:HL7.org,工研院整理製作)

Rule Library 課程

cover-規則圖書館:Rule Library
規則圖書館:Rule Library

衛生福利部資訊處 技監兼處長

李建璋

衛生服利部資訊處
  • 地址:115204 台北市南港區忠孝東路6段488號
  • 總機電話:(03) 591-9291
  • 聯絡信箱:medstandard@itri.org.tw