2020年2月18日 星期二

HL7 FHIR 資源詳解篇 - Foundation - Basic

HL7 FHIR 4.01所定義的資源已經來到145個了。很多人說,FHIR很簡單,而我卻認為醫療資訊情境中,怎麼會有簡單這玩意兒。以目前發展來看,想要持續維繫「簡單」著實有困難。不過,透過結構去學習,去理解,抓到設計概念,理解「為什麼」要這麼定義,那就會變成「只是煩,而不是難」。
FHIR Resource分類為五大項,分別是(1) Foundation (2) Base (3) Clinical (4) Financial (5) Specialized。各大項又有自己的小分項。
茫茫Resource海,應該要從那邊下手呢?這就是要問問自己要扮演什麼角色,若您是系統實作者,其實你就不要管這麼多了,他們就是JSON不就是XML。唯一需要看懂的是Profile。當然這個大前提時,有人寫好Profile給你參考。否則,您還是要根據你的「問題領域」去學習香對應的Resource。若你是標準制定者,說實在你也不可能/不需要把所有的Resource的詳細的研究過一遍,除非您跟我一樣有點變態。只要搞懂結構,再依據「問題領域」找出適合的Resource來套用。怎麼套才是正確的,哈~就國內而言,好像也不是那麼重要。似乎就是想盡辦法找到一個地方來放值就好。
講這麼多,就是要來告訴你,拿哪一個Resource來學習結構呢?是的,如標題所指,Basic。而學習這個Resouce所需要的背景知識,可參考HL7 FHIR 核心觀念 - 根元素
至於其他的資源,則只討論應用情境、元素結構還有Profile & Extensions。

文件結構

所有Resource文件,都會有下列個章節。


  1. Content:是主要內容,會詳細描述這部份。尤其是Scope and Usage這節,對標準制定者來說,必須要給清楚這個Resource的適用情境。否則說實在的,任何需求都可以用任何Resource來完成,因為就是硬找欄位來放就好。當然,正常的標準制定不能這樣子作,人家定義這個Resource一定有他的目的與意義。
  2. Examples:提供這個Resource的範例內容。有分為JSON與XML格式。
  3. Detailed Descriptions:當我們「問題領域」覺得適合用這個Resource來制定時,身為標準制定者,就得好好把每一個欄位弄清楚他的定義,避免造成後續交換的問題。
  4. Mappings:針對某幾個重要欄位,與其他標準間的關係。目前主要是對應到RIM的部分,已經FHIR本身制定的FiveWs的模型中。
  5. Profiles & Extension:列出由此Resource所產生的Profile與衍生的Extension。背景知識可參考連結。
  6. R3 Conversions:描述R4與R3之間轉換關係與方法。
以下是Basic詳細說明。其他的Resource應該不會如此詳盡。注意,此章節編號是採R4的版本,R5就會不一樣了。

2.34 Resource Basic - Content 

首先映入眼簾的是這個Resource的制定狀態。
  1. 這個Resource是由哪個Work Group提出與維護的。此Basic是由FHIR Infrastructure負責。HL7還有很多Work Group
  2. 此Resource成熟度。總共分成5階段,再加上正式成為規範階段(Normative)。原則上,採用Resource是要到規範階段(會標註N),現在也沒什麼人在意吧。
  3. 標準發展到什麼程度。這個與前者的思維角度不同,我們比較在意的是這個。他分成Draft(草稿不對外), Trial Use(交付外部測試使用), Normative(受保護正式規範文件), Informative(受保護支援性文件), Deprecated(已廢棄不用)。
  4. 這個是定義此Resource所攜帶的資料其隱私層級。Basic當然無所謂。若是Patient就會被定義屬Patient的隱私層級。國內當然有意識到這塊,但我覺得還沒有具體作法。
  5. Compartments是定義Resource的打包組合。這個概念跟使用Bundle是不一樣的。Compartments是伺服器端資源如何建構存取打包。這塊會影響伺服器的效能,所以並不開放制定。國內也沒有討論伺服器之建制,這塊也就不受關心。目前定義的有PatientEncounterRelatedPersonPractitionerDevice
  6. Foundation Module
接著就是這個Resource Basic的簡單描述。身為標準制定者,這段文字一定要看。尤其是理解「問題領域」的需求後,要找對Resource來支援。
Basic is used for handling concepts not yet defined in FHIR, narrative-only resources that don't map to an existing resource, and custom resources not appropriate for inclusion in the FHIR specification.
Basic當你找不到適合的Resource時,也許可以考慮用Basic先頂著。正常應用環境應該不會使用,不過,拿來教學練習倒是很合適。


這節內容對標準制定者是非常重要的。總之,參考這些重要資訊可協助選擇正確適用的Resource。
從這節文字可知Basic跟其他的Resource不一樣,他沒有綁定預先定義好特定的HL7 Concept。那他的存在是用在三種特定狀況。

  1. 所要應用的情境在未來HL7會的確會納入規範,可惜目前還沒有。
  2. 要傳遞以敘述內容為主的資源,而且還要結合數個Resource,或者要置入的敘述性內容很彈性,難以掌控。
  3. 或者其他以上情況,Basic可以提供作簡易的支援。尤其是某些特定情境,為了保持規範的可管理性,不能夠自己亂掰Resource。
簡單地說,當你的「問題領域」實在無法找到適合的Resource時,那就用Basic吧。


這邊描述此Resource的背景資訊與結構問題。
Basic只定義了一些簡單的元素,足以支持Compartment的應用(不過,Encounter與Device沒有包含Basic)。
若有不足之處,就透過Extension機制來擴充。
也就是說,應用情境就僅需要narrative, subject與code,那就用Basic,畢竟所有系統都可接受Basic。

這區塊就是元素結構圖與各種格式之描述。若不熟悉這個,請參考HL7 FHIR 資源格式篇 - 說明與結構

定義相關編碼綁定的資訊。還有,Basic只有一個元素需綁定。
PathDefinitionTypeReference
Basic.codeCodes for identifying types of resources not yet defined by FHIR.ExampleBasicResourceTypes
這些節是Basic特有的。當然,不同的Resource都有可能會有自己特定的說明章節。

這節內容對實作者而言非常重要,此Resource能夠支援的搜尋參數。當然common parameters 沒有列在這邊。對查詢有興趣可參考HL7 FHIR Server初體驗的內容。
NameTypeDescriptionExpressionIn Common
authorreferenceWho createdBasic.author
(PractitionerOrganizationPatientPractitionerRoleRelatedPerson)
codetokenKind of ResourceBasic.code
createddateWhen createdBasic.created
identifiertokenBusiness identifierBasic.identifier
patientreferenceIdentifies the focus of this resourceBasic.subject.where(resolve() is Patient)
(Patient)
subjectreferenceIdentifies the focus of this resourceBasic.subject
(Any)
另外,有一個重要章節而Basic沒有的是Constraints。

透過範例可以給我們一些應用發想。
這節是把所有元素都詳細介紹一遍。說實在的,除了遇到問題,或有疑惑時才會來這邊查看。

此Resource對應到其他標準的參考。目前描述內容分別針對
FiveWs Pattern Mapping (http://hl7.org/fhir/fivews)與RIM Mapping (http://hl7.org/v3)

列出目前已註冊與此Resource有關之Profiles與Extensions。

說明此Resource在R3與R4之間的對應關係。

沒有留言:

張貼留言