library(dplyr)
library(knitr)
library(skimr)
library(dataMaid)
library(ggplot2)
library(extrafont)
library(lubridate)
library(rlang)
library(digest)
knitr::opts_chunk$set(echo = FALSE,
                      warning = FALSE,
                      message = FALSE)
options(knitr.table.format = "pipe",
        knitr.kable.NA = "")
is_india <- Sys.getenv('TIMCI_COUNTRY') == 'India'
is_tanzania <- Sys.getenv('TIMCI_COUNTRY') == 'Tanzania'
is_kenya <- Sys.getenv('TIMCI_COUNTRY') == 'Kenya'
is_senegal <- Sys.getenv('TIMCI_COUNTRY') == 'Senegal'
is_ls <- is_kenya | is_senegal
is_rct <- is_tanzania | is_india
if (is_senegal) {
  notice_str <- ""
  screening_times_str <- "Heures de screening"
} else {
  notice_str <- ""
  screening_times_str <- "Screening times"
}
deidentification_on <- FALSE

spa_pid <- Sys.getenv("TIMCI_SPA_PID")
qpid <- Sys.getenv("TIMCI_QUAL_PID")
cgidi3_fid <- Sys.getenv("TIMCI_QUAL_CGIDI3_FID")

start_date <- params$start_date
lock_date <- params$lock_date

rctls_dir <- params$rctls_dir
qualcg_dir <- params$qualcg_dir
qualhcp_dir <- params$qualhcp_dir
qualkii_dir <- params$qualkii_dir
qualos_dir <- params$qualos_dir
cost_dir <- params$cost_dir
locked_db_dir <- params$locked_db_dir
qc_dir <- params$qc_dir

research_facilities <- params$research_facilities

if (!is.null(params$facility_data)) {

  facility_data <- params$facility_data
  facility_data_audit <- params$facility_data_audit
  raw_drug_data <- params$raw_drug_data
  raw_day7fu_data <- params$raw_day7fu_data
  raw_hospit_data <- params$raw_hospit_data
  raw_day28fu_data <- params$raw_day28fu_data
  raw_withdrawal_data <- params$raw_withdrawal_data
  raw_problem_data <- params$raw_problem_data
  spa_cgei_data <- params$spa_cgei_data
  spa_fa_data <- params$spa_fa_data
  spa_hcpi_data <- params$spa_hcpi_data
  spa_sco_data <- params$spa_sco_data
  tf_data <- params$tf_data
  pm_data <- params$pm_data
  medical_cost_data <- params$medical_cost_data
  hospital_cost_data <- params$hospital_cost_data
  cgidi_invitation_data <- params$cgidi_invitation_data
  cgidi_encryption_data <- params$cgidi_encryption_data
  cgidi_interview_data <- params$cgidi_interview_data
  hcpidi_interview_data <- params$hcpidi_interview_data
  kii_interview_data <- params$kii_interview_data
  online_survey_data <- params$online_survey_data
  is_pilot <- params$is_pilot

}
###################
# Export settings #
###################

# Day 0 drug quality check IDs
###############################
qc_duplicate_drug <- "DQC_00_1DG_01"
qc_manual_edits_drug <- "DQC_00_1DG_02"
qc_amox_consistency_drug <- "DQC_00_1DG_03"
qc_aclav_consistency_drug <- "DQC_00_1DG_04"
qc_metro_consistency_drug <- "DQC_00_1DG_05"
qc_ctx_consistency_drug <- "DQC_00_1DG_06"
qc_cipro_consistency_drug <- "DQC_00_1DG_07"
qc_genta_consistency_drug <- "DQC_00_1DG_08"
qc_penig_consistency_drug <- "DQC_00_1DG_09"
qc_ceftriaxone_consistency_drug <- "DQC_00_1DG_10"
qc_cefixime_consistency_drug <- "DQC_00_1DG_11"
qc_ampi_consistency_drug <- "DQC_00_1DG_12"
qc_azi_consistency_drug <- "DQC_00_1DG_13"
qc_benza_consistency_drug <- "DQC_00_1DG_14"
qc_cefadroxil_consistency_drug <- "DQC_00_1DG_15"
qc_doxycycline_consistency_drug <- "DQC_00_1DG_16"
qc_erythromycin_consistency_drug <- "DQC_00_1DG_17"
qc_flucloxacillin_consistency_drug <- "DQC_00_1DG_18"
qc_mupirocin_consistency_drug <- "DQC_00_1DG_19"
qc_tetracycline_consistency_drug <- "DQC_00_1DG_20"
qc_isionazid_consistency_drug <- "DQC_00_1DG_21"
qc_rifampicin_consistency_drug <- "DQC_00_1DG_22"
qc_RH_consistency_drug <- "DQC_00_1DG_23"
qc_RHZE_consistency_drug <- "DQC_00_1DG_24"
qc_artesunate_consistency_drug <- "DQC_00_1DG_25"
qc_arthemeter_consistency_drug <- "DQC_00_1DG_26"
qc_AL_consistency_drug <- "DQC_00_1DG_27"
qc_ASAQ_consistency_drug <- "DQC_00_1DG_28"
qc_DHAPPQ_consistency_drug <- "DQC_00_1DG_29"
qc_primaquine_consistency_drug <- "DQC_00_1DG_30"
qc_quinine_consistency_drug <- "DQC_00_1DG_31"
qc_noantibio_consistency_drug <- "DQC_00_1DG_32"

