visit_occurrence.py · fhir2omop
refs/refs/fhir-x-omop/fhir_x_omop/to_omop/visit_occurrence.py
lines 41–46
56 lines · py
1from fhir.resources.encounter import Encounter 2from omop_pydantic import VisitOccurrence 4from chidian import DataMapping, Mapper 5import chidian.partials as p 7def get_attending_provider_id(participants): 10 for participant in participants: 11 if (participant.type and 12 participant.type[0].coding and 13 participant.type[0].coding[0].code == 'ATND' and 14 participant.individual and 15 participant.individual.reference): 16 return int(participant.individual.reference.split('/')[1]) 19visit_occurrence_mapper = Mapper( 21 "visit_occurrence_id": (p.get("id") | p.int())(src), 22 "person_id": p.get("subject.reference", getter=lambda x: int(x.split('/')[1]) if x else None)(src), 23 "visit_concept_id": p.case(p.get("class.code")(src), { 24 "IMP": 9201, # Inpatient Visit 25 "AMB": 9202, # Outpatient Visit 26 "EMER": 9203, # Emergency Room Visit 27 "HH": 581379, # Home Health 28 "VR": 32036, # Virtual 29 }, default=9202), # Default to Outpatient 30 "visit_start_date": p.get("period.start", getter=lambda x: x.split('T')[0] if x else None)(src), 31 "visit_start_datetime": p.get("period.start")(src), 32 "visit_end_date": p.get("period.end", getter=lambda x: x.split('T')[0] if x else None)(src), 33 "visit_end_datetime": p.get("period.end")(src), 34 "visit_type_concept_id": 44818518, # Visit derived from EHR 35 "provider_id": p.get("participant", getter=get_attending_provider_id)(src), 36 "care_site_id": p.get("serviceProvider.reference", getter=lambda x: int(x.split('/')[1]) if x else None)(src), 37 "visit_source_value": p.get("type[0].coding[0].code")(src), 38 "visit_source_concept_id": 0, 39 "admitted_from_concept_id": 0, 40 "admitted_from_source_value": p.get("hospitalization.admitSource.coding[0].code")(src), 41 "discharge_to_concept_id": p.case(p.get("hospitalization.dischargeDisposition.coding[0].code")(src), { 47 "discharge_to_source_value": p.get("hospitalization.dischargeDisposition.coding[0].display")(src), 48 "preceding_visit_occurrence_id": None, 52to_omop_visit_occurrence = DataMapping( 53 mapper=visit_occurrence_mapper, 54 input_schema=Encounter, 55 output_schema=VisitOccurrence,