如何使用HAPI 2.4创建HL7消息ORU_R01类型

时间:2018-05-03 20:26:10

标签: hl7 hapi

我是HL7的新手。我正在尝试使用HAPI 2.4构造HL7消息ORU_R01类型。当我在下面的代码中添加患者详细信息时,我的消息格式不正确;否则格式没问题。如何解决这个问题?是否有任何示例用PID,ORC,OBR和OBX构造HL7 ORU消息?

没有患者的输出

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 :(得分:0)

你的问题很可能是,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");
}