EVENT - Rastrear Eventos de Negócio
O que é este Node?
O EVENT é o node responsável por rastrear eventos de negócio e ações do usuário com tipo, propriedades e contexto completo para análise comportamental.
Por que este Node existe?
Eventos de negócio são cruciais para análise. O EVENT existe para:
- Rastreamento de ações: Capturar ações importantes dos usuários
- Análise comportamental: Entender padrões de uso e jornada
- Funis de conversão: Mapear etapas críticas do negócio
- Segmentação de usuários: Classificar usuários por comportamento
- Product analytics: Medir engajamento e adoção de features
Como funciona internamente?
Quando o EVENT é executado, o sistema:
- Valida dados obrigatórios (eventType e eventName)
- Enriquece propriedades com dados contextuais (URL, user agent, IP)
- Gera anonymous_id se usuário não identificado
- Adiciona contexto de campanha (source, medium, campaign)
- Adiciona timestamp se não fornecido
- Rastreia evento no sistema de analytics
- Retorna confirmação com dados completos do evento
Código interno (analytics-executor.service.ts:162-202):
private async executeEvent(parameters: any, context: any): Promise<any> {
const { eventType, eventName, properties, userId, anonymous_id, timestamp } = parameters;
this.logger.log(`🎯 EVENT - Type: ${eventType}, Name: ${eventName}`);
if (!eventType || !eventName) {
throw new Error('Event type and name are required');
}
const event = {
eventType: eventType, // track, page, screen, identify, group, alias
eventName: eventName,
properties: {
...properties,
timestamp: timestamp || new Date().toISOString(),
page_url: context.pageUrl,
user_agent: context.userAgent,
ip_address: context.ipAddress
},
userId: userId || context.userId,
anonymous_id: anonymous_id || this.generateAnonymousId(),
context: {
flowId: context.flowId,
sessionId: context.sessionId,
campaign: context.campaign,
source: context.source,
medium: context.medium
},
timestamp: timestamp || new Date().toISOString()
};
// Track event (in production, send to analytics platform)
await this.trackEvent(event);
return {
success: true,
action: 'event_tracked',
event: event,
timestamp: event.timestamp
};
}
Quando você DEVE usar este Node?
Use EVENT sempre que precisar rastrear ações de negócio:
Casos de uso:
- Jornada do usuário: Rastrear cada etapa da experiência
- Features de produto: Medir uso de funcionalidades
- Conversões: Registrar eventos críticos (cadastro, compra, cancelamento)
- Engajamento: Medir interação com conteúdo
- Retenção: Identificar padrões de retorno
- Segmentação: Criar cohorts baseados em comportamento
Quando NÃO usar EVENT:
- Métricas numéricas: Use METRIC para KPIs com valores
- Analytics com providers: Use ANALYTICS para GA/Mixpanel
- Logs técnicos: Use LOGGER para debug
Parâmetros Detalhados
eventType (string, obrigatório)
O que é: Tipo de evento seguindo padrão Segment/analytics.
Opções:
- track - Ação do usuário (padrão mais comum)
- page - Visualização de página
- screen - Visualização de tela (mobile)
- identify - Identificar usuário
- group - Associar usuário a grupo/empresa
- alias - Conectar identidades de usuário
Flow completo para testar tipos:
{
"name": "Teste EVENT - Event Types",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "event_track",
"type": "event",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Track - Botão Clicado",
"parameters": {
"eventType": "track",
"eventName": "button_clicked",
"properties": {
"button_id": "cta_signup",
"button_text": "Criar Conta"
}
}
}
},
{
"id": "event_page",
"type": "event",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Page - Página Vista",
"parameters": {
"eventType": "page",
"eventName": "page_viewed",
"properties": {
"page_name": "Pricing",
"page_path": "/pricing"
}
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Seu email:",
"variable": "email"
}
}
},
{
"id": "event_identify",
"type": "event",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Identify - Usuário",
"parameters": {
"eventType": "identify",
"eventName": "user_identified",
"properties": {
"email": "{{email}}",
"identified_at": "{{$timestamp}}"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ 3 tipos de eventos rastreados:\n- Track (ação)\n- Page (página)\n- Identify (usuário)"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "event_track" },
{ "source": "event_track", "target": "event_page" },
{ "source": "event_page", "target": "input_1" },
{ "source": "input_1", "target": "event_identify" },
{ "source": "event_identify", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Eventos de track, page e identify serão registrados
eventName (string, obrigatório)
O que é: Nome descritivo do evento (use snake_case).
Flow completo para testar:
{
"name": "Teste EVENT - Event Names",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "event_1",
"type": "event",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Produto Visualizado",
"parameters": {
"eventType": "track",
"eventName": "product_viewed"
}
}
},
{
"id": "event_2",
"type": "event",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Adicionado ao Carrinho",
"parameters": {
"eventType": "track",
"eventName": "product_added_to_cart"
}
}
},
{
"id": "event_3",
"type": "event",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Checkout Iniciado",
"parameters": {
"eventType": "track",
"eventName": "checkout_started"
}
}
},
{
"id": "event_4",
"type": "event",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Compra Completa",
"parameters": {
"eventType": "track",
"eventName": "purchase_completed"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Funil de e-commerce rastreado:\n1. product_viewed\n2. product_added_to_cart\n3. checkout_started\n4. purchase_completed"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "event_1" },
{ "source": "event_1", "target": "event_2" },
{ "source": "event_2", "target": "event_3" },
{ "source": "event_3", "target": "event_4" },
{ "source": "event_4", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
properties (object, opcional)
O que é: Propriedades adicionais do evento com contexto.
Flow completo para testar:
{
"name": "Teste EVENT - Properties",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_produto",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Produto",
"parameters": {
"message": "Qual produto?",
"variable": "produto"
}
}
},
{
"id": "number_preco",
"type": "number",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Preço",
"parameters": {
"message": "Preço:",
"variable": "preco",
"decimals": 2
}
}
},
{
"id": "number_qty",
"type": "number",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Quantidade",
"parameters": {
"message": "Quantidade:",
"variable": "quantidade",
"min": 1
}
}
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Calcular Total",
"parameters": {
"operation": "set",
"variables": {
"total": "{{preco * quantidade}}"
}
}
}
},
{
"id": "event_1",
"type": "event",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Rastrear Compra",
"parameters": {
"eventType": "track",
"eventName": "purchase_completed",
"properties": {
"product_name": "{{produto}}",
"product_price": "{{preco}}",
"quantity": "{{quantidade}}",
"total_value": "{{total}}",
"currency": "BRL",
"payment_method": "credit_card",
"category": "electronics",
"brand": "Apple",
"sku": "IPHONE15-128GB"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "✅ Compra rastreada!\n\n🛍️ {{quantidade}}x {{produto}}\n💰 Total: R$ {{total}}\n\n📊 Evento com propriedades completas registrado!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_produto" },
{ "source": "input_produto", "target": "number_preco" },
{ "source": "number_preco", "target": "number_qty" },
{ "source": "number_qty", "target": "variable_1" },
{ "source": "variable_1", "target": "event_1" },
{ "source": "event_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite "iPhone 15", 5000, 2 - evento com todas as propriedades será rastreado
userId (string, opcional)
O que é: ID do usuário (para usuários identificados).
Padrão: Usa context.userId automaticamente
anonymous_id (string, opcional)
O que é: ID anônimo para rastrear antes da identificação.
Padrão: Gerado automaticamente (anon_timestamp_random)
timestamp (string, opcional)
O que é: Timestamp ISO 8601 do evento.
Padrão: Data/hora atual
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| eventType | string | Sim | Tipo do evento (track, page, screen, identify, group, alias) |
| eventName | string | Sim | Nome do evento (snake_case) |
| properties | object | Não | Propriedades adicionais do evento |
| userId | string | Não | ID do usuário (padrão: context.userId) |
| anonymous_id | string | Não | ID anônimo (auto-gerado se omitido) |
| timestamp | string | Não | Timestamp ISO 8601 (padrão: now) |
Exemplo 1: Funil Completo de Onboarding
Objetivo: Rastrear todas as etapas do onboarding
JSON para Importar
{
"name": "Onboarding Funnel Tracking",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "event_started",
"type": "event",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Onboarding Iniciado",
"parameters": {
"eventType": "track",
"eventName": "onboarding_started",
"properties": {
"source": "whatsapp",
"flow_version": "v2"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Boas-vindas",
"parameters": {
"message": "👋 Bem-vindo! Vamos criar sua conta em 3 passos."
}
}
},
{
"id": "event_step1",
"type": "event",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Step 1 Iniciado",
"parameters": {
"eventType": "track",
"eventName": "onboarding_step_started",
"properties": {
"step_number": 1,
"step_name": "personal_info"
}
}
}
},
{
"id": "input_nome",
"type": "input",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Nome",
"parameters": {
"message": "1/3: Seu nome completo:",
"variable": "nome"
}
}
},
{
"id": "event_step1_completed",
"type": "event",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Step 1 Completo",
"parameters": {
"eventType": "track",
"eventName": "onboarding_step_completed",
"properties": {
"step_number": 1,
"step_name": "personal_info"
}
}
}
},
{
"id": "event_step2",
"type": "event",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Step 2 Iniciado",
"parameters": {
"eventType": "track",
"eventName": "onboarding_step_started",
"properties": {
"step_number": 2,
"step_name": "contact_info"
}
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "2/3: Seu email:",
"variable": "email"
}
}
},
{
"id": "event_step2_completed",
"type": "event",
"position": { "x": 1700, "y": 100 },
"data": {
"label": "Step 2 Completo",
"parameters": {
"eventType": "track",
"eventName": "onboarding_step_completed",
"properties": {
"step_number": 2,
"step_name": "contact_info",
"email": "{{email}}"
}
}
}
},
{
"id": "event_identify",
"type": "event",
"position": { "x": 1900, "y": 100 },
"data": {
"label": "Identificar Usuário",
"parameters": {
"eventType": "identify",
"eventName": "user_identified",
"properties": {
"name": "{{nome}}",
"email": "{{email}}",
"signup_date": "{{$timestamp}}"
}
}
}
},
{
"id": "event_step3",
"type": "event",
"position": { "x": 2100, "y": 100 },
"data": {
"label": "Step 3 Iniciado",
"parameters": {
"eventType": "track",
"eventName": "onboarding_step_started",
"properties": {
"step_number": 3,
"step_name": "preferences"
}
}
}
},
{
"id": "input_interesse",
"type": "input",
"position": { "x": 2300, "y": 100 },
"data": {
"label": "Interesses",
"parameters": {
"message": "3/3: Qual seu principal interesse? (vendas/marketing/suporte)",
"variable": "interesse"
}
}
},
{
"id": "event_step3_completed",
"type": "event",
"position": { "x": 2500, "y": 100 },
"data": {
"label": "Step 3 Completo",
"parameters": {
"eventType": "track",
"eventName": "onboarding_step_completed",
"properties": {
"step_number": 3,
"step_name": "preferences",
"interest": "{{interesse}}"
}
}
}
},
{
"id": "event_completed",
"type": "event",
"position": { "x": 2700, "y": 100 },
"data": {
"label": "Onboarding Completo",
"parameters": {
"eventType": "track",
"eventName": "onboarding_completed",
"properties": {
"total_steps": 3,
"completed_at": "{{$timestamp}}",
"interest": "{{interesse}}"
}
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 2900, "y": 100 },
"data": {
"label": "Concluído",
"parameters": {
"message": "🎉 Parabéns, {{nome}}!\n\nSeu cadastro está completo!\n\n📊 Toda sua jornada foi rastreada:\n- 3 steps iniciados\n- 3 steps completados\n- Usuário identificado\n- Onboarding completo"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 3100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "event_started" },
{ "source": "event_started", "target": "message_1" },
{ "source": "message_1", "target": "event_step1" },
{ "source": "event_step1", "target": "input_nome" },
{ "source": "input_nome", "target": "event_step1_completed" },
{ "source": "event_step1_completed", "target": "event_step2" },
{ "source": "event_step2", "target": "email_1" },
{ "source": "email_1", "target": "event_step2_completed" },
{ "source": "event_step2_completed", "target": "event_identify" },
{ "source": "event_identify", "target": "event_step3" },
{ "source": "event_step3", "target": "input_interesse" },
{ "source": "input_interesse", "target": "event_step3_completed" },
{ "source": "event_step3_completed", "target": "event_completed" },
{ "source": "event_completed", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: 👋 Bem-vindo! Vamos criar sua conta em 3 passos.
Sistema: 1/3: Seu nome completo:
Usuário: João Silva
Sistema: 2/3: Seu email:
Usuário: joao@example.com
Sistema: 3/3: Qual seu principal interesse? (vendas/marketing/suporte)
Usuário: vendas
Sistema: 🎉 Parabéns, João Silva!
Seu cadastro está completo!
📊 Toda sua jornada foi rastreada:
- 3 steps iniciados
- 3 steps completados
- Usuário identificado
- Onboarding completo
Eventos rastreados:
1. onboarding_started
2. onboarding_step_started (step 1)
3. onboarding_step_completed (step 1)
4. onboarding_step_started (step 2)
5. onboarding_step_completed (step 2)
6. user_identified (identify)
7. onboarding_step_started (step 3)
8. onboarding_step_completed (step 3)
9. onboarding_completed
Exemplo 2: Rastreamento de Feature Usage
Objetivo: Medir uso de diferentes features do produto
JSON para Importar
{
"name": "Feature Usage Tracking",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Menu",
"parameters": {
"message": "Escolha uma feature:\n1. Relatório\n2. Exportar\n3. Compartilhar\n4. Configurar"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Escolha",
"parameters": {
"message": "Digite o número:",
"variable": "opcao"
}
}
},
{
"id": "event_feature_accessed",
"type": "event",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Feature Acessada",
"parameters": {
"eventType": "track",
"eventName": "feature_accessed",
"properties": {
"feature_option": "{{opcao}}",
"access_method": "menu",
"session_duration_so_far": 120
}
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Qual Feature?",
"parameters": {
"variable": "opcao",
"cases": [
{ "value": "1", "label": "Relatório" },
{ "value": "2", "label": "Exportar" },
{ "value": "3", "label": "Compartilhar" },
{ "value": "4", "label": "Configurar" }
]
}
}
},
{
"id": "event_report",
"type": "event",
"position": { "x": 1100, "y": 0 },
"data": {
"label": "Relatório Usado",
"parameters": {
"eventType": "track",
"eventName": "feature_used",
"properties": {
"feature_name": "report",
"feature_category": "analytics",
"usage_count": 1
}
}
}
},
{
"id": "event_export",
"type": "event",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Exportar Usado",
"parameters": {
"eventType": "track",
"eventName": "feature_used",
"properties": {
"feature_name": "export",
"feature_category": "data",
"export_format": "csv",
"usage_count": 1
}
}
}
},
{
"id": "event_share",
"type": "event",
"position": { "x": 1100, "y": 200 },
"data": {
"label": "Compartilhar Usado",
"parameters": {
"eventType": "track",
"eventName": "feature_used",
"properties": {
"feature_name": "share",
"feature_category": "collaboration",
"share_method": "link",
"usage_count": 1
}
}
}
},
{
"id": "event_config",
"type": "event",
"position": { "x": 1100, "y": 300 },
"data": {
"label": "Configurar Usado",
"parameters": {
"eventType": "track",
"eventName": "feature_used",
"properties": {
"feature_name": "settings",
"feature_category": "configuration",
"settings_section": "general",
"usage_count": 1
}
}
}
},
{
"id": "message_report",
"type": "message",
"position": { "x": 1300, "y": 0 },
"data": {
"label": "Relatório",
"parameters": {
"message": "📊 Gerando relatório..."
}
}
},
{
"id": "message_export",
"type": "message",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Exportar",
"parameters": {
"message": "💾 Exportando dados..."
}
}
},
{
"id": "message_share",
"type": "message",
"position": { "x": 1300, "y": 200 },
"data": {
"label": "Compartilhar",
"parameters": {
"message": "🔗 Gerando link de compartilhamento..."
}
}
},
{
"id": "message_config",
"type": "message",
"position": { "x": 1300, "y": 300 },
"data": {
"label": "Configurar",
"parameters": {
"message": "⚙️ Abrindo configurações..."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1500, "y": 150 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "event_feature_accessed" },
{ "source": "event_feature_accessed", "target": "switch_1" },
{ "source": "switch_1", "target": "event_report", "label": "1" },
{ "source": "switch_1", "target": "event_export", "label": "2" },
{ "source": "switch_1", "target": "event_share", "label": "3" },
{ "source": "switch_1", "target": "event_config", "label": "4" },
{ "source": "event_report", "target": "message_report" },
{ "source": "event_export", "target": "message_export" },
{ "source": "event_share", "target": "message_share" },
{ "source": "event_config", "target": "message_config" },
{ "source": "message_report", "target": "end_1" },
{ "source": "message_export", "target": "end_1" },
{ "source": "message_share", "target": "end_1" },
{ "source": "message_config", "target": "end_1" }
]
}
Saída esperada:
Sistema: Escolha uma feature:
1. Relatório
2. Exportar
3. Compartilhar
4. Configurar
Sistema: Digite o número:
Usuário: 2
Sistema: 💾 Exportando dados...
Eventos rastreados:
1. feature_accessed (option: 2)
2. feature_used (feature_name: export, category: data)
Resposta do Node
{
"success": true,
"action": "event_tracked",
"event": {
"eventType": "track",
"eventName": "purchase_completed",
"properties": {
"product_name": "iPhone 15",
"total_value": 10000.00,
"currency": "BRL",
"timestamp": "2025-01-15T10:30:00.000Z",
"page_url": "https://app.example.com/checkout",
"user_agent": "WhatsApp/2.0",
"ip_address": "192.168.1.1"
},
"userId": "user_456",
"anonymous_id": "anon_1736934600000_abc123",
"context": {
"flowId": "flow_789",
"sessionId": "session_123",
"campaign": "black_friday",
"source": "whatsapp",
"medium": "chat"
},
"timestamp": "2025-01-15T10:30:00.000Z"
},
"timestamp": "2025-01-15T10:30:00.000Z"
}
Event Types Explicados
track
Ação do usuário - o tipo mais comum. - Exemplos: button_clicked, form_submitted, product_purchased - Uso: Rastrear interações e conversões
page
Visualização de página web. - Exemplos: /home, /pricing, /checkout - Uso: Análise de navegação
screen
Visualização de tela em apps mobile. - Exemplos: HomeScreen, ProfileScreen - Uso: Mobile app analytics
identify
Identificar usuário e associar traits. - Exemplos: Nome, email, plano - Uso: Enriquecer perfil do usuário
group
Associar usuário a grupo/empresa. - Exemplos: Empresa, time, workspace - Uso: B2B analytics
alias
Conectar identidades de usuário. - Exemplos: Unir anônimo com identificado - Uso: User identity resolution
Boas Práticas
✅ SIM: - Use nomenclatura consistente (objeto_acao: product_viewed) - Sempre inclua propriedades relevantes - Rastreie início E conclusão de ações importantes - Use eventType apropriado - Documente seus eventos em um schema - Inclua contexto de origem (source, campaign)
❌ NÃO: - Não use nomes genéricos ("event1", "action") - Não rastreie dados sensíveis sem consent - Não mude estrutura de evento existente - Não abuse de tracking (performance) - Não esqueça de rastrear falhas também
Dicas
💡 Naming Convention: Use objeto_acao (product_viewed, cart_abandoned, checkout_completed)
💡 Funis: Rastreie cada etapa com step_number para análise de drop-off
💡 Properties padrão: Sempre inclua: timestamp, source, version
💡 Track vs Identify: Use track para ações, identify para atualizar perfil
💡 Anonymous tracking: Sistema rastreia antes de identificação e conecta depois
💡 Contexto rico: Quanto mais contexto nas properties, melhor a segmentação
Próximo Node
→ ANALYTICS - Rastreamento com providers externos → TRACKING - Rastreamento avançado de comportamento → METRIC - Métricas numéricas e KPIs → LOGGER - Logs estruturados