Variant Shape
type: NodeShape
target class: Variant
comment: Validation constraints for genomics:Variant. Enforces required gene-symbol identity, presence of at least one stable identifier across the four supported registries (CAid, VRS, ClinVar, dbSNP), and presence of a data-quality tier (used by the D-QUALITY-TIER safety constraint on downstream VariantInterpretations).
property:
  path: geneSymbol
  datatype: string
  max count: 1
  min length: 1
  severity: Warning
  name: Gene Symbol
  message: Recommended: genomics:geneSymbol (HGNC approved symbol, e.g., 'BRCA2'). Variant remains valid via stable identifiers (CAid/VRS/ClinVar/dbSNP) or VCF coordinates (refAllele+altAllele+genomicStartEnd) when source data lacks gene context.
property:
  path: dataQualityTier
  min count: 1
  max count: 1
  in: ClinicalGrade
  in: ResearchGrade
  in: ConsumerGrade
  in: UnknownQuality
  severity: Violation
  name: Data Quality Tier
  message: Variant must declare genomics:dataQualityTier as one of the four published genomics:DataQualityTier named individuals (ClinicalGrade, ResearchGrade, ConsumerGrade, UnknownQuality). Required so the D-QUALITY-TIER safety constraint on downstream VariantInterpretations can be evaluated.
property:
  path: caId
  datatype: string
  max count: 1
  severity: Info
  name: ClinGen Allele Registry CAid
property:
  path: vrsId
  datatype: string
  max count: 1
  severity: Info
  name: GA4GH VRS Identifier
property:
  path: clinvarVariationId
  datatype: string
  max count: 1
  severity: Info
  name: ClinVar Variation ID
property:
  path: dbsnpRsId
  datatype: string
  max count: 1
  severity: Info
  name: dbSNP rsID
or:
  path: caId
  min count: 1
or:
  path: vrsId
  min count: 1
or:
  path: clinvarVariationId
  min count: 1
or:
  path: dbsnpRsId
  min count: 1
property:
  path: zygosity
  max count: 1
  severity: Warning
  name: Zygosity
  message: genomics:zygosity is recommended; absence forces downstream tools to assume Heterozygous
property:
  path: mosaicismFraction
  datatype: decimal
  max count: 1
  min inclusive: 0.0
  max inclusive: 1.0
  severity: Violation
  name: Mosaicism Fraction (VAF)
  message: genomics:mosaicismFraction, if present, must be an xsd:decimal between 0.0 and 1.0 inclusive (variant allele fraction)
property:
  path: variantAlleleFrequency
  datatype: decimal
  max count: 1
  min inclusive: 0.0
  max inclusive: 1.0
  severity: Violation
  name: Variant Allele Frequency
  message: genomics:variantAlleleFrequency, if present, must be an xsd:decimal between 0.0 and 1.0 inclusive (fraction of reads supporting the alternate allele)
property:
  path: refAllele
  datatype: string
  max count: 1
  severity: Info
  name: Reference Allele
property:
  path: altAllele
  datatype: string
  max count: 1
  severity: Info
  name: Alternate Allele
property:
  path: genomicStartEnd
  datatype: string
  max count: 1
  severity: Info
  name: Genomic Start-End Coordinates
property:
  path: somaticStatus
  max count: 1
  in: Germline
  in: Somatic
  in: UnknownSomaticStatus
  severity: Violation
  name: Somatic Status
  message: genomics:somaticStatus, if present, must be one of the three published genomics:SomaticStatus named individuals (Germline, Somatic, UnknownSomaticStatus)
message: Variant must carry at least one stable identifier among genomics:caId, genomics:vrsId, genomics:clinvarVariationId, or genomics:dbsnpRsId. HGVS strings alone are insufficient for reliable cross-database joins.

Variant Interpretation Shape
type: NodeShape
target class: VariantInterpretation
comment: Validation constraints for genomics:VariantInterpretation. Implements D-Q5 (each Interpretation is per-(variant, condition); cardinality 1..1 on both genomics:variantInterpreted and genomics:condition) and D-QUALITY-TIER (the safety constraint on Pathogenic / LikelyPathogenic classifications).
property:
  path: variantInterpreted
  or:
    class: Variant
  or:
    class: CopyNumberVariant
  or:
    class: Haplotype
  min count: 1
  max count: 1
  severity: Violation
  name: Variant Interpreted
  message: VariantInterpretation must reference exactly one Variant / CopyNumberVariant / Haplotype via genomics:variantInterpreted (D-Q5 — cardinality 1..1; multi-variant cases produce multiple Interpretation instances)
