BR 1.5: Управление торговыми точками
Контекст
ЮЛ созданы (BR 1.1), сотрудники привязываются к ТТ (BR 1.4), но самих ТТ в системе нет. Без управления торговыми точками невозможно:
- Привязать сотрудников к конкретной ТТ
- Запустить каталог и прейскуранты (будущие BR)
- Опубликовать ТТ на сайте / в приложении
Store Service (:3003) уже заложен в архитектуре, есть 3 internal endpoint-а для поддержки ЮЛ — нужно достроить публичный API и фронтенд.
Что нужно
1. Создание торговой точки
Франшиза создаёт ТТ и привязывает к ЮЛ франчайзи (или своему ЮЛ).
Основные данные:
- Название ТТ (обязательное)
- Адрес (обязательный, текстовое поле)
- Координаты (широта/долгота) — ручной ввод числами. В будущем — геокодинг по адресу
- Город / регион (текстовое поле)
- Телефон ТТ
- Email ТТ
- Привязка к ЮЛ (обязательная, выбор из списка активных ЮЛ, не меняется после создания)
График работы:
- По дням недели: понедельник–воскресенье
- Для каждого дня: время открытия, время закрытия, или “выходной”
- Одинаковый график на все дни (быстрая настройка) или индивидуально по дням
2. Просмотр и редактирование ТТ
- Карточка ТТ со всеми данными
- Редактирование всех полей кроме привязки к ЮЛ (не меняется после создания)
- Редактирование графика работы
3. Список торговых точек
- Таблица со всеми ТТ
- Поиск по названию и адресу
- Фильтры: статус (все / опубликована / черновик / приостановлена), ЮЛ, город
- Пагинация (20 на страницу)
- Колонки: название, адрес, ЮЛ, статус, город
4. Статусы и публикация
Статусы ТТ:
- Черновик (draft) — создана, но не видна клиентам. Можно редактировать
- Опубликована (published) — видна на сайте и в приложении
- Приостановлена (suspended) — временно скрыта (например, при приостановке ЮЛ)
Публикация:
- Кнопка “Опубликовать” — переводит из draft в published
- Кнопка “Снять с публикации” — переводит из published в draft
- При приостановке ЮЛ (BR 1.1) — все ТТ этого ЮЛ автоматически становятся suspended
- При возобновлении ЮЛ — ТТ остаются suspended (нужно публиковать вручную)
5. Удаление ТТ
- Soft delete (помечается удалённой, не отображается)
- Если у ТТ есть назначенные сотрудники — предупредить, но разрешить удаление (сотрудники открепляются)
- Если ТТ опубликована — сначала снять с публикации, потом удалять
6. Ролевой доступ
| Роль | Что может |
|---|---|
| Франшиза | CRUD всех ТТ, публикация, все фильтры |
| Франчайзи | Просмотр и редактирование только своих ТТ (привязанных к его ЮЛ), без создания и удаления |
| Менеджер ТТ | Просмотр и редактирование только своей ТТ (без создания, удаления, публикации) |
| Кассир | Нет доступа |
Что НЕ входит (отложено)
- Фотографии и медиа ТТ (требует S3 интеграцию) — Phase 2
- Зоны доставки на карте (полигоны, мин. сумма, стоимость) — Phase 2
- Авто-увеличение времени ETA при загрузке (требует Order Service) — Phase 2
- Импорт из Excel — отдельная BR 1.6
Решения по открытым вопросам
- Привязка к ЮЛ — на MVP привязка к одному ЮЛ, не меняется после создания. В будущем возможна смена привязки (перевод ТТ между ЮЛ).
- Координаты — на MVP ручной ввод широты/долготы. В будущем — интеграция с сервисом геокодинга (поиск координат по текстовому адресу).
- При возобновлении ЮЛ — ТТ остаются suspended, публиковать вручную.
- Формат графика — на MVP “открыто с … до …” без перерывов. В будущем — поддержка перерывов.
- Типы ТТ — на MVP один тип, без классификации. В будущем — типы (кухня, кофейня, dark kitchen и т.д.).
Зависимости
- BR 1.1 — ЮЛ должны существовать (привязка ТТ к ЮЛ)
- BR 1.4 — Сотрудники привязываются к ТТ (после реализации 1.5 — сотрудники смогут быть привязаны к реальным ТТ)
- Store Service — уже есть скелет с internal API