PositiveNegativeControlTrendChecker

Positive/Negative Control Trend

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

Описание утилиты: Positive/Negative Control Trend

Positive/Negative Control Trend Checker — Статистический мониторинг контролей по Westgard

ℹ️  Утилита выполняет лонгитюдный статистический QC согласно CLSI EP23-A, CAP/CLIA, ISO 15189 §7.3 и FDA statistical QC guidance:

     ПРАВИЛА WESTGARD:
     • 1-2S (Warning): Одна точка за пределами 2SD. Предупреждение, не отказ.
     • 1-3S (Reject): Одна точка за пределами 3SD. Случайная ошибка или начало систематической.
     • 2-2S (Reject): Две последовательные точки за 2SD с одной стороны. Систематическая ошибка.
     • R-4S (Reject): Размах между двумя контролями в одном запуске > 4SD. Случайная ошибка.
     • 4-1S (Reject): Четыре последовательные точки за 1SD с одной стороны. Систематический сдвиг.
     • 10X (Reject): Десять последовательных точек по одну сторону среднего. Систематический bias.

     TREND ANALYSIS:
     • Линейная регрессия по историческим данным (минимум 5 точек).
     • Значимый тренд: |slope| > 0.5 × SD / N.
     • Направление тренда учитывает тип контроля (Higher_Is_Better / Lower_Is_Better / Two_Sided).

     ПРОГНОЗИРОВАНИЕ ОТКАЗА:
     • Extrapolation тренда до пересечения с 3SD лимитом.
     • Алерт при прогнозе < 20 запусков до отказа.
     • Позволяет превентивное обслуживание ДО остановки тестирования.

     CV MONITORING:
     • Коэффициент вариации по скользящему окну.
     • Рост CV = деградация прецизионности (реагенты, прибор, оператор).

⚠️  ВАЖНО:
     • Бинарный pass/fail НЕ обнаруживает постепенную деградацию. Только трендовый анализ.
     • Westgard violation = НЕМЕДЛЕННЫЙ ЗАПРЕТ выдачи результатов.
     • 1-2S — это WARNING, не reject. Но два предупреждения подряд требуют расследования.
     • Для негативных контролей направление имеет значение: снижение Ct = рост сигнала = контаминация.
     • Исторические данные должны быть из СТАБИЛЬНОГО периода (после валидации, до смены лота).
     • При смене лота реагента необходимо установить новую базовую линию.
     • Минимум 20 исторических точек для надежных статистик.

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

📍 Область применения:
     • Клинические лаборатории: Ежедневный статистический QC всех контролей.
     • Аккредитация CAP/ISO: Документирование ongoing QC program.
     • Превентивное обслуживание: Прогнозирование замены реагентов/калибровки.
     • Расследование инцидентов: Ретроспективный анализ трендов перед отказом.
     • Валидация новых лотов: Подтверждение стабильности после перехода.

💡 Советы:
1. Levey-Jennings Charts: Визуализируйте тренды графически; числа не заменяют картину.
2. Multi-Rule Strategy: Используйте комбинацию правил, не только 1-3S.
3. Rolling Baseline: Обновляйте mean/SD скользящим окном (например, последние 30 дней).
4. Lot Transition: При смене лота ведите параллельный мониторинг старого и нового.
5. Automated Alerts: Интегрируйте с LIMS для автоматической блокировки при OOC.

⚠️ Примечание: Утилита выполняет СТАТИСТИЧЕСКИЙ МОНИТОРИНГ контролей. Она не заменяет аналитическую валидацию метода или проверку индивидуальных результатов пациентов. Statistical QC — один из нескольких уровней системы обеспечения качества. Решения о corrective actions принимаются лабораторным персоналом на основе данного отчета и SOP.

input.csv

