本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
HealthLake 的 FHIR $questionnaire-package操作
$questionnaire-package 操作會擷取完整的套件,其中包含 FHIR 問卷及其轉譯和處理問卷所需的所有相依性。此操作會實作 Da Vinci 文件範本和規則 (DTR) 實作指南
運作方式
-
請求:您傳送識別所需問卷的參數 (以及涵蓋範圍和順序內容)
-
擷取:HealthLake 會收集問卷和所有相依性 (ValueSets、CQL 程式庫等)
-
套件:所有資源都以標準化格式綁定在一起
-
回應:您收到準備轉譯和資料收集的完整套件
使用案例
-
預先授權文件:收集預先授權請求所需的臨床資訊
-
涵蓋範圍需求:收集滿足付款人涵蓋範圍需求所需的文件
-
臨床資料交換:結構臨床資料以提交給付款人
-
動態表單:使用預先填入的患者資料和條件式邏輯轉譯問卷
API 端點
POST /datastore/{datastoreId}/r4/Questionnaire/$questionnaire-package Content-Type: application/fhir+json
請求參數
輸入參數
請求內文必須包含具有下列參數的 FHIR 參數資源:
| 參數 | Type | 基數 | Description |
|---|---|---|---|
coverage |
涵蓋範圍 | 1..* (必要) | 用於建立文件成員和涵蓋範圍的 (涵蓋範圍) 資源 |
questionnaire |
正式 | 0..* | 要傳回之特定問卷的正式 URL (s) (可能包含版本) |
order |
資源 | 0..* | 訂購資源 (DeviceRequest、ServiceRequest、MedicationRequest、Encounter、Appointment) 以建立內容 |
changedSince |
dateTime | 0..1 | 如果存在,則只會傳回在此時間戳記之後變更的資源 |
參數驗證規則
至少必須提供下列其中一項 (除了必要的 之外coverage):
-
一或多個
questionnaire正式 URLs -
一或多個
order資源
有效的請求組合:
-
coverage+questionnaire -
coverage+order -
coverage+questionnaire+order
範例請求
POST /datastore/example-datastore/r4/Questionnaire/$questionnaire-package Content-Type: application/fhir+json Authorization: Bearer <your-token> { "resourceType": "Parameters", "parameter": [ { "name": "coverage", "resource": { "resourceType": "Coverage", "id": "example-coverage", "status": "active", "beneficiary": { "reference": "Patient/example-patient" }, "payor": [{ "reference": "Organization/example-payer" }], "class": [{ "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/coverage-class", "code": "group" }] }, "value": "12345" }] } }, { "name": "questionnaire", "valueCanonical": "http://example.org/fhir/Questionnaire/home-oxygen-therapy|2.0" }, { "name": "order", "resource": { "resourceType": "ServiceRequest", "id": "example-service-request", "status": "active", "intent": "order", "code": { "coding": [{ "system": "http://www.ama-assn.org/go/cpt", "code": "94660", "display": "Continuous positive airway pressure ventilation (CPAP)" }] }, "subject": { "reference": "Patient/example-patient" } } }, { "name": "changedSince", "valueDateTime": "2024-01-01T00:00:00Z" } ] }
回應格式
成功回應 (200 OK)
操作會傳回包含一或多個套件套件的 FHIR 參數資源。每個套件套件都包含:
| 項目類型 | 基數 | Description |
|---|---|---|
| 問卷 | 1 | 要轉譯的問卷 |
| QuestionnaireResponse | 0..1 | 預先填入或部分完成的回應 (如適用) |
| Library (程式庫) | 0..* | 包含預先填入和條件式邏輯的 CQL 程式庫 |
| ValueSet | 0..* | 擴展的 ValueSets (適用於 <40 個擴展的答案選項) |
範例回應範例
{ "resourceType": "Parameters", "parameter": [ { "name": "PackageBundle", "resource": { "resourceType": "Bundle", "id": "questionnaire-package-example", "meta": { "profile": ["http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle"] }, "type": "collection", "timestamp": "2024-03-15T10:30:00Z", "entry": [ { "fullUrl": "http://example.org/fhir/Questionnaire/home-oxygen-therapy", "resource": { "resourceType": "Questionnaire", "id": "home-oxygen-therapy", "url": "http://example.org/fhir/Questionnaire/home-oxygen-therapy", "version": "2.0", "status": "active", "title": "Home Oxygen Therapy Documentation", "item": [ { "linkId": "1", "text": "Patient diagnosis", "type": "choice", "answerValueSet": "http://example.org/fhir/ValueSet/oxygen-diagnoses" } ] } }, { "fullUrl": "http://example.org/fhir/Library/oxygen-prepopulation", "resource": { "resourceType": "Library", "id": "oxygen-prepopulation", "url": "http://example.org/fhir/Library/oxygen-prepopulation", "version": "1.0", "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/library-type", "code": "logic-library" }] }, "content": [{ "contentType": "text/cql", "data": "bGlicmFyeSBPeHlnZW5QcmVwb3B1bGF0aW9u..." }] } }, { "fullUrl": "http://example.org/fhir/ValueSet/oxygen-diagnoses", "resource": { "resourceType": "ValueSet", "id": "oxygen-diagnoses", "url": "http://example.org/fhir/ValueSet/oxygen-diagnoses", "status": "active", "expansion": { "timestamp": "2024-03-15T10:30:00Z", "contains": [ { "system": "http://hl7.org/fhir/sid/icd-10", "code": "J44.0", "display": "COPD with acute lower respiratory infection" }, { "system": "http://hl7.org/fhir/sid/icd-10", "code": "J96.01", "display": "Acute respiratory failure with hypoxia" } ] } } }, { "fullUrl": "http://example.org/fhir/QuestionnaireResponse/example-prepopulated", "resource": { "resourceType": "QuestionnaireResponse", "id": "example-prepopulated", "questionnaire": "http://example.org/fhir/Questionnaire/home-oxygen-therapy|2.0", "status": "in-progress", "subject": { "reference": "Patient/example-patient" }, "basedOn": [{ "reference": "ServiceRequest/example-service-request" }], "item": [ { "linkId": "1", "text": "Patient diagnosis", "answer": [{ "valueCoding": { "system": "http://hl7.org/fhir/sid/icd-10", "code": "J44.0", "display": "COPD with acute lower respiratory infection" } }] } ] } } ] } }, { "name": "Outcome", "resource": { "resourceType": "OperationOutcome", "issue": [{ "severity": "information", "code": "informational", "details": { "text": "Successfully retrieved questionnaire package" } }] } } ] }
操作工作流程
HealthLake 如何處理您的請求
當您呼叫 時$questionnaire-package,HealthLake 會執行下列步驟:
-
識別患者和付款人:從您的
coverage參數擷取患者和保險組織。 -
尋找正確的問卷:
-
搭配
questionnaire參數:使用您提供的正式 URL -
使用
order參數:比對訂單代碼 (CPT/HCPCS/LOINC) 和付款人,以尋找適當的問卷
-
-
收集相依性:自動擷取轉譯問卷所需的一切:
-
CQL 程式庫 - 預先填入和條件式問題的邏輯
-
ValueSets - 答案選項 (如果 <40 個選項,則自動展開)
-
QuestionnaireResponse - 任何現有的進行中或已完成的回應
-
-
將所有內容一起封裝:
-
封裝所有資源 (每個資源僅包含一次)
-
如果提供,則依
changedSince時間戳記篩選 -
Outcome如果遺失任何資源,將警告新增至
-
結果:準備進行轉譯的完整、獨立套件。
錯誤回應
400 錯誤的請求
請求驗證失敗時傳回。
{ "resourceType": "OperationOutcome", "issue": [{ "severity": "error", "code": "required", "details": { "text": "At least one of 'questionnaire' or 'order' must be provided along with 'coverage'" } }] }
424 失敗相依性
當無法擷取相依資源時傳回。
{ "resourceType": "OperationOutcome", "issue": [{ "severity": "warning", "code": "not-found", "details": { "text": "Referenced Library 'http://example.org/fhir/Library/missing-library' could not be retrieved" } }] }
401 (未經授權)
當身分驗證憑證遺失或無效時傳回。
403 禁止
當已驗證的使用者缺少存取所請求資源的許可時傳回。
406 無法接受
當無法提供請求的內容類型時傳回。
409 衝突
發生版本或並行衝突時傳回。
410 Gone
當請求的資源永久刪除時傳回。
429 太多請求
超過速率限制時傳回。
500 內部伺服器錯誤
發生非預期的伺服器錯誤時傳回。
501 未實作
請求的操作尚未實作時傳回。
驗證規則
輸入驗證
-
coverage參數為必要 (1..* 基數) -
至少
order必須提供其中一個questionnaire或 -
所有涵蓋範圍資源都必須是有效的 FHIR 資源
-
所有訂單資源必須是有效的 FHIR 資源
-
正式 URLs 必須正確格式化
-
changedSince必須是有效的 ISO 8601 dateTime
QuestionnaireResponse驗證
-
status必須適當 (in-progress、completed、amended) -
結構必須符合參考的問卷
-
basedOn必須參考有效的訂單資源 -
subject必須參考有效的病患資源
資源重複資料刪除
-
每個資源只會在套件中出現一次
-
例外狀況:可能同時包含相同資源的不同版本
-
透過其正式 URL 和版本來識別資源
效能規格
| 指標 | 規格 |
|---|---|
| 資源計數限制 | 每個套件 500 個資源 |
| 套件大小限制 | 最多 5 MB |
所需的許可
若要使用 $questionnaire-package操作,請確定您的 IAM 角色具有:
-
healthlake:QuestionnairePackage- 呼叫 操作 -
healthlake:ReadResource- 擷取問卷和相依資源 -
healthlake:SearchWithPost- 搜尋 QuestionnaireResponse和相關資源
FHIR 範圍上的 SMART
所需範圍下限:
-
SMART v1:
user/Questionnaire.read user/Library.read user/ValueSet.read user/QuestionnaireResponse.read -
SMART v2:
user/Questionnaire.rs user/Library.rs user/ValueSet.rs user/QuestionnaireResponse.rs
重要實作備註
資源擷取策略
問卷識別優先順序:
-
正式 URL (如果提供
questionnaire參數) - 最高優先順序 -
訂單分析 (如果提供
order參數):-
比對訂單代碼 (CPT、HCPCS、LOINC) 與付款人醫療政策
-
使用涵蓋範圍付款人篩選付款人特定的問卷
-
考慮其他內容的原因代碼
-
相依性解析
CQL 程式庫:
-
透過問卷資源上的
cqf-library擴充功能擷取 -
透過
Library.relatedArtifact類型以遞迴方式擷取相依程式庫depends-on -
套件中包含所有程式庫相依性
ValueSets:
-
如果包含的概念少於 40 個,則自動擴展
-
包含較大的 ValueSets,無需擴展
-
包括問卷和程式庫資源中參考ValueSets
QuestionnaireResponse預先填入
下列情況下,操作可能會傳回具有預先填入資料的 QuestionnaireResponse:
-
找到現有的進行中或已完成的回應
-
關聯程式庫中的 CQL 邏輯可以從病患記錄擷取資料
-
回應會連結到相關順序和涵蓋範圍
QuestionnaireResponse的搜尋條件:
| 搜尋參數 | FHIR 路徑 | Description |
|---|---|---|
based-on |
QuestionnaireResponse.basedOn |
ServiceRequest 或 CarePlan 的連結 |
patient |
QuestionnaireResponse.subject |
做為主體的患者 |
questionnaire |
QuestionnaireResponse.questionnaire |
回答的問卷 |
變更資源篩選
提供 changedSince 參數時:
-
僅包含指定時間戳記後修改的資源
-
如果沒有變更任何資源,
200 OK會以空的套件傳回 -
適用於增量更新和快取策略
-
時間戳記比較使用資源
meta.lastUpdated欄位
多個套件套件
下列情況下,操作可能會傳回多個套件套件:
-
透過正式 URLs請求多個問卷
-
多個訂單需要不同的問卷
-
相同問卷的不同版本適用
每個套件套件都與所有必要的相依性獨立。
常用案例
使用案例 1:預先授權文件
案例:提供者需要收集家庭供氧治療預先授權的文件。
{ "resourceType": "Parameters", "parameter": [ { "name": "coverage", "resource": { /* Patient's insurance coverage */ } }, { "name": "order", "resource": { "resourceType": "ServiceRequest", "code": { "coding": [{ "system": "http://www.ama-assn.org/go/cpt", "code": "94660" }] } } } ] }
結果:傳回包含氧氣治療問卷的套件,預先填入來自 EHR 的患者生命值和診斷碼。
使用案例 2:擷取特定問卷版本
案例:供應商需要特定版本的問卷才能合規。
{ "resourceType": "Parameters", "parameter": [ { "name": "coverage", "resource": { /* Coverage resource */ } }, { "name": "questionnaire", "valueCanonical": "http://example.org/fhir/Questionnaire/dme-request|3.1.0" } ] }
結果:傳回含所有相依性的確切版本 3.1.0 的 DME 請求問卷。
使用案例 3:檢查更新
案例:供應商想要檢查自上次擷取以來是否有任何問卷資源已更新。
{ "resourceType": "Parameters", "parameter": [ { "name": "coverage", "resource": { /* Coverage resource */ } }, { "name": "questionnaire", "valueCanonical": "http://example.org/fhir/Questionnaire/medication-request" }, { "name": "changedSince", "valueDateTime": "2024-03-01T00:00:00Z" } ] }
結果:僅傳回在 2024 年 3 月 1 日之後修改的資源,如果沒有變更,則傳回空白套件。
使用案例 4:多個訂單
案例:供應商提交多個可能需要不同問卷的服務請求。
{ "resourceType": "Parameters", "parameter": [ { "name": "coverage", "resource": { /* Coverage resource */ } }, { "name": "order", "resource": { /* ServiceRequest for imaging */ } }, { "name": "order", "resource": { /* ServiceRequest for DME */ } } ] }
結果:傳回多個套件套件,每個適用的問卷各一個。
與其他 Da Vinci IGs整合
涵蓋範圍需求探索 (CRD)
工作流程整合:
-
供應商在其 EHR 中訂購服務
-
CRD 勾點觸發,檢查涵蓋範圍需求
-
付款人回應,指出需要文件
-
供應商呼叫
$questionnaire-package以擷取文件表單 -
供應商完成問卷
-
文件是透過 PAS 或 CDex 提交
預先授權支援 (PAS)
工作流程整合:
-
使用
$questionnaire-package擷取文件需求 -
使用所需的臨床資料完成 QuestionnaireResponse
-
使用
Claim/$submit搭配已完成的 QuestionnaireResponse提交預先授權 -
使用 檢查狀態
Claim/$inquire
臨床資料交換 (CDex)
工作流程整合:
-
付款人請求申請其他文件
-
提供者使用
$questionnaire-package擷取結構化資料收集表單 -
供應商完成 QuestionnaireResponse
-
文件會透過 CDex 連接工作流程提交給付款人
故障診斷指南
問題:未傳回問卷
可能的原因:
-
正式 URL 不符合資料存放區中的任何問卷
-
訂單代碼未對應至付款人醫療政策中的任何問卷
-
涵蓋範圍付款人沒有相關聯的問卷
解決方案:
-
確認正式 URL 正確且問卷存在
-
檢查訂單代碼 (CPT/HCPCS) 是否正確指定
-
確認付款人組織已設定問卷
問題:套件中缺少相依性
可能的原因:
-
參考的程式庫或 ValueSet 不存在於資料存放區中
-
程式庫參考已中斷或不正確
-
ValueSet 擴展失敗
解決方案:
-
檢查
Outcome參數是否有資源遺失的相關警告 -
驗證資料存放區中存在所有參考的資源
-
確保 ValueSet URLs正確且可解決
問題:含 changedSince 的空套件
可能的原因:
-
這是預期的行為 - 自指定的時間戳記以來未修改任何資源
解決方案:
-
使用套件的快取版本
-
移除
changedSince參數以擷取完整套件
問題:未預先填入 QuestionnaireResponse
可能的原因:
-
找不到現有的 QuestionnaireResponse
-
CQL Library 邏輯無法擷取所需的資料
-
病患資料遺失或不完整
解決方案:
-
這可能是預期的 - 並非所有問卷都有預先填入邏輯
-
檢查資料存放區中是否存在病患資料
-
檢閱 CQL Library 邏輯以了解資料擷取需求
最佳實務
1. 搭配版本使用正式 URLs
請求特定問卷時,請務必指定版本編號:
{ "name": "questionnaire", "valueCanonical": "http://example.org/fhir/Questionnaire/dme|2.1.0" }
原因:確保一致性,並防止更新問卷時的意外變更。
2. 利用 changedSince for Performance
對於經常存取的問卷,請使用 changedSince 將資料傳輸降至最低:
{ "name": "changedSince", "valueDateTime": "2024-03-10T15:30:00Z" }
原因:僅擷取更新的資源,以減少延遲和頻寬使用量。
3. 包含完整涵蓋範圍資訊
提供全面的涵蓋範圍詳細資訊,以確保正確的問卷選擇:
{ "name": "coverage", "resource": { "resourceType": "Coverage", "beneficiary": { "reference": "Patient/123" }, "payor": [{ "reference": "Organization/payer-abc" }], "class": [{ /* Group/plan information */ }] } }
原因:協助 HealthLake 識別付款人特定的問卷和要求。
相關的 操作
-
Claim/$submit- 提交包含已完成文件的預先授權請求 -
Claim/$inquire- 檢查提交的預先授權狀態 -
ValueSet/$expand- 展開用於答案選項的 ValueSets