报文样例
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这样赋值