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

Ослепление и приватность

X7 Insight защищает две разные вещи: целостность ослепления исследования (чтобы допуск к кодам лечения не «протёк» через данные) и приватность участников (чтобы в системе не было персональных данных пациента). Обе защиты работают на уровне сервера, а не интерфейса — поэтому их нельзя обойти, «подсмотрев» ответ API или выгрузку.

0:000:00
Слепое поле маскируется всегда — расслепляет только явный жест, и он аудируется

Ослепление — это отдельная ось: конкретное поле помечается как слепое (ItemDef.blinded), и при обычном чтении сервер отдаёт вместо значения маску — всем, включая держателей права на расслеплённые данные (data.unblinded.read). Само значение это право не показывает: оно лишь позволяет выполнить явное расслепление (reveal), и каждый такой жест аудируется.

  • Слепое поле показывается как ••• — фиксированной ширины. Длина маски не зависит от значения, поэтому по ней нельзя догадаться, «длинное» значение или «короткое».
  • Маскирование делает сервер при сериализации, а не браузер. Роль без допуска не получит значение ни в форме, ни в API, ни в экспорте — скрывать нечего, потому что значение просто не передаётся.
  • В аудиторском следе слепые значения в колонках «До / После» тоже маскируются для тех, у кого нет допуска.

Расслепление (reveal) — только по явному действию и под аудитом

Заголовок раздела «Расслепление (reveal) — только по явному действию и под аудитом»
  1. Слепое поле
    • POST …/reveal — явный жестЗначение показано · аудит data.unblinded_read
    обычное чтение (GET)
  2. Маска ••• — всегда
Обычное чтение маскирует всегда — даже держателю data.unblinded.read; расслепляет только явный жест, и он аудируется.

Пользователь с правом data.unblinded.read может увидеть значение по явной команде «Показать». Это привилегированное действие:

  • Расслеплённое чтение записывается в аудиторский след — кто, когда и какое поле открыл. Это один из немногих аудируемых видов чтения (обычные чтения не логируются).
  • Экстренное расслепление (emergency unblind) требует указать причину.
  • Интерфейс честно предупреждает: «Расслеплённое чтение записывается в аудиторский след».
  • Экспорт маскирует слепые значения по правам того, кто его запускает: без права на расслеплённые данные снапшот получится с маскированием. При запуске вы явно выбираете режим «blinded — с маскированием» (по умолчанию) или «unblinded» (требует права).
  • Инспекционный пакет — всегда слепой: он никогда не расслепляет, независимо от прав запускающего. Финальный пакет — слепой по умолчанию; расслеплённый вариант возможен под двойным контролем: право data.unblinded.read требуется и у запускающего, и у скачивающего.

Приватность: псевдонимные коды субъектов

Заголовок раздела «Приватность: псевдонимные коды субъектов»

X7 Insight — это система сбора клинических данных, а не медицинская карта. Участник идентифицируется псевдонимным кодом субъекта, а не именем.

  • В EDC не хранятся ФИО, адреса и прямые идентификаторы пациента. Персональные данные остаются в исходной документации центра (и, где нужно, в отдельной системе идентификации), а не в EDC.
  • Субъект — это код (например, идентификатор в рамках центра и исследования) плюс клинические данные и статус. Такой псевдонимный код позволяет вести данные участника, не раскрывая, кто это.
  • Данные и аудит языконезависимы и не содержат PII: локализация — только представление, канонические данные хранятся в нейтральном виде.

Ослепление — это не роль и не отдельный «режим». Это обычная механика доступа:

  • слепота поля задаётся в дизайне (ItemDef.blinded);
  • обычное чтение маскирует значение всегда; право data.unblinded.read в нужной области (scope) лишь даёт возможность выполнить явное расслепление;
  • факт расслеплённого чтения аудируется (data.unblinded_read);
  • события платформы фильтруют полезную нагрузку по правам подписчика, чтобы слепое значение не «утекло» через уведомление модулю.

Подробнее о правах и областях — в Каталоге разрешений.