UNIBF
CRM / Documentação Técnica de Dados
● Versão Final
SEÇÃO 01

Visão Geral da Arquitetura CRM

Documentação técnica completa da arquitetura de dados, fluxo do lead e operação de CRM da UNIBF. Esta documentação serve como referência para engenharia de dados, modelagem BigQuery, operação de CRM e marketing.

Fluxo Principal do Dado

Evento → Lead → Enriquecido → Lead Real → Venda

O dado nasce como um evento comportamental no site, é capturado como lead, enriquecido com dados de CRM e mídia, filtrado por regras de negócio e transformado em base elegível para disparo — o Lead_Real. A conversão é registrada em unibf_vendas_v2, fechando o ciclo.

BigQuery (performance_v4)
Supabase + BigQuery
Azure Databricks BI
~241k leads elegíveis
f_eventos
unibf_leads_v2
leads_enriquecidos_v2
Lead_Real
Disparo / Venda
unibf_vendas_v2

Papel de Cada Camada

📡
Dado Bruto
Eventos coletados diretamente do site via GTM/GA4. Sem tratamento, sem normalização. Representa a ação do usuário em tempo real.
f_eventos
🔧
Dado Tratado
Lead com campos normalizados: telefone padronizado, e-mail em lowercase, modalidade corrigida, curso mapeado para IDs internos.
leads_enriquecidos_v2
🎯
Dado Operacional
Base final filtrada, deduplicada contra vendas, sem desqualificados. Pronta para operação de disparo e atendimento comercial.
Lead_Real
Dado de Conversão
Registro de matrícula confirmada: curso, valor, forma de pagamento, data, aluno. Fonte de verdade para atribuição e receita.
unibf_vendas_v2
📊
Dado de Campanha
Performance de disparos WhatsApp, e-mail, SMS. Métricas de entrega, leitura, interação e custo por campanha.
report_tables_campaign
💬
Dado de Conversa
Interações do atendimento no OmniChat. Registro de suporte, qualificação e encerramento de tickets comerciais.
dim_customer_support_request

Ferramentas e Infraestrutura

Google BigQuery

Armazém principal de dados: gtm-5zhzjzt-njk1n / performance_v4. Hospeda f_eventos, f_leads e f_vendas_v2.

Processamento central
Supabase

Banco operacional para leads e vendas. Sincronizado com BigQuery. Origem dos dados para leads_enriquecidos_v2 e unibf_vendas_v2.

Banco operacional
Azure Databricks

Headless BI para tabelas de campanha (report_tables_campaign), templates (dim_templates) e atendimento (dim_customer_support_request).

BI analítico
n8n + RD Station + OmniChat

Automação de fluxos: criação de lead no CRM, atualização de status de aluno, enriquecimento via API OmniChat, sincronização com Active Campaign.

Automação e CRM
SEÇÃO 02

Mapa das Bases de Dados

Descrição completa de cada tabela, seu propósito, momento de entrada no fluxo e plataforma de hospedagem.

f_eventos

BigQuery — performance_v4.f_eventos

Tabela de fatos de eventos comportamentais. Registra toda ação do usuário no site: pageview, form_submit, generate_lead, whatsapp_click. É o dado mais granular e mais bruto do ecossistema. Entra no fluxo no momento em que o usuário acessa qualquer propriedade da UNIBF.

unibf_leads_v2

Supabase + BigQuery — Leads brutos

Captura inicial do lead vindo de formulários das landing pages, site, quiz, ENEM, polos e orgânico. Contém dados informados diretamente pelo usuário, sem cruzamento com vendas ou normalização completa. Entra no fluxo no momento do submit do formulário.

leads_enriquecidos_v2

Supabase + BigQuery — Leads tratados

Versão tratada dos leads: telefone normalizado, e-mail em lowercase, modalidade e curso corrigidos para IDs canônicos, recorrência identificada, consent LGPD registrado, campos de status e fechamento do CRM (RD Station). Entra no fluxo após o processo de enriquecimento e padronização.

Lead_Real

🎯
Base final elegível para disparo

~241.016 linhas × 53 colunas. Resultado de quatro etapas: (1) exportação do Supabase, (2) deduplicação contra vendas e filtro de desqualificados, (3) governança de contatos recentes, (4) validação pré-disparo. É a fonte de verdade para qualquer campanha de WhatsApp, e-mail ou SMS.

unibf_vendas_v2

Supabase + BigQuery — Conversões

Registros de matrículas confirmadas. Atualizada automaticamente via Unimestre → Supabase → BigQuery. É a base usada para deduplicação: qualquer telefone ou e-mail presente aqui é excluído do Lead_Real. Entra no fluxo no momento da confirmação de matrícula.

report_tables_campaign

📊
Azure Databricks — Performance de campanhas

Dados de performance de disparos (WhatsApp, e-mail, SMS): volume entregue, lidas, respondidas, CPL, bounce. Alimenta o Power BI. Não entra diretamente no fluxo de leads — é consumido para análise e otimização da operação.

dim_templates

📝
Azure Databricks — Dimensão de templates

Catálogo de templates aprovados para disparo via OmniChat/WhatsApp. Associado a campanhas e fluxos automatizados. Dimensão de referência para os disparos registrados em report_tables_campaign.

