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.

137 lines
4.9KB

  1. source("functionsOvalide.R")
  2. library(lubridate)
  3. library(RMySQL)
  4. # Récupération des arguments pour utilisation non interactive ----
  5. arguments <- commandArgs()
  6. if (length(arguments) != 13)
  7. {
  8. print ("Usage : donnees.sh CHUuser CHUpass ATIHuser ATIHpass LivenneUser LivennePass annee mois")
  9. quit()
  10. } else
  11. {
  12. CHUuser <- arguments[6]
  13. CHUpass <- arguments[7]
  14. ATIHuser <- arguments[8]
  15. ATIHpass <- arguments[9]
  16. user <- arguments[10]
  17. password <- arguments[11]
  18. annee <- as.numeric(arguments[12])
  19. mois <- as.numeric(arguments[13])
  20. }
  21. # Récupération des fichiers ePMSI ----
  22. print("1/9 - Connexion à ePMSI")
  23. connectOvalide(CHUuser, CHUpass, ATIHuser, ATIHpass)
  24. print(str_c("2/9 - Téléchargement du tableau de", mois, annee, sep = " "))
  25. getOvalide(CHUuser, CHUpass, annee, mois)
  26. print(str_c("3/9 - Téléchargement du tableau de", mois, annee - 1, sep = " "))
  27. getOvalide(CHUuser, CHUpass, annee - 1, mois)
  28. # Extraction des données des fichiers ePMSI ----
  29. print("4/9 - Extraction des tableaux ePMSI")
  30. read.csv2("listOvalide.csv") %>%
  31. {
  32. apply(., 1, . %>%
  33. {
  34. df <- extractOvalide(annee, mois, .[2], .[3])
  35. names(df) <- LETTERS[1:length(df)]
  36. df
  37. }) ->> Ovalide
  38. names(Ovalide) <<- .$name
  39. apply(., 1, . %>%
  40. {
  41. df <- extractOvalide(annee - 1, mois, .[2], .[3])
  42. names(df) <- LETTERS[1:length(df)]
  43. df
  44. }) ->> OvalideP
  45. names(OvalideP) <<- .$name
  46. }
  47. # Récupération des données ePMSI de 2015 fusionnées CCEG-CHU ----
  48. if (annee == 2016)
  49. {
  50. load("Ovalide.Rdata")
  51. OvalideP <- CCEGCHU2015[[str_c("mois", mois, sep = "")]]
  52. rm("CCEGCHU2015")
  53. }
  54. # Nettoyage des fichiers extraits. Les archives sont conservées. ----
  55. unlink(str_c("OVALIDE T2A.MCO.DGF", annee, mois, "html", sep = "."))
  56. unlink(str_c("OVALIDE T2A.MCO.DGF", annee - 1, mois, "html", sep = "."))
  57. # RUM + structure + calcul durée de séjour ----
  58. print("5/9 - LIVENNE : RUM et structure")
  59. src_mysql("pmsi_dim", "localhost", user = user, password = password) %>%
  60. tbl(sql("SELECT finess, idhosp, idrss, idrum, date_entree, date_sortie, cmd, um FROM fix116
  61. UNION
  62. SELECT finess, idhosp, idrss, idrum, date_entree, date_sortie, cmd, um FROM fix117")) %>%
  63. collect(n = Inf) %>%
  64. mutate(date_entree = date_entree %>% as.Date,
  65. date_sortie = date_sortie %>% as.Date) %>%
  66. left_join(src_mysql("pmsi_dim_nom", "localhost", user = user, password = password) %>%
  67. tbl("structure") %>%
  68. filter(um != "") %>%
  69. select(uf_date_ferm, um, service_libelle, pole_libelle) %>%
  70. arrange(um, uf_date_ferm) %>%
  71. distinct %>%
  72. collect(n = Inf) %>%
  73. add_rownames(var = "dummy") %>% # Dédoublonnage : 1 um -> 1 couple libellés
  74. group_by(um) %>%
  75. filter(dummy == last(dummy)) %>%
  76. select(-dummy, -uf_date_ferm) %>%
  77. ungroup) %>%
  78. mutate(idrss = ifelse(finess == "540000031", str_c("m", idrss), idrss)) %>% # maternité
  79. mutate(idrss = ifelse(finess == "540020112", str_c("c", idrss), idrss)) %>% # CCEG
  80. mutate(idhosp = idhosp %>% str_replace_all(" ", "")) %>%
  81. mutate(duree_rum = date_sortie - date_entree) %>% # durée rum
  82. left_join(group_by(., idrss) %>%
  83. summarise(duree_rss = sum(duree_rum))) -> rum
  84. # CLOS14 Hémato ----
  85. rum %<>%
  86. mutate(pole_libelle = ifelse(pole_libelle == "CLOS14 HEMATOLOGIE", "SPECIALITES MEDICALES", pole_libelle),
  87. service_libelle = ifelse(service_libelle == "CLOS14 HEMATO.S.INTENSIFS", "SERVICE HEMATOLOGIE", service_libelle))
  88. # Création des RSSs des 3 dernières années à partir des RUMs ----
  89. print("6/9 - Création des RSS")
  90. rum %>%
  91. group_by(idrss) %>%
  92. filter(idrum == max(idrum)) %>%
  93. ungroup %>%
  94. mutate(annee_sortie = year(date_sortie),
  95. mois_sortie = month(date_sortie)) %>%
  96. filter(annee_sortie > annee - 3) -> rss
  97. # Sélection uniquement des RUMs appartenant aux RSS ----
  98. print("7/9 - Sélection des RUMs")
  99. rum %<>%
  100. right_join(rss %>% select(idrss, annee_sortie, mois_sortie))
  101. # Exhaustivité ----
  102. print("8/9 - Exhaustivité")
  103. exhau_pims <- read_csv("exhau_pims.csv")
  104. names(exhau_pims) <- c("Pole", "Service", "RUM", "DP", "Erreur", "Sortie", "Duree", "RSS")
  105. exhau_pims %<>%
  106. mutate(Sortie = Sortie %>% as.Date) %>%
  107. filter(month(Sortie) <= mois)
  108. dbConnect(MySQL(), host = "localhost", dbname = "pmsi_dim", user = user, password = password) %>%
  109. dbWriteTable("exhaustivite", data.frame(annee = annee, mois = mois, nb_rss_tot = exhau_pims %>% distinct(RSS, .keep_all = T) %>% nrow, nb_rss_manq = exhau_pims %>% filter(is.na(DP)) %>% distinct(RSS) %>% nrow), row.names = F, append = T)
  110. an <- annee
  111. src_mysql("pmsi_dim", "localhost", user = user, password = password) %>%
  112. tbl("exhaustivite") %>%
  113. collect(n = Inf) %>%
  114. filter(annee == an) %>%
  115. full_join(data.frame(mois = 1:12), by = "mois") %>%
  116. select(annee, mois, rss = nb_rss_tot, manq = nb_rss_manq) -> exhau
  117. # Écriture des données ----
  118. print("9/9 - Écriture des données")
  119. save(Ovalide, OvalideP, annee, mois, rum, rss, exhau, exhau_pims, file = "donnees.Rdata")