Saltar para o conteúdo principal
GoCardless · SEPA Core · mandato anulado ou contestado

GoCardless MD01: mandate_cancelled e authorisation_disputed num débito SEPA

O MD01 chega quando o cliente anulou o mandato no seu banco ou diz que nunca autorizou o débito. Na GoCardless aparece em três eventos de pagamento diferentes, consoante o momento, e em todos o resultado para o futuro é o mesmo: com esse mandato já não se pode cobrar.

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

Três eventos e quatro linhas, o mesmo código

EventoCausaTexto da GoCardless
payments · failedmandate_cancelledThe customer cancelled their mandate at their bank.
payments · charged_backmandate_cancelledThis payment was charged back by the customer's bank, because the customer disputed authorising the transaction.
payments · cancelledauthorisation_disputedThis payment has been cancelled because the payer disputes authorising its mandate.
payments · cancelledmandate_cancelledThis payment has been cancelled because the payer disputes authorising its mandate.

As quatro linhas são da tabela de SEPA Core da documentação da GoCardless e levam MD01; o pagamento cancelado sai com duas causas e o mesmo texto. O mandato também se cancela, e a GoCardless comunica-o com o seu próprio evento: «A payment under this mandate failed, indicating that the mandate has been cancelled at the customer's bank. Any subscriptions and pending payments will also be cancelled.».

Cartão da causa mandate_cancelled da GoCardless
A causa, o código SEPA Core MD01 e o texto da GoCardless para o pagamento falhado.

O que muda consoante o momento

Se o cliente anular o mandato antes de o débito ser cobrado, o pagamento falha: o dinheiro não chegou. Se o contestar depois de cobrado, é um estorno: o dinheiro chegou e sai. E se havia pagamentos à espera de ser apresentados, a GoCardless cancela-os antes de os enviar. O conector anota no seu código que viu a causa authorisation_disputed com MD01 num pagamento de teste do sandbox, como devolução de um pagamento já liquidado.

O que o Odoo faz com o conector

A transação abre-se a partir da fatura, com o botão «Transação de Pagamento» no topo; o menu de transações só aparece em modo de programador, e no Odoo 20 não existe. Nos três casos, a transação fica em «Erro» com a causa à vista. A mensagem depende do evento: «A GoCardless não conseguiu cobrar este pagamento (mandate_cancelled).» para uma falha, e «A GoCardless comunicou um estorno deste pagamento (mandate_cancelled). Os fundos foram retirados e serão descontados de uma liquidação futura.» para uma devolução. Se o Odoo já tinha a fatura paga com esse débito, o conector anula o pagamento e a fatura volta a ficar pendente.

O importante é o mandato. mandate_cancelled e authorisation_disputed estão entre as quatro causas com que o conector o dá por morto, pelo que:

  • arquiva o método de pagamento do cliente, que deixa de ser oferecido para cobrança;
  • escreve na sua ficha «O mandato de débito direto GoCardless de … já não pode ser usado (mandate_cancelled). Não é possível cobrar mais nada com ele. Peça ao cliente que crie um novo mandato.»;
  • cria uma atividade «Mandato da GoCardless perdido».

Chegam vários eventos com a mesma notícia, o do pagamento e o do mandato, mas o aviso sai uma só vez: o segundo encontra o mandato já arquivado.

Todos estes textos os escreve o conector ao aplicar o evento, sem ninguém à frente. Numa base de dados criada em português saem assim; numa criada em inglês e passada depois para português saem em inglês: «GoCardless could not collect this payment (mandate_cancelled).», «GoCardless reported a chargeback for this payment (mandate_cancelled). The funds have been taken back and will be deducted from a future payout.», «The GoCardless direct debit mandate of … is no longer usable (mandate_cancelled). No further collection can be taken against it. Ask the customer to set up a new mandate.» e «GoCardless mandate lost».

O que fazer

Antes de pedir um mandato novo, perceba porque é que o anulou. Um cliente que deixou de querer o serviço precisa de uma rescisão, não de outra assinatura. Se foi um erro seu ou uma mudança no banco, peça-lhe que assine outra vez e cobre com o mandato novo as faturas que ficaram em aberto. Se diz que nunca autorizou a cobrança, reveja como o mandato foi assinado antes de continuar a cobrar-lhe.

Serve de alguma coisa tentar cobrar novamente um pagamento com MD01?

Não. O mandato já não existe para o seu banco, e com o mandato arquivado o botão «Tentar cobrar novamente» não aparece na transação. É preciso um mandato novo assinado pelo cliente.

Esquema: o que a GoCardless envia com MD01 e o que o Odoo faz 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.

Com o nosso conector

No Odoo 17, 18, 19 e 20, o conector distingue a falha da devolução, reabre a fatura se for preciso, retira o mandato e deixa-lhe a tarefa de falar com o cliente na sua ficha. O que não faz é pedir o mandato novo por conta própria: essa conversa é sua.

Continue a ler

GoCardless MD06: o cliente pede ao banco o estorno de uma cobrançaO cliente pede ao banco o estorno de um débito GoCardless: charged_back, refund_requested e MD06. O que acontece no Odoo à fatura e ao mandato.Erro mandate_is_inactive da GoCardless ao criar uma cobrança a partir do OdooA GoCardless responde mandate_is_inactive ao criar um pagamento com um mandato cancelado, falhado ou expirado. Porquê e como o conector o resolve no Odoo.GoCardless bank_account_closed: AC04 e MD07, a conta já não existeGoCardless bank_account_closed com AC04 (conta encerrada) ou MD07 (titular falecido): o mandato fica cancelado. O que o Odoo faz à fatura e ao cliente.
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 442 em 17.0 (d203ee6), linha 442 em 18.0 (e2ab18b), linha 441 em 19.0 (ce7f5a3) e linha 456 em 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: const.py, linha 71 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 725 em 17.0 (d203ee6), linha 725 em 18.0 (e2ab18b), linha 724 em 19.0 (ce7f5a3) e linha 748 em 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: models/payment_token.py, linha 131 em 17.0 (d203ee6), linha 131 em 18.0 (e2ab18b), linha 131 em 19.0 (ce7f5a3) e linha 130 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: models/payment_token.py, linha 83 em 17.0 (d203ee6), linha 83 em 18.0 (e2ab18b), linha 83 em 19.0 (ce7f5a3) e linha 82 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 462 em 17.0 (d203ee6), linha 462 em 18.0 (e2ab18b), linha 462 em 19.0 (ce7f5a3) e linha 468 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 1244 em 17.0 (d203ee6), linha 1244 em 18.0 (e2ab18b), linha 1244 em 19.0 (ce7f5a3) e linha 1256 em 20.0 (688d86b)
  • Código do módulo: flexigo_payment_gocardless: i18n/pt.po, linha 525 em 17.0 (d203ee6), linha 525 em 18.0 (e2ab18b), linha 525 em 19.0 (ce7f5a3) e linha 531 em 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • 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/payment
  • 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)
  • 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)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/pt.po
  • 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