dim_customer_support_request

💬
Azure Databricks — Atendimentos

Registro de conversas do OmniChat: tickets de suporte, qualificação comercial, encerramento. Vincula interações de atendimento ao lead e ao template disparado. Fonte de dados para cálculo de TMA, TMPR e taxa de resposta.

SEÇÃO 03

Relacionamentos e Chaves

Como as tabelas se conectam, quais são as chaves de join e como a resolução de identidade funciona na prática.

Chaves Principais de Identificação

Chave Tabelas Tipo Descrição
external_id f_eventos ↔ leads_enriquecidos_v2 STRING ID do CRM/banco de leads. Chave primária de ligação entre evento no site e registro de lead. Pode ser hash do usuário.
whatsapp_user_id f_eventos ↔ dim_customer_support_request STRING ID da plataforma OmniChat. Liga eventos de navegação com conversas de atendimento WhatsApp.
email Todas as tabelas STRING Chave de unificação de identidade entre ferramentas. Usado na deduplicação leads × vendas. Deve estar em lowercase.
telefone / telefone_celular leads_enriquecidos_v2 ↔ unibf_vendas_v2 STRING Chave operacional primária de deduplicação. O campo fullNumber é usado no disparo. Problemas de normalização existem — ver Seção 9.
cd_pessoa unibf_vendas_v2 STRING Identificador interno único do aluno/cliente no sistema ERP (Unimestre). Não existe nas tabelas de lead — é gerado somente após matrícula.
id unibf_leads_v2, leads_enriquecidos_v2, Lead_Real STRING Identificador sequencial do lead no sistema de origem (Supabase). Não é a mesma chave entre as três tabelas.
id_recorrencia_lead leads_enriquecidos_v2, Lead_Real NULLABLE Liga leads recorrentes ao mesmo indivíduo quando ele retorna ao funil com outro formulário.

Ordem de Prioridade de Matching

1
external_id (mais confiável)
Quando presente, é o join direto entre f_eventos e as tabelas de lead. Elimina ambiguidade de nome/telefone.
2
e-mail (segundo critério)
Join cross-table e deduplicação contra vendas. Requer normalização: lowercase obrigatório. Usado na blocklist de e-mail de vendas.
3
telefone (terceiro critério — maior risco)
Chave operacional para disparo. Formato inconsistente entre tabelas: pode conter DDD, +55, ou número puro. Requer normalização para fullNumber antes do join.
4
whatsapp_user_id (canal específico)
Usado apenas para correlacionar eventos do site com interações de chat. Não é universal — presente somente em leads que interagiram via OmniChat.

Problemas de Identidade Conhecidos

Fragmentação de Identidade

Um mesmo indivíduo pode estar em múltiplas tabelas com IDs diferentes, telefones em formatos distintos e e-mails com variações de capitalização. A resolução de identidade depende de normalização prévia dos campos antes de qualquer join.

SEÇÃO 04

Regras de Negócio Críticas

As regras que definem quais leads entram na base de disparo e quais são excluídos. Estas regras são aplicadas no processo de geração do Lead_Real.

Definição de Lead_Real

🎯
Lead_Real = Base Final Confiável para Disparo

Lead_Real é o resultado de quatro filtros sequenciais aplicados sobre leads_enriquecidos_v2. Não contém alunos matriculados, não contém desqualificados, não contém leads contatados recentemente. É a única base autorizada para disparo de campanhas.

Regra 1 — Deduplicação contra Vendas

Todo lead cujo telefone_celular ou e-mail já existe em unibf_vendas_v2 é removido da base de disparo. Isso garante que alunos matriculados não recebam comunicações de captação.

Etapa 2 — Script de Deduplicação (Etapa2-VendasxLeads)
# Remove leads já matriculados (match por telefone ou e-mail) leads_elegíveis = leads_enriquecidos[ ~leads_enriquecidos['telefone'].isin(vendas['telefone_celular']) & ~leads_enriquecidos['email'].isin(vendas['email']) ]

Regra 2 — Exclusão de Desqualificados (closing_reason)

Leads com os seguintes closing_reason são excluídos de todas as bases de disparo. A lista deve ser atualizada periodicamente conforme o time comercial altera as tags.

ensino medio incompleto fechou com o concorrente ja e aluno - atendimento cra ja e aluno - recem matriculado ja e aluno - renegociacao nao tem interesse nao tem os requisitos necessarios desqualificado queria curso gratis negocio ganho negocio perdido sou aluno sou_aluno venda perdida - cliente desqualificado sem interesse

Regra 3 — Governança de Contatos Recentes (Blocklist)

Leads contatados nos últimos 7 dias (em alguns fluxos, 15 dias) são incluídos em uma blocklist temporária e não recebem novo disparo. Esta regra é verificada no início do pipeline de preparação da base.

Espaçamento padrão
15 dias entre disparos para o mesmo número
Espaçamento mínimo
7 dias (fluxos específicos)
Limite mensal
400 mil disparos / 30 dias (OmniChat/WhatsApp)
Teto de touchpoints
Máx. 3 touchpoints/mês por número (meta); máx. absoluto 10–12/mês

