K1 Krat One Structure Atlas ENV · lab
Módulos/CRM
Módulo · MVP

CRM

O primeiro pilar e a espinha dorsal: leads de Ads, contatos de Social e execuções de agentes AI todos desaguam aqui. Cada Conquista (client) tem seu próprio CRM.

escopo por client_iddedup no bancotimeline unificadaeventos p/ automação
A

Mapa de entidades

company ──1:N── contact ──M:N── deal ──N:1── stage ──N:1── pipeline
   │              │  │             │
   └─ contact_company │            └─ deal_contact (papéis)
                      │
      activity / task / note  (timeline polimórfica)
      tag · list / segment · custom_field_def
B

Entidades núcleo

Todas herdam o Base Table Template (id, workspace_id, custom, version, timestamps, deleted_at).

contacta pessoa — o coração do CRM
client_iduuidConquista dona do registro (obrigatório)
primary_emailcitextChave de dedup · unique parcial por client
first/last_name, titletextIdentidade básica
company_id, owner_iduuidEmpresa primária + dono (membership)
lifecycle_stagetextlead · mql · sql · opportunity · customer
sourcejsonbchannel, campaign, connection_id, first_touch
consent, do_not_contactjsonb/boolLGPD/CAN-SPAM · alimenta marketing
companyorganização (≠ account de billing)
name, domaintext/citextdomain = dedup
industry, size_bandtextfirmográficos
owner_id, addressuuid/jsonbdono + endereço
dealoportunidade · o avanço territorial
pipeline_id, stage_iduuidposição no funil
value_amountbigintmoney int + currency
status, close_datetext/dateopen · won · lost
activitytimeline unificada, polimórfica
typetextnote·email·call·meeting·stage_change
contact/company/deal_iduuidligações opcionais
actor_iduuidmembership OU service_account (agente!)
taskacionável · dispara lembrete
assignee_id, due_atuuid/tsresponsável + prazo
status, prioritytextopen · done · cancelled

Multi-canal: contact_email / contact_phone em child tables (não JSONB) — porque precisamos buscar e deduplicar por e-mail. contact_company é M:N com papel.

C

Pipelines & deals

pipeline / stage

Múltiplos pipelines por client (ex: "Vendas", "Onboarding"). Cada stage tem probability (forecast) e rot_days (alerta de deal esquecido).

deal_contact

Associação com papéis: decision_maker, champion, influencer, user. Um deal envolve várias pessoas.

D

Listas & segmentos

list · estática

Membros fixos (list_member). Útil pra campanhas pontuais e importações.

segment · dinâmico

Um filter jsonb resolvido em runtime (ex: lifecycle=customer AND source.channel=meta_ads). Base pras automações.

E

Amarrações com o Core

O CRM não é uma ilha — ele consome e alimenta os outros pilares.

Source cross-pillar

O webhook Meta Lead Ads → contact.created (Core #5/#7) preenche source.connection_id automático. Ads alimenta o CRM em tempo real.

Eventos emitidos

Para o Event Bus (Core #7), disparando automações, agentes e analytics sem acoplamento.

contact.createdcontact.mergeddeal.stage_changeddeal.wontask.completed

Dedup / merge

Chave natural = e-mail normalizado por client (unique parcial). Merge reatribui activities/deals ao sobrevivente e loga no audit_log.

Consent → Notifications

consent jsonb alimenta o stream de marketing (Core #11); do_not_contact é respeitado por todo envio.

G

Próximos blocos

Serviços / API

tRPC, operações-chave: merge, convert-lead-to-deal, forecast, máquina de automações.

planejado

Automações

Gatilhos sobre eventos → módulo Workflows (builder visual).

planejado