library(magrittr)
library(readxl)
library(ggplot2)
library(lubridate)
library(gridExtra)
library(knitr)
library(kableExtra)
knitr::opts_chunk$set(echo = FALSE,
                      warning = FALSE,
                      message = FALSE,
                      fig.pos = '!H')
options(qwraps2_markup = 'rmarkdown')
options(knitr.table.format = "latex")

# Qwraps2 parameters
prec <- 1

#kableExtra table parameters
table_fs <- 7
figsize <- 3
total_row_ft <- "gray"
total_row_ft2 <- "white"
striped_row_bg <- "gray!10"
total_row_bg2 <- "gray"
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_rct <- is_tanzania | is_india
is_ls <- is_kenya | is_senegal
if (is_india) {
  hospit_value <- 13
} else{
  hospit_value <- 1
}

day7_wmin <- 7
day7_wmax <- 10
day28_wmin <- 28
day28_wmax <- 32

\fancypagestyle{plain}{\pagestyle{fancy}} \pagestyle{fancy} \fancyhf{} \setlength{\headheight}{32pt} \renewcommand{\headrulewidth}{0pt} \fancyhead[C]{\includegraphics[width=10cm]{banner.png}} \fancyfoot[R]{Page \thepage\ of \pageref{LastPage}} \fancyfoot[L]{TIMCI Data Monitoring Report v1.0}


\setcounter{tocdepth}{2} \tableofcontents

\clearpage

r notice_str

r intro_str

start_date <- params$start_date
end_date <- params$end_date
sample_target <- params$sample_target

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

  facility_data <- params$facility_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
  wfa_data <- params$wfa_data
  is_pilot <- params$is_pilot

}



if (nrow(facility_data) > 0) {
  week_nb <- ceiling(difftime(as.Date(end_date), as.Date(start_date) - 1, units = "weeks"))
  days_nb <- sum(!lubridate::wday(seq(as.Date(start_date), as.Date(end_date), "days")) %in% c("7", "1"))

  if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
    date_boundary_str <- paste0("Ce rapport couvre la période du **", start_date, "** (début de l'étude) au **", end_date, "** (semaine **", week_nb, "** de l'étude) pour le **Sénégal**.")
  } else {
    date_boundary_str <- paste0("This report covers the period from **", start_date, "** (study start) to **", end_date, "** (week **", week_nb,"** of the study) for **", Sys.getenv('TIMCI_COUNTRY'), "**.")
  }
  cat(date_boundary_str)
}

\clearpage

r h1_general

r h2_global_indicators

if (Sys.getenv('TIMCI_COUNTRY') == "Senegal") {
  day_target <- enrolment_target * facility_nb
} else if (Sys.getenv('TIMCI_COUNTRY') == "Tanzania" | Sys.getenv('TIMCI_COUNTRY') == "Kenya") {
  cat(paste0("Daily enrolment target: ", dispensary_enrolment_target, " (dispensaries) and ", hc_enrolment_target, " (health centres), with ", enrolment_target, " as an average target if the facility type is not taken into account"))
} else if (Sys.getenv('TIMCI_COUNTRY') == "India") {
  cat(paste0("Daily enrolment target: ", ceiling(dispensary_enrolment_target), " (PHCs) and ", ceiling(hc_enrolment_target), " (CHCs), with ", enrolment_target, " as an average target if the facility type is not taken into account"))
}
ind1 <- timci::plot_numeric_indicator(val = days_nb,
                                      lbl = wdays_str)
ind2 <- timci::plot_numeric_indicator(val = sample_target,
                                      lbl = sample_size_str)
ind3 <- timci::plot_numeric_indicator(val = enrolment_target,
                                      lbl = enrolment_target_str)
gridExtra::grid.arrange(ind1, ind2, ind3,
                        ncol = 3, nrow = 1,
                        widths = grid::unit(c(5,5,5), c("cm", "cm", "cm")))
plot0 <- timci::plot_gauge(n_enrolled/sample_target, plot0_str, 100, 50, 80, scale = 0.4)
if (Sys.getenv('TIMCI_COUNTRY') == "India") {
  plot1 <- timci::plot_gauge(n_enrolled28/(min(24, days_nb) * day_target), plot1_str, 100, 50, 80, scale = 0.4)
  plot2 <- timci::plot_gauge(n_enrolled7/(min(6, days_nb) * day_target), plot2_str, 100, 50, 80, scale = 0.4)
} else {
  plot1 <- timci::plot_gauge(n_enrolled28/(min(20, days_nb) * day_target), plot1_str, 100, 50, 80, scale = 0.4)
  plot2 <- timci::plot_gauge(n_enrolled7/(min(5, days_nb) * day_target), plot2_str, 100, 50, 80, scale = 0.4)
}
plot3 <- timci::plot_gauge(n_enrolled/(n_screened - n_repeat), plot3_str, 100, 50, 80, scale = 0.4)
write(n_completed_day7fu,stderr())
write(n_due_day7fu, stderr())
if (n_due_day7fu > 0) {
  n_day7fu_rate <- n_completed_day7fu/n_due_day7fu
  n_day7fu_rate100 <- round(100 * n_day7fu_rate, prec)
  plot4 <- timci::plot_gauge(n_day7fu_rate, plot4_str, 100, 50, 80, scale = 0.4)
  plot5 <- timci::plot_gauge(n_valid_day7fu/n_due_day7fu, plot5_str, 100, 50, 80, scale = 0.4)
}
if (Sys.getenv('TIMCI_COUNTRY') == "Tanzania" || Sys.getenv('TIMCI_COUNTRY') == "India") {
  day28fu_data <- NULL
  if (!is.null(raw_day28fu_data)) {
    if (nrow(raw_day28fu_data) > 1) {

      day28fu_data_list <- timci::format_day28_data(raw_day28fu_data)

      # Extract and clean all Day 28 follow-up data
      day28fu_data <- day28fu_data_list[[3]]
      day28fu_data <- day28fu_data[day28fu_data$child_id %in% baseline_data$child_id, ]

      # Extract and clean successful Day 28 follow-up data
      succ_day28fu_data <- day28fu_data_list[[1]]
      succ_day28fu_data <- clean_followup_for_rate_estimation(baseline_data,
                                                              succ_day28fu_data)

      # Extract and clean all Day 28 follow-up attempts
      attempts_day28fu_data <- day28fu_data[day28fu_data$child_id %in% baseline_data$child_id, ] %>%
        dplyr::mutate(attempted_day28 = 1)  %>%
        dplyr::distinct_at(dplyr::vars(child_id),
                           .keep_all = TRUE)

      n_completed_day28fu <- sum((as.Date(succ_day28fu_data$date_day0, "%Y-%m-%d") + day28_wmin) <= Sys.Date(), na.rm = TRUE) 
      n_valid_day28fu <- sum(((as.Date(succ_day28fu_data$date_day0, "%Y-%m-%d") + day28_wmin) <= Sys.Date()) & (succ_day28fu_data$days >= day28_wmin) & (succ_day28fu_data$days <= day28_wmax), na.rm = TRUE) 
    } else {
      n_completed_day28fu <- 0
      n_valid_day28fu <- 0
    }
  } else {
    n_completed_day28fu <- 0
    n_valid_day28fu <- 0
  }

  n_due_day28fu <- sum((as.Date(demog_data$date_visit, "%Y-%m-%d") + day28_wmin) <= Sys.Date())
}
if (n_due_day28fu > 0) {
  plot7 <- timci::plot_gauge(n_completed_day28fu/n_due_day28fu, "Day 28 follow-up rate", 100, 50, 80, scale = 0.4)
  plot8 <- timci::plot_gauge(n_valid_day28fu/n_due_day28fu, "Day 28 follow-up rate\nwithin the time window", 100, 50, 80, scale = 0.4)
}
write(n_completed_day28fu,stderr())
write(n_due_day28fu, stderr())
n_completed_hospitfu <- 0
hospit_data <- NULL
if (nrow(raw_hospit_data) > 0) {
  hospit_data <- format_hospital_data(raw_hospit_data) %>%
    dplyr::distinct_at(dplyr::vars(child_id),
                       .keep_all = TRUE)
  hospit_data <- hospit_data[hospit_data$child_id %in% baseline_data$child_id, ] 
  n_completed_hospitfu <- sum(hospit_data$hospit == 1, na.rm = TRUE)
}

