From 37610d8dbdfd162279c14dc7147f306422297e0e Mon Sep 17 00:00:00 2001 From: Maxime Wack Date: Mon, 27 Mar 2017 16:52:11 +0200 Subject: [PATCH] Initial commit --- CRHAP.Rmd | 399 ++++++++++++++++++++++++++++++++++++ CRHAP.wid | Bin 0 -> 67915 bytes index.Rmd | 589 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 988 insertions(+) create mode 100644 CRHAP.Rmd create mode 100644 CRHAP.wid create mode 100644 index.Rmd diff --git a/CRHAP.Rmd b/CRHAP.Rmd new file mode 100644 index 0000000..fe677a8 --- /dev/null +++ b/CRHAP.Rmd @@ -0,0 +1,399 @@ +--- +output: + html_document: + toc: true + toc_float: true +params: + CRH: NA + CRH_seance: NA + CRH_sans_seance: NA +--- + +```{r init, warning = F, message = F, echo = F} +library(tidyverse) +library(DT) +library(magrittr) +library(stringr) +library(knitr) +library(lubridate) +library(plotly) + +opts_chunk$set(warning = F, + message = F, + fig.width = 9, + fig.height = 6, + echo = F) +options(DT.options = list(paging = F, + info = F, + searching = F, + dom = "Bfrtip", + buttons = c('copy', 'excel'))) +``` + +```{r data, echo = F, message = F, warning = F} +mois_label <- c("Janvier", + "Février", + "Mars", + "Avril", + "Mai", + "Juin", + "Juillet", + "Août", + "Septembre", + "Octobre", + "Novembre", + "Décembre") + +pdf(NULL) +``` + +# Tous RUMs confondus + +## Par mois + +```{r} +CRH() %>% + count(Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH() %>% count(Mois)) %>% + select(Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH() %>% group_by(Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +``` +
+```{r} +CRH() %>% + + ggplot(aes(x = Mois, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par mois de sortie du RSS") -> p + + ggplotly(p) +``` + +## Par Pôle + +```{r} +CRH() %>% + count(Pole, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH() %>% count(Pole)) %>% + select(Pole, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH() %>% group_by(Pole) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +``` +
+```{r} +CRH() %>% + + ggplot(aes(x = Pole, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par pôle, depuis avril 2016") + + theme(axis.text.x = element_text(angle = -45, hjust = 1)) -> p + + ggplotly(p) + +``` + +## Par Pôle, par service et par mois + +```{r} +CRH() %>% + count(Pole, Service, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH() %>% count(Pole, Service, Mois)) %>% + ungroup %>% + select(Pole, Service, Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH() %>% group_by(Pole, Service, Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM, + Pole = Pole %>% factor, + Mois = Mois %>% factor) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP"), + filter = "top", + options = list(searching = T, paging = T)) %>% + formatPercentage(9) +``` +
+```{r} +CRH() %>% + count(Pole, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + mutate(Manquant = ifelse(is.na(Manquant), integer(1), Manquant), + CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + pourcent = CRHA / (CRHA + CRHP + Manquant)) %>% + + ggplot(aes(x = Mois, y = pourcent, colour = Pole, group = Pole)) + + geom_line(stat = "identity") + + geom_point() + + ylab("Proportion de #CRHA") + + ggtitle("Évolution des proportions de #CRHA par pôle") -> p + + ggplotly(p, tooltip = c("x", "y", "colour")) +``` + +---- + +# RUMs non séance + +## Par mois + +```{r} +CRH_sans_seance() %>% + count(Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_sans_seance() %>% count(Mois)) %>% + select(Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_sans_seance() %>% group_by(Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +``` +
+```{r} +CRH_sans_seance() %>% + + ggplot(aes(x = Mois, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par mois de sortie du RSS") -> p + + ggplotly(p) +``` + +## Par Pôle + +```{r} +CRH_sans_seance() %>% + count(Pole, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_sans_seance() %>% count(Pole)) %>% + select(Pole, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_sans_seance() %>% group_by(Pole) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +``` +
+```{r} +CRH_sans_seance() %>% + + ggplot(aes(x = Pole, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par pôle, depuis avril 2016") + + theme(axis.text.x = element_text(angle = -45, hjust = 1)) -> p + + ggplotly(p) + +``` + +## Par Pôle, par service et par mois + +```{r} +CRH_sans_seance() %>% + count(Pole, Service, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_sans_seance() %>% count(Pole, Service, Mois)) %>% + ungroup %>% + select(Pole, Service, Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_sans_seance() %>% group_by(Pole, Service, Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM, + Pole = Pole %>% factor, + Mois = Mois %>% factor) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP"), + filter = "top", + options = list(searching = T, paging = T)) %>% + formatPercentage(9) +``` +
+```{r} +CRH_sans_seance() %>% + count(Pole, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + mutate(Manquant = ifelse(is.na(Manquant), integer(1), Manquant), + CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + pourcent = CRHA / (CRHA + CRHP + Manquant)) %>% + + ggplot(aes(x = Mois, y = pourcent, colour = Pole, group = Pole)) + + geom_line(stat = "identity") + + geom_point() + + ylab("Proportion de #CRHA") + + ggtitle("Évolution des proportions de #CRHA par pôle") -> p + + ggplotly(p, tooltip = c("x", "y", "colour")) +``` + +---- + +# RUMs séance + +## Par mois + +```{r} +CRH_seance() %>% + count(Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_seance() %>% count(Mois)) %>% + select(Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_seance() %>% group_by(Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +``` +
+```{r} +CRH_seance() %>% + + ggplot(aes(x = Mois, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par mois de sortie du RSS") -> p + + ggplotly(p) +``` + +## Par Pôle + +```{r} +CRH_seance() %>% + count(Pole, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_seance() %>% count(Pole)) %>% + select(Pole, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_seance() %>% group_by(Pole) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) + +``` +
+```{r} +CRH_seance() %>% + + ggplot(aes(x = Pole, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par pôle, depuis avril 2016") + + theme(axis.text.x = element_text(angle = -45, hjust = 1)) -> p + + ggplotly(p) + +``` + +## Par Pôle, par service et par mois + +```{r} +CRH_seance() %>% + count(Pole, Service, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_seance() %>% count(Pole, Service, Mois)) %>% + ungroup %>% + select(Pole, Service, Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_seance() %>% group_by(Pole, Service, Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM, + Pole = Pole %>% factor, + Mois = Mois %>% factor) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP"), + filter = "top", + options = list(searching = T, paging = T)) %>% + formatPercentage(9) + +``` +
+```{r} +CRH_seance() %>% + count(Pole, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + mutate(Manquant = ifelse(is.na(Manquant), integer(1), Manquant), + CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + pourcent = CRHA / (CRHA + CRHP + Manquant)) %>% + + ggplot(aes(x = Mois, y = pourcent, colour = Pole, group = Pole)) + + geom_line(stat = "identity") + + geom_point() + + ylab("Proportion de #CRHA") + + ggtitle("Évolution des proportions de #CRHA par pôle") -> p + + ggplotly(p, tooltip = c("x", "y", "colour")) +``` diff --git a/CRHAP.wid b/CRHAP.wid new file mode 100644 index 0000000000000000000000000000000000000000..2ce085ec6b70b756288cedaacc2cdd355fc6143f GIT binary patch literal 67915 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 Q4WZrzZ+`wiP(jrH2bxP;8vp% month) - 1), + numericInput("annee", "Année", Sys.Date() %>% year), + fileInput("crhap", "CRHAP", accept = "text/csv"), + downloadButton("report", "Générer le rapport") +) + +CRH <- reactive( + { + req(input$crhap, input$annee, input$mois) + + read_csv(input$crhap$datapath, col_types = cols(`Numéro d'hospitalisation` = col_character()), progress = F) %>% + setNames(c("RUM", "NDA", "DP", "GHM", "Notes", "Pole", "Service", "Date_DP", "Date_sortie")) %>% + mutate(Notes = Notes %>% + str_to_upper %>% + str_replace_all(" ", "") %>% + str_replace("CHR", "CRH") %>% + str_extract("CRH."), + Notes = ifelse(Notes %in% c("CRHP", "CRHA"), Notes, NA), + Date_DP = as.Date(Date_DP), + Date_sortie = as.Date(Date_sortie), + Delai = as.numeric(Date_DP - Date_sortie), + Pole = ifelse(Pole == "GSP : GÉRONTOLOGIE ET SOINS PALLIATIFS", "GSP", Pole), + Pole = ifelse(Pole == "POLE LORRAIN DE CHIRURGIE DE L'APPAREIL LOCOMOTEUR", "CCEG", Pole)) %>% + filter(!(Service %in% c("MEDECINE INFANTILE", "NEPHROLOGIE") & DP == "Z49.1"), + !(Service %in% c("AMP CLINIQUE", "ORTHOGENIE"))) %>% + filter(Date_sortie < ceiling_date(as.Date(str_c(input$annee, "-", input$mois, "-01")), unit = "month"), + Date_sortie > floor_date(as.Date(str_c(input$annee - 1, "-", input$mois, "-01")), unit = "month")) %>% + mutate(Notes = ifelse(Service == "STRUCTURE D'URGENCES" & Delai <= 15 & is.na(Notes), "CRHP", Notes), + Mois = str_c(year(Date_sortie), "-", str_pad(month(Date_sortie), 2, "left", "0"))) + } +) + + +CRH_sans_seance <- reactive( + { + req(CRH()) + + CRH() %>% + filter(!(GHM %>% str_detect("^28"))) + } +) + +CRH_seance <- reactive( + { + req(CRH()) + + CRH() %>% + filter(GHM %>% str_detect("^28")) + } +) + +mois_label <- c("Janvier", + "Février", + "Mars", + "Avril", + "Mai", + "Juin", + "Juillet", + "Août", + "Septembre", + "Octobre", + "Novembre", + "Décembre") +``` + +```{r report} +output$report <- downloadHandler(filename = "CRHAP.html", + content = function(file) + { + tempReport <- file.path(tempdir(), "CRHAP.Rmd") + file.copy("CRHAP.Rmd", tempReport, overwrite = T) + rmarkdown::render(tempReport, output_file = file, params = list(CRH = CRH(), CRH_seance = CRH_seance(), CRH_sans_seance = CRH_sans_seance())) + }) +``` + +### Présence du CRH pour le codage des séjours + +Ces tableaux concernent les RUMs sur une année glissante. +Les RUMs **sans DP** et **codés en erreur** (CMD 90) sont **exclus** de l'analyse. +Le pourcentage d'absents est calculé sur la **totalité** des RUMs, *Non renseignés* compris. +Le délai médian est le délai médian entre la date de fin du RSS et la date de codage du DP pour le RUM. +Les données sont disponibles avec les **séances incluses**, et les **séances excluses**. + +Les séances automatiquement codées (dialyse en néphrologie et médecine infantile) sont *exclues*. +Les séjours en AMP clinique et orthogénie sont également *exclus*. +Les séjours automatiquement codés d'UHCD (séjour en UHCD avec délai de codage <= 15j et sans marque de codage) sont considérés comme *#CRHP*. + +Il est possible pour chaque tableau de **trier** chaque colonne en cliquant sur son intitulé. +Pour les tableaux par service, il est également possible de **filtrer** par pôle ou selon les valeurs (par exemple, ne faire apparaître que les services avec plus de 50% de CRH absents). + +Les tableaux sont **exportables** sous Excel à l'aide du bouton en haut à gauche de chaque tableau. +**Attention : les *tris* et *filtres* sont pris en compte pour l'export !** + +---- + +### Saisie + +Les marques **#CRHA** (CRH absent) et **#CRHP** (CRH présent) sont saisies dans les **Notes** lors du codage des séjours dans WebPIMS. + +#### Format + +Les marques sont saisies selon le format suivant : + +* marque en début de Notes +* précédée du # +* tout attaché +* attention aux fautes de frappe ! (#C*HR*P, #CR*PH*) +* **seules ces marques seront analysées !** + +#### Conditions + +Les marques sont saisies selon les conditions suivantes : + +* **\#CRHP** dès lors qu'un compte-rendu permettant le codage du séjour est présent : + * au moins un CRH lors de l'hospitalisation + * CRH papier accepté + * CRH au «mauvais» format accepté + * CRH pour venues multiples (séances) accepté +* **\#CRHA** dès lors qu'il n'existe aucun compte-rendu d'aucune forme permettant le codage du séjour, et **en respectant un délai d'au moins une semaine après la fin de l'hospitalisation**. + +Il est recommandé de coder les séjours par ordre **chronologique**. + +---- + +### Analyse + +#### Extraction + +Les marques sont extraites par le médecin DIM responsable de la clôture, à l'aide d'une requête BO dans l'univers **WebPIMS MCO Prod**. Cette requête est exécutée tous les mois, *une semaine après la clôture mensuelle*. Les marques sont tirées des RUMs remplissant les conditions suivantes : + +* RUM de RSS sorti durant la période allant du début de ce recueil (avril 2016) à la fin du mois de la dernière clôture +* les RUMs sans DP (non codés) sont *exclus* +* les RUMs de RSS groupés en erreur sont *exclus* + +#### Traitement + +Les données extraites sont séparées en trois groupes pour l'analyse : + +* tous RUMs confondus +* RUMs séances uniquement +* RUMs à l'exclusion des séances + +Pour chaque jeu de données, les tableaux suivants sont générés : + +* par mois de sortie du **RSS** +* par pôle +* par service + +Chaque tableau présente les indicateurs suivants : + +* le nombre de RUMs dans le mois/pôle/service concerné +* le nombre de RUMs avec marque #CRHP +* le nombre de RUMs avec marque #CRHA +* le nombre de RUMs non marqués +* le **pourcentage de #CRHA**, calculé par rapport au nombre total de RUMs (y compris RUMs non marqués) + +## Rapport + +### Tous RUMs confondus + +#### Par mois + +```{r} +renderDataTable({ + CRH() %>% + count(Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH() %>% count(Mois)) %>% + select(Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH() %>% group_by(Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +}) +``` +
+```{r} +renderPlotly({ + CRH() %>% + + ggplot(aes(x = Mois, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par mois de sortie du RSS") -> p + + ggplotly(p) +}) +``` + +#### Par Pôle + +```{r} +renderDataTable({ + CRH() %>% + count(Pole, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH() %>% count(Pole)) %>% + select(Pole, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH() %>% group_by(Pole) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +}) +``` +
+```{r} +renderPlotly({ + CRH() %>% + + ggplot(aes(x = Pole, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par pôle, depuis avril 2016") + + theme(axis.text.x = element_text(angle = -45, hjust = 1)) -> p + + ggplotly(p) +}) +``` + +#### Par Pôle, par service et par mois + +```{r} +renderDataTable({ + CRH() %>% + count(Pole, Service, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH() %>% count(Pole, Service, Mois)) %>% + ungroup %>% + select(Pole, Service, Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH() %>% group_by(Pole, Service, Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM, + Pole = Pole %>% factor, + Mois = Mois %>% factor) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP"), + filter = "top", + options = list(searching = T, paging = T)) %>% + formatPercentage(9) +}) +``` +
+```{r} +renderPlotly({ + CRH() %>% + count(Pole, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + mutate(Manquant = ifelse(is.na(Manquant), integer(1), Manquant), + CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + pourcent = CRHA / (CRHA + CRHP + Manquant)) %>% + + ggplot(aes(x = Mois, y = pourcent, colour = Pole, group = Pole)) + + geom_line(stat = "identity") + + geom_point() + + ylab("Proportion de #CRHA") + + ggtitle("Évolution des proportions de #CRHA par pôle") -> p + + ggplotly(p, tooltip = c("x", "y", "colour")) +}) +``` + +---- + +### RUMs non séance + +#### Par mois + +```{r} +renderDataTable({ + CRH_sans_seance() %>% + count(Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_sans_seance() %>% count(Mois)) %>% + select(Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_sans_seance() %>% group_by(Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +}) +``` +
+```{r} +renderPlotly({ + CRH_sans_seance() %>% + + ggplot(aes(x = Mois, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par mois de sortie du RSS") -> p + + ggplotly(p) +}) +``` + +#### Par Pôle + +```{r} +renderDataTable({ + CRH_sans_seance() %>% + count(Pole, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_sans_seance() %>% count(Pole)) %>% + select(Pole, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_sans_seance() %>% group_by(Pole) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +}) +``` +
+```{r} +renderPlotly({ + CRH_sans_seance() %>% + + ggplot(aes(x = Pole, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par pôle, depuis avril 2016") + + theme(axis.text.x = element_text(angle = -45, hjust = 1)) -> p + + ggplotly(p) +}) +``` + +#### Par Pôle, par service et par mois + +```{r} +renderDataTable({ + CRH_sans_seance() %>% + count(Pole, Service, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_sans_seance() %>% count(Pole, Service, Mois)) %>% + ungroup %>% + select(Pole, Service, Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_sans_seance() %>% group_by(Pole, Service, Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM, + Pole = Pole %>% factor, + Mois = Mois %>% factor) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP"), + filter = "top", + options = list(searching = T, paging = T)) %>% + formatPercentage(9) +}) +``` +
+```{r} +renderPlotly({ + CRH_sans_seance() %>% + count(Pole, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + mutate(Manquant = ifelse(is.na(Manquant), integer(1), Manquant), + CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + pourcent = CRHA / (CRHA + CRHP + Manquant)) %>% + + ggplot(aes(x = Mois, y = pourcent, colour = Pole, group = Pole)) + + geom_line(stat = "identity") + + geom_point() + + ylab("Proportion de #CRHA") + + ggtitle("Évolution des proportions de #CRHA par pôle") -> p + + ggplotly(p, tooltip = c("x", "y", "colour")) +}) +``` + +---- + +### RUMs séance + +#### Par mois + +```{r} +renderDataTable({ + CRH_seance() %>% + count(Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_seance() %>% count(Mois)) %>% + select(Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_seance() %>% group_by(Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +}) +``` +
+```{r} +renderPlotly({ + CRH_seance() %>% + + ggplot(aes(x = Mois, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par mois de sortie du RSS") -> p + + ggplotly(p) +}) +``` + +#### Par Pôle + +```{r} +renderDataTable({ + CRH_seance() %>% + count(Pole, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_seance() %>% count(Pole)) %>% + select(Pole, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_seance() %>% group_by(Pole) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP")) %>% + formatPercentage(7) +}) +``` +
+```{r} +renderPlotly({ + CRH_seance() %>% + + ggplot(aes(x = Pole, fill = Notes)) + + geom_bar(position = "fill") + + ylab("Proportion") + + ggtitle("Proportion des #CRHA et #CRHP par pôle, depuis avril 2016") + + theme(axis.text.x = element_text(angle = -45, hjust = 1)) -> p + + ggplotly(p) +}) +``` + +#### Par Pôle, par service et par mois + +```{r} +renderDataTable({ + CRH_seance() %>% + count(Pole, Service, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + full_join(CRH_seance() %>% count(Pole, Service, Mois)) %>% + ungroup %>% + select(Pole, Service, Mois, RUM = n, CRHP, CRHA, Manquant) %>% + full_join(CRH_seance() %>% group_by(Pole, Service, Mois) %>% summarise(`Délai médian (j)` = median(Delai))) %>% + mutate(CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + `% absents` = CRHA / RUM, + Pole = Pole %>% factor, + Mois = Mois %>% factor) %>% + datatable(rownames = F, + extensions = 'Buttons', + colnames = c("Pôle" = "Pole", + "Non renseigné" = "Manquant", + "#CRHA" = "CRHA", + "#CRHP" = "CRHP"), + filter = "top", + options = list(searching = T, paging = T)) %>% + formatPercentage(9) +}) +``` +
+```{r} +renderPlotly({ + CRH_seance() %>% + count(Pole, Mois, Notes) %>% + mutate(Notes = ifelse(is.na(Notes), "Manquant", Notes)) %>% + spread(Notes, n) %>% + mutate(Manquant = ifelse(is.na(Manquant), integer(1), Manquant), + CRHA = ifelse(is.na(CRHA), integer(1), CRHA), + CRHP = ifelse(is.na(CRHP), integer(1), CRHP), + pourcent = CRHA / (CRHA + CRHP + Manquant)) %>% + + ggplot(aes(x = Mois, y = pourcent, colour = Pole, group = Pole)) + + geom_line(stat = "identity") + + geom_point() + + ylab("Proportion de #CRHA") + + ggtitle("Évolution des proportions de #CRHA par pôle") -> p + + ggplotly(p, tooltip = c("x", "y", "colour")) +}) +```