2019年8月9日 星期五

HL7 FHIR 核心觀念 - Extension

既然談到FHIR與CDA R2的差異點,那就不得不趕緊討論Extensibility。
FHIR有一個觀念稱之為80-20。也就是FHIR已經完成80%的定義,剩下20%給標準制定者彈性空間。CDA R2就沒有這麼好命,標準制定者常常得把實務情境的需求,硬在既有規範中找到適合的地方來呈現。若對CDA R2的整體規範不熟悉時,就會造成一份不倫不類的實作指引書。雖然只是20%自訂,但面對一個複雜的醫療資訊情境,這塊的發展已經有點爆炸了。
先題一下,相對於FHIR的擴充性,還有一個觀念是Profile。他不是擴充,他是利用既有之Resource作更明確的定義。使用Extesnion僅止於欄位層級之擴充,使用自己熟悉的名稱,來定義Extesion結構。這塊只能建議說台灣要儘速建立管理機制,否則容易變成一發不可收拾。
先來看看Extesion的結構。
Structure
NameFlagsCard.TypeDescription & Constraints
.. ExtensionINElementOptional Extensions Element
+ Rule: Must have either extensions or value[x], not both
Elements defined in Ancestors: idextension
... url1..1uriidentifies the meaning of the extension
... value[x]0..1*Value of extension
  1. Extension繼承自Element,所以他是資料型態。嚴格歸類的話他是Special Purpose Data types的一員。還記得Element的結構嗎?是的,他也有Extension欄位,所以...。
  2. url是指向定義這個Extension的詳細規範,這個是必要欄位。前面的圖形符號表示是個primative type。
  3. value[x],這個Extension用在Resource案例時,所攜帶的內容值。若沒有內容值,那表示需要有sub-extensions(來自Element)。前面的圖形符號代表他是一個element。
  4. 這個內容值的資料型態可以包含下列其中一種(應該說現有資料型態都可以):
    1. valueBase64Binary: base64Binary
    2. valueBoolean: boolean
    3. valueCanonical: canonical
    4. valueCode: code (only if the extension definition provides a fixed binding to a suitable set of codes)
    5. valueDate: date
    6. valueDateTime: dateTime
    7. valueDecimal: decimal
    8. valueId: id
    9. valueInstant: instant
    10. valueInteger: integer
    11. valueMarkdown: markdown
    12. valueOid: oid
    13. valuePositiveInt: positiveInt
    14. valueString: string
    15. valueTime: time
    16. valueUnsignedInt: unsignedInt
    17. valueUri: uri
    18. valueUrl: url
    19. valueUuid: uuid
    20. valueAddress: Address
    21. valueAge: Age
    22. valueAnnotation: Annotation
    23. valueAttachment: Attachment
    24. valueCodeableConcept: CodeableConcept
    25. valueCoding: Coding
    26. valueContactPoint: ContactPoint
    27. valueCount: Count
    28. valueDistance: Distance
    29. valueDuration: Duration
    30. valueHumanName: HumanName
    31. valueIdentifier: Identifier
    32. valueMoney: Money
    33. valuePeriod: Period
    34. valueQuantity: Quantity
    35. valueRange: Range
    36. valueRatio: Ratio
    37. valueReference: Reference - a reference to another resource
    38. valueSampledData: SampledData
    39. valueSignature: Signature
    40. valueTiming: Timing
    41. valueContactDetail: ContactDetail
    42. valueContributor: Contributor
    43. valueDataRequirement: DataRequirement
    44. valueExpression: Expression
    45. valueParameterDefinition: ParameterDefinition
    46. valueRelatedArtifact: RelatedArtifact
    47. valueTriggerDefinition: TriggerDefinition
    48. valueUsageContext: UsageContext
    49. valueDosage: Dosage

來看看範例1
<name>
  <extension url="http://hl7.org/fhir/StructureDefinition/iso21090-EN-use" >
    <valueCode value="I" />
  </extension>
  <text value="Chief Red Cloud"/>
</name>
  1. 此extension的定義是在(url)http://hl7.org/fhir/StructureDefinition/iso21090-EN-use(備註:原本的範例內容的url是錯誤的)。其結構如下:
  2. Summary
    NameFlagsCard.TypeDescription & Constraints
    .. EN-use0..1codeURL = http://hl7.org/fhir/StructureDefinition/iso21090-EN-use
    EN-use: A set of codes advising a system or user which name in a set of names to select for a given purpose.


    Binding: EntityNameUseR2 (required)
    Use on Element ID HumanName
  3. 根據上述Url找到了定義。其資料型態是code。也就是說,他的element的名稱是valueCode。
  4. 是element就會有value。再根據定義,這個編碼必須遵循 EntityNameUseR2 這個value set。
  5. 經查目前value的I,其顯示名稱Indigenous/Tribal,定義內容為:Description:e.g . Chief Red Cloud(抱歉,我也不知何意)
範例2
<Patient>
  <extension url="http://hl7.org/fhir/StructureDefinition/patient-citizenship" >
    <extension url="code" >
      <valueCodeableConcept>
        <coding>
          <system value="urn:iso:std:iso:3166" />
          <code value="DE" />
        </coding>
      </valueCodeableConcept>
    </extension>
    <extension url="period" >
      <valuePeriod>
        <start value="2009-03-14" />
      </valuePeriod>
    </extension>
  </extension>
  <!-- other data for patient -->
</Patient>
  1. 根據rul我們找到了定義。其結構如下:
  2. Summary
    NameFlagsCard.TypeDescription & Constraintsdoco
    .. citizenship0..*ExtensionURL = http://hl7.org/fhir/StructureDefinition/patient-citizenship
    citizenship: The patient's legal status as citizen of a country.


    Use on Element ID Patient
    ... code0..1CodeableConceptNation code representing the citizenship of patient.
    ... period0..1PeriodPeriod when citizenship was effective.
  3. 原來他使用了element的extension(我怎麼知道,看前方圖形符號)。
  4. 因為code與period都是extension所以,都要遵守extension的規範。但這兩個是依附在citizenship,沒有自己的定義url。所以,採用的是名稱。
還有一種extension稱之為Modifier Extensions,因為還不懂,也沒遇到。也就不多說了。

沒有留言:

張貼留言