Qué dice GoCardless
| Evento | Códigos | Texto de GoCardless |
|---|---|---|
| payments · failed | AC01, BE06 | The bank account specified does not exist. The mandate will also be cancelled. |
| mandates · failed | AC01 | The bank account specified does not exist. Any subscriptions and pending payments will also be cancelled. |
| mandates · cancelled | AC01, BE06 | The bank account specified does not exist. Any subscriptions and pending payments will also be cancelled. |

Cuándo aparece
Depende de cuándo lo descubre el banco. Si rechaza el mandato al darlo de alta, GoCardless lo marca como fallido (mandates · failed) y nunca llega a cobrarse nada. Si el mandato ya estaba activo y el primer cobro rebota con AC01 o BE06, falla el pago y GoCardless cancela el mandato (mandates · cancelled), junto con los pagos pendientes de ese mandato.
En los dos casos el arreglo es el mismo: el cliente tiene que firmar otra vez con una cuenta que exista.
Lo que hace Odoo con el conector
El conector reacciona a cada evento por separado, y conviene saber qué hace cada uno:
- El pago fallido pasa la transacción a error con «GoCardless no pudo cobrar este pago (invalid_bank_details).». Si la factura ya estaba pagada con ese cobro, anula el pago y la factura vuelve a estar pendiente.
- El evento del mandato, fallido o cancelado, es el que lo retira: el conector da por muertos los mandatos en esos estados, archiva el método de pago, escribe en la ficha del cliente que el mandato ya no se puede usar y crea la actividad «Mandato de GoCardless perdido».
Esos 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 (invalid_bank_details).» y «GoCardless mandate lost».
El pago fallido por sí solo no archiva el mandato: invalid_bank_details no está entre las cuatro causas con las que el conector lo hace al recibir un pago. Lo archiva el evento del mandato, que GoCardless manda siempre en este caso. Si se perdiera por el camino, la tarea que cada hora recupera los eventos perdidos lo trae.
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. Mientras el mandato no esté archivado en Odoo, la transacción en error enseña el botón «Reintentar el cobro», pero no sirve de nada. GoCardless solo reintenta un pago si su mandato está activo, y con AC01 o BE06 lo cancela. Si lo pulsas y GoCardless lo rechaza, el conector consulta el mandato y, si está muerto, lo archiva y lo dice en la transacción: «El mandato de GoCardless del cliente está en estado …, así que no se puede cobrar. Pide al cliente un mandato nuevo.». Con el mandato archivado, el botón deja de salir.
Qué hacer
- Comprueba con el cliente el IBAN completo: un dígito cambiado basta para que la cuenta no exista.
- Pídele que firme un mandato nuevo con la cuenta correcta. Será un método de pago nuevo en Odoo.
- Cobra con él las facturas que hayan quedado pendientes; las que GoCardless canceló no se presentarán solas.
- Si el cliente asegura que el IBAN era correcto, que lo consulte con su banco: AC01 y BE06 son la respuesta de su banco, no de GoCardless. En Odoo solo verás la causa, porque el conector no guarda el código SEPA. Según el centro de ayuda de GoCardless, 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.»).

¿Por qué hay dos códigos, AC01 y BE06?
GoCardless agrupa los dos bajo la misma causa y el mismo texto para SEPA Core. Para ti la consecuencia es idéntica: con esa cuenta no se puede cobrar, y hace falta otra firma.
¿Se puede corregir el IBAN del mandato en Odoo?
No. El mandato es la autorización que el cliente firmó con esa cuenta; la cuenta correcta va en un mandato nuevo.
Con nuestro conector
En Odoo 17, 18, 19 y 20 el conector no deja un mandato inservible a la vista para la siguiente factura: lo retira cuando GoCardless lo da por fallido o cancelado, reabre lo que hubiera que reabrir y deja escrito en la ficha del cliente qué pasó.
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: 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 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: 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: 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: 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
- docs.gocardless.com/docs/api-reference/events/mandate
- 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/payment
- Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 469 en 17.0 (d203ee6), línea 469 en 18.0 (e2ab18b), línea 468 en 19.0 (ce7f5a3) y línea 487 en 20.0 (688d86b)
- Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1343 en 17.0 (d203ee6), línea 1343 en 18.0 (e2ab18b), línea 1343 en 19.0 (ce7f5a3) y línea 1354 en 20.0 (688d86b)
- 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
