Как создать HL7-сообщение типа ORU_R01 с использованием HAPI 2.4 - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в HL7. Я пытаюсь построить HL7 сообщение типа ORU_R01 с использованием HAPI 2.4. Я получил неправильный формат сообщения, когда я добавляю данные пациента в приведенный ниже код; в противном случае формат в порядке. Как исправить эту проблему? Есть ли пример для построения сообщения ORU HL7 с PID, ORC, OBR и OBX?

Выход без пациента

MSH | ^ ~ \ & | IM | ABC-ClinPath | ABC-ветеринара | ABC-VetMed | 20180412124041 || ORU ^ R01

Вывод с пациентом (Если я прокомментирую данные пациента в коде)

PID || TEST ||| ^ TESTlinPath | ABC-ветеринара | ABC-VetMed | 20180412124041 || ORU ^ R01

import ca.uhn.hl7v2.model.v24.message.ORM_O01;
import ca.uhn.hl7v2.HapiContext;
import ca.uhn.hl7v2.DefaultHapiContext;
import ca.uhn.hl7v2.parser.Parser;
import ca.uhn.hl7v2.model.v24.segment.MSH;
import ca.uhn.hl7v2.model.v24.group.ORM_O01_PATIENT;

public class CreateORUMessage {

private String sendingApplication = "IM";
private String sendingFacility = "ABC-ClinPath";
private String receivingApplication = "ABC-vet";
private String receivingFacility = "ABC-VetMed";


private void createHL7Message(){
    try{
        ORM_O01 order = new ORM_O01();
        //ORU_R01 oru = new ORU_R01();
        // Populate the MSH Segment
        // Example -  MSH|^~\&|HISA_8592|HISF_2603|||200706081131||ADT^A04|HL7O.1.11379|D|2.1
        MSH mshSegment = order.getMSH();
        mshSegment.getFieldSeparator().setValue("|");
        mshSegment.getEncodingCharacters().setValue("^~\\&");
        mshSegment.getSendingApplication().getNamespaceID().setValue(sendingApplication);
        mshSegment.getSendingFacility().getNamespaceID().setValue(sendingFacility);
        mshSegment.getReceivingApplication().getNamespaceID().setValue(receivingApplication);
        mshSegment.getReceivingFacility().getNamespaceID().setValue(receivingFacility);
        mshSegment.getDateTimeOfMessage().getTimeOfAnEvent().setValue("20180412124041");
        mshSegment.getMessageType().getMessageType().setValue("ORU");
        mshSegment.getMessageType().getTriggerEvent().setValue("R01");

        //PID - patient details
        ORM_O01_PATIENT orm_pid = order.getPATIENT();
        orm_pid.getPID().getPid5_PatientName(0).getGivenName().setValue("TEST");
        orm_pid.getPID().getPid2_PatientID().getCx1_ID().setValue("TEST");


     // Now, let's encode the message and look at the output
        HapiContext context = new DefaultHapiContext();
        Parser parser = context.getPipeParser();
        String encodedMessage = parser.encode(order);
        System.out.println("Printing ER7 Encoded Message:");
        System.out.println(encodedMessage);

        //String msg = order.encode();
        //System.out.println(msg);

    }catch(Exception e){
        e.printStackTrace();
    }

}

public static void main(String args[]){
    new CreateORUMessage().createHL7Message();
}
}

Я тоже пытался по-другому, но это не сработало: (

String msg = order.encode();
System.out.println(msg);

1 Ответ

0 голосов
/ 14 мая 2018

Скорее всего, ваша проблема в том, что символ разделителя сегмента в HL7 равен CR, который просто сбрасывает курсор в начало строки, а следующая строка перезаписывает предыдущий. Это влияет только на запись сообщения на консоль. Запись в файл или отправка по TCP должны выполняться без каких-либо преобразований.

Однажды у меня была такая же проблема в приложении, это мое решение ниже.

ORU_R01 outMessage = new ORU_R01();
outMessage.setParser(hapiContext.getPipeParser());

outMessage.initQuickstart("ORU", "R01", "T");
MSH mshSegment = outMessage.getMSH();
mshSegment.getMsh3_SendingApplication().getHd1_NamespaceID().setValue("MIG-TOOL");

/* some code removed */

PID pidSegment = outMessage.getRESPONSE().getPATIENT().getPID();
pidSegment.getPid3_PatientIDInternalID(0).parse(reportData.getPatientId());

/* some more code removed */

LOGGER.trace("Generated message contents:\n" + replaceNewlines(outMessage.encode()));

А код для replaceNewLines() довольно прост

private static String replaceNewlines(String input) {
    return input.replaceAll("\\r", "\n");
}
...