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