IndexHoppingContaminationChecker

Index Hopping Contamination

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

Описание утилиты: Index Hopping Contamination

Index Hopping Contamination Checker — Контроль контаминации от index hopping в NGS

ℹ️  Утилита выполняет количественную оценку перекрестного загрязнения образцов вследствие index hopping согласно Illumina Technical Note #261, ENCODE и CAP/CLIA:
     • Hopping Rate: Процент прочтений с неожиданными индексными комбинациями относительно общего числа assigned reads.
     • Estimated Contamination: Расчетная доля чужеродной ДНК в каждом образце на основе hopped reads.
     • Donor Identification: Выявление образцов-доноров, вносящих наибольший вклад в контаминацию.
     • Sensitivity Impact: Сравнение уровня контаминации с требуемой чувствительностью ассая (VAF threshold).
     • UDI Protection Check: Верификация использования Unique Dual Indexes как основной меры защиты.

⚠️  ВАЖНО: 
     • Index hopping специфичен для паттернированных flow cells (NovaSeq, HiSeq X, NextSeq 2000).
     • Single-index библиотеки на паттернированных flow cells НЕДОПУСТИМЫ для клинических приложений.
     • Не-UDI dual indexes снижают, но НЕ устраняют hopping (комбинаторные коллизии возможны).
     • Для жидкой биопсии (VAF <0.5%) даже 0.1% контаминации может вызвать ложноположительный результат.

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

Формат input.csv:
RunID,SampleID,ExpectedIndex_I7,ExpectedIndex_I5,AssignedReads,HoppedReads_Total,HoppedReads_FromHighAbundance,HoppingRate_Percent,MaxAcceptableHoppingRate_Percent,EstimatedContamination_Percent,MaxAcceptableContamination_Percent,TopDonorSample,DonorContribution_Percent,DualIndexUsed,UniqueDualIndex,Platform,PatternedFlowCell,AssaySensitivity_Required_VAF

Пример:
  RUN-045,LB-001,ATTACTCG,TATAGCCT,25000000,12500,8500,0.05,0.5,0.02,0.1,LB-003,68,true,true,NovaSeq,true,0.1

📍 Область применения (Usage Where):
     • Клинические NGS-лаборатории: Обязательный QC каждого мультиплексированного запуска.
     • Жидкая биопсия: Критический контроль для ultrasensitive assays (VAF <0.5%).
     • Мультиомиксные исследования: Предотвращение cross-sample artifacts в WGS/WES/RNA-seq.
     • Разработчики панелей: Выбор оптимальной схемы индексирования при дизайне assays.

— ЗАЧЕМ ЭТО НУЖНО?
Index hopping — невидимый артефакт, который не детектируется стандартными QC-метриками.
Без специализированного контроля контаминированные данные проходят все фильтры и попадают в клинический отчет.
В жидкой биопсии это означает ложное назначение таргетной терапии или пропуск истинной ремиссии.
Автоматизированная проверка превращает скрытую угрозу в управляемый параметр качества.

⚠️  КРИТИЧЕСКИ ВАЖНО:
• UDI Mandatory: Для паттернированных flow cells и клинических приложений UDI ОБЯЗАТЕЛЬНЫ.
• Contamination vs Sensitivity: Если Estimated Contamination ≥ Required VAF → данные НЕПРИГОДНЫ.
• Single Index = FAIL: На паттернированных flow cells single-index библиотеки должны быть отклонены.
• Dominant Donor: Один высокоабундантный образец может загрязнить весь пул. Балансируйте пул по концентрации.
• Non-UDI Dual Index: Снижает hopping ~10×, но не устраняет полностью. Приемлемо только для research.

Ключевые особенности утилиты:
• Пятипараметрическая оценка index hopping
• Автоматическая идентификация образцов-доноров
• Интеграция с чувствительностью конкретного ассая
• Четырёхуровневая классификация (Clean / Low / High / Critical)
• Соответствие Illumina Tech Note #261 и CAP/CLIA

Критические параметры:
• Hopping Rate: ≤ 0.5% (typical threshold)
• Estimated Contamination: ≤ Assay-specific limit
• UDI Protection: True for clinical/patterned FC
• Dual Index: Mandatory for patterned FC
• Contamination vs VAF Threshold: Contamination < Required Sensitivity

💡 Советы по использованию:
1. Всегда используйте UDI: IDT xGen, Illumina DNA UD, NEBNext Multiplex Oligos.
2. Балансируйте пул: Избегайте >10× разницы в молярности между образцами.
3. Очищайте библиотеки: Дополнительная SPRI-очистка после PCR снижает свободные индексы.
4. Мониторьте тренды: Рост hopping rate во времени указывает на деградацию реагентов или flow cell.
5. Документируйте: Сохраняйте hopping metrics для каждого запуска как часть QC-записи.

⚠️ Примечание: Данная утилита оценивает контаминацию ОТ INDEX HOPPING. Она не заменяет проверку других источников контаминации (carryover, reagent blanks, environmental DNA). Комплексный QC требует интеграции всех источников.

input.csv

RunID,SampleID,ExpectedIndex_I7,ExpectedIndex_I5,AssignedReads,HoppedReads_Total,HoppedReads_FromHighAbundance,HoppingRate_Percent,MaxAcceptableHoppingRate_Percent,EstimatedContamination_Percent,MaxAcceptableContamination_Percent,TopDonorSample,DonorContribution_Percent,DualIndexUsed,UniqueDualIndex,Platform,PatternedFlowCell,AssaySensitivity_Required_VAF
RUN-2026-045,LB-PAT-001,ATTACTCG,TATAGCCT,25000000,12500,8500,0.05,0.5,0.02,0.1,LB-PAT-003,68.0,true,true,NovaSeq 6000,true,0.1
RUN-2026-045,LB-PAT-002,TCCGGAGA,TCCGGAGA,18000000,540000,420000,3.0,0.5,1.8,0.1,LB-PAT-005,78.0,true,false,NovaSeq 6000,true,0.1
RUN-2026-045,WES-SAMPLE-010,CGCTCATT,,45000000,180000,95000,0.4,0.5,0.25,0.1,WES-SAMPLE-008,53.0,false,false,NovaSeq 6000,true,5.0

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

Документ описывает контролируемый интерфейс и поведение утилиты IndexHoppingContaminationChecker для сценария Index Hopping Contamination Checker.

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

Ниже приведены ключевые фрагменты исходного описания. Перед продуктивным применением пределы должны быть сверены с утверждённой спецификацией, регистрационным досье и локальными SOP.
  • ⚠️ ВАЖНО:
  • • Для жидкой биопсии (VAF <0.5%) даже 0.1% контаминации может вызвать ложноположительный результат.
  • • Жидкая биопсия: Критический контроль для ultrasensitive assays (VAF <0.5%).
  • ⚠️ КРИТИЧЕСКИ ВАЖНО:
  • • Contamination vs Sensitivity: Если Estimated Contamination ≥ Required VAF → данные НЕПРИГОДНЫ.
  • • Четырёхуровневая классификация (Clean / Low / High / Critical)
  • Критические параметры:
  • • Hopping Rate: ≤ 0.5% (typical threshold)
  • • Estimated Contamination: ≤ Assay-specific limit
  • • Contamination vs VAF Threshold: Contamination < Required Sensitivity
  • 2. Балансируйте пул: Избегайте >10× разницы в молярности между образцами.

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

IDТребованиеКритичностьКритерий приемки
URS-001Утилита должна принимать файл input.csv для Index Hopping Contamination 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

#ПолеТипПримерНазначение
1RunIDstring / controlled vocabularyRUN-2026-045Контролируемый входной параметр для детерминированных QC-правил.
2SampleIDstring / controlled vocabularyLB-PAT-001Идентификатор образца или лабораторной пробы.
3ExpectedIndex_I7string / controlled vocabularyATTACTCGКонтролируемый входной параметр для детерминированных QC-правил.
4ExpectedIndex_I5string / controlled vocabularyTATAGCCTКонтролируемый входной параметр для детерминированных QC-правил.
5AssignedReadsdecimal25000000Контролируемый входной параметр для детерминированных QC-правил.
6HoppedReads_Totaldecimal12500Контролируемый входной параметр для детерминированных QC-правил.
7HoppedReads_FromHighAbundancedecimal8500Контролируемый входной параметр для детерминированных QC-правил.
8HoppingRate_Percentdecimal0.05Контролируемый входной параметр для детерминированных QC-правил.
9MaxAcceptableHoppingRate_Percentdecimal0.5Контролируемый входной параметр для детерминированных QC-правил.
10EstimatedContamination_Percentdecimal0.02Контролируемый входной параметр для детерминированных QC-правил.
11MaxAcceptableContamination_Percentdecimal0.1Контролируемый входной параметр для детерминированных QC-правил.
12TopDonorSamplestring / controlled vocabularyLB-PAT-003Идентификатор образца или лабораторной пробы.
13DonorContribution_Percentdecimal68.0Контролируемый входной параметр для детерминированных QC-правил.
14DualIndexUsedstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
15UniqueDualIndexstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
16Platformstring / controlled vocabularyNovaSeq 6000Контролируемый входной параметр для детерминированных QC-правил.
17PatternedFlowCellstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
18AssaySensitivity_Required_VAFstring / controlled vocabulary0.1Контролируемый входной параметр для детерминированных QC-правил.
RunID,SampleID,ExpectedIndex_I7,ExpectedIndex_I5,AssignedReads,HoppedReads_Total,HoppedReads_FromHighAbundance,HoppingRate_Percent,MaxAcceptableHoppingRate_Percent,EstimatedContamination_Percent,MaxAcceptableContamination_Percent,TopDonorSample,DonorContribution_Percent,DualIndexUsed,UniqueDualIndex,Platform,PatternedFlowCell,AssaySensitivity_Required_VAF
RUN-2026-045,LB-PAT-001,ATTACTCG,TATAGCCT,25000000,12500,8500,0.05,0.5,0.02,0.1,LB-PAT-003,68.0,true,true,NovaSeq 6000,true,0.1
RUN-2026-045,LB-PAT-002,TCCGGAGA,TCCGGAGA,18000000,540000,420000,3.0,0.5,1.8,0.1,LB-PAT-005,78.0,true,false,NovaSeq 6000,true,0.1
RUN-2026-045,WES-SAMPLE-010,CGCTCATT,,45000000,180000,95000,0.4,0.5,0.25,0.1,WES-SAMPLE-008,53.0,false,false,NovaSeq 6000,true,5.0

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

IDПолеПравилоКритичность
VR-001RunIDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-002SampleIDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-003ExpectedIndex_I7Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-004ExpectedIndex_I5Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-005AssignedReadsПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-006HoppedReads_TotalПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-007HoppedReads_FromHighAbundanceПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-008HoppingRate_PercentПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-009MaxAcceptableHoppingRate_PercentПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-010EstimatedContamination_PercentПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-011MaxAcceptableContamination_PercentПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-012TopDonorSampleПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-013DonorContribution_PercentПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-014DualIndexUsedПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-015UniqueDualIndexПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-016PlatformПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-017PatternedFlowCellПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-018AssaySensitivity_Required_VAFПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.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Применить правила для Index Hopping Contamination 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": "indexhoppingcontaminationchecker",
  "utilityFolder": "IndexHoppingContaminationChecker",
  "package": "LiquidBiopsy",
  "overallStatus": "PASS|WARNING|FAIL",
  "sourceFile": "input.csv",
  "processedAtUtc": "2026-06-10T00:00:00Z",
  "checks": [
    {
      "parameter": "RunID",
      "value": "RUN-2026-045",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-001"
    },
    {
      "parameter": "SampleID",
      "value": "LB-PAT-001",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-002"
    },
    {
      "parameter": "ExpectedIndex_I7",
      "value": "ATTACTCG",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-003"
    },
    {
      "parameter": "ExpectedIndex_I5",
      "value": "TATAGCCT",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-004"
    },
    {
      "parameter": "AssignedReads",
      "value": "25000000",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-005"
    },
    {
      "parameter": "HoppedReads_Total",
      "value": "12500",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-006"
    },
    {
      "parameter": "HoppedReads_FromHighAbundance",
      "value": "8500",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-007"
    },
    {
      "parameter": "HoppingRate_Percent",
      "value": "0.05",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-008"
    },
    {
      "parameter": "MaxAcceptableHoppingRate_Percent",
      "value": "0.5",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-009"
    },
    {
      "parameter": "EstimatedContamination_Percent",
      "value": "0.02",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-010"
    },
    {
      "parameter": "MaxAcceptableContamination_Percent",
      "value": "0.1",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-011"
    },
    {
      "parameter": "TopDonorSample",
      "value": "LB-PAT-003",
      "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": "IndexHoppingContaminationChecker.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, контроль образцов, контаминации, чувствительности и отчётности.

Открыть