Темный режим
API Engagement Score Workflow
1. Обзор workflow
API для расчета показателей вовлеченности сотрудников на основе данных опросов.
| Название | api-engagement-score |
|---|---|
| База данных | PostgreSQL (raw_survey_data, companies, surveys) |
| Основной метод | 1 webhook-узел для расчета метрик |
| Основные метрики | Engagement Score, eNPS, сегментация по уровням вовлеченности |
2. POST /metric/score
Расчет комплексных метрик вовлеченности сотрудников компании.
Цепочка выполнения:
-
Webhook (/metric/score)
Принимает запрос с параметрами:
headers.authorization- токен компанииquery.companyId- ID компании (обязательный)query.type- тип данных (всегда "all" в примере)
-
Edit Fields1
Извлекает параметры из запроса:
query.token = $json.headers.authorization query.departmentId = $json.query.departmentId query.type = $json.query.type query.paramNameMetric = $json.query.paramNameMetric -
Postgres4
Проверяет валидность токена:
SELECT "companyId" FROM companies WHERE "token" = $1;Возвращает companyId для дальнейших запросов.
-
Merge1
Объединяет данные из Edit Fields1 и Postgres4.
-
Code
Вычисляет даты для анализа данных:
Логика работы:
- Получает текущую дату (currentDate)
- Вычисляет даты:
- calculatedDate - 6 месяцев назад
- changeDate - 1 месяц назад
- changeDate2 - 2 месяца назад
- Форматирует все даты в строки
Пример выходных данных:
{ "currentDate": "2024-06-15 14:30:00", "calculatedDate": "2023-12-15 14:30:00", "changeDate": "2024-05-15 14:30:00", "changeDate2": "2024-04-15 14:30:00" } -
Postgres get metrics 6m
Получает данные опросов за последние 6 месяцев:
SELECT "departmentId", "paramNameMetric", "value", "userId", "questionId", "surveyId", "createdAt" FROM "raw_survey_data" WHERE "companyId" = $1 AND "createdAt" > $2 AND "questionId" <> 123Параметры:
- $1 - companyId из проверки токена
- $2 - calculatedDate (6 месяцев назад)
-
Postgres get participation
Получает общее количество респондентов:
SELECT SUM("total_respondents_count")::int AS respondents FROM surveys WHERE "companyId" = $1 AND "start_date" <= CURRENT_TIMESTAMP AND "status" != 'draft' -
Code1
Основная логика расчета метрик вовлеченности:
Ключевые функции:
- filter_data_by_date_range - фильтрация данных по временному периоду
- calculate_metric_averages - расчет средних значений по метрикам и отделам
- calculate_department_averages - усреднение показателей по отделам
- calculate_overall_engagement_score - расчет общего Engagement Score
- calculate_enps - расчет eNPS (Employee Net Promoter Score)
Основные метрики:
- overallEngagementScore - общий показатель вовлеченности (0-100)
- Высокий: ≥69
- Средний: 50-68
- Низкий: <50
- engagementScoreLast150Days - показатель за последние 150 дней (с откатом на 30 дней)
- engagementScoreChangePercentage - изменение показателя в %
- market_avg - сравнение с рыночным эталоном (69)
- enps_score - показатель eNPS (-100 до 100)
- Плохой: <0
- Нормальный: 0-29
- Хороший: 30-69
- Выдающийся: ≥70
Сегментация сотрудников:
- Невовлечённые - 0-3.3 баллов
- Слабо вовлечённые - 3.4-6.6 баллов
- Вовлечённые - 6.7-10 баллов
-
Merge
Объединяет результаты расчетов и данные о participation.
-
Respond to questions/get
Возвращает полный набор рассчитанных метрик.
Пример ответа:
[
{
"overallEngagementScore": 72,
"engagementLevel": "Высокий",
"engagementScoreLast150Days": 68,
"engagementScoreChangePercentage": 4,
"market_avg": 69,
"market_avg_description": "Выше рынка на 3%",
"market_avg_state": "good",
"enps_score": 45,
"enps_description": "Хороший"
},
{
"engagementValues": [
{
"metric": "Невовлечённые",
"count": 12,
"percentage": 15.0,
"description": "Сотрудники с оценками от 0 до 3.3 баллов"
},
{
"metric": "Слабо вовлечённые",
"count": 30,
"percentage": 37.5,
"description": "Сотрудники с оценками от 3.4 до 6.6 баллов"
},
{
"metric": "Вовлечённые",
"count": 38,
"percentage": 47.5,
"description": "Сотрудники с оценками от 6.7 до 10 баллов"
}
]
},
{
"participation": 80
}
]
Особенности реализации:
- Анализ временных периодов:
- Основной анализ - за последние 6 месяцев
- Сравнение с предыдущим периодом (150 дней с откатом на 30 дней)
- Обработка данных:
- Фильтрация по companyId
- Исключение questionId=123 (технические вопросы)
- Группировка по departmentId и paramNameMetric
- Безопасность:
- Обязательная проверка токена компании
- Параметризованные SQL-запросы
- Фильтрация входных данных