plot9 <- timci::plot_gauge(n_completed_hospitfu/n_due_hospitfu, "Documented hospitalisation rate", 100, 50, 80, scale = 0.4)
write(paste0("completed = ", n_completed_hospitfu), stderr())
write(paste0("due = ",n_due_hospitfu), stderr())
if (n_due_day7fu > 0) {
  if (Sys.getenv('TIMCI_COUNTRY') == "Tanzania" || Sys.getenv('TIMCI_COUNTRY') == "India") {
    if (n_due_day28fu > 0){
      gridExtra::grid.arrange(plot0, plot1, plot2, plot3, plot4, plot5, plot7, plot8, plot9,
                              ncol = 3, nrow = 3,
                              widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")),
                              heights = grid::unit(c(4,4,4), c("cm", "cm", "cm")))
    } else{
      gridExtra::grid.arrange(plot0, plot1, plot2, plot3, plot4, plot5, plot9,
                              ncol = 3, nrow = 3,
                              widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")),
                              heights = grid::unit(c(4,4,4), c("cm", "cm", "cm")))
    }
  } else{
    gridExtra::grid.arrange(plot0, plot1, plot2, plot3, plot4, plot5, plot9,
                            ncol = 3, nrow = 3,
                            widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")),
                            heights = grid::unit(c(4,4,4), c("cm", "cm", "cm")))
  }
} else{
  gridExtra::grid.arrange(plot0, plot1, plot2, plot3,
                          ncol = 3, nrow = 3,
                          widths = grid::unit(c(6,6,6), c("cm", "cm", "cm")),
                          heights = grid::unit(c(4,4,4), c("cm", "cm", "cm")))
}
visit_names <- c(all_str, visit_names)
submissions <- c(n_total, submissions)

out <- data.frame(visit_names, submissions)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  linesep = "",
                  col.names = c("Submission", "N"),
                  align = c("l", "c"),
                  caption = submission_table_cap,
                  escape = FALSE) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) %>%
  kableExtra::footnote(number = c("Day 0 visit (enrolment on the same day as the screening).",
                                  "All other visits that occur during the enrolment period."),
                       escape = FALSE)

r h2_completion_status

r h3_completion_status_overall

For the purposes of this report, full completion is defined as \begin{itemize} \item [India, Tanzania] "the participant has completed the Day 7 and the Day 28 follow-ups visit" \item [Kenya, Senegal] "the participant has completed the Day 7 follow-ups visit" \end{itemize}

In India and Tanzania, partial completion is defined as "the participant has completed either the Day 7 or the Day 28 follow-ups visit".

selected_variables <- c("child_id",
                        "facility_name",
                        "date_visit",
                        "district",
                        "referral_cg",
                        "referral_hf")
if (is_tanzania) {
  selected_variables <- c(selected_variables)#, "location_lvl1")
}
all <- baseline_data[, selected_variables]
if (!is.null(day7fu_data)) {
  if (nrow(day7fu_data) > 0) {
    all <- all %>%
      merge(y = succ_day7fu_data[, c("child_id", "proceed_day7", "hf_visit_type", "status_day7", "admission", "date_call")],
            by = 'child_id',
            all.x = TRUE) %>%
      merge(y = attempts_day7fu_data[, c("child_id", "attempted_day7")],
            by = 'child_id',
            all.x = TRUE)
  }
}

# Create an empty column if Day 7 follow-up has not started yet
all["proceed_day7"[!("proceed_day7" %in% colnames(all))]] <- 0
all["attempted_day7"[!("attempted_day7" %in% colnames(all))]] <- 0
all["hf_visit_type"[!("hf_visit_type" %in% colnames(all))]] <- 0
all["status_day7"[!("status_day7" %in% colnames(all))]] <- 0
all["admission"[!("admission" %in% colnames(all))]] <- 0

all$due_day7 <- (as.Date(all$date_visit, "%Y-%m-%d") + day7_wmin) <= Sys.Date()
all$attempted_day7[is.na(all$attempted_day7)] <- 0
all$proceed_day7[is.na(all$proceed_day7)] <- 0
all$lost_day7 <- ((as.Date(all$date_visit, "%Y-%m-%d") + day7_wmax) <= Sys.Date()) & (all$proceed_day7 == 0)
if (!is.null(hospit_data)) {
  if (nrow(hospit_data) > 0) {
    all <- all %>%
      merge(y = hospit_data[, c("child_id", "found", "hospit")],
            by = 'child_id',
            all.x = TRUE)
  }
}

# Create an empty column if hospital follow-up has not started yet
all["found"[!("found" %in% colnames(all))]] <- 96
all$found[is.na(all$found)] <- 96
all$hospit_visit <- (all$status_day7 == 2) | (all$hf_visit_type == hospit_value)
all$hospit_visit[is.na(all$hospit_visit)] <- 0
all$reported_hospit <- (all$status_day7 == 2) | (all$admission == 1)
all$reported_hospit[is.na(all$all$reported_hospit)] <- 0
all$hospit[is.na(all$hospit)] <- 96
if (!is.null(day28fu_data)) {
  if (nrow(day28fu_data) > 0) {
    all <- all %>%
      merge(y = succ_day28fu_data[, c("child_id", "proceed_day28")],
            by = 'child_id',
            all.x = TRUE) %>%
      merge(y = attempts_day28fu_data[, c("child_id", "attempted_day28")],
            by = 'child_id',
            all.x = TRUE)
  }
}

# Create an empty column if Day 28 follow-up has not started yet
all["proceed_day28"[!("proceed_day28" %in% colnames(all))]] <- 0
all["attempted_day28"[!("attempted_day28" %in% colnames(all))]] <- 0

all$due_day28 <- (as.Date(all$date_visit, "%Y-%m-%d") + day28_wmin) <= Sys.Date()
all$attempted_day28[is.na(all$attempted_day28)] <- 0
all$proceed_day28[is.na(all$proceed_day28)] <- 0
all$lost_day28 <- ((as.Date(all$date_visit, "%Y-%m-%d") + day28_wmax) <= Sys.Date()) & (all$proceed_day28 == 0)
fu_var_cpy <- all
completion_summary <- list(
  "Summary" = list(
    "Day 7 and Day 28" = ~qwraps2::n_perc(proceed_day7 == 1 & proceed_day28 == 1, prec),
    "Day 7 or Day 28" = ~qwraps2::n_perc(proceed_day7 == 1 | proceed_day28 == 1, prec),
    "None" = ~qwraps2::n_perc(proceed_day7 == 0 & proceed_day28 == 0, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            facility_name)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_all_completion) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

r h3_completion_status_day7

completion_summary <- list(
  "Summary" = list(
    "Due" = ~qwraps2::n_perc(due_day7 == 1, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            facility_name)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c"),
                  caption = tcap_day7fu_due) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>%
  dplyr::filter(due_day7 == 1)

completion_summary <- list(
  "Summary" = list(
    "Attempted" = ~qwraps2::n_perc(attempted_day7 == 1, prec),
    "Completed" = ~qwraps2::n_perc(proceed_day7 == 1, prec),
    "Lost" = ~qwraps2::n_perc(lost_day7 == 1, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            district)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_due_day7fu_completion_by_district) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>%
  dplyr::filter(due_day7 == 1)

completion_summary <- list(
  "Summary" = list(
    "Attempted" = ~qwraps2::n_perc(attempted_day7 == 1, prec),
    "Completed" = ~qwraps2::n_perc(proceed_day7 == 1, prec),
    "Lost" = ~qwraps2::n_perc(lost_day7 == 1, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            facility_name)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_due_day7fu_completion) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>%
  dplyr::filter(due_day7 == 1)# %>%
#dplyr::mutate(location_levels = ifelse(!is.na(location_lvl1), location_lvl1, location_lvl2)) %>%
#dplyr::filter(!is.na(location_lvl1))

completion_summary <- list(
  "Summary" = list(
    "Attempted" = ~qwraps2::n_perc(attempted_day7 == 1, prec),
    "Completed" = ~qwraps2::n_perc(proceed_day7 == 1, prec),
    "Lost" = ~qwraps2::n_perc(lost_day7 == 1, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            location_lvl1)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_due_day7fu_completion) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
cat(h3_completion_status_day28)
all <- fu_var_cpy
completion_summary <- list(
  "Summary" = list(
    "Due" = ~qwraps2::n_perc(due_day28 == 1, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            facility_name)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_day28fu_completion) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- fu_var_cpy %>%
  dplyr::filter(due_day28 == 1)
completion_summary <- list(
  "Summary" = list(
    "Attempted" = ~qwraps2::n_perc(attempted_day28 == 1, prec),
    "Completed" = ~qwraps2::n_perc(proceed_day28 == 1, prec),
    "Lost" = ~qwraps2::n_perc(lost_day28 == 1, prec)
    )
)
out <- format_summary_table(all,
                            completion_summary,
                            facility_name)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_day28fu_completion) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

r h3_completion_status_hospital

visit_all <- fu_var_cpy %>%
  dplyr::filter(hospit_visit == 1)

completion_summary <- list(
  "Summary" = list(
    "Attempted" = ~qwraps2::n_perc(found == 0 | found == 1, prec),
    "Completed" = ~qwraps2::n_perc(found == 1, prec),
    "Admitted" = ~qwraps2::n_perc(hospit == 1, prec),
    "Lost" = ~qwraps2::n_perc(found == 0, prec)
    )
)

if (nrow(visit_all) > 0) {
  out <- format_summary_table(visit_all,
                              completion_summary,
                              facility_name)
  out %>%
    kableExtra::kbl(booktabs = TRUE,
                    longtable = TRUE,
                    linesep = "",
                    align = c("c", "c", "c"),
                    caption = tcap_hospit_visit_completion) %>%
    kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                              font_size = table_fs) %>%
    kableExtra::row_spec(0, bold = TRUE) %>%
    kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
    kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}
hospitalisation_all <- fu_var_cpy %>%
  dplyr::filter(reported_hospit == 1)

completion_summary <- list(
  "Summary" = list(
    "Attempted" = ~qwraps2::n_perc(found == 0 | found == 1, prec),
    "Completed" = ~qwraps2::n_perc(found == 1, prec),
    "Admitted" = ~qwraps2::n_perc(hospit == 1, prec),
    "Non admitted" = ~qwraps2::n_perc(hospit == 0, prec),
    "Lost" = ~qwraps2::n_perc(found == 0, prec)
    )
)

if (nrow(hospitalisation_all) > 0) {
  out <- format_summary_table(hospitalisation_all,
                            completion_summary,
                            facility_name)
out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c", "c"),
                  caption = tcap_hospitalisation_completion) %>%
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}

\clearpage

r h1_participants

r weekly_enrolment_hdr2

if (!is.null(baseline_data)){
    if (length(baseline_data) > 0 & nrow(baseline_data) > 0) {
      if (Sys.getenv('TIMCI_COUNTRY') == "India") {
        val <- day_target * 6
      } else {
        val <- day_target * 5
      }
      p <- timci::generate_week_bar_plot(date_vec = baseline_data$date_visit,
                                         date_min = as.Date(start_date),
                                         date_max = as.Date(as.Date(end_date) + 7),
                                         ylbl = paste0(enrolment_str),
                                         rref = val,
                                         relative = FALSE)
      plot(p)
  }
}
if (!is.null(baseline_data)){
    if (length(baseline_data) > 0 & nrow(baseline_data) > 0) {
       baseline_data %>%
        dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit),
                                                   "week",
                                                   week_start = getOption("lubridate.week.start", 1))) %>%
        dplyr::count(Week) %>%
        dplyr::mutate(csum = cumsum(n)) %>%
        dplyr::rename('Weekly recruitment' = 'n') %>%
        dplyr::rename('Cumulative recruitment' = 'csum') %>%
        kableExtra::kbl(booktabs = TRUE,
                        longtable = TRUE,
                        linesep = "",
                        align = c("l", "c", "c"),
                        caption = tcap_weekly_enrolment) %>% 
        kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
        kableExtra::row_spec(0, bold = TRUE) %>%
        kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg)
  }
}
if (!is.null(baseline_data)){
    if (length(baseline_data) > 0 & nrow(baseline_data) > 0) {
      baseline_data <- baseline_data %>%
         merge(y = facilities[,c("facility_id", "training_date", "rollout_date")],
               by.x = 'fid',
               by.y = 'facility_id',
               all.x = TRUE)
      pre_intervention_data <- baseline_data %>%
        dplyr::filter(is.na(training_date) | as.Date(date_visit) < as.Date(training_date))
      post_intervention_data <- baseline_data %>%
        dplyr::filter(!is.na(rollout_date) & as.Date(date_visit) >= as.Date(rollout_date))
  }
}
if (!is.null(pre_intervention_data)){
    if (length(pre_intervention_data) > 0 & nrow(pre_intervention_data) > 0) {

       pre_intervention_data %>%
        dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit),
                                                   "week",
                                                   week_start = getOption("lubridate.week.start", 1))) %>%
        dplyr::count(Week) %>%
        dplyr::mutate(csum = cumsum(n)) %>%
        dplyr::rename('Weekly recruitment' = 'n') %>%
        dplyr::rename('Cumulative recruitment' = 'csum') %>%
        kableExtra::kbl(booktabs = TRUE,
                        longtable = TRUE,
                        linesep = "",
                        align = c("l", "c", "c"),
                        caption = tcap_weekly_enrolment_pre) %>% 
        kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
        kableExtra::row_spec(0, bold = TRUE) %>%
        kableExtra::row_spec(1:(nrow(pre_intervention_data)/2) * 2, background = striped_row_bg)
  }
}
if (!is.null(post_intervention_data)){
    if (length(post_intervention_data) > 0 & nrow(post_intervention_data) > 0) {

       post_intervention_data %>%
        dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit),
                                                   "week",
                                                   week_start = getOption("lubridate.week.start", 1))) %>%
        dplyr::count(Week) %>%
        dplyr::mutate(csum = cumsum(n)) %>%
        dplyr::rename('Weekly recruitment' = 'n') %>%
        dplyr::rename('Cumulative recruitment' = 'csum') %>%
        kableExtra::kbl(booktabs = TRUE,
                        longtable = TRUE,
                        linesep = "",
                        align = c("l", "c", "c"),
                        caption = tcap_weekly_enrolment_post) %>% 
        kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
        kableExtra::row_spec(0, bold = TRUE) %>%
        kableExtra::row_spec(1:(nrow(post_intervention_data)/2) * 2, background = striped_row_bg)
  }
}
if (!is.null(baseline_data)){
    if (length(baseline_data) > 0 & nrow(baseline_data) > 0) {
       baseline_data %>%
        dplyr::mutate(Month = format.Date(as.Date(date_visit), "%Y-%m")) %>%
        dplyr::count(Month) %>%
        dplyr::mutate(csum = cumsum(n)) %>%
        dplyr::rename('Monthly recruitment' = 'n') %>%
        dplyr::rename('Cumulative recruitment' = 'csum') %>%
        kableExtra::kbl(booktabs = TRUE,
                        longtable = TRUE,
                        linesep = "",
                        align = c("l", "c", "c"),
                        caption = tcap_monthly_enrolment) %>% 
        kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
        kableExtra::row_spec(0, bold = TRUE) %>%
        kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg)
  }
}
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat("## Fréquentation hebdomadaire des postes\n\n")
} else {
  cat("## Clinic weekly attendance\n\n")
}
# if (!is.null(wfa_data)) {
#   if (length(wfa_data) > 0 & nrow(wfa_data) > 0) {
#     p <- timci::generate_week_bar_plot2(date_vec = wfa_data$date_week,
#                                         values = wfa_data$u5_attendance_last_week,
#                                         date_min = as.Date(start_date),
#                                         date_max = as.Date(as.Date(end_date) + 7),
#                                         ylbl = "Under 5 attendance")
#     plot(p)
#   }
# }
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat("## Nombre de soumissions au cours des 30 derniers jours\n\n")
} else {
  cat("## Number of submissions during the last 30 days\n\n")
}
w <- 29
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat(paste0("### Recrutement quotidien\n\n"))
} else {
  cat(paste0("### Daily enrolment\n\n"))
}
if (nrow(baseline_data) > 0) {
  timci::generate_day_bar_plot(date_vec = baseline_data$date_visit,
                               date_min = as.Date(end_date - w),
                               date_max = as.Date(end_date + 1),
                               ylbl = enrolment_str,
                               rref = day_target)
}
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat(paste0("### Visites primaires et secondaires\n\n"))
} else {
  cat(paste0("### Baseline and repeat visits\n\n"))
}

# Frequency
if (nrow(baseline_data) > 0) {
  timci::generate_day_cumbar_plot(list(noneligible$date_visit,
                                       baseline_data$date_visit,
                                       repeat_data$date_visit),
                                  c("Non-eligible", baseline_str, repeat_str),
                                  as.Date(end_date - w),
                                  as.Date(end_date + 1),
                                  ylbl = submission_str)
} else{
  cat('N/A\n\n')
}
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat("## Cartes thermiques calendaires\n\n")
  cat("### Screening\n\n")
} else {
  cat("## Calendar heatmaps\n\n")
  cat("### Screening\n\n")
}

timci::generate_calendar_heatmap2(facility_data,
                                  date_visit,
                                  legendtitle = "Number of screenings")
cat(baseline_visit_title_str)

if (nrow(baseline_data) > 0) {
  timci::generate_calendar_heatmap2(baseline_data,
                                    date_visit,
                                    legendtitle = "Number of enrolments")
}
if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cat("## Heure de début du screening\n\n")
} else {
  cat("## Screening start times\n\n")
}
timci::heatmap_wday_hourofday(facility_data,
                              'start')

\clearpage

r eligibility_title

r eligibility_str

all <- data.frame(facility_data)
all$yg_infant <- ifelse(all$yg_infant == 0, "2-59m", "0-2m")
age_statistics <- list(
  "Facility" = list(
    "First day of life" = ~qwraps2::n_perc(age_excl == 1, prec),
    "1 - 59 days" = ~qwraps2::n_perc(age_excl == 0 & age_incl == 1 & yg_infant == "0-2m", prec),
    "2 - 59 months" = ~qwraps2::n_perc(age_incl == 1 & yg_infant == "2-59m", prec),
    "Above 59 months" = ~qwraps2::n_perc(age_incl == 0, prec)
    )
)
out <- format_summary_table(all, age_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c"),
                  caption = age_eligibility_table_cap) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::column_spec(5, color = ifelse(grepl(pattern = "(0.0%)", x = out[, 4], fixed = TRUE),
                                            "red",
                                            "black")) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg) %>%
  kableExtra::footnote(general = c(age_eligibility_table_gfn),
                       footnote_as_chunk = TRUE)
all <- all %>% 
  dplyr::filter(age_incl == 1 & age_excl == 0)
all$sickness[is.na(all$sickness)] <- 0

sickness_statistics <- list(
  "Facility" = list(
    "Sick" = ~qwraps2::n_perc(sickness == 1, prec),
    "Not sick" = ~qwraps2::n_perc(sickness == 0, prec)
    )
)
out <- format_summary_table(all, sickness_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c"),
                  caption = sick_cap) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::column_spec(3, color = ifelse(grepl(pattern = "(0.0%)", x = out[, 2], fixed = TRUE),
                                            "red",
                                            "black")) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
sick <- all %>% 
  dplyr::filter(sickness == 1)
nonsick <- all %>% 
  dplyr::filter(sickness == 0)
all <- sick
all$consult_reason[is.na(all$consult_reason)] <- 0

sick_reason_statistics <- list(
  "Facility" = list(
    "Sickness" = ~qwraps2::n_perc(consult_reason == 1, prec),
    "Trauma" = ~qwraps2::n_perc(consult_reason == 2 & sickness == 1, prec),
    "Immunisation" = ~qwraps2::n_perc(consult_reason == 3 & sickness == 1, prec),
    "Monitoring" = ~qwraps2::n_perc(consult_reason == 4 & sickness == 1, prec)
    )
)
out <- format_summary_table(all, sick_reason_statistics, facility_name) 
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c"),
                  caption = consultion_sick_cap) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- nonsick
all$inpatient[is.na(all$inpatient)] <- 0
all$consult_reason[is.na(all$consult_reason)] <- 0

reason_statistics <- list(
  "Facility" = list(
    "Trauma" = ~qwraps2::n_perc(consult_reason == 2 & sickness == 0, prec),
    "Immunisation" = ~qwraps2::n_perc(consult_reason == 3 & sickness == 0, prec),
    "Monitoring" = ~qwraps2::n_perc(consult_reason == 4 & sickness == 0, prec),
    "Inpatient admission" = ~qwraps2::n_perc(inpatient == 1, prec)
    )
)
if (!is.null(all) & length(all) > 0 & nrow(all) > 0) {
  out <- format_summary_table(all, reason_statistics, facility_name)
  out %>% 
    kableExtra::kbl(booktabs = TRUE,
                    longtable = TRUE,
                    linesep = "",
                    align = c("c", "c", "c", "c"),
                    caption = consultation_nonsick_cap) %>% 
    kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
    kableExtra::row_spec(0, bold = TRUE) %>%
    kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
    kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}
all <- sick
all$cg_eligibility[is.na(all$cg_eligibility)] <- 0

if (Sys.getenv('TIMCI_COUNTRY') == 'Senegal') {
  cg_age_eligibility_table_cap <- "Âge de l'accompagnant principal"
} else {
  cg_age_eligibility_table_cap <- "Caregiver's age"
}

caregiver_statistics <- list(
  "Facility" = list(
    "Mother < 18" = ~qwraps2::n_perc(cg_eligibility == 0 & main_cg == 1, prec, na_rm = TRUE),
    "Other < 18" = ~qwraps2::n_perc(cg_eligibility == 0 & main_cg != 1, prec, na_rm = TRUE),
    ">= 18" = ~qwraps2::n_perc(cg_eligibility == 1, prec)
    )
)
out <- format_summary_table(all, caregiver_statistics, facility_name)
out <- gsub("%", "\\\\%", out)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  align = c("c", "c", "c"),
                  linesep = "",
                  caption = cg_age_eligibility_table_cap,
                  col.names = c("Mother < 18", "Other < 18", "$\\bm{\\geq 18}$"),
                  escape = FALSE) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- sick %>% 
  dplyr::filter(main_cg != 1 & !is.na(underaged_mother))

if (nrow(all) > 0) {
  mother_statistics <- list(
    "Summary" = list(
      "< 18" = ~qwraps2::n_perc(underaged_mother == 1, prec, na_rm = TRUE),
      ">= 18" = ~qwraps2::n_perc(underaged_mother == 0, prec, na_rm = TRUE)
      )
  )

  out <- format_summary_table(all, mother_statistics, facility_name)
  out <- gsub("%", "\\\\%", out)
  out %>% 
    kableExtra::kbl(booktabs = TRUE,
                    longtable = TRUE,
                    align = c("c", "c"),
                    linesep = "",
                    caption = u18_mother_cap,
                    col.names = c("< 18", "$\\bm{\\geq 18}$"),
                    escape = FALSE) %>% 
    kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
    kableExtra::row_spec(0, bold = TRUE) %>%
    kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
    kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}
all <- sick %>% 
  dplyr::filter(cg_eligibility == 1)
all$prev_enrl[is.na(all$prev_enrl)] <- 0
all$repeat_consult[is.na(all$repeat_consult)] <- 0

summary_statistics <- list(
  "Summary" = list(
    "First" = ~qwraps2::n_perc(prev_enrl == 3 | prev_enrl == 98, prec),
    "Previous" = ~qwraps2::n_perc(prev_enrl == 1 | prev_enrl == 2, prec),
    "Last <= 28 days" = ~qwraps2::n_perc(repeat_consult == 1, prec),
    "Last > 28 days" = ~qwraps2::n_perc((prev_enrl == 1 | prev_enrl == 2) & repeat_consult == 0, prec)
    )
)
out <- format_summary_table(all, summary_statistics, facility_name)
out <- gsub("%", "\\\\%", out)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  align = c("c", "c", "c", "c"),
                  linesep = "",
                  caption = multi_rec_cap,
                  col.names = c("First", "Previous", "Last $\\bm{\\leq 28}$ days", "Last > 28 days"),
                  escape = FALSE) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
all <- all %>% 
  dplyr::filter((prev_enrl == 3 | prev_enrl == 98) | ((prev_enrl == 1 | prev_enrl == 2) & repeat_consult == 0))

consent_statistics <- list(
  "Facility" = list(
    "Consented" = ~qwraps2::n_perc(consent == 1, prec),
    "Not consented" = ~qwraps2::n_perc(consent == 0, prec)
    )
)
out <- format_summary_table(all, consent_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c"),
                  caption = consent_cap) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::column_spec(2, color = ifelse(grepl(pattern = "(100.0%)", x = out[, 1], fixed = TRUE),
                                            "red",
                                            "black")) %>%
  kableExtra::column_spec(3, color = ifelse(grepl(pattern = "(0.0%)", x = out[, 2], fixed = TRUE),
                                            "red",
                                            "black")) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
non_enrolment_causes <- timci::count_screening(facility_data)
nec_pie_chart <- timci::generate_pie_chart(non_enrolment_causes)
plot(nec_pie_chart)
non_eligibility_causes <- timci::count_noneligibility(facility_data)
plot(timci::generate_pie_chart(non_eligibility_causes))

\clearpage

r h1_day0_visit

all <- data.frame(baseline_data)
descriptive_statistics <- list(
  "Summary" = list(
    "Exact DoB known" = ~qwraps2::n_perc(dob_knwn == 1, prec),
    "MoB known" = ~qwraps2::n_perc(dob_knwn == 2, prec),
    "Only YoB known" = ~qwraps2::n_perc(dob_knwn == 3, prec),
    "DoB not known" = ~qwraps2::n_perc(dob_knwn == 98, prec)
    )
)
out <- format_summary_table(all, descriptive_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_age_category) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

r h2_research_operations

descriptive_statistics <- list(
  "Summary" = list(
    "Scanned entries" = ~qwraps2::n_perc(child_id_scan == 1, prec),
    "Manual entries" = ~qwraps2::n_perc(child_id_manual == 1, prec)
    )
)
out <- format_summary_table(all, descriptive_statistics, facility_name)

out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c"),
                  caption = tcap_scanned_manual) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
out <- data.frame(baseline_data) %>%
  mutate(scanned_child_id = ifelse(child_id_scan == 1, child_id, NA)) %>%
  group_by(facility_name) %>%
  summarise("Max ID scanned" = max(scanned_child_id, na.rm=TRUE))

out %>%
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c"),
                  caption = "Max ID that has been scanned for each facility") %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
if (!is.null(pii)) {
  if (nrow(pii) > 0) {

    all <- data.frame(pii)
    all$phone_nb[!is.na(all$phone_nb)] <- 1
    all$phone_nb[is.na(all$phone_nb)] <- 0
    all$phone_nb2[!is.na(all$phone_nb2)] <- 1
    all$phone_nb2[is.na(all$phone_nb2)] <- 0

    phone_stats <- list(
      "Facility" = list(
        "0 phone numbers" = ~qwraps2::n_perc(phone_nb == 0, prec),
        "1 phone number" = ~qwraps2::n_perc(phone_nb == 1, prec),
        "2 phone numbers" = ~qwraps2::n_perc((phone_nb == 1) & (phone_nb2 == 1), prec)
        )
    )

    out <- format_summary_table(all, phone_stats, facility_name)
    out %>% 
      kableExtra::kbl(booktabs = TRUE,
                      longtable = TRUE,
                      align = c("c", "c", "c"),
                      linesep = "",
                      caption = tcap_phone_numbers) %>% 
      kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
      kableExtra::row_spec(0, bold = TRUE) %>%
      kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
      kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

  }
}
if (!is.null(pii)) {
  if (nrow(pii) > 0) {

    phone_data <- data.frame(pii) %>%
      dplyr::filter(!is.na(phone_nb)) %>%
      dplyr::filter(prev_enrl == 3) %>%
      dplyr::group_by(facility_name)

    out1 <- phone_data %>%
      dplyr::summarise(All = dplyr::n())

    out2 <- phone_data %>%
      dplyr::summarise(Unique = dplyr::n_distinct(phone_nb))

    out <- merge (out1,
                  out2,
                  by = 0,
                  all.x = TRUE) %>% 
      dplyr::mutate(Perc = round(100*Unique/All, digits = 1))

    out %>% 
      kableExtra::kbl(booktabs = TRUE,
                      longtable = TRUE,
                      linesep = "",
                      caption = "Number and percentage of unique phone numbers in first enrolments by facility") %>% 
      kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
      kableExtra::row_spec(0, bold = TRUE) %>%
      kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

  }
}
if (!is.null(pii)) {
  if (nrow(pii) > 0) {

    all <- all %>%
      dplyr::filter(all$phone_nb == 0)

    all$location[all$location != '' & all$location != ' ' & all$location != 'Outside the region'] <- 1
    all$location[all$location == '' | all$location == ' ' | all$location == 'Outside the region'] <- 0

    contact_details_stats <- list(
      "Summary" = list(
        "No community contact" = ~qwraps2::n_perc(cmty_contact_avail == 0, prec),
        "No residence info" = ~qwraps2::n_perc(location == 0, prec)
        )
    )

    out <- format_summary_table(all, contact_details_stats, facility_name)
    out %>%
      kableExtra::kbl(booktabs = TRUE,
                      longtable = TRUE,
                      linesep = "",
                      align = c("c", "c"),
                      caption = "Number of participants without a community contact or residence information among those participants who do not have a phone number .") %>%
      kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
      kableExtra::row_spec(0, bold = TRUE) %>%
      kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
      kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

  }
}
all <- data.frame(baseline_data)
all$sx_vomit_evthing[is.na(all$sx_vomit_evthing)] <- 0
all$sx_unable_feed[is.na(all$sx_unable_feed)] <- 0
all$referral_cg <- ifelse(!is.na(all$referral_cg), all$referral_cg, 100)
all$referral_hf <- ifelse(!is.na(all$referral_hf), all$referral_hf, 100)
all["dx_severe"[!("dx_severe" %in% colnames(all))]] <- NA

all <- all %>%
  dplyr::mutate(danger_signs = ifelse(sx_convulsions == 1 | sx_lethargy == 1 | sx_vomit_evthing == 1 | sx_unable_feed == 1,
                                      1,
                                      0)) %>%
  dplyr::mutate(missing_clinical_presentation = ifelse(danger_signs == 0 & (sx_vomit == 0 | sx_vomit == 98) & (sx_less_feed == 0 | sx_less_feed == 98) & (sx_cough == 0 | sx_cough == 98) & (sx_difficulty_breath == 0 | sx_difficulty_breath == 98) & (sx_diarrhoea == 0 | sx_diarrhoea == 98) & (sx_fever == 0 | sx_fever == 98) & sx_var == 96,
                                                       1,
                                                       0)) %>%
  dplyr::mutate(missing_referral_cg = ifelse(referral_cg == 98 | referral_cg == 97 | referral_cg == 100,
                                             1,
                                             0)) %>%
  dplyr::mutate(missing_diagnosis = ifelse((dx == 999 & is.na(dx_oth)),
                                           1,
                                           0))
all <- all %>%
  dplyr::rowwise() %>%
  dplyr::mutate(cold = ifelse(2 %in% as.integer(unlist(strsplit(sx_var, split = ";"))),
                              1,
                              0))
all <- all %>%
  dplyr::rowwise() %>%
  dplyr::mutate(ear = ifelse(3 %in% as.integer(unlist(strsplit(sx_var, split = ";"))),
                             1,
                             0))
all <- all %>%
  dplyr::rowwise() %>%
  dplyr::mutate(eye = ifelse(4 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0))
all <- all %>%
  dplyr::rowwise() %>%
  dplyr::mutate(skin = ifelse(5 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0))
all <- all %>%
  dplyr::rowwise() %>%
  dplyr::mutate(other_symptoms = ifelse(99 %in% as.integer(unlist(strsplit(sx_var, split = ";"))), 1, 0))
clinical_presentation_statistics <- list(
  "Summary" = list(
    "Missing clinical presentation" = ~qwraps2::n_perc(missing_clinical_presentation == 1, prec),
    "Missing referral (caregiver)" = ~qwraps2::n_perc(missing_referral_cg == 1, prec),
    "Missing diagnosis" = ~qwraps2::n_perc(missing_diagnosis == 1, prec, na_rm = TRUE)
    )
)
out <- format_summary_table(all, clinical_presentation_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_missing_symptoms) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

\clearpage

Population

descriptive_statistics <- list(
  "Summary" = list(
    "0-59 days" = ~qwraps2::n_perc(yg_infant == 1, prec),
    "2-59 months" = ~qwraps2::n_perc(yg_infant == 0, prec)
    )
)
out <- format_summary_table(all, descriptive_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c"),
                  caption = tcap_age_category) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

\clearpage

r h2_clinical_presentation

summary_statistics <- list(
  "Summary" = list(
    "Convulsions" = ~qwraps2::n_perc(sx_convulsions == 1, prec),
    "Lethargy" = ~qwraps2::n_perc(sx_lethargy == 1, prec),
    "Vomit everything" = ~qwraps2::n_perc(sx_vomit_evthing == 1, prec),
    "Unable to feed" = ~qwraps2::n_perc(sx_unable_feed == 1, prec)
    )
)
out <- format_summary_table(all, summary_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c"),
                  caption = tcap_danger_signs) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list(
  "Summary" = list(
    "From caregiver" = ~qwraps2::n_perc(danger_signs == 1, prec),
    "From registry" = ~qwraps2::n_perc(dx_severe == 1, prec, na_rm = TRUE),
    "Presence agreement" = ~qwraps2::n_perc(danger_signs == 1 & dx_severe == 1, prec, na_rm = TRUE),
    "Absence agreement -" = ~qwraps2::n_perc(danger_signs == 0 & dx_severe == 0, prec, na_rm = TRUE)
    )
)
out <- format_summary_table(all, summary_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c"),
                  caption = tcap_danger_signs) %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list(
  "Summary" = list(
    "Respiratory problem" = ~qwraps2::n_perc(sx_cough == 1 | sx_difficulty_breath == 1, prec),
    "Cough" = ~qwraps2::n_perc(sx_cough == 1, prec),
    "Diff. breathing" = ~qwraps2::n_perc(sx_difficulty_breath == 1, prec),
    "Both" = ~qwraps2::n_perc(sx_cough == 1 & sx_difficulty_breath == 1, prec)
    )
)
out <- format_summary_table(all, summary_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  align = c("c", "c", "c", "c"),
                  linesep = "",
                  caption = "Respiratory symptoms") %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list(
  "Summary" = list(
    "Vomit" = ~qwraps2::n_perc(sx_vomit == 1, prec),
    "Difficult feeding" = ~qwraps2::n_perc(sx_less_feed == 1, prec),
    "Diarrhoea" = ~qwraps2::n_perc(sx_diarrhoea == 1, prec),
    "Fever" = ~qwraps2::n_perc(sx_fever == 1, prec),
    "Other" = ~qwraps2::n_perc(sx_var != 96, prec)
    )
)
out <- format_summary_table(all, summary_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c", "c"),
                  caption = "Non-respiratory major symptoms") %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
summary_statistics <- list(
  "Summary" = list(
    "Runny nose/cold" = ~qwraps2::n_perc(cold == 1, prec),
    "Ear" = ~qwraps2::n_perc(ear == 1, prec),
    "Eye" = ~qwraps2::n_perc(eye == 1, prec),
    "Skin" = ~qwraps2::n_perc(skin == 1, prec),
    "Other" = ~qwraps2::n_perc(other_symptoms == 1, prec)
    )
)
out <- format_summary_table(all, summary_statistics, facility_name)
out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE,
                  linesep = "",
                  align = c("c", "c", "c", "c", "c"),
                  caption = "Other symptoms") %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)

\clearpage

r pox_title_str

if (is_senegal) {
  cat(paste0("Les données affichées dans cette sous-section concernent uniquement la période d'intervention.\n\n"))
} else if (is_kenya) {
  cat(paste0("Data displayed in this subsection refer to the intervention period only.\n\n"))
}
all <- data.frame(post_intervention_data)
all <- data.frame(baseline_data)
all <- all %>%
    dplyr::mutate(spo2_yg_infant = ifelse(yg_infant == 1, spo2, NA)) %>%
    dplyr::mutate(spo2_older_children = ifelse(yg_infant == 0, spo2, NA))
all <- all %>%
  merge(y = facilities[,c("facility_id", "intervention")],
        by.x = 'fid',
        by.y = 'facility_id',
        all.x = TRUE) %>%
  dplyr::filter(intervention == 1 | intervention == 2)
pox_statistics <- list(
  "Facility" = list(
    "SpO2 (1-59 days)" = ~qwraps2::n_perc(spo2_yg_infant == 1,
                                     prec,
                                     na_rm = TRUE),
    "SpO2 (2-59 months)" = ~qwraps2::n_perc(spo2_older_children == 1,
                                     prec,
                                     na_rm = TRUE),
    "Temperature" = ~qwraps2::n_perc(temp == 1,
                                     prec,
                                     na_rm = TRUE)
    )
)

out <- format_summary_table(all,
                            pox_statistics,
                            facility_name)

out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE, 
                  linesep = "",
                  caption = "Pulse oximetry uptake") %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
pox_statistics <- list(
  "Facility" = list(
    "Recorded" = ~qwraps2::n_perc(spo2 == 1,
                                     prec,
                                     na_rm = TRUE),
    "Reported by caregiver" = ~qwraps2::n_perc(spo2_cg == 1,
                                     prec,
                                     na_rm = TRUE)
    )
)

out <- format_summary_table(all,
                            pox_statistics,
                            facility_name)

out %>% 
  kableExtra::kbl(booktabs = TRUE,
                  longtable = TRUE, 
                  linesep = "",
                  caption = "Pulse oximetry uptake") %>% 
  kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"),
                            font_size = table_fs) %>%
  kableExtra::row_spec(0, bold = TRUE) %>%
  kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
  kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
pox_values <- split(all$spo2_meas1, all$facility_name)

\clearpage

r referral_title_str

all <- data.frame(baseline_data)
#all$yg_infant <- ifelse(all$yg_infant == 0, "2-59 months", "2-59 days")
all$referral_cg <- ifelse(!is.na(all$referral_cg), all$referral_cg, 100)
all$referral_hf <- ifelse(!is.na(all$referral_hf), all$referral_hf, 100)
if (nrow(baseline_data) > 0) {
  summary_statistics <- list(
    "Facility" = list(
      "Caregiver" = ~qwraps2::n_perc(referral_cg == 1, prec),
      "Registry" = ~qwraps2::n_perc(referral_hf == 1, prec),
      "Either" = ~qwraps2::n_perc((referral_cg == 1) | (referral_hf == 1), prec),
      "Both" = ~qwraps2::n_perc((referral_cg == 1) & (referral_hf == 1), prec),
      "Unknown (caregiver)" = ~qwraps2::n_perc(referral_cg == 98 | referral_cg == 97 | referral_cg == 100, prec)
      )
  )
  out <- format_summary_table(all, summary_statistics, facility_name) 
  out %>% 
    kableExtra::kbl(booktabs = TRUE,
                    longtable = TRUE,
                    linesep = "") %>% 
    kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
    kableExtra::row_spec(0, bold = TRUE) %>%
    kableExtra::column_spec(2, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::column_spec(3, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::column_spec(4, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::column_spec(5, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
    kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}
if (nrow(baseline_data) > 0) {
  referral_data <- timci::extract_referrals(baseline_data)
  n_referrals <- nrow(referral_data)
  referral_pie_chart <- timci::generate_pie_chart(data.frame(group = c("Referred at Day 0", "Not referred at Day 0"), value = c(n_referrals, n_enrolled - n_referrals)))
  plot(referral_pie_chart)
}

\clearpage

r h2_diagnoses

r h3_pneumonia

if (nrow(baseline_data) > 0) {
  all <- data.frame(baseline_data)
  all$'has_severe_pneumonia' <- NA
  all$'has_nonsevere_pneumonia' <- NA
  all$'has_no_pneumonia' <- NA

  allcols <- colnames(all)
  if ("dx_pneumonia" %in% allcols){
    all$'has_severe_pneumonia' <- ifelse((all$dx_pneumonia == 1) & (all$dx_pneumonia_severity == 1), 1, 0)
    all$'has_nonsevere_pneumonia' <- ifelse((all$dx_pneumonia == 1) & (all$dx_pneumonia_severity > 1), 1, 0)
    all$'has_no_pneumonia' <- ifelse((all$dx_pneumonia == 0) | (all$dx_pneumonia_severity == 0), 1, 0)
  }
  if ("dx" %in% allcols){
    all$'has_severe_pneumonia' <- ifelse(is.na(all$'has_severe_pneumonia'), 
                                         ifelse(23 %in% as.integer(unlist(strsplit(all$dx, split = ";"))), 1, 0),
                                         all$'has_severe_pneumonia')
    all$'has_nonsevere_pneumonia' <- ifelse(is.na(all$'has_nonsevere_pneumonia'), 
                                            ifelse(24 %in% as.integer(unlist(strsplit(all$dx, split = ";"))), 1, 0),
                                            all$'has_nonsevere_pneumonia')
    all$'has_no_pneumonia' <- ifelse(is.na(all$'has_no_pneumonia'),
                                     ifelse((all$'has_severe_pneumonia' == 0) & (all$'has_nonsevere_pneumonia' == 0), 1, 0),
                                     all$'has_no_pneumonia')
  }

  summary_statistics <- list(
    "Summary" = list(
      "Severe pneumonia" = ~qwraps2::n_perc(has_severe_pneumonia == 1, prec),
      "Other pneumonia" = ~qwraps2::n_perc(has_nonsevere_pneumonia == 1, prec),
      "No pneumonia" = ~qwraps2::n_perc(has_no_pneumonia == 1, prec)
      )
  )
  out <- format_summary_table(all, summary_statistics, facility_name)
  out %>% 
    kableExtra::kbl(booktabs = TRUE,
                    longtable = TRUE,
                    linesep = "",
                    caption = tcap_pneumonia) %>% 
    kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
    kableExtra::row_spec(0, bold = TRUE) %>%
    kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
    kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}

\clearpage

Young infants

all <- data.frame(baseline_data) %>%
  dplyr::filter(yg_infant == 1)
all$referral_cg <- ifelse(!is.na(all$referral_cg),
                          all$referral_cg,
                          100)
all$referral_hf <- ifelse(!is.na(all$referral_hf),
                          all$referral_hf,
                          100)

Referral

if (nrow(baseline_data) > 0) {
  summary_statistics <- list(
    "Facility" = list(
      "Caregiver" = ~qwraps2::n_perc(referral_cg == 1, prec),
      "Registry" = ~qwraps2::n_perc(referral_hf == 1, prec),
      "Either" = ~qwraps2::n_perc((referral_cg == 1) | (referral_hf == 1), prec),
      "Both" = ~qwraps2::n_perc((referral_cg == 1) & (referral_hf == 1), prec),
      "Unknown (caregiver)" = ~qwraps2::n_perc(referral_cg == 98 | referral_cg == 97 | referral_cg == 100, prec)
      )
  )
  out <- format_summary_table(all, summary_statistics, facility_name) 
  out %>% 
    kableExtra::kbl(booktabs = TRUE,
                    longtable = TRUE,
                    linesep = "") %>% 
    kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
    kableExtra::row_spec(0, bold = TRUE) %>%
    kableExtra::column_spec(2, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::column_spec(3, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::column_spec(4, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::column_spec(5, color = ifelse(as.numeric(gsub("\\(([^()]*)%\\)|.", "\\1", x = out[, 1], perl = TRUE)) >= 10,
                                              "red",
                                              "black")) %>%
    kableExtra::row_spec(1, color = total_row_ft2, background = total_row_bg2, bold = TRUE) %>%
    kableExtra::row_spec(1:(nrow(out)/2) * 2, background = striped_row_bg)
}



\clearpage

r appendix_title

Indicators for Thursday's research country check-in

Weekly data from Thursday to Wednesday

if (!is.null(baseline_data)) {
    if (length(baseline_data) > 0 & nrow(baseline_data) > 0) {
       baseline_data %>%
        dplyr::mutate(Week = lubridate::floor_date(as.Date(date_visit),
                                                   "week",
                                                   week_start = getOption("lubridate.week.start", 4))) %>%
        dplyr::count(Week) %>%
        dplyr::mutate(csum = cumsum(n)) %>%
        dplyr::rename('Weekly recruitment' = 'n') %>%
        dplyr::rename('Cumulative recruitment' = 'csum') %>%
        kableExtra::kbl(booktabs = TRUE,
                        longtable = TRUE,
                        linesep = "",
                        align = c("l", "c", "c"),
                        caption = tcap_weekly_enrolment) %>% 
        kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
        kableExtra::row_spec(0, bold = TRUE) %>%
        kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg)
  }
}
if (!is.null(fu_var_cpy)) {
    if (length(fu_var_cpy) > 0 & nrow(fu_var_cpy) > 0) {
       fu_var_cpy %>%
        dplyr::filter(proceed_day7 == 1) %>%
        dplyr::mutate(Week = lubridate::floor_date(as.Date(date_call),
                                                   "week",
                                                   week_start = getOption("lubridate.week.start", 4))) %>%
        dplyr::count(Week) %>%
        dplyr::mutate(csum = cumsum(n)) %>%
        dplyr::rename('Weekly follow-up' = 'n') %>%
        dplyr::rename('Cumulative follow-up' = 'csum') %>%
        kableExtra::kbl(booktabs = TRUE,
                        longtable = TRUE,
                        linesep = "",
                        align = c("l", "c", "c"),
                        caption = tcap_weekly_day7fu) %>% 
        kableExtra::kable_styling(latex_options = c("HOLD_position", "repeat_header"), font_size = table_fs) %>%
        kableExtra::row_spec(0, bold = TRUE) %>%
        kableExtra::row_spec(1:(nrow(baseline_data)/2) * 2, background = striped_row_bg)
  }
}
facility_details <- TRUE
out <- lapply(1:nrow(facilities),
              function(i) {
                knitr::knit_child('rct_monitoring_report_facility_sub.Rmd',
                                  envir = environment(),
                                  quiet = TRUE)
                })
cat(unlist(out), sep = '\n')

\clearpage \listoftables

\clearpage \listoffigures




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