【问题标题】:Combine multiple OBX segments in ORU_R01 message hl7 using python hl7apy使用 python hl7apy 在 ORU_R01 消息 hl7 中组合多个 OBX 段
【发布时间】:2022-06-11 00:56:06
【问题描述】:

我正在尝试创建具有多个 OBX 段的 HL7 RU_R01 消息。但是,我找不到将这些片段合并到消息中的方法。

这是我的代码:

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"

现在,如果我使用以下命令添加这些 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
    ....

它只将最后一个 OBX 段添加到消息中。

如果我尝试按照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

我收到以下错误:

InvalidName:组名无效:MDM_T02_OBXNTE_SUPPGRP

我想知道如何在 OBR 之后将这些多个片段添加到单个消息中。提前谢谢你

【问题讨论】:

    标签: python python-3.x hl7 hl7-v2


    【解决方案1】:

    我不知道 python 库,所以我无法为您提供确切的语法,但 ORU_R01_OBSERVATION 是一个可重复的字段,它允许单个 OBX 和多个 NTE 段。如果我猜测代码应该是这样的。

    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
        ....
    

    【讨论】:

    • 感谢您的回答,但ORU_R01_OBSERVATION 不直接接受多个OBX 段,并给出验证错误
    【解决方案2】:

    似乎添加多个段的正确方法是将每个hl7apy.core.Segment 添加到它的单个hl7apy.core.Group。这在here 进行了解释,来自 hl7apy 的 java 版本的documentation 很有用。

    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)
    

    另请注意,验证级别设置为可容忍TOLERATED。 STRICT 模式仅适用于单个 OBX 段。

    现在验证工作。

    assert hl7.validate() is True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多