2014年12月21日 星期日

HL7 v2.6學習心得–第二章 Message Framework ─ 1

原文參考:2.5 MESSAGE FRAMEWORK
==============================
上次提到的驅動事件(Trigger Event)是動態模式。也就是說,到底發生了什麼事情下,我才要發動這個訊息交換的任務。緊接著就要回答說,好,那要傳遞什麼訊息內容出去呢?這時候就來到了靜態模式。 不同的Trigger Event下會定義出不同的訊息內容。但是,所有的訊息內容都必須遵守相同的框架。也就是,Message Framework。要開始了解得先把幾個名詞給搞懂。
Message
原文說明:A message is the atomic unit of data transferred between systems.
訊息(message)是資料交換的最基本單元。這個最基本單元卻是由許多有一定排列順序的區段(segment)所組成。 每一個訊息都會依據其使用目的定義一個訊息型態(message type)。例如說病患管理就會是ADT這個訊息型態。要詳細知道有哪些,可能就得努力翻閱後續章節的內容。 如果現有的訊息型態無法滿足需求時,可以自定訊息型態,把首字定為"Z"即可。
Segments與Segment groups
原文說明:A segment is a logical grouping of data fields.Two or more segments may be organized as a logical unit called a segment group.
區段(segment)是有一組具有邏輯意義的資料欄位所組合。兩個或兩個以上的區段可以結合成另一個邏輯意義的區段組(segment group)。每個不同定義的區段會有三個英文字母的命名,注意,三個字母皆為大寫。
如果現有的區段無法滿足時,可以自定區段,只要命名首自為"Z"即可。
每個區段可以被設定成[必要、可選]與[重複]的屬性。
在一個訊息中,有可能同一個區段會在不同的邏輯位置上出現。所謂的不同邏輯位置,有可能是這個區段在不同的區段組中出現,而這個訊息剛好用到這兩個區段組。不過,一般而言,因為是屬於不同的邏輯位置,所以在資料交換的時候並不會造成誤解。如會造成誤解,那這個訊息就是錯的。也就是說,如果你的程式寫出來的訊息有這種現象,那驗證是過不了的。
表達方式
有了以上的基礎後,我們來看看標準文件中是如何呈現。我們舉一個ADT^A01的例子。
ADT就是指訊息型態。A01是指驅動事件。標準文件的第三章 Patient Administration所討論的都是ADT這個訊息型態。而A01這個事件是發生住院或報到通知時,所需要傳遞的訊息結構。下圖是這個訊息下所定義的區段。(很抱歉,下圖只是部分資料,全文還是請參考原版標準文件。我很想完整呈現,但是,我實在擔心誰又那麼無聊發律師信給我了)

圖中有MSH、SFT等等,這就是segment的名稱。現在看不懂是作什麼用的,沒關係,後面會帶到。先搞懂這些就是區段就好。
再看有些有[]或{},也些卻沒有。[]表示可選;{}表示可重複。而什麼都沒有的,就是必要區段,且只能出現一次。[{ }]的意思是,這個區段為可選,若有出現的話可以重複。可惜上圖沒有區段組。
若有區段組時,他的結構是必須是嚴謹的巢狀結構。(這個考試會考,唉~何須在意考試呢,能做出一個符合規範的標準訊息勝過一切)。
底下舉例來說明,區段與區段組結構的合法性。
[SEG1]
{
 SEG2
 [SEG1]
}
這個是合法的。主要是看SEG1這個區段能不能辨識出他邏輯位置。第一個SEG1是可選,表示訊息中不一定會出現。現在假設他不會出現。
再看SEG2與另一個SEG1形成一個區段組。這整個區段組是可以重複的,但每一個重複的區段組***一定要有SEG2***這個區段。然後配上可以有可無的SEG1。
反過來說,當你看到一個SEG1單獨存在時,我知道那一定是第一個。若是第二個SEG1時,他的前面一定會有SEG2。
再看另一個範例。
[SEG1]
{
 [SEG2]
  SEG1
  SEG3
}
這個就是非法的。一樣來看SEG1會不會造成辨識錯誤。第一個SEG1不變,但是我們這時候要假設他出現了。
然後,後續的可重複的區段組中SEG2是可選的,那我們假設他沒有出現,接著又看到SEG1,哇!他是必要的。這下子慘了,因為訊息結構變成了
SEG1
SEG1
可是,這兩個SEG1在標準制定階段,是標記在不同邏輯位置上。可是實作時,卻無法辨識出來。那這個標準結構就是有問題了。
〈待續〉
==============================

接下來要討論的field很重要唷。

沒有留言:

張貼留言