Без понимания структуры левой стороны, которой вы пытаетесь назначить элементы, невозможно сказать вам, правильно ли вы это делаете.
Однако есть один правильный способ проанализировать рассматриваемый сегмент/поле.
Вот ссылка на спецификации, на которые я ссылаюсь здесь
Из раздела 2.5.3 стандарта HL7v2.7:
Каждому полю назначается тип данных, определяющий область значений поля — возможные значения, которые оно может принимать.
Если вы откроете раздел 3.4.2.13 (PID-13), вы увидите разбивку каждого компонента и подкомпонента. Технически значение подкомпонентов и компонентов может различаться в зависимости от поля, но в основном они различаются только типом данных.
В вашем примере вы не рассматриваете повторения как отдельные экземпляры типов данных XTN. Я бы переписал синтаксис массива так:
Field repetition (~):
PID13[0] = 1234567890^somedata&moredata^[email protected]
PID13[1] = 0987654321
Component (^):
PID13[0].1 = 1234567890
PID13[0].2 = somedata&moredata
PID13[0].3 = [email protected]
Sub-component (&):
PID13[0].2.1 = somedata
PID13[0].2.2 = moredata
Также может быть полезен псевдокод в том же разделе спецификации 2.6.1.
foreach occurrence in ( occurrences_of( field ) ) {
construct_occurrence( occurrence );
if not last ( populated occurrence ) insert repetition_separator;
/* e.g., ~ */
}
Важно помнить, что эти разные подкомпоненты имеют разное значение, поскольку PID-13 относится к типу XTN.
PID-13 является проблематичным примером, потому что исторически порядок PID-13 имел значение. Первое повторение было «первичным». Со временем это поле также стало посадочным местом для адресов электронной почты, номеров пейджеров и т. д. Так что удачи в попытках разобраться в реальных данных.
person
Nick Hatt
schedule
21.03.2018
|^~\&
. Технически каждое сообщение может выбирать разные значения для каждого из них, но на практике именно они используются всеми сообщениями HL7 в дикой природе. Я постараюсь дать ответ. - person daveloyall   schedule 30.05.2018