Ослепление и приватность
X7 Insight защищает две разные вещи: целостность ослепления исследования (чтобы допуск к кодам лечения не «протёк» через данные) и приватность участников (чтобы в системе не было персональных данных пациента). Обе защиты работают на уровне сервера, а не интерфейса — поэтому их нельзя обойти, «подсмотрев» ответ API или выгрузку.
Ослепление (blinding)
Заголовок раздела «Ослепление (blinding)»Ослепление — это отдельная ось: конкретное поле помечается как слепое
(ItemDef.blinded), и при обычном чтении сервер отдаёт вместо значения маску — всем,
включая держателей права на расслеплённые данные (data.unblinded.read). Само значение это
право не показывает: оно лишь позволяет выполнить явное расслепление (reveal), и каждый такой
жест аудируется.
Маскирование значений
Заголовок раздела «Маскирование значений»- Слепое поле показывается как ••• — фиксированной ширины. Длина маски не зависит от значения, поэтому по ней нельзя догадаться, «длинное» значение или «короткое».
- Маскирование делает сервер при сериализации, а не браузер. Роль без допуска не получит значение ни в форме, ни в API, ни в экспорте — скрывать нечего, потому что значение просто не передаётся.
- В аудиторском следе слепые значения в колонках «До / После» тоже маскируются для тех, у кого нет допуска.
Расслепление (reveal) — только по явному действию и под аудитом
Заголовок раздела «Расслепление (reveal) — только по явному действию и под аудитом»- Слепое поле
- POST …/reveal — явный жестЗначение показано · аудит 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); - события платформы фильтруют полезную нагрузку по правам подписчика, чтобы слепое значение не «утекло» через уведомление модулю.
Подробнее о правах и областях — в Каталоге разрешений.