property:
  path: condition
  min count: 1
  max count: 1
  severity: Violation
  name: Associated Condition
  message: VariantInterpretation must reference exactly one condition via genomics:condition (D-Q5 — cardinality 1..1; multi-condition cases produce multiple Interpretation instances, one per condition)
property:
  path: acmgClassification
  min count: 1
  max count: 1
  in: Pathogenic
  in: LikelyPathogenic
  in: VUS
  in: LikelyBenign
  in: Benign
  severity: Violation
  name: ACMG Classification
  message: VariantInterpretation must declare genomics:acmgClassification as one of the five published genomics:AcmgClass named individuals (Pathogenic, LikelyPathogenic, VUS, LikelyBenign, Benign)
property:
  path: reviewStatus
  max count: 1
  in: NoAssertionProvided
  in: CriteriaNotProvided
  in: SingleSubmitter
  in: ConflictingSubmissions
  in: MultipleSubmittersNoConflict
  in: ExpertPanelReviewed
  in: PracticeGuideline
  severity: Warning
  name: Review Status
  message: genomics:reviewStatus, if present, must be one of the seven published genomics:ReviewStatus named individuals (NoAssertionProvided, CriteriaNotProvided, SingleSubmitter, ConflictingSubmissions, MultipleSubmittersNoConflict, ExpertPanelReviewed, PracticeGuideline). Recommended for advisory-engine trust weighting.
property:
  path: requiresConfirmation
  datatype: boolean
  max count: 1
  severity: Violation
  name: Requires Confirmation
  message: genomics:requiresConfirmation, if present, must be a single xsd:boolean
property:
  path: interpretedDate
  datatype: date
  max count: 1
  severity: Warning
  name: Interpretation Date
  message: genomics:interpretedDate (xsd:date) is recommended; needed for reclassification chronology
xone:
  path: acmgClassification
  not:
    in: Pathogenic
    in: LikelyPathogenic
xone:
  and:
    path: acmgClassification
    in: Pathogenic
    in: LikelyPathogenic
  and:
    or:
      path: variantInterpreted
      path: dataQualityTier
      has value: ClinicalGrade
    or:
      path: requiresConfirmation
      has value: true
severity: Violation
message: D-QUALITY-TIER safety constraint violated: this VariantInterpretation declares acmgClassification Pathogenic or LikelyPathogenic, but the referenced genomics:Variant is NOT genomics:ClinicalGrade tier AND genomics:requiresConfirmation is not true on this Interpretation. To resolve: EITHER promote the variant's genomics:dataQualityTier to genomics:ClinicalGrade (only valid if the underlying sequencing is CLIA/CAP/ISO15189-certified, >=30x coverage or validated panel-equivalent, with raw files retained), OR set genomics:requiresConfirmation true on this Interpretation. Consumer-grade pathogenic calls MUST NOT auto-apply care recommendations regardless of issuer trust.

Haplotype Shape
type: NodeShape
target class: Haplotype
comment: Validation constraints for genomics:Haplotype. The clinically actionable identifier in pharmacogenomics (PharmVar star alleles) and HLA typing is the star-allele symbol; this is required. Component variants are recommended for full provenance but optional in v1-draft.0.1.
property:
  path: starAlleleSymbol
  datatype: string
  min count: 1
  max count: 1
  min length: 1
  severity: Violation
  name: Star Allele Symbol
  message: Haplotype must carry exactly one non-empty genomics:starAlleleSymbol (PharmVar/HLA nomenclature, e.g. 'CYP2C19*2')
property:
  path: hasComponent
  or:
    class: Variant
  or:
    class: CopyNumberVariant
  severity: Warning
  name: Component Variants
  message: genomics:hasComponent is recommended; absence prevents downstream tools from auditing which constituent variants define this star allele. When present, each component must be a genomics:Variant or genomics:CopyNumberVariant.

Diplotype Shape
type: NodeShape
target class: Diplotype
comment: Validation constraints for genomics:Diplotype. A diplotype is, by definition, a pair of haplotypes — the ontology models this with two distinct properties (genomics:hapA, genomics:hapB) rather than a single 2..2 cardinality property. Each must be present exactly once.
property:
  path: hapA
  class: Haplotype
  min count: 1
  max count: 1
  severity: Violation
  name: Haplotype A
  message: Diplotype must carry exactly one genomics:hapA referencing a genomics:Haplotype
