VariantCallAcceptanceChecker

Variant Call Acceptance

Liquid Biopsy жидкостная биопсия cfDNA ctDNA CTC exosomes NGS qPCR
Открыть подборку

Описание утилиты: Variant Call Acceptance

Variant Call Acceptance Checker — Независимая приемка вызовов генетических вариантов

ℹ️  Утилита выполняет многопараметрическую верификацию raw variant calls согласно CAP/CLIA, FDA NGS guidance и GATK Best Practices:
     • Depth Filtering: Контекстно-зависимые пороги глубины (≥20× герминальные, ≥100× соматические).
     • Allele Balance Check: Верификация ожидаемого соотношения аллелей для гетерозиготных и соматических вызовов.
     • Artifact Detection: Выявление strand bias (FS), low QualByDepth (QD) и других позиционных артефактов.
     • Mapping & Base Quality: Контроль качества выравнивания и секвенирования на уровне отдельных прочтений.
     • Control Sample Check: Автоматическая фильтрация вариантов, обнаруженных в негативных контролях.
     • Problematic Regions: Флагирование вызовов в гомополимерах и сегментных дупликациях.

⚠️  ВАЖНО: 
     • Variant caller фильтры НЕДОСТАТОЧНЫ. Независимая верификация обязательна для клинических тестов.
     • Strand bias (FS > 60) — самый частый индикатор ложноположительного SNV.
     • Indels в гомополимерах имеют FP-rate до 50% без дополнительных фильтров.
     • Вариант в негативном контроле = системная проблема. Все такие вызовы должны быть отклонены.

Использование:
  VariantCallAcceptanceChecker.exe                            → демо-режим (вывод в консоль)
  VariantCallAcceptanceChecker.exe input.csv output.json      → оценка ваших данных

Формат input.csv:
SampleID,VariantID,VariantType,Context,TotalDepth,MinDepth_Germline,MinDepth_Somatic,AlleleBalance,MinAlleleBalance_Het,MaxAlleleBalance_Het,MappingQuality,MinMappingQuality,BaseQuality,MinBaseQuality,StrandBias_FS,MaxStrandBias_FS,ReadPositionBias_QD,MinQD,GenotypeQuality_GQ,MinGenotypeQuality,InControlSample,InGNomAD_PassFilter,CallerFilter,IsHomopolymerRegion,IsSegmentalDuplication

Пример:
  WES-001,chr7:55249063:G:T,SNV,Germline,85,20,100,0.48,0.30,0.70,60,40,35,20,2.1,60,18.5,2.0,99,20,false,true,PASS,false,false

📍 Область применения (Usage Where):
     • Клинические NGS-лаборатории: Gate между variant calling и аннотацией.
     • Валидация биоинформатических пайплайнов: Подтверждение эффективности фильтров.
     • Жидкая биопсия: Строгий QC соматических вызовов при низкой VAF.
     • Исследовательские проекты: Обеспечение высокого качества датасетов для публикации.

— ЗАЧЕМ ЭТО НУЖНО?
Variant callers оптимизированы под чувствительность, а не специфичность.
Без дополнительных фильтров 5-20% вызовов являются техническими артефактами.
Каждый ложноположительный вариант, попавший в аннотацию, расходует время эксперта и может привести к ошибочному заключению.
Независимый acceptance check — второй барьер безопасности после самого caller'а.

⚠️  КРИТИЧЕСКИ ВАЖНО:
• Depth ≥ Context-Specific Min: Герминальные ≥20×, соматические ≥100× (для VAF <5%).
• Strand Bias FS ≤ 60 (germline) / ≤ 200 (somatic): Превышение = артефакт.
• QD ≥ 2.0: Низкий QD = вариант не поддерживается качеством баз.
• GQ ≥ 20: Ниже = неуверенный генотип.
• In Control Sample = False: ANY variant in negative control = FILTERED.
• Homopolymer Indels: Требуют ручной проверки или ортогонального подтверждения.

Ключевые особенности утилиты:
• Девятипараметрическая оценка качества вызова
• Контекстно-зависимые пороги (соматический vs герминальный)
• Автоматическая детекция проблемных геномных регионов
• Трёхуровневая классификация (Accepted / Review Required / Filtered)
• Соответствие GATK Best Practices и CAP/CLIA

Критические параметры:
• Total Depth: ≥ Context-specific minimum
• Allele Balance: Within expected range
• Mapping Quality: ≥ 40
• Strand Bias (FS): ≤ Threshold
• QualByDepth (QD): ≥ 2.0
• Genotype Quality (GQ): ≥ 20
• Negative Control: Not present
• Caller Filter: PASS (or reviewed)

💡 Советы по использованию:
1. Пороги по типу варианта: Indels требуют более строгих FS/QD, чем SNVs. Настройте отдельно.
2. Панель нормалей (PoN): Используйте PoN из ≥40 образцов для фильтрации рекуррентных артефактов.
3. Ортогональная валидация: Для соматических вызовов с VAF <5% подтверждайте ddPCR или amplicon-seq.
4. Тренды артефактов: Мониторьте % filtered по типам для выявления деградации реагентов/прибора.
5. Интеграция: Запускайте чекер автоматически после variant calling, до аннотации.

⚠️ Примечание: Данная утилита проверяет ТЕХНИЧЕСКОЕ КАЧЕСТВО вызова, а не биологическую значимость варианта. Технически качественный вызов может быть доброкачественным полиморфизмом. Биологическая интерпретация выполняется на следующих этапах (VariantClassificationGateChecker, VariantReportabilityRulesChecker).

input.csv

SampleID,VariantID,VariantType,Context,TotalDepth,MinDepth_Germline,MinDepth_Somatic,AlleleBalance,MinAlleleBalance_Het,MaxAlleleBalance_Het,MappingQuality,MinMappingQuality,BaseQuality,MinBaseQuality,StrandBias_FS,MaxStrandBias_FS,ReadPositionBias_QD,MinQD,GenotypeQuality_GQ,MinGenotypeQuality,InControlSample,InGNomAD_PassFilter,CallerFilter,IsHomopolymerRegion,IsSegmentalDuplication
WES-2026-001,chr7:55249063:G:T,SNV,Germline,85,20,100,0.48,0.30,0.70,60,40,35,20,2.1,60,18.5,2.0,99,20,false,true,PASS,false,false
WES-2026-001,chr1:115256530:A:AT,Indel,Germline,45,20,100,0.35,0.30,0.70,38,40,22,20,125.0,60,1.2,2.0,15,20,false,false,LowQual,true,false
TUMOR-2026-001,chr12:25398284:C:A,SNV,Somatic,65,20,100,0.08,0.02,0.40,55,40,30,20,8.5,200,12.0,2.0,45,20,false,true,PASS,false,false
WES-2026-002,chr3:37090354:G:A,SNV,Germline,120,20,100,0.50,0.30,0.70,60,40,38,20,1.0,60,22.0,2.0,99,20,true,true,PASS,false,false

URS & FS — спецификация пользователя и функциональная спецификация

Документ описывает контролируемый интерфейс и поведение утилиты VariantCallAcceptanceChecker для сценария Variant Call Acceptance Checker.

Предметные ограничения и критические параметры

Ниже приведены ключевые фрагменты исходного описания. Перед продуктивным применением пределы должны быть сверены с утверждённой спецификацией, регистрационным досье и локальными SOP.
  • • Depth Filtering: Контекстно-зависимые пороги глубины (≥20× герминальные, ≥100× соматические).
  • ⚠️ ВАЖНО:
  • • Strand bias (FS > 60) — самый частый индикатор ложноположительного SNV.
  • ⚠️ КРИТИЧЕСКИ ВАЖНО:
  • • Depth ≥ Context-Specific Min: Герминальные ≥20×, соматические ≥100× (для VAF <5%).
  • • Strand Bias FS ≤ 60 (germline) / ≤ 200 (somatic): Превышение = артефакт.
  • • QD ≥ 2.0: Низкий QD = вариант не поддерживается качеством баз.
  • • GQ ≥ 20: Ниже = неуверенный генотип.
  • Критические параметры:
  • • Total Depth: ≥ Context-specific minimum
  • • Mapping Quality: ≥ 40
  • • Strand Bias (FS): ≤ Threshold
  • • QualByDepth (QD): ≥ 2.0
  • • Genotype Quality (GQ): ≥ 20
  • 2. Панель нормалей (PoN): Используйте PoN из ≥40 образцов для фильтрации рекуррентных артефактов.
  • 3. Ортогональная валидация: Для соматических вызовов с VAF <5% подтверждайте ddPCR или amplicon-seq.

URS — пользовательские требования

IDТребованиеКритичностьКритерий приемки
URS-001Утилита должна принимать файл input.csv для Variant Call Acceptance Checker с заголовками, определёнными в контракте данных.HighФайл обрабатывается без ручного изменения заголовков.
URS-002Утилита должна выполнять детерминированную оценку QC/ОКК без машинного обучения и без вероятностного принятия решения о соответствии.HighПри одинаковых входных данных, версии правил и конфигурации результат полностью воспроизводим.
URS-003Утилита должна валидировать обязательные поля, типы данных, диапазоны, единицы измерения и предметную правдоподобность значений.HighОшибки схемы, преобразования и диапазона явно отражаются в результате.
URS-004Утилита должна применять предметные пределы и правила из описания, утверждённой спецификации, регистрационного досье и локальных SOP.HighКаждая проверка имеет результат PASS/WARNING/FAIL и понятное сообщение.
URS-005Утилита должна формировать output.json с машинно-читаемыми результатами, исходными значениями, предупреждениями, отказами и критическими находками.HighJSON пригоден для LIMS/ELN/MES-интеграции и QA/QC review.
URS-006Утилита должна сохранять трассируемость между серией/образцом, входным файлом, применёнными правилами и итоговым статусом.HighВыход содержит идентификаторы, список параметров и audit metadata.
URS-007Документация должна поддерживать подготовку IQ/OQ/PQ, CSV/CSA и обсуждение с инспекторами или внутренним QA.MediumURS, FS, контракт input/output и тестовые сценарии поставляются вместе с утилитой.
URS-008Утилита должна использоваться как decision-support инструмент QC, а не как замена утверждённым спецификациям и выпускному решению Qualified Person/QA.MediumВ документации указан контроль change control и необходимость сверки пределов.

Контракт input.csv

#ПолеТипПримерНазначение
1SampleIDstring / controlled vocabularyWES-2026-001Идентификатор образца или лабораторной пробы.
2VariantIDstring / controlled vocabularychr7:55249063:G:TКонтролируемый входной параметр для детерминированных QC-правил.
3VariantTypestring / controlled vocabularySNVКонтролируемый входной параметр для детерминированных QC-правил.
4Contextstring / controlled vocabularyGermlineКонтролируемый входной параметр для детерминированных QC-правил.
5TotalDepthdecimal85Контролируемый входной параметр для детерминированных QC-правил.
6MinDepth_Germlinedecimal20Контролируемый входной параметр для детерминированных QC-правил.
7MinDepth_Somaticdecimal100Контролируемый входной параметр для детерминированных QC-правил.
8AlleleBalancedecimal0.48Контролируемый входной параметр для детерминированных QC-правил.
9MinAlleleBalance_Hetdecimal0.30Контролируемый входной параметр для детерминированных QC-правил.
10MaxAlleleBalance_Hetdecimal0.70Контролируемый входной параметр для детерминированных QC-правил.
11MappingQualitydecimal60Контролируемый входной параметр для детерминированных QC-правил.
12MinMappingQualitydecimal40Контролируемый входной параметр для детерминированных QC-правил.
13BaseQualitydecimal35Контролируемый входной параметр для детерминированных QC-правил.
14MinBaseQualitydecimal20Контролируемый входной параметр для детерминированных QC-правил.
15StrandBias_FSdecimal2.1Контролируемый входной параметр для детерминированных QC-правил.
16MaxStrandBias_FSdecimal60Контролируемый входной параметр для детерминированных QC-правил.
17ReadPositionBias_QDdecimal18.5Контролируемый входной параметр для детерминированных QC-правил.
18MinQDdecimal2.0Контролируемый входной параметр для детерминированных QC-правил.
19GenotypeQuality_GQstring / controlled vocabulary99Контролируемый входной параметр для детерминированных QC-правил.
20MinGenotypeQualitydecimal20Контролируемый входной параметр для детерминированных QC-правил.
21InControlSamplestring / controlled vocabularyfalseИдентификатор образца или лабораторной пробы.
22InGNomAD_PassFilterstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
23CallerFilterstring / controlled vocabularyPASSКонтролируемый входной параметр для детерминированных QC-правил.
24IsHomopolymerRegionstring / controlled vocabularyfalseКонтролируемый входной параметр для детерминированных QC-правил.
25IsSegmentalDuplicationstring / controlled vocabularyfalseКонтролируемый входной параметр для детерминированных QC-правил.
SampleID,VariantID,VariantType,Context,TotalDepth,MinDepth_Germline,MinDepth_Somatic,AlleleBalance,MinAlleleBalance_Het,MaxAlleleBalance_Het,MappingQuality,MinMappingQuality,BaseQuality,MinBaseQuality,StrandBias_FS,MaxStrandBias_FS,ReadPositionBias_QD,MinQD,GenotypeQuality_GQ,MinGenotypeQuality,InControlSample,InGNomAD_PassFilter,CallerFilter,IsHomopolymerRegion,IsSegmentalDuplication
WES-2026-001,chr7:55249063:G:T,SNV,Germline,85,20,100,0.48,0.30,0.70,60,40,35,20,2.1,60,18.5,2.0,99,20,false,true,PASS,false,false
WES-2026-001,chr1:115256530:A:AT,Indel,Germline,45,20,100,0.35,0.30,0.70,38,40,22,20,125.0,60,1.2,2.0,15,20,false,false,LowQual,true,false
TUMOR-2026-001,chr12:25398284:C:A,SNV,Somatic,65,20,100,0.08,0.02,0.40,55,40,30,20,8.5,200,12.0,2.0,45,20,false,true,PASS,false,false

Правила валидации входных данных

IDПолеПравилоКритичность
VR-001SampleIDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-002VariantIDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-003VariantTypeПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-004ContextПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-005TotalDepthПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-006MinDepth_GermlineПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-007MinDepth_SomaticПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-008AlleleBalanceПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-009MinAlleleBalance_HetПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-010MaxAlleleBalance_HetПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-011MappingQualityПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-012MinMappingQualityПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-013BaseQualityПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-014MinBaseQualityПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-015StrandBias_FSПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-016MaxStrandBias_FSПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-017ReadPositionBias_QDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-018MinQDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-019GenotypeQuality_GQПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-020MinGenotypeQualityПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-021InControlSampleПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-022InGNomAD_PassFilterПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-023CallerFilterПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-024IsHomopolymerRegionПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-025IsSegmentalDuplicationПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium

FS — функциональная спецификация

IDФункцияРеализация
FS-001CLI executionПоддержать режимы запуска: demo mode без аргументов и production mode input.csv output.json.
FS-002CSV importПрочитать input.csv в UTF-8/CSV-совместимом формате, проверить наличие заголовка и ожидаемых колонок.
FS-003Schema validationПроверить обязательные поля, количество колонок, неизвестные ключевые поля и пустые обязательные значения.
FS-004Type conversionПреобразовать числовые, флаговые и текстовые значения; некорректный формат фиксировать как ошибку строки.
FS-005Domain rule engineПрименить правила для Variant Call Acceptance Checker, включая критические пределы из описания и утверждённой спецификации.
FS-006Status aggregationСформировать итоговый статус: FAIL при критическом отказе, WARNING при некритическом отклонении, PASS при соответствии.
FS-007JSON exportЗаписать output.json с детализацией проверок, исходными значениями, предупреждениями, отказами и critical findings.
FS-008Audit supportСохранять структуру результата пригодной для review, расследования отклонений и воспроизведения расчёта.
FS-009Integration contractПоддержать сценарий LIMS/ELN/MES → input.csv → utility → output.json → portal/admin review.
FS-010Error handlingВозвращать явные сообщения для отсутствующего файла, пустого CSV, неверной схемы, ошибки записи output.json и некорректного формата.

Пример output.json

{
  "utilityId": "variantcallacceptancechecker",
  "utilityFolder": "VariantCallAcceptanceChecker",
  "package": "LiquidBiopsy",
  "overallStatus": "PASS|WARNING|FAIL",
  "sourceFile": "input.csv",
  "processedAtUtc": "2026-06-10T00:00:00Z",
  "checks": [
    {
      "parameter": "SampleID",
      "value": "WES-2026-001",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-001"
    },
    {
      "parameter": "VariantID",
      "value": "chr7:55249063:G:T",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-002"
    },
    {
      "parameter": "VariantType",
      "value": "SNV",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-003"
    },
    {
      "parameter": "Context",
      "value": "Germline",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-004"
    },
    {
      "parameter": "TotalDepth",
      "value": "85",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-005"
    },
    {
      "parameter": "MinDepth_Germline",
      "value": "20",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-006"
    },
    {
      "parameter": "MinDepth_Somatic",
      "value": "100",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-007"
    },
    {
      "parameter": "AlleleBalance",
      "value": "0.48",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-008"
    },
    {
      "parameter": "MinAlleleBalance_Het",
      "value": "0.30",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-009"
    },
    {
      "parameter": "MaxAlleleBalance_Het",
      "value": "0.70",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-010"
    },
    {
      "parameter": "MappingQuality",
      "value": "60",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-011"
    },
    {
      "parameter": "MinMappingQuality",
      "value": "40",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-012"
    }
  ],
  "criticalFindings": [],
  "warnings": [],
  "audit": {
    "inputHash": "sha256:<calculated at runtime>",
    "rulesVersion": "<utility executable version>",
    "documentation": "VariantCallAcceptanceChecker.documentation.html"
  }
}

Матрица трассируемости

URSFSТестПодтверждение
URS-001FS-001, FS-002OQ-001Проверить запуск и импорт валидного input.csv.
URS-002FS-005, FS-006OQ-004Повторить один и тот же набор данных и сравнить output.json.
URS-003FS-003, FS-004, FS-010OQ-002, OQ-003Проверить отсутствующие колонки и неверные типы.
URS-004FS-005, FS-006OQ-004, PQ-001Проверить критические отклонения по реальным/граничным данным.
URS-005FS-007, FS-009OQ-005Проверить JSON schema и пригодность для downstream-систем.
URS-006FS-008OQ-006Проверить наличие идентификаторов и audit metadata.
URS-007FS-008, FS-010IQ-001, OQ-007Проверить комплектность документации и control evidence.
URS-008FS-005, FS-008PQ-002Проверить review workflow и запрет автоматической замены QA-решения.

IQ/OQ/PQ тестовые сценарии

IDСценарийОжидаемый результат
IQ-001Проверить наличие executable, input.csv, документации и контрольной суммы.Комплект поставки полон; версия зафиксирована.
OQ-001Валидная строка из примера input.csv.PASS или допустимый WARNING согласно правилам.
OQ-002Удалить обязательную колонку из CSV.Ошибка схемы или FAIL с указанием отсутствующей колонки.
OQ-003Внести нечисловое значение в числовое поле.Ошибка преобразования типа с указанием строки/поля.
OQ-004Значение критического параметра вывести за предел.FAIL и critical finding.
OQ-005Проверить структуру output.json.Все обязательные секции присутствуют, JSON валиден.
OQ-006Проверить трассируемость серии/образца.Идентификаторы входа и результатов совпадают.
PQ-001Проверить 3–5 реальных партий/образцов пользователя.Результат подтверждён QC/QA review.
PQ-002Проверить workflow отклонения и ручного QA-решения.Утилита поддерживает review, но не заменяет утверждённое решение.

QA/QC и change control

  • Не менять имена колонок без обновления валидатора, документации и тестового набора.
  • Хранить input.csv, output.json, версию исполняемого файла и контрольную сумму.
  • Перед продуктивным использованием провести IQ/OQ/PQ или эквивалентную CSV/CSA-проверку.
  • Критические пределы должны быть сверены с утверждённой спецификацией, регистрационным досье и локальными SOP.
  • Утилита предоставляет формализованный QC decision support, но окончательное решение выпуска остаётся за QA/QP и утверждёнными процедурами.

Входит в пакеты

Жидкостная биопсия

Пакет для QC и преданалитического контроля жидкостной биопсии: cfDNA/ctDNA, CTC, EV/exosomes, метилирование, NGS/qPCR/ddPCR, контроль образцов, контаминации, чувствительности и отчётности.

Открыть