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,65 @@
|
||||
import {
|
||||
scoreQualidade, scoreComercial, scoreGeral, classificarScoreGeral,
|
||||
dedupKey, extractDdd, segmentLabel, onlyDigits
|
||||
} from '../scoring.mjs';
|
||||
|
||||
// Converte um item processado ({payload, lead}) — formato produzido por
|
||||
// processLead e tambem o formato dos JSONs legados — na linha canonica da
|
||||
// tabela leads, com os scores/classificacao/dedup_key calculados.
|
||||
export function leadRowFromProcessed(item, fallbackOrigin = '') {
|
||||
const lead = item.lead || {};
|
||||
const prospecting = item.payload?.prospecting || lead.raw?.prospecting || {};
|
||||
const empresa = String(lead.companyName ?? '').trim();
|
||||
const whatsapp = onlyDigits(lead.phone);
|
||||
const cnpj = onlyDigits(prospecting.cnpj);
|
||||
const cidade = String(lead.city ?? '').trim();
|
||||
const segmento = String(lead.segment ?? '').trim();
|
||||
const cnae = String(prospecting.cnae ?? '').trim();
|
||||
const website = String(prospecting.website ?? '').trim();
|
||||
const email = String(lead.email ?? '').trim();
|
||||
const affinity = prospecting.affinity || 'media';
|
||||
const produtos = Array.isArray(prospecting.products) ? prospecting.products : [];
|
||||
|
||||
const qualidade = scoreQualidade({ whatsapp, cnpj, empresa, cidade, segmento, cnae, website });
|
||||
const comercial = scoreComercial({ whatsapp, cnpj, website, email, affinity });
|
||||
const geral = scoreGeral(qualidade.score, comercial);
|
||||
const tier = classificarScoreGeral(geral);
|
||||
const produtoPrincipal = produtos.length
|
||||
? [...produtos].sort((a, b) => b.estrelas - a.estrelas)[0].nome
|
||||
: '';
|
||||
|
||||
return {
|
||||
lead_uid: lead.id || null,
|
||||
dedup_key: dedupKey({ cnpj, whatsapp, empresa, cidade }),
|
||||
empresa,
|
||||
legal_name: String(prospecting.legal_name ?? ''),
|
||||
whatsapp,
|
||||
ddd: extractDdd(whatsapp),
|
||||
email,
|
||||
cidade,
|
||||
uf: String(lead.state ?? '').trim().toUpperCase(),
|
||||
segmento,
|
||||
segmento_label: segmentLabel(segmento),
|
||||
interesse: String(lead.serviceLabel ?? ''),
|
||||
cnpj,
|
||||
cnae,
|
||||
endereco: String(prospecting.address ?? ''),
|
||||
website,
|
||||
pains_json: JSON.stringify(lead.pains || []),
|
||||
origem: String(lead.source || fallbackOrigin || 'indefinida'),
|
||||
telefone_valido: qualidade.telefoneValido ? 1 : 0,
|
||||
cnpj_valido: qualidade.cnpjValido ? 1 : 0,
|
||||
empresa_valida: qualidade.empresaValida ? 1 : 0,
|
||||
score: geral,
|
||||
classificacao: tier.id,
|
||||
motivo_classificacao: `score geral ${geral} (qualidade ${qualidade.score}, comercial ${comercial})`,
|
||||
score_qualidade: qualidade.score,
|
||||
score_comercial: comercial,
|
||||
prioridade: tier.prioridade,
|
||||
produto_principal: produtoPrincipal,
|
||||
produtos_json: JSON.stringify(produtos),
|
||||
capture_run_id: null,
|
||||
captured_at: lead.createdAt || null,
|
||||
exported_at: null
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user