Saltar al contenido principal
GoCardless API · invalid_state · reinstate

GoCardless mandate_not_inactive: el mandato no se puede reactivar

Reactivar un mandato (reinstate) es volver a presentar a los bancos uno cancelado o caducado. GoCardless lo rechaza con mandate_not_inactive si el mandato ya está activo o ya se está presentando. Con el conector solo se puede pedir fuera de producción, porque en producción GoCardless restringe esa función.

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

ReasonTipoTexto de GoCardless
mandate_not_inactiveinvalid_state«Mandate could not be reinstated» y «it is already active or being submitted.»

GoCardless separa las dos partes del texto con una raya. En la referencia de la API lo detalla: «This will fail with a mandate_not_inactive error if the mandate is already being submitted, or is active.». Es un error invalid_state, y para esos GoCardless pide avisar al usuario y no reintentar («invalid_state → inform the end user, do not allow retry.»).

Tarjeta del error mandate_not_inactive de GoCardless
El reason, su tipo invalid_state, la acción de reactivar (actions/reinstate) y el texto de GoCardless.

Qué mandatos se pueden reactivar

La reactivación tiene más condiciones que el estado:

  • Es una función restringida: «Restricted this endpoint requires approved custom payment pages».
  • Solo vale para un mandato cancelado desde el Dashboard o la API: «A mandate can only be reinstated if it has been cancelled through the dashboard or the API.». Uno que canceló el banco, no: «Any mandate that has been cancelled by the bank cannot be reinstated.».
  • Sirve para mandatos cancelados o caducados («Reinstates a cancelled or expired mandate to the banks.»), y un mandato se puede volver a presentar hasta 10 veces («Mandates can be resubmitted up to 10 times.»).

Después de pedirla, el proceso es el de un alta: llega resubmission_requested y luego, como dice GoCardless, «so you will receive a submitted webhook, followed by a reinstated or failed webhook up to two working days later.».

Lo que hace Odoo con el conector

En la ficha del método de pago del cliente, el conector pone el botón «Reactivar mandato (sandbox)». Solo sale si el mandato es de GoCardless, el proveedor no está en producción (en Odoo 17, 18 y 19, el estado del proveedor; en Odoo 20, la casilla de producción) y «Estado del mandato» es cancelled, failed o expired.

Al pulsarlo:

  1. El conector pide a GoCardless la reactivación de ese mandato.
  2. Si GoCardless la acepta, el estado pasa a reinstate_requested y en la ficha del cliente queda «Se ha pedido reactivar el mandato de GoCardless. No se podrá usar hasta que el banco lo confirme.». El método de pago sigue archivado.
  3. Cuando llega reinstated, el conector lo vuelve a dar por bueno: lo reactiva y escribe «El mandato de GoCardless se puede volver a usar (reinstated).».

Si GoCardless contesta mandate_not_inactive, el conector no lo captura: Odoo enseña «GoCardless rechazó la solicitud.» con el mensaje de GoCardless, el reason y el request_id, y el mandato se queda como estaba. Pasa cuando Odoo cree que el mandato está muerto y en GoCardless ya está activo o presentándose, porque sus eventos aún no han llegado a Odoo. Después de una petición aceptada, el botón ya no sale, porque el estado pasa a reinstate_requested.

La nota de que el mandato se puede volver a usar la escribe el conector al aplicar el evento, sin nadie delante. En una base de datos creada en castellano sale así; en una creada en inglés y pasada después a castellano, en inglés: «The GoCardless mandate is usable again (reinstated).».

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

Qué hacer

  1. Si sale mandate_not_inactive, busca el mandato en el Dashboard de GoCardless. Si está activo o presentándose, no hay nada que reactivar: espera a que lleguen sus eventos. La tarea que cada hora recupera los eventos perdidos los trae.
  2. Si el mandato lo canceló el banco, no lo intentes: GoCardless no reactiva esos. Pide al cliente un mandato nuevo.
  3. En producción, el conector no ofrece la reactivación: el camino es un mandato nuevo firmado por el cliente.
  4. Para probarlo, usa el sandbox de GoCardless con el proveedor en pruebas.

¿Por qué el botón solo sale fuera de producción?

Porque GoCardless restringe la reactivación a quien tiene páginas de pago propias aprobadas, y el conector solo la ofrece fuera de producción.

¿Cuánto tarda en volver a valer el mandato?

Lo que tarden los bancos: según GoCardless, primero avisa de que se pidió la reactivación, después de que el mandato se ha presentado y, hasta dos días hábiles más tarde, de si ha quedado reactivado o ha fallado. Hasta entonces, el conector no lo usa.

Con nuestro conector

En Odoo 17, 18, 19 y 20 el conector solo ofrece reactivar un mandato cancelado, fallido o caducado, y solo fuera de producción, y no lo vuelve a usar hasta que GoCardless confirma la reactivación con su evento.

Sigue leyendo

GoCardless mandate_expired: el mandato caducó por no usarloGoCardless marca un mandato como expired cuando no se ha intentado cobrar con él en todo el periodo de inactividad. Qué hace Odoo y cómo seguir cobrando.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.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.
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/responses-and-errors
  • docs.gocardless.com/docs/api-reference/mandate
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Código del módulo: flexigo_payment_gocardless: const.py, línea 134 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 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: views/payment_token_views.xml, línea 22 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 176 en 17.0 (d203ee6), línea 176 en 18.0 (e2ab18b), línea 176 en 19.0 (ce7f5a3) y línea 175 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 173 en 17.0 (d203ee6), línea 173 en 18.0 (e2ab18b), línea 173 en 19.0 (ce7f5a3) y línea 172 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1080 en 17.0 (d203ee6), línea 1080 en 18.0 (e2ab18b), línea 1080 en 19.0 (ce7f5a3) y línea 1101 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_token.py, línea 170 en 17.0 (d203ee6), línea 170 en 18.0 (e2ab18b), línea 170 en 19.0 (ce7f5a3) y línea 169 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 397 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_provider.py, línea 462 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 560 en 17.0 (d203ee6), línea 560 en 18.0 (e2ab18b), línea 560 en 19.0 (ce7f5a3) y línea 565 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: const.py, línea 158 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 77 en 17.0 (d203ee6), línea 77 en 18.0 (e2ab18b), línea 77 en 19.0 (ce7f5a3) y línea 76 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1250 en 17.0 (d203ee6), línea 1250 en 18.0 (e2ab18b), línea 1250 en 19.0 (ce7f5a3) y línea 1261 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: const.py, línea 117 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
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • 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)