Задача
Оптовая торговля сложнее обычного оформления заказа в интернет-магазине. Цена зависит от конкретного клиента и его условий и не показывается до квалификации, товар заказывается упаковками и минимальными партиями, часть ассортимента физически в пути, а окончательная стоимость перевозки становится известна только после того, как склад соберёт заказ. При этом заказ может прийти из Click2Buy, от торгового представителя, по электронной почте и по телефону, и все такие заказы должны попасть в один жизненный цикл.
Решение
Квалификация до цены. Регистрационная форма собирает бизнес-профиль: имя, компанию, телефоны, адрес, тип бизнеса, сайт или соцсети, источник знакомства и комментарий. Тип бизнеса отличает розничный магазин от дизайн-студии, мебельного салона, флориста, садового центра или ресторана. Дальше заявка проходит проверку: полнота и валидность данных, исключение дублей компании и контактов, определение обслуживаемой территории и ответственного представителя, назначение прайс-листа и доступных коллекций, при необходимости кредитная заявка. Только после этого заявка получает статус «одобрена», «отклонена» или «нужна дополнительная информация». Статус компании отделён от статуса пользователя: увольнение одного сотрудника магазина не закрывает учётную запись всей компании.
Остаток, который можно обещать. В Click2Buy видны четыре связанных числа: товар на складе, уже проданное и зарезервированное количество, позиции в закупке и доступный остаток. При добавлении в корзину проверяются минимальное количество и упаковочная кратность, доступность в выбранном канале, текущий резерв, ожидаемая поставка для предзаказа, снятие товара с продажи и конфликт с заказом, который параллельно собирает другой пользователь или торговый представитель. Корзина при этом не держит складской резерв бесконечно: окончательное распределение товара происходит по настроенному событию (подтверждение заказа, оплата или одобрение кредита), а при дефиците заказ делится на доступную часть и отложенную поставку с явным согласованием клиента.
Цена считается на сервере. После квалификации система определяет прайс-лист компании, доступные скидки и специальные цены, налоговый статус и правила минимального заказа. Ещё она учитывает допустимые способы оплаты, кредитные условия и возможность заказывать в долг, валюту и полномочия конкретного пользователя компании. Правило пересчитывается заново перед подтверждением заказа. POS не позволяет представителю просто вписать другую цену: допустимое отклонение, ручная скидка и замена цены требуют права или согласования и попадают в журнал аудита.
POS для выездных продаж. Бланк заказа рассчитан на быстрый набор большого числа строк: сканирование штрихкода, поиск по SKU, шаг количества и проверка упаковочной кратности, повторы из истории заказов, избранное и сохранённые списки клиента. Есть замена снятой или отсутствующей позиции, предзаказ и отложенная поставка, автосохранение черновика, предпросмотр коммерческого предложения и отдельная сводка для клиента без внутренних полей. На выставке связь нестабильна, поэтому черновики и очередь операций хранятся локально и синхронизируются при восстановлении сети, а повторная отправка использует ключ идемпотентности, чтобы один заказ не появился дважды. Если за время офлайна изменились остаток или цена, POS не подтверждает старые данные молча: он показывает расхождение, предлагает обновлённый вариант и требует повторного решения ответственного.
От предложения к заказу. Черновик и коммерческое предложение живут до согласования. Когда предложение становится заказом, цены и наличие проверяются заново, а исходная версия предложения сохраняется для аудита. Строка заказа хранит версию цены и описание товара, поэтому заказ остаётся исторически достоверным даже после обновления каталога.
Доставка и рекламации. Поддерживаются самовывоз со склада, посылочная отправка, паллетная перевозка для мебели и крупных заказов и собственный перевозчик клиента. Финальный фрахт часто неизвестен до упаковки: склад фиксирует фактические коробки, паллеты, вес и объём, после чего стоимость перевозки рассчитывается и согласуется внутри процесса заказа. Рекламация связывается с компанией и заказом, принимает фотографии и проходит состояния: подана, нужна информация, на рассмотрении, одобрена или отклонена, замена, кредит-нота или возврат денег, закрыта. Сотрудник видит связанные строки заказа, отгруженное количество, отправление и предыдущие обращения.
Кто чем владеет. Роли систем разделены явно. PIM или ERP отвечает за SKU, штрихкоды и атрибуты, ERP и бухгалтерия — за клиентские условия, счета и кредитное состояние, WMS — за остатки, комплектацию и отгрузку. Закупки отвечают за ожидаемые поступления, CRM — за лиды, компании, территории и активность продаж. Витрины не становятся независимой мастер-копией цены или остатка. Ошибка синхронизации попадает в очередь повторных попыток и операционный мониторинг, а не маскируется успешным статусом на клиентском экране.
Результат
Розничный магазин проходит весь путь сам: знакомится с ассортиментом, подаёт заявку, получает свои цены и условия и заказывает в Click2Buy. Торговый представитель собирает тот же заказ рядом с клиентом, с теми же ценами, остатками и правилами компании, а не в блокноте, который потом кто-то перенабирает. Заказы из всех каналов попадают в общий жизненный цикл и уходят на складскую обработку, оплату, отгрузку и бухгалтерский учёт без повторного ручного ввода. Отчётность узнаёт одного и того же клиента в заказах из Click2Buy, из POS и по телефону: продажи видны по категории, коллекции, территории, представителю и каналу одновременно.