property:
  path: hapB
  class: Haplotype
  min count: 1
  max count: 1
  severity: Violation
  name: Haplotype B
  message: Diplotype must carry exactly one genomics:hapB referencing a genomics:Haplotype (a diplotype is by definition a pair of haplotypes)
property:
  path: diplotypeNotation
  datatype: string
  max count: 1
  severity: Warning
  name: Diplotype Notation
  message: genomics:diplotypeNotation (e.g., '*1/*2') is recommended for direct matching against CPIC/DPWG guideline tables

Copy Number Variant Shape
type: NodeShape
target class: CopyNumberVariant
comment: Validation constraints specific to genomics:CopyNumberVariant. Applies VariantShape's constraints (geneSymbol, dataQualityTier, at least one stable ID) explicitly via sh:node, and adds the CNV-specific requirements: integer copy number, interval coordinates with reference.
node: Variant Shape
property:
  path: copyNumber
  datatype: integer
  min count: 1
  max count: 1
  min inclusive: 0
  severity: Violation
  name: Copy Number
  message: CopyNumberVariant must carry exactly one genomics:copyNumber as a non-negative xsd:integer (0 = homozygous deletion, 1 = heterozygous deletion, 3+ = duplication/amplification)
property:
  path: cnvIntervalRef
  datatype: string
  min count: 1
  max count: 1
  min length: 1
  severity: Violation
  name: CNV Interval Reference
  message: CopyNumberVariant must carry exactly one genomics:cnvIntervalRef (reference contig name or accession, e.g., 'NC_000013.11')
property:
  path: cnvIntervalStart
  datatype: integer
  min count: 1
  max count: 1
  min inclusive: 1
  severity: Violation
  name: CNV Interval Start
  message: CopyNumberVariant must carry exactly one genomics:cnvIntervalStart as a positive xsd:integer (1-based, inclusive)
property:
  path: cnvIntervalEnd
  datatype: integer
  min count: 1
  max count: 1
  min inclusive: 1
  severity: Violation
  name: CNV Interval End
  message: CopyNumberVariant must carry exactly one genomics:cnvIntervalEnd as a positive xsd:integer (1-based, inclusive)

Submitter Assertion Shape
type: NodeShape
target class: SubmitterAssertion
comment: Validation constraints for genomics:SubmitterAssertion (e.g., one ClinVar SCV record). Requires submitter identity and the asserted ACMG classification — these are what makes the assertion auditable. Note: the v1-draft.0.1 vocabulary does NOT define an assertionDate property nor a forward reference to the parent VariantInterpretation; the inverse link is genomics:aggregatedFrom (Interpretation→Assertion), which is the authoritative direction.
property:
  path: submitter
  datatype: string
  min count: 1
  max count: 1
  min length: 1
  severity: Violation
  name: Submitter
  message: SubmitterAssertion must carry exactly one non-empty genomics:submitter (lab/consortium/expert-panel name, e.g., 'ENIGMA', 'Ambry Genetics')
property:
  path: assertedClassification
  min count: 1
  max count: 1
  in: Pathogenic
  in: LikelyPathogenic
  in: VUS
  in: LikelyBenign
  in: Benign
  severity: Violation
  name: Asserted ACMG Classification
  message: SubmitterAssertion must declare genomics:assertedClassification as one of the five published genomics:AcmgClass named individuals
property:
  path: scvAccession
  datatype: string
  max count: 1
  severity: Warning
  name: SCV Accession
  message: genomics:scvAccession is recommended for ClinVar-sourced submissions (audit trail to the original SCV record)
property:
  path: submitterCategory
  max count: 1
  severity: Info
  name: Submitter Category
  message: genomics:submitterCategory is suggested; drives review-status weighting in the aggregate

Pedigree Shape
type: NodeShape
target class: Pedigree
comment: Validation constraints for genomics:Pedigree. A pedigree must have exactly one proband (the index patient who brought the family to attention) and at least one member (the proband counts).
property:
  path: proband
  class: PedigreeMember
  min count: 1
  max count: 1
  severity: Violation
  name: Proband
  message: Pedigree must reference exactly one genomics:proband (the index patient who brought the family to clinical attention)
property:
  path: hasMember
  class: PedigreeMember
  min count: 1
  severity: Violation
  name: Pedigree Members
  message: Pedigree must reference at least one genomics:hasMember (the proband should be included)

