import assert from 'node:assert/strict'; import { describe, it } from 'node:test'; import { buildNextQuestion, detectService, normalizePhone, processLead } from '../src/lead-engine.mjs'; describe('lead engine', () => { it('normaliza telefone brasileiro para formato internacional', () => { assert.equal(normalizePhone('(75) 99999-1111'), '5575999991111'); assert.equal(normalizePhone('+55 75 99999-1111'), '5575999991111'); }); it('detecta servico por texto livre', () => { assert.equal(detectService('quero trocar meu sistema de estoque'), 'erp'); assert.equal(detectService('preciso de suporte em servidor e backup'), 'ti'); assert.equal(detectService('automatizar atendimento no WhatsApp'), 'whatsapp'); }); it('prioriza lead com WhatsApp para tratamento manual', () => { const result = processLead({ source: 'site', contact: { name: 'Carlos Souza', phone: '(75) 99999-1111', email: 'carlos@mercado.com' }, company: { name: 'Mercado Sao Joao', city: 'Santo Antonio de Jesus', state: 'BA', segment: 'mercado', employees: 18 }, interest: 'ERP', current_system: 'uso outro sistema, mas quero trocar', pains: ['estoque', 'financeiro', 'emissao fiscal'], urgency: 'alta', consent: true }); assert.equal(result.lead.service, 'erp'); assert.equal(result.priority.priority, 'com_whatsapp'); assert.equal(result.priority.hasWhatsapp, true); assert.ok(result.whatsapp.internal.message.includes('Novo lead captado - COM WHATSAPP')); assert.equal(result.nextAction, 'tratamento_manual'); }); it('mantem lead de TI com dados parciais como captado', () => { const result = processLead({ origem: 'indicacao', nome: 'Ana Lima', telefone: '75988887777', empresa: 'Clinica Vida', cidade: 'Santo Antonio de Jesus', uf: 'BA', segmento: 'clinica', servico: 'gestao de TI', computadores: 8, dor: 'backup; suporte tecnico', urgencia: 'media' }); assert.equal(result.lead.service, 'ti'); assert.equal(result.priority.priority, 'com_whatsapp'); assert.ok(result.crmRecord.whatsapp.startsWith('55')); }); it('mantem lead sem WhatsApp abaixo na prioridade', () => { const result = processLead({ name: 'Lead Sem Servico', message: 'quero mais informacoes' }); assert.equal(result.lead.service, 'indefinido'); assert.equal(result.priority.priority, 'sem_whatsapp'); assert.equal(result.priority.hasWhatsapp, false); assert.ok(buildNextQuestion(result.lead).includes('1 - Sistema ERP')); }); it('reconhece segmentos compostos da prospeccao automatica como segmento-alvo', () => { const compostos = processLead({ name: 'Lead Prospeccao', whatsapp: '75999993333', company_name: 'Restaurante Sabor da Terra', city: 'Amargosa', state: 'BA', segment: 'restaurante_pizzaria' }); assert.equal(compostos.lead.isTargetSegment, true); const materialConstrucao = processLead({ name: 'Lead Prospeccao', whatsapp: '75999994444', company_name: 'Deposito Central', segment: 'material_construcao_cimento_blocos' }); assert.equal(materialConstrucao.lead.isTargetSegment, true); const clinica = processLead({ name: 'Lead Prospeccao', whatsapp: '75999995555', company_name: 'Clinica Odonto Vida', segment: 'clinica_laboratorio_odonto_otica' }); assert.equal(clinica.lead.isTargetSegment, true); }); it('nao marca como segmento-alvo um segmento fora da lista', () => { const result = processLead({ name: 'Lead Prospeccao', whatsapp: '75999996666', company_name: 'Posto Boa Vista', segment: 'posto_combustivel' }); assert.equal(result.lead.isTargetSegment, false); }); it('reconhece os novos nichos (beleza, celulares, transportadora) como segmento-alvo', () => { const beleza = processLead({ name: 'Lead Prospeccao', whatsapp: '75999997777', company_name: 'Studio Beleza Bahia', segment: 'beleza_estetica_barbearia' }); assert.equal(beleza.lead.isTargetSegment, true); const celulares = processLead({ name: 'Lead Prospeccao', whatsapp: '75999998888', company_name: 'Cell Center', segment: 'celulares_eletronicos_assistencia' }); assert.equal(celulares.lead.isTargetSegment, true); const transportadora = processLead({ name: 'Lead Prospeccao', whatsapp: '75999999999', company_name: 'Transportadora RecĂ´ncavo', segment: 'transportadora_logistica' }); assert.equal(transportadora.lead.isTargetSegment, true); }); it('direciona lead de WhatsApp para pergunta de volume quando a dor ja existe', () => { const result = processLead({ name: 'Mariana', whatsapp: '75999992222', company_name: 'Restaurante Sabor', city: 'Santo Antonio de Jesus', state: 'BA', interest: 'autoatendimento WhatsApp', pains: ['pedidos', 'triagem'] }); assert.equal(result.lead.service, 'whatsapp'); assert.ok(buildNextQuestion(result.lead).includes('quantas mensagens')); }); });