John Deere, CLAAS, AGCO, Amazone, Deutz, Horsch - у каждого производителя свой формат прайса, у каждого B2B-покупателя своя маржа и условия доставки. Менеджер собирал предложение руками несколько часов и иногда ошибался в цифрах. Мы собрали систему, которая делает это сама.
Задача
Каталог живёт в разрозненных файлах Excel, которые приходят от четырнадцати производителей в несовместимых форматах. Артикулы пишутся по-разному - с дефисами, пробелами, в разном регистре, поэтому простой поиск по строке не работает. Цена для клиента складывается из закупки, индивидуальной маржи по бренду, скидки, типа доставки, валюты и налога.
Что реализовали
- Поиск по артикулам с автодополнением и нормализацией написания
- Каталог четырнадцати брендов с фильтрацией по производителю и характеристикам
- Индивидуальная маржа по каждому бренду в профиле B2B-клиента
- Расчёт цены с учётом скидок, типа доставки, валюты и налогов
- Массовая обработка: загрузка Excel с тысячами артикулов и прогресс-бар
- Генерация коммерческих предложений и отчётов в PDF и Excel
- Разбор PDF-документов десяти поставщиков (подтверждения заказов, счета, проформы, в том числе сканы) с выгрузкой в Excel
- Корзина, которая переживает закрытие вкладки, и статусы заказов
- Запрос на B2B-аккаунт с ручной верификацией администратором
- Переключение интерфейса между английским и немецким
Как устроено внутри
- Django 5 с модульной архитектурой: логика вынесена в отдельные сервисы
- Отдельный парсер под формат прайса каждого бренда
- Redis-кэш цен и оптимизированные SQL-запросы под большой каталог
- Асинхронная обработка тяжёлых файлов, чтобы интерфейс не замирал
- Nginx и Gunicorn, SSL Let's Encrypt, скрипты автодеплоя
Что изменилось
- Коммерческое предложение собирается за минуты вместо часов ручной работы
- Маржа и скидки считаются системой - человеческие ошибки в цифрах ушли
- Прайс нового бренда подключается парсером, а не переносом строк руками
- Архитектура рассчитана на рост каталога и числа клиентов