Pedigree Member Shape
type: NodeShape
target class: PedigreeMember
comment: Validation constraints for genomics:PedigreeMember. The relationship-to-proband role is required and drawn from the closed HL7 v3 RoleCode-aligned named individuals declared in genomics.ttl.
property:
  path: relativeRole
  min count: 1
  max count: 1
  in: Proband
  in: MTH
  in: FTH
  in: SIS
  in: BRO
  in: DAU
  in: SON
  in: MAUNT
  in: MUNCLE
  in: PAUNT
  in: PUNCLE
  in: MGRMTH
  in: MGRFTH
  in: PGRMTH
  in: PGRFTH
  in: MCOUSN
  in: PCOUSN
  in: NIECE
  in: NEPHEW
  severity: Violation
  name: Relationship Role
  message: PedigreeMember must declare genomics:relativeRole as one of the published HL7 v3 RoleCode-aligned RelationshipRole named individuals (Proband, MTH, FTH, SIS, BRO, DAU, SON, MAUNT, MUNCLE, PAUNT, PUNCLE, MGRMTH, MGRFTH, PGRMTH, PGRFTH, MCOUSN, PCOUSN, NIECE, NEPHEW)
property:
  path: relativeSex
  datatype: string
  max count: 1
  in: male
  in: female
  in: unknown
  severity: Warning
  name: Biological Sex
  message: genomics:relativeSex is recommended (one of 'male', 'female', 'unknown'); needed for X-linked / Y-linked inheritance reasoning
property:
  path: carrierStatus
  max count: 1
  in: PositiveAffected
  in: PositiveUnaffected
  in: Negative
  in: NotTested
  in: Obligate
  severity: Violation
  name: Carrier Status
  message: genomics:carrierStatus, if present, must be one of the five published genomics:CarrierStatus named individuals (PositiveAffected, PositiveUnaffected, Negative, NotTested, Obligate)

Genetic Test Shape
type: NodeShape
target class: GeneticTest
comment: Validation constraints for genomics:GeneticTest (FHIR DiagnosticReport-aligned). Requires test type. Note: testDate is not yet a declared property in v1-draft.0.1; chronology comes from prov:generatedAtTime.
property:
  path: testType
  min count: 1
  max count: 1
  in: SingleGeneTest
  in: GenePanelTest
  in: ExomeSequencing
  in: GenomeSequencing
  in: ChromosomalMicroarray
  in: KaryotypeAnalysis
  in: MLPA
  in: RepeatExpansionTest
  in: MethylationStudy
  in: RNASequencing
  severity: Violation
  name: Genetic Test Type
  message: GeneticTest must declare genomics:testType as one of the ten published genomics:TestType named individuals (SingleGeneTest, GenePanelTest, ExomeSequencing, GenomeSequencing, ChromosomalMicroarray, KaryotypeAnalysis, MLPA, RepeatExpansionTest, MethylationStudy, RNASequencing)
property:
  path: genePanel
  datatype: string
  max count: 1
  severity: Warning
  name: Gene Panel
  message: genomics:genePanel is recommended; the analytical scope distinguishes a clinically meaningful negative result from absence-of-evidence
property:
  path: performingLab
  datatype: string
  max count: 1
  severity: Warning
  name: Performing Laboratory
  message: genomics:performingLab is recommended for provenance audit

Genetic Test Order Shape
type: NodeShape
target class: GeneticTestOrder
comment: Validation constraints for genomics:GeneticTestOrder (FHIR ServiceRequest-aligned). Requires order status (closed enumeration over the four OrderStatus named individuals) and order timestamp (genomics:orderedAt).
property:
  path: orderStatus
  min count: 1
  max count: 1
  in: OrderPending
  in: OrderInProgress
  in: OrderResulted
  in: OrderCancelled
  severity: Violation
  name: Order Status
  message: GeneticTestOrder must declare genomics:orderStatus as one of the four published genomics:OrderStatus named individuals (OrderPending, OrderInProgress, OrderResulted, OrderCancelled)
property:
  path: orderedAt
  datatype: dateTime
  min count: 1
  max count: 1
  severity: Violation
  name: Ordered At
  message: GeneticTestOrder must carry exactly one genomics:orderedAt xsd:dateTime
property:
  path: resultedIn
  class: GeneticTest
  max count: 1
  severity: Info
  name: Resulted In
  message: genomics:resultedIn, if present, must reference exactly one genomics:GeneticTest. When orderStatus is OrderResulted, this link should be populated (conditional check lives in cascade-cli importer).

