Skip to content

Run QC monitoring

Aver trends run-level QC metrics for each registered pipeline and evaluates every new run against your laboratory's own control limits — the continual-monitoring habit of clinical chemistry (Levey-Jennings charts, Westgard-style rules), applied to sequencing runs. Aver never supplies a threshold: your laboratory sets the limits, justifies them, and records every decision.

Only metric names and numbers are sent. There is no field anywhere for a sample identifier, and values that are not numbers are rejected outright.

Pushing a run

From the machine that already has your run's QC output:

# From a MultiQC report: per-sample values are averaged locally,
# sample names are dropped before anything leaves the machine.
aver qc push --run-key 260930_A01452_0142 --date 2026-09-30 \
  --multiqc results/multiqc_data/multiqc_data.json

# From DRAGEN's own *_metrics.csv files (file or directory, repeatable):
# run-level rows only — per-read-group and per-sample rows never leave.
aver qc push --run-key 260930_A01452_0142 --date 2026-09-30 \
  --dragen-metrics results/metrics/

# Or from your own numbers:
aver qc push --run-key 260930_A01452_0142 --date 2026-09-30 \
  --metrics qc.json       # {"q30_rate": 91.2, "median_coverage": 418}
aver qc push --run-key 260930_A01452_0142 --date 2026-09-30 \
  --metric q30_rate=91.2 --metric median_coverage=418
  • --run-key is the instrument run or flowcell ID — never a patient or sample identifier.
  • --date is the run date, your laboratory's own time axis.
  • --fail-on failure (or warning) makes the command exit 2 when a flag of that level fires, for use in your pipeline's automation.

QC history is append-only: pushing the identical run again is a no-op; pushing different numbers for an existing run key is refused. There is no edit or delete.

Control limits

Limits live in the web app (Run QC → Control limits) and are versioned: a change creates a new version with a written justification, recorded in the audit log, and needs the Approver role. Each metric takes any subset of:

Field Rule it feeds
mean + sd the statistical rules below
lower / upper fixed bounds (qc-range)

“Suggest from recent runs” computes mean and SD over your own last runs as a starting point. It is a suggestion to review and justify, never an automatic limit.

Rules

Every flag names the rule that raised it and carries the numbers behind the decision. At most one flag fires per metric per run; the strongest rule wins.

Rule Fires when Level
qc-range value outside the fixed [lower, upper] bounds failure
qc-1-3s more than 3 SD from your mean failure
qc-2-2s this run and the previous run both more than 2 SD out, same side failure
qc-1-2s more than 2 SD from your mean warning

Failures notify through your existing channels (email, Slack, webhooks). Flags are acknowledged or resolved with a note, and every disposition lands in the audit log. Runs are evaluated against the limit version active at ingest; that pairing is the record, so changing limits later never rewrites history.

In your evidence packs

Evidence packs generated for a window that holds QC data include a Run QC summary: the runs received, the limit versions in force with their written justifications, and every flag with the rule that raised it and its recorded disposition — in the same deterministic, signed, verifiable document as the rest of your validation record. Windows without QC data render exactly as before.

Framing

Aver produces the trends, flags and records; your laboratory and its accreditor decide what the limits are and what a flag means for a run.