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()
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)
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()
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()
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()
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
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
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()
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()
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()
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()
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()
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...")