Покупатель
Выбирает товары в каталоге, указывает телефон и время самовывоза, отвечает на предложение замены по ссылке.
Результат
Видит номер заказа и статус «Проверяем наличие», не перечисляет состав заново по телефону.
Единица работы — заказ на самовывоз, а не сообщение с сайта и не корзина. Покупатель оформляет набор, сотрудник проверяет полку, замена уходит по ссылке, в сборку попадает только подтверждённый состав.
Содержание
Покупатель собирает привычный набор: корм, наполнитель и лакомства. В каталоге всё выглядит доступным, но после отправки заказа сотрудник обнаруживает, что нужного объёма корма уже нет на полке. Он предлагает другую упаковку по телефону, покупатель просит оставить только наполнитель, а сборщик продолжает работать по первоначальному списку.
Для зоомагазина в Минске собрали контур примерно на 800 товарных позиций. Заказы приходят с сайта, по телефону и в сообщениях. В торговой точке работают продавцы, один из которых в смене отвечает за сборку онлайн-заказов. Цель продукта — связать оформление самовывоза с проверкой наличия, согласованием изменений и выдачей актуальной версии заказа.
Система не заменяет кассу, складской учёт и работу продавца в торговом зале. Если покупатель просит подобрать корм с учётом состояния здоровья животного, интерфейс не выдаёт автоматическую рекомендацию: выбор остаётся за покупателем и профильным специалистом.
Сроки годности партий закрывает учёт сроков годности в зоотоварах. Здесь другой контур той же ниши: от оформления до выдачи подтверждённого состава. Соседний зооретейл без самовывоза с полки — магазин инструментов для груминга: там связка «машинка — нож — насадка», здесь заказ корма и наполнителя до выдачи в точке.
| Показатель | Значение |
|---|---|
| География | Минск |
| Активные позиции | ~800 |
| Каналы заказа | сайт, телефон, сообщения |
| Роли первой версии | покупатель, сотрудник смены, администратор каталога |
| Основной процесс | каталог → заказ на самовывоз → проверка полки → замена → сборка → выдача |
| Контур пилота | одна торговая точка, онлайн-самовывоз через новую очередь |
Сообщение с сайта не равно подтверждённому составу: нужна одна версия заказа от оформления до выдачи.
Выбирает товары в каталоге, указывает телефон и время самовывоза, отвечает на предложение замены по ссылке.
Результат
Видит номер заказа и статус «Проверяем наличие», не перечисляет состав заново по телефону.
Разбирает очередь: проверить новый заказ, дождаться ответа, закончить сборку или выдать готовый.
Результат
Работает с тем же списком, что видит покупатель; в сборку берёт только подтверждённый состав.
Приводит к единым названиям варианты, веса и категории, загружает ассортимент и остатки из учётной системы.
Результат
Каталог остаётся ориентиром, окончательное наличие подтверждается проверкой на полке.
Запрос с сайта попадает сотруднику отдельным сообщением. Он сверяет позиции с учётной системой, затем проверяет полку: данные об остатках могут отставать от покупок в торговом зале. Если товара нет, сотрудник звонит покупателю и записывает замену в переписке или на бумаге. Другой сотрудник при сборке может не увидеть это уточнение.
Корневая причина — у заказа нет единой подтверждённой версии. Список товаров, ответ покупателя, результат проверки наличия и решение сборщика существуют в разных местах. Обновить витрину чаще полезно, но это не решит вопрос, какую именно комплектацию согласовали после оформления.
Центральная сущность системы — не сообщение с сайта и не корзина, а заказ на самовывоз.
Заказ хранит первоначальный выбор покупателя, результат проверки каждой позиции, предложенные изменения, подтверждённый состав, ответственного сотрудника и историю действий.
Покупатель выбирает товары в публичном каталоге и отправляет заказ. Система сразу показывает, что доступность требует подтверждения магазином: даже свежая выгрузка остатков не учитывает товар, который в эту минуту берут с полки в торговом зале. Сотрудник получает заказ в рабочей очереди, проверяет позиции и физически откладывает доступные товары. Если чего-то нет, он предлагает замену или удаление позиции. Покупатель подтверждает изменение через ссылку в сообщении; только после этого обновлённый состав становится заданием на сборку.
Так продукт охватывает один законченный контур: от выбора товаров до выдачи собранного заказа. Подтверждённый состав как предмет работы, а не набор карточек, держат и готовые комплекты сантехники: там проект санузла до монтажной ведомости, здесь заказ корма до выдачи в точке.
Каталог отвечает на практический вопрос «подходит ли мне этот товар?». В категории кормов покупатель фильтрует позиции по животному, типу корма, возрастной группе и размеру упаковки. В карточке видит вариант товара, его характеристики и пометку «Наличие подтвердим после оформления». Корзина сохраняет выбранные варианты, а при оформлении покупатель указывает телефон и удобное время самовывоза.
После отправки появляется номер заказа и статус «Проверяем наличие». Покупателю не приходится заново перечислять товары при звонке: сотрудник работает с тем же списком. Карточка заказа ведёт процесс, а не витрина — тот же принцип держит заказ цветов сотрудникам: там поздравление до вручения, здесь самовывоз до выдачи.
Для сотрудника главным экраном становится очередь заказов. На ней сразу видно, что нужно сделать сейчас: проверить новый заказ, дождаться ответа на замену, закончить сборку или выдать готовый заказ. Фильтры по статусу и времени самовывоза помогают не пропустить ближайшую выдачу.
В карточке сотрудник отмечает фактическое наличие каждой позиции. Если товар найден и отложен, он получает статус «Зарезервировано». Если отсутствует, сотрудник выбирает «Предложить замену» или «Удалить позицию». Система сохраняет первоначальный и предложенный состав раздельно.
| Состояние очереди | Что делает сотрудник |
|---|---|
| Проверяем наличие | Сверяет позиции с полкой и откладывает доступное |
| Ожидает ответа покупателя | Не собирает спорную позицию, пока нет решения по ссылке |
| Готов к сборке | Собирает только подтверждённый состав, а не исходную корзину |
| Готов к выдаче | Отмечает выдачу покупателю |
| Исключение | Связывается с покупателем и фиксирует результат разговора в карточке |
В заказе № 1048 три позиции: корм, наполнитель и лакомства. Наполнитель и лакомства отложены, корм нужного объёма отсутствует. Очередь показывает «Ожидает ответа покупателя» и время самовывоза. После согласия покупателя сборщик видит уже подтверждённый состав, а не исходную корзину.
Если сотрудник предлагает другой вариант корма, покупателю приходит сообщение со ссылкой на короткую страницу решения. Там указано, какой товар был выбран, какой предложен взамен и что изменилось в характеристиках упаковки. Действия однозначны: «Подтвердить замену» или «Убрать товар из заказа». Произвольная замена без ответа покупателя запрещена.
Ссылка действует ограниченное время и открывает только решение по конкретной позиции. Если покупатель не ответил до момента, когда заказ нужно собирать, система возвращает его сотруднику как исключение. Сходство названий не считается основанием для автоматической замены — явное согласие на состав держат и закупки сантехники для монтажных бригад.
Заказ нельзя отметить готовым, пока каждая позиция не отложена, подтверждённо заменена или удалена по решению покупателя.
Предложение другого веса или вида товара всегда требует явного ответа. Сходство названий не запускает автоматическую замену.
Новый заказ попадает в очередь проверки. Статус «Готов к выдаче» появляется только после отметки сборщика.
Все изменения состава записываются с временем и участником, чтобы следующий сотрудник видел актуальное решение.
Данные об остатках служат ориентиром для каталога. Окончательное наличие подтверждается проверкой и откладыванием товара в магазине.
Сотрудник может показать характеристики товаров, но подбор корма по состоянию здоровья животного остаётся за покупателем и специалистом.
Первая версия замыкает процесс от заявки до полученного заказа. Этого достаточно, чтобы проверить главную гипотезу: может ли магазин поддерживать один актуальный состав заказа без потери решений между сотрудниками.
Отложенное расширяет сервис, но не нужно для проверки гипотезы про один актуальный состав. ИИ не входит в ядро MVP: автоматическая рекомендация корма опаснее, чем ручное уточнение сотрудником.
Публичный каталог и внутренние рабочие экраны собираются на Blade, Livewire и Alpine.js: здесь нужны фильтры, формы, статусы и таблицы, но нет сложного совместного редактора или клиентского состояния, оправдывающего отдельное frontend-приложение. Категории остаются полноценными страницами для поиска; решение принимается в заказе.
Продукту достаточно одного Laravel-приложения в форме модульного монолита. MySQL хранит товары, варианты, заказы, решения по заменам и историю статусов. Планировщик забирает подготовленную выгрузку ассортимента и остатков из учётной системы. Небольшие фоновые задания через database queue отправляют сообщения и повторяют отправку при временном сбое.
Client
Категории и карточки отдаются сервером и открываются поисковым системам. Livewire обновляет корзину, очередь сотрудника и страницу решения по замене без отдельного SPA.
Laravel
Сотрудники входят по обычным сессиям Laravel. Ссылка для ответа покупателя ограничена конкретным заказом и сроком действия. Правила состава живут в одном приложении.
MySQL
Для каталога около 800 позиций отдельный поисковый движок не нужен. Поиск начинается с обычных индексов и фильтров.
Queue
Планировщик забирает выгрузку ассортимента и остатков. Сообщения о замене и готовности уходят фоновыми заданиями с очередью в MySQL. Redis и Horizon в первой версии не входят.
Infrastructure
Для первой версии достаточно одного сервера. Отдельный поисковый движок, Redis, WebSocket, S3 и мобильное приложение не добавляются.
Если ассортимент и нагрузка вырастут, поиск и обработку заданий можно усилить после измерения реальных задержек. Каталог первой версии невелик, статусы меняются не ежесекундно, а покупательский и рабочий сценарии доступны в браузере.
Внедрение начинается с подготовки каталога: сотрудники приводят к единым названиям варианты, веса и категории, затем загружают ассортимент и остатки из учётной системы. На первой неделе работы заказы на самовывоз проходят через новую очередь в одной точке. Ответственный за смену ежедневно сверяет спорные случаи с фактически выданными заказами. После исправления карточек товаров и правил замены магазин переносит в систему весь поток онлайн-самовывоза.
Единые названия вариантов, весов и категорий. Ассортимент и остатки загружаются из учётной системы.
Онлайн-самовывоз идёт через новую очередь. Ответственный за смену сверяет спорные случаи с фактически выданными заказами.
После исправления карточек и правил замены магазин переносит в систему весь онлайн-самовывоз.
Пилот сравнивает заказы до и после внедрения. Исходные значения фиксируются на пилоте; проценты «стало» заранее не задаём. Целевой ориентир — чтобы каждый заказ, переданный в сборку, имел подтверждённый состав и видимое следующее действие.
| Метрика | Состояние до | Целевое состояние | Как измеряется |
|---|---|---|---|
| Время от заявки до подтверждённого состава | размазано по звонку, чату и бумаге | сократить за счёт одной карточки заказа и ссылки на решение | От оформления самовывоза до версии, по которой можно собирать |
| Доля замен с явным ответом покупателя | замена живёт в переписке или на бумаге | замена зафиксирована решением в карточке | Заказы, где предложенная замена получила «подтвердить» или «убрать» |
| Уточнения состава у коллег при сборке | сборщик спрашивает, какой список актуальный | сборка идёт по подтверждённому составу без устного пересказа | Сколько раз сборщику приходится уточнять список у коллег |
В первой итерации важнее увидеть сбои маршрута: где остатки врут, где замену согласовали по телефону вне карточки и где покупатель не открыл сообщение вовремя.
| Риск | Вероятность | Влияние | Снижение |
|---|---|---|---|
| Неточные исходные остатки | Высокая | Высокое | Сайт не обещает наличие до проверки сотрудником; остатки остаются ориентиром каталога |
| Обход карточки через телефон | Средняя | Высокое | Короткий сценарий фиксации телефонного ответа; сборка только по подтверждённому составу |
| Покупатель не открыл сообщение вовремя | Средняя | Среднее | Заказ остаётся в очереди исключений и требует ручного контакта; молчание не считается согласием |
До
После
Изменение для магазина состоит в том, что заявка перестаёт быть сообщением, которое нужно пересказывать следующему сотруднику. Она становится заказом с проверенным составом, историей решений и понятным состоянием — от оформления до выдачи.
Сжатая цитата из обратной связи после пилотного внедрения. Название компании и имя не указаны из‑за NDA.
«Раньше бывало: человек оформил заказ, приехал, а одного корма уже нет. Вроде мелочь, но клиенту всё равно неприятно. Сейчас сначала собираем заказ и уже потом сообщаем, что можно забирать.»
Нужен похожий контур — обсудим. Услуги на Laravel · Каталог решений.