O que diz a GoCardless
| Evento | Causa | Códigos | Texto da GoCardless |
|---|---|---|---|
| payments · failed | direct_debit_not_enabled | AG01, AC06 | The bank account for this payment does not support SEPA Direct Debit. The mandate will also be cancelled. |
| payments · failed | account_blocked_for_any_financial_transaction | AC06 | This payment failed because the payer's account was blocked. |
| mandates · cancelled | direct_debit_not_enabled | AG01, AC06 | The bank account for this mandate does not support SEPA direct debit. Any subscriptions and pending payments will also be cancelled. |
| mandates · cancelled | account_blocked_for_any_financial_transaction | AC06 | The bank account for this mandate was blocked. Any subscriptions and pending payments will also be cancelled. |
As duas causas aparecem também em payments · cancelled: aí vão as cobranças que ainda aguardavam apresentação com esse mandato e que a GoCardless cancela juntamente com ele.

De onde vem
Aqui não falha a assinatura, falha a conta. O mandato existe, mas quando a GoCardless apresenta o débito, o banco do cliente responde que nessa conta não são aceites débitos diretos SEPA, ou que está bloqueada. Por isso estes eventos têm origem bank: são decididos pelo banco do pagador.
direct_debit_not_enabled arrasta o mandato. A GoCardless cancela-o e, com ele, caem as subscrições e as cobranças que tivesse pendentes. Com account_blocked_for_any_financial_transaction a conta está bloqueada; quando a GoCardless cancela também o mandato por esse motivo, comunica-o no seu próprio evento, com a mesma causa.
O que faz o Odoo com cada evento
| Evento que chega | O que faz o conector |
|---|---|
| payments · failed | A transação passa a «Erro» com «A GoCardless não conseguiu cobrar este pagamento (direct_debit_not_enabled).», ou com a causa da conta bloqueada. Se essa cobrança já tinha pago a fatura, anula o pagamento e a fatura volta a ficar por cobrar. |
| payments · cancelled | O mesmo que um pagamento falhado. |
| mandates · cancelled | Arquiva o método de pagamento, deixa escrito na ficha do cliente que esse mandato já não serve e cria a atividade «Mandato da GoCardless perdido». |
Atenção à ordem: o evento do pagamento não retira o mandato, porque estas causas não figuram entre as quatro que fazem com que o conector o arquive ao receber um pagamento. Isso fá-lo o evento do mandato. E se não chegar pelo webhook, é recolhido pela tarefa horária que procura os eventos perdidos.
Os dois textos citados da tabela nascem de um evento, não de um clique. 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 could not collect this payment (direct_debit_not_enabled).» e «GoCardless mandate lost».
Também não há que esperar nada do Success+: o seu guia diz que só volta a tentar os pagamentos que falham por falta de fundos. O conector, de qualquer forma, verifica em cada falha o campo will_attempt_retry do evento e, se não vier a true, deixa a transação em erro.
E o botão de tentar novamente
Para ver a mensagem, entre na fatura e clique em cima em «Transação de Pagamento». O menu de transações só aparece em modo de programador e, no Odoo 20, já não existe.
Num pagamento falhado, enquanto o Odoo não tiver arquivado o mandato, essa transação oferece «Tentar cobrar novamente»; num cancelado, não. Serve de pouco: a GoCardless só repete pagamentos cujo mandato continua ativo e, com direct_debit_not_enabled, acabou de o cancelar. Se a resposta for retry_failed ou mandate_is_inactive, o conector consulta o mandato, arquiva-o se estiver morto e deixa-o registado na transação: «O mandato GoCardless do cliente está no estado …, pelo que não pode ser cobrado. Peça ao cliente um novo mandato.». A partir daí o botão desaparece.

O que fazer
- Fale com o cliente. Se a conta não aceita débitos, precisa de outra que os aceite; se está bloqueada (AC06), terá primeiro de resolver a situação com o seu banco.
- Com a conta boa, o cliente assina um novo mandato, que no Odoo aparecerá como outro método de pagamento.
- Volte a cobrar com esse método as faturas em aberto. As cobranças canceladas pela GoCardless não vão ser apresentadas por si sós.
- Se precisar do código exato, procure-o na GoCardless, porque o Odoo só guarda a causa: o conector não conserva o código SEPA. O seu centro de ajuda explica-o assim: «You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.».
Porque é que AC06 aparece nas duas causas?
A GoCardless usa o mesmo código AC06 para a conta que não aceita débitos e para a conta bloqueada. Na prática é indiferente: hoje essa conta não serve para cobrar, e é preciso outra ou que o banco a desbloqueie.
Posso reativar o mandato?
Se a conta não aceita débitos, não faz sentido: continuaria sem os aceitar. O que é preciso é um novo mandato com outra conta.
Com o nosso conector
Com o Odoo 17, 18, 19 e 20, esta falha não fica escondida: a transação mostra a causa da GoCardless, a fatura é reaberta se estava paga e, assim que chega o cancelamento do mandato, o cliente fica assinalado para lhe pedir outra conta antes da próxima fatura.
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)
- docs.gocardless.com/docs/api-reference/events/payment
- 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 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: 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: const.py, linha 74 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 435 em 17.0 (d203ee6), linha 435 em 18.0 (e2ab18b), linha 434 em 19.0 (ce7f5a3) e linha 449 em 20.0 (688d86b)
- docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
- 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: 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/payment
- 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 1346 em 17.0 (d203ee6), linha 1346 em 18.0 (e2ab18b), linha 1346 em 19.0 (ce7f5a3) e linha 1358 em 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/payment/i18n/pt.po
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
- 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)
- 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/responses-and-errors
