Skip to content

Clube de Recompensas — Níveis

Pré-requisitos de acesso

  • Permissão (módulo): viewRewardsProgram (para ler) / manageRewardsLevels (para criar/editar/excluir/reordenar)
  • Licença/Feature: REWARDS_CLUB
  • Contêiner do menu: GERAL → grupo Clube de Recompensas

O que é / quando usar

Gerencia os níveis (tiers) do clube de forma totalmente dinâmica: você cria quantos níveis quiser, com nome livre, threshold (limiar de entrada), cor, ícone e lista de benefícios. A ordem é definida por drag-and-drop. Cada nível pode ter uma NFT de tier gerada inline.

Use ao desenhar a escada de fidelidade (ex.: Bronze → Prata → Ouro → Diamante) e ao ajustar limiares/benefícios ao longo do tempo.

Pré-condições

  • Permissão: viewRewardsProgram para ler; manageRewardsLevels para editar (permissão dupla: enum CPM + módulo dinâmico no DB).
  • Licença/Feature: REWARDS_CLUB.
  • Dependências de outras telas: o Programa define a métrica e o fiat de referência — isso muda como o threshold é exibido: em pts quando a métrica é POINTS, ou na moeda de referência quando é financeira.

Passo a passo

  1. Acesse o menu Clube de Recompensas → Níveis (/rewards-club/levels).
  2. A lista mostra os níveis ordenados; arraste pelas alças para reordenar (persiste automaticamente).
  3. Clique em Novo (ou em um nível para editar) — abre o drawer lateral.
  4. Preencha código do tier, nome, descrição, threshold, cor, ícone e benefícios.
  5. Salve. Para gerar a NFT do nível, use o botão Gerar NFT na linha.

Campos

CampoO que éObrigatório?Efeito no sistema/backend
Tier (tier)Código do nível (string livre, ex.: OURO)SimNormalizado para MAIÚSCULAS com _ no lugar de espaços. É a chave do nível (junto do programa). Não pode duplicar ao criar.
Nome (customNamename)Nome exibido do nívelSimRótulo amigável do tier.
Descrição (description)Texto descritivoNãoTexto livre.
Threshold (thresholdminThresholdFiat)Limiar mínimo para entrar no nívelSimComparado com a métrica do programa. Exibido em pts (métrica POINTS) ou na moeda de referência (métrica financeira). Trafega como string BigNumber.
Cor (badgeColorcolorHex)Cor do badge (hex)SimCor visual do nível; há paleta sugerida em ciclo.
Ícone (iconName)Ícone do badge (Material Icons)NãoQuick-picker com sugestões (troféu, medalha, diamante…).
Benefícios (benefits[])Lista de benefícios do nívelNãoEditor por linhas. Linhas no formato chave: valor viram benefícios estruturados (ex.: indicationBonusPercent: 5); as demais viram um label.
Ordem (ordersortOrder)Posição do nívelSim (gerenciada)Definida por drag-and-drop; renumerada em múltiplos de 10 (10, 20, 30…) para facilitar inserções futuras.
NFT do tier (tierNftAssetId)Asset NFT que representa o nívelNãoundefined = ainda não gerado. O botão Gerar NFT cria o asset via tknLib (idempotente).

Ações e modais

  • Reordenar (drag-and-drop): persiste a nova ordem via PATCH .../levels/reorder imediatamente (atualização otimista; em erro, recarrega para desfazer).
  • Salvar nível: PUT /v1/rewards-club/admin/levels/:tier. Exige step-up (senha + MFA). Valida tier obrigatório, ausência de duplicidade ao criar, e nome preenchido.
  • Excluir nível: DELETE .../levels/:tier com step-up. Bloqueado se houver usuários no tier — o backend responde ok=false + reason=USERS_IN_TIER + usersInTier, e a UI mostra quantos usuários impedem a exclusão.
  • Gerar NFT: POST .../levels/:tier/generate-nft. Idempotente: se já existir, retorna alreadyExists=true e apenas vincula o assetId.

Regras de negócio / cuidados

Atenção

  • Não é possível excluir um nível que tenha usuários posicionados nele — esvazie/migre os usuários antes. Isso protege a integridade do tier engine.
  • A NFT do tier deve ser bloqueada para venda/revenda (block_sell e block_resell) — é um selo, não um ativo negociável. A geração inline já cria o asset adequado.
  • A exibição do threshold depende da métrica do Programa: confira lá antes de definir limiares (pts vs. fiat).

Irreversível

  • Gerar NFT cria um asset on-chain via tknLib. A operação é idempotente (não duplica), mas o asset criado representa o nível permanentemente — trate o tierNftAssetId como definitivo para aquele tier.
  • Valores financeiros: thresholds trafegam como string BigNumber — sem arredondamento.

Exemplos

Cenário 1 — Escada financeira em BRL

Programa com métrica DEPOSIT_VOLUME, janela LIFETIME, fiat BRL.

  1. Crie Bronze (threshold 0), Prata (5000), Ouro (20000), Diamante (100000).
  2. Defina cores/ícones distintos; adicione benefícios (ex.: indicationBonusPercent: 5 no Ouro).
  3. Arraste para garantir a ordem Bronze < Prata < Ouro < Diamante.
  4. Gere a NFT de cada nível pelo botão inline.
Cenário 2 — Escada por pontos

Programa com métrica POINTS.

  1. Os thresholds passam a ser exibidos em pts. Defina, ex.: Bronze 0, Prata 1000, Ouro 5000.
  2. Garanta missões pontuadoras em Missões para que os usuários acumulem pontos.
Cenário 3 — Tentativa de exclusão bloqueada

Ao excluir "Prata" com 37 usuários no tier:

  1. A confirmação é aceita, mas o backend retorna USERS_IN_TIER com usersInTier=37.
  2. A UI informa que 37 usuários impedem a exclusão.
  3. Ajuste thresholds/recompute para migrar os usuários e tente novamente.

Telas relacionadas