Как мне преобразовать сообщение HL7 с двумя сегментами в Mirth?

У меня проблема с передачей сообщения HL7 в XML в Mrth.

У меня проблема в том, что в сегменте сообщений есть два экземпляра, которые мне теперь нужно разделить на две 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>

Как я могу изменить преобразование, чтобы первый сегмент был чем-то вроде likename 1 и фамилия1 и второй сегмент name2 и фамилия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 возвращает эту ошибку:

Ошибка трансформатора СООБЩЕНИЕ ОБ ОШИБКЕ: Ошибка при оценке трансформатора ] [ 'PID.3'] [ 'PID.3.1'] ToString(). 605: 606: /разделение имени пациента/ 607: 608: длина сегмента var = 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, длина сегмента); 612: tmp['Patient']['Surname'] = msg['PID']['PID.5']['PID.5.1']. ToString(); 613: НОМЕР ЛИНИИ: 609 ДЕТАЛИ: Ошибка типа: Не удается найти функцию indexof в объекте ТЕСТ 2. в 40699b8f-7c07-4eaf-8d54-e6f423be853b:609 (doTransform) в 40699b8f-7c07-4eaf-8d54-e6f42392 40699b8f-7c07-4eaf-8d54-e6f423be853b:794 на com.mirth.connect.server.transformers.JavaScriptFilterTransformer$FilterTransformerTask.doCall(JavaScriptFilterTransformer.java:154) на com.mirth.Transformer.ransfor.verforver (JavaScriptFilterTransformer.java:119) в com.mirth.connect.server.util.javascript.JavaScriptTask.call(JavaScriptTask.java:113) в java.util.concurrent.FutureTask.run(неизвестный источник) в java.util.concurrent.ThreadPoolExecutor.runWorker(неизвестный источник) в java.util.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник) в java.lang.Thread.run(неизвестный источник)

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. Форматирование строки можно выполнить одним из двух способов, описанных выше, я включил пример каждого из способов форматирования, которые я пробовал и нашел работающими.

Другие вопросы по тегам