URS & FS — спецификация пользовательских требований и функциональная спецификация
Документ описывает контролируемый интерфейс, валидационное поведение и ожидаемые результаты утилиты OmeprazoleAssayChecker. Документ предназначен для включения в папку утилиты рядом с input.csv и файлом описания. Предполагаемый исполняемый файл: OmeprazoleAssayChecker.exe.
Назначение: утилита выполняет детерминированную проверку входных QC-данных по утверждённым пределам, формирует машинно-читаемый output.json и поддерживает review в QC/QA, интеграцию с LIMS/ELN/MES и подготовку CSV/CSA-пакета.
Область применения
| Класс утилиты | ВЭЖХ / хроматографический QC |
| Основной объект/метод | Контроль качества Омепразола |
| Вход | input.csv с фиксированным заголовком и контролируемыми типами данных. |
| Выход | output.json со статусами PASS, WARNING, FAIL, перечнем проверок и критическими находками. |
| Исключения | Утилита не заменяет утверждённую спецификацию, методику анализа, расследование OOS/OOT и решение Qualified Person / QA о выпуске. |
Предметные ограничения и критические параметры
Ниже приведены ключевые фрагменты исходного описания. Перед продуктивным применением пределы должны быть сверены с утверждённой спецификацией, регистрационным досье, актуальной фармакопейной редакцией и локальными SOP.
- ℹ️ Утилита проверяет критические параметры качества омепразола:
- • Содержание основного вещества (Assay): 98.0–102.0%
- • Сумма родственных примесей: ≤0.5%
- • Максимальная единичная примесь: ≤0.1%
- • Удельное вращение: от -145° до -165°
- • Потеря в массе при высушивании (LOD): ≤0.5%
- ⚠️ КРИТИЧНО: Отклонение удельного вращения → наличие неактивного энантиомера!
- OmeprazoleAssayChecker.exe input.csv output.json → оценка ваших данных
- Формат input.csv:
- BatchNumber,AssayPercent,TotalImpuritiesPercent,MaxSingleImpurityPercent,SpecificRotation,LossOnDryingPercent
- • Молекула содержит хиральный центр (сульфоксидная группа). Фармакопеи требуют контроля оптической чистоты.
- • Омепразол химически нестабилен: склонен к окислению (до сульфона) и восстановлению (до сульфида).
- • Чувствителен к свету и влаге. Требует защиты при хранении и анализе.
- • ВЭЖХ — основной метод количественного определения и контроля примесей.
- ⚠️ КРИТИЧЕСКИ ВАЖНО:
- • Assay 98.0–102.0% — строгий предел для субстанции.
Фармакопейные и нормативные ссылки, найденные в описании
| # | Источник | Примечание |
|---|
| 1 | Ph. Eur | Используется как указание на источник/контекст метода; перед внедрением требуется сверка с актуальной редакцией. |
| 2 | USP | Используется как указание на источник/контекст метода; перед внедрением требуется сверка с актуальной редакцией. |
| 3 | ГФ РФ | Используется как указание на источник/контекст метода; перед внедрением требуется сверка с актуальной редакцией. |
| 4 | ema | Используется как указание на источник/контекст метода; перед внедрением требуется сверка с актуальной редакцией. |
Производственный поток данных
| Шаг | Ответственный объект | Описание | Контроль |
| 1 | LIMS/ELN/MES или аналитик QC | Формирует input.csv с результатами измерений и идентификатором серии. | Проверка заголовков, обязательных полей и единиц измерения. |
| 2 | OmeprazoleAssayChecker | Загружает CSV, выполняет приведение типов, применяет предметные правила и формирует результат. | Детерминированные правила, отсутствие ML/эвристического решения о соответствии. |
| 3 | QC reviewer / QA | Проверяет output.json, предупреждения, критические отклонения и исходные значения. | Review, расследование отклонений, сохранение следа данных. |
| 4 | Архив / eQMS | Сохраняет вход, выход, версию утилиты, документацию и контрольную сумму. | Data integrity: ALCOA+, воспроизводимость, change control. |
URS — пользовательские требования
| ID | Требование | Критичность | Критерий приемки |
| URS-001 | Утилита должна поставляться с документацией OmeprazoleAssayChecker.documentation.html в той же папке, где находится описание и пример input.csv. | Medium | Файл документации присутствует в папке OmeprazoleAssayChecker и открывается локально в браузере. |
| URS-002 | Утилита должна принимать input.csv с точными заголовками, определёнными в контракте данных. | High | CSV с корректным заголовком обрабатывается без ручного редактирования. |
| URS-003 | Утилита должна проверять наличие обязательных полей, количество колонок, типы данных и базовую правдоподобность значений. | High | Ошибки схемы и преобразования явно отражаются в результате. |
| URS-004 | Утилита должна выполнять оценку по утверждённым пределам для каждого критического и некритического QC-параметра. | High | Каждый проверяемый параметр получает статус и пояснение. |
| URS-005 | Утилита должна формировать итоговый статус серии/строки: PASS, WARNING или FAIL. | High | Критическое отклонение приводит к FAIL; некритическое — к WARNING. |
| URS-006 | Утилита должна формировать output.json, пригодный для LIMS/ELN/MES-интеграции и QA/QC review. | High | JSON содержит исходные значения, правила, статусы, предупреждения и критические находки. |
| URS-007 | Утилита должна сохранять трассируемость между идентификатором серии, входными значениями, применёнными правилами и итоговым статусом. | High | В выходе есть идентификатор серии/строки и перечень проверенных параметров. |
| URS-008 | Утилита не должна использовать машинное обучение или вероятностную интерпретацию для решения о соответствии. | Medium | Результат воспроизводим и основан на явных правилах, порогах и входных значениях. |
| URS-009 | Утилита должна быть пригодна для запуска в CLI-сценарии: OmeprazoleAssayChecker.exe input.csv output.json. | High | При корректных аргументах создаётся output.json; при ошибке возвращается диагностическое сообщение. |
| URS-010 | Документация должна поддерживать подготовку IQ/OQ/PQ или эквивалентной CSV/CSA-проверки. | Medium | Документ содержит URS, FS, CSV-контракт, правила, тестовые сценарии и traceability. |
| URS-011 | Утилита должна разделять ошибки данных, предупреждения метода и критические отказы спецификации. | High | В output.json доступны отдельные коллекции/поля для errors, warnings, critical findings. |
| URS-012 | Утилита должна поддерживать архивирование входа и выхода без изменения данных. | Medium | input.csv и output.json могут быть сохранены как часть записи серии или OQ/PQ-доказательства. |
Контракт input.csv
| # | Поле | Тип | Пример | Назначение |
| 1 | BatchNumber | string | OME-2026-001 | Идентификатор серии/партии для трассируемости. |
| 2 | Assay% | decimal | 99.8 | Результат количественного определения/содержания для оценки соответствия. |
| 3 | TotalImp% | decimal | 0.25 | Контролируемый входной параметр для детерминированных QC-правил. |
| 4 | MaxSingleImp% | decimal | 0.05 | Контролируемый входной параметр для детерминированных QC-правил. |
| 5 | SpecRot | decimal | -155.0 | Контролируемый входной параметр для детерминированных QC-правил. |
| 6 | LOD% | decimal | 0.2 | Влага/вода или потеря в массе при высушивании, важные для стабильности и качества. |
BatchNumber,Assay%,TotalImp%,MaxSingleImp%,SpecRot,LOD%
OME-2026-001,99.8,0.25,0.05,-155.0,0.2
OME-2026-002,99.1,0.30,0.08,-150.5,0.3
OME-FAIL-2026-003,97.5,0.80,0.20,-140.0,0.8
Правила валидации входных данных
| ID | Поле | Тип | Проверка | Критичность |
| VR-001 | BatchNumber | string | не пусто; уникально в пределах файла, если применимо | Medium |
| VR-002 | Assay% | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого %-предела | High |
| VR-003 | TotalImp% | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого числового предела | Medium |
| VR-004 | MaxSingleImp% | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого числового предела | Medium |
| VR-005 | SpecRot | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого числового предела | Medium |
| VR-006 | LOD% | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого числового предела | Medium |
FS — функциональная спецификация
| ID | Функция | Реализация | Связь с URS |
| FS-001 | Локальная HTML-документация | Предоставить двуязычный файл OmeprazoleAssayChecker.documentation.html с переключателем RU/EN, исходным описанием, URS, FS, контрактами и тестами. | URS-001, URS-010 |
| FS-002 | CSV import | Считать input.csv в UTF-8/CSV-совместимом формате, определить строку заголовка и записи данных. | URS-002, URS-009 |
| FS-003 | Schema validation | Сравнить фактические колонки с ожидаемым контрактом; отсутствующие ключевые поля фиксировать как ошибку схемы. | URS-002, URS-003 |
| FS-004 | Type conversion | Преобразовать decimal, flag/boolean и controlled string. Некорректные значения фиксировать на уровне строки и поля. | URS-003 |
| FS-005 | Domain rule engine | Применить правила для объекта/метода Omeprazole Assay Checker, включая критические пределы из описания и утверждённой спецификации. | URS-004, URS-008 |
| FS-006 | Status aggregation | Агрегировать статусы параметров: FAIL при критическом отказе, WARNING при некритическом отклонении, PASS при соответствии. | URS-005, URS-011 |
| FS-007 | JSON export | Записать output.json с идентификатором утилиты, исходными значениями, результатами проверок, warnings и critical findings. | URS-006, URS-007 |
| FS-008 | Error handling | Разделить ошибки запуска, ошибки схемы, ошибки преобразования и ошибки предметных пределов. | URS-003, URS-011 |
| FS-009 | Audit support | Обеспечить структуру результата, пригодную для review, расследования OOS/OOT, повторного расчёта и инспекционного обсуждения. | URS-007, URS-012 |
| FS-010 | Integration contract | Поддерживать стандартный сценарий: LIMS/ELN/MES создаёт input.csv, утилита возвращает output.json, портал отображает описание и документацию. | URS-006, URS-009 |
| FS-011 | Configuration/change control | Любое изменение пределов, имён колонок или логики правил требует версии, review, регрессионных тестов и обновления документации. | URS-010, URS-012 |
| FS-012 | Data integrity | Не изменять исходный input.csv; результаты сохранять отдельно в output.json с возможностью архивирования. | URS-007, URS-012 |
Пример структуры output.json
{
"utilityId": "omeprazoleassaychecker",
"utilityName": "OmeprazoleAssayChecker",
"object": "Omeprazole Assay Checker",
"overallStatus": "PASS|WARNING|FAIL",
"sourceFile": "input.csv",
"recordCount": 3,
"checks": [
{
"parameter": "BatchNumber",
"value": "OME-2026-001",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-001"
},
{
"parameter": "Assay%",
"value": "99.8",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-002"
},
{
"parameter": "TotalImp%",
"value": "0.25",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-003"
},
{
"parameter": "MaxSingleImp%",
"value": "0.05",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-004"
},
{
"parameter": "SpecRot",
"value": "-155.0",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-005"
},
{
"parameter": "LOD%",
"value": "0.2",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-006"
}
],
"criticalFindings": [],
"warnings": [],
"metadata": {
"executionMode": "CLI",
"interface": "CSV to JSON",
"documentationFile": "OmeprazoleAssayChecker.documentation.html"
}
}
Матрица трассировки URS → FS → OQ/PQ
| URS | FS | Проверка | Ожидаемый результат |
| URS-001 | FS-001 | Проверить наличие файла OmeprazoleAssayChecker.documentation.html в папке утилиты. | Файл присутствует, открывается, RU/EN переключатель работает. |
| URS-002/003 | FS-002/003/004 | Запустить утилиту с корректным CSV, CSV без обязательной колонки и CSV с неверным типом. | Корректный CSV обработан; ошибки схемы и типа явно указаны. |
| URS-004/005 | FS-005/006 | Передать значения в пределах, на предупредительном уровне и за критическим пределом. | Получены PASS, WARNING, FAIL согласно правилам. |
| URS-006/007 | FS-007/009/012 | Проверить структуру output.json и трассируемость серии. | JSON содержит идентификатор серии, значения, правила, статусы и critical findings. |
| URS-008 | FS-005 | Повторить запуск с тем же input.csv. | Результат идентичен; нет вероятностного поведения. |
| URS-009/010/012 | FS-010/011/012 | Выполнить CLI-сценарий и архивировать вход/выход/версию. | Артефакты пригодны для OQ/PQ и change-control записи. |
OQ/PQ тестовые сценарии
| ID | Сценарий | Входные данные | Ожидаемый результат |
| OQ-001 | Позитивный путь | CSV из примера с валидными значениями. | output.json создан; итоговый статус PASS или допустимый WARNING согласно правилам. |
| OQ-002 | Отсутствует обязательная колонка | Удалить один ключевой столбец из заголовка. | Ошибка схемы; строка не должна считаться прошедшей проверку. |
| OQ-003 | Некорректный тип | В числовое поле внести текстовое значение. | Ошибка преобразования типа с указанием поля и строки. |
| OQ-004 | Критический предел | Значение критического параметра вне утверждённого предела. | FAIL и запись в criticalFindings. |
| OQ-005 | Предупреждение | Некритическое отклонение или неизвестная контролируемая категория. | WARNING без сокрытия исходного значения. |
| PQ-001 | Реальная серия пользователя | Реальный input.csv из QC-процесса. | Согласованный review с сохранением input.csv, output.json, версии и контрольной суммы. |
QA/QC, CSV/CSA и change control
- Не менять имена колонок без обновления валидатора, тестового набора и документации.
- Хранить
input.csv, output.json, версию исполняемого файла, контрольную сумму и копию документации.
- Перед продуктивным использованием провести IQ/OQ/PQ или эквивалентную риск-ориентированную CSV/CSA-проверку.
- Критические пределы должны быть утверждены владельцем процесса и сверены с регистрационным досье, фармакопеей и локальными SOP.
- Любое изменение правил, порогов или интерпретации статусов должно проходить через change control и регрессионные тесты.