Правила валидации
Правила валидации — это автоматические проверки, которые X7 Insight выполняет при вводе и сохранении данных, при импорте и в пакетных запусках. С их помощью Менеджер данных защищает качество данных, открывает запросы (Discrepancy Notes), управляет условными показами и автозаполнением. Все правила объединены в наборы (rulesets) и привязаны к области применения внутри исследования.
Из чего состоит правило
- Тип —
rules.enums.RuleType. Категория проверки (см. ниже). - Контекст —
rules.enums.RuleExecutionContext. Когда правило выполняется. - Область — конкретная форма, визит или поле, к которому привязано правило.
- Условие — логическое выражение на основе значений полей, кодов списков, дат, арифметики.
- Действия —
rules.enums.RuleActionType. Что произойдёт при срабо тавшем условии. - Серьёзность —
rules.enums.ValidationSeverity. Блокирует ли срабатывание завершение CRF. - Сообщение — текст, который увидит пользователь или Монитор.
Типы правил — 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 |
Чтобы открыть конструктор конкретного правила, перейдите в набор и кликните на правило в списке.
Содержание: конструктор правила — редактор условия слева, тип/контекст/действия/серьёзность справа, поле сообщения и кнопка «Проверить правило».
Создание набора правил
/studies/[studyId]/rules→ «Создать набор правил». Укажите название и описание.- Перейдите в
/studies/[studyId]/rules/[rulesetId]и добавляйте правила:- выберите тип (
RuleType) и контекст (RuleExecutionContext); - укажите область (форма, визит, поле);
- задайте условие в визуальном редакторе;
- выберите действия (
RuleActionType) и серьёзность (ValidationSeverity); - напишите сообщение.
- выберите тип (
- Включите набор. Право включения и выключения наборов —
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 / HIDE — CONDITIONAL_DISPLAY не должен менять данные |
Правило в IMPORT не вызвалось | Проверьте, что контекст правила содержит IMPORT; правила только для DATA_ENTRY при импорте не выполняются |
При нестабильной работе движка сохраните идентификатор ошибки и передайте в поддержку.
См. также
- Дизайн форм (CRF) — поля, на которые ссылаются правила.
- Визиты и назначения форм — привязка правил к назначению.
- Операции → Запросы — Discrepancy Notes как результат правил.
- Капабилити RBAC — права
rules.manage_rules,rules.execute_rules,rules.view_rules. - Справочник статусов — статусы выполнения правил и запросов.