Minstrel

Recorrencia

Retentativa e codigos de recusa

Como o Minstrel classifica recusas pelo Normativo 021 da ABECS e decide quando retentar uma cobranca.

Retentar uma cobranca recusada parece simples e e onde a maioria das integracoes perde dinheiro. Este documento explica a regra que usamos e por que ela e assim.

O problema

Quando o emissor recusa uma cobranca, ele diz por que. Esse motivo muda completamente o que vale fazer em seguida:

  • "saldo insuficiente" pode mudar amanha, quando o salario cair;
  • "cartao perdido" nao vai mudar nunca.

Retentar as duas do mesmo jeito custa dinheiro na segunda. O Normativo nº 021 da ABECS formaliza essa distincao e alerta diretamente sobre o custo:

O EC deve se atentar a possibilidade de cobranca de penalidade pela retentativa. Desta forma, e recomendado verificar a razao da negativa antes de submeter novo pedido de autorizacao.

As duas classes de recusa

O Art. 5º do normativo define duas categorias:

Reversivel

O emissor nao pode aprovar neste momento. Falta de limite, indisponibilidade de sistema, suspeita de fraude, excesso de tentativas de senha. Sao decisoes temporarias que podem mudar com o tempo.

Tratamento previsto: a proxima transacao pode ter os mesmos campos, mas deve ocorrer em tempo ou data diferente.

Irreversivel

O emissor nunca aprovara. Cartao cancelado, perdido, roubado, fraude confirmada, transacao nao permitida para o produto.

Nas palavras do normativo: "qualquer tentativa de autorizacao que antes tenha recebido uma recusa Irreversivel sem alteracao de algum campo da mensageria nao obtera sucesso".

Tratamento previsto: so faz sentido tentar de novo alterando algum campo, o que resulta em uma transacao distinta. Sem alteracao possivel, o caminho e pedir outro meio de pagamento ao cliente.

Como aparece na resposta

Toda recusa vem classificada:

{
  "object": "payment",
  "status": "failed",
  "decline": {
    "reason": "INSUFFICIENT_FUNDS",
    "reversibility": "REVERSIBLE",
    "retryAction": "RETRY_LATER"
  },
  "attempts": [
    {
      "attemptNumber": 1,
      "connector": "cielo",
      "rawResponseCode": "51",
      "declineReason": "INSUFFICIENT_FUNDS",
      "reversibility": "REVERSIBLE",
      "retryAction": "RETRY_LATER"
    }
  ]
}

O rawResponseCode e o codigo bruto do emissor - use-o para falar com o adquirente. O declineReason e a classificacao canonica, igual para todas as bandeiras - use-o para decidir o que fazer e para agrupar relatorios.

Acoes possiveis

retryActionSignificadoRetentativa automatica
RETRY_LATERReagendar com intervalo de diasSim
RETRY_SOONFalha transitoria, retentar em minutosSim
RETRY_WITH_CHANGESSo com alteracao de campo (valor, parcelas)Nao
UPDATE_PAYMENT_METHODSolicitar novo cartao ao clienteNao
CONTACT_CARDHOLDERPortador precisa agir (desbloquear, ligar)Nao
DO_NOT_RETRYEncerrar as tentativasNao
STOP_RECURRINGCancelar a assinaturaNao

Suspensao de recorrencia: o caso que exige atencao

Os codigos R0, R1 e R3 da Visa, e o Merchant Advice Code 21 da Mastercard, significam que o portador revogou a autorizacao da cobranca recorrente junto ao emissor.

Isso nao e uma recusa comum: e uma determinacao. Insistir gera chargeback e penalidade de bandeira.

Quando recebemos um desses codigos, o Minstrel cancela a assinatura automaticamente, marca canceledByIssuer: true e emite o evento subscription.canceled_by_issuer. Nao existe configuracao que sobreponha esse comportamento.

Quando o emissor diz quando retentar

A Mastercard envia, junto da recusa, o Merchant Advice Code (DE48 SE84), registrado no Anexo II do normativo. Alguns valores informam o intervalo exato:

MACOrientacao
01Existe cartao novo: consulte o Account Updater antes de retentar
02Nao pode aprovar agora, tente mais tarde
03Nao tente novamente
21Cancelamento de recorrencia
24Retentar apos 1 hora
25Retentar apos 24 horas
26 a 30Retentar apos 2, 4, 6, 8 ou 10 dias

Quando o MAC esta presente, ele tem precedencia sobre o intervalo da sua politica - mas apenas para aumenta-lo. Se a sua politica pede 24 horas e o emissor pede 4 dias, esperamos 4 dias. O contrario nao acontece.

Politicas de retentativa

A politica padrao faz 1 cobranca mais 3 retentativas em 7 dias:

{
  "name": "padrao-7-dias",
  "maxAttempts": 4,
  "schedule": [
    { "attempt": 2, "delayHours": 24 },
    { "attempt": 3, "delayHours": 72 },
    { "attempt": 4, "delayHours": 96 }
  ],
  "windowDays": 10,
  "respectIssuerAdvice": true,
  "stopOnIrreversible": true,
  "preferredHourLocal": 10,
  "timezone": "America/Sao_Paulo"
}

Os intervalos caem em datas distintas de credito do portador (D+1, D+3, D+7), equilibrando conversao e custo.

Dois campos merecem explicacao:

respectIssuerAdvice mantem a precedencia do Merchant Advice Code. Desligar aumenta o risco de penalidade - nao recomendamos.

stopOnIrreversible encerra em recusa irreversivel. Desligar significa pagar por tentativas que o emissor ja informou que nao aprovara.

A tabela completa

A tabela do Anexo I cobre 50 situacoes, com os codigos de Elo, Visa, Mastercard, Hiper e American Express, e a reversibilidade declarada por cada bandeira. Ela esta em Codigos de recusa.

Vale notar uma divergencia que a tabela registra: o codigo 57 e irreversivel na Visa e na Elo, mas reversivel na Mastercard. Por isso a classificacao considera a bandeira, e nao apenas o codigo.