defcompute_completeness_predictor_per_visit(self,data:Data,start_date:datetime,end_date:datetime,care_site_levels:Union[bool,str,List[str]],stay_types:Union[bool,str,Dict[str,str]],care_site_ids:List[int],care_site_short_names:List[str],care_site_specialties:Union[bool,List[str]],care_sites_sets:Union[str,Dict[str,str]],specialties_sets:Union[str,Dict[str,str]],extra_data:Data,length_of_stays:List[float],note_types:Union[str,Dict[str,str]],age_ranges:List[int],gender_source_values:Union[bool,str,Dict[str,str]],condition_types:Union[bool,str,Dict[str,str]],provenance_sources:Union[bool,str,Dict[str,str]],stay_sources:Union[bool,str,Dict[str,str]],drg_sources:Union[bool,str,Dict[str,str]],**kwargs):r"""Script to be used by [``compute()``][edsteva.probes.base.BaseProbe.compute] The ``per_visit`` algorithm computes $c_(t)$ the availability of clinical documents linked to patients' administrative stays: $$ c(t) = \frac{n_{with\,doc}(t)}{n_{visit}(t)} $$ Where $n_{visit}(t)$ is the number of administrative stays, $n_{with\,doc}$ the number of visits having at least one document and $t$ is the month. """self._note_columns=list(set(["note_type"]).intersection(set(self._index)))self._metrics=["c","n_visit","n_visit_with_note"]check_tables(data=data,required_tables=["note","visit_occurrence","care_site","fact_relationship",],)care_site_relationship=prepare_care_site_relationship(data=data,)self.care_site_relationship=care_site_relationshipperson=(prepare_person(data,gender_source_values)if(age_rangesorgender_source_values)elseNone)cost=prepare_cost(data,drg_sources)ifdrg_sourceselseNonevisit_occurrence=prepare_visit_occurrence(data=data,start_date=start_date,end_date=end_date,stay_types=stay_types,length_of_stays=length_of_stays,provenance_sources=provenance_sources,stay_sources=stay_sources,cost=cost,person=person,age_ranges=age_ranges,)ifcondition_types:check_tables(data=data,required_tables=["condition_occurrence",],)conditions=prepare_condition_occurrence(data,extra_data=None,visit_occurrence=None,source_systems="ORBIS",diag_types=None,condition_types=condition_types,start_date=start_date,end_date=end_date,)[["visit_occurrence_id","condition_type"]].drop_duplicates()visit_occurrence=visit_occurrence.merge(conditions,on="visit_occurrence_id")care_site=prepare_care_site(data=data,care_site_ids=care_site_ids,care_site_short_names=care_site_short_names,care_site_relationship=care_site_relationship,care_site_specialties=care_site_specialties,care_sites_sets=care_sites_sets,specialties_sets=specialties_sets,)note=prepare_note(data,note_types)hospital_visit=get_hospital_visit(self,note,visit_occurrence,care_site)hospital_name=CARE_SITE_LEVEL_NAMES["Hospital"]note_predictor_by_level={hospital_name:hospital_visit}# UF selectionifnothospital_only(care_site_levels=care_site_levels):ifextra_data:# pragma: no covervisit_detail=prepare_visit_detail(data,start_date,end_date)uf_visit,uc_visit,uh_visit=get_visit_detail(self,extra_data=extra_data,note=note,visit_occurrence=visit_occurrence,visit_detail=visit_detail,care_site=care_site,)uf_name=CARE_SITE_LEVEL_NAMES["UF"]note_predictor_by_level[uf_name]=uf_visituc_name=CARE_SITE_LEVEL_NAMES["UC"]note_predictor_by_level[uc_name]=uc_visituh_name=CARE_SITE_LEVEL_NAMES["UH"]note_predictor_by_level[uh_name]=uh_visitpole_visit=get_pole_visit(uf_visit,care_site,care_site_relationship)pole_name=CARE_SITE_LEVEL_NAMES["Pole"]note_predictor_by_level[pole_name]=pole_visitelse:logger.info("Note data are only available at hospital level")care_site_levels=["Hospital"]# Concatenate all predictorsnote_predictor=concatenate_predictor_by_level(predictor_by_level=note_predictor_by_level,care_site_levels=care_site_levels,)ifis_koalas(note_predictor):note_predictor.spark.cache()returncompute_completeness(self,note_predictor)