# Ученики

Раздел называется «Пользователи»: в нём живут все люди школы, а «ученики» — это
фильтр внутри. Здесь про то, как их искать, что видно в профиле, как переносить
между потоками и — отдельно и подробно — как устроена работа с персональными
данными.

> **Это описание того, как работает продукт, а не юридическая консультация.**
> Формулировки политики обработки, текстов согласий и оферты школа согласует
> со своим юристом. Мы описываем механику: что именно система записывает,
> что показывает и что делает по нажатию.

## Поиск и сегменты

Поиск по имени, почте, телефону. Фильтры — по курсу, потоку, тегу, состоянию
доступа, дате.

Собранный фильтр сохраняется **сегментом**. Дальше сегмент работает как обычный
объект: по нему делают массовое действие, на нём строят рассылку, по нему
ветвится сценарий, и он же доступен фильтром в API. Логику отбора не приходится
повторять во втором месте — а значит она не разойдётся.

Условия сегмента соединяются через «и» и «или» с одним уровнем вложенности,
отрицание — свойство условия. Это **не тот же язык**, что в правилах открытия
урока: там только «и», и разница объяснена в [Доступах](/guide/access/).

**«Статус подписки»** и **«Автоплатёж»** (раздел «Деньги») — для школ с подписками:
подписка активна, просрочена, отменена или закончилась — по тарифу или по любому;
автоплатёж включён (у живой подписки сохранена карта), выключен или не прошёл
(были неудачные попытки списания). Те же условия — у развилки сценария.

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

**Сроки условий — числом и единицей**: «за 45 дн.», «за 2 нед.», «за 3 мес.»; пусто — за всё время.
День рождения — «сегодня» или «в ближайшие N».

**«Эл. адрес содержит»** (раздел «Связь» конструктора) отбирает по части адреса
без учёта регистра: `mail.ru`, `yandex.ru`, `icloud.com`. Так собирается, например,
сегмент российских почтовых ящиков. Пустое значение никого не отбирает — иначе
условие без текста совпало бы со всеми, у кого есть почта. Обратный сегмент —
то же условие с отрицанием: «не содержит».

**В списке сегментов** под именем — условия одной строкой, с именами тегов,
курсов и тарифов, а рядом с числом людей — когда его считали: число без даты
выдаёт себя за сегодняшнее. В меню «⋯» у строки — конструктор, пользователи
сегмента и копия; копия сразу открывается конструктором, чтобы поменять условие.
Теги — плашками под списком, с числом людей на каждом.

**На телефоне** сегменты — карточками: имя и число людей в одной строке, под ними
условия словами и «обновлён …». В конструкторе условия идут одно под другим
карточками «Условие 1», «Условие 2», а «И / ИЛИ» переключается строкой между ними.
Правки сохраняются сами; кнопка внизу «Сохранить сегмент · N» дожидается записи
и возвращает к списку.

### Действия над всеми

Справа от условий сегмента — **действия над всеми, кто попал**: выдать доступ
к курсу, отправить рассылку, проставить тег, добавить в группу; остальные —
в списке «Ещё действия». **Число стоит в самой кнопке**, и это то, что
действительно произойдёт: у рассылки — без тех, у кого нет почты и кто
отказался от рекламы; у удаления — без сотрудников.

- **Окно подтверждения** называет, что будет сделано и скольким людям. У выдачи
  доступа — курс, «Доступ до» и галочка «Сообщить письмом, что курс открыт»:
  письмо «Доступ открыт» уходит только тем, кому доступ открыли сейчас.
- **«Отправить рассылку»** открывает письмо на этот сегмент — дальше обычный
  редактор рассылки.
- **Список людей фиксируется при запуске.** Сегмент пересчитывается сам,
  а операция идёт по тем, кто попал в момент нажатия.
- **Окно можно закрыть** — работа не прервётся. Пока оно открыто, виден ход:
  «Сделано 340 из 428».
- **Отчёт — три числа**: сделано, уже было — не меняли, не удалось. У «не
  удалось» — «посмотреть, кто»: список с причиной у каждого. Отчёт остаётся
  в «Что уже делали» и попадает в журнал школы.
- **«Удалить пользователей»** стоит отдельно, под чертой, и подтверждается
  **числом удаляемых**: вводить сотни фамилий нельзя, а число проверяет то,
  чем можно ошибиться, — размер выборки. Число сверяет и сервер. Удаление то же,
  что «Удалить навсегда» в карточке человека. Сотрудников, себя и владельца
  массовое действие не удаляет — они будут в отчёте с причиной.
