From a69b0c39c3da61bd1c4d75f40617185ead4d915f Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Sat, 12 Mar 2022 10:57:21 +0100 Subject: [PATCH 01/10] rapbaseendr --- DESCRIPTION | 2 +- inst/shinyApps/nger/app.R | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 402132d..2ee86fa 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -14,7 +14,7 @@ Depends: R (>= 3.5.0) Remotes: Rapporteket/rapFigurer, - Rapporteket/rapbase, + Rapporteket/rapbase@*release, Rapporteket/raplog Imports: DT, diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index 53f9f72..b0fb7a5 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -1566,14 +1566,14 @@ output$lastNed_dataDump <- downloadHandler( email = email, organization = organization, runDayOfYear = runDayOfYear, interval = interval, intervalName = intervalName) - rv$subscriptionTab <- rapbase::makeUserSubscriptionTab(session) + rv$subscriptionTab <- rapbase::makeAutoReportTab(session) }) ## slett eksisterende abonnement observeEvent(input$del_button, { selectedRepId <- strsplit(input$del_button, "_")[[1]][2] rapbase::deleteAutoReport(selectedRepId) - rv$subscriptionTab <- rapbase::makeUserSubscriptionTab(session) + rv$subscriptionTab <- rapbase::makeAutoReportTab(session) }) } #server From 501abbf7266dafff70f7eec62122cc4aafc420d0 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Sun, 13 Mar 2022 10:17:17 +0100 Subject: [PATCH 02/10] bugfix, uts. hele landet --- inst/shinyApps/nger/app.R | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index b0fb7a5..853754a 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -46,12 +46,12 @@ SkjemaOversikt <- NGERPreprosess(RegData = SkjemaOversikt) #-----Definere utvalgsinnhold #Definere utvalgsinnhold -#sykehusNavn <- sort(c('',unique(RegData$ShNavn)), index.return=T) -#sykehusValg <- c(0,unique(RegData$ReshId))[sykehusNavn$ix] sykehusNavn <- sort(unique(RegData$ShNavn), index.return=T) sykehusValg <- unique(RegData$ReshId)[sykehusNavn$ix] -sykehusValg <- c(0,sykehusValg) -names(sykehusValg) <- c('Alle',sykehusNavn$x) +names(sykehusValg) <- sykehusNavn$x #c('Alle',sykehusNavn$x) +sykehusValgDump <- c(0,sykehusValg) +names(sykehusValgDump) <- c('Alle',sykehusNavn$x) + enhetsUtvalg <- c("Egen mot resten av landet"=1, "Hele landet"=0, @@ -210,11 +210,12 @@ ui <- navbarPage( #fluidPage( #"Hoved"Layout for alt som vises på skjermen br(), h3('Last ned egne data '), #uiOutput("test"), + dateRangeInput(inputId = 'datovalgRegKtr', start = startDato, end = Sys.Date(), label = "Tidsperiode", separator="t.o.m.", language="nb"), selectInput(inputId = 'velgReshReg', label='Velg sykehus', selected = 0, - choices = sykehusValg), + choices = sykehusValgDump), downloadButton(outputId = 'lastNed_dataTilRegKtr', label='Last ned fødselsdato og operasjonsdato'), br(), br(), @@ -294,7 +295,6 @@ h3('Registerets kvalitetsindikatorer', align='center'), choices = alvorKompl ), selectInput(inputId = 'velgReshKval', label='Velg eget Sykehus', - #selected = 0, choices = sykehusValg), selectInput(inputId = "bildeformatKval", label = "Velg format for nedlasting av figur", @@ -437,7 +437,6 @@ tabPanel(p("Fordelinger", title= 'Alder, anestesi, ASA, BMI, diagnoser, komplika choices = alvorKompl ), selectInput(inputId = 'velgResh', label='Velg eget Sykehus', - selected = 0, choices = sykehusValg), selectInput(inputId = "bildeformatFord", label = "Velg format for nedlasting av figur", From ac16310b2ad29fd5959de1563c1d6cc6707e3bc2 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Mon, 14 Mar 2022 10:49:56 +0100 Subject: [PATCH 03/10] rydding --- R/NGERhjelpefunksjoner.R | 6 +- doc/NGERkjorefil.r | 7 +- inst/NGERmndRapp.Rnw | 55 ++-------- inst/jrxml/NGERAnnualReport.jrxml | 92 ----------------- inst/jrxml/NGERCommonScriptletRPackage.jar | Bin 6296 -> 0 bytes inst/jrxml/NGERFigAndelGrVar.jrxml | 113 --------------------- inst/jrxml/NGERFigAndelTid.jrxml | 113 --------------------- inst/jrxml/NGERFigAndeler.jrxml | 110 -------------------- inst/jrxml/NGERFigGjsnGrVar.jrxml | 113 --------------------- inst/jrxml/NGERFigKvalInd.jrxml | 107 ------------------- inst/jrxml/NGERSamleDok.jrxml | 85 ---------------- inst/jrxml/NGERmonthlyReport.jrxml | 94 ----------------- inst/shinyApps/nger/app.R | 21 +--- 13 files changed, 17 insertions(+), 899 deletions(-) delete mode 100644 inst/jrxml/NGERAnnualReport.jrxml delete mode 100644 inst/jrxml/NGERCommonScriptletRPackage.jar delete mode 100644 inst/jrxml/NGERFigAndelGrVar.jrxml delete mode 100644 inst/jrxml/NGERFigAndelTid.jrxml delete mode 100644 inst/jrxml/NGERFigAndeler.jrxml delete mode 100644 inst/jrxml/NGERFigGjsnGrVar.jrxml delete mode 100644 inst/jrxml/NGERFigKvalInd.jrxml delete mode 100644 inst/jrxml/NGERSamleDok.jrxml delete mode 100644 inst/jrxml/NGERmonthlyReport.jrxml diff --git a/R/NGERhjelpefunksjoner.R b/R/NGERhjelpefunksjoner.R index 86502bf..e9062ad 100644 --- a/R/NGERhjelpefunksjoner.R +++ b/R/NGERhjelpefunksjoner.R @@ -127,11 +127,7 @@ abonnementNGER <- function(rnwFil, brukernavn='ngerBrukernavn', reshID=0, registryName = 'NGER', msg = paste("Abonnement, ", rnwFil)) - # reshID <- reshID[[1]] - # datoFra <- datoFra[[1]] - # datoTil <- datoTil[[1]] - - filbase <- substr(rnwFil, 1, nchar(rnwFil)-4) + filbase <- substr(rnwFil, 1, nchar(rnwFil)-4) tmpFile <- paste0(filbase, Sys.Date(),'_',digest::digest(brukernavn), '.Rnw') src <- normalizePath(system.file(rnwFil, package='nger')) # gå til tempdir. Har ikke skriverettigheter i arbeidskatalog diff --git a/doc/NGERkjorefil.r b/doc/NGERkjorefil.r index bbc3387..9aaeaf4 100644 --- a/doc/NGERkjorefil.r +++ b/doc/NGERkjorefil.r @@ -20,8 +20,8 @@ reshID <- 110734 # 110734 (Tønsberg) #Må sendes med til funksjon datoFra <- '2019-01-01' datoTil <- Sys.Date() sluttDato <- datoTil -setwd('C:/ResultattjenesteGIT/nger/inst/') -setwd('../inst/') +#setwd('C:/ResultattjenesteGIT/nger/inst/') +setwd('~/nger/inst/') data('NGERtulledata', package = 'nger') load('A:/NGER/NGER2019-09-03.Rdata') RegData <- NGERPreprosess(RegData=RegData) #I App'en preprosesseres data @@ -31,8 +31,7 @@ knitr::knit(src <- normalizePath(system.file('NGERSamleRapp.Rnw', package='nger' knitr::knit('NGERSamleRapp.Rnw', encoding = 'UTF-8') tools::texi2pdf('NGERSamleRapp.tex') -knit('NGERmndRapp.Rnw', encoding = 'UTF-8') -tools:: texi2pdf('NGERmndRapp.tex') +knit2pdf('NGERmndRapp.Rnw', encoding = 'UTF-8') #--Vil undersøke variabelen Opf0Status nærmere RegData <- NGERPreprosess(NGERRegDataSQL(datoFra = '2021-01-01', datoTil = '2021-10-31')) diff --git a/inst/NGERmndRapp.Rnw b/inst/NGERmndRapp.Rnw index dd25248..5b6d87b 100644 --- a/inst/NGERmndRapp.Rnw +++ b/inst/NGERmndRapp.Rnw @@ -3,7 +3,9 @@ \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} -\usepackage[english, norsk]{babel} +%\usepackage[english, norsk]{babel} +\usepackage[english]{babel} +\usepackage[norsk]{babel} \usepackage{xspace} \usepackage{booktabs} \usepackage{rotating} @@ -26,41 +28,26 @@ if (!exists('RegData')){ RegData <- NGERPreprosess(RegData=RegData) } -#RegData <- NGERRegDataSQL(datoFra=datoFra, datoTil=datoTil) @ <<'SetteParametreOgLageFig', include=FALSE>>= -#minald <- 0 -#maxald <- 110 -OpMetode <- 99 -Hastegrad <- "" -AlvorlighetKompl <- "" -enhetsUtvalg <- 1 tidsenhet <- 'Mnd' -preprosess <- 0 -hentData <- 0 - - -shtxt <- switch(as.character(enhetsUtvalg), - '0' = 'Hele landet', - '1' = as.character(RegData$ShNavn[match(reshID, RegData$ReshId)]), - '2' = as.character(RegData$ShNavn[match(reshID, RegData$ReshId)])) +shtxt <- as.character(RegData$ShNavn[match(reshID, RegData$ReshId)]) RegDataEget <- RegData[which(RegData$ReshId==reshID), ] maxDatoEget <- format.Date(max(RegDataEget$InnDato), format='%d.%m.%Y', tz='UTC') NGERFigKvalInd(RegData=RegData, reshID=reshID, datoFra=datoFra, datoTil=datoTil, - valgtVar='kvalInd', enhetsUtvalg=1, OpMetode=99, - hentData=0, preprosess=preprosess, outfile='KvalIndPros.pdf') + valgtVar='kvalInd', enhetsUtvalg=1, + preprosess=0, outfile='KvalIndPros.pdf') variable <- c('KomplIntra', 'KomplPostop', 'Opf0Status') for (valgtVar in variable) { outfile <- paste0(valgtVar, '_Alle', tidsenhet, '.pdf') - NGERFigAndelerGrVar(RegData=RegData, valgtVar=valgtVar, datoFra=datoFra,OpMetode = OpMetode, - datoTil=datoTil, outfile=outfile, reshID=reshID, enhetsUtvalg=enhetsUtvalg, - hentData=0, preprosess=preprosess) + NGERFigAndelerGrVar(RegData=RegData, valgtVar=valgtVar, preprosess=0, datoFra=datoFra, + datoTil=datoTil, outfile=outfile, reshID=reshID, enhetsUtvalg=1) } variable <- c('Opf0KomplBlodning', 'Opf0KomplUtstyr', 'Opf0KomplInfeksjon', 'Opf0KomplOrgan', 'Opf0Reoperasjon', @@ -68,15 +55,10 @@ variable <- c('Opf0KomplBlodning', 'Opf0KomplUtstyr', 'Opf0KomplInfeksjon', 'Opf 'OpASA', 'OpBMI', 'Opf0Status') for (valgtVar in variable) { outfile <- paste0(valgtVar, '_', tidsenhet, '.pdf') - NGERFigAndelTid(RegData=RegData, datoFra=datoFra, valgtVar=valgtVar, datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile=outfile, OpMetode = OpMetode, - tidsenhet=tidsenhet, preprosess=preprosess) + NGERFigAndelTid(RegData=RegData, datoFra=datoFra, valgtVar=valgtVar, + datoTil=datoTil, reshID=reshID, enhetsUtvalg=1, + tidsenhet=tidsenhet, preprosess=0, outfile=outfile) } -# NGERFigAndelTid(RegData=RegData, datoFra=datoFra, valgtVar='KomplIntra', datoTil=datoTil, -# reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='', OpMetode = OpMetode, -# tidsenhet=tidsenhet, preprosess=preprosess) -# NGERFigAndelerGrVar(RegData=RegData, valgtVar='KomplIntra', outfile='', reshID=reshID, -# hentData=0, preprosess=1) @ @@ -92,21 +74,6 @@ MÅNEDSRAPPORT \\ \maketitle -% Tatt bort, mars -19: -% \includegraphics[scale=0.35]{OpBMI_Mnd.pdf} -% \caption{Pasienter med fedme (BMI>30)} -% \includegraphics[scale=0.35]{Opf0KomplBlodning_Mnd.pdf} -% \caption{Postoperativ komplikasjon: Blødning} -% -% \includegraphics[scale=0.35]{Opf0KomplUtstyr_Mnd.pdf} -% \caption{Postoperativ komplikasjon: Problemer med ustyr} -% -% \includegraphics[scale=0.35]{Opf0KomplInfeksjon_Mnd.pdf} -% \caption{Postoperativ komplikasjon: Infeksjon} -% -% \includegraphics[scale=0.35]{Opf0KomplOrgan_Mnd.pdf} -% \caption{Postoperativ komplikasjon: Organskade} - \section{Info} \begin{frame}[fragile] {Datagrunnlag} diff --git a/inst/jrxml/NGERAnnualReport.jrxml b/inst/jrxml/NGERAnnualReport.jrxml deleted file mode 100644 index 7b51b1f..0000000 --- a/inst/jrxml/NGERAnnualReport.jrxml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band height="79" splitType="Stretch"> - <textField pattern="dd/MM/yyyy"> - <reportElement x="29" y="59" width="491" height="20" uuid="e95ce88b-9d41-42fb-8be5-3c59d805055f"/> - <textElement textAlignment="Center"> - <font size="12"/> - </textElement> - <textFieldExpression><![CDATA["Melding: " + $P{REPORT_SCRIPTLET}.getJasperReportFeedback()]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="29" y="0" width="491" height="30" uuid="4c3fc220-ca86-4bd0-ba0b-b50250596087"/> - <textElement textAlignment="Center"> - <font size="20"/> - </textElement> - <text><![CDATA[Test av årsrapport fra Rapporteket for NGER]]></text> - </staticText> - </band> - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERCommonScriptletRPackage.jar b/inst/jrxml/NGERCommonScriptletRPackage.jar deleted file mode 100644 index ebfcc2e55be3fa689060264dd816c9cb0cfb3767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6296 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 diff --git a/inst/jrxml/NGERFigAndelGrVar.jrxml b/inst/jrxml/NGERFigAndelGrVar.jrxml deleted file mode 100644 index 6c798ec..0000000 --- a/inst/jrxml/NGERFigAndelGrVar.jrxml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERFigAndelTid.jrxml b/inst/jrxml/NGERFigAndelTid.jrxml deleted file mode 100644 index 8f4afbe..0000000 --- a/inst/jrxml/NGERFigAndelTid.jrxml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERFigAndeler.jrxml b/inst/jrxml/NGERFigAndeler.jrxml deleted file mode 100644 index df10e2d..0000000 --- a/inst/jrxml/NGERFigAndeler.jrxml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERFigGjsnGrVar.jrxml b/inst/jrxml/NGERFigGjsnGrVar.jrxml deleted file mode 100644 index bc58457..0000000 --- a/inst/jrxml/NGERFigGjsnGrVar.jrxml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERFigKvalInd.jrxml b/inst/jrxml/NGERFigKvalInd.jrxml deleted file mode 100644 index 6c9b28e..0000000 --- a/inst/jrxml/NGERFigKvalInd.jrxml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERSamleDok.jrxml b/inst/jrxml/NGERSamleDok.jrxml deleted file mode 100644 index 455161d..0000000 --- a/inst/jrxml/NGERSamleDok.jrxml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band height="79" splitType="Stretch"> - <textField pattern="dd/MM/yyyy"> - <reportElement x="39" y="10" width="497" height="20" uuid="e95ce88b-9d41-42fb-8be5-3c59d805055f"/> - <textElement textAlignment="Center"> - <font size="12"/> - </textElement> - <textFieldExpression><![CDATA["Melding: " + $P{REPORT_SCRIPTLET}.getJasperReportFeedback()]]></textFieldExpression> - </textField> - </band> - - - - - - - - - - - - - - - - - - - - diff --git a/inst/jrxml/NGERmonthlyReport.jrxml b/inst/jrxml/NGERmonthlyReport.jrxml deleted file mode 100644 index 86585f3..0000000 --- a/inst/jrxml/NGERmonthlyReport.jrxml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band height="79" splitType="Stretch"> - <textField pattern="dd/MM/yyyy"> - <reportElement x="29" y="59" width="491" height="20" uuid="e95ce88b-9d41-42fb-8be5-3c59d805055f"/> - <textElement textAlignment="Center"> - <font size="12"/> - </textElement> - <textFieldExpression><![CDATA["Melding: " + $P{REPORT_SCRIPTLET}.getJasperReportFeedback()]]></textFieldExpression> - </textField> - <staticText> - <reportElement x="29" y="0" width="491" height="50" uuid="4c3fc220-ca86-4bd0-ba0b-b50250596087"/> - <textElement textAlignment="Center"> - <font size="20"/> - </textElement> - <text><![CDATA[Månedsrapport fra Rapporteket for NGER]]></text> - </staticText> - </band> - - - - - - - - - - - - - - - - - - - - diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index 853754a..74cbaf0 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -1448,23 +1448,7 @@ output$lastNed_dataDump <- downloadHandler( #-----------Registeradministrasjon----------- if (rolle=='SC') { - # observe({ - # tabdataTilResPort <- dataTilOffVisning(RegData=RegData, valgtVar = input$valgtVarRes, - # aar=as.numeric(input$aarRes[1]):as.numeric(input$aarRes[2]), - # OpMetode = as.numeric(input$opMetodeRes)) - # - # output$lastNed_dataTilResPort <- downloadHandler( - # filename = function(){paste0('dataTilResPort_', input$valgtVarRes, '_', - # as.numeric(input$opMetodeRes), '.csv')}, - # content = function(file, filename){write.csv2(tabdataTilResPort, file, row.names = F, na = '')}) - # }) - - #---Utsendinger--------------- - ## liste med orgnr og navn - - # sykehusNavn <- sort(unique(as.character(HovedSkjema$ShNavn)), index.return=T) - # orgs <- c(0, unique(HovedSkjema$ReshId)[sykehusNavn$ix]) - # names(orgs) <- c('Alle',sykehusNavn$x) + orgs <- as.list(sykehusValg) ## liste med metadata for rapport @@ -1556,8 +1540,7 @@ output$lastNed_dataDump <- downloadHandler( paramNames <- c('rnwFil', 'brukernavn', "reshID", "datoFra", 'datoTil') paramValues <- c(rnwFil, brukernavn(), reshID, startDato, as.character(idag)) #input$subscriptionFileFormat) - #test <- abonnementNGER(rnwFil="NGERSamleRapp.Rnw", brukernavn='tullebukk', - # reshID=105460, datoFra = '2019-03-01') + #test <- abonnementNGER(rnwFil="NGERmndRapp.Rnw", brukernavn='tullebukk', reshID=105460, datoFra = '2020-03-01') rapbase::createAutoReport(synopsis = synopsis, package = 'nger', fun = fun, paramNames = paramNames, From 43ad2dea48b65c6e5d6fd99b26d2da18656fc65d Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Mon, 14 Mar 2022 11:37:52 +0100 Subject: [PATCH 04/10] rydding --- R/NGERtabeller.R | 2 +- doc/NGERkjorefil.r | 4 ++-- inst/NGERmndRapp.Rnw | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/R/NGERtabeller.R b/R/NGERtabeller.R index 08d5dc7..612a781 100644 --- a/R/NGERtabeller.R +++ b/R/NGERtabeller.R @@ -22,7 +22,7 @@ tabAntOpphShMnd <- function(RegData, datoTil=Sys.Date(), antMnd=6, reshID=0, RegData <- Utvalg$RegData RegDataDum <- RegData[RegData$InnDato <= as.Date(datoTil, tz='UTC') & RegData$InnDato > as.Date(datoFra, tz='UTC'), aggVar] - RegDataDum$Maaned1 <- floor_date(RegDataDum$InnDato, 'month') + RegDataDum$Maaned1 <- lubridate::floor_date(RegDataDum$InnDato, 'month') tabAvdMnd1 <- table(RegDataDum[ , c('ShNavn', 'Maaned1')]) colnames(tabAvdMnd1) <- format(ymd(colnames(tabAvdMnd1)), '%b %y') #month(ymd(colnames(tabAvdMnd1)), label = T) if (reshID==0){ diff --git a/doc/NGERkjorefil.r b/doc/NGERkjorefil.r index 9aaeaf4..e35e611 100644 --- a/doc/NGERkjorefil.r +++ b/doc/NGERkjorefil.r @@ -27,11 +27,11 @@ load('A:/NGER/NGER2019-09-03.Rdata') RegData <- NGERPreprosess(RegData=RegData) #I App'en preprosesseres data src <- normalizePath(system.file('NGERSamleRapp.Rnw', package='nger')) -knitr::knit(src <- normalizePath(system.file('NGERSamleRapp.Rnw', package='nger')), encoding = 'UTF-8') +knitr::knit(src <- normalizePath(system.file('NGERSamleRapp.Rnw', package='nger'))) knitr::knit('NGERSamleRapp.Rnw', encoding = 'UTF-8') tools::texi2pdf('NGERSamleRapp.tex') -knit2pdf('NGERmndRapp.Rnw', encoding = 'UTF-8') +knitr::knit2pdf('NGERmndRapp.Rnw') #--Vil undersøke variabelen Opf0Status nærmere RegData <- NGERPreprosess(NGERRegDataSQL(datoFra = '2021-01-01', datoTil = '2021-10-31')) diff --git a/inst/NGERmndRapp.Rnw b/inst/NGERmndRapp.Rnw index 5b6d87b..abfb3c2 100644 --- a/inst/NGERmndRapp.Rnw +++ b/inst/NGERmndRapp.Rnw @@ -3,9 +3,7 @@ \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} -%\usepackage[english, norsk]{babel} -\usepackage[english]{babel} -\usepackage[norsk]{babel} +\usepackage[english, norsk]{babel} \usepackage{xspace} \usepackage{booktabs} \usepackage{rotating} From 55d9d30ca215ac57f9edf6d3080449f6098dbdd9 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Tue, 15 Mar 2022 13:07:16 +0100 Subject: [PATCH 05/10] Endret til modul for abonnement Spesifisert pakker --- ...03-15_e45fb89676fb93a0e96bced13854eba5.pdf | Bin 0 -> 103339 bytes R/NGERhjelpefunksjoner.R | 13 +- R/NGERtabeller.R | 2 +- inst/NGERmndRapp.Rnw | 20 +- inst/shinyApps/nger/app.R | 272 +++++++++--------- 5 files changed, 162 insertions(+), 145 deletions(-) create mode 100644 NGERmndRapp2022-03-15_e45fb89676fb93a0e96bced13854eba5.pdf diff --git a/NGERmndRapp2022-03-15_e45fb89676fb93a0e96bced13854eba5.pdf b/NGERmndRapp2022-03-15_e45fb89676fb93a0e96bced13854eba5.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d3bccc1c84ae61b1ecf374588111f06d3afeafcb GIT binary patch literal 103339 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 literal 0 HcmV?d00001 diff --git a/R/NGERhjelpefunksjoner.R b/R/NGERhjelpefunksjoner.R index e9062ad..54c74d8 100644 --- a/R/NGERhjelpefunksjoner.R +++ b/R/NGERhjelpefunksjoner.R @@ -123,22 +123,27 @@ henteSamlerapporter <- function(filnavn, rnwFil, reshID=0, abonnementNGER <- function(rnwFil, brukernavn='ngerBrukernavn', reshID=0, datoFra=Sys.Date()-180, datoTil=Sys.Date()) { - raplog::subLogger(author = brukernavn, reshId = reshID[[1]], + raplog::subLogger(author = brukernavn, reshId = reshID, registryName = 'NGER', msg = paste("Abonnement, ", rnwFil)) - filbase <- substr(rnwFil, 1, nchar(rnwFil)-4) + filbase <- substr(rnwFil, 1, nchar(rnwFil)-4) tmpFile <- paste0(filbase, Sys.Date(),'_',digest::digest(brukernavn), '.Rnw') src <- normalizePath(system.file(rnwFil, package='nger')) # gå til tempdir. Har ikke skriverettigheter i arbeidskatalog setwd(tempdir()) dir <- getwd() file.copy(src, tmpFile, overwrite = TRUE) + raplog::subLogger(author = brukernavn, reshId = reshID, + registryName = 'NGER', + msg = paste("1 Klar til strikking, ", rnwFil)) knitr::knit2pdf(input=tmpFile) #, output = paste0(filbase, digest::digest(brukernavn),'.tex')) - #utfil <- file.copy(paste0(substr(tmpFile, 1, nchar(tmpFile)-3), 'pdf')) + raplog::subLogger(author = brukernavn, reshId = reshID, + registryName = 'NGER', + msg = paste("2 Ferdig med strikking, ", rnwFil)) utfil <- paste0(dir, '/', substr(tmpFile, 1, nchar(tmpFile)-3), 'pdf') - raplog::subLogger(author = brukernavn, reshId = reshID[[1]], + raplog::subLogger(author = brukernavn, reshId = reshID, registryName = 'NGER', msg = paste("Sender: ", utfil)) return(utfil) diff --git a/R/NGERtabeller.R b/R/NGERtabeller.R index 612a781..f1235fa 100644 --- a/R/NGERtabeller.R +++ b/R/NGERtabeller.R @@ -24,7 +24,7 @@ tabAntOpphShMnd <- function(RegData, datoTil=Sys.Date(), antMnd=6, reshID=0, & RegData$InnDato > as.Date(datoFra, tz='UTC'), aggVar] RegDataDum$Maaned1 <- lubridate::floor_date(RegDataDum$InnDato, 'month') tabAvdMnd1 <- table(RegDataDum[ , c('ShNavn', 'Maaned1')]) - colnames(tabAvdMnd1) <- format(ymd(colnames(tabAvdMnd1)), '%b %y') #month(ymd(colnames(tabAvdMnd1)), label = T) + colnames(tabAvdMnd1) <- format(lubridate::ymd(colnames(tabAvdMnd1)), '%b %y') #month(lubridate::ymd(colnames(tabAvdMnd1)), label = T) if (reshID==0){ tabAvdMnd1 <- addmargins((tabAvdMnd1))} #tabAvdMnd1 <- RegDataDum %>% group_by(Maaned=floor_date(InnDato, "month"), ShNavn) %>% diff --git a/inst/NGERmndRapp.Rnw b/inst/NGERmndRapp.Rnw index abfb3c2..a7f0c60 100644 --- a/inst/NGERmndRapp.Rnw +++ b/inst/NGERmndRapp.Rnw @@ -20,10 +20,10 @@ datoTil <- Sys.Date() dato <- as.POSIXlt(datoTil) datoFra <- as.Date(paste0(1900+dato$year-1,'-', dato$mon+1, '-', '01')) #I månedsfigurene er datoFra automatisk satt til 13 mnd før dagens dato. -RegData2aar <- NGERPreprosess(NGERRegDataSQL(datoFra = (datoFra-365), datoTil = datoTil)) +RegData2aar <- nger::NGERPreprosess(NGERRegDataSQL(datoFra = (datoFra-365), datoTil = datoTil)) if (!exists('RegData')){ - RegData <- NGERRegDataSQL(datoFra = datoFra, datoTil = datoTil) - RegData <- NGERPreprosess(RegData=RegData) + RegData <- nger::NGERRegDataSQL(datoFra = datoFra, datoTil = datoTil) + RegData <- nger::NGERPreprosess(RegData=RegData) } @ @@ -36,7 +36,7 @@ shtxt <- as.character(RegData$ShNavn[match(reshID, RegData$ReshId)]) RegDataEget <- RegData[which(RegData$ReshId==reshID), ] maxDatoEget <- format.Date(max(RegDataEget$InnDato), format='%d.%m.%Y', tz='UTC') -NGERFigKvalInd(RegData=RegData, reshID=reshID, datoFra=datoFra, datoTil=datoTil, +nger::NGERFigKvalInd(RegData=RegData, reshID=reshID, datoFra=datoFra, datoTil=datoTil, valgtVar='kvalInd', enhetsUtvalg=1, preprosess=0, outfile='KvalIndPros.pdf') @@ -44,16 +44,16 @@ NGERFigKvalInd(RegData=RegData, reshID=reshID, datoFra=datoFra, datoTil=datoTil, variable <- c('KomplIntra', 'KomplPostop', 'Opf0Status') for (valgtVar in variable) { outfile <- paste0(valgtVar, '_Alle', tidsenhet, '.pdf') - NGERFigAndelerGrVar(RegData=RegData, valgtVar=valgtVar, preprosess=0, datoFra=datoFra, + nger::NGERFigAndelerGrVar(RegData=RegData, valgtVar=valgtVar, preprosess=0, datoFra=datoFra, datoTil=datoTil, outfile=outfile, reshID=reshID, enhetsUtvalg=1) } -variable <- c('Opf0KomplBlodning', 'Opf0KomplUtstyr', 'Opf0KomplInfeksjon', 'Opf0KomplOrgan', 'Opf0Reoperasjon', +variabler <- c('Opf0KomplBlodning', 'Opf0KomplUtstyr', 'Opf0KomplInfeksjon', 'Opf0KomplOrgan', 'Opf0Reoperasjon', 'Opf0AlvorlighetsGrad', 'KomplIntra', 'KomplPostop', 'OpAntibProfylakse', 'OpASA', 'OpBMI', 'Opf0Status') -for (valgtVar in variable) { +for (valgtVar in variabler) { outfile <- paste0(valgtVar, '_', tidsenhet, '.pdf') - NGERFigAndelTid(RegData=RegData, datoFra=datoFra, valgtVar=valgtVar, + nger::NGERFigAndelTid(RegData=RegData, datoFra=datoFra, valgtVar=valgtVar, datoTil=datoTil, reshID=reshID, enhetsUtvalg=1, tidsenhet=tidsenhet, preprosess=0, outfile=outfile) } @@ -111,11 +111,11 @@ sammenlikningsgrunnlag. <<'AntMnd', results='asis'>>= antMnd <- 6 -xtable::xtable(tabAntOpphShMnd(RegData=RegData, datoTil = Sys.Date(), antMnd=antMnd, reshID=reshID), +xtable::xtable(nger::tabAntOpphShMnd(RegData=RegData, datoTil = Sys.Date(), antMnd=antMnd, reshID=reshID), digits=0, caption=paste0('Antall registreringer ved ditt sykehus siste ', antMnd, ' måneder.')) -xtable::xtable(tabAntOpphShMnd(RegData=RegData2aar, datoTil = Sys.Date()-365, antMnd=antMnd, reshID=reshID), +xtable::xtable(nger::tabAntOpphShMnd(RegData=RegData2aar, datoTil = Sys.Date()-365, antMnd=antMnd, reshID=reshID), digits=0, caption=paste0('Antall registreringer ved ditt sykehus forrige år.')) diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index 74cbaf0..ad906d7 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -727,28 +727,44 @@ tabPanel(p("Registeradministrasjon", title='Registeradministrasjonens side for r ) #tabsetPanel ), #tab SC #----------Abonnement----------------- + tabPanel(p("Abonnement", title='Bestill automatisk utsending av rapporter på e-post'), + value = 'Abonnement', + sidebarLayout( - sidebarPanel(width = 3, - selectInput("subscriptionRep", "Rapport:", - c("Månedsrapport", "Samlerapport")), - selectInput("subscriptionFreq", "Frekvens:", - list(Årlig="Årlig-year", - Kvartalsvis="Kvartalsvis-quarter", - Månedlig="Månedlig-month", - Ukentlig="Ukentlig-week", - Daglig="Daglig-DSTday"), - selected = "Månedlig-month"), - #selectInput("subscriptionFileFormat", "Format:", - # c("html", "pdf")), - actionButton("subscribe", "Bestill!") + sidebarPanel( + autoReportInput("ngerAbb") ), - mainPanel( - uiOutput("subscriptionContent") + shiny::mainPanel( + autoReportUI("ngerAbb") ) ) -) #tab abonnement +), #tab abonnement + + +# tabPanel(p("Abonnement", +# title='Bestill automatisk utsending av rapporter på e-post'), +# sidebarLayout( +# sidebarPanel(width = 3, +# selectInput("subscriptionRep", "Rapport:", +# c("Månedsrapport", "Samlerapport")), +# selectInput("subscriptionFreq", "Frekvens:", +# list(Årlig="Årlig-year", +# Kvartalsvis="Kvartalsvis-quarter", +# Månedlig="Månedlig-month", +# Ukentlig="Ukentlig-week", +# Daglig="Daglig-DSTday"), +# selected = "Månedlig-month"), +# #selectInput("subscriptionFileFormat", "Format:", +# # c("html", "pdf")), +# actionButton("subscribe", "Bestill!") +# ), +# mainPanel( +# uiOutput("subscriptionContent") +# ) +# ) +#) #tab abonnement #--------slutt tab'er---------- @@ -759,21 +775,17 @@ tabPanel(p("Abonnement", #----- Define server logic required to draw a histogram------- server <- function(input, output, session) { + + #-- Div serveroppstart---- if (paaServer) { rapbase::appLogger(session, msg = 'Starter Rapporteket-NGER')} - #system.file('NGERmndRapp.Rnw', package='nger') #hospitalName <-getHospitalName(rapbase::getUserReshId(session)) - #reshID <- reactive({ifelse(paaServer, as.numeric(rapbase::getUserReshId(session)), - # ifelse(tulledata==1, 8, 105460))}) reshID <- ifelse(paaServer, as.numeric(rapbase::getUserReshId(session)), 105460) #rolle <- reactive({ifelse(paaServer, rapbase::getUserRole(shinySession=session), 'SC')}) rolle <- ifelse(paaServer, rapbase::getUserRole(shinySession=session), 'SC') brukernavn <- reactive({ifelse(paaServer, rapbase::getUserName(session), 'inkognito')}) - - #output$reshID <- renderText({ifelse(paaServer, as.numeric(rapbase::getUserReshId(session)), 105460)}) #evt renderUI - observe({ #vise <- rolle =='SC' #shinyjs::toggle(id = 'velgResh', condition = vise) @@ -808,23 +820,6 @@ server <- function(input, output, session) { paste0(fileBaseName, as.character(as.integer(as.POSIXct(Sys.time()))), '.pdf') } - # contentFile <- function(file, srcFil, tmpFil, package, - # reshID=0, datoFra=startDato, datoTil=Sys.Date()) { - # src <- normalizePath(system.file(srcFil, package="nger")) - # #dev.off() - # - # # gå til tempdir. Har ikke skriverettigheter i arbeidskatalog - # owd <- setwd(tempdir()) - # on.exit(setwd(owd)) - # file.copy(src, tmpFil, overwrite = TRUE) - # - # #texfil <- knitr::knit(tmpFil, encoding = 'UTF-8') - # #tools::texi2pdf(texfil, clean = TRUE) - # knitr::knit2pdf(tmpFil) - # - # gc() #Opprydning gc-"garbage collection" - # file.rename(stringr::str_replace(texfil,'tex','pdf'), file) - # } output$mndRapp.pdf <- downloadHandler( filename = function(){ downloadFilename('NGERmaanedsrapport')}, content = function(file){ @@ -842,10 +837,7 @@ server <- function(input, output, session) { } ) - #output$lenkeNorScir <- renderUI({tagList("www.norscir.no", www.norscir.no)}) - output$tabEgneReg <- renderTable({ - #print(input$sluttDatoReg-365) xtable::xtable(tabAntOpphShMnd(RegData=RegData, datoTil=input$sluttDatoReg, antMnd=12, reshID = reshID))}, rownames=T, @@ -857,7 +849,7 @@ server <- function(input, output, session) { rownames=T, digits = 0 ) - #tabAntOpphShMnd(RegData=RegData, reshID = 8) + #----------Registreringsoversikter ---------------------- output$undertittelReg <- renderUI({ @@ -886,8 +878,6 @@ server <- function(input, output, session) { Aar=tabAntOpphSh5Aar(RegData=RegData, datoTil=input$sluttDatoReg, OpMetode=as.numeric(input$opMetodeReg), velgDiag=as.numeric(input$velgDiagReg))) - #utvalg <- tabAntOpphShMndAarDUM[[2]] - #Aar=xtable::xtable(tabAntOpphSh5Aar(RegData=RegData, datoTil=input$sluttDatoReg)), digits=0) output$tabAntOpphSh <- renderTable(tabAntOpphShMndAar, rownames = T, digits=0, spacing="xs") output$lastNed_tabAntOpph <- downloadHandler( filename = function(){paste0('tabAntOpph.csv')}, @@ -940,9 +930,6 @@ server <- function(input, output, session) { RegDataAlle <- rapbase::loadRegData(registryName = "nger", query=qAlle, dbType = "mysql") RegDataAlle <- NGERPreprosess(RegDataAlle) observe({ - # DataDump <- dplyr::filter(RegData, - # as.Date(OpDato) >= input$datovalgRegKtr[1], - # as.Date(OpDato) <= input$datovalgRegKtr[2]) DataDump <- dplyr::filter(RegDataAlle, as.Date(OpDato) >= input$datovalgRegKtr[1], as.Date(OpDato) <= input$datovalgRegKtr[2]) @@ -1025,8 +1012,6 @@ output$lastNed_dataDump <- downloadHandler( h5(HTML(paste0(UtDataKvalInd$utvalgTxt, '
'))) )}) #, align='center' - #output$kvalIndTab <- renderTable(tabKvalInd, rownames = T) - output$kvalIndTab <- function() { antKol <- ncol(tabKvalInd) kableExtra::kable(tabKvalInd, format = 'html' @@ -1429,7 +1414,6 @@ output$lastNed_dataDump <- downloadHandler( , digits = 1 #c(0,1,1,1)[1:antKol] ) %>% add_header_above(c(" "=1, 'Egen enhet/gruppe' = 3, 'Resten' = 3)[1:(antKol/3+1)]) %>% - #add_header_above(c(" "=1, 'Egen enhet/gruppe' = 3, 'Resten' = 3)[1:(antKol/3+1)]) %>% column_spec(column = 1, width_min = '7em') %>% column_spec(column = 2:(antKol+1), width = '7em') %>% row_spec(0, bold = T) @@ -1445,11 +1429,108 @@ output$lastNed_dataDump <- downloadHandler( }) #observe gjsnGrVar - #-----------Registeradministrasjon----------- + + #------------------ Abonnement ---------------------------------------------- + + #--------Start modul, abonnement + orgs <- as.list(sykehusValg) + + ## make a list for report metadata + reports <- list( + MndRapp = list( + synopsis = "Rapporteket-NGER: Månedsrapport", + fun = "abonnementNGER", #Lag egen funksjon for utsending + paramNames = c('rnwFil', 'reshID', 'brukernavn'), #"valgtRHF"), + paramValues = c('NGERmndRapp.Rnw', reshID, brukernavn) #'Alle') + ), + SamleRapp = list( + synopsis = "Rapporteket-NGER: Samlerapport", + fun = "abonnementNGER", + paramNames = c('rnwFil','reshID', 'brukernavn'), + paramValues = c('NGERSamleRapp.Rnw', reshID, brukernavn) + ) + ) + #c("Månedsrapport", "Samlerapport") + #test <- nger::abonnementNGER(rnwFil="NGERmndRapp.Rnw", brukernavn='tullebukk', reshID=105460) + autoReportServer( + id = "ngerAbb", registryName = "nger", type = "subscription", + paramNames = paramNames, paramValues = paramValues, #org = orgAbb$value, + reports = reports, orgs = orgs, eligible = TRUE + ) + + + # ## reaktive verdier for å holde rede på endringer som skjer mens + # ## applikasjonen kjører + # rv <- reactiveValues( + # subscriptionTab = rapbase::makeAutoReportTab(session)) + # ## lag tabell over gjeldende status for abonnement + # output$activeSubscriptions <- DT::renderDataTable( + # rv$subscriptionTab, server = FALSE, escape = FALSE, selection = 'none', + # rownames = FALSE, options = list(dom = 't') + # ) + # + # ## lag side som viser status for abonnement, også når det ikke finnes noen + # output$subscriptionContent <- renderUI({ + # fullName <- rapbase::getUserFullName(session) + # if (length(rv$subscriptionTab) == 0) { + # p(paste("Ingen aktive abonnement for", fullName)) + # } else { + # tagList( + # p(paste("Aktive abonnement for", fullName, "som sendes per epost til ", + # rapbase::getUserEmail(session), ":")), + # DT::dataTableOutput("activeSubscriptions") + # ) + # } + # }) + # + # + # ## nye abonnement + # observeEvent (input$subscribe, { #MÅ HA + # #package <- "intensiv" + # 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 == "Månedsrapport") { + # synopsis <- "NGER/Rapporteket: Månedsrapport" + # rnwFil <- "NGERmndRapp.Rnw" #Navn på fila + # } + # if (input$subscriptionRep == "Samlerapport") { + # synopsis <- "NGER/Rapporteket: Samlerapport" + # rnwFil <- "NGERSamleRapp.Rnw" #Navn på fila + # } + # + # fun <- "abonnementNGER" #"henteSamlerapporter" + # paramNames <- c('rnwFil', 'brukernavn', "reshID", "datoFra", 'datoTil') + # paramValues <- c(rnwFil, brukernavn(), reshID, startDato, as.character(idag)) #input$subscriptionFileFormat) + # + # #test <- nger::abonnementNGER(rnwFil="NGERmndRapp.Rnw", brukernavn='tullebukk', reshID=105460, datoFra = '2021-03-01') + # + # rapbase::createAutoReport(synopsis = synopsis, package = 'nger', + # fun = fun, paramNames = paramNames, + # paramValues = paramValues, owner = owner, + # email = email, organization = organization, + # runDayOfYear = runDayOfYear, interval = interval, + # intervalName = intervalName) + # rv$subscriptionTab <- rapbase::makeAutoReportTab(session) + # }) + # + # ## slett eksisterende abonnement + # observeEvent(input$del_button, { + # selectedRepId <- strsplit(input$del_button, "_")[[1]][2] + # rapbase::deleteAutoReport(selectedRepId) + # rv$subscriptionTab <- rapbase::makeAutoReportTab(session) + # }) + +#-----------Registeradministrasjon----------- + #-----Utsendinger if (rolle=='SC') { - orgs <- as.list(sykehusValg) ## liste med metadata for rapport reports <- list( @@ -1458,7 +1539,7 @@ output$lastNed_dataDump <- downloadHandler( fun = "abonnementNGER", paramNames = c('rnwFil', "reshID"), paramValues = c('NGERmndRapp.Rnw', 0) - ), #abonnementNGER(rnwFil, brukernavn='ngerBrukernavn', reshID=0, + ), SamleRapp = list( synopsis = "Rapport med samling av div. resultater", fun = "abonnementNGER", @@ -1480,83 +1561,14 @@ output$lastNed_dataDump <- downloadHandler( ) - #----------- Eksport ---------------- - registryName <- "nger" - ## brukerkontroller - rapbase::exportUCServer("ngerExport", registryName) - ## veileding - rapbase::exportGuideServer("ngerExportGuide", registryName) - - - - } - #------------------ Abonnement ---------------------------------------------- - ## reaktive verdier for å holde rede på endringer som skjer mens - ## applikasjonen kjører - rv <- reactiveValues( - subscriptionTab = rapbase::makeAutoReportTab(session)) - ## lag tabell over gjeldende status for abonnement - output$activeSubscriptions <- DT::renderDataTable( - rv$subscriptionTab, server = FALSE, escape = FALSE, selection = 'none', - rownames = FALSE, options = list(dom = 't') - ) - - ## lag side som viser status for abonnement, også når det ikke finnes noen - output$subscriptionContent <- renderUI({ - fullName <- rapbase::getUserFullName(session) - if (length(rv$subscriptionTab) == 0) { - p(paste("Ingen aktive abonnement for", fullName)) - } else { - tagList( - p(paste("Aktive abonnement for", fullName, "som sendes per epost til ", - rapbase::getUserEmail(session), ":")), - DT::dataTableOutput("activeSubscriptions") - ) - } - }) - - - ## nye abonnement - observeEvent (input$subscribe, { #MÅ HA - #package <- "intensiv" - 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 == "Månedsrapport") { - synopsis <- "NGER/Rapporteket: Månedsrapport" - rnwFil <- "NGERmndRapp.Rnw" #Navn på fila - } - if (input$subscriptionRep == "Samlerapport") { - synopsis <- "NGER/Rapporteket: Samlerapport" - rnwFil <- "NGERSamleRapp.Rnw" #Navn på fila - } - - fun <- "abonnementNGER" #"henteSamlerapporter" - paramNames <- c('rnwFil', 'brukernavn', "reshID", "datoFra", 'datoTil') - paramValues <- c(rnwFil, brukernavn(), reshID, startDato, as.character(idag)) #input$subscriptionFileFormat) - - #test <- abonnementNGER(rnwFil="NGERmndRapp.Rnw", brukernavn='tullebukk', reshID=105460, datoFra = '2020-03-01') - rapbase::createAutoReport(synopsis = synopsis, package = 'nger', - fun = fun, paramNames = paramNames, - paramValues = paramValues, owner = owner, - email = email, organization = organization, - runDayOfYear = runDayOfYear, interval = interval, - intervalName = intervalName) - rv$subscriptionTab <- rapbase::makeAutoReportTab(session) - }) - - ## slett eksisterende abonnement - observeEvent(input$del_button, { - selectedRepId <- strsplit(input$del_button, "_")[[1]][2] - rapbase::deleteAutoReport(selectedRepId) - rv$subscriptionTab <- rapbase::makeAutoReportTab(session) - }) + #----------- Eksport ---------------- + registryName <- "nger" + ## brukerkontroller + rapbase::exportUCServer("ngerExport", registryName) + ## veileding + rapbase::exportGuideServer("ngerExportGuide", registryName) + } } #server # Run the application From 7867e3b41669e12f54e6bf0d5d947d6cddbc80c1 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Tue, 15 Mar 2022 13:15:11 +0100 Subject: [PATCH 06/10] txt --- inst/shinyApps/nger/app.R | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index ad906d7..5b83208 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -1438,13 +1438,13 @@ output$lastNed_dataDump <- downloadHandler( ## make a list for report metadata reports <- list( MndRapp = list( - synopsis = "Rapporteket-NGER: Månedsrapport", + synopsis = "NGER/Rapporteket: Månedsrapport, abonnement", fun = "abonnementNGER", #Lag egen funksjon for utsending paramNames = c('rnwFil', 'reshID', 'brukernavn'), #"valgtRHF"), paramValues = c('NGERmndRapp.Rnw', reshID, brukernavn) #'Alle') ), SamleRapp = list( - synopsis = "Rapporteket-NGER: Samlerapport", + synopsis = "Rapporteket-NGER: Samlerapport, abonnement", fun = "abonnementNGER", paramNames = c('rnwFil','reshID', 'brukernavn'), paramValues = c('NGERSamleRapp.Rnw', reshID, brukernavn) @@ -1531,17 +1531,16 @@ output$lastNed_dataDump <- downloadHandler( if (rolle=='SC') { - ## liste med metadata for rapport reports <- list( MndRapp = list( - synopsis = "Månedsrapport", + synopsis = "Rapporteket-NGER: Månedsrapport", fun = "abonnementNGER", paramNames = c('rnwFil', "reshID"), paramValues = c('NGERmndRapp.Rnw', 0) ), SamleRapp = list( - synopsis = "Rapport med samling av div. resultater", + synopsis = "Rapporteket-NGER: Rapport, div. resultater", fun = "abonnementNGER", paramNames = c('rnwFil', "reshID"), paramValues = c('NGERSamleRapp.Rnw', 0) From 0a6b2f332f466a470f81cf40801ead597e356e55 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Tue, 15 Mar 2022 13:45:50 +0100 Subject: [PATCH 07/10] Bugfix, samlerapport --- R/NGERtabeller.R | 15 +--------- inst/NGERSamleRapp.Rnw | 63 ++++++++++++++------------------------- inst/shinyApps/nger/app.R | 2 +- 3 files changed, 24 insertions(+), 56 deletions(-) diff --git a/R/NGERtabeller.R b/R/NGERtabeller.R index f1235fa..3379293 100644 --- a/R/NGERtabeller.R +++ b/R/NGERtabeller.R @@ -144,18 +144,12 @@ lagTabavFigGjsnGrVar <- function(UtDataFraFig){ #' Generere tabell med nøkkeltall #' @export -tabNGERpasientegenskaper <- function(RegData, datoFra='2019-01-01', datoTil=Sys.Date(), tidsenhet='Kvartal') { +tabNGERpasientegenskaper <- function(RegData, datoFra='2022-01-01', datoTil=Sys.Date(), tidsenhet='Kvartal') { # make dummy column for all MCEs RegData <- NGERUtvalgEnh(RegData=RegData, datoFra = datoFra, datoTil = datoTil)$RegData RegDataFunk <- SorterOgNavngiTidsEnhet(RegData=RegData, tidsenhet = tidsenhet) RegData <- RegDataFunk$RegData tidtxt <- RegDataFunk$tidtxt - # xAkseTxt <- switch(tidsenhet, - # Aar='Operasjonsår', - # Halvaar = 'Operasjonsår og -halvår', - # Kvartal = 'Operasjonsår og -kvartal', - # Mnd='Operasjonsår og -måned') - n <- dim(RegData)[1] RegData$dummy <- rep("\\textbf{BMI, alle} ($kg/m^2$)", n) @@ -171,13 +165,6 @@ tabNGERpasientegenskaper <- function(RegData, datoFra='2019-01-01', datoTil=Sys. myTab <- rbind(myTab, xtabs(OpPariteter ~ OpMetode + TidsEnhetSort, aggregate(OpPariteter~OpMetode+TidsEnhetSort,RegData,mean))) - RegData$dummy <- "\\textbf{Graviditeter, alle} (\\textit{antall})" - myTab <- rbind(myTab, - xtabs(OpGraviditeter ~ dummy + TidsEnhetSort, - aggregate(OpGraviditeter~dummy+TidsEnhetSort,RegData,mean))) - myTab <- rbind(myTab, - xtabs(OpGraviditeter ~ OpMetode + TidsEnhetSort, - aggregate(OpGraviditeter~OpMetode+TidsEnhetSort,RegData,mean))) RegData$dummy <- "\\textbf{Knivtider, alle} (\\textit{minutt})" myTab <- rbind(myTab, xtabs(OpTid ~ dummy + TidsEnhetSort, diff --git a/inst/NGERSamleRapp.Rnw b/inst/NGERSamleRapp.Rnw index 0db8a08..c669e75 100644 --- a/inst/NGERSamleRapp.Rnw +++ b/inst/NGERSamleRapp.Rnw @@ -162,12 +162,8 @@ if (!exists('RegData')){ @ <>= - - -outfile <- '' enhetsUtvalg <- 1 OpMetode<-99 -Hastegrad <- '' tidsenhet <- 'Mnd' tidsspenn <- difftime(datoTil,datoFra, units = 'weeks') if (tidsspenn > 60) {tidsenhet <- 'Kvartal'} @@ -177,7 +173,7 @@ tidsperiodeTxt <- paste0('Operasjonene er utført i perioden ', datoFra, ' til ' RegDataHele <- NGERUtvalgEnh(RegData = RegData, datoFra = startAar, datoTil = datoTil)$RegData #RegDataHele$Aar <- as.factor(RegDataHele$Aar) NGERUtvalg <- NGERUtvalgEnh(RegData = RegData, datoFra = datoFra, - datoTil = datoTil, OpMetode = OpMetode, Hastegrad=Hastegrad) + datoTil = datoTil, OpMetode = OpMetode) RegData <- NGERUtvalg$RegData #RegData$Aar <- as.factor(RegData$Aar) @@ -230,9 +226,9 @@ print(xtable::xtable(tabAvdN, digits=0, align=c('l', rep('r', max(c(1,ncol(tabAv <<'Tabell:Pasientkarakterisika', results='asis', warnings=FALSE, echo=FALSE, eval=T >>= -TabPasKar <- tabNGERpasientegenskaper(RegDataHele[indEgetHele,]) +TabPasKar <- tabNGERpasientegenskaper(RegDataHele[indEgetHele,], datoFra = datoFra) -cap <- paste0("Gjennomsnittlig BMI, fødsler, graviditeter og knivtid ved ", egetSh, '. ', tidsperiodeTxt) +cap <- paste0("Gjennomsnittlig BMI, fødsler og knivtid ved ", egetSh, '. ', tidsperiodeTxt) tab <- xtable::xtable(TabPasKar, align=c("l", "l", rep("r", ncol(TabPasKar)-1)), digits=c(0,0,rep(1, ncol(TabPasKar)-1)), @@ -249,27 +245,24 @@ dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='A reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='AlderFord.pdf') dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='OpAnestesi', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='OpAnestesiLap.pdf', OpMetode = 1, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='OpAnestesiLap.pdf', OpMetode = 1 + ) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='OpAnestesi', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='OpAnestesiHyp.pdf', OpMetode = 2, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='OpAnestesiHyp.pdf', OpMetode = 2 + ) dum <- NGERFigAndelerGrVar(RegData=RegData, preprosess=0,datoFra=datoFra, datoTil=datoTil, valgtVar='OpAntibProfylakse', - reshID=reshID, outfile='OpAntibProfylakse.pdf', OpMetode=OpMetode, - Hastegrad = Hastegrad) + reshID=reshID, outfile='OpAntibProfylakse.pdf', OpMetode=OpMetode) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='LapEkstrautstyr', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='LapEkstrautstyr.pdf', OpMetode = 1, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='LapEkstrautstyr.pdf', OpMetode = 1) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='LapTeknikk', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='LapTeknikk.pdf', OpMetode = 1, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='LapTeknikk.pdf', OpMetode = 1) dum <- NGERFigAndelTid(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='KomplIntra', datoTil=datoTil, reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplIntraLapAar.pdf', @@ -280,12 +273,10 @@ dum <- NGERFigAndelTid(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar=' OpMetode=2, tidsenhet = tidsenhet) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='KomplPostopType', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostLap.pdf', OpMetode = 1, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostLap.pdf', OpMetode = 1) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='KomplPostopType', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostHys.pdf', OpMetode = 2, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostHys.pdf', OpMetode = 2) dum <- NGERFigAndelTid(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='KomplPostop', datoTil=datoTil, reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostLapAar.pdf', @@ -305,21 +296,17 @@ dum <- NGERFigAndelTid(RegData=RegData,preprosess=0, datoFra=datoFra, valgtVar=' OpMetode=2, tidsenhet = tidsenhet) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='Opf0AlvorlighetsGrad', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='Opf0AlvorLap.pdf', OpMetode = 1, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='Opf0AlvorLap.pdf', OpMetode = 1) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='Opf0AlvorlighetsGrad', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='Opf0AlvorHys.pdf', OpMetode = 2, - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='Opf0AlvorHys.pdf', OpMetode = 2) dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='LapIntraabdominell', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='LapIntraabdominell.pdf', OpMetode = '', - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='LapIntraabdominell.pdf') dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='HysKomplikasjoner', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='HysKompl.pdf', OpMetode = '', - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='HysKompl.pdf') @ @@ -530,29 +517,23 @@ utvikling over tid.} <<'DivFig2', results='asis', echo=FALSE, eval=T>>= dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='KomplPostUtd', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostUtd.pdf', OpMetode = '', - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplPostUtd.pdf') dum <- NGERFigAndeler(RegData=RegData, preprosess=0,datoFra=datoFra, valgtVar='KomplReopUtd', datoTil=datoTil, - reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplReopUtd.pdf', OpMetode = '', - Hastegrad=Hastegrad) + reshID=reshID, enhetsUtvalg=enhetsUtvalg, outfile='KomplReopUtd.pdf') dum <- NGERFigAndelerGrVar(RegData=RegData, preprosess=0,datoFra=datoFra, datoTil=datoTil, valgtVar='KomplPostop', - reshID=reshID, outfile='KomplPostLapShus.pdf', OpMetode=1, - Hastegrad = Hastegrad) + reshID=reshID, outfile='KomplPostLapShus.pdf', OpMetode=1) dum <- NGERFigAndelerGrVar(RegData=RegData, preprosess=0,datoFra=datoFra, datoTil=datoTil, valgtVar='KomplPostop', - reshID=reshID, outfile='KomplPostHysShus.pdf', OpMetode=2, - Hastegrad = Hastegrad) + reshID=reshID, outfile='KomplPostHysShus.pdf', OpMetode=2) dum <- NGERFigAndelerGrVar(RegData=RegData,preprosess=0, datoFra=datoFra, datoTil=datoTil, valgtVar='Opf0AlvorlighetsGrad', - reshID=reshID, outfile='Opf0AlvorligLapShus.pdf', OpMetode=1, - Hastegrad = Hastegrad) + reshID=reshID, outfile='Opf0AlvorligLapShus.pdf', OpMetode=1) dum <- NGERFigAndelerGrVar(RegData=RegData, preprosess=0,datoFra=datoFra, datoTil=datoTil, valgtVar='Opf0AlvorlighetsGrad', - reshID=reshID, outfile='Opf0AlvorligHysShus.pdf', OpMetode=2, - Hastegrad = Hastegrad) + reshID=reshID, outfile='Opf0AlvorligHysShus.pdf', OpMetode=2) @ diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index 5b83208..c637d49 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -1444,7 +1444,7 @@ output$lastNed_dataDump <- downloadHandler( paramValues = c('NGERmndRapp.Rnw', reshID, brukernavn) #'Alle') ), SamleRapp = list( - synopsis = "Rapporteket-NGER: Samlerapport, abonnement", + synopsis = "NGER/Rapporteket: Samlerapport, abonnement", fun = "abonnementNGER", paramNames = c('rnwFil','reshID', 'brukernavn'), paramValues = c('NGERSamleRapp.Rnw', reshID, brukernavn) From e0fcb89495c10f428949d9e2671dc572c933fdee Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Thu, 24 Mar 2022 21:24:04 +0100 Subject: [PATCH 08/10] =?UTF-8?q?Lagt=20til=20utvalg=20operasjonstype=20hy?= =?UTF-8?q?sterektomier=20Lagt=20til=20utvalg=20p=C3=A5=20operasjonstype?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/NGERUtvalgEnh.R | 14 ++- R/NGERhjelpefunksjoner.R | 24 +++--- inst/shinyApps/nger/app.R | 147 ++++++++++++++++---------------- man/NGERFigAndelTid.Rd | 3 +- man/NGERFigAndeler.Rd | 3 +- man/NGERFigAndelerGrVar.Rd | 3 +- man/NGERFigGjsnGrVar.Rd | 3 +- man/NGERFigGjsnTid.Rd | 3 +- man/NGERFigKvalInd.Rd | 3 +- man/NGEROpInd.Rd | 3 +- man/NGERUtvalgEnh.Rd | 3 +- man/NGERVarTilrettelegg.Rd | 3 +- man/dataTilOffVisning.Rd | 3 +- man/tabNGERpasientegenskaper.Rd | 2 +- 14 files changed, 115 insertions(+), 102 deletions(-) diff --git a/R/NGERUtvalgEnh.R b/R/NGERUtvalgEnh.R index 0e26c34..d56a51f 100644 --- a/R/NGERUtvalgEnh.R +++ b/R/NGERUtvalgEnh.R @@ -13,6 +13,7 @@ #' 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) #' 7: Robotassisert inngrep #' 8: Kolpopeksiene +#' 9: Hysterectomier (alle) #' @param velgDiag 0: Alle #' 1: Ovarialcyster (N83.0, N83.1, N83.2 og D27) #' 2: Endometriose, livmorvegg (N80.0) @@ -79,7 +80,8 @@ NGERUtvalgEnh <- function(RegData, datoFra='2016-01-01', datoTil='3000-12-31', f #Operasjonstype: indMCE <- if (OpMetode %in% c(1:3)){which(RegData$OpMetode %in% c(OpMetode,3)) } else {indMCE <- 1:Ninn} - if (OpMetode %in% c(4:6,8)) { + if (OpMetode == 7) {indMCE <- which(RegData$LapRobotKirurgi == 1)} #ROBOT_KIRURGI==TRUE + if (OpMetode %in% c(4:6,8,9)) { ProsLap <- c('LapProsedyre1', 'LapProsedyre2', 'LapProsedyre3') indMCE <- switch(as.character(OpMetode), '4' = unique(c(which(RegData[,ProsLap] == 'LCD01', arr.ind = TRUE)[,1], @@ -88,9 +90,12 @@ NGERUtvalgEnh <- function(RegData, datoFra='2016-01-01', datoTil='3000-12-31', f '6' = which(RegData[,ProsLap] == 'LCD11', arr.ind = TRUE)[,1], #LCD11: laparoskopisk assistert vaginal hysterektomi). '8' = which(RegData[,ProsLap] == 'LEF51', arr.ind = TRUE)[,1], #LCC11: Kolpopeksiene) + # '9' = rowSums(RegData[,ProsLap] == "M017" | RegData[,ProsLap] == "M018", na.rm = TRUE) > 0L%in% LCD00, LCD01,LCD04,LCD11, LCC1 + '9' = unique(which(RegData$LapProsedyre1 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC1')), + which(RegData$LapProsedyre2 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC1')), #Egentlig ikke nødvendig å sjekke pros2 og 3 + which(RegData$LapProsedyre3 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC1'))) ) } - if (OpMetode == 7) {indMCE <- which(RegData$LapRobotKirurgi == 1)} #ROBOT_KIRURGI==TRUE if (velgDiag !=0) { @@ -157,13 +162,14 @@ if (velgDiag !=0) { if ((minald>0) | (maxald<110)) {paste0('Pasienter fra ', if (N>0) {min(RegData$Alder, na.rm=T)} else {minald}, ' til ', if (N>0) {max(RegData$Alder, na.rm=T)} else {maxald}, ' år')}, - if (OpMetode %in% c(1:8)){paste0('Operasjonsmetode: ', + if (OpMetode %in% c(1:9)){paste0('Operasjonstype: ', c('Laparoskopi', 'Hysteroskopi', 'Begge', 'Tot. lap. hysterektomi (LCD01/LCD04)', 'Lap. subtotal hysterektomi (LCC11)', 'Lap. ass. vag. hysterektomi (LCD11)', 'Robotassisert inngrep', - 'Kolpopeksiene')[OpMetode])}, + 'Kolpopeksiene', + 'Hysterektomier')[OpMetode])}, if (Hastegrad[1] %in% 1:3){ paste0('Hastegrad: ', paste0(c('Elektiv', 'Akutt', 'Ø-hjelp')[as.numeric(Hastegrad)], collapse=','))}, diff --git a/R/NGERhjelpefunksjoner.R b/R/NGERhjelpefunksjoner.R index 54c74d8..96f51c7 100644 --- a/R/NGERhjelpefunksjoner.R +++ b/R/NGERhjelpefunksjoner.R @@ -123,9 +123,9 @@ henteSamlerapporter <- function(filnavn, rnwFil, reshID=0, abonnementNGER <- function(rnwFil, brukernavn='ngerBrukernavn', reshID=0, datoFra=Sys.Date()-180, datoTil=Sys.Date()) { - raplog::subLogger(author = brukernavn, reshId = reshID, - registryName = 'NGER', - msg = paste("Abonnement, ", rnwFil)) + # raplog::subLogger(author = brukernavn, reshId = reshID, + # registryName = 'NGER', + # msg = paste("Abonnement, ", rnwFil)) filbase <- substr(rnwFil, 1, nchar(rnwFil)-4) tmpFile <- paste0(filbase, Sys.Date(),'_',digest::digest(brukernavn), '.Rnw') @@ -134,18 +134,18 @@ abonnementNGER <- function(rnwFil, brukernavn='ngerBrukernavn', reshID=0, setwd(tempdir()) dir <- getwd() file.copy(src, tmpFile, overwrite = TRUE) - raplog::subLogger(author = brukernavn, reshId = reshID, - registryName = 'NGER', - msg = paste("1 Klar til strikking, ", rnwFil)) + # raplog::subLogger(author = brukernavn, reshId = reshID, + # registryName = 'NGER', + # msg = paste("1 Klar til strikking, ", rnwFil)) knitr::knit2pdf(input=tmpFile) #, output = paste0(filbase, digest::digest(brukernavn),'.tex')) - raplog::subLogger(author = brukernavn, reshId = reshID, - registryName = 'NGER', - msg = paste("2 Ferdig med strikking, ", rnwFil)) + # raplog::subLogger(author = brukernavn, reshId = reshID, + # registryName = 'NGER', + # msg = paste("2 Ferdig med strikking, ", rnwFil)) utfil <- paste0(dir, '/', substr(tmpFile, 1, nchar(tmpFile)-3), 'pdf') - raplog::subLogger(author = brukernavn, reshId = reshID, - registryName = 'NGER', - msg = paste("Sender: ", utfil)) + # raplog::subLogger(author = brukernavn, reshId = reshID, + # registryName = 'NGER', + # msg = paste("Sender: ", utfil)) return(utfil) } diff --git a/inst/shinyApps/nger/app.R b/inst/shinyApps/nger/app.R index c637d49..5eff72d 100644 --- a/inst/shinyApps/nger/app.R +++ b/inst/shinyApps/nger/app.R @@ -67,6 +67,7 @@ enhetsUtvalg <- c("Egen mot resten av landet"=1, '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) @@ -178,48 +179,40 @@ ui <- navbarPage( #fluidPage( #"Hoved"Layout for alt som vises på skjermen 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 = 'opMetodeReg', label='Operasjonstype', - choices = opMetode - ), + selectInput(inputId = "tidsenhetReg", label="Velg tidsenhet", + choices = rev(c('År'= 'Aar', 'Måned'='Mnd'))), selectInput(inputId = 'velgDiagReg', label='Diagnose', choices = diag + ), + selectInput(inputId = 'opMetodeReg', label='Operasjonstype', + choices = opMetode ) - - ), - conditionalPanel( - condition = "input.ark == 'Antall operasjoner'" , - selectInput(inputId = "tidsenhetReg", label="Velg tidsenhet", - choices = rev(c('År'= 'Aar', 'Måned'='Mnd')))), - conditionalPanel( - condition = "input.ark == 'Antall registrerte skjema'", - dateRangeInput(inputId = 'datovalgReg', start = startDato, end = Sys.Date(), - label = "Tidsperiode", separator="t.o.m.", language="nb"), - selectInput(inputId = 'skjemastatus', label='Velg skjemastatus', - choices = c("Ferdigstilt"=1, - "Kladd"=0, - "Åpen"=-1) - ) ), + 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") - br(), - br(), - br(), - br(), - h3('Last ned egne data '), - #uiOutput("test"), + ), + conditionalPanel(condition = "input.ark == 'Antall registrerte skjema' ", + selectInput(inputId = 'skjemastatus', label='Velg skjemastatus', + choices = c("Ferdigstilt"=1, + "Kladd"=0, + "Åpen"=-1) + ) - dateRangeInput(inputId = 'datovalgRegKtr', start = startDato, end = Sys.Date(), - label = "Tidsperiode", separator="t.o.m.", language="nb"), - selectInput(inputId = 'velgReshReg', label='Velg sykehus', - selected = 0, - choices = sykehusValgDump), - downloadButton(outputId = 'lastNed_dataTilRegKtr', label='Last ned fødselsdato og operasjonsdato'), - br(), - br(), - downloadButton(outputId = 'lastNed_dataDump', label='Last ned datadump') + ), + conditionalPanel(condition = "input.ark == 'Last ned egne data' ", + selectInput(inputId = 'velgReshReg', label='Velg sykehus', + selected = 0, + choices = sykehusValgDump), + selectInput(inputId = 'opMetodeRegDump', label='Operasjonstype (kun datadump)', + choices = opMetode + ) + ) ), mainPanel( @@ -234,11 +227,6 @@ ui <- navbarPage( #fluidPage( #"Hoved"Layout for alt som vises på skjermen ,downloadButton(outputId = 'lastNed_tabAntOpph', label='Last ned') ) ), - # output$tabAntOpphSh <- renderTable({ - # switch(input$tidsenhetReg, - # Mnd=tabAntOpphShMnd(RegData=RegData, datoTil=input$sluttDatoReg, antMnd=12), #input$datovalgTab[2]) - # Aar=tabAntOpphSh5Aar(RegData=RegData, datoTil=input$sluttDatoReg)) - # }, rownames = T, digits=0, spacing="xs" tabPanel('Antall registrerte skjema', h4("Tabellen viser antall registrerte skjema for valgt tidsperiode"), @@ -248,8 +236,18 @@ ui <- navbarPage( #fluidPage( #"Hoved"Layout for alt som vises på skjermen 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') + #) ) - ) ) @@ -870,41 +868,42 @@ server <- function(input, output, session) { # h4(HTML(paste0(names(opMetode[opMetode==as.numeric(input$opMetodeReg)]), '
'), # names(velgDiag[velgDiag==as.numeric(input$velgDiag)]), '
')) }) - observe({ - tabAntOpphShMndAar <- switch(input$tidsenhetReg, - Mnd=tabAntOpphShMnd(RegData=RegData, datoTil=input$sluttDatoReg, antMnd=12, + 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)), #input$datovalgTab[2]) - Aar=tabAntOpphSh5Aar(RegData=RegData, datoTil=input$sluttDatoReg, - OpMetode=as.numeric(input$opMetodeReg), - velgDiag=as.numeric(input$velgDiagReg))) - output$tabAntOpphSh <- renderTable(tabAntOpphShMndAar, rownames = T, digits=0, spacing="xs") - output$lastNed_tabAntOpph <- downloadHandler( - filename = function(){paste0('tabAntOpph.csv')}, - content = function(file, filename){write.csv2(tabAntOpphShMndAar, file, row.names = T, na = '') - }) - - - - #RegData som har tilknyttede skjema av ulik type - AntSkjemaAvHver <- tabAntSkjema(SkjemaOversikt=SkjemaOversikt, - datoFra = input$datovalgReg[1], - datoTil=input$datovalgReg[2], - skjemastatus=as.numeric(input$skjemastatus)) - 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 = '') - }) - }) + velgDiag=as.numeric(input$velgDiagReg))) + output$tabAntOpphSh <- renderTable(tabAntOpphShMndAar, rownames = T, digits=0, spacing="xs") + output$lastNed_tabAntOpph <- downloadHandler( + filename = function(){paste0('tabAntOpph.csv')}, + content = function(file, filename){write.csv2(tabAntOpphShMndAar, file, row.names = T, na = '') + }) + + + + #RegData som har tilknyttede skjema av ulik type + AntSkjemaAvHver <- tabAntSkjema(SkjemaOversikt=SkjemaOversikt, + datoFra = input$datovalgReg[1], + datoTil=input$datovalgReg[2], + skjemastatus=as.numeric(input$skjemastatus)) + 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) RegOversikt <- RegData[ , c('Fodselsdato', 'OpDato', 'ReshId', 'ShNavn', 'BasisRegStatus')] observe({ RegOversikt <- dplyr::filter(RegOversikt, - as.Date(OpDato) >= input$datovalgRegKtr[1], - as.Date(OpDato) <= input$datovalgRegKtr[2]) + as.Date(OpDato) >= input$datovalgReg[1], + as.Date(OpDato) <= input$datovalgReg[2]) + if (rolle == 'SC') { valgtResh <- as.numeric(input$velgReshReg) ind <- if (valgtResh == 0) {1:dim(RegOversikt)[1] @@ -930,11 +929,11 @@ server <- function(input, output, session) { RegDataAlle <- rapbase::loadRegData(registryName = "nger", query=qAlle, dbType = "mysql") RegDataAlle <- NGERPreprosess(RegDataAlle) observe({ - DataDump <- dplyr::filter(RegDataAlle, - as.Date(OpDato) >= input$datovalgRegKtr[1], - as.Date(OpDato) <= input$datovalgRegKtr[2]) - - if (rolle =='SC') { + DataDump <- NGERUtvalgEnh(RegData = RegDataAlle, + datoFra = input$datovalgReg[1], + datoTil = input$datovalgReg[2], + OpMetode = as.numeric(input$opMetodeRegDump))$RegData + if (rolle =='SC') { valgtResh <- as.numeric(input$velgReshReg) ind <- if (valgtResh == 0) {1:dim(DataDump)[1] } else {which(as.numeric(DataDump$ReshId) %in% as.numeric(valgtResh))} @@ -945,8 +944,6 @@ server <- function(input, output, session) { fjernVarInd <- c(grep('Opf0', navn), grep('Opf1', navn),grep('R0', navn), grep('R1', navn), grep('RY1', navn), grep('Tss', navn)) tabDataDump <- DataDump[which(DataDump$ReshId == reshID), -fjernVarInd] #which(names(DataDump) %in% variablePRM)] - #DataDump[which(DataDump$ReshId == reshID), -fjernVariabler] - #navn[fjernVariInd] #output$test <- renderText(dim(tabDataDump)[1]) } #Tar bort PROM/PREM til egen avdeling diff --git a/man/NGERFigAndelTid.Rd b/man/NGERFigAndelTid.Rd index 92df4ad..04ed5c7 100644 --- a/man/NGERFigAndelTid.Rd +++ b/man/NGERFigAndelTid.Rd @@ -44,7 +44,8 @@ NGERFigAndelTid( 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{Hastegrad}{Hastegrad av operasjon. 1: Elektiv diff --git a/man/NGERFigAndeler.Rd b/man/NGERFigAndeler.Rd index c3f2b1a..d58ec1b 100644 --- a/man/NGERFigAndeler.Rd +++ b/man/NGERFigAndeler.Rd @@ -55,7 +55,8 @@ hvilken enhet i spesialisthelsetjenesten brukeren tilhører} 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{Hastegrad}{Hastegrad av operasjon. 1: Elektiv diff --git a/man/NGERFigAndelerGrVar.Rd b/man/NGERFigAndelerGrVar.Rd index 35f329a..c7e350e 100644 --- a/man/NGERFigAndelerGrVar.Rd +++ b/man/NGERFigAndelerGrVar.Rd @@ -48,7 +48,8 @@ IKKE tatt høyde for sammenlikning mot "resten".} 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{Hastegrad}{Hastegrad av operasjon. 1: Elektiv diff --git a/man/NGERFigGjsnGrVar.Rd b/man/NGERFigGjsnGrVar.Rd index 1046347..2ce37d0 100644 --- a/man/NGERFigGjsnGrVar.Rd +++ b/man/NGERFigGjsnGrVar.Rd @@ -47,7 +47,8 @@ NGERFigGjsnGrVar( 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{AlvorlighetKompl}{Alvorlighetsgrad for postoperative komplikasjoner (Flervalg) Angis som en vektor av tall som tekst, f.eks. c('1','2') diff --git a/man/NGERFigGjsnTid.Rd b/man/NGERFigGjsnTid.Rd index 0731f31..b32b8ae 100644 --- a/man/NGERFigGjsnTid.Rd +++ b/man/NGERFigGjsnTid.Rd @@ -49,7 +49,8 @@ hvilken enhet i spesialisthelsetjenesten brukeren tilhører} 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{Hastegrad}{Hastegrad av operasjon. 1: Elektiv diff --git a/man/NGERFigKvalInd.Rd b/man/NGERFigKvalInd.Rd index db11006..1664402 100644 --- a/man/NGERFigKvalInd.Rd +++ b/man/NGERFigKvalInd.Rd @@ -56,7 +56,8 @@ IKKE tatt høyde for sammenlikning mot "resten".} 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{Hastegrad}{Hastegrad av operasjon. 1: Elektiv diff --git a/man/NGEROpInd.Rd b/man/NGEROpInd.Rd index 5f2f413..7e9deff 100644 --- a/man/NGEROpInd.Rd +++ b/man/NGEROpInd.Rd @@ -47,7 +47,8 @@ hvilken enhet i spesialisthelsetjenesten brukeren tilhører} 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{preprosess}{Preprosesser data 0: Nei (Standard) diff --git a/man/NGERUtvalgEnh.Rd b/man/NGERUtvalgEnh.Rd index de8bb04..0314578 100644 --- a/man/NGERUtvalgEnh.Rd +++ b/man/NGERUtvalgEnh.Rd @@ -41,7 +41,8 @@ NGERUtvalgEnh( 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{AlvorlighetKompl}{Alvorlighetsgrad for postoperative komplikasjoner (Flervalg) Angis som en vektor av tall som tekst, f.eks. c('1','2') diff --git a/man/NGERVarTilrettelegg.Rd b/man/NGERVarTilrettelegg.Rd index 8aff786..7a7cbdf 100644 --- a/man/NGERVarTilrettelegg.Rd +++ b/man/NGERVarTilrettelegg.Rd @@ -25,7 +25,8 @@ NGERVarTilrettelegg( 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{ind}{indekser fra enhetsUtvalg. Benyttes normalt ikke her, men trengs for valgtVar Diagnoser og Prosedyrer} diff --git a/man/dataTilOffVisning.Rd b/man/dataTilOffVisning.Rd index 243de21..4f382d4 100644 --- a/man/dataTilOffVisning.Rd +++ b/man/dataTilOffVisning.Rd @@ -32,7 +32,8 @@ dataTilOffVisning( 5: LCC11 (laparoskopisk subtotal hysterektomi) 6: LCD11 (laparoskopisk assistert vaginal hysterektomi) 7: Robotassisert inngrep -8: Kolpopeksiene} +8: Kolpopeksiene +9: Hysterectomier (alle)} \item{indID}{indikator-id, eks. 'ind1', 'ind2', osv.} diff --git a/man/tabNGERpasientegenskaper.Rd b/man/tabNGERpasientegenskaper.Rd index 0baf1fa..eef3417 100644 --- a/man/tabNGERpasientegenskaper.Rd +++ b/man/tabNGERpasientegenskaper.Rd @@ -6,7 +6,7 @@ \usage{ tabNGERpasientegenskaper( RegData, - datoFra = "2019-01-01", + datoFra = "2022-01-01", datoTil = Sys.Date(), tidsenhet = "Kvartal" ) From c9a69fd0b9cbe4ed127e4e5436a1bc5714355891 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Fri, 25 Mar 2022 14:35:09 +0100 Subject: [PATCH 09/10] bugfix --- R/NGERUtvalgEnh.R | 6 +++--- doc/NGERkjorefil.r | 2 -- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/R/NGERUtvalgEnh.R b/R/NGERUtvalgEnh.R index d56a51f..a279237 100644 --- a/R/NGERUtvalgEnh.R +++ b/R/NGERUtvalgEnh.R @@ -91,9 +91,9 @@ NGERUtvalgEnh <- function(RegData, datoFra='2016-01-01', datoTil='3000-12-31', f '6' = which(RegData[,ProsLap] == 'LCD11', arr.ind = TRUE)[,1], #LCD11: laparoskopisk assistert vaginal hysterektomi). '8' = which(RegData[,ProsLap] == 'LEF51', arr.ind = TRUE)[,1], #LCC11: Kolpopeksiene) # '9' = rowSums(RegData[,ProsLap] == "M017" | RegData[,ProsLap] == "M018", na.rm = TRUE) > 0L%in% LCD00, LCD01,LCD04,LCD11, LCC1 - '9' = unique(which(RegData$LapProsedyre1 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC1')), - which(RegData$LapProsedyre2 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC1')), #Egentlig ikke nødvendig å sjekke pros2 og 3 - which(RegData$LapProsedyre3 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC1'))) + '9' = unique(c(which(RegData$LapProsedyre1 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC11')), + which(RegData$LapProsedyre2 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC11')), #Egentlig ikke nødvendig å sjekke pros2 og 3 + which(RegData$LapProsedyre3 %in% c('LCD00', 'LCD01','LCD04','LCD11', 'LCC11')))) ) } diff --git a/doc/NGERkjorefil.r b/doc/NGERkjorefil.r index e35e611..2e6bf8e 100644 --- a/doc/NGERkjorefil.r +++ b/doc/NGERkjorefil.r @@ -70,8 +70,6 @@ table(RegData[,c('Opf0Komplikasjoner', 'Opf0metode', 'Opf0Status')], useNA = 'a' #NB: Mulig ikke bør bruke Komplikasjoner for å sjekke... table(RegData[which(is.na(RegData$Opf0Status)), c('Opf0metode', 'Aar')], useNA = 'a') - - #------------------------------Kjøre App---------------------------- rm(list=ls()) load(paste0('A:/NGER/NGER2019-09-03.Rdata')) From 6a28e9c874a929abf7970a802c2f4dffe6f132f0 Mon Sep 17 00:00:00 2001 From: Lena Ringstad Olsen Date: Fri, 25 Mar 2022 14:51:52 +0100 Subject: [PATCH 10/10] descr --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 2ee86fa..92f113d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: nger Type: Package Title: Resultatrapporter for NGER -Version: 3.3.0 -Date: 2022-02-11 +Version: 3.4.0 +Date: 2022-03-25 Authors@R: c(person("Edvardsen", "Are", email = "are.edvardsen@helse-nord.no", role = "aut"), person("Olsen", "Lena", email = "Lena.Ringstad.Olsen@unn.no", role = c("cre", "aut")))