def create_message_segment_registration_details(self) -> MessageSegmentDeathRegistrationDetails:
        """
        Create the message segment registration details for a death from the fhir operation
        :return: MessageSegmentDeathRegistrationDetails
        """

        transaction_number = finders.get_parameter_value(fhir_operation=self.fhir_operation,
                                                         parameter_name=ParameterName.TRANSACTION_NO)

        practitioner_details = finders.find_resource(fhir_operation=self.fhir_operation,
                                                     resource_type=ResourceType.PRACTITIONER)
        party_id = f"{practitioner_details.identifier[0].value},{practitioner_details.identifier[1].value}"

        patient_details = finders.find_resource(fhir_operation=self.fhir_operation, resource_type=ResourceType.PATIENT)

        deceased_date_time = patient_details.deceasedDateTime.as_json()
        formatted_deceased_date_time = date_formatter.format_date(date_time=deceased_date_time, format_qualifier="102")

        free_text = finders.get_parameter_value(fhir_operation=self.fhir_operation,
                                                parameter_name=ParameterName.FREE_TEXT)

        msg_seg_registration_details = MessageSegmentDeathRegistrationDetails(transaction_number=transaction_number,
                                                                              party_id=party_id,
                                                                              date_time=formatted_deceased_date_time,
                                                                              free_text=free_text)
        return msg_seg_registration_details
コード例 #2
0
    def create_interchange(
            self,
            fhir_operation: OperationDefinition) -> Tuple[str, str, str, str]:
        """
        Create the edifact interchange from the fhir operation definition
        :param fhir_operation: The operation definition payload
        :return: a tuple consisting of the sender cypher, recipient cypher, interchange sequence number
        and the generated edifact interchange.
        """
        interchange_sequence_number = finders.get_parameter_value(
            fhir_operation, parameter_name=ParameterName.INTERCHANGE_SEQ_NO)
        sender_cypher = finders.get_parameter_value(
            fhir_operation, parameter_name=ParameterName.SENDER_CYPHER)
        nhais_cypher = finders.get_parameter_value(
            fhir_operation, parameter_name=ParameterName.NHAIS_CYPHER)
        recipient = common_adaptor.generate_recipient_from(nhais_cypher)
        formatted_date_time = date_formatter.format_date(
            date_time=fhir_operation.date.as_json())

        message_adaptor = self.operation_dict[
            fhir_operation.name]["messageAdaptor"](fhir_operation)

        messages = Messages(messages=[message_adaptor.create_message()])

        interchange = Interchange(sender=sender_cypher,
                                  recipient=recipient,
                                  sequence_number=interchange_sequence_number,
                                  date_time=formatted_date_time,
                                  messages=messages)

        edifact_interchange = (sender_cypher, recipient,
                               interchange_sequence_number,
                               interchange.to_edifact())

        return edifact_interchange
    def create_message_beginning(self) -> MessageBeginning:
        """
        Create the beginning of the message
        :return: MessageBeginning
        """
        nhais_id = finders.get_parameter_value(
            fhir_operation=self.fhir_operation,
            parameter_name=ParameterName.NHAIS_CYPHER)

        ref_number = self.get_reference_number()
        formatted_date_time = date_formatter.format_date(
            date_time=self.fhir_operation.date.as_json(),
            format_qualifier="203")

        msg_bgn = MessageBeginning(party_id=nhais_id,
                                   date_time=formatted_date_time,
                                   ref_number=ref_number)

        return msg_bgn
    def create_message_segment_patient_detail(self) -> MessageSegmentBirthPatientDetails:
        """
        Create the message segment patient details for a birth registration from the fhir operation
        :return: MessageSegmentBirthPatientDetails
        """
        gender_map = {'unknown': 0, 'male': 1, 'female': 2, 'other': 9}

        patient = finders.find_resource(self.fhir_operation, resource_type=ResourceType.PATIENT)

        edi_name = create_patient_name(patient.name[0])

        edi_address = create_patient_address(patient.address[0])

        formatted_date_of_birth = date_formatter.format_date(date_time=patient.birthDate.as_json(),
                                                             format_qualifier="102", current_format="%Y-%m-%d")

        msg_seg_patient_details = MessageSegmentBirthPatientDetails(id_number=patient.identifier[0].value,
                                                                    name=edi_name,
                                                                    date_of_birth=formatted_date_of_birth,
                                                                    gender=gender_map[patient.gender],
                                                                    address=edi_address)
        return msg_seg_patient_details
    def create_message_segment_registration_details(self) -> MessageSegmentBirthRegistrationDetails:
        """
        Create the message segment registration details for a birth registration from the fhir operation
        :return: MessageSegmentBirthRegistrationDetails
        """

        transaction_number = finders.get_parameter_value(fhir_operation=self.fhir_operation,
                                                         parameter_name=ParameterName.TRANSACTION_NO)

        practitioner_details = finders.find_resource(fhir_operation=self.fhir_operation,
                                                     resource_type=ResourceType.PRACTITIONER)
        party_id = f"{practitioner_details.identifier[0].value},{practitioner_details.identifier[1].value}"

        patient_details = finders.find_resource(fhir_operation=self.fhir_operation, resource_type=ResourceType.PATIENT)
        birth_location = patient_details.extension[0].valueAddress.city
        formatted_date_time = date_formatter.format_date(date_time=self.fhir_operation.date.as_json(),
                                                         format_qualifier="102")

        msg_seg_registration_details = MessageSegmentBirthRegistrationDetails(transaction_number=transaction_number,
                                                                              party_id=party_id,
                                                                              date_time=formatted_date_time,
                                                                              location=birth_location)
        return msg_seg_registration_details
コード例 #6
0
 def test_format_date_when_current_format_is_not_the_default(self):
     date_time = "2019-04-23"
     formatted_date = formatter.format_date(date_time=date_time, format_qualifier="102", current_format="%Y-%m-%d")
     self.assertEqual(formatted_date, "20190423")
コード例 #7
0
 def test_format_date_for_qualifier_default(self):
     date_time = "2019-04-23 09:00:04.159338"
     formatted_date = formatter.format_date(date_time=date_time)
     self.assertEqual(formatted_date, "190423:0900")
コード例 #8
0
 def test_format_date_for_qualifier_102(self):
     date_time = "2019-04-23 09:00:04.159338"
     formatted_date = formatter.format_date(date_time=date_time, format_qualifier="102")
     self.assertEqual(formatted_date, "20190423")