Files
marketing-parser/ОТЛИЧИЯ_ТЗ_ОТ_РЕАЛИЗАЦИИ.md
2025-12-03 09:02:21 +05:00

401 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Отличия между ТЗ и текущей реализацией
## Обзор
Документ описывает расхождения между техническим заданием (ТЗ 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. **Привести статусы** к единому виду