Gamificação
Metas, rankings e prêmios para qualquer operação do CRM — não só o que as regras de venda permitiam —, num motor que conta cada fato uma única vez, mesmo quando ele é editado ou excluído.
- Papel
- Criador e mantenedor — concepção, primeira versão, motor de regras e front-end
- Período
- Set 2025 – Atual
- Contexto
- Groner
- Stack
- C# .NET SQL Server DynamoDB Lambda Vue.js TypeScript Bun Hono Prisma ECS SQS
Este trabalho é propriedade da Groner. Ele é descrito em nível de arquitetura, sem código-fonte nem dados de clientes.
Resumo
- 19 métricas, de vendas a conversas de WhatsApp encerradas
- Pontos, dinheiro, OTE e medalhas
- Cada fato contado uma vez — edições e exclusões incluídas
Contexto
Os clientes da Groner têm times de vendas e de campo, e querem premiá-los. O CRM já pagava comissão sobre propostas e vendas — mas só sobre elas.
O problema
Os clientes não conseguiam comissionar ou bonificar nenhuma outra operação da empresa; ficavam limitados às regras de negócio de propostas e vendas dentro do CRM. Visitas, instalações, tarefas e ordens de serviço — o trabalho que mantém uma empresa de energia solar funcionando — ficavam sem prêmio.
Meu papel
Idealizei o módulo e construí sozinho a primeira versão: um serviço separado em Bun, Hono e Prisma no ECS, alimentado pelo CRM via SQS. Depois que um colega portou o módulo para a API em .NET, construí o motor de regras e de reconciliação que roda hoje e novos tipos de meta, e sou eu quem mantém o módulo. O front-end também é quase todo meu.
Arquitetura
- Fatos de todo lugar. Cerca de 60 pontos do CRM — vendas, propostas, leads, tarefas, visitas, instalações, ordens de serviço e WhatsApp — informam um fato depois de gravar os próprios dados, com todos os envolvidos e o papel de cada um.
- O motor. Cruza cada fato com as metas ativas e aplica as regras de cada uma — quais papéis recebem crédito e quanto, valores mínimos, tetos, carências, filtros por origem do lead ou tipo de venda — antes de atualizar o progresso, o extrato de pontos e os prêmios.
- Etapas no tempo. Início de ciclo, metade, lembretes e encerramento vêm de um agendador apoiado no DynamoDB, com chaves de idempotência.
- Para os times. Rankings, projeção de progresso, níveis, sequências e conquistas no front-end; resgatar um prêmio em dinheiro gera um título a pagar no financeiro do CRM.
Decisões-chave
- Enviar o total, aplicar a diferença. Um fato não soma +1: ele informa o total com que deveria contribuir para cada meta. O motor guarda uma linha de histórico por meta e origem e aplica só a diferença com um update atômico — então um fato enviado duas vezes não muda nada, uma edição reenvia o novo total, e uma exclusão envia zero e estorna o crédito.
- Uma regra, dois caminhos. Cada uma das 13 regras tem uma versão por evento, para os fatos ao vivo, e uma versão por consulta, usada para reconstruir uma meta a partir das tabelas de origem. Um teste de paridade garante que os dois caminhos concordem.
- Prêmios seguros como dinheiro. Os pontos ficam num extrato, débitos só passam quando o saldo cobre, e resgates parciais rodam numa transação serializável.
A parte mais difícil
Performance e integridade. A gamificação roda dentro de cerca de 60 operações do CRM, então nunca pode deixá-las lentas nem quebrá-las — os erros dela são registrados, nunca propagados — e ainda assim precisa contar cada fato exatamente uma vez.
Por isso as regras não acessam o banco de dados por meta, cada evento carrega detalhes extras numa única consulta e só quando alguma meta precisa deles, as buscas de usuários vão em lote e os resumos são agregados no SQL. Essa última parte importa quando o pool de conexões é compartilhado por centenas de bancos de dados de clientes.
Resultados
- As empresas premiam o trabalho que importa para elas: 19 métricas, de vendas e propostas a visitas técnicas, instalações e conversas de WhatsApp encerradas.
- Metas para a empresa toda, uma filial, um time ou uma pessoa, fixas ou recorrentes, pagas em pontos, dinheiro, OTE ou medalhas — com uma loja de pontos por cima.
- Notificações mantêm os times no ritmo: na metade da meta, nos últimos dias e quando ela estagna.