Все кейсы
React/TypeScript
Python
Django
PostgreSQL

Разработка системы централизованного управления промо-акциями

Разработали систему для автоматизации промо-планирования в ритейле на базе ibp-платформы
Контекст
Практически любой крупный ритейл, который продает товары со скидками, сталкивается с задачей по централизованному планированию промо-акций. Распространенные ИТ-продукты, которыми ранее пользовались ритейлеры для решения данной задачи, ушли с российского рынка, что вызвало потребность в импортозамещении.  

Возникла потребность в разработке централизованной системы для управления промо-акциями, объединяющей процессы создания, анализа эффективности, утверждения и распределения скидок по SKU для последующей загрузки информации о скидках в смежные ИТ-системы. Вся информация о промо-акциях должна собираться на одной странице и облегчать контроль и управление процессами.

Интеграция с внутренними ИТ-системами должна обеспечить автоматизацию загрузки данных, а функциональность формирования и выгрузки отчетов в заданных форматах помочь в оперативном управлении промо-акциями. 

Потребители продукта — крупный ритейл, который продает товары со скидками, то есть весь ритейл. Наиболее целевая аудитория — крупные компании РФ с большой долей розничных продаж.

Задача

Разработать решение для автоматизации промо-планировании на базе IBP-платформы

Решение должно было обеспечить следующий бизнес-процесс:
Создание промо

Пользователь с определенной ролью создает промо-акцию или загружает шаблон с этим промо. Также есть вариант массового создания промо напрямую из системы заказчика.
Проверка объемов.

Промо отправляется на проверку объемов (сколько тонн продукта участвует в промо, какие от этого ожидания по продажам) специализированной команде.
Последовательное утверждение промо отдельными департаментами

Отдельные департаменты последовательно утверждают, что корректировки объемов были внесены правильно, ничего другого не поменялось и что все финансовые показатели рассчитаны корректно.
Редактирование состава SKU

Отдельные пользователи в промо редактируют список конкретных SKU (список продуктов) во время согласования плана продаж с конкретными сетями магазинов.
Установка скидки

Промо передается отдельной команде для установки скидки в смежных ИТ-системах по нужному продукту/клиенту/периоду времени.
Закрытие промо

После завершения периода отгрузок (когда продукты ушли со склада) по промо получается факт из истории продаж, считаются конечные показатели и промо закрывается.

Технологии и архитектура

Технологический стек соответветствует стеку базовой платформы.
Backend: Python, фреймворк Django (+Django Rest Framework)
Redis, SQLAlchemy, аналитические библиотеки Pandas и Polars, а также дополнительные сервисы, необходимые для работы с этими библиотеками — EXSX Reader, Fastparquet
Для Rabbit MQ используется библиотека aio-pika (помогает асинхронно доставать из очереди приходящие сообщения)
Frontend: React, TypeScript, TanStack, CanvasJS для графиков, i18n, CENTRIFUGO для работы с веб-сокетами
Архитектурно: веб-сервер работает на Django, одна база данных на PostgreSQL, вторая на ClickHouse, третья — Rabbit MQ, четвертая — Celery и Flower (для мониторинга Celery)
Технологии и архитектура

Frontend

Архитектура фронтенда построена по принципу микрофронтендов, обеспечивая гибкость, масштабируемость и удобство интеграции. Пакеты легко подключаются как npm-зависимости или микрофронтенды, поддерживая hot reload в разработке и автоматическое управление версиями в CI/CD. Разделение на уровни и модули исключает циклические зависимости и упрощает повторное использование кода. Сборка на базе Vite и Rollup ускоряет разработку и выкатку в продакшен, а продуманный деплой гарантирует стабильность и безопасность обновлений. Такая архитектура позволяет масштабировать разработки и адаптировать независимым командам компоненты core-платформы под любые задачи без потери качества.
Технологии и архитектура

DevOps, CI/CD

Мы всегда выстраиваем процесс так, чтобы разработка шла быстро, была безопасной, а доставка была максимально стабильной. Приводим ряд практик из данного кейса.
Автоматизация на уровне MR
Pre-build: Как только создаётся MR, автоматически собирается артефакт со всеми зависимостями. Это нужно, чтобы в дальнейших задачах не тратить время на их повторную установку.

Pre-merge: Код проверяется статическими анализаторами (как линтерами, так и сканерами уязвимостей). Если что-то не так — задачу стопит, пока разработчик не исправит, чтобы поддерживать качество на уровне.
Сборка и публикация
Когда MR попадает в ветку, автоматически собирается Docker-образ и отправляется на соответствующий стенд. Если меняются пакеты/модули: собирается новый дистрибутив, версия пакета обновляется и публикуется в GitLab npm registry, все зависимости автоматически обновляются в связанных модулях, проектах и dev-стенде без лишних сборок.
Гибкая работа с переменными окружения
Для production-сборок переменные подтягиваются из GitLab и превращаются в JSON-файл, который легко использовать в приложении.
В итоге весь процесс — это про скорость, стабильность и автоматизацию доставки. Всё настроено так, чтобы разработчики сфокусировались на коде, а не на рутине. И так на всех наших проектах. 

Своим опытом делимся в статьях на Хабре — рекомендуем к прочтению.


Параметризованные сборки в GitLab
Параметризованные сборки в GitLab
Понятие параметризованных сборок очень популярно в Jenkins — это функционал, который позволяет запускать сборки с пользовательскими параметрами. Это значительно расширяет возможности автоматизации и делает процессы более гибкими. Одна из ключевых задач, для которой этот функционал может применяться, — тестирование функционала в разных окружениях. Можно запускать тесты на окружении (например, dev, staging, test), просто задавая нужные параметры. Разбираем эту тему в нашей статье.
Внедряем DevSecOps в процесс разработки. Часть 5. Этап Deploy-time Checks, обзор инструментов
Внедряем DevSecOps в процесс разработки. Часть 5. Этап Deploy-time Checks, обзор инструментов
В предыдущей части рассказали о тестировании функционала на уязвимость до его попадания на продакшн. По итогам предыдущих статей мы можем проверить код на безопасность, собрать безопасные билды, проверить функционал на наличие уязвимостей. Теперь можно разворачивать приложение на продакшне.

Функционал

Для реализации необходимого бизнес-процесса в системе был разработан ряд дашбордов. 
Дашборд создания промо
ДБ нужен для инициации работы с промо-акциями компании. Он позволяет создавать промо (вручную, посредством шаблона, из пред рассчитанных данных): задаются базовые параметры (название, скидки, даты), определяются участвующие продукты и клиенты, рассчитывается прогнозируемая прибыль и убытки (P&L). 
Дашборд обзора активных задач
Таблица для просмотра своих задач специалистом. Просмотр промо, по которым текущий пользователь должен произвести какое-то действие. 
Дашборд поиска промо
Расширенный поиск созданных промо.
Дашборд управления статусами промо
Массовые операции с промо — перевод на шаги или утверждения-согласования. Внесение изменений в параметры, продукты или клиентов, получение одобрения от различных ролей.
Дашборд загрузки источников данных
Загрузка файлов с мастер-данным, обновлениями информации по промо. Пакетное создание промо.
Дашборд формирования отчетов
Выгрузка отчетов, как автоматически так и вручную. Сравнение фактических результатов с прогнозом, расчет итоговых показателей P&L, закрытие промо-акции, формирование различных отчетов и передача данных в смежные системы для дальнейшего анализа.
Дашборд мониторинга целостности данных
Инструмент для проверки консистентности данных, прочих показателей здоровья загруженных в систему данных и их связей.

Этапы работы

Рассказываем про общую последовательность всех работ: от анализа до ввода в эксплуатацию.
Этапы работы

Анализ требований и подготовка архитектуры

Сбор и анализ требований
— Проведение интервью с заинтересованными сторонами
— Анализ существующих бизнес-процессов
— Определение функциональных и нефункциональных требований
Определение архитектуры системы
Выбор технологического стека
— Проектирование архитектуры базы данных
— Разработка высокоуровневой архитектуры приложения
Планирование проекта
— Определение этапов и сроков разработки
— Распределение ресурсов
— Оценка рисков и разработка стратегий их минимизации
Создание прототипов пользовательского интерфейса
— Разработка прототипов пользовательского интерфейса для всех ролей пользователей
— Проработка основных дашбордов для визуализации ключевых показателей
— Согласование прототипов с заинтересованными сторонами
Этапы работы

Разработка базовой инфраструктуры

Настройка среды разработки и тестирования
Создание базы данных для хранения информации о промо-акциях
Разработка базовой структуры приложения
Этапы работы

Реализация основных модулей

Модуль создания и планирования промо-акций
Модуль корректировки и утверждения
Модуль подготовки к запуску (включая интеграцию с SAP)
Модуль мониторинга активных промо-акций
Модуль закрытия и анализа результатов
Этапы работы

Разработка системы отчетности

Создание модуля генерации различных отчетов
Реализация механизма расчета и кэширования
Этапы работы

Интеграция с внешними системами

Разработка интерфейсов для обмена данными со смежными ИТ-системами
Реализация механизмов импорта/экспорта данных через SFTP
Интеграция с SAP
Этапы работы

Развертывание и запуск

Подготовка серверной инфраструктуры
Развертывание системы в продуктивной среде
Миграция исторических данных
Этапы работы

Поддержка и дальнейшее развитие

Организация службы поддержки пользователей
Мониторинг производительности системы
Планирование и реализация дальнейших улучшений на основе обратной связи

Процесс разработки и взаимодействия

Со стороны Spectr на проекте работала большая кросс-функциональная команда разработки: руководитель проекта, бэкенд-разработчики, фронтенд-разработчики, системные аналитики, QA, архитектор, DevOps. 

На протяжении всего времени планирования и реализации проекта велась тесная коммуникация между командой разработки и всеми заинтересованными сторонами на стороне клиента.

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

Регулярные встречи

Еженедельные статус-митинги для обсуждения прогресса и возникающих проблем
Ежемесячные обзорные встречи с ключевыми стейкхолдерами
Демонстрации промежуточных результатов после завершения каждого этапа разработки
Процесс разработки и взаимодействия

Инструменты коммуникации

Использование систем управления проектами (Jira) для отслеживания задач и проблем
Создание общего канала в корпоративном мессенджере для быстрого обмена информацией
Регулярные email-рассылки с обновлениями по проекту
Процесс разработки и взаимодействия

Документация и отчетность

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

Обратная связь

Проведение регулярных опросов заинтересованных сторон для оценки удовлетворенности ходом проекта
Организация воркшопов для сбора идей и предложений по улучшению продукта
Создание механизма для оперативного реагирования на запросы и concerns стейкхолдеров
Процесс разработки и взаимодействия

Кросс-функциональное взаимодействие

Вовлечение представителей различных отделов (маркетинг, продажи, IT, СБ) в процесс разработки
Организация совместных сессий по решению проблем и принятию решений
Обеспечение прозрачности процесса разработки для всех участников проекта

Команда

Во время реализации со стороны Spectr работала выделенная команда разработки, которая максимально тесно интегрировалась и вовлекалась во все процессы на стороне клиента. 
Project manager
Архитектор
DevOps
Системный аналитик
Бэкенд-разработчик — 3 человека
Фронтенд-разработчик — 2 человека
QA-специалист

Результаты

Благодаря четко выстроенной работе и коммуникации, проект по созданию платформы для управления жизненным циклом промо был успешно реализован и введен в эксплуатацию, удовлетворяя потребности всех заинтересованных сторон и обеспечивая эффективное управление промо-акциями компанией заказчиком.

Ведется дальнейшее расширение и развитие функционала.

Связаться с нами

Хотите обсудить свой проект? Воспользуйтесь формой обратной связи и мы начнем общение.