Saltar al contenido principal
GoCardless · SEPA Core · mandato anulado o disputado

GoCardless MD01: mandate_cancelled y authorisation_disputed en un cobro SEPA

MD01 llega cuando el cliente ha anulado el mandato en su banco o dice que nunca autorizó el cobro. En GoCardless aparece en tres eventos de pago distintos, según el momento, y en todos el resultado es el mismo para el futuro: con ese mandato ya no se puede cobrar.

FlexigoTech · Responsable: Víctor Gómez · Actualizado el 6 de noviembre de 2026

Lo esencial

Módulo
GoCardless
Versiones
Odoo 17, 18, 19 y 20
Comprobado
en el código del conector, versión 17.0, 18.0, 19.0 y 20.0 · en las fuentes enlazadas al final
Lectura
4 min

Tres eventos y cuatro filas, el mismo código

EventoCausaTexto de 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.

Las cuatro filas son de la tabla de SEPA Core de la documentación de GoCardless y llevan MD01; el pago cancelado sale con dos causas y el mismo texto. El mandato también se cancela, y GoCardless lo comunica con su propio 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.».

Tarjeta de la causa mandate_cancelled de GoCardless
La causa, el código SEPA Core MD01 y el texto de GoCardless para el pago fallido.

Qué cambia según el momento

Si el cliente anula el mandato antes de que se cobre el recibo, el pago falla: el dinero no llegó. Si lo disputa después de cobrado, es una devolución: el dinero llegó y se va. Y si había pagos esperando a presentarse, GoCardless los cancela antes de enviarlos. El conector anota en su código que vio la causa authorisation_disputed con MD01 en un pago de prueba del sandbox, como devolución de un pago ya liquidado.

Lo que hace Odoo con el conector

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. En los tres casos, la transacción acaba en «Error» con la causa a la vista. El mensaje depende del evento: «GoCardless no pudo cobrar este pago (mandate_cancelled).» para un fallo, y «GoCardless ha comunicado una devolución de este pago (mandate_cancelled). El dinero se ha retirado y se descontará de una liquidación futura.» para una devolución. Si Odoo ya tenía la factura pagada con ese cobro, el conector anula el pago y la factura vuelve a estar pendiente.

Lo importante es el mandato. mandate_cancelled y authorisation_disputed están entre las cuatro causas con las que el conector lo da por muerto, así que:

  • archiva el método de pago del cliente, que deja de ofrecerse para cobrar;
  • escribe en su ficha «El mandato de domiciliación de GoCardless de … ya no se puede usar (mandate_cancelled). No se puede cobrar nada más con él. Pide al cliente que firme un mandato nuevo.»;
  • crea una actividad «Mandato de GoCardless perdido».

Llegan varios eventos con la misma noticia, el del pago y el del mandato, pero el aviso sale una sola vez: el segundo encuentra el mandato ya archivado.

Todos estos 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 (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.» y «GoCardless mandate lost».

Qué hacer

Antes de pedir un mandato nuevo, entiende por qué lo anuló. Un cliente que dejó de querer el servicio necesita una baja, no otra firma. Si fue un error suyo o un cambio en su banco, pídele que firme otra vez y cobra con el mandato nuevo las facturas que quedaron abiertas. Si dice que nunca autorizó el cargo, revisa cómo se firmó el mandato antes de seguir cobrándole.

¿Sirve de algo reintentar un pago con MD01?

No. El mandato ya no existe para su banco, y con el mandato archivado el botón «Reintentar el cobro» no sale en la transacción. Hace falta un mandato nuevo firmado por el cliente.

Esquema: qué manda GoCardless con MD01 y qué hace Odoo con el conector
Esquema hecho a partir del código del conector (17.0, 18.0, 19.0 y 20.0) y de la documentación de GoCardless.

Con nuestro conector

En Odoo 17, 18, 19 y 20, el conector distingue el fallo de la devolución, reabre la factura si hace falta, retira el mandato y te deja la tarea de hablar con el cliente en su ficha. Lo que no hace es pedir el mandato nuevo por su cuenta: esa conversación es tuya.

Sigue leyendo

GoCardless MD06: el cliente pide a su banco que le devuelva un cobroEl cliente pide a su banco que le devuelva un adeudo de GoCardless: charged_back, refund_requested y MD06. Qué pasa en Odoo con la factura y el mandato.Error mandate_is_inactive de GoCardless al crear un cobro desde OdooGoCardless responde mandate_is_inactive al crear un pago con un mandato cancelado, fallido o caducado. Por qué pasa y cómo lo resuelve el conector en Odoo.GoCardless bank_account_closed: AC04 y MD07, la cuenta ya no existeGoCardless bank_account_closed con AC04 (cuenta cerrada) o MD07 (titular fallecido): el mandato queda cancelado. Qué hace Odoo con la factura y con el cliente.
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: 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 71 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 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 713 en 17.0 (d203ee6), línea 713 en 18.0 (e2ab18b), línea 712 en 19.0 (ce7f5a3) y línea 736 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: 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_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: 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 570 en 17.0 (d203ee6), línea 570 en 18.0 (e2ab18b), línea 570 en 19.0 (ce7f5a3) y línea 575 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)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • 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)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/es.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