администрирование · документы согласий

Документы согласий

Полный паритет с консолью: тенант читает текущую версию каждого из двух документов, видит кто и когда принял какую версию, и публикует новую версию прямо с телефона. Экран открывается из «Ещё → Администрирование» и виден только оператору с правом site:configure.

3экрана: обзор, просмотр текста, редактор публикации
2слайса — I (чтение + принявшие) и I2 (публикация)
2порта — тенантный (обзор/принявшие/публикация) и анонимный (текст версии)
0изменений бэкенда — все эндпоинты уже живут в ago-chat

Весь текст на макетах — пример

Юридические формулировки на экранах ниже помечены «(пример)» и написаны только для макета. Реальный текст согласия пишет сам тенант; AGO его не сочиняет — в этом и смысл экрана публикации.

01

Обзор — два документа, версии, кто чем связан

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

9:41
Документы согласий
Контактные данные
Виджет требует это согласие перед приёмом контактов.
Текущая версия
Политика обработки данных · v3 · 12 марта 2026
Открыть
Кто принял
Предыдущие версии (2)
Опубликовать новую версию
Маркетинг
Это согласие ничего не требует — оно только фиксирует, кто согласился на маркетинг.
Текущая версия
Ни одной версии ещё не опубликовано
Опубликовать новую версию
/account/documents · Ещё → Администрирование → Документы согласий

Плашка привязки — тот же смысл, что в консоли: у «Контактных данных» она либо «виджет требует это согласие», либо (когда сбор выключен) danger «пока ничего не требует» со ссылкой на «Виджет на сайте». У «Маркетинга» — всегда info «ничего не требует».

Маркетинг здесь без единой версии: список пуст, остаётся только кнопка публикации. Это настоящее состояние, не ошибка — тенант ещё не написал текст.

Гейт совпадает с сервером: тот же site:configure и на строке в «Ещё», и внутри каждого хэндлера. Нет расхождения «видно, но сервер откажет», как у токен-каналов.

9:41
Документы согласий
Контактные данные
Пока сбор согласия выключен, этот документ ничего не требует. Включается в «Виджет на сайте».
Текущая версия
Политика обработки данных · v3 · 12 марта 2026
Открыть
Кто принял
Предыдущие версии (2)
v2 · Политика обработки данных
4 января 2026
v1 · Политика обработки данных
18 сентября 2025
Опубликовать новую версию
то же, но сбор согласия выключен + раскрыты предыдущие версии

Когда contactConsentRequired = false, плашка становится danger и прямо называет экран, где это чинится. У каждой предыдущей версии — своя кнопка «Открыть» и свой список «Кто принял», привязанные к конкретному тексту.

02

Кто принял — по версиям, без слежки

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

9:41
Документы согласий
Контактные данные
Текущая версия
Политика обработки данных · v3 · 12 марта 2026
Открыть
Кто принял
Приняли версию v3
Показаны только кто и когда — без IP-адреса и браузера.
Посетитель a0f3c952 12 марта, 14:20
Посетитель 7c4e18f0 12 марта, 15:07
Посетитель b27d05a1 13 марта, 09:41
GET …/consent-documents/Contact/acceptances → фильтр по версии на клиенте

Сервер отдаёт все согласия документа сразу; клиент фильтрует по documentVersion, как это делает AcceptancesList в консоли. Отдельного версионного эндпоинта нет и не нужно.

Идентификатор — 8 символов моноширинным, не весь GUID. На телефон 36 символов не влезают; короткого префикса хватает, чтобы сопоставить строки, а долгое нажатие копирует полный id. Столбец «версия» убран — список и так про одну версию.

9:41
Документы согласий
Маркетинг
Текущая версия
Согласие на маркетинг · v1 · 20 марта 2026
Открыть
Кто принял
Приняли версию v1
Показаны только кто и когда — без IP-адреса и браузера.

Пока никто не принял эту версию.

загружено, но пусто — это состояние, а не ошибка

Загруженный пустой список — законное состояние («ещё никто»), не сбой. Так же и обзор с пустым списком версий не рисует «ошибку», а честно говорит «ни одной версии».

03

Просмотр — как увидит посетитель

«Открыть» ведёт на отдельный экран чтения. Текст версии живёт не в обзоре (там только метаданные), а на публичной поверхности документов — той же, что откроет будущая ссылка …/policies/{key}. Текущая версия читается по «текущему» маршруту, конкретная — по неизменяемому версионному.

9:41
Политика обработки данныхv3 · опубликовано 12 марта 2026

(пример) Настоящий документ описывает, как «Мастерская Клён» обрабатывает контактные данные, которые вы оставляете в чате на сайте.

1. Какие данные мы собираем. Имя, телефон и адрес электронной почты, которые вы указываете самостоятельно, чтобы мы могли связаться с вами по вашему обращению.

2. Зачем. Данные используются только для ответа на ваше обращение и уточнения деталей заказа. Мы не передаём их третьим лицам и не используем для рекламы без отдельного согласия.

3. Сколько хранятся. До исполнения вашего обращения и в течение срока, установленного законом, после чего удаляются.

GET /api/v1/documents/{documentKey} · /versions/{version} для старой версии

Текст выделяется и прокручивается (SelectionContainer). Тело — обычный текст, без Markdown: именно так его показывает виджет посетителю. Заголовок экрана — название версии, подзаголовок — версия и дата.

Порт анонимный. Эта поверхность не требует ни сайта, ни токена — поэтому у неё свой порт PublishedDocumentApi, отдельно от тенантного: анонимный маршрут не должен видеть заголовок активного сайта и bearer.

9:41
Просмотр документа

Эта версия больше недоступна

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

Назад
404 → NotFound (гонка), отдельно от «сеть отвалилась»

Строка версии была в обзоре, но к моменту чтения исчезла (Document.NotFound). Это не «повторить», а терминальное «версия недоступна» — отдельная ветка результата, не смешанная с транспортным сбоем.

04

Публикация — редактор во весь экран

Публикация — это всегда новая версия, а не правка старой: редактор открывается пустым, как и форма в консоли. Заголовок и текст, вставка из буфера (реальный путь на телефоне — готовый текст приходит в буфер), подтверждение перед публикацией, и защита от случайного выхода с непустым черновиком.

9:41
Новая версияКонтактные данные
Опубликованный текст сразу увидят посетители, и новые согласия будут привязаны к этой версии.
Политика обработки данных 29/200
(пример) Настоящий документ описывает, как «Мастерская Клён» обрабатывает контактные данные, которые вы оставляете в чате на сайте. Имя, телефон и адрес электронной почты используются только для ответа на ваше обращение…
1 240 / 100 000
Вставить из буфера
POST /api/v1/sites/{siteId}/consent-documents/Contact {title, body}

Редактор пустой при старте — правки существующей версии нет. Клиентская проверка вежливости повторяет сервер: заголовок непустой ≤200, текст непустой ≤100 000; счётчики у обоих полей. Авторитет всё равно сервер (Document.Invalid).

«Вставить из буфера» — явная кнопка поверх обычной вставки долгим нажатием, потому что вставка подготовленного текста из буфера — реальный путь на телефоне.

9:41
Новая версияКонтактные данные
Опубликованный текст сразу увидят посетители…
Политика обработки данных
…
Опубликовать новую версию?
«Контактные данные» · v4. Посетители сразу увидят этот текст, и новые согласия будут привязаны к нему.
Отмена
Опубликовать
confirm → publish → на обзор с перезагрузкой

Подтверждение (Material AlertDialog, как у консольного диалога) называет документ и следующий номер версии. После Published — возврат на обзор и его перезагрузка (fetchOverview), один источник правды, без оптимистичной вставки.

Конфликт публикации — 409. Две публикации одного ключа гонятся → Conflict: сообщение «повторите», кнопка остаётся активной, потому что лекарство от 409 — повторить тот же запрос.

9:41
Новая версияКонтактные данные
Политика обработки данных
Настоящий документ описывает…
Выйти без публикации?
Введённый текст не сохранится.
Остаться
Выйти
back с непустым черновиком → подтверждение отмены

Сочинённый юридический текст стоит того, чтобы его беречь: выход с непустым черновиком спрашивает подтверждение, в отличие от одноразового токен-поля каналов. Пустой черновик уходит молча. Тот же приём, что у re-cut записи в navigation.md.

Навигация и гейт

Строка «Документы согласий» — в разделе Администрирование экрана «Ещё», рисуется только под canConfigureSite (ADMINISTRATION_DOCUMENTS_ROW_ID). Три экрана — обзор, просмотр, редактор — переключаются внутренним состоянием (ConsentNav), как у openRowId в «Ещё» и шагов re-cut, а не вложенным NavHost. Системный «назад»: просмотр/редактор → обзор, обзор → список «Ещё».