Regra 4 — Rotina de Identificação de Aluno (n8n)

Fluxo automatizado via n8n que verifica periodicamente se leads na base RD Station converteram em matrícula. Ao confirmar conversão, aplica a tag aluno n8n, atualiza campos de matrícula e remove o contato das réguas de captação.

Nova variante — Pré-inscritos últimos 7 dias
# Exclusões para pipe de pré-inscritos (variante mais restritiva) EXCLUIR_CLOSING_NORM = { "negocio ganho", "negocio perdido", "ja e aluno", "ja e aluno - atendimento cra", "ja e aluno - recem matriculado", "ja e aluno - renegociacao", "sou aluno", "sou_aluno", "fechou com o concorrente", "desqualificado", "nao tem interesse", "sem interesse", "queria curso gratis", "nao tem os requisitos necessarios", "ensino medio incompleto" }
SEÇÃO 05

Segmentação de Leads

Critérios operacionais de classificação dos leads válidos para otimização de campanhas e jornadas.

Segmentação Temporal (Janela de Decisão)

Janela principal de decisão: 180 dias

Leads criados nos últimos 6 meses (180 dias) ainda não convertidos são considerados ativos de venda. Lead ativo = data_criacao >= hoje - 180 dias E status ∉ {Matriculado, Descartado, Concorrente, Não tem interesse, Opt-out}.

Segmento
Novo
0–30 dias. ~3 dias médios para fechar. Motor principal de velocidade.
Segmento
Backlog
1–5 meses. ~66 dias médios. Nutrição + sazonalidade.
Segmento
Legado
6+ meses. ~270 dias médios. Reativação específica.

Segmentação por Nível de Interesse

NívelCritérioAbordagem Recomendada
quenteInteragiu nos últimos 15 diasConversão direta. Abordagem comercial imediata.
mornoInteragiu entre 15 e 45 diasReforço de valor + oferta intermediária.
frioNunca interagiuNutrição de autoridade. Não forçar conversão imediata.

Segmentação Temporal Detalhada (Last N Days)

Last 1D Last 2D Last 3D Last 4D Last 5D Last 6D Last 7D Last 15D Last 30D Last 45D Last 60D 60D+ (Cold redistribution)

Segmentação por Modalidade

Graduação Pós-Graduação Licenciatura Técnicos
SEÇÃO 06

Pipeline de Preparação e Disparo

Fluxo técnico completo da geração da base final até o disparo OmniChat/WhatsApp.

Pipeline de Preparação da Base

1
Exportação do Supabase
Download da base leads_enriquecidos_v2 com todos os campos normalizados.
2
Filtro por Elegibilidade — Blocklist
Remove leads contatados nos últimos 15 dias. Aplica blocklist LGPD ("não tenho mais interesse").
3
Deduplicação contra Vendas
Cross-join com unibf_vendas_v2 por telefone e e-mail. Remove alunos matriculados.
4
Remoção de Tags de Fechamento
Aplica EXCLUIR_CLOSING_NORM: remove desqualificados, concorrentes, alunos, sem interesse.
5
Deduplicação por Telefone
Remove duplicatas dentro da própria base pelo campo telefone normalizado para fullNumber.
6
Aplicação de Templates
Geração do arquivo (Nome + fullNumber).csv. Resultado: Base Final para disparo.

Tipos de Disparo OmniChat

Campanhas Promocionais
Ofertas de cursos, descontos, Black Friday, picos sazonais.
Follow-up
Acompanhamento de leads que visualizaram mas não responderam.
Reengajamento
Reativação de backlog e legado com conteúdo específico.
Upsell
Oferta de segunda graduação, pós-graduação para clientes.
Remarketing
Leads que interagiram mas não converteram.

Estados do Fluxo de Atendimento

Visualizou e não respondeu Respondeu Em atendimento Aguardando resposta do lead Negócio Ganho Negócio Perdido
DICIONÁRIO · f_eventos

f_eventos

Tabela de fatos de eventos comportamentais. BigQuery · gtm-5zhzjzt-njk1n / performance_v4 / f_eventos. 36 campos.

Identificação do Evento

CampoTipoDescrição
event_idSTRING · REQUIREDIdentificador único do evento gerado pelo site/tag (UUID ou ID do GA/Tag Manager). Garante unicidade e rastreio do mesmo evento entre sistemas.
nome_eventoSTRING · REQUIREDNome lógico do evento coletado: page_view, generate_lead, form_submit, whatsapp_click. Chave de segmentação por tipo de ação.
data_hora_primeiro_acessoTIMESTAMP · REQUIREDData e hora do primeiro evento registrado para este usuário/sessão (primeiro pageview). Usado em análises de janela de decisão, coortes e origem inicial.
data_hora_atualTIMESTAMP · REQUIREDData e hora em que este evento específico foi disparado. Timestamp principal em filtros por período.
dominioSTRING · REQUIREDDomínio onde o evento ocorreu: unibf.com.br, inscricao.unibf.com.br. Diferencia propriedades e ambientes.
url_inteiraSTRING · REQUIREDURL completa no momento do evento (caminho + query string). Análise de funil por página e parâmetros adicionais.
x-ga-request_countINTEGER · REQUIREDContador incremental de requisições na sessão (originado do x-ga- do GA4). Útil para entender ordem e cadeia dos eventos.
ga_session_numberINTEGER · REQUIREDNúmero da sessão GA para o usuário (1ª, 2ª, 3ª sessão). Análise de comportamento por frequência de retorno ao site.

