Beispiel #1
0
def responder(m):
    # cria uma mensagem de resposta RSP_K11
    response = Message("RSP_K11")
    response.MSH.MSH_9 = "RSP^K11^RSP_K11"
    response.MSA = "MSA|AA"
    response.MSA.MSA_2 = m.MSH.MSH_10
    qak = Segment("QAK")
    qak.qak_1 = m.QPD.QPD_2
    qak.qak_2 = "OK"
    qak.qak_3 = "Q22^Specimen Labeling Instructions^IHE_LABTF"
    qak.qak_4 = "1"
    response.add(qak)
    response.QPD = m.QPD
    response.PID.PID_1 = '1'
    response.PID.PID_5.PID_5_1 = 'CUNHA'
    response.PID.PID_5.PID_5_2 = 'JOSE'
    response.PID.PID_6 = "19800101"
    response.PID.PID_7 = "F"
    response.PID.PID_23 = "Brasil"
    spm = Segment("SPM")
    obr = Segment("OBR")
    spm.SPM_1 = '1'
    spm.SPM_2 = "12345"
    obr.OBR_4 = "ORDER^DESCRIPTION"
    response.add(spm)
    response.add(obr)
    return response.to_mllp()
Beispiel #2
0
def send_pdq_request(patient_id):
    try:
        host, port = settings.MLLP_HOST, settings.MLLP_PORT
    except AttributeError:
        raise AttributeError("Couldn't find MLLP_HOST or MLLP_PORT in the settings file. Did you set them?")

    msg = Message("QBP_Q21", reference=_PDQ_REQ_MP)
    msh_9 = "QBP^Q22^QBP_Q21"
    msg.msh.msh_3 = "MOST CLIENT"
    msg.msh.msh_4 = "MOST DEMOGRAPHICS"
    msg.msh.msh_5 = "MOST SERVER"
    msg.msh.msh_6 = "MOST DEMO"
    msg.msh.msh_9 = msh_9
    msg.msh.msh_10 = uuid.uuid4().hex[:20]
    msg.msh.msh_11 = "P"
    msg.msh.msh_17 = "ITA"
    msg.msh.msh_18 = "UTF-8"
    msg.msh.msh_19 = "IT"

    msg.qpd.qpd_1 = "IHE PDQ Query"
    msg.qpd.qpd_2 = uuid.uuid4().hex[:20]
    msg.qpd.add_field("qpd_3").value = "@PID.3.1^{}".format(patient_id)

    msg.rcp.rcp_1 = "I"

    res = send_hl7_message(host, port, msg.to_mllp())

    return parse_pdq_response(res)
Beispiel #3
0
    def _create_response(self, ack_code, query_ack_code, patients):
        res = Message('RSP_K21', reference=self.RES_MP)
        res.msh.msh_5 = self.incoming_message.msh.msh_3
        res.msh.msh_6 = self.incoming_message.msh.msh_4
        res.msh.msh_7.ts_1 = DTM(datetime.datetime.now())
        res.msh.msh_9 = 'RSP^K22^RSP_K21'
        res.msh.msh_10 = uuid.uuid4().hex

        # MSA creation
        res.msa.msa_1 = ack_code
        res.msa.msa_2 = self.incoming_message.msh.msh_10.msh_10_1

        # QAK creation
        res.qak.qak_1 = self.incoming_message.qpd.qpd_2
        res.qak.qak_2 = 'OK' if len(patients) > 0 else 'NF'
        res.qak.qak_4 = str(len(patients))

        # QPD creation
        res.qpd = self.incoming_message.qpd

        # RSP_K21_QUERY_RESPONSE creation
        res.add_group('rsp_k21_query_response')
        g = res.rsp_k21_query_response
        for i, p in enumerate(patients):
            # add a pid segment for every patient
            g.add_segment('PID')
            g.pid[i].pid_3.cx_1, g.pid[i].pid_5.xpn_1, g.pid[i].pid_5.xpn_2 = p[:]

        return res.to_mllp()
Beispiel #4
0
    def _build_default_response(self):
        m = Message("ACK")
        m.MSH.MSH_9 = "ACK^ACK"
        m.MSA.MSA_1 = "AR"
        m.MSA.MSA_2 = ""
        m.ERR.ERR_1 = "%s" % self.error_code
        m.ERR.ERR_2 = "%s" % self.error_msg

        return m.to_mllp()
Beispiel #5
0
 def build_error_response(self, error_msg):
     m = Message("ACK") 
     m.MSH.MSH_9 = "ACK^ACK"
     m.MSA.MSA_1 = "AR"
     m.MSA.MSA_2 = self.msg.MSH.MSH_10 if self.msg else ""
     m.ERR.ERR_1 = "100"
     m.ERR.ERR_2 = error_msg
     
     return m.to_mllp()
