Транзакции баллов
GameTransaction: points, rule, track, status pending/completed/cancelled/converted; linkParent на источник.
Фреймворк геймификации: баллы, медали, серии активности, таблица лидеров — всё конфигурируется в metadata.
GameTransaction: points, rule, track, status pending/completed/cancelled/converted; linkParent на источник.
GameEarnedBadge с дедупликацией; rarity legendary=100, epic=50, rare=25, uncommon=10, common=5.
GameStreak: daily/weekly/monthly, counter, expiresAt, threshold, modifierValue; ExpireStreaks каждые 15 мин.
tracksMeta, rulesMeta, badges, entityProcessors в app/gamification.json — без правки кода базового модуля.
GamificationProcessorHook читает entityProcessors[entityType] и вызывает process() + streakCalculator.calculate().
AbstractGamificationProcessor и AbstractStreakCalculator — потребляющие модули наследуются и пишут только специфику.
Агрегация по GameReportingPeriod с change indicators; группировка медалей по пользователям с rarity-скорингом.
Модуль BPM2B base gamification — это фреймворк геймификации для платформы BPM2B. Он предоставляет сущности (транзакции баллов, медали, серии активности, отчётные периоды), абстрактные классы и интерфейсы; конкретные процессоры начисления баллов и условия выдачи медалей реализуются в потребляющих модулях через декларативные настройки в metadata.
GameTransaction: транзакция начисления / списания баллов — points (float), rule, track, статус pending / completed / cancelled / converted и parent (linkParent на сущность-источник баллов).GameEarnedBadge: заработанная медаль — badge, track, earnedAt, статус active / revoked; дедупликация по badge + user.GameStreak: серия активности — intervalType (daily / weekly / monthly), counter, expiresAt, modifierValue, threshold; статус active → expired или completed.app/gamification.json — tracksMeta, rulesMeta, badges с локализованными именами (nameEn / nameRu / nameKz), иконками, цветами и условиями получения; entityProcessors маппит entityType → класс процессора.GamificationProcessorHook по любой сущности читает app.gamification.entityProcessors[entityType], создаёт процессор через InjectableFactory, вызывает process() и затем streakCalculator.calculate().AbstractGamificationProcessor (createTransaction, hasTransaction, awardBadge, hasBadge, getTotalPoints, getOrCreateStreak), AbstractStreakCalculator (findActiveStreak, updateStreak, calculateExpiryDate) — потребляющие модули наследуются и реализуют только специфическую логику.ExpireStreaks каждые 15 минут переводит active-серии с истёкшим expiresAt в expired.GET /Leaderboard агрегирует транзакции по активному GameReportingPeriod и сравнивает с предыдущим (change indicators); GET /BadgeHonorBoard группирует медали по пользователям с rarity-скорингом (legendary=100, epic=50, rare=25, uncommon=10, common=5).Модуль предназначен как платформа для построения геймифицированных сценариев в любом проекте — продажи, поддержка клиентов, обучение, проектные команды. Внешних зависимостей нет; конкретные модули добавляют свои треки и процессоры через стандартные точки расширения metadata.
Покажем работу системы на ваших данных за 30 минут. Расскажем, как окупится в вашей отрасли, и подберём конфигурацию под ваши процессы.