- **Сценарий необратимого не делает**: шага «Удалить навсегда» в сценарии нет,
  а старый шаг останавливает забег причиной.
- **Агент школы массовые действия не запускает**: он считает сегмент
  и объясняет, кто в нём, а действие над всеми нажимает человек.

**Конструктор сегмента считает на каждое изменение** — кнопки «рассчитать»
нет. Справа от условия — сколько людей попадает под него одно: видно, какое
условие отсекает людей, а какое почти ничего не делает. Условие, под которое
попадает от 80 % базы, предупреждает об этом; если никто не попал, конструктор
называет условие, на котором выборка стала пустой. Группа **«хотя бы одно»**
добавляется кнопкой под условиями.

Справа — сколько человек попало и **кто**: до тридцати — все, дальше первые
десять и ссылка «Показать всех». У каждого «почему в сегменте» — ✓ или ✕
по каждому условию. Там же — у кого нет почты и кто отписался: решение «кому
пишем» принимается здесь, а не в диалоге отправки. Сверху — **«Выгрузить
в таблицу»** и **«Написать этим людям»**: черновик рассылки сразу с этим
сегментом в получателях.

## Профиль

На одном экране: контакты, теги, произвольные поля, курсы и состояние доступа
по каждому, прогресс, ответы, заказы, история активности, согласия.

Куратор по умолчанию видит **только своих** учеников. Это важная деталь: безопасное
поведение должно получаться само, а не включаться галочкой в каждом курсе отдельно.

### Свой профиль

Свой профиль — та же карточка человека, открытая на себе: у сотрудника это
«Мой профиль» в админке, у ученика — «Профиль» в кабинете. Отличия следуют
из того, что человек смотрит на себя:

- **в шапке** — «это вы», своя роль и что она даёт («Владелец · управлять школой
  целиком, включая деньги и настройки»), с какого дня в школе и который у вас
  час; справа — «Выйти из школы» и на скольких устройствах сейчас открыт сеанс;
- **вкладки** — «Данные», «Вход и безопасность», «Деньги», «Обучение», «Доступы»;
  «Прав», «Писем» и «Журнала» в своём профиле нет;
- **«Данные»** — «Как вас зовут», «Куда вам писать» (почта с отметкой
  «подтверждена», телефон, Telegram, MAX, ВКонтакте), «Поля продукта» и «Поля школы»:
  заполненные сразу, пустые — по ссылке «Показать пустые поля». Справа — «Вход в школу»,
  три последних устройства и «Чего здесь нет и почему». У привязанного мессенджера —
  **«Отвязать»**: школа перестаёт писать туда, и входить через него нельзя; привязать
  снова можно в любой момент. Последний способ входа не отвязывается — без почты
  и другого мессенджера школа попросит сначала указать почту. То же — в кабинете
  ученика, «Профиль → Пароль и вход». У того, кто отвечает в обращениях, здесь же
  **«Подпись в обращениях»**: она встаёт под каждым его ответом — в письме,
  в мессенджере и в кабинете ученика; пусто — ответ уходит без подписи;
- **«Вход и безопасность»** — пароль (когда меняли, «Сменить»), двухфакторная
  аутентификация (2FA) и все сеансы с городом (по своей базе городов на сервере школы, адрес наружу
  не уходит): текущее устройство отмечено, «Выйти везде, кроме
  этого» завершает остальные. **Двухфакторная аутентификация (2FA) — по желанию** любой роли, окном
  в три шага: QR-код и рядом ключ текстом с «Скопировать код» (приложение часто
  заводят на том же компьютере); шесть цифр из приложения; десять запасных кодов
  с «Скопировать» и «Скачать файлом» — они показываются один раз, и закрыть окно
  можно только галочкой «Я сохранил коды». «Отключить» — кодом из приложения,
  запасным кодом или, если приложения под рукой нет, паролем. При первом входе
  школа её не спрашивает. Здесь же — **«Мессенджеры школы»**: три строки
  Telegram, MAX, ВКонтакте с состоянием, «Привязать» и «Отвязать». То же есть
  в кабинете ученика: «Профиль → Пароль и вход».

Смена почты проходит через письмо на старый и новый адрес — это вход в школу,
а не строка в анкете. Примечания коллег о человеке и имена сотрудников, выдавших
ему доступ, в своём профиле не показываются: это работа других людей, а не факты
о нём. В чужой карточке пароль, второй шаг и сеансы не правятся — это делает
только сам человек.

## Карточка человека: данные и деньги

**В шапке — «Принесено денег»:** оплаты человека за вычетом возвратов, в валюте
школы. Это то же число, по которому отбирает условие сегмента «принёс
не меньше», поэтому шапка и сегмент не расходятся. Платёж в чужой валюте
попадает в число, только если у него посчитана сумма в валюте школы. Суммы
видят сотрудники с правом на заказы, остальным — прочерк с объяснением.
В своём профиле это число называется «Оплачено».

**Партнёрка — на вкладке «Деньги»**, блоком под покупками. Сотрудник с правом
вести партнёров делает человека партнёром кнопкой «Сделать партнёром» — процент
по-школьному, свой ставится прямо в блоке. У партнёра там же свой и действующий
процент, число ссылок, заработанное и готовое к выплате, и кнопка, которая
выключает партнёрку. Выплаты решаются в разделе «Партнёры».

**Что школа выдаёт партнёру** — там же, в блоке: **личный промокод** (его можно заменить
на свой, узнаваемый в эфире; старый после замены перестаёт работать) и **ссылка на страницу**
школы — выбором из её страниц и страниц продажи, а не полем адреса. Выданная ссылка появляется
у партнёра в кабинете со своим счётчиком переходов. Агенту: «какой промокод у Ольги»,
«выдай Никите код покороче» — `partner_promo`.

**Партнёр — не роль** (правка 20 сентября). «Сделать партнёром» не меняет права: ученик остаётся «Учеником»,
сотрудник — сотрудником, и войти под ним можно, как под любым. **«Моя партнёрская программа»** — раздел
обычного кабинета рядом с «Курсами», «Покупками» и «Поддержкой» (на телефоне — «Партнёр»); у сотрудника —
в меню админки, у того, кто ведёт партнёров, — ссылкой в «Партнёрах». Пункт виден всем: кто ещё не партнёр,
видит, что даёт программа, и становится партнёром кнопкой «Стать партнёром» — права от этого не меняются.
Ссылки заводит только действующий партнёр, и начисления идут только ему; выключенный партнёр видит свою
историю, но новых ссылок и начислений у него нет.

**Промокод работает там, где ссылка не работает.** Партнёр диктует его голосом — в эфире,
в разговоре, в переписке; человек набирает код через неделю с другого устройства, перехода нет,
а привёл его партнёр. Покупатель получает скидку (её размер — настройка программы, по умолчанию
10 %), партнёр — своё вознаграждение. Когда есть и переход, и код, **переход важнее**: по ссылке
человек пришёл, а код мог дать кто угодно. Промокод выдаётся сразу, как только человек стал
партнёром: партнёр, которому нечего продиктовать, — не партнёр.

В кабинете промокод стоит **выше ссылок**: его диктуют голосом, ссылку — нет.

В разделе (кадры «Заход 25, отчёт 3»): плитки «К выплате» с порогом, «Ждёт подтверждения» с окном возврата,
«Переходов» с долей покупок и «Ваш процент»; ссылки — у каждой свой счётчик переходов; **второй уровень** —
кого привели ваши приведённые; выплата с порогом («осталось столько-то» — ниже порога); последние покупки
и строка о том, как считается переход. Второй уровень при нулевом проценте — **статистика без денежной
строки**: школа за него не платит и обещаний не даёт.

**Настройка программы** — в разделе «Партнёры» у того, кто ведёт партнёров: процент по умолчанию, процент
второго уровня, срок учёта перехода, окно возврата и порог выплаты. Все пять — числа с единицами; процент
конкретного партнёра меняется отдельно в его карточке и общему не подчиняется.

**Вкладка «Данные» разбита на блоки** — по вопросам, которые задают о человеке:

- **«Путь в школу»** — тип регистрации, дата, кто завёл, сколько людей пришло
  по партнёрским ссылкам человека (люди, а не переходы), первый заказ;
- **«Куда можно написать»** — почта (подтверждена или нет), мессенджеры,
  привязанные и нет, отписки: от чего и с какого дня. Мессенджер, которого
  у школы нет и к которому человек не привязан, строкой не показывается;
- **«Примечание для сотрудников»** — одна заметка на человека, с автором
  и датой последней правки из журнала. Человек её не видит, но по его запросу
  школа обязана её показать — это написано прямо под полем при наборе.
  Прошлые версии остаются в журнале вместе с текстом;
- **«Поля продукта»** — часовой пояс городом и смещением, язык, дата рождения,
  согласие на рассылки;
- **«Вход и устройства»** — пароль, устройства, согласия;
- **«Поля школы»** — свои поля школы и метки перехода, с которыми человек
  пришёл: источник, кампания и другие. Когда метки есть, над полями стоят
  переключатели «Все · Свои поля · Метки перехода».

На телефоне примечание — первым блоком: с телефона карточку открывают перед
звонком, и «о чём договаривались» там важнее анкеты.

**У блока — значок «↺»:** панель «Кто менял» с правками именно этого блока —
почты и телефона, примечания, даты рождения, полей школы. У каждой правки —
«было → стало», кто и когда. Это та же история, что во вкладке «Журнал»,
только по одному блоку, и видит её тот же человек — владелец школы. Остальным
панель называет причину, а не показывает пустоту.

**Вкладка «Деньги»** — покупки одной лентой: заказы и доступы, выданные без
оплаты. У заказа — номер, дата, сумма и что с доступом: «Доступ открыт»,
«Срок доступа истёк», «Ждёт оплаты». У выданного без оплаты — кто выдал.
Возвращённый заказ остаётся в ленте с вычеркнутой суммой. Сверху —
«оплачено · возвращено»: по прошедшим платежам и прошедшим возвратам,
по валютам отдельно. Название заказа ведёт в его карточку — там возврат,
чек и история.

Карт в карточке нет: продукт их не хранит, оплата проходит на стороне кассы.

## Действия с человеком из карточки

В шапке карточки — кнопка **«Действия»**. У каждого пункта вторая строка:
то, что нужно знать до нажатия, а не после.

| Пункт | Что делает |
| --- | --- |
| Сбросить пароль и отправить новый | задаёт новый пароль, письмом отправляет его на адрес аккаунта и **завершает все сеансы**: прежним паролем войти нельзя |
| Отправить ссылку для входа | письмо со ссылкой; пароль не меняется, ссылка живёт 7 дней |
| Сменить почту | адрес входа меняет школа, без кода подтверждения |
| Войти под пользователем | права и данные этого человека, журнал — на вас; выйти — кнопкой в полосе сверху |
| Заблокировать | человек остаётся в базе, войти не может; спросим, за что |
| Удалить навсегда | покажет, что исчезнет и что останется по закону; подтверждение — фамилией |

**Заблокированный не исчезает.** Его карточка, заказы, прогресс и переписка
на месте — закрыт только вход. Причину блокировки видят сотрудники школы,
сам человек — нет. Кто, когда и за что заблокировал, видно в журнале школы:
второго места для этой записи нет намеренно.

**Владельца школы заблокировать нельзя** — школа осталась бы без хозяина.
Пункта в меню у него нет вовсе, а не отключённым.

**Разблокировка меняет ровно вход.** Доступы к курсам, группы и теги
блокировка не отбирала, поэтому и возвращать нечего.

**Сброс пароля — не то же, что «выслать доступ».** Письмо о доступе не трогает
пароль, который человек задал сам; сброс переписывает его нарочно, и потому
завершает сеансы: пароль сбрасывают, когда прежний мог уйти не туда.
Сам пароль в журнал школы не пишется — иначе его знала бы вся команда.

### Войти под пользователем

Администратор и владелец могут **войти под учеником, куратором, автором,
менеджером или администратором** — чтобы увидеть школу его глазами. Под
владельцем войти нельзя.

- **Права — его, а не ваши.** Видно ровно то, что видит этот человек, и не больше.
- **Журнал — на вас.** Всё, что сделано в чужом аккаунте, попадает в журнал
  школы с именем того, кто вошёл; вход и выход — отдельными строками.
- **Сверху — фиолетовая полоса** «Вы вошли как … · роль …» с кнопкой «Выйти
  из аккаунта». Выход возвращает в ваш собственный сеанс, на карточку человека.
- **Просмотр ему не засчитывается.** Открытые уроки и просмотренные видео
  не идут в его прогресс, и «когда заходил» в карточке не меняется. А то, что
  вы сделали руками, — ответ на задание, «Завершить урок», — засчитывается,
  как если бы это сделал он сам.
- **Пароль, двухфакторная аутентификация (2FA), контакты и привязки мессенджеров** в чужом
  аккаунте не меняются — это «посмотреть его глазами», а не доступ к аккаунту.
- **Сеанс в чужом аккаунте живёт два часа.** Пока он идёт, над карточкой
  человека видно, кто под ним работает, и сеанс можно завершить.
- **Под заблокированным войти нельзя**, как и из одного чужого аккаунта
  в другой.
- **Агент школы под людьми не входит**: у него нет браузера, а само право стоит
  у него в двойном подтверждении.

### Удалить навсегда

