📊 Справочник метрик

🚀 Быстрый старт
3 минуты в день — всё, что нужно для контроля бизнеса
Ключевая метрика
L2
Прибыль до налогов — главный показатель здоровья бизнеса
Главный сигнал тревоги
Стокаут
Нулевой остаток = потерянные продажи прямо сейчас
Ежедневная проверка
3 шага
Алерты → Заказы сегодня → Топ-проблемы AI
Как читать монитор за 3 минуты:
1. Открыть вкладку Алерты — проверить красные и оранжевые сигналы.
2. Посмотреть KPI-панель — заказы и выручка относительно вчера/недели.
3. Спросить AI-чат: «Что важного сегодня?»
Как устроен монитор
Данные
Подтягиваются с Wildberries каждые ~10 минут автоматически. Никаких ручных выгрузок.
Что показывает
Продажи, финансы, склады, логистику — всё в одном окне в реальном времени.
Главный принцип
Только реальные данные из WB. Никаких примерных или демонстрационных цифр.
💰 Финансовое ядро
Все формулы простым языком — что считается и что это значит для вашего бизнеса
Пример-эталон на весь раздел: Продаёте носки по 1 000 ₽. Себестоимость (закупка + доставка до WB) = 300 ₽/пара. Комиссия WB 15%, эквайринг 1,5%. Продажи 50 пар/день. Реклама = 10% от выручки. Налог УСН «Доходы» 6%.
1. Выручка к перечислению
Что WB реально переводит вам за каждую продажу
Что это
Сумма, которую Wildberries зачисляет на ваш счёт за каждую проданную единицу — уже после вычета своей комиссии и банковского эквайринга. Это ещё не прибыль: из неё нужно вычесть себестоимость, логистику и хранение.
Выручка к перечислению = Цена продажи − Комиссия WB − Эквайринг
Пример
Носки 1 000 ₽ → комиссия 15% = 150 ₽, эквайринг 1,5% = 15 ₽ → WB переводит 835 ₽
Как читать
Растёт — хорошо
Падает при тех же продажах — комиссия WB могла вырасти
2. Себестоимость товара
Ваши расходы до того, как товар попал на склад WB
Что включать
Да: цена у поставщика + доставка от поставщика + упаковка + маркировка + таможня.
Нет: доставку WB до покупателя — это расход маркетплейса, считается отдельно.
Себестоимость = Закупочная цена + Доставка до WB + Упаковка
Пример
Купили 250 ₽, доставка до склада 30 ₽, упаковка 20 ₽ → себестоимость = 300 ₽/пара
⚠️ Пока себестоимость не введена — прибыль и маржа считаются по заглушке 90 ₽ и недостоверны. Введите в Юнит-экономике.
3. Валовая прибыль
Что осталось после вычета закупочной цены — до расходов WB
Что это
Первичный «заработок» с продажи: выручка к перечислению минус себестоимость. Если валовая прибыль маленькая — проблема в закупке или комиссии, а не в доставке.
Валовая прибыль = Выручка к перечислению − Себестоимость
Пример
835 − 300 = 535 ₽ с пары
Нормы маржи
> 30% — хороший запас
15–30% — норма
< 15% — мало запаса на расходы WB
4. Операционная прибыль
Прибыль после всех расходов — осталось только вычесть налог
Что это
Реальный доход с продажи с учётом логистики WB (доставка покупателю), хранения, рекламы и штрафов.
Операционная прибыль = Выручка к перечислению − Себестоимость − Доставка WB − Хранение − Реклама − Штрафы
Пример
835 − 300 − 80 (доставка WB) − 5 (хранение) − 100 (реклама 10%) = 350 ₽ на пару
Нормы
> 15% маржи — устойчивый бизнес
5–15% — работает, но мало запаса
< 0% — каждая продажа уводит в минус
5. Чистая прибыль
То, что реально остаётся у вас после всего, включая налог
Что это
Итоговый заработок — операционная прибыль минус налог. Именно это вы «кладёте в карман» с каждой продажи.
Чистая прибыль = Операционная прибыль − Налог
Пример
Операционная прибыль 350 ₽. Налог УСН 6% от суммы покупателя: 1 000 × 6% = 60 ₽. Чистая прибыль = 350 − 60 = 290 ₽ с пары носков.
Важно: налог берётся с того, что заплатил покупатель (1 000 ₽), а не с того, что перечислил WB (835 ₽). Это стандарт УСН «Доходы».
6. Маржинальность (Маржа %)
Какой процент от выручки остаётся прибылью — главный KPI
Что это
Сколько копеек прибыли вы зарабатываете с каждого рубля продаж. Позволяет сравнивать эффективность разных товаров и периодов.
Маржа % = Чистая прибыль / (Цена × Кол-во продаж) × 100%
Пример
290 ₽ / 1 000 ₽ × 100% = 29% — с каждой 1 000 ₽ продаж зарабатываем 290 ₽
Нормы
> 20% — отличная маржинальность
10–20% — нормально
< 5% — опасная зона
⚠️ Маржа может немного отличаться на разных вкладках монитора — потому что вкладки используют разные источники данных. Для итогового анализа используйте вкладку Финансы.
7. ROI — отдача на вложения в товар
Сколько прибыли даёт каждый вложенный в закупку рубль
Что это
Показывает эффективность вложений в закупку. Позволяет сравнивать товары с разными ценами: дешёвый товар с ROI 200% выгоднее дорогого с ROI 50%, даже при одинаковой марже.
ROI = Валовая прибыль / Себестоимость × 100%
Пример
535 ₽ / 300 ₽ × 100% = 178% — на каждые вложенные 100 ₽ зарабатываем 178 ₽ прибыли
Нормы
> 80% — отличный товар
30–80% — норма для WB
< 20% — деньги работают плохо
8. Оборачиваемость
За сколько дней распродаётся текущий запас товара
Что это
Как быстро «крутятся» деньги. Чем меньше дней — тем быстрее вы возвращаете вложения и можете снова их пустить в оборот.
Оборачиваемость = Остаток на складе / Среднее продаж в день
Пример
На складе 1 000 пар, продаётся 50 пар/день → 1 000 / 50 = 20 дней
Нормы
< 20 дней — деньги крутятся быстро
20–45 дней — норма для WB
> 60 дней — деньги «заморожены» в складе
9. Оборачиваемость активов
Сколько раз в год весь вложенный капитал превращается в выручку
Что это
Показывает, сколько рублей выручки генерируется на каждый рубль активов (деньги в товаре + дебиторка WB). Используется в формуле Дюпона.
Оборачиваемость активов = Годовая выручка / Средние активы
Пример
Годовая выручка 18,25 млн ₽ (50 пар × 1 000 ₽ × 365 дней), активы в среднем 5 млн ₽ (товар + дебиторка WB) → 3,65× в год
Смысл
Чем выше — тем эффективнее работают активы. Высокооборотный товар (носки, расходники) даёт высокое значение. Сезонный — низкое.
10. ROA и формула Дюпона
Сколько приносит каждый рубль всех ваших активов — и где узкое место
Что это
ROA — отдача на все активы. Формула Дюпона раскладывает его на два рычага: маржу и скорость оборота. Если ROA низкий — сразу видно, что исправлять: цену или скорость продаж.
ROA = Маржа % × Оборачиваемость активов
Пример
Маржа 29% × оборачиваемость 3,65× = ROA = 106% годовых — деньги работают отлично
Нормы
ROA > 50% — отличная отдача
20–50% — хороший бизнес
< 10% — слабее депозита, пересмотреть товар
Как использовать: ROA низкий → смотрите что слабее. Маржа? (→ поднять цену/снизить расходы). Оборачиваемость? (→ продавать быстрее / держать меньше товара).
11. GMROI — отдача на товарный запас
Сколько прибыли генерирует каждый рубль, лежащий в товаре
Что это
Главный KPI для ассортиментного управления. Показывает, насколько эффективны деньги, «замороженные» в товарном запасе. Идеален для сравнения SKU между собой.
GMROI = Годовая валовая прибыль / Средний товарный запас в ₽ × 100%
Пример
Валовая прибыль за год: 535 × 50 × 365 = 9,76 млн ₽. Средний запас: 1 000 пар × 300 ₽ = 300 000 ₽. GMROI = 9 760 000 / 300 000 = 3 253% — носки крутятся очень быстро
Нормы
> 200% — отличный товар
100–200% — норма
< 100% — товар крутится медленно
12. DROI — отдача на весь вложенный капитал
Учитывает не только товар, но и деньги в пути и дебиторку WB
Что это
Более полная версия ROI: считает все деньги в обороте — товар на складе, предоплаты поставщикам и выплату WB, которую ещё не получили.
DROI = Годовая чистая прибыль / (Товарный запас + Предоплаты + Дебиторка WB) × 100%
Пример
Чистая прибыль за год: 290 × 50 × 365 = 5,3 млн ₽. Капитал: товар 300 000 + предоплата 200 000 + ждём от WB 150 000 = 650 000 ₽. DROI = 815%
Смысл
Если DROI ниже ROI — значит деньги «в пути» работают неэффективно. Проверьте, не задерживает ли WB выплаты.
13. Срок окупаемости партии
За сколько дней вернутся деньги, вложенные в закупку
Что это
Показывает, через сколько дней чистая прибыль от продаж покроет начальные вложения в партию товара.
Срок окупаемости = Стоимость закупленной партии / Ежедневная чистая прибыль
Пример
Купили 1 000 пар × 300 ₽ = 300 000 ₽. Прибыль: 290 ₽/пара × 50 пар/день = 14 500 ₽/день. Окупаемость = 300 000 / 14 500 = 21 день
Нормы
< 30 дней — отлично
30–90 дней — нормально
> 180 дней — долго, пересмотреть экономику
14. Налог УСН — важный нюанс
База налога — это сумма покупателя, а не то, что перечислил WB
УСН «Доходы» 6%
Налог = Сумма, уплаченная покупателями × 6%.
Покупатель заплатил 1 000 ₽ → налог 60 ₽. WB перевёл 835 ₽ → налог всё равно 60 ₽, не 835 × 6%.
Налог = Сумма продаж покупателям × Ставка УСН (%)
УСН «Д−Р» 15%
Налог = (Доходы − Подтверждённые расходы) × 15%. Выгоден, если расходы > 60% от доходов.
Как задать
⚙️ Настройки → «Налоговая ставка». Монитор автоматически применит её ко всем расчётам чистой прибыли.
⚠️ При ОСНО, патенте или НПД укажите ставку 0% и учитывайте налог вручную.
📦 Заказы и возвраты
Основные метрики продаж
Заказы
Что показывает
Сколько человек добавило ваш товар в корзину и оформило заказ сегодня/за период.
Важный нюанс
Заказ ≠ продажа. Часть заказов будет отменена или возвращена. Реальные деньги — это продажи (выкупы).
Как читать
Сравнивайте с вчерашним днём и средним за 7 дней. Резкое падение = сигнал проверить позиции в поиске.
Продажи (выкупы)
Что показывает
Сколько товаров покупатели реально получили и оплатили — уже после возможных отмен.
Почему важно
Именно продажи формируют выручку и рейтинг карточки в поиске WB.
Как читать
Продажи обычно ниже заказов на 10–30% (отмены + возвраты). Если процент выкупа падает — что-то не так с качеством или описанием.
Выручка
Что показывает
Сумма всех продаж по цене покупателя (до комиссии WB) за период.
Как читать
Растёт — хорошо
Стоит на месте — смотреть причину
Падает >20% — проверить остатки и позиции
Процент выкупа
Выкуп %
Что показывает
Какой процент заказов превратился в реальные продажи.
Выкуп = Продажи / Заказы × 100%
Как читать
> 80% — отлично
60–80% — норма
< 50% — что-то не то с товаром или описанием
Что делать
Если выкуп падает — проверить отзывы, фото, размерную сетку.
📈 Инвестор-метрики
Все инвестор-метрики перенесены в раздел Финансовое ядро — там ROI, GMROI, DROI, Дюпон, Payback, Оборачиваемость расписаны с примерами в рублях и нормальными диапазонами.
📱 Monitor 24
Главный экран — пульс бизнеса в реальном времени
Главный экран — открывать каждое утро. Monitor 24 показывает заказы, выкупы, возвраты и оперативную маржу в реальном времени (обновление каждые ~10 минут из Statistics API WB). Прибыль и маржа здесь — оперативная оценка; для итогового финансового анализа используйте вкладку Финансы. Все формулы прибыли и маржи — в разделе Финансовое ядро.
💼 Финансы
Еженедельные отчёты WB — главный источник точных финансовых данных
Вкладка Финансы строится на еженедельных отчётах WB (Finance API) — это самые точные данные: чистая прибыль, маржа и налог по каждой финансовой неделе (пн–вс). Текущая неделя неполная до воскресенья — сравнивайте только закрытые периоды. Данные Finance API точнее Monitor 24: знаменатель маржи здесь — выручка покупателя, а не выплата WB. Все формулы — в разделе Финансовое ядро.
🚚 Логистика
Как местоположение склада влияет на деньги
Вкладка Логистика показывает, как товар распределён по складам WB и во что это обходится: ИЛ (доля локальных доставок, норма > 70%), ИРП (надбавка за плохое покрытие, норма ≈ 0%) и КПС (хватает ли товара на каждом складе, норма 0.65–1.8). Правило простое: равномерное распределение = меньше расходы на логистику и лучше позиции в поиске.
📦 Юнит-экономика
Считаем прибыль на единицу товара — сколько реально зарабатываете с каждой продажи
Юнит-экономика считает прибыль на каждую единицу товара с учётом плановой логистики, хранения и рекламы WB. Главное действие: введите реальную себестоимость (закупка + доставка до WB + упаковка) — без неё все расчёты идут по заглушке 90 ₽ и недостоверны. Формулы прибыли, ROI и маржи — в разделе Финансовое ядро.
🔤 ABC/XYZ-анализ
Классификация товаров по ценности и предсказуемости спроса
ABC/XYZ-анализ классифицирует товары по двум осям: ABC — вклад в выручку (A: топ-20% артикулов → 80% выручки; B: следующие 30%; C: остальные 50%), XYZ — стабильность спроса (X — стабильный, Y — умеренный, Z — хаотичный). Матрица AX/CZ подсказывает, куда вложить рекламный бюджет (AX-товары) и что пора выводить (CZ — маленькая выручка и непредсказуемый спрос). D-категория — нулевые продажи за период: разобраться причина стокаут, скрытая карточка или реальный нуль спроса.
🔄 Перераспределение
Умное перемещение товара между складами WB без новых закупок
Перераспределение предлагает план межскладских перемещений без новых закупок: находит склады с избытком (КПС > 1.8) и дефицитом (КПС < 0.65) и считает, сколько единиц куда переместить. Цель — улучшить ИЛ, снизить ИРП-надбавку и избежать стокаутов в нужных регионах. Монитор даёт расчёт-ориентир; реальное перемещение оформляется в ЛК WB (нужны открытые слоты приёмки).
📬 Telegram-уведомления
Настройте алерты прямо в Telegram — важное придёт само, без открытия монитора
Telegram-уведомления отправляют срочные алерты прямо в чат без открытия монитора: 🔴 стокауты, убытки, масс-выкуп; 🟠 дефицит КПС, ИРП-надбавка, низкий выкуп; 🟣 рост нелокальных заказов. Жёлтые/зелёные/синие — только в интерфейсе, в Telegram не идут. Монитор поддерживает до 11 тематических тредов (Стокауты, Финансы, Логистика…); настройка: ⚙️ Настройки → Telegram, потребуется токен бота от @BotFather.
Отзывы
Анализ отзывов покупателей — автоматически, без ручного чтения каждого
Вкладка Отзывы показывает тайм-бар: когда и сколько появилось плохих отзывов (1–3 звезды) — резкий всплеск красных меток = смена партии, упаковки или описания. AI-анализ автоматически группирует жалобы по темам (размер, качество, упаковка) и выводит топ-3 проблемы, без чтения каждого отзыва вручную. Рейтинг ниже 4.0 — красная зона: WB снижает показы карточки в поиске.
📥 Пополнение склада
Как читать рекомендации поставок
Принцип расчёта: Монитор смотрит на средний темп продаж за последние 7/30/45 дней (берёт максимум) и считает, сколько нужно привезти, чтобы держать 30-дневный запас с учётом текущего остатка.
Рекомендация поставки
Что показывает
Сколько единиц конкретного товара нужно привезти на каждый склад, чтобы не уйти в стокаут в ближайшие 30 дней.
Нужно = Средний_день × 30 − Текущий_остаток
Приоритет
Учитывает улучшение ИРП — если поставка на этот склад снизит надбавку к логистике, рекомендация помечается как высокоприоритетная.
Что делать
Начинать с красных позиций (стокаут или менее 7 дней), затем оранжевых (7–14 дней).
⚠️ Рекомендация — это ориентир, не жёсткое требование. Учитывайте сезонность, акции и свои производственные возможности.
🔔 Алерты
Какие ситуации монитор отслеживает автоматически
🔴Стокаут — товар кончился
На одном или нескольких складах не осталось товара. Прямо сейчас вы теряете продажи.
→ Немедленно: проверить остатки, планировать срочную поставку. Каждый день стокаута = потерянные заказы и падение позиций в поиске.
🔴Менее 3 дней запаса
Товар заканчивается через 1–3 дня. Поставка уже опаздывает.
→ Если везти самовывозом — отправлять сегодня. Если через логиста — уже срочно.
🟠ИРП вырос — логистика подорожала
Индекс регионального покрытия вырос на 0.2+ пункта. WB начал брать надбавку за плохое покрытие регионов.
→ Посмотреть карту КПС на вкладке Логистика. Найти склады с дефицитом и запланировать поставку туда.
🟠КПС дефицит на складе
КПС (ИРР) склада упал ниже 0.65 — склад получает значимую долю спроса (>3% запасов), но недозаполнен относительно неё. Алерт показывает: дефицит в штуках (сколько добавить до баланса), топ-2 артикула по срочности (дни до стокаута) и склад-донор с профицитом для перераспределения.
Пример: «Екатеринбург ИРР=0.51 (есть 651 шт., нужно ещё +627 шт.). Срочно: Куртка А-233 (23 шт., 4.0 шт./д, 5 дн.). Донор: Краснодар (ИРР=2.1, профицит ~340 шт.).»
→ Проверить топ SKU из алерта — они первые уйдут в стокаут. Переместить товар со склада-донора или оформить поставку. Результат: рост ИЛ, снижение ИРП.
🟡Падение выкупа
Процент выкупа заметно снизился относительно среднего. Больше людей отказываются от товара после получения.
→ Проверить отзывы последних 7 дней. Возможно, изменилось качество партии или описание не соответствует товару.
🟡Убыточный артикул
Один или несколько товаров продаются с отрицательной маржой — каждая продажа приносит убыток.
→ Проверить себестоимость и цену. Поднять цену или остановить продажи до пересмотра экономики.
🟣Нелокальные заказы выросли
Доля межрегиональных заказов выросла на 10+ пп. ИЛ ухудшается — растут расходы на логистику.
→ Понять, откуда пошли нелокальные заказы (новый регион спроса?) и рассмотреть поставку туда.
🟡Падение спроса
Продажи за последние 3 дня упали ниже 50% от среднего за 7 дней. Спрос резко просел.
→ Проверить позиции в поиске (вкладка SEO). Возможно, сменился сезон или появился сильный конкурент. Рассмотреть участие в акции.
🟠Скачок спроса
Продажи резко выросли (в 3–5× выше нормы — оранжевый; в 5× и более — красный). Может быть органика, акция или масс-выкуп.
→ Срочно проверить остатки. Если рост органический — немедленно запланировать поставку. Если масс-выкуп — мониторить следующие 24–48 часов.
🟠Низкий процент выкупа
Покупатели выкупают товар реже обычного. Порог: ниже 80% — предупреждение 🟠, ниже 65% — критично 🔴.
→ Изучить последние отзывы. Проверить, не изменилось ли качество партии или упаковка. Сравнить с конкурентами.
🟡Медленная оборачиваемость
Товар распродаётся слишком медленно: 30–60 дней запаса — предупреждение, более 60 дней — критично. Деньги «заморожены» в складе WB.
→ Рассмотреть снижение цены или участие в акции. Проверить, актуален ли товар в текущем сезоне.
🟡Финансовая аномалия недели
Один из финансовых показателей (выручка, маржа, возвраты) в текущей неделе отклонился более чем на 2σ от среднего по последним 4–8 неделям.
→ Открыть вкладку Финансы, проверить динамику текущей недели. Может быть плановой акцией или неожиданным падением.
🤖 AI-помощник
Что умеет AI-чат и как его использовать
Что умеет AI-чат
Анализ данных
Отвечает на вопросы о вашей аналитике на основе реальных данных монитора (заказы, склады, финансы).
Рекомендации
Объясняет алерты, предлагает конкретные действия по поставкам и ценообразованию.
Что не умеет
Не меняет цены, не делает заказы поставщикам, не отвечает на общие вопросы не про ваш магазин.
Как спрашивать эффективно
Хорошие вопросы
«Что важного сегодня?» / «Какой у меня ИРП и что с ним делать?» / «Какие товары в стокауте?» / «Сколько я заработал за неделю?»
По артикулу
«Покажи состояние артикула 123456» — покажет остатки, маржу, динамику конкретного товара.
Разбор дня
Кнопка «Разбор дня» в разделе AI — полный автоматический анализ ситуации и топ-3 рекомендации.
Часто задаваемые вопросы
Почему заказы в мониторе отличаются от кабинета WB?
Небольшое расхождение (1–5%) нормально — данные обновляются с задержкой. Если расхождение большое — нажмите «Обновить данные» или проверьте дату синхронизации.
Почему forPay меньше, чем я ожидал?
forPay уже после комиссии WB и эквайринга. Итоговая выплата ещё меньше — из неё WB вычтет логистику, хранение и другие расходы. Смотрите L2 для реальной прибыли.
Что делать если AI не знает мои данные?
AI использует данные из последнего обновления монитора. Нажмите «Запустить агента» в разделе AI, подождите 1–2 минуты и повторите вопрос.
Почему рекомендуемая поставка кажется завышенной?
Монитор считает на 30-дневный запас от пикового спроса (максимум за 7/30/45 дней). Если был всплеск продаж — расчёт будет консервативным. Ориентируйтесь на своё понимание сезонности.
Как часто обновляются данные?
Заказы и остатки — примерно каждые 10 минут. Финансовые данные (Finance API WB) — раз в час (rate limit WB: 1 запрос в минуту). Разбор дня агента — по запросу.
Что значит «расчётный» vs «тарифный» ИЛ?
«Расчётный» — монитор считает из ваших реальных заказов за 91 день. «Тарифный» — введённый вручную коэффициент из личного кабинета WB. Если вы не вводили тарифный — используется расчётный.
Почему маржа на странице Финансы отличается от маржи в Monitor 24?
Они считают на разных данных. Monitor 24 использует Statistics API (быстрые оперативные данные), Финансы — Finance API WB (медленнее, но точнее). Кроме того, знаменатель маржи может отличаться: на Финансах — выручка (price_with_disc × кол-во), в оперативном мониторе — иногда forPay. Для итогового анализа доверяйте вкладке Финансы.
Что значит "оценка по неполной неделе"?
WB закрывает финансовые недели в воскресенье вечером. Если вы смотрите на текущую (незакрытую) неделю, данные неполные — цифры ещё будут расти. Монитор помечает такие данные как «неполная неделя» или выделяет их серым. Для сравнения используйте закрытые недели.
Откуда берётся рекомендация перераспределения?
Алгоритм смотрит на ИРР (коэффициент покрытия) по каждому складу: находит склады с избытком (ИРР > 1.8) и дефицитом (ИРР < 0.65). Затем считает, сколько единиц каждого SKU нужно переместить с донора на получателя, чтобы выровнять покрытие. В основе — реальный спрос по складам за 30 дней.
Почему прибыль в мониторе отличается от выплаты в ЛК WB?
Это разные вещи. В мониторе показывается L2 (операционная прибыль = forPay − себестоимость − расходы WB). Выплата в ЛК WB — это forPay (до вычета вашей себестоимости), агрегированная за 2 недели. Ещё разница: выплата включает несколько недель сразу, а монитор показывает по периодам.
Что делать, если в ABC/XYZ товар попал в "D" (нулевые продажи)?
D-категория означает нулевые или почти нулевые продажи за выбранный период. Причины: (1) стокаут — товара нет на складе; (2) карточка скрыта WB; (3) реальный нуль спроса — никто не ищет этот товар. Проверьте остатки, видимость карточки в поиске, и если спроса нет — рассмотрите вывод товара из ассортимента.
Почему ROI у одного товара 200%, а у другого 40% — при похожей марже?
Маржа % считается от выручки, ROI — от себестоимости. Дешёвый товар с высокой маржой даёт огромный ROI: купили за 50 ₽, продали за 800 ₽ → маржа 50%, ROI 700%. Дорогой товар с той же маржой: купили за 2000 ₽, продали за 4000 ₽ → маржа 50%, ROI 100%. ROI — лучший инструмент для сравнения товаров с разными ценовыми диапазонами.
Как настроить Telegram так, чтобы не спамил ночью?
В Telegram-группе можно включить «Не беспокоить» на ночные часы — это стандартная функция Telegram, не монитора. Для фильтрации по типу алертов создайте отдельные темы (топики) в группе: критические (🔴🟠) в общую тему, менее срочные — в отдельную. Красные и оранжевые алерты всегда идут в Telegram — отключить их можно только полностью.
📁 Источники данных — Source of Truth
МетрикаSource of TruthФайлПримечание
forPaywb_reports_cachenet_payoutwb_reports_cache.pyFinance API rows агрегация
L1 (Gross profit)metrics_layer.compute_gross_profit()metrics_layer.pyforPay − COGS
L2 (Operating profit)metrics_layer.compute_net_profit_l2()metrics_layer.pyforPay − COGS − WB expenses
L3 (Net profit)metrics_layer.compute_net_profit_l3()metrics_layer.pyL2 − налог
Маржа %metrics_layer.compute_margin_pct()metrics_layer.pyprofit/revenue×100
PPUmetrics_layer.compute_ppu()metrics_layer.py≈38% overestimate без per-unit логистики
ИЛ расчётныйlocalization_engine.calc_global_localization()localization_engine.py91 день, weighted avg КТР per-SKU
ИЛ тарифныйuser_prefs.json → wb_localization_indexconfig / user_prefs.jsonРучной ввод из ЛК WB
ИРП расчётныйlocalization_engine.calc_global_localization()localization_engine.pyWeighted avg КРП per-SKU
ИРП тарифныйuser_prefs.json → wb_irp_pctuser_prefs.jsonРучной ввод из ЛК WB
КПС / ИРРstock_demand_engine.calc_irr_by_wh()stock_demand_engine.pyостаток/спрос per-склад
Рекомендация поставкиrestock_engine.parse_restock()restock_engine.pyavg×30 − stock; единственная формула
Остаткиwb.sqlite → stockswb_db.pyСтатистика API
Заказы/Продажиwb.sqlite → orders/saleswb_db.pyСтатистика API
Финансы по неделямfin_report_rows → wb_reports_cachewb_reports_cache.pyFinance API (rate limit 1/мин)
📐 Канонические формулы
Всегда использовать metrics_layer.py и FORMULAS.py. Не дублировать inline в JS или других Python-модулях.
ФормулаPython (metrics_layer)Константы (FORMULAS.py)
Gross Profitcompute_gross_profit(for_pay, cogs)
Net Profit L2compute_net_profit_l2(for_pay, cogs, logistics, storage, penalties, promotion, acquiring, deductions)
Margin %compute_margin_pct(profit, revenue)
PPUcompute_ppu(for_pay_unit, cogs)
WB Logistics Plannedcalc_wb_logistics_planned(weight, volume, il_coeff, wh_coeff)WB_LOGI_INDEX_FALLBACK=1.33
Fallback ИЛWB_LOGI_INDEX_FALLBACK = 1.33
Fallback ИРПWB_IRP_PCT_FALLBACK = 0.0
Neutral WH CoeffWB_WH_COEFF_NEUTRAL = 1.0
ИЛ расчётный (WB-корректный)
ИЛ = Σ(КТР_nm × orders_nm) / Σ(orders_nm) # per-SKU weighted avg Данные: последние 91 день (13 недель WB) КТР_TABLE: localization_engine.py → irp_engine.py (апроксимация)
ИРП расчётный (WB-корректный)
ИРП = Σ(КРП_nm × orders_nm) / Σ(orders_nm) # per-SKU weighted avg КРП_TABLE: irp_engine.py → единственный source of truth
КПС / ИРР per-склад
КПС = stock_wh / demand_wh Дефицит: КПС < 0.65 при stock_share >= 3% Избыток: КПС > 1.80 при stock_share >= 3%
⚙️ Движки расчёта
ДвижокФайлЧто считаетКоммит
restock_enginerestock_engine.pyРекомендации поставок (склад × артикул × units)3ed3c22
localization_enginelocalization_engine.pyИЛ/ДЛ WB-корректный (weighted avg КТР per-SKU)7d522e3, c0ee554
irp_engineirp_engine.pyИРП/КРП per-SKU lookup + simulate_irp_after_restock()df38bbf
stock_demand_enginestock_demand_engine.pyКПС/ИРР per-склад0f4d2dc
geo_constantsgeo_constants.pyWH→регион→макрорегион маппинги94a0237
metrics_layermetrics_layer.pyL1/L2/L3, margin, PPU — канонические функции
ai_brainai_brain.pyКоллектор + приоритизатор (без GPT)
🔌 API-эндпоинты
EndpointМетодЧто возвращаетФайл роута
/api/tariffs/wb-indexesGETИЛ, ИРП, il_source, irp_source, is_configuredapi_tariffs.py
/api/localization/summaryGETСводка локализации: ил%, дл%, per-SKUapi_localization.py
/api/localization/skuGETИЛ/ДЛ per-SKUapi_localization.py
/api/geo/wh-mapGETWH→регион→макрорегион картаapi_geo.py
/api/fin-weeksGETСписок недель из кэшаapi_finance.py
/api/wb-finance/summaryGETАгрегаты за периодapi_finance.py
/api/wb-finance/daily-weekGETДанные текущей неделиapi_finance.py
/api/wb-finance/daily-statusGETfin_load_ts, last_loaded_periodapi_finance.py
/api/agent/chatPOSTAI ответ (поток D)api_agent.py
/api/agent/runPOSTЗапуск разбора дня (поток A)api_agent.py
/api/agent/chat-debugPOSTКонтекст чата без вызова OpenAIapi_agent.py
/api/agent/debug-promptGETПоследний промпт advise() (поток A)api_agent.py
/api/ai-brain/stateGETПолный brain state JSONapi_agent.py
/api/ai-brain/prioritiesGET4 списка приоритетовapi_agent.py
/api/adviceGETAI совет для вкладки (поток C)api_misc.py
🗺 Карта JS-модулей
Редактировать только static/js/XX_*.js. После правки: python build_dashboard.py. Коммитить оба файла.
МодульМетрикиФункции (grep)
04_kpi.jsИЛ расчётный (badge)renderKpiPanel(), renderKpiBadges()
11_logistics.jsИРП расчётный, КПС/ИРР matrixrenderLogisticsTab(), renderIrrTable()
13_finance_tab.jsИЛ тариф, ИРП тариф, все финансы_wbfRenderSummary(), renderFinanceTab()
20_geography.jsИРР/КПС сводка, KPI-панельrenderLogKpiPanel(), initIrrTable()
28_unit_econ.jsИЛ/ИРП badge (source fallback)renderUnitEconTab()
24_fin_params.jsИЛ/ИРП ручной ввод (тарифный)renderFinParams()
03_formulas.jsL1/L2/L3, margin, PPU — JS-формулыcomputeGrossProfit(), computeMarginPct()
22_ai_chat.jsAI чатagentChatSend(), initAiChat()
17_ai_advice.jsAI советы на вкладкахrequestAIAdvice(), _buildAICtx()
⚠️ JS-модули 02, 11, 12, 13, 14, 23 — большие (120+ KB). Редактировать только нужный фрагмент через atomic-replace. static/dashboard.js — generated bundle, НИКОГДА не редактировать напрямую.
⚠️ Legacy и deprecated
Поле / константаСтатусЗаменено наГде встречается
wb_warehouse_coeff⚠️ LegacyWB_WH_COEFF_NEUTRAL = 1.013_finance_tab.js, unit_econ
wb_localization_coeff⚠️ Legacywb_localization_index + il_calc_coeffFinance params, unit_econ
hardcoded ||1.33✅ ИсправленоWB_LOGI_INDEX_FALLBACK13_finance_tab.js (коммит 9d32fad)
hardcoded ||1.7✅ Исправлено_FIN_WB_WH_COEFF_LEGACY13_finance_tab.js (коммит 9d32fad)
ИЛ = non_hub/total✅ ИсправленоWeighted avg КТР per-SKUlocalization_engine.py (коммит c0ee554)
ИРП = global lookup✅ ИсправленоWeighted avg КРП per-SKUlocalization_engine.py (коммит c0ee554)
_chat_history (module-level)⚠️ Non-persistentai_chat_memory.json (Этап 3, не реализован)ai_pipeline.py
🐛 Открытые баги и техдолг
IDОписаниеСтатусФайлы
BUG-01PPU ≈ 38% завышен: логистика/хранение не per-unit⚠️ Known limitation — задокументировано в note к карточке PPUmetrics_layer.py
BUG-02Inline margin в agent_core.py:419-420, daily_metrics.py:~1199 — не через metrics_layer🔲 Открыт (техдолг группа A)agent_core.py, daily_metrics.py, prompts.py
BUG-03Inline JS margin в 09/10/11/17/02_*.js — не через computeGrossProfit()🔲 Открыт (техдолг группа B)static/js/09,10,11,17,02
BUG-04_chat_history не персистируется — теряется при рестарте🔲 Открыт (Этап 3)ai_pipeline.py
BUG-05wb_warehouse_coeff/wb_localization_coeff — legacy поля остались в коде⚠️ Задокументировано, не ломает13_finance_tab.js, unit_econ
Критерий готовности техдолга (Фаза 4): На одном артикуле с известной себестоимостью: Монитор (KPI) = SKU tab = Финансовый таб = Telegram = AI чат = Excel. Допуск ±1 ₽ или явно помечено «📐 аппроксимация».
🚨 Архитектура алертов
Полный справочник: функции, пороги, маршрутизация

Layer 0 — Общие алерты (alerts.py → build_alerts())

ФункцияЧто проверяетПорог warnПорог critУровни
_revenue_alertПадение выручки−15%−30%yellow / orange / red
_orders_alertПадение заказов−15%−30%yellow / orange / red
_returns_alertРост возвратов>15%yellow
_cancels_alertРост отмен≥30%≥50%yellow / red
_localization_alertНелокальные заказыLOC_CHANGE_WARN=10ppLOC_CHANGE_RED=20ppyellow / red
_anomaly_alertСтатистические аномалии (σ)yellow
_buyout_alertВыкуп покупателями<80%<65%orange / red
_margin_alertМаржа артикулаFIN_MARGIN_WARN=10%FIN_MARGIN_CRIT=5%yellow / red
_spp_alertСПП покупателя>50%blue
_activity_alertАктивность (нет заказов)0 заказовgray / red
_turnover_alertОборачиваемостьTURNOVER_WARN=30dTURNOVER_CRIT=60dyellow / orange
_stock_alertОстаток днейSTOCK_WARN=14dSTOCK_CRIT=7dyellow / red
_restock_alertРекомендации поставкиneeded>0blue
_transfer_alertПеремещение товараblue
_reviews_alertНовые плохие отзывыrating≤3orange
_growth_alertРост продаж3–5×≥5×green / orange
_demand_drop_alertПадение спроса (3д vs 7д)<50%yellow
_fin_anomaly_alertФинансовая аномалия неделиyellow
_new_report_alertНовый финотчёт WBgreen
_mass_buyout_alertМасс-выкупMASS_BUYOUT=2.5×MASS_BUYOUT_CRIT=6.0×orange / red

Layer A — Логистические алерты (alerts.py)

ФункцияЧто проверяетПорогУровни
_irp_calc_alertИРП вырос≥0.20 пп (КРП-порог)orange / red
_interregional_growth_alertНелокальных заказов +10 ппLOC_CHANGE_WARN=10ppyellow / orange
_irr_deficit_alertИРР < 0.65 на складе ≥3% запасаIRR_DEFICIT=0.65orange / red
_irr_excess_alertИРР > 1.80 на складе ≥3% запасаIRR_EXCESS=1.80yellow
_sku_dl_degradation_alertДЛ < 15% по артикулуSKU_DL_LOW=15.0%yellow

Маршрутизация в Telegram

УровеньВ Telegram?Цвет в UI
🔴 red✅ Да#DC2626
🟠 orange✅ Да#D97706
🟣 purple✅ Да#a78bfa
🟡 yellow❌ Только UI#CA8A04
🟢 green❌ Только UI#16A34A
🔵 blue❌ Только UI#2563EB
⚪ gray❌ Только UI#6B7280

Канонические пороги (source of truth — alerts.py)

МетрикаПорог warnПорог criticalCanonical source
ИРР дефицит< 0.65alerts.py IRR_DEFICIT_THRESHOLD
ИРР избыток> 1.80alerts.py IRR_EXCESS_THRESHOLD
Сток критично≤ 14 дней≤ 7 днейalerts.py STOCK_WARN_DAYS / STOCK_CRITICAL_DAYS
Отмены≥ 25%≥ 50%alerts.py + agent_core RULES (unified)
Оборачиваемость> 30 дней> 60 днейalerts.py TURNOVER_WARN_DAYS / TURNOVER_CRITICAL_DAYS
Выкуп покупателей< 80%< 65%alerts.py + agent_core RULES
Маржа артикула< 10%< 5%alerts.py FIN_MARGIN_WARN / FIN_MARGIN_CRITICAL
Падение спроса3д < 50% от 7д3д < 25% от 7дalerts.py DEMAND_DROP_RATIO / DEMAND_DROP_CRITICAL

ai_brain — правила классификации

УсловиеБакет приоритетов
alert.level == "red"critical
alert.level == "orange"important
alert.level == "yellow"attention
alert.level in (green, blue, purple)opportunities
Локализация нелокальных ≥35%important (Layer A)
Локализация нелокальных ≥25%attention (Layer A)
ИРП дельта >0.10 ппimportant (Layer A)
ИРР дефицит <0.65important (Layer A)
ИРР избыток >1.80attention (Layer A)
Restock boost ≥2.0×important (Layer A)
Выручка упала ≥30% (fallback)critical
Stockout (fallback)critical
Дней остатка <7 (fallback)critical
Маржа <0 (fallback)critical