Identificação do Usuário / Lead

CampoTipoDescrição
external_idSTRING · REQUIREDIdentificador externo do usuário/lead (ID do CRM, banco de leads ou hash). Chave de join com tabelas de leads, matrículas e CRM.
whatsapp_user_idSTRING · REQUIREDID do usuário na plataforma de WhatsApp/OmniChat. Cruza eventos de navegação com eventos de chat.
nomeSTRING · REQUIREDNome do usuário capturado em formulários. Pode estar vazio em eventos puramente de navegação.
emailSTRING · REQUIREDE-mail do usuário quando informado. Chave importante para unificação de identidades entre ferramentas.
telefoneSTRING · REQUIREDTelefone informado no formato original do formulário. Em outro estágio do pipeline é normalizado para fullNumber, DDD etc.
existe_whatsappSTRING · NULLABLEFlag textual indicando se o número possui WhatsApp detectado/validado: sim, nao, desconhecido. Decide acionamento do canal WhatsApp.
escolaridadeSTRING · NULLABLENível de escolaridade informado: ensino medio completo, graduacao completa. Relevante para segmentações de campanha.

Dados de Navegação / Dispositivo

CampoTipoDescrição
client_user_agentSTRING · REQUIREDUser Agent do navegador/dispositivo. Identifica browser, SO e tipo de device (mobile/desktop).
ip_addressSTRING · REQUIREDIP público do usuário no momento do evento. Geolocalização e detecção de fraude/robô. Requer tratamento LGPD.
mobileSTRING · REQUIREDIndicador de acesso móvel: true/false ou mobile/desktop. Segmentação de desempenho por tipo de device.
paisSTRING · REQUIREDPaís detectado ou informado (ex.: Brasil).
estadoSTRING · REQUIREDEstado/UF associado ao IP ou campo de formulário (ex.: RJ, SP).
cidadeSTRING · REQUIREDCidade do usuário (formulário ou geolocalização por IP).

Dados de Interesse / Produto

CampoTipoDescrição
cursoSTRING · REQUIREDCurso/produto de interesse no momento do evento: Pedagogia EAD, Pós em Psicopedagogia. Chave para cruzar eventos com matrículas por curso.
modalidadeSTRING · REQUIREDModalidade do curso: EAD, Semipresencial, Tecnólogo. Análise de performance por tipo de oferta.

Parâmetros de Mídia — Primeira Entrada (_entrada)

CampoTipoDescrição
utm_source_entradaSTRING · REQUIREDutm_source da primeira sessão conhecida do usuário: google, facebook, instagram, afiliado_x.
utm_medium_entradaSTRING · REQUIREDutm_medium da primeira sessão: cpc, paid_social, email, organic.
utm_campaign_entradaSTRING · REQUIREDutm_campaign da primeira sessão. Define a campanha de entrada do lead (coorte original).
utm_content_entradaSTRING · REQUIREDutm_content da primeira sessão: variações de criativo, teste A/B.
utm_term_entradaSTRING · REQUIREDutm_term da primeira sessão: termo de busca em campanhas de pesquisa.

Parâmetros de Mídia — Campanha Atual (_atual)

CampoTipoDescrição
utm_source_atualSTRING · REQUIREDutm_source no momento do evento. Pode diferir da entrada se o usuário voltou por outro canal.
utm_medium_atualSTRING · REQUIREDutm_medium atual.
utm_campaign_atualSTRING · REQUIREDutm_campaign atual: campanha associada ao clique/sessão onde o evento ocorreu.
utm_content_atualSTRING · REQUIREDutm_content atual: criativo/variação que trouxe o clique.
utm_term_atualSTRING · REQUIREDutm_term atual: termo de busca na sessão corrente.

Identificadores de Mídia — Facebook / Google

CampoTipoDescrição
fbpSTRING · REQUIREDFacebook Browser ID (cookie fbp). Identifica o navegador para matching de eventos via pixel/Meta e CAPI.
fbcSTRING · REQUIREDFacebook Click ID (cookie fbc). Identificador de clique da Meta Ads (campanha/conjunto/anúncio). Usado na atribuição via CAPI.
gclidSTRING · REQUIREDGoogle Click ID associado à origem do evento. Integração e atribuição de campanhas Google Ads.
DICIONÁRIO · unibf_vendas_v2

unibf_vendas_v2

Tabela de conversões/matrículas. Supabase + BigQuery. Fonte de verdade para receita e deduplicação de leads.

