Мультиарендная система: заказы с сайта, каталог с размерной матрицей, склад, производство до фактической себестоимости, доставка, переписка, финансы и права команды. Работает в проде.
Готовые CRM считают товар штуками. В одежде так не работает: продаётся не модель, а артикул — конкретный размер конкретного цвета. Из-за этого универсальная система ломается на первом же вопросе склада.
«Остаток 14 штук» ничего не значит, если все четырнадцать — размер XS.
Поэтому система писалась под предметную область, а не настраивалась поверх готовой. Она закрывает бренд целиком, не оставляя кусков в таблицах.
Двадцать четыре раздела. Не набор модулей, которые можно докупить, а одна система, в которой заказ, остаток, партия и себестоимость — одни и те же данные, а не четыре разные таблицы.
Система делалась под конкретный бренд, но с самого начала рассчитана на то, что брендов будет несколько. Обычно это решается колонкой «номер арендатора» в общих таблицах. Здесь — иначе.
Бренд заходит на свой адрес и видит только своё.
Не строка с идентификатором в общей таблице, а физически отдельная база данных.
Решение принято до первого клиента.
Переехать на такую схему потом, когда в общей базе уже лежат данные нескольких брендов, стоит неизмеримо дороже.
Три вещи, которых нет в универсальных системах и без которых бренд одежды ведут в Excel.
Заводится модель, указываются размеры и цвета — артикулы генерируются пачкой. Руками никто не перебирает сетку из шести размеров и четырёх цветов.
Остаток показан не числом, а сеткой: видно, каких размеров нет. Ходовой размер заканчивается раньше остальных, и увидеть это надо до того, как клиент спросил про наличие.
Мерки клиента сверяются с замерами из техпака той самой модели. Считается локально, без ИИ и без отправки чего-либо наружу: это арифметика, а не предсказание.
Размерная матрица — это и есть граница между CRM для бренда одежды и CRM вообще.
Приём заказов с сайта — то место, где системы обычно молчат. Здесь он сделан так, чтобы в спорной ситуации было что открыть.
Ключ принимается тремя способами — под любой конструктор форм, а не только под один.
Пишется всё, что пришло, в исходном виде. Когда клиент говорит «я оформил, а заказ не пришёл», видно, что он на самом деле прислал.
Состав приходит одной строкой и разбирается на артикул, название, цвет и размер. Что не опознано — не пропадает: уходит в комментарий к заказу, чтобы менеджер увидел.
Два внешних сервиса, доведённых до конца, а не до кнопки «создать заявку».
Тарифы, пункты выдачи, накладная, квитанция и отмена — из карточки заказа. Статусы обновляются сами: заказ переходит в «Доставлен» без участия менеджера. Если уведомление от службы не дошло, работает таймер досинхронизации.
Бот видит сообщения обеих сторон. Поэтому ответ менеджера с личного телефона тоже попадает в ленту, а статистика «кому не ответили» показывает правду, а не только то, что писали из системы.
Исходящие сообщения идут через очередь: если Telegram не принял с первого раза, отправка повторится, а не потеряется.
Выручку за вчера присылает утром сам. Права проверяются в момент запроса, а не один раз при привязке аккаунта — уволенный сотрудник перестаёт получать цифры сразу.
Самый длинный процесс в бренде и единственный, где ошибка в цифрах обнаруживается через месяц.
Модель и замеры
8 стадий
По фактической себестоимости
Восемь этапов от запуска до приёмки. На каждом видно, где партия стоит сейчас, а не «в производстве» общим словом.
На склад позиция приходит по той цене, в которую реально обошлась, — с учётом того, что изменилось по ходу партии. Отсюда же честная маржа в каталоге и P&L.
Подтверждает свой заказ по ссылке. Никакой регистрации, паролей и обучения — иначе поставщик просто продолжит отвечать в мессенджере, и система останется пустой.
В большинстве систем права — это то, что спрятано в интерфейсе. Спрятанное можно достать: через выгрузку, через прямую ссылку, через сохранение формы.
У сотрудника без доступа к себестоимости на её месте нули. И что бы он ни сохранил, настоящие цифры в базе не изменятся.
Запрет работает на стороне сервера, а не на стороне экрана. Это разница между «не показываем» и «нельзя».
Ни один из этих отчётов не требует внешнего сервиса. Данные бренда не уезжают наружу ради того, чтобы посчитать его же выручку.
Система работает в проде и обновляется на живых данных. Поэтому выкатка — это не «залить файлы», а процедура.
159 автотестов прогоняются до того, как что-то поедет на сервер.
Снимок базы снимается перед каждым обновлением.
Схема обновляется, затем health-check убеждается, что система отвечает.
Проверка не прошла — версия возвращается назад сама.
раздела в системе
автотестов на каждой выкатке
строк кода
Интерфейс снят с рабочей сборки. Цифры на экранах демонстрационные — реальные обороты бренда наружу не показываем.




От приёма заказов и склада до производства, прав команды и выкатки с откатом — так же, как сделано здесь.