1. Общие положения
Настоящая Политика обработки персональных данных (далее — «Политика») составлена в соответствии с Федеральным законом РФ от 27.07.2006 № 152-ФЗ «О персональных данных» и определяет, как сайт promilletest.ru (далее — «Сайт», «ПромиллеТест») обрабатывает информацию о посетителях. Политика распространяется на все способы взаимодействия пользователя с Сайтом: открытие любой страницы, использование калькулятора, установку Сайта в качестве приложения (PWA), подписку на push-уведомления.
Оператором обработки персональных данных в соответствии со статьёй 3 ФЗ № 152-ФЗ выступает администрация проекта ПромиллеТест. Полные реквизиты юридического лица или индивидуального предпринимателя, эксплуатирующего Сайт, размещены в подвале сайта в момент публичного запуска; до этого момента ПромиллеТест работает в режиме закрытого тестирования и не привлекает внешних посетителей в коммерческих целях.
Используя Сайт, вы подтверждаете, что прочитали и приняли условия настоящей Политики. Если вы не согласны хотя бы с одним из её положений — пожалуйста, не используйте Сайт и не сохраняйте его в качестве приложения.
2. Какие данные мы получаем
2.1. Данные, введённые в калькулятор
Параметры, которые вы вводите в форму расчёта (пол, масса тела, объём и крепость напитков, время приёма, наполненность желудка, темп употребления, толерантность), не отправляются на наш сервер. Расчёт по формуле Видмарка с поправкой Сейдля выполняется в JavaScript-коде, который работает непосредственно в вашем браузере. Промежуточные значения, итоговый уровень BAC и кривая выведения этанола во времени не покидают ваше устройство ни в каком виде.
Часть параметров калькулятора сохраняется в локальном хранилище браузера (
localStorage) под ключом pt-calc-profile, чтобы при следующем визите
вы не вводили их заново. Сохраняются только стабильные параметры профиля: пол, масса тела,
ориентировочная наполненность желудка и темп употребления. Список напитков, конкретные объёмы
и время приёма — не сохраняются и удаляются при закрытии вкладки. Удалить сохранённый
профиль можно вручную через настройки браузера в разделе данных сайтов или пересоздав профиль на
странице калькулятора.
2.2. Технические данные о производительности (RUM-канал)
Сайт отправляет на собственный сервер обезличенную информацию о работе страницы (Real User
Monitoring) на эндпоинты /rum, /rum/events и /errors.
Это нужно, чтобы своевременно реагировать на проблемы производительности и сбои JavaScript. В
RUM-канал отправляются:
- Категория страницы (template). Не сам URL, а сегмент — например,
za-rul-drink,main,zakon. Точный путь с параметрами или идентификаторами не передаётся. - Тип устройства. Одно из значений: mobile, tablet, desktop — определяется по ширине экрана, без сбора характеристик устройства.
- Тип соединения. Одно из значений: 4g, 3g, 2g, slow-2g, wifi, unknown — из Network Information API браузера.
- Страна (ISO-2). Двухбуквенный код страны, который добавляет наш веб-сервер Caddy на основе IP-геолокации (например, RU). Сам IP-адрес в долгосрочное хранилище не попадает и обнуляется в логах Promtail на этапе приёма.
- Метрики Web Vitals. LCP (Largest Contentful Paint), CLS (Cumulative Layout Shift), INP (Interaction to Next Paint), TTFB (Time to First Byte), FCP (First Contentful Paint), а также длительные задачи (long_task). Числовые значения в миллисекундах или в безразмерных единицах CLS.
- Тип навигации. Стандартное значение из Navigation Timing API: navigate, reload, back-forward, prerender, restore.
- Технические события калькулятора. Факт начала расчёта, выбора напитка, переключения сценария «А что если». Численные значения промилле и состав введённых напитков в события не входят — мы фиксируем только сам факт взаимодействия.
- Псевдоним сессии (session_hash). 16-символьная шестнадцатеричная строка, которая
создаётся в браузере через crypto.randomUUID() и хранится в
sessionStorageдо закрытия вкладки. Это не стабильный идентификатор пользователя: после закрытия вкладки псевдоним удаляется и в следующей сессии генерируется новый. Имея session_hash, восстановить личность пользователя нельзя.
RUM-канал работает без cookies и без согласия на их использование, потому что собираемые данные обезличены и необходимы для технической эксплуатации Сайта (в терминологии ФЗ-152 — обработка для «обеспечения функционирования информационной системы»). Если вы не хотите участвовать даже в этой обезличенной телеметрии, отключите JavaScript для Сайта в настройках браузера или используйте блокировщик соответствующих эндпоинтов.
2.3. Веб-аналитика Яндекс.Метрика
Сайт использует Яндекс.Метрику для понимания, какие страницы пользуются спросом,
как пользователи перемещаются между разделами, какие сценарии калькулятора чаще всего востребованы.
Метрика загружается с задержкой не менее 10 секунд после полной загрузки страницы, через прокси
/metrika.js на нашем домене (для устойчивости к адблокерам), и только при наличии явного согласия пользователя, выраженного нажатием кнопки «Принять» в cookie-баннере.
Метрика собирает следующие категории данных:
- IP-адрес (хешируется на стороне Яндекса в обезличенный идентификатор);
- тип устройства, операционная система, браузер, разрешение экрана;
- источник перехода (HTTP referrer), UTM-метки в адресной строке;
- посещаемые страницы и время, проведённое на них;
- пользовательские события Метрики, дублирующие наш RUM-канал (без числовых значений результатов калькулятора).
Webvisor (запись действий пользователя) включён только для случайной выборки сессий — по
умолчанию 5%, регулируется параметром PUBLIC_WEBVISOR_SAMPLE_RATE. Записи
Webvisor хранятся на серверах Яндекса в РФ, доступ к ним имеют только администраторы Сайта в
обезличенном виде. Записи не используются для рекламы и не передаются третьим лицам.
Полные условия обработки данных Метрикой описаны на стороне Яндекса: Условия использования Яндекс.Метрики и Политика конфиденциальности Яндекса . Если вы хотите отказаться от участия в статистике Метрики, нажмите «Только необходимые» в cookie-баннере либо установите блокировщик Метрики в настройках браузера.
2.4. Локальное хранилище браузера
Сайт хранит несколько технических флагов и настроек в localStorage вашего браузера.
Они никогда не покидают устройство и не отправляются на сервер.
-
pt-calc-profile— стабильный профиль калькулятора (пол, масса, желудок, темп); см. п. 2.1. -
pt-theme— выбранная вами тема оформления (светлая или тёмная), сохраняется ради единообразия между визитами. -
pt-age-confirmed— флаг «возраст 18+ подтверждён», устанавливается, когда вы подтверждаете возраст в первой плашке. Флаг хранится только локально и блокирует повторный показ окна возрастного ограничения. -
pt-cookie-consent— ваш выбор по cookie-баннеру (значениеacceptedилиdenied); пока флаг не установлен, Яндекс.Метрика не загружается совсем. -
pt-vapid— публичный VAPID-ключ Сайта, который браузер использует для проверки подлинности отправителя push-уведомлений. Сам по себе ключ публичный и не является вашими данными — это «открытый ключ нашего сервера». Используется только в режиме PWA при активной подписке на push-уведомления (см. п. 2.6). -
В
sessionStorageпод ключомpt-session— псевдоним сессии для RUM (см. п. 2.2), живёт до закрытия вкладки.
Удалить любые из этих ключей можно в один шаг через настройки браузера: «Очистить данные сайта» либо вручную в DevTools во вкладке Application → Storage. После очистки калькулятор продолжит работать, но при следующем визите будет вести себя как для нового пользователя.
2.5. Кеш PWA и Service Worker
Сайт работает как Progressive Web App: Service Worker (файл /sw.js) кеширует
статические ресурсы — JavaScript, CSS, HTML, шрифты WOFF2, иконки SVG/PNG — для офлайн-доступа
и быстрого открытия повторных страниц. Кеш PWA не содержит ваших персональных данных
или результатов расчётов; он хранит только публичные ресурсы Сайта и их версии.
Кеш можно очистить через настройки браузера или удалив установленное приложение. PWA
отключается флагом PUBLIC_ENABLE_PWA=false, который администратор может
использовать на staging-окружениях.
2.6. Push-уведомления «расчётно ниже нормы»
На странице результата калькулятора есть кнопка «Напомнить, когда уровень будет ниже нормы». Если вы её нажимаете и даёте браузеру разрешение на показ уведомлений, Сайт создаёт подписку в формате Web Push API (RFC 8291) и сохраняет её на нашем push-сервисе. Подписка не привязана к вашему имени, номеру телефона или e-mail и существует только пока сама запись активна.
В момент создания подписки на push-сервис передаются и сохраняются:
- endpoint — URL push-сервера вашего браузера (например, fcm.googleapis.com у Chromium-браузеров, mozilla.com у Firefox), куда мы отправим уведомление. Это технический адресат «на конверте», не идентификатор пользователя.
- auth_key и p256dh_key — публичные криптографические ключи устройства, нужны для шифрования содержимого по RFC 8291. Закрытый ключ остаётся в браузере, мы его не получаем.
- deliver_at — момент UTC, когда нужно отправить уведомление. Рассчитывается в браузере как «сейчас + расчётное время до возвращения BAC ниже нормы 0,3 ‰».
- payload — короткий JSON
{ title, body, url }с текстом уведомления. Текст формируется на сервере (не клиентом), чтобы исключить инъекцию произвольных сообщений на чужие подписки.
Что не сохраняется: имя пользователя, e-mail, IP-адрес, cookies, геолокация, конкретные параметры расчёта (масса, пол, выпитые напитки) — всё это остаётся в браузере и в payload не попадает.
Жизненный цикл подписки: статус pending → sent (после успешной отправки)
→ запись хранится не более 30 дней с момента отправки, затем физически
удаляется автоматическим cron-заданием на push-сервисе. Если push-сервер вернул ошибку 410
Gone (вы удалили PWA или отозвали разрешение в браузере), запись помечается как
failed и тоже подлежит автоматическому удалению.
Отозвать подписку можно тремя способами:
-
нажать в интерфейсе Сайта кнопку «Отменить напоминание» — мы немедленно отправляем DELETE в
push-сервис (статус подписки переводится в
cancelled); -
отозвать разрешение на уведомления в настройках сайта в браузере — следующая попытка
доставки получит ошибку и подписка пометится как
failed; - удалить установленное PWA — все подписки для этого устройства автоматически становятся недоступны.
Push-уведомления никогда не используются для рекламы или маркетинга. Единственное сообщение, которое Сайт может прислать, — расчётное напоминание о моменте, когда уровень BAC по формуле Видмарка опускается ниже допустимой нормы 0,3 ‰. Само уведомление сопровождается дисклеймером о том, что расчёт носит ориентировочный характер.
2.7. Cookies
Технических cookies от первого лица (нашего домена) Сайт не устанавливает. Все настройки,
перечисленные в п. 2.4, хранятся в localStorage и формально cookies не являются.
После принятия cookie-баннера Яндекс.Метрика устанавливает свои собственные cookies для идентификации сессий — они описаны в политике Метрики. Маркетинговых cookies, ретаргетинга через социальные сети, рекламных трекеров — на Сайте нет.
3. Цели обработки данных
Сайт обрабатывает указанные выше категории данных исключительно для следующих целей:
- Работа калькулятора. Параметры профиля сохраняются, чтобы пользователь не вводил их при каждом визите.
- Техническая эксплуатация. Метрики Web Vitals и сообщения об ошибках JavaScript позволяют находить и исправлять проблемы производительности и сбоев.
- Понимание интересов аудитории. Сводная статистика по категориям страниц нужна, чтобы определять, какие материалы расширять.
- Соблюдение требований закона. Подтверждение возраста 18+ блокирует несовершеннолетних в соответствии с этикой проекта и требованиями к материалам об алкоголе.
Сайт не использует собираемые данные для персонализированной рекламы, таргетинга, скоринга, продажи третьим лицам, передачи в государственные или медицинские реестры. Расчёты, выполненные пользователем, никогда не связываются с его именем, телефоном, e-mail или любым устойчивым идентификатором.
4. Правовые основания обработки
Обработка данных в категориях п. 2.1, 2.4 и 2.5 (локальное хранилище и кеш PWA) ведётся на основании пункта 5 части 1 статьи 6 ФЗ-152 — «обработка необходима для исполнения договора, стороной которого является субъект персональных данных»: договором здесь является публичное пользовательское соглашение Сайта.
Обработка обезличенной телеметрии в RUM-канале (п. 2.2) ведётся на основании пункта 7 части 1 статьи 6 ФЗ-152 — «обработка необходима для осуществления прав и законных интересов оператора»: законный интерес — техническая эксплуатация и безопасность информационной системы.
Обработка данных Яндекс.Метрикой (п. 2.3) ведётся на основании пункта 1 части 1 статьи 6
ФЗ-152 — «обработка персональных данных осуществляется с согласия субъекта персональных
данных». Согласие фиксируется через нажатие кнопки «Принять» в cookie-баннере, отзывается
нажатием «Только необходимые» либо очисткой ключа pt-cookie-consent в
localStorage.
5. Передача данных третьим лицам
Сайт передаёт обезличенные данные следующим внешним сервисам в указанных рамках:
- ООО «Яндекс» (Москва, ул. Льва Толстого, д. 16, ОГРН 1027700229193) — обезличенная статистика посещений через Яндекс.Метрику. Передаётся только при наличии вашего согласия в cookie-баннере. Серверы Метрики физически расположены в России.
- Хостинг-провайдер Selectel или Timeweb Cloud — поскольку HTTP-запросы проходят через инфраструктуру провайдера, технически возможен доступ к содержимому запросов. Запросы шифруются TLS, провайдер обязан соблюдать ФЗ-152 как обработчик персональных данных.
- Yandex Object Storage — резервные копии Postgres-базы (RUM-события) и снимков Prometheus сохраняются в S3-совместимое объектное хранилище в РФ. Бэкапы зашифрованы на стороне клиента.
Иным третьим лицам Сайт данные не передаёт. Государственные органы получают информацию только по обоснованному запросу в порядке, установленном законом.
6. Сроки хранения
RUM-события в нашей базе данных хранятся в виде партиций по дате; партиции старше 90 дней автоматически удаляются. Это означает, что любые технические события вашего визита, включая session_hash, физически перестают существовать через три месяца. Агрегированная статистика (без идентификаторов сессий) может храниться дольше — в виде материализованных представлений без возможности восстановления исходных событий.
Данные Яндекс.Метрики хранятся на серверах Яндекса в соответствии с его собственной политикой конфиденциальности.
Локальное хранилище браузера живёт ровно столько, сколько вы сами пожелаете: оно не имеет срока действия и удаляется только при ручной очистке либо при удалении приложения PWA.
7. Защита данных
Сайт реализует следующие меры безопасности:
- Все запросы к Сайту проходят по протоколу HTTPS с актуальным TLS-сертификатом и политикой HSTS — данные нельзя перехватить в публичной Wi-Fi-сети.
-
Веб-сервер Caddy реализует Content Security Policy, защиту от clickjacking (
X-Frame-Options,frame-ancestors 'none'), запрет на встраивание в iframes сторонних сайтов. - Push-сервис, принимающий RUM-события, находится за обратным прокси и ограничен по частоте запросов (rate limit 60 запросов в минуту с одного IP).
- В логах веб-сервера IP-адреса анонимизируются на этапе приёма (хешируются, последний октет обнуляется).
- Резервные копии шифруются перед загрузкой в Yandex Object Storage; ключи шифрования хранятся отдельно от данных.
8. Ваши права по ФЗ-152
В соответствии с главой 3 ФЗ-152 «О персональных данных» вы имеете право:
- получить от оператора подтверждение факта обработки и сведения о составе данных;
- требовать уточнения, блокирования или уничтожения данных, если они неточны или обработка избыточна;
- отозвать согласие на обработку (применительно к данным, собираемым с согласия — то есть к Яндекс.Метрике): для этого достаточно нажать «Только необходимые» в cookie-баннере либо очистить cookies сайта в настройках браузера;
- обжаловать действия оператора в Роскомнадзор или суд.
Поскольку Сайт не хранит на сервере данные, по которым возможно идентифицировать конкретного посетителя, технически удалить «именно ваши» данные со стороны оператора нечего: всё, что хранится в браузере, удаляется вами через очистку данных сайта. RUM-события обезличены ещё на этапе сбора и не привязаны к личности.
Если вы всё же хотите подать формальный запрос — напишите на promilletest@yandex.com с подтверждением личности (паспортные данные не требуются — достаточно описать ваш визит так, чтобы мы могли удостовериться в добросовестности обращения). Ответ будет дан в течение 30 дней.
9. Возрастные ограничения
Сайт содержит информацию об алкоголе и его влиянии на организм. Доступ предназначен для лиц, достигших возраста 18 лет — в соответствии с законодательством РФ о ограничении информации об алкоголе и об охране здоровья граждан от воздействия алкоголя. Несовершеннолетним посетителям Сайт показывает предупреждение и не должен использоваться без сопровождения взрослого.
Сайт не собирает данные о несовершеннолетних целенаправленно. Если вам известно, что несовершеннолетний посетил Сайт и каким-либо образом передал свои данные — сообщите по адресу promilletest@yandex.com, и мы примем меры по их удалению.
10. Трансграничная передача данных
Все данные, собираемые Сайтом, обрабатываются и хранятся в Российской Федерации. Трансграничная передача персональных данных не осуществляется. Серверы Яндекс.Метрики, наш хостинг (Selectel или Timeweb Cloud) и Yandex Object Storage расположены физически в России.
Шрифты с font.googleapis.com и аналогичные сторонние ресурсы Сайт не загружает: все статические файлы сервируются с собственного домена, чтобы исключить случайные обращения к зарубежным CDN.
11. Изменения в Политике
Если мы добавим новый источник данных, изменим логику обработки или поменяем оператора — обновим текст этого документа и поставим текущую дату в строке «Обновлено» сверху. Текст в момент вашего визита считается действующим. Существенные изменения (новые категории данных, новые получатели, изменение правовых оснований) дополнительно анонсируются в cookie-баннере и требуют повторного подтверждения согласия.
Архивные редакции Политики не публикуются; если вам нужна более ранняя версия — напишите на контактный адрес ниже, мы предоставим выгрузку из git-истории репозитория проекта.
12. Контакты
По вопросам обработки персональных данных, отзыва согласия и реализации прав по ФЗ-152 пишите на promilletest@yandex.com, обозначив тему «Персональные данные».
Реквизиты юридического лица, эксплуатирующего Сайт, размещены в подвале каждой страницы и продублированы на странице «О проекте». По вопросам, не связанным с персональными данными (методика расчёта, юридические комментарии, ошибки в фактах), используйте адреса, указанные на странице «О проекте».
По всем процедурным вопросам обработки персональных данных в РФ действует Роскомнадзор как уполномоченный орган по защите прав субъектов персональных данных.