Pular para o conteúdo principal

🔧 Troubleshooting — Empréstimo Pessoal Lojista

Este guia ajuda você a identificar e resolver problemas comuns ao integrar com a API de Empréstimo Pessoal Lojista.


🎯 Início Rápido: Checklist de Debug

Antes de abrir um chamado de suporte, verifique:

  • Token válido: Seu JWT está dentro da validade?
  • Headers corretos: Header Authorization: Bearer <token> está presente?
  • CPF no header: O header cpfCliente foi enviado nos endpoints que o exigem?
  • URL correta: Está usando HML ou PRD apropriadamente?
  • Formato JSON: Body está em JSON válido com Content-Type: application/json?
  • Campos obrigatórios: Todos os campos required foram enviados?
  • Tipo de dados: Números são numbers (não strings) no body?

📚 Erros Comuns por Endpoint

1️⃣ Elegibilidade (POST /elegibilidade)

⚠️ 400 Bad Request

Possíveis Causas:

DetalheSolução
Código do cliente é inválidoVerifique se codigoCliente é um inteiro válido e existe na base
Campo(s) obrigatório(s)Envie todos os campos obrigatórios: codigoCliente, numeroBin, idCanal, codigoEstabelecimento
cpfCliente é obrigatórioAdicione o header cpfCliente com 11 dígitos numéricos
codigoEstabelecimento inválidoVerifique se o código é numérico e pertence à sua rede

Exemplo de requisição correta:

curl -X POST "https://apihml.credsystem.com.br/emprestimo-pessoal-lojista/api/v1/elegibilidade" \
-H "Authorization: Bearer SEU_TOKEN" \
-H "cpfCliente: 12345678901" \
-H "Content-Type: application/json" \
-d '{"codigoCliente": 123456, "numeroBin": 123456789, "idCanal": 1, "codigoEstabelecimento": 2}'
⚠️ 401 Unauthorized

Possíveis Causas:

DetalheSolução
Autenticação inválidaToken JWT inválido ou mal formatado. Gere um novo token
Token expiradoTokens têm validade limitada. Implemente renovação automática
Authorization ausenteAdicione header: Authorization: Bearer <seu_token>

Como renovar o token:

  1. Faça nova requisição ao endpoint de autenticação (Client Credentials)
  2. Guarde o novo access_token
  3. Use o campo expires_in para renovar antes de expirar
⚠️ 503 Service Unavailable

Possíveis Causas:

DetalheSolução
Serviço indisponívelSistema de elegibilidade temporariamente fora. Tente novamente após 30 segundos

Implementação de retry com backoff exponencial:

async function comRetry(fn, tentativas = 3) {
for (let i = 0; i < tentativas; i++) {
try {
return await fn();
} catch (error) {
if (error.status !== 503 || i === tentativas - 1) throw error;
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
}
}
}

2️⃣ Simulação de Plano (GET /simulacao-plano)

⚠️ 400 Bad Request

Possíveis Causas:

DetalheSolução
valorTransacao é obrigatórioAdicione header valorTransacao com valor numérico
cpfCliente é obrigatórioAdicione header cpfCliente
Valor fora do limite permitidoO valor deve estar entre o valorMinimoEmprestimo e valorMaximoEmprestimo retornados pela elegibilidade

Dica: Sempre use os valores retornados pelo endpoint de elegibilidade como referência para o valorTransacao.

⚠️ 401 Unauthorized
DetalheSolução
Autenticação inválidaRenove o token JWT

3️⃣ Bancos (GET /banco)

⚠️ 400 Bad Request

Possíveis Causas:

DetalheSolução
ativoSpb formato inválidoO valor deve ser true ou false (boolean como string no header)
⚠️ 503 Service Unavailable
DetalheSolução
Serviço indisponívelServiço de bancos temporariamente indisponível. Tente novamente

Dica: A lista de bancos muda com pouca frequência. Considere cachear por 1-4 horas.


4️⃣ Contas (GET/POST /conta)

⚠️ 400 Bad Request — GET /conta
DetalheSolução
cpfCliente é obrigatórioAdicione o header cpfCliente
CPF inválidoVerifique se o CPF tem 11 dígitos numéricos
⚠️ 400 Bad Request — POST /conta
DetalheSolução
codigoCliente é obrigatórioInforme o código do cliente no body
codigoCompe é obrigatórioInforme o código do banco (use os valores de GET /banco)
tipoConta inválidoUse apenas CC (Conta Corrente) ou PP (Poupança)
dvConta é obrigatórioInforme o dígito verificador da conta
Conta já cadastradaO cliente já possui essa conta registrada

Validações importantes:

  • codigoCompe: use os códigos retornados pelo endpoint /banco
  • tipoConta: apenas CC ou PP
  • status: apenas A (Ativa), I (Inativa) ou R (Rejeitada)

5️⃣ Pré-Contrato (GET /precontrato)

⚠️ 400 Bad Request
DetalheSolução
Campo(s) obrigatório(s)Todos os 16 headers são obrigatórios. Verifique se enviou todos
tipoConta inválidoUse apenas CC ou PP
dataVencimentoParcela formato inválidoUse formato ISO 8601: 2026-05-28T00:00:00.000Z
valorEmprestimo deve ser numéricoEnvie valores numéricos sem aspas no header

Checklist de headers obrigatórios:

