Schema do Banco de Dados

PostgreSQL 17 via Supabase. Todas as tabelas (exceto nucleos, planos e tabelas nacionais) possuem nucleo_id para multi-tenancy. RLS ativo em todas as tabelas; o NestJS usa service_role key que bypassa RLS.

Enums

EnumValores
cargoMEMBRO, LIDER_PROJETO, PORTA_VOZ, COORDENADOR, ADMINISTRADOR, SUPER_ADMIN
status_usuarioPENDENTE, ATIVO, INATIVO, SUSPENSO, REJEITADO
status_projetoPLANEJAMENTO, EM_ANDAMENTO, CONCLUIDO, CANCELADO
dificuldadeFACIL, MEDIA, DIFICIL
status_tarefaPENDENTE, EM_ANDAMENTO, AGUARDANDO_VALIDACAO, APROVADA, REJEITADA
tipo_eventoPRESENCIAL, ONLINE, HIBRIDO
status_eventoAGENDADO, EM_ANDAMENTO, ENCERRADO, CANCELADO
status_checkinPRESENTE, AUSENTE, JUSTIFICADO
tipo_transacaoCREDITO, DEBITO
origem_transacaoEVENTO, TAREFA, LOJA, PLANO, MANUAL, REFERRAL, ESTORNO
categoria_lojaCAMISETA, ADESIVO, CANECA, BONE, OUTRO
status_pedidoAGUARDANDO_PAGAMENTO, PENDENTE, SEPARADO, ENTREGUE, CANCELADO
tipo_lancamentoRECEITA, DESPESA
categoria_financeiroEVENTO, MATERIAL, DOACAO, MENSALIDADE, OUTRO
tipo_escolhaUNICA, MULTIPLA
visibilidadePUBLICA, PRIVADA
status_pagamentoPENDENTE, CONFIRMADO, ATRASADO, CANCELADO, ESTORNADO
metodo_pagamentoPIX, CARTAO_CREDITO, CARTAO_DEBITO, BOLETO

Core

nucleos

ColunaTipoDescricao
iduuid PKIdentificador do nucleo/tenant
nometextNome do nucleo (ex: MBL-ES)
slugtext UNIQUESlug unico para URL
descricaotextDescricao do nucleo
logo_urltextURL do logo
asaas_api_keytextAPI key do Asaas (criptografada)
asaas_wallet_idtextWallet ID do Asaas
ativobooleanNucleo ativo (default true)
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

usuarios

ColunaTipoDescricao
iduuid PKMesmo UUID do auth.users
nucleo_iduuid FKFK para nucleos (nullable para Super Admin nacional)
nometextNome completo
emailtext UNIQUEEmail do usuario
telefonetextTelefone
cpftextCPF
enderecotextEndereco completo
foto_urltextURL da foto de perfil
cargocargoEnum de cargo
statusstatus_usuarioStatus do usuario
plano_iduuid FKFK para planos
saldo_capixacoinsintegerCache do saldo (atualizado por trigger)
referral_codetext UNIQUECodigo de indicacao (gerado por trigger)
referido_poruuid FKFK para usuarios (quem indicou)
asaas_customer_idtextID do cliente no Asaas
data_nascimentodateData de nascimento
biotextBiografia
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao (trigger)

planos

ColunaTipoDescricao
iduuid PKIdentificador do plano
nometextNome (Free, Apoiador, Militante, Onca)
slugtext UNIQUESlug unico
preconumericPreco mensal em R$
beneficiosjsonbArray de beneficios do plano
ativobooleanPlano ativo
criado_emtimestamptzData de criacao

assinaturas

ColunaTipoDescricao
iduuid PKIdentificador da assinatura
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
plano_iduuid FKFK para planos
pagamento_iduuid FKFK para pagamentos
asaas_subscription_idtextID da assinatura no Asaas
statusstatus_pagamentoStatus da assinatura
iniciotimestamptzData de inicio
fimtimestamptzData de fim (nullable)
criado_emtimestamptzData de criacao

Projetos

projetos

ColunaTipoDescricao
iduuid PKIdentificador do projeto
nucleo_iduuid FKFK para nucleos
nometextNome do projeto
descricaotextDescricao do projeto
statusstatus_projetoStatus do projeto
data_iniciodateData de inicio
data_fimdateData prevista de fim
criado_poruuid FKFK para usuarios (criador)
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

