如何在 Mirth 中转换具有两个段的 HL7 消息

How do I transform an HL7 message with two segments in Mirth

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

我遇到的问题是消息段中有两个实例,我现在需要将它们分成两个 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>

我如何更改 ransform,使第一段类似于 name 1 和 surname1,第二段类似于 name2 和 surname2

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

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

但是当运行欢笑returns这个错误:

Transformer error ERROR MESSAGE: Error evaluating transformer com.mirth.connect.server.MirthJavascriptTransformerException: CHANNEL: AGFA_DFT_PayloadBuilderV3 CONNECTOR: OutputLog SCRIPT SOURCE: TRANSFORMER SOURCE CODE: 604: tmp['Patient']['MRN'] = msg['PID']['PID.3']['PID.3.1'].toString(); 605: 606: /patient name seperation/ 607: 608: var segmentlength = msg['PID']['PID.5']['PID.5.2'].toString().length; 609: tildeappears = msg['PID']['PID.5']['PID.5.2'].toString().indexof('~'); 610: tmp['Patient']['Name'] = msg['PID']['PID.5']['PID.5.2'].toString().substring(0,tildeappears-1); 611: tmp['Patient']['Name1']= msg['PID']['PID.5']['PID.5.2'].toString().substring(tildeappears+1,segmentlength); 612: tmp['Patient']['Surname'] = msg['PID']['PID.5']['PID.5.1'].toString(); 613: LINE NUMBER: 609 DETAILS: TypeError: Cannot find function indexof in object TEST 2. at 40699b8f-7c07-4eaf-8d54-e6f423be853b:609 (doTransform) at 40699b8f-7c07-4eaf-8d54-e6f423be853b:792 (doScript) at 40699b8f-7c07-4eaf-8d54-e6f423be853b:794 at com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154) at com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:119) at com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

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

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 开始。字符串的格式可以通过上面两种方式中的任何一种完成,我提供了一个示例,说明了我尝试并发现可行的每种格式设置方式.