library(ablanor)

# make sure to use a temporary directory AND absolute paths, e.g. that figs
# can be found also when deployed at a server. See below link for explanation
# https://rgriff23.github.io/2017/04/25/how-to-knit-for-mysite.html
# Also make sure we use tempdir() as working directory so we do not clutter
# the package of the hosting shiny app
# workDir <- tempdir()
# knitr::opts_knit$set(base.dir=workDir, base.url=file.path(paste0(tempdir(), "/")), root.dir = workDir)

# Handle both html and latex (pdf) output. Actually to avoid setting 'format'
# for each kable call
# inspired by https://stackoverflow.com/questions/46080853/why-does-rendering-a-pdf-from-rmarkdown-require-closing-rstudio-between-renders
options(knitr.table.format = params$tableFormat)
knitr::opts_chunk$set(warnings = FALSE, echo = FALSE)
options(stringsAsFactors = FALSE)

# For some reason Shiny Server does not get the server locale settings right.
# To display dates correct, enforce locale here:
Sys.setlocale("LC_TIME", "nb_NO.UTF-8")
colPrimary <- c("#000059", "#084594", "#2171b5", "#4292c6", "#6baed6", "#c6dbef")
colNeutral <- c("#4D4D4D", "#737373", "#A6A6A6", "#DADADA")
colKontrast <- "#FF7260"
showN <- 12

#Egendefinerte kortnavn:
hospitalNameShort <- ablanor::getHospitalName(registryName = "ablanor",
                                              reshId = params$reshId, 
                                              shortName = TRUE,
                                              newNames = TRUE)
# DATAGRUNNLAG: PERIODE
# NYESTE DATO: 
# Finne nyeste prosedyredato i prosedyre-tabellen. Vi ønsker ikke at 
# forhåndsregisrerte planlagte forløp kommer med i rapporten. Derfor brukes
# gårsdagens dato som referanse, ingen forløp etter denne kommer med .  
# Vi vil dermed også kunne se dersom ingen nye registreringer gjøres eller om
# overføringer har stoppet opp

# ELDSTE DATO: 
# 12 komplette måneder før siste dato

nyeste_reg <- ablanor::getLatestEntry(registryName = params$registryName)

periode_data <- data.frame(
  siste_dato = min((as.Date(Sys.time()) - 1), 
                   nyeste_reg)) %>% 
  dplyr::mutate(forste_dato  = lubridate::floor_date(.data$siste_dato, 
                                                     "month") - months(showN))
d_ablanor <- ablanor::getBaseregProsData(registryName = params$registryName, 
                                         singleRow = FALSE, 
                                         reshId = params$reshId,
                                         userRole = params$userRole, 
                                         fromDate = periode_data$forste_dato, 
                                         toDate = periode_data$siste_dato)
periode_data$forste_dato_shus <- d_ablanor %>% 
  dplyr::summarise(min(.data$dato_pros)) %>% 
  dplyr::pull()

periode_data$nyeste_dato_shus <- d_ablanor %>% 
  dplyr::summarise(max(.data$dato_pros)) %>% 
  dplyr::pull()
# OPPDATERE : UKE, MÅNED, ÅR for å få riktig levels i faktorer, også dersom 
# ingen registreringer i løpet av en måned
d_ablanor %<>%
  dplyr::mutate(
    aar = as.ordered(lubridate::year(.data$dato_pros)),
    maaned = as.ordered(format(.data$dato_pros, "%Y-%m"))
  )

# OPPDATERE ALLE ANDRE FAKTOR variabler, for å få med alle mulige nivåer
d_ablanor %<>%
  dplyr::mutate(forlopstype = factor(x = forlopstype,
                                     levels = 1:4))

Datagrunnlag

Datagrunnlaget for denne rapporten er alle forløp registrert i AblaNor de siste r showN månedene: det vil si i intervallet fra r format(periode_data$forste_dato , "%d/%m-%Y") til r format(periode_data$siste_dato, "%d/%m-%Y").

Første og siste registrering fra r hospitalNameShort i tidsperioden er henholdsvis r format(periode_data$forste_dato_shus, "%d/%m-%Y") og r format(periode_data$nyeste_dato_shus, "%d/%m-%Y").

cat("\n\n\\pagebreak\n")

Forløpstype

Forløpene i registrert i AblaNor er en av typene : Atrieflimmer/atypisk flutter (AFLI), Ventrikkeltakykardi (VT), Supraventrikulær takykardi (SVT) eller Elektrofysiologisk undersøkelse (EFU). Dersom forløpstype ikke er registrert blir verdien NA (not available), dette gjelder forløp der prosedyreskjema ikke er ferdigstilte. Tabellen under (Tabell \@ref(tab:typeForlopAar)) viser antall forløp registrert i AblaNor fra r hospitalNameShort de r showN siste månedene, for hver forløpstype og sammenlagt. Figur \@ref(fig:typeForlopFig) viser antall forløp per måned, samt fordeling etter forløpstype.

