Все версии

Фичи для DSP

Приоритет - рекомендация по результатам исследования, не утвержденная очередь. "Новая" означает: готовый пользовательский сценарий не найден в просмотренных маршрутах/страницах/обработчиках. Перед реализацией нужен короткий аудит контрактов. R и B ссылаются на карту источников в RESEARCH.md. Номера экранов - в макете.

| ID | Что перенести | Доказательство | Состояние Bidcore и точный объем | Приоритет | Макет | | --- | --- | --- | --- | --- | --- | | F01 | Контекст, быстрый поиск, последние и избранные | R01-R04 | Расширение B02: поиск по сущностям, scoped context, сохраненные виды таблиц | P0 | 01, 02, 15 | | F02 | Автоматические правила по KPI | R07 | Новый сценарий. B04 - targeting на запросе, не планировщик оптимизации | P1 | 10, 11 | | F03 | Пользовательские метрики | R08 | Новый управляемый каталог формул поверх существующего report-builder | P1 | 12 | | F04 | Прогноз доступного инвентаря | R09 | Новый сценарий. B06 оценивает стоимость отчета, не закупку | P1 | 13 | | F05 | Центр аудиторий и комбинированные сегменты | R10-R13 | Расширение B03-B04: типы источников, TTL, композиция, синхронизация, состояние расчета | P1 | 07, 08 | | F06 | Look-alike и MMP аудитории | R12 | Новые источники поверх B03. Look-alike включать только после появления расчетного сервиса | P2 | 09 | | F07 | Тематические списки площадок | R14 | Переиспользуемые версионируемые наборы allow/deny с загрузкой и привязкой к кампаниям; не дублировать разовые фильтры targeting | P1 | 14 | | F08 | Заказы и план/факт | R15 | Отдельный коммерческий слой IO над кампаниями; флайт не переименовывать в заказ | P2 | 15 | | F09 | Развитие отчетов и клиентские доступы | R06, R16 | Расширение B05: выровнять SaaS, серверные шаблоны и права на конкретных рекламодателей, клиентский read-only scope | P1/P2 | 06, 16 | | F10 | Управление площадками из аналитики кампании | R03-R04 | Расширение B07: срезы с количеством, массовое исключение, настраиваемые вкладки; корректировки ставок отдельным этапом | P1 | 02 | | F11 | Источники аудиторий по URL/событиям | R11, R13 | Расширение B03-B04: коннекторы, история обновлений, TTL, наглядная диагностика | P2 | 07, 09 |

Контракты и приемка

F01. Контекст и сохраненные виды

Рекламодатель выбирается один раз и сохраняется в URL. Глобальный поиск возвращает тип, имя и родителя. Переключение рекламодателя сбрасывает несовместимые фильтры с объяснением. Избранное хранится по пользователю и tenant. Модель View: id, owner, tenant, scope, columns, sort, filters, version. Приемка: перезагрузка и Back восстанавливают вид, поиск не раскрывает сущности другого tenant, старый ответ не заменяет новый. Существующий URL списка совместим.

F02. Правила оптимизации

Rule: scope (campaign IDs), groupBy (domain/bundle/placement), predicate, lookback, minSample, action, cadence, timezone, cooldown, enabled, version. MVP: уведомление или исключение площадок. Оценка по полному окну данных, не по текущей странице таблицы. Движок предикатов отделен от ruleexpr targeting. Сначала preview/dry-run, затем подтверждение количества затрагиваемых площадок.

Сервер: scheduler, watermark свежести отчетов, идемпотентные execution IDs, проверка разрешений при исполнении, журнал и отмена созданного исключения. Противоречащие правила и устаревшие данные приводят к skip с причиной. Приемка: повтор задания не выполняет действие дважды, недостаточная выборка ничего не отключает, timezone не меняет окно незаметно, каждое действие имеет автора/условие/до/после, read-only не может активировать правило. Предлагаемые dry-run, cooldown и отмена - развитие, не установленная функция референса.

F03. Метрики по формулам

Metric: internalName, label, description, expression AST, unit, precision, advertiser scope, version. Разрешить whitelist серверных метрик, числа и + - * / (). Не исполнять произвольный код. Считать формулу после агрегации: sum(clicks) / sum(impressions), не среднее CTR строк. Деление на ноль дает null с пояснением. Для percent коэффициент 100 применяется форматтером один раз; в AST хранится доля. Preview использует ту же реализацию, что отчет и экспорт. Зависимые шаблоны показывать перед архивированием; не удалять используемую метрику молча. Приемка: одинаковые итоги в UI/CSV, ошибки токенов указаны у формулы, формула недоступной метрики запрещена, округление не меняет расчет правил.

F04. Эстиматор

ForecastQuery: targeting snapshot, dates, timezone, bid scenario, grouping; ForecastResult: sourceWindow, generatedAt, sampleCoverage, assumptions, range, inventoryRows, modelVersion. Доступные аукционы и ожидаемые выигранные показы - разные показатели. Reach допустим только при достаточном покрытии ID. Диапазон и метод калибровки определяются расчетным сервисом, не макетом.

Сервер: агрегаты bid requests/availability, дедупликация, покрытие supply, учет сезонности и конкуренции, проверка валюты и ставки. Не обещать точность на основании пустого экрана архива. Приемка: нет данных/недостаточно выборки/ просрочено различимы, примененный в кампании snapshot совпадает с прогнозом, результат никогда не подписан как гарантированный объем. Без сервиса остается скрытым за feature flag, а не показывает фиктивные числа.

F05, F06, F11. Аудитории

Переиспользовать AudienceSegment и текущий импорт. Добавить тип источника, identifier type, retention, sync status/history, owner, version, sizeAsOf. Композиция хранит дерево ссылок AND/OR/NOT, запрещает циклы и смешение несовместимых типов ID. Трехзначную семантику targeting согласовать отдельно с материализацией множеств; не считать размер арифметическим сложением сегментов.

MMP: проверяемый коннектор, mapping event/schema, окно, частота, дедупликация, backfill и лаг. Look-alike: seed, поддерживаемый тип ID, минимальный размер по конфигурации сервиса, расширение, статус построения и версия результата. "1000 профилей" из референса - его рекомендация, не автоматическое ограничение Bidcore. URL: очередь загрузки, лимиты объема, проверка адреса/редиректов, защита внутренних сетей, backoff и история ошибок. Сырые ID не попадают в журнал действий. Срок хранения и доступы наследуются от tenant. Приемка: импорт с частичными ошибками дает сводку, повтор не плодит участников, истечение TTL исключает ID, ошибка коннектора не показывает устаревший размер как актуальный.

F07. Списки инвентаря

InventoryList: тип domain/bundle/placement, allow/deny, members, version, updatedAt, campaignBindings. Импорт preview показывает нормализацию, дубли и невалидные строки. Изменение используемого списка показывает impact. Пока автоматическое наполнение Smart List не изучено, ограничиться ручным или импортируемым списком. Приемка: одинаковое совпадение на UI и bidder, конфликт allow/deny разрешается существующей политикой targeting, журнал и откат версии сохраняют привязки. Из списка видны затрагиваемые кампании.

F08. Заказы

InsertionOrder: advertiser, contractRef, owner, period, currency, bookedVolume, bookedRevenue, linkedCampaigns, status. Факт берется из отчетности; маржа - только с финансовым правом и согласованной формулой дохода/себестоимости. Не суммировать разные валюты. Приемка: план и факт имеют один timezone, привязка кампании не удваивает ее факт, права клиента скрывают себестоимость, изменение IO не меняет автоматически аукционный бюджет без отдельного действия.

F09. Отчеты и клиентские области

Сохраненные шаблоны/подписки основной DSP переиспользовать, проверить доступность SaaS endpoints. ReportWorkspace: разрешенные рекламодатели, участники и роли, доступные шаблоны, запрет мутаций кампаний. Доступ проверяется сервером и в экспорте, включая фоновые задания после отзыва права. Пересылка публичной ссылки не является MVP. Приемка: клиент не читает соседнего рекламодателя по ID/CSV, отзыв участника блокирует уже выданные задания/ссылки согласно политике, экспорт формулы и данные таблицы совпадают, версия шаблона не теряется.

F10. Действия из аналитики

Табличные срезы строить через существующие измерения report-builder, доступные конкретной редакции. Добавить configure tabs и сохраненный набор колонок. Массовое исключение: показать сущности и область действия, обновить targeting через его API, отразить inherited/local status. Корректировки ставок требуют единой модели приоритетов с базовой ставкой и пределами; включать отдельной итерацией после аудита bidder. Приемка: срез фильтруется тем же контекстом, выбор строки не запускает рекламу, результат операции содержит success/error по каждому ID; частичный сбой не показывается как полный успех.

Что отложено

A/B, Creative Craft, Marketplace как витрина поставщиков, cross-device атрибуция и коммерческие ML стратегии требуют отдельного исследования: сохраненных рабочих экранов/данных недостаточно. Их пункты меню не становятся обязательствами текущего плана. Сторонние названия продуктов/провайдеров не переносятся в Bidcore автоматически.