library(magrittr)
library(knitr)
library(kableExtra)
library(dplyr)
library(tidyr)
library(ggplot2)
library(noric)
# library(gridExtra) Sjekk om rapporten fungerer uten denne pakken


# 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)
colPrimary <- c("#000059", "#084594", "#2171b5", 
                "#4292c6", "#6baed6", "#c6dbef")
colNeutral <- c("#4D4D4D", "#737373", "#A6A6A6", "#DADADA")
colKontrast <- "#FF7260"
if (params$rendered_by_shiny)
  shiny::setProgress(0.05)  # set progress to 5%
# Staging datasett må være max XX dager gammelt
sjekkStaging <- noric::checkValidStagingData(
  registryName = params$registryName, 
  diffDaysCheck = 6)


valid_staging_data <- sjekkStaging$valid_staging_data


if(valid_staging_data) {

  nyeste_staging_data <- sjekkStaging$nyeste_staging_data

  stagingData <- rapbase::loadStagingData(registryName = params$registryName, 
                                          dataName = nyeste_staging_data)

  aP_nasjonalt <- stagingData$aP_nasjonalt
  aK_nasjonalt <- stagingData$aK_nasjonalt
  periode_data <- stagingData$periode_data

  kilde <- "staging"

} else{ 


  # 1) DATAGRUNNLAG: PERIODE FOR SQL SPØRRING

  # NYESTE DATO: 
  # Finne nyeste prosedyredato (=nyeste registrering). 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
  # I rapporten bruker vi kun hele (komplette = fullførte måneder)

  # ELDSTE DATO: 
  # generelt :Januar fra i fjor (hele foregående år skal vise i rapporten)
  # AK: Bruker 5 siste kvartal. Kan gå lenger tilbake enn fjoråret, dersom i 
  #     starten av året. 
  # SS: Brukes til "antall_stent_under_opphold" (foreskriving av medikamenter) +          
  # "stenting_av_venstre_hovedstamme" (IVUS/OCT - Per kvartal!)
  kilde <- "prod"

  periode_data <- data.frame(
    # Nyeste registrering eller gårsdagen (ikke forhåndsregistreringer)
    nyeste_reg = min(
      (as.Date(Sys.time()) - 1), 
      noric::getLatestEntry(registryName = params$registryName))) %>% 

    dplyr::mutate(



      # SISTE DATO AVGJØR SISTE MÅNED: 
      siste_dato_innevarende_mnd = lubridate::ceiling_date(
        x = .data$nyeste_reg, 
        unit =  "month") - lubridate::days(1),

      siste_dato = dplyr::case_when(
        # siste dato er nyeste dato --> nyeste mnd er komlett
        .data$siste_dato_innevarende_mnd == .data$nyeste_reg ~ 
          .data$nyeste_reg, 

        # siste dato er ikke nyeste --> nyest mnd er ikke komplett, ta forrige
        .data$siste_dato_innevarende_mnd != .data$nyeste_reg ~ 
          lubridate::floor_date(.data$nyeste_reg, "month") - 
          lubridate::days(1), 

        TRUE ~ as.Date(NA_character_)),




      # SISTE DATO AVGJØR SISTE KVARTAL
      siste_dato_innevarende_kvartal = lubridate::ceiling_date(
        x = .data$nyeste_reg, 
        unit =  "quarter") - lubridate::days(1),

      kvartal_komplett_start = dplyr::case_when(
        # siste dato i kvartalet er lik nyeste dato --> kvartalet er komplett
        .data$siste_dato_innevarende_kvartal == .data$nyeste_reg ~ 
          lubridate::floor_date(.data$nyeste_reg, 
                                unit =  "quarter"), 

        # siste dato i kvartalet er ulik nyeste dato -->bruk forrige kvartal
        .data$siste_dato_innevarende_kvartal != .data$nyeste_reg ~ 
          lubridate::floor_date(.data$nyeste_reg, 
                                unit =  "quarter") - months(3), 

        TRUE ~ as.Date(NA_character_)),



      # Inneværende år: 
      nyesteRegYear = as.numeric(format(.data$siste_dato, format = "%Y")),

      # Fjoråret
      sisteHeleYear = .data$nyesteRegYear - 1, 

      # Første dato for SQL -spørring : 01. januar fjoråret
      forste_dato  = as.Date(paste0(sisteHeleYear, "-01-01"),
                             format = "%Y-%m-%d"), 

      # Aortaklaff + Segment stent (indikator per kvartal): 
      forste_dato_ak_ss = as.Date(paste0(sisteHeleYear -1, "-01-01"),
                                  format = "%Y-%m-%d")
    ) %>% 
    dplyr::select(-.data$siste_dato_innevarende_mnd, 
                  -.data$siste_dato_innevarende_kvartal)

  # 2) HENTE DATASETTENE (SQL-spørring)
  sS_nasjonalt <- noric::getPrepSsData(
    registryName = params$registryName,
    fromDate  = periode_data$forste_dato_ak_ss,
    toDate = periode_data$siste_dato,
    singleRow = FALSE)

  # Hardkodet 2018- dags dato pga figur 4,5 og 6
  aP_nasjonalt <- noric::getPrepApData(
    params$registryName,
    fromDate  = as.Date("2018-01-01", format = "%Y-%m-%d"),
    toDate = periode_data$siste_dato,
    singleRow = FALSE)

  aK_nasjonalt <- noric::getPrepAkData(
    registryName = params$registryName,
    fromDate  = periode_data$forste_dato_ak_ss,
    toDate = periode_data$siste_dato,
    singleRow = FALSE)

  anD_nasjonalt <- noric::getPrepAnDData(
    registryName = params$registryName,
    fromDate  = periode_data$forste_dato,
    toDate = periode_data$siste_dato,
    singleRow = FALSE)

  # 3) VELGE KUN DE VARIABLENE VI TRENGER FRA HJELPEDATASETTENE
  sS_nasjonalt %<>%
    dplyr::select(.data$ProsedyreDato,
                  .data$StentType,
                  .data$Segment,
                  .data$Graft,
                  .data$ForlopsID,
                  .data$Sykehusnavn,
                  .data$AvdRESH,
                  .data$aar,
                  .data$maaned,
                  .data$kvartal)

  anD_nasjonalt %<>%
    dplyr::select(.data$ForlopsID,
                  .data$AvdRESH,
                  .data$metode)

  # 4a) BEARBEIDE OG UTLEDE NYE VARIABLER
  aP_nasjonalt %<>%
    dplyr::select(
      .data$AvdRESH,
      .data$Sykehusnavn,
      .data$Regtype,
      .data$PrimaerForlopsID,
      .data$ProsedyreDato,
      .data$ProsedyreTid,
      .data$ProsedyreType,
      .data$OverflyttetFra,
      .data$AnkomstPCIDato,
      .data$AnkomstPCITid,
      .data$InnleggelseHenvisendeSykehusDato,
      .data$InnleggelseHenvisendeSykehusTid,
      .data$Innkomstarsak,
      .data$Indikasjon,
      .data$Hastegrad,
      .data$BesUtlEKGDato,
      .data$BesUtlEKGTid,
      .data$BeslEKGDato, 
      .data$BeslEKGTid,
      .data$BeslutningsutlosendeEKG,
      .data$GittTrombolyse,
      .data$HLRForSykehus,
      .data$KobletForlopsID,
      .data$ForlopsType2,
      .data$IFR,
      .data$FFR,
      .data$IMR,
      .data$IVUS,
      .data$OCT,
      .data$PDPA, 
      .data$PA_Hyperemi, 
      .data$PD_Hyperemi,
      .data$ForlopsID,
      .data$ASA,
      .data$AndrePlatehemmere,
      .data$AndrePlatehemmere,
      .data$Antikoagulantia,
      .data$UtskrStatiner,
      .data$TidlABC,
      .data$UtskrevetDod,
      .data$SkjemaStatusStart,
      .data$SkjemastatusHovedskjema,
      .data$SkjemaStatusUtskrivelse,
      .data$SkjemaStatusKomplikasjoner
    ) %>%

    noric::utlede_OppholdsID(.) %>%

    noric::utlede_ferdigstilt(df = .,
                              var = .data$SkjemaStatusStart,
                              suffix = "StartSkjema") %>%
    noric::utlede_ferdigstilt(df = .,
                              var = .data$SkjemastatusHovedskjema,
                              suffix = "HovedSkjema") %>%
    noric::utlede_ferdigstilt(df = .,
                              var = .data$SkjemaStatusUtskrivelse,
                              suffix = "UtskrSkjema") %>%
    noric::utlede_ferdigstilt(df = .,
                              var = .data$SkjemaStatusKomplikasjoner,
                              suffix = "KomplikSkjema") %>%

    noric::legg_til_antall_stent(df_ap = ., df_ss = sS_nasjonalt) %>%
    noric::legg_til_antall_stent_opphold(df_ap = .) %>%
    noric::satt_inn_stent_i_lms(df_ap = ., df_ss = sS_nasjonalt) %>%

    # #  Legge til utledete variabler fra annen Diagnostikk. Hjelpevariabler for
    # # trykkmåling. Disse fjernes før tabellen legges i utforsker
    # noric::legg_til_trykkmaalinger(df_ap = .,
    #                                df_ad = anD_nasjonalt) %>%
    # 
    # LEgg til hjelpevariabler for ventetider
    noric::legg_til_ventetid_nstemi_timer(.) %>%
    noric::legg_til_ventetid_stemi_min(.) %>%

    # Legge til kvalitetsindikatorene:
    noric::ki_ferdigstilt_komplikasjoner(df_ap = .) %>%
    noric::ki_trykkmaaling_utfoert(df_ap = .) %>%
    noric::ki_ivus_oct_ved_stenting_lms(df_ap = .) %>%
    noric::ki_foreskr_blodfortynnende(df_ap = .) %>%
    noric::ki_foreskr_kolesterolsenkende(df_ap = .) %>%
    noric::ki_nstemi_utredet_innen24t() %>%
    noric::ki_nstemi_utredet_innen72t() %>%
    noric::ki_stemi_pci_innen120min() %>%

    dplyr::mutate(
      maaned = as.factor(format(x = .data$ProsedyreDato, format = "%Y-%m")),
      aar = lubridate::year(.data$ProsedyreDato),
      kvartal = paste0(lubridate::year(.data$ProsedyreDato),
                       " Q",
                       lubridate::quarter(.data$ProsedyreDato,
                                          with_year = FALSE))) %>%
    dplyr::mutate(admissionType = dplyr::case_when(
      .data$OverflyttetFra %in% "Annet sykehus" ~ "Overflyttet",
      .data$OverflyttetFra %in% c("Nei, direkte inn til dette sykehus",
                                  "Omdirigert ambulanse") ~ "Direkte",
      TRUE ~ NA_character_))

  # 4b) BEARBEIDE OG UTLEDE NYE VARIABLER
  aK_nasjonalt %<>%
    dplyr::select(
      .data$ProsedyreDato,
      .data$AvdKompPacemaker,
      .data$LabKompDod,
      .data$TypeKlaffeprotese,
      .data$Sykehusnavn,
      .data$AvdRESH,
      .data$ForlopsID,
      .data$Pacemaker,
      .data$SkjemaStatusHovedskjema) %>% 

    dplyr::mutate(
      kvartal = paste0(
        lubridate::year(.data$ProsedyreDato),
        " Q",
        lubridate::quarter(.data$ProsedyreDato, with_year = FALSE))) %>%
    noric::ki_ak_pacemakerbehov(df_ak = .)

}
if (params$rendered_by_shiny)
  shiny::setProgress(0.1)  # set progress to 10%