cap <- paste("Totalt antall forløp fra ", 
             hospitalNameShort, " de ", showN, " siste månedene.",
             "For hver av de 4 forløpstypene: ",
             "Atrieflimmer/atypisk flutter (AFLI), Ventrikkeltakykardi (VT), ", 
             "Supraventrikulær takykardi (SVT) eller ", 
             "Elektrofysiologisk undersøkelse (EFU).")

d_ablanor %>%  
  dplyr::count(.data$forlopstype) %>% 
  janitor::adorn_totals() %>% 
  ablanor::legg_til_forlopstype_kortnavn(., total = TRUE, langtnavn = TRUE) %>%
  dplyr::select(.data$forlopstype_tekst, .data$n) %>% 
  dplyr::rename("Forløpstype" = .data$forlopstype_tekst, 
                "Antall" = .data$n) %>% 
  rapbase::mst(.,
               type = params$tableFormat,
               cap = cap,
               digs = 1,
               align = "lcc",
               fs = 9, 
               lsd = FALSE)
figtekst <- paste0("Antall registreringer i AblaNor fra ", 
                   hospitalNameShort, " hver måned det siste året. ", 
                   "Tallene i søylene viser antall registrerte forløp per ", 
                   "forløpstype. ", 
                   "Atrieflimmer/atypisk flutter (AFLI), ", 
                   "Ventrikkeltakykardi (VT), ", 
                   "Supraventrikulær takykardi (SVT) eller ", 
                   "Elektrofysiologisk undersøkelse (EFU).")

d_forlop_mnd <- d_ablanor %>%
  dplyr::count(.data$maaned, .data$forlopstype, .drop = FALSE) %>%
  ablanor::legg_til_forlopstype_kortnavn() %>% 
  dplyr::mutate(
    n_uten0 = dplyr::case_when(
      .data$n == 0 ~ "", .data$n != 0 ~ as.character(.data$n)
    )
  ) %>% 
  dplyr::mutate(forlopstype_tekst = factor(
    x = .data$forlopstype_tekst, 
    levels = c("AFLI", "VT", "SVT", "EFU")))


ggplot2::ggplot(
  data = d_forlop_mnd,  
  ggplot2::aes(
    x = .data$n,
    y = .data$maaned,
    fill = .data$forlopstype_tekst
  )
) +
  ggplot2::geom_bar(stat = "identity", 
                    position = ggplot2::position_stack(reverse = TRUE)) +
  ggplot2::scale_fill_manual(values = colPrimary[3:6]) +
  ablanor::ablanor_plot_theme() + 
  ggplot2::labs(title = paste0("Antall registreringer i AblaNor de ",
                               showN, " siste månedene" ),
                subtitle = hospitalNameShort) +
  ggplot2::geom_vline(xintercept = 0, size = 1, colour = "gray45") +
  ggplot2::geom_text(
    ggplot2::aes(label = .data$n_uten0),
    family = "sans",
    position = ggplot2::position_stack(vjust = 0.5, reverse = TRUE)
  ) 
cat("\n\n\\pagebreak\n")

Komplikasjoner

I Ablanor registreres følgende: "Skjedde det komplikasjoner som følge av operasjonen?". Dette kan enten være komplikasjoner som oppstod umiddelbart etter operasjonen eller som var senkomplikasjoner som (sannsynligvis) skyldtes operasjonen.

Figur \@ref(fig:komplikasjonerFig) viser prosentandel forløp der komplikasjoner skjedde, per måned. Tallene i søylen viser antall forløp med komplikasjoner, delt på på totalt antall forløp den måneden. Tabell \@ref(tab:komplikasjonerMaanedTabell) viser andel forløp med komplikasjoner totalt per måned og i underpopulasjoner per måned.

figtekst <- paste0("Andel forløp fra ", hospitalNameShort, 
                   " med komplikasjoner det siste året. " ,
                   "Tallene i søylene viser antall forløp med ", 
                   "komplikasjoner delt på totalt antall forløp per måned.")

