chore: import gti-maquina-comercial history via subtree
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> git-subtree-dir: gti-maquina-comercial git-subtree-mainline:93ca82979egit-subtree-split:b77484946f
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
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'));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user