Бригадир
Создаёт проект, распределяет материалы по зонам и этапам, принимает замены и подтверждает комплектацию.
Ограничение
Нужна готовность объекта и позиции, требующие решения, а не весь ассортимент.
B2B-портал оптового поставщика, где единица работы — закупочный проект объекта, а не корзина каталога. Портал замыкает контур от чернового списка материалов до подтверждённой комплектации и выдачи со склада.
Содержание
Клиент — оптовый поставщик сантехники в Беларуси. Он обслуживает частных монтажников, бригады и небольшие ремонтные организации: комплектует объекты не разовыми позициями витрины, а связанными узлами — водоснабжением, канализацией, отоплением, инсталляцией, котельной или санузлом. Это не дилерский заказ у дистрибьютора сантехники: там салон пополняет матрицу в кабинете оптовика. Здесь единица работы — закупочный проект конкретного объекта.
Монтажник мыслит не артикулами каталога. Ему нужно собрать обвязку бойлера, заменить участок канализации, подготовить материалы для двух санузлов или закрыть очередной этап ремонта квартиры. В одной заявке встречаются трубы, фитинги, запорная арматура, крепёж, расходные материалы и оборудование разных производителей. У каждой позиции есть ограничения: диаметр, тип резьбы, материал, рабочая среда, способ соединения, монтажная длина и совместимость с соседними элементами.
Портал не заменяет учётную систему поставщика. Он замыкает процесс от чернового списка до подтверждённой комплектации и выдачи. Пять складов клиента — это точки отпуска номенклатуры, а не выбор площадки под технологический процесс: такой контур закрывает подбор склада и производства.
| Показатель | Значение |
|---|---|
| География | Беларусь |
| Склады отпуска | 5 |
| Активные позиции каталога | ~18 000 |
| Профессиональные клиенты | 240 |
| Заказы отдела продаж | ~900 в месяц |
| Контур пилота | 12 бригад, два менеджера, один склад |
| Категории пилота | Водоснабжение, канализация, запорная арматура |
| Основной процесс | От списка материалов до резерва и выдачи этапа |
Каталог не равен комплектации: бригаде нужна рабочая среда закупочного проекта, а не ускоренная витрина.
Создаёт проект, распределяет материалы по зонам и этапам, принимает замены и подтверждает комплектацию.
Ограничение
Нужна готовность объекта и позиции, требующие решения, а не весь ассортимент.
Добавляет недостающие материалы с объекта, уточняет параметры и фиксирует фактическую потребность.
Ограничение
Работает с телефона, без сложного администрирования.
Разбирает исключения: неоднозначные позиции, конфликты, отсутствие товара и замены.
Ограничение
Главный экран — очередь комплектаций, а не общий dashboard.
Собирает подтверждённые этапы, фиксирует недостачу и готовит выдачу.
Ограничение
Не меняет техническое решение без возврата задачи менеджеру.
До портала заявка приходила фотографией рукописного списка, голосовым сообщением или таблицей. Менеджер вручную распознавал позиции, задавал уточняющие вопросы, искал товары в учётной системе и предлагал замены. Если части комплектации не было на одном складе, заказ разбивался на несколько выдач. Когда состав менялся, новая версия оставалась в переписке, а бригадир не всегда понимал, какие позиции подтверждены, какие заменены и что ещё докупить.
У процесса не было единой точки правды. Каталог знал товары, учётная система — остатки и заказы, менеджер — договорённости, а бригада — реальную потребность объекта. Ни один инструмент не связывал эти четыре слоя.
Обычный интернет-магазин предполагает, что покупатель уже знает, что ему нужно. Для профессиональной закупки сантехники этого недостаточно: потребность описывается языком монтажа; ошибка проявляется на объекте, а не в карточке товара; наличие меняется во время согласования; заказ поставляется этапами. Одна общая корзина это не отражает — подробнее о такой границе в интервью Почему бизнесу иногда нужен Laravel, а не WordPress. Когда процесс держится на Excel и мессенджерах — в материале интервью: micro-SaaS вместо Excel и мессенджеров.
Центральная сущность продукта — не корзина и не заявка в чате, а закупочный проект объекта.
Закупочный проект объединяет объект, спецификацию, совместимость, наличие, замены, этапы и следующее действие в одной рабочей области.
В проекте фиксируются объект и плановая дата работ, ответственный бригадир и участники, зоны или монтажные узлы, спецификация с количеством и единицами, технические связи, наличие и выбранный склад, предложенные и подтверждённые замены, этапы поставки, комментарии, файлы, журнал изменений и текущее состояние.
Вместо статусов «черновик» и «готово» проект получает состояния реальной работы: «Собирается», «Нужны уточнения», «Проверяется поставщиком», «Есть замены», «Готов к подтверждению», «Зарезервирован», «Комплектуется», «Частично выдан», «Закрыт». Статус вычисляется по незавершённым действиям: несопоставленная позиция блокирует проверку, неподтверждённая замена не даёт статус готовности, частичная выдача отражается отдельно.
Менеджер перестаёт сопровождать каждую строку вручную. Он подключается там, где система не может принять безопасное решение.
Бригадир создаёт проект, формирует зоны, добавляет товары вручную, из шаблона или импортом таблицы. Портал объединяет дубли, проверяет единицы и показывает незаполненные характеристики.
Результат: структурированная спецификация, которую можно передать на проверку поставщику.
Монтажник открывает мобильную версию по приглашению, выбирает зону, находит позицию или сканирует штрихкод, указывает количество и комментарий. Изменение попадает в черновик ревизии.
Результат: потребность фиксируется без звонка и не смешивается с подтверждённой версией.
Система анализирует пары компонентов и обязательные элементы узла. Формальные конфликты — разные диаметры, тип соединения, отсутствие переходника — попадают в список.
Результат: обнаруживаемые несоответствия устраняются до подтверждения.
Менеджер выбирает аналог и заполняет структурированное пояснение. Портал показывает исходную и предложенную позиции рядом, подсвечивает отличия и затронутые элементы.
Результат: в проекте остаётся проверенное решение с автором и временем, а не сообщение «поставим аналог».
Позиции распределяются между «Черновым монтажом», «Установкой оборудования» и «Чистовой сборкой». Портал предупреждает, если зависимая позиция назначена позже нужного элемента.
Результат: склад получает самостоятельные комплекты, объект не перегружается материалами впрок.
Новая ревизия показывает добавленные, удалённые и изменённые строки и влияние на уже собранные этапы. Подтверждённая версия остаётся в истории.
Результат: участники согласуют изменение, не теряя исходную договорённость.
Смета собственника квартиры — другой продукт: управление ремонтом квартиры собирает план, подрядчиков и бюджет владельца. Здесь рабочий центр — кабинет поставщика для бригады.
Главный экран бригадира строится вокруг проекта, а не вокруг витрины. В шапке — объект, готовность комплектации, ближайший этап и одно основное действие: исправить замечания, отправить на проверку, подтвердить замены или передать на резервирование.
Левая колонка — зоны и этапы. Центр — спецификация по монтажным узлам: товар, параметры, количество, наличие, состояние проверки и этап. Справа — панель замечаний: несовместимость, отсутствующая характеристика, неподтверждённая замена или изменение после фиксации.
Режим «Требует решения» скрывает корректные строки и оставляет только блокирующие вопросы. Каталог открывается боковой панелью внутри проекта: пользователь не теряет контекст зоны и видит комплектующие, связанные с текущим узлом или закрывающие замечание.
Мобильный интерфейс не повторяет весь портал. Монтажнику доступны назначенные объекты, зоны, подтверждённая спецификация и действие «Добавить потребность». Поиск поддерживает профессиональные синонимы и недавние позиции объекта; можно отсканировать штрихкод или выбрать товар с соседнего узла.
При нестабильной связи незавершённая форма сохраняется локально. Полноценный автономный каталог в первой версии не загружается: это усложнило бы синхронизацию остатков. Пользователь фиксирует текст, количество, фотографию и комментарий, а сопоставление с номенклатурой завершает после восстановления связи.
Менеджер не просматривает все активные проекты. Очередь формируется автоматически и содержит только ситуации, где нужно профессиональное решение. Карточки сортируются по близости этапа поставки и типу блокировки.
Внутри задачи менеджер видит не изолированный товар, а его место в узле: соседние компоненты, параметры, комментарий монтажника и этап.
После передачи на проверку состав фиксируется. Любое изменение создаёт ревизию. Система повторно проверяет только затронутые связи. Удалить историю подтверждённой ревизии нельзя.
Наличие — информационный снимок, резервирование — подтверждённое действие учётной системы. Портал не обещает товар только потому, что тот отображался доступным во время подбора. Перед финальным переходом выполняется повторная проверка. Тот же разрыв между витриной и полкой закрывает заказ корма с самовывозом. Это резерв номенклатуры, а не койко-место: жизненный цикл жилья сотрудников закрывает портал размещения сотрудников. Подтверждённый состав в резерв передаёт и заявка на подбор комплекта автозапчастей.
Замены делятся на полное совпадение контролируемых параметров, совместимую замену с отличиями и замену, требующую пересборки узла. Даже полное совпадение не применяется автоматически: решение принимает бригадир или назначенный участник.
Правила проверяют формализуемые условия — диаметры, соединения, обязательные элементы. Они не определяют, соответствует ли весь узел проектной документации. Интерфейс отделяет автоматическую проверку от профессиональной ответственности. Схожая проверка связанного состава в интерьерном шаблоне ведётся в проект комплектации санузла готовым комплектом. Спорную связку не красят в автоматический зелёный статус и в магазине инструментов для груминга: там «нужна проверка» уходит консультанту, а не считается совместимостью.
Количество хранится в рабочей единице и в единице отпуска. Если товар выдаётся упаковками, портал показывает округление до кратности до подтверждения. Бригадир управляет составом и приглашениями. Монтажник предлагает изменения, но не подтверждает итоговую версию без отдельного права. Менеджер предлагает номенклатуру и замены, но не меняет потребность клиента. Склад работает только с подтверждёнными этапами.
Если склад не может собрать позицию, она не заменяется незаметно. Этап получает состояние «Есть расхождение», менеджеру создаётся задача, бригадиру уходит уведомление. Остальная часть этапа может продолжить комплектацию, если позиция не помечена как блокирующая.
Первая версия замыкает один процесс: создать закупочный проект, собрать спецификацию, проверить формальные зависимости, согласовать исключения, подтвердить наличие, передать этап на комплектацию и зафиксировать выдачу. Пилот ограничен тремя связанными категориями: водоснабжение, канализация и базовая запорная арматура.
ИИ не является ключевой частью первой версии. На следующем этапе он может предлагать сопоставление произвольного текста с каталогом или извлекать позиции из фотографии списка, но каждое предложение подтверждается человеком. Пока структура каталога и словарь синонимов не приведены в порядок, модель лишь скроет проблему качества данных.
Ценность продукта создаётся после поиска товара. Бригадир возвращается в проект и видит готовность, замечания и следующее действие. Цвет и подпись статуса относятся к строке спецификации, а не к рекомендации «купить этот артикул». Рабочая область вокруг версии заказа, а не витрины, есть и у производства кухонь на заказ: там допуск версии до цеха, здесь — подтверждённая комплектация до склада. Ту же рабочую область для шкафов и гардеробных держит заказы корпусной мебели до производства.
Выбран профиль единого операционного B2B-приложения: насыщенный интерфейс со спецификациями, фильтрами, сравнением версий и боковыми панелями без отдельного frontend-сервиса. Обмен с учётом строится через интеграцию Laravel с 1С: каталог, остатки и резерв подтверждаются учётной системой, Laravel ведёт жизненный цикл проекта.
Client
SPA-подобная работа со спецификацией без отдельного публичного API и второго контура аутентификации. Vue закрывает формы, таблицы и зависимые фильтры; Inertia сохраняет единый репозиторий и серверную маршрутизацию Laravel.
API
Модули: пользователи и организации, каталог, закупочные проекты, совместимость, замены, резервирование, комплектация, уведомления, аудит. Laravel хранит бизнес-правила, права, интеграционный обмен и жизненный цикл проекта.
Data
Реляционная модель для проектов, ревизий, позиций и зависимостей. JSONB — только для неодинаковых технических атрибутов категорий. Полнотекст и trigram закрывают поиск по названиям и синонимам без отдельного поискового движка.
Queue / cache
Фоновые задания: обмен каталогом и остатками, пакетная проверка незавершённых проектов, импорт, рассылка. Кэш Redis хранит короткоживущий складской снимок; резервирование всегда подтверждается учётом.
Storage
Изображения товаров, вложения, импортируемые таблицы и сформированные выгрузки. Доступ к внутренним файлам выдаётся с учётом роли и проекта.
Infrastructure
Веб-приложение и workers могут работать на одном сервере; базу допустимо вынести отдельно. Pest покрывает правила совместимости, ревизий, прав и статусов. Playwright проверяет создание проекта, импорт, замену, резервирование и складское расхождение.
Ключевые решения: неизменяемые ревизии после подтверждения; декларативные правила совместимости; разделение остатка и резерва; идемпотентный импорт каталога; поиск средствами PostgreSQL до роста фасетов. Next.js, WebSocket-контур, Kubernetes и отдельный AI-сервис в MVP не входят.
Срок реализации MVP и пилота — 16 недель. Внедрение строится вокруг одного филиала и ограниченного набора категорий.
Путь реальных заявок, типовые монтажные узлы, структура номенклатуры, категории пилота. Фиксируются обязательные атрибуты, синонимы и правила, которыми уже пользуются менеджеры.
Рабочая область проекта, каталог внутри спецификации, сравнение замены и очередь исключений. Прототипы проверяются на комплектациях разной сложности: небольшой ремонт, два санузла и котельная.
Роли, каталог, поиск, проекты, ревизии, базовые правила совместимости, замены и этапы. Параллельно — импорт исходных данных и административный интерфейс атрибутов.
Обмен с учётной системой, резервирование, повторная отправка, расхождения и возврат статусов. Склад получает упрощённый экран комплектации.
12 бригад, два менеджера, один склад. Первую неделю портал и прежний канал ведутся параллельно только для контроля расхождений. Затем заявки пилотных категорий переводятся в портал. Обучение строится вокруг четырёх операций: создать проект, устранить замечания, подтвердить замену и получить этап.
Цифры — результаты пилота: сопоставимые комплектации за четыре недели до запуска и четыре недели после стабилизации процесса. Из измерения исключались проекты, сознательно проведённые по старому каналу из-за недоступной категории или длительного интеграционного сбоя.
| Метрика | Состояние до | Стало в пилоте | Как измеряется |
|---|---|---|---|
| Медианное время активной работы до «Готов к резервированию» | 35 минут | 12 минут | От создания проекта до готовности, отдельно для узлов без исключений и с заменами |
| Ручные переходы между каналами в одном проекте | 5 | 1 | Обращения к мессенджеру, звонку и отдельной таблице; срочная связь может остаться, решение фиксируется в проекте |
| Спецификации с пропущенной обязательной комплектующей | 22% | 8% | Складские корректировки и дополнения до выдачи в пилотных категориях |
| Доля замен с явным подтверждением | фрагментирована по переписке | 100% | Применённые замены с автором, сравнением параметров и подтверждением бригадира |
| Время обнаружения складского расхождения | до следующего контакта в чате | до 15 минут в рабочее время | От фиксации недостачи складом до задачи менеджеру и уведомления бригадира |
| Полнота обязательных атрибутов в категориях пилота | неравномерная | 95% | Доля карточек с заполненными обязательными техническими атрибутами перед расширением пилота |
| Риск | Вероятность | Влияние | Снижение |
|---|---|---|---|
| В каталоге отсутствуют технические атрибуты | Высокая | Проверки совместимости дают мало пользы | Пилот из трёх категорий, обязательность атрибутов, очередь качества данных |
| Остатки в учёте обновляются с задержкой | Средняя | Пользователь воспринимает наличие как обещание | Разделить наличие и резерв, показывать время снимка, повторно проверять перед подтверждением |
| Бригады продолжают отправлять списки в мессенджер | Высокая | История снова становится фрагментированной | Быстрый мобильный ввод, импорт таблиц, портал как единственное место подтверждения версии |
| Слишком много предупреждений совместимости | Средняя | Пользователи перестают реагировать | Начать с блокирующих правил, измерять долю отклонённых предупреждений |
| Менеджеры предлагают замены вне портала | Средняя | Теряется авторство и контекст решения | Автоматическая очередь исключений, запрет резерва без подтверждения замены |
| Интеграция временно недоступна | Средняя | Проект зависает между подтверждением и складом | Идемпотентная очередь, повторные попытки, видимый статус ожидания, ручной регламент при длительном сбое |
| Правила воспринимаются как инженерная гарантия | Низкая | Пользователь полагается на неполную автоматическую проверку | Явная область проверки, подтверждение человека, формулировки без «окончательного проектного решения» |
До
После
Главное изменение состоит не в переносе каталога в новый интерфейс. Портал превращает закупку из цепочки сообщений в управляемый процесс комплектации: потребность структурируется, исключения становятся видимыми до выезда на объект, а подтверждённая версия проходит до склада без потери контекста.
Сжатая цитата из обратной связи после пилотного внедрения. Название компании и имя не указаны из‑за NDA.
«Один объект раньше мог жить в трёх местах: список у монтажника, таблица у менеджера и переписка с заменами. И всё это немного отличалось. Сейчас хотя бы работаем с одним составом.»
Нужен похожий контур — обсудим. Услуги на Laravel · Каталог решений.