Qué dice GoCardless
| Evento | Código SEPA Core | Texto de 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. |
La causa es la misma en las cuatro filas, bank_account_closed; el código distingue el motivo. Fíjate en la tercera: además del mandato, GoCardless cancela los pagos pendientes de ese mandato, que te llegarán como pagos cancelados con la misma causa.

Dos eventos para un mismo hecho
Un cierre de cuenta llega a Odoo dos veces: con el pago que falla y con el mandato que se cancela. El conector atiende los dos: el primero que llega archiva el mandato y avisa, y el segundo ya lo encuentra archivado, sin repetir el aviso. Si alguno no llega por el webhook, la tarea que cada hora pide a GoCardless los eventos perdidos lo recupera, hasta 100 por pasada.
Lo que hace el conector
- Pasa la transacción a error con «GoCardless no pudo cobrar este pago (bank_account_closed).» y guarda la causa.
- Si la factura ya estaba pagada con ese cobro, anula el pago en Odoo y la factura vuelve a estar pendiente.
- Archiva el método de pago del cliente:
bank_account_closedes una de las cuatro causas con las que el conector da el mandato por muerto, junto conmandate_cancelled,mandate_expiredyauthorisation_disputed. - Lo escribe en la ficha del cliente: «El mandato de domiciliación de GoCardless de … ya no se puede usar (bank_account_closed). No se puede cobrar nada más con él. Pide al cliente que firme un mandato nuevo.»
- Crea una actividad «Mandato de GoCardless perdido» para que alguien se encargue antes de la siguiente factura.
El mandato archivado se queda en Odoo como histórico, pero ya no se ofrece para cobrar. La transacción se abre desde la factura, con el botón «Transacción de pago» de arriba; el menú de transacciones solo sale en modo desarrollador, y en Odoo 20 no existe.
Estos tres textos los escribe el conector al aplicar el evento, sin nadie delante. En una base de datos creada en castellano salen así; en una creada en inglés y pasada después a castellano salen en 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.» y «GoCardless mandate lost».
Cómo saber si es AC04 o MD07
Desde Odoo no se distingue. La causa es la misma, el conector guarda la causa y no el código SEPA, y la nota del cliente y la actividad dicen lo mismo en los dos casos. El código lo ves en GoCardless. Según su centro de ayuda, el motivo de cada fallo sale en la cronología del pago, en el Dashboard («You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard.»). En el modo avanzado, el código exacto también va en el evento (details.reason_code), y el Dashboard guarda los envíos de los últimos 3 meses en Developers > Webhooks, con su contenido.
Si el código es MD07
MD07 no es un problema técnico. El titular de la cuenta ha fallecido y el mandato se cancela. Las facturas pendientes de ese cliente no se van a cobrar por domiciliación, y cómo reclamarlas es una cuestión que tiene que ver tu asesoría, no el conector. Lo prudente es revisar sus cobros programados y suscripciones en Odoo para que no se generen más. La nota de Odoo pide un mandato nuevo también en este caso, porque solo conoce la causa: con MD07, no lo pidas.
Qué hacer con AC04
- Contacta con el cliente: tiene una cuenta nueva, o la va a tener, y necesita firmar un mandato con ella.
- Cuando firme, el mandato nuevo será otro método de pago en Odoo; el viejo sigue archivado.
- Cobra con el mandato nuevo las facturas que quedaron pendientes.

¿Puedo reintentar un pago con bank_account_closed?
No tiene sentido: la cuenta no existe. Además, el conector archiva el mandato, y con el mandato archivado el botón «Reintentar el cobro» no sale en la transacción.
¿Y si el cliente ha cambiado de banco con el servicio de traslado de cuentas?
Eso no es un cierre: GoCardless lo comunica como mandato transferido, con la causa bank_account_transferred, y el mandato sigue valiendo.
Con nuestro conector
El conector de GoCardless para Odoo 17, 18, 19 y 20 hace con bank_account_closed lo que haría una persona atenta: da el cobro por fallido, reabre la factura, retira el mandato muerto para que nadie lo vuelva a usar y deja un aviso con la causa en la ficha del cliente.
Sigue leyendo
Comprobado en el código del conector (versión 17.0, 18.0, 19.0 y 20.0) y en las fuentes enlazadas
Fuentes
- Código del módulo: flexigo_payment_gocardless: const.py, línea 15 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 442 en 17.0 (d203ee6), línea 442 en 18.0 (e2ab18b), línea 441 en 19.0 (ce7f5a3) y línea 456 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 83 en 17.0 (d203ee6), línea 83 en 18.0 (e2ab18b), línea 83 en 19.0 (ce7f5a3) y línea 82 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: const.py, línea 145 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/mandate
- Código del módulo: flexigo_payment_gocardless: const.py, línea 76 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: const.py, línea 33 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 131 en 17.0 (d203ee6), línea 131 en 18.0 (e2ab18b), línea 131 en 19.0 (ce7f5a3) y línea 130 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 725 en 17.0 (d203ee6), línea 725 en 18.0 (e2ab18b), línea 724 en 19.0 (ce7f5a3) y línea 748 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 754 en 17.0 (d203ee6), línea 754 en 18.0 (e2ab18b), línea 753 en 19.0 (ce7f5a3) y línea 777 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: const.py, línea 117 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 464 en 17.0 (d203ee6), línea 464 en 18.0 (e2ab18b), línea 464 en 19.0 (ce7f5a3) y línea 469 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1241 en 17.0 (d203ee6), línea 1241 en 18.0 (e2ab18b), línea 1241 en 19.0 (ce7f5a3) y línea 1252 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 527 en 17.0 (d203ee6), línea 527 en 18.0 (e2ab18b), línea 527 en 19.0 (ce7f5a3) y línea 532 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: __manifest__.py, línea 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/payment
- Código del módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, línea 13 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 63 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 418 en 17.0 (d203ee6), línea 418 en 18.0 (e2ab18b), línea 417 en 19.0 (ce7f5a3) y línea 432 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1092 en 17.0 (d203ee6), línea 1092 en 18.0 (e2ab18b), línea 1092 en 19.0 (ce7f5a3) y línea 1113 en 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 del módulo: flexigo_payment_gocardless: const.py, línea 66 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
