Редакция 08.11.2026 после замечаний. Этот документ заменяет прежнее решение о флаге CTV кампании и неполный редактор сегмента. Статус: UX и контракт будущей реализации. Рабочее приложение, БД и API этой редакцией не изменены.
| Источник | Подтверждено | Пробел |
| --- | --- | --- |
| 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 и его точное поле в админке еще нужно подтвердить при интеграции. Ниже обязательная модель по требованию пользователя.
Единственный переключатель находится в админке арендатора, экран 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.
Экран 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, подтверждение изменяет только выбранный уровень.
Жизненный цикл: новый черновик, заполнение источника, проверка, готов к выпуску, публикация версии, отдельное применение к целям, использование, архивирование. Ошибка job не уничтожает последнюю успешную версию. Изменение определения, состава, scope или источника инвалидирует проверку и прогноз.
Путь: библиотека 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 явно блокируются как неподключенные.
Файл: формат/кодировка/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 перед публикацией.
Три независимые величины: 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. Книга показывает демо-числа, а не работающую предсказательную модель.
Выпуск аудитории не обновляет связанные кампании. Preview применения новой версии показывает каждую цель, ее собственный/унаследованный блок, права, capability, конфликт ревизии и вычисленное итоговое выражение. Наследование и локальное уточнение не изменяют источник. REPLACE не разрешает обойти ограничения арендатора. Массовая операция выполняется по цели атомарно; частичный результат с причинами и повтором только неуспешных целей. Компенсирующая отмена применима только при неизмененной целевой ревизии. Архивирование используемого сегмента блокируется или требует явной миграции связей, исторические версии и аудит остаются доступны.
Реальные локальные действия: создание черновика по источнику, редактирование имени/TTL/описания, ANY/ALL и исключения, просмотр/добавление/удаление ID, загрузка и проверка синтетического файла, проверка структуры, инвалидирование результатов, выпуск локальной версии и добавление в выбор кампании; поиск и множественный выбор справочника, admin-only отключение с причиной.
Не подключено: продуктовые API, постоянное хранение, полная обработка графа, identity resolution, реальные события/DMP, реальные IAB коды, прогноз и аудит сервера. Сценарные карточки ошибок - UX-контракт, а не подтверждение реализации.
Критерии приемки реализации: DSP нигде не меняет capability; CTV недоступен без разрешения; справочники используют ID/версию и не теряют выбор; библиотека ведет в рабочий редактор; каждый источник имеет допустимые операции; проверка и прогноз привязаны к ревизии; выпуск версии не меняет закрепленные связи; каждая массовая цель имеет явный результат; права проверяются на сервере.