2018年12月25日 星期二

HL7 FHIR 資料型態篇 - Complex Types - 編碼類

不是說R4已經把Complex Types又做了分類,可是文件還是用Complex當作章節名稱。雖說沒改,可是內容還是有大幅變動。我不會照著英文字母講,那不就跟翻譯沒兩樣了。
==========
本文就專門來討論編碼類的Type。這類型Type專門用在辨識、編碼(辨識與編碼是兩個不同概念)。

Coding

這是編碼類最核心的Type。(希望現在看到這個表,應該會很舒服)
NameFlagsCard.TypeDescription & Constraints
.. CodingΣNElementA reference to a code defined by a terminology system
Elements defined in Ancestors: idextension
... systemΣ0..1uriIdentity of the terminology system
... versionΣ0..1stringVersion of the system - if relevant
... codeΣ0..1codeSymbol in syntax defined by the system
... displayΣ0..1stringRepresentation defined by the system
... userSelectedΣ0..1booleanIf this coding was chosen directly by the user
Coding的Type是Element,這個在HL7 FHIR 資料型態篇 - 概念已經說明了。看看這5個sub-element的Type,還有,都是Primitive Types。Element Tree到此結束。有出現的Element都需要有value這個屬性。

  • Coding.system:uri [0..1]

Type是uri(別忘了uri與url的不同)。用來指定目前這個編碼歸屬於哪一個Coding System。每一個編碼系統,一定會有自己的uri(若你是程式員,就把他想像成命名空間比較快),就是放這了。
一般這邊會有兩種編碼OID(urn:oid:...)與UUID(urn:uuid:...),而且必須(SHALL)要註冊到HL7 總會的OID註冊系統中(網址:http://www.hl7.org/OID/)。
但是...,我國在推動標準的過程中,完全不重視編碼,所以...這個SHALL,根本叫放.....棄。哈!要忍住。但實在忍不住。當年2008年,我們努力爭取去註冊了。2008年耶,十年過去了,資料都沒有變。(哀~我也消失....)

  • Coding.version:string [0..1]

一個正常的編碼系統,應該時常更新維護,就會有版本的問題。這兒,就是提供註記,這個編碼是採用這個編碼系統的哪個版本。

  • Coding.code:code [0..1]

真正的編碼值是放在這裡。喔~他的Type是code。還好,他沒有很強的限制條件,幾乎可以隨便放。頭尾不要有空白就好。

  • Coding.display:string [0..1]

code是給電腦看的。人怎麼可以光看code就知道其意,要補上display。

  • Coding.userSelected:boolean [0..1]

這個有趣。是只目前這個編碼是由「人」選擇的。(是有點避責的感覺)

CodeableConcept

看到他的結構,應該沒有任何壓力吧。
NameFlagsCard.TypeDescription & Constraints
.. CodeableConceptΣNElementConcept - reference to a terminology or just text
Elements defined in Ancestors: idextension
... codingΣ0..*CodingCode defined by a terminology system
... textΣ0..1stringPlain text representation of the concept

  • CodeableConcept.coding:Coding [0..*]

第一個sub-element的Type是Coding,多了一層才終止。可是...他的Card.是[0..*]。喔~表示可以有很多個編碼,都是為了表達去解釋一個概念,那個概念放在text。
這個在國內,又要冷笑兩聲。連碼都不管了,還管Concept。

  • CodeableConcept.text:string [0..1]

需要被進一個定義的概念描述放在這裡。這裡絕對是給Human看的。

Identifier

這個有點麻煩。辨識碼為何不是編碼。注意Identifier.type.coding.system(我用Path)跟Identifier.system,不都是編碼(?)系統。若是,那奇怪了,Identifier.type.coding.code的Type是code,那這邊的Identifier.value卻是string。
編碼只是一種情境定義,大家都可以用,同一個碼可以重複出現在很多地方。辨識碼是專指特定那一個,這個碼被用了,別人就不可以用(在同一個system之下)。除非,我們設定了period,規定使用這個辨識碼的期間,只有在這個期間內別人不可以用。
這樣子,能夠理解嗎?
這個辨識碼可能是使用者端自行編的碼,所以,得開放成string比較保險。
NameFlagsCard.TypeDescription & Constraints
.. IdentifierΣNElementAn identifier intended for computation
Elements defined in Ancestors: idextension
... use?!Σ0..1codeusual | official | temp | secondary | old (If known) IdentifierUse (Required)
... typeΣ0..1CodeableConceptDescription of identifier
IdentifierType (Extensible)
... systemΣ0..1uriThe namespace for the identifier value
... valueΣ0..1stringThe value that is unique
... periodΣ0..1PeriodTime period when id is/was valid for use
... assignerΣ0..1Reference(Organization)Organization that issued id (may be just text)

  • Identifier.user:code [0..1]

辨識碼具有高度唯一性,得要嚴格限定。所以,參照了IdentifierUse這個值集合(Value-Set)。
這個是值集合的定義資訊。可是,這邊的Type是code,還好,不需要攜帶這些資訊。(因為規範很明確,這個Element就是要用這個,不加Codeing Sytem的OID也不會混淆)。
實際能使用哪些值呢?這要去看Expension。
原來,這個code的@value可以放,usual, official, temp, secondary與old。
另外,很幸運,目前這個值集合的內容值,都是來自同一個Coding System(http://hl7.org/fhir/identifier-use)。
一頭霧水了嗎?應該還好吧。不過,想要知道詳細的內容,得要等到專講Terminology時。

  • Identifier.type:CodeableConcept [0..1]

這個辨識碼可能是自己定義的呀,為了讓別人能夠充分理解你所說的,那就用這個Element去解釋吧。

  • Identifier.system:uri [0..1]

為你的value提供一個命名空間吧。除了可避免與其他編碼系統衝突外,甚至可以提供一個服務,來驗證目前的value是否合法。

  • Identifier.value:string [0..1]

就是你的辨識碼的內容值。Type是string,只要字串不要太長就好。

  • Identifier.period:Period [0..1]

設定這個辨識碼的使用期限。Period還沒講。

  • Identifier.assigner:Reference(Organization) [0..1]

透過Reference的方式讀取Organization,來設定這個辨識碼是哪個單位組織提供的。

沒有留言:

張貼留言