Saltar al contenido principal
GoCardless · mandatos · expired

GoCardless mandate_expired: el mandato caducó por no usarlo

Un mandato de GoCardless no se queda vivo para siempre si no se usa. Cuando pasa el periodo de inactividad sin ningún intento de cobro, GoCardless lo marca como expired y ya no deja cobrar con él. Lo comunica en un evento del mandato y, si quedaba algún cobro por presentar, también en el del pago, que se cancela.

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

Qué dice GoCardless

EventoCausaTexto de GoCardless
mandates · expiredmandate_expiredThe mandate is being marked as expired, because no payments have been collected against it for the dormancy period of your service user number. If you have access to the mandate reinstation API endpoint, you can use this to attempt to set this mandate up again.
payments · cancelledmandate_expiredThe mandate expired before the payment could be collected.

La descripción del evento lo deja claro: «No collection attempts were made against the mandate within the dormancy period of your service user number.». Y la consecuencia: «As a result it has expired, and no further collections can be taken against it.». El estado del mandato pasa a expired, que GoCardless define como caducado por inactividad.

Tarjeta de la causa mandate_expired de GoCardless
La causa, el evento del mandato caducado, el pago cancelado y el texto de GoCardless.

Cuándo aparece

Le pasa a un mandato que se firmó y luego dejó de usarse: un cliente que ya no compra, o uno al que se cobra tan de tarde en tarde que entre un cobro y el siguiente pasa todo el periodo de inactividad. Lo cuenta el tiempo sin intentos de cobro, no la fecha de la firma.

Si cuando caduca había un cobro esperando a presentarse, GoCardless lo cancela con la misma causa: «The mandate expired before the payment could be collected.».

Lo que hace Odoo con el conector

  • El evento del mandato caducado lo retira. El conector da por muerto un mandato expired: archiva el método de pago del cliente, escribe en su ficha que el mandato ya no se puede usar y crea la actividad «Mandato de GoCardless perdido». Solo lo hace la primera vez; si otro evento trae la misma noticia, ya lo encuentra archivado.
  • El pago cancelado pasa a «Error» su transacción, que se abre desde la factura con el botón «Transacción de pago» de arriba, con «GoCardless no pudo cobrar este pago (mandate_expired).». Si la factura ya estaba pagada con ese cobro, anula el pago y la factura vuelve a estar pendiente. Y como mandate_expired es una de las causas con las que el conector archiva el mandato, ese evento también lo retira, como expired.
  • En la ficha del método de pago, «Estado del mandato» dice expired.

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, en inglés: «The GoCardless direct debit mandate of … is no longer usable (mandate_expired). No further collection can be taken against it. Ask the customer to set up a new mandate.», «GoCardless mandate lost» y «GoCardless could not collect this payment (mandate_expired).».

Si Odoo intenta cobrar con el mandato antes de enterarse, porque el evento se perdió por el camino, GoCardless contesta mandate_is_inactive. El conector consulta entonces el mandato, lo archiva y pone en la transacción su propio mensaje: «El mandato de GoCardless del cliente está en estado expired, así que no se puede cobrar. Pide al cliente un mandato nuevo.». La tarea que cada hora recupera los eventos perdidos acaba trayendo también el evento del mandato.

Esquema: qué manda GoCardless con mandate_expired 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.

¿Reactivarlo o pedir otro?

GoCardless deja dos caminos. Para seguir cobrando a ese cliente, dice, hay que pedirle permiso y usar la reactivación del mandato («you should request their permission and use the reinstate endpoint»). Pero ese endpoint es restringido: pide páginas de pago propias aprobadas por GoCardless («Restricted this endpoint requires approved custom payment pages»).

El conector no reactiva mandatos en producción: el botón «Reactivar mandato (sandbox)» de la ficha del método de pago solo sale con el proveedor en pruebas y con el mandato cancelado, fallido o caducado. En producción, el camino es un mandato nuevo.

Qué hacer

  1. Habla con el cliente: si sigue siendo cliente, pídele que firme un mandato nuevo. En Odoo será un método de pago nuevo.
  2. Cobra con él las facturas pendientes. Los cobros que GoCardless canceló por la caducidad no se presentarán solos.
  3. Si un cliente se cobra muy de tarde en tarde, cuenta con que su mandato puede caducar entre un cobro y otro.

¿Puedo cobrar con un mandato caducado si el cliente está de acuerdo?

Con ese mandato, no: GoCardless no deja crear cobros con él. Hace falta uno nuevo o, donde se pueda usar, la reactivación de GoCardless.

¿Se puede probar la reactivación?

Sí, en el sandbox de GoCardless. Con el proveedor en pruebas, la ficha del método de pago enseña «Reactivar mandato (sandbox)» cuando el mandato está caducado.

Con nuestro conector

En Odoo 17, 18, 19 y 20 el conector retira el mandato caducado en cuanto GoCardless lo comunica, deja el cobro cancelado en error con su causa y avisa en la ficha del cliente, para pedir un mandato nuevo antes de la siguiente factura.

Sigue leyendo

GoCardless mandate_not_inactive: el mandato no se puede reactivarGoCardless da mandate_not_inactive al reactivar un mandato activo o que ya se está presentando. Cuándo se puede reactivar y qué hace Odoo con el conector.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 MD01: mandate_cancelled y authorisation_disputed en un cobro SEPAEl código SEPA MD01 llega en GoCardless como mandate_cancelled o authorisation_disputed, en un cobro fallido, devuelto o cancelado. Qué hace Odoo con ello.
Comprobado en el código del conector (versión 17.0, 18.0, 19.0 y 20.0) y en las fuentes enlazadas

Fuentes

  • docs.gocardless.com/docs/api-reference/events/mandate
  • docs.gocardless.com/docs/api-reference/events/payment
  • docs.gocardless.com/docs/api-reference/mandate
  • 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: 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: 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: models/payment_transaction.py, línea 914 en 17.0 (d203ee6), línea 914 en 18.0 (e2ab18b), línea 913 en 19.0 (ce7f5a3) y línea 937 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: 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: models/payment_transaction.py, línea 278 en 17.0 (d203ee6), línea 278 en 18.0 (e2ab18b), línea 278 en 19.0 (ce7f5a3) y línea 289 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 321 en 17.0 (d203ee6), línea 321 en 18.0 (e2ab18b), línea 321 en 19.0 (ce7f5a3) y línea 332 en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • 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)
  • Código del módulo: flexigo_payment_gocardless: views/payment_token_views.xml, 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: i18n/es.po, línea 847 en 17.0 (d203ee6), línea 847 en 18.0 (e2ab18b), línea 847 en 19.0 (ce7f5a3) y línea 868 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: views/payment_token_views.xml, línea 23 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 1072 en 17.0 (d203ee6), línea 1072 en 18.0 (e2ab18b), línea 1072 en 19.0 (ce7f5a3) y línea 1093 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 162 en 17.0 (d203ee6), línea 162 en 18.0 (e2ab18b), línea 162 en 19.0 (ce7f5a3) y línea 161 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)
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/es.po
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • 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)