Как получить значение из определенного сегмента, используя метод Terser.get () в случае повторения сегмента? - PullRequest
1 голос
/ 14 мая 2019

Я пытаюсь прочитать сообщения HL7, где у меня есть несколько ORC сегментов.Метод terser.get() получает значения только для первого сегмента ORC.При попытке чтения из /ORDER(2)/ORC-X-X метод не возвращает никакого значения.

Terser mesg = new Terser(next);
System.out.println(mesg.get("/ORDER(2)/ORC-2-1"));

Метод возвращает значение для mesg.get("/ORDER/ORC-2-1").Я ожидаю, что он также вернется за "/ORDER(2)/ORC-2-1".

Terser Full Path: Terser Full Path

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Решением было использование getOrderReps() метода из OMS_O05, который бы давал число повторений ORDERS. Также используйте OMS_O05 в качестве типа сообщения.

OMS_O05 omsMsg = (OMS_O05) next;
Terser t = new Terser(omsMsg);
for (int i = 0; i < omsMsg.getORDERReps(); i++)
{
    System.out.println(t.get("/ORDER("+i+")/ORC-2-1"));
}
0 голосов
/ 15 мая 2019

Я не эксперт в Терсере, но ...

Согласно документации , ниже приводится описание метода String get(String spec):

Получаетстроковое значение указанного поля.См. Документацию класса для синтаксиса спецификации местоположения.
Если повторение пропущено для повторяющегося сегмента или поля, используется первый повтор.Если компонент или подкомпонент не указан для составного поля, используется первый компонент (это позволяет писать код, который будет работать с более поздними версиями стандарта HL7).

, где spec - это полеспецификация.

С этим, как объяснено здесь , вы можете получить конкретный компонент в определенном сегменте с помощью следующего кода:

@Test
public void testAccessSegmentRepetitions() throws Exception{
    //First Next of Kin Id
    assertEquals("1", terser.get("NK1(0)-1"));
    //Second Next of Kin Id
    assertEquals("2", terser.get("NK1(1)-1"));
}

Входное сообщение HL7:

MSH|^~\\&|hl7Integration|hl7Integration|||||ADT^A01|||2.3|
EVN|A01|20130617154644
PID|1|465 306 5961||407623|Wood^Patrick^^^MR||19700101|1|||High Street^^Oxford^^Ox1 4DP~George St^^Oxford^^Ox1 5AP|||||||
NK1|1|Wood^John^^^MR|Father||999-9999
NK1|2|Jones^Georgie^^^MSS|MOTHER||999-9999
PV1|1||Location||||||||||||||||261938_6_201306171546|||||||||||||||||||||||||20130617134644|||||||||

Мы можем получить конкретные повторения, используя скобки.В зависимости от того, где мы поставим скобки, мы будем получать повторение сегмента, повторение поля или повторение компонента.

Аналогично, в вашем случае должен работать следующий код:

mesg.get("/ORC(0)-2-1") //This will return value from first occurrence of segment
mesg.get("/ORC(1)-2-1") //This will return value from second occurrence of segment

Обновление для вашего редактирования и вашего комментария:

Насчет материала ORDER, похоже, что это необходимо.В этом случае используйте следующий код:

mesg.get("/ORDER(2)/ORC(0)-2-1") //This will return value from first occurrence of segment
mesg.get("/ORDER(2)/ORC(1)-2-1") //This will return value from second occurrence of segment
...