CampoDescriçãoExemplos
cd_pessoaIdentificador interno único do aluno/cliente (ERP Unimestre)12345, 98765
emailE-mail usado na matrícula. Chave de deduplicação contra leads.[email protected]
telefone_celularTelefone celular do aluno convertido. Chave de deduplicação primária.21999998888
modalidadeModalidade do curso contratadoEAD, Presencial, Híbrido, Semipresencial
grauGrau acadêmico da matrículaBacharelado, Pós-Graduação, Mestrado, Técnico, Licenciatura
cursoNome do curso contratadoAdministração, Engenharia Civil, Pedagogia, Direito, Psicologia
matriculouStatus de matrícula (confirmação booleana)Sim, Não
origemOrigem da captação do alunoGoogle Ads, Facebook Ads, Indicação, Orgânico
origem2Origem secundária/detalhe do canalLanding Page A, Formulário B, Chatbot, WhatsApp
cd_coligadaCódigo interno da coligada/unidade1, 2, 10, 20, 35
dataData de matrícula2025-08-10, 2025-07-15
valor_parc_1Valor da primeira parcela150.00, 200.00, 300.00
valor_parc_2Valor da segunda parcela150.00, 200.00
valor_totalValor total do curso/matrícula3000.00, 4500.00, 1200.00
quantidade_parcelasNúmero de parcelas acordadas12, 6, 24, 18, 3
ticket_medio_globalTicket médio de compras globais do aluno2500.00, 4000.00
qtd_parcelasQuantidade de parcelas (campo complementar/sinônimo)12, 6, 24
estadoEstado de residência do alunoRJ, SP, MG, BA, DF
sexoSexo do alunoMasculino, Feminino, Outro
idadeIdade do aluno18, 22, 30, 40, 55
forma_pagamento_limpaForma de pagamento padronizadaCartão de Crédito, Boleto, PIX, Débito Automático
forma_pagamento_brutaForma de pagamento como recebida no sistema de origemCC, BOL, PIX, Débito, Transf
DICIONÁRIO · leads_enriquecidos_v2

leads_enriquecidos_v2

Base de leads tratada e enriquecida. Supabase + BigQuery. Resultado do processo de normalização sobre unibf_leads_v2.

CampoDescriçãoExemplos
idIdentificador único do lead no sistema Supabase10001, 10002
dateData/hora da captura do lead2025-08-20, 2025-07-10
nomeNome do leadMaria, João, Pedro
sobrenomeSobrenome do leadSilva, Souza, Oliveira
emailE-mail do lead[email protected]
telefoneTelefone do lead (pode ter DDD e/ou +55 — requer normalização)21999998888, +552199998877
modalidadeModalidade de interesse declarada pelo leadEAD, Presencial, Híbrido
cursoCurso de interesse do leadAdministração, Direito, Pedagogia
investimentoValor informado ou estimado do curso pelo lead500.00, 1000.00, 2000.00
cupomCupom de desconto informado pelo leadBOLSA55, DESCONTO20, CAMPANHAJULHO
consentIndica se o lead deu consentimento LGPD (opt-in). Campo crítico para governança.true, false, TRUE, FALSE, 1
utm_term_idID de termo de campanha digital101, 202, term_003
utm_content_idID de conteúdo da campanha301, 404, cont_abc
utm_campaign_idID interno da campanha digital501, 777, camp_2025
utm_sourceOrigem digital da campanhagoogle, facebook, instagram
utm_campaignNome da campanha digitalvestibular2025, desconto55, graduacao_online
statusStatus do lead no CRM RD Stationnovo, em_andamento, qualificado, perdido, convertido
contacted_userResponsável pelo contatoVictor, Maria, João, Sistema
finished_userUsuário que finalizou atendimentoVictor, CRM_bot, Ana
origin_channelCanal de origem do leadFacebook Ads, Google Ads, Orgânico, WhatsApp
origin_nameNome do canal/campanha de origemCampanha Vestibular, Formulário Site, LP_2025
origin_urlURL de origem da capturahttps://unibf.com/vestibular, https://lp.unibf.com/ead
origin_tokenToken único do canal/origemtok123, abc999, 456xyz
closing_reasonMotivo de fechamento do lead no CRMdesqualificado, desistência, matrícula concluída
modalidade_limpa_originalModalidade original antes da normalizaçãoEAD - Online, Presencial (Campus RJ)
normalizedFlag indicando se os dados foram normalizadossim, não, true, false
modalidade_limpaModalidade padronizada após normalizaçãoEAD, PRESENCIAL, HÍBRIDO, SEMIPRESENCIAL
curso_corrigidoCurso normalizado para nomenclatura canônicaAdm, Eng Civil, Pedagogia, Psicologia
id_cursoID único do curso no sistema1, 2, 3, 4, 5
id_areaID da área do curso10, 20, 30, 40, 50
id_modalidadeID da modalidade no sistema100, 200, 300, 400
lead_recorrenciaIndica se o lead já ocorreu antes (lead retornou ao funil)0, 1, false, true
id_recorrencia_leadID de recorrência do lead para ligação entre ocorrênciasrec123, rec456, rec789
DICIONÁRIO · unibf_leads_v2

unibf_leads_v2

Base de leads brutos capturados nos formulários das landing pages, site, quiz e canais orgânicos. Supabase + BigQuery.

