def _filter_order_fields(self, resource, pid): fhir_resource = SimpleFhirR4Reader(resource) summary = ParticipantSummaryDao().get(pid) if not summary: raise BadRequest('No summary for particpant id: {}'.format(pid)) code_dict = summary.asdict() format_json_code(code_dict, self.code_dao, 'genderIdentityId') format_json_code(code_dict, self.code_dao, 'stateId') # MayoLink api has strong opinions on what should be sent and the order of elements. Dont touch. order = { 'order': { 'collected': fhir_resource.authoredOn, 'account': '', 'number': fhir_resource.extension.get( url=VIBRENT_BARCODE_URL).valueString, 'patient': { 'medical_record_number': str(summary.biobankId), 'first_name': '*', 'last_name': str(summary.biobankId), 'middle_name': '', 'birth_date': '3/3/1933', 'gender': code_dict['genderIdentity'], 'address1': summary.streetAddress, 'address2': summary.streetAddress2, 'city': summary.city, 'state': code_dict['state'], 'postal_code': str(summary.zipCode), 'phone': str(summary.phoneNumber), 'account_number': None, 'race': summary.race, 'ethnic_group': None }, 'physician': { 'name': None, 'phone': None, 'npi': None }, 'report_notes': fhir_resource.extension.get(url=VIBRENT_ORDER_URL).valueString, 'tests': { 'test': { 'code': '1SAL2', 'name': 'PMI Saliva, FDA Kit', 'comments': None } }, 'comments': 'Salivary Kit Order, direct from participant' } } return order
def _filter_order_fields(self, resource, pid): fhir_resource = SimpleFhirR4Reader(resource) summary = ParticipantSummaryDao().get(pid) if not summary: raise BadRequest('No summary for participant id: {}'.format(pid)) code_dict = summary.asdict() format_json_code(code_dict, self.code_dao, 'genderIdentityId') format_json_code(code_dict, self.code_dao, 'stateId') if 'genderIdentity' in code_dict and code_dict['genderIdentity']: if code_dict['genderIdentity'] == 'GenderIdentity_Woman': gender_val = 'F' elif code_dict['genderIdentity'] == 'GenderIdentity_Man': gender_val = 'M' else: gender_val = 'U' else: gender_val = 'U' order_id = int(fhir_resource.basedOn[0].identifier.value) with self.session() as session: result = session.query(BiobankDVOrder.barcode).filter( BiobankDVOrder.order_id == order_id).first() barcode = None if not result else result if isinstance( result, str) else result.barcode # MayoLink api has strong opinions on what should be sent and the order of elements. Dont touch. order = { 'order': { 'collected': fhir_resource.occurrenceDateTime, 'account': '', 'number': barcode, 'patient': { 'medical_record_number': str(to_client_biobank_id(summary.biobankId)), 'first_name': '*', 'last_name': str(to_client_biobank_id(summary.biobankId)), 'middle_name': '', 'birth_date': '3/3/1933', 'gender': gender_val, 'address1': summary.streetAddress, 'address2': summary.streetAddress2, 'city': summary.city, 'state': code_dict['state'], 'postal_code': str(summary.zipCode), 'phone': str(summary.phoneNumber), 'account_number': None, 'race': summary.race, 'ethnic_group': None }, 'physician': { 'name': 'None', # must be a string value, not None. 'phone': None, 'npi': None }, 'report_notes': fhir_resource.extension.get(url=DV_ORDER_URL).valueString, 'tests': { 'test': { 'code': '1SAL2', 'name': 'PMI Saliva, FDA Kit', 'comments': None } }, 'comments': 'Salivary Kit Order, direct from participant' } } return order