1

我对 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>

如何更改格式,以便第一个段类似于名称 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)

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

变压器错误错误消息:评估变压器 com.mirth.connect.server.MirthJavascriptTransformerException 时出错:通道:AGFA_DFT_PayloadBuilderV3 连接器:输出日志脚本源:变压器源代码: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['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['患者']['姓氏'] = msg['PID']['PID.5']['PID.5.1'].toString(); 613:行号:609 详细信息:TypeError:在对象 TEST 2 中找不到函数 indexof。在 40699b8f-7c07-4eaf-8d54-e6f423be853b:609(doTransform)在 40699b8f-7c07-4eaf-8d54-e6f423be853b:

4

1 回答 1

0

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

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 开始。字符串的格式可以通过上述两种方式中的任何一种来完成,我提供了我尝试并发现有效的每种格式化方式的示例。

于 2018-07-24T14:05:48.330 回答