У меня проблема с 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><PID.5.2>TEST 2</PID.5.2><PID.5.2/></Name>
<Surname><PID.5.1>TEST G4M Nachname</PID.5.1><PID.5.1>NameOfBirth</PID.5.1></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 (Неизвестный источник)
Поэтому после исследования и тестирования различных решений я разработал очень простое решение:
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. Форматирование строки может быть выполнено одним из двух способов выше, я включил пример каждого из способов форматирования, которые я пробовал и нашел.