## ----setup, include = FALSE---------------------------------------------------
# The rule engine reads YAML, so only evaluate chunks when it is installed.
has_yaml <- requireNamespace("yaml", quietly = TRUE)
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  eval = has_yaml
)
library(DCC)

## ----data---------------------------------------------------------------------
csv <- tempfile(fileext = ".csv")
writeLines(c(
  "sid,score,q1,q2,q3",
  "S1,90,1,2,3",
  "S2,150,2,2,2",
  "S3,70,1,,3"
), csv)

## ----rules--------------------------------------------------------------------
rules_file <- tempfile(fileext = ".yaml")
writeLines(c(
  "checks:",
  "  - id: R001",
  "    type: range",
  "    variable: score",
  "    min: 0",
  "    max: 100",
  "    severity: fail",
  "  - id: D001",
  "    type: missing_items",
  "    items: [q1, q2, q3]",
  "    max_prop: 0.3"
), rules_file)

## ----detect-------------------------------------------------------------------
x     <- dcc_read(csv)
rules <- dcc_rules(rules_file)
found <- dcc_detect(x, rules, id_var = "sid")
found

## ----execute------------------------------------------------------------------
res <- dcc_execute(
  x, found,
  actions = list(R001 = "set_na", Q_MISSING_ITEMS = "flag"),
  id_var = "sid"
)
dcc_cleaned(res)

## ----audit--------------------------------------------------------------------
dcc_audit_log(res)

## ----report-------------------------------------------------------------------
report_path <- tempfile(fileext = ".html")
dcc_report(res, report_path)
file.exists(report_path)

## ----trace--------------------------------------------------------------------
dcc_trace(res, "S2", "score")

## ----rerun--------------------------------------------------------------------
check <- dcc_rerun(dcc_manifest(res))
check$reproduced

## ----chunked------------------------------------------------------------------
dcc_detect_chunked(csv, rules, chunk_size = 2L, id_var = "sid",
                   encoding = "UTF-8")