projeto_membros

ColunaTipoDescricao
iduuid PKIdentificador
projeto_iduuid FKFK para projetos
usuario_iduuid FKFK para usuarios
papeltextPapel no projeto (lider, membro)
criado_emtimestamptzData de entrada

tarefas

ColunaTipoDescricao
iduuid PKIdentificador da tarefa
nucleo_iduuid FKFK para nucleos
projeto_iduuid FK (nullable)FK para projetos (null = tarefa avulsa)
titulotextTitulo da tarefa
descricaotextDescricao detalhada
statusstatus_tarefaStatus atual
dificuldadedificuldade (nullable)Dificuldade (default MEDIA, opcional)
recompensa_ccintegerRecompensa em Capixacoins
responsavel_iduuid FK (nullable)FK para usuarios (quem esta executando)
criado_poruuid FKFK para usuarios (criador)
data_limitetimestamptzPrazo da tarefa
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

tarefa_candidaturas

ColunaTipoDescricao
iduuid PKIdentificador
tarefa_iduuid FKFK para tarefas
usuario_iduuid FKFK para usuarios (candidato)
mensagemtextMensagem do candidato
criado_emtimestamptzData da candidatura

projeto_comentarios

ColunaTipoDescricao
iduuid PKIdentificador
projeto_iduuid FKFK para projetos
usuario_iduuid FKFK para usuarios (autor)
conteudotextTexto do comentario
criado_emtimestamptzData do comentario

Eventos

eventos

ColunaTipoDescricao
iduuid PKIdentificador do evento
nucleo_iduuid FKFK para nucleos
titulotextTitulo do evento
descricaotextDescricao
tipotipo_eventoPRESENCIAL, ONLINE, HIBRIDO
statusstatus_eventoStatus do evento
data_iniciotimestamptzData e hora de inicio
data_fimtimestamptzData e hora de fim
localtextLocal do evento
linktextLink para evento online
recompensa_ccintegerCapixacoins por presenca
foto_urltextImagem do evento
criado_poruuid FKFK para usuarios (criador)
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

evento_presencas

ColunaTipoDescricao
iduuid PKIdentificador
evento_iduuid FKFK para eventos
usuario_iduuid FKFK para usuarios
statusstatus_checkinPRESENTE, AUSENTE, JUSTIFICADO
checkin_emtimestamptzData/hora do check-in
criado_emtimestamptzData de criacao

Economia

transacoes_moeda

ColunaTipoDescricao
iduuid PKIdentificador da transacao
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
tipotipo_transacaoCREDITO ou DEBITO
origemorigem_transacaoOrigem da transacao
quantidadeintegerQuantidade de Capixacoins
descricaotextDescricao da transacao
referencia_iduuidID do registro de origem (tarefa, evento, etc)
criado_emtimestamptzData da transacao

Trigger: trg_atualizar_saldo recalcula usuarios.saldo_capixacoins a cada INSERT.

financeiro_lancamentos

ColunaTipoDescricao
iduuid PKIdentificador do lancamento
nucleo_iduuid FKFK para nucleos
tipotipo_lancamentoRECEITA ou DESPESA
categoriacategoria_financeiroCategoria do lancamento
descricaotextDescricao
valornumericValor em R$
datadateData do lancamento
projeto_iduuid FK (nullable)FK para projetos (opcional)
criado_poruuid FKFK para usuarios
criado_emtimestamptzData de criacao

Loja

produtos_loja

ColunaTipoDescricao
iduuid PKIdentificador do produto
nucleo_iduuid FKFK para nucleos
nometextNome do produto
descricaotextDescricao do produto
categoriacategoria_lojaCategoria do produto
preco_moedasintegerPreco em Capixacoins
preco_realnumericPreco em R$
preco_promocional_moedasintegerPreco promocional em CC
preco_promocional_realnumericPreco promocional em R$
data_inicio_promotimestamptzInicio do periodo promocional
data_fim_promotimestamptzFim do periodo promocional
is_destaquebooleanProduto em destaque na vitrine
total_vendasintegerContador de vendas
estoqueintegerQuantidade em estoque
imagem_urltextImagem principal
ativobooleanProduto ativo
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

produto_imagens

ColunaTipoDescricao
iduuid PKIdentificador
produto_iduuid FKFK para produtos_loja
urltextURL da imagem
ordemintegerOrdem de exibicao
criado_emtimestamptzData de criacao

