36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import List
|
|
|
|
from genomic_consultant.acmg.tagger import ACMGConfig, tag_variant
|
|
from genomic_consultant.panels.panels import GenePanel
|
|
from genomic_consultant.store.query import GenomicStore
|
|
from genomic_consultant.utils.models import FilterConfig, SuggestedClassification, Variant
|
|
|
|
|
|
@dataclass
|
|
class PanelVariantResult:
|
|
variant: Variant
|
|
acmg: SuggestedClassification
|
|
|
|
|
|
@dataclass
|
|
class PanelAnalysisResult:
|
|
individual_id: str
|
|
panel: GenePanel
|
|
variants: List[PanelVariantResult]
|
|
|
|
|
|
def run_panel_variant_review(
|
|
individual_id: str,
|
|
panel: GenePanel,
|
|
store: GenomicStore,
|
|
acmg_config: ACMGConfig,
|
|
filters: FilterConfig | None = None,
|
|
) -> PanelAnalysisResult:
|
|
"""Query variants for a panel and attach ACMG evidence suggestions."""
|
|
variants = store.get_variants_by_gene(individual_id=individual_id, genes=panel.genes, filters=filters)
|
|
enriched = [PanelVariantResult(variant=v, acmg=tag_variant(v, acmg_config)) for v in variants]
|
|
return PanelAnalysisResult(individual_id=individual_id, panel=panel, variants=enriched)
|