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