Esempio n. 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()
Esempio n. 2
0
 def test_delete_group(self):
     m = Message('OML_O33',  validation_level=VALIDATION_LEVEL.QUIET)
     g = Group ('OML_O33_PATIENT')
     m.add(g)
     self.assertEqual(m.oml_O33_patient.name, 'OML_O33_PATIENT' )
     del m.oml_o33_patient
     self.assertFalse(g in m.children)
Esempio n. 3
0
 def test_add_segment_to_message_mix(self):
     a = Message('OML_O33',  validation_level=VALIDATION_LEVEL.QUIET)
     msh = Segment('MSH', validation_level=VALIDATION_LEVEL.QUIET)
     pid = Segment('PID', validation_level=VALIDATION_LEVEL.QUIET)
     g = Group('OML_O33_PATIENT')
     g.add(pid)
     a.add(msh)
     a.add(g)
Esempio n. 4
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
Esempio n. 5
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
Esempio n. 6
0
class HL7_Generator:
    def __init__(self):
        self.m = Message()

    def generate_MSH(self):
        """**********MSH Segment**********
        List of fields utilized in this segment :
        Sr. No. | Field Sequence Number | Field Name   
            1   |       17              | Country Code
            2   |       19              | Principal Language Used"""

        # assign values to fields in MSH Segment
        self.m.msh.msh_17 = country_code
        self.m.msh.msh_19 = principal_lang

    def generate_EVN(self):
        """
        **********EVN Segment**********
        List of fields utilized in this segment :
        Sr. No. | Field Sequence Number | Field Name   
            1   |       1               | Event Code
            2   |       6               | Event Occured
        """

        # assign values to fields in EVN Segment
        self.m.evn.evn_1 = event_code
        self.m.evn.evn_2 = self.m.msh.msh_7
        self.m.evn.evn_6 = event_reason

    def generate_PID(self):
        """
        **********PID Segment**********
        List of fields utilized in this segment :
        Sr. No. | Field Sequence Number |   Field Name   
            1   |       5               | Name (Last Name, First Name, Middle Name)
            2   |       6               | Mother's Maiden Name
            3   |       7               | Date of Birth
            4   |       8               | Sex
            5   |       12              | Country Code
            6   |       13              | Contact Numbers (Contact No. 1, Contact No. 2)
            7   |       16              | Marital Status
            8   |       17              | Religion
        """

        # assign values to fields in PID Segment
        self.m.pid.pid_5.pid_5_1 = last_name
        self.m.pid.pid_5.pid_5_2 = first_name
        self.m.pid.pid_5.pid_5_3 = middle_name
        self.m.pid.pid_6 = mother_name
        self.m.pid.pid_7 = dob
        self.m.pid.pid_8 = sex
        self.m.pid.pid_12 = country_code
        self.m.pid.pid_13.pid_13_1 = contact_no_1
        self.m.pid.pid_13.pid_13_2 = contact_no_2
        self.m.pid.pid_16 = marital_status
        self.m.pid.pid_17 = religion

    def generate_OBX(self):
        """
        **********OBX Segment********** 
        Generate a separate OBX Segement for each of the following observations :
        Sr. No. | Field Sequence Number |   Field Description   
            1   |       1               |   Observation Sequence ID   
            2   |       3               |   Observation Identifier (Observation Sequence ID, Observation Name)
            3   |       5               |   Observation Value
            4   |       6               |   Units
            4   |       14              |   Observation Timestamp
        """

        # date_time = datetime.fromtimestamp(timestamp)
        # d = date_time.strftime("\'%Y-%m-%d %H:%M:%S\' UTC")

        for each in records:
            for i in range(len(obx_codes)):
                obx = Segment('OBX')
                obx.obx_1 = each['record_id']
                obx.obx_3 = obx_codes[i]
                obx.obx_5 = str(each['obx_test'][i])
                obx.obx_6 = obx_units[i]
                obx.obx_14 = each['timestamp']
                self.m.add(obx)

    def generate_NK1(self):
        self.m.nk1.nk1_1 = kin_patient_id
        self.m.nk1.nk1_2.nk1_2_1 = kin_last_name
        self.m.nk1.nk1_2.nk1_2_2 = kin_first_name
        self.m.nk1.nk1_2.nk1_2_3 = kin_middle_name
        self.m.nk1.nk1_3 = relationship
        self.m.nk1.nk1_4 = kin_address
        self.m.nk1.nk1_5 = kin_phone_no
        self.m.nk1.nk1_6 = kin_biz_phone_no
        # self.m.nk1.nk1_10 = kin_job_title
        # self.m.nk1.nk1_13 = kin_organization
        self.m.nk1.nk1_14 = kin_marital_status
        self.m.nk1.nk1_15 = kin_sex
        self.m.nk1.nk1_16 = kin_dob
        self.m.nk1.nk1_19 = kin_citizenship
        self.m.nk1.nk1_20 = kin_primary_lang
        self.m.nk1.nk1_25 = kin_religion
        self.m.nk1.nk1_26 = kin_mother_name
        self.m.nk1.nk1_27 = country_code
        self.m.nk1.nk1_34 = kin_job_status
        self.m.nk1.nk1_37 = kin_aadhaar_no

    def generate_DG1(self):
        self.m.dg1.dg1_1 = case_id
        self.m.dg1.dg1_2 = 'ICD'
        self.m.dg1.dg1_3 = danger_code
        self.m.dg1.dg1_16 = practitioner_id

    def to_hl7(self):
        # f = open('er7.txt','w')
        self.generate_MSH()
        self.generate_EVN()
        self.generate_PID()
        self.generate_OBX()
        self.generate_NK1()
        self.generate_DG1()
        for child in self.m.children:
            # f.write(child.to_er7() + '\n')
            print(child.to_er7())
Esempio n. 7
0
 def test_add_known_segment_to_empty_message(self):
     a = Message('OML_O33')
     a.add(Segment('MSA'))
Esempio n. 8
0
 def test_add_not_allowed_segment_to_known_message(self):
     a = Message('OML_O33', validation_level=VALIDATION_LEVEL.STRICT)
     self.assertRaises(ChildNotValid, a.add, Segment('MSA'))
     b = Message('OML_O33')
     b.add(Segment('MSA'))
Esempio n. 9
0
 def test_add_empty_children_to_message(self):
     a = Message('OML_O33', validation_level=VALIDATION_LEVEL.STRICT)
     self.assertRaises(ChildNotValid, a.add, Group())
     b = Message('OML_O33')
     b.add(Group())
Esempio n. 10
0
 def test_delete_segment(self):
     m = Message('OML_O33')
     pid = Segment('PID')
     m.add(pid)
     del m.pid
     self.assertFalse(pid in m.children)
Esempio n. 11
0
 def test_add_known_group_to_empty_message(self):
     a = Message('OML_O33')
     a.add(Group('OML_O33_PATIENT'))