Окно показывает **список, а не «вы уверены?»**: слева — что исчезнет у этого
человека (имя, почта, телефон и анкета, доступы, прогресс, работы и переписка
с куратором, обращения, привязки мессенджеров, файлы, подписки), справа — что
останется и почему: платежи и чеки — фискальные документы, их школа хранит
по закону; заказы — с пометкой **«пользователь удалён из базы»**, их находят
по номеру; строка в журнале школы — без персональных данных.

Подтверждение — **фамилией** (нет фамилии — имя, нет имени — почта): «да»
нажимают по привычке, чужую фамилию — нет. Кнопка «Отмена» в окне крупнее
кнопки удаления.

- **Необратимо.** Восстановить удалённого нельзя: данных для этого больше нет.
- **Действующая подписка отменяется** — списаний больше не будет.
- **Сотрудник** теряет роль и вход; ученики, которых он вёл, возвращаются
  в общий список, его ответы в обращениях и написанные им курсы остаются.
  Файлы сотрудника не удаляются — ими собраны уроки.
- **Владельца и себя удалить нельзя.** Удаляет администратор или владелец.
- **Инструмента удаления у агента школы нет.** Появится — удаление пойдёт
  только с двойным подтверждением владельца, как всё необратимое у агента.

### Смена почты силами школы

Человек меняет почту сам, с кодом на новый адрес (ниже). Школа из карточки
меняет её **без кода**: право `user.editContact` есть не у всех, и каждая такая
смена пишется в журнал с прежним значением. На новый адрес уходит письмо
со ссылкой для входа — иначе человек узнает о смене, только не сумев войти.

Прежний адрес при смене из карточки **не уведомляется**: его чаще всего
и меняют потому, что ящик потерян. Если школе нужно письмо «ваш адрес входа
изменили» на старый адрес — это отдельная просьба, сейчас его нет.

### Чего агент школы здесь НЕ делает

Ни одного действия из этого меню агент не выполняет, и это решение, а не
недоделка: сброс пароля, смена адреса входа и блокировка — действия, у которых
нет отмены, а у агента нет способа убедиться, что просьба пришла от того,
кто вправе её отдать. Агент про них **рассказывает** — где нажать и что
произойдёт, — а нажимает человек.

## Смена почты и «это не я»

Человек меняет почту сам — в кабинете. Код подтверждения уходит
на **новый** адрес: письмом на старый доказать владение новым нельзя.

Одновременно на **старый** адрес уходит предупреждение — «у вашего
аккаунта меняют почту» — с кнопкой **«Это не я — отменить»**.

> **Отмена завершает все входы в аккаунт, включая входы самого владельца.**
> Это не перестраховка: тот, кто добрался до смены почты, уже внутри
> аккаунта — у него либо пароль, либо живая сессия. Оставить ему хоть одну
> значит не отменить ничего.

Ссылка действует 15 минут и срабатывает один раз. Страница **спрашивает**,
прежде чем отменить: почтовые сканеры ходят по ссылкам писем сами, и отмена
«переходом» срабатывала бы у каждого, кто честно меняет почту.

После отмены — войти заново и сменить пароль.

## Свои поля

Того, чего нет в карточке по умолчанию, — города, источника заявки, сегмента
клиента — школа добавляет сама: «Настройки → Поля школы».

У поля есть **название** (его видно на экране), **ключ** (по нему поле живёт
в данных) и **вид**: текст, число, дата, «да / нет» или выбор из списка.

> **Ключ задаётся один раз и потом не меняется.** Под ним уже записаны
> значения у людей: переименуй его — и данные всех осиротеют молча. Меняется
> название, оно и видно.

Заведённое поле сразу появляется **в трёх местах**: в карточке человека,
в условиях сегмента («город = Казань») и в подстановках письма
(`{{field.city}}`; прежнее написание `{{поле.city}}` тоже работает).

**Значение проверяется по виду поля.** В поле «число» не запишется «примерно
тридцать», в поле-список — вариант не из списка. Иначе условие сегмента
«больше 500» молча перестало бы находить такого человека.

**Заполняет поля школа, а не человек.** Своё значение он может увидеть —
если поле отмечено видимым в кабинете; правит его администратор или менеджер.

**В списке видно, где поле появится и у скольких оно заполнено:** «карточка ·
условие · письмо» (и «кабинет», если поле видно человеку) и «1 402 из 1 842».
Поле, заполненное меньше чем у процента людей, отмечено строкой под таблицей:
условие сегмента по его значению отберёт единицы — для заметки такое поле
годится, для рассылки нет.

