# Отличия между ТЗ и текущей реализацией

## Обзор

Документ описывает расхождения между техническим заданием (ТЗ v0.2) и текущей реализацией модуля «Маркетинг».

---

## Блок А. Маркетинговый анализ

### 1. Поля ввода формы

#### ТЗ (Шаг А1):

- **Чем занимается ваш бизнес?** (строка, max 255)
- **Где вы работаете?** (строка) - примеры: "Алматы", "Астана", "Онлайн по всему Казахстану"
- **Что вы продаёте?** (строка)
- **Кто ваш клиент?** (опционально, строка + быстрые кнопки выбора)

#### Реализация:

- ✅ **businessNiche** (ниша бизнеса) - соответствует "Чем занимается ваш бизнес?"
- ✅ **product** (продукт/услуга) - соответствует "Что вы продаёте?"
- ✅ **targetAudience** (целевая аудитория) - соответствует "Кто ваш клиент?", но **обязательное поле** (в ТЗ опциональное)
- ✅ **region** (регион) - соответствует "Где вы работаете?", но **только города Казахстана** (в ТЗ допускается "Онлайн по всему Казахстану")
- ❌ **goal** (цель на 6-12 месяцев) - **новое поле, отсутствует в ТЗ**
- ❌ **detailLevel** (уровень детализации) - **новое поле, отсутствует в ТЗ**
- ❌ **strongSide** (сильная сторона) - **новое поле, отсутствует в ТЗ**
- ❌ **weakSide** (слабая сторона) - **новое поле, отсутствует в ТЗ**

**Вывод**: Реализация расширена дополнительными полями, которые улучшают качество анализа, но не соответствуют минималистичному подходу из ТЗ.

---

### 2. Статусы анализа

#### ТЗ:

- `PENDING` → `IN_PROGRESS` → `COMPLETED` / `FAILED`

#### Реализация:

- `queued` → `processing` → `completed` / `failed`

**Вывод**: Разные названия статусов, но логика идентична.

---

### 3. Эндпоинты API

#### ТЗ:

- `POST /api/marketing/analyses` - создание анализа
- `GET /api/marketing/analyses/{id}/status` - проверка статуса
- `GET /api/marketing/analyses/{id}` - получение результата

#### Реализация:

- ✅ `POST /api/marketing/analysis/start` - создание анализа (путь отличается: `analysis` вместо `analyses`)
- ❌ `GET /api/marketing/analysis/{id}/status` - **отсутствует отдельный эндпоинт для статуса**
- ✅ `GET /api/marketing/analysis/{id}` - получение результата (путь отличается)

**Вывод**: Пути API отличаются (единственное число vs множественное), отсутствует отдельный эндпоинт для проверки статуса (статус возвращается вместе с результатом).

---

### 4. Структура ответа анализа

#### ТЗ (Шаг А4):

Отчёт должен содержать блоки:

- Обзор бизнеса
- Рынок (MarketInsights)
- Конкуренты (CompetitorInsights)
- Целевая аудитория (AudienceProfile)
- Каналы (ChannelInsights)
- SWOT (SwotAnalysis)
- Рекомендации (список Recommendation)

#### Реализация:

Ответ содержит:

- ✅ `summary` - резюме анализа (соответствует обзору)
- ✅ `targetAudience` - целевая аудитория с описанием и каналами
- ✅ `recommendations` - список рекомендаций
- ✅ `strategy` - маркетинговая стратегия с каналами и типами контента
- ❌ **Нет отдельных блоков** для Рынка, Конкурентов, SWOT, Каналов - всё объединено в `summary` на основе `analysisType`

**Вывод**: В ТЗ предполагается комплексный анализ со всеми блоками, в реализации анализ зависит от выбранного `analysisType` (один тип за раз).

---

### 5. Тип анализа

#### ТЗ:

Анализ включает **все типы одновременно**:

- Анализ рынка (MarketInsights)
- Анализ конкурентов (CompetitorInsights)
- Анализ ЦА (AudienceProfile)
- Анализ каналов (ChannelInsights)
- SWOT (SwotAnalysis)

#### Реализация:

Пользователь **выбирает один тип анализа**:

- `РЫНОК` - только анализ рынка
- `КОНКУРЕНТЫ` - только анализ конкурентов
- `ЦА` - только анализ целевой аудитории
- `КАНАЛЫ` - только анализ каналов
- `SWOT` - только SWOT-анализ

**Вывод**: Критическое отличие - в ТЗ анализ комплексный, в реализации пользователь выбирает один тип.