Beispiel #6
0
    def reply(message):
        """
        Parse the incoming message and return the ER7 encoded response

        :param message: incoming message
        :return: response encoded to ER7 - it can be a NAK or RSP_K11 message
        """
        print "Received by LIP", repr(message)

        try:
            # parse the incoming message
            m = parse_message(message, find_groups=False)
        except:
            print 'parsing failed', repr(message)
            response = LIP.nak()
        else:
            print "Message type:", m.MSH.message_type.to_er7()
            print "Message content:", repr(m.to_er7())
            if m.MSH.MSH_9.MSH_9_3.to_er7() == 'QBP_Q11':
                # create a new RSP_K11 message
                response = Message("RSP_K11")
                response.MSH.MSH_9 = "RSP^K11^RSP_K11"
                # add MSA segment
                response.MSA = "MSA|AA"
                response.MSA.MSA_2 = m.MSH.MSH_10
                # create a QAK segment
                qak = Segment("QAK")
                qak.qak_1 = m.QPD.QPD_2
                qak.qak_2 = "OK"
                qak.qak_3 = "Q22^Specimen Labeling Instructions^IHE_LABTF"
                qak.qak_4 = "1"
                # add the QAK segment to the RSP_K11 message
                response.add(qak)
                # copy the QPD segment from the incoming message
                response.QPD = m.QPD
                # create a PID segment
                response.PID.PID_1 = '1'
                response.PID.PID_5.PID_5_1 = 'PATIENT_SURNAME'
                response.PID.PID_5.PID_5_2 = 'PATIENT_NAME'
                response.PID.PID_6 = "19800101"
                response.PID.PID_7 = "F"
                # create a SPM segment
                spm = Segment("SPM")
                # create an OBR segment
                obr = Segment("OBR")
                spm.SPM_1 = '1'
                spm.SPM_2 = "12345"
                obr.OBR_4 = "ORDER^DESCRIPTION"
                # add spm and obr to the RSP_K11 response
                response.add(spm)
                response.add(obr)
            else:
                response = LIP.nak(m)
        return response.to_mllp() # encode to ER7
Beispiel #7
0
    def reply(message):
        """
        Parse the incoming message and return the ER7 encoded response

        :param message: incoming message
        :return: response encoded to ER7 - it can be a NAK or RSP_K11 message
        """
        print("Received by LIP", repr(message))

        try:
            # parse the incoming message
            m = parse_message(message, find_groups=False)
        except:
            print('parsing failed', repr(message))
            response = LIP.nak()
        else:
            print("Message type:", m.MSH.message_type.to_er7())
            print("Message content:", repr(m.to_er7()))
            if m.MSH.MSH_9.MSH_9_3.to_er7() == 'QBP_Q11':
                # create a new RSP_K11 message
                response = Message("RSP_K11")
                response.MSH.MSH_9 = "RSP^K11^RSP_K11"
                # add MSA segment
                response.MSA = "MSA|AA"
                response.MSA.MSA_2 = m.MSH.MSH_10
                # create a QAK segment
                qak = Segment("QAK")
                qak.qak_1 = m.QPD.QPD_2
                qak.qak_2 = "OK"
                qak.qak_3 = "Q22^Specimen Labeling Instructions^IHE_LABTF"
                qak.qak_4 = "1"
                # add the QAK segment to the RSP_K11 message
                response.add(qak)
                # copy the QPD segment from the incoming message
                response.QPD = m.QPD
                # create a PID segment
                response.PID.PID_1 = '1'
                response.PID.PID_5.PID_5_1 = 'PATIENT_SURNAME'
                response.PID.PID_5.PID_5_2 = 'PATIENT_NAME'
                response.PID.PID_6 = "19800101"
                response.PID.PID_7 = "F"
                # create a SPM segment
                spm = Segment("SPM")
                # create an OBR segment
                obr = Segment("OBR")
                spm.SPM_1 = '1'
                spm.SPM_2 = "12345"
                obr.OBR_4 = "ORDER^DESCRIPTION"
                # add spm and obr to the RSP_K11 response
                response.add(spm)
                response.add(obr)
            else:
                response = LIP.nak(m)
        return response.to_mllp()  # encode to ER7
Beispiel #8
0
    def _build_default_response(self):
        inc_msg = parse_message(self.incoming_message)

        m = Message("ACK")
        m.MSH.MSH_9 = "ACK^ACK"
        m.MSA.MSA_1 = "AR"
        m.MSA.MSA_2 = inc_msg.MSH.MSH_10
        m.ERR.ERR_1 = "%s" % self.error_code
        m.ERR.ERR_2 = "%s" % self.error_msg

        return m.to_mllp()
