Разберём ваш процесс продаж и предложим архитектуру
Каталог, заказы, оплаты и обмен с учётной системой — на схеме, до начала разработки.
Система электронной коммерции ведёт товар от карточки в каталоге до оплаченного и доставленного заказа. Ниже — модули системы, процессы, которые она закрывает, и связь с CRM, ERP, складом и кассами.
Программное обеспечение для электронной коммерции — система, которая хранит данные о товарах, ценах и остатках, принимает заказы через интернет, проводит оплату и передаёт заказ в исполнение: на склад, в доставку и в учёт.
От обычного сайта она отличается тем, что оперирует не страницами, а объектами учёта: товар, цена, остаток, заказ, платёж, отгрузка, возврат — записи со своим состоянием и историей. Тот же заказ может прийти из приложения, торгового автомата, от менеджера или с маркетплейса.
Это учётный контур поверх витрины, а не витрина сама по себе. Витрину можно заменить или добавить вторую, не переписывая учёт.
Шесть задач, ради которых внедряют e-commerce платформу. До внедрения каждая закрывается вручную — таблицами, перепиской и звонками.
Характеристики, фотографии, цена и остаток хранятся в одном месте и расходятся на все каналы продаж. Расхождений между сайтом, приложением и кассой нет.
Заказ создаётся, проверяется и оплачивается автоматически, круглосуточно. Человек нужен там, где требуется решение: нестандартная доставка, спорный возврат, опт.
Резервирование при оформлении не даёт продать один товар дважды. Отмены из-за отсутствия товара на складе сокращаются до единичных случаев.
Цены и скидки задаются правилами, а не ручной правкой карточек. Переоценка каталога из тысяч позиций занимает минуты и обратима.
Заказ, оплата и отгрузка попадают в бухгалтерию и складской учёт без повторного ввода. Сверка перестаёт быть отдельной работой.
Видно, что покупают, что ищут и не находят, где уходят из оформления, какие товары возвращают. Ассортимент планируется по данным.
Автоматизация — это не «робот вместо продавца», а перевод повторяющихся операций в правила, которые система применяет сама и записывает результат в историю.
Правило действует, пока не изменены его условия. Контроль остаётся: у каждого автоматического действия есть автор, время и предыдущее значение в журнале.
Что переходит в автоматический режим:
| Время | Что сделала система сама |
|---|---|
| 09:41 | Наценка 18%: пересчитано 1 240 позиций |
| 10:00 | Акция «−15% на чай» запущена по расписанию |
| 10:03 | Отказ по заказу № 14 190: +2 шт в остаток |
| 10:06 | Низкий остаток SKU 77-1043: оповещение закупке |
Каталог — структурированное хранилище товарных данных: что продаётся, чем товары отличаются друг от друга и по каким признакам их находят.
Из чего складывается работающий каталог:

Базовая единица каталога — товарная позиция с уникальным артикулом (SKU): неизменяемые данные, редактируемое описание и связанные объекты — изображения, документы, цены, остатки.
Массовые операции идут импортом и экспортом: файл, API или выгрузка из учётной системы. Импорт всегда проходит проверку: что будет создано, что изменено, что отклонено и почему.
Отклонено: дубль артикула — 9, пустой обязательный атрибут «Бренд» — 5, неизвестная категория — 3. До подтверждения в каталог не записана ни одна строка.
Цена — не поле в карточке товара, а результат вычисления по правилам на момент запроса. У одного товара одновременно существует несколько цен, и система выбирает применимую.
Поэтому цену не нужно править в тысячах карточек: достаточно изменить правило или базовый прайс-лист.
Слои ценообразования:
Каждое изменение цены пишется в историю: кто, когда, по какому правилу и какое было значение. На неё опираются отчёты о марже и разбор спорных заказов.
Правила разрешаются по приоритету, а не суммируются вслепую. Типовой порядок расчёта цены позиции:
Совместимость задаётся явно: какие скидки складываются, какие взаимоисключаемы, какова минимальная допустимая цена. Ограничение по минимальной цене не даёт нескольким корректным скидкам вместе увести позицию в убыток.
Акция — правило, которое система применяет к подходящим заказам сама. Промокод — то же правило, включаемое покупателем по кодовому слову. Оба описываются одинаково: условие, механика, срок, ограничения.
Что должно быть в заказе: товары, категория, бренд, минимальная сумма, способ доставки, сегмент клиента, канал продаж, время суток или день недели.
Процент, фиксированная сумма, новая цена, скидка на самый дешёвый товар в наборе, бесплатная доставка, подарок, баллы вместо скидки.
Даты начала и окончания, повторяющиеся окна (например, каждую пятницу), автоматический запуск и остановка без участия сотрудника.
Общий лимит применений, лимит на клиента, одноразовые персональные коды, запрет пересечения с другими акциями, минимальная цена позиции.
Одиночный код для рассылки или партия уникальных кодов под получателей. Партия выгружается файлом и отслеживается по каждому коду.
По каждой акции видно: сколько заказов, сумма скидки, выручка и маржа с учётом скидки, сколько кодов активировано и сколько осталось.
Корзина — черновик заказа: набор позиций, который ещё не создал обязательств ни у покупателя, ни у магазина. Товар в ней не зарезервирован, цена не зафиксирована, поэтому корзина пересчитывается при каждом открытии.
Пересчёт проверяет четыре вещи: товар продаётся, его хватает на складе, цена не изменилась, скидки действуют. Изменения покупатель видит до оплаты, а не после списания денег.
Что должна уметь корзина:
Итог к оформлению: 3 позиции, 11 640 сом. Оба расхождения показаны покупателю до оплаты, а не после списания денег.

Рядом с корзиной живут списки, которые к покупке не ведут: избранное, лист ожидания, сравнение по характеристикам, повтор прошлого заказа. Они отделены намеренно — иначе итог заказа перестаёт быть однозначным.
Большая часть корзин не превращается в заказ. Система хранит их с отметкой времени и умеет вернуть покупателя: напоминание по почте или в мессенджере, ссылка на восстановление состава, персональное предложение.
Напоминание отправляется один раз по событию и не превращается в рассылку — отписка обходится дороже возвращённого заказа.
Заказ — документ, фиксирующий состав покупки, цены на момент оформления, покупателя, условия доставки и оплаты. Дальше заказ живёт по конечному набору статусов, и каждый переход записывается.
Цены и скидки фиксируются при оформлении: изменение цены или окончание акции уже созданный заказ не затронет — иначе сумма к оплате разошлась бы с суммой в чеке.
Оформление по шагам:

Типовые статусы: новый → ожидает оплаты → оплачен → в сборке → передан в доставку → доставлен → завершён. Параллельно идут ветки отмены и возврата. Набор настраивается под процесс компании, но остаётся конечным и явным.
Редактирование заказа — отдельная операция с правами доступа: добавление позиции, замена товара, изменение количества, доплата или частичный возврат. Каждая правка сохраняет предыдущую версию состава.
Колл-центр — не отдельная программа, а рабочее место поверх той же очереди заказов. Оператор видит те же объекты, что и покупатель в личном кабинете, плюс операции, для клиента закрытые: правку состава, скидку в пределах лимита, снятие резерва, возврат средств.
Обращение — такая же запись со статусом и историей, как заказ: у него есть канал, тема, связанный заказ, ответственный и срок ответа. Поэтому разговор не теряется при передаче между сменами, а его результат виден в карточке клиента.
Путь обращения по шагам:
Исходящая работа устроена так же: подтверждение заказа перед сборкой, звонок по нестандартной доставке, возврат к брошенной корзине, обзвон по спорному возврату. Каждое касание пишется в ту же историю, что и входящие обращения.

Магазин не хранит данные карт и не проводит платёж сам: он передаёт покупателя платёжному провайдеру, получает результат операции и связывает его с заказом. Остальное — управление жизненным циклом платежа.

