Кастомный бэк-офис для селлера одежды на Wildberries. Компания: оборот $4 млн в месяц, каталог 600+ SKU, 12 кабинетов продавца и около 30 пользователей. Одна система закрыла аналитику, ответы покупателям, создание карточек и учёт себестоимости.
Быстрорастущий селлер с 12 кабинетами на маркетплейсе. У каждого кабинета свой личный кабинет, свои API-ключи и своя таблица. Цифры, по которым управляли бизнесом, собирались руками.
Каждый кабинет продавца живёт отдельно. Заказы, реклама, остатки и финансы лежали в 12 местах. Целиком компанию не видел никто.
Менеджеры переносили цифры из 5-6 экранов личного кабинета в ежедневную таблицу. Реалистично 1-2 минуты на SKU. При тысяче с лишним активных SKU в одном кабинете полное ручное покрытие физически невозможно: хвост каталога выпадал из контроля.
Маркетплейс закрывает финотчёт неделями, с задержкой около 3 дней. Реальная маржа по SKU за день была неизвестна. Отчёты собирались часами и устаревали к моменту готовности.
На старте: 210 неотвеченных отзывов и 1023 вопроса покупателей по кабинетам. Новая карточка товара требовала 15-30 минут ручной работы в 3 разных системах.
Ночные Celery-задачи забирают 6 доменов Wildberries API в PostgreSQL. Расчётный слой превращает сырые строки в маржу, алерты и себестоимость. Люди работают через React SPA, через привычные Google Sheets или просто получают алерты. Два конвейера автоматизации возвращают работу обратно на маркетплейс.
Инженерные детали, на которых это живёт: rate-limit на каждый домен маркетплейса, идемпотентные upsert-ы везде, advisory-локи вокруг пересчётов, watchdog для зависших синков и аудит-лог каждой мутации в денежных модулях.
Сердце системы: ежедневная панель по каждому SKU. На каждый артикул и каждую дату система считает около 37 показателей (внутренняя карта T1..T37): полную воронку продаж, экономику рекламы, подтверждённую и прогнозную маржу, остатки и транзит. Всё пересчитывается ночью. Руками вводятся только себестоимость и транзит из Китая.
Просмотры, корзина, заказы, выкупы. Конверсия на каждом шаге. Отмены и возвраты по датам. Процент выкупа считается тремя способами, каждый под свою задачу.
Расход, ДРР, CTR, CPC, CPM, CPO по SKU за день. Данные забираются окнами по 31 дню, с retry-очередью на 429 от маркетплейса.
Маржа факт из закрытого финотчёта. Маржа план из 8-компонентной модели, которая учитывает невыкупы. Эффективная комиссия вместо номинальной. ROI по единой формуле везде.
Остатки по складам и размерам, товар в пути к покупателю и обратно, ручной транзит из Китая. Алерты zero-stock и low-stock вместо визуального контроля тысячи строк.
| Метрика | На какой вопрос отвечает | Как считается |
|---|---|---|
| % выкупа (когорта) | Сколько заказов доходит до оплаченной продажи? | Каждый заказ в окне 30 дней (лаг 7 дней) прослеживается до исхода. чистые / (чистые + возвраты + отмены), минимум 30 завершённых заказов. |
| ДРР | Окупается ли реклама? | расход на рекламу / сумма заказов x 100, считается так же, как в кабинете маркетплейса. |
| Эффективная комиссия | Сколько маркетплейс забирает на самом деле? | (розница - к перечислению - эквайринг) / розничная цена x 100 по строкам продаж финотчёта. Номинальная ставка категории показывается только справочно. |
| Маржа факт | Реальная прибыль за день | нетто-выручка - комиссия - логистика - хранение - штрафы - эквайринг - себестоимость - реклама. Считается только для дней, подтверждённых финотчётом, иначе прочерк. |
| Маржа план | Ожидаемая прибыль до закрытия отчёта | 8 компонент. ожидаемые продажи = заказы x % выкупа. Невыкупленный заказ всё равно оплачивает два плеча логистики. Ежедневно замораживается снапшотом. |
| ROI | Отдача на вложенные деньги | маржа / (себестоимость + реклама) x 100. Одна формула в списке, карточке и таблице. |
Собрать одну дневную строку по SKU руками: 1-2 минуты по 5-6 экранам личного кабинета. Только в одном кабинете больше 1100 активных SKU. Это 19-38 человеко-часов в день на один кабинет, поэтому селлеры обычно ведут руками только топ-100 SKU и теряют хвост. Консервативная оценка заменённой рутины: 250-350 человеко-часов в месяц, примерно 2-4 фултайм-аналитика. Система делает это каждую ночь, и хвост каталога остаётся под контролем.
На маркетплейсе селлера кормят скорость и тон ответов. Бот: конвейер из трёх LLM-моделей, который готовит каждый ответ в голосе бренда. Кнопку "отправить" всегда нажимает человек.
Самая дешёвая модель раскладывает каждое обращение на 14 интентов: возврат брака, подбор размера, "когда появится", уход за вещью, доставка, пересорт и другие. Одинаковые тексты попадают в 30-дневный кэш и не стоят ничего. Отзывы без текста вообще не доходят до LLM: срабатывает шаблон.
Один ответ, а не десять вариантов. Через tool-loop модель подтягивает карточку товара, если вопрос про ткань или уход. Жёсткие правила бизнеса выше всего: никаких обещаний скидок, никаких штампов, всегда подпись бренда. У каждого ответа есть оценка уверенности.
Каждая правка менеджера сохраняется как gold-эталон. Из 161 эталона Opus дистиллировал стайлгайд бренда: 24 пронумерованных правила плюс 12 шаблонов по интентам. Запреты бизнеса стоят выше выученных паттернов, это явное проектное решение.
Очередь на старте: 210 неотвеченных отзывов и 1023 вопроса по кабинетам. Одна офлайн-сессия генерации подготовила и залила 60 ответов на отзывы плюс 661 ответ на вопросы для самого загруженного кабинета. По оценке клиента, с ответов на отзывы снята работа примерно 6 сотрудников.
Промпт-инжиниринг с измеримым результатом: входной промпт ужат с 6-8K токенов (80 сырых примеров) до 1,5-2K токенов (дистиллированный стайлгайд плюс 7 эталонов по интенту). Плюс кэши на каждом шаге и short-circuit для пустых отзывов.
Отдел закупок планирует новинки задачами на канбан-досках Bitrix24. Конвейер превращает завершённую задачу закупки в полноценную карточку товара: распарсенные атрибуты, баркоды, категория, бренд, менеджер, фото. То, что занимало 15-30 минут ручной работы в 3 системах, стало контролируемым конвейером.
Триггер: канбан-стадия "товар закуплен". Конвейер забирает заголовок, описание, комментарии и вложения задачи. Regex-парсер на ~480 строк извлекает цену, себестоимость, состав ткани, цвет, полную размерную сетку с количествами и габариты упаковки. Категория и код ТН ВЭД берутся из Google-листа "Номенклатура", который ведут менеджеры. Бренд и ответственный назначаются round-robin-правилами. Дальше: баркоды на каждый размер, заливка карточки, фото с кропом 900 x 1200 и обратная запись в таблицу и исходную задачу.
Парсер: детерминированный regex, а не модель. Одинаковый вход даёт одинаковый выход, всё покрывается регресс-тестами по реальным инцидентам, ноль стоимости инференса и никаких выдуманных цен. Модуль построен по детальным письменным ТЗ: контракт данных, формулы, крайние случаи и критерии приёмки. Правило модуля: жёсткие алерты вместо тихих дефолтов.
На первом полном прогоне по 142 задачам конвейер создал ноль карточек. Вместо этого он выдал точную классификацию 141 блокера данных: 42 задачи без габаритов, 21 без цены, 38 без строк категории. Менеджеры получили точные списки доработок. Через несколько дней тот же конвейер выдавал до 62 карточек в день. Идемпотентность на 4 уровнях: повторный прогон никогда не создаёт дублей. Инвариант жёсткий: одна задача равна полному циклу по всем 3 системам, с 3 независимыми проверками.
Заказы фабрикам, производство, международная и внутренняя логистика, приёмки на фулфилмент, долги поставщикам и настоящая FIFO-себестоимость единицы. Модуль прошёл путь с нуля до прода примерно за 3 недели и стал финансовым каркасом системы.
Каждая приёмка создаёт неизменяемую партию себестоимости: товар в юанях, международная логистика в долларах, плечи по РФ в рублях, приёмка фулфилмента. Валюты пересчитываются по курсу ЦБ на дату оплаты. Каждая проданная единица списывает самую старую партию, возвраты восстанавливаются в новейший слой, всё идемпотентно на уровне строки продажи.
Леджер долгов по плательщикам с лимитами, плановыми оплатами и еженедельными снапшотами. Дашборд отвечает на вопрос собственника напрямую: кому мы должны, сколько денег нужно на следующей неделе и где сейчас физически товар, от фабрики до полки склада.
13 детерминированных SQL-правил алертов следят за цепочкой: заказ завис в планировании, производство не началось вовремя, сумма оплат не сходится с суммой заказа. Уровни серьёзности, авторезолв и аудит-лог каждой мутации. 29 Excel-отчётов для финансовой команды.
Менеджеры любили свою таблицу и не хотели новый инструмент. Таблица осталась. Теперь её заполняет бэкенд.
Каждое утро мост заливает в привычный лист 200+ значений на SKU: цены, комиссии, конверсии воронки, остатки, проценты выкупа, вчерашнюю рекламу. Менеджеры вводят руками только план действий и заметки, и эти правки возвращаются в базу. Дневная история 40 метрик x 14 дней уходит ответом 20-30 МБ с gzip и рендерится в знакомые вкладки архива.
Безопасность строгая: сервис-токены хранятся хэшем, плюс whitelist таблиц. Лист привязан ровно к одному кабинету и физически не может прочитать данные другого.
Ноль переобучения, ноль борьбы за внедрение, ноль периода параллельных инструментов. Команда сохранила привычки, а данные под этими привычками стали базой вместо копипаста. Это самый дешёвый change management: двигать систему к людям, а не людей к системе.
Один аналитик-разработчик, пошаговые проверяемые изменения. Это факт методики, а не заголовок: заголовок в том, что на результате работает живой бизнес.
| Область | Было | Стало |
|---|---|---|
| Ежедневная аналитика | Ручной перенос из 5-6 экранов личного кабинета. Под контролем только топ SKU. По оценке, 250-350 человеко-часов рутины в месяц. | Ночной пересчёт ~37 показателей по 1100+ SKU на кабинет. Под контролем весь каталог, проблемы поднимают алерты. |
| Видимость маржи | Какая-то маржа, раз в неделю, после закрытия финотчёта. | Маржа факт и план по SKU за каждый день, с явной пометкой, какие дни подтверждены. |
| Отзывы и вопросы | Очередь из 210 отзывов и 1023 вопросов. Каждый ответ менеджеры писали руками. | AI-черновики в голосе бренда, утверждает человек. По оценке клиента, снята работа ~6 сотрудников. |
| Новые карточки товара | 15-30 минут ручной работы на карточку в 3 системах. | Контролируемый конвейер, до 62 карточек в день на пике, с типизированными алертами на плохих данных. |
| Юнит-экономика | Примерная себестоимость в таблицах, без учёта полной цены доставки до склада. | FIFO landed cost по 3256 партиям и 608 тыс. единиц, долги и cash-need на одном дашборде. |
| Инструменты | 12 отдельных личных кабинетов плюс несвязанные таблицы. | Одна ERP: ~298 эндпоинтов, 110 таблиц, веб-приложение и привычные Sheets на одной базе данных. |
Бизнес-аналитик и разработчик систем. Начинаю с бизнес-процесса и контракта данных, потом автоматизирую. Эта система проанализирована, описана и выведена в прод одним человеком для живого бизнеса с оборотом $4 млн в месяц.