Темный режим

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

Расчет комплексных метрик вовлеченности сотрудников компании.

Цепочка выполнения:

  1. Webhook (/metric/score)

    Принимает запрос с параметрами:

    • headers.authorization - токен компании
    • query.companyId - ID компании (обязательный)
    • query.type - тип данных (всегда "all" в примере)
  2. Edit Fields1

    Извлекает параметры из запроса:

    query.token = $json.headers.authorization
    query.departmentId = $json.query.departmentId
    query.type = $json.query.type
    query.paramNameMetric = $json.query.paramNameMetric
  3. Postgres4

    Проверяет валидность токена:

    SELECT "companyId" FROM companies WHERE "token" = $1;

    Возвращает companyId для дальнейших запросов.

  4. Merge1

    Объединяет данные из Edit Fields1 и Postgres4.

  5. Code

    Вычисляет даты для анализа данных:

    Логика работы:

    1. Получает текущую дату (currentDate)
    2. Вычисляет даты:
      • calculatedDate - 6 месяцев назад
      • changeDate - 1 месяц назад
      • changeDate2 - 2 месяца назад
    3. Форматирует все даты в строки

    Пример выходных данных:

    {
      "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"
    }
  6. 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 месяцев назад)

  7. Postgres get participation

    Получает общее количество респондентов:

    SELECT SUM("total_respondents_count")::int AS respondents
    FROM surveys
    WHERE 
      "companyId" = $1
      AND "start_date" <= CURRENT_TIMESTAMP
      AND "status" != 'draft'
  8. Code1

    Основная логика расчета метрик вовлеченности:

    Ключевые функции:

    1. filter_data_by_date_range - фильтрация данных по временному периоду
    2. calculate_metric_averages - расчет средних значений по метрикам и отделам
    3. calculate_department_averages - усреднение показателей по отделам
    4. calculate_overall_engagement_score - расчет общего Engagement Score
    5. 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 баллов
  9. Merge

    Объединяет результаты расчетов и данные о participation.

  10. 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-запросы
    • Фильтрация входных данных