| Заказ | Операция | Сумма | Статус |
|---|---|---|---|
| 14 208 | Холдирование | 12 480 | Холд |
| 14 201 | Списание | 6 350 | Проведено |
| 14 177 | Возврат | 2 100 | Проведено |
| 14 206 | Снятие холда | 3 940 | Снят |
| 14 209 | Отказ банка 05 | 890 | Повтор |
Холд снят без возвратного платежа: товара не оказалось на складе. Повторная отправка запроса по ключу идемпотентности второй строки не создаёт.
Банковская карта, QR и система быстрых платежей, электронные кошельки, оплата при получении, безналичный счёт для юрлиц, рассрочка и кредит, оплата баллами.
Сначала холдирование: сумма блокируется на карте, но не списывается. Списание — после сборки заказа. Если товара не оказалось, блокировка снимается без возвратного платежа.
Результат операции приходит отдельным серверным запросом, а не по возврату покупателя на сайт. Закрытый браузер оплату не ломает: статус обновится по уведомлению.
Повторная отправка одного платёжного запроса не создаёт второй платёж. У каждой операции есть ключ, по которому провайдер и система распознают дубль.
После оплаты онлайн-касса формирует фискальный чек и отправляет его покупателю. При возврате формируется чек возврата на возвращённые позиции.
Ежедневное сопоставление операций в системе с реестром провайдера и выпиской банка. Расхождения попадают в отдельный список и разбираются вручную.
Остаток — количество товара, доступное к продаже прямо сейчас. Это не физическое количество на складе: часть зарезервирована под заказы, часть в пути, часть заблокирована как брак.
Доступно к продаже = физический остаток − резервы − блокировки + подтверждённые поставки в пути (если разрешён предзаказ).
При нескольких складах и точках остаток считается по каждому складу отдельно, а витрине показывается сумма по складам, с которых возможна доставка в выбранный регион.
Как устроен обмен:
Резерв всегда имеет срок жизни: неоплаченный вовремя заказ освобождает товар обратно в продажу — иначе брошенные корзины «съедают» весь доступный остаток.
| Склад | Факт | Резерв | Брак | Доступно |
|---|---|---|---|---|
| Центральный | 1 420 | 310 | 24 | 1 086 |
| Магазин «Восток» | 96 | 12 | — | 84 |
| Пункт выдачи № 3 | 40 | 8 | 2 | 30 |
| Поставка в пути | 600 | — | — | 600 |
| Доступно к продаже | 2 156 | 330 | 26 | 1 800 |
Факт — физический остаток, брак — заблокированное количество. Поставка в пути попадает в доступное только там, где разрешён предзаказ. Витрине показывается сумма по складам, с которых возможна доставка в выбранный регион.
Доставка описывается тремя объектами: способ доставки, зона и тариф. Возврат — обратный процесс с собственным документом, а не «отмена задним числом».
Курьер по адресу, пункт выдачи, постамат, самовывоз, транспортная компания для крупногабарита, цифровая доставка для электронных товаров.
Стоимость зависит от региона, веса, объёма и суммы заказа. Правила задают порог бесплатной доставки, надбавки за подъём и негабарит.
Даты и временные окна рассчитываются по графику склада, времени сборки и расписанию перевозчика. Занятые слоты закрываются автоматически.
Заказ передаётся перевозчику по API, система получает номер отправления и статусы движения и показывает их в личном кабинете.
Покупатель выбирает позиции и причину, система проверяет срок и допустимость возврата по типу товара и формирует документ с инструкцией.
После приёмки товар возвращается в остатки или списывается как брак, средства уходят на исходный способ оплаты, формируется чек возврата.
Частичный возврат — норма: из заказа возвращают одну позицию из пяти. Поэтому возврат считается по позициям, а скидка на весь заказ распределяется между ними пропорционально — иначе сумма возврата разойдётся с чеком.
Кладовщик — сотрудник, который физически перемещает товар: принимает поставку, кладёт её в ячейку, достаёт позиции под заказ и передаёт собранную коробку курьеру. Система знает об этих действиях не со слов сотрудника: каждая операция подтверждается сканированием штрихкода.
Разница принципиальная. Отметка «сделано» в списке подтверждает намерение, скан — факт: конкретный артикул, конкретная ячейка, конкретный сотрудник, время с точностью до секунды. Опечатка в артикуле всплывает на инвентаризации через месяц; неверный штрихкод приложение не принимает вовсе.
Что кладовщик делает за смену:

Каждый скан — проводка: остаток по ячейке меняется в момент операции, а не вечером при переносе бумаг. Витрина, касса и колл-центр читают те же остатки, поэтому «на сайте есть, на полке нет» перестаёт быть рабочей ситуацией.
Точность сборки — 99,4%: 7 блокировок скана за смену, все исправлены на месте. Данные берутся из тех же проводок, а не из отдельного табеля.
Курьер — последнее звено исполнения и единственный сотрудник, которого покупатель видит лично. Его приложение решает две задачи: провести по маршруту и зафиксировать вручение так, чтобы факт не пришлось потом подтверждать звонками.
Ключевая операция — скан QR-кода при вручении. Код напечатан на этикетке заказа или показан покупателем с экрана. Скан отвечает на вопрос, который иначе решается спором: этот ли заказ вручён, тому ли получателю и в какую минуту.
Логист работает на другом конце того же приложения: собирает маршруты по зонам, весу, объёму и интервалам, назначает курьеров, видит карту смены и разбирает срывы — опоздание, недозвон, отказ на пороге.
Смена курьера по шагам:

Тот же статус, что поставил курьер, покупатель видит в личном кабинете, а оператор — в карточке заказа. Отдельного «журнала курьера» нет: событие одно, и читают его все три стороны.
Кладовщик и курьер работают в разных приложениях и в разных местах, но ведут один и тот же заказ. Связывают их не отчёты в конце дня, а шесть общих правил.
Задание на отбор, упаковочный лист и маршрутный лист — не самостоятельные бумаги, а представления одного заказа. Позиция, добавленная оператором, доходит до кладовщика без переоформления.
Товар переходит от склада к курьеру и от курьера к покупателю сканированием. В любой момент видно, у кого заказ физически находится и с какой минуты.
Отметку ставит тот, кто выполнил действие, и там, где выполнил. Диспетчер не переносит статусы вручную, поэтому между фактом и записью нет разрыва в несколько часов.
Оба приложения пишут операции в локальную очередь и досылают их при появлении связи. У каждой операции есть ключ, поэтому повторная отправка не создаёт второй отбор или второе вручение.
Недостача при приёмке, пересорт, бой, частичный отказ на адресе — каждый случай становится отдельной записью с причиной и ответственным, а не молчаливой правкой остатка.
Позиций в час на отборе, точность сборки, доля доставок в интервал, время на адресе, доля частичных отказов. Нагрузка и премия считаются по этим данным, а не по ощущению.
Отсюда и требование к внедрению: склад и доставку подключают к системе вместе. Приложение кладовщика без приложения курьера даёт точный остаток, который дальше отгрузки никуда не доезжает.
Личный кабинет — доступ покупателя к своим данным без обращения к оператору: заказы, документы, адреса, способы оплаты, возвраты. Каждый вопрос, закрытый кабинетом, — звонок, не поступивший в поддержку.
Своих данных кабинет не хранит: он показывает те же объекты, что видит оператор в административной панели, но только записи этого клиента и только разрешённые ему операции.
Что в нём есть:
В B2B кабинет сложнее: у организации несколько сотрудников с разными правами. Закупщик собирает заказ, руководитель согласовывает, бухгалтер забирает закрывающие документы. Заказ один, действия разделены.
Вход по одноразовому коду или паролю, второй фактор на операциях с деньгами и сменой контактов, журнал сессий с отключением чужого устройства. Смена почты или телефона подтверждается на старом и новом адресе.
Те же записи оператор видит в карточке заказа: события общие, отдельного журнала для кабинета нет. Чек и накладная лежат в разделе «Документы».
Интеграция — согласованный обмен данными с внешней программой: что передаётся, в каком формате, как часто, кто владеет данными и что происходит при сбое.
С чем связывается система:

Ключевое решение интеграции — ответственность за данные. Для каждой сущности определяется система-владелец: номенклатура и цены приходят из ERP, клиенты — из CRM, остатки — со склада, заказы рождаются в e-commerce. Двусторонняя правка одного поля в двух системах даёт постоянные расхождения, поэтому её избегают.
| Система | Что передаёт | Сообщений | Результат |
|---|---|---|---|
| ERP | номенклатура, цены | 4 120 | Без ошибок |
| Склад | остатки, резервы | 18 640 | 2 повтора |
| CRM | клиенты, сегменты | 1 305 | Без ошибок |
| Маркетплейс | заказы, остатки | 2 470 | 1 в разборе |
Интеграция ломается не при запуске, а через полгода — когда внешняя система обновилась, канал пропал на час или в справочник попало непредусмотренное значение. Шесть правил определяют, переживёт ли обмен такие события.
Оформление заказа не ждёт ответа внешней системы: сообщение кладётся в очередь и обрабатывается отдельно. Недоступный склад не останавливает продажи.
Неудачная передача повторяется с нарастающим интервалом. Сообщение, не прошедшее после всех попыток, попадает в очередь разбора, а не теряется.
Повторно доставленное сообщение не создаёт второй заказ и не списывает остаток дважды. Приёмник распознаёт дубль по ключу операции.
Изменение формата выходит новой версией, старая продолжает работать. Внешние потребители переходят на неё по своему графику.
Каждое сообщение сохраняется с телом, временем, результатом и числом попыток. Разбор инцидента опирается на журнал, а не на воспоминания.
Регулярная сверка ключевых показателей: заказы, суммы оплат, остатки. Расхождение становится задачей, а не обнаруживается при инвентаризации.
Каталог и заказы
Оплаты
Остатки и склад
Аналитика
Аналитика строится на собственных данных о продажах и поведении, а не только на внешних счётчиках посещаемости. Счётчик знает о просмотрах, система — о деньгах, товарах и возвратах.
Отчёты считаются по срезам: период, канал продаж, категория, бренд, склад, регион, сегмент клиента, промоакция. Любой показатель доступен в каждом разрезе и выгружается в файл или хранилище данных.

Самый крутой обрыв — между корзиной и оформлением: там разбираются шаг регистрации, расчёт доставки и способы оплаты.
Безопасность держится на трёх вещах: платёжные данные не попадают в систему магазина, персональные данные хранятся ограниченно и под контролем, любое действие с деньгами и заказами оставляет след.
Номер карты вводится на стороне сертифицированного провайдера и в систему магазина не попадает. Для повторных списаний хранится токен, а не карта.
Весь трафик — по HTTPS. Чувствительные поля в базе шифруются, резервные копии хранятся в зашифрованном виде отдельно от основного контура.
Ролевая модель: контент-менеджер не видит платежи, оператор не меняет цены. Административный вход — с двухфакторной аутентификацией.
Кто изменил цену, кто отменил заказ, кто выгрузил базу клиентов. Записи неизменяемы и хранятся отдельно от рабочих данных.
Минимально необходимый состав данных, срок хранения, удаление по запросу, согласия на обработку и рассылки с датой и источником.
Ограничение частоты запросов, защита форм от перебора, контроль повторного использования промокодов, антифрод-проверки заказов до сборки.
Отдельный контур — восстановление. Резервные копии бесполезны, пока не проверено их восстановление: тестовое развёртывание проводится по расписанию, а не в момент аварии.
Масштабирование — способность выдержать рост без переписывания. Растут три величины: размер каталога, число одновременных посетителей и количество заказов в час.
Каталог упирается в поиск и фильтрацию, пиковый трафик — в отдачу страниц, поток заказов — в базу данных и внешние интеграции. Решения тоже разные и внедряются по мере необходимости.
Приёмы, которые применяются на практике:
| Показатель | Измерено | Порог |
|---|---|---|
| Отклик каталога, p95 | 180 мс | 400 мс |
| Заказов в час на пике | 3 000 | 2 400 |
| Ответов из кеша | 86% | 70% |
| Переиндексация каталога | 9 мин | 20 мин |
| Восстановление из копии | 22 мин | 60 мин |
Система собирается из модулей: каждый закрывает свою область данных и операций, связи между ними описаны явно. Проект запускается частями — сначала каталог и заказы, затем лояльность, аналитика и внешние каналы.
Товарные позиции, артикулы, описания, статусы публикации, версии карточек и архив снятых с продажи товаров.
Дерево разделов, привязка товара к нескольким веткам, сортировка, посадочные страницы под подборки и сезонные разделы.
Справочник свойств с типами данных и правилами отображения — основа фильтров, сравнения и выгрузок в маркетплейсы.
Размеры, цвета и объёмы в одной карточке с раздельными артикулами и остатками. Наборы, списывающие несколько позиций.
Фотографии, видео и документы, автоматическая генерация форматов и разрешений, водяные знаки, привязка к товарам.
Прайс-листы, правила наценки, объёмные шкалы, персональные и договорные цены, валюты, округление, налоги, история.
Условия срабатывания, механики скидок, расписание, лимиты, генерация партий кодов, совместимость, минимальная цена.
Корзина между устройствами, пересчёт цен и доступности, шаги оформления, гостевой заказ, возврат к брошенной корзине.
Единая очередь заказов из всех каналов, статусы и переходы, правки состава, доплаты, разделение на отгрузки, отмены.
Подключение провайдеров, холдирование и списание, частичные и полные возвраты, обработка уведомлений, сверка.
Чеки продажи и возврата, обмен с онлайн-кассами, отправка чека покупателю, контроль неотправленных документов.
Остатки по складам, резервы со сроком жизни, блокировки брака, приёмка поставок и возвратов, пороги низкого остатка.
Способы доставки, зоны, тарифы, интервалы и слоты, создание отправлений, отслеживание статусов, печать документов.
Заявки по позициям, проверка сроков и допустимости, приёмка, возврат средств, возврат в остатки или списание брака.
Учётные записи, адреса, юридические лица и договоры, история заказов, сегменты, согласия на обработку данных.
Баллы, уровни, правила начисления и списания, срок действия баллов, персональные предложения, рефералы.
Поисковый индекс, морфология и синонимы, опечатки, фильтры по атрибутам, сортировки, запросы без результатов.
Сопутствующие и похожие товары, «с этим покупают», ручные подборки и правила на основе истории заказов.
Страницы, статьи, баннеры, метатеги и адреса страниц, микроразметка товаров, карта сайта, товарные фиды.
Письма, СМС, мессенджеры и push по событиям заказа, шаблоны сообщений, расписание, журнал доставки.
Отчёты по продажам, марже, запасам, воронке и возвратам, произвольные срезы, выгрузки, витрины данных.
Обмен с CRM, ERP, складом, кассами, платёжными и логистическими сервисами, маркетплейсами. API, вебхуки, очереди.
Роли и разрешения по разделам и операциям, двухфакторная аутентификация, журнал действий сотрудников.
Несколько витрин на одном ядре, мультиязычность и мультивалютность, несколько юрлиц и складов, регионы.
Систему не запускают целиком за один релиз. Порядок ниже отражает зависимости: каждый шаг опирается на данные, появившиеся на предыдущем.
Текущие процессы, справочники и системы-владельцы данных. Результат — схема сущностей и карта интеграций.
Перенос номенклатуры, настройка атрибутов и категорий, обмен ценами и остатками. Проверка на реальных данных.
Оформление, статусы, платёжный провайдер, фискализация, передача в исполнение. Запуск на части ассортимента.
Доставка и возвраты, лояльность, аналитика, новые каналы продаж. Каждый блок — отдельный релиз с измерением.
Опишите, что уже работает: учётная система, склад, кассы, текущая витрина. Разберём процесс и предложим архитектуру решения.