**Удаление спрашивает, что делать с ответами.** «Оставить ответы в данных» —
поле пропадёт из карточек, условий и писем, а записанное останется: вернёте
поле с тем же ключом — вернутся и значения. «Стереть ответы» — значения
удалятся у всех вместе с полем, а в журнал ляжет, у скольких стёрто.
Восстановить стёртое неоткуда, поэтому кнопка удаления ждёт выбора.

**Агент** отвечает, какие поля заведены, где они появляются и насколько
заполнены. Завести, поправить или удалить поле он не может — это делается
в разделе.

### Поля заказа

Поля бывают двух видов, и вид выбирается в том же разделе переключателем:
**поля человека** и **поля заказа**.

**«Сколько сотрудников подключаете» относится к сделке, а не к человеку.**
У второго заказа того же человека ответ другой, и записать его в карточку
значит затереть первый.

Поля заказа заполняются **в карточке заказа** — обычно поддержкой после
разговора. В кабинет человеку они не показываются вовсе: кабинет показывает
карточку человека, а не заказы школы.

**Одинаковый ключ у человека и у заказа — разные поля.** «Источник»
у человека и «источник» у заказа не спорят между собой.

## Потоки и группы

Группа — набор людей. Поток — группа с датой старта, от которой считается
расписание курса.

**Перенос между потоками** пересчитывает расписание от даты старта нового потока.
Прогресс, ответы и сертификаты сохраняются, но часть открытых уроков может
закрыться — поэтому перед переносом показывается, **что именно изменится**: как
сдвинутся даты открытия, что станет с прогрессом и с назначенным куратором.
Смотреть это можно, не перенося.

## Персональные данные

Дальше — механика. Что именно система записывает и делает.

### Документы школы

Политика обработки персональных данных, пользовательское соглашение, оферта и три
согласия публикуются в **«Настройки → Документы школы»** новой версией: согласие,
данное вчера, остаётся привязано к вчерашнему тексту. Документ, который ещё заглушка
засева, отмечен на экране и в списке настроек — заменить его нужно до запуска.
Типовой текст подставляет реквизиты школы; чего не хватает, остаётся пометкой
«[укажите …]», и с ней документ не публикуется. Агент документы не публикует.

### Удаление аккаунта по просьбе ученика

В профиле ученика — **«Удалить аккаунт»**. Нажатие не стирает аккаунт на месте:
школе уходит обращение с темой «Удаление аккаунта» (повторное нажатие второго
не заводит), а сотрудник удаляет человека навсегда из карточки. Сведения об оплатах
закон велит хранить — что оставить, решает школа.

### Согласие фиксируется, а не подразумевается

Согласие — это запись, и у неё есть:

- **цель.** Одно согласие — одна цель. Общего «согласен со всем» не существует:
  согласие на обработку данных для обучения и согласие на рекламные рассылки —
  разные записи, и отзыв одного не трогает другое;
- **версия документа**, по которой оно дано. Не «согласен с политикой», а «согласен
  с политикой такой-то редакции»;
- **способ**, которым получено: галочка при регистрации, действие в кабинете,
  импорт;
- **момент** получения.

Отдельно про импорт: согласие, привезённое из другой системы, помечается способом
«импорт». Механически это отметка «утверждается, что согласие получено там» —
она не равна согласию, полученному у вас, и в журнале видна как импортированная.

### Отзыв — это дата, а не удаление строки

Отозванное согласие **не исчезает** из журнала. У записи появляется дата отзыва,
и она остаётся.

Причина механическая: нужно уметь показать, что до 15 марта согласие было, а значит
рассылка от 10 марта была отправлена законно. Удалённая строка этого показать
не может — она выглядит как «согласия не было никогда».

Отозвать согласие человек может **сам, в кабинете**, тем же способом, каким давал.
Отзыв действует немедленно и распространяется на то, что уже стоит в очереди
на отправку.

Отписка от категории сообщений — то же самое: действует сразу и **не обходится
ни правами, ни API**. Отправка проверяет её так же, как интерфейс, — с полными
правами и из сценария тоже.

### Выгрузка по требованию субъекта

Все данные человека одним файлом: профиль, согласия, зачисления, прогресс, ответы,
заказы, платежи, переписка.

Отдаётся только то, что относится к нему. Ничего о других людях в выгрузку
не попадает — в том числе из общих объектов вроде чата вебинара.

### Обезличивание

**Необратимо.** Имя и контакты заменяются на обезличенные, вход становится
невозможен.

