Skip to content

Gestión de NFTs

Requisitos previos de acceso

  • Permiso (módulo): manageToken
  • Licencia/Feature: MANAGE_NFTS
  • Contenedor del menú: TOKENIZACIÓN → grupo TokenizaciónGestionar NFTs

Qué es / cuándo usar

Catálogo de NFTs / activos tokenizados (bienes raíces, certificados, coleccionables, paquetes). Aquí el operador crea, edita, visualiza y desactiva NFTs, los asigna a una colección y a una categoría, define el precio y las monedas aceptadas, configura comisiones de billeteras, sortea y envía (distribuye) NFTs a usuarios.

La creación de un NFT exige que la colección y la categoría ya existan.

Requisitos previos

  • Permiso: manageToken (doble — enum CPM + módulo dinámico en la BD).
  • Licencia/Feature: MANAGE_NFTS.
  • Dependencias: la Colección debe existir (Colecciones); la Categoría debe existir y permitir la creación de producto (allow_product_creation = true, en Categoría de NFTs).

Paso a paso (listado)

  1. Acceda al menú Tokenización → Gestionar NFTs.
  2. Busque por nombre (búsqueda con debounce) y filtre por colección.
  3. Use los íconos de cada fila: sorteo (ruleta), enviar (distribuir), editar, visualizar y eliminar.
  4. Use Crear NFT para abrir el formulario.

Filtros y columnas

Filtro / ColumnaQué muestraOrigen del dato
Búsqueda por nombreFiltra por name (server-side, paginado)getAllAssets({ name, collectionId, limit, offset })
ColecciónFiltra por collectionIdgetCollections()
Nombre / Tipo / ValorIdentificación, tipo (NFT) y precio actual en tokensTokenController (assets)
AccionesRuleta, enviar, editar, visualizar, eliminar

Formulario de Crear / Editar NFT

El formulario está dividido en grupos (Catálogo, Comercial, Configuraciones) con secciones. En creación, la sección "Información adicional" permanece bloqueada (solo disponible en edición/visualización).

Sección: General (obligatoria)

CampoQué es¿Obligatorio?Efecto en el sistema/backend
ColecciónColección a la que pertenece el NFTcollection.id. Define el contrato/estándar on-chain (ERC-721 o regulado).
CategoríaCategoría del activocategory_id — solo categorías con allow_product_creation.
NombreNombre del activoname.
DescripciónDescripcióndescription.
CantidadCantidad de ítems a emitirquantity.
CaracterísticasPares clave/valor libres o por plantillaNocharacteristics[].

Sección: Precios (obligatoria)

CampoQué es¿Obligatorio?Efecto en el sistema/backend
PrecioValor del activo en moneda fiduciariaSí*price (BigNumber). *Puede omitirse con skipPrice.
Monedas aceptadasTokens aceptados como pago (checkbox por token)Nopayment_types[].
Permite splitDistribuye el pago entre los tokens marcadosNoallow_split + porcentaje por token (paymentPrice). La suma debe totalizar 100%.
Tipo de transacción / TasaImpuesto/tasa de la transacción (Porcentual o Absoluto)NotaxType (A/P) + transactionTax.

Sección: Medios (obligatoria)

CampoQué es¿Obligatorio?Efecto en el sistema/backend
FotosImágenes del activophotos[] (al menos una).

Sección: Billeteras / Comisiones (opcional)

CampoQué es¿Obligatorio?Efecto en el sistema/backend
Billetera + comisiónBilleteras que reciben comisión de la ventaNowallets_commission[] = { id, commission }.

Sección: Publicación (configuraciones)

Agrupa los toggles de comportamiento del NFT y los campos de token vinculado/liquidez. La referencia completa de cada toggle está en Referencia de configuraciones (toggles).

Campos no-toggle de esta sección:

CampoQué es¿Obligatorio?Efecto en el sistema/backend
Token vinculado para distribuciones futurasToken usado en distribuciones/claims realizados desde el NFTNotokenClaimId. Define qué token recibe el tenedor cuando el NFT distribuye valor.
Token de liquidez para distribuciones futurasToken de liquidez ofrecido como alternativa de recepciónNoliquidityToken. Habilita la opción de que el tenedor elija recibir en fiat/token (ver block_liquidity_option).
Estado internoEstado operacional usado internamente para el NFTNostatus. No se muestra al usuario final.

Sección: Información adicional (solo en edición)

projectUrl, projectDescription, projectCustomHtml y contract — información del proyecto y dirección del contrato.

Referencia de configuraciones (toggles)

El NFT posee 8 toggles distribuidos entre las secciones Precios (allow_split) y Publicación (los demás). Todos son booleanos y se almacenan en la entidad assets del TokenController. La tabla a continuación cubre el 100% de ellos.

Etiqueta (pantalla)Campo (ngModel)Qué hace (efecto en el backend)Cuándo usar
Publicar NFT inmediatamenteasset.enabledPublica el NFT en las plataformas (Midas-Web/Trade) y lo incluye en los listados de catálogo. Desactivado, el NFT existe pero permanece oculto para los usuarios. La "eliminación" del NFT en el listado también es un soft-delete que borra este campo (enabled = false + disabled = now).Activar cuando la oferta esté lista para el público. Dejar desactivado en borradores/prelanzamiento.
Bloquear ventaasset.block_sellBloquea la venta primaria. En market.core.handler, la reserva de compra lanza un error (NFT sale is blocked) cuando block_sell = true, excepto en llamadas administrativas (isAdminCall). Se bloquea automáticamente en Quema de NFTs (snapshot en nft_burn_operation.previous_block_sell para reversión manual).Para cerrar la venta primaria de una oferta (agotada, suspendida, en recall) sin eliminar el NFT.
Bloquear reventaasset.block_resellImpide el mercado secundario: en la app del tenedor (Midas-Web card-list), las acciones de reventa, subasta y split quedan ocultas cuando block_resell = true. También se bloquea junto con block_sell durante la Quema de NFTs (snapshot en previous_block_resell).NFTs no revendibles: entradas nominales, cuotas con lock-up, activos regulados que no pueden circular.
Solo paqueteasset.only_packageElimina el NFT del catálogo individual: la consulta de listado público (AssetsDAO) agrega only_package = false, por lo que el NFT solo aparece/se vende dentro de un Paquete de NFTs. La pantalla de detalle del producto también oculta el checkout individual. Los administradores y el perfil de colección siguen viéndolo.Cuando el NFT solo debe adquirirse incluido en un paquete, nunca de forma individual.
Gestionar accesoasset.handle_accessTrata el NFT como control de acceso/credencial: al concluir la compra, market.core.handler crea un token de acceso de usuario en el CPM para el comprador (y elimina el del vendedor en la reventa). El NFT pasa a aparecer en la lista de "access assets" del administrador.Entradas, suscripciones, áreas restringidas — cualquier NFT que otorgue un derecho de acceso vinculado a la posesión.
Bloquear preferencia de liquidezasset.block_liquidity_optionCongela la elección de la forma de recepción de las distribuciones: changeDistributionType (assets.core.handler) lanza un error cuando es true, y en la app del tenedor los íconos de "recibir en fiat/token" quedan deshabilitados. Actúa junto con el Token de liquidez configurado.Cuando la forma de liquidez ya está definida por la oferta y el tenedor no puede cambiarla.
Excluir del Informe de Renta (IRPF)asset.block_from_irpfExcluye el NFT del informe de IRPF: el irpf.snapshot.handler y el generador de informe filtran (!block_from_irpf) tanto el snapshot base como el snapshot final, eliminando el activo de las líneas de rendimiento.Activos que no deben figurar en el Informe de Renta del usuario (p. ej.: ítems no tributables, utilidades internas).
Permite Split de NFTsasset.allow_splitDos efectos: (1) en Precios, habilita distribuir el pago entre varios tokens aceptados (porcentaje por token, suma = 100%); (2) en la app del tenedor, habilita la acción de fraccionar (split) el NFT en la reventa — el ícono de split solo aparece con allow_split = true, block_resell = false y price > 0.Cuando el NFT puede fraccionarse y/o pagarse con prorrateo entre múltiples tokens.