timeTableYear <- data.frame(
  aar = 2018:periode_data$nyesteRegYear)
# 5 siste ferdige kvartal
timeTableQuarter <- data.frame(
  KvartalDatoStart = rev(seq(periode_data$kvartal_komplett_start, 
                             by = "-1 quarter", 
                             length.out = 5))) %>% 
  dplyr::transmute(
    kvartal = paste0(lubridate::year(.data$KvartalDatoStart), 
                     " Q", 
                     lubridate::quarter(.data$KvartalDatoStart, 
                                        with_year = FALSE)))
# Hele forrige år og alle påbegynte måneder hittil i år
forsteDatoSisteMonth <- lubridate::floor_date(periode_data$siste_dato, 
                                              "month") 
timeTableMonth <- data.frame(
  monthDato = seq(as.Date(paste0(periode_data$sisteHeleYear, 
                                 "-01-01")), 
                  forsteDatoSisteMonth,
                  by = "month")) %>% 
  dplyr::transmute(maaned = as.factor(format(x = .data$monthDato, 
                                             format = "%Y-%m")))
if (params$rendered_by_shiny)
  shiny::setProgress(0.15)  # set progress to 15%
nyeste_registrering_ak <- aK_nasjonalt %>% 
  dplyr::summarise(nyesteReg_max = max(.data$ProsedyreDato)) %>% 
  # Bruke gårsdagens dato som referanse. Dersom ingen nye registreringer 
  # (eller overføringer har stoppet opp), brukes nyeste registrering som ref.
  # Unngår at forhåndsregisrerte planlagte forløp kommer med i rapporten.
  dplyr::mutate(nyesteReg = min((as.Date(Sys.time())-1), 
                                .data$nyesteReg_max))
dim_ak_lokalt <- aK_nasjonalt %>% 
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>% 
  dim(.)
if (dim_ak_lokalt[1] > 10) {

  # 5 siste ferdige kvartal
  timeTableQuarterAK <- timeTableQuarter
}
if (params$rendered_by_shiny)
  shiny::setProgress(0.25)  # set progress to 25%

\bigskip \bigskip \bigskip

Datagrunnlag

Rapporten er generert med utgangspunkt i NORIC's nasjonale database (r kilde). Datasettet som ligger til grunn har data fra r aP_nasjonalt %>% dplyr::select(.data$AvdRESH) %>% dplyr::distinct() %>% nrow() sykehus og nyeste registrering er datert r format(periode_data$nyeste_reg, '%d. %B %Y').

Det presenteres månedlige resultater for hele fjorårets produksjon, samt alle fullførte måndeder hittil i år. Den siste prosedyredatoen som er med i tabellene og figurene er dermed r format(periode_data$siste_dato, '%d. %B %Y').

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

Ferdigstilte komplikasjonsskjema

Opplysninger om komplikasjoner er viktig for å kunne vurdere behandlingskvalitet og risiko. Dersom de aktuelle registreringsskjemaene ikke er ferdigutfylt, blir datagrunnlaget for videre analysearbeid for dårlig. Indikatoren måler andel ferdigstilte registreringsskjema for komplikasjoner oppstått på sykehus etter prosedyre. Alle pasientforløp er inkludert. Tabell \@ref(tab:tabFerdigtiltKompl) viser måloppnåelse per måned for r params$hospitalName og nasjonalt (Mål $\geq$ 95 %).

#Lokalt
ferdigstilt_lokalt <- aP_nasjonalt %>% 
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>% 
  dplyr::filter(.data$indik_komplik_ferdig_data %in% "ja") %>% 
  janitor::tabyl(.data$maaned, 
                 .data$indik_komplik_ferdig, 
                 show_missing_levels = TRUE) %>% 
  janitor::adorn_totals("col", name = "Totalt") %>% 
  dplyr::transmute(

    maaned = .data$maaned, 

    Prosent = paste0(round(.data$ja / .data$Totalt * 100, 1), 
                     " %"),

    Totalt = ifelse(.data$Totalt < 5,
                    yes = "N",
                    no = .data$Totalt),

    Ferdigstilt = ifelse(.data$Totalt %in% "N",
                         yes = NA,
                         no = .data$ja),

    Prosent = ifelse(.data$Totalt %in% "N",
                     yes = NA,
                     no = .data$Prosent)) %>% 
  dplyr::select(.data$maaned, .data$Totalt, .data$Ferdigstilt, .data$Prosent)


#Nasjonalt
ferdigstilt_nasjonalt <- aP_nasjonalt %>% 
  dplyr::filter(.data$indik_komplik_ferdig_data %in% "ja") %>% 
  janitor::tabyl(.data$maaned,
                 indik_komplik_ferdig,
                 show_missing_levels = TRUE) %>% 
  janitor::adorn_totals("col", name = "Totalt") %>% 
  dplyr::transmute(
    maaned = as.factor(.data$maaned), 
    Nasjonalt = paste0(round(.data$ja / .data$Totalt * 100, 1), " %")) 



#Tabell
tabFerdigtiltKompl <- timeTableMonth %>% 
  dplyr::left_join(., ferdigstilt_lokalt, by = c("maaned")) %>% 
  dplyr::left_join(., ferdigstilt_nasjonalt, by = "maaned") %>% 
  dplyr::rename("Måned" = .data$maaned) %>% 
  replace(is.na(.), "-")


cap <- paste0(
  "Antall og andel ferdigstilte komplikasjonsskjemaer etter måned. ", 
  "Andel beregnes ikke for måneder med færre enn 5 observasjoner.")

noric::mst(tab = tabFerdigtiltKompl, 
           type = params$tableFormat,
           cap = cap,
           digs = c(0, 0, 1, 1), 
           align = rep("c", 4), 
           label = "tabFerdigtiltKompl")
cat("\n\n\\pagebreak\n")
if (params$rendered_by_shiny)
  shiny::setProgress(0.35)  # set progress to 35%

Invasiv utredning ved NSTEMI

Ved hjerteinfarkt uten ST-elevasjon i EKG (NSTEMI) er blodåren ofte ikke helt tett, men det er risiko for at den kan bli det. Europeiske retningslinjer anbefaler derfor at pasienter med NSTEMI får utført invasiv koronar utredning innen 24 timer, mens en norsk nasjonal kvalitetsindikator anbefaler at dette skjer innen 72 timer. Registeret presenterer data for begge disse indikatorene som andel pasienter med indikasjon NSTEMI der koronar angiografi har blitt utført innen 24 og 72 timer etter innleggelse i sykehus. Det er således to ulike kvalitetsindikatorer som gjelder for ventetid på utredning ved NSTEMI med målnivå på henholdsvis 50 % og 80 %.

Tabell \@ref(tab:tabVentetid24t) og \@ref(tab:tabVentetid72t) viser måloppnåelse per måned for r params$hospitalName og nasjonalt for 24 og 72 timers utredning, henholdsvis. Figur \@ref(fig:figVentetid24TFacetWrap) viser månedlig måloppnåelse for direkte innlagte og overflyttede pasienter hver for seg og samlet. Figur \@ref(fig:figVentetid24TSamletAar) viser årlig måloppnåelse for direkte innlagte og overflyttede pasienter hver for seg og samlet.

Invasiv utredning ved NSTEMI innen 24 timer

cap <- paste0(
  "Antall og andel pasienter med indikasjon NSTEMI som innen 24 timer etter ", 
  "innleggelse i sykehus har blitt utredet med invasiv koronar angiografi. ", 
  "Tabellen inkluderer både pasienter innlagt direkte på PCI-sykehus og ", 
  "pasienter overflyttet fra annet sykehus. ", 
  "Pasienter overflyttet fra annen avdeling på samme sykehus er ekskludert. ", 
  "Komplett data ved direkte innleggelse er der både tid for ankomst ", 
  "PCI-sykehus og tid for arteriepunksjon er registrert. ", 
  "For forløp der pasienten har blitt overført fra et annet sykehus, ", 
  "er komplett data der både tid for innleggelse i henvisende sykehus og tid ", 
  "for arteriepunksjon er registrert. Måneder med mindre enn 50\\% komplett ",
  " data eller færre enn 5 forløp blir markert med stjerne og andel forløp ", 
  "med ventetid under 24 timer beregnes ikke. (Målnivå: 50 \\%)")


nstemi_24t_lokalt <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja") %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_nstemi_angio_innen24t,
                 show_missing_levels = TRUE ) %>%
  janitor::adorn_totals("col", name = "Total") %>%
  dplyr::mutate(
    # Komplette er alle som er ja/nei, men ikkje ugyldig/manglende
    komplette_antall = .data$ja + .data$nei,
    komplette_prosent =  .data$komplette_antall / .data$Total,
    komplette_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$komplette_antall, " av ", .data$Total, "*"),
      false = paste0(.data$komplette_antall, " av ", .data$Total),
      missing = NA_character_),

    # Blandt komplette: Antall NTSTEMI innen 24 t ,
    nstemi_24t_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$ja, " av ", .data$komplette_antall, " (-%)"),
      false = paste0(.data$ja, " av ", .data$komplette_antall, " (",
                     round(100 * .data$ja / .data$komplette_antall, 1), "%)"),
      missing = NA_character_)) %>%
  dplyr::select(.data$maaned,
                .data$komplette_tekst,
                .data$nstemi_24t_tekst)


nstemi_24t_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja",
                .data$indik_nstemi_angio_innen24t %in% c("ja", "nei")) %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_nstemi_angio_innen24t,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>% 
  dplyr::transmute(
    maaned = .data$maaned,
    Nasjonalt = paste0(round(100 * .data$ja / .data$Totalt, 1), "%"))

# Forberede tabell, bruke kompletthet og ventetid
tabVentetid24t <- timeTableMonth %>%
  dplyr::left_join(., nstemi_24t_lokalt, by = c("maaned")) %>%
  dplyr::left_join(., nstemi_24t_nasjonalt, by = c("maaned")) %>%
  dplyr::rename(
    "Måned" = .data$maaned,
    "Komplette av datagrunnlaget" = .data$komplette_tekst,
    "Angio innen 24t av komplette" = .data$nstemi_24t_tekst) %>%
  replace(is.na(.), "-")




noric::mst(tab = tabVentetid24t,
           type = params$tableFormat,
           cap = cap,
           digs = c(0, 0, 0, 1, 1),
           align = rep("c", 5),
           label = "tabVentetid24t")
  cat("\n\n\\pagebreak\n")

Figurer - Invasiv utredning ved NSTEMI innen 24 timer, månedlig måloppnåelse

# Lokalt: Andel komplette under 50% per måned?
nstemi_komplette <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID,
                .data$indik_nstemi_angio_innen24t_data %in% "ja") %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_nstemi_angio_innen24t,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name  = "Totalt") %>%
  transmute(
    maaned = .data$maaned,
    komplette_antall = (.data$ja + .data$nei),
    komplette_andel = .data$komplette_antall / .data$Totalt)
# LOKALT : For NSTEMI med komplette forløp
prep_figVentetid24t_lokalt <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja",
                .data$indik_nstemi_angio_innen24t %in% c("ja", "nei")) %>%
  dplyr::filter(.data$ProsedyreDato >= periode_data$forste_dato,
                .data$ProsedyreDato <= periode_data$siste_dato) %>%

  #Samlet *(Direkte og overflyttet)
  dplyr::group_by(.data$maaned) %>%
  dplyr::mutate(
    innen_24t_samlet = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                           na.rm = TRUE)/n(),
    n_samlet = n()) %>%
  dplyr::ungroup() %>%

  # per admission type (Direkte / OVerflyttet)
  dplyr::group_by(.data$maaned, .data$admissionType) %>%
  dplyr::mutate(
    innen_24t_type = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                         na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # Beholde en rad per Samlet, Direkte, OVerflyttet :
  dplyr::count(.data$maaned,
               .data$admissionType,
               .data$innen_24t_type,
               .data$innen_24t_samlet,
               .data$n_samlet) %>%
  tidyr::pivot_longer(cols = starts_with("innen_24t_"), names_to = "Type") %>%
  dplyr::mutate(name = dplyr::case_when(

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_type" ~ "Direkte",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_type" ~ "Overflyttet",

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet"
  ),

  # antall forløp per type, brukes for å fjerne måneder med <5 forløp i figur
  antall_komplette = dplyr::case_when(
    .data$Type %in% "innen_24t_type" ~ n,
    .data$Type %in% "innen_24t_samlet" ~ n_samlet
  )) %>%
  dplyr::select(.data$maaned,
                .data$name,
                .data$value,
                .data$antall_komplette) %>%
  dplyr::group_by(.data$maaned, .data$name) %>%
  dplyr::distinct()

# Dersom data ikke komplett, bytte ut verdiene med NA
prep_figVentetid24t_lokalt %<>%
  dplyr::left_join(.,
                   nstemi_komplette %>%
                     select(.data$maaned, .data$komplette_andel),
                   by = "maaned") %>%
  dplyr::mutate(
    value = ifelse(.data$komplette_andel < 0.5 | .data$antall_komplette < 5,
                   yes = NA_real_,
                   no = .data$value),
    Sykehus = params$hospitalName) %>%
  dplyr::select(.data$maaned, .data$name, .data$value, .data$Sykehus)
# NASJONALT
prep_figVentetid24t_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja",
                .data$indik_nstemi_angio_innen24t %in% c("ja", "nei"))  %>%
  dplyr::filter(.data$ProsedyreDato >= periode_data$forste_dato,
                .data$ProsedyreDato <= periode_data$siste_dato) %>%

  #Samlet (Direkte og overflyttet)
  dplyr::group_by(.data$maaned) %>%
  dplyr::mutate(
    innen_24t_samlet = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                           na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # per admission type (Direkte / OVerflyttet)
  dplyr::group_by(.data$maaned, .data$admissionType) %>%
  dplyr::mutate(
    innen_24t_type = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                         na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # Beholde en rad per Samlet, Direkte, OVerflyttet :
  dplyr::count(.data$maaned,
               .data$admissionType,
               .data$innen_24t_type,
               .data$innen_24t_samlet) %>%
  tidyr::pivot_longer(cols = starts_with("innen_24t_"), names_to = "Type") %>%
  dplyr::mutate(name = dplyr::case_when(

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_type" ~ "Direkte",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_type" ~ "Overflyttet",

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet"  )) %>%
  dplyr::select(.data$maaned, .data$name, .data$value) %>%
  dplyr::group_by(.data$maaned, .data$name) %>%
  dplyr::distinct() %>%
  dplyr::mutate(Sykehus = "Nasjonalt")




prep_fig_ventetid24t <- rbind(prep_figVentetid24t_nasjonalt,
                              prep_figVentetid24t_lokalt) %>%
  dplyr::select(.data$Sykehus,
                .data$maaned,
                .data$name,
                .data$value) %>%
  dplyr::mutate(Sykehus = factor(.data$Sykehus,
                                 levels = c(params$hospitalName,
                                            "Nasjonalt")))
  cap <- paste0(
    "Andel pasienter med indikasjon NSTEMI som innen 24 timer etter ", 
    "innleggelse i sykehus har blitt utredet med invasiv koronar angiografi. ", 
    "Figurene viser pasienter innlagt direkte på PCI-sykehus og pasienter ", 
    "overflyttet fra annet sykehus hver for seg og samlet. ", 
    "Vannrett rød stiplet linje markerer forventet måloppnåelse. ", 
    "Per måned, fra hele siste året til og med siste hele måned. ", 
    "Måneder der sykehuset har færre enn 50\\% komplette data eller færre enn ", 
    "5 forløp vises ikke i diagrammet.")


ggplot2::ggplot(data = prep_fig_ventetid24t,
                        aes(x = .data$maaned,
                            y = .data$value,
                            group = .data$Sykehus)) +
  ggplot2::geom_line(aes(colour = .data$Sykehus)) +
  ggplot2::geom_point(aes(colour = .data$Sykehus))  +
  ggplot2::geom_hline(yintercept = 0.5,
                      colour =  colKontrast,
                      linetype = "dashed") +
  ggplot2::facet_wrap(~name, ncol = 1, scales= "free") +
  ggplot2::scale_color_manual(values=c(colPrimary[5], colPrimary[2]),
                              drop = FALSE) +
  # Y aksen
  ggplot2::coord_cartesian(ylim = c(0, 1)) +
  ggplot2::scale_y_continuous(breaks = seq(from = 0, to =1, length.out = 6),
                              labels = paste0(seq(from = 0, to =1, length.out = 6)*100, "%")) +

  #xaksen
  ggplot2::scale_x_discrete(guide = guide_axis(angle = 45), name = "") +

  #Layout
  ggplot2::theme(
    text = element_text(size = 14),
    strip.text.x = element_text(size = 16),

    axis.text.x = element_text(angle=45, vjust =1, hjust=1 ),
    axis.title = ggplot2::element_blank(),
    axis.ticks = element_blank(),


    legend.title = ggplot2::element_blank(),
    legend.position = "bottom",
    legend.background = ggplot2::element_blank(),
    legend.key = element_blank(), 
    legend.text = ggplot2::element_text(size = 14),

    # Layout bacgroupd,
    panel.spacing.y = unit(2, "lines"),
    strip.background = element_blank(),
    # panel.background = element_rect(fill = "white", colour ="#cbcbcb"),
    panel.background = ggplot2::element_blank(),

    #This removes all minor gridlines and adds major y gridlines.
    panel.grid.minor = ggplot2::element_blank(),
    panel.grid.major.y = ggplot2::element_line(color = "#cbcbcb"),
    panel.grid.major.x = ggplot2::element_line(color = "#cbcbcb"),
    # # tab
    # plot.tag = ggplot2::element_text(
    #   margin = margin(t=40))

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

Figurer - Invasiv utredning ved NSTEMI innen 24 timer, årlig måloppnåelse

# Per ÅR: Blant alle NSTEMI, antall komplette forløp (med gyldig tid)
nstemi_komplett_year_lokalt <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja") %>%
  janitor::tabyl(.data$aar,
                 .data$indik_nstemi_angio_innen24t,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::transmute(
    aar = as.numeric(.data$aar),
    komplette_antall =  .data$ja + .data$nei,
    komplette_andel = .data$komplette_antall / .data$Totalt)
  nstemiAP_fra2018_lokalt <- aP_nasjonalt %>%
    dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja",
                .data$indik_nstemi_angio_innen24t %in% c("ja", "nei")) %>%
  dplyr::filter(.data$aar %in% 2018:periode_data$nyesteRegYear) %>%


  #Samlet *(Direkte og overflyttet)
  dplyr::group_by(.data$aar) %>%
  dplyr::mutate(
    innen_24t_samlet = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                           na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # per admission type (Direkte / OVerflyttet)
  dplyr::group_by(.data$aar, .data$admissionType) %>%
  dplyr::mutate(
    innen_24t_type = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                         na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # Beholde en rad per Samlet, Direkte, OVerflyttet :
  dplyr::count(.data$aar,
               .data$admissionType,
               .data$innen_24t_type,
               .data$innen_24t_samlet) %>%
  tidyr::pivot_longer(cols = starts_with("innen_24t_"), names_to = "Type") %>%
  dplyr::mutate(name = dplyr::case_when(

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_type" ~ "Direkte",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_type" ~ "Overflyttet",

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet"  )) %>%


 dplyr::select(.data$aar, .data$name, .data$value) %>%
  dplyr::group_by(.data$aar, .data$name) %>%
  dplyr::distinct()

# Dersom data ikke komplett, bytte ut verdiene med NA
nstemiAP_fra2018_lokalt %<>%
  mutate(aar = as.numeric(.data$aar)) %>%
  dplyr::left_join(.,
                   nstemi_komplett_year_lokalt %>%
                     dplyr::select(.data$aar,
                                   .data$komplette_andel),
                   by = "aar") %>%
  dplyr::transmute(
    aar = as.numeric(.data$aar),
    name = .data$name,
    value = ifelse(.data$komplette_andel < 0.5,
                   yes = NA_real_,
                   no = .data$value))
# #Nasjonalt
nstemiAP_fra2018_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_nstemi_angio_innen24t_data %in% "ja",
                .data$indik_nstemi_angio_innen24t %in% c("ja", "nei")) %>%
  dplyr::filter(.data$aar %in% 2018:periode_data$nyesteRegYear) %>%


  #Samlet *(Direkte og overflyttet)
  dplyr::group_by(.data$aar) %>%
  dplyr::mutate(
    innen_24t_samlet = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                           na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # per admission type (Direkte / OVerflyttet)
  dplyr::group_by(.data$aar, .data$admissionType) %>%
  dplyr::mutate(
    innen_24t_type = sum(.data$indik_nstemi_angio_innen24t %in% "ja",
                         na.rm = TRUE)/n()) %>%
  dplyr::ungroup() %>%

  # Beholde en rad per Samlet, Direkte, OVerflyttet :
  dplyr::count(.data$aar,
               .data$admissionType,
               .data$innen_24t_type,
               .data$innen_24t_samlet) %>%
  tidyr::pivot_longer(cols = starts_with("innen_24t_"), names_to = "Type") %>%
  dplyr::mutate(name = dplyr::case_when(

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_type" ~ "Direkte",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_type" ~ "Overflyttet",

    .data$admissionType %in% "Direkte" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet",

    .data$admissionType %in% "Overflyttet" &
      .data$Type %in% "innen_24t_samlet" ~ "Samlet"  )) %>%

  dplyr::select(.data$aar, .data$name, .data$value) %>%
  dplyr::group_by(.data$aar, .data$name) %>%
  dplyr::distinct() %>%
  dplyr::transmute(
    aar = as.numeric(.data$aar),
    name = .data$name,
    value = .data$value,
    Sykehus = "Nasjonalt")
  timeTableYear_Samlet <- cbind(timeTableYear, name = "Samlet")
  timeTableYear_Direkte <- cbind(timeTableYear, name = "Direkte")
  timeTableYear_Overflyttet <- cbind(timeTableYear, name = "Overflyttet")

timeTableYear_SDO <- rbind(timeTableYear_Samlet,
                           timeTableYear_Direkte,
                           timeTableYear_Overflyttet)
nstemiAP_fra2018_lokalt %<>%
  dplyr::left_join(timeTableYear_SDO,
                   .,
                   by = c("aar", "name")) %>%
  dplyr::select(.data$aar, .data$name, .data$value) %>% 
  dplyr::mutate(Sykehus = params$hospitalName)


prep_figVentetid24t_year <-
  rbind(as.data.frame(nstemiAP_fra2018_nasjonalt),
        nstemiAP_fra2018_lokalt) %>%
  dplyr::mutate(Sykehus = factor(.data$Sykehus,
                                 levels = c(params$hospitalName,
                                            "Nasjonalt")),
                value_tekst = ifelse(
                  !is.na(.data$value),
                  yes = paste0(sprintf("%.1f", .data$value*100 ), "%"),
                  no = NA_character_))
cap <- paste0(
  "Andel pasienter med indikasjon NSTEMI som innen 24 timer etter innleggelse ",
  "i sykehus har blitt utredet med invasiv koronar angiografi. ", 
  "Figurene viser pasienter innlagt direkte på PCI-sykehus og pasienter ", 
  "overflyttet fra annet sykehus hver for seg og samlet. ", 
  "Vannrett rød stiplet linje markerer forventet måloppnåelse. ", 
  "Søylen vises ikke for sykehuset for år med færre enn 50\\% komplette data ",
  "eller færre enn 5 forløp. ", 
  "Merk at søylen for ", periode_data$nyesteRegYear, 
  " inneholder registreringer hittil i år." )

ggplot2::ggplot(
  data = prep_figVentetid24t_year,
  ggplot2::aes(x = .data$aar,
               y = .data$value,
               fill = .data$Sykehus)) +
  ggplot2::geom_bar(stat = "identity", position = "dodge") +
  ggplot2::geom_hline(yintercept = 0.5, 
                      colour = colKontrast,
                      linetype = "dashed") +

  ggplot2::facet_wrap(~name, nrow = 3 , scales = "free") +

   # Y aksen
  ggplot2::coord_cartesian(ylim = c(0, 1)) +
  ggplot2::scale_y_continuous(breaks = seq(from = 0, to =1, length.out = 6),
                              labels = paste0(seq(from = 0, to =1, length.out = 6)*100, "%")) +

  # X-aksen
  ggplot2::scale_x_continuous(breaks = prep_figVentetid24t_year %>% 
                             dplyr::select(aar) %>%
                             dplyr::distinct() %>% 
                             dplyr::pull(), 
                            labels = prep_figVentetid24t_year %>% 
                             dplyr::select(aar) %>%
                             dplyr::distinct() %>% 
                             dplyr::pull()) +
  ggplot2::scale_fill_manual(values = c(colPrimary[5], colPrimary[2])) +

  #Layout
  ggplot2::theme(
    text = element_text(size = 14),
    strip.text.x = element_text(size = 16),

    # axis.text.x = element_text(angle=45, vjust =1, hjust=1 ),
    axis.title = ggplot2::element_blank(),
    axis.ticks = element_blank(),


    legend.title = ggplot2::element_blank(),
    legend.position = "bottom",
    legend.background = ggplot2::element_blank(),
    legend.key = element_blank(), 
    legend.text = ggplot2::element_text(size = 14),

    # Layout bacgroupd (mellomrom plot)
    panel.spacing.y = unit(2, "lines"),
    panel.background = ggplot2::element_blank(), 
    panel.grid = ggplot2::element_line(color = "#cbcbcb"), 
    strip.background = element_blank(),

    #This removes all minor gridlines and adds major y gridlines.
    panel.grid.minor = ggplot2::element_blank(),
    panel.grid.major.y = ggplot2::element_line(color = "#cbcbcb"),
    panel.grid.major.x = ggplot2::element_blank()

)

Invasiv utredning ved NSTEMI innen 72 timer

cap <- paste0(
"Antall og andel pasienter med indikasjon NSTEMI som innen 72 timer etter ", 
"innleggelse i sykehus har blitt utredet med invasiv koronar angiografi. ", 
"Tabellen inkluderer både pasienter innlagt direkte på PCI-sykehus og ", 
"pasienter overflyttet fra annet sykehus. ", 
"Pasienter overflyttet fra annen avdeling på samme sykehus er ekskludert.", 
"Komplett data ved direkte innleggelse er der både tid for ankomst PCI-sykehus ",
"og tid for arteriepunksjon er registrert. ", 
"For forløp der pasienten har blitt overført fra et annet sykehus, ", 
"er komplett data der både tid for innleggelse i henvisende sykehus og tid for ", 
"arteriepunksjon er registrert. Måneder med mindre enn 50\\% komplett data ", 
"eller færre enn 5 forløp blir markert med stjerne og andel forløp med ", 
"ventetid under 72 timer beregnes ikke. (Målnivå: 80 \\%)"
)


nstemi_72t_lokalt <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_nstemi_angio_innen72t_data %in% "ja") %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_nstemi_angio_innen72t,
                 show_missing_levels = TRUE ) %>%
  janitor::adorn_totals("col", name = "Total") %>%
  dplyr::mutate(
    # Komplette er alle som er ja/nei, men ikkje ugyldig/manglende
    komplette_antall = .data$ja + .data$nei,
    komplette_prosent =  .data$komplette_antall / .data$Total,
    komplette_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$komplette_antall, " av ", .data$Total, "*"),
      false = paste0(.data$komplette_antall, " av ", .data$Total),
      missing = NA_character_),

    # Blandt komplette: Antall NTSTEMI innen 72 t ,
    nstemi_72t_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$ja, " av ", .data$komplette_antall, " (-%)"),
      false = paste0(.data$ja, " av ", .data$komplette_antall, " (",
                     round(100 * .data$ja / .data$komplette_antall, 1), "%)"),
      missing = NA_character_)) %>%
  dplyr::select(.data$maaned,
                .data$komplette_tekst,
                .data$nstemi_72t_tekst)


nstemi_72t_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_nstemi_angio_innen72t_data %in% "ja",
                .data$indik_nstemi_angio_innen72t %in% c("ja", "nei")) %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_nstemi_angio_innen72t,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>% 
  dplyr::transmute(
    maaned = .data$maaned,
    Nasjonalt = paste0(round(100 * .data$ja / .data$Totalt, 1), "%"))


# Forberede tabell, bruke kompletthet og ventetid
tabVentetid72t <- timeTableMonth %>%
  dplyr::left_join(., nstemi_72t_lokalt, by = c("maaned")) %>%
  dplyr::left_join(., nstemi_72t_nasjonalt, by = c("maaned")) %>%
  dplyr::rename(
    "Måned" = .data$maaned,
    "Komplette av datagrunnlaget" = .data$komplette_tekst,
    "Angio innen 72t av komplette" = .data$nstemi_72t_tekst) %>%
  replace(is.na(.), "-")




noric::mst(tab = tabVentetid72t,
           type = params$tableFormat,
           cap = cap,
           digs = c(0, 0, 0, 1, 1),
           align = rep("c", 5),
           label = "tabVentetid72t")
  cat("\n\n\\pagebreak\n")
if (params$rendered_by_shiny)
  shiny::setProgress(0.75)  # set progress to 75%

r if (params$reshID == 106944) {"<!--"}

PCI innen 120 minutter ved STEMI

Kortere tid fra beslutningsutløsende EKG til PCI er forbundet med bedre prognose for pasienter med ST-elevasjonsinfarkt (STEMI). Europeiske retningslinjer anbefaler at behandlingsvalget mellom primær PCI eller trombolyse gjøres på grunnlag av et estimat på hvorvidt forventet tid til PCI er over eller under 120 minutter. Bare dersom estimert tid er under 120 minutter sendes pasienten direkte til PCI-behandling.

Indikatoren er basert på pasientgruppen som sendes direkte til PCI-behandling og angir hvorvidt pasienten ble behandlet innnen 120 minutter eller ikke. Indikatoren er et godt mål på logistikken ved behandling av denne pasientgruppen.

r if (params$reshID == 106944) {"-->"}

if (params$reshID != 106944) {

  cap <- paste0(
    "Antall og andel pasienter med indikasjon STEMI der tid for arteriepunksjon, ", 
    "som indikerer start på den invasive prosedyren, ", 
    "er mindre enn 120 minutter etter tidspunkt for beslutningsutløsende EKG. ", 
    "Kun akutte primærforløp er med i datagrunnlaget. ",
    "Pasienter som har fått trombolyse eller har hatt hjertestans før innleggelse ", 
    "er utelatt fra analysen. ", 
    "Ekskludert er også pasienter som kun har fått utført angiografi, og ikke PCI. ",
    "Med 'komplette' menes forløp der både tidspunkt for arteriepunksjon og ", 
    " beslutningsutløsende EKG er registrert og gyldige. ", 
    "Måneder med mindre enn 50\\% komplette data eller færre enn 5 forløp blir ", 
    "markert med stjerne og andel pasienter med PCI innen 120 minutter ", 
    "beregnes ikke for disse. (Målnivå: 80 \\%)")


  stemi_120min_lokalt <- aP_nasjonalt %>%
    dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
    dplyr::filter(.data$indik_stemi_pci_innen2t_data %in% "ja") %>%
    janitor::tabyl(.data$maaned,
                   .data$indik_stemi_pci_innen2t,
                   show_missing_levels = TRUE ) %>%
    janitor::adorn_totals("col", name = "Total") %>%
    dplyr::mutate(
      # Komplette er alle som er ja/nei, men ikkje ugyldig/manglende
      komplette_antall = .data$ja + .data$nei,
      komplette_prosent =  .data$komplette_antall / .data$Total,
      komplette_tekst = dplyr::if_else(
        .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
        true = paste0(.data$komplette_antall, " av ", .data$Total, "*"),
        false = paste0(.data$komplette_antall, " av ", .data$Total),
        missing = NA_character_),

      # Blandt komplette: Antall NTSTEMI innen 24 t ,
      stemi_120min_tekst = dplyr::if_else(
        .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
        true = paste0(.data$ja, " av ", .data$komplette_antall, " (-%)"),
        false = paste0(.data$ja, " av ", .data$komplette_antall, " (",
                       round(100 * .data$ja / .data$komplette_antall, 1), "%)"),
        missing = NA_character_)) %>%
    dplyr::select(.data$maaned,
                  .data$komplette_tekst,
                  .data$stemi_120min_tekst)


  stemi_120min_nasjonalt <- aP_nasjonalt %>%
    dplyr::filter(.data$indik_stemi_pci_innen2t_data %in% "ja",
                  .data$indik_stemi_pci_innen2t %in% c("ja", "nei")) %>%
    janitor::tabyl(.data$maaned,
                   .data$indik_stemi_pci_innen2t,
                   show_missing_levels = TRUE) %>%
    janitor::adorn_totals("col", name = "Totalt") %>% 
    dplyr::transmute(
      maaned = .data$maaned,
      Nasjonalt = paste0(round(100 * .data$ja / .data$Totalt, 1), "%"))

  # Forberede tabell, bruke kompletthet og ventetid
  tabSTEMI_120min <- timeTableMonth %>%
    dplyr::left_join(., stemi_120min_lokalt, by = c("maaned")) %>%
    dplyr::left_join(., stemi_120min_nasjonalt, by = c("maaned")) %>%
    dplyr::rename(
      "Måned" = .data$maaned,
      "Komplette av datagrunnlaget" = .data$komplette_tekst,
      "PCI innen 120min av komplette" = .data$stemi_120min_tekst) %>%
    replace(is.na(.), "-")




  noric::mst(tab = tabSTEMI_120min,
             type = params$tableFormat,
             cap = cap,
             digs = c(0, 0, 0, 1, 1),
             align = rep("c", 5),
             label = "tabSTEMI120min")
}
cat("\n\n\\pagebreak\n")

Trykkmåling ved innsnevringer i kransårene

Bruk av trykkmålinger (FFR, iFR, IMR, Pd, Pa og Pd/Pa) i kransårer med innsnevringer har vist seg å gi nyttig informasjon for å bedømme om en innsnevring er av betydning eller ikke og hvorvidt det bør utføres utblokking av åren eller ei. Europeiske retningslinjer har en sterk anbefaling om bruk av nevnte metoder. Indikatoren viser antall og andel prosedyrer der det har blitt utført trykkmåling ved kransårerøntgen hos pasienter med stabil angina pectoris. Tabell \@ref(tab:TabNtrykkmaaling) viser måloppnåelse per måned for r params$hospitalName og nasjonalt (Mål $\geq$ 30 %).

cap <- paste0(
  "Antall og andel prosedyrer der det ved indikasjon stabil ",
  "koronarsykdom har blitt utført trykkmåling i form av enten",
  "fractional flow reserve (FFR), ",
  "instantaneous wave-free ratio (iFR), ",
  "index of microvascular resistance (IMR), ",
  "resting distal coronary pressure to aortic pressure ratio (Pd/Pa), ",
  "coronary artery aortic pressure (Pa-hyperemi) eller ",
  "coronary artery distal pressure (Pd-hyperemi). ",
  "Andel beregnes ikke for måneder med færre enn 5 observasjoner.")


#Lokal
nTrykkmaalingAP <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_trykkmaaling_data %in% "ja") %>%
  dplyr::select(.data$maaned,
                .data$indik_trykkmaaling) %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_trykkmaaling,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::mutate(

    Prosent = paste0(round(.data$ja / .data$Totalt * 100, 1)," %"),

    Totalt = ifelse(.data$Totalt < 5,
                    yes = "N",
                    no = .data$Totalt),

    utfortTrykkmaaling = ifelse(.data$Totalt %in% "N",
                                yes = NA,
                                no = .data$ja),

    Prosent = ifelse(.data$Totalt %in% "N",
                     yes = NA,
                     no = .data$Prosent)) %>%

  dplyr::select(.data$maaned,
                .data$Totalt,
                .data$utfortTrykkmaaling,
                .data$Prosent)

#Nasjonal
nTrykkmaalingAP_nasj <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_trykkmaaling_data %in% "ja") %>%
  dplyr::select(.data$maaned,
                .data$indik_trykkmaaling) %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_trykkmaaling,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::transmute(
    maaned = .data$maaned,
    Nasjonalt = paste0(round(.data$ja / .data$Totalt * 100, 1)," %"))

