# ТЗ: Evrone Shop — интернет-магазин

Демонстрационная версия документа · категория «Коммерция» · №01

> Это демонстрационное техническое задание: оно показывает структуру и глубину
> документа, который передаётся вместе с прототипом. Боевое ТЗ по этому солюшену
> готовится и заменит этот файл.

## 1. Суть решения

Каталог, корзина, чекаут и админка с импортом из 1С. B2B-режим — модуль-опция.

Витрина с каталогом и фасетным поиском, карточка товара с вариациями, корзина, чекаут с несколькими способами оплаты и доставки, личный кабинет покупателя, админка управления каталогом с импортом из 1С/Excel/фидов, промокоды и скидочные механики, триггерные письма. B2B-режим (оптовые прайсы, персональные цены по договорам, заказ таблицей артикулов, отсрочка платежа) — модуль-опция, отстраивающий решение от шаблонных конструкторов.

## 2. Технологический стек

| Слой | Решение |
|---|---|
| Backend | Ruby on Rails 8, PostgreSQL |
| Frontend | Hotwire (Turbo + Stimulus), Tailwind CSS |
| Фоновые задачи | Solid Queue |
| Файлы | Active Storage, S3-совместимое хранилище |
| Деплой | Docker, Kamal, production + staging |

## 3. Роли

- Покупатель
- Контент-менеджер
- Оператор заказов
- Администратор

## 4. Модель данных

### 4.1. Product

```
name: string
slug: string, unique
category_id: references
price: integer # копейки
properties: jsonb # цвет, размер
visible: boolean
```

### 4.2. Order

```
number: string, unique
state: enum # новый, оплачен, собран, отправлен, доставлен
items_snapshot: jsonb # цены на момент заказа
delivery_type: enum
payment_state: enum
```

### 4.3. Customer

```
email: string
phone: string
addresses: has_many
b2b_contract_id: references, nullable
```

## 5. Ключевые сценарии

1. Покупатель находит товар через фасетный поиск, выбирает вариацию и добавляет в корзину
2. Корзина живёт в сессии и переносится в аккаунт при входе
3. Чекаут в три шага - контакты, доставка, оплата - и уходит в статусную модель заказа
4. Контент-менеджер загружает каталог из 1С или Excel, изменения видны на витрине сразу

## 6. Интеграции

- Эквайринг через адаптер
- Служба доставки
- 1С через слой адаптеров
- Триггерные письма

## 7. Нефункциональные требования

- Серверный рендеринг, работоспособность ключевых страниц без JavaScript
- Мобильная адаптивность обязательна
- Роли и права проверяются на уровне сервера, а не интерфейса
- Логирование действий пользователей по значимым операциям
- Покрытие тестами моделей и ключевых сценариев
- Развёртывание одной командой, окружения production и staging

## 8. Состав MVP

Витрина + каталог + корзина + чекаут + админка; одна интеграция эквайринга, одна служба доставки, 1С через слой адаптеров.

## 9. Критерии приёмки

1. Все сценарии из раздела 5 проходят end-to-end на тестовом стенде
2. Роли из раздела 3 видят только то, что им положено
3. Интеграции из раздела 6 работают через слой адаптеров и переключаются конфигурацией
4. Прототип разворачивается из репозитория одной командой
5. Документация по запуску и переменным окружения лежит в README
