"""Data structures for encoding the submission payload."""
from enum import Enum
import typing
from pydantic import BaseModel
from pydantic.config import ConfigDict
[docs]
class Assembly(Enum):
GRCH38 = "GRCh38"
HG38 = "hg38"
GRCH37 = "GRCh37"
HG19 = "hg19"
NCBI36 = "NCBI36"
HG18 = "hg18"
[docs]
class Chromosome(Enum):
CHR1 = "1"
CHR2 = "2"
CHR3 = "3"
CHR4 = "4"
CHR5 = "5"
CHR6 = "6"
CHR7 = "7"
CHR8 = "8"
CHR9 = "9"
CHR10 = "10"
CHR11 = "11"
CHR12 = "12"
CHR13 = "13"
CHR14 = "14"
CHR15 = "15"
CHR16 = "16"
CHR17 = "17"
CHR18 = "18"
CHR19 = "19"
CHR20 = "20"
CHR21 = "21"
CHR22 = "22"
CHRX = "X"
CHRY = "Y"
CHRMT = "MT"
[docs]
class VariantType(Enum):
INSERTION = "Insertion"
DELETION = "Deletion"
DUPLICATION = "Duplication"
TANDEM_DUPLICATIOn = "Tandem duplication"
COPY_NUMBER_LOSS = "copy number loss"
COPY_NUMBER_GAIN = "copy number gain"
INVERSION = "Inversion"
TRANSLOCATION = "Translocation"
COMPLEX = "Complex"
[docs]
class CitationDb(Enum):
"""Allowed values for a citation's `db` field.
The values of the enumeration map to the values used by the ClinVar submission API.
"""
PUBMED = "PubMed"
BOOKSHELF = "BookShelf"
DOI = "DOI"
PMC = "pmc"
[docs]
class ConditionDb(Enum):
OMIM = "OMIM"
MEDGEN = "MedGen"
ORPHANET = "Orphanet"
MESH = "MeSH"
HP = "HP"
MONDO = "MONDO"
[docs]
class MultipleConditionExplanation(Enum):
NOVEL_DISEASE = "Novel disease"
UNCERTAIN = "Uncertain"
CO_OCCURING = "Co-occurring"
[docs]
class AffectedStatus(Enum):
YES = "yes"
NO = "no"
UNKNOWN = "unknown"
NOT_PROVIDED = "not provided"
NOT_APPLICABLE = "not applicable"
[docs]
class AlleleOrigin(Enum):
GERMLINE = "germline"
SOMATIC = "somatic"
DE_NOVO = "de novo"
UNKNOWN = "unknown"
INHERITED = "inherited"
MATERNAL = "maternal"
PATERNAL = "paternal"
BIPARENTL = "biparental"
NOT_APPLICABLE = "not applicable"
[docs]
class ClinicalFeaturesAffectedStatus(Enum):
PRESENT = "present"
ABSENT = "absent"
NOT_TESTED = "not tested"
[docs]
class ClinicalFeaturesDb(Enum):
HP = "HP"
[docs]
class CollectionMethod(Enum):
CURATION = "curation"
LITERATURE_ONLY = "literature only"
REFERENCE_POPULATION = "reference population"
PROVIDER_INTERPRETATION = "provider interpretation"
PHENOTYPING_ONLY = "phenotyping only"
CASE_CONTROL = "case-control"
CLINICAL_TESTING = "clinical testing"
IN_VITRO = "in vitro"
IN_VIVO = "in vivo"
RESEARCH = "research"
NOT_PROVIDED = "not provided"
[docs]
class StructVarMethodType(Enum):
SNP_ARRAY = "SNP array"
OLIGO_ARRAY = "Oligo array"
READ_DEPTH = "Read depth"
PAIRED_END_MAPPING = "Paired-end mapping"
ONE_END_ANCHORED_ASSEMBLY = "One end anchored assembly"
SEQUENCE_ALIGNMENT = "Sequence alignment"
OPTICAL_MAPPING = "Optical mapping"
CURATED_PCR = "Curated,PCR"
[docs]
class ClinicalSignificanceDescription(Enum):
"""Allowed values for the ``clinicalSignificanceDescription``.
The values of the enumeration map to the values used by the ClinVar submission API.
"""
PATHOGENIC = "Pathogenic"
LIKELY_PATHOGENIC = "Likely pathogenic"
UNCERTAIN_SIGNIFICANCE = "Uncertain significance"
LIKELY_BENIGN = "Likely benign"
BENIGN = "Benign"
PATHOGENIC_LOW_PENETRANCE = "Pathogenic, low penetrance"
UNCERTAIN_RISK_ALLELE = "Uncertain risk allele"
LIKELY_PATHOGENIC_LOW_PENETRANCE = "Likely pathogenic, low penetrance"
ESTABLISHED_RISK_ALLELE = "Established risk allele"
LIKELY_RISK_ALLELE = "Likely risk allele"
AFFECTED = "affects"
ASSOCIATION = "association"
DRUG_RESPONSE = "drug response"
CONFERS_SENSITIVITY = "confers sensitivity"
PROTECTIVE = "protective"
OTHER = "other"
NOT_PROVIDED = "not provided"
[docs]
class ModeOfInheritance(Enum):
AUTOSOMAL_DOMINANT_INHERITANCE = "Autosomal dominant inheritance"
AUTOSOMAL_RECESSIVE_INHERITANCE = "Autosomal recessive inheritance"
MITOCHONDRIAL_INHERITANCE = "Mitochondrial inheritance"
SOMATIC_MUTATION = "Somatic mutation"
GENETIC_ANTICIPATION = "Genetic anticipation"
SPORADIC = "Sporadic"
SEX_LIMITED_AUTOSOMAL_DOMINANT = "Sex-limited autosomal dominant"
X_LINKED_RECESSIVE_INHERITANCE = "X-linked recessive inheritance"
X_LINKED_DOMINANT_INHERITANCE = "X-linked dominant inheritance"
Y_LINKED_INHERITANCE = "Y-linked inheritance"
OTHER = "Other"
X_LINKED_INHERITANCE = "X-linked inheritance"
CODOMINANT = "Codominant"
DEMIDOMINANT_INHERITANCE = "Semidominant inheritance"
AUTOSOMAL_UNKNOWN = "Autosomal unknown"
AUTOSOMAL_DOMINANT_INHERITANCE_WITH_MATERNAL_IMPRINTING = (
"Autosomal dominant inheritance with maternal imprinting"
)
AUTOSOMAL_DOMINANT_INHERITANCE_WITH_PATERNAL_IMPRINTING = (
"Autosomal dominant inheritance with paternal imprinting"
)
MULTIFACTORIAL_INHERITANCE = "Multifactorial inheritance"
UNKNOWN_MECHANISM = "Unknown mechanism"
OLIGOGENIC_INHERITANCE = "Oligogenic inheritance"
[docs]
class RecordStatus(Enum):
NOVEL = "novel"
UPDATE = "update"
[docs]
class ReleaseStatus(Enum):
PUBLIC = "public"
HOLD_UNTIL_PUBLISHED = "hold until published"
[docs]
class SubmissionClinvarDeletionAccessionSet(BaseModel):
model_config = ConfigDict(frozen=True)
accession: str
reason: typing.Optional[str] = None
[docs]
class SubmissionClinvarDeletion(BaseModel):
model_config = ConfigDict(frozen=True)
accessionSet: typing.List[SubmissionClinvarDeletionAccessionSet]
[docs]
class SubmissionChromosomeCoordinates(BaseModel):
model_config = ConfigDict(frozen=True)
alternateAllele: typing.Optional[str] = None
accession: typing.Optional[str] = None
assembly: typing.Optional[Assembly] = None
chromosome: typing.Optional[Chromosome] = None
innerStart: typing.Optional[int] = None
innerStop: typing.Optional[int] = None
outerStart: typing.Optional[int] = None
outerStop: typing.Optional[int] = None
referenceAllele: typing.Optional[str] = None
start: typing.Optional[int] = None
stop: typing.Optional[int] = None
variantLength: typing.Optional[int] = None
[docs]
class SubmissionVariantGene(BaseModel):
model_config = ConfigDict(frozen=True)
id: typing.Optional[int] = None
symbol: typing.Optional[str] = None
[docs]
class SubmissionVariant(BaseModel):
model_config = ConfigDict(frozen=True)
chromosomeCoordinates: typing.Optional[SubmissionChromosomeCoordinates] = None
copyNumber: typing.Optional[str] = None
gene: typing.Optional[typing.List[SubmissionVariantGene]] = None
hgvs: typing.Optional[str] = None
referenceCopyNumber: typing.Optional[int] = None
variantType: typing.Optional[VariantType] = None
[docs]
class SubmissionVariantSet(BaseModel):
model_config = ConfigDict(frozen=True)
variant: typing.List[SubmissionVariant]
[docs]
class SubmissionPhaseUnknownSet(BaseModel):
model_config = ConfigDict(frozen=True)
hgvs: str
variants: typing.List[SubmissionVariant]
[docs]
class SubmissionClinicalFeature(BaseModel):
model_config = ConfigDict(frozen=True)
clinicalFeaturesAffectedStatus: ClinicalFeaturesAffectedStatus
db: typing.Optional[ClinicalFeaturesDb] = None
id: typing.Optional[str] = None
name: typing.Optional[str] = None
[docs]
class SubmissionObservedIn(BaseModel):
model_config = ConfigDict(frozen=True)
affectedStatus: AffectedStatus
alleleOrigin: AlleleOrigin
collectionMethod: CollectionMethod
clinicalFeatures: typing.Optional[typing.List[SubmissionClinicalFeature]] = None
clinicalFeaturesComment: typing.Optional[str] = None
numberOfIndividuals: typing.Optional[int] = None
structVarMethodType: typing.Optional[StructVarMethodType] = None
[docs]
class SubmissionHaplotypeSet(BaseModel):
model_config = ConfigDict(frozen=True)
hgvs: str
variants: typing.List[SubmissionVariant]
starAlleleName: typing.Optional[str] = None
[docs]
class SubmissionDistinctChromosomesSet(BaseModel):
model_config = ConfigDict(frozen=True)
hgvs: str
#: Hast at least two elements
variants: typing.List[SubmissionVariant]
[docs]
class SubmissionHaplotypeSets(BaseModel):
model_config = ConfigDict(frozen=True)
haplotypeSet: typing.Optional[SubmissionHaplotypeSet] = None
haplotypeSingleVariantSet: typing.Optional[SubmissionHaplotypeSet] = None
[docs]
class SubmissionDiplotypeSet(BaseModel):
model_config = ConfigDict(frozen=True)
haplotypeSets: typing.List[SubmissionHaplotypeSets]
hgvs: str
starAlleleName: typing.Optional[str] = None
[docs]
class SubmissionCitation(BaseModel):
model_config = ConfigDict(frozen=True)
db: typing.Optional[CitationDb] = None
id: typing.Optional[str] = None
url: typing.Optional[str] = None
[docs]
class SubmissionAssertionCriteria(BaseModel):
model_config = ConfigDict(frozen=True)
db: typing.Optional[CitationDb] = None
id: typing.Optional[str] = None
url: typing.Optional[str] = None
[docs]
class SubmissionCondition(BaseModel):
model_config = ConfigDict(frozen=True)
db: typing.Optional[ConditionDb] = None
id: typing.Optional[str] = None
name: typing.Optional[str] = None
[docs]
class SubmissionDrugResponse(BaseModel):
model_config = ConfigDict(frozen=True)
db: typing.Optional[ConditionDb] = None
drugName: typing.Optional[str] = None
id: typing.Optional[str] = None
condition: typing.Optional[typing.List[SubmissionCondition]] = None
[docs]
class SubmissionConditionSet(BaseModel):
model_config = ConfigDict(frozen=True)
condition: typing.Optional[typing.List[SubmissionCondition]] = None
drugResponse: typing.Optional[typing.List[SubmissionDrugResponse]] = None
multipleConditionExplanation: typing.Optional[MultipleConditionExplanation] = None
[docs]
class SubmissionCompoundHeterozygoteSetVariantSet(BaseModel):
model_config = ConfigDict(frozen=True)
variantSet: typing.Optional[SubmissionVariantSet] = None
[docs]
class SubmissionCompoundHeterozygoteSet(BaseModel):
model_config = ConfigDict(frozen=True)
hgvs: str
# Must have two entries
variantSets: typing.List[SubmissionCompoundHeterozygoteSetVariantSet]
[docs]
class SubmissionClinicalSignificance(BaseModel):
model_config = ConfigDict(frozen=True)
clinicalSignificanceDescription: ClinicalSignificanceDescription
citation: typing.Optional[typing.List[SubmissionCitation]] = None
comment: typing.Optional[str] = None
customAssertionScore: typing.Optional[float] = None
dateLastEvaluated: typing.Optional[str] = None
explanationOfDrugResponse: typing.Optional[str] = None
explanationOfOtherClinicalSignificance: typing.Optional[str] = None
modeOfInheritance: typing.Optional[ModeOfInheritance] = None
[docs]
class SubmissionClinvarSubmission(BaseModel):
model_config = ConfigDict(frozen=True)
clinicalSignificance: SubmissionClinicalSignificance
conditionSet: SubmissionConditionSet
observedIn: typing.List[SubmissionObservedIn]
recordStatus: RecordStatus
clinvarAccession: typing.Optional[str] = None
compoundHeterozygoteSet: typing.Optional[SubmissionCompoundHeterozygoteSet] = None
diplotypeSet: typing.Optional[SubmissionDiplotypeSet] = None
distinctChromosomesSet: typing.Optional[SubmissionDistinctChromosomesSet] = None
#: Has at least two elements in `variants`
haplotypeSet: typing.Optional[SubmissionHaplotypeSet] = None
#: Has exactly one elements in `variants`
haplotypeSingleVariantSet: typing.Optional[SubmissionHaplotypeSet] = None
localID: typing.Optional[str] = None
localKey: typing.Optional[str] = None
phaseUnknownSet: typing.Optional[SubmissionPhaseUnknownSet] = None
variantSet: typing.Optional[SubmissionVariantSet] = None
[docs]
class SubmissionContainer(BaseModel):
"""Representation of the container for a submission."""
model_config = ConfigDict(frozen=True)
assertionCriteria: typing.Optional[SubmissionAssertionCriteria] = None
behalfOrgID: typing.Optional[int] = None
clinvarDeletion: typing.Optional[SubmissionClinvarDeletion] = None
clinvarSubmission: typing.Optional[typing.List[SubmissionClinvarSubmission]] = None
clinvarSubmissionReleaseStatus: typing.Optional[ReleaseStatus] = None
submissionName: typing.Optional[str] = None