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
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")
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%
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.
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")
# 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")
# 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() )
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) {"<!--"}
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")
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")
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%
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")
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) {"<!--"}
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%
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.