Saltar para o conteúdo principal
GoCardless · SEPA Core · estorno (chargeback)

GoCardless MD06: o cliente pede ao banco o estorno de uma cobrança

Um débito SEPA cobrado não é definitivo: durante 8 semanas, o cliente pode pedir ao banco que lho estorne. Quando o faz, a GoCardless envia o evento de pagamento charged_back com a causa refund_requested e o código MD06, e retira-lhe o dinheiro.

FlexigoTech · Responsável: Víctor Gómez · Atualizado em 6 de novembro de 2026

O essencial

Módulo
GoCardless
Versões
Odoo 17, 18, 19 e 20
Verificado
no código do conector, versão 17.0, 18.0, 19.0 e 20.0 · nas fontes indicadas no fim
Leitura
4 min

O que diz a GoCardless

EventoCausaCódigo SEPA CoreTexto da GoCardless
payments · charged_backrefund_requestedMD06This payment was charged back by the customer's bank at the customer's request within the 8 week cool-off period.

O texto diz quase tudo: o estorno é pedido pelo cliente, tratado pelo banco dele e cabe dentro do período de 8 semanas que a GoCardless chama cool-off period. Não é uma falha da cobrança: o dinheiro chegou e agora regressa.

Cartão da causa refund_requested da GoCardless
A causa, o seu código SEPA Core MD06 e o texto com que a GoCardless a documenta.

Quando dá por isso

Um estorno MD06 chega com a cobrança já fechada. No Odoo, a transação estava concluída e a fatura, paga: o conector dá uma cobrança por feita quando a GoCardless a marca como confirmed ou paid_out. Depois há outro evento que convém conhecer, chargeback_settled: «This charged back payment has been settled against a payout.». Ou seja, o estorno é descontado de uma liquidação da GoCardless, não lhe é debitado à parte.

Se o banco do cliente voltar atrás, a GoCardless envia chargeback_cancelled e o pagamento volta a contar como cobrado. Entre uma coisa e outra podem passar dias, e convém não tomar decisões com o cliente sem ver antes em que estado está a transação no Odoo: é o reflexo do último evento enviado pela GoCardless. A transação abre-se a partir da fatura, com o botão «Transação de Pagamento» na parte de cima; o menu de transações só aparece em modo de programador e, no Odoo 20, não existe.

O que faz o Odoo com o conector

PassoO que muda
A transaçãoPassa de «Confirmado» a «Erro»: um estorno desfaz uma cobrança que estava correta.
A mensagem«A GoCardless comunicou um estorno deste pagamento (refund_requested). Os fundos foram retirados e serão descontados de uma liquidação futura.»
O pagamento no OdooÉ anulado, e a fatura volta a ficar pendente de cobrança.
O mandatoContinua válido: refund_requested não está entre as causas com que o conector arquiva o mandato.

A mensagem é escrita pelo conector ao aplicar o evento, sem ninguém à frente. Estes textos saem no idioma de quem lança a cobrança; se for uma ação agendada, como a renovação de uma subscrição, são escritos sem ninguém à frente: numa base de dados criada em português saem assim, e numa criada em inglês e passada depois para português, em inglês: «GoCardless reported a chargeback for this payment (refund_requested). The funds have been taken back and will be deducted from a future payout.».

A transação fica em erro com o mandato ativo, mas não mostra o botão «Tentar cobrar novamente». Desde a versão 1.1.4, o conector só o oferece se o pagamento estiver em failed na GoCardless, e um pagamento estornado está em charged_back. Está em linha com a documentação da GoCardless: a nova tentativa só serve para pagamentos que falharam, e a um pagamento estornado responderia retry_failed.

Que o mandato continue ativo é o correto. Pedir o estorno de um recibo não é revogar a autorização; se o cliente quisesse isso, a causa seria outra (mandate_cancelled, com o código MD01). Com o chargeback_cancelled, o conector volta a dar a transação por cobrada.

O que fazer

Um estorno MD06 é, antes de mais, uma conversa com o cliente e só depois um problema técnico. Pergunte o que aconteceu: um valor que não esperava, um serviço com o qual não está satisfeito ou um débito duplicado. Com a resposta:

  1. Se a fatura estiver correta e o cliente o aceitar, cobre-a outra vez com uma nova cobrança, com o método de pagamento guardado: o mandato continua disponível. A transação estornada não tem botão de nova tentativa.
  2. Se o cliente tinha razão, emita a nota de crédito que corresponder e deixe a original por cobrar.
  3. Se os estornos se repetirem com o mesmo cliente, pondere outra forma de pagamento para ele.