pedidos_loja

ColunaTipoDescricao
iduuid PKIdentificador do pedido
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
produto_iduuid FKFK para produtos_loja
quantidadeintegerQuantidade
pagamento_iduuid FKFK para pagamentos
statusstatus_pedidoStatus do pedido
metodotextMetodo de pagamento usado (CC ou R$)
criado_emtimestamptzData do pedido
atualizado_emtimestamptzData da ultima atualizacao

pagamentos

ColunaTipoDescricao
iduuid PKIdentificador do pagamento
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
asaas_payment_idtextID do pagamento no Asaas
valornumericValor em R$
statusstatus_pagamentoStatus do pagamento
metodometodo_pagamentoMetodo de pagamento
descricaotextDescricao do pagamento
pix_qrcodetextQR code PIX (base64)
pix_copia_colatextCodigo PIX copia-e-cola
boleto_urltextURL do boleto
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

cupons

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
codigotext UNIQUECodigo do cupom
desconto_percentualnumericDesconto em %
desconto_fixonumericDesconto fixo em R$
validadetimestamptzData de validade
usos_maximosintegerLimite de usos
usos_atuaisintegerUsos realizados
ativobooleanCupom ativo
criado_emtimestamptzData de criacao

doacoes

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios (doador)
valornumericValor da doacao em R$
pagamento_iduuid FKFK para pagamentos
mensagemtextMensagem do doador
criado_emtimestamptzData da doacao

Conquistas

conquistas

ColunaTipoDescricao
iduuid PKIdentificador da conquista
nucleo_iduuid FKFK para nucleos
nometextNome da conquista
descricaotextDescricao
iconetextEmoji ou icone
codigotextCodigo unico (ex: ENGAJADO)
regra_tipotextTipo de regra (EVENTOS, TAREFAS, REFERRALS, PLANO, CADASTRO)
regra_quantidadeintegerQuantidade necessaria para desbloquear
regra_campo_extratextCampo extra para regras especificas (ex: slug do plano)
recompensa_ccintegerCapixacoins ao desbloquear
progresso_visivelbooleanSe mostra barra de progresso ao usuario
ativobooleanConquista ativa
criado_emtimestamptzData de criacao

usuario_conquistas

ColunaTipoDescricao
iduuid PKIdentificador
usuario_iduuid FKFK para usuarios
conquista_iduuid FKFK para conquistas
desbloqueada_emtimestamptzData do desbloqueio

Comunicacao

comunicados

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
autor_iduuid FKFK para usuarios (autor)
titulotextTitulo do comunicado
conteudotextCorpo do comunicado
foto_urltextFoto anexada
video_urltextVideo anexado
criado_emtimestamptzData de criacao

notificacoes

ColunaTipoDescricao
iduuid PKIdentificador
usuario_iduuid FKFK para usuarios
titulotextTitulo da notificacao
mensagemtextCorpo da notificacao
lidabooleanSe foi lida (default false)
linktextLink de redirecionamento
criado_emtimestamptzData de criacao

push_subscriptions

ColunaTipoDescricao
iduuid PKIdentificador
usuario_iduuid FKFK para usuarios
endpointtextEndpoint Web Push
p256dhtextChave p256dh
authtextChave auth
criado_emtimestamptzData de criacao

email_logs

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios (remetente)
destinatariotextEmail destinatario
assuntotextAssunto do email
tipotextTipo do email (manual, automatico)
statustextStatus de envio
errotextMensagem de erro (se houve)
manualbooleanSe foi enviado manualmente
origemtextOrigem do envio
enviado_emtimestamptzData/hora do envio
criado_emtimestamptzData de criacao

enquetes

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
titulotextPergunta/titulo da enquete
descricaotextDescricao
foto_urltextFoto anexada
tipo_escolhatipo_escolhaUNICA ou MULTIPLA
visibilidadevisibilidadePUBLICA ou PRIVADA
data_fimtimestamptzData limite para votar
criado_poruuid FKFK para usuarios (autor)
criado_emtimestamptzData de criacao

enquete_opcoes

ColunaTipoDescricao
iduuid PKIdentificador
enquete_iduuid FKFK para enquetes
textotextTexto da opcao
votosintegerContador de votos (cache)

enquete_votos