Beispiel #9
0
 def send(patient_id):
     # create a QBP_Q11 query message for the given patient_id
     m = Message("QBP_Q11")
     m.MSH.sending_application = "LB module" # same as m.msh.msh_3
     m.MSH.receiving_application = "LIP module" # same as m.msh.msh_5
     m.MSH.MSH_9 = "QBP^SLI^QBP_Q11"
     m.MSH.MSH_10 = uuid.uuid4().hex
     m.QPD.QPD_1 = "SLI^Specimen Labeling Instructions^IHE_LABTF"
     m.QPD.query_tag = uuid.uuid4().hex
     m.QPD.QPD_3 = patient_id
     m.RCP = "RCP|I||R"
     return m.to_mllp()
Beispiel #10
0
 def send(patient_id):
     # create a QBP_Q11 query message for the given patient_id
     m = Message("QBP_Q11")
     m.MSH.sending_application = "LB module"  # same as m.msh.msh_3
     m.MSH.receiving_application = "LIP module"  # same as m.msh.msh_5
     m.MSH.MSH_9 = "QBP^SLI^QBP_Q11"
     m.MSH.MSH_10 = uuid.uuid4().hex
     m.QPD.QPD_1 = "SLI^Specimen Labeling Instructions^IHE_LABTF"
     m.QPD.query_tag = uuid.uuid4().hex
     m.QPD.QPD_3 = patient_id
     m.RCP = "RCP|I||R"
     return m.to_mllp()
Beispiel #11
0
def enviar(patient_id):
    # cria uma mensagem de consulta QBP_Q11 de acordo com o id do paciente
    m = Message("QBP_Q11")
    m.MSH.sending_application = "Cliente"
    m.MSH.receiving_application = "Servidor"
    m.MSH.MSH_9 = "QBP^SLI^QBP_Q11"
    m.MSH.MSH_10 = uuid.uuid4().hex
    m.QPD.QPD_1 = "SLI^Specimen Labeling Instructions^IHE_LABTF"
    m.QPD.query_tag = uuid.uuid4().hex
    m.QPD.QPD_3 = patient_id
    m.RCP = "RCP|I||R"
    return m.to_mllp()
Beispiel #12
0
def genACK(msg, encoding):
    try:
        m = pm(msg.decode(encoding))
        res = Message('RSP_K11')
        res.MSH.MSH_9 = 'RSP^K11^RSP_K11'
        res.MSA = "MSA|AA"
        res.MSA.MSA_2 = m.MSH.MSH_10
    except AttributeError as e:
        print("Impossible to generate ACK: {0}".format(e))
        res = Message('RSP_K11')
        res.MSH.MSH_9 = 'RSP^K11^RSP_K11'
        res.MSA = "MSA|AA"
    except:
        print("Error trying to generate ACK: ", sys.exc_info()[0])
        res = Message('RSP_K11')
        res.MSH.MSH_9 = 'RSP^K11^RSP_K11'
        res.MSA = "MSA|AA"
    finally:
        return res.to_mllp()
Beispiel #13
0
    def reply(self):

        if isinstance(self.exc, UnsupportedMessageType):
            err_code, err_msg = 101, 'Unsupported message'
        elif isinstance(self.exc, InvalidHL7Message):
            err_code, err_msg = 102, 'Incoming message is not an HL7 valid message'
        else:
            err_code, err_msg = 100, 'Unknown error occurred'

        parsed_message = parse_message(self.incoming_message)

        m = Message("ACK")
        m.MSH.MSH_9 = "ACK^ACK"
        m.MSA.MSA_1 = "AR"
        m.MSA.MSA_2 = parsed_message.MSH.MSH_10
        m.ERR.ERR_1 = "%s" % err_code
        m.ERR.ERR_2 = "%s" % err_msg

        return m.to_mllp()
                        # answer with pcd-05 message
                        print("************ Got Alarm {} ************".format(
                            alarmTypeTxt))
                        print("Full message {}: \n{}".format(
                            datetime.now(), pretty(m)))
                        counter = m.children.get("OBR").children.get(
                            "OBR_3").children[0].value
                        alarmId = m.children.get("OBR").children.get(
                            "OBR_3").children[1].value
                        answer.msh.children.get(
                            "MSH_9").value = "ORA^R41^ORA_R41"
                        answer.msh.children.get("MSH_4").value = "MockAM"
                        answer.add_segment("OBR").children.get(
                            "OBR_3").value = "{}^{}".format(counter, alarmId)
                        answer.add_segment("PRT").children.get(
                            "PRT_3").value = "Delivered"
                        answer.msh.children.get(
                            "MSH_10").value = m.msh.children.get(
                                "MSH_10").value
                    print("Answering {}: \n{}".format(datetime.now(),
                                                      pretty(answer)))
                    inSock.sendall(answer.to_mllp().encode('UTF-8'))
                    print("*******************************")
                else:
                    print("Got unknown message type: {}".format(msgType))
            except:
                traceback.print_exc()
        except HL7apyException as e:
            traceback.print_exc()
    print("This is the end...")