Quanto tempo tem o cliente para pedir o estorno de uma cobrança?

Para um MD06, o texto da GoCardless fala de um período de 8 semanas: o estorno é pedido pelo cliente ao banco dentro desse prazo. Por isso, uma cobrança SEPA confirmada não é totalmente firme durante esse tempo.

Onde vejo que foi um estorno e não uma falha?

Na transação, que abre a partir da fatura com o botão «Transação de Pagamento»: o campo «Causa segundo a GoCardless» diz refund_requested e a mensagem fala de um estorno, não de uma cobrança que não se conseguiu fazer.

Esquema: o que a GoCardless envia com um estorno MD06 e o que faz o Odoo com o conector
Esquema feito a partir do código do conector (17.0, 18.0, 19.0 e 20.0) e da documentação da GoCardless; o que está riscado é o que o conector não faz com esta causa.

Com o nosso conector

O conector da GoCardless para o Odoo 17, 18, 19 e 20 não deixa uma fatura marcada como paga com um dinheiro que já não tem: anula o pagamento, reabre a fatura e guarda a causa. E não castiga o cliente arquivando o mandato por um estorno pontual.

Continue a ler

GoCardless MD01: mandate_cancelled e authorisation_disputed num débito SEPAO código SEPA MD01 chega na GoCardless como mandate_cancelled ou authorisation_disputed, num débito falhado, devolvido ou cancelado. O que o Odoo faz com ele.GoCardless insufficient_funds (AM04): a conta do cliente não tinha saldoUm débito da GoCardless falha com insufficient_funds e o código SEPA AM04. O que significa, quando o Success+ o volta a tentar e o que o Odoo faz à fatura.GoCardless refer_to_payer: MS02, MS03, RR04 e SL01 numa cobrança SEPArefer_to_payer agrupa no GoCardless os códigos SEPA MS02, MS03, RR04 e SL01. O que significa cada um, porque o mandato continua ativo e como o Odoo o trata.
Verificado no código do conector (versão 17.0, 18.0, 19.0 e 20.0) e nas fontes indicadas

Fontes

  • Código do módulo: flexigo_payment_gocardless: const.py, linha 15 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 694 em 17.0 (d203ee6), linha 694 em 18.0 (e2ab18b), linha 693 em 19.0 (ce7f5a3) e linha 717 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 41 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: const.py, linha 76 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 713 em 17.0 (d203ee6), linha 713 em 18.0 (e2ab18b), linha 712 em 19.0 (ce7f5a3) e linha 736 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 754 em 17.0 (d203ee6), linha 754 em 18.0 (e2ab18b), linha 753 em 19.0 (ce7f5a3) e linha 777 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 568 em 17.0 (d203ee6), linha 568 em 18.0 (e2ab18b), linha 568 em 19.0 (ce7f5a3) e linha 574 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 377 em 17.0 (d203ee6), linha 377 em 18.0 (e2ab18b), linha 377 em 19.0 (ce7f5a3) e linha 383 em 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/payment
  • Código do módulo: flexigo_payment_gocardless: __manifest__.py, linha 31 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Código do módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, linha 13 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 63 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 418 em 17.0 (d203ee6), linha 418 em 18.0 (e2ab18b), linha 417 em 19.0 (ce7f5a3) e linha 432 em 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/pt.po
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 1091 em 17.0 (d203ee6), linha 1091 em 18.0 (e2ab18b), linha 1091 em 19.0 (ce7f5a3) e linha 1113 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 617 em 17.0 (d203ee6), linha 617 em 18.0 (e2ab18b), linha 617 em 19.0 (ce7f5a3) e linha 623 em 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/payment
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 469 em 17.0 (d203ee6), linha 469 em 18.0 (e2ab18b), linha 468 em 19.0 (ce7f5a3) e linha 487 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 558 em 17.0 (d203ee6), linha 558 em 18.0 (e2ab18b), linha 558 em 19.0 (ce7f5a3) e linha 564 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_provider.py, linha 397 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, linha 22 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 435 em 17.0 (d203ee6), linha 435 em 18.0 (e2ab18b), linha 434 em 19.0 (ce7f5a3) e linha 449 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_transaction.py, linha 247 em 17.0 (d203ee6), linha 247 em 18.0 (e2ab18b), linha 247 em 19.0 (ce7f5a3) e linha 258 em 20.0 (688d86b)