Passo-a-passo: Como criar e exibir uma simulação
Todos os exemplos de código desta página estão escritos em JavaScript
Escolhendo uma loja
O primeiro passo para criar uma simulação na API do Credere é escolher em qual das suas lojas aquela simulação vai ser feita. Ou a sua loja, se sua conta só possuir uma.
Você pode, sim, guardar o ID da sua loja como uma constate, se assim preferir, ou, por exemplo, usar um elemento HTML <select> pra que seu usário escolha em qual loja ele quer simular.
No caso do exemplo abaixo, pra simplificar, e pra funcionar com qualquer usuário/contas/lojas que forem testar, eu vou usar a estratégia de listar buscar, API do Credere, as lojas do usuário dono da Chave de Acesso que você estiver usando, e escolher a primeira na lista de lojas que for retornada.
fetch('https://app.meucredere.com.br/api/v1/stores', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
},
}).then(lojasListadasSucesso);
async function lojasListadasSucesso(resposta) {
const json = await resposta.json();
console.log('O ID da primeira loja da lista é: ' + json.stores[0].id);
}O
'Authorization': 'Bearer abcde123'usado nos cabeçalhos do request acima é a sua Chave de Acesso na API do Credere. Se você não sabe do que se trata, talvez seja legal passar pelo guia de como se autenticar na nossa API antes.
Verificando se o cliente já simulou nessa loja anteriormente
Você vai precisar saber se o CPF do cliente que você está atendendo já existe no Credere (no caso de ele já ter feito uma simulação na sua loja, no passado) para,
caso ele não exista, criar um novo Lead:
requestPOSTparaapi/v1/banks_api/leadsou, caso ele exista, atualizar os dados do Lead existente:
requestPUTparaapi/v1/banks_api/leads/01234567890, onde01234567890é o CPF do cliente
Na prática, você pode consultar se um cliente existe enviando um request (GET) para o endpoint /api/v1/banks_api/leads, passando o CPF do cliente como parâmetro:
let metodoLead;
let endpointLead;
fetch('https://app.meucredere.com.br/api/v1/banks_api/leads/01234567890', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
'Store-Id': 123,
},
}).then(leadConsultadoSucesso);
async function leadConsultadoSucesso(resposta) {
if (resposta.ok) {
// Resposta OK significa que o cliente existe e o JSON abaixo vai possuir todas as informações
// existentes dele, pra caso você queira reutilizar elas pra pre-preencher os campos do seu formulário
const json = await resposta.json();
// 012.345.678-90 vira 01234567890
const cpfApenasNumeros = json.data.cpf_cnpj.replace(/\D/g, '');
metodoLead = 'PUT';
endpointLead = '/leads/' + cpfApenasNumeros;
} else {
metodoLead = 'POST';
endpointLead = '/leads';
}
console.log('Para este cliente, usaremos um ' + metodoLead + ' para o endpoint ' + endpointLead);
}Relembrando uma informação importante, em todos os endpoints da nossa API que possuírem o prefixo
/banks_api, você também vai precisar adicionar o seguinte cabeçalho (Header) nos seus requests:Store-Id = 123Onde
123seria o ID da sua loja no Credere.
Agora é só enviar o request para criar ou atualizar o seu Lead, antes de criar uma simulação para ele:
const informacoesLead = {
lead: {
cpf_cnpj: '012.345.678-90',
name: 'Fulano dos Santos',
birthdate: '1990-10-30',
retrieve_gender: 'M',
email: '[email protected]',
has_cnh: true,
},
};
fetch('https://app.meucredere.com.br/api/v1/banks_api/' + endpointLead, {
method: metodoLead,
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
'Store-Id': 123,
},
body: JSON.stringify(informacoesLead),
}).then(leadCriadoOuAtualizadoSucesso);
async function leadCriadoOuAtualizadoSucesso(resposta) {
const json = await resposta.json();
console.log('O cliente' + json.data.name + ' foi criado ou atualizado com sucesso!');
}Onde:
| Campo | Descrição |
|---|---|
cpf_cnpj | CPF do cliente |
name | Nome do cliente |
birthdate | Data de nascimento do cliente, no formato DD-MM-AAAA |
retrieve_gender | Gênero do cliente (domínio - listar disponíveis em: /api/v1/banks_api/domains?types=gender) |
email | Endereço de email do cliente |
has_cnh | Identifica se o cliente possui carteira de motorista. true é pra sim, false pra não |
Agora que seu lead já existe, vamos partir para a criação da simulação.
Campos obrigatórios no cadastro do cliente (Lead) por bancoDependendo de quais informações você enviar no cadastro/atualização do seu Lead, mais ou menos bancos vão retornar resultados na sua simulação. Isso vai depender de quais bancos obrigam o preenchimento de quais campos. Por exemplo, você poderia separar seu cadastro em grupos assim:
Os campos
cpf_cnpj,name,phoneehas_cnh
são o suficiente para simular no bancos:
Creditas, Honda e Itaú.Os campos acima +
retrieve_gender,birthdatee
são o suficiente para simular nos bancos:
Bradesco, BV, Fontecred e Santander.Os campos acima +
occupation,profession,monthly_incomee 7 campos de endereço (address)
são o suficiente para simular nos bancos:
Pan.Pra ver que campos cada um dos bancos realmente exigem, clique aqui. (PENDENTE!)
Selecionando um veículo
Pra começar a preencher os dados da simulação em si, você precisa escolher qual veículo será usado nela. Usando a mesma lógica das lojas, vou simplesmente escolher o primeiro da lista, e não usar um select, só pra simplificar este exemplo.
Ainda assim, vou criar um pequeno filtro para achar apenas os veículos que têm modelo no ano atual (observe o parâmetro ?year_end= na URL):
const anoVeiculo = new Date().getFullYear();
fetch('https://app.meucredere.com.br/api/v1/vehicle_models?year_end=' + anoVeiculo, {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
},
}).then(veiculosListadosSucesso);
async function veiculosListadosSucesso(resposta) {
const json = await resposta.json();
console.log('O ID do primeiro veículo da lista é: ' + json.vehicle_models[0].id);
}O veículo que vou usar como exemplo vai custar R$ 60.000,00.
Vou também supor que ele seria licenciado no estado de São Paulo. Os dados que precisariam ser enviados dele seriam, então:
{
vehicle_molicar_code: primeiroVeiculo.molicar_code,
licensing_uf: 'SP',
manufacture_year: primeiroVeiculo.year_end, // *
model_year: primeiroVeiculo.year_end, // *
asset_value: 6000000,
zero_km: true,
}*O último ano do modelo do veículo no Credere foi usado no exemplo acima como o ano de fabricação e o ano de modelo a ser simulado. No mundo real, você vai precisar preencher esses valores com os valores reais do veículo que você está vendendo.
Onde:
| Campo | Descrição |
|---|---|
vehicle_molicar_code | Código molicar do veículo escolhido |
licensing_uf | Sigla do estado onde o veículo será licenciado |
manufacture_year | Ano de fabricação do veículo |
model_year | Ano de modelo do veículo |
asset_value | Valor do veículo (em centavos) |
zero_km | O veículo é novo ou usado? true signica novo, false significa usado |
Identificando seu vendedor
Tambem precisamos saber qual vendedor vai ser responsável pela simulação que iremos criar. Vamos precisar do CPF dele para fazer a comunicação com alguns bancos.
1. Caso o vendedor responsável for próprio usuário que você usou pra se autenticar na API do Credere:
1.1. Caso você tenha salvo as informações dele na hora do login, você pode acessar usando:
<dadosRetornadosNoLogin>.user.cpf.1.2. Caso você não salvo essas informações, você pode consultá-las enviando um request
GETpara/api/v1/users/current(se oscopeque você usou na autenticação permitir o acesso à esse endpoint).2. Caso o vendedor que você quer usar não for o usuário atual, você pode listar todos os vendedores da sua conta enviando um request
GETpara/api/v1/users/proposals_filter_list.
Nesse exemplo, vou usar a segunda abordagem:
fetch('https://app.meucredere.com.br/api/v1/users/proposals_filter_list', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
},
}).then(usuariosListadosSucesso);
async function usuariosListadosSucesso(resposta) {
const json = await resposta.json();
console.log('O ID do primeiro usuário é: ' + json.users[0].id);
}Informando as condições
Agora, vamos precisar definir que condições queremos consultar naquela simulação, ainda usando o valor de 60 mil do veículo que decidimos acima.
No caso desse exemplo, quero simular em:
- 12x com R$ 40.000,00 de entrada
- 24x com R$ 25.000,00 de entrada
No caso de 12x, R$ 20.000,00 seriam financiandos (60 mil do valor de exemplo do veículo - 40 mil de entrada), e, no de 24x, R$ 35.000,00 seriam financiandos.
Essas condições da simulação ficariam assim, respectivamente:
[{
installments: 12,
down_payment: 4000000,
financed_amount: 2000000,
}, {
installments: 24,
down_payment: 2500000,
financed_amount: 3500000,
}]Onde:
| Campo | Descrição |
|---|---|
installments | Número de parcelas do financiamento |
down_payment | Valor oferecido de entrada |
financed_amount | Valor financiado (valor do veículo - entrada) |
Incluindo o valor da documentação no financiamento
Pra finalizar, a gente também pode incluir o valor da documentação do veículo ("emplacamento") na simulação.
O campo usado pra isso é documentation_value. Assim como os outros valores monetários, esse campo é representado em centavos.
No nosso exemplo, vamos usar R$ 990,00, e ano de fabricação e do modelo usaremos 2020 e 2021, respectivamente.
Finalmente, criando a simulação
Agora, juntando tudo, as informações necessárias para criar uma simulação são:
const informacoesSimulacao = {
simulation: {
seller_cpf: 01234567890,
retrieve_lead: {
cpf_cnpj: '012.345.678-90',
},
assets_value: 1500000,
documentation_value: 99000,
commercial: false,
vehicle: {
vehicle_molicar_code: primeiroVeiculo.molicar_code,
licensing_uf: 'SP',
manufacture_year: 2020,
model_year: 2021,
asset_value: 1500000,
zero_km: true,
},
conditions: [{
installments: 12,
down_payment: 900000,
financed_amount: 600000,
}, {
installments: 24,
down_payment: 500000,
financed_amount: 1000000,
}],
},
};*O último ano do modelo do veículo no Credere foi usado no exemplo acima como o ano de fabricação e o ano de modelo a ser simulado. No mundo real, você vai precisar preencher esses valores com os valores reais do veículo que você está vendendo.
Onde:
| Campo | Descrição |
|---|---|
seller_cpf | CPF do vendedor capturado acima |
assets_value | Valor do veículo |
documentation_value | Valor da documentação do veículo a ser incluido no financiamento, caso assim se deseje |
retrieve_lead | Objeto contendo o CPF do Lead que criamos acima no campo cpf_cnpj |
vehicle | Objeto do veículo que obtivemos acima |
conditions | Lista de condições que criamos acima |
E o request da criação de uma simulação fica assim:
fetch('https://app.meucredere.com.br/api/v1/banks_api/simulations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
'Store-Id': 123,
},
body: JSON.stringify(informacoesSimulacao),
}).then(simulacaoCriadaSucesso);
async function simulacaoCriadaSucesso(resposta) {
const json = await resposta.json();
console.log('A simulação foi criada com sucesso! UUID dela: ' json.data.uuid);
}Aguardando o processamento da simulação nos bancos
Agora que a simulação foi criada, precisaremos consultar se ela já foi completamente processada.
Uma forma de verificar se uma condição da sua simulação ainda está em processamento é usando o atributo process_task dela. Se uma process_task ainda não existir (for nula), ou se existir mas não possuir um process_task.ended_at, aquela condição ainda está em processamento.
O request para ler uma simulação e verificar se ela todas as condições dela foram completamente processadas fica assim:
fetch('https://app.meucredere.com.br/api/v1/banks_api/simulations/abc321', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer abcde123',
'Store-Id': 123,
},
}).then(simulacaoLidaSucesso);
async function simulacaoLidaSucesso(resposta) {
const json = await resposta.json();
const aindaProcessando = !json.data.conditions.find(c => !c.process_task || !c.process_task.ended_at);
console.log('A simulação ainda está em processamento? ' + (aindaProcessando ? 'Sim' : 'Não'));
}Você pode, por exemplo, ler a condição a cada 5 segundos até que você verifique que ela foi completamente processada. Nada impede que você vá mostrando os resultados das condições que já foram processadas, enquanto houverem algumas que não foram.
Finalmente, exibindo os valores da simulação
Com todas as condições verificadas, a gente já pode exibir os valores retornados pelos bancos.
Pra fazer isso vamos, inicialmente, organizar as condições em um objeto, checando se cada condição teve sua comunicação com o banco finalizada com sucesso (success) e se o banco nos respondeu avisando que ela está disponível para o CPF informado no Lead (available):
const MAPA_DE_STATUS = {
1: 'CPF com restrição - Sem chances de aprovação',
2: 'Com chance de aprovação',
3: 'Com GRANDE chance de aprovação',
};
function transformarCentavosReais(valorCentavos) {
return (valorCentavos / 100).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' });
}
function organizarCondicoes(condicoes) {
const condicoesOrganizadas = [];
condicoes.forEach(condicao => {
if (!condicao.success || !condicao.available) {
return;
}
condicoesOrganizadas.push({
'Entrada': transformarCentavosReais(condicao.down_payment),
'Parcelas': condicao.installments + 'x',
'Valor da parcela': transformarCentavosReais(condicao.first_installment_value),
'Status': MAPA_DE_STATUS[condicao.pre_approval_status],
'Banco': condicao.bank.nickname,
});
});
console.table(condicoesOrganizadas);
}Usando e exibindo valores de sugestão de entrada
Se você ainda não sabe o que são sugestões de entrada, talvez seja legal primeiro passar por aqui: Sugestão de entrada, como isso funciona?
Antes de tudo, pra usar sugestões de entrada, você vai precisar passar um parâmetro extra nos dados do seu request, ainda na criação da simulação. O nome desse parâmetro é process_bank_suggested_conditions, e você deve enviá-lo como true. Exemplo:
const informacoesSimulacao = {
simulation: {
process_bank_suggested_conditions: true,
// seller_cpf...
// retrieve_lead...
// conditions...
// ...
},
};Você pode identificar essas condições extras, automaticamente criadas por nós com a ajuda dos bancos, verificando se o campo suggestion_reason dela está preenchido, onde:
| condition.suggestion_reason | Significado |
|---|---|
| nulo (em branco) | É um condição original, criada com os valores originais, sem usar nenhuma sugestão dos bancos |
bank_minimum_down_payment | O valor de entrada original era menor do que o mínimo que o banco aceita, então geramos uma condição nova usando esse mínimo |
bank_suggested_down_payment | O banco sugeriu um valor de entrada no qual ele está disposto a aumentar as chancs de aprovação desse cliente. Essa sugestão também só será gerada se o valor sugerido pelo banco for maior do que o valor da entrada original |
Criando um mapa de motivos para as sugestões, a gente teria:
const MOTIVOS_DE_SUGESTAO = {
bank_minimum_down_payment: 'Entrada mínima exigida pelo banco',
bank_suggested_down_payment: 'Entrada sugerida com grandes chances de aprovação',
};E adicionando essa nova coluna na console.table das condições que a gente criou acima, as linhas dela passariam a ser preenchidas assim:
// ...
condicoesOrganizadas.push({
'Entrada': transformarCentavosReais(condicao.down_payment),
'Parcelas': condicao.installments + 'x',
'Valor da parcela': transformarCentavosReais(condicao.first_installment_value),
'Condição sugerida?': MOTIVOS_DE_SUGESTAO[condicao.suggestion_reason] || 'Não',
'Status': MAPA_DE_STATUS[condicao.pre_approval_status],
'Banco': condicao.bank.nickname,
});Juntando tudo e adicionando alguns tratamentos importantes
Um exemplo prático, usando apenas HTML e JavaScript, do cadastro de uma simulação funcionando. Basta copiar e colar o código, na integra, pra rodar no seu computador.
Lembre-se de substituir a Chave de Acesso na primeira linha de JavaScript abaixo por uma válida, gerada por você.
Você vai ser perguntado por um número de CPF assim que acessar a página. Você pode gerar um número de exemplo, já formatado (com pontos e hífen), nesse site (GeradorCPF.com).
<h2>Criando uma simulação na API do Credere</h2>
<p>Abra o console do seu navegador para acompanhar o processo e resultados.</p>
<script>
// IMPORTANTE! Substituir chave de acesso abaixo:
const CHAVE_DE_ACESSO = 'abcde123';
const URL_DA_API = 'https://app.meucredere.com.br/api/v1';
// Pede para o usuário informar um CPF para testes
// Você pode usar o site https://www.geradorcpf.com/ para gerar CPFs de exemplo
const clienteCPF = prompt('Digite o CPF do cliente.\nPor se tratar de apenas um exemplo, ele não será validado, então, por favor, insira um CPF válido e *COM PONTUACAO*.\nExemplo de formato: 000.000.000-00\n\nVocê pode usar o site https://www.geradorcpf.com/ para gerar números de CPF de exemplo e aleatórios.');
const clienteCPFApenasNumeros = clienteCPF.replace(/\D/g, '');
// Salvando dados de exemplo
let primeiroUsuario;
let primeiraLoja;
let primeiroVeiculo;
let primeiroGenero;
let simulacaoCriada;
let simulacaoConsultaTimeout;
// Busca informações do usuário atual
function listarUsuarios() {
return fetch(URL_DA_API + '/users/proposals_filter_list', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
},
}).then(usuariosListadosSucesso);
}
async function usuariosListadosSucesso(resposta) {
if (!resposta.ok) {
return informarErro('LISTAR USUÁRIOS', resposta);
}
const json = await resposta.json();
primeiroUsuario = json.users[0];
console.log('O ID do primeiro usuário é: ' + primeiroUsuario.id);
}
// Listar lojas e selecionar a primeira
function listarLojas() {
return fetch(URL_DA_API + '/stores', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
},
}).then(lojasListadasSucesso);
}
async function lojasListadasSucesso(resposta) {
if (!resposta.ok) {
return informarErro('LISTAR LOJAS', resposta);
}
const json = await resposta.json();
primeiraLoja = json.stores[0];
console.log('O ID da primeira loja da lista é: ' + primeiraLoja.id);
}
// Listar veículos e selecionar o primeiro
function listarVeiculos() {
const anoVeiculo = new Date().getFullYear();
return fetch(URL_DA_API + '/vehicle_models?year_end=' + anoVeiculo, {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
},
}).then(veiculosListadosSucesso);
}
async function veiculosListadosSucesso(resposta) {
if (!resposta.ok) {
return informarErro('LISTAR VEÍCULOS', resposta);
}
const json = await resposta.json();
primeiroVeiculo = json.vehicle_models[0];
console.log('O ID do primeiro veículo da lista é: ' + primeiroVeiculo.id);
}
// Listar domínio de gênero e selecionar o primeiro
function listarGeneros() {
return fetch(URL_DA_API + '/banks_api/domains?types=gender', {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
},
}).then(generosListadosSucesso);
}
async function generosListadosSucesso(resposta) {
if (!resposta.ok) {
return informarErro('LISTAR GENEROS', resposta);
}
const json = await resposta.json();
console.log('O ID do primeiro gênero da lista é: ' + json.data.gender[0].credere_identifier);
}
// Consultar se o Lead já existe
function consultarLead() {
return fetch(URL_DA_API + '/banks_api/leads/' + clienteCPFApenasNumeros, {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
'Store-Id': primeiraLoja.id,
},
}).then(leadConsultadoSucesso);
}
async function leadConsultadoSucesso(resposta) {
const leadExiste = resposta.ok;
const metodo = leadExiste ? 'PUT' : 'POST';
const endpoint = '/banks_api/leads/' + (leadExiste ? clienteCPFApenasNumeros : '');
if ([404, 200].includes(resposta.status)) {
console.log('Para este cliente, usaremos um ' + metodo + ' para o endpoint ' + endpoint);
criarOuAtualizarLead(metodo, endpoint);
} else {
informarErro('CONSULTAR LEAD', resposta);
}
}
// Criar ou atualizar um Lead
function criarOuAtualizarLead(metodo, endpoint) {
const informacoesLead = {
lead: {
cpf_cnpj: clienteCPF,
name: 'Fulano dos Santos',
birthdate: '1990-10-30',
phone_number: '99987654321',
gender: 'M',
email: '[email protected]',
has_cnh: true,
},
};
return fetch(URL_DA_API + endpoint, {
method: metodo,
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
'Store-Id': primeiraLoja.id,
},
body: JSON.stringify(informacoesLead),
}).then(leadCriadoOuAtualizadoSucesso);
}
async function leadCriadoOuAtualizadoSucesso(resposta) {
if (!resposta.ok) {
return informarErro('CRIAR OU ATUALIZAR LEAD', resposta);
}
const json = await resposta.json();
console.log('O cliente ' + json.data.name + ' foi criado ou atualizado com sucesso.');
criarSimulacao();
}
// Criar simulação
function criarSimulacao() {
const valorVeiculo = 6000000;
const valorDocumentacao = 99000;
const entradaPrimeiraCondicao = 4000000;
const entradaSegundaCondicao = 2500000;
const informacoesSimulacao = {
simulation: {
seller_cpf: primeiroUsuario.cpf,
retrieve_lead: {
cpf_cnpj: clienteCPF,
},
assets_value: valorVeiculo,
documentation_value: valorDocumentacao,
vehicle: {
vehicle_molicar_code: primeiroVeiculo.molicar_code,
licensing_uf: 'SP',
manufacture_year: primeiroVeiculo.year_end, // *
model_year: primeiroVeiculo.year_end, // *
asset_value: valorVeiculo,
zero_km: true,
},
conditions: [{
installments: 12,
down_payment: entradaPrimeiraCondicao,
financed_amount: valorVeiculo - entradaPrimeiraCondicao,
}, {
installments: 24,
down_payment: entradaSegundaCondicao,
financed_amount: valorVeiculo - entradaSegundaCondicao,
}],
},
};
return fetch(URL_DA_API + '/banks_api/simulations', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
'Store-Id': primeiraLoja.id,
},
body: JSON.stringify(informacoesSimulacao),
}).then(simulacaoCriadaSucesso);
}
async function simulacaoCriadaSucesso(resposta) {
if (!resposta.ok) {
return informarErro('CRIAR SIMULAÇÃO', resposta);
}
const json = await resposta.json();
simulacaoCriada = json.data;
console.log('A simulação ' + simulacaoCriada.uuid + ' foi criada com sucesso.');
consultarSimulacao();
}
// Consultar simulação
function consultarSimulacao() {
return fetch(URL_DA_API + '/banks_api/simulations/' + simulacaoCriada.uuid, {
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + CHAVE_DE_ACESSO,
'Store-Id': primeiraLoja.id,
},
}).then(simulacaoConsultadaSucesso);
}
async function simulacaoConsultadaSucesso(resposta) {
if (!resposta.ok) {
return informarErro('CONSULTAR SIMULAÇÃO', resposta);
}
const json = await resposta.json();
simulacaoCriada = json.data;
console.log('A simulação ' + simulacaoCriada.uuid + ' foi encontrada.');
if (simulacaoAindaProcessando()) {
console.log('Ainda processando... [' + new Date() + ']. Tentando novamente em 5 segundos...');
clearTimeout(simulacaoConsultaTimeout);
simulacaoConsultaTimeout = setTimeout(consultarSimulacao, 5 * 1000);
} else {
console.log('A simulação teve todas as suas condições processadas.');
}
organizarCondicoes();
}
// Funções para ajudar a formatar os resultados da simulação
function transformarCentavosReais(valorCentavos) {
return (valorCentavos / 100).toLocaleString('pt-BR', { style: 'currency', currency: 'BRL' });
}
function simulacaoAindaProcessando() {
return simulacaoCriada.conditions.find(c => !c.process_task || !c.process_task.ended_at);
}
const MAPA_DE_STATUS = {
1: 'CPF com restrição - Sem chances de aprovação',
2: 'Com chance de aprovação',
3: 'Com GRANDE chance de aprovação',
};
const MOTIVOS_DE_SUGESTAO = {
bank_minimum_down_payment: 'Entrada mínima exigida pelo banco',
bank_suggested_down_payment: 'Entrada sugerida com grandes chances de aprovação',
};
function organizarCondicoes() {
const condicoesOrganizadas = [];
simulacaoCriada.conditions.forEach(condicao => {
if (!condicao.success || !condicao.available) {
return;
}
condicoesOrganizadas.push({
'Entrada': transformarCentavosReais(condicao.down_payment),
'Parcelas': condicao.installments + 'x',
'Valor da parcela': transformarCentavosReais(condicao.first_installment_value),
'Condição sugerida?': MOTIVOS_DE_SUGESTAO[condicao.suggestion_reason] || 'Não',
'Status': MAPA_DE_STATUS[condicao.pre_approval_status],
'Banco': condicao.bank.nickname,
});
});
if (condicoesOrganizadas.length) {
console.table(condicoesOrganizadas);
} else if (!simulacaoAindaProcessando()) {
console.log('Infelizmente sua simulação não retornou resultados.');
}
}
// Padronizar alerta e informação extras dos erros no console
function informarErro(etapa, resposta) {
alert('Algo deu errado na etapa "' + etapa + '". Pra mais informações, abra o console do seu navegador.');
console.log(etapa, resposta);
}
// Inicializar criação da simulação
Promise
.all([
listarUsuarios(),
listarLojas(),
listarVeiculos(),
listarGeneros(),
])
.then(consultarLead);
</script>Updated 7 months ago