#Tabell
tabTrykkmaalingAP <- timeTableMonth %>%
  dplyr::left_join(., nTrykkmaalingAP, by = c("maaned")) %>%
  dplyr::left_join(., nTrykkmaalingAP_nasj, by = c("maaned")) %>%
  dplyr::rename("Måned" = .data$maaned,
                "Utført trykkmåling" = .data$utfortTrykkmaaling) %>%
  replace(is.na(.), "-")

noric::mst(tab = tabTrykkmaalingAP,
           type = params$tableFormat,
           cap = cap,
           digs = c(0,0,1,1),
           align = rep("c", 4), 
           label = "TabNtrykkmaaling")
cat("\n\n\\pagebreak\n")

Billeddiagnostikk ved stenting av venstre hovedstamme

Europeiske retningslinjer anbefaler bruk av tilleggsundersøkelser for å gi supplerende bildeframstilling i tilknytning til PCI av venstre hovedstamme. Intrakoronar ultralyd (IVUS) og optical coherence tomography (OCT) er metoder som brukes til dette formål. Metodebruken gir viktig informasjon om grad av innsnevring og vurdering av resultat etter PCI. Indikatoren angir andel pasienter der det er utført supplerende billeddiagnostikk under prosedyren. Pasienter som tidligere har fått utført ACB-operasjon og pasienter som blir behandlet for akutt hjerteinfarkt av typen STEMI er ikke medregnet i analysene. Tabell \@ref(tab:TabNstentingVH) viser måloppnåelse per måned for r params$hospitalName og nasjonalt (Mål $\geq$ 60 %).

