# FitCRM — Руководство по ручному тестированию

> **Дата:** 20.02.2026
> **Статус спринтов:** Спринты 1–7 реализованы, Спринт 8 в процессе
> **Окружение:** Docker Compose (PostgreSQL + Redis + Coturn)

---

## Оглавление

1. [Обзор готовности по спринтам](#1-обзор-готовности-по-спринтам)
2. [Запуск окружения](#2-запуск-окружения)
3. [Тестовые учётные записи](#3-тестовые-учётные-записи)
4. [API Backend (Swagger)](#4-api-backend-swagger)
5. [Веб-панель «Рецепция»](#5-веб-панель-рецепция)
6. [Панель администратора клуба](#6-панель-администратора-клуба)
7. [Панель суперадминистратора](#7-панель-суперадминистратора)
8. [Мобильное приложение](#8-мобильное-приложение)
9. [Лендинг](#9-лендинг)
10. [Известные ограничения](#10-известные-ограничения)

---

## 1. Обзор готовности по спринтам

| Спринт | Название | Статус | Что готово |
|--------|----------|--------|------------|
| 1 | Фундамент + Multi-tenancy | ✅ Готов | Monorepo, Prisma (34 таблицы), JWT + 6 ролей + TOTP, RLS, ModuleGuard, Docker |
| 2 | Клиенты + Главная | ✅ Готов | CRUD клиентов, Mobile: авторизация + главная + клиенты, Web: рецепция |
| 3 | Расписание + Воронка | ✅ Готов | Расписание (CRUD, отмена, перенос, повтор), воронка (7 этапов), Push (9 типов) |
| 4 | Статистика + Продажи = MVP | ✅ Готов | KPI-дашборд, конверсия, рейтинг, продажи, долги |
| 5 | Координатор + SIP + Спящие | ✅ Готов | Координатор, журнал звонков, спящие клиенты, график работы |
| 6 | Веб-отчёты + Панель клуба | ✅ Готов | 4 типа отчётов (PDF), панель админа клуба (9 разделов) |
| 7 | Суперадмин + Webhooks | ✅ Готов | Платформенная панель, webhooks (12 типов), audit log |
| 8 | Полировка + Release | ⏳ В процессе | Частично: unit-тесты, нет E2E, нет аудита безопасности |

---

## 2. Запуск окружения

```bash
# 1. Инфраструктура
docker compose up -d

# 2. Backend API (порт 3000)
pnpm --filter api prisma:generate
pnpm --filter api prisma:migrate
pnpm --filter api prisma:seed
pnpm --filter api dev

# 3. Веб-панель «Рецепция» (порт 3001)
pnpm --filter web-admin dev

# 4. Панель админа клуба (порт 3002)
pnpm --filter web-club-admin dev

# 5. Панель суперадмина (порт 3003)
pnpm --filter web-platform-admin dev

# 6. Лендинг (порт 3050)
pnpm --filter lp dev

# 7. Мобильное приложение (Expo)
pnpm --filter mobile start
```

---

## 3. Тестовые учётные записи

> Создаются при `prisma:seed`. Пароли уточнить в `apps/api/prisma/seed.ts`.

| Роль | Телефон (ожидаемый) | Доступ |
|------|---------------------|--------|
| Суперадминистратор | см. seed | Платформенная панель |
| Админ клуба | см. seed | Панель клуба |
| Координатор | см. seed | Мобильное приложение |
| Рецепция | см. seed | Веб-панель рецепции |
| Тренер 1 | см. seed | Мобильное приложение |
| Тренер 2 | см. seed | Мобильное приложение |
| Тренер 3 | см. seed | Мобильное приложение |
| Менеджер | см. seed | Мобильное + веб |

---

## 4. API Backend (Swagger)

**URL:** `http://localhost:3000/api/docs`

### 4.1. Авторизация

| Что проверять | Как |
|--------------|-----|
| Логин по телефону + паролю | `POST /v1/auth/login` — получить `accessToken` + `refreshToken` |
| Обновление токена | `POST /v1/auth/refresh` — передать refreshToken, получить новый access |
| Настройка 2FA (TOTP) | `POST /v1/auth/totp/setup` — получить QR-код и секрет |
| Подтверждение TOTP | `POST /v1/auth/totp/verify` — ввести 6-значный код |
| Невалидный пароль | Ожидание: 401 Unauthorized |
| Истёкший токен | Ожидание: 401, затем refresh |

### 4.2. Клиенты

| Что проверять | Эндпоинт |
|--------------|----------|
| Список клиентов с пагинацией | `GET /v1/clients?limit=10` |
| Поиск по имени/телефону | `GET /v1/clients?search=Иванов` |
| Создание клиента | `POST /v1/clients` |
| Карточка клиента | `GET /v1/clients/:id` (включая цели, травмы, членства) |
| Назначение тренера | `POST /v1/clients/:id/assign` |
| Спящие клиенты | `GET /v1/clients/sleeping` |
| Изоляция по club_id | Тренер видит ТОЛЬКО своих клиентов |

### 4.3. Расписание

| Что проверять | Эндпоинт |
|--------------|----------|
| Список тренировок | `GET /v1/trainings` |
| Тренировки по дате | `GET /v1/trainings/date/2026-02-20` |
| Создание тренировки | `POST /v1/trainings` |
| Подтверждение | `POST /v1/trainings/:id/confirm` |
| Завершение (списание) | `POST /v1/trainings/:id/complete` |
| Отмена (с причиной) | `POST /v1/trainings/:id/cancel` |
| Перенос | `POST /v1/trainings/:id/reschedule` |
| Доступные слоты | `GET /v1/trainings/slots/:trainerId/:date` |

### 4.4. Воронка

| Что проверять | Эндпоинт |
|--------------|----------|
| Клиенты по этапу | `GET /v1/funnel?stage=NEW` |
| Статистика конверсии | `GET /v1/funnel/stats` |
| Распределение по этапам | `GET /v1/funnel/distribution` |
| Назначить тренера | `POST /v1/funnel/assign` |
| Переместить этап | `POST /v1/funnel/:clientId/move` |
| Передать в другой отдел | `POST /v1/funnel/:clientId/transfer` |
| Отказ (с комментарием) | `POST /v1/funnel/:clientId/refuse` |
| Тренер видит ТОЛЬКО своих | Проверить фильтрацию |

### 4.5. Продажи

| Что проверять | Эндпоинт |
|--------------|----------|
| Список продаж | `GET /v1/sales` |
| Создание продажи | `POST /v1/sales` |
| Оплата | `POST /v1/sales/:id/pay` |
| Отмена | `POST /v1/sales/:id/cancel` |
| Возврат | `POST /v1/sales/:id/refund` |
| Долги | `GET /v1/sales/debts` |
| Сводка по долгам | `GET /v1/sales/debts/summary` |

### 4.6. Статистика и рейтинг

| Что проверять | Эндпоинт |
|--------------|----------|
| Общая сводка (KPI) | `GET /v1/stats/summary` |
| Конверсия воронки | `GET /v1/stats/funnel` |
| Рейтинг тренеров | `GET /v1/stats/rating` |
| Детали по тренеру | `GET /v1/stats/trainer/:trainerId` |

### 4.7. SIP-телефония

| Что проверять | Эндпоинт |
|--------------|----------|
| Журнал звонков | `GET /v1/sip/calls` |
| Статистика звонков | `GET /v1/sip/calls/stats` |
| Конфигурация SIP (админ клуба) | `GET /v1/sip/config` |
| SIP-аккаунт пользователя | `GET /v1/sip/account` |
| Модуль отключён → 403 | Если `sip` не активирован для клуба |

### 4.8. Webhooks

| Что проверять | Эндпоинт |
|--------------|----------|
| Список подписок | `GET /v1/webhooks` |
| Создание подписки | `POST /v1/webhooks` — вернёт secret |
| Тестовая доставка | `POST /v1/webhooks/:id/test` |
| Логи доставки | `GET /v1/webhooks/:id/logs` |
| HMAC-SHA256 подпись | Проверить заголовок `X-Webhook-Signature` |

### 4.9. Администрирование

| Что проверять | Эндпоинт |
|--------------|----------|
| Список клубов (суперадмин) | `GET /v1/admin/clubs` |
| Лицензии | `GET /v1/licenses` |
| Лицензия клуба | `GET /v1/licenses/my` |
| Модули клуба | `GET /v1/modules` |
| Метринг использования | `GET /v1/metering/usage` |
| Лимиты | `GET /v1/metering/limits` |
| Audit log | `GET /v1/admin/audit-logs` |
| Каталог услуг | `GET /v1/catalog/services` |
| Каталог пакетов | `GET /v1/catalog/packages` |
| Департаменты | `GET /v1/departments` |
| Залы | `GET /v1/rooms` |

### 4.10. RBAC — Проверка ролей

| Действие | Тренер | Координатор | Менеджер | Рецепция | Админ клуба | Суперадмин |
|----------|--------|-------------|----------|----------|-------------|------------|
| Создать клиента | ❌ 403 | ✅ | ✅ | ✅ | ✅ | — |
| Удалить клиента | ❌ 403 | ❌ 403 | ✅ | ❌ 403 | ✅ | — |
| Назначить тренера | ❌ 403 | ✅ | ✅ | — | — | — |
| Воронка: все клиенты | ❌ свои | ✅ все | ✅ все | ✅ все | — | — |
| SIP конфигурация | ❌ 403 | ❌ 403 | ❌ 403 | — | ✅ | — |
| Управление клубами | ❌ 403 | ❌ 403 | ❌ 403 | ❌ 403 | ❌ 403 | ✅ |

---

## 5. Веб-панель «Рецепция»

**URL:** `http://localhost:3001`
**Логин:** учётная запись с ролью RECEPTIONIST или MANAGER

### 5.1. Страница логина (`/login`)

| Что проверять | Ожидание |
|--------------|----------|
| Форма: телефон + пароль | Оба поля обязательны |
| Успешный логин | Редирект на `/reception` |
| Неверный пароль | Сообщение об ошибке |
| Повторный вход (сессия) | При обновлении страницы остаётся авторизованным |

### 5.2. Рецепция (`/reception`)

| Что проверять | Ожидание |
|--------------|----------|
| 4 карточки статистики | Общее, подтверждённые (зелёные), запланированные (оранжевые), отменённые (красные) |
| Таблица тренировок | Время, клиент, телефон, тренер, тип, статус |
| Статусы цветные | PLANNED = оранжевый, CONFIRMED = зелёный, COMPLETED = синий, CANCELLED = красный |
| Кнопка «Записать на ВПТ» | Открывает диалог создания |

**Диалог «Записать на ВПТ»:**

| Что проверять | Ожидание |
|--------------|----------|
| Поиск клиента (2+ символа) | Выпадающий список из API |
| Выбор тренера | Загружается список тренеров |
| Выбор даты | Минимум — сегодня |
| Выбор времени | Доступные слоты ИЛИ ручной ввод |
| Выбор длительности | 30, 45, 60, 90, 120 мин |
| Создание записи | Тренировка появляется в таблице |
| Валидация | Нельзя создать без клиента/тренера/даты |

### 5.3. Распределение (`/distribution`)

| Что проверять | Ожидание |
|--------------|----------|
| Левая колонка: нераспределённые клиенты | Клиенты со стадией NEW в воронке |
| Правая колонка: тренеры | Все активные тренеры |
| Выбор клиента + тренера | Подсветка оранжевым при выборе |
| Кнопка «Назначить тренера» | Появляется только при выборе обоих |
| Назначение | Клиент пропадает из списка, обновляется счётчик |

### 5.4. Аналитика (`/analytics`)

| Что проверять | Ожидание |
|--------------|----------|
| 4 карточки | Всего, активные, новые за месяц, спящие |
| Графики | Заглушка «Charts will be added with Recharts» |

> ⚠️ Данные захардкожены, графики не реализованы

### 5.5. Отчёты (`/reports`)

| Что проверять | Ожидание |
|--------------|----------|
| Фильтр по типу | 4 типа: клиенты, тренеры, воронка, финансы |
| Фильтр по статусу | PENDING, GENERATING, COMPLETED, FAILED |
| Создание отчёта | Диалог: тип + период (от/до) |
| Генерация | Статус PENDING → GENERATING → COMPLETED (автообновление каждые 10 сек) |
| Скачивание PDF | Кнопка «Скачать» у завершённых отчётов |
| Ошибка генерации | Статус FAILED с красным бейджем |

### 5.6. Тренеры (`/trainers`)

| Что проверять | Ожидание |
|--------------|----------|
| Таблица тренеров | Имя, отдел, клиенты, конверсия %, рейтинг |
| Статус | «На смене» (зелёный) или серый |
| Данные из API | `/stats/rating` с fallback на `/users/trainers` |

### 5.7. Навигация и общее

| Что проверять | Ожидание |
|--------------|----------|
| Боковое меню | 5 пунктов: Рецепция, Распределение, Аналитика, Отчёты, Тренеры |
| Активный пункт | Подсветка оранжевым |
| Выход | Кнопка внизу сайдбара, очистка токена, редирект на логин |
| Несанкционированный доступ | Без токена → редирект на `/login` |
| Обновление страницы | Сессия сохраняется (localStorage) |

---

## 6. Панель администратора клуба

**URL:** `http://localhost:3002`
**Логин:** учётная запись с ролью CLUB_ADMIN

### 6.1. Дашборд (`/dashboard`)

| Что проверять | Ожидание |
|--------------|----------|
| Карточки: сотрудники, клиенты, выручка, тренировки | Данные из API |
| Конверсия воронки | Процент |
| Загрузка залов | Показатель занятости |

### 6.2. Сотрудники (`/staff`)

| Что проверять | Ожидание |
|--------------|----------|
| Список сотрудников | Имя, роль, телефон, статус |
| Создание сотрудника | Диалог: ФИО, телефон, email, роль, отдел |
| Редактирование | Изменение данных существующего сотрудника |
| Удаление | Подтверждающий диалог (AlertDialog) |
| Фильтр по роли | TRAINER, COORDINATOR, MANAGER, RECEPTIONIST |

### 6.3. Департаменты (`/departments`)

| Что проверять | Ожидание |
|--------------|----------|
| Список отделов | Название, описание |
| CRUD | Создание, редактирование, удаление с подтверждением |

### 6.4. Залы (`/rooms`)

| Что проверять | Ожидание |
|--------------|----------|
| Список залов | Название, вместимость, описание |
| CRUD | Создание, редактирование, удаление |

### 6.5. Каталог услуг (`/catalog`)

| Что проверять | Ожидание |
|--------------|----------|
| Вкладки: Услуги / Пакеты | Переключение между списками |
| Создание услуги | Название, категория, цена, длительность |
| Создание пакета | Название, кол-во сессий, срок действия, цена |
| Редактирование и удаление | Диалоги для каждой сущности |

### 6.6. Уведомления (`/notifications`)

| Что проверять | Ожидание |
|--------------|----------|
| 9 типов уведомлений | Список с тогглами вкл/выкл |
| Кастомный текст | Для типов 1, 2, 5, 7 — редактируемый текст |
| Сохранение настроек | Изменения сохраняются через API |

### 6.7. Интеграции (`/integrations`)

| Что проверять | Ожидание |
|--------------|----------|
| Блок 1С | Настройки синхронизации (URL, логин, пароль) |
| Блок SIP | Конфигурация SIP-сервера (хост, порт, realm) |
| Блок Webhooks | Список подписок, создание новых |
| API-ключи | Создание ключа с выбором scopes, показ secret однократно |
| Модуль отключён | Если модуль не активирован — блок недоступен |

### 6.8. Лицензия (`/license`)

| Что проверять | Ожидание |
|--------------|----------|
| Тип лицензии | Стартовая / Стандартная / Премиум |
| Срок действия | Дата начала и окончания |
| Использование ресурсов | active_users, clients, webhooks_sent, push_sent |
| Диалог продления | Выбор нового срока |

### 6.9. Настройки (`/settings`)

| Что проверять | Ожидание |
|--------------|----------|
| Деактивация клуба | Кнопка с подтверждением |
| Общие настройки | Название, адрес, контакты клуба |

---

## 7. Панель суперадминистратора

**URL:** `http://localhost:3003`
**Логин:** учётная запись с ролью SUPER_ADMIN

### 7.1. Дашборд (`/dashboard`)

| Что проверять | Ожидание |
|--------------|----------|
| Карточки: клубы, лицензии, пользователи, клиенты | Агрегированные данные платформы |
| Критические алерты | Заблокированные клубы, истекающие лицензии (7 дней) |
| Таблица недавних клубов | Название, тип лицензии, пользователи, дата создания |

### 7.2. Клубы (`/clubs`)

| Что проверять | Ожидание |
|--------------|----------|
| Список всех клубов | Название, адрес, статус лицензии |
| Создание клуба | Диалог: название, адрес, телефон, email, часовой пояс |
| Редактирование клуба | Изменение данных |
| Активация/деактивация | Меню действий (три точки) |
| Просмотр деталей | Информация о клубе + лицензия |

### 7.3. Лицензии (`/licenses`)

| Что проверять | Ожидание |
|--------------|----------|
| Выдача лицензии | Диалог: клуб, тип (Стартовая/Стандартная/Премиум), даты |
| Матрица функций | Сравнение 11 модулей по 3 тарифам |
| Лимиты по тарифам | Пользователи, клиенты для каждого типа |

### 7.4. Мониторинг (`/monitoring`)

| Что проверять | Ожидание |
|--------------|----------|
| Здоровье платформы | Заглушка (scaffolded) |

> ⚠️ Страница реализована частично

### 7.5. Audit Log (`/audit`)

| Что проверять | Ожидание |
|--------------|----------|
| Журнал действий | Заглушка (scaffolded) |

> ⚠️ Страница реализована частично (API готов: `GET /v1/admin/audit-logs`)

### 7.6. Безопасность

| Что проверять | Ожидание |
|--------------|----------|
| Индикатор 2FA | В сайдбаре «2FA включена» |
| TOTP при логине | Если 2FA настроена → дополнительный шаг |

---

## 8. Мобильное приложение

**Запуск:** `pnpm --filter mobile start` → Expo Go / эмулятор
**Логин:** учётная запись с ролью TRAINER, COORDINATOR или MANAGER

### 8.1. Авторизация

| Что проверять | Ожидание |
|--------------|----------|
| Экран логина | Поле телефона + пароль |
| Успешный вход | Переход на главный экран |
| Неверные данные | Сообщение об ошибке |
| Сохранение сессии | При перезапуске — автоматический вход |
| Выход | Кнопка в разделе «Ещё» → очистка токена |

### 8.2. Раздел «Главная» (Таб 1)

| Что проверять | Ожидание |
|--------------|----------|
| Приветствие с именем | «Привет, {Имя}!» |
| Карточка статистики | Завершённые тренировки, клиенты, сумма продаж |
| Ближайшие тренировки | До 5 тренировок на 7 дней вперёд |
| Каждая тренировка | Дата, время, клиент, статус (цветная точка) |
| Карточка долгов | Общая сумма и количество |
| Алерты | Новые клиенты, спящие клиенты |
| Pull-to-refresh | Обновление всех данных |
| Тап по тренировке | Переход к деталям |

### 8.3. Раздел «Расписание» (Таб 2)

| Что проверять | Ожидание |
|--------------|----------|
| Заголовок месяца | «Февраль 2026» |
| Полоска дней (неделя) | Горизонтальный скролл, текущий день выделен |
| Тап по дню | Загрузка тренировок на эту дату |
| Список тренировок | Карточки с датой, временем, клиентом, статусом |
| FAB кнопка «+» | Оранжевая, внизу справа |
| Pull-to-refresh | Обновление списка |

**Создание тренировки (отдельный экран):**

| Что проверять | Ожидание |
|--------------|----------|
| Выбор клиента | Модалка с поиском (мин. 2 символа) |
| Выбор даты | Модалка со списком 30 дней |
| Выбор времени | Сетка доступных слотов ИЛИ ручной выбор |
| Выбор длительности | Чипсы: 30, 45, 60, 90, 120 мин |
| Услуга (опционально) | Пикер услуг |
| Зал (опционально) | Пикер залов |
| Повтор (переключатель) | Вкл → выбор кол-ва недель (2–12) |
| Кнопка «Создать» | Тренировка появляется в расписании |
| Валидация | Обязательно: клиент, дата, время |

**Детали тренировки:**

| Что проверять | Ожидание |
|--------------|----------|
| Информация | Клиент, время, длительность, услуга, статус |
| Подтвердить | PLANNED → CONFIRMED |
| Завершить (списание) | CONFIRMED → COMPLETED |
| Отменить | Модалка с выбором причины |
| Перенести | Выбор новой даты/времени |

### 8.4. Раздел «Воронка» (Таб 3)

| Что проверять | Ожидание |
|--------------|----------|
| Табы этапов | NEW, ASSIGNED, COMPLETED, REGULAR (с бейджами-счётчиками) |
| Тап по табу | Загрузка клиентов этого этапа |
| Карточки клиентов | Имя, статус, назначенный тренер, дата |
| Пагинация | Подгрузка при скролле (по 20) |
| Тап по карточке | Экран действий с клиентом |
| Pull-to-refresh | Обновление списка |

**Действия с клиентом воронки:**

| Что проверять | Ожидание |
|--------------|----------|
| Информация о клиенте | Аватар, имя, телефон, текущий тренер |
| Текущий этап | Цветной бейдж |
| История переходов | Таймлайн: этап → дата → кто выполнил → комментарий |
| Перевести на следующий этап | Кнопка (для тренера — только своих) |
| Назначить тренера | Экран выбора тренера (координатор/менеджер) |
| Передать другому | Выбор нового тренера |
| Отказ | Модалка с обязательным комментарием |

### 8.5. Раздел «Клиенты» (Таб 4)

| Что проверять | Ожидание |
|--------------|----------|
| Поиск | Поле вверху, поиск по имени/телефону (мин. 2 символа, debounce 400мс) |
| Список клиентов | Аватар с инициалами, имя, телефон, email, дата последней активности |
| Тап по телефону | Открывает звонилку |
| Тап по карточке | Переход к деталям клиента |
| Пагинация | По 20, подгрузка при скролле |
| Тренер видит только своих | Проверить: нет чужих клиентов |

**Карточка клиента:**

| Что проверять | Ожидание |
|--------------|----------|
| Аватар + ФИО | Большой аватар с инициалами |
| Контакты | Телефон (кликабельный), email, дата рождения |
| Последняя активность | Дата |
| Заметки | Если есть |

### 8.6. Раздел «Ещё» (Таб 5) — Подразделы

#### 8.6.1. Статистика

| Что проверять | Ожидание |
|--------------|----------|
| Табы периодов | Неделя, Месяц, Квартал, Год |
| KPI-сетка (2×2) | Тренировки, клиенты, продажи, спящие |
| Воронка конверсии | Визуальная диаграмма: NEW → ASSIGNED → COMPLETED → REGULAR |
| Проценты конверсии | Между каждым этапом |
| Смена периода | Данные обновляются |

#### 8.6.2. Рейтинг тренеров

| Что проверять | Ожидание |
|--------------|----------|
| Табы периодов | Неделя, Месяц, Квартал, Год |
| Список тренеров | Место, имя, тренировки, продажи, балл |
| Топ-3 | Эмодзи медалей (🥇🥈🥉) |
| Свой ряд | Подсветка оранжевой рамкой |

#### 8.6.3. Продажи

| Что проверять | Ожидание |
|--------------|----------|
| Табы: Продажи / Долги | Переключение |
| Список продаж | Дата, клиент, сумма, статус |
| Список долгов | Баннер с суммой (красный), список записей |
| FAB кнопка | Создание новой продажи |

#### 8.6.4. Координатор (только для COORDINATOR / MANAGER)

| Что проверять | Ожидание |
|--------------|----------|
| Табы периодов | Неделя, Месяц, Квартал |
| Сводка (3 карточки) | Клиенты, конверсия %, сумма продаж |
| Обзор воронки | 4 точки: NEW → ASSIGNED → COMPLETED → REGULAR |
| Список тренеров | Рейтинг по конверсии, метрики по этапам |
| Скрыт для тренера | Пункт меню не отображается |

#### 8.6.5. Журнал звонков

| Что проверять | Ожидание |
|--------------|----------|
| Статистика звонков | Всего, % отвеченных, средняя длительность |
| Список звонков | Клиент/номер, статус (цветной бейдж), время, длительность |
| Статусы | COMPLETED=зелёный, FAILED=красный, NO_ANSWER=оранжевый, BUSY=жёлтый |
| Пагинация | Подгрузка при скролле |

#### 8.6.6. График работы

| Что проверять | Ожидание |
|--------------|----------|
| Навигация по неделям | Стрелки < > |
| Полоска дней | 7 дней, точка если есть запись |
| Тап по дню | Показ рабочего дня (начало–конец) |
| Тогл доступности | «Доступен» (зелёный) / «Недоступен» (серый) |
| Добавить слот | Модалка: выбор времени начала/конца |
| Сохранение | Запись через API |

#### 8.6.7. Спящие клиенты

| Что проверять | Ожидание |
|--------------|----------|
| Список клиентов | Имя, дней неактивности (красный бейдж), телефон, последняя активность |
| Тап по телефону | Открывает звонилку |
| Критерии | Активный абонемент + >30 дней без активности |
| Пагинация | По 20 |

#### 8.6.8. Профиль и выход

| Что проверять | Ожидание |
|--------------|----------|
| Карточка профиля | Имя, роль на русском |
| Кнопка «Выйти» | Красный текст, очистка сессии, переход на логин |

---

## 9. Лендинг

**URL:** `http://localhost:3050`

| Секция | Что проверять |
|--------|--------------|
| Header | Навигация, логотип FitCRM |
| Hero | Заголовок, подзаголовок, CTA-кнопки |
| Stats | 3 ключевых метрики |
| Problems | Перечисление болей клиента |
| Features | Основные возможности CRM |
| Roles | 6 ролей пользователей с описанием |
| Integrations | 1С, SIP, Webhooks |
| Pricing | 3 тарифа: Стартовая 2,990₽, Стандартная 7,990₽, Премиум 19,990₽ |
| How It Works | 4 шага подключения |
| Testimonials | 3+ отзыва |
| FAQ | 5–8 вопросов-ответов |
| CTA Section | Финальный призыв к действию |
| Footer | Ссылки, контакты, копирайт |

---

## 10. Известные ограничения

### Не реализовано / заглушки

| Элемент | Статус | Комментарий |
|---------|--------|-------------|
| Аналитика: графики (Recharts) | ❌ Заглушка | web-admin `/analytics` — данные захардкожены |
| Мониторинг платформы | ❌ Заглушка | web-platform-admin `/monitoring` |
| Audit log (фронтенд) | ❌ Заглушка | API готов, фронтенд scaffolded |
| SIP: реальные VoIP-звонки | ❌ Нет | Только журнал и конфигурация, нет SIP-клиента |
| Интеграция 1С | ⚠️ Stub | Структура готова, реальная синхронизация не реализована |
| Push-уведомления (FCM) | ⚠️ Не проверено | Сервис реализован, нужен Firebase project |
| Запись звонков | ❌ Нет | По плану — только для Премиум |
| PDF-отчёты (реальная генерация) | ⚠️ Зависит от BullMQ | Нужна проверка worker-процесса |
| E2E тесты | ❌ Нет | Нет Playwright/Detox тестов |
| Списки услуг/залов в mobile | ⚠️ Пустые | Загружаются пустые списки (нужен seed) |

### Известные UI-проблемы

| Где | Проблема |
|-----|---------|
| web-admin: Header search | Не подключён к API (placeholder) |
| web-admin: Notifications bell | Хардкожен красный индикатор |
| web-admin: Analytics | Все числа статичные |
| mobile: Создание тренировки | Если нет слотов — fallback на ручной ввод |
| mobile: Координатор → Тап по тренеру | Навигация не реализована полностью |

---

> **Рекомендация:** Начать тестирование с API через Swagger (`/api/docs`), затем проверить веб-панели, затем мобильное приложение. Это даст понимание какие данные уже есть в БД и позволит создать тестовые сценарии.
