代码之家  ›  专栏  ›  技术社区  ›  Abhishek

如何使用HAPI从HL7消息中读取多个ORC和OBR段

  •  1
  • Abhishek  · 技术社区  · 9 年前

    我有以下HL7消息要解析。

    MSH|^~\&|LIS|LAB1|APP2|LAB2|20140706163250||OML^O21|20140706163252282|P|2.4
    PID|1||7015||LISTESTPATIENT12^LISTESTPATIENT12||19730901000000|F
    PV1|1||||||LISPHYCDE1^LISPHY001^LISCARE TEST
    ORC|NW|LISCASEID15|||||||||||||||NJ||||TCL^TCL
    OBR|1|LISCASEID15||28259^Her2^STAIN|||20140706162713|||||||20140706162713|Breast|patho^pathl^pathf|||image1^image1^image1|blk1^blk1^blk1|SPEC14^SPEC14^SPEC14
    ORC|XO|LISCASEID15|||||||||||||||NJ||||TCL^TCL
    OBR|2|LISCASEID15||28260^Her2^STAIN|||20140706162713|||||||20140706162713|Breast|patho^pathl^pathf|||image2^image2^image|blk2^blk2^blk2|SPEC14^SPEC14^SPEC14
    

    我正在尝试从OBR和OBR中获取值;使用HAPI Terser的ORC段。get()方法,如下所示。

    Terser t = new Terser(h7msg);
    t.get("/.ORDER_OBSERVATION(0)/ORC-1-1"); // Should return NW
    t.get("/.ORDER_OBSERVATION(1)/ORC-1-1"); // Should return XO
    t.get("/.ORDER_OBSERVATION(0)/OBR-4-1"); // Should return 28259
    t.get("/.ORDER_OBSERVATION(1)/OBR-4-1"); // Should return 28260
    

    但以上所有陈述都给出了以下错误 “无循环迭代时到达消息结尾”

    不知道,我在这里做错了什么。 伙计们请帮我正确输入Teaser。get()方法,以获取以上值。

    1 回复  |  直到 9 年前
        1
  •  1
  •   Community CDub    7 年前

    这里的问题是OML^O21消息不包含多个ORDER_OBSERVATION。这意味着您无法访问元素 ORDER_OBSERVATION(1) ,因为它不存在。

    这里是7edit中的表示: enter image description here

    当您将OML消息解析为XML时,您可以看到HL7的真实结构:

      <?xml version="1.0" encoding="UTF-8"?><OML_O21 xmlns="urn:hl7-org:v2xml">
       <MSH>
          <MSH.1>|</MSH.1>
          <MSH.2>^~\&amp;</MSH.2>
          <MSH.3>
             <HD.1>LIS</HD.1>
          </MSH.3>
          <MSH.4>
             <HD.1>LAB1</HD.1>
          </MSH.4>
          <MSH.5>
             <HD.1>APP2</HD.1>
          </MSH.5>
          <MSH.6>
             <HD.1>LAB2</HD.1>
          </MSH.6>
          <MSH.7>
             <TS.1>20140706163250</TS.1>
          </MSH.7>
          <MSH.9>
             <MSG.1>OML</MSG.1>
             <MSG.2>O21</MSG.2>
          </MSH.9>
          <MSH.10>20140706163252282</MSH.10>
          <MSH.11>
             <PT.1>P</PT.1>
          </MSH.11>
          <MSH.12>
             <VID.1>2.4</VID.1>
          </MSH.12>
       </MSH>
       <OML_O21.PATIENT>
          <PID>
             <PID.1>1</PID.1>
             <PID.3>
                <CX.1>7015</CX.1>
             </PID.3>
             <PID.5>
                <XPN.1>
                   <FN.1>LISTESTPATIENT12</FN.1>
                </XPN.1>
                <XPN.2>LISTESTPATIENT12</XPN.2>
             </PID.5>
             <PID.7>
                <TS.1>19730901000000</TS.1>
             </PID.7>
             <PID.8>F</PID.8>
          </PID>
          <OML_O21.PATIENT_VISIT>
             <PV1>
                <PV1.1>1</PV1.1>
                <PV1.7>
                   <XCN.1>LISPHYCDE1</XCN.1>
                   <XCN.2>
                      <FN.1>LISPHY001</FN.1>
                   </XCN.2>
                   <XCN.3>LISCARE TEST</XCN.3>
                </PV1.7>
             </PV1>
          </OML_O21.PATIENT_VISIT>
       </OML_O21.PATIENT>
       <OML_O21.ORDER_GENERAL>
          <OML_O21.ORDER>
             <ORC>
                <ORC.1>NW</ORC.1>
                <ORC.2>
                   <EI.1>LISCASEID15</EI.1>
                </ORC.2>
                <ORC.17>
                   <CE.1>NJ</CE.1>
                </ORC.17>
                <ORC.21>
                   <XON.1>TCL</XON.1>
                   <XON.2>TCL</XON.2>
                </ORC.21>
             </ORC>
          </OML_O21.ORDER>
          <OML_O21.ORDER>
             <ORC>
                <ORC.1>XO</ORC.1>
                <ORC.2>
                   <EI.1>LISCASEID15</EI.1>
                </ORC.2>
                <ORC.17>
                   <CE.1>NJ</CE.1>
                </ORC.17>
                <ORC.21>
                   <XON.1>TCL</XON.1>
                   <XON.2>TCL</XON.2>
                </ORC.21>
             </ORC>
             <OML_O21.OBSERVATION_REQUEST>
                <OBR>
                   <OBR.1>1</OBR.1>
                   <OBR.2>
                      <EI.1>LISCASEID15</EI.1>
                   </OBR.2>
                   <OBR.4>
                      <CE.1>28259</CE.1>
                      <CE.2>Her2</CE.2>
                      <CE.3>STAIN</CE.3>
                   </OBR.4>
                   <OBR.7>
                      <TS.1>20140706162713</TS.1>
                   </OBR.7>
                   <OBR.14>
                      <TS.1>20140706162713</TS.1>
                   </OBR.14>
                   <OBR.15>
                      <SPS.1>
                         <CE.1>Breast</CE.1>
                      </SPS.1>
                   </OBR.15>
                   <OBR.16>
                      <XCN.1>patho</XCN.1>
                      <XCN.2>
                         <FN.1>pathl</FN.1>
                      </XCN.2>
                      <XCN.3>pathf</XCN.3>
                   </OBR.16>
                   <OBR.19>image1</OBR.19>
                   <OBR.20>blk1</OBR.20>
                   <OBR.21>SPEC14</OBR.21>
                </OBR>
                <OML_O21.PRIOR_RESULT>
                   <OML_O21.ORDER_PRIOR>
                      <OBR>
                         <OBR.1>2</OBR.1>
                         <OBR.2>
                            <EI.1>LISCASEID15</EI.1>
                         </OBR.2>
                         <OBR.4>
                            <CE.1>28260</CE.1>
                            <CE.2>Her2</CE.2>
                            <CE.3>STAIN</CE.3>
                         </OBR.4>
                         <OBR.7>
                            <TS.1>20140706162713</TS.1>
                         </OBR.7>
                         <OBR.14>
                            <TS.1>20140706162713</TS.1>
                         </OBR.14>
                         <OBR.15>
                            <SPS.1>
                               <CE.1>Breast</CE.1>
                            </SPS.1>
                         </OBR.15>
                         <OBR.16>
                            <XCN.1>patho</XCN.1>
                            <XCN.2>
                               <FN.1>pathl</FN.1>
                            </XCN.2>
                            <XCN.3>pathf</XCN.3>
                         </OBR.16>
                         <OBR.19>image2</OBR.19>
                         <OBR.20>blk2</OBR.20>
                         <OBR.21>SPEC14</OBR.21>
                      </OBR>
                   </OML_O21.ORDER_PRIOR>
                </OML_O21.PRIOR_RESULT>
             </OML_O21.OBSERVATION_REQUEST>
          </OML_O21.ORDER>
       </OML_O21.ORDER_GENERAL>
    </OML_O21>
    

    不幸的是,像HAPI这样的许多解析器都存在这样的问题,它们会根据类型(OML_O21)和版本验证任何消息的结构。因为如果你从2.4改为2.5,你会得到一个完全不同的结构。

    如果您不关心该结构,可以使用不同的HL7解析器,如 HL7X 它将hl7转换为xml,就像一个分隔文件,与hl7消息类型或版本无关。

    在这里,您可以在stackoverflow上找到类似的问题:

    How to parse the Multiple OBR Segment in HL7 using HAPI TERSER