d_kompl_fig <- d_ablanor %>%
  dplyr::select(.data$maaned, .data$komp_janei) %>%
  ablanor::ki_komplikasjonar() %>%
  dplyr::group_by(.data$maaned) %>%
  ablanor::aggreger_ki_prop() %>%
  dplyr::select(-.data$konfint_nedre, -.data$konfint_ovre, -.data$est) %>%
  dplyr::mutate(komp_pros = .data$ki_teller / .data$ki_nevner,
                komp_text = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>% 
  dplyr::select(.data$maaned, .data$komp_pros, .data$komp_text)

d_kompl_fig2 <- dplyr::left_join(
  d_kompl_fig %>%
    tidyr::expand(., maaned), 
  d_kompl_fig,
  by = "maaned"
) %>% 
  tidyr::replace_na(., list(komp_pros = 0, komp_text = " / "))



ggplot2::ggplot(data = d_kompl_fig2, 
                ggplot2::aes(x = komp_pros, y = maaned)) +
  ggplot2::geom_bar(stat = "identity", position = "identity",  fill = colPrimary[4]) +
  ggplot2::labs(title = paste0("Komplikasjoner de ",
                               showN, " siste månedene"), 
                subtitle = hospitalNameShort) +
  ablanor::ablanor_plot_theme() +
  ggplot2::geom_vline(xintercept = 0, size = 1, colour = "gray45") +
  ggplot2::geom_text(ggplot2::aes(label = komp_text), 
                     family = "sans",
                     position = ggplot2::position_stack(vjust = 0.5)) +
  ggplot2::scale_x_continuous(labels = function(x) paste0(x * 100, "%"))
cap <- paste0(
  "Andel komplikasjoner per måned, totalt og for undergrupper. ", 
  "Totalt per måned og i undergruppene: ", 
  "Forløpstype, alder over/uder 75 år og BMI over/under 35. ",
  "Merk at dersom Forløpstype, alder eller BMI mangler for et forløp, teller ",
  "ikke dette forløpet i undergruppene.")

d_komp_tot <- d_ablanor %>%
  dplyr::select(.data$komp_janei, .data$maaned) %>%
  dplyr::group_by(.data$maaned) %>%
  ablanor::ki_komplikasjonar() %>%
  ablanor::aggreger_ki_prop() %>%
  dplyr::transmute(maaned = .data$maaned,
                   Totalt = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() 


d_komp_forlop <- d_ablanor %>%
  dplyr::select(.data$forlopstype, .data$komp_janei, .data$maaned) %>%
  ablanor::ki_komplikasjonar() %>%
  dplyr::group_by(.data$forlopstype, .data$maaned) %>%
  ablanor::aggreger_ki_prop() %>%
  dplyr::transmute(maaned = .data$maaned,
                   legend = .data$forlopstype,
                   value = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() %>%  
  dplyr::select(-.data$forlopstype) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("AFLI" = "1",
                "VT" = "2", 
                "SVT" = "3", 
                "EFU" = "4")


d_komp_bmi <- d_ablanor %>%
  dplyr::select(.data$bmi_over35, .data$komp_janei, .data$maaned) %>%
  ablanor::ki_komplikasjonar() %>%
  dplyr::group_by(.data$bmi_over35, .data$maaned) %>%
  ablanor::aggreger_ki_prop() %>%
  dplyr::transmute(maaned = .data$maaned,
                   legend = .data$bmi_over35,
                   value = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() %>%  
  dplyr::select(- .data$bmi_over35) %>% 
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("over 35" = "BMI >=35", 
                "under 35" = "BMI <35")

d_komp_alder <- d_ablanor %>%
  dplyr::select(.data$alder_75, .data$komp_janei, .data$maaned) %>%
  ablanor::ki_komplikasjonar() %>%
  dplyr::group_by(.data$alder_75, .data$maaned) %>%
  ablanor::aggreger_ki_prop() %>%
  dplyr::transmute(maaned = .data$maaned,
                   legend = .data$alder_75,
                   value = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() %>%
  dplyr::select(- .data$alder_75) %>% 
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("over 75" = ">=75", 
                "under 75" = "<75")


d_komp_TOTAL <- d_komp_forlop %>%
  dplyr::left_join(., d_komp_alder, by = "maaned") %>%
  dplyr::left_join(., d_komp_bmi, by = "maaned") %>%
  dplyr::left_join(., d_komp_tot, by = "maaned") %>% 
  tidyr::replace_na(list(Totalt = " -- ")) %>% 
  dplyr::arrange(desc(.data$maaned))


knitr::kable(x = d_komp_TOTAL,
             format = switch(params$tableFormat,
                             pdf = "latex",
                             html = "html"),
             align = c("l", rep("c", 9)),
             booktabs = TRUE, 
             caption = cap) %>%
  kableExtra::add_header_above(c(" " = 1,
                                 "Forløpstype" = 4,
                                 "Alder" = 2,
                                 "BMI" = 2,
                                 " " = 1)) %>%
  gsub("maaned", "Måned", .) %>%
  ablanor::mst_short(., type = params$tableFormat, 
                     lsd = FALSE, 
                     fs = 9, 
                     full_width = FALSE)


cat("\n\n\\pagebreak\n")

Akutt suksess

Akutt suksess er operatørens vurdering av om selve operasjonen er vellykket: "Nei" dersom behandlet arytmi fortsatt er tilstede, "Ja" dersom PV isolert/AP borte/ikke utløsbar arytmi. "Usikker" dersom sett andre arytmier fortsatt, men mindre arytmi og "Ikke aktuelt" dersom ikke utløst arytmi.

Elektrofysiologiske undersøkelse eller forløp der akutt suksess er lik "Ikke aktuelt" er fjernet fra datagrunnlaget.

Andel forløp med akutt suksess er regnet ut ved å dele antall forløp der akutt suksess er lik "Ja" på totalt antall forløp der akutt suksess er en av "Ja", "Nei" eller "Usikker". Figur \@ref(fig:akuttSuksessFig) viser prosentandel forløp med akutt suksess blant abladerte, per måned. Tabell \@ref(tab:akuttSuksessMaaned) viser andel forløp med akutt suksess blant abladerte totalt og i underpopulasjoner, per måned.

cap <- paste0("Andel forløp med akutt suksess per måned de ", 
              showN, " siste månedene. ", 
              "I datagrunnlaget telles kun abladerte pasienter. ", 
              "Målnivået er markert med rød stiplet linje.")


d_akutt_suksess_fig <- d_ablanor %>%
  dplyr::select(.data$maaned, .data$abla_strat_ingen, .data$akutt_suksess) %>%
  ablanor::ki_akutt_suksess() %>%
  dplyr::group_by(maaned) %>%
  ablanor::aggreger_ki_prop() %>%
  dplyr::transmute(maaned = .data$maaned,
                   akuttSuksess_pros = .data$ki_teller / .data$ki_nevner)

d_akutt_suksess_fig2 <- dplyr::left_join(
  d_akutt_suksess_fig %>%
    tidyr::expand(., maaned), 
  d_akutt_suksess_fig,
  by = "maaned") 


ggplot2::ggplot(data = d_akutt_suksess_fig2, 
                ggplot2::aes(x = akuttSuksess_pros, y = maaned)) +
  ggplot2::geom_bar(stat = "identity",
                    position = "identity",
                    fill = colPrimary[4]) +
  ablanor::ablanor_plot_theme() +
  ggplot2::geom_vline(xintercept = 0, size = 1, colour = "gray45") +
  ggplot2::geom_vline(xintercept = 0.95, 
                      size = 1,
                      colour = colKontrast, 
                      linetype = "dashed") +
  ggplot2::labs(title = paste0("Akutt suksess de ",
                               showN, " siste månedene"), 
                subtitle = hospitalNameShort) +
  ggplot2::scale_x_continuous(labels = function(x) paste0(x * 100, "%")) 
cap <- paste0("Andel forløp med akutt suksess. ", 
              "I datagrunnlager telles kun abladerte pasienter (uten EFU og ",
              "uten akutt suksess kodet 'ikke aktuelt'). ", 
              "Vi ser andel akutt suksess blant alle ablanderte (Totalt), ", 
              "per forløpstype, ", 
              "samt for undergrupper av AFLI og VT. ", 
              "Merk at grunnet manglende registrering av tilhørighet i ", 
              "undergrupper av AFLI/VT for et fåtall av forløp kan vi ha ", 
              "uoverensstemmelser i nevnerne. ")

d_akuttSuksess_tot <- d_ablanor %>%
  dplyr::select(.data$abla_strat_ingen, .data$akutt_suksess, .data$maaned) %>%
  dplyr::group_by(maaned, .drop = FALSE) %>%
  ablanor::ki_akutt_suksess() %>%
  ablanor::aggreger_ki_prop(., forenklet = TRUE) %>%
  dplyr::transmute(maaned = .data$maaned,
                   Totalt = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::mutate(Totalt = dplyr::recode(.data$Totalt, "0/0" = " -- ")) %>% 
  dplyr::ungroup()


d_akuttSuksess_forlop <- d_ablanor %>%
  dplyr::select(.data$forlopstype,
                .data$abla_strat_ingen, 
                .data$akutt_suksess, 
                .data$maaned) %>%
  ablanor::ki_akutt_suksess() %>%
  dplyr::group_by(.data$forlopstype, .data$maaned, .drop=FALSE) %>%
  ablanor::aggreger_ki_prop(., forenklet = TRUE) %>%
  dplyr::transmute(maaned = .data$maaned,
                   legend = .data$forlopstype,
                   value = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() %>%  
  dplyr::select(- .data$forlopstype) %>%
  dplyr::mutate(value = dplyr::recode(.data$value, 
                                      "0/0" = " -- ")) %>% 
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("AFLI" = "1",
                "VT" = "2", 
                "SVT" = "3", 
                "EFU" = "4")

d_akutt_suksess_AFLI_icd <- d_ablanor %>%
  dplyr::select(.data$kategori_afli_aryt_i48,
                .data$abla_strat_ingen, 
                .data$akutt_suksess, 
                .data$maaned) %>%
  dplyr::filter(!is.na(.data$kategori_afli_aryt_i48)) %>%
  ablanor::ki_akutt_suksess() %>%
  dplyr::group_by(.data$kategori_afli_aryt_i48, .data$maaned, .drop = FALSE) %>%
  ablanor::aggreger_ki_prop(., forenklet = TRUE) %>%
  dplyr::transmute(maaned = .data$maaned,
                   legend = .data$kategori_afli_aryt_i48,
                   value = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() %>% 
  dplyr::select(- .data$kategori_afli_aryt_i48) %>%
  dplyr::mutate(value = dplyr::recode(.data$value, 
                                      "0/0" = " -- ")) %>% 
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE)


d_akutt_suksess_VT <- d_ablanor %>%
  dplyr::select(.data$forlopstype, 
                .data$kategori_vt_kardiomyopati, 
                .data$abla_strat_ingen, 
                .data$akutt_suksess, maaned) %>%
  dplyr::filter(.data$forlopstype == 2) %>%
  ablanor::ki_akutt_suksess() %>%
  dplyr::group_by(.data$kategori_vt_kardiomyopati,
                  .data$maaned,
                  .drop = FALSE) %>%
  ablanor::aggreger_ki_prop(., forenklet = TRUE) %>%
  dplyr::transmute(maaned = .data$maaned,
                   legend = .data$kategori_vt_kardiomyopati,
                   value = paste0(.data$ki_teller, "/", .data$ki_nevner)) %>%
  dplyr::ungroup() %>%  
  dplyr::select(- .data$kategori_vt_kardiomyopati) %>% 
  dplyr::mutate(value = dplyr::recode(.data$value,
                                      "0/0" = " -- ")) %>% 
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE)


d_akuttSuksess_TOTAL <- dplyr::left_join(
  d_akuttSuksess_forlop %>% dplyr::select_if(!names(.) %in% "EFU"),
  d_akutt_suksess_AFLI_icd,
  by = "maaned") %>%
  dplyr::left_join(., d_akutt_suksess_VT,
                   by  = "maaned") %>%
  dplyr::left_join(., d_akuttSuksess_tot,
                   by  = "maaned") %>% 
  tidyr::replace_na(list(Totalt = " -- ")) %>% 
  dplyr::arrange(desc(.data$maaned)) %>% 
  dplyr::rename("Paroks." = "AFLI-ICD 48.0 Paroksymal atrieflimmer", 
                "Persist." = "AFLI-ICD 48.1 Persisterende atrieflimmer", 
                "Langtidsp." = "AFLI-ICD 48.1 Langtidspersisterende atrieflimmer", 
                "Uten" = "Uten kardiomyopati", 
                "ICM" = "Iskemisk KM (ICM)", 
                "DCM" ="Dilatert KM (DCM)", 
                "Annen" = "Annen KM", 
                "Ukjent" = "Ukjent om kardiomyopati")


knitr::kable(x = d_akuttSuksess_TOTAL,
             format = switch(params$tableFormat,
                             pdf = "latex",
                             html = "html"),
             align = c("l", rep("c",12)),
             booktabs = TRUE,
             cap = cap) %>%
  kableExtra::add_header_above(c(" " = 1,
                                 "Forløpstype" = 3,
                                 "AFLI, ICD" = 3,
                                 "VT, Kardiomyopati" = 5,
                                 " " = 1)) %>%
  ablanor::mst_short(., type = params$tableFormat, 
                     lsd = TRUE,
                     fs = 9,
                     full_width = FALSE)


cat("\n\n\\pagebreak\n")

Prosedyrerelatert AV-blokk

Forløp med manglende komplikasjons-registrering (n = r d_ablanor %>% dplyr::filter(is.na(komp_avblokk_pm)) %>% nrow()) er fjernet fra datagrunnlaget. Tabell \@ref(tab:avBlokkTabell) viser prosentandel forløp med registrering av komplikasjonen "AV-blokk med pacemakerimplantasjon som følge av operasjonen", per måned.

cap <- paste0("Andel forløp med komplikasjon: AV-blokk med ", 
              "pacemakerimplantasjon som følge av operasjonen. ")


d_komplikasjonar_pacemaker <- d_ablanor %>%
  dplyr::select(.data$maaned, .data$komp_avblokk_pm) %>%
  ablanor::ki_komplikasjonar_pacemaker() %>%
  dplyr::group_by(.data$maaned, .drop = FALSE) %>%
  ablanor::aggreger_ki_prop(., forenklet = TRUE) %>% 
  dplyr::select(.data$maaned, .data$ki_teller, .data$ki_nevner)


d_komplikasjonar_pacemaker_tot <- d_ablanor %>%
  dplyr::select(.data$maaned, .data$komp_avblokk_pm) %>%
  ablanor::ki_komplikasjonar_pacemaker() %>%
  ablanor::aggreger_ki_prop() %>% 
  dplyr::select(.data$ki_teller, .data$ki_nevner)


d_komplikasjonar_pacemaker %>%
  dplyr::arrange(desc(.data$maaned)) %>% 
  tibble::add_row(maaned = "Totalt", d_komplikasjonar_pacemaker_tot) %>%
  dplyr::transmute(Måned = .data$maaned,
                   Andel = paste0(.data$ki_teller, "/", .data$ki_nevner),
                   Prosent = paste0(
                     round(.data$ki_teller / .data$ki_nevner * 100, 1), 
                     "%")) %>%
  dplyr::mutate(Andel = dplyr::recode(.data$Andel, 
                                      "0/0" = " -- ")) %>% 
  dplyr::mutate(Prosent = dplyr::recode(.data$Prosent, 
                                        "NaN%" = " -- ")) %>% 
  rapbase::mst(., type = params$tableFormat,
               digs = 1,
               align = "lcc",
               fs = 9, lsd = FALSE, cap = cap)
cat("\n\n\\pagebreak\n")

Prosedyrevarighet

Forløp med manglende prosedyrevarighet (n = r d_ablanor %>% dplyr::filter(is.na(pros_varighet)) %>% nrow()) er fjernet fra datagrunnlaget.

Figur \@ref(fig:figProsedyreVarighetMin) viser et boxplot med fordeling av prosedyrevarighet per måned. Den blå boksen markerer nedre og øvre kvartil, medianen er markert av den tykke linjen. Punktene utenfor greinene viser uteliggere, det vil si forløp med usedvanlig kort eller lang prosedyrevarighet (prosedyrevarighet lengre enn 1,5 ganger interkvartil bredde over øvre kvartil/ under nedre kvartil).

Tabell \@ref(tab:tabellProsedyrevarighet1) og \@ref(tab:tabellProsedyrevarighet2) viser gjennomsnittlig prosedyrevarighet per måned, totalt og for undergrupper. Merk at grunnet manglende registrering av tilhørighet i undergrupper av AFLI/VT samt BMI for et fåtall av forløp kan vi ha små uoverensstemmelser i nevnerne.

fig.cap <-  "Prosedyrevarighet i minutter per måned."

d_ablanor %>% 
  dplyr::filter(!is.na(.data$pros_varighet)) %>% 
  ggplot2::ggplot(ggplot2::aes(y = maaned, x = pros_varighet)) +
  ggplot2::geom_boxplot(fill = colPrimary[4]) +
  ablanor::ablanor_plot_theme() +
  ggplot2::scale_y_discrete(drop = FALSE) + 
  ggplot2::labs(title = paste0("Prosedyrevarighet (minutter) de ",
                               showN, " siste månedene"), 
                subtitle = hospitalNameShort) 
# VARIGHET prosedyre per måned, TOTALT :
d_varighet_pros_tot <- d_ablanor %>%
  dplyr::filter(!is.na(.data$pros_varighet)) %>% 
  dplyr::select(.data$pros_varighet, .data$maaned) %>%
  dplyr::group_by(maaned, .drop = FALSE) %>%
  dplyr::summarise(pros_meanN = paste0(sprintf("%0.0f", 
                                               mean(.data$pros_varighet)), 
                                       " [", 
                                       sprintf("%0.0f", dplyr::n()),
                                       "]"),
                   .groups = 'drop') %>% 
  dplyr::transmute(maaned = .data$maaned, value = .data$pros_meanN) 

# FORLØPSTYPE
d_varighet_forlop <- d_ablanor %>%
  dplyr::filter(!is.na(.data$pros_varighet)) %>% 
  dplyr::select(.data$forlopstype, .data$pros_varighet, .data$maaned) %>%
  dplyr::group_by(.data$forlopstype, .data$maaned, .drop = FALSE) %>%
  dplyr::summarise(pros_meanN = paste0(sprintf("%0.0f", 
                                               mean(pros_varighet)), 
                                       " [",
                                       sprintf("%0.0f", dplyr::n()), "]"),
                   .groups = 'drop') %>%
  dplyr::mutate(pros_meanN = dplyr::recode(.data$pros_meanN, 
                                           "NaN [0]" = " -- ")) %>% 
  dplyr::ungroup()

# varighet forløp per prosedyre
d_varighet_forlop_pros <- d_varighet_forlop %>%
  dplyr::rename(legend = .data$forlopstype, value = .data$pros_meanN) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("AFLI"="1",
                "VT"="2", 
                "SVT"="3", 
                "EFU"="4")


#ALDER
d_varighet_alder_pros<- d_ablanor %>%
  dplyr::filter(!is.na(.data$pros_varighet)) %>% 
  dplyr::select(.data$alder_75, 
                .data$pros_varighet, 
                .data$maaned) %>%
  dplyr::group_by(.data$alder_75, .data$maaned, .drop = FALSE) %>%
  dplyr::summarise(pros_meanN = paste0(sprintf("%0.0f", 
                                               mean(.data$pros_varighet)),
                                       " [",
                                       sprintf("%0.0f", dplyr::n()), "]"),
                   .groups = 'drop') %>%
  dplyr::mutate(pros_meanN = dplyr::recode(.data$pros_meanN, 
                                           "NaN [0]" = " -- ")) %>% 
  dplyr::ungroup() %>% 
  dplyr::rename(legend = .data$alder_75, value = .data$pros_meanN) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("over 75" = ">=75", 
                "under 75" = "<75")



#BMI
d_varighet_bmi_pros <- d_ablanor %>%
  dplyr::filter(!is.na(.data$pros_varighet)) %>% 
  dplyr::select(.data$bmi_over35,
                .data$rtg_tid, 
                .data$pros_varighet,
                .data$maaned) %>%
  dplyr::group_by(.data$bmi_over35, .data$maaned, .drop = FALSE) %>%
  dplyr::summarise(pros_meanN = paste0(sprintf("%0.0f", 
                                               mean(.data$pros_varighet)), 
                                       " [",
                                       sprintf("%0.0f", dplyr::n()), "]"),
                   .groups ='drop') %>%
  dplyr::mutate(pros_meanN = dplyr::recode(.data$pros_meanN, 
                                           "NaN [0]" = " -- ")) %>% 
  dplyr::ungroup() %>%
  dplyr::rename(legend = .data$bmi_over35, value = .data$pros_meanN) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("over 35" = "BMI >=35", 
                "under 35" = "BMI <35")

# AFLI - ICD
d_varighet_afli_icd_pros <- d_ablanor %>%
  dplyr::filter(!is.na(.data$pros_varighet), 
                !is.na(.data$kategori_afli_aryt_i48)) %>%
  dplyr::select(.data$kategori_afli_aryt_i48, 
                .data$pros_varighet,
                .data$maaned) %>%
  dplyr::group_by(.data$kategori_afli_aryt_i48, .data$maaned, .drop = FALSE) %>%
  dplyr::summarise(pros_meanN = paste0(sprintf("%0.0f", 
                                               mean(.data$pros_varighet)),
                                       " [",
                                       sprintf("%0.0f" , dplyr::n()), "]"),
                   .groups ='drop') %>%
  dplyr::mutate(pros_meanN = dplyr::recode(.data$pros_meanN, 
                                           "NaN [0]" = " -- ")) %>% 
  dplyr::ungroup() %>%
  dplyr::rename(legend = .data$kategori_afli_aryt_i48, 
                value = .data$pros_meanN) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE)



# VT- KARDIOMYOPATI
d_varighet_vt_kardiomyopati_pros <- d_ablanor %>%
  dplyr::filter(!is.na(.data$pros_varighet), 
                !is.na(.data$kategori_vt_kardiomyopati)) %>%
  dplyr::select(.data$kategori_vt_kardiomyopati,
                .data$pros_varighet,
                .data$maaned) %>%
  dplyr::group_by(.data$kategori_vt_kardiomyopati, 
                  .data$maaned,
                  .drop = FALSE) %>%
  dplyr::summarise(pros_meanN = paste0(sprintf("%0.0f", 
                                               mean(.data$pros_varighet)), 
                                       " [",
                                       sprintf("%0.0f", dplyr::n()), "]"),
                   .groups='drop') %>%
  dplyr::mutate(pros_meanN = dplyr::recode(.data$pros_meanN, 
                                           "NaN [0]" = " -- ")) %>% 
  dplyr::ungroup() %>% 
  dplyr::rename(legend = .data$kategori_vt_kardiomyopati,
                value = .data$pros_meanN) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE)

# KOMPLETT TABELL: 
d_varighet_pros_TOTAL <- 
  dplyr::full_join(
    d_varighet_pros_tot %>%
      dplyr::rename("Totalt" = "value"),
    d_varighet_forlop_pros,
    by = "maaned"
  ) %>%
  dplyr::left_join(., d_varighet_alder_pros, by = "maaned") %>%
  dplyr::left_join(., d_varighet_bmi_pros, by = "maaned") %>%
  dplyr::left_join(., d_varighet_afli_icd_pros, by = "maaned") %>%
  dplyr::left_join(., d_varighet_vt_kardiomyopati_pros, by = "maaned") %>% 
  dplyr::arrange(desc(.data$maaned)) %>% 
  dplyr::rename("Paroks." = "AFLI-ICD 48.0 Paroksymal atrieflimmer", 
                "Persist." = "AFLI-ICD 48.1 Persisterende atrieflimmer", 
                "Langtidsp." = "AFLI-ICD 48.1 Langtidspersisterende atrieflimmer", 
                "Uten" = "Uten kardiomyopati", 
                "ICM" = "Iskemisk KM (ICM)", 
                "DCM" ="Dilatert KM (DCM)", 
                "Annen" = "Annen KM", 
                "Ukjent" = "Ukjent om kardiomyopati")
cat("\n\n\\pagebreak\n")
cap <- paste0("Del 1. Gjennomsnittlig prosedyrevarighet i minutter de ", 
              showN, " siste månedene. ", 
              "Totalt, for hver av forløpstypene, for alder over/under 75 år ", 
              "og for BMI over/under 35. ",
              "Gjennomsnitt [antall]")
knitr::kable(
  x = d_varighet_pros_TOTAL[, 1:10],
  format = switch(params$tableFormat,
                  pdf = "latex",
                  html = "html"),
  align = c("l", rep("c", 9)),
  caption = cap,
  booktabs = TRUE) %>%
  kableExtra::add_header_above(c(" " = 2,
                                 "Forløpstype" = 4,
                                 "Alder" = 2,
                                 "BMI" = 2)) %>%
  gsub("maaned", "Måned", .) %>%
  ablanor::mst_short(., type = params$tableFormat,
                     lsd = TRUE, 
                     fs = 8, 
                     full_width = FALSE)
cap <- paste0("Del 2. Gjennomsnittlig prosedyrevarighet i minutter de ", 
              showN, " siste månedene. ", 
              "Totalt, for kategorier av AFLI og VT. ",
              "Gjennomsnitt [antall]")
knitr::kable(
  x = d_varighet_pros_TOTAL[, c(1, 11:18)],
  format = switch(params$tableFormat,
                  pdf = "latex",
                  html = "html"),
  align = c("l", rep("c", 8)),
  caption = cap,
  booktabs = TRUE) %>%
  kableExtra::add_header_above(c(" " = 1,
                                 "AFLI - ICD" = 3,
                                 "VT - Kardiomyopati" = 5)) %>%
  gsub("maaned", "Måned", .) %>%
  ablanor::mst_short(., type = params$tableFormat, 
                     lsd = FALSE, 
                     fs = 8,
                     full_width = FALSE)
cat("\n\n\\pagebreak\n")

Røntgentid

Forløp med manglende røntgenvarighet (n = r d_ablanor %>% dplyr::filter(is.na(rtg_tid)) %>% nrow()) er fjernet fra datagrunnlaget.

Figur \@ref(fig:figRontgenVarighetMin) viser et boxplot med fordeling av røntgenvarighet per måned. Den blå boksen markerer nedre og øvre kvartil, medianen er markert av den tykke linjen. Punktene utenfor greinene viser uteliggere, det vil si forløp med usedvanlig kort eller lang prosedyrevarighet (prosedyrevarighet lengre enn 1,5 ganger interkvartil bredde over øvre kvartil/ under nedre kvartil).

Tabell \@ref(tab:tabellRontgenvarighet1) viser gjennomsnittlig røntgenvarighet per måned, totalt og for hver av de fire forløpstypene.

cap <- "Røntgentid i minutter per måned."

d_varighet_tot_maaned <- d_ablanor %>%
  dplyr::filter(!is.na(.data$rtg_tid)) %>% 
  dplyr::select(.data$maaned, .data$rtg_tid) %>%
  dplyr::mutate(rtg_tid = as.numeric(.data$rtg_tid)) %>%
  dplyr::mutate(rtg_tid_min = .data$rtg_tid / 60)

d_varighet_tot_maaned %>% 
  ggplot2::ggplot(ggplot2::aes(y = maaned, x = rtg_tid_min)) +
  ggplot2::geom_boxplot(fill = colPrimary[4]) +
  ablanor::ablanor_plot_theme() +
  ggplot2::scale_y_discrete(drop = FALSE) + 
  ggplot2::labs(title = paste0("Røntgenvarighet (minutter) de ",
                               showN, " siste månedene"), 
                subtitle = hospitalNameShort) 
# VARIGHET røntgen per måned TOTALT:
d_varighetRtg_mnd <- d_ablanor %>%
  dplyr::filter(!is.na(.data$rtg_tid)) %>% 
  dplyr::select(.data$rtg_tid, .data$maaned) %>%
  dplyr::mutate(rtg_tid = as.numeric(.data$rtg_tid)) %>%
  dplyr::mutate(rtg_tid_min = .data$rtg_tid / 60) %>%
  dplyr::group_by(.data$maaned, .drop = FALSE) %>%
  dplyr::summarise(rtg_meanN = paste0(sprintf("%0.0f",
                                              mean(.data$rtg_tid_min)), 
                                      " [", sprintf("%0.0f", dplyr::n()), "]"),
                   .groups = 'drop') %>%
  dplyr::transmute(maaned = .data$maaned, Totalt = .data$rtg_meanN) 


# FORLØPSTYPE
d_varighetRtg_forlop <- d_ablanor %>%
  dplyr::filter(!is.na(.data$rtg_tid)) %>% 
  dplyr::select(.data$forlopstype, .data$rtg_tid, .data$maaned) %>%
  dplyr::group_by(.data$forlopstype, .data$maaned, .drop = FALSE) %>%
  dplyr::mutate(rtg_tid = as.numeric(.data$rtg_tid)) %>%
  dplyr::mutate(rtg_tid_min = .data$rtg_tid / 60) %>%
  dplyr::summarise(rtg_meanN = paste0(sprintf("%0.0f",
                                              mean(.data$rtg_tid_min)),
                                      " [",
                                      sprintf("%0.0f", dplyr::n()), "]"),
                   .groups = 'drop') %>%
  dplyr::mutate(rtg_meanN = dplyr::recode(.data$rtg_meanN, 
                                          "NaN [0]" = " -- ")) %>% 
  dplyr::ungroup() %>% 
  dplyr::rename(legend = .data$forlopstype, value = .data$rtg_meanN) %>%
  ablanor::leggTilTomme_PivotWide(., remove_NAcols = TRUE) %>% 
  dplyr::rename("AFLI"="1",
                "VT"="2", 
                "SVT"="3", 
                "EFU"="4")


d_varighetRtg_TOTAL<- dplyr::full_join(d_varighetRtg_mnd,
                                       d_varighetRtg_forlop,
                                       by = "maaned") %>% 
  dplyr::arrange(desc(.data$maaned))
cap <- paste0("Gjennomsnittlig røntgenvarighet i minutter de ", 
              showN, " siste månedene. ",
              "Totalt og for hver forløpstype. ", 
              "Gjennomsnitt [antall].")

knitr::kable(
  x = d_varighetRtg_TOTAL,
  format = switch(params$tableFormat,
                  pdf = "latex",
                  html = "html"),
  align = c("l", rep("c", 5)),
  caption = cap,
  booktabs = TRUE) %>%
  kableExtra::add_header_above(c(" " = 1,
                                 " " = 1,
                                 "Forløpstype" = 4)) %>%
  gsub("maaned", "Måned", .) %>%
  ablanor::mst_short(., type = params$tableFormat,
                     lsd = FALSE, 
                     fs = 8, 
                     full_width = FALSE)


Rapporteket/ablanor documentation built on Feb. 27, 2025, 8:26 p.m.