Перейти к основному содержимому

Правила валидации

Правила валидации — это автоматические проверки, которые X7 Insight выполняет при вводе и сохранении данных, при импорте и в пакетных запусках. С их помощью Менеджер данных защищает качество данных, открывает запросы (Discrepancy Notes), управляет условными показами и автозаполнением. Все правила объединены в наборы (rulesets) и привязаны к области применения внутри исследования.

Из чего состоит правило

  1. Типrules.enums.RuleType. Категория проверки (см. ниже).
  2. Контекстrules.enums.RuleExecutionContext. Когда правило выполняется.
  3. Область — конкретная форма, визит или поле, к которому привязано правило.
  4. Условие — логическое выражение на основе значений полей, кодов списков, дат, арифметики.
  5. Действияrules.enums.RuleActionType. Что произойдёт при сработавшем условии.
  6. Серьёзностьrules.enums.ValidationSeverity. Блокирует ли срабатывание завершение CRF.
  7. Сообщение — текст, который увидит пользователь или Монитор.

Типы правил — RuleType

ТипЧто проверяетРеалистичный пример
RANGE_CHECKЗначение поля попадает в диапазонТемпература тела — от 32 до 43 °C
CROSS_FIELDЗависимость между полями одной формыЕсли «Принимал препарат» = Да, то «Доза» обязательно
CROSS_FORMСогласованность между разными формами одного визита«Вес» в Vitals совпадает с «Весом» в форме приёма препарата
CROSS_EVENTСогласованность между разными визитамиАртериальное давление на Day 30 не отличается более чем на 30% от Baseline
BUSINESS_RULEПроизвольная бизнес-логикаЕсли AE Severity = «Тяжёлая», должна быть заполнена форма SAE
CONDITIONAL_DISPLAYУсловный показ поля или секции (SCD)Поле «Доза» появляется, если «Препарат» = «Иное»
CALCULATIONАвтоматически вычисляемое значениеИМТ = вес (кг) / рост² (м); возраст на момент визита

CONDITIONAL_DISPLAY использует действия RuleActionType.SHOW и RuleActionType.HIDE и не должен иметь побочных эффектов (например, не должен открывать запросы и менять данные).

Контексты выполнения — RuleExecutionContext

КонтекстКогда срабатываетЧто значит для пользователя
Ввод данных (DATA_ENTRY)В реальном времени при изменении и сохранении поляОператор видит результат сразу: сообщение, открытый запрос, скрытое поле
Пакетная обработка (BATCH)По расписанию или по требованию Менеджера данныхРезультат появится через несколько минут или после ручного запуска; не мешает оператору
Импорт данных (IMPORT)При загрузке ODM XML, CSV/Excel или через APIОшибки попадают в отчёт об импорте; чистые записи остаются
Административное редактирование (ADMINISTRATIVE)При правках с правом data.administrative_editingПроверяется консистентность правки и наличие «Причины изменения»

Тестируйте новое правило сначала в DATA_ENTRY, прежде чем включать в BATCH — так быстрее заметите неверные условия.

Действия — RuleActionType

ДействиеЧто происходит в системе
Создать Discrepancy Note (FILE_DISCREPANCY_NOTE)Открывается дискрепансия / запрос на форме субъекта. Тип, статусы и работа с ним описаны в Запросах
Отправить Email-уведомление (EMAIL)Уведомление по email адресатам, заданным в правиле
Отправить уведомление в приложении (NOTIFICATION)Сообщение в центре уведомлений /notifications
Показать скрытый элемент (SHOW)Поле или секция становятся видимыми оператору
Скрыть элемент (HIDE)Поле или секция скрываются; их значения не очищаются
Вставить/вычислить значение (INSERT)Автозаполнение поля результатом выражения (CALCULATION)
Действие с событием (EVENT_ACTION)Программный переход статуса визита или связанное событие
Триггер рандомизации (RANDOMIZE)Запрос на рандомизацию (модуль X7 Insight Plus)

Одно правило может выполнять несколько действий. Например, CROSS_FIELD-правило одновременно создаёт запрос и отправляет уведомление Менеджеру данных.

Серьёзность — ValidationSeverity

УровеньЧто делает
Ошибка (ERROR)Создаёт блокирующий Discrepancy Note. Завершение и подписание CRF запрещены, пока не разрешён запрос
Предупреждение (WARNING)Создаёт неблокирующий Discrepancy Note. Завершение возможно, но запрос остаётся открытым
Информация (INFO)Только сообщение пользователю, запрос не создаётся

