2019年8月9日 星期五

HL7 FHIR 核心觀念 - Profile

講完Extension不提Profiles也是很奇怪。因為兩者都是透過StructureDefinition這個Resource來定義的。這個結構有點複雜,而且有很多constrains要注意,實在不適合放在入門階段來說明。所以,還是把這個放下,先從理解Profiles開始。
Profiles說穿了就是因應特定情境下,把Resource的用法(就是Constrain)加以明確規範之。原文是:adapted to particular use cases。
討論這個,又引發另外一個核心觀念就是Conformance(一致性),他已經複雜到可形成一個位於Level 2的Module。FHIR實踐一致性的方法有:
Implementation Guide (IG) A coherent and bounded set of adaptations that are published as a single unit. Validation occurs within the context of the Implementation Guide
Package A group of related adaptations that are published as a group within an Implementation Guide
Conformance ResourceA single resource in a package that makes rules about how an implementation works. These are described below
ProfileA set of constraints on a resource represented as a structure definition with kind = constraint
所以,Profile只是其中一個手段,而這個手段就是基於Resource建立constraint。在Resource的頁面中,會有一個Profiles & Extensions的頁籤。並不是所有的Resource會有Profile,也不表示未來不會有。像Observation這種比較抽象的Resource,就會有很多Profile來對特殊情境加上Constrains。

接著我們就用BMI這個描述檔(路徑http://hl7.org/fhir/StructureDefinition/bmi,雖然這是HTML檔案,其實是StructureDefinition,有工具可以轉換。哈~又挖一個坑)來說明吧。

要用Observation 來表達BMI時,需遵照這個Profile定義。
  1. code這個元素,需填入這些值。
  2. value[x]必須是Quantity資料型態,且需填入這些值。Quantity.value就是BMI的內容值。
  3. 與原始Observation比較,會有8個必填元素、4個必須支持的元素、有4個元素是固定值。可透過Differential Tables知道內容。
NameFlagsCard.TypeDescription & Constraints
.. Observation0..*FHIR Body Mass Index (BMI) Profile
... code1..1CodeableConceptBody Mass Index (BMI)
.... codingCodingSlice: Unordered, Open by value:code, value:system
.... coding1..1Coding
..... system1..1uriFixed Value: http://loinc.org
..... code1..1codeFixed Value: 39156-5
... valueQuantity1..1Quantity
.... valueS1..1decimal
.... unitS1..1string
.... systemS1..1uriFixed Value: http://unitsofmeasure.org
.... codeS1..1codeCoded responses from the common UCUM units for vital signs value set.
Fixed Value: kg/m2
來看看實際範例(XML內容)。標注綠底的部分,就是實際應用的內容。
<?xml version="1.0" encoding="UTF-8"?>

<Observation xmlns="http://hl7.org/fhir">
  <id value="bmi"/> 
  <meta> 
    <profile value="http://hl7.org/fhir/StructureDefinition/vitalsigns"/> 
  </meta> 
  <text> <status value="generated"/> <div xmlns="http://www.w3.org/1999/xhtml"><p> <b> Generated Narrative with Details</b> </p> <p> <b> id</b> : bmi</p> <p> <b> meta</b> : </p> <p> <b> status</b> : final</p> <p> <b> category</b> : Vital Signs <span> (Details : {http://terminology.hl7.org/CodeSystem/observation-category code 'vital-signs'
           = 'Vital Signs', given as 'Vital Signs'})</span> </p> <p> <b> code</b> : BMI <span> (Details : {LOINC code '39156-5' = 'Body mass index (BMI) [Ratio]', given as 'Body mass
           index (BMI) [Ratio]'})</span> </p> <p> <b> subject</b> : <a> Patient/example</a> </p> <p> <b> effective</b> : 02/07/1999</p> <p> <b> value</b> : 16.2 kg/m2<span>  (Details: UCUM code kg/m2 = 'kg/m2')</span> </p> </div> </text> <status value="final"/> 
  <category> 
    <coding> 
      <system value="http://terminology.hl7.org/CodeSystem/observation-category"/> 
      <code value="vital-signs"/> 
      <display value="Vital Signs"/> 
    </coding> 
    <text value="Vital Signs"/> 
  </category> 
  <code> 
    <coding> 
      <system value="http://loinc.org"/> 
      <code value="39156-5"/> 
      <display value="Body mass index (BMI) [Ratio]"/> 
    </coding> 
    <text value="BMI"/> 
  </code> 
  <subject> 
    <reference value="Patient/example"/> 
  </subject> 
  <effectiveDateTime value="1999-07-02"/> 
  <valueQuantity> 
    <value value="16.2"/> 
    <unit value="kg/m2"/> 
    <system value="http://unitsofmeasure.org"/> 
    <code value="kg/m2"/> 
  </valueQuantity> 
</Observation> 

在描述檔圖片最後部分有看到一個Slices吧,這又是另一個核心觀念(另一個坑),很簡單但不好說明。

沒有留言:

張貼留言