Торговые точки
Источник требований
Франшиза создаёт и управляет торговыми точками. ТТ привязана к ЮЛ и является точкой продаж: к ней привязаны сотрудники, каталог, заказы.
Сущность торговой точки
Основные данные
| Поле | Обязательность | Описание |
|---|---|---|
| Название | Обязательно | Название ТТ |
| Адрес | Обязательно | Текстовое поле |
| Широта | Обязательно | Числовое, ручной ввод |
| Долгота | Обязательно | Числовое, ручной ввод |
| Город / регион | Необязательно | Текстовое поле |
| Телефон | Необязательно | Контактный телефон ТТ |
| Необязательно | Email ТТ | |
| Привязка к ЮЛ | Обязательно | Выбор из списка активных ЮЛ. Не меняется после создания. |
График работы
- По дням недели: понедельник — воскресенье
- Для каждого дня: время открытия, время закрытия, или “выходной”
- Быстрая настройка: одинаковый график на все дни
Семантика времени
open_time == close_time(например21:00–21:00) — круглосуточный режим (24 часа). На UI показывается бейдж «🕒 24/7». Используется когда смена длится сутки. Для отдельного выходного — флаг «выходной» (is_closed=true), не равные времена.close_time < open_time(например21:00–02:00) — закрытие на следующий календарный день. Допускается. Семантика «работает ли сейчас» в MVP не реализуется (нет потребителей time-range), но при появлении должна учитывать перенос через полночь.- Бэкенд хранит как есть, cross-field валидаций нет.
На MVP без перерывов
Формат “открыто с … до …” без поддержки перерывов. В будущем — перерывы.
Статусы
| Статус | Описание | Видимость клиентам |
|---|---|---|
| Черновик (draft) | Создана, но не видна | Не видна |
| Опубликована (published) | Видна на сайте и в приложении | Видна |
| Приостановлена (suspended) | Временно скрыта (при приостановке ЮЛ) | Не видна |
Переходы
- Публикация: draft → published (кнопка “Опубликовать”)
- Снятие: published → draft (кнопка “Снять с публикации”)
- Приостановка ЮЛ (автоматически): published → suspended
- Возобновление ЮЛ: ТТ остаются suspended (нужно публиковать вручную)
Бизнес-правила
- Привязка к ЮЛ — выбирается при создании, не меняется после. На MVP одно ЮЛ на ТТ.
- Soft delete — ТТ помечается удалённой, не отображается.
- Удаление с сотрудниками — если есть назначенные сотрудники, предупредить, но разрешить (сотрудники открепляются).
- Удаление опубликованной — сначала снять с публикации, потом удалять.
- Приостановка ЮЛ → все ТТ этого ЮЛ автоматически suspended.
- Возобновление ЮЛ → ТТ остаются suspended, публиковать вручную.
Ролевая матрица
Франшиза (владелец бренда)
- CRUD всех ТТ
- Публикация / снятие с публикации
- Все фильтры
Франчайзи (партнёр)
- Просмотр и редактирование только своих ТТ (привязанных к его ЮЛ)
- Без создания и удаления
- Без публикации
Менеджер ТТ
- Просмотр и редактирование только своей ТТ
- Без создания, удаления, публикации
Кассир
- Нет доступа
Список ТТ
Колонки
- Название
- Адрес
- ЮЛ (наименование)
- Статус (Черновик / Опубликована / Приостановлена)
- Город
Фильтры
- По статусу (Все / Черновик / Опубликована / Приостановлена)
- По ЮЛ
- По городу
Поиск
- По названию и адресу
Пагинация
- 20 записей на страницу
Карточка ТТ
- Все поля ТТ
- График работы
- Количество привязанных сотрудников (в будущем)
Привязка к терминалу PayKeeper
(Добавлено в BR 3.3)
Секция видна если у ЮЛ этой ТТ активна PK-интеграция. Позволяет привязать ТТ к физическому mPOS-терминалу у PayKeeper.
| Поле | Обязательность | Описание |
|---|---|---|
ID терминала (pk_terminal_id) | Обязательно | Из ЛК PayKeeper (вручную). Уникален в рамках франшизы |
ID мерчанта (pk_mpos_merchant_id) | Обязательно | Из ЛК PayKeeper (вручную) |
Метка (label) | Необязательно | Человекочитаемое имя («Касса 1») |
| Статус | Обязательно | Активна / Неактивна |
Правила:
- Одна ТТ = один терминал (UNIQUE на
store_idиpk_terminal_id) - ТТ без привязки не может принимать оплату через PK (создание invoice вернёт
422 INTEGRATION_NOT_CONFIGURED) - Редактирование —
integrations.manage(владелец франшизы — любые ТТ, владелец партнёра — только свои) - Менеджер ТТ видит статус read-only: «Привязана к терминалу …» / «Не настроена»
- Кассир не видит
Подробнее: главная спека PayKeeper.
Действия и подтверждения
Удаление
- Если ТТ опубликована — ошибка: “Сначала снимите с публикации”
- Если есть привязанные сотрудники — предупреждение: “У ТТ есть N сотрудников, они будут откреплены”
- Модалка: “Удалить торговую точку [название]? Это действие нельзя отменить.”
Публикация
- Кнопка “Опубликовать” → ТТ становится видна клиентам
Снятие с публикации
- Кнопка “Снять с публикации” → ТТ скрыта от клиентов
Что НЕ входит
- Фотографии и медиа (Phase 2, S3)
- Зоны доставки на карте (Phase 2)
- Авто-увеличение ETA (Phase 2, Order Service)
- Импорт из Excel (BR 1.6)
Связи с другими модулями
- Юридические лица — каждая ТТ привязана к одному ЮЛ
- Сотрудники — сотрудник привязан к ТТ
- Каталог — товары доступны на ТТ (будущая BR)
- Заказы — заказ создаётся в контексте ТТ (будущая BR)