cap <- paste0("Antall og andel prosedyrer der det er brukt supplerende ",
              "billeddiagnostike metoder (IVUS og/eller OCT). ",
              "Kvartaler med mindre enn 5 observasjoner er markert med N.")



#Lokalt
nStentVH <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_ivus_oct_v_stent_lms_data %in% "ja") %>%
  dplyr::select(.data$kvartal,
                .data$indik_ivus_oct_v_stent_lms) %>%
  janitor::tabyl(.data$kvartal,
                 .data$indik_ivus_oct_v_stent_lms,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::mutate(

    Prosent = paste0(round(.data$ja / .data$Totalt * 100, 1), " %"),
    Totalt = ifelse(.data$Totalt < 5,
                    yes = "N",
                    no = .data$Totalt),

    utfortIvusOct = ifelse(.data$Totalt %in% "N",
                           yes = NA,
                           no = .data$ja),

    Prosent = ifelse(Totalt %in% "N",
                     yes = NA,
                     no = .data$Prosent)) %>%
  dplyr::select(.data$kvartal,
                .data$Totalt,
                .data$utfortIvusOct,
                .data$Prosent)

#Nasjonalt
nStentVH_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_ivus_oct_v_stent_lms_data %in% "ja") %>%
  dplyr::select(.data$kvartal,
                .data$indik_ivus_oct_v_stent_lms) %>%
  janitor::tabyl(.data$kvartal,
                 .data$indik_ivus_oct_v_stent_lms,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::transmute(
    kvartal = .data$kvartal,
    Nasjonalt = paste0(round(.data$ja / .data$Totalt * 100, 1), " %"))

#Tabell
tabStentVH <- timeTableQuarter %>%
  dplyr::left_join(., nStentVH, by = c("kvartal")) %>%
  dplyr::left_join(., nStentVH_nasjonalt, by = c("kvartal")) %>%
  dplyr::rename("Utført IVUS/OCT" = .data$utfortIvusOct) %>%
  replace(is.na(.), "-")


noric::mst(tab = tabStentVH,
           type = params$tableFormat,
           cap = cap,
           digs = c(0,0,1,1),
           align = rep("c", 4), 
           label = "TabNstentingVH")
cat("\n\n\\pagebreak\n")
if (params$rendered_by_shiny)
  shiny::setProgress(0.90)  # set progress to 90%

Foreskriving av blodfortynnende medisiner

Datagrunnlag for indikatoren: primærforløp der minst en stent er satt inn under oppholdet og der pasienten ikke er utskrevet død. Kun forløp der utskrivelsesskjemaet er ferdigstilt brukes for å regne ut måloppnåelse.

Blodfortynnende medisiner er viktig for å hindre blodproppdannelse etter innsetting av stent. Europeiske retningslinjer anbefaler samtidig bruk av to blodplatehemmere som hovedregel hos pasienter som har fått satt inn stenter. I visse tilfeller kan en av disse erstattes av andre blodfortynnende medikamenter. Indikatoren viser andel av pasienter som har dokumentert foreskrivning av anbefalte blodfortynnende medikamenter etter utblokking av hjertets kransårer med innsetting av stent. Tabell \@ref(tab:TabNblodfortynnendeMedisiner) viser månedlig måloppnåelse for r params$hospitalName og nasjonalt (Mål $\geq$ 95 %).

cap <- paste0("Antall og andel pasienter per opphold der det er dokumentert ",
              "i journalen foreskrivning av blodfortynnende medisiner som ",
              "omfatter enten dobbel blodplatehemmer, eller en ",
              "blodplatehemmer i kombinasjon med Marevan eller NOAC. ",
              "Måneder med mindre enn 5 ferdigstilte observasjoner er ",
              "markert med N.")

blodfortynnende_lokalt <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_blodfortynnende_data %in% "ja") %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_blodfortynnende,
                 show_missing_levels = TRUE ) %>%
  janitor::adorn_totals("col", name = "Total") %>%
  dplyr::mutate(
    # Komplette er alle som er ja/nei, men ikke "ikke ferdigstilt"
    komplette_antall = .data$ja + .data$nei,
    komplette_prosent =  .data$komplette_antall / .data$Total,
    komplette_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$komplette_antall, " av ", .data$Total, "*"),
      false = paste0(.data$komplette_antall, " av ", .data$Total),
      missing = NA_character_),

    blodf_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$ja, " av ", .data$komplette_antall, " (-%)"),
      false = paste0(.data$ja, " av ", .data$komplette_antall, " (",
                     round(100 * .data$ja / .data$komplette_antall, 1), "%)"),
      missing = NA_character_)) %>%
  dplyr::select(.data$maaned,
                .data$komplette_tekst,
                .data$blodf_tekst)