Sequencing Run Shape
type: NodeShape
target class: SequencingRun
comment: Validation constraints for genomics:SequencingRun. Coverage depth, sequencing technology, and reference genome are required — these three drive the data-quality tier inference upstream of the D-QUALITY-TIER safety constraint. Laboratory certification is optional but, when present, must be one of the four published values.
property:
  path: coverageDepth
  datatype: decimal
  min count: 1
  max count: 1
  min inclusive: 0.0
  severity: Violation
  name: Coverage Depth
  message: SequencingRun must carry exactly one genomics:coverageDepth as a non-negative xsd:decimal (e.g., 30.0 for typical clinical WGS). Required for ClinicalGrade tier inference (>=30x WGS or validated panel-equivalent).
property:
  path: sequencingTechnology
  min count: 1
  max count: 1
  in: ShortReadIllumina
  in: LongReadONT
  in: LongReadPacBio
  in: Mixed
  in: GenotypingArray
  severity: Violation
  name: Sequencing Technology
  message: SequencingRun must declare genomics:sequencingTechnology as one of the five published genomics:SequencingTechnology named individuals (ShortReadIllumina, LongReadONT, LongReadPacBio, Mixed, GenotypingArray). GenotypingArray auto-tags ConsumerGrade in the importer.
property:
  path: laboratoryCertification
  max count: 1
  in: CLIA
  in: CAP
  in: ISO15189
  in: Uncertified
  severity: Violation
  name: Laboratory Certification
  message: genomics:laboratoryCertification, if present, must be one of the four published genomics:LaboratoryCertification named individuals (CLIA, CAP, ISO15189, Uncertified)
property:
  path: variantCallerVersion
  datatype: string
  max count: 1
  severity: Warning
  name: Variant Caller Version
  message: genomics:variantCallerVersion is recommended (e.g., 'GATK 4.5.0', 'DeepVariant 1.6'); needed to distinguish caller-driven differences from biological ones
property:
  path: sequencingDate
  datatype: date
  max count: 1
  severity: Warning
  name: Sequencing Date

Raw File Shape
type: NodeShape
target class: RawFile
comment: Validation constraints for genomics:RawFile pointer-and-hash records. Cascade does NOT ingest the bytes — only the manifest. Required: format (closed enum over seven FileFormat values), SHA-256 hash for integrity, opaque file location URI, and the reference genome the file is aligned against.
property:
  path: fileFormat
  min count: 1
  max count: 1
  in: BAM
  in: CRAM
  in: FASTQ
  in: gVCF
  in: VCF
  in: BCF
  in: OtherFileFormat
  severity: Violation
  name: File Format
  message: RawFile must declare genomics:fileFormat as one of the seven published genomics:FileFormat named individuals (BAM, CRAM, FASTQ, gVCF, VCF, BCF, OtherFileFormat). Hot tier (in-pod, encrypted): VCF/gVCF/BCF. Cold tier (out-of-pod, referenced): BAM/CRAM/FASTQ.
property:
  path: fileHashSHA256
  datatype: string
  min count: 1
  max count: 1
  min length: 64
  max length: 64
  pattern: ^[0-9a-f]{64}$
  severity: Violation
  name: File SHA-256 Hash
  message: RawFile must carry exactly one genomics:fileHashSHA256 as a 64-character lowercase hex SHA-256 digest. Required for byte-on-disk integrity verification.
property:
  path: fileLocation
  datatype: anyURI
  min count: 1
  max count: 1
  severity: Violation
  name: File Location URI
  message: RawFile must carry exactly one genomics:fileLocation xsd:anyURI (opaque pointer to where the bytes live: s3://, https://, file://, vendor-specific). Cascade does NOT validate or fetch this URI.
property:
  path: referenceGenome
  datatype: string
  min count: 1
  max count: 1
  min length: 1
  severity: Violation
  name: Reference Genome
  message: RawFile must carry exactly one non-empty genomics:referenceGenome (e.g., 'GRCh38', 'GRCh37', 'T2T-CHM13'). Required for any downstream coordinate-based analysis.
property:
  path: fileSizeBytes
  datatype: long
  max count: 1
  min inclusive: 0
  severity: Violation
  name: File Size (Bytes)
  message: genomics:fileSizeBytes, if present, must be a non-negative xsd:long (BAM/CRAM/FASTQ files routinely exceed 2^31 bytes)
property:
  path: htsgetEndpoint
  datatype: anyURI
  max count: 1
  severity: Info
  name: htsget Endpoint
  message: genomics:htsgetEndpoint is optional; when present, enables GA4GH htsget streaming of BAM/CRAM regions on demand

PhenotypicObservationShape
type: NodeShape
target class: PhenotypicObservation
property:
  path: hpoTerm
  min count: 1
  datatype: string
property:
  path: phenotypePresence
  min count: 1
  max count: 1
  class: PhenotypePresenceValue