failureCode), uma mensagem em português (failureReason) e o código bruto do gateway (gatewayFailureCode). Você roteia em cima do enum normalizado e ainda tem o código original para auditoria / abertura de chamado com Celcoin.
Onde aparece
Valores
Mapeamento ABECS → Garu
A Garu normaliza os códigos ABECS retornados pelo Celcoin. O código original fica emgatewayFailureCode:
Códigos não-ABECS (mensagem livre do Celcoin) caem em keyword matching: a Garu varre a
reasonDenied por palavras-chave em PT/EN (“vencido”, “expired”, “insufficient”, etc.) e mapeia para o melhor enum. Se nada bate: unknown.
Exemplo
Boas práticas de roteamento
Estado permanente vs. transitório
Estado permanente vs. transitório
card_expired, card_canceled, fraud_suspected → coletar dados novos. Não vale a pena automatizar retry. insufficient_funds, issuer_unavailable, processing_error → a Garu já tenta automaticamente; relaxe.Sempre prefira o enum, não o gateway code
Sempre prefira o enum, não o gateway code
gatewayFailureCode muda quando trocamos de gateway por baixo. failureCode é estável. Use o enum para automação; logue o gateway code para forensics.Em recurring, deixe a Garu fazer retry
Em recurring, deixe a Garu fazer retry
Para
scheduled_charge.cycle_failed, a Garu já tentou em +6h, +24h, +48h antes de emitir o evento. Não tente cobrar de novo programaticamente — peça novo cartão ou aguarde o cliente clicar no e-mail de fallback.