Блокирующая серьёзность применяется только к однозначно недопустимым данным; для «подозрительно, но возможно» используйте WARNING.

Где работать с правилами

ГдеМаршрут
Каталог наборов правил/studies/[studyId]/rules
Конструктор набора и его правил/studies/[studyId]/rules/[rulesetId]
Журнал выполнения набора/studies/[studyId]/rules/[rulesetId]/logs

Чтобы открыть конструктор конкретного правила, перейдите в набор и кликните на правило в списке.

Скриншот

Конструктор правила с условием, действиями и сообщением Содержание: конструктор правила — редактор условия слева, тип/контекст/действия/серьёзность справа, поле сообщения и кнопка «Проверить правило».

Создание набора правил

  1. /studies/[studyId]/rules → «Создать набор правил». Укажите название и описание.
  2. Перейдите в /studies/[studyId]/rules/[rulesetId] и добавляйте правила:
    • выберите тип (RuleType) и контекст (RuleExecutionContext);
    • укажите область (форма, визит, поле);
    • задайте условие в визуальном редакторе;
    • выберите действия (RuleActionType) и серьёзность (ValidationSeverity);
    • напишите сообщение.
  3. Включите набор. Право включения и выключения наборов — rules.manage_rules.

Тестирование правила

В конструкторе используйте кнопку «Проверить правило»: она подставляет ваши тестовые значения и показывает, выполнено ли условие и какие действия запустятся. Для проверки на реальных данных используйте тестового субъекта в тестовом центре и контекст DATA_ENTRY. После включения в BATCH проверьте журнал — там видно реальные срабатывания.

Журнал выполнения

/studies/[studyId]/rules/[rulesetId]/logs показывает каждое срабатывание правила со статусом rules.enums.RuleExecutionStatus:

СтатусЧто значитЧто делать
Условие не выполнено (CONDITION_NOT_MET)Условие вернуло «ложь» — действия не запускалисьЭто норма для проверки выборки; убедитесь, что условие охватывает нужные случаи
Успешно выполнено (SUCCESS)Правило прошло полный цикл без ошибокДействий не было либо они не требовались
Действия выполнены (ACTIONS_EXECUTED)Условие сработало, все действия выполненыПроверьте результат на форме субъекта
Ошибка вычисления (ERROR_EVAL)Не удалось вычислить условие — обычно ссылка на удалённое поле, деление на ноль, неверный типОткройте правило и исправьте выражение
Ошибка выполнения действия (ERROR_ACTION)Условие вычислилось, но действие не выполнилось (например, INSERT в заблокированное поле)Смените действие, поле или область применения
Правило пропущено (SKIPPED)Правило не запускалось — например, форма в «Неактивен», или контекст не подходитПроверьте контекст и состояние формы

В строке журнала с ERROR_EVAL / ERROR_ACTION всегда есть идентификатор ошибки — удобно передавать в поддержку.

Best practices

  • Тестируйте новое правило в DATA_ENTRY, прежде чем включать в BATCH.
  • В CALCULATION ссылайтесь только на поля, заполняемые до этого вычисления; не зависьте от полей, которые пользователь заполнит позже.
  • В CONDITIONAL_DISPLAY оставляйте только SHOW и HIDE — никаких побочных действий и записей.
  • Одно правило — одна проверка. Длинные составные условия трудно отлаживать и читать в журнале.
  • Блокирующая серьёзность (ERROR) — только для однозначно недопустимых данных. Для подозрительных — WARNING или INFO.

Что делать, если…

СитуацияЧто проверить
Правило не срабатываетВ /studies/[studyId]/rules/[rulesetId]/logs ищите строки по правилу; CONDITION_NOT_MET означает, что условие не выполнено
ERROR_EVAL в журналеСсылка на удалённое или переименованное поле, либо деление на ноль — исправьте выражение
ERROR_ACTION в журналеINSERT пытается записать в защищённое поле (заблокированное, подписанное) — смените действие или область
Слишком много запросовУсловия слишком широкие; снизьте серьёзность с ERROR до WARNING или сузьте область
Правило с CONDITIONAL_DISPLAY влияет на данныеУберите все действия, кроме SHOW / HIDECONDITIONAL_DISPLAY не должен менять данные
Правило в IMPORT не вызвалосьПроверьте, что контекст правила содержит IMPORT; правила только для DATA_ENTRY при импорте не выполняются

При нестабильной работе движка сохраните идентификатор ошибки и передайте в поддержку.

См. также