2021年2月8日 星期一

CDS Hooks 實作驗證

實作這塊,有點不好意思,程式碼還是不方便公布。簽了保密,還是保守點。除非老闆說可以。所以,這邊只好用別人的東西來展示。

CDS Services

CDS Hooks在Github上的資料也不少,網址:CDS Hooks (github.com)
進到docs裡的wiki頁面,可以找到一些對外公開的CDS Services。注意是在Example CDS Services。CDS Services for testing的東西都不能用。
裡面有很多不同Cards的實作。

CDS Hooks Sandbox

這就是所謂的CDS Client,可以是EMR。反正就是會讓使用者去叫用CDS Services介面的東西。

FHIR Server

原則上EMR應該會配有FHIR Server。但我們測試是用Sandbox,不會有FHIR Server,我們得找一個。
我是用Sandbox建議的FHIR Server:https://launch.smarthealthit.org/v/r4/fhir 。選哪個都無所謂,但建議還是以R4為準。
首先你要確認你所選擇的FHIR Server有支援,你在Prefetch Template所叫用的FHIR Resource。否則,你怎麼死的都不知道。
用Postman當然是最好的工具,問題是要打什麼指令呢?
  1. Get {based url}/{Resource} : 看看回來什麼東西。注意如果有Bundle回來,但筆數為0,表示這台Server有支援此Resource,只是現在沒有資料。
  2. Get {based url}/metadata:這個會回傳CapabilityStatement。在rest/resource,就會列出所有支援的Resource。其實,這個CapabilityStatement還有其他非常重要的資訊。就舉個最重要的吧。他們會把OAuth資訊放在這。這超出本系列的範圍了,但這真的很重要。

Patient ID

如果,有仔細閱讀此系列文章的話,應該知道Hooks的意義,以及Patient ID的重要性。你得要先確保,你的Prefetch Template所叫用的FHIR Resource,真的有這個Patient。否則你可能會不知道錯在哪兒。還有一個大前提,你要引用的Resrource得要與Patient(Subject)有關才可以用。
怎麼確認?還是用Postman。假設我要引用MedicationRequest。我們就用這個ID吧:2744ab6f-91dd-4e4f-8208-fe52ee2c27d1


那要怎麼知道,這個Patient有多少份MedicationRequest呢?MedicationRequest不是對應於處方箋唷,他只對應於一項藥品。所以,encounter就很重要,抱歉R4才支援。就當是作業吧。

進行驗證程序

假設您已經開啟CDS Hook Sandbox。畫面可能已經會有東西了,我們先把他清除掉。
開啟視窗後,把每一項都刪除吧。
沒有服務了,但左邊還有之前的病患資料。

設定FHIR Server

將系統建議的FHIR Server版次改為R4即可。記得要按Next。

設定Patient

上一步驟按Next就會開啟Change Patient的畫面。當然,也可從右上的選單中選擇。將我們找好的Patient ID貼上去。記得按Save。
到這邊總算完成了基礎設定的工作。原則上,變動機率不大啦。除非你想換另一台FHIR Server。一換FHIR Server,那Patient當然也要換。

加入CDS Services

這邊要注意一下,依據CDS Hooks規範,第一階段是Discovery,但並非所有的系統環境有支援。像EPIC就沒有,作法就會有不同。
CDS Hooks Sandbox有支援,所以你的CDS Server有幾隻CDS Services他都會全部抓回來。EPIC則是需要自己輸入CDS Services。
輸入CDS Service的Endpoint。還記得前面所建議的CDS Server嗎?
當你按下Save按鈕時,就是驗證奇蹟的時候。

結果

所有細節就不多說了。等待有緣人吧。

2021年2月1日 星期一

CDS Hooks - 規範 - 5

 終於來到最無聊的最後階段「Feedback」。

前言

在CDS Response Object中,有提到Suggestion,其實他應是由CDS Client端產生一個按鈕,並以POST方式帶Feedback物件回給CDS Server。這邊就得要注意,CDS Client的使用者,到底是按哪一個suggestion按鈕。還要注意,CDS Services有很多個,根據規範書的內容每一個CDS Service都要有自己的Feedback。

POST {baseUrl}/cds-services/{serviceId}/feedback

Feedback Object


card

當初CDS Response物件中Card.uuid的內容值。

outcome

CDS Client對此card的態度。兩個選項accepted或者overridden。

acceptedSuggestions

如果outcome是選擇accepted,那就得回傳到底是接收哪個(些)suggestion(無論是單選還是多選)。其結構很簡單,就是當初suggesion的uuid。


overrideReason

如果outcom是選擇overridden的話,可以提供理由。其結構為OverrideResaon物件:

 

 outcomTimestamp

最後給這個回應押一個時間戳記。這是必要欄位。


這邊高度依賴CDS Client的支援程度而定。不過,身為CDS Service必須位自己提供的建議作後續支援服務的機制。因為這個過程可能不是只有一個來回,有可能是數個CDS Service的組合方能完成一個臨床實務上的決策循環。