При этом **остаются** учебные события и денежные документы: прохождение курса,
заказы, платежи, чеки. Не потому, что нам так удобно, а потому, что школа обязана
хранить их по требованиям к бухгалтерскому учёту и кассовым расчётам — и удаление
их обезличиванием создало бы у школы другую проблему вместо решённой.

Само обезличивание записывается в журнал: кто, когда, кого.

### Что записывается в журнал всегда

Изменения доступа, денег и персональных данных: кто сделал, что, когда, откуда,
какое было значение и какое стало.

Действие, выполненное интеграцией или агентом, помечается как выполненное
интеграцией — с указанием, от чьего имени, если оно шло от имени человека.

### Кто журнал видит

Вопросов к журналу три, и права у них разные.

**«Что делали с этим человеком»** — видит только владелец школы, в карточке
человека. Здесь видно, кто из сотрудников что делал с чужими данными, а это
уже наблюдение за людьми: раздавать его наравне с остальным нельзя.

**«Что делали с этим объектом»** — видят администратор и владелец, прямо
в карточке объекта. В карточке заказа это «кто отменил», «кто вернул деньги»,
«кто заполнил поле».

**Весь журнал школы разом** — только владелец, в «Настройки → Журнал школы».
Там отвечают на вопросы, которые в карточке не задаются: кто выключил код
школы, кто перевыпустил ключ трансляции, кто менял настройки на прошлой
неделе. Целиком журнал включает и записи о людях — поэтому он там же, где
и история человека, а не у администратора.

В журнале — последние двести записей и отбор: поиск по имени, по действию
словами («ключ», «роли») или по ключу настройки; «кто угодно» или один
сотрудник; срок — сутки, неделя, месяц или всё время. Под строкой — причина,
если её назвали, и «Было · Стало», когда значения простые: число, текст, роли,
маска секрета. Постраничности нет намеренно: журнал читают, когда ищут
вчерашнее.

**«Что происходит в системе»** — соседний раздел, и вопрос у него другой:
журнал отвечает, кто что сделал, а этот раздел — сделалось ли: выдался ли
доступ, обработалась ли оплата, сработал ли сценарий. Сверху три числа —
обработано за сутки, требует внимания, ждут обработки; отказы стоят первыми
и говорят словами, что не получилось и что ответил обработчик. У отказа —
«Повторить». Письма событие не роняют: не ушедшее письмо видно во вкладке
«Письма» человека.

Агент отвечает по обоим разделам теми же функциями. Журнал целиком он
показывает только владельцу, остальным передаёт тот же отказ; повторить
событие он не может — это кнопка в разделе.

## Письма человеку

Во вкладке **«Письма»** карточки — всё, что школа отправила человеку: когда,
каким каналом, какое письмо и что с ним стало. «Отправлено», «не ушло:
причина», «не отправлено: человек отписался», а у размеченных писем — ещё
«открыто» и «переход».

Показано только то, что продукт знает на самом деле:

- **открытия и переходы** видны у писем, которые продукт размечает: у рассылок
  всегда, у служебных писем — доступ, чек, «урок открыт» — если школа
  не выключила это в «Настройки → Соответствие закону». У неразмеченного
  письма пустое место не значит «не открыл»;
- **«открыто» — нижняя оценка:** почтовые программы часто не загружают
  картинку, по которой считается открытие;
- **отчётов о доставке** продукт пока не получает — видно, ушло письмо
  или нет.

### Меню письма

У каждой строки — меню **«⋯»**. Оно открывается поверх страницы и закрывается
само: выбранным действием, нажатием в любом свободном месте или клавишей Esc.

- **«Отчёт о письме»** — куда ушло, когда открыто, по каким ссылкам
  переходили, повторы и номер письма. У неушедшего — причина словами, что
  делать, код ошибки и ответ сервера. Адрес перехода записывается без
  параметров: одноразовые ссылки входа не хранятся. Ссылку на отчёт можно
  переслать коллеге.
- **«Переотправить»** — отправить письмо ещё раз. Что уйдёт, решает вид
  письма:
  - письмо рассылки — тем текстом, что сейчас в рассылке; отписавшемуся
    не уйдёт, в отчёт рассылки повтор не попадает;
  - чек, «доступ открыт», «урок открыт», письма вебинаров и поддержки —
    с теми же данными, что в первый раз. Данные для повтора хранятся 30 дней;
  - письмо о доступе — доступ высылается заново, со свежей ссылкой входа;
  - код входа, сброс пароля, приглашение, уведомления о смене пароля
    и почты не переотправляются: ссылки в них одноразовые. Причина написана
    прямо в меню.

  Переотправляет сотрудник, которому открыты рассылки; повтор записывается
  в журнал действий.
- **«Скопировать код ошибки»** — у неушедших писем: номер письма, время, код
  и ответ сервера одной строкой — для поддержки или хостера.
- **«Проверить отправку почты»** — когда отказал сам почтовый канал школы
  (неверный пароль, нет связи с сервером): ведёт к проверке в настройках.

Вкладку видят сотрудники с правом смотреть людей; в собственном профиле
её нет.

**Подтверждена ли почта** — отдельный столбец в списке людей: галочка
у тех, кто перешёл по ссылке из письма или ввёл код. Почту подтверждает
переход именно по той ссылке, которая на эту почту ушла.

## Роли и права сверх роли

Во вкладке **«Права»** карточки — роли сотрудника и то, что человек с ними
может: «✓ можно» и «— нет» по таблице прав, а не по памяти. Роль выдаёт
владелец или администратор; роль владельца галочкой не выдаётся.

Ниже — **«Права сверх роли»**, четыре галочки владельца:

- **Настраивать школу** — всё в «Настройках», кроме платёжных систем;
- **Писать агенту** — чат с агентом в админке и в Telegram;
- **Подключать платёжные системы** — касса и ключи магазина;
- **Вставлять свой код** — скрипты и счётчики на страницах и в уроках.

Ставит и снимает их только владелец. У каждой галочки написано, что человек
получит, а где её не поставить — почему: «открыто ролью» (код у
администратора), «сначала выдайте роль» (платёжные системы ученику).
Выданное действует, пока у человека есть роль, под которую его давали:
сняли роль администратора — галочка «платёжные системы» больше ничего
не открывает. Подробно — [Права](/api/permissions/).

**Что от человека продолжает работать.** Во вкладке «Права» владелец видит, что от этого
человека работает сейчас: код страниц, виджетов и уроков, который человек поставил или правил
последним; сценарии, которые человек включил и которые идут, — с числом людей внутри; письма
школы, текст которых человек правил последним. У каждой строки — когда её трогали последний
раз и «Открыть». Если владелец закрыл право на код, заголовок называет дату. Ничего
не выключается само: отзыв права прекращает создание, но не останавливает работающее, —
опасность в том, что об этом забудут, и список нужен, чтобы решить по каждому пункту.
Условия доступа и сегменты не помнят, кто их настроил, поэтому в списке их нет.

В списке людей и в шапке карточки у человека **одна плашка** — самой
сильной его роли: «Администратор», а не «Ученик» и «Администратор» рядом.

## Чего на этой странице нет

**Текстов документов.** Ни политики обработки, ни формы согласия, ни формулировок
для оферты, ни отдельного согласия на распространение персональных данных.

Их у нас нет, и придумывать их мы не станем: это не та вещь, где правдоподобный
образец лучше отсутствующего. Согласие с неверной формулировкой хуже, чем его
отсутствие, потому что создаёт у школы уверенность, что вопрос закрыт.

Механика выше — наша и описана честно. Тексты — к вашему юристу.
## Склеить два аккаунта одного человека

Человек купил с рабочей почты, потом зарегистрировался с личной — и у школы два его аккаунта:
покупки в одном, прогресс в другом. «Действия → Склеить с другим аккаунтом» сводит их в один.

**Три шага.** Сначала школа сама предлагает похожие аккаунты и подписывает, на чём основана
догадка: «тот же телефон», «почта с опечаткой», «то же имя и фамилия» — чтобы не склеить
однофамильцев. Дальше — какое значение оставить в каждой строке (по умолчанию значения основного;
почта дубля остаётся второй почтой). И наконец — что переедет, числами: заказы и платежи, доступы
к курсам, ответы на задания, сертификаты, обращения, подписки, баланс, теги, персональный менеджер.

**Дубль удаляется навсегда, отменить склейку нельзя** — это написано до нажатия, а кнопка названа
действием: «Склеить навсегда». Баланс складывается, а не переезжает: кошелёк у человека один.

**Письмо человеку не уходит.** Если склейка верна, он ничего не заметит — просто увидит все покупки
в одном кабинете. Если ошибочна, письмо только напугает: чинить всё равно школе. Поэтому уведомления
нет, а след есть: в журнале человека остаётся строка «Аккаунты склеены» с перечнем перенесённого
и именем сотрудника.

**Чего склейка не делает:** владельца школы склеить нельзя (сначала передайте школу), и два аккаунта
сотрудников — тоже: снимите роль с дубля, и он станет обычным учеником.
