Saltar al contenido principal
GoCardless · SEPA Core · pago fallido

GoCardless insufficient_funds (AM04): la cuenta del cliente no tenía saldo

Es el fallo más corriente de una domiciliación: el banco del cliente devuelve el adeudo porque en la cuenta no había dinero. GoCardless lo avisa con un evento de pago failed, la causa insufficient_funds y el código SEPA AM04. Es uno de los fallos que su servicio Success+ puede volver a intentar sin que hagas nada.

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
5 min

Qué dice GoCardless

EventoCausaCódigo SEPA CoreTexto de GoCardless
payments · failedinsufficient_fundsAM04The customer's account had insufficient funds to make this payment.

La documentación del evento failed añade una pieza clave: GoCardless reintenta el pago por su cuenta cuando el campo will_attempt_retry del evento viene a true («GoCardless will automatically retry the payment if event's will_attempt_retry field is true.»). Ese reintento automático es Success+, y para usarlo hay que tenerlo activado en el Dashboard de GoCardless.

Según la guía de Success+, solo reintenta pagos que fallan por falta de fondos. En SEPA son dos códigos: AM04 y MS03, y MS03 solo en Austria, Bélgica, Alemania, Luxemburgo y Eslovaquia. Aun así, GoCardless avisa de que sus criterios pueden cambiar: lo que vale para cada fallo es el campo will_attempt_retry.

Tarjeta de la causa insufficient_funds de GoCardless
La causa, su código SEPA Core AM04 y el texto con el que la documenta GoCardless.

Por qué llega cuando la factura ya parecía cobrada

Un adeudo SEPA no se resuelve en el acto: según GoCardless, cobrar un pago puede llevar hasta 5 días hábiles. Casi siempre el banco del cliente avisa del fallo un día hábil después de la fecha de cargo, antes de que el pago pase a confirmed. En pocos casos avisa más tarde, con el pago ya marcado como confirmed: es un fallo tardío (late failure), y la guía de Success+ pone como ejemplo uno por falta de fondos. Por eso AM04 puede aparecer cuando en Odoo el cobro ya estaba confirmado y la factura, conciliada. El conector lo tiene en cuenta: si un cobro que Odoo daba por hecho falla, anula su pago y la factura vuelve a estar pendiente.

El conector de GoCardless para Odoo solo cobra por SEPA Core y en euros, y para un pago fallido de SEPA Core la documentación de GoCardless da un solo código con insufficient_funds: AM04. En Odoo verás la causa y no el código, porque el conector guarda la causa del evento y no el código SEPA. El conector anota además en su código que la combinación insufficient_funds con AM04 es la que vio en pagos SEPA reales del sandbox de GoCardless.

Lo que ves en Odoo con el conector

Cada cobro que manda el conector pide a GoCardless retry_if_possible, la opción de Success+. Cuando llega el fallo pueden pasar dos cosas, y la transacción te dice cuál en su grupo GoCardless: «Causa según GoCardless» y la casilla «Success+ reintentará». 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.

will_attempt_retryEstado«Mensaje» de la transacciónBotón «Reintentar el cobro»
true«Pendiente»«GoCardless no pudo cobrar este pago (insufficient_funds). Success+ lo reintentará automáticamente; no hay que hacer nada.»No sale
false«Error», y la factura vuelve a estar pendiente«GoCardless no pudo cobrar este pago (insufficient_funds).» y, si GoCardless da el motivo, «No se reintentará automáticamente (…).»Sale, si quedan reintentos y el mandato está activo

Esos mensajes los escribe el conector al aplicar el evento, sin nadie delante. En una base de datos creada en castellano salen como en la tabla; en una creada en inglés y pasada después a castellano salen en inglés: «GoCardless could not collect this payment (insufficient_funds). Success+ will retry it automatically; there is nothing to do.», «GoCardless could not collect this payment (insufficient_funds).» y «It will not be retried automatically (…).».

La transacción queda pendiente a propósito cuando Success+ va a reintentar: el dinero todavía puede llegar, y un estado de error haría creer que el cobro está perdido. Cada vez que GoCardless vuelve a presentar el cobro manda un evento resubmission_requested, y el conector sube en uno «Reintentos de GoCardless», tanto si el reintento es de Success+ como si lo pediste tú.

Qué hacer

  1. Abre la transacción desde la factura y mira «Causa según GoCardless» y «Success+ reintentará».
  2. Si Success+ lo va a reintentar, no hagas nada: el botón de reintentar ni siquiera sale. GoCardless pide no cobrar al cliente por otra vía mientras tanto, porque podría pagar dos veces.
  3. Si no lo va a reintentar, habla antes con el cliente para saber cuándo tendrá saldo y pulsa «Reintentar el cobro» cuando te lo confirme. El botón no elige fecha: la nueva fecha de cargo la pone GoCardless, y la transacción queda en «Reintento solicitado. GoCardless confirmará la nueva fecha de cargo.».
  4. Lleva la cuenta: GoCardless admite como mucho 3 reintentos por pago («Payments can be retried up to 3 times.»), y el conector cuenta también los de Success+ en «Reintentos de GoCardless».

¿Un AM04 cancela el mandato del cliente?

No. La causa insufficient_funds no está entre las que hacen que el conector archive el mandato, que son mandate_cancelled, bank_account_closed, mandate_expired y authorisation_disputed. El cliente sigue teniendo su método de pago para la próxima factura.

¿Por qué Success+ no reintenta todos los fallos?

Porque su guía lo limita a los pagos sin fondos: en SEPA, AM04 y, solo en cinco países, MS03. Un cliente que rechaza el cobro o una cuenta cerrada no se arreglan presentando el adeudo otra vez. El conector no lo decide: sigue el campo will_attempt_retry de cada fallo.

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

El conector de GoCardless para Odoo 17, 18, 19 y 20 traduce el evento en algo que se puede gestionar desde la factura: deja la transacción pendiente mientras Success+ trabaja, la pasa a error y reabre la factura cuando ya no habrá reintento, y cuenta los reintentos para no ofrecerte uno que no toca. Lo que no puede hacer es poner dinero en la cuenta de tu cliente: si el AM04 se repite, la conversación con él es la que resuelve el cobro.

Sigue leyendo

GoCardless refer_to_payer: MS02, MS03, RR04 y SL01 en un cobro SEPArefer_to_payer junta en GoCardless los códigos SEPA MS02, MS03, RR04 y SL01. Qué dice cada uno, por qué el mandato sigue vivo y cómo lo gestiona Odoo.Error retry_failed de GoCardless al reintentar un cobro desde OdooGoCardless responde retry_failed si el pago no ha fallado o ya no admite reintentos. Cuándo sale en Odoo el botón «Reintentar el cobro» y qué hace el conector.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.
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/payment
  • docs.gocardless.com/docs/api-reference/payment
  • docs.gocardless.com/docs/optimise/reduced-failed-payments-with-success-plus
  • 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 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 260 en 17.0 (d203ee6), línea 260 en 18.0 (e2ab18b), línea 260 en 19.0 (ce7f5a3) y línea 271 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 729 en 17.0 (d203ee6), línea 729 en 18.0 (e2ab18b), línea 728 en 19.0 (ce7f5a3) y línea 752 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 746 en 17.0 (d203ee6), línea 746 en 18.0 (e2ab18b), línea 745 en 19.0 (ce7f5a3) y línea 769 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 732 en 17.0 (d203ee6), línea 732 en 18.0 (e2ab18b), línea 731 en 19.0 (ce7f5a3) y línea 755 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_transaction.py, línea 680 en 17.0 (d203ee6), línea 680 en 18.0 (e2ab18b), línea 679 en 19.0 (ce7f5a3) y línea 703 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 430 en 17.0 (d203ee6), línea 430 en 18.0 (e2ab18b), línea 429 en 19.0 (ce7f5a3) y línea 444 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: const.py, línea 122 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 119 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 461 en 17.0 (d203ee6), línea 461 en 18.0 (e2ab18b), línea 460 en 19.0 (ce7f5a3) y línea 479 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: models/payment_transaction.py, línea 484 en 17.0 (d203ee6), línea 484 en 18.0 (e2ab18b), línea 483 en 19.0 (ce7f5a3) y línea 502 en 20.0 (688d86b)
  • 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: views/payment_transaction_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: views/payment_transaction_views.xml, línea 27 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: views/payment_transaction_views.xml, línea 28 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) y 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/views/payment_transaction_views.xml
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/es.po
  • 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 1163 en 17.0 (d203ee6), línea 1163 en 18.0 (e2ab18b), línea 1163 en 19.0 (ce7f5a3) y línea 1174 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 765 en 17.0 (d203ee6), línea 765 en 18.0 (e2ab18b), línea 765 en 19.0 (ce7f5a3) y línea 776 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 380 en 17.0 (d203ee6), línea 380 en 18.0 (e2ab18b), línea 380 en 19.0 (ce7f5a3) y línea 385 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1141 en 17.0 (d203ee6), línea 1141 en 18.0 (e2ab18b), línea 1141 en 19.0 (ce7f5a3) y línea 1152 en 20.0 (688d86b)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 432 en 17.0 (d203ee6), línea 432 en 18.0 (e2ab18b), línea 432 en 19.0 (ce7f5a3) y línea 437 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)
  • Código del módulo: flexigo_payment_gocardless: i18n/es.po, línea 1098 en 17.0 (d203ee6), línea 1098 en 18.0 (e2ab18b), línea 1098 en 19.0 (ce7f5a3) y línea 1119 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)
  • 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/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml