---
title: "Getting Started with rCoreGage"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Getting Started with rCoreGage}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

## Installation

```r
install.packages("rCoreGage")
```

## Create a new project

```r
rCoreGage::create_project(
  name = "TRIAL_ABC",
  path = "C:/Projects"
)
```

This creates the full folder structure and copies all required templates.

## Project structure created

```
TRIAL_ABC/
  TRIAL_ABC.Rproj
  run_coregage.R
  rules/
    config/
      rule_registry.xlsx   <- fill in your checks here
      project_config.R     <- paths auto-filled
    trial/                 <- write trial-level check scripts here
    study/                 <- write study-level check scripts here
  inputs/                  <- drop domain data files here
  outputs/
    reports/               <- Excel reports written here
    feedback/
      DM/   MW/   SDTM/   ADAM/   <- reviewers place feedback here
```

## Define checks in rule_registry.xlsx

Open `rules/config/rule_registry.xlsx`. It has two sheets: **Trial** and **Study**.

| Column | Purpose |
|--------|---------|
| Category | Domain grouping e.g. Adverse Events |
| Subcategory | Check type e.g. Date Checks |
| ID | Unique check identifier e.g. AECHK001 |
| Active | Yes = run, No = skip |
| DM_Report | Yes = include in DM report |
| MW_Report | Yes = include in Medical Writing report |
| SDTM_Report | Yes = include in SDTM report |
| ADAM_Report | Yes = include in ADaM report |
| Rule_Set | Name of the .R file e.g. AE |
| Description | Plain English check description |
| Notes | Free text notes |

## Write a check script

Copy `rules/trial/Check_Template.R`, rename it to match your Rule_Set,
and implement your check logic:

```r
check_AE <- function(state, cfg) {
  domains      <- state$domains
  active_rules <- state$active_rules

  if (isTRUE(active_rules["AECHK001"])) {
    AECHK001 <- domains$ae |>
      dplyr::filter(is.na(AESEV) | trimws(AESEV) == "") |>
      dplyr::mutate(
        subj_id     = USUBJID,
        vis_id      = NA_real_,
        description = paste0("AESEV missing for: ", AETERM)
      ) |>
      dplyr::select(subj_id, vis_id, description)

    state <- collect_findings(state, AECHK001, id = "AECHK001")
  }
  state
}
```

## Run

```r
source("run_coregage.R")
```

Reports are written to `outputs/reports/`.

## Feedback loop

1. Send `DM_issues.xlsx` to the Data Manager
2. They add notes in the REVIEW NOTE column and update STATUS
3. They save the file to `outputs/feedback/DM/`
4. Re-run `source("run_coregage.R")`
5. Feedback is merged back into the next report automatically
