VendeeDocs
Backend

Banco de Dados

Tabelas, relacionamentos e tipos TypeScript

O banco do Vendee é organizado em torno do conceito de workspace (tenant). Toda tabela de dados de negócio carrega um workspace_id para isolamento multi-tenant via RLS.

Tabelas de negócio (core CRM)

TabelaDescrição
workspacesTenants — cada cliente é um workspace
membersUsuários vinculados a workspaces (role, is_active, display_name)
dealsNegócios/oportunidades (valor, status, qualified_override, owner_id)
contactsContatos/pessoas (owner_id, custom fields)
companiesEmpresas clientes (segmento, tax_regime)
activitiesAtividades/tarefas (tipo, status, scheduled_at)
commentsComentários em negócios (kind: note/observation/activity_log)
pipelinesFunis de venda (lost_deal_visibility_days)
stagesEtapas de um pipeline
deal_productsProdutos vinculados a negócios (qty, unit_price, discount)

Tabelas de configuração

TabelaDescrição
deal_typesTipos de negócio
lead_sourcesOrigens de leads
loss_reasonsMotivos de perda
activity_typesTipos de atividade
productsCatálogo de produtos/serviços (área, default_frequency, suggestion_metadata)
custom_field_definitionsDefinição de campos personalizados
custom_field_valuesValores dos campos personalizados por entidade

Tabelas de qualificação

TabelaDescrição
qualification_formsFormulários (com threshold de score)
qualification_questionsPerguntas
qualification_answersOpções de resposta com peso
qualification_responsesRespostas de um deal a um formulário
qualification_response_itemsItens individuais de resposta
qualification_score_rangesFaixas de score (Muito Frio → Muito Quente)

Tabelas de propostas

TabelaDescrição
proposalsPropostas comerciais (template_type, status, token público)
proposal_eventsTimeline de eventos da proposta (created, viewed, accepted, etc.)
workspace_proposal_settingsConfig de propostas por workspace (bandas, extras, template padrão)
workspace_guided_optionsOpções guiadas customizáveis do wizard

Tabelas de metas e workspace

TabelaDescrição
workspace_monthly_goalsMetas mensais por membro e mês (revenue_target, count_target)

Tabelas de base de clientes

TabelaDescrição
client_basesBases importadas (nome, data, qtd de entradas)
client_base_entriesLinhas da planilha importada
client_base_snapshotsSnapshots de análise gerados
ai_insightsInsights gerados por IA sobre a base

Tabelas de admin/auditoria

TabelaDescrição
super_adminsUsuários com acesso super admin (user_id)
admin_audit_logLog de ações administrativas (actor_id, action, workspace_id)
federal_companiesBase federal de CNPJs para lookup

Relacionamentos chave

  • dealscontacts, companies, stages, members (owner_id), lead_sources, loss_reasons, deal_types
  • activitiesdeals, members, activity_types
  • stagespipelines
  • deal_productsdeals, products
  • proposalsdeals, workspaces
  • Todo campo de dados tem workspace_id para isolamento multi-tenant

Tipos TypeScript

Os tipos são gerados a partir do schema do banco. Para cada tabela existem três variações:

import type { Database } from "@repo/supabase/types";

// Linha lida do banco (todos os campos preenchidos)
type Deal = Database["public"]["Tables"]["deals"]["Row"];

// Payload de INSERT (campos com default são opcionais)
type DealInsert = Database["public"]["Tables"]["deals"]["Insert"];

// Payload de UPDATE (todos os campos opcionais)
type DealUpdate = Database["public"]["Tables"]["deals"]["Update"];

Nunca escreva tipos de tabela à mão. Use sempre os tipos gerados em @repo/supabase/types — eles são a fonte da verdade e ficam sincronizados com migrations. Se um tipo parecer errado, regenere antes de criar um shim local.

On this page