CampoDescriçãoExemplos
idIdentificador único do lead no Supabase1001, 1002, 1003
dateData/hora da captura do lead2025-08-20, 2025-07-10
nomeNome do lead informado no formulárioMaria, João, Pedro
sobrenomeSobrenome do leadSilva, Souza, Oliveira
emailE-mail informado pelo lead[email protected]
telefoneTelefone informado pelo lead (formato original do formulário)21999998888, 11988887777
modalidadeModalidade de interesse declaradaEAD, Presencial, Híbrido
cursoCurso de interesseAdministração, Direito, Engenharia
investimentoValor estimado do curso pelo lead500.00, 1000.00, 2000.00
utm_sourceOrigem da campanha digitalgoogle, facebook, instagram
utm_campaignNome da campanha de marketingvestibular2025, desconto55, graduacao_online
utm_mediumMeio da campanha digitalcpc, email, social, referral, display
utm_contentConteúdo do anúncio/campanhaanuncioA, banner1, video_lp
utm_termPalavra-chave capturadacurso_online, bolsa_55, graduação
interaction_dateData da última interação do lead2025-08-21, 2025-08-19
interaction_idID da interação no sistemaint123, int456, int789
statusStatus atual do lead no CRMnovo, em_andamento, qualificado, perdido, convertido
contacted_userUsuário que fez o contatoVictor, Ana, João, CRM_Bot
finished_userUsuário que finalizou a jornadaVictor, CRM_Bot, Pedro
origin_channelCanal principal de origemGoogle Ads, Facebook Ads, Orgânico, WhatsApp
origin_nameNome do canal/campanhaCampanha Vestibular, LP_Engenharia
origin_typeTipo de origem do leaddigital, físico, indicação, orgânico, parceiro
origin_urlURL da origemhttps://unibf.com/vestibular, https://lp.unibf.com/ead
origin_tokenToken único da origemtok123, abc999, jwt_abc
closing_reasonMotivo de fechamento do leaddesqualificado, desistência, matrícula concluída, duplicado
DICIONÁRIO · Lead_Real

Lead_Real

Base final elegível para disparo. ~241.016 linhas × 53 colunas. Mesma estrutura do enriquecido, mas já filtrada. Não contém alunos matriculados. Não contém desqualificados.

Esta é a única base autorizada para disparo de campanhas

Lead_Real.csv não contém leads cujo telefone_celular ou email já estejam em unibf_vendas_v2. Também não contém leads com closing_reason = desqualificado ou qualquer dos motivos de exclusão listados na Seção 4.

CampoDescriçãoExemplos
idIdentificador único do lead (herdado de leads_enriquecidos_v2)20001, 20002, 20003
dateData/hora da captura do lead2025-08-20, 2025-07-10
nomeNome do lead (válido para disparo)Carla, Bruno, Fernanda
sobrenomeSobrenome do leadAlmeida, Ribeiro, Costa
emailE-mail válido — não duplicado com vendas[email protected], [email protected]
telefoneTelefone válido — não duplicado com vendas. Usado como fullNumber no disparo.21999998888, 11988887777
modalidadeModalidade de interesse do leadEAD, Presencial, Híbrido
cursoCurso de interesse do leadAdministração, Direito, Pedagogia
investimentoValor estimado informado pelo lead500.00, 1000.00, 2000.00
cupomCupom de desconto quando informadoBOLSA55, VESTIBULAR2025
consentConsentimento LGPD (opt-in). Deve ser true para disparo autorizado.true, false, TRUE, 1
utm_term_idID de termo da campanha de origem101, 202, term_003
utm_content_idID do conteúdo da campanha de origemcont001, contXYZ
utm_campaign_idID interno da campanha de origemcamp001, vestibular_2025
utm_sourceOrigem da campanha digitalgoogle, facebook, instagram
utm_campaignNome da campanha de marketingvestibular2025, desconto55
statusStatus do lead no CRM (apenas status não excluídos)novo, em_andamento, qualificado
contacted_userUsuário que fez contatoVictor, Ana, CRM_Bot
finished_userUsuário que finalizou atendimentoVictor, Sistema, CRM_Bot
origin_channelCanal de origemFacebook Ads, Google Ads, Orgânico
origin_nameNome do canal/campanha de origemCampanha Vestibular, LP_Engenharia
origin_urlURL de origem do leadhttps://unibf.com/vestibular
origin_tokenToken único do canal/origemtok123, abc999
closing_reasonMotivo de fechamento — somente valores ≠ "desqualificado" (pós-filtro)desistência, matrícula concluída, não respondeu
modalidade_limpa_originalModalidade original antes da normalizaçãoEAD - Online, Presencial (Campus SP)
normalizedFlag de normalização dos dadossim, não, true, false
modalidade_limpaModalidade padronizada (pós-normalização)EAD, PRESENCIAL, HÍBRIDO, SEMIPRESENCIAL
curso_corrigidoCurso normalizado para nomenclatura canônicaAdm, Eng Civil, Psicologia, Pedagogia
id_cursoID do curso no sistema1, 2, 3, 4, 5
id_areaID da área acadêmica10, 20, 30, 40, 50
id_modalidadeID da modalidade no sistema100, 200, 300, 400
lead_recorrenciaIndica se o lead é recorrente (retornou ao funil)0, 1, false, true
id_recorrencia_leadID de recorrência para ligação de ocorrências do mesmo indivíduorec123, rec456, rec789
SEÇÃO 07

Atribuição de Mídia

Como funcionam os campos _entrada vs _atual e seu impacto nas análises de marketing.

