R/btbv5.R

Defines functions btbv5

Documented in btbv5

#' btbv5
#'
#' @param df
#' @param osa_group_p
#' @param osa_class_p
#' @param osa_specialization_p
#'
#' @return
#' @export
#'
#' @examples
btbv5 <- function(df,
                  osa_group_p,
                  osa_class_p,
                  osa_specialization_p){
  df[,`:=`(
    cleaned_names =       pmap(.l=list(surg_sp_name_clean,
                                       surg_bp_name_clean,
                                       faci_sp_name_clean,
                                       faci_bp_name_clean,
                                       surg_sp_npi,
                                       surg_bp_npi,
                                       faci_sp_npi,
                                       faci_bp_npi
    ),
    .f=create_clean_sp_bp_names)
  )] %>%
    .[,`:=`(
      doctor_str = cleaned_names %>% map_chr(~.[[1]]),
      facility_str = cleaned_names %>% map_chr(~.[[2]]),
      doctor_npi_str = cleaned_names %>% map_chr(~.[[3]]),
      facility_npi_str = cleaned_names %>% map_chr(~.[[4]])

    )] %>%


    # create primary doctor and facility

    .[, `:=`(
      num_doc = doctor_str %>% map_int(count_number_provider),
      num_fac = facility_str %>% map_int(count_number_provider),
      hospital_detects = facility_str %>% map_int(filter_strange_hosp_combo)
    )] %>%
    .[num_doc < 3 & hospital_detects < 2 ] %>%
    .[,most_important_fac := facility_str%>% map_chr(filter_out_most_important_facility)] %>%
    .[,most_important_fac_npi := pmap_chr(.l=list(most_important_fac, facility_str, facility_npi_str),
                                          .f=get_most_important_facility_npi)] %>%
    .[most_important_fac!="UNEVEN NPI-NAME SET"] %>%
    .[,most_important_fac_npi:= fifelse(most_important_fac_npi=="NOT SPECIFIED",
                                        "0",
                                        most_important_fac_npi) %>% as.numeric()
      ]%>%
    .[, c("doctor_npi_str1" , "doctor_npi_str2") := tstrsplit(doctor_npi_str, ", ", fixed=T)]%>%
    .[, c("doctor_str1" , "doctor_str2") := tstrsplit(doctor_str, ", ", fixed=T)] %>%
    .[,jw :=jarowinkler(doctor_str1, doctor_str2)] %>%
    .[,`:=`(doctor_str2 = ifelse(jw >.9,
                                 NA,
                                 doctor_str2),
            doctor_npi_str2 = ifelse(jw >.9,
                                     NA,
                                     doctor_npi_str2)
    ) ] %>%
    .[,`:=`(
      doctor_npi_str1 = fifelse(doctor_npi_str1=="NOT SPECIFIED",
                                "0",
                                doctor_npi_str1) %>% as.numeric(),
      doctor_npi_str2 = ifelse(doctor_npi_str2=="NOT SPECIFIED",
                               "0",
                               doctor_npi_str2) %>% as.numeric()
    )] %>%
    #Fix the issue where there were facilities with the same name, but multiple NPIs.
    as.data.frame() %>%
    as.data.table() %>%
    .[,doctor_str2 := ifelse(doctor_str2=="NA",
                             NA,
                             doctor_str2)] %>%
    .[,`:=`(doctor_str1 = doctor_str1 %>% stri_trim_both(),
            doctor_str2 = doctor_str2 %>% stri_trim_both(),
            most_important_fac = most_important_fac %>% stri_trim_both(),
            doctor_npi_str1 = doctor_npi_str1 %>% stri_trim_both(),
            doctor_npi_str2 = doctor_npi_str2 %>% stri_trim_both(),
            most_important_fac_npi = most_important_fac_npi %>% stri_trim_both())] %>%


    .[,
      primary_doctor := pmap(.l=list(doctor_npi1=doctor_npi_str1,
                                     doctor_npi2=doctor_npi_str2,
                                     group_reqs= osa_group_p,
                                     class_reqs=osa_class_p,
                                     specialization_reqs = osa_specialization_p
      ),
      .f=calculate_primary_doctor) %>% as.character()
      ] %>%
    #Filter out any procedures where our doctors fail both criteria.
    .[!(primary_doctor %in% c("BOTH_DOC_FAIL_CRIT", "TWO_FIT_ALL_SPECS"))] %>%
    .[,primary_doctor_npi := fifelse(primary_doctor==doctor_str1,
                                     doctor_npi_str1,
                                     doctor_npi_str2)] %>%
    # .[,`:=`(
    #   procedure_type=2,
    #   procedure_modifier = "Standard Knee Replacement"
    # )]




    .[,.(
      primary_doctor_npi = max(primary_doctor_npi),
      most_important_fac_npi = max(most_important_fac_npi),
      tp_med_surg = median(surg_bun_sum_med),
      tp_med_medi = median(medi_bun_sum_med),
      tp_med_radi = median(radi_bun_sum_med),
      tp_med_path = median(path_bun_sum_med),
      tp_med_anes = median(anes_bun_sum_med),
      tp_med_faci = median(faci_bun_sum_med),
      proc_code_str_sorted = paste0(proc_code_str_sorted, collapse="|"),
      tp_med_med = median(tp_med),
      tp_cnt_cnt = sum(cnt)
    ),by=c("primary_doctor", "most_important_fac")] #%>%
  # .[, `:=`(
  #   num_doc = doctor_str %>% map_int(count_number_provider),
  #   num_fac = facility_str %>% map_int(count_number_provider),
  #   hospital_detects = facility_str %>% map_int(filter_strange_hosp_combo)
  # )] %>%
  # .[num_doc < 3 & hospital_detects < 2 ] %>%
  # .[,most_important_fac := facility_str%>% map_chr(filter_out_most_important_facility)] %>%
  # .[,most_important_fac_npi := pmap_chr(.l=list(most_important_fac, facility_str, facility_npi_str),
  #                                   .f=get_most_important_facility_npi)] %>%
  # .[most_important_fac!="UNEVEN NPI-NAME SET"] %>%
  # .[,most_important_fac_npi:= fifelse(most_important_fac_npi=="NOT SPECIFIED",
  #                                     "0",
  #                                     most_important_fac_npi) %>% as.numeric()
  #   ]%>%
  # .[, c("doctor_npi_str1" , "doctor_npi_str2") := tstrsplit(doctor_npi_str, ", ", fixed=T)]%>%
  # .[, c("doctor_str1" , "doctor_str2") := tstrsplit(doctor_str, ", ", fixed=T)] %>%
  # .[,jw :=jarowinkler(doctor_str1, doctor_str2)] %>%
  # .[,`:=`(doctor_str2 = ifelse(jw >.9,
  #                           NA,
  #                          doctor_str2),
  #         doctor_npi_str2 = ifelse(jw >.9,
  #                           NA,
  #                          doctor_npi_str2)
  #         ) ] %>%
  # .[,`:=`(
  #   doctor_npi_str1 = fifelse(doctor_npi_str1=="NOT SPECIFIED",
  #                                     "0",
  #                                     doctor_npi_str1) %>% as.numeric(),
  #   doctor_npi_str2 = fifelse(doctor_npi_str2=="NOT SPECIFIED",
  #                                     "0",
  #                                     doctor_npi_str2) %>% as.numeric()
  # )] %>%
  # #Fix the issue where there were facilities with the same name, but multiple NPIs.
  #   as.data.frame() %>%
  #   as.data.table() %>%
  # .[,doctor_str2 := ifelse(doctor_str2=="NA",
  #                          NA,
  #                          doctor_str2)] %>%
  #   .[,`:=`(doctor_str1 = doctor_str1 %>% stri_trim_both(),
  #           doctor_str2 = doctor_str2 %>% stri_trim_both(),
  #           most_important_fac = most_important_fac %>% stri_trim_both(),
  #           doctor_npi_str1 = doctor_npi_str1 %>% stri_trim_both(),
  #           doctor_npi_str2 = doctor_npi_str2 %>% stri_trim_both(),
  #           most_important_fac_npi = most_important_fac_npi %>% stri_trim_both())] %>%
  #   .[,.(tp_med_med=median(tp_med_med),
  #               tp_med_surg = median(tp_med_surg),
  #               tp_med_medi = median(tp_med_medi),
  #               tp_med_radi = median(tp_med_radi),
  #               tp_med_path = median(tp_med_path),
  #               tp_med_anes = median(tp_med_anes),
  #               tp_med_faci = median(tp_med_faci),
  #               tp_cnt_cnt=sum(tp_cnt_cnt),
  #               # procedure_type=procedure_type,
  #               # procedure_modifier=procedure_modifier,
  #               doctor_npi_str1=doctor_npi_str1,
  #               doctor_npi_str2=doctor_npi_str2,
  #               most_important_fac_npi=max(most_important_fac_npi)
  #        ),
  #     by=list(doctor_str1,
  #          doctor_str2,
  #          most_important_fac
  #          )] %>%
  #   unique()

}
utah-osa/hcctools2 documentation built on March 22, 2021, 3:51 p.m.