Skip to content

Cronograma de Pagos (Crowdfunding)

Requisitos previos de acceso

  • Permiso (módulo): manageCrowdfunding
  • Licencia/Feature: CROWDFUNDING habilitada en la licencia del tenant (Vault).
  • Contenedor del menú: GENERAL → grupo Productos → Crowdfunding (acción en la fila de la oferta)

Qué es / cuándo usar

El Cronograma de Pagos permite planificar los pagos previstos de una oferta de crowdfunding (intereses, amortizaciones, dividendos) y, en el momento adecuado, materializarlos como distribuciones programadas en el FinanceManagementService (FMS). Es el puente entre lo "prometido al inversor durante la captación" y la "distribución ejecutada automáticamente en la fecha".

Úselo cuando la oferta ya haya sido captada y tenga token generado: cada línea del cronograma se convierte en una distribution_request con scheduled_at, y un scheduler del FMS la ejecuta cuando llega la fecha — pagando a quien tenga el token en esa fecha (no en el momento de la materialización).

Requisitos previos

  • Permiso: manageCrowdfunding (enum estático CPM + módulo dinámico en el DB).
  • Licencia/Feature: CROWDFUNDING habilitada.
  • Dependencias: la oferta debe tener assetId (token/NFT ya generado) para materializar. Sin ello, es posible registrar líneas, pero no materializarlas.

Paso a paso

  1. En el listado de Crowdfunding, haga clic en el ícono Cronograma de pagos de la oferta.
  2. Use Agregar línea para cada pago previsto.
  3. Complete la fecha prevista, el tipo (ABSOLUTE/PERCENTAGE), el valor y, si es ABSOLUTE, la moneda/token.
  4. Guarde cada línea individualmente (Guardar línea).
  5. Cuando desee ejecutar, use Materializar — confirme en el diálogo. Las líneas pendientes se convierten en distribuciones programadas en el FMS.

Campos (por línea)

CampoQué es¿Obligatorio?Efecto en el sistema/backend
Orden (order_index)Posición de la línea en la secuenciaSí (automático)Calculado como max(order_index)+1; define el orden de ejecución.
Fecha prevista (expected_date)Cuándo debe ocurrir el pagoSe convierte en scheduled_at de la distribution_request. El scheduler del FMS (*/5 * * * *) busca requests SCHEDULED con scheduled_at <= NOW() y las ejecuta.
Tipo (type)ABSOLUTE (valor fijo) o PERCENTAGE (% sobre el total)Default PERCENTAGE. Determina cómo el FMS calcula el total a distribuir.
Valor (amount)Monto (ABSOLUTE) o porcentaje (PERCENTAGE)Debe ser > 0. Para PERCENTAGE, ≤ 100. No necesita sumar 100% entre las líneas — la consistencia es responsabilidad del operador.
Moneda/token (currency)Token a distribuirCondicionalObligatorio solo para ABSOLUTE. Para PERCENTAGE, el token se informa en la materialización.
Descripción (description)Texto libreNoIdentifica el pago (ej.: "1.ª cuota de intereses").

Acciones y modales

  • Agregar / Guardar línea: crea/actualiza la línea. Una línea inválida (sin fecha, valor ≤ 0, porcentaje > 100, ABSOLUTE sin moneda) es rechazada con un mensaje.
  • Eliminar línea: borra la línea. Las líneas ya materializadas no pueden eliminarse.
  • Materializar: abre una confirmación (window.confirm). Si hay una línea PERCENTAGE pendiente, es obligatorio indicar el token a distribuir (percentageTokenToDistribute). Al confirmar, el CrowdfundingService llama al FMS vía fin-lib, creando las distribuciones programadas. El resultado informa cuántas fueron materializadas y cuántas ignoradas (ya materializadas).

Reglas de negocio / consideraciones

Atención

  • PERCENTAGE calcula el total en la ejecución: total_to_distribute = supply × %, recorriendo los tenedores en la fecha. ABSOLUTE usa el valor fijo + token indicado.
  • Los tenedores se calculan en la ejecución, no en la materialización — quien tenga el token en la fecha de pago lo recibe. Esto preserva las transferencias secundarias entre la captación y el pago.
  • Solo es posible materializar si la oferta tiene assetId y todas las líneas pendientes están guardadas (con id).

Irreversible

  • Materializar crea distribuciones programadas en el FMS. Cada línea materializada se vuelve read-only individualmente; la tabla en su conjunto sigue siendo editable (se pueden agregar nuevas líneas después), pero la línea ya materializada no puede deshacerse.
  • Idempotencia: la distribution_request es idempotente por la clave (source = 'CROWDFUNDING_SCHEDULE', source_reference_id = schedule_entry_id). Las reejecutaciones son seguras. Al ejecutar la distribución vía FinLib, el errorCode E00021 "already processed" se trata como ÉXITO, no como error.
  • Valores financeiros: tratados como BigNumber — sin redondeo.

Ejemplos

Escenario 1 — Tres cuotas de intereses en porcentaje
  1. Agregue 3 líneas PERCENTAGE: 30/06 → 2%, 30/09 → 2%, 30/12 → 2% (descripciones "Intereses T2/T3/T4").
  2. Guarde cada línea.
  3. Haga clic en Materializar, indique el token de pago (ej.: tBRL) y confirme.
  4. El FMS crea 3 distribuciones SCHEDULED. En la fecha de cada una, el scheduler calcula supply × 2% y paga a los tenedores vigentes.
Escenario 2 — Amortización final en valor absoluto
  1. Agregue 1 línea ABSOLUTE con fecha 31/12, valor R$ 500.000 y moneda tBRL.
  2. Guarde y materialice.
  3. En la fecha, el FMS distribuye exactamente R$ 500.000 en tBRL, prorrateando entre los tenedores.
Escenario 3 — Agregar un pago extra después de materializar
  1. Una oferta ya tiene líneas materializadas (read-only).
  2. Agregue una nueva línea (la tabla sigue editable), guárdela y materialice de nuevo.
  3. Las líneas antiguas aparecen como ignoradas (idempotencia); solo la nueva es materializada.

Pantallas relacionadas