[英]Combine multiple OBX segments in ORU_R01 message hl7 using python hl7apy
I am trying to create an HL7 RU_R01 message with multiple OBX segments.我正在尝试创建具有多个 OBX 段的 HL7 RU_R01 消息。 However, I cannot find a way to merge these segments together into the message.
但是,我找不到将这些段合并到消息中的方法。
Here's my code:这是我的代码:
message = Message("ORU_R01", validation_level=VALIDATION_LEVEL.STRICT)
has_xxx_formatted = '2'
text_formatted = DEFAULT_HL7_TEXT["EN"]["XXXX"]
## MSH Segment
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 = ""
# patient details
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 Segment -- frature details
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]}"
# 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"
Now if I add these obx segments using:现在,如果我使用以下命令添加这些 obx 段:
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_OBSERVATION.OBX.obx_1 = 1
# adds individual values of obx0
....
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_OBSERVATION.OBX.obx_1 = 2
# adds individual values of obx1
....
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_OBSERVATION.OBX.obx_1 = 3
# adds individual values of obx2
....
It only adds the last OBX segment into the message.它只将最后一个 OBX 段添加到消息中。
If I try to add the convert the OBX segments into a group as suggested here :如果我尝试按照此处的建议将转换 OBX 段添加到组中:
name = 'MDM_T02_OBXNTE_SUPPGRP'
mdm_group = Group(name, version='2.5')
mdm_group.obx = obx0
mdm_group.add(obx1)
mdm_group.add(obx2)
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_ORDER_OBSERVATION = mdm_group
I get the following error:我收到以下错误:
InvalidName: Invalid name for Group: MDM_T02_OBXNTE_SUPPGRP
InvalidName:组的名称无效:MDM_T02_OBXNTE_SUPPGRP
I'd like to know how to add these multiple segments into a single message after the OBR.我想知道如何在 OBR 之后将这些多个段添加到单个消息中。 Thank you in advance
先感谢您
I don't know the python libraries, so I won't be able to give you the exact syntax, but ORU_R01_OBSERVATION is a repeatable field that allows for a single OBX and multiple NTE segments.我不知道 python 库,所以我不能给你确切的语法,但 ORU_R01_OBSERVATION 是一个可重复的字段,它允许单个 OBX 和多个 NTE 段。 If I were to guess the code should be something like.
如果我猜测代码应该是这样的。
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_OBSERVATION[0].OBX.obx_1 = 1
# adds individual values of obx0
....
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_OBSERVATION[1].OBX.obx_1 = 2
# adds individual values of obx1
....
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.ORU_R01_OBSERVATION[2].OBX.obx_1 = 3
# adds individual values of obx2
....
It seems that the correct way to add multiple segments is to add each hl7apy.core.Segment
to it's individual hl7apy.core.Group
.似乎添加多个段的正确方法是将每个
hl7apy.core.Segment
添加到它的单个hl7apy.core.Group
中。 This is explained here , and the documentation from the java version of hl7apy is useful.这在此处进行了解释,来自 hl7apy 的 java 版本的文档很有用。
message = Message("ORU_R01", validation_level=VALIDATION_LEVEL.TOLERATED)
has_xxx_formatted = '2'
text_formatted = DEFAULT_HL7_TEXT["EN"]["XXXX"]
## MSH Segment
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 = ""
# patient details
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 Segment -- frature details
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]}"
obs_name = 'ORU_R01_OBSERVATION'
# obx0
obx0_group = Group(obs_name, version='2.5')
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"
obx0_group.add(obx0)
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.add(obx0_group)
# obx1
name = 'ORU_R01_OBSERVATION'
obx1_group = Group(obs_name, version='2.5')
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"
obx1_group.add(obx1)
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.add(obx1_group)
# obx2
name = 'ORU_R01_OBSERVATION'
obx2_group = Group(obs_name, version='2.5')
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"
obx2_group.add(obx2)
message.ORU_R01_PATIENT_RESULT.ORU_R01_ORDER_OBSERVATION.add(obx2_group)
Also note that the validation level is set to tolerated TOLERATED
.另请注意,验证级别设置为容忍
TOLERATED
。 STRICT
mode only works with a single OBX segment. STRICT
模式仅适用于单个 OBX 段。
Now the validation works.现在验证工作。
assert hl7.validate() is True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.