hl7 开发

114 阅读1分钟

报文样例

MSH|^\&|PACS|PACS|TECH|WinningSoft|20231220090237||ORM^O01^ORM_O01|915A24F7-6BF3-4F66-AE98-830A60CB4181|P|2.5.1|||||CHN \rPID|1||I^^^^PatientID103031^^^^MedicalRecordNo~^^^^MedicareCardNo||殷*|\rPV1|1|I|||||||||||||||||00110987\rORC|SC|4423950^HIS||4423950^HIS|IP||20231220090237||20231220090237||||||||||6040^卢山2\rOBR|1|4423950^HIS^|4423950^HIS|1201^CT平扫-胸部CT平扫^^1|0||||1.00^1.00&|||||||||1150|消化内科|0060|放射科||0.00&RMB^1&已收费|LIS||||||||||||||||||||||4423950^ApplyNo\r

maven依赖

<dependency>  
    <groupId>ca.uhn.hapi</groupId>  
    <artifactId>hapi-base</artifactId>  
    <version>2.3</version>  
</dependency>  
<dependency>  
    <groupId>ca.uhn.hapi</groupId>  
    <artifactId>hapi-structures-v251</artifactId>  
    <version>2.3</version>  
</dependency>
  • jdk 1.8 可使用2.3 版本,2.4 开始需要 jdk 11以上版本。
  • hapi-structures-v251 根据实际需要解析的格式改变

创建一个hl7消息

DefaultModelClassFactory defaultModelClassFactory = new DefaultModelClassFactory();  
ORR_O02 orrO02 = new ORR_O02(defaultModelClassFactory);  
//        MFN_M01 mfn_m01 = new MFN_M01(defaultModelClassFactory);

DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");  
Calendar calendar = Calendar.getInstance();  
String dateTime = df.format(calendar.getTime());

MSH msh = orrO02.getMSH();  
msh.getFieldSeparator().setValue("|");  
msh.getEncodingCharacters().setValue("^~\\&");  
msh.getSendingApplication().getNamespaceID().setValue("PACS");  
msh.getSendingFacility().getNamespaceID().setValue("WinningSoft");  
msh.getReceivingApplication().getNamespaceID().setValue("HIS");  
msh.getReceivingFacility().getNamespaceID().setValue("WinningSoft");  
msh.getDateTimeOfMessage().getTime().setValue(dateTime);  
msh.getMessageControlID().setValue(messageId);  
msh.getProcessingID().getProcessingID().setValue("P");  
msh.getVersionID().getVersionID().setValue("2.5.1");  
msh.getCountryCode().setValue("CHN");

生成hl7字符串

orm_o01.encode()

##  解析hl7字符串

PipeParser pipeParser = PipeParser.getInstanceWithNoValidation()  
Message message = pipeParser.parse("") //这里是 HL7 字符串  
(message.get("ORDER") as ORM_O01_ORDER).ORDER_DETAIL.OBR //获取OBR
msgOBR.obr2_PlacerOrderNumber.ei1_EntityIdentifier.value  //获取属性值

开发避坑

生成HL7 消息时,字段属性需要到 .value 级别的赋值,不能直接将 obr = msgOBR这样赋值