Análise dos gaps entre os requisitos da Resolução CVM nº 88 e a implementação atual da plataforma BWB Tokenization.
Este documento mapeia cada requisito da CVM 88 em relação à implementação atual do código, categorizando as lacunas (gaps) em três camadas:
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Valor alvo máximo ≤ R$ 15M | ✅ N/A (off-chain) | ❌ Gap Sem validação em `createOffering`/`updateOffering`. Campos `minTargetAmount`/`maxTargetAmount` ausentes no esquema |
❌ Gap Sem campos de UI para valores alvo |
Necessário campos no esquema + validação + UI |
| Prazo de captação ≤ 180 dias | ✅ N/A (off-chain) | ❌ Gap Sem `campaignStartDate`/`campaignEndDate` no esquema. Sem validação de 180 dias |
❌ Gap Sem seletor de data para datas da campanha |
Necessário campos no esquema + validação + UI |
| Período de desistência ≥ 5 dias | ✅ N/A (off-chain) | ❌ Gap Sem lógica de retirada/cancelamento de investimento. Sem rastreamento de `canWithdrawUntil` |
❌ Gap Sem mecanismo de retirada no fluxo de investimento |
Investimento completo + fluxo de retirada ausente |
| Emissor = sociedade de pequeno porte | ✅ N/A (off-chain) | ❌ Gap Sem validação de receita (≤ R$ 40M). Sem campo `annualRevenue` na organização |
❌ Gap Sem campo de receita do emissor nas configurações da organização |
Necessário campo no esquema da organização + validação |
| Escrituração ou controle de titularidade | ❌ Gap Contratos de token existem, mas sem módulo formal de controle de titularidade |
❌ Gap Sem contas de titularidade individualizadas. Sem sincronização periódica (regras de 7 dias / 24h) |
❌ Gap Sem painel de titularidade para o emissor |
Gap maior - ver Seção 10 |
| Somatório anual ≤ R$ 15M por emissor | ✅ N/A (off-chain) | ❌ Gap Sem consulta de limite anual cruzado por emissor |
❌ Gap Sem aviso/bloqueio quando o emissor se aproxima do limite |
Necessário consulta agregada + validação |
| Intervalo 120 dias entre ofertas | ✅ N/A (off-chain) | ❌ Gap Sem validação de período de espera (cooling-off) entre ofertas |
❌ Gap Sem feedback na UI sobre o período de espera |
Necessário verificação de data na criação da oferta |
| Restrição de uso de recursos | ✅ N/A (contratual) | ✅ N/A (cláusula contratual) | ❌ Gap Sem divulgação das restrições de uso de recursos |
Contratual, não técnico |
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Limite R$ 20k/ano (investidor comum) | ❌ Gap Sem aplicação de limite de investimento on-chain |
❌ Gap Sem tabela `investments`. Sem consulta de soma anual por investidor. Flag `appliesRetailLimits` existe mas não é aplicada |
❌ Gap Sem exibição ou bloqueio de limite no fluxo de investimento |
Gap crítico - necessário rastreamento de investimentos |
| Investidor líder sem limite | ✅ N/A | ❌ Gap Sem flag `isLeadInvestor` ou lógica de exceção |
❌ Gap Sem UI para designação de investidor líder |
Necessário flag + exceção |
| Investidor qualificado sem limite | ✅ N/A | ⚠️ Parcial Campo `investorQualification: 'qualified'` existe no KYC L1, não aplicado no investimento |
⚠️ Parcial Passo de investidor qualificado existe no onboarding (checkbox). Sem aplicação no momento do investimento |
Necessário lógica de aplicação |
| Renda/investimentos > R$ 200k → 10% | ✅ N/A | ❌ Gap Sem campos `annualGrossIncome`/`financialInvestments`. Sem cálculo de 10% |
❌ Gap Sem formulário de declaração do Anexo B |
Necessário campos no esquema + cálculo + formulário |
| Declaração Anexo A (qualificado) | ✅ N/A | ⚠️ Parcial Checkbox de investidor qualificado existe mas sem declaração formal do Anexo A armazenada |
⚠️ Parcial Checkbox existe, não corresponde ao formato do Anexo A |
Necessário declaração formal com assinatura |
| Declaração Anexo B (renda > R$ 200k) | ✅ N/A | ❌ Gap Não implementado |
❌ Gap Não implementado |
Necessário formulário + armazenamento |
| Declaração Anexo C (cross-platform) | ✅ N/A | ❌ Gap Não implementado |
❌ Gap Não implementado |
Necessário formulário de autodeclaração |
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Termo de adesão e ciência de risco | ✅ N/A | ❌ Gap Sem tabela `riskDisclosureSignatures`. Sem bloqueio pré-investimento |
❌ Gap Sem formulário de ciência de risco/fluxo de assinatura |
Crítico - deve bloquear investimento sem assinatura |
| Página com valor total confirmado | ✅ N/A | ⚠️ Parcial `assetMetrics` possui `investorCount`/`totalRaised` do subgrafo |
⚠️ Parcial Componente `OfferingMetrics` existe mas sem valores confirmados atualizados diariamente |
Necessário exibição e tempo real de confirmado vs alvo |
| Distribuição parcial (min ≥ 2/3 máx) | ✅ N/A | ❌ Gap Sem regra de validação mín/máx |
❌ Gap Sem UI de distribuição parcial |
Necessário validação + campos de UI |
| Divulgação de encerramento (Anexo D) | ✅ N/A | ❌ Gap Sem publicação automática no encerramento da oferta |
❌ Gap Sem página de modelo do Anexo D |
Necessário página pública + modelo |
| Transferência em até 7 dias | ❌ Gap Sem liberação automática de garantia (escrow) |
❌ Gap Sem rastreamento de SLA para transferência de fundos |
❌ Gap Sem status de transferência para investidores |
Necessário fluxo de trabalho de custódia |
| Lote adicional até 25% | ✅ N/A | ❌ Gap Sem flag `additionalLotEnabled` |
❌ Gap Sem UI de lote adicional |
Baixa prioridade - opcional |
| Oferta secundária até 20% | ❌ Gap Sem suporte on-chain para oferta secundária |
❌ Gap Sem lógica de oferta secundária |
❌ Gap Sem UI de oferta secundária |
Baixa prioridade - opcional |
| Segregação de fundos | ⚠️ Parcial Carteiras inteligentes (Notus) separadas da plataforma, mas sem contrato formal de custódia |
❌ Gap Sem lógica de conta de custódia (escrow). Fundos transitam via provedor de rampa (Avenia/BRLA) |
❌ Gap Sem visibilidade da custódia |
Crítico - necessário segregação adequada de fundos |
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Informações Essenciais (Anexo E) | ✅ N/A | ⚠️ Parcial Alguns dados existem (info do emissor, estrutura de capital) mas não estruturados conforme as 11 seções do Anexo E |
❌ Gap Sem seção dedicada "Informações Essenciais" com as 11 seções |
Grande gap de UX - necessário página estruturada |
| Pacote de documentos relevantes | ✅ N/A | ⚠️ Parcial Tabela `offeringDocuments` existe com tipos (captacao_instrument, prospectus, etc.) |
⚠️ Parcial Aba de documentos existe. Faltando alguns tipos obrigatórios |
Parcial - necessário cobertura completa de tipos de documentos |
| Retenção 5 anos | ✅ N/A | ❌ Gap Sem política de retenção de dados aplicada |
✅ N/A (infra) | Necessário exclusão lógica (soft-delete) + política de retenção |
| Promoção e publicidade (Art. 11) | ✅ N/A | ❌ Gap Sem validação de conteúdo publicitário |
❌ Gap Sem aviso legal "Não invista antes de entender..." |
Necessário aviso obrigatório |
| Aviso regulatório padrão (Art. 34) | ✅ N/A | ✅ N/A | ❌ Gap Sem banner de aviso da CVM na página principal |
Correção rápida de UX |
| Material didático (Art. 33) | ✅ N/A | ✅ N/A | ❌ Gap Sem páginas de conteúdo educacional (16 tópicos exigidos) |
Necessário páginas estáticas/CMS |
| Lista ofertas encerradas (Anexo D) | ✅ N/A | ❌ Gap Sem consulta consolidada pública |
❌ Gap Sem página pública para ofertas encerradas |
Necessário página pública |
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Identificação e qualificação (KYC) | ✅ N/A | ⚠️ Parcial KYC L1/L2 implementado. `investorQualification` capturado. Faltando declarações dos Anexos A/B/C |
⚠️ Parcial Onboarding existe mas incompleto para CVM 88 |
Estender onboarding com declarações |
| Registro de participação (Art. 26 III) | ✅ N/A | ❌ Gap Sem tabela `investments` com campos obrigatórios (nome, CPF, endereço, email, qtd, valor, datas) |
❌ Gap Sem UI de registros de investimento |
Necessário tabela completa de investimentos |
| Fórum eletrônico por oferta | ✅ N/A | ❌ Gap Não implementado |
❌ Gap Não implementado |
Nova funcionalidade - fórum por oferta |
| Divulgação de informações periódicas | ✅ N/A | ❌ Gap Sem atualizações de informações pós-oferta do emissor |
❌ Gap Sem página de informações restrita a investidores |
Necessário relatórios do emissor + acesso do investidor |
| Atendimento e reclamações | ✅ N/A | ❌ Gap Sem sistema de reclamações |
❌ Gap Sem SAC/formulário de reclamação |
Necessário canal de suporte |
| Segregação patrimonial | ⚠️ Parcial Carteiras inteligentes são separadas |
❌ Gap Sem prova formal de segregação |
❌ Gap Sem divulgação de segregação |
Revisão de arquitetura necessária |
| PLD/FT | ✅ N/A | ⚠️ Parcial KYC com verificação de PEP + limites de depósito/saque existem. Sem monitoramento de transações AML |
⚠️ Parcial Verificação de PEP no onboarding |
Estender com monitoramento de transações |
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Conta individualizada por titular | ⚠️ Parcial Saldos ERC-20 são por endereço mas sem conceito formal de conta de titularidade |
❌ Gap Sem tabela de contas de titularidade |
❌ Gap Sem UI de gestão de titularidade |
Crítico para CVM 88 |
| Envio de posições à emissora (≤ 7 dias) | ✅ N/A | ❌ Gap Sem rotina de exportação periódica de posições |
❌ Gap Sem relatório de posição para o emissor |
Necessário tarefa agendada + painel do emissor |
| Comunicação de transferência (≤ 24h) | ⚠️ Parcial Eventos on-chain existem mas sem sistema de notificação |
❌ Gap Sem notificação de transferência para o emissor |
❌ Gap Sem alertas de transferência |
Necessário notificação baseada em eventos |
| Contrato específico com emissora | ✅ N/A | ❌ Gap Não rastreado |
❌ Gap Não rastreado |
Requisito legal/contratual |
| Requisito | Smart Contract | Lógica de Negócios | UX | Notas |
|---|---|---|---|---|
| Mural eletrônico (não order book) | ❌ Gap Sem OTC/mural on-chain |
❌ Gap Não implementado |
❌ Gap Não implementado |
Fase futura |
| Verificação investidor ativo | ✅ N/A | ❌ Gap Sem conceito de "investidor ativo" (registrado + investido em 2 anos) |
❌ Gap Não implementado |
Necessário rastreamento |
| Limites do comprador | ❌ Gap Sem verificação de limite on-chain |
❌ Gap Não implementado |
❌ Gap Não implementado |
Igual aos limites primários |
| DvP (delivery vs. payment) | ⚠️ Parcial OfferTokenSale tem compra atômica, mas sem DvP P2P |
❌ Gap Não implementado |
❌ Gap Não implementado |
Necessário swap atômico P2P |
| Histórico mensal volume/preço | ❌ Gap Sem agregação on-chain |
❌ Gap Não implementado |
❌ Gap Não implementado |
Necessário análise (analytics) |
| Limite 5% controlador/líder | ✅ N/A | ❌ Gap Não implementado |
❌ Gap Não implementado |
Necessário rastreamento |
| Requisito | Status | Gap |
|---|---|---|
| Relatório Anexo G (início/encerramento) | ❌ | Sem sistema de relatórios da CVM. Necessário relatórios gerados automaticamente |
| Relatório Anexo H (anual) | ❌ | Sem geração de relatório anual |
| Comunicação de irregularidades | ❌ | Sem fluxo de trabalho de detecção/relato de irregularidades |
| Lista de emissoras inadimplentes | ❌ | Sem rastreamento de conformidade do emissor |
| Retenção 5 anos | ❌ | Sem política de retenção de dados |
| Profissional de controles internos | ✅ N/A | Requisito organizacional, não técnico |
| Código de conduta | ✅ N/A | Requisito documental, não técnico |