# Repeat visit check IDs
#########################
qc_pids_out_lock_range_repeat <- "DQC_00_3RV_01"
qc_nonvalid_repeat <- "DQC_00_3RV_02"
qc_nonconsistent_name_repeat <- "DQC_00_3RV_03"
qc_visit_before_enrolment <- "DQC_00_3RV_04"

# Day 7 quality check IDs
##########################
qc_nontimely_submission_day7fu <- "DQC_07_01"
qc_nontimely_completion_day7fu <- "DQC_07_02"
qc_other_fids_day7fu <- "DQC_07_03"
qc_pids_out_lock_range_day7fu <- "DQC_07_04"
qc_nonvalid_day7fu <- "DQC_07_05"
qc_nonconsistent_name_day7fu <- "DQC_07_06"
qc_duplicated_day7fu <- "DQC_07_07"
qc_call_before_enrolment_day7fu <- "DQC_07_08"
qc_missing_hospit_date_day7fu <- "DQC_07_09"
qc_hospit_before_enrolment_day7fu <- "DQC_07_10"
qc_missing_death_date_day7fu <- "DQC_07_11"
qc_death_before_enrolment_day7fu <- "DQC_07_12"
qc_death_before_hospit_day7fu <- "DQC_07_13"

# Day 28 quality check IDs
###########################
qc_nontimely_submission_day28fu <- "DQC_28_01"
qc_nontimely_completion_day28fu <- "DQC_28_02"
qc_other_fids_day28fu <- "DQC_28_03"
qc_pids_out_lock_range_day28fu <- "DQC_28_04"
qc_nonvalid_day28fu <- "DQC_28_05"
qc_nonconsistent_name_day28fu <- "DQC_28_06"
qc_duplicated_day28fu <- "DQC_28_07"
qc_missing_hospit_date_day28fu <- "DQC_28_08"
qc_hospit_before_enrolment_day28fu <- "DQC_28_09"
qc_missing_death_date_day28fu <- "DQC_28_10"
qc_death_before_enrolment_day28fu <- "DQC_28_11"

# Withdrawals quality check IDs
################################
qc_nonreconciled_withdrawals_id <- "DQC_WD_01"
qc_withdrawal_before_enrolment <- "DQC_WD_02"

# SPA quality check IDs
########################
qc_spa_sco_nonvalid_fids <- "DQC_SPO_01"
qc_spa_sco_nonvalid_ids <- "DQC_SPO_02"
qc_spa_sco_duplicates <- "DQC_SPO_03"
qc_spa_sco_incomplete <- "DQC_SPO_04"
qc_spa_sco_rx_nonvalid_ids <- "DQC_SPO_05"
qc_spa_cgei_nonvalid_ids <- "DQC_SPC_01"
qc_spa_hcpi_nonvalid_ids <- "DQC_SPH_01"
qc_spa_hcpi_duplicates <- "DQC_SPH_02"
action_alert_no_modification <- "Alert to the study team. No modification of the database."

if (is_india) {
  hospit_value <- 13
} else{
  hospit_value <- 1
}
# Plot settings

tsize <- 7
tfont <- "Cambria"
if (is_senegal) {
  dbreak_duration <- "5 months"
} else {
  dbreak_duration <- "4 months"
}
nfacetperrow <- 4
time_break_str <- "4 hours"
time_format <- "%H:%M"
y_min <- NA
y_max <- NA
# Cryptographic settings

crypto_algo <- "md5"

\newpage

Abbreviations & Definitions

Abbreviations

| Abbreviation | Meaning | |--------------|------------------------------------------------------------| | .CSV | Comma-Separated Value | | DB | DataBase | | LS | Quasi-experimental Pre-Post Study | | ODK | Open Data Toolkit | | PII | Personnally Identifiable Information | | RCT | Randomised Controlled Trial | | SPA | Service Provision Assessment | | TIMCI | Tools for the Integrated Management of Childhood Illnesses |

: List of abbreviations

Definitions

\newpage

Introduction and aim

This document describes the data review processes and outputs for the Tools for Integrated Management of Childhood Illness (TIMCI) project.

Data cleaning and coding activities include data de-identification, duplicate management and free text management.

Note that the data collection tools contain a list of in-built range and consistency checks to prevent errors during data manipulation.

Roles and responsibilities

