R/appNGER.R

Defines functions server_nger ui_nger

Documented in server_nger ui_nger

#Resultattjeneste for NGER


#' Brukergrensesnitt (ui) til nger-appen
#'
#' @return Brukergrensesnittet (ui) til nger-appen
#' @export
ui_nger <- function() {

  library(nger)

  idag <- Sys.Date()
  startDato <- paste0(as.numeric(format(idag-100, "%Y")), '-01-01') #'2019-01-01' #Sys.Date()-364
  # gjør Rapportekets www-felleskomponenter tilgjengelig for applikasjonen
  addResourcePath('rap', system.file('www', package='rapbase'))
  context <- Sys.getenv("R_RAP_INSTANCE") #Blir tom hvis jobber lokalt

  regTitle = 'NORSK GYNEKOLOGISK ENDOSKOPIREGISTER'

  #-----Definere utvalgsinnhold

  enhetsUtvalg <- c("Egen mot resten av landet"=1,
                    "Hele landet"=0,
                    "Egen enhet"=2)
  diagnoser <- 0:8
  names(diagnoser) <- c('Alle', 'Godartede ovarialcyster', 'Endometriose, livmorvegg', 'Endo u livmorvegg',
                        'Onkologi', 'Generell gynekologi', 'Gravide', 'Komplikasjoner', 'Infertilitet')

  opMetode <- c('Alle'=0,
                'Laparoskopi'=1,
                'Hysteroskopi'=2,
                # 'Begge'=3,
                'Tot. lap. hysterektomi (LCD01/LCD04)'=4,
                'Lap. subtotal hysterektomi (LCC11)'=5,
                'Lap. ass. vag. hysterektomi (LCD11)'=6,
                'Alle hysterektomier' = 9,
                'Robotassisert inngrep' = 7,
                'Kolpopeksiene' = 8)

  alvorKompl <- c("Lite alvorlig"=1,
                  "Middels alvorlig"=2,
                  "Alvorlig"=3,
                  "Dødelig"=4)

  behNivaa <- c("Alle" =0, "Poliklinisk" = 1, "Dagkirurgi" = 2, "Inneliggende" = 3)

  # hastegrad <- c('Alle' = 0,
  #                'Elektiv' = 1,
  #                'Akutt' = 2,
  #                'Ø-hjelp' = 3)
  # dagkir <- c('Alle' = 9,
  #             'Dagkirurgi' = 1,
  #             'Ikke dagkirurgi' = 0)

  tidsenheter <- rev(c('År'= 'Aar', 'Halvår' = 'Halvaar',
                       'Kvartal'='Kvartal', 'Måned'='Mnd'))

  ui <- navbarPage( #fluidPage( #"Hoved"Layout for alt som vises på skjermen
    id = 'hovedark',

    # lag logo og tittel som en del av navbar
    title = div(a(includeHTML(system.file('www/logo.svg', package='rapbase'))),
                regTitle),
    # sett inn tittel også i browser-vindu
    windowTitle = regTitle,
    theme = "rap/bootstrap.css",



    #------------Startside--------------------------
    tabPanel("Startside",
             shinyjs::useShinyjs(),
             br(),
             tags$head(tags$style(".butt{background-color:#6baed6;} .butt{color: white;}")), # background color and font color
             h2('Velkommen til Rapporteket - Norsk Gynekologisk Endoskopiregister!', align='center'),
             br(),

             sidebarPanel(width = 3,
                          h3("Månedsrapport"), #),
                          h5('(Nedlastbart dokument med samling av resultater)'),
                          downloadButton(outputId = 'mndRapp.pdf', label='Last ned MÅNEDSRAPPORT', class = "butt"),
                          br(),
                          br(),

                          helpText('Det tar noen sekunder å generere en månedsrapport.
                        I mellomtida får du ikke sett på andre resultater'),
                          helpText(tags$b('Ønsker du månedsrapporten tilsendt regelmessig på e-post,
                        kan du bestille dette under fanen "Abonnement."'))
             ),
             mainPanel(width = 8,
                       tags$head(tags$link(rel="shortcut icon", href="rap/favicon.ico")),

                       if (context %in% c("DEV", "TEST", "QA", "PRODUCTION", "QAC", "PRODUCTIONC")) {
                         rapbase::navbarWidgetInput("navbar-widget", selectOrganization = TRUE)
                       },

                       # rapbase::appNavbarUserWidget(user = uiOutput("appUserName"),
                       #                              organization = uiOutput("appOrgName")
                       #                              , addUserInfo = TRUE
                       # ),
                       h4('Du er nå inne på Rapporteket for NGER. Rapporteket er registerets resultattjeneste.
                            Disse sidene inneholder en samling av figurer og tabeller som viser resultater fra registeret.
                            På hver av sidene kan man gjøre utvalg i menyene til venstre. Alle resultater er basert
                            på ferdigstilte registreringer. Merk at data er hentet direkte fra registerets database.
                            Dette medfører at nyere data ikke er kvalitetssikret ennå.'),
                       h4('Du kan se på resultater for eget sykehus, nasjonale tall og eget sykehus sett opp
                              mot landet for øvrig. Resultatene som vises er
                              basert på operasjonsdato. Alle figurer og
                            tabeller kan lastes ned.'),
                       br(),
                       h4(tags$b(tags$u('Innhold i de ulike fanene:'))),
                       h4('I feltet til venstre på hver side kan man velge hvilken variabel man ønsker å se
                            resultater for. Der kan man også gjøre ulike filtreringer/utvalg av data.'),
                       h4(tags$b('Registreringsoversikter '), 'viser aktivitet i registeret.'),
                       h4(tags$b('Kvalitetsindikatorer '), 'viser på fordelinger (figur/tabell) av ulike variable.'),
                       h4(tags$b('Fordelinger '), 'viser på fordelinger (figur/tabell) av ulike variable.'),
                       h4(tags$b('Andeler: per sykehus og over tid'), ' viser andeler(prosent) en per sykehus og utvikling over tid.
                            Man kan velge hvilken tidsskala man vi se på.'),
                       h4(tags$b('Gjennomsnitt: per sykehus og over tid'), ' viser gjennomsnittsverdier per sykehus og utvikling over tid.
                            Man kan velge om man vil se gjennomsnitt eller median.'),
                       h4('Gi gjerne innspill og tilbakemeldinger til registerledelsen vedrørende organisering
                            av og innhold på Rapporteket-NGER.'),
                       br(),
                       br(),
                       h4('Antall registreringer ved eget sykehus siste år:'),
                       plotOutput('antRegMnd', height="auto"),
                       br(),
                       h4('Oversikt over registerets kvalitetsindikatorer og resultater med offentlig tilgjengelige tall
                            finner du på www.kvalitetsregistre.no:', #helpText
                          a("NGER", href="https://www.kvalitetsregistre.no/registers/547/resultater"),
                          target="_blank", align='center'),
                       br()
             )
    ), #tab
    #-----Registreringsoversikter------------
    tabPanel("Registreringsoversikter",

             sidebarPanel(
               width=3,
               h3('Utvalg'),

               conditionalPanel(
                 condition = "input.ark == 'Antall operasjoner'",
                 dateInput(inputId = 'sluttDatoReg', label = 'Velg sluttdato', language="nb",
                           value = Sys.Date(), max = Sys.Date() ),
                 selectInput(inputId = "tidsenhetReg", label="Velg tidsenhet",
                             choices = rev(c('År'= 'Aar', 'Måned'='Mnd'))),
                 selectInput(inputId = 'opMetodeReg', label='Operasjonstype',
                             choices = opMetode
                 ),
                 selectInput(inputId = 'velgDiagReg', label='Diagnose',
                             choices = diagnoser
                 )
               ),
               conditionalPanel(
                 condition = "input.ark == 'Antall registrerte skjema' || input.ark == 'Last ned egne data' ",
                 dateRangeInput(inputId = 'datovalgReg', start = startDato, end = Sys.Date(),
                                label = "Tidsperiode", separator="t.o.m.", language="nb")

               ),
               conditionalPanel(
                 condition = "input.ark == 'Last ned egne data' | 'Nøkkeltall, Hys' ",
                 uiOutput('velgReshReg'),
                 selectInput(inputId = 'opMetodeRegDump', label='Operasjonstype (kun datadump)',
                             choices = opMetode
                 ),
                 selectInput(inputId = 'diagnoseRegDump', label='Diagnose (kun datadump)',
                             choices = diagnoser
                 ),
                 selectInput(inputId = 'alvorlighetKomplDump',
                             label='Alvorlighetsgrad, postoperative komplikasjoner',
                             multiple = T,
                             choices = alvorKompl
                 ),

                 checkboxInput(inputId = 'IntraKomplDump',
                               label = 'Intraoperativ komplikasjon?',
                               value = FALSE)
               )
             ),

             mainPanel(
               tabsetPanel(
                 id='ark',
                 tabPanel('Antall operasjoner',
                          h2("Antall opphold per avdeling"),
                          p("Velg tidsperiode for operasjon ved å velge sluttdato/tidsenhet i menyen til venstre"),
                          br(),
                          uiOutput("undertittelReg"),
                          fluidRow(
                            tableOutput("tabAntOpphSh")
                            ,downloadButton(outputId = 'lastNed_tabAntOpph', label='Last ned')
                          )
                 ),

                 tabPanel('Antall registrerte skjema',
                          h4("Tabellen viser antall registrerte skjema for valgt tidsperiode"),
                          p("Velg tidsperiode for operasjon i menyen til venstre"),
                          br(),
                          fluidRow(
                            tableOutput("tabAntSkjema")
                            ,downloadButton(outputId = 'lastNed_tabAntSkjema', label='Last ned')
                          )
                 ),
                 tabPanel('Last ned egne data',
                          h4("Gjør utvalg og last ned egne data"),
                          p("Velg tidsperiode  og evt. operasjonsmetode i menyen til venstre"),
                          br(),
                          #fluidRow(
                          downloadButton(outputId = 'lastNed_dataTilRegKtr', label='Last ned fødselsdato og operasjonsdato'),
                          br(),
                          br(),
                          downloadButton(outputId = 'lastNed_dataDump', label='Last ned datadump')
                          #)
                 )
               )
             )

    ), #tab Registreringsoversikter


    #-----Kvalitetsindikatorer------------
    tabPanel(p("Kvalitetsindikatorer", title = 'Prosessindikatorer, RAND36, TSS2'),
             h3('Registerets kvalitetsindikatorer', align='center'),
             sidebarPanel(width=3,
                          h3('Utvalg'),
                          #Bare fig og tab
                          conditionalPanel(condition = "input.kvalIndark == 'Figur' || input.kvalIndark == 'Tabell' ",
                                           selectInput(
                                             inputId = "valgtVarKval", label="Velg variabel",
                                             choices = c('Prosessindikatorer' = 'kvalInd',
                                                         'TSS2, oppfølging' = 'TSS0',
                                                         'RAND36, v/operasjon' = 'RAND0',
                                                         'RAND36, ett år etter' = 'RAND1',
                                                         'RAND36, tre år etter' = 'RAND3')
                                           ),
                                           selectInput(inputId = 'enhetsUtvalgKval',
                                                       label='Egen enhet og/eller landet',
                                                       choices = enhetsUtvalg)
                          ),
                          #Bare RAND, alle dimensjoner
                          conditionalPanel(condition = "input.kvalIndark == 'RAND, alle dimensjoner'",
                                           selectInput(inputId = 'enhetsUtvalgKvalRAND',
                                                       label='Egen enhet / hele landet',
                                                       choices = c("Hele landet"=0, "Egen enhet"=2))
                          ),
                          conditionalPanel(condition = "input.kvalIndark == 'Figur' || input.kvalIndark == 'Tabell' ||
                      input.kvalIndark == 'RAND, alle dimensjoner' ",
                                           uiOutput("velgReshKval")
                                           # selectInput(inputId = 'velgReshKval', label='Velg eget Sykehus',
                                           #             choices = uiOutput("sykehusValg")) #sykehusValg)
                          ),
                          #Bare RAND013
                          conditionalPanel(condition = "input.kvalIndark == 'RAND, alle år'",
                                           selectInput(
                                             inputId = "valgtVarRAND013", label="Velg variabel",
                                             choices = c('Fysisk funksjon' = 'ScorePhys',
                                                         'Fysisk rollebegrensning' = 'ScoreRoleLmtPhy',
                                                         'Følelsesmessig rollebegrensning' = 'ScoreRoleLmtEmo',
                                                         'Energinivå/vitalitet' = 'ScoreEnergy',
                                                         'Mental helse' = 'ScoreEmo',
                                                         'Sosial funksjon' = 'ScoreSosial',
                                                         'Smerte' = 'ScorePain',
                                                         'Generell helsetilstand' = 'ScoreGeneral'))
                          ),
                          dateRangeInput(inputId = 'datovalgKval', start = startDato, end = Sys.Date(),
                                         label = "Tidsperiode", separator="t.o.m.", language="nb"
                          ),
                          sliderInput(inputId="alderKval", label = "Alder", min = 0,
                                      max = 110, value = c(0, 110)),
                          selectInput(inputId = 'opMetodeKval', label='Operasjonstype',
                                      choices = opMetode
                          ),
                          selectInput(inputId = 'velgDiagKval', label='Diagnose',
                                      choices = diagnoser
                          ),
                          # selectInput(inputId = 'hastegradKval', label='Hastegrad',
                          #             choices = hastegrad
                          # ),
                          selectInput(inputId = 'behNivaaKval', label='Behandlingsnivå',
                                      choices = behNivaa
                          ),
                          selectInput(inputId = 'alvorlighetKomplKval',
                                      label='Alvorlighetsgrad, postoperative komplikasjoner',
                                      multiple = T, #selected=0,
                                      choices = alvorKompl
                          ),
                          selectInput(inputId = "bildeformatKval",
                                      label = "Velg format for nedlasting av figur",
                                      choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg')
                          )
             ),
             mainPanel(
               tabsetPanel(id = 'kvalIndark',
                           tabPanel('Figur',
                                    br(),
                                    plotOutput('kvalInd', height="auto"),
                                    downloadButton('LastNedFigKval', label='Velg format og last ned figur')
                           ),
                           tabPanel('Tabell',
                                    uiOutput("tittelKvalInd"),
                                    br(),
                                    tableOutput('kvalIndTab'),
                                    downloadButton(outputId = 'lastNed_tabKvalInd', label='Last ned')
                           ),
                           tabPanel('RAND, alle år',
                                    br(),
                                    plotOutput('kvalRAND013', height="auto"),
                                    downloadButton(outputId = 'LastNedFigRAND013', label='Last ned')
                           ),
                           tabPanel('RAND, alle dimensjoner',
                                    br(),
                                    plotOutput('kvalRANDdim', height="auto"),
                                    downloadButton(outputId = 'LastNedFigRANDdim', label='Last ned')
                           )
               ))

    ), #tab Kvalitetsindikatorer

    #--------------Tabelloversikter-------------
    tabPanel(p("Tabelloversikter", title = 'Instrumentbruk, komplikasjoner'),
             h3('Tabelloversikter', align='center'),
             sidebarPanel(width=3,
                          h3('Utvalg'),
                          dateRangeInput(inputId = 'datovalgTab', start = startDato, end = Sys.Date(),
                                         label = "Tidsperiode", separator="t.o.m.", language="nb"),
                          conditionalPanel(
                            condition = "input.tab == 'Nøkkeltall, Hys' || input.tab == 'Nøkkeltall, Lap' ",
                            selectInput(inputId = 'enhetsUtvalgTab', label='Egen enhet eller hele landet',
                                        choices = enhetsUtvalg[2:3]
                            ),
                            uiOutput("velgSykehusTab")
                          )
             ),
             mainPanel(
               tabsetPanel(id='tab',
                           tabPanel('Instrumentbruk, Lap',
                                    br(),
                                    h4('Tabellen viser antall ganger i den valgte tidsperioden ulike instrumenter er benyttet ved laparoskopi. '),
                                    br(),
                                    tableOutput('tabInstrBruk'),
                                    downloadButton(outputId = 'lastNed_tabInstrBruk', label='Last ned tabell')
                           ),
                           tabPanel('Komplikasjoner, Lap.',
                                    br(),
                                    uiOutput("tittelLapKompl"),
                                    br(),
                                    tableOutput('LapKompl'),
                                    downloadButton(outputId = 'lastNed_tabLapKompl', label='Last ned tabell')
                           ),
                           tabPanel('Nøkkeltall, Hys',
                                    br(),
                                    h3('Hysteoroskopi, nøkkeltall'),
                                    h4('Tabellen viser resultat for et utvalg variabler (rad) med ulike
                                       filtreringer (kolonner)'),
                                    br(),
                                    tableOutput('tabNokkelHys'),
                                    downloadButton(outputId = 'lastNed_tabNokkelHys', label='Last ned tabell')
                           ),
                           tabPanel('Nøkkeltall, Lap',
                                    br(),
                                    h3('Laparoskopi, nøkkeltall'),
                                    h4('Tabellen viser resultat for et utvalg variabler (rad) med ulike
                                       filtreringer (kolonner)'),
                                    br(),
                                    tableOutput('tabNokkelLap'),
                                    downloadButton(outputId = 'lastNed_tabNokkelLap', label='Last ned tabell')
                           )
               ))
    ), #Tab tabelloversikter


    #--------Fordelinger-----------
    tabPanel(
      p("Fordelinger", title= 'Alder, anestesi, ASA, BMI, diagnoser, komplikasjoner, prosessvariable, prosedyrer,
           RAND36, TSS2, utdanning'),
      #-----
      sidebarPanel(
        width = 3,
        h3('Utvalg'),
        br(),
        br(),
        selectInput(
          inputId = "valgtVar", label="Velg variabel",
          choices = c('Alder' = 'Alder',
                      'Anestesitype' = 'OpAnestesi', #endret nov23
                      'Alvorlighetsgrad, postop. kompl.' = 'Opf0AlvorlighetsGrad',
                      'ASA-grad' = 'OpASA',
                      'BMI-kategori' = 'OpBMI',
                      'Behandlingsnivå' = 'OpBehNivaa',
                      'Diagnoser, hyppigste' = 'Diagnoser',
                      'Diagnosegrupper, hyppigste' = 'DiagnoseGr',
                      'Hastegrad av operasjon' = 'OpKategori',
                      'Hjelpeinnstikk, antall' = 'LapNumHjelpeinnstikk',
                      'Hysteroskopi: Gjennomføringsgrad' = 'HysGjforingsGrad',
                      'Hysteroskopi: Intraop. komplikasjoner' = 'HysKomplikasjoner',
                      'Hysteroskopi: Årsak til ufullstendig' = 'HysUfullAarsak',
                      'Hysteroskopi: Medvirkende årsak til komplikasjon' = 'HysSkadeaarsakIntra',
                      'Hysteroskopi: Tiltak ved komplikasjon' = 'HysKomplTiltak',
                      'Infeksjoner, type' = 'Opf0KomplInfeksjon',
                      'Infeksjoner, type (alvorlig/middels)' = 'Opf0KomplAlvorInfeksjon',
                      'Komplikasjoner, postoperativt' = 'KomplPostopType',
                      'Komplikasjoner, postop. alvorlig/middels' = 'KomplAlvorPostopType',
                      'Laparoskopisk utstyr benyttet' = 'LapEkstrautstyr',
                      'Laparoskopiske intraop. komplikasjoner' = 'LapKomplIntra',
                      'Laparoskopisk skadeårsak' = 'LapSkadeIntra',
                      'Laparoskopi: Medvirkende årsak til komplikasjon' = 'LapSkadeaarsakIntra',
                      'Laparoskopisk etablering av pneumoperitoneum' = 'LapTeknikk',
                      'Norskkunnskaper' = 'Norsktalende',
                      'Oppfølgingsmetode' = 'Opf0metode',
                      'Operasjon i legens vakttid' = 'OpIVaktTid',
                      'Operasjonsmetode' = 'OpMetode',
                      'Operasjonstid (minutter)' = 'OpTid',
                      'Primæroperasjon eller reoperasjon' = 'OpType',
                      'Prosedyrer, hyppigste' = 'Prosedyrer',
                      'Prosegrupper, hyppigste' = 'ProsedyreGr',
                      'Prosedyrer, viktigste laparoskopi' = 'ProsViktigLap',
                      'Prosedyrer, viktigste hysteroskopi' =  'ProsViktigHys',
                      'Postoperative komplikasjoner vs. utdanning' = 'KomplPostUtd',
                      'RAND36 Fysisk funksjon' = 'R0ScorePhys',
                      'RAND36 Begrenses av fysisk helse' = 'R0ScoreRoleLmtPhy',
                      'RAND36 Følelsesmessig rollebegrensning' = 'R0ScoreRoleLmtEmo',
                      'RAND36 Energinivå/vitalitet' = 'R0ScoreEnergy',
                      'RAND36 Mental helse' = 'R0ScoreEmo',
                      'RAND36 Sosial funksjon' = 'R0ScoreSosial',
                      'RAND36 Smerte' = 'R0ScorePain',
                      'RAND36 Generell helsetilstand' = 'R0ScoreGeneral',
                      'Registreringsforsinkelse' =  'RegForsinkelse',
                      'Reoperasjoner som følge av komplikasjon vs. utdanning' = 'KomplReopUtd',
                      'Sivilstatus' = 'SivilStatus',
                      'Tidligere vaginale inngrep' = 'OpTidlVagInngrep',
                      'Tidligere laparoskopi' = 'OpTidlLapsko',
                      'Tidligere laparotomi' = 'OpTidlLaparotomi',
                      'TSS2, sp.1 Mottak på avdelinga' = 'Tss2Mott',
                      'TSS2, sp.2 Behandlingsopplegg' = 'Tss2Behandling',
                      'TSS2, sp.3 Lyttet behandleren' = 'Tss2Lytte',
                      'TSS2, sp.4 Tillit til behandleren' = 'Tss2Behandlere',
                      'TSS2, sp.5 Enighet om målsetning' = 'Tss2Enighet',
                      'TSS2, sp.6 Generell oppfatning av avdelinga' = 'Tss2Generelt',
                      'Utdanning' = 'Utdanning'
          ), selected = c('Registreringsforsinkelse' =  'RegForsinkelse'),
        ),


        dateRangeInput(inputId = 'datovalg', start = startDato, end = Sys.Date(),
                       label = "Tidsperiode", separator="t.o.m.", language="nb"),
        sliderInput(inputId="alder", label = "Alder", min = 0,
                    max = 110, value = c(0, 110)
        ),
        selectInput(inputId = 'enhetsUtvalg', label='Egen enhet og/eller landet',
                    choices = enhetsUtvalg
        ),
        selectInput(inputId = 'opMetode', label='Operasjonstype',
                    choices = opMetode
        ),
        selectInput(inputId = 'velgDiag', label='Diagnose',
                    choices = diagnoser
        ),
        selectInput(inputId = 'behNivaa', label='Behandlingsnivå',
                    choices = behNivaa
        ),
        # selectInput(inputId = 'hastegrad', label='Hastegrad',
        #             choices = hastegrad
        # ),
        selectInput(inputId = 'alvorlighetKompl',
                    label='Alvorlighetsgrad, postoperative komplikasjoner',
                    multiple = T, #selected=0,
                    choices = alvorKompl
        ),
        uiOutput("velgSykehusFord"),
        selectInput(inputId = "bildeformatFord",
                    label = "Velg format for nedlasting av figur",
                    choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg')
        )),
      #--------
      mainPanel(
        tabsetPanel(
          tabPanel(
            'Figur',
            br(),
            em('(Høyreklikk på figuren for å laste den ned)'),
            br(),
            br(),
            plotOutput('fordelinger', height="auto"),
            downloadButton('LastNedFigFord', label='Velg format og last ned figur')
          ),
          tabPanel(
            'Tabell',
            uiOutput("tittelFord"),
            br(),
            tableOutput('fordelingTab'),
            downloadButton(outputId = 'lastNed_tabFord', label='Last ned')
          )
        ))
    ), #tab Fordelinger


    #----------Andeler-----------------------------
    tabPanel(p("Andeler: per sykehus og tid", title='Alder, antibiotika, ASA, fedme, gjennomføringsgrad, komplikasjoner,
           konvertering, oppfølging, registreringsforsinkelse, komplikasjoner, TSS2, utdanning'),
             h2("Sykehusvise andeler og utvikling over tid for valgt variabel", align='center'),
             h5("Hvilken variabel man ønsker å se resultater for, velges fra rullegardinmenyen
            til venstre. Man kan også gjøre ulike filtreringer.", align='center'),
             br(),
             sidebarPanel(
               width=3,
               h3('Utvalg'),


               selectInput(
                 inputId = "valgtVarAndel", label="Velg variabel",
                 choices = c('Kval.ind: Komplikasjoner under operasjon' = 'KomplIntra',
                             'Kval.ind: Postop. komplikasjon: moderate/alvorlige (grad 2-4)' = 'KomplPostopAlvor',
                             'Kval.ind: TSS2: Positiv oppfatning om gyn. avd.' = 'Tss2Generelt',
                             'Alder over 70 år' = 'Alder',
                             'Antibiotika' = 'OpAntibProfylakse',
                             'ASA-grad > II' = 'OpASA',
                             # 'Blodfortynnende' = 'Blodfortynnende', fjernet nov23
                             'Behandl, dagkir' = 'OpBehNivaa',
                             'Behandl, poliklinisk' = 'Poliklin',
                             'Fedme (BMI>30)' = 'OpBMI',
                             'Konvertert til laparotomi' = 'LapKonvertert',
                             'Konvertert til laparotomi, ikke forventet' = 'LapKonvertertUventet',
                             # 'Lokalbedøvelse' = 'OpAnestesi', fjernet nov23
                             'Operasjonstid (minutter)' = 'OpTid',
                             'Pasienter med høyere utdanning' = 'Utdanning',
                             'Postop. komplikasjon: Alle' = 'KomplPostop',
                             'Postop. komplikasjon: Alvorlig og middels' = 'KomplPostopAlvor',
                             'Postop. komplikasjon: Blødning' = 'Opf0KomplBlodning',
                             'Postop. komplikasjon: Infeksjon' = 'Opf0KomplInfeksjon',
                             'Postop. komplikasjon: Infeksjon, alvorlig/middels' = 'Opf0KomplAlvorInfeksjon',
                             'Postop. komplikasjon: Organskade' = 'Opf0KomplOrgan',
                             'Postop. komplikasjon: Reoperasjon' = 'Opf0Reoperasjon',
                             'Postop. komplikasjon: lav alvorlighet (grad 1)' = 'Opf0AlvorlighetsGrad1',
                             'Postoperativ oppfølging' = 'Opf0Status',
                             'Registreringsforsinkelse' = 'RegForsinkelse',
                             'TSS2: Møtet med gyn. avd. var svært godt' = 'Tss2Mott',
                             'TSS2: Behandlingsopplegg/-innhold passet svært bra' = 'Tss2Behandling',
                             'TSS2: Behandlerne lyttet- og forsto i svært stor grad' = 'Tss2Lytte',
                             'TSS2: Pasienten hadde svært stor tillit til sine behandlere' = 'Tss2Behandlere',
                             'TSS2: Pasient og behandlere svært enige om målsetn. for behandlinga' = 'Tss2Enighet'
                 )
               ),
               dateRangeInput(inputId = 'datovalgAndel', start = startDato, end = idag,
                              label = "Tidsperiode", separator="t.o.m.", language="nb"),
               sliderInput(inputId="alderAndel", label = "Alder", min = 0,
                           max = 110, value = c(0, 110)),
               selectInput(inputId = 'opMetodeAndel', label='Operasjonstype',
                           choices = opMetode
               ),
               selectInput(inputId = 'velgDiagAndel', label='Diagnose',
                           choices = diagnoser
               ),
               selectInput(inputId = 'behNivaaAndel', label='Behandlingsnivå',
                           choices = behNivaa
               ),
               # selectInput(inputId = 'hastegradAndel', label='Hastegrad',
               #             choices = hastegrad
               # ),
               selectInput(inputId = 'alvorlighetKomplAndel',
                           label='Alvorlighetsgrad, postoperative komplikasjoner',
                           multiple = T, #selected=0,
                           choices = alvorKompl
               ),
               selectInput(inputId = "bildeformatAndel",
                           label = "Velg format for nedlasting av figur",
                           choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg')
               ),
               br(),
               p(em('Følgende utvalg gjelder bare figuren/tabellen 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)),
               selectInput(inputId = "tidsenhetAndel", label="Velg tidsenhet",
                           choices = rev(c('År'= 'Aar', 'Halvår' = 'Halvaar',
                                           'Kvartal'='Kvartal', 'Måned'='Mnd')))
             ),
             mainPanel(
               tabsetPanel(
                 tabPanel("Figurer",
                          #column(10,
                          h3(em("Utvikling over tid")),
                          br(),
                          plotOutput("andelTid", height = 'auto'),
                          downloadButton('LastNedFigAndelTid', label='Velg format og last ned figur'),
                          br(),
                          h3(em("Sykehusvise resultater")),
                          plotOutput("andelerGrVar", height='auto'),
                          downloadButton('LastNedFigAndelGrVar', label='Velg format og last ned figur')
                 ),
                 tabPanel("Tabeller",
                          uiOutput("tittelAndel"),
                          br(),
                          #fluidRow(
                          column(width = 3,
                                 h3("Sykehusvise resultater"),
                                 tableOutput("andelerGrVarTab"),
                                 downloadButton(outputId = 'lastNed_tabAndelGrVar', label='Last ned tabell')),
                          column(width = 1),
                          column(width = 5,
                                 h3("Utvikling over tid"),
                                 tableOutput("andelTidTab"),
                                 downloadButton(outputId = 'lastNed_tabAndelTid', label='Last ned tabell'))
                          #DT::DTOutput("andelerGrVarTab")
                 ))
             ) #mainPanel

    ), #tab

    #------------ Gjennomsnittresultater------------
    tabPanel(
      p("Gjennomsnitt: per sykehus og over tid",title='Alder, operasjonstid, registreringsforsinkelse, RAND36, TSS2sumskår'),
      h2('Sykehusvise gjennomsnitt/median og utvikling over tid for valgt variabel', align='center'),
      h5('Hvilken variabel man ønsker å se resultater for, velges fra rullegardinmenyen til venstre.
                  (Man kan også gjøre ulike filtreringer.)', align='center'),
      br(),
      sidebarPanel(width = 3,
                   h3('Utvalg'),
                   #8 hoveddimensjoner av Rand, TSS2spm + sumskår
                   selectInput(
                     inputId = "valgtVarGjsn", label="Velg variabel",
                     selected = c('TSS2, sumskår' = 'Tss2Sumskaar'),
                     choices = c('Alder' = 'Alder',
                                 'BMI' = 'OpBMI',
                                 'Operasjonstid (minutter)' = 'OpTid',
                                 'Registreringsforsinkelse' = 'RegForsinkelse',
                                 'RAND36 Fysisk funksjon' = 'R0ScorePhys',
                                 'RAND36 Begrenses av fysisk helse' = 'R0ScoreRoleLmtPhy',
                                 'RAND36 Følelsesmessig rollebegrensning' = 'R0ScoreRoleLmtEmo',
                                 'RAND36 Energinivå/vitalitet' = 'R0ScoreEnergy',
                                 'RAND36 Mental helse' = 'R0ScoreEmo',
                                 'RAND36 Sosial funksjon' = 'R0ScoreSosial',
                                 'RAND36 Smerte' = 'R0ScorePain',
                                 'RAND36 Generell helsetilstand ved operasjon' = 'R0ScoreGeneral',
                                 'RAND36 Generell helsetilstand ett år etter' = 'R1ScoreGeneral',
                                 'RAND36 Generell helsetilstand tre år setter' = 'R3ScoreGeneral',
                                 'TSS2, sumskår' = 'Tss2Sumskaar'
                     )
                   ),
                   dateRangeInput(inputId = 'datovalgGjsn', start = startDato, end = Sys.Date(),
                                  label = "Tidsperiode", separator="t.o.m.", language="nb"),
                   sliderInput(inputId="alderGjsn", label = "Alder", min = 0,
                               max = 110, value = c(0, 110)
                   ),
                   selectInput(inputId = "sentralmaal", label="Velg gjennomsnitt/median ",
                               choices = c("Gjennomsnitt"='gjsn', "Median"='med')),
                   selectInput(inputId = 'opMetodeGjsn', label='Operasjonstype',
                               choices = opMetode
                   ),
                   selectInput(inputId = 'velgDiagGjsn', label='Diagnose',
                               choices = diagnoser
                   ),
                   selectInput(inputId = 'behNivaaGjsn', label='Behandlingsnivå',
                               choices = behNivaa
                   ),
                   # selectInput(inputId = 'hastegradGjsn', label='Hastegrad',
                   #             choices = hastegrad
                   # ),
                   selectInput(inputId = 'alvorlighetKomplGjsn',
                               label='Alvorlighetsgrad, postoperative komplikasjoner',
                               multiple = T, #selected=0,
                               choices = alvorKompl
                   ),
                   selectInput(inputId = "bildeformatGjsn",
                               label = "Velg format for nedlasting av figur",
                               choices = c('pdf', 'png', 'jpg', 'bmp', 'tif', 'svg')
                   ),
                   br(),
                   p(em('Følgende utvalg gjelder bare figuren/tabellen som viser utvikling over tid')),
                   selectInput(inputId = 'enhetsUtvalgGjsn', label='Egen enhet og/eller landet',
                               choices = c("Egen mot resten av landet"=1, "Hele landet"=0, "Egen enhet"=2)
                   ),
                   selectInput(inputId = "tidsenhetGjsn", label="Velg tidsenhet",
                               choices = tidsenheter
                   )


      ),
      mainPanel(
        tabsetPanel(
          tabPanel(
            'Figurer',
            br(),
            em('(Høyreklikk på figuren for å laste den ned)'),
            br(),
            br(),
            h3(em("Utvikling over tid")),
            plotOutput("gjsnTid", height = 'auto'),
            downloadButton('LastNedFigGjsnTid', label='Velg format og last ned figur'),
            br(),
            h3(em("Sykehusvise resultater")),
            plotOutput("gjsnGrVar", height='auto'),
            downloadButton('LastNedFigGjsnGrVar', label='Velg format og last ned figur')
          ),
          tabPanel(
            'Tabeller',
            uiOutput("tittelGjsn"),
            br(),
            column(width = 3,
                   h3("Sykehusvise resultater"),
                   tableOutput('gjsnGrVarTab'),
                   downloadButton(outputId = 'lastNed_gjsnGrVarTab', label='Last ned')), # , class = "butt"))
            column(width = 1),
            column(width = 5,
                   h3("Utvikling over tid"),
                   tableOutput("gjsnTidTab"),
                   downloadButton(outputId = 'lastNed_gjsnTidTab', label='Last ned tabell'))
          )
        )
      )
    ), #GjsnGrVar/Tid

    #-------Registeradministrasjon----------
    tabPanel(p("Registeradministrasjon",
               title='Registeradministrasjonens side for registreringer og resultater'),
             value = "Registeradministrasjon",
             h3('Siden er bare synlig for SC-bruker', align = 'center'),
             #uiOutput(user$role'),

             tabsetPanel(
               tabPanel(
                 h4("Utsending av rapporter"),
                 sidebarPanel(
                   rapbase::autoReportOrgInput("NGERutsending"),
                   rapbase::autoReportInput("NGERutsending")
                 ),
                 mainPanel(
                   rapbase::autoReportUI("NGERutsending")
                 )
               ), #Utsending-tab
               tabPanel(
                 h4("Eksport av krypterte data"),
                 sidebarPanel(
                   rapbase::exportUCInput("ngerExport")
                 ),
                 mainPanel(
                   rapbase::exportGuideUI("ngerExportGuide")
                 )
               ) #Eksport-tab
             ) #tabsetPanel
    ), #tab SC
    #----------Abonnement-----------------

    tabPanel(p("Abonnement",
               title='Bestill automatisk utsending av rapporter på e-post'),
             value = 'Abonnement',

             sidebarLayout(
               sidebarPanel(
                 rapbase::autoReportInput("ngerAbb")
               ),
               shiny::mainPanel(
                 rapbase::autoReportUI("ngerAbb")
               )
             )
    ), #tab abonnement


    #--------slutt tab'er----------

  ) #ui-del
} #ui-funksjon


#' Server-del til appen
#'
#' @param input shiny input object
#' @param output shiny output object
#' @param session shiny session object
#'
#' @return Server-delen til NGER-appen
#' @export
server_nger <- function(input, output, session) {

  #-- Div serveroppstart----
  context <- Sys.getenv("R_RAP_INSTANCE") #Blir tom hvis jobber lokalt
  paaServer <- (context %in% c("DEV", "TEST", "QA","QAC", "PRODUCTION", "PRODUCTIONC")) #rapbase::isRapContext()

    #----------Hente data ----------
    RegData <- NGERRegDataSQL()
    errorCondition(dim(RegData)[1]==0, 'ingen data')

  #tulledata <- 0
  if (!exists('RegData')) {
    #data("NGERtulledata.Rdata", package = "nger")
    load('./data/NGERtulledata.Rdata')
    tulledata <- 1 #Må få med denne i tulledatafila..
  }

    RegData <- NGERPreprosess(RegData)
    map_avdeling <- data.frame(
      UnitId = unique(RegData$ReshId),
      orgname = RegData$ShNavn[match(unique(RegData$ReshId),
                                     RegData$ReshId)])

  user <- rapbase::navbarWidgetServer2(
    id = "navbar-widget",
    orgName = "nger",
    map_orgname = shiny::req(map_avdeling),
    caller = "nger"
  )

  observeEvent(user$role(), {
    if (user$role() == 'SC') {
      showTab(inputId = "hovedark", target = "Registeradministrasjon")
      shinyjs::show(id = 'velgResh')
      shinyjs::show(id = 'velgReshReg')
      shinyjs::show(id = 'velgReshKval')
      shinyjs::show(id = 'velgSykehusFord')
      shinyjs::show(id = 'velgSykehusTab')
    } else {
      shinyjs::hide(id = 'velgResh')
      shinyjs::hide(id = 'velgReshReg')
      shinyjs::hide(id = 'velgReshKval')
      shinyjs::hide(id = 'velgSykehusFord')
      shinyjs::hide(id = 'velgSykehusTab')
      hideTab(inputId = "hovedark", target = "Registeradministrasjon")
    }
  })

  # widget
  if (paaServer) {
    output$appUserName <- renderText(rapbase::getUserFullName(session))
    output$appOrgName <- renderText(paste0('rolle: ', user$role(), '<br> ReshID: ', user$org()) )}

  # User info in widget
  userInfo <- rapbase::howWeDealWithPersonalData(session)
  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())
  })

  #Definere utvalgsinnhold
  sykehusNavn <- sort(unique(RegData$ShNavn), index.return=T)
  sykehusValgUts <- unique(RegData$ReshId)[sykehusNavn$ix]
  names(sykehusValgUts) <- sykehusNavn$x #c('Alle',sykehusNavn$x)
  sykehusValg <- c(0,sykehusValgUts)
  names(sykehusValg) <- c('Ikke valgt',sykehusNavn$x)


  #--------------Startside------------------------------

  output$mndRapp.pdf <- downloadHandler(
    #filename = function(){ downloadFilename('NGERmaanedsrapport')},
    filename = function(){ paste0('NGERmndRapp', Sys.time(), '.pdf')},
    content = function(file){
      henteSamlerapporter(file, rnwFil="NGERmndRapp.Rnw",
                          reshID = user$org())
    })

  output$antRegMnd <- renderPlot({NGERFigAntReg(RegData=RegData, reshID = user$org())
  }, height=500, width=900
  )


  #----------Registreringsoversikter ----------------------

  observe({
    tabAntOpphShMndAar <-
      switch(input$tidsenhetReg,
             Mnd=tabAntOpphShMnd(RegData=RegData, datoTil=input$sluttDatoReg, antMnd=12,
                                 OpMetode=as.numeric(input$opMetodeReg),
                                 velgDiag=as.numeric(input$velgDiagReg)), #input$datovalgTab[2])
             Aar=tabAntOpphSh5Aar(RegData=RegData, datoTil=input$sluttDatoReg,
                                  OpMetode=as.numeric(input$opMetodeReg),
                                  velgDiag=as.numeric(input$velgDiagReg)))
    output$tabAntOpphSh <- renderTable(tabAntOpphShMndAar$tabAntAvd, rownames = T, digits=0, spacing="xs")
    output$lastNed_tabAntOpph <- downloadHandler(
      filename = function(){paste0('tabAntOpph.csv')},
      content = function(file, filename){write.csv2(tabAntOpphShMndAar$tabAntAvd, file, row.names = T, na = '')
      })

    output$undertittelReg <- renderUI({
      t1 <- 'Tabellen viser operasjoner '
      tagList(
        br(),
        h4(HTML(switch(input$tidsenhetReg,
                       Mnd = paste0(t1, 'siste 12 måneder før ', input$sluttDatoReg, '<br />'),
                       Aar = paste0(t1, 'siste 5 år før ', input$sluttDatoReg, '<br />'))),
           HTML(paste0(tabAntOpphShMndAar$utvalgTxt[-1], '<br />'))
        ))
    })
  }) #observe

  observe({
    #RegData som har tilknyttede skjema av ulik type
    AntSkjemaAvHver <- tabAntSkjema(RegData=RegData,
                                    datoFra = input$datovalgReg[1],
                                    datoTil=input$datovalgReg[2])
    output$tabAntSkjema <- renderTable(AntSkjemaAvHver
                                       ,rownames = T, digits=0, spacing="xs" )
    output$lastNed_tabAntSkjema <- downloadHandler(
      filename = function(){'tabAntSkjema.csv'},
      content = function(file, filename){write.csv2(AntSkjemaAvHver, file, row.names = T, na = '')
      })
  })

  # Hente oversikt over hvilke registrereinger som er gjort (opdato og fødselsdato)
  output$velgReshReg <- renderUI({
    selectInput(inputId = 'velgReshReg', label='Velg sykehus',
                selected = 0,
                choices = sykehusValg)
  })
  RegOversikt <- RegData[ , c('FodselsDato', 'OpDato', 'ReshId', 'ShNavn')] #, 'BasisRegStatus'

  observe({
    RegOversikt <- dplyr::filter(RegOversikt,
                                 as.Date(OpDato) >= input$datovalgReg[1],
                                 as.Date(OpDato) <= input$datovalgReg[2])

    if (user$role() == 'SC') {
      valgtResh <- ifelse(is.null(input$velgReshReg), 0, as.numeric(input$velgReshReg))
      ind <- if (valgtResh == 0) {1:dim(RegOversikt)[1]
      } else {which(as.numeric(RegOversikt$ReshId) %in% as.numeric(valgtResh))}
      tabDataRegKtr <- RegOversikt[ind,]

    }  else {
      tabDataRegKtr <- RegOversikt[which(RegOversikt$ReshId == user$org()), ]}


    output$lastNed_dataTilRegKtr <- downloadHandler(
      filename = function(){'dataTilKtr.csv'},
      content = function(file, filename){write.csv2(tabDataRegKtr, file, row.names = F, na = '')})
  })

  # Egen datadump, LU uten PROM
  RegDataAlle <- RegData
  observe({
    DataDump <-
      NGERUtvalgEnh(RegData = RegDataAlle,
                    datoFra = input$datovalgReg[1],
                    datoTil = input$datovalgReg[2],
                    OpMetode = as.numeric(input$opMetodeRegDump),
                    velgDiag = as.numeric(input$diagnoseRegDump),
                    AlvorlighetKompl = as.numeric(input$alvorlighetKomplDump))$RegData
    if (input$IntraKomplDump == TRUE) {
      indIntraKompl <- which((DataDump$LapKomplikasjoner==1) | (DataDump$HysKomplikasjoner==1))
      DataDump <- DataDump[indIntraKompl, ]}

    if (user$role() =='SC') {
      valgtResh <- ifelse(is.null(input$velgReshReg),
                          0, as.numeric(input$velgReshReg))
      ind <- if (valgtResh == 0) {1:dim(DataDump)[1]
      } else {
        which(as.numeric(DataDump$ReshId) %in% as.numeric(valgtResh))}
      tabDataDump <- DataDump[ind,]
    } else {
      navn <- names(DataDump)
      fjernVarInd <- c(grep('Opf0', navn), grep('Opf1', navn),
                       grep('R0', navn), grep('R1', navn), grep('R3', navn),
                       grep('RY1', navn), grep('Tss', navn))
      tabDataDump <-
        DataDump[which(DataDump$ReshId == user$org()), -fjernVarInd]

    } #Tar bort PROM/PREM til egen avdeling

    output$lastNed_dataDump <- downloadHandler(
      filename = function(){'dataDumpNGER.csv'},
      content = function(file, filename){write.csv2(tabDataDump, file, row.names = F, na = '')})
  })
  #---------Kvalitetsindikatorer------------
  #KvalInd

  output$velgReshKval <- renderUI({
    selectInput(inputId = 'velgReshKval', label='Velg sykehus',
                selected = 0,
                choices = sykehusValg)})
  observe({
    output$kvalInd <- renderPlot({
      NGERFigKvalInd(RegData=RegData, preprosess = 0,
                     valgtVar=input$valgtVarKval,
                     datoFra=input$datovalgKval[1],
                     datoTil=input$datovalgKval[2],
                     reshID = user$org(),
                     minald=as.numeric(input$alderKval[1]),
                     maxald=as.numeric(input$alderKval[2]),
                     OpMetode = as.numeric(input$opMetodeKval),
                     #Hastegrad = as.numeric(input$hastegradKval),
                     behNivaa = as.numeric(input$behNivaaKval),
                     velgDiag = as.numeric(input$velgDiagKval),
                     AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                     enhetsUtvalg=as.numeric(input$enhetsUtvalgKval),
                     velgAvd=ifelse(is.null(input$velgReshKval), 0, input$velgReshKval),
                     session = session)
    }, height=800, width=800)

    output$LastNedFigKval <- downloadHandler(
      filename = function(){
        paste0('FigKval_',input$valgtVarKval, Sys.time(), '.', input$bildeformatKval)
      },
      content = function(file){
        NGERFigKvalInd(RegData=RegData, preprosess = 0,
                       valgtVar=input$valgtVarKval,
                       datoFra=input$datovalgKval[1],
                       datoTil=input$datovalgKval[2],
                       reshID = user$org(),
                       minald=as.numeric(input$alderKval[1]),
                       maxald=as.numeric(input$alderKval[2]),
                       OpMetode = as.numeric(input$opMetodeKval),
                       #Hastegrad = as.numeric(input$hastegradKval),
                       behNivaa = as.numeric(input$behNivaaKval),
                       velgDiag = as.numeric(input$velgDiagKval),
                       AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                       enhetsUtvalg=as.numeric(input$enhetsUtvalgKval),
                       velgAvd=ifelse(is.null(input$velgReshKval), 0, input$velgReshKval),
                       session = session,
                       outfile = file)
      })


    UtDataKvalInd <-
      NGERFigKvalInd(RegData=RegData, preprosess = 0,
                     valgtVar=input$valgtVarKval,
                     datoFra=input$datovalgKval[1],
                     datoTil=input$datovalgKval[2],
                     reshID = user$org(),
                     minald=as.numeric(input$alderKval[1]),
                     maxald=as.numeric(input$alderKval[2]),
                     OpMetode = as.numeric(input$opMetodeKval),
                     #Hastegrad = as.numeric(input$hastegradKval),
                     behNivaa = as.numeric(input$behNivaaKval),
                     velgDiag = as.numeric(input$velgDiagKval),
                     AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                     enhetsUtvalg=as.numeric(input$enhetsUtvalgKval),
                     velgAvd=ifelse(is.null(input$velgReshKval), 0, input$velgReshKval),
                     session = session)

    tabKvalInd <- lagTabavFig(UtDataFraFig = UtDataKvalInd) #lagTabavFigAndeler

    output$tittelKvalInd <- renderUI({
      tagList(
        h3(UtDataKvalInd$tittel),
        h5(HTML(paste0(UtDataKvalInd$utvalgTxt, '<br />')))
      )}) #, align='center'

    output$kvalIndTab <- function() {
      antKol <- ncol(tabKvalInd)
      kableExtra::kable(tabKvalInd, format = 'html'
                        , full_width=F
                        , digits = c(0,1,0,1)[1:antKol]
      ) %>%
        kableExtra::add_header_above(c(" "=1, 'Egen enhet/gruppe' = 2, 'Resten' = 2)[1:(antKol/2+1)]) %>%
        kableExtra::column_spec(column = 1, width_min = '7em') %>%
        kableExtra::column_spec(column = 2:(ncol(tabKvalInd)+1), width = '7em') %>%
        kableExtra::row_spec(0, bold = T)
    }

    output$lastNed_tabKvalInd <- downloadHandler(
      filename = function(){paste0(input$valgtVarKval, '_kvalInd.csv')},
      content = function(file, filename){write.csv2(tabKvalInd, file, row.names = T, na = '')
      })
  }) #observe Kvalitetsind

  #--RAND013:
  output$kvalRAND013 <- renderPlot({
    NGERFigPrePost(RegData=RegData, preprosess = 0,
                   valgtVar=input$valgtVarRAND013,
                   datoFra=input$datovalgKval[1],
                   datoTil=input$datovalgKval[2],
                   minald=as.numeric(input$alderKval[1]),
                   maxald=as.numeric(input$alderKval[2]),
                   OpMetode = as.numeric(input$opMetodeKval),
                   behNivaa = as.numeric(input$behNivaaKval),
                   #Hastegrad = as.numeric(input$hastegradKval),
                   velgDiag = as.numeric(input$velgDiagKval),
                   AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                   session = session)
  }, height=800, width=800)

  output$LastNedFigRAND013 <- downloadHandler(
    filename = function(){
      paste0('FigRAND013_',input$valgtVarRAND013, Sys.time(), '.', input$bildeformatKval)
    },
    content = function(file){
      NGERFigPrePost(RegData=RegData, preprosess = 0,
                     valgtVar=input$valgtVarRAND013,
                     datoFra=input$datovalgKval[1],
                     datoTil=input$datovalgKval[2],
                     minald=as.numeric(input$alderKval[1]),
                     maxald=as.numeric(input$alderKval[2]),
                     OpMetode = as.numeric(input$opMetodeKval),
                     behNivaa = as.numeric(input$behNivaaKval),
                     #Hastegrad = as.numeric(input$hastegradKval),
                     velgDiag = as.numeric(input$velgDiagKval),
                     AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                     session = session,
                     outfile = file)
    })

  #RAND, alle dim
  output$kvalRANDdim <- renderPlot({
    # print(reshID)
    # print(as.numeric(input$velgReshKval))
    NGERFigPrePost(RegData=RegData, preprosess = 0,
                   valgtVar='AlleRANDdim',
                   datoFra=input$datovalgKval[1],
                   datoTil=input$datovalgKval[2],
                   enhetsUtvalg=as.numeric(input$enhetsUtvalgKvalRAND),
                   reshID = user$org(),
                   velgAvd=ifelse(is.null(input$velgReshKval), 0, input$velgReshKval),
                   minald=as.numeric(input$alderKval[1]),
                   maxald=as.numeric(input$alderKval[2]),
                   OpMetode = as.numeric(input$opMetodeKval),
                   behNivaa = as.numeric(input$behNivaaKval),
                   #Hastegrad = as.numeric(input$hastegradKval),
                   velgDiag = as.numeric(input$velgDiagKval),
                   AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                   session = session)
  }, height=800, width=800)

  output$LastNedFigRANDdim <- downloadHandler(
    filename = function(){
      paste0('FigRANDdim_', Sys.time(), '.', input$bildeformatKval)
    },
    content = function(file){
      NGERFigPrePost(RegData=RegData, preprosess = 0,
                     valgtVar='AlleRANDdim',
                     datoFra=input$datovalgKval[1],
                     datoTil=input$datovalgKval[2],
                     enhetsUtvalg=as.numeric(input$enhetsUtvalgKvalRAND),
                     reshID = user$org(),
                     velgAvd=ifelse(is.null(input$velgReshKval), 0, input$velgReshKval),
                     minald=as.numeric(input$alderKval[1]),
                     maxald=as.numeric(input$alderKval[2]),
                     OpMetode = as.numeric(input$opMetodeKval),
                     behNivaa = as.numeric(input$behNivaaKval),
                     #Hastegrad = as.numeric(input$hastegradKval),
                     velgDiag = as.numeric(input$velgDiagKval),
                     AlvorlighetKompl = as.numeric(input$alvorlighetKomplKval),
                     session = session,
                     outfile = file)
    })

  #----------Tabelloversikter ----------------------
  observe({
    tabInstrumentbruk <- instrumentbruk(RegData = RegData,
                                        datoFra = input$datovalgTab[1], datoTil = input$datovalgTab[2])
    output$tabInstrBruk <- renderTable(tabInstrumentbruk, rownames = T, digits=0, spacing="xs")
    output$lastNed_tabInstrBruk <- downloadHandler(
      filename = function(){paste0('tabInstrumentbruk.csv')},
      content = function(file, filename){write.csv2(tabInstrumentbruk, file, row.names = T, na = '')})
    LapKomplData <- tabKomplLap(RegData=RegData,
                                reshID=user$org(),
                                datoFra = input$datovalgTab[1],
                                datoTil = input$datovalgTab[2])

    output$tittelLapKompl <- renderUI(tagList(
      h4('Hyppighet (%) av laparoskopiske komplikasjoner. '),
      h4(paste0('Totalt ble det utført ', LapKomplData$AntLap, ' laparoskopier i tidsperioden.'))))
    output$LapKompl <- renderTable(LapKomplData$AndelLapKomplTab,
                                   rownames = T,
                                   digits=1,
                                   spacing="xs") #,caption = tabtxtLapKompl)
    output$lastNed_tabLapKompl <-  downloadHandler(
      filename = function(){paste0('tabLapKompl.csv')},
      content = function(file, filename){write.csv2(LapKomplData$AntLap, file, row.names = T, na = '')})
    #,caption = tabtxtLapKompl)
  })

  output$velgSykehusTab <- renderUI({
    selectInput(inputId = 'velgSykehusTab', label='Velg sykehus',
                selected = 0,
                choices = sykehusValg)
  })

  observe({
    tabNokkelHys <- tabNokkelHys(RegData = RegData,
                                 datoFra = input$datovalgTab[1], datoTil = input$datovalgTab[2],
                                 reshID = user$org(),
                                 velgAvd = ifelse(is.null(input$velgSykehusTab),
                                                  user$org(), as.numeric(input$velgSykehusTab)),
                                 enhetsUtvalg = input$enhetsUtvalgTab)
    output$tabNokkelHys <- renderTable(tabNokkelHys, rownames = T, align = 'r', #c('l', 'r', 'r', 'r', 'r', 'r'),
                                       spacing="xs")

    output$lastNed_tabNokkelHys <-  downloadHandler(
      filename = function(){paste0('tabNokkelHys.csv')},
      content = function(file, filename){write.csv2(tabNokkelHys, file, row.names = T, na = '')})

  })

  observe({
    tabNokkelLap <- tabNokkelLap(RegData = RegData,
                                 datoFra = input$datovalgTab[1], datoTil = input$datovalgTab[2],
                                 reshID = user$org(),
                                 velgAvd=ifelse(is.null(input$velgSykehusTab), user$org(), as.numeric(input$velgSykehusTab)),
                                 enhetsUtvalg = input$enhetsUtvalgTab)
    output$tabNokkelLap <- renderTable(tabNokkelLap, rownames = T, align = 'r',
                                       spacing="xs")

    output$lastNed_tabNokkelLap <-  downloadHandler(
      filename = function(){paste0('tabNokkelLap.csv')},
      content = function(file, filename){write.csv2(tabNokkelLap, file, row.names = T, na = '')})

  })


  #---------Fordelinger------------

  output$velgSykehusFord <- renderUI({
    selectInput(inputId = 'velgSykehusFord', label='Velg sykehus',
                selected = 0,
                choices = sykehusValg)
  })

  observe({ #Fordeling
    output$fordelinger <- renderPlot({
      NGERFigAndeler(RegData=RegData, valgtVar=input$valgtVar, preprosess = 0,
                     datoFra=input$datovalg[1], datoTil=input$datovalg[2],
                     reshID = user$org(),
                     minald=as.numeric(input$alder[1]),
                     maxald=as.numeric(input$alder[2]),
                     OpMetode = as.numeric(input$opMetode),
                     #Hastegrad = as.numeric(input$hastegrad),
                     behNivaa = as.numeric(input$behNivaa),
                     velgDiag = as.numeric(input$velgDiag),
                     AlvorlighetKompl = as.numeric(input$alvorlighetKompl),
                     enhetsUtvalg=as.numeric(input$enhetsUtvalg),
                     velgAvd=ifelse(is.null(input$velgSykehusFord), 0, input$velgSykehusFord),
                     session = session)
    }, height=800, width=800 #height = function() {session$clientData$output_fordelinger_width}
    )

    output$LastNedFigFord <- downloadHandler(
      filename = function(){
        paste0('FigFord_', input$valgtVar, Sys.time(), '.', input$bildeformatFord)
      },
      content = function(file){
        NGERFigAndeler(RegData=RegData, valgtVar=input$valgtVar, preprosess = 0,
                       datoFra=input$datovalg[1], datoTil=input$datovalg[2],
                       reshID = user$org(),
                       minald=as.numeric(input$alder[1]),
                       maxald=as.numeric(input$alder[2]),
                       OpMetode = as.numeric(input$opMetode),
                       behNivaa = as.numeric(input$behNivaa),
                       #Hastegrad = as.numeric(input$hastegrad),
                       velgDiag = as.numeric(input$velgDiag),
                       AlvorlighetKompl = as.numeric(input$alvorlighetKompl),
                       enhetsUtvalg=as.numeric(input$enhetsUtvalg),
                       velgAvd=ifelse(is.null(input$velgSykehusFord), 0, input$velgSykehusFord),
                       session = session,
                       outfile = file)
      })


    #RegData må hentes ut fra valgtVar
    UtDataFord <-
      NGERFigAndeler(RegData=RegData, preprosess = 0, valgtVar=input$valgtVar,
                     datoFra=input$datovalg[1], datoTil=input$datovalg[2],
                     reshID = user$org(),
                     minald=as.numeric(input$alder[1]), maxald=as.numeric(input$alder[2]),
                     OpMetode = as.numeric(input$opMetode),
                     behNivaa = as.numeric(input$behNivaa),
                     #Hastegrad = as.numeric(input$hastegrad),
                     velgDiag = as.numeric(input$velgDiag),
                     AlvorlighetKompl = as.numeric(input$alvorlighetKompl),
                     enhetsUtvalg=as.numeric(input$enhetsUtvalg),
                     velgAvd=ifelse(is.null(input$velgSykehusFord), 0, input$velgSykehusFord),
                     session = session)
    tabFord <- lagTabavFig(UtDataFraFig = UtDataFord) #lagTabavFigAndeler
    output$tittelFord <- renderUI({
      tagList(
        h3(UtDataFord$tittel),
        h5(HTML(paste0(UtDataFord$utvalgTxt, '<br />')))
      )}) #, align='center'

    output$fordelingTab <- function() {
      antKol <- ncol(tabFord)
      kableExtra::kable(tabFord, format = 'html'
                        , full_width=F
                        , digits = c(0,1,0,1)[1:antKol]
      ) %>%
        kableExtra::add_header_above(c(" "=1, 'Egen enhet/gruppe' = 2, 'Resten' = 2)[1:(antKol/2+1)]) %>%
        kableExtra::column_spec(column = 1, width_min = '7em') %>%
        kableExtra::column_spec(column = 2:(ncol(tabFord)+1), width = '7em') %>%
        kableExtra::row_spec(0, bold = T)
    }

    output$lastNed_tabFord <- downloadHandler(
      filename = function(){paste0(input$valgtVar, '_fordeling.csv')},
      content = function(file, filename){write.csv2(tabFord, file, row.names = T, na = '')
      })
  }) #observe Fordeling


  #--------------Andeler-----------------------------------
  output$andelerGrVar <- renderPlot({
    NGERFigAndelerGrVar(
      RegData=RegData, preprosess = 0, valgtVar=input$valgtVarAndel,
      datoFra=input$datovalgAndel[1], datoTil=input$datovalgAndel[2],
      minald=as.numeric(input$alderAndel[1]), maxald=as.numeric(input$alderAndel[2]),
      OpMetode = as.numeric(input$opMetodeAndel),
      behNivaa = as.numeric(input$behNivaaAndel),
      #Hastegrad = as.numeric(input$hastegradAndel),
      velgDiag = as.numeric(input$velgDiagAndel),
      AlvorlighetKompl = as.numeric(input$alvorlighetKomplAndel),
      session=session)
  }, height = 800, width=700 #height = function() {session$clientData$output_andelerGrVarFig_width} #})
  )

  output$LastNedFigAndelGrVar <- downloadHandler(
    filename = function(){
      paste0('FigAndelSh_', input$valgtVarAndel, Sys.time(), '.', input$bildeformatAndel)
    },
    content = function(file){
      NGERFigAndelerGrVar(
        RegData=RegData, preprosess = 0, valgtVar=input$valgtVarAndel,
        datoFra=input$datovalgAndel[1], datoTil=input$datovalgAndel[2],
        minald=as.numeric(input$alderAndel[1]), maxald=as.numeric(input$alderAndel[2]),
        OpMetode = as.numeric(input$opMetodeAndel),
        behNivaa = as.numeric(input$behNivaaAndel),
        #Hastegrad = as.numeric(input$hastegradAndel),
        velgDiag = as.numeric(input$velgDiagAndel),
        AlvorlighetKompl = as.numeric(input$alvorlighetKomplAndel),
        session=session,
        outfile = file)
    })


  output$andelTid <- renderPlot({
    NGERFigAndelTid(
      RegData=RegData, preprosess = 0, valgtVar=input$valgtVarAndel,
      reshID=user$org(),
      datoFra=input$datovalgAndel[1], datoTil=input$datovalgAndel[2],
      minald=as.numeric(input$alderAndel[1]), maxald=as.numeric(input$alderAndel[2]),
      OpMetode = as.numeric(input$opMetodeAndel),
      behNivaa = as.numeric(input$behNivaaAndel),
      #Hastegrad = as.numeric(input$hastegradAndel),
      velgDiag = as.numeric(input$velgDiagAndel),
      AlvorlighetKompl = as.numeric(input$alvorlighetKomplAndel),
      tidsenhet = input$tidsenhetAndel,
      enhetsUtvalg = input$enhetsUtvalgAndel,
      session=session)
  }, height = 300, width = 1000
  )
  output$LastNedFigAndelTid <- downloadHandler(
    filename = function(){
      paste0('FigAndelTid_', input$valgtVarAndel, Sys.time(), '.', input$bildeformatAndel)
    },
    content = function(file){
      NGERFigAndelTid(
        RegData=RegData, preprosess = 0, valgtVar=input$valgtVarAndel,
        reshID=user$org(),
        datoFra=input$datovalgAndel[1], datoTil=input$datovalgAndel[2],
        minald=as.numeric(input$alderAndel[1]), maxald=as.numeric(input$alderAndel[2]),
        OpMetode = as.numeric(input$opMetodeAndel),
        behNivaa = as.numeric(input$behNivaaAndel),
        #Hastegrad = as.numeric(input$hastegradAndel),
        velgDiag = as.numeric(input$velgDiagAndel),
        AlvorlighetKompl = as.numeric(input$alvorlighetKomplAndel),
        tidsenhet = input$tidsenhetAndel,
        enhetsUtvalg = input$enhetsUtvalgAndel,
        session=session,
        outfile = file)
    })

  observe({
    #AndelTid
    AndelerTid <- NGERFigAndelTid(
      RegData=RegData, preprosess = 0, valgtVar=input$valgtVarAndel,
      reshID=user$org(),
      datoFra=input$datovalgAndel[1], datoTil=input$datovalgAndel[2],
      minald=as.numeric(input$alderAndel[1]), maxald=as.numeric(input$alderAndel[2]),
      OpMetode = as.numeric(input$opMetodeAndel),
      behNivaa = as.numeric(input$behNivaaAndel),
      #Hastegrad = as.numeric(input$hastegradAndel),
      velgDiag = as.numeric(input$velgDiagAndel),
      AlvorlighetKompl = as.numeric(input$alvorlighetKomplAndel),
      tidsenhet = input$tidsenhetAndel,
      enhetsUtvalg = input$enhetsUtvalgAndel,
      session=session) #,lagFig=0)

    tabAndelTid <- lagTabavFig(UtDataFraFig = AndelerTid, figurtype = 'andelTid')


    output$andelTidTab <- function() {
      antKol <- ncol(tabAndelTid)
      kableExtra::kable(tabAndelTid, format = 'html'
                        , full_width=F
                        , digits = c(0,1,0,1)[1:antKol]
      ) %>%
        kableExtra::add_header_above(c(" "=1, 'Egen enhet/gruppe' = 2, 'Resten' = 2)[1:(antKol/2+1)]) %>%
        kableExtra::column_spec(column = 1, width_min = '7em') %>%
        kableExtra::column_spec(column = 2:(antKol+1), width = '7em') %>%
        kableExtra::row_spec(0, bold = T)
    }
    output$lastNed_tabAndelTid <- downloadHandler(
      filename = function(){
        paste0(input$valgtVar, '_andelTid.csv')
      },
      content = function(file, filename){
        write.csv2(tabAndelTid, file, row.names = T, na = '')
      })


    #AndelGrVar
    AndelerShus <-
      NGERFigAndelerGrVar(
        RegData=RegData, preprosess = 0, valgtVar=input$valgtVarAndel,
        datoFra=input$datovalgAndel[1], datoTil=input$datovalgAndel[2],
        minald=as.numeric(input$alderAndel[1]), maxald=as.numeric(input$alderAndel[2]),
        OpMetode = as.numeric(input$opMetodeAndel),
        behNivaa = as.numeric(input$behNivaaAndel),
        #Hastegrad = as.numeric(input$hastegradAndel),
        velgDiag = as.numeric(input$velgDiagAndel),
        AlvorlighetKompl = as.numeric(input$alvorlighetKomplAndel),
        session=session) #, lagFig = 0))
    tabAndelerShus <- cbind(Antall=AndelerShus$Ngr,
                            Andeler = AndelerShus$AggVerdier$Hoved)

    output$andelerGrVarTab <- function() {
      antKol <- ncol(tabAndelerShus)
      kableExtra::kable(tabAndelerShus, format = 'html'
                        #, full_width=T
                        , digits = c(0,1) #,0,1)[1:antKol]
      ) %>%
        kableExtra::column_spec(column = 1, width_min = '5em') %>%
        kableExtra::column_spec(column = 2:(antKol+1), width = '4em') %>%
        kableExtra::row_spec(0, bold = T)
    }
    output$lastNed_tabAndelGrVar <- downloadHandler(
      filename = function(){
        paste0(input$valgtVar, '_andelGrVar.csv')
      },
      content = function(file, filename){
        write.csv2(tabAndelerShus, file, row.names = T, na = '')
      })

    output$tittelAndel <- renderUI({
      tagList(
        h3(AndelerShus$tittel),
        h5(HTML(paste0(AndelerShus$utvalgTxt, '<br />')))
      )}) #, align='center'
  }) #observe




  #---------Gjennomsnitt------------
  observe({ #Sykehusvise gjennomsnitt, figur og tabell
    output$gjsnGrVar <- renderPlot(
      NGERFigGjsnGrVar(
        RegData=RegData, preprosess = 0, valgtVar=input$valgtVarGjsn,
        datoFra=input$datovalgGjsn[1], datoTil=input$datovalgGjsn[2],
        minald=as.numeric(input$alderGjsn[1]), maxald=as.numeric(input$alderGjsn[2]),
        valgtMaal = input$sentralmaal,
        OpMetode = as.numeric(input$opMetodeGjsn),
        behNivaa = as.numeric(input$behNivaaGjsn),
        #Hastegrad = as.numeric(input$hastegradGjsn),
        velgDiag = as.numeric(input$velgDiagGjsn),
        AlvorlighetKompl = as.numeric(input$alvorlighetKomplGjsn),
        session = session
      ),
      width = 700, height = 800)

    output$LastNedFigGjsnGrVar <- downloadHandler(
      filename = function(){
        paste0('FigGjsnSh_', input$valgtVarGjsn,Sys.time(), '.', input$bildeformatGjsn)
      },
      content = function(file){
        NGERFigGjsnGrVar(
          RegData=RegData, preprosess = 0, valgtVar=input$valgtVarGjsn,
          datoFra=input$datovalgGjsn[1], datoTil=input$datovalgGjsn[2],
          minald=as.numeric(input$alderGjsn[1]), maxald=as.numeric(input$alderGjsn[2]),
          valgtMaal = input$sentralmaal,
          OpMetode = as.numeric(input$opMetodeGjsn),
          behNivaa = as.numeric(input$behNivaaGjsn),
          #Hastegrad = as.numeric(input$hastegradGjsn),
          velgDiag = as.numeric(input$velgDiagGjsn),
          AlvorlighetKompl = as.numeric(input$alvorlighetKomplGjsn),
          session = session,
          outfile = file)
      })


    UtDataGjsnGrVar <- NGERFigGjsnGrVar(
      RegData=RegData, preprosess = 0, valgtVar=input$valgtVarGjsn,
      datoFra=input$datovalgGjsn[1], datoTil=input$datovalgGjsn[2],
      minald=as.numeric(input$alderGjsn[1]),
      maxald=as.numeric(input$alderGjsn[2]),
      valgtMaal = input$sentralmaal,
      OpMetode = as.numeric(input$opMetodeGjsn),
      behNivaa = as.numeric(input$behNivaaGjsn),
      #Hastegrad = as.numeric(input$hastegradGjsn),
      velgDiag = as.numeric(input$velgDiagGjsn),
      AlvorlighetKompl = as.numeric(input$alvorlighetKomplGjsn),
      session = session)
    output$tittelGjsn <- renderUI({
      tagList(
        h3(UtDataGjsnGrVar$tittel),
        h5(HTML(paste0(UtDataGjsnGrVar$utvalgTxt, '<br />')))
      )}) #, align='center'

    tabGjsnGrVar <- cbind('Antall' = UtDataGjsnGrVar$Ngr$Hoved,
                          'Sentralmål' = UtDataGjsnGrVar$AggVerdier$Hoved)
    colnames(tabGjsnGrVar)[2] <- ifelse(input$sentralmaal == 'Med', 'Median', 'Gjennomsnitt')

    output$gjsnGrVarTab <- function() {
      kableExtra::kable(tabGjsnGrVar, format = 'html'
                        , full_width=F
                        , digits = c(0,1) #,1,1)[1:antKol]
      ) %>%
        kableExtra::column_spec(column = 1, width_min = '7em') %>%
        kableExtra::column_spec(column = 2:3, width = '7em') %>%
        kableExtra::row_spec(0, bold = T)
    }

    output$lastNed_gjsnGrVarTab <- downloadHandler(
      filename = function(){
        paste0(input$valgtVarGjsn, '_tabGjsnSh .csv')
      },
      content = function(file, filename){
        write.csv2(tabGjsnGrVar, file, row.names = T, na = '')
      })

    output$titteltabGjsnGrVar <- renderUI({
      tagList(
        h3(tabGjsnGrVar$tittel),
        h5(HTML(paste0(tabGjsnGrVar$utvalgTxt, '<br />')))
      )}) #, align='center'



    #------gjsnTid

    output$gjsnTid <- renderPlot(
      NGERFigGjsnTid(
        RegData=RegData, reshID=user$org(), preprosess = 0, valgtVar=input$valgtVarGjsn,
        datoFra=input$datovalgGjsn[1], datoTil=input$datovalgGjsn[2],
        minald=as.numeric(input$alderGjsn[1]), maxald=as.numeric(input$alderGjsn[2]),
        valgtMaal = input$sentralmaal, enhetsUtvalg =  as.numeric(input$enhetsUtvalgGjsn),
        OpMetode = as.numeric(input$opMetodeGjsn),
        behNivaa = as.numeric(input$behNivaaGjsn),
        #Hastegrad = as.numeric(input$hastegradGjsn),
        velgDiag = as.numeric(input$velgDiagGjsn),
        AlvorlighetKompl = as.numeric(input$alvorlighetKomplGjsn),
        tidsenhet = input$tidsenhetGjsn,
        session = session
      ),
      width = 1000, height = 300)

    output$LastNedFigGjsnTid <- downloadHandler(
      filename = function(){
        paste0('FigGjsnTid_', input$valgtVarGjsn, Sys.time(), '.', input$bildeformatGjsn)
      },
      content = function(file){
        NGERFigGjsnTid(
          RegData=RegData, reshID=user$org(), preprosess = 0, valgtVar=input$valgtVarGjsn,
          datoFra=input$datovalgGjsn[1], datoTil=input$datovalgGjsn[2],
          minald=as.numeric(input$alderGjsn[1]), maxald=as.numeric(input$alderGjsn[2]),
          valgtMaal = input$sentralmaal, enhetsUtvalg =  as.numeric(input$enhetsUtvalgGjsn),
          OpMetode = as.numeric(input$opMetodeGjsn),
          behNivaa = as.numeric(input$behNivaaGjsn),
          #Hastegrad = as.numeric(input$hastegradGjsn),
          velgDiag = as.numeric(input$velgDiagGjsn),
          AlvorlighetKompl = as.numeric(input$alvorlighetKomplGjsn),
          tidsenhet = input$tidsenhetGjsn,
          session = session,
          outfile = file)
      })

    UtDataGjsnTid <- NGERFigGjsnTid(
      RegData=RegData, reshID = user$org(), preprosess = 0,
      valgtVar=input$valgtVarGjsn,
      datoFra=input$datovalgGjsn[1], datoTil=input$datovalgGjsn[2],
      minald=as.numeric(input$alderGjsn[1]),
      maxald=as.numeric(input$alderGjsn[2]),
      valgtMaal = input$sentralmaal,
      enhetsUtvalg =  as.numeric(input$enhetsUtvalgGjsn),
      OpMetode = as.numeric(input$opMetodeGjsn),
      behNivaa = as.numeric(input$behNivaaGjsn),
      #Hastegrad = as.numeric(input$hastegradGjsn),
      velgDiag = as.numeric(input$velgDiagGjsn),
      AlvorlighetKompl = as.numeric(input$alvorlighetKomplGjsn),
      tidsenhet = input$tidsenhetGjsn, lagFigur = 0,
      session = session)

    tabGjsnTid <- t(UtDataGjsnTid$AggVerdier)
    grtxt <-UtDataGjsnTid$grtxt
    if ((min(nchar(grtxt)) == 5) & (max(nchar(grtxt)) == 5)) {
      grtxt <- paste(substr(grtxt, 1,3), substr(grtxt, 4,5))}
    rownames(tabGjsnTid) <- grtxt

    antKol <- ncol(tabGjsnTid)
    navnKol <- colnames(tabGjsnTid)
    if (antKol==6) {colnames(tabGjsnTid) <- c(navnKol[1:3], navnKol[1:3])}

    output$gjsnTidTab <- function() {
      kableExtra::kable(tabGjsnTid, format = 'html'
                        , full_width=F
                        , digits = 1 #c(0,1,1,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:(antKol+1), width = '7em') %>%
        kableExtra::row_spec(0, bold = T)
    }

    output$lastNed_gjsnTidTab <- downloadHandler(
      filename = function(){
        paste0(input$valgtVarGjsn, '_tabGjsnTid .csv')
      },
      content = function(file, filename){
        write.csv2(tabGjsnTid, file, row.names = T, na = '')
      })

  }) #observe gjsnGrVar


  #------------------ Abonnement ----------------------------------------------
  orgs <- as.list(sykehusValgUts)
  paramNames <- shiny::reactive(c("reshID"))
  paramValues <- shiny::reactive(c(user$org()))

  rapbase::autoReportServer2(
    id = "ngerAbb",
    registryName = "nger",
    type = "subscription",
    paramNames = paramNames,
    paramValues = paramValues,
    reports = list(
      MndRapp = list(
        synopsis = "NGER/Rapporteket: Månedsrapport, abonnement",
        fun = "abonnementNGER",
        paramNames = c('rnwFil', 'reshID'),
        paramValues = c('NGERmndRapp.Rnw', 999999)
      )
    ),
    orgs = orgs,
    user = user
  )
  #-----------Registeradministrasjon-----------

  ## liste med metadata for rapport
  reports <- list(
    MndRapp = list(
      synopsis = "Rapporteket-NGER: Månedsrapport",
      fun = "abonnementNGER",
      paramNames = c('rnwFil', "reshID"),
      paramValues = c('NGERmndRapp.Rnw', 0)
    ),
    SamleRapp = list(
      synopsis = "Rapporteket-NGER: Rapport, div. resultater",
      fun = "abonnementNGER",
      paramNames = c('rnwFil', "reshID"),
      paramValues = c('NGERSamleRapp.Rnw', 0)
    )
  )
  org <- rapbase::autoReportOrgServer("NGERutsending", orgs)
  # oppdatere reaktive parametre, for å få inn valgte verdier (overskrive de i report-lista)
  paramNames <- shiny::reactive("reshID")
  paramValues <- shiny::reactive(org$value())
  vis_rapp <- shiny::reactiveVal(FALSE)
  shiny::observeEvent(user$role(), {
    vis_rapp(user$role() == "SC")
  })
  rapbase::autoReportServer(
    id = "NGERutsending",
    registryName = "nger",
    type = "dispatchment",
    org = org$value,
    paramNames = paramNames,
    paramValues = paramValues,
    reports = reports,
    orgs = orgs,
    eligible = vis_rapp,
    user = user
  )
  #----------- Eksport ----------------
  registryName <- "nger"
  ## brukerkontroller
  rapbase::exportUCServer("ngerExport", registryName)
  ## veileding
  rapbase::exportGuideServer("ngerExportGuide", registryName)
} #server
# Run the application
#shinyApp(ui = ui, server = server)
Rapporteket/nger documentation built on June 9, 2025, 4:50 p.m.