Primeira Origem vs. Última Origem

Campos _entrada (Primeira Origem)
utm_source_entrada
utm_medium_entrada
utm_campaign_entrada
utm_content_entrada
utm_term_entrada

Capturados na primeira sessão do usuário. Representam a coorte original — o canal que originou o lead pela primeira vez. Usados para análise de origem de lead.

Campos _atual (Sessão Atual)
utm_source_atual
utm_medium_atual
utm_campaign_atual
utm_content_atual
utm_term_atual

Capturados no momento do evento específico. Podem diferir da entrada se o usuário voltou por outro canal. Usados para análise de origem de conversão.

Impacto nas Análises de Marketing

AnáliseCampo CorretoMotivo
Qual canal originou o lead?utm_source_entradaRepresenta a primeira interação conhecida — o canal que "descobriu" o lead.
Qual canal gerou a conversão?utm_source_atualRepresenta o canal da sessão onde ocorreu o evento de conversão (last-click).
Análise de coorte por campanhautm_campaign_entradaAgrupa leads pela campanha original de captação, independente de re-entradas.
Performance de criativoutm_content_atualIdentifica qual variação/criativo gerou o clique que levou ao evento.
CPL por canalutm_source_entrada + data_hora_primeiro_acessoCusto por lead calculado sobre a origem inicial, não sobre re-engajamentos.
Inconsistência Conhecida nos UTMs

Os campos UTM frequentemente chegam nulos ou com valores genéricos (direct, (none)) quando o usuário acessa diretamente ou via link não tagueado. Isso distorce análises de atribuição. Ver Seção 9 para detalhes.

SEÇÃO 08

Governança e LGPD

Regras de privacidade, consentimento, exclusão e anonimização de dados de leads conforme a Lei Geral de Proteção de Dados.

Consentimento (Opt-in)

O campo consent em leads_enriquecidos_v2 e Lead_Real registra o opt-in do lead para comunicações. Valores aceitos: true, TRUE, 1. Leads com consent = false não devem entrar em réguas de marketing.

🚫
A. Exclusão Lógica (Opt-out)

Lead continua na base mas não pode ser contatado. Gatilhos: clique em descadastro, pedido explícito, reclamação formal (Procon). Aplica tag optout_email_global ou bloqueado_email. Remove de todas as listas e fluxos automáticos. Mantém e-mail + data + motivo para auditoria LGPD.

🧹
B. Exclusão Operacional

Lead sem engajamento por muito tempo. Critério: 12 meses sem abrir e-mail → move para segmento "inativo". Após campanha de reativação final (2–3 tentativas): manter como registro frio ou seguir para anonimização.

🔒
C. Anonimização

Remove dados que identifiquem a pessoa, mas mantém dados agregados para análise histórica. Quando: pedido de eliminação, inatividade 3–5 anos, fim de obrigação contratual.

Como Anonimizar

CampoAçãoExemplo Pós-Anonimização
emailSubstituir por hash irreversível[email protected]
nomeSubstituir por valor genéricoANONIMIZADO
telefoneZerar ou substituir por padrãoNULL ou 00000000000
cidadeManter apenas UF/macro-regiãoRJ (manter estado, remover cidade)
ip_addressZerar completamenteNULL
datasManter (sem identificação pessoal)Manter date, data_criacao
IDs internosManter se não reversíveisManter id, id_curso
utm_*, origin_*Manter para análise de performance históricaManter todos os campos de campanha

Riscos e Considerações

⚠️
ip_address — Dado Pessoal Sensível
O campo ip_address em f_eventos é considerado dado pessoal pela LGPD. Seu uso para geolocalização e detecção de fraude é legítimo, mas deve estar coberto pela política de privacidade. Não deve ser exposto em relatórios ou dashboards sem pseudonimização.
⚠️
telefone — Chave Dupla (Operacional + Pessoal)
O telefone é simultaneamente a chave de deduplicação operacional e um dado pessoal. Seu uso em join com vendas é operacionalmente necessário, mas deve ser tratado com políticas de retenção e anonimização claras.
⚠️
email — Retenção Pós-Opt-out
Após opt-out, o e-mail deve ser mantido apenas em forma de hash para comprovação de que o pedido foi atendido. Não pode ser usado para nenhuma comunicação posterior.
SEÇÃO 09

Fonte de Verdade por Domínio

Mapeamento definitivo de qual base deve ser consultada para cada domínio de dados do CRM UNIBF.

comportamento
f_eventos
Pageviews, form_submits, clicks, sessões GA4
leads brutos
unibf_leads_v2
Captura inicial de formulários e LPs
leads tratados
leads_enriquecidos_v2
Dados normalizados com status de CRM
disparo
Lead_Real
Base final elegível, filtrada e deduplicada
vendas / receita
unibf_vendas_v2
Matrículas confirmadas, valores, formas de pagamento
performance de campanha
report_tables_campaign
CPL, bounce, open rate, entregues, lidos
templates de mensagem
dim_templates
Catálogo de templates aprovados para WhatsApp
atendimentos
dim_customer_support_request
Conversas OmniChat, TMA, TMPR, taxa de resposta
atribuição de mídia
f_eventos (utm_*_entrada)
Origem de lead por primeira entrada
deduplicação
unibf_vendas_v2 (cruzamento)
Blocklist de telefone e e-mail de alunos matriculados
SEÇÃO 10

