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-keyis the instrument run or flowcell ID — never a patient or sample identifier.--dateis the run date, your laboratory's own time axis.--fail-on failure(orwarning) 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.