Skip to content

Cronograma de Pagamentos (Crowdfunding)

Pré-requisitos de acesso

  • Permissão (módulo): manageCrowdfunding
  • Licença/Feature: CROWDFUNDING habilitada na licença do tenant (Vault).
  • Contêiner do menu: GERAL → grupo Produtos → Crowdfunding (ação na linha da oferta)

O que é / quando usar

O Cronograma de Pagamentos permite planejar os pagamentos previstos de uma oferta de crowdfunding (juros, amortizações, dividendos) e, no momento certo, materializá-los como distribuições agendadas no FinanceManagementService (FMS). É a ponte entre o "prometido ao investidor durante a captação" e a "distribuição executada automaticamente na data".

Use quando a oferta já foi captada e tem token gerado: cada linha do cronograma vira uma distribution_request com scheduled_at, e um scheduler do FMS a executa quando a data chega — pagando quem detém o token na data (não no momento da materialização).

Pré-condições

  • Permissão: manageCrowdfunding (enum CPM + módulo dinâmico no DB).
  • Licença/Feature: CROWDFUNDING habilitada.
  • Dependências: a oferta precisa ter assetId (token/NFT já gerado) para materializar. Sem isso, é possível cadastrar linhas, mas não materializá-las.

Passo a passo

  1. Na listagem de Crowdfunding, clique no ícone Cronograma de pagamentos da oferta.
  2. Use Adicionar linha para cada pagamento previsto.
  3. Preencha data prevista, tipo (ABSOLUTE/PERCENTAGE), valor e, se ABSOLUTE, a moeda/token.
  4. Salve cada linha individualmente (Salvar linha).
  5. Quando quiser efetivar, use Materializar — confirme no diálogo. As linhas pendentes viram distribuições agendadas no FMS.

Campos (por linha)

CampoO que éObrigatório?Efeito no sistema/backend
Ordem (order_index)Posição da linha na sequênciaSim (automático)Calculado como max(order_index)+1; define a ordem de execução.
Data prevista (expected_date)Quando o pagamento deve ocorrerSimVira scheduled_at da distribution_request. O scheduler do FMS (*/5 * * * *) busca requests SCHEDULED com scheduled_at <= NOW() e executa.
Tipo (type)ABSOLUTE (valor fixo) ou PERCENTAGE (% sobre o total)SimDefault PERCENTAGE. Determina como o FMS calcula o total a distribuir.
Valor (amount)Montante (ABSOLUTE) ou percentual (PERCENTAGE)SimDeve ser > 0. Para PERCENTAGE, ≤ 100. Não precisa somar 100% entre as linhas — a consistência é responsabilidade do operador.
Moeda/token (currency)Token a distribuirCondicionalObrigatório só para ABSOLUTE. Para PERCENTAGE, o token é informado na materialização.
Descrição (description)Texto livreNãoIdentifica o pagamento (ex.: "1ª parcela de juros").

Ações e modais

  • Adicionar / Salvar linha: cria/atualiza a linha. Linha inválida (sem data, valor ≤ 0, percentual > 100, ABSOLUTE sem moeda) é recusada com mensagem.
  • Remover linha: exclui a linha. Linhas já materializadas não podem ser removidas.
  • Materializar: abre confirmação (window.confirm). Se houver linha PERCENTAGE pendente, é obrigatório informar o token a distribuir (percentageTokenToDistribute). Ao confirmar, o CrowdfundingService chama o FMS via fin-lib, criando as distribuições agendadas. O resultado informa quantas foram materializadas e quantas ignoradas (já materializadas).

Regras de negócio / cuidados

Atenção

  • PERCENTAGE calcula o total na execução: total_to_distribute = supply × %, varrendo os holders na data. ABSOLUTE usa o valor fixo + token informado.
  • Holders são calculados na execução, não na materialização — quem detém o token na data do pagamento recebe. Isso preserva transferências secundárias entre a captação e o pagamento.
  • Só é possível materializar se a oferta tiver assetId e todas as linhas pendentes estiverem salvas (com id).

Irreversível

  • Materializar cria distribuições agendadas no FMS. Cada linha materializada vira read-only individualmente; a tabela como um todo continua editável (pode-se adicionar novas linhas depois), mas a linha já materializada não volta atrás.
  • Idempotência: a distribution_request é idempotente pela chave (source = 'CROWDFUNDING_SCHEDULE', source_reference_id = schedule_entry_id). Reexecuções são seguras. Ao executar a distribuição via FinLib, o errorCode E00021 "already processed" é tratado como SUCESSO, não erro.
  • Valores financeiros: tratados como BigNumber — sem arredondamento.

Exemplos

Cenário 1 — Três parcelas de juros em percentual
  1. Adicione 3 linhas PERCENTAGE: 30/06 → 2%, 30/09 → 2%, 30/12 → 2% (descrições "Juros T2/T3/T4").
  2. Salve cada linha.
  3. Clique Materializar, informe o token de pagamento (ex.: tBRL) e confirme.
  4. O FMS cria 3 distribuições SCHEDULED. Na data de cada uma, o scheduler calcula supply × 2% e paga os holders vigentes.
Cenário 2 — Amortização final em valor absoluto
  1. Adicione 1 linha ABSOLUTE com data 31/12, valor R$ 500.000 e moeda tBRL.
  2. Salve e materialize.
  3. Na data, o FMS distribui exatamente R$ 500.000 em tBRL, rateando entre os holders.
Cenário 3 — Adicionar pagamento extra após materializar
  1. Uma oferta já tem linhas materializadas (read-only).
  2. Adicione uma nova linha (a tabela continua editável), salve e materialize de novo.
  3. As linhas antigas aparecem como ignoradas (idempotência); só a nova é materializada.

Telas relacionadas