Техническое задание
Техническое задание (ТЗ) проекта Карометр
1. Введение
1.1 Наименование и назначение
Karometr — защищённая web-платформа для агрегации, расчёта и анализа индексов спроса и предложения на автомобильном рынке.
1.2 Цели проекта
- Получать оперативные рыночные индикаторы на базе ежедневных дилерских данных.
- Снизить задержку принятия управленческих решений по сравнению с помесячной статистикой.
- Предоставить масштабируемый B2B-сервис по подписке.
1.3 Горизонт первого релиза
- Срок:
12 месяцев - Бюджет первого этапа:
~1 000 000 ₽ - Результат: коммерчески готовый продукт v1
2. Область применения
Система предназначена для:
- официальных дилеров и дилерских групп;
- дистрибьюторов/импортёров/OEM;
- аналитических подразделений и отраслевых экспертов;
- B2B-пользователей, работающих с рыночными прогнозами.
3. Роли и права доступа
3.1 Роли
SUPER_ADMIN— полный доступ к платформе и настройкам.ORG_ADMIN— управление пользователями организации, тарифом, доступами.ANALYST— просмотр аналитики, выгрузка отчётов.DEALER_PROVIDER— загрузка и контроль переданных дилерских данных.BILLING_MANAGER— просмотр и управление подписками/платежами.READ_ONLY— ограниченный просмотр разрешённых дашбордов.
3.2 Политика доступа
- Базовая модель:
ABAC(attribute-based access control). - Роли (
RBAC) используются как атрибуты субъекта в ABAC-политиках. - Все операции журналируются (audit trail).
4. Функциональные требования
4.1 Модуль управления доступом (IAM)
FR-AUTH-1: Регистрация и вход (email + пароль, опционально SSO в v2).
FR-AUTH-2: JWT access/refresh, ротация refresh.
FR-AUTH-3: Принудительный logout и отзыв сессий.
FR-AUTH-4: Восстановление пароля.
FR-AUTH-5: Централизованная авторизация через Keycloak (OIDC/OAuth2, realm/clients/roles).
FR-AUTH-6: Поддержка MFA для привилегированных ролей (SUPER_ADMIN, ORG_ADMIN).
FR-AUTH-7: Service-to-service авторизация по client credentials (machine tokens).
FR-AUTH-8: Принудительная проверка токена и ролей на каждом backend-сервисе.
4.2 Модуль интеграции данных
FR-INGEST-1: Импорт файлов CSV/XLSX через UI.
FR-INGEST-2: API-интеграции источников дилеров.
FR-INGEST-3: Валидация формата и бизнес-правил.
FR-INGEST-4: Нормализация справочников (бренд, модель, регион, дилер).
FR-INGEST-5: Идемпотентная повторная загрузка.
FR-INGEST-6: Журнал ошибок и отчёт о качестве загрузки.
FR-INGEST-7: Поддержка подключения нового дилера с режимом первичной загрузки исторических данных (backfill за согласованный период).
FR-INGEST-8: Суточный регламент обработки данных: окно загрузки 23:00-04:00, окно пересчёта индексов 04:00-06:00.
FR-INGEST-9: Автоматическое уведомление дилера при пропуске отправки данных в суточном окне SLA.
FR-INGEST-10: Автоматическое выявление расхождений во входных данных/справочниках, автоисправление типовых ошибок и ручной контроль спорных случаев.
4.3 Модуль аналитического ядра
FR-CORE-1: Расчёт текущего индекса (период к предыдущему периоду).
FR-CORE-2: Расчёт годового индекса (период к аналогичному периоду прошлого года).
FR-CORE-3: Срезы по брендам, моделям, регионам, дилерским группам.
FR-CORE-4: Исторические ряды по индексам.
FR-CORE-5: Предрасчёт витрин для ускорения дашбордов.
4.4 Модуль визуализации
FR-DASH-1: Интерактивные графики динамики спроса/предложения.
FR-DASH-2: Фильтры по периоду, бренду, модели, региону.
FR-DASH-3: KPI-карточки ключевых показателей.
FR-DASH-4: Сохранение пользовательских пресетов фильтрации.
FR-DASH-5: Экспорт отчётов (CSV/XLSX, PDF на этапе v1.1).
4.5 Модуль ИИ и прогнозов
FR-AI-1: Краткосрочный прогноз индексов.
FR-AI-2: Учёт макрофакторов (ставка, курс, регуляторные параметры).
FR-AI-3: Показ доверительного интервала прогноза.
FR-AI-4: Версионирование модели и метрик качества.
FR-AI-5: Автоматическая аналитическая справка по текущей ситуации (аномалии, резкие изменения показателей, потенциальные новостные поводы).
4.6 Модуль подписок и биллинга
FR-BILL-1: Тарифные планы (базовый, расширенный, enterprise).
FR-BILL-2: Ограничения по доступам и лимитам тарифа.
FR-BILL-3: Управление статусом подписки.
FR-BILL-4: История выставлений/оплат.
4.7 Зафиксированный функционал v1
- Подключение пилотных дилеров с первичной исторической загрузкой.
- Ежедневный автоматизированный цикл загрузки и пересчёта индексов по расписанию.
- Базовые индексы спроса/предложения и дашборды по брендам, семействам моделей и регионам.
- Контроль качества данных и уведомления о пропусках/ошибках загрузки.
- ИИ-прогноз и аналитическая справка по текущей рыночной ситуации.
5. Нефункциональные требования
5.1 Производительность
p95API чтения: не более500 мс.- Время построения типового дашборда: не более
2 сек. - Время расчёта ежедневного пакета индексов: не более
30 мин.
5.2 Надёжность
- Доступность production:
99.5%на релиз v1. - RPO: не более
24 часов. - RTO: не более
4 часов.
5.3 Безопасность
- TLS 1.2+ для внешних интерфейсов и mTLS для внутренних сервисных вызовов.
- Централизованная IAM через
Keycloak(OIDC/OAuth2) и применениеABAC-политик на уровне backend. - Хранение паролей:
argon2илиbcrypt(в контуре Keycloak). - Короткоживущие access token + refresh token с ротацией и отзывом сессий.
- Хранение сессионных/служебных данных в
Redisс TTL и контролем инвалидации. - Политики доступа на backend:
ABAC-first(организация, регион, бренд, дилер, тариф, MFA-контекст); роли используются как атрибуты. - Защита от OWASP Top 10, rate limit и brute-force protection на auth endpoints.
- Шифрование секретов и ключей, хранение в защищённом secret-store.
- Аудит входов, действий пользователей и административных изменений.
- Маскирование и ограничение чувствительных данных в UI, API и выгрузках.
5.4 Масштабируемость
- Горизонтальное масштабирование API.
- Асинхронные фоновые задачи через очередь сообщений.
- Разделение контуров online API и batch-процессов.
6. Архитектура решения
6.1 Архитектурный стиль
- Система строится как микросервисная архитектура.
- Каждый сервис имеет собственную зону ответственности и независимый цикл релизов.
- Синхронные вызовы используются для query-команд, асинхронные — для событий и тяжёлых расчётов.
- Межсервисные контракты фиксируются через OpenAPI + event schema.
6.2 Состав микросервисов
api-gateway— единая точка входа для UI и внешних интеграций.auth-service(Keycloak) — аутентификация, авторизация, роли, сессии, токены.ingestion-service(FastAPI) — приём, валидация и нормализация входных данных.analytics-service(FastAPI) — расчёт KPI, индексов, витрин и агрегатов.forecast-service(FastAPI) — прогнозные модели и оценка качества прогнозов.billing-service(FastAPI) — подписки, тарифы, лимиты и статусы оплаты.notification-service(FastAPI) — алерты, уведомления, служебные рассылки.
6.3 Технологический стек (утверждённый)
- Frontend:
Nuxt 3+@nuxt/ui - Backend микросервисы:
FastAPI - Авторизация/IAM:
Keycloak - База данных:
PostgreSQL - Кэш и временные данные:
Redis - Брокер сообщений:
RabbitMQ - Объектное хранилище:
MinIO
6.4 Паттерны взаимодействия
- Синхронный контур: HTTP/REST через
api-gateway. - Асинхронный контур: события и очереди через
RabbitMQ. - Тяжёлые расчёты и batch-операции запускаются воркерами.
- Для idempotency используются бизнес-ключи и dedup-проверки.
6.5 Контейнеры и окружения
dev— разработка и отладка.stage— интеграционное тестирование.prod— промышленная эксплуатация.
6.6 API-контракты (v1)
POST /api/v1/auth/loginPOST /api/v1/auth/refreshPOST /api/v1/ingest/filesGET /api/v1/ingest/jobs/{id}GET /api/v1/indicesGET /api/v1/forecastsGET /api/v1/dashboard/summaryGET /api/v1/subscription/current
7. Модель данных (укрупнённо)
users,roles,user_rolesorganizations,organization_usersdealers,dealer_groupsbrands,modelsregionscontracts,contract_eventsstock_balancesmacro_factorsindices_daily,indices_periodicforecast_runs,forecast_pointssubscriptions,tariffs,payments
8. Бизнес-процессы
8.1 Поставка данных
- Дилер загружает файл или отправляет пакет по API.
- При первом подключении дилера выполняется первичная загрузка исторических данных.
- В ежедневном цикле
23:00-04:00система валидирует и нормализует данные. - При пропуске поставки данных дилеру автоматически отправляется уведомление.
- Запись попадает в БД и очередь пересчёта индексов.
- В окне
04:00-06:00пересчитываются индексы, после чего обновляются витрины и дашборды.
8.2 Потребление аналитики
- Пользователь авторизуется.
- Выбирает фильтры и период.
- Получает KPI, графики, прогнозы.
- При необходимости экспортирует отчёт.
9. Интеграции
- Дилерские DMS/ERP-системы (через адаптеры).
- Внешние источники макроэкономических индикаторов.
- Платёжный провайдер для подписок.
10. План релизов
v0.1(М1-М2): SRS, архитектура, auth, загрузка файлов.v0.2(М3-М4): базовые индексы, дашборд MVP.v0.3(М5-М8): интеграционные коннекторы, качество данных.v1.0(М9-М12): подписка, прогнозы, эксплуатационная готовность.
11. Тестирование и качество
11.1 Виды тестов
- Unit-тесты бизнес-логики и расчётов.
- Integration-тесты API и БД.
- E2E-тесты ключевых пользовательских сценариев.
- Нагрузочные тесты на критичные API.
- Безопасностные тесты (SAST/DAST, пентест перед v1).
11.2 Критерии готовности релиза
- Нет блокирующих дефектов
P0/P1. - Покрытие критической логики тестами.
- Пройдены интеграционные и e2e smoke-наборы.
- Подготовлены runbook и rollback-план.
12. Критерии приёмки
- Реализованы все обязательные требования раздела 4 для версии v1.
- Выполнены нефункциональные требования раздела 5 в согласованных пределах.
- Подтверждена корректность расчёта индексов на контрольных выборках.
- Подтверждена защищённость доступа и разграничение ролей.
- Подготовлен полный комплект проектной документации.
13. Проектные артефакты
- SRS (подробные требования).
- Архитектурные схемы и ADR.
- OpenAPI-спецификация.
- Миграции и ER-диаграмма.
- Тест-план и отчёты о тестировании.
- Эксплуатационная документация (runbook, backup/restore).