Schema Completo do Banco de Dados
Total de tabelas: 42 tabelas no schema public
Migrations: 66 arquivos em supabase/migrations/
Última migration: 20260220032109_add_campaign_segment_and_schedule.sql
Índice por Dominio
Seção intitulada “Índice por Dominio”- Core
- Contacts
- Conversations
- Templates
- Automations
- Campaigns
- Segments
- Analytics / Events
- Integrations / Ecommerce
- Tracking
- Revenue Attribution
- Shipment Tracking
- Billing
- Settings
- Admin / Audit
- Team
- Folders
- Chat Utilities
Devido ao tamanho deste documento (42 tabelas com schema completo), consulte o arquivo fonte original em x17/docs/database/schema.md para o schema detalhado de cada tabela incluindo todas as colunas, tipos, constraints, indexes, RLS policies e foreign keys.
A seguir, um resumo das tabelas por domínio com suas descricoes principais.
accounts
Seção intitulada “accounts”Tenants da plataforma. Cada empresa/marca é uma account. Um usuário pode pertencer a múltiplas accounts. Criada automaticamente por handle_new_user().
account_users
Seção intitulada “account_users”Vinculo entre usuários (auth.users) e accounts. Define role do usuário na conta. Suporta multi-conta.
whatsapp_profiles
Seção intitulada “whatsapp_profiles”Conexoes WhatsApp Business API (WABA). Cada perfil representa um número de telefone conectado via Facebook Embedded Signup. Token criptografado com AES-256-GCM.
Contacts
Seção intitulada “Contacts”contacts
Seção intitulada “contacts”Contatos (clientes) de cada marca. Suporta soft-delete e metadados flexiveis via JSONB. Phone em formato E.164 com constraint CHECK.
Etiquetas para classificar contatos. Scoped por conta. Nome único por conta.
contact_tags
Seção intitulada “contact_tags”Relacionamento M:N entre contatos e tags. PK composta (contact_id, tag_id).
contact_rfm_scores
Seção intitulada “contact_rfm_scores”Scores RFM (Recency, Frequency, Monetary) calculados por conta. Segmentos: champions, loyal, at_risk, lost, etc.
contact_metrics_summary
Seção intitulada “contact_metrics_summary”Contadores materializados de eventos por contato e métrica. Atualizado por trigger AFTER INSERT ON events.
Conversations
Seção intitulada “Conversations”conversations
Seção intitulada “conversations”Conversas WhatsApp entre um contato é a conta. UNIQUE parcial garante apenas uma conversa ativa por contato.
messages
Seção intitulada “messages”Mensagens individuais de cada conversa. Append-only. wa_message_id UNIQUE previne duplicatas de webhook.
internal_notes
Seção intitulada “internal_notes”Notas internas em conversas. Invisíveis ao cliente.
chatbot_logs
Seção intitulada “chatbot_logs”Logs de interações do chatbot IA autonomo.
quick_replies
Seção intitulada “quick_replies”Respostas rapidas reutilizaveis no chat. Shortcut único por conta.
Templates
Seção intitulada “Templates”message_templates
Seção intitulada “message_templates”Templates de mensagens WhatsApp. Suporta tipos: standard, carousel, lto, authentication. Precisam de aprovação da Meta.
Automations
Seção intitulada “Automations”automations
Seção intitulada “automations”Funis de automação multi-step. 24 tipos de trigger suportados. Suporta re-entrada controlada (once/always/cooldown) e flow filters.
automation_steps
Seção intitulada “automation_steps”Nos (steps) do funil. 12 tipos de step. Estrutura de grafo direcional com next_step_id e condition_false_step_id.
automation_runs
Seção intitulada “automation_runs”Execuções legadas (sistema antigo, pre-executions).
automation_executions
Seção intitulada “automation_executions”Execuções do motor novo. Registra cada instância de execução com status, duração e steps completados.
automation_execution_steps
Seção intitulada “automation_execution_steps”Log detalhado de cada step executado. Status: pending, running, completed, failed, skipped, suspended.
Campaigns
Seção intitulada “Campaigns”campaigns
Seção intitulada “campaigns”Campanhas de envio em massa via templates aprovados. Suporta agendamento via pg_cron e segmentos.
campaign_sends
Seção intitulada “campaign_sends”Registro de cada envio individual. Um registro por contato por campanha.
Segments
Seção intitulada “Segments”segments
Seção intitulada “segments”Segmentos dinâmicos com condições AND/OR (estilo Klaviyo). Recalculados a cada 5 minutos via pg_cron.
segment_members
Seção intitulada “segment_members”Membros de cada segmento. exited_at IS NULL indica membro ativo. Mantem histórico de entrada/saída.
Analytics / Events
Seção intitulada “Analytics / Events”metrics
Seção intitulada “metrics”Catalogo de tipos de evento. 25 métricas de sistema criadas automaticamente via seed_system_metrics().
Instâncias de eventos — tabela append-only, alta performance. Deduplicação via unique_event_id. 9 indexes para diferentes patterns de query.
Integrations / Ecommerce
Seção intitulada “Integrations / Ecommerce”ecommerce_integrations
Seção intitulada “ecommerce_integrations”Integrações com 6 plataformas. Token criptografado, suporta OAuth e API Key.
ecommerce_orders
Seção intitulada “ecommerce_orders”Pedidos sincronizados. Inclui colunas de atribuicao (UTM) e custos (COGS, gateway fees) para calcular ROAS.
ecommerce_abandoned_carts
Seção intitulada “ecommerce_abandoned_carts”Carrinhos abandonados sincronizados. Status: pending, abandoned, recovered, expired.
Tracking
Seção intitulada “Tracking”tracked_links
Seção intitulada “tracked_links”Links encurtados e rastreados com UTM. Contexto: automation, campaign, chat, manual.
link_clicks
Seção intitulada “link_clicks”Registro de cada clique individual. Inclui IP, user agent, referer, country.
Revenue Attribution
Seção intitulada “Revenue Attribution”ad_spend
Seção intitulada “ad_spend”Gastos com anuncios por plataforma de mídia paga. UNIQUE por (account, platform, campaign, date).
Shipment Tracking
Seção intitulada “Shipment Tracking”tracking_settings
Seção intitulada “tracking_settings”Configuração do serviço de rastreamento (17TRACK). Singleton por conta.
shipment_trackings
Seção intitulada “shipment_trackings”Rastreamentos de encomendas. Enum shipment_tracking_status com 10 valores.
shipment_tracking_events
Seção intitulada “shipment_tracking_events”Histórico de eventos de cada rastreamento. Append-only.
Billing
Seção intitulada “Billing”billing_subscriptions
Seção intitulada “billing_subscriptions”Assinaturas ativas. Integrado com ASAAS. Status: pending, active, past_due, suspended, cancelled, inactive.
billing_history
Seção intitulada “billing_history”Histórico de pagamentos. Suporta PIX (QR code), boleto e cartão.
Settings
Seção intitulada “Settings”ai_settings
Seção intitulada “ai_settings”Configurações do chatbot IA por conta. Singleton (UNIQUE account_id).
brand_context
Seção intitulada “brand_context”Contexto de marca para o chatbot IA. Scraped do site. Limite de 1MB no raw_scrape_data.
smart_sending_timers
Seção intitulada “smart_sending_timers”Rastreia último envio por contato/canal para Smart Sending (anti-spam).
Admin / Audit
Seção intitulada “Admin / Audit”webhooks
Seção intitulada “webhooks”Configurações de webhooks inbound/outbound por conta.
webhook_logs
Seção intitulada “webhook_logs”Log de execuções de webhook. Registro de cada tentativa.
notifications
Seção intitulada “notifications”Notificações in-app. 9 tipos suportados. NULL user_id = broadcast.
audit_logs
Seção intitulada “audit_logs”Trilha de auditoria. Imutavel após INSERT. 6 tipos de ação.
api_keys
Seção intitulada “api_keys”Chaves de API. Hash da chave armazenado (nunca em claro).
team_invites
Seção intitulada “team_invites”Convites para adicionar membros. Token único, expira em 7 dias.
Folders
Seção intitulada “Folders”folders
Seção intitulada “folders”Pastas hierárquicas para templates, campanhas e automações. Suporta até 10 níveis de profundidade.
Chat Utilities
Seção intitulada “Chat Utilities”Já documentado em secoes anteriores: quick_replies, internal_notes, chatbot_logs.
Diagrama de Dependencias por Dominio
Seção intitulada “Diagrama de Dependencias por Dominio”accounts (raiz)+-- account_users (auth.users)+-- whatsapp_profiles+-- contacts| +-- contact_tags --- tags| +-- contact_rfm_scores| +-- contact_metrics_summary --- events --- metrics+-- conversations (whatsapp_profiles + contacts)| +-- messages| +-- internal_notes| +-- chatbot_logs+-- message_templates (folders)+-- automations (folders + segments)| +-- automation_steps| +-- automation_runs --- contacts| +-- automation_executions --- automation_execution_steps+-- campaigns (message_templates + segments + folders)| +-- campaign_sends --- contacts+-- segments| +-- segment_members --- contacts+-- ecommerce_integrations| +-- ecommerce_orders (contacts + tracked_links)| +-- ecommerce_abandoned_carts (contacts)+-- tracked_links (contacts)| +-- link_clicks+-- shipment_trackings (ecommerce_orders + contacts)| +-- shipment_tracking_events+-- ad_spend+-- billing_subscriptions| +-- billing_history+-- webhooks| +-- webhook_logs+-- notifications (auth.users)+-- audit_logs (auth.users)+-- api_keys+-- team_invites+-- ai_settings+-- brand_context+-- smart_sending_timers --- contacts+-- tracking_settings+-- quick_replies+-- folders