Reading a variant's statements

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.

1 · The statement id decodes all three axes

Read the suffix left to right. Each segment answers a different question and points at the field that carries it.

VCV000012871.94-G-PATH-CP one statement id, read left to right VCV000012871.94 accession . version → the VCV / RCV record G · S Germline vs Somatic id -G- / -S- · proposition.type PATH classification = prop. type classification.name · proposition.type + .predicate CP aggregate level scv.quality.name · vcv / rcv id suffix
The same four-part shape applies to RCV ids (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:

LaneCodeProposition typeRoots
GPATHVariantPathogenicityProposition4,434,756
GNPClinvarNotProvidedProposition27,921
GDRClinvarDrugResponseProposition2,760
GOTHClinvarOtherProposition2,171
GRFClinvarRiskFactorProposition1,072
GASSOCClinvarAssociationProposition525
GAFFClinvarAffectsProposition331
GCDFSClinvarConflictingDataFromSubmitterProposition192
GPROTECTClinvarProtectiveProposition99
GCSClinvarConfersSensitivityProposition20
SONCOVariantOncogenicityProposition1,905
SSCIVariantClinicalSignificanceProposition1,317
Query — decode a variant's statement ids, with proposition type, quality, and classification
-- 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;
lane class_code level proposition_type quality classification G PATH CP VariantPathogenicityProposition criteria provided Pathogenic G PATH EP VariantPathogenicityProposition expert panel Pathogenic G PATH NOCP VariantPathogenicityProposition no assertion criteria provided Pathogenic G PATH root VariantPathogenicityProposition expert panel Pathogenic
2 · Two lanes — and the extra layer under Somatic

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.

GERMLINE9,157,780 · 99.9 % variation → proposition → statement direct: PATH + the custom types (see table above) classification.name carries the call SOMATIC7,871 · 0.09 % ONCO — direct, like germline SCI — adds evidence lines ↓ the only lane with an extra layer

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).

Column reference: scv scv SCI statement + tier VariantClinicalSignificance… parent proposition · the SCI claim Column reference: evidenceLine evidenceLine ClinvarSomaticEvidenceLine TR · DIAG · PROG specific impact · tier A/B · C/D proposition_id has_evidence_lines[] target_proposition_id
So Diagnostic, Prognostic and Therapeutic-response are not separate statement kinds under SCI — they are the targets of the SCI statement's evidence lines, naming which clinical impact each line is about. The tier lives on the evidence line, not the statement body.
Query — a somatic clinical-impact statement's specific impacts and tiers
-- 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;
evidence_target_proposition predicate tier n VariantDiagnosticProposition isDiagnosticInclusionCriterionFor Level A/B 987 VariantDiagnosticProposition isDiagnosticInclusionCriterionFor Level C/D 534 VariantPrognosticProposition associatedWithBetterOutcomeFor Level C/D 19 VariantPrognosticProposition associatedWithBetterOutcomeFor Level A/B 8 … 6 more rows
3 · Aggregate levels — the highest present contributes

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.

VCV…-G-PATH root · overall call = highest level present Precedence ↓ — highest present contributes -PGpractice guidelines · 4★ scv.quality.name = 'practice guidelines' -EPexpert panel · 3★ = 'expert panel' -CPcriteria provided · 1–2★ = 'criteria provided' -NOCPno assertion criteria · 0★ = 'no assertion criteria provided' -NOCLno classification · 0★ = 'no classification' Set apart — excluded from the main aggregate -FLAGflagged = 'flagged' PG & EP co-contribute
The root cites every child through 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.

Query — rank submissions by review level (the aggregate adopts the highest present)
-- 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;
review_status precedence n practice guidelines 5 2,503 expert panel 4 23,151 criteria provided 3 6,380,199 no assertion criteria provided 2 415,483 no classification 1 28,994 flagged 0 3,451

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.