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

1

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

У меня проблема в том, что сегмент сообщения имеет два экземпляра, которые мне теперь нужно разделить на два xml tage.

поэтому селектор 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^[email protected]|0313017352~072363395^^CP~^NET^Internet^[email protected]|||||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, так что сегмент forst будет чем-то подобным 1 и фамилия1, а второй сегмент name2 и surname2

UPDATE: я обновил код преобразования, и он дает правильный результат, но они все еще являются сообщением об ошибке, несмотря на то, что он продуцирует 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: CHANNEL: AGFA_DFT_PayloadBuilderV3 CONNECTOR: 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: 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: НОМЕР ЛИНИИ: 609 ДЕТАЛИ: TypeError: не удается найти функцию indexof в объекте TEST 2. at 40699b8f-7c07-4eaf-8d54-e6f423be853b: 609 (doTransform) на 40699b8f-7c07-4eaf-8d54-e6f423be853b: 792 (doScript) на 40699b8f-7c07-4eaf-8d54-e6f423be853b: 794 at 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 (Неизвестный источник) в java.util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (Неизвестный источник) в java.lang.Thread.run (Неизвестный источник)

Теги:
mirth
mirth-connect

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню