URS & FS — спецификация пользовательских требований и функциональная спецификация
Документ описывает контролируемый интерфейс, валидационное поведение и ожидаемые результаты утилиты Fluorat_Quinine_Sulfate_Checker. Документ предназначен для включения в папку утилиты рядом с input.csv и файлом описания. Предполагаемый исполняемый файл: Fluorat_Quinine_Sulfate_Checker.exe.
Назначение: утилита выполняет детерминированную проверку входных QC-данных по утверждённым пределам, формирует машинно-читаемый output.json и поддерживает review в QC/QA, интеграцию с LIMS/ELN/MES и подготовку CSV/CSA-пакета.
Область применения
| Класс утилиты | Флуориметрия / Флюорат |
| Основной объект/метод | Хинина сульфат (Quinine Sulfate) |
| Вход | input.csv с фиксированным заголовком и контролируемыми типами данных. |
| Выход | output.json со статусами PASS, WARNING, FAIL, перечнем проверок и критическими находками. |
| Исключения | Утилита не заменяет утверждённую спецификацию, методику анализа, расследование OOS/OOT и решение Qualified Person / QA о выпуске. |
Предметные ограничения и критические параметры
Ниже приведены ключевые фрагменты исходного описания. Перед продуктивным применением пределы должны быть сверены с утверждённой спецификацией, регистрационным досье, актуальной фармакопейной редакцией и локальными SOP.
- ℹ️ Утилита проверяет критические параметры субстанции хинина сульфата:
- • Содержание основного вещества (99.0–101.0%)
- • Дигидрохинин ≤5.0% (сопутствующий алкалоид)
- • Цинхонидин ≤1.0%
- • Цинхонин ≤1.0%
- • Потеря в массе при высушивании ≤1.0%
- • рН раствора (6.0–6.8)
- • Удельное вращение (-237° ... -245°)
- • Тест на флуоресценцию (Синяя флуоресценция)
- ⚠️ ВАЖНО: Хинин обладает сильной собственной флуоресценцией.
- Контроль сопутствующих алкалоидов (цинхонин, цинхонидин) критичен для снижения токсичности.
- Fluorat_Quinine_Sulfate_Checker.exe input.csv output.json → оценка ваших данных
- Формат input.csv:
- BatchNumber,AssayPercent,DihydroquininePercent,CinchonidinePercent,CinchoninePercent,LossOnDryingPercent,pH_Solution,SpecificRotation,FluorescenceTest
- • Природное происхождение обуславливает наличие стереоизомеров и родственных алкалоидов.
- • Дигидрохинин часто присутствует в значительных количествах (до 5-10% в природном сырье).
Производственный поток данных
| Шаг | Ответственный объект | Описание | Контроль |
| 1 | LIMS/ELN/MES или аналитик QC | Формирует input.csv с результатами измерений и идентификатором серии. | Проверка заголовков, обязательных полей и единиц измерения. |
| 2 | Fluorat_Quinine_Sulfate_Checker | Загружает CSV, выполняет приведение типов, применяет предметные правила и формирует результат. | Детерминированные правила, отсутствие ML/эвристического решения о соответствии. |
| 3 | QC reviewer / QA | Проверяет output.json, предупреждения, критические отклонения и исходные значения. | Review, расследование отклонений, сохранение следа данных. |
| 4 | Архив / eQMS | Сохраняет вход, выход, версию утилиты, документацию и контрольную сумму. | Data integrity: ALCOA+, воспроизводимость, change control. |
URS — пользовательские требования
| ID | Требование | Критичность | Критерий приемки |
| URS-001 | Утилита должна поставляться с документацией Fluorat_Quinine_Sulfate_Checker.documentation.html в той же папке, где находится описание и пример input.csv. | Medium | Файл документации присутствует в папке Fluorat_Quinine_Sulfate_Checker и открывается локально в браузере. |
| 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-сценарии: Fluorat_Quinine_Sulfate_Checker.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 | QUIN-SULF-2026-007 | Идентификатор серии/партии для трассируемости. |
| 2 | AssayPercent | decimal | 99.8 | Результат количественного определения/содержания для оценки соответствия. |
| 3 | DihydroquininePercent | decimal | 3.5 | Контролируемый входной параметр для детерминированных QC-правил. |
| 4 | CinchonidinePercent | string | 0.5 | Контролируемый входной параметр для детерминированных QC-правил. |
| 5 | CinchoninePercent | decimal | 0.4 | Контролируемый входной параметр для детерминированных QC-правил. |
| 6 | LossOnDryingPercent | decimal | 0.6 | Влага/вода или потеря в массе при высушивании, важные для стабильности и качества. |
| 7 | pH_Solution | decimal | 6.4 | pH раствора; параметр стабильности, совместимости и применения. |
| 8 | SpecificRotation | decimal | -242.0 | Контролируемый входной параметр для детерминированных QC-правил. |
| 9 | FluorescenceTest | string | Pass | Контролируемый входной параметр для детерминированных QC-правил. |
BatchNumber,AssayPercent,DihydroquininePercent,CinchonidinePercent,CinchoninePercent,LossOnDryingPercent,pH_Solution,SpecificRotation,FluorescenceTest
QUIN-SULF-2026-007,99.8,3.5,0.5,0.4,0.6,6.4,-242.0,Pass
QUIN-SULF-2026-008,98.5,6.2,0.3,0.2,0.5,6.5,-240.0,Pass
Правила валидации входных данных
| ID | Поле | Тип | Проверка | Критичность |
| VR-001 | BatchNumber | string | не пусто; уникально в пределах файла, если применимо | Medium |
| VR-002 | AssayPercent | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого %-предела | High |
| VR-003 | DihydroquininePercent | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого %-предела | Medium |
| VR-004 | CinchonidinePercent | string | не пусто для обязательного поля | Medium |
| VR-005 | CinchoninePercent | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого %-предела | Medium |
| VR-006 | LossOnDryingPercent | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого %-предела | Medium |
| VR-007 | pH_Solution | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого числового предела | High |
| VR-008 | SpecificRotation | decimal | преобразуется как invariant decimal; конечное значение; без NaN/Infinity; оценка относительно утверждённого числового предела | Medium |
| VR-009 | FluorescenceTest | string | не пусто для обязательного поля | Medium |
FS — функциональная спецификация
| ID | Функция | Реализация | Связь с URS |
| FS-001 | Локальная HTML-документация | Предоставить двуязычный файл Fluorat_Quinine_Sulfate_Checker.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 | Применить правила для объекта/метода Fluorat Quinine Sulfate 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": "fluorat-quinine-sulfate-checker",
"utilityName": "Fluorat_Quinine_Sulfate_Checker",
"object": "Fluorat Quinine Sulfate Checker",
"overallStatus": "PASS|WARNING|FAIL",
"sourceFile": "input.csv",
"recordCount": 2,
"checks": [
{
"parameter": "BatchNumber",
"value": "QUIN-SULF-2026-007",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-001"
},
{
"parameter": "AssayPercent",
"value": "99.8",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-002"
},
{
"parameter": "DihydroquininePercent",
"value": "3.5",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-003"
},
{
"parameter": "CinchonidinePercent",
"value": "0.5",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-004"
},
{
"parameter": "CinchoninePercent",
"value": "0.4",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-005"
},
{
"parameter": "LossOnDryingPercent",
"value": "0.6",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-006"
},
{
"parameter": "pH_Solution",
"value": "6.4",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-007"
},
{
"parameter": "SpecificRotation",
"value": "-242.0",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-008"
},
{
"parameter": "FluorescenceTest",
"value": "Pass",
"status": "PASS|WARNING|FAIL",
"message": "Rule-based check result",
"ruleReference": "VR-009"
}
],
"criticalFindings": [],
"warnings": [],
"metadata": {
"executionMode": "CLI",
"interface": "CSV to JSON",
"documentationFile": "Fluorat_Quinine_Sulfate_Checker.documentation.html"
}
}
Матрица трассировки URS → FS → OQ/PQ
| URS | FS | Проверка | Ожидаемый результат |
| URS-001 | FS-001 | Проверить наличие файла Fluorat_Quinine_Sulfate_Checker.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 и регрессионные тесты.