Задача
Дилер не мог заказать рекламную продукцию самостоятельно. Он звонил в отдел по работе с дилерами, сотрудник вручную проверял, положен ли дилеру этот материал и в каком объёме, согласовывал исключения, выяснял наличие на складах, связывался с типографией и организовывал доставку. По описанию владельца, обработкой этого потока занималось почти 50 человек.
Отдельным ручным процессом была аренда возвратных баннеров и стендов под мероприятия: свободен ли комплект в нужные даты, кто согласует выдачу, кто везёт и кто помнит про дату возврата.
Дорого было не только ручное сопровождение. Если части тиража не хватало, допечатку сначала отправляли на центральный склад, там объединяли с остатками и только потом пересылали дилеру. Лишнее плечо в логистике удлиняло сроки и увеличивало стоимость каждой такой заявки.
Решение
Платформа собрана из трёх связанных контуров, а не трёх отдельных продуктов.
Портал и допуски. Дилер входит через корпоративный SSO, и система получает его идентификатор, организацию, категорию и группы доступа. Профиль решает, какие разделы и материалы он видит, что может заказать физически, что только скачать, куда разрешена доставка и какой объём проходит без отдельного решения. Интерфейс на Magento остаётся привычно магазинным — категории, поиск, карточка, избранное, корзина, история заказов, — но оплаты в нём нет: вместо неё права, лимиты, согласования и служебная стоимость исполнения. Приложения iOS/Android и iPad работают через тот же API и те же серверные правила, отдельной копии бизнес-логики в мобильном клиенте нет.
Лимит, который не блокирует. Превышение допуска не отбивает заявку, а переводит её в approval workflow. Матрица согласований смотрит на сочетание факторов: категорию и программу дилера, тип материала, запрошенное количество, регион, арендуемый или расходуемый тип позиции, стоимость печати и доставки, доступность и необходимость допечатки. Согласующий видит заказ, сработавшее правило, допустимый объём, превышение, предполагаемый источник исполнения и связанные затраты — и может подтвердить, согласовать уменьшенное количество, вернуть на изменение или отклонить с комментарием. После правки количества или состава правила пересчитываются заново: старое решение не переносится на новую версию заказа.
DAMS вместо двойного ввода. Symfony-приложение хранит рабочие файлы, макеты, PDF и производственные версии. Один файл лежит сразу в нескольких логических папках без физического дублирования, у актива есть версии и история замены. Карточка отделена от файла: к позиции привязываются варианты, главное изображение, галерея, downloadable PDF и производственный оригинал, а маркетолог решает, что уходит в портал, а что остаётся внутренним. Публикация версионна — повторная доставка события не создаёт вторую карточку, снятый материал исчезает из новых заказов, не ломая историю уже созданных, а ошибки синхронизации попадают в отдельную очередь с причиной и безопасным повторным запуском.
Оркестратор исполнения. Остатки нескольких WMS приводятся к единой модели: фактический, доступный и зарезервированный объём, склад и его география, время последнего обновления, габариты. Дальше каждая строка заказа закрывается не ближайшим складом, а разумным по полной стоимости и сроку способом. Сценарий владельца: дилер запросил 100 экземпляров, на складах суммарно есть 70, 30 нужно печатать — система может отгрузить 70 со склада и 30 напрямую от типографии. Но если рядом лежат только 20, а остальные 50 на другом конце страны и их перевозка дороже или дольше локальной допечатки, дальний остаток не трогают: недостающее сразу производит подходящий вендор. Если заказ нужен к дате мероприятия, дешёвый вариант, не укладывающийся в срок, вообще не считается допустимым. Задание уходит прямо в производственную очередь типографии — с приоритетом, утверждённым файлом из DAMS, тиражом, форматом, упаковкой и требуемой датой, — а готовая продукция едет дилеру, минуя центральный склад.
Аренда как отдельный жизненный цикл. Календарь возвратных конструкций учитывает подтверждённые брони, время доставки и обратной перевозки, технологический буфер между арендами, текущее местонахождение комплекта и статус возврата. Бронь занимает комплект на весь операционный интервал, а не только на даты мероприятия; просрочка или неполный возврат создают исключение и влияют на следующие брони.
Четыре мастера данных. Контент — из DAMS, дилеры и допуски — из SSO, остатки — из WMS, заказ с согласованиями и планом исполнения — внутри платформы. Каждая внешняя операция идемпотентна и хранит correlation id, исходный запрос, результат и число попыток: повторный webhook не должен создать второй тираж, вторую отгрузку или двойной резерв. При частичном сбое выполненное не откатывается физически — оркестратор запускает компенсирующее действие: освободить ошибочный резерв, выбрать другого вендора, отменить ещё не начатую печать. Правила лимитов и маршрутов версионны и имеют период действия, чтобы старый заказ объяснялся настройками, которые действовали в момент его создания.
Результат
Телефонный процесс заменён единым self-service-контуром. Дилер видит разрешённые ему материалы, запрашивает превышение лимита, следит за согласованием и видит прозрачный статус каждой части заказа: при разделённом исполнении у каждой посылки свой источник, этикетка и номер отслеживания, но заказ для дилера остаётся одним.
Сотрудники отдела по работе с дилерами перестали вручную вести каждый типовой запрос и занимаются исключениями: конфликтующим резервом, недоступным производственным файлом, невозможной датой доставки, отказом вендора, просроченным возвратом. Маркетологи управляют каталогом из DAMS, не перенося карточки руками.
Ключевым для сети стала автоматизация исполнения: система сама выбирает источник и маршрут, а прямая отгрузка убрала лишние перемещения через центральный склад. Операционная аналитика показывает, сколько заказов закрывается складом, допечаткой и смешанным режимом и какие ручные исключения пора превратить в правило.
В результате дилерская сеть получила прозрачный путь заказа от выбора материала до доставки или возврата конструкции, а операционная команда — единый механизм управления исключениями, производством, складами и логистикой.