#
# This is a Shiny web application. You can run the application by clicking
# the 'Run App' button above.
#
# Find out more about building applications with Shiny here:
#
# http://shiny.rstudio.com/
#
#library(dplyr)
library(korona)
## Forsikre om at reshNivaa blir lest inn med korrekt encoding:
# ReshNivaa <- read.table(system.file(file.path('extdata', 'EnhetsnivaaerResh.csv'), package = 'korona'), sep=';',
# stringsAsFactors=FALSE, header=T, fileEncoding = 'latin1')
# usethis::use_data(ReshNivaa, overwrite = TRUE, internal = FALSE)
# ###################################################################
shiny::addResourcePath('rap', system.file('www', package='rapbase'))
context <- Sys.getenv("R_RAP_INSTANCE") #Blir tom hvis jobber lokalt
paaServer <- context %in% c("DEV", "TEST", "QA", "PRODUCTION")
regTitle <- paste0('Koronaregistreringer, pandemi 2020',
ifelse(context=='QA', 'QA',''))
#---------Hente data------------
#Mange av variablene på ut-skjema er med i inn-dumpen
#Variabler fra utskjema som er med i innskjema i datadump er fra ferdigstilte utregistereringer
KoroDataRaa <- rapbase::loadStagingData("korona", "KoroDataRaa")
if (isFALSE(KoroDataRaa)) {
KoroDataRaa <- KoronaDataSQL(koble=1)
rapbase::saveStagingData("korona", "KoroDataRaa", KoroDataRaa)
}
BeredData <- rapbase::loadStagingData("korona", "BeredData")
if (isFALSE(BeredData)) {
BeredDataRaa <- intensivberedskap::NIRberedskDataSQL()
BeredData <- intensivberedskap::NIRPreprosessBeredsk(RegData = BeredDataRaa, aggPers = 1, tellFlereForlop = 1)
rapbase::saveStagingData("korona", "BeredData", BeredData)
}
KoroDataOpph <- rapbase::loadStagingData("korona", "KoroDataOpph")
if (isFALSE(KoroDataOpph)) {
KoroDataOpph <- KoronaPreprosesser(RegData = KoroDataRaa, aggPers = 0, kobleBered = 1)
rapbase::saveStagingData("korona", "KoroDataOpph", KoroDataOpph)
}
KoroData <- rapbase::loadStagingData("korona", "KoroData")
if (isFALSE(KoroData)) {
KoroData <- KoronaPreprosesser(RegData = KoroDataRaa, aggPers = 1, tellFlereForlop = 1, kobleBered = 1)
rapbase::saveStagingData("korona", "KoroData", KoroData)
}
#-----Definere utvalgsinnhold og evt. parametre som er statiske i appen----------
#Definere utvalgsinnhold
rhfNavn <- c('Alle', as.character(sort(unique(KoroData$RHF))))
hfNavn <- c('Alle', sort(unique(KoroData$HF))) #KoroData$HF, index.return=T)
enhetsNavn <- rhfNavn
dum <- unique(KoroData[,c('HF', "HFresh")])
HFreshValg <- dum$HFresh
names(HFreshValg) <- dum$HF
HFreshValg <- HFreshValg[order(dum$HF)]
HFbered <- c('Alle', as.character(sort(unique(BeredData$HF))))
#updateTextInput(session, inputId, label = NULL, value = NULL). Hvis input skal endres som følge av et annet input.
startDato <- as.Date('2020-03-01') #min(KoroData$InnDato, na.rm = T)
sluttDato <- Sys.Date()
aarsakInnValg <- c(
"Ja, minst siste opphold" = 2,
"Ja, alle opphold"=1,
"Ja, minst ett opph" = 3,
"Alle registrerte"=0,
"Nei, ingen opphold" = 4)
#original variabel: c("Ja"=1, "Alle"=9, "Nei"=2)
#last modul(er)
source(system.file("shinyApps/korona/R/resultatmodul.R", package = "korona"), encoding = 'UTF-8')
#---- Start ui-del ----
ui <- tagList(
navbarPage(
id='hovedark',
title = div(img(src="rap/logo.svg", alt="Rapporteket", height="26px"),
regTitle),
windowTitle = regTitle,
theme = "rap/bootstrap.css",
#-------------Startside--------------
tabPanel("Oversikt",
shinyjs::useShinyjs(),
sidebarPanel(id = 'brukervalgStartside',
width = 3,
uiOutput('KoroRappTxt'),
downloadButton(outputId = 'KoroRapp.pdf', label='Last ned Koronarapport', class = "butt"),
tags$head(tags$style(".butt{background-color:#6baed6;} .butt{color: white;}")), # background color and font color
h5('NB: Nedlastinga tar litt tid (ca 1 minutt). I mellomtida får man ikke gjort noe annet på Rapporteket.'),
br(),
br(),
h3('Gjør filtreringer/utvalg:'),
selectInput(inputId = "valgtEnhet", label="Velg enhet",
choices = 'Alle'
),
selectInput(inputId = "aarsakInn", label="Covid-19 hovedårsak til innleggelse?",
choices = aarsakInnValg
),
dateRangeInput(inputId = "valgtDato", label = "Tidsperiode",
start = startDato, end = Sys.Date(),
separator="t.o.m.", language="nb"),
selectInput(inputId = "skjemastatusInn", label="Skjemastatus, inklusjon",
choices = c("Alle"=9, "Ferdistilt"=2, "Kladd"=1)
),
selectInput(inputId = "dodSh", label="Utskrevne, tilstand",
choices = c("Ikke valgt"=9,"Levende og døde"=3, "Død"=2, "Levende"=1)
),
selectInput(inputId = "erMann", label="Kjønn",
choices = c("Begge"=9, "Menn"=1, "Kvinner"=0)
),
h4('Kun for risikofaktorer:'),
sliderInput(inputId="alder", label = "Alder",
min = 0, max = 110,
value = c(0, 110),
step = 10
),
br(),
actionButton("tilbakestillValg", label="Tilbakestill valg"),
br(),
selectInput(inputId = "bildeformatAldKj",
label = "Velg format for nedlasting av figur",
choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg'))
),
mainPanel(width = 9,
rapbase::appNavbarUserWidget(user = uiOutput("appUserName"),
organization = uiOutput("appOrgName"),
addUserInfo = TRUE),
tags$head(tags$link(rel="shortcut icon", href="rap/favicon.ico")),
uiOutput('manglerRegResh'),
h3('Resultater fra pandemiregistrering, korona.'),
h4('NB: Fra oktober 2023 er det obligatorisk registrering kun av covid-pasienter på intensiv.'),
uiOutput('Advarsel'),
uiOutput('antFlereForl'),
h5('Merk at resultatene kan inkludere ufullstendige registreringer'),
h4('Sidene er organisert i faner. Mer detaljert informasjon fra registreringer i
pandemiregisteret finnes under fanen "Resultater".'),
#h5('Siden er under utvikling... ', style = "color:red"),
br(),
fluidRow(
column(width = 6,
h3('Status nå'),
uiOutput('utvalgNaa'),
tableOutput('statusNaaShTab'),
#h6('Flere variabler?', style = "color:red"),
hr(),
h4('WALL OF SHAME'),
column(width=2,
tableOutput('skjemaInnKladdTab')),
column(width=2, offset=5,
tableOutput('skjemaUtKladdTab') )
),
column(width=5, offset=1,
uiOutput('tittelFerdigeReg'),
uiOutput('utvalgFerdigeReg'),
tableOutput('tabFerdigeReg')
)),
fluidRow(
#column(width=4,
h3('Antall ny-innlagte siste 10 dager'),
h5('Overføringer telles ikke med'),
uiOutput('utvalgAntOpph'),
tableOutput('tabAntOpph')
),
fluidRow(#column(width=5, offset = 3,
br(),
h3('Antall utskrevne siste 10 dager'),
uiOutput('utvalgAntUtskr'),
br(),
tableOutput('tabAntUtskr')
),
br(),
fluidRow(
column(width=3,
h3('Risikofaktorer'),
uiOutput('utvalgRisiko'),
tableOutput('tabRisikofaktorer')),
column(width=5, offset=1,
h3('Aldersfordeling'),
plotOutput("FigurAldersfordeling", height="auto"),
downloadButton('LastNedFigAldKj', label='Last ned figur'),
h5('Velg figurformat i nedtrekksmeny i venstre panel'),
downloadButton("lastNedAldKj", "Last ned tabell")
))
) #main
), #tab Startside
#-----------Resultater-------------------------------------
tabPanel("Resultater",
#tags$style(HTML(".tabbable > .nav > li > a {background-color: #DBDBDB; color:black; width: 300PX;}")),
tabsetPanel(
tabPanel("Ant. pasienter",
koronaresultater_UI("resultater_id")
),
tabPanel("Ant. opphold",
sidebarPanel(
selectInput(inputId = 'enhetsNivaaOpph', label='Velg enhetsnivå',
choices = c("Sykehus"='ShNavn',
'HF' = 'HF',
'RHF' = 'RHF')
),
selectInput(inputId = 'tidsenhetOpph', label='Velg tidsenhet',
selected = 'Mnd',
choices = c("Måned"='Mnd',
'Kvartal' = 'Kvartal',
'År' = 'Aar')
),
dateInput(inputId = 'tilDatoOpph', label = 'Velg sluttdato',
min = '2020-03-15', max = Sys.Date()),
sliderInput(inputId = 'antTidsenhOpph',
label = 'Velg antall hele måneder/kvartal/år forut for "sluttdato"',
value = 6, step = 1,
min = 1, max = 20),
selectInput(inputId = "aarsakInnOpph", label="Covid-19 hovedårsak til innleggelse?",
choices = c('Alle registreringer' = 0,
'Ja, alle opphold' = 1,
'Nei, ingen opphold' = 2)
)
),
mainPanel(
h2('Antall opphold i valgt tidsperiode'),
tableOutput('tabAntOpphEnhTid')
)
),
tabPanel("Belegg",
koronabelegg_UI("koronabelegg_id")
),
#---------Fordelinger-------------
tabPanel(p('Fordelinger',
title='Figurer/tabeller for de fleste opplysninger registrert i
inlusjons- eller utskrivingsskjema'),
value = 'Fordelinger',
sidebarPanel(id = 'brukervalgRes',
width = 3,
br(),
h3('Velg variabel/tema og filtreringer i data'),
#conditionalPanel(condition = "input.ark == 'Fordelinger' ",
selectInput(inputId = 'valgtVarFord', label='Velg variabel',
selected = 'regForsinkelseInn',
choices = c("Alder"='alder',
'Covid-19 hovedårsak til innleggelse?' = 'aarsakInn4kat',
'Demografi' = 'demografi',
"Liggetid"='liggetid',
'Risikofaktorer, innleggelse'='risikoInn',
'Antibiotika, innleggelse'='antibiotikaInn',
'Antibiotika, utskriving'='antibiotikaUt',
'Registreringsforsinkelse, inn' = 'regForsinkelseInn',
'Registreringsforsinkelse, ut' = 'regForsinkelseUt',
'Respirasjonssvikt, innleggelse' = 'respSviktInn',
'Respirasjonssvikt på sykehus' = 'respSviktUt',
'Sirkulasjonssvikt, innleggelse' = 'sirkSviktInn',
'Sirkulasjonssvikt på sykehus' = 'sirkSviktUt',
'Tilstand ved innleggelse' = 'tilstandInn'
)
),
selectInput(inputId = "enhetsUtvalgFord", label="Velg enhetsnivå",
choices = c('Valgt enhet mot resten'=1, 'Hele landet'=0, 'Valgt enhet'=2)
),
selectInput(inputId = "valgtEnhetRes", label="Velg enhet",
choices = 'Alle'
),
dateRangeInput(inputId = "valgtDatoRes", label = "Tidsperiode",
start = startDato, end = Sys.Date(),
separator="t.o.m.", language="nb"),
selectInput(inputId = "aarsakInnRes", label="Covid-19 hovedårsak til innleggelse?",
choices = aarsakInnValg
),
selectInput(inputId = "skjemastatusInnRes", label="Skjemastatus, inklusjon",
choices = c("Alle"=9, "Ferdistilt"=2, "Kladd"=1)
),
selectInput(inputId = "dodShRes", label="Utskrevne, tilstand",
choices = c("Ikke valgt"=9,"Levende og døde"=3, "Død"=2, "Levende"=1)
),
selectInput(inputId = "beredPasRes", label="Intensivpasient?",
choices = c("Alle pasienter"=9, "Ja"=1, "Nei"=0)
),
br(),selectInput(inputId = "erMannRes", label="Kjønn",
choices = c("Begge"=9, "Menn"=1, "Kvinner"=0)
),
selectInput(inputId = "bildeformatFord",
label = "Velg format for nedlasting av figur",
choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg')),
br(),
actionButton("tilbakestillValgRes", label="Tilbakestill valg")
),
mainPanel(
tabsetPanel(
tabPanel(
'Figur',
plotOutput('fordelinger', height="auto"),
downloadButton('LastNedFigFord', label='Velg format (til venstre) og last ned figur')
),
tabPanel(
'Tabell',
uiOutput("tittelFord"),
tableOutput('fordelingTab'),
downloadButton(outputId = 'lastNed_tabFord', label='Last ned tabell')
)
)
) #mainPanel
), #Fordelinger
#------------------Andeler-----------------
tabPanel(p('Utvikling over tid (andeler)',
title='Resultater som kan vises som andel per tidsenhet'),
value = 'Andeler',
sidebarPanel(id = 'brukervalgAndel',
width = 3,
br(),
h3('Velg variabel/tema og filtreringer i data'),
#conditionalPanel(condition = "input.ark == 'Fordelinger' ",
selectInput(inputId = 'valgtVarAndel', label='Velg variabel',
selected = 'regForsinkelseInn',
choices = c("Alder under 18 år"='alder_u18',
"Alder under 40 år"='alder_u40',
"Alder over 60 år"='alder_o60',
"Alder over 80 år"='alder_o80',
"Isolert ved ankomst" = 'isolertInn',
'Intensivpasient' = 'beredPas',
'Døde' = 'dodSh'
)
),
dateRangeInput(inputId = "valgtDatoAndel", label = "Tidsperiode",
start = startDato, end = Sys.Date(),
separator="t.o.m.", language="nb"),
selectInput(inputId = "aarsakInnAndel", label="Covid-19 hovedårsak til innleggelse?",
choices = aarsakInnValg
),
selectInput(inputId = "dodShAndel", label="Utskrevne, tilstand",
choices = c("Ikke valgt"=9,"Levende og døde"=3, "Død"=2, "Levende"=1)
),
selectInput(inputId = "beredPasAndel", label="Intensivpasient?",
choices = c("Alle pasienter"=9, "Ja"=1, "Nei"=0)
),
selectInput(inputId = "erMannAndel", label="Kjønn",
choices = c("Begge"=9, "Menn"=1, "Kvinner"=0)
),
selectInput(inputId = "bildeformatAndel",
label = "Velg format for nedlasting av figur",
choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg')
),
selectInput(inputId = "tidsenhetAndel", label="Velg tidsenhet",
choices = rev(c('År'= 'Aar', 'Halvår' = 'Halvaar',
'Kvartal'='Kvartal', 'Måned'='Mnd'))),
br(),
actionButton("tilbakestillValgAndel", label="Tilbakestill valg"),
br()
#p(em('Følgende utvalg gjelder bare figuren som viser utvikling over tid')),
#selectInput(inputId = 'enhetsUtvalgAndel', label='Egen enhet og/eller landet',
# choices = c("Egen mot resten av landet"=1, "Hele landet"=0, "Egen enhet"=2)),
),
mainPanel(
#tabsetPanel(
#tabPanel(
'Figur',
plotOutput('andelTid', height="auto"),
downloadButton('LastNedFigAndelTid', label='Velg format (til venstre) og last ned figur')
) #main
) #tabset & Andeler
)), #tabset og Resultater
#----------Datakvalitet-------------------------
tabPanel('Datakvalitet',
tabsetPanel(
tabPanel('Manglende ut-skjema',
h3('Innleggelsesskjema som mangler utskrivning'),
downloadButton(outputId = 'lastNed_innManglerUt', label='Last ned tabell', class = "butt"),
tableOutput('innManglerUtTab')
),
tabPanel('Dobbeltregistrering av inn-skjema',
h3('Pasienter som har to innleggelsesskjema med like innleggelsestidspunkt (<30 min.) '),
downloadButton(outputId = 'lastNed_dblInn', label='Last ned tabell'),
tableOutput('dblInn')
)
) #tabset
), #Datakvalitet
#---------Intensivregistreringer--------------------------------
tabPanel(p('Intensivpasienter',
title='Resultater fra koronaregistrering i intensivregisteret'),
value = 'Intensiv',
sidebarPanel(id = 'intensiv',
width = 3,
br(),
br(),
h3('Gjør filtreringer/utvalg:'),
selectInput(inputId = "bekrInt", label="Bekreftet/Mistenkt",
choices = c("Alle"=9, "Bekreftet"=1, "Mistenkt"=0)
)
),
mainPanel(width = 9,
h3('Resultater fra koronaregistrering på INTENSIVavdelinger.'),
h4('Mer detaljerte resultater fra intensivavdlingene
finnes på Rapporteket-NIR-Beredskap og på Rapporteket-Intensiv'),
#h4('Husk at andre tilgangsnivåer/resh enn i Rapporteket-Beredskap', style = "color:red"),
#h5('Siden er under utvikling... ', style = "color:red"),
br(),
fluidRow(
column(width = 4,
h4('Opphold uten registrert ut-tid fra intensiv'), #, align='center'),
uiOutput('utvalgIntensivNaa'),
tableOutput('tabIntensivNaa')
),
column(width=5, offset=1,
uiOutput('tittelFerdigeRegInt'), #Ta med utvalg i tittel?
uiOutput('utvalgFerdigeRegInt'),
tableOutput('tabFerdigeRegInt')
)),
h3('Antall intensivopphold'),
h5('Innleggelser siste to uker, samt totalt'),
uiOutput('utvalgAntRegInt'),
tableOutput('tabAntRegInt'),
br(),
fluidRow(
column(width=3,
h3('Risikofaktorer, intensiv'),
uiOutput('utvalgRisikoInt'),
tableOutput('tabRisikofaktorerInt')),
column(width=5, offset=1,
h3('Aldersfordeling, intensiv'),
uiOutput('utvalgAlderInt'),
tableOutput('tabAlderInt')
))
)
), #Intensiv-side
#-----------Abonnement ny--------------------------------
tabPanel(p("Abonnement",
title='Bestill automatisk utsending av rapporter på e-post'),
value = 'Abonnement',
sidebarLayout(
sidebarPanel(width = 3,
selectInput("subscriptionRep", "Dokument:", c("Koronarapport")), #Evt legg til influensarapport
selectInput("subscriptionFreq", "Frekvens:",
list(Maanedlig="Månedlig-month",
Ukentlig="Ukentlig-week",
Daglig="Daglig-DSTday"),
selected = "Ukentlig-week"),
actionButton("subscribe", "Bestill!",icon = shiny::icon("paper-plane")),
br(),
br(),
br()
),
mainPanel(
h4('NB: Abonnementet løper til det sies opp. '),
uiOutput("subscriptionContent")
)
)
), #tab abonnement
#----------Registeradministrasjon----------------------------------
tabPanel(p("Registeradm",
title='Side som bare vises for Marianne S., Eivind, Eirik, Anita og Kristine'),
value = 'Registeradm',
tabsetPanel(
tabPanel('Utsendinger',
sidebarPanel(
h4('Lage abonnementslister for utsendinger'),
uiOutput("reportUts"),
uiOutput("freqUts"),
uiOutput("HFreshUts"),
uiOutput("rolleUts"),
h5('E-postmottagere legges inn en og en. Trykk legg til e-postmottager for hver gang.
Når du har lagt til alle, trykker du på lag utsending. '),
textInput("email", "Epostmottakere:"),
uiOutput("editEmail"),
htmlOutput("recipients"),
tags$hr(),
uiOutput("makeDispatchment") #utsending
),
mainPanel(
uiOutput("dispatchmentContent")
)
), #tab Utsendinger
tabPanel('Beredskapsskjema uten pandemiskjema',
h3('Ferdigstilte beredskapsskjema uten tilhørende pandemiskjema'),
h4('Koblinga er basert på at opphold er registrert med tidspunketer i følgende rekkefølge:
Inn på sykehus -> Inn på intensiv -> Ut fra sykehus'),
h4('I tillegg skal pandemi- og beredskapsskjema tilhøre samme HF.'),
sidebarPanel(
dateRangeInput(inputId = "fraDatoBerUpan", label = "Tidsperiode",
start = startDato, end = Sys.Date(),
separator="t.o.m.", language="nb"),
# dateInput(inputId = 'fraDatoBerUpan', label = 'Velg startdato',
# value = '2020-03-01',
# min = '2020-03-01', max = Sys.Date()),
selectInput(inputId = "HFberUpan",
label="Velg HF for intensivopphold",
choices = HFbered)
),
mainPanel(
downloadButton(outputId = 'lastNed_TabintUPan', label='Last ned tabell', class = "butt"),
tableOutput('TabintUPan')
)
),
tabPanel("Ant.forløp",
sidebarPanel(
selectInput(inputId = 'enhetsNivaaForl', label='Velg enhetsnivå',
choices = c("Sykehus"='ShNavn',
'HF' = 'HF',
'RHF' = 'RHF'),
selected = 'HF'
),
selectInput(inputId = "aarsakInnForl", label="Covid-19 som hovedårsak til innleggelse?",
choices = c('Alle registreringer' = 0,
'Ja, alle opphold' = 1,
'Nei, ingen opphold' = 2)
),
dateRangeInput(inputId = "valgtDatoForl", label = "Tidsperiode",
start = startDato, end = Sys.Date(),
separator="t.o.m.", language="nb")
),
mainPanel(
h3('Antall opphold og pasienter per enhet'),
tableOutput('tabAntForlEnh')
)
),
tabPanel('Nedlasting av data',
sidebarPanel(width = 4,
h4('Last ned data'),
br(),
downloadButton(outputId = 'lastNed_dataPandemiRaa',
label='Last ned ubesudlede pandemidata', class = "butt"),
downloadButton(outputId = 'lastNed_dataPandemiPas',
label='Last ned data aggregert til smitteforløp', class = "butt"),
br(),
br(),
br(),
h4('Data til FHI'),
selectInput(inputId = "hvilkeFilerTilFHI", label = "Data:",
c("Beredt C-19: Pandemi, beredskap og influensa" = "DataFHIPanBeredInflu",
"Testfil til Beredt C-19" = "Testfil_BerC19",
"Råfiler til overvåkning" = "DataFHICovMonitor",
"Testfil til overvåkning" = "Testfil_CovMonitor")),
actionButton("bestillDataTilFHI", "Bestill data til FHI"),
br(),
downloadButton(outputId = 'lastNed_filstiDataNHN',
label='Send filer til NHN og last ned filsti', class = "butt")
# downloadButton(outputId = 'lastNed_filstiDataNHN_monitor',
# label='Send filer til Beredt-C19 (NHN) og last ned filsti', class = "butt")
),
mainPanel(
br(),
h4('Hvis man av en eller annen grunn ønsker å oppdatere staging-data utenom de faste oppdateringstidene, trykk på knappen:'),
actionButton("oppdatStaging", "Oppdater stagingdata"),
)
), #Nedlasting/sende FHI
shiny::tabPanel(
"Eksport",
shiny::sidebarPanel(
rapbase::exportUCInput("koronaExport")
),
shiny::mainPanel(
rapbase::exportGuideUI("koronaExportGuide")
)
)
) #tabset
) #tab registeradm.
) # navbarPage
) # tagList
#----------Slutt ui-del--------------
# Define server logic required to draw a histogram
server <- function(input, output, session) {
# Last inn data
#-----------Div serveroppstart------------------
if (context %in% c('QA', 'PRODUCTION')){
rapbase::appLogger(session = session, msg = "Starter Pandemi-app")}
reshID <- ifelse(paaServer, as.numeric(rapbase::getUserReshId(session)), 100082) # 100089
rolle <- ifelse(paaServer, rapbase::getUserRole(shinySession=session), 'SC')
brukernavn <- ifelse(paaServer, rapbase::getUserName(shinySession=session), 'brukernavnDummy')
output$brukernavn <- renderText(brukernavn)
finnesEgenResh <- reshID %in% unique(KoroData$HFresh)
egetHF <- 'ReshUreg'
egetRHF <- 'ReshUreg'
if (finnesEgenResh) {
indReshEgen <- match(reshID, KoroData$HFresh) #Her skal benyttes HF-resh
egetRHF <- as.character(KoroData$RHF[indReshEgen])
egetHF <- as.character(KoroData$HF[indReshEgen])
}
#Filtreringsnivå for data:
egetEnhetsNivaa <- switch(rolle, SC = 'RHF', LC = 'RHF', LU = 'HF')
egenEnhet <- switch(rolle, SC='Alle', LC=egetRHF, LU=egetHF) #For LU vil reshID benyttes
#observe({
if (rolle != 'SC') {
shinyjs::hide(id = 'KoroRappInt.pdf')
shinyjs::hide(id = 'KoroRappTxtInt')
}
if (!(brukernavn %in% c('lenaro', 'kevin.thon', 'eabu', 'helkri'))){
shinyjs::hide(id = 'bestillDataTilFHI')
shinyjs::hide(id = 'hvilkeFilerTilFHI')
shinyjs::hide(id = 'lastNed_filstiDataNHN')
#shinyjs::hide(id = 'lastNed_filstiDataNHN_monitor')
#shinyjs::hide(id = 'oppdatStaging')
}
if (!(brukernavn %in% c('lenaro', 'kevin.thon',
'eabu', 'MarianneSaevik', 'eivh', 'anif', 'helkri', 'crbr74'))) {
hideTab(inputId = "hovedark", target = "Registeradm")
}
#})
# SC kan velge blant RHF, Resten kan bare velge EGEN ENHET/ALLE
enhetsvalg <- if (rolle=='SC'){c('Alle', rhfNavn)} else {c(egenEnhet,'Alle')}
#if (rolle != 'SC') {
updateSelectInput(session, "valgtEnhet",
choices = enhetsvalg)
updateSelectInput(session, "valgtEnhetRes",
choices = enhetsvalg)
#Sjekk av dataoverføring:
minAnt <- min(length(unique(KoroDataRaa$SkjemaGUID)), length(unique(KoroDataRaa$SkjemaGUIDut)))
antInnlagte <- sum(is.na(KoroData$FormDateUt))
txt <- ifelse(minAnt < 25000 | antInnlagte >1000,
'ADVARSEL: Dataoverføringa kan være ufullstendig. Det anbefales å logge inn på nytt om ca 3 timer.',
'') #paste0('ant:', minAnt, 'innl', antInnlagte))
output$Advarsel <- renderUI(
h2(HTML(txt), style = "color:red")
)
antPasFlereForlAlle <- sum(KoroData$InnNr>1)
antPasFlereForlCov <- sum(KoroData$ArsakInnNy %in% 1:3 & KoroData$InnNr>1)
output$antFlereForl <- renderUI(h5(HTML(paste0('De fleste resultater er basert på at opphold for hver pasient er
aggregert til ett smitteforløp.
Pasienter som har mer enn 90 dager mellom to innleggelser teller som to eller flere smitteforløp.
Per i dag er det på landsbasis ', antPasFlereForlAlle, ' pasienter som har mer enn ett smitteforløp i registeret
og ', antPasFlereForlCov, ' av disse har mer enn ett smitteforløp hvor Covid-19 er hovedårsak til minst ett av oppholdene.'))))
# widget
if (paaServer) {
output$appUserName <- renderText(rapbase::getUserFullName(session))
output$appOrgName <- renderText(paste0('rolle: ', rolle, ', bruker: ', brukernavn,
'<br> ReshID: ', reshID) )}
#,'<br> Org: ', egenOrg) )}
# User info in widget
if (Sys.getenv("R_RAP_INSTANCE") != "") {
userInfo <- rapbase::howWeDealWithPersonalData(session, callerPkg = "korona")}
observeEvent(input$userInfo, {
shinyalert::shinyalert("Dette vet Rapporteket om deg:", userInfo,
type = "", imageUrl = "rap/logo.svg",
closeOnEsc = TRUE, closeOnClickOutside = TRUE,
html = TRUE, confirmButtonText = rapbase::noOptOutOk())
})
#-------- Laste ned Samlerapporter------------
#observe({
#valgtEnhet <- ifelse(rolle == 'LU', egetRHF, as.character(input$valgtEnhet))
output$KoroRapp.pdf <- downloadHandler(
filename = function(){
paste0('KoronaRapport', Sys.time(), '.pdf')},
content = function(file){
henteSamlerapporterKorona(file, rnwFil="KoronaRapport.Rnw",
rolle = rolle,
valgtEnhet = egenEnhet,
enhetsNivaa = egetEnhetsNivaa,
reshID = reshID
) #Vurder å ta med tidsinndeling eller startdato
}
)
#})
output$KoroRappTxt <- renderUI(tagList(
h3(HTML('Koronarapport med samling av resultater')),
h5(HTML('Koronarapporten kan man få regelmessig tilsendt på e-post.
Gå til fanen "Abonnement" for å bestille dette'))
))
#----------Dæsjbord, Korona----------------------------
observeEvent(input$tilbakestillValg, shinyjs::reset("brukervalgStartside"))
observeEvent(input$tilbakestillValgRes, shinyjs::reset("brukervalgRes"))
observeEvent(input$tilbakestillValgAndel, shinyjs::reset("brukervalgAndel"))
output$manglerRegResh <- renderUI(tagList(
if (finnesEgenResh | rolle=='SC') {''} else {
h2(HTML('Ingen registreringer på innlogget ReshID'), style = "color:red")}))
observe({
#Antall innleggelser
AntTab <- antallTidEnhTab(RegData=KoroData, tilgangsNivaa=rolle,
valgtEnhet= egenEnhet, #nivå avgjort av rolle
tidsenhet='dag',
aarsakInn = as.numeric(input$aarsakInn),
skjemastatusInn=as.numeric(input$skjemastatusInn),
erMann=as.numeric(input$erMann))
UtData <- KoronaUtvalg(RegData=KoroData,
enhetsNivaa=egetEnhetsNivaa, valgtEnhet=egenEnhet,
aarsakInn = as.numeric(input$aarsakInn),
skjemastatusInn=as.numeric(input$skjemastatusInn),
erMann=as.numeric(input$erMann)
)
txt <- if(dim(UtData$RegData)[1]>2) {
paste0('For hele tidsperioden er gjennomsnittsalderen <b>', round(mean(UtData$RegData$Alder, na.rm = T)), '</b> år og ',
round(100*mean(UtData$RegData$erMann, na.rm = T)), '% er menn.
Antall døde: ', sum(UtData$RegData$StatusVedUtskriving==2, na.rm=T))
} else {''}
output$utvalgAntOpph <- renderUI({
UtTekst <- tagList(
h5(HTML(paste0(AntTab$utvalgTxt, '<br />'))),
h4(HTML(paste0(txt, '<br />')))
)})
output$tabAntOpph <- renderTable({
Nrad <- nrow(AntTab$Tab)
AntTab$Tab[(Nrad-10):Nrad,]}, rownames = T, digits=0, spacing="xs"
)
#Antall utskrevne
AntUtskr <- antallTidUtskrevne(RegData=KoroData, tilgangsNivaa=rolle,
valgtEnhet= egenEnhet, #enhetsnivå avgjort av rolle
tidsenhet='dag',
aarsakInn = as.numeric(input$aarsakInn),
skjemastatusInn=as.numeric(input$skjemastatusInn),
erMann=as.numeric(input$erMann))
output$tabAntUtskr <- renderTable({
Nrad <- nrow(AntUtskr$Tab)
AntUtskr$Tab[(Nrad-10):Nrad,]}, rownames = T, digits=0, spacing="xs")
output$utvalgAntUtskr <- renderUI(h5(HTML(paste0(AntTab$utvalgTxt, '<br />'))))
#Tab status nå
statusNaaTab <- statusNaaTab(RegData=KoroData, enhetsNivaa=egetEnhetsNivaa, #
valgtEnhet=input$valgtEnhet,
aarsakInn = as.numeric(input$aarsakInn))
output$statusNaaShTab <- renderTable({statusNaaTab$Tab}, rownames = T, digits=0, spacing="xs")
output$utvalgNaa <- renderUI({h5(HTML(paste0(statusNaaTab$utvalgTxt, '<br />'))) })
#Skjema i kladd
KoroDataEget <- KoronaUtvalg(RegData=KoronaPreprosesser(KoroDataRaa, aggPers = 0),
valgtEnhet = egenEnhet, enhetsNivaa = egetEnhetsNivaa)$RegData
indKladdEget <- which(KoroDataEget$FormStatus==1)
if (length(indKladdEget)>0) {
AntKladdShus <- table(KoroDataEget$ShNavn[indKladdEget], dnn= 'Inkl.skjema i kladd')
output$skjemaInnKladdTab <-
if (length(AntKladdShus) > 1) {AntKladdShus <- xtable::xtable(sort(AntKladdShus, decreasing = T))
renderTable({AntKladdShus}, rownames = T, digits=0, spacing="xs")
} else {AntKladdShus <- as.data.frame(AntKladdShus)
names(AntKladdShus) <- c('', 'Inkl.skjema i kladd')
renderTable({AntKladdShus}, rownames = F, digits=0, spacing="xs")}
} else {
output$skjemaInnKladdTab <- renderText('Alle inklusjonsskjema ferdigstilt!')}
indKladdUtEget <- which(KoroDataEget$FormStatusUt==1)
if (length(indKladdUtEget)>0) {
AntKladdUtShus <- table(KoroDataEget$ShNavn[indKladdUtEget], dnn= 'Ut.skjema i kladd')
output$skjemaUtKladdTab <-
if (length(AntKladdUtShus) > 1) {
AntKladdUtShus <- xtable::xtable(sort(AntKladdUtShus, decreasing = T))
renderTable({AntKladdUtShus}, rownames = T, digits=0, spacing="xs")
} else {
AntKladdUtShus <- as.data.frame(AntKladdUtShus)
names(AntKladdUtShus) <- c('', 'Ut.skjema i kladd')
renderTable({AntKladdUtShus}, rownames = F, digits=0, spacing="xs")}
} else {output$skjemaUtKladdTab <- renderText('Alle utskrivingsskjema ferdigstilt!')}
#Tab ferdigstilte
TabFerdig <- FerdigeRegTab(RegData=KoroData,
aarsakInn = as.numeric(input$aarsakInn),
valgtEnhet=input$valgtEnhet,
datoFra=input$valgtDato[1],
datoTil=input$valgtDato[2],
enhetsNivaa = egetEnhetsNivaa,
dodSh=as.numeric(input$dodSh),
erMann=as.numeric(input$erMann))
output$tabFerdigeReg <- if (TabFerdig$Ntest>4){
renderTable({TabFerdig$Tab}, rownames = T, digits=0, spacing="xs")} else {
renderText('Få registreringer (N<5)')}
output$utvalgFerdigeReg <- renderUI({h5(HTML(paste0(TabFerdig$utvalgTxt, '<br />'))) })
output$tittelFerdigeReg <- renderUI(
h3(paste0('Utskrevne pasienter (', TabFerdig$Ntest, ' forløp)')))
#Tab risiko
RisikoTab <- RisikoInnTab(RegData=KoroData,
valgtEnhet= input$valgtEnhet,
enhetsNivaa = egetEnhetsNivaa,
datoFra=input$valgtDato[1],
datoTil=input$valgtDato[2],
skjemastatusInn=as.numeric(input$skjemastatusInn),
dodSh=as.numeric(input$dodSh),
aarsakInn = as.numeric(input$aarsakInn),
erMann=as.numeric(input$erMann),
minald=as.numeric(input$alder[1]),
maxald=as.numeric(input$alder[2]))
output$tabRisikofaktorer <- if (RisikoTab$Ntest>2){
renderTable(RisikoTab$Tab, rownames = T, digits=0, spacing="xs") } else {
renderText('Få registreringer (N<3)')}
output$utvalgRisiko <- renderUI({h5(HTML(paste0(RisikoTab$utvalgTxt, '<br />'))) #tagList()
})
})
############ Kevin start ######################
output$FigurAldersfordeling <-
renderPlot({korona::AlderKjFig(RegData=KoroData,
valgtEnhet= input$valgtEnhet,
enhetsNivaa = egetEnhetsNivaa,
datoFra=input$valgtDato[1],
datoTil=input$valgtDato[2],
dodSh=as.numeric(input$dodSh),
aarsakInn = as.numeric(input$aarsakInn),
skjemastatusInn=as.numeric(input$skjemastatusInn)
)
}, width = 500, height = 500)
output$LastNedFigAldKj <- downloadHandler(
filename = function(){
paste0('FigurAldKj_', Sys.time(), '.', input$bildeformatAldKj)
},
content = function(file){
korona::AlderKjFig(RegData=KoroData,
valgtEnhet= input$valgtEnhet,
enhetsNivaa = egetEnhetsNivaa,
datoFra=input$valgtDato[1],
datoTil=input$valgtDato[2],
dodSh=as.numeric(input$dodSh),
aarsakInn = as.numeric(input$aarsakInn),
skjemastatusInn=as.numeric(input$skjemastatusInn),
outfile = file)
}
)
output$lastNedAldKj <- downloadHandler(
filename = function(){
paste0('AldKjTabell', Sys.time(), '.csv')
},
content = function(file){
Tabell <- korona::AlderKjFig(RegData=KoroData,
valgtEnhet= input$valgtEnhet,
enhetsNivaa = egetEnhetsNivaa,
datoFra=input$valgtDato[1],
datoTil=input$valgtDato[2],
dodSh=as.numeric(input$dodSh),
aarsakInn = as.numeric(input$aarsakInn),
skjemastatusInn=as.numeric(input$skjemastatusInn),
outfile = file)
write.csv2(Tabell, file, row.names = F, fileEncoding = 'latin1')
}
)
callModule(koronaresultater, "resultater_id", KoroData = KoroData, KoroDataOpph=KoroDataOpph, rolle=rolle, enhetsvalg=enhetsvalg,
egetEnhetsNivaa=egetEnhetsNivaa, egenEnhet=egenEnhet, hvdsession = session)
callModule(koronabelegg, "koronabelegg_id", KoroData = KoroData, rolle=rolle, reshID=reshID,
egetEnhetsNivaa=egetEnhetsNivaa, egenEnhet=egenEnhet, hvdsession = session)
########## Kevin slutt ##################
#-----------------------------Resultater---------------------------------
output$tabAntOpphEnhTid <- renderTable( #xtable::xtable(
tabAntOpphEnhTid(RegData=KoroDataOpph,
datoTil=input$tilDatoOpph,
enhetsNivaa = input$enhetsNivaaOpph,
tidsenhet = input$tidsenhetOpph,
antTidsenh=input$antTidsenhOpph,
covidInn = as.numeric(input$aarsakInnOpph)),
rownames = T, digits = 0
)
output$tabAntForlEnh <- renderTable(
tabAntPersOpph(RegData=KoroDataOpph,
datoFra = as.Date(input$valgtDatoForl[1]),
datoTil=as.Date(input$valgtDatoForl[2]),
covidInn = as.numeric(input$aarsakInnForl),
enhetsNivaa = input$enhetsNivaaForl),
rownames = F, digits = 0
)
#------------Fordelinger---------------------
output$fordelinger <- renderPlot({
KoronaFigAndeler(RegData=KoroData,
valgtVar=input$valgtVarFord,
valgtEnhet = input$valgtEnhetRes, #egenEnhet, #
enhetsNivaa=egetEnhetsNivaa,
datoFra=input$valgtDatoRes[1],
datoTil=input$valgtDatoRes[2],
enhetsUtvalg = as.numeric(input$enhetsUtvalgFord),
dodSh=as.numeric(input$dodShRes),
aarsakInn = as.numeric(input$aarsakInnRes),
erMann=as.numeric(input$erMannRes),
beredPas = as.numeric(input$beredPasRes),
skjemastatusInn=as.numeric(input$skjemastatusInnRes),
kjemastatusUt=as.numeric(input$skjemastatusUtRes),
session = session)
}, height=700, width=700 #height = function() {session$clientData$output_fordelinger_width}
)
output$LastNedFigFord <- downloadHandler(
filename = function(){
paste0('FordelingsFigur', valgtVar=input$valgtVarFord, '_', Sys.time(), '.', input$bildeformatFord)
},
content = function(file){
KoronaFigAndeler(RegData=KoroData,
valgtVar=input$valgtVarFord,
valgtEnhet = input$valgtEnhetRes,
datoFra=input$valgtDatoRes[1],
datoTil=input$valgtDatoRes[2],
enhetsNivaa= egetEnhetsNivaa,
enhetsUtvalg = as.numeric(input$enhetsUtvalgFord),
dodSh=as.numeric(input$dodShRes),
aarsakInn = as.numeric(input$aarsakInnRes),
erMann=as.numeric(input$erMannRes),
skjemastatusInn=as.numeric(input$skjemastatusInnRes),
kjemastatusUt=as.numeric(input$skjemastatusUtRes),
session = session,
outfile = file)
}
)
observe({
#print(paste0('FigurAndelTid', valgtVar=input$valgtVarAndel, '_', Sys.Date(), '.', input$bildeformatAndel))
UtDataFord <- KoronaFigAndeler(RegData=KoroData,
valgtVar=input$valgtVarFord,
valgtEnhet = input$valgtEnhetRes,
datoFra=input$valgtDatoRes[1],
datoTil=input$valgtDatoRes[2],
enhetsNivaa= egetEnhetsNivaa,
enhetsUtvalg = as.numeric(input$enhetsUtvalgFord),
dodSh=as.numeric(input$dodShRes),
aarsakInn = as.numeric(input$aarsakInnRes),
erMann=as.numeric(input$erMannRes),
skjemastatusInn=as.numeric(input$skjemastatusInnRes),
kjemastatusUt=as.numeric(input$skjemastatusUtRes),
session = session)
tab <- lagTabavFigFord(UtDataFraFig = UtDataFord)
output$tittelFord <- renderUI({
tagList(
h3(HTML(paste(UtDataFord$tittel, sep='<br />'))),
h5(HTML(paste0(UtDataFord$utvalgTxt, '<br />')))
)}) #, align='center'
output$fordelingTab <- function() { #gr1=UtDataFord$hovedgrTxt, gr2=UtDataFord$smltxt renderTable(
# kable_styling("hover", full_width = F)
antKol <- ncol(tab)
kableExtra::kable(tab, format = 'html'
, full_width=F
, digits = c(0,0,1,0,0,1)[1:antKol]
) %>%
kableExtra::add_header_above(c(" "=1, 'Egen enhet/gruppe' = 3, 'Resten' = 3)[1:(antKol/3+1)]) %>%
kableExtra::column_spec(column = 1, width_min = '7em') %>%
kableExtra::column_spec(column = 2:(ncol(tab)+1), width = '7em') %>%
kableExtra::row_spec(0, bold = T)
}
output$lastNed_tabFord <- downloadHandler(
filename = function(){
paste0(input$valgtVarFord, '_fordeling.csv')
},
content = function(file, filename){
write.csv2(tab, file, row.names = T, na = '')
})
}) #observe
#------------Andeler---------------------
#----------AndelTid------------
output$andelTid <- renderPlot({
KoronaFigAndelTid(RegData=KoroData,
valgtVar=input$valgtVarAndel,
valgtEnhet = input$valgtEnhetAndel,
enhetsNivaa=egetEnhetsNivaa,
datoFra=input$valgtDatoAndel[1],
datoTil=input$valgtDatoAndel[2],
enhetsUtvalg = as.numeric(input$enhetsUtvalgAndel),
dodSh=as.numeric(input$dodShAndel),
aarsakInn = as.numeric(input$aarsakInnAndel),
erMann=as.numeric(input$erMannAndel),
beredPas = as.numeric(input$beredPasAndel),
tidsenhet=input$tidsenhetAndel,
session = session)
}, height = 300, width = 1000 #height = function() {session$clientData$output_fordelinger_width}
)
output$LastNedFigAndelTid <- downloadHandler(
filename = function(){
paste0('FigurAndelTid', valgtVar=input$valgtVarAndel, '_', Sys.time(), '.', input$bildeformatAndel)
},
content = function(file){
KoronaFigAndelTid(RegData=KoroData,
valgtVar=input$valgtVarAndel,
valgtEnhet = input$valgtEnhetAndel,
enhetsNivaa=egetEnhetsNivaa,
datoFra=input$valgtDatoAndel[1],
datoTil=input$valgtDatoAndel[2],
enhetsUtvalg = as.numeric(input$enhetsUtvalgAndel),
dodSh=as.numeric(input$dodShAndel),
aarsakInn = as.numeric(input$aarsakInnAndel),
erMann=as.numeric(input$erMannAndel),
beredPas = as.numeric(input$beredPasAndel),
tidsenhet=input$tidsenhetAndel,
session = session,
outfile = file)
}
)
# }) #observe
#----------Datakvalitet-------------------------
innManglerUtTab <- innManglerUt(RegData=KoroDataRaa, valgtEnhet=egenEnhet, enhetsNivaa=egetEnhetsNivaa)
output$innManglerUtTab <- renderTable(innManglerUtTab)
output$lastNed_innManglerUt <- downloadHandler(
filename = function(){
paste0('ManglerUtSkjema.csv')
},
content = function(file, filename){
write.csv2(innManglerUtTab, file, row.names = F, na = '')
})
TabDblInn <- PasMdblReg(RegData=KoroDataRaa, tidsavvik = 30)
output$dblInn <- renderTable(TabDblInn)
output$lastNed_dblInn <- downloadHandler(
filename = function(){
paste0('ToInnskjema.csv')
},
content = function(file, filename){
write.csv2(TabDblInn, file, row.names = F, na = '')
})
#Antall opphold
output$tabOpphHF <- renderTable({
if (rolle == 'LU') {KoroDataOpph <- KoroDataOpph[which(KoroDataOpph$RHF == egetRHF), ]}
OpphHF <- KoroDataOpph %>% dplyr::group_by(RHF, HFkort) %>% dplyr::summarise(Antall = n(), .groups = 'keep')
colnames(OpphHF) <- c('RHF', 'HF', 'Antall')
OpphHF
}, rownames = F, digits = 0)
#-------------Intensivregistreringer------------------------
observe({
AntTab <- intensivberedskap::TabTidEnhet(RegData=BeredData, tidsenhet='dag', #valgtRHF= 'Alle',
bekr=as.numeric(input$bekrInt)
)
UtData <- intensivberedskap::NIRUtvalgBeredsk(RegData=BeredData,
bekr=as.numeric(input$bekrInt)
)
utvalg <- UtData$utvalgTxt
txt <- if(AntTab$Ntest>2) {
paste0('Gjennomsnittsalderen er <b>', round(mean(UtData$RegData$Alder, na.rm = T)), '</b> år og ',
round(100*mean(UtData$RegData$erMann, na.rm = T)), '% er menn.')
} else {''}
output$utvalgAntRegInt <- renderUI({
UtTekst <- tagList(
h5(HTML(paste0(utvalg, '<br />'))),
h4(HTML(paste0(txt, '<br />')))
)})
Nrader <- dim(AntTab$Tab)[1]
output$tabAntRegInt <- renderTable({AntTab$Tab[(Nrader-14):Nrader, ]}, rownames = T, digits=0, spacing="xs"
)
#Tab status nå
statusNaaIntTab <- intensivberedskap::statusECMOrespTab(RegData=BeredData,
bekr=as.numeric(input$bekrInt))
output$tabIntensivNaa <- renderTable({statusNaaIntTab$Tab}, rownames = T, digits=0, spacing="xs")
output$utvalgIntensivNaa <- renderUI({h5(HTML(paste0(statusNaaIntTab$utvalgTxt, '<br />'))) })
#Tab ferdigstilte
TabFerdigInt <- intensivberedskap::oppsumFerdigeRegTab(RegData=BeredData,
bekr = as.numeric(input$bekrInt))
output$tabFerdigeRegInt <- if (TabFerdigInt$Ntest>2){
renderTable({TabFerdigInt$Tab}, rownames = T, digits=0, spacing="xs")} else {
renderText('Få registreringer (N<3)')}
output$utvalgFerdigeRegInt <- renderUI({h5(HTML(paste0(TabFerdigInt$utvalgTxt, '<br />'))) })
output$tittelFerdigeRegInt <- renderUI(
h4(paste0('Fullførte registreringer, intensiv (', TabFerdigInt$Ntest, ' forløp)')))
#Registreringer i limbo:
output$RegIlimboInt <- renderUI({
finnBurdeFerdig <- function(RegData) {sum((!(is.na(RegData$DateDischargedIntensive)) & (RegData$FormStatus!=2)))}
AntBurdeFerdig <- paste0(finnBurdeFerdig(BeredData), ' skjema for hele landet')
h5(HTML(paste0(' ', AntBurdeFerdig, '<br />')))
})
#Tab risiko
RisikoTab <- intensivberedskap::RisikofaktorerTab(RegData=BeredData, #tidsenhet='Totalt',
bekr=as.numeric(input$bekrInt))
output$tabRisikofaktorerInt <- if (RisikoTab$Ntest>2){
renderTable(RisikoTab$Tab, rownames = T, digits=0, spacing="xs") } else {
renderText('Få registreringer (N<3)')}
output$utvalgRisikoInt <- renderUI({h5(HTML(paste0(RisikoTab$utvalgTxt, '<br />'))) #tagList()
})
TabAlder <- intensivberedskap::TabAlder(RegData=BeredData,
bekr=as.numeric(input$bekrInt)
)
output$tabAlderInt<- renderTable({xtable::xtable(TabAlder$Tab)}, rownames = T, digits=0, spacing="xs")
output$utvalgAlderInt <- renderUI({h5(HTML(paste0(TabAlder$utvalgTxt, '<br />'))) })
})
#------------------ Abonnement ----------------------------------------------
## reaktive verdier for å holde rede på endringer som skjer mens
## applikasjonen kjører
subscription <- reactiveValues(
tab = rapbase::makeAutoReportTab(session, type = "subscription"))
## lag tabell over gjeldende status for abonnement
output$activeSubscriptions <- DT::renderDataTable(
subscription$tab, server = FALSE, escape = FALSE, selection = 'none',
options = list(dom = 'tp', ordning = FALSE,
columnDefs = list(list(visible = FALSE, targets = 6))),
rownames = FALSE
)
## lag side som viser status for abonnement, også når det ikke finnes noen
output$subscriptionContent <- renderUI({
userFullName <- rapbase::getUserFullName(session)
userEmail <- rapbase::getUserEmail(session)
if (length(subscription$tab) == 0) {
p(paste("Ingen aktive abonnement for", userFullName))
} else {
tagList(
p(paste0("Aktive abonnement som sendes per epost til ", userFullName,
":")),
DT::dataTableOutput("activeSubscriptions")
)
}
})
## nye abonnement
observeEvent(input$subscribe, { #MÅ HA
owner <- rapbase::getUserName(session)
interval <- strsplit(input$subscriptionFreq, "-")[[1]][2]
intervalName <- strsplit(input$subscriptionFreq, "-")[[1]][1]
organization <- rapbase::getUserReshId(session)
runDayOfYear <- rapbase::makeRunDayOfYearSequence(interval = interval)
email <- rapbase::getUserEmail(session)
if (input$subscriptionRep == "Koronarapport") {
synopsis <- "Rapporteket-Pandemi: Koronarapport"
rnwFil <- "KoronaRapport.Rnw" #Navn på fila
}
fun <- "abonnementKorona"
paramNames <- c('rnwFil', 'brukernavn', "reshID", "valgtEnhet", "enhetsNivaa", 'rolle')
paramValues <- c(rnwFil, brukernavn, reshID, egenEnhet, egetEnhetsNivaa, rolle) #, as.character(input$valgtEnhetabb))
# test <- abonnementKorona(rnwFil="KoronaRapport.Rnw", brukernavn='tullebukk',
# reshID=100082) #, valgtEnhet=egenEnhet, enhetsNivaa='RHF', rolle='SC')
rapbase::createAutoReport(synopsis = synopsis, package = 'korona',
type = "subscription",
fun = fun, paramNames = paramNames,
paramValues = paramValues, owner = owner,
email = email, organization = organization,
runDayOfYear = runDayOfYear,
interval = interval,
intervalName = intervalName)
subscription$tab <-
rapbase::makeAutoReportTab(session, type = "subscription")
})
#----- Utsending ------
## reaktive verdier for å holde rede på endringer som skjer mens
## applikasjonen kjører
dispatchment <- reactiveValues(
tab = rapbase::makeAutoReportTab(session = session, type = "dispatchment", includeReportId = TRUE),
koblRoller = matrix(NA, ncol=2, dimnames=list(NULL, c('id', 'Rolle') )),
report = "Koronarapport",
freq = "Månedlig-month",
email = vector()
)
#observe({
alleAutorapporter <- rapbase::readAutoReportData()
egneUts <- rapbase::filterAutoRep(
rapbase::filterAutoRep(alleAutorapporter, by = 'package', pass = 'korona'),
by = 'type', pass = 'dispatchment')
if (length(names(egneUts))!=0) {
ider <- names(egneUts)
roller <- vector()
for (k in 1:length(ider)) {
roller <- c(roller, egneUts[[k]]$params$rolle)
}
dispatchment$koblRoller <- cbind(id = ider,
Rolle = roller)
}
## observér og foreta endringer mens applikasjonen kjører
observeEvent(input$addEmail, {
dispatchment$email <- c(dispatchment$email, input$email)
})
observeEvent(input$delEmail, {
dispatchment$email <-
dispatchment$email[!dispatchment$email == input$email]
})
observeEvent (input$dispatch, {
package <- "korona"
type <- "dispatchment"
owner <- rapbase::getUserName(session)
ownerName <- rapbase::getUserFullName(session)
interval <- strsplit(input$dispatchmentFreq, "-")[[1]][2]
intervalName <- strsplit(input$dispatchmentFreq, "-")[[1]][1]
runDayOfYear <- rapbase::makeRunDayOfYearSequence(
interval = interval)
email <- dispatchment$email
if (input$dispatchmentRep == "Koronarapport") {
synopsis <- "Rapporteket-Pandemi: Koronarapport"
fun <- "abonnementKorona"
rnwFil <- "KoronaRapport.Rnw" #Navn på fila
rolleUts <- input$dispatchmentRole
egetEnhetsNivaaUts <- switch(rolleUts, SC = 'RHF', LC = 'RHF', LU = 'HF')
reshIDuts <- input$dispatchmentResh
organization <- reshIDuts #rapbase::getUserReshId(session)
indReshUts <- match(reshIDuts, KoroData$HFresh) #Her skal benyttes HF-resh
egenEnhetUts <- switch(rolleUts, SC='Alle', #switch(rolle, SC='Alle',
LC=as.character(KoroData$RHF[indReshUts]),
LU=as.character(KoroData$HF[indReshUts]))
paramNames <- c('rnwFil', 'brukernavn', "reshID", "valgtEnhet", "enhetsNivaa", 'rolle')
paramValues <- c(rnwFil, brukernavn, reshIDuts, egenEnhetUts, egetEnhetsNivaaUts, rolleUts)
}
rapbase::createAutoReport(synopsis = synopsis, package = package,
type = type, fun = fun, paramNames = paramNames,
paramValues = paramValues, owner = owner,
ownerName = ownerName,
email = email, organization = organization,
runDayOfYear = runDayOfYear,
interval = interval, intervalName = intervalName)
dispatchment$tab <- rapbase::makeAutoReportTab(session, type = "dispatchment", includeReportId = TRUE)
alleAutorapporter <- rapbase::readAutoReportData()
egneUts <- rapbase::filterAutoRep(
rapbase::filterAutoRep(alleAutorapporter, by = 'package', pass = 'korona'),
by = 'type', pass = 'dispatchment')
ider <- names(egneUts)
roller <- vector()
for (k in 1:length(ider)) {
roller <- c(roller, egneUts[[k]]$params$rolle)
}
dispatchment$koblRoller <- cbind(id = ider,
Rolle = roller)
dispatchment$email <- vector()
})
## ui: velg rapport
output$reportUts <- renderUI({
selectInput("dispatchmentRep", "Rapport:",
c("Koronarapport"),
selected = dispatchment$report)
})
## ui: velg rolle
output$rolleUts <- renderUI({
selectInput("dispatchmentRole", "Rolle/nivå:",
c("LU", "LC", "SC"),
selected = dispatchment$rolle)
})
## ui: velg HF
output$HFreshUts <- renderUI({
selectInput("dispatchmentResh", "HF-tilhørighet:",
HFreshValg,
selected = dispatchment$HFresh)
})
## ui: velg frekvens
output$freqUts <- renderUI({
selectInput("dispatchmentFreq", "Frekvens:",
list(Aarlig = "Årlig-year",
Kvartalsvis = "Kvartalsvis-quarter",
Maanedlig = "Månedlig-month",
Ukentlig = "Ukentlig-week",
Daglig = "Daglig-DSTday"),
selected = dispatchment$freq)
})
## ui: legg til gyldig- og slett epost
output$editEmail <- renderUI({
if (!grepl("^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$",
input$email)) {
tags$p("Angi mottaker over")
} else {
if (input$email %in% dispatchment$email) {
actionButton("delEmail", "Slett epostmottaker",
icon = shiny::icon("trash"))
} else {
actionButton("addEmail", "Legg til epostmottaker",
icon = shiny::icon("pencil"))
}
}
})
## ui: vis valgte mottakere
output$recipients <- renderText(paste(dispatchment$email, sep = "<br>"))
## ui: lag ny utsending
output$makeDispatchment <- renderUI({
if (length(dispatchment$email) == 0) {
NULL
} else {
actionButton("dispatch", "Lag utsending",
icon = shiny::icon("save"))
}
})
## lag tabell over gjeldende status for utsending - MÅ TA HØYDE FOR AT IKKE FINNES NOEN
output$activeDispatchments <- DT::renderDataTable(
if (length(dispatchment$tab) != 0) { #(!is.na(dispatchment$koblRoller[1])) {
merge(as.data.frame(dispatchment$tab), as.data.frame(dispatchment$koblRoller), by = 'id',
sort=F, all.x=T, all.y=F)[ ,c("Ansvarlig", "Rapport", "Datakilde", "Rolle", "Mottaker",
"Periode", "Slutt", "Neste", "Endre", "Slett")]} else NULL,
server = FALSE, escape = FALSE, selection = 'none',
options = list(dom = 'tp', ordning = FALSE), #, columnDefs = list(list(visible = FALSE, targets = 9))
rownames = FALSE
)
## ui: lag side som viser status for utsending, også når det ikke finnes noen
output$dispatchmentContent <- renderUI({
if (length(dispatchment$tab) == 0) {
p("Det finnes ingen utsendinger")
} else {
tagList(
h4("Aktive utsendinger:"),
h5("NB: Når du trykker på knappen for å gjøre endringer i ei utsending,
slettes utsendinga fra lista og legger seg inn i skjemaet til venstre
slik at du f.eks. kan legge til/slette e-postmottagere og endre frekvens.
Pass på at du får riktig enhet/rolle når du oppdaterer!"),
DT::dataTableOutput("activeDispatchments")
)
}
})
# Rediger eksisterende auto rapport (alle typer)
observeEvent(input$edit_button, {
repId <- strsplit(input$edit_button, "__")[[1]][2]
rep <- rapbase::readAutoReportData()[[repId]]
if (rep$type == "subscription") {#abonnement
}
if (rep$type == "dispatchment") { #utsending
dispatchment$freq <- paste0(rep$intervalName, "-", rep$interval)
dispatchment$email <- rep$email
rapbase::deleteAutoReport(repId)
dispatchment$tab <-
rapbase::makeAutoReportTab(session, type = "dispatchment", includeReportId = TRUE)
dispatchment$report <- rep$synopsis
}
})
# Slett eksisterende auto rapport (alle typer)
observeEvent(input$del_button, {
repId <- strsplit(input$del_button, "__")[[1]][2]
repIdny <- as.character(input$del_button)
rapbase::deleteAutoReport(repId)
subscription$tab <-
rapbase::makeAutoReportTab(session, type = "subscription")
dispatchment$tab <-
rapbase::makeAutoReportTab(session, type = "dispatchment", includeReportId = TRUE)
})
#-------Registeradministrasjon------------------------
output$lastNed_dataPandemiRaa <- downloadHandler(
filename = function(){
paste0('DataPandemiRaa.', Sys.Date(), '.csv')
},
content = function(file, filename){
write.csv2(KoroDataRaa, file, row.names = F, na = '')
})
output$lastNed_dataPandemiPas <- downloadHandler(
filename = function(){
paste0('DataPandemiPas', Sys.Date(), '.csv')
},
content = function(file, filename){
write.csv2(KoroData, file, row.names = F, na = '')
})
#Send filer til FHI:
output$lastNed_filstiDataNHN <- downloadHandler(
filename = function(){
paste0('Filsti', Sys.time(), '.csv')},
content = function(file, filename){
Filsti <- sendDataFilerFHI(zipFilNavn=input$hvilkeFilerTilFHI)
write.csv2(x=Filsti, file, row.names = F, na = '') #x - r-objektet
})
#Abonnement, filer til FHI
observeEvent(input$bestillDataTilFHI, { #MÅ HA
owner <- rapbase::getUserName(session)
organization <- rapbase::getUserReshId(session)
email <- rapbase::getUserEmail(session)
interval <- "DSTday"
intervalName <- "Daglig"
runDayOfYear <- rapbase::makeRunDayOfYearSequence(interval = interval)
#Vi kan utelate recipient som parameter siden den også styres av filpakken som er valgt
paramNames = c('zipFilNavn', 'brukernavn')
paramValues = c(input$hvilkeFilerTilFHI, brukernavn)
rapbase::createAutoReport(synopsis = paste0('Sendt til FHI: ',input$hvilkeFilerTilFHI),
package = 'korona',
fun = "sendDataFilerFHI",
paramNames = paramNames,
paramValues = paramValues,
owner = owner,
email = email, organization = organization,
runDayOfYear = runDayOfYear,
interval = interval,
intervalName = intervalName)
subscription$tab <-
rapbase::makeAutoReportTab(session, type = "subscription")
})
#Beredskapsskjema som mangler pandemiskjema
observe({
TabintUPan <- finnBeredUpandemi(
KoroDataMberedOpph = KoroDataOpph,
datoFra = input$fraDatoBerUpan[1],
datoTil = input$fraDatoBerUpan[2],
HF = input$HFberUpan)
output$TabintUPan <- renderTable(TabintUPan)
output$lastNed_TabintUPan <- downloadHandler(
filename = function(){
paste0('IntSkjemaUpandemi.csv')
},
content = function(file, filename){
write.csv2(TabintUPan, file, row.names = F, na = '')
})
})
# Eksport
registryName <- "korona"
## brukerkontroller
rapbase::exportUCServer("koronaExport", registryName)
## veileding
rapbase::exportGuideServer("koronaExportGuide", registryName)
#Oppdater stagingdata
observeEvent(
input$oppdatStaging,
makeStagingData())
} #serverdel
# Run the application
shinyApp(ui = ui, server = server)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.