ControlID,ControlType,AssayName,MetricName,InstrumentID,ReagentLot,HistoricalValues_Raw,CurrentValue,CurrentDate,EstablishedMean,EstablishedSD,UpperLimit_3SD,LowerLimit_3SD,UpperLimit_2SD,LowerLimit_2SD,Rule_1_2S_Enabled,Rule_1_3S_Enabled,Rule_2_2S_Enabled,Rule_R_4S_Enabled,Rule_4_1S_Enabled,Rule_10X_Enabled,MetricDirection
POS-CTRL-001,Positive,KRAS_ddPCR,Copies_uL,QX200-01,LOT-2026-0451,"2026-05-01:102.5;2026-05-05:99.8;2026-05-08:101.2;2026-05-12:100.5;2026-05-15:103.1;2026-05-19:98.7;2026-05-22:101.8;2026-05-26:100.2;2026-05-29:102.0;2026-06-02:99.5;2026-06-05:101.5;2026-06-08:100.8",100.8,2026-06-08,100.0,3.0,109.0,91.0,106.0,94.0,true,true,true,true,true,true,Two_Sided
NEG-CTRL-002,Negative,EGFR_T790M_BEAMing,Ct,LC480-02,LOT-2026-0467,"2026-05-01:38.5;2026-05-05:38.2;2026-05-08:37.9;2026-05-12:37.5;2026-05-15:37.1;2026-05-19:36.8;2026-05-22:36.4;2026-05-26:36.0;2026-05-29:35.7;2026-06-02:35.3;2026-06-05:35.0;2026-06-08:34.6",34.6,2026-06-08,38.0,1.0,41.0,35.0,40.0,36.0,true,true,true,true,true,true,Higher_Is_Better

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

Документ описывает контролируемый интерфейс и поведение утилиты PositiveNegativeControlTrendChecker для сценария Positive/Negative Control Trend Checker.

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

Ниже приведены ключевые фрагменты исходного описания. Перед продуктивным применением пределы должны быть сверены с утверждённой спецификацией, регистрационным досье и локальными SOP.
  • ℹ️ Утилита выполняет лонгитюдный статистический QC согласно CLSI EP23-A, CAP/CLIA, ISO 15189 §7.3 и FDA statistical QC guidance:
  • • 1-2S (Warning): Одна точка за пределами 2SD. Предупреждение, не отказ.
  • • 1-3S (Reject): Одна точка за пределами 3SD. Случайная ошибка или начало систематической.
  • • R-4S (Reject): Размах между двумя контролями в одном запуске > 4SD. Случайная ошибка.
  • • Значимый тренд: |slope| > 0.5 × SD / N.
  • • Алерт при прогнозе < 20 запусков до отказа.
  • ⚠️ ВАЖНО:
  • • Аккредитация CAP/ISO: Документирование ongoing QC program.

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

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

#ПолеТипПримерНазначение
1ControlIDstring / controlled vocabularyPOS-CTRL-001Контрольная точка/контрольный образец для валидности серии анализа.
2ControlTypestring / controlled vocabularyPositiveКонтрольная точка/контрольный образец для валидности серии анализа.
3AssayNamestring / controlled vocabularyKRAS_ddPCRКонтролируемый входной параметр для детерминированных QC-правил.
4MetricNamestring / controlled vocabularyCopies_uLКонтролируемый входной параметр для детерминированных QC-правил.
5InstrumentIDstring / controlled vocabularyQX200-01Контролируемый входной параметр для детерминированных QC-правил.
6ReagentLotstring / controlled vocabularyLOT-2026-0451Идентификатор серии/партии для трассируемости.
7HistoricalValues_Rawstring / controlled vocabulary2026-05-01:102.5;2026-05-05:99.8;2026-05-08:101.2;2026-05-12:100.5;2026-05-15:103.1;2026-05-19:98.7;2026-05-22:101.8;2026-05-26:100.2;2026-05-29:102.0;2026-06-02:99.5;2026-06-05:101.5;2026-06-08:100.8Контролируемый входной параметр для детерминированных QC-правил.
8CurrentValuedecimal100.8Контролируемый входной параметр для детерминированных QC-правил.
9CurrentDatestring / controlled vocabulary2026-06-08Контролируемый входной параметр для детерминированных QC-правил.
10EstablishedMeaninteger / decimal100.0Контролируемый входной параметр для детерминированных QC-правил.
11EstablishedSDdecimal3.0Контролируемый входной параметр для детерминированных QC-правил.
12UpperLimit_3SDdecimal109.0Утверждённый предел, применяемый при проверке результата.
13LowerLimit_3SDdecimal91.0Утверждённый предел, применяемый при проверке результата.
14UpperLimit_2SDdecimal106.0Утверждённый предел, применяемый при проверке результата.
15LowerLimit_2SDdecimal94.0Утверждённый предел, применяемый при проверке результата.
16Rule_1_2S_Enabledstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
17Rule_1_3S_Enabledstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
18Rule_2_2S_Enabledstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
19Rule_R_4S_Enabledstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
20Rule_4_1S_Enabledstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
21Rule_10X_Enabledstring / controlled vocabularytrueКонтролируемый входной параметр для детерминированных QC-правил.
22MetricDirectionstring / controlled vocabularyTwo_SidedКонтролируемый входной параметр для детерминированных QC-правил.
ControlID,ControlType,AssayName,MetricName,InstrumentID,ReagentLot,HistoricalValues_Raw,CurrentValue,CurrentDate,EstablishedMean,EstablishedSD,UpperLimit_3SD,LowerLimit_3SD,UpperLimit_2SD,LowerLimit_2SD,Rule_1_2S_Enabled,Rule_1_3S_Enabled,Rule_2_2S_Enabled,Rule_R_4S_Enabled,Rule_4_1S_Enabled,Rule_10X_Enabled,MetricDirection
POS-CTRL-001,Positive,KRAS_ddPCR,Copies_uL,QX200-01,LOT-2026-0451,2026-05-01:102.5;2026-05-05:99.8;2026-05-08:101.2;2026-05-12:100.5;2026-05-15:103.1;2026-05-19:98.7;2026-05-22:101.8;2026-05-26:100.2;2026-05-29:102.0;2026-06-02:99.5;2026-06-05:101.5;2026-06-08:100.8,100.8,2026-06-08,100.0,3.0,109.0,91.0,106.0,94.0,true,true,true,true,true,true,Two_Sided
NEG-CTRL-002,Negative,EGFR_T790M_BEAMing,Ct,LC480-02,LOT-2026-0467,2026-05-01:38.5;2026-05-05:38.2;2026-05-08:37.9;2026-05-12:37.5;2026-05-15:37.1;2026-05-19:36.8;2026-05-22:36.4;2026-05-26:36.0;2026-05-29:35.7;2026-06-02:35.3;2026-06-05:35.0;2026-06-08:34.6,34.6,2026-06-08,38.0,1.0,41.0,35.0,40.0,36.0,true,true,true,true,true,true,Higher_Is_Better

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

IDПолеПравилоКритичность
VR-001ControlIDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-002ControlTypeПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-003AssayNameПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.High
VR-004MetricNameПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-005InstrumentIDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-006ReagentLotПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-007HistoricalValues_RawПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-008CurrentValueПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-009CurrentDateПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-010EstablishedMeanПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-011EstablishedSDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-012UpperLimit_3SDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-013LowerLimit_3SDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-014UpperLimit_2SDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-015LowerLimit_2SDПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-016Rule_1_2S_EnabledПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-017Rule_1_3S_EnabledПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-018Rule_2_2S_EnabledПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-019Rule_R_4S_EnabledПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-020Rule_4_1S_EnabledПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-021Rule_10X_EnabledПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.Medium
VR-022MetricDirectionПоле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме.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Применить правила для Positive/Negative Control Trend 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": "positivenegativecontroltrendchecker",
  "utilityFolder": "PositiveNegativeControlTrendChecker",
  "package": "LiquidBiopsy",
  "overallStatus": "PASS|WARNING|FAIL",
  "sourceFile": "input.csv",
  "processedAtUtc": "2026-06-10T00:00:00Z",
  "checks": [
    {
      "parameter": "ControlID",
      "value": "POS-CTRL-001",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-001"
    },
    {
      "parameter": "ControlType",
      "value": "Positive",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-002"
    },
    {
      "parameter": "AssayName",
      "value": "KRAS_ddPCR",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-003"
    },
    {
      "parameter": "MetricName",
      "value": "Copies_uL",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-004"
    },
    {
      "parameter": "InstrumentID",
      "value": "QX200-01",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-005"
    },
    {
      "parameter": "ReagentLot",
      "value": "LOT-2026-0451",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-006"
    },
    {
      "parameter": "HistoricalValues_Raw",
      "value": "2026-05-01:102.5;2026-05-05:99.8;2026-05-08:101.2;2026-05-12:100.5;2026-05-15:103.1;2026-05-19:98.7;2026-05-22:101.8;2026-05-26:100.2;2026-05-29:102.0;2026-06-02:99.5;2026-06-05:101.5;2026-06-08:100.8",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-007"
    },
    {
      "parameter": "CurrentValue",
      "value": "100.8",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-008"
    },
    {
      "parameter": "CurrentDate",
      "value": "2026-06-08",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-009"
    },
    {
      "parameter": "EstablishedMean",
      "value": "100.0",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-010"
    },
    {
      "parameter": "EstablishedSD",
      "value": "3.0",
      "status": "PASS|WARNING|FAIL",
      "message": "Deterministic rule-based check result",
      "ruleReference": "FS-RULE-011"
    },
    {
      "parameter": "UpperLimit_3SD",
      "value": "109.0",
      "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": "PositiveNegativeControlTrendChecker.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, контроль образцов, контаминации, чувствительности и отчётности.

Открыть