blodfortynnende_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_blodfortynnende_data %in% "ja",
                .data$indik_blodfortynnende %in% c("ja", "nei")) %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_blodfortynnende,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::transmute(
    maaned = .data$maaned,
    Nasjonalt = paste0(round(100 * .data$ja / .data$Totalt, 1), "%"))



# Forberede tabell, bruke kompletthet og ventetid
tabBlodfMedAP <- timeTableMonth %>%
  dplyr::left_join(., blodfortynnende_lokalt, by = c("maaned")) %>%
  dplyr::left_join(., blodfortynnende_nasjonalt, by = c("maaned")) %>%
  dplyr::rename(
    "Måned" = .data$maaned,
    "Ferdigstilte av datagrunnlaget" = .data$komplette_tekst,
    "Med blodfortynnende av ferdigstilte" = .data$blodf_tekst) %>%
  replace(is.na(.), "-")


noric::mst(tab = tabBlodfMedAP,
           type = params$tableFormat,
           cap = cap,
           digs = c(0, 0, 1, 1),
           align = rep("c", 4), 
           label = "TabNblodfortynnendeMedisiner")
cat("\n\n\\pagebreak\n")

Foreskriving av kolesterolsenkende medisiner

Datagrunnlag for indikatoren: primærforløp der minst en stent er satt inn under oppholdet og der pasienten ikke er utskrevet død. Kun forløp der utskrivelsesskjemaet er ferdigstilt brukes for å regne ut måloppnåelse.