---

## Блок B. Автоматическое продвижение

### 1. Название сущности

#### ТЗ:

- `Campaign` (кампания)
- `CampaignGoal` (цель кампании)
- `Strategy` (стратегия)
- `CampaignChannel` (каналы кампании)
- `ContentItem` (контент-единицы)

#### Реализация:

- `MarketingStrategy` (маркетинговая стратегия) - **другое название**
- Нет сущности `Campaign` - вместо неё используется `MarketingStrategy`
- Нет сущности `CampaignGoal` - цели не реализованы
- ✅ `MarketingStrategy.WeeklyPlan` - недельные планы
- ✅ `MarketingStrategy.PostCalendarItem` - календарь постов (аналог ContentItem)

**Вывод**: Концептуальное отличие - в ТЗ есть отдельные сущности Campaign и Strategy, в реализации всё объединено в MarketingStrategy.

---

### 2. Эндпоинты продвижения

#### ТЗ:

- `POST /api/promotion/campaigns` - создание кампании с `business_id`, `analysis_id`, `goal_id`
- `GET /api/promotion/campaigns/{campaign_id}` - получение стратегии кампании
- `POST /api/promotion/campaigns/{id}/activate` - активация кампании

#### Реализация:

- ✅ `POST /api/marketing/analysis/strategy/generate` - генерация стратегии (путь отличается, нет `goal_id`)
- ✅ `GET /api/marketing/analysis/strategy/{strategyId}` - получение стратегии
- ✅ `POST /api/marketing/analysis/strategy/{strategyId}/start` - запуск стратегии (аналог активации)

**Вывод**: Пути API отличаются (`/api/promotion/campaigns` vs `/api/marketing/analysis/strategy`), отсутствует выбор цели кампании (`goal_id`).

---

### 3. Выбор цели продвижения

#### ТЗ (Шаг B1):

Пользователь выбирает цель из карточек:

- Увеличить продажи (`increase_sales`)
- Получить больше заявок/звонков (`get_leads`)
- Повысить узнаваемость бренда (`awareness`)
- Продвигать акцию или спецпредложение (`promo`)

#### Реализация:

- ❌ **Выбор цели отсутствует** - стратегия генерируется автоматически без выбора цели пользователем

**Вывод**: Критическое отличие - в ТЗ пользователь выбирает цель, в реализации цель определяется автоматически системой.

---

### 4. Формирование стратегии

#### ТЗ (Шаг B2):

Стратегия формируется на основе:

- `AudienceProfile`
- `ChannelInsights`
- `MarketInsights`
- `Recommendation`

Создаются:

- `Strategy` - описание, длительность (7-14 дней)
- `CampaignChannel` - каналы
- `ContentItem` - контент-единицы (черновики)

#### Реализация:

Стратегия формируется на основе:

- ✅ Данных из `MarketingAnalysis`
- ✅ `targetAudience` из анализа
- ✅ `recommendations` из анализа

Создаются:

- ✅ `MarketingStrategy` - описание, длительность в неделях
- ✅ `priorityPlatforms` - приоритетные платформы
- ✅ `WeeklyPlan` - недельные планы с темами
- ✅ `PostCalendarItem` - календарь постов с текстами и хештегами

**Вывод**: Логика похожа, но структура данных отличается (недельные планы и календарь постов вместо простых ContentItem).

---

### 5. Экран "Материалы кампании"

#### ТЗ (Шаг B4):

Отображаются `ContentItem`:

- Тип: пост / сторис / баннер / email
- Канал
- Черновой текст
- Подсказка по визуалу

#### Реализация:

Отображаются `PostCalendarItem`:

- ✅ `platform` - канал
- ✅ `contentType` - тип контента (пост, сторис, видео, баннер)
- ✅ `postText` - текст поста
- ✅ `hashtags` - хештеги
- ✅ `publishDate` - дата публикации
- ✅ `publishTime` - время публикации
- ❌ **Нет подсказок по визуалу**

**Вывод**: Реализация более детальная (даты, время, хештеги), но отсутствуют подсказки по визуалу.

---

## Блок C. Результаты кампаний

### 1. Эндпоинты результатов

#### ТЗ:

- `GET /api/promotion/campaigns?business_id=...` - список кампаний
- Детали кампании через тот же эндпоинт

#### Реализация:

- ❌ **Эндпоинты для результатов кампаний отсутствуют**
- ✅ Есть `GET /api/marketing/analysis/strategy/my` - список стратегий пользователя
- ✅ Есть `PostingTask` - задачи на публикацию, но нет метрик

