2

I am receiving HL7 messages version 2.5.1.

MSH|..
PID|..
PV1|..
ORC|..
IN1|1|...
IN1|2|....

So in the above example IN1 is repeating, however when i try to Parse the second IN1 segment with TERSER it throws an exception "Can't create repetition #1 of Structure IN1 - this Structure is non-repeating".

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
4

2 回答 2

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):

Terser api 阅读关于组的部分:

...

group_spec: ["."] group_name_pattern

在这里,一个 . 表示应该从消息中的当前位置开始搜索(使用 SegmentFinder)组。通配符“ ”和“?” 分别表示任意数量的任意字符和单个任意字符。例如,“M ”和“?S?” 匹配 MSH。第一个名称与给定 group_name_pattern 匹配的组将被匹配。

segment_spec 类似于 group_spec。

作为另一个示例,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)/.AIG- 5(1)

搜索功能仅遍历每个组的 rep 0。因此,如果需要此示例中第一组的 rep 0 而不是 rep 1,则以下语法也可以工作(因为 SUI_S12 中只有一个 AIG 段位置):

/.AIG-5(1)

于 2018-11-22T01:44:04.863 回答
1

我也刚开始学习 HAPI。我注意到在您的示例中,您没有指定如何解析消息。最重要的是,它被使用 terser 解析为通用消息。如果是这样的话,我认为它应该看起来像这样

string insurance = terser.Get("/.INSURANCE/.IN12-1"); 

我相信通用消息没有组,并且要访问此段可能需要使用 IN12 而不是 IN1(1)

于 2016-12-28T16:35:34.087 回答