Kolesterolsenkende behandling er viktig for å hindre progresjon av koronarsykdom hos pasienter som har fått påvist dette. Europeiske retningslinjer har en sterk anbefaling om kolesterolsenkende behandling, siden dette har vist seg å forhindre hjerteinfarkt og behov for ny PCI. Indikatoren viser andel pasienter som har fått foreskrevet anbefalt kolesterolsenkende behandling med statiner etter utblokking av hjertets kransårer med innsetting av stent. Noen pasienter kan ikke bruke statiner på grunn av bivirkninger. Tabell \@ref(tab:TabNkolesterolsenkendeMedisiner) viser månedlig måloppnåelse for r params$hospitalName og nasjonalt (Mål $\geq$ 90 %)

cap <- paste0(
  "Antall og andel pasienter per opphold som har fått foreskrevet ",
  "kolesterolsenkende medikamenter i form av statiner ved ",
  "utskrivelse etter PCI med innsetting av stent. ",
  "Andel beregnes ikke for måneder med færre enn 5 observasjoner.")

#Lokalt
kolesterolsenkende_lokalt <- aP_nasjonalt %>%
  dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
  dplyr::filter(.data$indik_kolesterolsenkende_data %in% "ja") %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_kolesterolsenkende,
                 show_missing_levels = TRUE ) %>%
  janitor::adorn_totals("col", name = "Total") %>%
  dplyr::mutate(
    # Komplette er alle som er ja/nei, men ikkje ugyldig/manglende
    komplette_antall = .data$ja + .data$nei,
    komplette_prosent =  .data$komplette_antall / .data$Total,
    komplette_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$komplette_antall, " av ", .data$Total, "*"),
      false = paste0(.data$komplette_antall, " av ", .data$Total),
      missing = NA_character_),

    kolest_tekst = dplyr::if_else(
      .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
      true = paste0(.data$ja, " av ", .data$komplette_antall, " (-%)"),
      false = paste0(.data$ja, " av ", .data$komplette_antall, " (",
                     round(100 * .data$ja / .data$komplette_antall, 1), "%)"),
      missing = NA_character_)) %>%
  dplyr::select(.data$maaned,
                .data$komplette_tekst,
                .data$kolest_tekst)


kolesterolsenkende_nasjonalt <- aP_nasjonalt %>%
  dplyr::filter(.data$indik_kolesterolsenkende_data %in% "ja",
                .data$indik_kolesterolsenkende %in% c("ja", "nei")) %>%
  janitor::tabyl(.data$maaned,
                 .data$indik_kolesterolsenkende,
                 show_missing_levels = TRUE) %>%
  janitor::adorn_totals("col", name = "Totalt") %>%
  dplyr::transmute(
    maaned = .data$maaned,
    Nasjonalt = paste0(round(100 * .data$ja / .data$Totalt, 1), "%"))


# Forberede tabell, bruke kompletthet og ventetid
tabKolestMedAP <- timeTableMonth %>%
  dplyr::left_join(., kolesterolsenkende_lokalt, by = c("maaned")) %>%
  dplyr::left_join(., kolesterolsenkende_nasjonalt, by = c("maaned")) %>%
  dplyr::rename(
    "Måned" = .data$maaned,
    "Ferdigstilte av datagrunnlaget" = .data$komplette_tekst,
    "Med kolesterolsenkende av ferdigstilte" = .data$kolest_tekst) %>%
  replace(is.na(.), "-")


noric::mst(tab = tabKolestMedAP,
           type = params$tableFormat,
           cap = cap,
           digs = c(0, 0, 1, 1),
           align = rep("c", 4), 
           label = "TabNkolesterolsenkendeMedisiner")
cat("\n\n\\pagebreak\n")

r if (dim_ak_lokalt[1] <= 10 | aK_nasjonalt %>% nrow() == 0) {"<!--"}

Pacemakerbehov etter kateterbasert innsetting av aortaklaff

Denne indikatoren viser andel pasienter som har fått implantert permanent pacemaker under sykehusoppholdet etter kateterbasert innsetting av aortaklaff. Ved noen sykehus blir pasientene raskt overflyttet til annet sykehus etter TAVI. Dersom behovet for pacemaker melder seg etter overflytting til annet sykehus, vil dette ikke komme fram i datagrunnlaget til registeret og resultatene må tolkes med forsiktighet. Pasienter som allerede har implantert permanent pacemaker før prosedyre er ekskludert. Lav andel pacemakerbehov er ønskelig. Tabell \@ref(tab:tabPacemakerBehov) viser måloppnåelse for r params$hospitalName og nasjonalt. r if (dim_ak_lokalt[1] <= 10 | aK_nasjonalt %>% nrow() == 0) {"-->"}

if (dim_ak_lokalt[1] > 10 & aK_nasjonalt %>% nrow() > 0) {

  cap <- paste0(
    "Antall og andel pasienter som har fått implantert permanent pacemaker ",
    "under sykehusoppholdet etter kateterbasert innsetting av aortaklaff. ",
    "Kun registreringer der prosedyreskjemaet er ferdigstilt er tatt med. ",
    "Kvartal der andel ferdigstilte prosedyreskjemaer er mindre enn 50\\% ",
    "blir markert med stjerne og vi regner ikke ut andel implanterte ",
    "permanente pacemaker for disse.")

  prep_tab_pacemaker_lokalt <- aK_nasjonalt %>%
    dplyr::filter(.data$AvdRESH %in% params$reshID) %>%
    dplyr::filter(.data$indik_pacemakerbehov_data  %in% "ja") %>%
    janitor::tabyl(.data$kvartal,
                   .data$indik_pacemakerbehov,
                   show_missing_levels = TRUE ) %>%
    janitor::adorn_totals("col", name = "Total") %>%
    dplyr::mutate(

      # Komplette er alle som er ja/nei, men ikkje "ikke ferdigstilt"
      komplette_antall = .data$ja + .data$nei,
      komplette_prosent =  .data$komplette_antall / .data$Total,
      komplette_tekst = dplyr::if_else(
        .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
        true = paste0(.data$komplette_antall, " av ", .data$Total, "*"),
        false = paste0(.data$komplette_antall, " av ", .data$Total),
        missing = NA_character_),

      # Blandt komplette: Antall med pacemakerbehov,
      pacemaker_tekst = dplyr::if_else(
        .data$komplette_prosent < 0.50 | .data$komplette_antall < 5,
        true = paste0(.data$ja, " av ", .data$komplette_antall, " (-%)"),
        false = paste0(.data$ja, " av ", .data$komplette_antall, " (",
                       round(100 * .data$ja / .data$komplette_antall, 1), "%)"),
        missing = NA_character_)) %>%
    dplyr::select(.data$kvartal,
                  .data$komplette_tekst,
                  .data$pacemaker_tekst)


  prep_tab_pacemaker_nasjonalt <- aK_nasjonalt %>%
    dplyr::filter(.data$indik_pacemakerbehov_data  %in% "ja",
                  .data$indik_pacemakerbehov %in% c("ja", "nei")) %>%
    janitor::tabyl(.data$kvartal,
                   .data$indik_pacemakerbehov,
                   show_missing_levels = TRUE ) %>%
    janitor::adorn_totals("col", name = "Total") %>%
    dplyr::transmute(
      kvartal = .data$kvartal,
      Nasjonalt = paste0(round(100 * .data$ja / .data$Total, 1), "%"))


  # Forberede tabell, bruke kompletthet og ventetid
  tab_pacemakerbehov <- timeTableQuarterAK %>%
    dplyr::left_join(., prep_tab_pacemaker_lokalt, by = c("kvartal")) %>%
    dplyr::left_join(., prep_tab_pacemaker_nasjonalt, by = c("kvartal")) %>%
    dplyr::rename(
      "Kvartal" = .data$kvartal,
      "Ferdigstilte av datagrunnlaget" = .data$komplette_tekst,
      "Implanterte perm. pacemaker av ferdigstilte" = .data$pacemaker_tekst) %>%
    replace(is.na(.), "-")





  noric::mst(tab = tab_pacemakerbehov,
             type = params$tableFormat,
             cap = cap,
             digs = c(0, 0, 1, 1),
             align = rep("c", 4), 
             label = "tabPacemakerBehov")
}
if (params$rendered_by_shiny)
  shiny::setProgress(1)  # set progress to 100%


Rapporteket/NORIC documentation built on Sept. 7, 2024, 10:32 a.m.