Невозможно проанализировать несколько сегментов IN1 в HL7 с помощью HAPI TERSER
Я получаю сообщения HL7 версии 2.5.1.
MSH|..
PID|..
PV1|..
ORC|..
IN1|1|...
IN1|2|....
Таким образом, в приведенном выше примере IN1 повторяется, однако, когда я пытаюсь проанализировать второй сегмент IN1 с помощью TERSER, он выдает исключение "Не удается создать повторение №1 в структуре IN1 - эта структура не повторяется".
This is what i have tried so far
string insurance = terser.Get("/.INSURANCE/.IN1(0)-1"); // Works fine
string insurance = terser.Get("/.INSURANCE/.IN1(1)-1"); // Throws exception
string insurance = terser.Get("/.INSURANCE(0)/.IN1(0)-1"); // Works fine
string insurance = terser.Get("/.INSURANCE(1)/.IN1(0)-1"); // Throws exception
2 ответа
Я только начал изучать HAPI. Я заметил, что в вашем примере вы не указали, как вы анализируете сообщение. Скорее всего, это был синтаксический анализ общего сообщения с использованием терсера. Если это так, я думаю, что это должно выглядеть примерно так
string insurance = terser.Get("/.INSURANCE/.IN12-1");
Я считаю, что Generic Message не имеет групп, и для доступа к этому сегменту, вероятно, нужно использовать IN12 вместо IN1(1)
Вы близки, но вы используете повторяющуюся группу на IN1, которая не является повторяющимся сегментом. Помните, что группа INSURANCE повторяет сегменты внутри:
Try:
/.INSURANCE(0)/.IN1-1"
/.INSURANCE(1)/.IN1-1"
"/.INSURANCE(1)/.IN1(0)-1"
works because there's only one IN1 segment in the group (rep 0 defaults to the 1st segment in the group):
Из Api Terser прочитайте раздел о группах:
...
group_spec: ["."] group_name_pattern
Здесь. указывает, что группу следует искать (используя SegmentFinder), начиная с текущего местоположения в сообщении. Подстановочные знаки " " и "?" представляют любое количество произвольных символов и один произвольный символ соответственно. Например, "М " и "?S?" соответствовать MSH. Первая группа с именем, совпадающим с заданным group_name_pattern, будет сопоставлена.
Сегмент_спец аналогичен групповому.
В качестве другого примера, следующий подкомпонент в сообщении SIU_S12:
msg.getSIU_S12_RGSAISNTEAIGNTEAILNTEAIPNTE (1).getSIU_S12_AIGNTE () getAIG () getResourceGroup(1).getIdentifier()..;
...
на него ссылаются все следующие location_spec: / SIU_S12_RGSAISNTEAIGNTEAILNTEAIPNTE (1) / SIU_S12_AIGNTE / AIG-5(1) -1 / AIG (1) / SIU_S12_AIGNTE / AIG-5(1) -1 / AIG (1) /. 5(1)
Функция поиска повторяет только повтор 0 в каждой группе. Таким образом, если бы rep 0 первой группы в этом примере был желательным вместо rep 1, следующий синтаксис также работал бы (так как в SUI_S12 есть только одна позиция сегмента AIG):
/.AIG-5(1)