Relación con la Quema de NFTs

block_sell y block_resell no son solo configuración manual: la Quema de NFTs activa los dos automáticamente en la misma transacción atómica del encabezado de la quema, almacenando los valores anteriores en nft_burn_operation.previous_block_sell / previous_block_resell para permitir la reversión manual. Bloquear el NFT en T0 impide la compra y reventa mientras el watcher procesa la liquidación on-chain (sink wallet o quema nativa).

Efectos no evidentes

  • block_sell tiene excepción de administrador: las llamadas con isAdminCall ignoran el bloqueo — el operador aún puede distribuir/vender desde la administración incluso con la venta pública bloqueada.
  • only_package no desaparece para el admin: el NFT sigue siendo visible para los administradores y en el perfil de la colección; el filtro only_package = false solo aplica al catálogo público del usuario.
  • allow_split es dos funciones en un toggle: controla tanto el prorrateo de pago (Precios) como el permiso de fraccionar el NFT en el mercado secundario.

Acciones y modales

  • Crear / Editar: modal de confirmación (bottom sheet). La creación envía el payload completo (createAssets); la edición envía el subconjunto editable (editAssets).
  • Sorteo (ruleta): abre la ruleta de sorteo — todos los usuarios que poseen ese NFT participan; al girar, se muestra el correo electrónico del ganador y el ID del NFT.
  • Informe de NFT: en la pantalla de sorteo, exporta la lista de usuarios con indicación de quién posee el NFT (correo electrónico, nombre, teléfono, fecha de registro, estado de la cuenta).
  • Enviar (distribuir) NFT: modal de distribución — el administrador envía el NFT a usuarios específicos.
  • Eliminar: desactivación lógica (enabled = false + disabled = now), preservando el historial.

Reglas de negocio / precauciones

Atención

  • Colección y categoría son requisitos previos — sin ellas el guardado no se habilita.
  • Mint exclusivo del job (crowdfunding): para activos de crowdfunding, la emisión y la quema de NFTs ocurren solo mediante el job de crowdfunding. La distribución financiera no emite NFT, y el TKN_OWNER no emite ni revende — esto garantiza la invariante captado == NFTs por construcción.
  • block_sell / block_resell bloquean la venta primaria y secundaria; también se activan automáticamente en el flujo de Quema de NFTs.

Irreversible

  • La emisión (mint) de NFTs on-chain no tiene rollback. Verifique la colección, la categoría y la cantidad antes de confirmar.
  • Valores financieros: precio, comisiones y tasas son BigNumber — sin redondeo.
  • Estado APPROVED: las distribuciones/envíos en nombre de un usuario requieren que el usuario destinatario tenga status === 'APPROVED'.

Ejemplos

Escenario 1 — NFT de bien raíz tokenizado con comisión de billetera
  1. General: colección "Imóveis SP", categoría "Imóveis", nombre, descripción, cantidad 100.
  2. Precios: precio R$ 1.000,00; monedas aceptadas: BRLX. Tipo Porcentual, tasa 2%.
  3. Billeteras: agregar la billetera del socio con commission = 5.
  4. Medios: fotos del inmueble.
  5. Publicación: Publicar anuncio activado, Bloquear reventa según la regla de la oferta.
  6. Guardar. Resultado: 100 cuotas-NFT publicadas, con comisión del 5% a la billetera del socio.
Escenario 2 — NFT de acceso (entrada) no revendible
  1. General: colección "Eventos", categoría "Ingressos", cantidad según aforo.
  2. Publicación: activar Gestionar acceso y Bloquear reventa.
  3. Precios: precio de la entrada; moneda aceptada según la operación.
  4. Guardar. Resultado: el NFT funciona como entrada, sin mercado secundario.

Pantallas relacionadas