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

标签 java hl7 hapi

我有以下 HL7-Message 需要解析。

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

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

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() 方法,以获得上述值。

最佳答案

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

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

当您使用 XML 解析 OML 消息时,您可以看到 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

关于java - 如何使用 HAPI 从 HL7 消息中读取多个 ORC 和 OBR 段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32124685/

相关文章:

java - ConcurrentHashMap.Segment 是一个 ReentrantLock?

java - struts2&IE 中长 URL 的 request.redirect()

java - 零除 Java 整数与 double

c# - 如何导入HL7以获得血液结果并解析以进行患者报告?

java - 未能在项目 hapi-fhir-jpaserver-starter 上执行目标 org.apache.maven.plugins :maven-war-plugin:3. 2.3:war (default-war)

java - HAPI v2.0 Hl7消息

java - 仅仅声明对象数组和实际创建它的实例有什么区别?

.net - HL7 消息传递和无 PID-3

hl7 - 实现 Mirth HL7 转换器以有条件地改变场

postgresql - POSTGRES 检查提供的值是否存在于数组类型的列中