Observações de Qualidade de Dados

Problemas reais identificados nas bases que impactam a confiabilidade de análises e a eficiência de campanhas.

📞
Telefone não padronizado entre tabelas
O campo telefone existe em diferentes formatos: número puro (21999998888), com DDD separado, com prefixo +55 (+552199998877). A normalização para fullNumber é feita no pipeline de disparo, mas joins entre tabelas sem normalização prévia geram falsos negativos na deduplicação — alunos matriculados podem escapar do filtro.
📧
E-mail ausente ou nulo em eventos de navegação
Em f_eventos, o campo email é REQUIRED mas frequentemente vazio em eventos de page_view onde nenhum formulário foi submetido. Isso limita a capacidade de join diretamente entre eventos e leads sem passar pelo external_id.
📡
UTMs inconsistentes ou nulos
Parcela significativa dos leads chega com utm_source = direct, (none) ou null, especialmente em tráfego orgânico, acessos diretos e links não tagueados de WhatsApp. Em 2025, o mês de abril concentrou alto volume de desengajamento correlacionado com base de UTMs fracos — indicando que a qualidade da base é mais determinante que o volume.
🔀
Múltiplos IDs para o mesmo indivíduo
Um lead pode ter: (1) um id em unibf_leads_v2, (2) um id diferente em leads_enriquecidos_v2, (3) um external_id no GA/GTM, (4) um whatsapp_user_id no OmniChat e (5) um cd_pessoa no Unimestre se converteu. A ausência de um ID unificado de pessoa torna a análise de jornada completa dependente de cruzamentos por telefone/e-mail, com os riscos de qualidade associados.
🏷️
closing_reason sem padrão único
O campo closing_reason apresenta duplicidades semânticas: Não tem interesse, nao tem interesse, sem interesse, Sem Interesse - Não Tem Interesse existem como valores separados. A normalização por EXCLUIR_CLOSING_NORM resolve parcialmente, mas deve ser atualizada toda vez que o time comercial criar novas tags.
📉
Bounce de e-mail em 11,69% da base
Em 2025, de 6.400.639 envios tentados de e-mail, 748.112 retornaram bounce (11,69%). O mês de abril atingiu 19,65% de bounce em 1,39M de envios — evidência de base fria/desatualizada. Meta operacional para 2026: bounce < 5% (ideal 2–3%).
📋
lead_recorrencia inconsistente
O campo lead_recorrencia aceita valores boolean (true/false) e numéricos (0/1) sem padronização entre tabelas. Análises de coorte por recorrência exigem normalização prévia deste campo.

Diagnóstico Operacional 2025

Leads 2025
260.565
+170% vs 2024 (96.552)
Matrículas 2025
27.898
+7,5% vs 2024 (25.941)
Taxa de Conversão
10,71%
vs 26,87% em 2024 — queda crítica
SEÇÃO 11

Visão Relacional Final

Representação da estrutura de dados do CRM UNIBF: fatos, dimensões e relacionamentos entre tabelas.

Tabelas de Fato

FATO CENTRAL: f_eventos
Granularidade: 1 linha por evento de usuário
f_eventos.external_id → leads_enriquecidos_v2.id
f_eventos.whatsapp_user_id → dim_customer_support_request
f_eventos.email → unibf_vendas_v2.email
f_eventos.telefone → Lead_Real.telefone
FATO CONVERSÃO: unibf_vendas_v2
Granularidade: 1 linha por matrícula confirmada
vendas.telefone_celular ← Lead_Real.telefone (dedup)
vendas.email ← leads_enriquecidos_v2.email (dedup)
vendas.cd_pessoa → [ERP Unimestre]

Dimensões Implícitas

dim_templates
Dimensão de templates de disparo. Join com report_tables_campaign pelo ID do template usado na campanha.
Azure Databricks
dim_customer_support_request
Dimensão de atendimentos. Join com eventos via whatsapp_user_id e com campanhas via template + data.
Azure Databricks
dim_curso (implícita)
Representada pelos campos id_curso, id_area, id_modalidade em leads_enriquecidos_v2 e Lead_Real.
Derivada
dim_campanha (implícita)
Representada pelos campos utm_*_entrada e utm_*_atual em f_eventos. Origem, meio, campanha e criativo.
Derivada

Mapa de Fluxo Completo

LPs / Site / Quiz / Orgânico
f_eventos (BigQuery)
Integraleads / API
unibf_leads_v2 (Supabase)
n8n + RD Station
leads_enriquecidos_v2 (Supabase + BQ)
Pipeline Python
Lead_Real (Base de Disparo)
OmniChat / Active Campaign
Disparo → Atendimento → Qualificação
Unimestre
unibf_vendas_v2 → BigQuery → Power BI
📌
Regra de Ouro da Arquitetura

Nenhuma campanha de captação deve ser disparada sem validação prévia contra Lead_Real. Nenhuma análise de receita deve ser feita sem consultar unibf_vendas_v2. Nenhuma atribuição de lead deve ser feita sem distinguir utm_*_entrada de utm_*_atual.