cpfCliente, valorEmprestimo, valorTotalIof, valorTotal,
taxaMes, taxaAno, taxaCetMes, taxaCetAno,
codigoCompe, numeroAgencia, numeroConta, tipoConta,
numeroParcela, dataVencimentoParcela, valorParcela, valorTotalSeguro
⚠️ 503 Service Unavailable
DetalheSolução
Serviço indisponívelGeração de PDF temporariamente indisponível. Aguarde e tente novamente

6️⃣ Efetivação (GET/POST /efetivacao)

⚠️ 400 Bad Request — POST /efetivacao
DetalheSolução
codigoCliente é obrigatórioInforme no body
valor é obrigatórioInforme o valor do empréstimo
quantidadeParcela é obrigatórioInforme a quantidade de parcelas escolhida
Conta é obrigatórioInforme o objeto Conta com todos os campos obrigatórios
Conta.codigoCompe é obrigatórioPreencha todos os campos do objeto Conta
Conta.tipoConta inválidoUse apenas CC ou PP
Cliente não elegívelVerifique elegibilidade novamente antes de efetivar
Valor fora do limiteO valor deve estar entre mínimo e máximo da elegibilidade
⚠️ 400 Bad Request — GET /efetivacao
DetalheSolução
cpfCliente é obrigatórioAdicione o header cpfCliente
⚠️ 503 Service Unavailable
DetalheSolução
Serviço indisponívelSistema de efetivação indisponível. NÃO tente novamente automaticamente — pode gerar duplicidade
Cuidado com retry na efetivação!

Diferente dos outros endpoints, o POST /efetivacao não deve ter retry automático em caso de 503. Aguarde e consulte os empréstimos do cliente (GET /efetivacao) para verificar se a operação foi processada antes de tentar novamente.


7️⃣ Agendamentos (GET /agendamento · POST /agendamento/cancelamento)

⚠️ 400 Bad Request — GET /agendamento
DetalheSolução
cpfCliente é obrigatórioAdicione o header cpfCliente
⚠️ 400 Bad Request — POST /agendamento/cancelamento
DetalheSolução
idAgendamento é obrigatórioInforme o ID do agendamento no body
idCanal é obrigatórioInforme o canal
Agendamento não encontradoVerifique se o ID está correto via GET /agendamento
Agendamento já processadoNão é possível cancelar agendamentos já efetivados

8️⃣ Parcelas (GET /parcela)

⚠️ 400 Bad Request
DetalheSolução
numeroContrato é obrigatórioAdicione o header numeroContrato
numeroContrato deve ser inteiroEnvie apenas números inteiros
Contrato não encontradoVerifique o número do contrato via GET /efetivacao

9️⃣ Contrato (GET /contrato)

⚠️ 400 Bad Request
DetalheSolução
numeroContrato é obrigatórioAdicione o header numeroContrato
Contrato não encontradoVerifique o número via GET /efetivacao
⚠️ 503 Service Unavailable
DetalheSolução
Serviço indisponívelGeração de PDF temporariamente indisponível

🔄 Erros Globais (Todos os Endpoints)

401 Unauthorized

Retornado quando o token JWT é inválido, expirado ou ausente.

Soluções:

  1. Verifique se o header Authorization: Bearer <token> está presente
  2. Confirme que o token não expirou (use expires_in para controlar)
  3. Gere um novo token via endpoint de autenticação
  4. Implemente renovação automática (30 segundos antes de expirar)

503 Service Unavailable

Serviço dependente temporariamente indisponível.

Estratégia de retry recomendada:

EndpointPode retry?Backoff
POST /elegibilidade2s, 4s, 8s
GET /simulacao-plano2s, 4s, 8s
GET /banco2s, 4s
GET/POST /conta2s, 4s, 8s
GET /precontrato2s, 4s
POST /efetivacao⚠️ NÃOConsultar antes de retentar
GET /efetivacao2s, 4s
GET /agendamento2s, 4s
POST /agendamento/cancelamento⚠️ VerificarConsultar status antes
GET /parcela2s, 4s
GET /contrato2s, 4s

💡 Dicas Gerais

Formato de dados

CampoFormato esperadoExemplo
CPF11 dígitos numéricos (sem pontos/traço)12345678901
DataISO 86012026-05-28T00:00:00.000Z
Valores monetáriosNúmero decimal3000.00
Código do bancoString de 3 dígitos"001"
Tipo de contaCC ou PP"CC"

Ordem recomendada de integração

1. POST /elegibilidade → Verificar se o cliente pode contratar
2. GET /simulacao-plano → Apresentar opções ao cliente
3. GET /banco → Listar bancos para seleção
4. GET /conta → Verificar contas existentes
5. POST /conta → Registrar nova conta (se necessário)
6. GET /precontrato → Gerar documento para aceite
7. POST /efetivacao → Efetivar após aceite do cliente
8. GET /parcela → Acompanhar parcelas
9. GET /contrato → Obter PDF quando necessário

📞 Suporte

Se o problema persistir após verificar este guia:

  1. Colete informações: HTTP status, campo instance do erro, timestamp da requisição
  2. Verifique o ambiente: Confirme se está usando HML ou PRD
  3. Entre em contato: suporte.tecnico@credsystem.com.br
  4. Horário: Segunda a Sexta, 8h às 18h (BRT)