【问题标题】:How do I transform an HL7 message with two segments in Mirth如何在 Mirth 中转换带有两个段的 HL7 消息
【发布时间】:2018-12-23 05:18:29
【问题描述】:

我在将 HL7 消息转换为 Mrth 中的 XML 时遇到问题。

我遇到的问题是消息段中有两个实例,我现在需要将它们分成两个 xml 标记。

所以 HL7 段看起来像这样:

PID|1|16^^^MEDAVIS^PI|||MyTest^TEST 2^T^^MISS~Test2^^^^^^B|00MemberCode|19921106|M|||MANNING ROAD^^DURBAN^^4001^ZA||0313017352~072363395^^CP~^NET^Internet^TEST@GMAIL.COM|0313017352~072363395^^CP~^NET^Internet^TEST@GMAIL.COM|||||123456PatDepCode|||||||ZA||||N

所以问题在于 PID 段,其中段 5(名称)中有多个标签,然后段中也有多个标签

我一直在使用不同的供应商向我们的系统提供信息的转换只使用了细分中的一个标签,看起来像这样:

tmp['Patient']['Name']= msg['PID']['PID.5']['PID.5.2'].toString();
tmp['Patient']['Surname'] =  msg['PID']['PID.5']['PID.5.1'].toString();

问题是代码中的两段我最终会搞得一团糟

        <Name>&lt;PID.5.2&gt;TEST 2&lt;/PID.5.2&gt;&lt;PID.5.2/&gt;</Name>
    <Surname>&lt;PID.5.1&gt;TEST G4M Nachname&lt;/PID.5.1&gt;&lt;PID.5.1&gt;NameOfBirth&lt;/PID.5.1&gt;</Surname>

如何更改格式,以便第一段类似于名称 1 和姓 1 以及第二段名称 2 和姓 2

更新:我已经更新了转换代码,它给出了正确的结果,但它们仍然是一条错误消息,尽管它使用有错误的代码产生了结果。

    <PID.5>
        <PID.5.1>TEST G4M Nachname</PID.5.1>
        <PID.5.2>TEST 2</PID.5.2>
        <PID.5.3>T</PID.5.3>
        <PID.5.4/>
        <PID.5.5>MISS</PID.5.5>
    </PID.5>
    <PID.5>
        <PID.5.1>NameOfBirth</PID.5.1>
        <PID.5.2/>
        <PID.5.3/>
        <PID.5.4/>
        <PID.5.5/>
        <PID.5.6/>
        <PID.5.7>B</PID.5.7>
    </PID.5>

所以调整后的变换看起来像:

/*patient name seperation*/
var segmentlength = msg['PID']['PID.5']['PID.5.2'].toString().length;
var tildeappears = msg['PID']['PID.5']['PID.5.2'].toString().indexof('~');
    tmp['Patient']['Name'] = msg['PID']['PID.5']['PID.5.1'].toString().substring(0,tildeappears-1);
    tmp['Patient']['Name1']= msg['PID']['PID.5']['PID.5.1'].toString().substring(tildeappears+1,segmentlength)

但是当运行 Mirth 时返回这个错误:

Transformer error ERROR MESSAGE:评估变压器时出错 com.mirth.connect.server.MirthJavascriptTransformerException: 通道:AGFA_DFT_PayloadBuilderV3 连接器:OutputLog SCRIPT 源:变压器源代码:604:tmp['Patient']['MRN'] = msg['PID']['PID.3']['PID.3.1'].toString(); 605: 606: /患者姓名 分隔/ 607: 608: var segmentlength = msg['PID']['PID.5']['PID.5.2'].toString().length; 609:波浪号出现= msg['PID']['PID.5']['PID.5.2'].toString().indexof('~'); 610: tmp['患者']['姓名'] = msg['PID']['PID.5']['PID.5.2'].toString().substring(0,tildeappears-1); 611:tmp['病人']['姓名1']= msg['PID']['PID.5']['PID.5.2'].toString().substring(tildeappears+1,segmentlength); 612:tmp['患者']['姓氏'] = msg['PID']['PID.5']['PID.5.1'].toString(); 613:行号:609 详细信息:TypeError:在对象中找不到函数 indexof 测试 2. 在 40699b8f-7c07-4eaf-8d54-e6f423be853b:609 (doTransform) 在 40699b8f-7c07-4eaf-8d54-e6f423be853b:792 (doScript) 在 40699b8f-7c07-4eaf-8d54-e6f423be853b:794 在 com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154) 在 com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:119) 在 com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113) 在 java.util.concurrent.FutureTask.run(Unknown Source) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(未知来源)

【问题讨论】:

    标签: javascript mirth mirth-connect


    【解决方案1】:

    所以在研究和尝试了各种解决方案后,我想出了一个非常简单的解决方案:

    tmp['Patient']['Name'] = msg['PID']['PID.5'][0]['PID.5.2'].toString();
    tmp['Patient']['Name1'] = msg['PID']['PID.5'][1]['PID.5.2'].toString();
    tmp.Patient.Surname = msg['PID']['PID.5'][0]['PID.5.1'].toString();
    tmp.Patient.Surname1 = msg['PID']['PID.5'][1]['PID.5.1'].toString();
    

    唯一的诀窍是记住索引从 0 开始。字符串的格式化可以通过上述两种方式中的任何一种完成,我提供了我尝试并发现有效的每种格式化方式的示例。

    【讨论】:

      猜你喜欢
      • 2011-07-15
      • 1970-01-01
      • 2015-04-26
      • 2013-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多