首页 文章

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

提问于
浏览
2

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

Output without patient

MSH | ^〜\&| IM | ABC-ClinPath | ABC-兽医| ABC-VetMed | 20180412124041 || ORU ^ R01

Output with patient (如果我在代码中评论患者详情)

PID ||测试||| ^ 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

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

相关问题