You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

172 lines
6.2KB

  1. source("functionsOvalide.R")
  2. library(lubridate)
  3. # Date pour le rapport
  4. date <- format.Date(today(),format="%d/%m/%Y")
  5. # Récupération des arguments pour utilisation non interactive
  6. arguments <- commandArgs()
  7. if (length(arguments) != 13)
  8. {
  9. print ("Usage : donnees.sh CHUuser CHUpass ATIHuser ATIHpass LivenneUser LivennePass annee mois")
  10. quit()
  11. } else
  12. {
  13. CHUuser <- arguments[6]
  14. CHUpass <- arguments[7]
  15. ATIHuser <- arguments[8]
  16. ATIHpass <- arguments[9]
  17. user <- arguments[10]
  18. password <- arguments[11]
  19. annee <- as.numeric(arguments[12])
  20. mois <- as.numeric(arguments[13])
  21. }
  22. # Récupération des fichiers ePMSI
  23. print("1/9 - Connexion à ePMSI")
  24. connectOvalide(CHUuser, CHUpass, ATIHuser, ATIHpass)
  25. print(str_c("2/9 - Téléchargement du tableau de", mois, annee, sep = " "))
  26. getOvalide(CHUuser, CHUpass, annee, mois)
  27. print(str_c("3/9 - Téléchargement du tableau de", mois, annee - 1, sep = " "))
  28. getOvalide(CHUuser, CHUpass, annee - 1, mois)
  29. # Extraction des données des fichiers ePMSI
  30. print("4/9 - Extraction des tableaux ePMSI")
  31. read.csv2("listOvalide.csv") %>%
  32. {
  33. apply(., 1, . %>%
  34. {
  35. df <- extractOvalide(annee, mois, .[2], .[3])
  36. names(df) <- LETTERS[1:length(df)]
  37. df
  38. }) ->> Ovalide
  39. names(Ovalide) <<- .$name
  40. apply(., 1, . %>%
  41. {
  42. df <- extractOvalide(annee - 1, mois, .[2], .[3])
  43. names(df) <- LETTERS[1:length(df)]
  44. df
  45. }) ->> OvalideP
  46. names(OvalideP) <<- .$name
  47. }
  48. # Récupération des données ePMSI de 2015 fusionnées CCEG-CHU
  49. if (annee == 2016)
  50. {
  51. load("Ovalide.Rdata")
  52. OvalideP <- CCEGCHU2015[[str_c("mois", mois, sep = "")]]
  53. rm("CCEGCHU2015")
  54. }
  55. # Nettoyage des fichiers extraits. Les archives sont conservées.
  56. unlink(str_c("OVALIDE T2A.MCO.DGF", annee, mois, "html", sep = "."))
  57. unlink(str_c("OVALIDE T2A.MCO.DGF", annee - 1, mois, "html", sep = "."))
  58. # RUM + structure + calcul durée de séjour
  59. print("5/9 - LIVENNE : RUM et structure")
  60. src_mysql("pmsi_dim", "localhost", user = user, password = password) %>%
  61. tbl(sql("SELECT finess, idhosp, idrss, idrum, date_entree, date_sortie, cmd, um FROM fix116
  62. UNION
  63. SELECT finess, idhosp, idrss, idrum, date_entree, date_sortie, cmd, um FROM fix117")) %>%
  64. collect(n = Inf) %>%
  65. mutate(date_entree = date_entree %>% as.Date,
  66. date_sortie = date_sortie %>% as.Date) %>%
  67. left_join(src_mysql("pmsi_dim_nom", "localhost", user = user, password = password) %>%
  68. tbl("structure") %>%
  69. filter(um != "") %>%
  70. select(uf_date_ferm, um, service_libelle, pole_libelle) %>%
  71. arrange(um, uf_date_ferm) %>%
  72. distinct %>%
  73. collect(n = Inf) %>%
  74. add_rownames(var = "dummy") %>% # Dédoublonnage : 1 um -> 1 couple libellés
  75. group_by(um) %>%
  76. filter(dummy == last(dummy)) %>%
  77. select(-dummy, -uf_date_ferm) %>%
  78. ungroup) %>%
  79. mutate(idrss = ifelse(finess == "540000031", str_c("m", idrss), idrss)) %>% # maternité
  80. mutate(idrss = ifelse(finess == "540020112", str_c("c", idrss), idrss)) %>% # CCEG
  81. mutate(idhosp = idhosp %>% str_replace_all(" ", "")) %>%
  82. mutate(duree_rum = date_sortie - date_entree) %>% # durée rum
  83. left_join(group_by(., idrss) %>%
  84. summarise(duree_rss = sum(duree_rum))) -> rum
  85. # CLOS14 Hémato
  86. rum %<>%
  87. mutate(pole_libelle = ifelse(pole_libelle == "CLOS14 HEMATOLOGIE", "SPECIALITES MEDICALES", pole_libelle),
  88. service_libelle = ifelse(service_libelle == "CLOS14 HEMATO.S.INTENSIFS", "SERVICE HEMATOLOGIE", service_libelle))
  89. # Création des RSSs des 3 dernières années à partir des RUMs
  90. print("6/9 - Création des RSS")
  91. rum %>%
  92. group_by(idrss) %>%
  93. filter(idrum == max(idrum)) %>%
  94. ungroup %>%
  95. mutate(annee_sortie = year(date_sortie),
  96. mois_sortie = month(date_sortie)) %>%
  97. filter(annee_sortie > annee - 3) -> rss
  98. # Sélection uniquement des RUMs appartenant aux RSS
  99. print("7/9 - Sélection des RUMs")
  100. rum %<>%
  101. right_join(rss %>% select(idrss, annee_sortie, mois_sortie))
  102. # GAM et structure --> hospit non codées
  103. print("8/9 - LIVENNE : GAM")
  104. src_mysql("pmsi_dim", "localhost", user = user, password = password) %>%
  105. tbl("mvt_gam") %>%
  106. select(idhosp, date_entree, date_sortie, uf, pass_typ, type_resp) %>%
  107. filter(pass_typ != "EXT",
  108. type_resp == "M") %>%
  109. distinct %>%
  110. collect(n = Inf) %>%
  111. mutate(date_entree = as.Date(date_entree),
  112. date_sortie = as.Date(date_sortie)) %>%
  113. anti_join(filter(., is.na(date_sortie) | date_sortie >= as.Date(str_c(annee, mois, "01", sep = "-")) + period(1, "month")),
  114. by = "idhosp") %>% # supprimer séjours non terminés à la fin de la période étudiée
  115. filter(date_sortie >= as.Date(str_c(annee, "01", "01", sep = "-"))) %>%
  116. select(-pass_typ, -type_resp) %>%
  117. left_join(src_mysql("pmsi_dim_nom", "localhost", user = user, password = password) %>%
  118. tbl("structure") %>%
  119. filter(um != "") %>%
  120. select(uf, service, service_libelle, pole, pole_libelle) %>%
  121. distinct %>%
  122. collect(n = Inf), by = "uf") %>%
  123. anti_join(rum, by="idhosp") %>% # supprimer séjours codés
  124. arrange(idhosp, date_sortie) %>%
  125. filter(!(service %in% c("5110", "5140", "1700", "1170", "1600", "2350")),
  126. !is.na(service)) %>%
  127. group_by(idhosp) %>%
  128. summarise(date_entree = first(date_entree),
  129. date_sortie = last(date_sortie),
  130. service_libelle= last(service_libelle),
  131. pole_libelle = last(pole_libelle)) %>%
  132. mutate(mois_sortie = month(date_sortie)) -> gam
  133. print("9/9 - Écriture des données")
  134. # Enregistrement de l'exhaustivité au moment de la cloture
  135. if (mois == 1)
  136. {
  137. exhau <- data.frame(mois = 1:12, rss = NA, manq = NA)
  138. } else
  139. {
  140. load("exhau.Rdata")
  141. }
  142. exhau[exhau$mois == mois,]$rss <- rss %>% filter(annee_sortie == annee) %>% nrow
  143. exhau[exhau$mois == mois,]$manq <- gam %>% nrow
  144. save(exhau, file = "exhau.Rdata")
  145. # Données extraites de web100T pour l'exhaustivité par service
  146. exhau_pims <- read_csv2("exhau_pims.csv")
  147. names(exhau_pims) <- c("Pole", "Service", "RUM", "DP", "Erreur", "Sortie")
  148. exhau_pims %<>%
  149. mutate(Sortie = Sortie %>% as.Date) %>%
  150. filter(month(Sortie) <= mois)
  151. save(Ovalide, OvalideP, annee, mois, rum, rss, gam, exhau, exhau_pims, date, file = "donnees.Rdata")
  152. write.csv2(gam, "gam.csv")