O que diz a GoCardless
| Evento | Código SEPA Core | Texto da GoCardless |
|---|---|---|
| payments · failed | AC04 | The bank account for this payment has been closed. The mandate will also be cancelled. |
| payments · failed | MD07 | This payment failed because the customer is deceased. |
| mandates · cancelled | AC04 | The bank account for this mandate has been closed. Any subscriptions and pending payment will also be cancelled. |
| mandates · cancelled | MD07 | This mandate has been cancelled because the customer is deceased. |
A causa é a mesma nas quatro linhas, bank_account_closed; o código distingue o motivo. Repare na terceira: para além do mandato, a GoCardless cancela os pagamentos pendentes desse mandato, que lhe chegarão como pagamentos cancelados com a mesma causa.

Dois eventos para um mesmo facto
Um encerramento de conta chega ao Odoo duas vezes: com o pagamento que falha e com o mandato que se cancela. O conector trata os dois: o primeiro que chega arquiva o mandato e avisa, e o segundo já o encontra arquivado, sem repetir o aviso. Se algum não chegar pelo webhook, a tarefa que de hora a hora pede à GoCardless os eventos perdidos recupera-o, até 100 por passagem.
O que faz o conector
- Passa a transação para erro com «A GoCardless não conseguiu cobrar este pagamento (bank_account_closed).» e guarda a causa.
- Se a fatura já estava paga com essa cobrança, anula o pagamento no Odoo e a fatura volta a ficar pendente.
- Arquiva o método de pagamento do cliente:
bank_account_closedé uma das quatro causas com as quais o conector dá o mandato por morto, juntamente commandate_cancelled,mandate_expiredeauthorisation_disputed. - Escreve-o na ficha do cliente: «O mandato de débito direto GoCardless de … já não pode ser usado (bank_account_closed). 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» para que alguém trate do assunto antes da próxima fatura.
O mandato arquivado fica no Odoo como histórico, mas já não é oferecido para cobrança. 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.
Estes três textos são escritos pelo conector ao aplicar o evento, sem ninguém presente. Numa base de dados criada em português saem em português; numa criada em inglês e passada depois para português saem em inglês: «GoCardless could not collect this payment (bank_account_closed).», «The GoCardless direct debit mandate of … is no longer usable (bank_account_closed). No further collection can be taken against it. Ask the customer to set up a new mandate.» e «GoCardless mandate lost».
Como saber se é AC04 ou MD07
No Odoo não se distingue. A causa é a mesma, o conector guarda a causa e não o código SEPA, e a nota do cliente e a atividade dizem o mesmo nos dois casos. O código vê-o na GoCardless. Segundo o seu centro de ajuda, o motivo de cada falha aparece na cronologia do pagamento, no Dashboard («You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.»). No modo avançado, o código exato também vem no evento (details.reason_code), e o Dashboard guarda os envios dos últimos 3 meses em Developers > Webhooks, com o respetivo conteúdo.
Se o código for MD07
MD07 não é um problema técnico. O titular da conta faleceu e o mandato cancela-se. As faturas pendentes desse cliente não vão ser cobradas por débito direto, e como as reclamar é uma questão que cabe ao seu contabilista, não ao conector. O prudente é rever as suas cobranças programadas e subscrições no Odoo para que não se gerem mais. A nota do Odoo pede um mandato novo também neste caso, porque só conhece a causa: com MD07, não o peça.
O que fazer com AC04
- Contacte o cliente: tem uma conta nova, ou vai ter, e precisa de assinar um mandato com ela.
- Quando assinar, o mandato novo será outro método de pagamento no Odoo; o antigo continua arquivado.
- Cobre com o mandato novo as faturas que ficaram pendentes.

Posso voltar a tentar um pagamento com bank_account_closed?
Não faz sentido: a conta não existe. Além disso, o conector arquiva o mandato, e com o mandato arquivado o botão «Tentar cobrar novamente» não aparece na transação.
E se o cliente mudou de banco com o serviço de transferência de contas?
Isso não é um encerramento: a GoCardless comunica-o como mandato transferido, com a causa bank_account_transferred, e o mandato continua válido.
Com o nosso conector
O conector da GoCardless para Odoo 17, 18, 19 e 20 faz com bank_account_closed o que faria uma pessoa atenta: dá a cobrança por falhada, reabre a fatura, retira o mandato morto para que ninguém o volte a usar e deixa um aviso com a causa na ficha do cliente.
Continue a ler
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: 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: const.py, linha 145 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: 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 33 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 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_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 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: const.py, linha 117 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 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 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)
- 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)
- docs.gocardless.com/docs/api-reference/webhooks
- github.com/odoo/odoo/blob/17.0/odoo/http.py
- support.gocardless.com/hc/en-gb/articles/360001467265
- Código do módulo: flexigo_payment_gocardless: const.py, linha 66 em 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) e 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
