One VCV (or RCV) statement id carries three axes — Germline vs Somatic, the proposition type, and the aggregate level — each mapped to a concrete field. Figures are from the 2026-10-18 release.
Read the suffix left to right. Each segment answers a different question and points at the field that carries it.
RCV…-G-PATH-CP). The accession groups the whole
variant; the three suffix segments are the axes you filter on.
The classification code is the proposition type, abbreviated. Each code is a shorthand enumeration of one proposition type — including the custom ones. The mapping is 1:1 and deterministic:
| Lane | Code | Proposition type | Roots |
|---|---|---|---|
| G | PATH | VariantPathogenicityProposition | 4,434,756 |
| G | NP | ClinvarNotProvidedProposition | 27,921 |
| G | DR | ClinvarDrugResponseProposition | 2,760 |
| G | OTH | ClinvarOtherProposition | 2,171 |
| G | RF | ClinvarRiskFactorProposition | 1,072 |
| G | ASSOC | ClinvarAssociationProposition | 525 |
| G | AFF | ClinvarAffectsProposition | 331 |
| G | CDFS | ClinvarConflictingDataFromSubmitterProposition | 192 |
| G | PROTECT | ClinvarProtectiveProposition | 99 |
| G | CS | ClinvarConfersSensitivityProposition | 20 |
| S | ONCO | VariantOncogenicityProposition | 1,905 |
| S | SCI | VariantClinicalSignificanceProposition | 1,317 |
-- the axes fall out of the id; join the proposition for its type, read quality + classification WITH prop AS ( -- the four proposition tables share one schema SELECT id, type FROM read_parquet('proposition*.parquet') ) SELECT regexp_extract(v.id, '-([GS])-', 1) AS lane, regexp_extract(v.id, '-[GS]-([A-Z]+)', 1) AS class_code, coalesce(nullif(regexp_extract(v.id,'-[GS]-[A-Z]+-?(.*)$',1),''),'root') AS level, p.type AS proposition_type, v.quality.name AS quality, v.classification.name AS classification FROM 'vcv.parquet' v LEFT JOIN prop p ON p.id = v.proposition_id WHERE v.id LIKE 'VCV000012871.%' ORDER BY level;
99.9 % of statements are germline, and germline is direct: variant → proposition → statement. Somatic is tiny (0.09 %) but one somatic kind — clinical impact (SCI) — has an extra layer worth knowing.
Somatic clinical impact (SCI) has a parent claim plus specific-impact evidence lines.
The SCI statement's own proposition is a VariantClinicalSignificanceProposition (the general
"has clinical significance" claim). Each of its evidence lines — the shared-PK evidenceLine table
(ClinvarSomaticEvidenceLine) — carries a target_proposition_id pointing at the
specific impact (therapeutic response / diagnostic / prognostic), and an evidenceOutcome
holding the AMP/ASCO/CAP tier (Level A/B = Tier I, Level C/D = Tier II; the
-T1/-T2 in the id).
-- every SCI evidence line, its specific-impact target proposition, and its tier
SELECT tp.type AS evidence_target_proposition, tp.predicate,
e.evidenceOutcome.name AS tier, count(*) n
FROM 'evidenceLine.parquet' e
JOIN 'propositionSomaticClinicalImpact.parquet' tp ON tp.id = e.target_proposition_id
GROUP BY 1, 2, 3 ORDER BY n DESC;
Within one lane + classification, the VCV is a small tree: a root carries the overall
call, and its children split the submissions by level. The aggregate adopts the classification of the
highest level present — so which level contributes is relative to the variant, not a fixed set. Level ←
scv.quality.name.
has_evidence_lines[] → evidence_items[], and each child cites
its SCVs the same way; the root cites zero SCVs. The call comes from the highest level that
has submissions: a variant whose best are criteria-provided contributes CP and ignores the
NOCP below it — but a variant whose best submissions are NOCP contributes
NOCP. 136,595 variants top out at NOCP; 7,529 at NOCL. Flagged
submissions are set apart.
PG and EP co-contribute. When a variant carries both a practice-guideline and an expert-panel submission (23 variants do), both are retained and contribute — the practice guideline is higher quality but does not mask or override the expert panel. The strict highest-present-wins masking applies below them: CP over NOCP over NOCL.
-- scv.quality.name IS the level; rank it to find each aggregate's contributing tier
SELECT s.quality.name AS review_status,
CASE s.quality.name
WHEN 'practice guidelines' THEN 5 WHEN 'expert panel' THEN 4
WHEN 'criteria provided' THEN 3 WHEN 'no assertion criteria provided' THEN 2
WHEN 'no classification' THEN 1 ELSE 0 END AS precedence,
count(*) n
FROM 'scv.parquet' s GROUP BY 1, 2 ORDER BY precedence DESC;
Every count, table, and query output here — including the id examples and the mapping table — is from the ClinVar-GKM 2026-10-18 release. Figures change between releases, so don't assume they are the latest. See Downloads → Parquet Files for current releases.