Sistema de Timeline Cliente
Arquitetura completa de rastreamento de eventos que registra toda a jornada do cliente no CRM. De transferências entre corretores até fechamento de negócios, cada ação é capturada com metadados detalhados em português.
Arquitetura Centralizada
Sistema construído com RegisterTimelineEvent como ponto único de criação de eventos. Integrado em 9 use cases diferentes, garantindo que nenhuma ação importante passe despercebida.
- Query inteligente com $or: busca por contactId OU clientId
- Claiming automático de eventos órfãos após sincronização
- Metadata 100% em português (modalidade, valor, operadora)
- Try/catch em todos eventos - nunca quebra o fluxo principal
interface IClientTimeline {
clientId?: ObjectId;
contactId?: Number;
queueId?: ObjectId;
brokerId?: ObjectId;
type: TimelineType;
content: string;
metadata?: Mixed;
// valor, modalidade, operadora...
}
9 Tipos de Eventos Rastreados
ATTENDANCE_START
Início Atendimento
DEAL_WON
Negócio Ganho
DEAL_LOST
Negócio Perdido
TRANSFER
Transferência
MANUAL_CHANGE
Mudança Manual
INTERACTION
Interação
OTHER
Reabertura
const types = ['ATTENDANCE_START', 'DEAL_WON', 'DEAL_LOST', 'TRANSFER', 'MANUAL_CHANGE', 'INTERACTION', 'OTHER']
Claiming de Órfãos
Problema: Quando cliente chega, só temos contactId (Ploomes). O clientId (MongoDB) só existe após sincronização.
Solução: Todos os 9 use cases fazem claiming automático, vinculando eventos órfãos ao clientId criado. Timeline completa mesmo antes da sync.
// Orphan Claiming
await ClientTimeline.updateMany(
{ contactId, clientId: { $exists: false } },
{ $set: { clientId } }
);
Query com $or
Busca eventos antes e depois da sincronização Ploomes usando operador lógico $or.
ClientTimeline.find({
$or: [
{ contactId },
{ clientId }
]
}).sort({ createdAt: 1 })
- Popula brokerId com nome do usuário
- Ordena cronologicamente (ASC)
- Retorna array formatado
Metadata Localizada
Todos os eventos capturam metadata específica 100% em português para análise e auditoria completa.
metadata: {
modalidade: 'MEI',
operadora: 'Unimed',
valor: 5000,
stageAntigo: 'Proposta',
stageNovo: 'Fechado'
}
Interface Visual
ClientTimelineTree renderiza eventos em design de skill tree com layout alternado, 20+ ícones mapeados, gradientes e animações.