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'; import { equivalentPhoneNumbers, normalizePhone } from '../src/phone.mjs'; test('telefones equivalentes preservam o numero exato antes da variante brasileira', () => { assert.equal(normalizePhone('+55 (75) 99909-1780'), '5575999091780'); assert.deepEqual(equivalentPhoneNumbers('5575999091780'), ['5575999091780', '557599091780']); assert.deepEqual(equivalentPhoneNumbers('557599091780'), ['557599091780', '5575999091780']); }); 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'); });