ColunaTipoDescricao
iduuid PKIdentificador
enquete_iduuid FKFK para enquetes
opcao_iduuid FKFK para enquete_opcoes
usuario_iduuid FKFK para usuarios
criado_emtimestamptzData do voto

Feed

feed_atividades

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
tipotextTipo da atividade (conquista, tarefa, evento, etc)
titulotextTitulo da atividade
descricaotextDescricao
metadatajsonbDados extras (referencia_id, etc)
criado_emtimestamptzData da atividade

feed_likes

ColunaTipoDescricao
iduuid PKIdentificador
atividade_iduuid FKFK para feed_atividades
usuario_iduuid FKFK para usuarios
criado_emtimestamptzData do like

Competencias

competencias_macro

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
nometextNome da macro-competencia
descricaotextDescricao
criado_emtimestamptzData de criacao

competencias_micro

ColunaTipoDescricao
iduuid PKIdentificador
macro_iduuid FKFK para competencias_macro
nometextNome da micro-competencia
descricaotextDescricao
criado_emtimestamptzData de criacao

usuario_competencias

ColunaTipoDescricao
iduuid PKIdentificador
usuario_iduuid FKFK para usuarios
micro_iduuid FKFK para competencias_micro
nivelintegerNivel de proficiencia (1-5)
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

Porta-Vozes

porta_vozes

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
biotextBiografia publica
temastext[]Array de temas de atuacao
ativobooleanPorta-voz ativo
criado_emtimestamptzData de criacao

porta_voz_redes

ColunaTipoDescricao
iduuid PKIdentificador
porta_voz_iduuid FKFK para porta_vozes
redetextNome da rede social
urltextURL do perfil
seguidoresintegerNumero de seguidores
criado_emtimestamptzData de criacao

porta_voz_postagens

ColunaTipoDescricao
iduuid PKIdentificador
porta_voz_iduuid FKFK para porta_vozes
redetextRede social
urltextURL da postagem
conteudotextConteudo da postagem
engajamentojsonbMetricas (likes, shares, comments)
data_postagemtimestamptzData da postagem
criado_emtimestamptzData de criacao

Nacional

config_nacional

ColunaTipoDescricao
iduuid PKIdentificador
asaas_api_keytextAPI key Asaas nacional (separada dos nucleos)
asaas_wallet_idtextWallet ID Asaas nacional
configjsonbConfiguracoes gerais nacionais
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

produtos_nacional

ColunaTipoDescricao
iduuid PKIdentificador
nometextNome do produto nacional
descricaotextDescricao
preconumericPreco em R$
estoqueintegerQuantidade em estoque
imagem_urltextImagem principal
ativobooleanProduto ativo
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

produto_nacional_imagens

ColunaTipoDescricao
iduuid PKIdentificador
produto_iduuid FKFK para produtos_nacional
urltextURL da imagem
ordemintegerOrdem de exibicao
criado_emtimestamptzData de criacao

pedidos_nacional

ColunaTipoDescricao
iduuid PKIdentificador
usuario_iduuid FKFK para usuarios (comprador)
produto_iduuid FKFK para produtos_nacional
quantidadeintegerQuantidade
valor_totalnumericValor total em R$
statusstatus_pedidoStatus do pedido
asaas_payment_idtextID do pagamento no Asaas
criado_emtimestamptzData do pedido
atualizado_emtimestamptzData da ultima atualizacao

comunicados_nacional

ColunaTipoDescricao
iduuid PKIdentificador
autor_iduuid FKFK para usuarios (Super Admin)
titulotextTitulo do comunicado
conteudotextCorpo do comunicado
foto_urltextFoto anexada
criado_emtimestamptzData de criacao

enquetes_nacional

ColunaTipoDescricao
iduuid PKIdentificador
titulotextPergunta da enquete
descricaotextDescricao
tipo_escolhatipo_escolhaUNICA ou MULTIPLA
data_fimtimestamptzData limite para votar
criado_poruuid FKFK para usuarios (Super Admin)
criado_emtimestamptzData de criacao

enquete_nacional_opcoes

ColunaTipoDescricao
iduuid PKIdentificador
enquete_iduuid FKFK para enquetes_nacional
textotextTexto da opcao
votosintegerContador de votos (cache)

enquete_nacional_votos

