App local (Node + SQLite) para captura, tratamento e exportacao de leads comerciais, com dashboard de gestao, login/usuarios e integracao Z-PRO. Co-Authored-By: Claude <noreply@anthropic.com>
123 lines
4.4 KiB
JavaScript
123 lines
4.4 KiB
JavaScript
import test from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import {
|
|
validatePhone, validateCnpj, validateEmpresa, dedupKey, extractDdd, segmentLabel,
|
|
scoreQualidade, scoreComercial, scoreGeral, classificarScoreGeral
|
|
} from '../src/scoring.mjs';
|
|
|
|
test('validatePhone aceita celular e fixo com 55', () => {
|
|
assert.equal(validatePhone('557193335451').valid, true);
|
|
assert.equal(validatePhone('5571993335451').valid, true);
|
|
});
|
|
|
|
test('validatePhone rejeita vazio, curto e ddd invalido', () => {
|
|
assert.deepEqual(validatePhone(''), { valid: false, motivo: 'telefone vazio' });
|
|
assert.equal(validatePhone('7199999').valid, false);
|
|
assert.equal(validatePhone('550599999999').valid, false);
|
|
assert.equal(validatePhone('5571000000000').valid, false);
|
|
});
|
|
|
|
test('validateCnpj valida digitos verificadores', () => {
|
|
// CNPJ real da base legada (PREMIUM EXPRESS)
|
|
assert.equal(validateCnpj('57557263000113'), true);
|
|
assert.equal(validateCnpj('57557263000114'), false);
|
|
assert.equal(validateCnpj('11111111111111'), false);
|
|
assert.equal(validateCnpj('123'), false);
|
|
});
|
|
|
|
test('validateEmpresa aplica regra critica do relatorio legado', () => {
|
|
assert.equal(validateEmpresa('PREMIUM EXPRESS').valid, true);
|
|
assert.deepEqual(validateEmpresa('57.563.316 JHONATAS SOUZA'), { valid: false, motivo: 'empresa comeca com numero' });
|
|
assert.deepEqual(validateEmpresa('-'), { valid: false, motivo: 'empresa vazia ou com lixo' });
|
|
assert.deepEqual(validateEmpresa(''), { valid: false, motivo: 'empresa vazia ou com lixo' });
|
|
assert.equal(validateEmpresa('...***...').valid, false);
|
|
});
|
|
|
|
test('scoreQualidade: lead completo com website bate 100', () => {
|
|
const result = scoreQualidade({
|
|
whatsapp: '557193335451',
|
|
cnpj: '57557263000113',
|
|
empresa: 'PREMIUM EXPRESS',
|
|
cidade: 'Salvador',
|
|
segmento: 'restaurantes',
|
|
cnae: '5611203',
|
|
website: 'https://premiumexpress.com.br'
|
|
});
|
|
|
|
assert.equal(result.score, 100);
|
|
assert.equal(result.telefoneValido, true);
|
|
assert.equal(result.cnpjValido, true);
|
|
assert.equal(result.empresaValida, true);
|
|
});
|
|
|
|
test('scoreQualidade: sem telefone/website perde 30+5 pontos', () => {
|
|
const result = scoreQualidade({
|
|
whatsapp: '',
|
|
cnpj: '57557263000113',
|
|
empresa: 'PREMIUM EXPRESS',
|
|
cidade: 'Salvador',
|
|
segmento: 'restaurantes',
|
|
cnae: '5611203',
|
|
website: ''
|
|
});
|
|
|
|
assert.equal(result.score, 65);
|
|
assert.equal(result.telefoneValido, false);
|
|
});
|
|
|
|
test('scoreComercial: nicho alta aderencia + tudo valido bate 100', () => {
|
|
const score = scoreComercial({
|
|
whatsapp: '557193335451',
|
|
cnpj: '57557263000113',
|
|
website: 'https://premiumexpress.com.br',
|
|
email: 'contato@premiumexpress.com.br',
|
|
affinity: 'alta'
|
|
});
|
|
assert.equal(score, 100);
|
|
});
|
|
|
|
test('scoreComercial: nicho baixa aderencia sem website/email/whatsapp/cnpj fica so com os pontos do nicho', () => {
|
|
const score = scoreComercial({ whatsapp: '', cnpj: '', website: '', email: '', affinity: 'baixa' });
|
|
assert.equal(score, 20);
|
|
});
|
|
|
|
test('scoreGeral combina 60% comercial + 40% qualidade', () => {
|
|
assert.equal(scoreGeral(100, 100), 100);
|
|
assert.equal(scoreGeral(50, 50), 50);
|
|
assert.equal(scoreGeral(0, 100), 60);
|
|
assert.equal(scoreGeral(100, 0), 40);
|
|
});
|
|
|
|
test('classificarScoreGeral aplica as 5 faixas', () => {
|
|
assert.equal(classificarScoreGeral(95).id, 'excelente');
|
|
assert.equal(classificarScoreGeral(80).id, 'bom');
|
|
assert.equal(classificarScoreGeral(60).id, 'medio');
|
|
assert.equal(classificarScoreGeral(40).id, 'baixo');
|
|
assert.equal(classificarScoreGeral(10).id, 'muito_baixo');
|
|
});
|
|
|
|
test('dedupKey segue precedencia cnpj > phone > empresa+cidade', () => {
|
|
assert.equal(
|
|
dedupKey({ cnpj: '57557263000113', whatsapp: '557193335451', empresa: 'X', cidade: 'Y' }),
|
|
'cnpj:57557263000113'
|
|
);
|
|
assert.equal(
|
|
dedupKey({ cnpj: '123', whatsapp: '557193335451', empresa: 'X', cidade: 'Y' }),
|
|
'phone:557193335451'
|
|
);
|
|
assert.equal(
|
|
dedupKey({ cnpj: '', whatsapp: '', empresa: 'Premium Express', cidade: 'Salvador' }),
|
|
'name:premium express:salvador'
|
|
);
|
|
});
|
|
|
|
test('extractDdd retira o ddd do numero normalizado', () => {
|
|
assert.equal(extractDdd('557193335451'), '71');
|
|
assert.equal(extractDdd('999'), '');
|
|
});
|
|
|
|
test('segmentLabel formata igual ao segmento_legivel legado', () => {
|
|
assert.equal(segmentLabel('lojas_de_calcados'), 'Lojas De Calcados');
|
|
assert.equal(segmentLabel('saloes_de_beleza'), 'Saloes De Beleza');
|
|
});
|