Python hl7apy构建HL7 ORU_R01消息时添加多个OBX段的方法问询
问题根源
两种错误写法的核心原因:
- 反复给同一个
ORU_R01_OBSERVATION.OBX属性赋值,本质是修改同一个OBX实例的内容,前序赋值会被最后一次操作覆盖,最终消息里只会保留最后一个OBX段的内容。 MDM_T02_OBXNTE_SUPPGRP是MDM_T02消息结构专属的分组,ORU_R01消息的严格校验规则不识别该组名,因此直接抛出名称非法错误。
正确实现方案
HL7 v2.5版本的ORU_R01消息结构中,每个OBX段需要归属到独立的ORU_R01_OBSERVATION子组下,再通过add()方法将子组追加到ORU_R01_ORDER_OBSERVATION组内(即OBR段所属的父组),即可实现多个OBX段按顺序排列在OBR段后方,严格校验模式下也可正常通过。
完整可运行代码如下:
from hl7apy.core import Message, Segment, Group from hl7apy.consts import VALIDATION_LEVEL from datetime import datetime message = Message("ORU_R01", validation_level=VALIDATION_LEVEL.STRICT) ## MSH段赋值 message.MSH.msh_3 = 'XXXXX' message.msh.msh_4 = 'XXXXX' message.msh.msh_9 = "ORU^R01^ORU_R01" message.msh.msh_10 = "" message.msh.msh_11 = "" # 患者信息段赋值 message.ORU_R01_PATIENT_RESULT.ORU_R01_PATIENT.PID.pid_2 = "patient_id" message.ORU_R01_PATIENT_RESULT.ORU_R01_PATIENT.PID.pid_3 = "" message.ORU_R01_PATIENT_RESULT.ORU_R01_PATIENT.PID.pid_5 = "" ## OBR段赋值 message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.OBR.obr_4 = "Observations" message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.OBR.obr_7 = f"{datetime.now().strftime('%Y%m%d%H%M%S.%f')[:-2]}" # 预定义3个OBX段 # obx0 obx0 = Segment('OBX', version='2.5') obx0.obx_1 = "1" obx0.obx_2 = "HD" obx0.obx_3 = "REFInstanceUID" obx0.obx_5 = "ref_uid" obx0.obx_11 = "F" # obx1 obx1 = Segment('OBX', version='2.5') obx1.obx_1 = "2" obx1.obx_2 = "TX" obx1.obx_3 = "Presence" obx1.obx_5 = "XXXX" obx1.obx_11 = "F" # obx2 obx2 = Segment('OBX', version='2.5') obx2.obx_1 = "3" obx2.obx_2 = "TX" obx2.obx_3 = "Result" obx2.obx_5 = "XXXXX" obx2.obx_11 = "F" # 核心逻辑:每个OBX对应一个独立的ORU_R01_OBSERVATION组,逐个追加到ORDER_OBSERVATION组下 # 添加第一个OBX obs_group0 = Group('ORU_R01_OBSERVATION', version='2.5') obs_group0.OBX = obx0 message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.add(obs_group0) # 添加第二个OBX obs_group1 = Group('ORU_R01_OBSERVATION', version='2.5') obs_group1.OBX = obx1 message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.add(obs_group1) # 添加第三个OBX obs_group2 = Group('ORU_R01_OBSERVATION', version='2.5') obs_group2.OBX = obx2 message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.add(obs_group2)
注意事项
- 严格校验模式下,自定义组的名称必须和当前使用的消息类型、HL7版本对应的标准结构完全匹配,禁止混用其他消息类型的组名。
- 如果需要给某个OBX段附加NTE注释段,直接将NTE段添加到该OBX所属的
ORU_R01_OBSERVATION组内即可,无需创建额外自定义组。 - hl7apy中支持重复的子节点(比如多个OBX对应的观察组)必须通过
add()方法追加,直接给属性重复赋值会覆盖原有实例。
内容的提问来源于stack exchange,提问作者toing_toing
相关产品推荐
相关产品推荐

