Skip to content

Club de Recompensas — Niveles

Requisitos de acceso

  • Permiso (módulo): viewRewardsProgram (para leer) / manageRewardsLevels (para crear/editar/eliminar/reordenar)
  • Licencia/Feature: REWARDS_CLUB
  • Contenedor del menú: GENERAL → grupo Club de Recompensas

Qué es / cuándo usar

Gestiona los niveles (tiers) del club de forma totalmente dinámica: puedes crear tantos niveles como quieras, con nombre libre, threshold (umbral de entrada), color, ícono y lista de beneficios. El orden se define por drag-and-drop. Cada nivel puede tener un NFT de nivel generado inline.

Úsalo al diseñar la escalera de fidelidad (ej.: Bronce → Plata → Oro → Diamante) y al ajustar umbrales/beneficios a lo largo del tiempo.

Pre-condiciones

  • Permiso: viewRewardsProgram para leer; manageRewardsLevels para editar (permiso doble: enum CPM + módulo dinámico en la DB).
  • Licencia/Feature: REWARDS_CLUB.
  • Dependencias de otras pantallas: el Programa define la métrica y el fiat de referencia — esto cambia cómo se muestra el threshold: en pts cuando la métrica es POINTS, o en la moneda de referencia cuando es financiera.

Paso a paso

  1. Accede al menú Club de Recompensas → Niveles (/rewards-club/levels).
  2. La lista muestra los niveles ordenados; arrastra por las asas para reordenar (persiste automáticamente).
  3. Haz clic en Nuevo (o en un nivel para editar) — abre el drawer lateral.
  4. Completa el código del nivel, nombre, descripción, threshold, color, ícono y beneficios.
  5. Guarda. Para generar el NFT del nivel, usa el botón Generar NFT en la fila.

Campos

CampoQué es¿Obligatorio?Efecto en el sistema/backend
Nivel (tier)Código del nivel (string libre, ej.: ORO)Normalizado a MAYÚSCULAS con _ en lugar de espacios. Es la clave del nivel (junto al programa). No puede duplicarse al crear.
Nombre (customNamename)Nombre mostrado del nivelEtiqueta amigable del nivel.
Descripción (description)Texto descriptivoNoTexto libre.
Threshold (thresholdminThresholdFiat)Umbral mínimo para entrar en el nivelComparado con la métrica del programa. Mostrado en pts (métrica POINTS) o en la moneda de referencia (métrica financiera). Se transmite como string BigNumber.
Color (badgeColorcolorHex)Color del badge (hex)Color visual del nivel; hay paleta sugerida en ciclo.
Ícono (iconName)Ícono del badge (Material Icons)NoQuick-picker con sugerencias (trofeo, medalla, diamante…).
Beneficios (benefits[])Lista de beneficios del nivelNoEditor por líneas. Las líneas en formato clave: valor se convierten en beneficios estructurados (ej.: indicationBonusPercent: 5); las demás se convierten en un label.
Orden (ordersortOrder)Posición del nivelSí (gestionado)Definido por drag-and-drop; renumerado en múltiplos de 10 (10, 20, 30…) para facilitar inserciones futuras.
NFT del nivel (tierNftAssetId)Activo NFT que representa el nivelNoundefined = aún no generado. El botón Generar NFT crea el activo via tknLib (idempotente).

Acciones y modales

  • Reordenar (drag-and-drop): persiste el nuevo orden via PATCH .../levels/reorder inmediatamente (actualización optimista; en error, recarga para deshacer).
  • Guardar nivel: PUT /v1/rewards-club/admin/levels/:tier. Requiere step-up (contraseña + MFA). Valida nivel obligatorio, ausencia de duplicidad al crear, y nombre completado.
  • Eliminar nivel: DELETE .../levels/:tier con step-up. Bloqueado si hay usuarios en el nivel — el backend responde ok=false + reason=USERS_IN_TIER + usersInTier, y la UI muestra cuántos usuarios impiden la eliminación.
  • Generar NFT: POST .../levels/:tier/generate-nft. Idempotente: si ya existe, retorna alreadyExists=true y solo vincula el assetId.

Reglas de negocio / precauciones

Atención

  • No es posible eliminar un nivel que tenga usuarios posicionados en él — vacía/migra los usuarios primero. Esto protege la integridad del tier engine.
  • El NFT de nivel debe estar bloqueado para venta/reventa (block_sell y block_resell) — es un sello, no un activo negociable. La generación inline ya crea el activo adecuado.
  • La visualización del threshold depende de la métrica del Programa: verifica allí antes de definir umbrales (pts vs. fiat).

Irreversible

  • Generar NFT crea un activo on-chain via tknLib. La operación es idempotente (no duplica), pero el activo creado representa el nivel permanentemente — trata el tierNftAssetId como definitivo para ese nivel.
  • Valores financieros: los thresholds se transmiten como string BigNumber — sin redondeo.

Ejemplos

Escenario 1 — Escalera financiera en BRL

Programa con métrica DEPOSIT_VOLUME, ventana LIFETIME, fiat BRL.

  1. Crea Bronce (threshold 0), Plata (5000), Oro (20000), Diamante (100000).
  2. Define colores/íconos distintos; agrega beneficios (ej.: indicationBonusPercent: 5 en Oro).
  3. Arrastra para garantizar el orden Bronce < Plata < Oro < Diamante.
  4. Genera el NFT de cada nivel con el botón inline.
Escenario 2 — Escalera por puntos

Programa con métrica POINTS.

  1. Los thresholds pasan a mostrarse en pts. Define, ej.: Bronce 0, Plata 1000, Oro 5000.
  2. Asegúrate de tener misiones que otorguen puntos en Misiones para que los usuarios acumulen puntos.
Escenario 3 — Intento de eliminación bloqueado

Al eliminar "Plata" con 37 usuarios en el nivel:

  1. La confirmación es aceptada, pero el backend retorna USERS_IN_TIER con usersInTier=37.
  2. La UI informa que 37 usuarios impiden la eliminación.
  3. Ajusta los thresholds/recomputa para migrar los usuarios y vuelve a intentarlo.

Pantallas relacionadas