Procedures for cleaning and coding quantitative data are developed by the lead data manager at Swiss TPH to ensure consistency across countries.

Data cleaning and coding activities are supervised by the in-country data manager in charge in each country, with possible country-specific additions.

Frequency

Data quality checks will be run on a daily basis.

At critical junctures of the pragmatic cluster RCT, the research database will be reviewed and cleaned per established procedures, before being locked.

Consistency between the data cleaning procedures in each country will be regularly reviewed.

Distribution

Each updated version is to be circulated to by the data management team to the research team in each TIMCI country.

\newpage

r if (is_rct) {'Pragmatic cluster Randomised Controlled Trial (RCT)'} else {'Quasi-experimental Pre-Post Study (LS)'}

day7fu_is_not_null <- !is.null(raw_day7fu_data)
day7fu_is_not_empty <- timci::is_not_empty(raw_day7fu_data)
day7_out <- timci::format_day7_data(raw_day7fu_data,
                                    is_deidentified = FALSE)
# Extract all Day 7 follow-up records
raw_allday7fu_data <- day7_out[[3]]
# Extract successful Day 7 follow-up records only
raw_successday7fu_data <- day7_out[[1]]
hospitfu_is_not_null <- !is.null(raw_hospit_data)
hospitfu_is_not_empty <- timci::is_not_empty(raw_hospit_data)
day28fu_is_not_null <- !is.null(raw_day28fu_data)
day28fu_is_not_empty <- timci::is_not_empty(raw_day28fu_data)











disable <- FALSE

\newpage

Service Provision Assessment (SPA)

Cross-sectional quantitative studies

end_date <- NULL
facility_data_is_not_null <- !is.null(facility_data)
facility_data_is_not_empty <- timci::is_not_empty(facility_data)

tf_cond <- timci::is_not_empty(tf_data)
pm_cond <- FALSE# timci::is_not_empty(pm_data)
spa_start_date <- NULL
if (!is.null(spa_sco_data)) {
  main_spa_sco_data <- spa_sco_data[[1]]
  main_spa_fa_data <- spa_fa_data[[1]]
  if (nrow(main_spa_sco_data) > 0) {
    spa_start_date <- min(main_spa_sco_data$date)
    spa_week_nb <- ceiling(difftime(as.Date(spa_start_date), as.Date(start_date) - 1,units = "weeks"))
   if (is_senegal) {
      cat(paste0("* Début de la collecte SPA : **", spa_start_date, "**"))
    } else {
      cat(paste0("* SPA data collection start: **", spa_start_date, "**"))
    }
  }
}
timci::generate_calendar_heatmap2(main_spa_sco_data,
                                  date,
                                  legendtitle = "Calendar heatmap of SPA submissions")
timci::generate_calendar_heatmap2(tf_data[[1]],
                                  date,
                                  legendtitle = "Calendar heatmap of time-flow submissions")

\newpage

Process mapping

if (!is.null(pm_data)) {
  out <- knitr::knit_child('database_export_processmap_sub.Rmd',
                           envir = environment(),
                           quiet = TRUE)
  cat(out, sep = '\n')
}

Time-flow

if (!is.null(tf_data)) {
  out <- knitr::knit_child('database_export_timeflow_sub.Rmd',
                           envir = environment(),
                           quiet = TRUE)
  cat(out, sep = '\n')
}

\newpage

Cost & Cost-effectiveness


\newpage

Qualitative studies


\newpage

Technical information

df_session <- devtools::session_info(include_base = TRUE)
df_session_platform <- df_session$platform %>% 
  unlist(.) %>% 
  as.data.frame(.) %>% 
  tibble::rownames_to_column(.)
colnames(df_session_platform) <- c("Setting", "Value")
df_session_platform %>%
  knitr::kable()
df_session_packages <- df_session$packages[c("loadedversion", "date", "source")]
colnames(df_session_packages) <- c("Loaded version", "Date", "Source")
df_session_packages %>%
  knitr::kable()
locked_day0_data <- day0_data
locked_allday7fu_data <- allday7fu_data
locked_allday28fu_data <- allday28fu_data

# Save locked data to *.rda file to be reused in other rmarkdown documents if needed
save(locked_day0_data,
     locked_allday7fu_data,
     locked_allday28fu_data,
     locked_hospit_data,
     locked_spa_sco_data,
     locked_spa_hcpi_data,
     spa_cgei_data,
     spa_fa_data,
     file = "timci_locked_data.rda")
# Save locked data to *.rda file to be reused in other rmarkdown documents if needed
save(locked_day0_data,
     locked_allday7fu_data,
     locked_hospit_data,
     locked_spa_sco_data,
     locked_spa_hcpi_data,
     spa_cgei_data,
     spa_fa_data,
     file = "timci_locked_data.rda")


Thaliehln/timci documentation built on April 8, 2024, 3:38 p.m.