AI Asist
v2
Д
Д

Плейбук: отчёты «Прибыль Неделя» и «Продажи День»

← Заметки  ·  Раздел: Ozon  ·  Файл: data/notes/ozon/profit-week-playbook.md

Плейбук: отчёты «Прибыль Неделя» и «Продажи День»

Срабатывает, когда пользователь просит:

  • «дай прибыль за неделю»;
  • «Прибыль Неделя»;
  • «по артикулам за неделю»;
  • «разложи рекламу/прибыль по артикулам»;
  • «последняя закрытая неделя»;
  • «Продажи День»;
  • «дай продажи за день»;
  • «покажи данные за вчера»;
  • «сравнение»;
  • «сравни данные»;
  • «сравни отчёты».

Базовый формат отчёта:

Артикул | Продажи net | Выручка | Себес | Лог/шт | Реклама | ДРР | Прибыль | Приб/шт | ROI

По умолчанию отчёт Прибыль Неделя формируется за последнюю закрытую календарную неделю Пн–Вс.

Отчёт Продажи День использует тот же формат и ту же методику, но период = один календарный день.

Если в команде есть сравнение, сравни данные, сравни отчёты — включать сравнение с предыдущим периодом по умолчанию:

  • для Прибыль Неделя: текущая закрытая неделя vs предыдущая календарная неделя такой же длины;
  • для Продажи День: выбранный день vs среднее за предыдущие 7 календарных дней.

Пример: если сегодня понедельник 2026-06-29, последняя закрытая неделя = 2026-06-22 … 2026-06-28.


Для какого магазина

Если пользователь не уточнил магазин, брать из контекста последнего обсуждения. Для текущего сценария это:

Магазин shop_id MP
Siluetta Ozon 4 ozon

Перед расчётом проверять:

SELECT id, name, marketplace FROM shops ORDER BY id;

Гранулярность

Размеры объединяются в один артикул:

ELS04-black-S / ELS04-black-M / ELS04-black-L -> ELS04-black
skirt-milk-s / skirt-milk-m / skirt-milk-l -> skirt-milk

Для Ozon технически:

  1. Берём offer_id.
  2. Отрезаем размерный суффикс:
-(XXXL|XXL|XL|L|M|S|XS|XXS|\d{2,3})$
  1. Применяем aliases себеса/артикулов:
{
    "els04-black": "els004-black",
    "els04-brown": "els004-brown",
    "els04-grafit": "els004-graphit",
    "els04-graphite": "els004-graphit",
}

В отчёте показывать человекочитаемый артикул:

els004-black -> ELS04-black
els004-brown -> ELS04-brown
els004-graphit -> ELS04-grafit

Источники данных Ozon

Метрика Источник
Продажи net ozon_finance_operations + ozon_posting_items
Выручка accruals_for_sale по delivered/return операциям
Себес costs, marketplace='ozon', ключ = base article без размера
Логистика raw_json.services + FBO operation types
Реклама ozon_ad_metrics_daily.money
Прибыль net_no_ads - ads - cogs

Период

Продажи День

Отчёт Продажи День строится за один календарный день.

Если пользователь пишет:

  • «за вчера» — брать вчерашнюю дату относительно текущей даты в Europe/Moscow;
  • «за сегодня» — брать текущую дату, но явно предупредить, что день ещё не закрыт;
  • конкретную дату — брать её как SINCE = TO = YYYY-MM-DD.

Пример: если сегодня 2026-06-29, то «за вчера»:

SINCE = 2026-06-28
TO    = 2026-06-28

В ответе всегда писать абсолютную дату: 28.06.2026, не только «вчера».

Последняя закрытая неделя

Берём последнюю полную неделю Пн–Вс, которая закончилась до текущей даты.

Если сегодня 2026-06-29, то:

SINCE = 2026-06-22
TO    = 2026-06-28

Вчера без слова «Продажи День»

Если пользователь просит «за вчера», текущая дата 2026-06-29, то:

SINCE = 2026-06-28
TO    = 2026-06-28

Всегда в ответе писать абсолютные даты.


Формулы

Продажи net = delivered_qty - returned_qty

Выручка = SUM(accruals_for_sale по OperationAgentDeliveredToCustomer)
        + SUM(accruals_for_sale по ClientReturnAgentOperation)

Себес = Продажи net × cost

Логистика = Услуги доставки + Услуги партнёров + Услуги FBO

Лог/шт = Логистика / Продажи net

Реклама = SUM(ozon_ad_metrics_daily.money)

ДРР = Реклама / Выручка × 100

Прибыль = net_no_ads - Реклама - Себес

Приб/шт = Прибыль / Продажи net

ROI = Прибыль / Себес × 100

net_no_ads — сумма ozon_finance_operations.amount за период без рекламных operation types:

OperationMarketplaceCostPerClick
OperationPromotionWithCostPerOrder

Важно: прибыль по Ozon включает комиссию и прочие удержания Ozon через amount. В отчёте они не выводятся отдельной колонкой, но уже сидят внутри прибыли.


Сравнение

Срабатывает, если пользователь пишет:

сравнение
сравни данные
сравни отчёты

Прибыль Неделя

Текущий период = последняя закрытая неделя Пн–Вс.

Предыдущий период = календарная неделя перед ней.

Пример для текущей даты 2026-06-29:

текущий период: 2026-06-22 … 2026-06-28
предыдущий:     2026-06-15 … 2026-06-21

Формат ячеек:

текущее значение (предыдущее значение)

Для процентов:

7.1% (8.4%)

Если в предыдущем периоде артикула не было — писать в скобках.

Продажи День

Текущий период = выбранный день.

Предыдущий период для сравнения = среднее за предыдущие 7 календарных дней, не включая выбранный день.

Пример:

день:      2026-06-28
сравнение: среднее за 2026-06-21 … 2026-06-27

Формат ячеек:

значение дня (среднее за 7 дней)

Округление:

  • деньги и штуки — до целых;
  • проценты — до 1 знака;
  • Лог/шт, Приб/шт — до целых.

Сортировка при сравнении

Сортировать по текущему периоду:

  1. если запрос про рекламу — по текущей рекламе убыванию;
  2. иначе по текущей прибыли убыванию;
  3. строка ИТОГО всегда внизу.

Классификация логистики Ozon

Логистика в этом отчёте должна совпадать с логистическими блоками кабинета:

Услуги доставки
Услуги партнёров
Услуги FBO

Услуги доставки

Из raw_json.services[].name:

MarketplaceServiceItemDirectFlowLogistic
MarketplaceServiceItemReturnFlowLogistic
MarketplaceServiceItemDeliveryToHandoverPlaceOzon

Услуги партнёров

Из raw_json.services[].name:

MarketplaceRedistributionOfAcquiringOperation
MarketplaceServiceItemRedistributionReturnsPVZ
MarketplaceServiceItemRedistributionLastMileCourier
MarketplaceServiceItemPackageRedistribution

Услуги FBO

По operation_type:

OperationMarketplaceSupplyAdditional
MarketplaceServiceItemCrossdocking

Не включать в колонку «Логистика» комиссию Ozon и прочие удержания. Если надо показать полную раскладку, добавлять отдельную колонку «Комиссия/прочее», но в базовом отчёте её нет.


Распределение операций по артикулам

У Ozon одна финансовая операция может относиться к posting’у с несколькими товарами. Чтобы не задвоить суммы:

  1. Если в raw_json.items есть SKU — фильтровать ozon_posting_items только по этим SKU.
  2. Если в операции несколько товаров — распределять сумму пропорционально price × quantity.
  3. Если цена пустая — распределять пропорционально quantity.
  4. Операции без однозначной привязки к товару распределять пропорционально выручке артикула.

Контроль:

SUM(прибыль + реклама + себес по артикулам) == SUM(amount без рекламных operation types)
SUM(реклама по артикулам) == SUM(ozon_ad_metrics_daily.money)
SUM(логистика по артикулам) == логистика кабинета по трём группам

Реклама

Реклама берётся за тот же период из ozon_ad_metrics_daily.

Важно для интерпретации: расходы рекламы отчётной недели часто дают заказы в следующую неделю. Поэтому:

  • в таблице показываем факт расхода рекламы за период;
  • не делаем жёсткий вывод «эта реклама принесла эти продажи» без лаг-анализа;
  • если пользователь спрашивает эффективность рекламы, отдельно сравнивать лаги +1…+7 дней.

Формат ответа

Для Прибыль Неделя и Продажи День выводить одну и ту же компактную таблицу:

Артикул | Продажи net | Выручка | Себес | Лог/шт | Реклама | ДРР | Прибыль | Приб/шт | ROI

Сортировка по умолчанию:

  1. По рекламе убыванию, если запрос про рекламу.
  2. По прибыли убыванию, если запрос про прибыль.
  3. Сохранить строку ИТОГО внизу.

В конце кратко указать:

  • период;
  • магазин;
  • что размеры объединены;
  • если есть SKU без себеса.

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


Чек-лист

  1. Период указан абсолютными датами.
  2. shop_id проверен.
  3. Размеры объединены до артикула.
  4. Себес найден для всех base-артикулов.
  5. Логистика считается только по трём кабинетным группам.
  6. Реклама сходится с ozon_ad_metrics_daily.money.
  7. Прибыль сходится с ozon_finance_operations.amount без рекламных operation types.
  8. В ответе есть строка ИТОГО.
Фильтры