17 KiB
Отличия между ТЗ и текущей реализацией
Обзор
Документ описывает расхождения между техническим заданием (ТЗ 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_idGET /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):
Стратегия формируется на основе:
AudienceProfileChannelInsightsMarketInsightsRecommendation
Создаются:
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. Структура данных
ТЗ:
Сущности:
BusinessProfileMarketingAnalysisMarketInsightsCompetitorInsightsAudienceProfileChannelInsightsSwotAnalysisRecommendationCampaignCampaignGoalStrategyCampaignChannelContentItemCampaignMetrics
Реализация:
Сущности:
- ✅
MarketingAnalysis - ✅
MarketingStrategy - ✅
PostingTask - ❌ Нет отдельных сущностей для
MarketInsights,CompetitorInsights,AudienceProfile,ChannelInsights,SwotAnalysis- данные хранятся вreportDataкак Map - ❌ Нет
Campaign- используетсяMarketingStrategy - ❌ Нет
CampaignGoal - ❌ Нет
CampaignMetrics
Вывод: Структура данных упрощена - многие сущности объединены или отсутствуют.
3. Минималистичный подход
ТЗ:
"Собирает минимальные данные о бизнесе" "Нельзя заставлять пользователя выбирать типы рекламы, форматы продвижения"
Реализация:
- ❌ Пользователь должен выбрать
analysisType(тип анализа) - ❌ Пользователь должен выбрать
detailLevel(уровень детализации) - ❌ Добавлены дополнительные поля (
goal,strongSide,weakSide)
Вывод: Реализация требует больше данных от пользователя, чем предполагалось в ТЗ.
Резюме критических отличий
🔴 Критические расхождения:
- Тип анализа: В ТЗ анализ комплексный (все типы сразу), в реализации - выбор одного типа
- Блок C (Результаты): Полностью не реализован - нет метрик, графиков, выводов
- Выбор цели кампании: Отсутствует в реализации
- Структура данных: Упрощена, многие сущности объединены или отсутствуют
- API версионирование: Отсутствует
🟡 Значительные отличия:
- Поля формы: Добавлены дополнительные поля, не указанные в ТЗ
- Пути API: Отличаются от указанных в ТЗ
- Названия сущностей:
Campaign→MarketingStrategy - Статусы: Разные названия (
PENDINGvsqueued)
🟢 Незначительные отличия:
- Детализация стратегии: Реализация более детальная (недельные планы, календарь)
- Структура ответа: Данные организованы по-другому, но информация присутствует
Рекомендации по приведению к ТЗ
Приоритет 1 (Критично):
- Реализовать комплексный анализ - генерировать все типы анализа одновременно, а не по выбору
- Реализовать Блок C - добавить метрики, графики, итоговые выводы
- Добавить выбор цели кампании - перед генерацией стратегии
Приоритет 2 (Важно):
- Упростить форму - убрать лишние поля или сделать их опциональными
- Привести пути API к указанным в ТЗ или обновить ТЗ
- Добавить версионирование API -
/api/v1/...
Приоритет 3 (Желательно):
- Переименовать сущности или обновить ТЗ под текущую реализацию
- Добавить подсказки по визуалу в материалы кампании
- Привести статусы к единому виду