简体   繁体   English

使用 python hl7apy 在 ORU_R01 消息 hl7 中组合多个 OBX 段

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM