2. Флоу покупателя

Путь покупателя — это не один универсальный флоу и не десяток отдельных. Это два capture-флоу (что и как получаем), сходящихся на одном общем хвосте (контакт → оплата → подтверждение → статус). Внутри каждого флоу — ограниченная параметризация под тип бизнеса.

                        ┌─────────────────────────────┐
   Flow A — ЗАКАЗ  ─────┤                             │
   (товары, цифра)      │      ОБЩИЙ ХВОСТ            │
                        │  контакт/аккаунт →          │
   Flow B — ЗАПИСЬ ─────┤  оплата/депозит/нет →       │──► статус
   (услуги, выезд)      │  подтверждение              │
                        └─────────────────────────────┘

Почему так: расхождение флоу — в середине (корзина vs слот+мастер), а контакт/оплата/подтверждение/статус/уведомления/история — одинаковые. Дублировать хвост нельзя (две оплаты, два статуса, расщеплённый аккаунт). Поэтому две головы на одном хвосте.


Flow A — Заказ (товары, цифровые товары)

  1. Смотрит каталог/категории/коллекции.
  2. Открывает карточку товара.
  3. Конфигурирует: вариант (цвет/размер), модификаторы (для еды: размер, добавки), количество.
  4. Кладёт в корзину → корзина накапливает N позиций.
  5. Получение: доставка на адрес · самовывоз · цифра (мгновенная выдача, шага доставки нет).
  6. общий хвост.

Отвечает: StorefrontApiController (каталог, корзина, заказ). Корзина — в Redis, переживает редеплой.

Flow B — Запись (услуги, выезд мастера)

  1. Смотрит услуги.
  2. Открывает услугу.
  3. Выбирает ресурс (мастер/специалист) — опционально.
  4. Выбирает слот времени — из доступности (платформа считает свободные слоты, удерживает выбранный).
  5. Где: у бизнеса (клиент приходит) · у клиента (выезд — нужен адрес).
  6. общий хвост.

Отвечает: BookingService, AvailabilityService, AppointmentReminderWorker. ⚠️ сейчас: запись живёт через виджет-попап (bp-widget.js); цель — нативный флоу витрины, виджет остаётся только для встройки на чужие сайты.

Общий хвост (один на оба флоу)

  1. Контакт / аккаунт: телефон/email; узнаём вернувшегося покупателя (cookie/аккаунт), предзаполняем.
  2. Оплата: онлайн полностью · депозит онлайн + остаток на месте · при получении/на месте · нет (оплата вне сайта).
  3. Подтверждение: мгновенно · или заявка → бизнес подтверждает.
  4. Статус: единый экран для заказа и записи; уведомления покупателю и владельцу.
  5. История — в аккаунте покупателя (единый на все магазины платформы).

Оси вариаций (v1)

Любой бизнес — это набор значений по осям. Тема их не «зашивает» — платформа показывает нужные шаги.

Ось Значения (v1)
Единица корзина из N · одна запись
Конфигурация варианты · модификаторы (еда — новое)
Получение доставка · самовывоз · у бизнеса · у клиента · цифра
Ресурс нет · мастер
Время нет · слот
Оплата онлайн · депозит · на месте · нет
Подтверждение мгновенно · заявка→подтверждение

Явно отложено (не v1): котировка (заявка→цена→акцепт), подписка/рекуррент, аренда с залогом и возвратом, билеты/карта мест, чистый лид без покупки. Каждое — отдельный флоу позже.

Кто владеет каждым шагом

Шаг Вид (разметка) Данные / действие
Каталог, карточка, услуга тема read API
Конфигуратор (вариант/модификатор) тема цена/наличие — платформа
Корзина (страница/drawer) тема позиции, итоги, остатки — платформа
Выбор мастера/слота тема доступность, удержание — платформа
Контакт, оплата, подтверждение платформа (токены + блоки темы) платформа
Статус, аккаунт платформа (токены темы) платформа

Тема делает путь «ощущаемо разным» на ~90% (всё до оплаты — её вёрстка). Хвост — общий по поведению (доверие/конверсия), темизируется по виду.

Что дальше

Какие именно объекты и поля тема видит на каждом шаге — 03. Объектная модель.