Резюме

Проект Романа Ларионовского

SellerAnalytics

Сервис аналитики и автоматизации для продавцов Ozon

Синхронизация с Ozon Seller API, автоматические финансовые отчёты с налогами, боты и мини-приложение в MAX и Telegram.

Регистрация не нужна: демо открывается на магазине с вымышленными данными.
Автор
Роман Ларионовский, продакт и единственный разработчик
Период
С 2025 года, разработка продолжается
Статус
В продакшене: им каждый день пользуется команда магазина на Ozon, экономит около 5 часов в неделю

Код сейчас

Загружаю данные…
модулей NestJS
00
REST-эндпоинтов
000
фоновых задач по расписанию
00
сущностей БД
00
юнит-тестов
00
коммитов
000

Что сделано

Интеграция с Ozon

Заказы FBS и FBO и возвраты подтягиваются каждые 5 минут, только изменения. Незавершённые заказы перепроверяются дважды в час, каталог обновляется раз в час. Если Ozon упирается в лимит запросов, задача встаёт в очередь и повторяется. API-ключи хранятся зашифрованными, AES-256-GCM.

Финансовые отчёты

Начисления, ЕАЭС, компенсации и декомпенсации, взаиморасчёты с налогом по УСН 6%, УСН 15% и АУСН. Отчёты формируются сами через 12 часов после конца периода. XLSX собирается на сервере, поэтому сайт и боты отдают один и тот же файл.

Боты и мини-приложение

Общая архитектура транспортов для MAX и Telegram. Чат привязывается по одноразовому коду, у каждого типа отчёта своё расписание доставки, журнал отправок исключает дубли. Мини-приложение открывается по HMAC-подписи данных запуска. В нём сводка, остатки, отправка отчётов и этикеток в чат и личные уведомления.

Остатки и закупка

Ночные снимки остатков FBO и изменение за неделю. Заказ поставщику считается по скорости продаж с разбиением на FBO и свой склад и выгружается в формате поставщика.

Этикетки

PDF со штрихкодом и знаком ЕАС, сертификаты соответствия и массовое заполнение через Excel.

Вопросы покупателей

Вопрос с Ozon приходит в выбранные чаты. Ответ обычным reply публикуется на Ozon. Все видят, кто ответил, а повторный ответ блокируется.

Демо-режим

Новый пользователь бота за одно-два действия видит продукт на «живом» демо-магазине. Данные генерируются детерминированно и обновляются каждый час, а запись в демо закрыта на сервере.

Эпики

Прогресс в story points: сделано из запланированного. Данные из Jira.

Таймлайн

Даты начала и срока эпиков из Jira. Однодневные эпики показаны точкой.

Загрузка…

Наведите на строку, чтобы увидеть детали.

Текущий спринт

Загрузка…

Продуктовая работа

На каждый эпик есть PRD: контекст, цели и не-цели, персоны, требования FR и NFR с приоритетами MoSCoW, метрики и риски. Истории написаны в формате «Как… я хочу… чтобы…» с критериями Given / When / Then. Бэклог, спринты и таймлайн ведутся в Jira, PRD лежат в Confluence. При отмене эпика автоматизация Jira закрывает дочерние задачи с решением «Не будет сделано».

PRD: Демо-режим

Проблема

Человек, который нашёл бота сам, получал ответ «откройте настройки на сайте», а мини-приложение показывало ошибку. Демо-данные были статичными, за январь 2025.

Цели

  • Понять продукт за одно-два действия
  • Мини-приложение без привязки открывает демо
  • Демо всегда «живое»
  • Демо нельзя испортить

Требования, выборка

  • FR-1Приветствие на /start
  • FR-3Команда /demo присылает пример отчёта в XLSX
  • FR-6Вход под демо-пользователем при верной подписи
  • FR-14Ежечасное обновление со стабильной историей
  • NFR-1Запись закрыта на сервере (DemoGuard)
  • NFR-2Не чаще одного файла в 10 секунд на чат
  • NFR-3Подпись HMAC-SHA256, подделка получает ответ 401

Метрики

  • Не меньше 40% новых чатов открывают демо
  • Не меньше 20% запрашивают пример отчёта
  • 0 дней «пустого демо»

User stories

8 историй, 28 SP

Запись решения: почему отменили эпик «Возвраты FBS»

Что выяснилось

У Ozon Seller API нет методов одобрения и отклонения заявок на возврат FBS, они есть только для rFBS. Текст и фото заявки через API недоступны.

Вывод

Главная ценность эпика, то есть разбор заявок прямо из чата, нереализуема. Уведомления без действий дают мало.

Решение

Эпик отменён с решением «Не будет сделано». К нему стоит вернуться, если Ozon добавит API.

Как обновляется эта страница

Источники

Статус задач, story points, даты и спринт берутся из Jira, счётчики — из ветки master репозитория. Описания задач на страницу не попадают.

Когда

  • Каждые 30 секунд сервер сверяет ветку master и время последнего изменения задачи в Jira
  • Если что-то изменилось, данные собираются заново за пару секунд
  • Раз в 10 минут — полная пересборка на всякий случай

Сборка

Скрипт на Node.js собирает data.json, страница читает его и перерисовывает живые блоки раз в минуту.

Стек и архитектура

Ozon Seller API Backend, NestJSсинхронизация, отчёты,планировщик PostgreSQL Сайт, Next.js ТранспортыMAX / Telegram Чаты имини-приложение каждые 5 минут TypeORM REST API отчёты и файлы Ozon Seller API Backend, NestJSсинхронизация, отчёты,планировщик PostgreSQL Сайт,Next.js ТранспортыMAX / Telegram Чаты имини-приложение каждые 5 минут TypeORM REST API отчёты
Бэкенд забирает данные из Ozon, хранит их в PostgreSQL и отдаёт сайту и транспортам мессенджеров.
Автор проектаРоман ЛарионовскийПродуктовый менеджер / аналитик e-commerce. Опыт, навыки и контакты в резюме.