Аудит и журнал действий
X7 Insight ведёт неизменяемый журнал значимых действий пользователей — это требование GxP и 21 CFR Part 11. Аудит существует на двух уровнях: глобальный (вся платформа) и по конкретному исследованию. Эта страница объясняет, что именно записывается, где смотреть, какие capabilities нужны для просмотра и экспорта, и почему журнал нельзя изменить или удалить.
Два уровня аудита
| Уровень | Адрес | Capability и область | Кто видит |
|---|---|---|---|
| Глобальный | /admin/audit | audit.view_audit с областью система | Системный администратор |
| По исследованию | /studies/[studyId]/audit | audit.view_audit с областью исследование | Директор исследования, Менеджер данных, Монитор |
Capability одна — audit.view_audit. Объём того, что видно, определяется областью назначения роли. Исследователь и Координатор в стандартной роли capability audit.view_audit не имеют; история по конкретному субъекту доступна им через кнопку «История изменений» на форме или визите.
Журнал делегирования центра — /studies/[studyId]/sites/[siteId]/team/delegation-log — обособлен от аудита и хр анит историю передачи задач между сотрудниками центра.
Содержание: страница /studies/[studyId]/audit — таблица событий с колонками «Время», «Пользователь», «Действие», «Объект», «Подробности», панель фильтров слева, кнопка «Экспорт» сверху.
Что попадает в журнал
В аудит записываются изменения всех GxP-управляемых моделей (в коде они отмечены атрибутом _gxp_managed = True). На уровне пользователя это все клинические объекты:
- Исследование, центр и их настройки.
- Шаблоны визитов (EventDefinition) и сами визиты (StudyEvent).
- CRF и его версии (CRFVersion), назначения форм на визиты (VisitCRFAssignment).
- Субъекты (StudySubject), группы субъектов, изменения зачисления.
- Event CRF — формы конкретного субъекта на конкретном визите, отдельные значения полей (ItemData).
- Запросы (Discrepancy Note) — открытие, ответы, закрытие, переоткрытие.
- Пользователи, роли, назначения, приглашения.
- Задания экспорта (ExportJob) и их статусы.
- Журнал выполнения правил валидации (
RuleExecutionStatus). - Электронные подписи и снятия подписи (с обязательной причиной).
Реестр изменений
Для каждого события записываются:
- Кто — пользователь и его роль на момент действия.
- Когда — дата и время с точностью до секунды (UTC + локальная зона).
- Что — тип действия (создание, изменение, удаление, подпись, разблокировка, экспорт и т. д.).
- Над каким объектом — тип и идентификатор (Subject ID, номер визита, версия CRF).
- Поле / старое значение / новое значение — для правок данных, по каждому полю отдельно.
- Причина (Reason for Change, RFC) — обязательное пояснение при административном редактировании или повторной правке завершённой формы.
- IP-адрес и User Agent — техническая информация запроса.
Типовые события
| Событие | Когда появляется |
|---|---|
| Объект создан | Заведён субъект, визит, форма, запрос, пользователь |
| Значение поля изменено | В форме отредактировано значение; для повторных правок — с RFC |
| Статус изменён | Визит или форма перешли в другой статус |
| Запрос открыт / ответ получен / закрыт | Работа с Discrepancy Note (любого типа) |
| Форма подписана или подпись снята | Электронная подпись и её сброс |
| Блокировка снята | Менеджер данных или Директор разблокировали форму, визит, центр |
| Роль назначена или снята | Управление командой исследования или центра |
| Данные выгружены | Создано / завершено задание экспорта |
| 2FA сброшено | Системный администратор сбросил TOTP другому пользователю |
Как искать
Все страницы аудита поддерживают одинаковый набор фильтров:
- по пользователю;
- по типу объекта (субъект, визит, форма, запрос, пользователь, экспорт);
- по типу действия (создание, изменение, подпись, блокировка, экспорт);
- по периоду (диапазон дат);
- по ключу объекта (Subject ID, номер визита, идентификатор запроса).
На формах и визитах обычно есть отдельная кнопка «История изменений» — она открывает аудит, отфильтрованный по конкретному объекту.
Экспорт журнала
Capability audit.export_audit разрешает выгрузить отфильтрованный журнал в CSV или PDF. Эта capability присутствует только у Системного администратора. Большие выгрузки выполняются в фоне — как и обычные Экспорты, они проходят через очередь и имеют свой ExportJobStatus. После завершения файл доступен на странице запуска.
| Формат | Назначение |
|---|---|
| CSV | Обработка в таблицах и аналитических инструментах |
| Представление регулятору, спонсору или внутренней комиссии |
В выгрузку могут попадать идентификаторы субъектов и фрагменты значений. Передавайте файлы по защищённым каналам и применяйте политику обращения с PHI/PII, принятую в вашей организации.
Что нельзя изменить в журнале
Журнал аудита immutable — записи нельзя удалить, отредактировать или скрыть в интерфейсе. Это обеспечивается на уровне БД и сервиса; обходные пути на стороне приложения отсутствуют.
- Удаление пользователя — soft delete (
Status.DELETED/Status.AUTO_DELETED); все его записи в аудите сохраняются. - Удаление субъекта или формы — также soft delete; запись и история изменений остаются доступны.
- Снятие электронной подписи фиксируется отдельным событием, а не правкой прежней записи.
Любая попытка «починить» неверную запись делается новой правкой с обязательной причиной (RFC), которая снова попадает в журнал.
Кому раздел особенно нужен
| Роль | Зачем |
|---|---|
| Системный администратор | Расследование инцидентов на уровне платформы, выгрузка для регулятора |
| Директор исследования | Закрытие центра/исследования, проверка готовности к подписи |
| Менеджер данных | Качество данных, расследование запросов |
| Монитор | Проверка соблюдения протокола, источник для SDV |
| Исследователь, Координатор | История по конкретному субъекту или визиту через кнопку «История изменений» на форме (capability audit.view_audit им в стандартной роли не выдана) |
Если нужна помощь
Если нужно найти конкретное событие или подготовить выгрузку для проверки, а фильтры не помогают, опишите ситуацию в Поддержку. К обращению приложите идентификатор исследования, Subject ID, интервал времени и при наличии — идентификатор ошибки. Подробности — в разделе Диагностика.