Skip to content

Commit

Permalink
Merge pull request #16 from mbranca/main
Browse files Browse the repository at this point in the history
Pending changes
  • Loading branch information
aghaynes authored Dec 20, 2024
2 parents b83ae81 + e5e0d86 commit 94581c7
Show file tree
Hide file tree
Showing 13 changed files with 199 additions and 240 deletions.
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: SwissASR
Title: Automated Completion of the SwissEthics Annual Safety Report
Version: 0.5.2
Version: 0.5.3
Authors@R:
c(person(given = "Alan G.",
family = "Haynes",
Expand Down
4 changes: 4 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
# SwissASR 0.5.3

* Last updates to align with the latest template and add a warning for special characters causing a problem in producing the Word report from R.

# SwissASR 0.5.2

* Correction of template inputs, dates formatting and additional note for SAEs tables.
Expand Down
161 changes: 43 additions & 118 deletions R/asr.R
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
#' @param var_relation variable containing the relationship to randomized intervention
#' @param var_expected variable saying whether the SAE was expected
#' @param var_devdef variable containing whether the SAE is a device deficiency
#' @param var_devdefcouldlead variable containing whether the device deficiency could have lead to an SAE
#' @param var_devattr variable containing whether the SAE is attributable to the device
#' @param var_devint variable containing whether the SAE is attributable to an intervention in the trial
#' @param var_safetymeasure variable containing whether the SAE required safety related measures
Expand All @@ -78,58 +79,6 @@
#' file <- tempfile("asr", fileext = ".docx")
#' asr(asr_sae, file)
#'
#' # # more usual use will require passing more information:
#' # asr(asr_sae, file,
#' # # trial info
#' # trial_title = "Example Trial Name",
#' # protocol_number = "20221002130",
#' # basec_number = "",
#' # snctp_number = "202200458",
#' # swissmedic_number = "....",
#' # ec_name = "Kantonale Ethikskommision Bern",
#' # tr_number = "",
#' # product_name = "Drug name",
#' # international = FALSE,
#' # trial_type = "imp",
#' # # Sponsor info
#' # sponsor_contact = "Sponsor name, Sponsor phone number, Sponsor email",
#' # inst_name_address = "Institute name, Institute address",
#' # # site info
#' # n_centers_t = 20, # total number
#' # n_centers_p = "default", # planned
#' # n_centers_c = "default", # closed
#' # n_centers_o = "default", # open
#' # # participant info
#' # n_pat_t = 1000, # target
#' # n_pat_e = 300, # enrolled
#' # n_pat_c = 0, # complete
#' # n_pat_p = 0, # prematurely terminated
#' # # report info
#' # report_date = format(Sys.Date(), format = "%d/%m/%Y"),
#' # period_from = as.Date("2020-11-02"),
#' # period_to = as.Date("2020-11-17"),
#' # # variable mapping
#' # var_class = "class",
#' # var_sae_n = "sae_n", #sae ID
#' # var_part_id = "record_id", #participant ID
#' # var_age = "age",
#' # var_sex ="sex",
#' # var_country = "country",
#' # var_site = "site",
#' # var_sae = "sae",
#' # var_date_onset = "sae_date",
#' # var_trt = "trt",
#' # var_date_trt_start = "sae_trtstart",
#' # var_date_trt_stop = "sae_trtstop",
#' # var_outcome = "outcome",
#' # var_comment = "comment",
#' # var_relation = "related",
#' # var_expected = "expected",
#' # var_safetymeasure = "safetymeasure"
#' # )
#'
#'
#'

asr <- function(data,
target = "tmp.docx",
Expand Down Expand Up @@ -184,6 +133,7 @@ asr <- function(data,
, var_relation = "related"
, var_expected = "expected"
, var_devdef = "devdef"
, var_devdefcouldlead = "devdefcouldlead"
, var_devattr = "devattr"
, var_devint = "devint"
, var_safetymeasure = "safetymeasure"
Expand Down Expand Up @@ -236,11 +186,12 @@ asr <- function(data,
# if(trial_type == "medical device"){
# names(data)[names(data) == var_expected] <- "expected"
# names(data)[names(data) == var_devdef] <- "devdef"
# names(data)[names(data) == var_devdefcouldlead] <- "devdefcouldlead"
# names(data)[names(data) == var_devattr] <- "devattr"
# names(data)[names(data) == var_devint] <- "devint"
# names(data)[names(data) == var_safetymeasure] <- "safetymeasure"
#
# vars <- c("expected", "devdef", "devattr", "devint", "safetymeasure")
# vars <- c("expected", "devdef", "devdefcouldlead","devattr", "devint", "safetymeasure")
# if(!all(vars %in% names(data))){
# stop(paste(vars[!vars %in% names(data)], collapse = ", "), " not found in data")
# }
Expand Down Expand Up @@ -320,6 +271,23 @@ asr <- function(data,
# data$trt <- as.character(data$trt)
#

# Check in the text inputs if any detected special character causing problems is present
for(string in c("trial_title",
"protocol_number",
"basec_number",
"snctp_number",
"swissmedic_number",
"ec_name",
"tr_number",
"product_name",
"sponsor_contact",
"inst_name_address")){
check_field_characters(get(string)) }

# This check is for the arm names in case these are available and requested
if(!is.null(n_per_arm)){lapply(names(n_per_arm),check_field_characters)}


dfs <- asr_dataprep(data,
period_from = period_from,
period_to = period_to
Expand All @@ -341,6 +309,7 @@ asr <- function(data,
, var_relation = var_relation
, var_expected = var_expected
, var_devdef = var_devdef
, var_devdefcouldlead = var_devdefcouldlead
, var_devattr = var_devattr
, var_devint = var_devint
, var_safetymeasure = var_safetymeasure
Expand All @@ -353,63 +322,33 @@ asr <- function(data,
# report itself ----
doc <- read_docx(template)



# ..general info, details of trial ----
#
# for(i in c("trial_title",
# "protocol_number",
# "basec_number",
# "snctp_number",
# "swissmedic_number",
# "ec_name",
# "tr_number",
# "product_name",
# "sponsor_contact",
# "inst_name_address",
# "report_date",
# "period",
# "n_centers_t",
# "n_centers_p",
# "n_centers_c",
# "n_centers_o",
# "n_pat_t",
# "n_pat_e",
# "n_pat_c",
# "n_pat_p")){
# x <- get(i)
# doc <- doc %>%
# cursor_bookmark(i) %>%
# body_add_par(x, pos = "after")
# }

# format the dates for the text
period_from_f <- format(period_from, format = "%d/%m/%Y")
period_to_f <- format(period_to, format = "%d/%m/%Y")

period <- glue("{period_from_f} to {period_to_f}")
## New code to insert the fields instead of bookmarks
doc <- doc %>%
set_doc_properties(trial_title = get("trial_title"),
protocol_number = get("protocol_number"),
basec_number = get("basec_number"),
snctp_number = get("snctp_number"),
swissmedic_number = get("swissmedic_number"),
ec_name = get("ec_name"),
tr_number = get("tr_number"),
product_name = get("product_name"),
sponsor_contact = get("sponsor_contact"),
inst_name_address = get("inst_name_address"),
report_date = get("report_date"),
period = get("period"),
n_centers_t = as.character(get("n_centers_t")),
n_centers_p = as.character(get("n_centers_p")),
n_centers_c = as.character(get("n_centers_c")),
n_centers_o = as.character(get("n_centers_o")),
n_centers_t_ch = as.character(get("n_centers_t_ch")),
n_centers_p_ch = as.character(get("n_centers_p_ch")),
n_centers_c_ch = as.character(get("n_centers_c_ch")),
n_centers_o_ch = as.character(get("n_centers_o_ch")),
set_doc_properties(trial_title = "trial_title",
protocol_number = "protocol_number",
basec_number = "basec_number",
snctp_number = "snctp_number",
swissmedic_number = "swissmedic_number",
ec_name = "ec_name",
tr_number = "tr_number",
product_name = "product_name",
sponsor_contact = "sponsor_contact",
inst_name_address = "inst_name_address",
report_date = "report_date",
period = "period",
n_centers_t = as.character(n_centers_t),
n_centers_p = as.character(n_centers_p),
n_centers_c = as.character(n_centers_c),
n_centers_o = as.character(n_centers_o),
n_centers_t_ch = as.character(n_centers_t_ch),
n_centers_p_ch = as.character(n_centers_p_ch),
n_centers_c_ch = as.character(n_centers_c_ch),
n_centers_o_ch = as.character(n_centers_o_ch),
n_pat_t = as.character(n_pat_t),
n_pat_e = as.character(n_pat_e),
n_pat_c = as.character(n_pat_c),
Expand All @@ -427,13 +366,6 @@ asr <- function(data,
n_pat_e = n_pat_e,
n_per_arm = n_per_arm)

# doc <- doc %>%
# cursor_bookmark("partsafety_text")
# for(i in 1:length(summ$txt)){
# txt <- summ$txt[i]
# doc <- doc %>% body_add_par(txt, style = "Text")
# }

doc <- doc %>%
officer::set_doc_properties(partsafety_text = paste0(summ$txt, collapse = " ") )

Expand Down Expand Up @@ -498,7 +430,7 @@ asr <- function(data,
}
llist_ft <- flextable(llist) %>%
#add_header_lines("Line listing of SAEs, SADRs and SUSARs, including international cases
#(code and version of used standard (e.g. MedDRA or CTCAE) should be indicated, details on SUSARs will be attached as appendices)") %>%
#(code and version of used standard (e.g. MedDRA or CTCAE) should be indicated, details on SUSARs will be attached as appendices)") %>%
border(border = fp_border(color = "#4FB4E0"), part="all") %>%
fontsize(size = 8, part = "all") %>%
font(fontname = "Helvetica", part = "all")
Expand All @@ -517,10 +449,3 @@ asr <- function(data,
docx_update(input = target)

}







8 changes: 6 additions & 2 deletions R/asr_dataprep.R
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@
# class = msample(c("SAE", "SUSAR", "SADR")),
# expected = msample(c(TRUE, FALSE)),
# devdef = msample(c(TRUE, FALSE)),
# devdefcouldlead = msample(c(TRUE, FALSE)),
# devattr = msample(c(TRUE, FALSE)),
# devdef = msample(c(TRUE, FALSE)),
# devint = msample(c(TRUE, FALSE)),
# safetymeasure = msample(c(TRUE, FALSE))
# )
Expand Down Expand Up @@ -129,6 +129,7 @@ asr_dataprep <- function(data
, var_relation = "related"
, var_expected = "expected"
, var_devdef = "devdef"
, var_devdefcouldlead = "devdefcouldlead"
, var_devattr = "devattr"
, var_devint = "devint"
, var_safetymeasure = "safetymeasure"
Expand Down Expand Up @@ -182,6 +183,8 @@ asr_dataprep <- function(data
names(data)[names(data) == var_trt] <- "trt"
if(tx_var){
names(data)[names(data) == var_tx] <- "intervention"
}else{
data <- data[,!names(data) %in% "intervention"]
}

## relevant variables exist
Expand All @@ -205,11 +208,12 @@ asr_dataprep <- function(data
if(trial_type == "medical device"){
names(data)[names(data) == var_expected] <- "expected"
names(data)[names(data) == var_devdef] <- "devdef"
names(data)[names(data) == var_devdefcouldlead] <- "devdefcouldlead"
names(data)[names(data) == var_devattr] <- "devattr"
names(data)[names(data) == var_devint] <- "devint"
names(data)[names(data) == var_safetymeasure] <- "safetymeasure"

vars <- c("expected", "devdef", "devattr", "devint", "safetymeasure")
vars <- c("expected", "devdef", "devdefcouldlead","devattr", "devint", "safetymeasure")
if(!all(vars %in% names(data))){
stop(paste(vars[!vars %in% names(data)], collapse = ", "), " not found in data")
}
Expand Down
Loading

0 comments on commit 94581c7

Please sign in to comment.