ColunaTipoDescricao
iduuid PKIdentificador
enquete_iduuid FKFK para enquetes_nacional
opcao_iduuid FKFK para enquete_nacional_opcoes
usuario_iduuid FKFK para usuarios
criado_emtimestamptzData do voto

IA

ia_conversas

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos (multi-tenant)
usuario_iduuid FKFK para usuarios (dono)
titulotextTitulo (gerado da primeira mensagem)
mensagensjsonbArray de mensagens (role, content, tipo, timestamp)
compartilhadabooleanSe foi compartilhada para coordenadores (default false)
compartilhada_emtimestamptzData/hora do compartilhamento
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao (trigger)

Materiais

materiais

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
titulotextTitulo do material
descricaotextDescricao
tipotextTipo do arquivo (pdf, imagem, video, etc)
urltextURL do arquivo (Supabase Storage)
criado_poruuid FKFK para usuarios
criado_emtimestamptzData de criacao

Bug Reports

bug_reports

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios (reportou)
titulotextTitulo do bug
descricaotextDescricao detalhada
screenshot_urltextURL do screenshot
statustextStatus (aberto, em_andamento, resolvido)
prioridadetextPrioridade (baixa, media, alta, critica)
criado_emtimestamptzData de criacao
atualizado_emtimestamptzData da ultima atualizacao

Metricas

metricas_globais

ColunaTipoDescricao
iduuid PKIdentificador
tipotextTipo da metrica
valorjsonbValor da metrica (estrutura variavel)
periodotextPeriodo de referencia
criado_emtimestamptzData de coleta

Auditoria

audit_log

ColunaTipoDescricao
iduuid PKIdentificador
nucleo_iduuid FKFK para nucleos
usuario_iduuid FKFK para usuarios
acaotextAcao realizada (CREATE, UPDATE, DELETE)
tabelatextTabela afetada
registro_iduuidID do registro afetado
dados_antesjsonbSnapshot antes da alteracao
dados_depoisjsonbSnapshot depois da alteracao
iptextIP do usuario
criado_emtimestamptzData da acao

Triggers

  • trg_atualizar_saldo: Ao inserir em transacoes_moeda, recalcula usuarios.saldo_capixacoins via SUM do ledger
  • trg_usuarios_updated: Atualiza atualizado_em ao modificar usuario
  • trg_gerar_referral: Gera codigo referral unico (MBL-ES-XXXX) ao inserir usuario
  • trg_ia_conversas_updated: Atualiza atualizado_em ao modificar conversa IA

Indexes Principais

  • idx_usuarios_nucleo_id em usuarios(nucleo_id)
  • idx_usuarios_email em usuarios(email)
  • idx_usuarios_referral_code em usuarios(referral_code)
  • idx_transacoes_usuario em transacoes_moeda(usuario_id)
  • idx_transacoes_nucleo em transacoes_moeda(nucleo_id)
  • idx_tarefas_projeto em tarefas(projeto_id)
  • idx_tarefas_nucleo em tarefas(nucleo_id)
  • idx_eventos_nucleo em eventos(nucleo_id)
  • idx_feed_nucleo em feed_atividades(nucleo_id)
  • idx_audit_nucleo em audit_log(nucleo_id)
  • idx_notificacoes_usuario em notificacoes(usuario_id)
  • idx_pedidos_usuario em pedidos_loja(usuario_id)

Row Level Security (RLS)

Todas as tabelas tem RLS habilitado. Politicas base filtram por nucleo_id do usuario logado. O service_role key (usada pelo NestJS) bypassa RLS. Tabelas nacionais nao possuem nucleo_id e sao acessiveis apenas por SUPER_ADMIN.

Migrations

  • 00001_initial_schema.sql — Schema completo (20+ tabelas, enums, RLS, triggers)
  • 00002_asaas_integration.sql — Tabela pagamentos, enums de pagamento, campos split payment
  • 00003_competencias.sql — Tabelas de competencias (macro, micro, usuario)
  • 00004_porta_vozes.sql — Porta-vozes, redes sociais, postagens
  • 00005_nacional.sql — Tabelas nacionais (config, produtos, comunicados, enquetes)
  • 00006_conquistas_v2.sql — Campos regra_tipo, regra_quantidade, progresso_visivel em conquistas
  • 00007_ia_compartilhada.sql — Campos compartilhada, compartilhada_em em ia_conversas