**Вывод**: Блок C (Результаты кампаний) **не реализован**. Нет метрик, графиков, итоговых выводов.

---

### 2. Метрики кампаний

#### ТЗ (Шаг C2):

Должны отображаться:

- Охват (суммарно)
- Вовлечённость (лайки/клики/сообщения)
- Заявки/обращения
- График по дням
- Метрики по каналам (Instagram, Telegram и т.д.)
- Итоговый вывод системы

#### Реализация:

- ❌ **Метрики отсутствуют**
- ❌ **Графики отсутствуют**
- ❌ **Итоговые выводы отсутствуют**
- ✅ Есть `PostingTask` - задачи на публикацию, но без метрик выполнения

**Вывод**: Функционал отслеживания результатов кампаний полностью отсутствует.

---

## Общие отличия

### 1. API версионирование

#### ТЗ:

- API должен быть версионируемым: `/api/v1/...`

#### Реализация:

- ❌ **Версионирование отсутствует** - используется `/api/marketing/...`

**Вывод**: Не соответствует требованию версионирования API.

---

### 2. Структура данных

#### ТЗ:

Сущности:

- `BusinessProfile`
- `MarketingAnalysis`
- `MarketInsights`
- `CompetitorInsights`
- `AudienceProfile`
- `ChannelInsights`
- `SwotAnalysis`
- `Recommendation`
- `Campaign`
- `CampaignGoal`
- `Strategy`
- `CampaignChannel`
- `ContentItem`
- `CampaignMetrics`

#### Реализация:

Сущности:

- ✅ `MarketingAnalysis`
- ✅ `MarketingStrategy`
- ✅ `PostingTask`
- ❌ **Нет отдельных сущностей** для `MarketInsights`, `CompetitorInsights`, `AudienceProfile`, `ChannelInsights`, `SwotAnalysis` - данные хранятся в `reportData` как Map
- ❌ **Нет `Campaign`** - используется `MarketingStrategy`
- ❌ **Нет `CampaignGoal`**
- ❌ **Нет `CampaignMetrics`**

**Вывод**: Структура данных упрощена - многие сущности объединены или отсутствуют.

---

### 3. Минималистичный подход

#### ТЗ:

> "Собирает минимальные данные о бизнесе"
> "Нельзя заставлять пользователя выбирать типы рекламы, форматы продвижения"

#### Реализация:

- ❌ Пользователь должен выбрать `analysisType` (тип анализа)
- ❌ Пользователь должен выбрать `detailLevel` (уровень детализации)
- ❌ Добавлены дополнительные поля (`goal`, `strongSide`, `weakSide`)

**Вывод**: Реализация требует больше данных от пользователя, чем предполагалось в ТЗ.

---

## Резюме критических отличий

### 🔴 Критические расхождения:

1. **Тип анализа**: В ТЗ анализ комплексный (все типы сразу), в реализации - выбор одного типа
2. **Блок C (Результаты)**: Полностью не реализован - нет метрик, графиков, выводов
3. **Выбор цели кампании**: Отсутствует в реализации
4. **Структура данных**: Упрощена, многие сущности объединены или отсутствуют
5. **API версионирование**: Отсутствует

### 🟡 Значительные отличия:

1. **Поля формы**: Добавлены дополнительные поля, не указанные в ТЗ
2. **Пути API**: Отличаются от указанных в ТЗ
3. **Названия сущностей**: `Campaign` → `MarketingStrategy`
4. **Статусы**: Разные названия (`PENDING` vs `queued`)

### 🟢 Незначительные отличия:

1. **Детализация стратегии**: Реализация более детальная (недельные планы, календарь)
2. **Структура ответа**: Данные организованы по-другому, но информация присутствует

---

## Рекомендации по приведению к ТЗ

### Приоритет 1 (Критично):

1. **Реализовать комплексный анализ** - генерировать все типы анализа одновременно, а не по выбору
2. **Реализовать Блок C** - добавить метрики, графики, итоговые выводы
3. **Добавить выбор цели кампании** - перед генерацией стратегии

### Приоритет 2 (Важно):

1. **Упростить форму** - убрать лишние поля или сделать их опциональными
2. **Привести пути API** к указанным в ТЗ или обновить ТЗ
3. **Добавить версионирование API** - `/api/v1/...`

### Приоритет 3 (Желательно):

1. **Переименовать сущности** или обновить ТЗ под текущую реализацию
2. **Добавить подсказки по визуалу** в материалы кампании
3. **Привести статусы** к единому виду
