Подсистема «Аналитика и отчётность»¶
Модуль локального сбора и консолидированной аналитики. Автоматизированное получение, проверка, нормализация, хранение, агрегирование и визуальный анализ обезличенной статистики от всех ПАК и подсистем платформы.
Назначение¶
- Консолидация статистики от всех источников (собственное ПО и внешние ПАК) в едином хранилище
- Построение дашбордов и отчётов для анализа посещаемости, вовлечённости и профессиональных интересов
- Автоматическая генерация текстовых выводов и рекомендаций на основе данных
- Поддержка публичного аналитического режима на LED-экране
Источники событий¶
| Источник | Описание | Тип |
|---|---|---|
led_platform |
Собственное ПО LED-платформы (сценарии, викторины, командная игра) | Собственный |
profstart |
Модуль «ПрофСтарт» (профориентационный тест) | Собственный |
profession_avatar |
ПАК «Аватар профессий» (генерация фото в образах профессий) | Внешний |
tree_of_professions |
ПАК «Древо профессий» | Внешний |
regional_map |
ПАК «Интерактивная карта региона» | Внешний |
profbattle |
ПАК «Профбаттл» | Внешний |
feedback |
Модуль обратной связи | Собственный |
Принципы интеграции внешних ПАК¶
- Отдельный адаптер для каждого внешнего ПАК
- Приоритет: локальный REST API, HTTP API, WebSocket
- При отсутствии API: агент-коллектор, экспортные файлы JSON/CSV, TCP/UDP
- Неблокирующая интеграция (отказ внешнего ПАК не влияет на работу системы)
- Минимально необходимые права учётных данных
Модель события¶
Единая модель статистического события для всех источников:
| Поле | Тип | Описание |
|---|---|---|
id |
UUID | Уникальный идентификатор (идемпотентность) |
device_type |
string | Тип оборудования — см. Источники событий |
software_id |
string | Программный комплекс — см. Источники событий |
session_id |
UUID, nullable | Локальная сессия на терминале |
user_id |
UUID | ID пользователя (гостя или авторизованного) — всегда заполнен |
payload |
json | Дополнительные параметры (action_type, entity_type, entity_id, result, duration, content_version) |
created_at |
timestamp | Дата и время события |
Типы событий (примеры)¶
| Событие | Источник | Описание |
|---|---|---|
session_started |
Все | Начало сессии на терминале |
session_completed |
Все | Завершение сессии |
question_answered |
LED, ПрофСтарт | Ответ на вопрос |
profession_selected |
Все | Пользователь выбрал профессию |
profession_recommended |
Древо профессий, ПрофСтарт | Система рекомендовала профессию |
employer_viewed |
Карта региона | Просмотр информации о работодателе |
educational_institution_viewed |
Карта региона | Просмотр учебного заведения |
survey_submitted |
Обратная связь | Отправка анкеты |
test_completed |
ПрофСтарт | Завершение теста с результатом |
avatar_generated |
Аватар профессий | Генерация фото в образе профессии |
avatar_viewed |
Аватар профессий | Просмотр аватара |
avatar_shared |
Аватар профессий | Поделиться аватаром (по QR) |
Различение действий¶
В payload.action_type различаем:
- user_action — действие пользователя (выбор профессии, ответ на вопрос)
- system_action — действие системы (рекомендация профессии, предложение учебного заведения)
Нормализация и справочники¶
Все данные от внешних ПАК нормализуются к единой иерархии на основе наших сущностей:
Industry (Отрасль)
└── Direction (Направление)
└── Profession (Профессия)
└── Competence (Компетенция)
Внешние идентификаторы¶
- Мы предоставляем внешним ПАК наши справочники (профессии, отрасли, направления), чтобы они использовали наши идентификаторы
- Если ПАК использует свои идентификаторы, они хранятся как внешние идентификаторы (может быть несколько для одной сущности из разных ПАК)
- Сопоставление внешних идентификаторов с нашими сущностями хранится в отдельной сущности
ExternalIdentifier
→ Подробнее о сущностях нормализации
Дашборды и отчёты¶
Отчёты¶
Автоматическая генерация¶
- Формирование за произвольный период (день, неделя, месяц, произвольный диапазон)
- Отдельные отчёты по каждому ПАК и консолидированный
- Автоматическая генерация текстовых выводов на основе данных:
- "Самая популярная профессия — X (Y выборов)"
- "Среднее время прохождения сценария — Z минут"
- "Доля завершённых сессий — N%"
- "Наибольший интерес проявлен к отрасли X"
- Рекомендации по улучшению контента
Форматы выгрузки¶
- CSV
- XLSX
- PDF (с графиками и текстовыми выводами)
Библиотеки визуализации¶
Экспорт и визуализация реализуются через библиотеки: - Графики и диаграммы: Chart.js / D3.js / Recharts (выбирается при реализации) - Тепловые карты: D3.js / Plotly - Воронки: D3.js / кастомная реализация - Экспорт в PDF: jsPDF / Puppeteer (для серверной генерации) - Экспорт в CSV/XLSX: PapaParse / SheetJS
Все дашборды и отчёты поддерживают выгрузку в указанные форматы через эти библиотеки.
Шаблоны отчётов¶
- Сохранение шаблонов отчётов
- Плановое формирование (по расписанию) без внешних сервисов
Хранение и производительность¶
Требования¶
| Параметр | Значение |
|---|---|
| Событий в сутки | не менее 100 000 |
| Событий в хранилище | не менее 10 000 000 |
| Отображение в дашборде | не позднее 60 секунд |
| Дашборд за 12 месяцев | не более 5 секунд |
| Срок хранения | настраиваемый, по умолчанию 36 месяцев |
Слои хранения¶
- Сырые события — исходные данные от всех источников
- Нормализованные данные — после нормализации и сопоставления
- Агрегаты — предварительно агрегированные данные для дашбордов
- Справочники — профессии, отрасли, направления, компетенции
- Журналы — логи операций, аудит
Взаимодействие с другими подсистемами¶
- Получает события от: LED-медиаплатформа, ПрофСтарт, Обратная связь, внешние ПАК
- Предоставляет данные для: Цифровой профиль (агрегированная статистика для рекомендательной модели)
- Использует Идентификацию для аутентификации пользователей аналитики
- Использует справочники профессий, отраслей, направлений из CMS