docs(spec): дизайн Метрика+Вебвизор на портале (кабинет клиента, маскировка ПДн)

Утверждённый с владельцем дизайн: отдельный счётчик для lk.liderra.ru, запись
только в кабинете клиента, маскировка личных данных (Вариант 1), CSP-правка блока
приложения, строка в политике конфиденциальности. Выкат через тестовый стенд +
проверка маскировки как gate. Следующий шаг — план работ (writing-plans).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Дмитрий
2026-07-08 03:53:35 +03:00
parent 757b55e571
commit 6f4efaaa9d
2 changed files with 112 additions and 4 deletions
+4 -4
View File
@@ -1,6 +1,6 @@
# Brain Status (auto-generated)
Last updated: 2026-07-07T16:17:13.094Z
Last updated: 2026-07-08T00:28:55.453Z
| Контролёр | Состояние | Детали |
|---|---|---|
@@ -112,9 +112,9 @@ Episodes since last run: 542 / threshold: 10
| PID | Имя | CPU-время | Возраст |
|---|---|---|---|
| 2132 | Code | 8.78ч | NaNч |
| 3276 | MsMpEng | 7.97ч | NaNч |
| 4 | System | 3.46ч | 0.0ч |
| 2132 | Code | 9.28ч | 12285432.5ч |
| 3276 | MsMpEng | 8.93ч | 0.0ч |
| 4 | System | 3.72ч | NaNч |
⚠️ Проверь, не «осиротевшие» ли это процессы от завершённых Claude-сессий.
@@ -0,0 +1,108 @@
# Дизайн: Яндекс.Метрика + Вебвизор на портале (кабинет клиента)
**Дата:** 08.07.2026
**Статус:** дизайн утверждён заказчиком, готов к плану работ
**Автор:** Claude (brainstorming с владельцем)
## Цель
Дать владельцу смотреть **видеозаписи поведения клиентов** в кабинете портала
(`lk.liderra.ru`) вместо чтения логов. Владелец — не программист; видео нагляднее.
Смотрим, **как** клиент пользуется кабинетом: какие экраны открывает, куда жмёт,
где «затупил», где не нашёл нужное.
## Ключевое ограничение — 152-ФЗ (персональные данные)
Портал показывает **личные данные**: телефоны и имена лидов, сделки, биллинг.
Вебвизор пишет то, что на экране, и отправляет в Яндекс. Поэтому запись ПДн
клиентов в сторонний сервис недопустима без защиты.
**Решение (утверждено):** маскируем в записи **только личные данные** (телефоны,
имена лидов) — Вариант 1 из трёх обсуждённых. Клиент на своём экране видит всё как
обычно; маскировка влияет **только** на сохранённую запись, не на живой экран
клиента. В видео вместо `+7 999 123-45-67``▮▮▮`, но структура и действия видны.
Отвергнуто:
- Вариант 2 (замазать всё содержимое) — безопасно, но видео малополезно.
- Вариант 3 (не маскировать) — 152-ФЗ риск, отклонён.
## Решения (зафиксированы с владельцем)
| Вопрос | Решение |
|---|---|
| Что маскируем | Только личные данные (телефоны/имена лидов) — Вариант 1 |
| Охват записи | **Только кабинет клиента.** Админка, поставщик, страницы входа — БЕЗ записи |
| Счётчик | **Отдельный новый** счётчик для `lk.liderra.ru` (НЕ переиспользуем лендинговый 110476275) |
| Политика конфиденциальности | Добавить строку про использование Яндекс.Метрики |
## Состав работ
### 1. Отдельный счётчик Метрики
Владелец создаёт новый счётчик для `lk.liderra.ru` (сайт = lk.liderra.ru), присылает
номер. Отдельный от лендинга — чтобы статистика портала и лендинга не смешивалась
и Вебвизор/маскировку настраивать независимо.
### 2. Вставка счётчика в приложение с условием охвата
- Счётчик подключается в главном HTML-шаблоне SPA (Blade-view приложения).
- Запись/инициализация Вебвизора — **только когда пользователь в кабинете клиента**
(guard/роль клиента), НЕ на страницах входа, НЕ в админке, НЕ в кабинете поставщика.
- Реализация условия — по контексту авторизации (guard) / по группе маршрутов.
### 3. Учёт переходов в SPA
Портал — одностраничное приложение (Vue Router, экраны без перезагрузки). Подцепить
`ym('hit')` к смене маршрута, чтобы каждый экран считался и попадал в запись сессии.
### 4. Маскировка ПДн в записи (главное)
- Пройти по экранам кабинета клиента: список сделок, карточка лида/сделки, профиль,
везде, где выводятся телефоны/имена лидов.
- Пометить эти элементы меткой Яндекса «скрыть содержимое из записи» (класс/атрибут
Вебвизора для hide-content). Точный механизм маскировки — уточнить по актуальной
документации Метрики на этапе плана (класс типа `ym-hide-content` или аналог).
- Поля ввода паролей Вебвизор маскирует сам по умолчанию — но на них не полагаемся
для ПДн лидов, помечаем явно.
### 5. Защита сервера (CSP) — блок приложения
По аналогии с лендингом (уже сделано 08.07 для landing-блока): в CSP-заголовок
**блока приложения** `lk.liderra.ru` добавить для `https://mc.yandex.ru`:
`script-src`, `img-src`, `connect-src`, `child-src blob:`, `frame-src blob:`,
и домены Метрики в `frame-ancestors`. Без `child-src`/`frame-src blob:` Вебвизор
не пишет (проверено на лендинге: «Посетители есть — Вебвизор пуст»).
NB: у приложения CSP сложнее лендинга (там уже есть smartcaptcha/yastatic/yandex.ru
директивы) — добавлять аккуратно, не ломая существующее.
### 6. Политика конфиденциальности
Добавить строку об использовании Яндекс.Метрики (аналитика/запись сессий с
маскировкой ПДн). Место — политика/пользовательское соглашение портала.
### 7. Выкат — аккуратно (код приложения, не статичная страница)
1. Собрать фронт (Vite build).
2. Бэкап (текущий build + nginx-конфиг).
3. Деплой на боевой.
4. **Проверка живьём** — обязательные пункты:
- Счётчик пишет заходы (отчёт «Посетители» наполняется).
- Вебвизор реально записывает сессию (появляется запись, играется).
- **Маскировка работает: телефоны/имена лидов в записи замазаны** — критично.
- Портал не сломан (вход, ключевые экраны 200, приём лидов/оплаты живы).
- Маскировку проверить **сначала на тестовом стенде** (crm.bp-gr.ru / локально),
потом боевой.
## Главный риск
**Утечка ПДн через незамаскированный элемент.** Если хоть один телефон лида
просочится в запись — это утечка персональных данных в Яндекс. Поэтому проверка
маскировки на реальных экранах кабинета — обязательный gate перед боевым выкатом.
Лучше пере-замаскировать, чем недо-.
## Отличие от лендинга (почему сложнее)
Лендинг = один статичный HTML-файл (правка + scp за минуты). Портал = живое
Vue-приложение + Laravel: нужна вставка в SPA, условный охват по роли, учёт
SPA-переходов, ручная разметка ПДн по экранам, правка более сложного CSP,
сборка+деплой приложения. Риск выше — работаем через тестовый стенд и проверки.
## Вне охвата (YAGNI)
- Запись админки/поставщика/входа — НЕ делаем.
- Тепловые карты/аналитика форм сверх Вебвизора — не в этой итерации.
- Согласие-баннер (cookie consent) отдельным UI — не в этой итерации (покрываем
строкой в политике; при необходимости — отдельная задача).