Описание утилиты: Field Lot Complaint Trend
Field Lot Complaint Trend Utility — Анализ трендов рекламаций по сериям
ℹ️ Утилита выполняет статистический анализ жалоб от потребителей и медицинских работников, сгруппированных по производственным сериям, согласно 21 CFR Part 211.198 и ICH Q10:
• Расчет PPM: Определение количества жалоб на миллион единиц продукции для объективной оценки качества.
• Оценка серьезности: Автоматическое выделение критических жалоб, связанных с безопасностью пациента.
• Выявление паттернов: Обнаружение серий с аномально высоким уровнем дефектов упаковки или эффективности.
• Поддержка отзыва: Формирование базы для принятия решения о рыночном отзыве (Market Recall).
⚠️ ВАЖНО:
• Данные о количестве выпущенной продукции (Quantity Distributed) обязательны для расчета PPM.
• Критические жалобы (например, отсутствие эффекта у жизненно важных препаратов) требуют приоритетного расследования.
Использование:
FieldLotComplaintTrendUtility.exe → демо-режим (вывод в консоль)
FieldLotComplaintTrendUtility.exe input.csv output.json → оценка ваших данных
Формат input.csv:
ComplaintID,BatchNumber,ProductName,ComplaintType,Severity,QuantityDistributed,ComplaintDate
Пример:
CMP-001,LOT-A,Drug X,Packaging,Low,100000,2026-01-01
📍 Область применения (Usage Where):
• Фармаконадзор (Pharmacovigilance): Мониторинг безопасности лекарств в пост-регистрационный период.
• Управление качеством (QA): Ежегодный обзор качества продукции (PQR/APR).
• Отдел по работе с клиентами: Быстрая оценка масштаба проблемы при поступлении жалоб.
• Регуляторная отчетность: Подготовка данных для отчетов в FDA/EMA о тенденциях качества.
— ЗАЧЕМ ЭТО НУЖНО?
Заводской контроль качества (QC) может не выявить дефекты, проявляющиеся только при длительном хранении или неправильном использовании.
Анализ полевых данных позволяет выявить системные проблемы производства или нестабильность формуляции.
Это критически важно для защиты репутации компании и, главное, безопасности пациентов.
⚠️ КРИТИЧЕСКИ ВАЖНО:
• Critical Complaints: Любая жалоба, угрожающая жизни или здоровью, автоматически переводит серию в статус "Recall Review".
• PPM Spikes: Резкий рост PPM по сравнению со средним историческим значением указывает на инцидент в производстве.
• Cluster Analysis: Группировка жалоб по датам может указать на проблему с конкретной партией сырья.
• Data Integrity: Все жалобы должны быть зарегистрированы, даже если они кажутся необоснованными.
Ключевые особенности утилиты:
• Автоматический расчет метрики PPM (Parts Per Million)
• Приоритезация жалоб по уровню серьезности (Severity)
• Выявление топ-категорий дефектов для каждой серии
• Генерация сигналов для начала расследования (CAPA)
• Соответствие требованиям GMP к обработке жалоб
Критические параметры:
• Total Complaints: Абсолютное количество жалоб
• PPM: Относительный уровень дефектности
• Critical Count: Количество жалоб высокого риска
• Top Category: Наиболее частый тип проблемы
💡 Советы по использованию:
1. Полнота данных: Включайте в анализ все жалобы, даже закрытые как "не подтвержденные".
2. Контекст: Учитывайте сезонность продаж при интерпретации абсолютных чисел.
3. Сравнение: Сравнивайте PPM текущей серии со средним значением по продукту за год.
4. Обратная связь: Результаты анализа должны передаваться в производство для корректировки процессов.
5. Документирование: Сохраняйте отчеты как часть досье по управлению качеством.
⚠️ Примечание: Данная утилита является инструментом мониторинга трендов. Она не заменяет официальное расследование каждой отдельной жалобы, но помогает выявить серии, требующие особого внимания.
input.csv
ComplaintID,BatchNumber,ProductName,ComplaintType,Severity,QuantityDistributed,ComplaintDate
CMP-2026-001,LOT-2026-A,Aspirin 100mg,Packaging,Low,100000,2026-05-10
CMP-2026-002,LOT-2026-A,Aspirin 100mg,Packaging,Low,100000,2026-05-12
CMP-2026-003,LOT-2026-B,Insulin Glargine,Efficacy,High,50000,2026-05-15
CMP-2026-004,LOT-2026-B,Insulin Glargine,Appearance,Medium,50000,2026-05-16
CMP-2026-005,LOT-2026-B,Insulin Glargine,AE,Critical,50000,2026-05-18
CMP-2026-006,LOT-2026-C,Paracetamol 500mg,Color,Low,200000,2026-05-20
URS & FS — спецификация пользователя и функциональная спецификация
Документ описывает контролируемый интерфейс и поведение утилиты FieldLotComplaintTrendUtility для сценария Field Lot Complaint Trend Utility.
Предметные ограничения и критические параметры
Ниже приведены ключевые фрагменты исходного описания. Перед продуктивным применением пределы должны быть сверены с утверждённой спецификацией, регистрационным досье и локальными SOP.
- ℹ️ Утилита выполняет статистический анализ жалоб от потребителей и медицинских работников, сгруппированных по производственным сериям, согласно 21 CFR Part 211.198 и ICH Q10:
- • Расчет PPM: Определение количества жалоб на миллион единиц продукции для объективной оценки качества.
- • Оценка серьезности: Автоматическое выделение критических жалоб, связанных с безопасностью пациента.
- ⚠️ ВАЖНО:
- • Критические жалобы (например, отсутствие эффекта у жизненно важных препаратов) требуют приоритетного расследования.
- Это критически важно для защиты репутации компании и, главное, безопасности пациентов.
- ⚠️ КРИТИЧЕСКИ ВАЖНО:
- • Critical Complaints: Любая жалоба, угрожающая жизни или здоровью, автоматически переводит серию в статус "Recall Review".
- • Соответствие требованиям GMP к обработке жалоб
- Критические параметры:
- • Critical Count: Количество жалоб высокого риска
URS — пользовательские требования
| ID | Требование | Критичность | Критерий приемки |
|---|
| URS-001 | Утилита должна принимать файл input.csv для Field Lot Complaint Trend Utility с заголовками, определёнными в контракте данных. | High | Файл обрабатывается без ручного изменения заголовков. |
| URS-002 | Утилита должна выполнять детерминированную оценку QC/ОКК без машинного обучения и без вероятностного принятия решения о соответствии. | High | При одинаковых входных данных, версии правил и конфигурации результат полностью воспроизводим. |
| URS-003 | Утилита должна валидировать обязательные поля, типы данных, диапазоны, единицы измерения и предметную правдоподобность значений. | High | Ошибки схемы, преобразования и диапазона явно отражаются в результате. |
| URS-004 | Утилита должна применять предметные пределы и правила из описания, утверждённой спецификации, регистрационного досье и локальных SOP. | High | Каждая проверка имеет результат PASS/WARNING/FAIL и понятное сообщение. |
| URS-005 | Утилита должна формировать output.json с машинно-читаемыми результатами, исходными значениями, предупреждениями, отказами и критическими находками. | High | JSON пригоден для LIMS/ELN/MES-интеграции и QA/QC review. |
| URS-006 | Утилита должна сохранять трассируемость между серией/образцом, входным файлом, применёнными правилами и итоговым статусом. | High | Выход содержит идентификаторы, список параметров и audit metadata. |
| URS-007 | Документация должна поддерживать подготовку IQ/OQ/PQ, CSV/CSA и обсуждение с инспекторами или внутренним QA. | Medium | URS, FS, контракт input/output и тестовые сценарии поставляются вместе с утилитой. |
| URS-008 | Утилита должна использоваться как decision-support инструмент QC, а не как замена утверждённым спецификациям и выпускному решению Qualified Person/QA. | Medium | В документации указан контроль change control и необходимость сверки пределов. |
Контракт input.csv
| # | Поле | Тип | Пример | Назначение |
|---|
| 1 | ComplaintID | string / controlled vocabulary | CMP-2026-001 | Контролируемый входной параметр для детерминированных QC-правил. |
| 2 | BatchNumber | string / controlled vocabulary | LOT-2026-A | Идентификатор серии/партии для трассируемости. |
| 3 | ProductName | string / controlled vocabulary | Aspirin 100mg | Наименование продукта или проверяемой лекарственной формы. |
| 4 | ComplaintType | string / controlled vocabulary | Packaging | Контролируемый входной параметр для детерминированных QC-правил. |
| 5 | Severity | string / controlled vocabulary | Low | Контролируемый входной параметр для детерминированных QC-правил. |
| 6 | QuantityDistributed | decimal | 100000 | Контролируемый входной параметр для детерминированных QC-правил. |
| 7 | ComplaintDate | string / controlled vocabulary | 2026-05-10 | Контролируемый входной параметр для детерминированных QC-правил. |
ComplaintID,BatchNumber,ProductName,ComplaintType,Severity,QuantityDistributed,ComplaintDate
CMP-2026-001,LOT-2026-A,Aspirin 100mg,Packaging,Low,100000,2026-05-10
CMP-2026-002,LOT-2026-A,Aspirin 100mg,Packaging,Low,100000,2026-05-12
CMP-2026-003,LOT-2026-B,Insulin Glargine,Efficacy,High,50000,2026-05-15
Правила валидации входных данных
| ID | Поле | Правило | Критичность |
|---|
| VR-001 | ComplaintID | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | High |
| VR-002 | BatchNumber | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | High |
| VR-003 | ProductName | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | High |
| VR-004 | ComplaintType | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | Medium |
| VR-005 | Severity | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | Medium |
| VR-006 | QuantityDistributed | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | Medium |
| VR-007 | ComplaintDate | Поле должно соответствовать утверждённому справочнику/словарю или допустимой строковой форме. | Medium |
FS — функциональная спецификация
| ID | Функция | Реализация |
|---|
| FS-001 | CLI execution | Поддержать режимы запуска: demo mode без аргументов и production mode input.csv output.json. |
| FS-002 | CSV import | Прочитать input.csv в UTF-8/CSV-совместимом формате, проверить наличие заголовка и ожидаемых колонок. |
| FS-003 | Schema validation | Проверить обязательные поля, количество колонок, неизвестные ключевые поля и пустые обязательные значения. |
| FS-004 | Type conversion | Преобразовать числовые, флаговые и текстовые значения; некорректный формат фиксировать как ошибку строки. |
| FS-005 | Domain rule engine | Применить правила для Field Lot Complaint Trend Utility, включая критические пределы из описания и утверждённой спецификации. |
| FS-006 | Status aggregation | Сформировать итоговый статус: FAIL при критическом отказе, WARNING при некритическом отклонении, PASS при соответствии. |
| FS-007 | JSON export | Записать output.json с детализацией проверок, исходными значениями, предупреждениями, отказами и critical findings. |
| FS-008 | Audit support | Сохранять структуру результата пригодной для review, расследования отклонений и воспроизведения расчёта. |
| FS-009 | Integration contract | Поддержать сценарий LIMS/ELN/MES → input.csv → utility → output.json → portal/admin review. |
| FS-010 | Error handling | Возвращать явные сообщения для отсутствующего файла, пустого CSV, неверной схемы, ошибки записи output.json и некорректного формата. |
Пример output.json
{
"utilityId": "fieldlotcomplainttrendutility",
"utilityFolder": "FieldLotComplaintTrendUtility",
"package": "Vet",
"overallStatus": "PASS|WARNING|FAIL",
"sourceFile": "input.csv",
"processedAtUtc": "2026-06-10T00:00:00Z",
"checks": [
{
"parameter": "ComplaintID",
"value": "CMP-2026-001",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-001"
},
{
"parameter": "BatchNumber",
"value": "LOT-2026-A",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-002"
},
{
"parameter": "ProductName",
"value": "Aspirin 100mg",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-003"
},
{
"parameter": "ComplaintType",
"value": "Packaging",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-004"
},
{
"parameter": "Severity",
"value": "Low",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-005"
},
{
"parameter": "QuantityDistributed",
"value": "100000",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-006"
},
{
"parameter": "ComplaintDate",
"value": "2026-05-10",
"status": "PASS|WARNING|FAIL",
"message": "Deterministic rule-based check result",
"ruleReference": "FS-RULE-007"
}
],
"criticalFindings": [],
"warnings": [],
"audit": {
"inputHash": "sha256:<calculated at runtime>",
"rulesVersion": "<utility executable version>",
"documentation": "FieldLotComplaintTrendUtility.documentation.html"
}
}
Матрица трассируемости
| URS | FS | Тест | Подтверждение |
|---|
| URS-001 | FS-001, FS-002 | OQ-001 | Проверить запуск и импорт валидного input.csv. |
| URS-002 | FS-005, FS-006 | OQ-004 | Повторить один и тот же набор данных и сравнить output.json. |
| URS-003 | FS-003, FS-004, FS-010 | OQ-002, OQ-003 | Проверить отсутствующие колонки и неверные типы. |
| URS-004 | FS-005, FS-006 | OQ-004, PQ-001 | Проверить критические отклонения по реальным/граничным данным. |
| URS-005 | FS-007, FS-009 | OQ-005 | Проверить JSON schema и пригодность для downstream-систем. |
| URS-006 | FS-008 | OQ-006 | Проверить наличие идентификаторов и audit metadata. |
| URS-007 | FS-008, FS-010 | IQ-001, OQ-007 | Проверить комплектность документации и control evidence. |
| URS-008 | FS-005, FS-008 | PQ-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 и утверждёнными процедурами.