今天討論「CDS Response」
CDS Response
Response的前置作業
- 檢核Post 資料正確性。也就是說,傳回來的Hook跟當初規定的是否一樣。
- 要解析fhirAuthorization。你要設計好流程,到底還要再跟FHIR Server要什麼東西。因為Access Token一般都是有時間限制(當然,還會有個Refresh Token的機制)。另外一點就是,他會有Scope的問題,就是Resource.Interactions。
- 要解析prefetch的內容。這塊要小心。一般而言,若Read,原則上你要什麼Resource就會回給你什麼Resource。若你是用Search,那就會是Bundle,要再進一步解析entry才是你想要的Resource。
- 取你CDS真正要的資料進行運算處理,然後得到結果。這個結果才是用來組出Response Object的資料。
Response Object
Card Object
uuid
這個是可選欄位。若你有處理到feedback階段的話,那這個就很重要。在C#有個GUID物件,很簡單處理。
summary
這個是必要欄位。將你的結果簡單描述。字串長度要小於140個字元(我實作時有踢到這個鐵板) 。
detail
結果的詳細說明。若是Debug階段,一些訊息就放在這(別像我,以為summary是必要就放在那兒,結果是Bug的Bug)。
indicator
說明這個結果的重要程度。目前支援有info、warning與critical。理想上,應該是不同程度畫面要有所區別,但是要看CDS Client要不要實作。
source
這是用來宣告版權的,為必要欄位。其結構為:(不多加解釋,coding結構就是FHIR的資料型態)
suggestions
這個整個card的核心,卻是Optional。他的內容是suggestion物件陣列。用來描述,CDS所提供的可採取行動之建議。其結構為:
其中action欄位是實際描述「當CDS Client接受這個Suggestion時要如何處理」。其結構為:
處理的方式不外乎create、update與delete(怎麼沒有retrive?啊你前面在幹嘛?)。resource就是處理的對象。就是Resource啦。這裡要注意你要處理的Resource,當初的Scope都要宣告到。不過,還是得看CDS Client有沒有支援啦(坦白說,FHIR的真還在發展中,就是因為發展中,那還不趕快跟上)。貼個EPIC支援的給各位參考。(剪圖關係未能全部)
selectionBehavior
如果你有suggestion欄位,那這個欄位就是必要。他只有兩種選項at-most-one,單選。與any,多選。哈~還是要看CDS Client有沒有支援啦。
overrideReasons
當CDS Client不接受你任何suggestion時,你可以用這個欄位讓他選擇不接受的理由。他是coding的陣列。還是一樣,要看CDS Client要不要支援。
links
這是提供給CDS Client一些建議網站或者APP實用的。他是Link物件陣列。其結構為:
範例
官方範例提供參考
{ "cards": [ { "summary": "Example Card", "indicator": "info", "detail": "This is an example card.", "source": { "label": "Static CDS Service Example", "url": "https://example.com", "icon": "https://example.com/img/icon-100px.png" }, "links": [ { "label": "Google", "url": "https://google.com", "type": "absolute" }, { "label": "Github", "url": "https://github.com", "type": "absolute" }, { "label": "SMART Example App", "url": "https://smart.example.com/launch", "type": "smart", "appContext": "{\"session\":3456356,\"settings\":{\"module\":4235}}" } ] }, { "summary": "Another card", "indicator": "warning", "source": { "label": "Static CDS Service Example" } } ] }
在實作的過程這個階段很痛苦。因為每一個CDS Client的支援程度與方式不盡相同,甚至容錯能力也不同。