Все версии

Системная проработка CTV и аудиторий

Редакция 08.11.2026 после замечаний. Этот документ заменяет прежнее решение о флаге CTV кампании и неполный редактор сегмента. Статус: UX и контракт будущей реализации. Рабочее приложение, БД и API этой редакцией не изменены.

1. Что подтверждено исходниками

| Источник | Подтверждено | Пробел | | --- | --- | --- | | src/editions/saas/pages/SegmentsPage.vue | Библиотека, создание, метаданные, провайдеры, загрузка ID, отчет | Не образует единый редактор состава и правил с preview влияния | | src/editions/saas/components/TargetingEditor.vue | Выбор телеканалов, жанров, устройств; фильтрация каналов | Нужны единые searchable lookup, сохранение ID и состояния справочника | | ../dsp/internal/edition/saas/dictionaries.go | Прокси каналов, жанров, bundles, geo; search/limit/offset | IAB в показанном реестре отсутствует; нужен отдельный контракт таксономии | | ../dsp/internal/processors/audiencesegment/processor.go | Create/Get/Update/Delete, append/replace списка own, NormalizeIdentifier, sync внешнего источника | Нет показанного контракта неизменяемых версий, графа композиций, заданий прогноза и preview состава |

Это анализ конкретных файлов, а не утверждение об отсутствии функций во всех сервисах. Наличие готового capability CTV и его точное поле в админке еще нужно подтвердить при интеграции. Ниже обязательная модель по требованию пользователя.

2. CTV: админка управляет доступом арендатора

Единственный переключатель находится в админке арендатора, экран 34. В DSP нет ни переключателя, ни записи этого флага в DTO кампании. DSP получает read-only capability арендатора и его ревизию. Возможность редактировать CTV = capability разрешен И пользователь имеет право edit.

При выключении все CTV-поля visible/disabled на уровне кампании, флайта, группы, копии, шаблона, массовых действий и конструктора выражений. Значения сохраняются, но не участвуют в активном таргетинге. Обычные Web/App поля, общие категории IAB и видео не блокируются. Пока capability загружается или не удалось получить доступ, CTV закрыт; показывается причина и повтор.

Администратор перед выключением видит число затронутых сущностей, CTV-only и смешанные кампании, текущее состояние закупки и сохраняемые значения. Подтверждение требует причины, прав и актуальной ревизии. CTV-only закупка блокируется/ставится на паузу, Web/App смешанной кампании продолжается. Включение не запускает кампании. Возврат прежних CTV-параметров проходит проверку.

Сервер и слой закупки повторно проверяют capability; disabled UI не является защитой. Изменение возможности инвалидирует зависимые preview. Старый DSP черновик не может восстановить доступ или отправить флаг включения. Аудит: tenant, actor, before/after, reason, revision, affected entities, timestamp.

В книге сценарии 02/03 показывают два состояния разных снимков capability. Переключение сценария в панели самой книги не является управлением DSP.

3. Справочники CTV

Экран 35: телеканалы, IAB категории контента, жанры, TV bundles. Поиск по названию, ID, пути и алиасам; серверная пагинация больших справочников; debounce и отмена устаревшего запроса. Выбранное не пропадает при фильтрации или смене страницы. Пустой выбор означает отсутствие ограничения, не пустую аудиторию.

Хранятся ID и версия, а не свободный текст. У записи: ID, displayName, parent/path, aliases, status, source, taxonomyVersion. Для IAB дополнительно явно указывается семейство таксономии. Категории контента не превращаются в сегменты пользователей. Иерархия показывает выбор узла и правило включения дочерних категорий; смешение версий запрещено без явной миграции.

В прототипе IAB использует demo-*: это не официальные коды IAB. До интеграции нужно согласовать лицензионный источник, версию и mapping к каноническому полю. Справочник каналов использует демонстрационные ID; реальная интеграция берет стабильные ID из ядра. Создание каналов в DSP запрещено, справочник read-only.

Состояния: loading, ready, empty, no-results, error/retry, retired selection, no-access. При ошибке текущий выбор сохраняется, применение неизвестных новых ID блокируется. Retired ID виден с причиной; замена только по действию пользователя. Include/exclude взаимоисключаемы для одной записи. Выбор уровня кампании и группы имеет отдельный scope, подтверждение изменяет только выбранный уровень.

4. Доменная модель аудитории

Жизненный цикл: новый черновик, заполнение источника, проверка, готов к выпуску, публикация версии, отдельное применение к целям, использование, архивирование. Ошибка job не уничтожает последнюю успешную версию. Изменение определения, состава, scope или источника инвалидирует проверку и прогноз.

5. Создание, просмотр и редактирование

Путь: библиотека 12, выбор источника 36, обзор 06, редактор 37, участники 38, импорт 44, проверка 39, прогноз 40, выпуск версии 41, применение 20/32/13/14. Источник виден всегда. Список и композиция имеют разные редакторы. Смена типа источника опубликованной аудитории делается созданием новой аудитории.

Обзор показывает статус, происхождение, опубликованную версию, свежесть, идентификаторы, namespace, состав/оценку и зависимости. Неизвестный размер показывается как неизвестный, не ноль. Открытие из кампании сохраняет контекст возврата; возвращается версия и связь, а не случайное изменение состава.

Редактор сохраняет черновик отдельно от публикации. Для own-list доступны просмотр с маскированием, точный поиск, ручное добавление, удаление выбранных, CSV/TXT append/replace и история операций. Массовое удаление участников требует preview числа удаляемых и явного подтверждения перед выпуском версии. Раскрытие ID и экспорт требуют отдельных прав и аудита; маскирование в UI не заменяет server-side authorization. Книга использует только синтетические ID.

Для композиции: включаемые сегменты объединяются ANY/ALL, затем применяются исключения. Источники выбираются по готовым версиям. Отображается текстовая формула. Нет скрытого объединения несовместимых namespace. Проверяются циклы полного графа, self-reference, expired/archived sources, пустые включения, пересечение include/exclude и стоимость пересчета. Группы правил имеют явные скобки; вложенные группы и события требуют отдельной реализации AST.

SSP request: редактируются ключи data.id:segment.id, поставщик и договор сопоставления. Локальных участников нет. DMP: external ID, права, расписание, последний sync, ошибки и повтор; ручное изменение выгруженного списка запрещено. Events: подключенный поток, каталог событий/атрибутов, оператор, тип значения, временное окно и timezone. До подключения нельзя публиковать видимость рабочего сегмента. В текущем прототипе events/DMP явно блокируются как неподключенные.

6. Импорт и валидация

Файл: формат/кодировка/BOM, delimiter/quotes, header, column mapping, лимит, тип ID и namespace. Идентификаторы нормализуются по конкретному типу, затем дедуплицируются. Для email/phone контракт должен различать raw и prehashed: никакого повторного хеширования. Неверные и пустые строки считаются отдельно. Preview: сколько принято, дублей, невалидных, уже существующих, добавляемых, удаляемых и итоговых для выбранного типа. Replace не стирает другие типы ID.

Плохие строки можно пропускать только явным действием и с отчетом; unmatched quotes блокируют импорт. Публикация выполняется атомарно. Отмена до commit оставляет прежнюю версию. Jobs идемпотентны по ключу; повтор не дублирует состав. Ошибки загрузки/парсинга/прав/ревизии разделены. Отчет не раскрывает исходные ID пользователю без права. Локальный лимит книги 1 MB не является лимитом продукта.

Валидация по слоям: schema, semantic, source readiness, identifier compatibility, DAG, source freshness, permissions, tenant capability, binding applicability. Ошибка дает поле/строку/правило, причину и действие. Warning не маскируется error. Проверка на клиенте помогает вводу; сервер повторяет все обязательные проверки и сравнивает revision/fingerprint перед публикацией.

7. Прогноз и подсказки

Три независимые величины: ID в источнике, сопоставимые ID, рекламный охват после периода/гео/устройств/инвентаря/бюджета/частоты. Нельзя называть число загруженных строк прогнозом доступных показов. Пересечения рассчитываются в совместимом ID-пространстве; ALL между разными namespace без identity mapping не разрешается. Нет обещания охвата для request-source без статистики запросов.

Результат: диапазон, reliability, coverage, sample window, updatedAt, причины сужения, доли overlap, дедупликация, примененные ограничения и недостающие данные. Состояния: not-requested, queued, running/cancel, ready, stale, failed/retry, insufficient-data, unsupported-source, no-access. Порог приватности скрывает малые выборки. Изменение аудитории/кампании/источника делает результат stale.

Подсказки объясняют причину: расширить окно, проверить исключения, заменить устаревший источник, исправить namespace, подключить TV-совместимый источник. Никаких молчаливых изменений или гарантий результата. Применение подсказки меняет черновик и сбрасывает validation/forecast. Книга показывает демо-числа, а не работающую предсказательную модель.

8. Версии, наследование и массовые операции

Выпуск аудитории не обновляет связанные кампании. Preview применения новой версии показывает каждую цель, ее собственный/унаследованный блок, права, capability, конфликт ревизии и вычисленное итоговое выражение. Наследование и локальное уточнение не изменяют источник. REPLACE не разрешает обойти ограничения арендатора. Массовая операция выполняется по цели атомарно; частичный результат с причинами и повтором только неуспешных целей. Компенсирующая отмена применима только при неизмененной целевой ревизии. Архивирование используемого сегмента блокируется или требует явной миграции связей, исторические версии и аудит остаются доступны.

9. Что реализовано в книге и что предстоит

Реальные локальные действия: создание черновика по источнику, редактирование имени/TTL/описания, ANY/ALL и исключения, просмотр/добавление/удаление ID, загрузка и проверка синтетического файла, проверка структуры, инвалидирование результатов, выпуск локальной версии и добавление в выбор кампании; поиск и множественный выбор справочника, admin-only отключение с причиной.

Не подключено: продуктовые API, постоянное хранение, полная обработка графа, identity resolution, реальные события/DMP, реальные IAB коды, прогноз и аудит сервера. Сценарные карточки ошибок - UX-контракт, а не подтверждение реализации.

Критерии приемки реализации: DSP нигде не меняет capability; CTV недоступен без разрешения; справочники используют ID/версию и не теряют выбор; библиотека ведет в рабочий редактор; каждый источник имеет допустимые операции; проверка и прогноз привязаны к ревизии; выпуск версии не меняет закрепленные связи; каждая массовая цель имеет явный результат; права проверяются на сервере.