Què diu GoCardless
| Esdeveniment | Causa | Codi SEPA Core | Text de GoCardless |
|---|---|---|---|
| payments · failed | insufficient_funds | AM04 | The customer's account had insufficient funds to make this payment. |
La documentació de l'esdeveniment failed afegeix una peça clau: GoCardless reintenta el pagament pel seu compte quan el camp will_attempt_retry de l'esdeveniment és true («GoCardless will automatically retry the payment if event's will_attempt_retry field is true.»). Aquest reintent automàtic és Success+, i per fer-lo servir cal tenir-lo activat al Dashboard de GoCardless.
Segons la guia de Success+, només reintenta pagaments que fallen per falta de fons. En SEPA són dos codis: AM04 i MS03, i MS03 només a Àustria, Bèlgica, Alemanya, Luxemburg i Eslovàquia. Tot i així, GoCardless avisa que els seus criteris poden canviar: el que val per a cada fallada és el camp will_attempt_retry.

Per què arriba quan la factura ja semblava cobrada
Un deute SEPA no es resol a l'instant: segons GoCardless, cobrar un pagament pot trigar fins a 5 dies hàbils. Gairebé sempre el banc del client avisa de la fallada un dia hàbil després de la data de càrrec, abans que el pagament passi a confirmed. En pocs casos avisa més tard, amb el pagament ja marcat com a confirmed: és una fallada tardana (late failure), i la guia de Success+ posa com a exemple una per falta de fons. Per això AM04 pot aparèixer quan a Odoo el cobrament ja estava confirmat i la factura, conciliada. El connector ho té en compte: si un cobrament que Odoo donava per fet falla, anul·la el seu pagament i la factura torna a estar pendent.
El connector de GoCardless per a Odoo només cobra per SEPA Core i en euros, i per a un pagament fallit de SEPA Core la documentació de GoCardless dona un sol codi amb insufficient_funds: AM04. A Odoo veuràs la causa i no el codi, perquè el connector guarda la causa de l'esdeveniment i no el codi SEPA. El connector anota a més al seu codi que la combinació insufficient_funds amb AM04 és la que va veure en pagaments SEPA reals del sandbox de GoCardless.
Què veus a Odoo amb el connector
Cada cobrament que envia el connector demana a GoCardless retry_if_possible, l'opció de Success+. Quan arriba la fallada poden passar dues coses, i la transacció t'ho diu al seu grup GoCardless: «GoCardless Cause» i la casella «Success+ Will Retry». La transacció s'obre des de la factura, amb el botó «Transacció de pagament» de dalt; el menú de transaccions només surt en mode desenvolupador, i a Odoo 20 no existeix.
will_attempt_retry | Estat | «Missatge» de la transacció | Botó «Retry collection» |
|---|---|---|---|
| true | «Pendent» | «GoCardless could not collect this payment (insufficient_funds). Success+ will retry it automatically; there is nothing to do.» | No surt |
| false | «Error», i la factura torna a estar pendent | «GoCardless could not collect this payment (insufficient_funds).» i, si GoCardless en dona el motiu, «It will not be retried automatically (…).» | Surt, si queden reintents i el mandat està actiu |
Aquests missatges els escriu el connector en aplicar l'esdeveniment, sense ningú al davant. El connector no està traduït al català: aquests textos surten sempre en anglès, també en un Odoo en català, tant si els llança un usuari com una tasca programada: «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).» i «It will not be retried automatically (…).».
La transacció queda pendent a propòsit quan Success+ hi reintentarà: els diners encara poden arribar, i un estat d'error faria creure que el cobrament està perdut. Cada vegada que GoCardless torna a presentar el cobrament envia un esdeveniment resubmission_requested, i el connector puja en un «GoCardless Retries», tant si el reintent és de Success+ com si l'has demanat tu.
Què fer
- Obre la transacció des de la factura i mira «GoCardless Cause» i «Success+ Will Retry».
- Si Success+ ho reintentarà, no facis res: el botó de reintentar ni tan sols surt. GoCardless demana no cobrar al client per una altra via mentrestant, perquè podria pagar dues vegades.
- Si no ho reintentarà, parla abans amb el client per saber quan tindrà saldo i prem «Retry collection» quan t'ho confirmi. El botó no tria data: la nova data de càrrec la posa GoCardless, i la transacció queda en «Retry requested. GoCardless will confirm the new charge date.».
- Porta el compte: GoCardless admet com a molt 3 reintents per pagament («Payments can be retried up to 3 times.»), i el connector compta també els de Success+ a «GoCardless Retries».
Un AM04 cancel·la el mandat del client?
No. La causa insufficient_funds no està entre les que fan que el connector arxivi el mandat, que són mandate_cancelled, bank_account_closed, mandate_expired i authorisation_disputed. El client continua tenint el seu mètode de pagament per a la propera factura.
Per què Success+ no reintenta totes les fallades?
Perquè la seva guia ho limita als pagaments sense fons: en SEPA, AM04 i, només en cinc països, MS03. Un client que rebutja el cobrament o un compte tancat no s'arreglen presentant el deute una altra vegada. El connector no ho decideix: segueix el camp will_attempt_retry de cada fallada.

Amb el nostre connector
El connector de GoCardless per a Odoo 17, 18, 19 i 20 tradueix l'esdeveniment en quelcom que es pot gestionar des de la factura: deixa la transacció pendent mentre Success+ treballa, la passa a error i reobre la factura quan ja no hi haurà reintent, i compta els reintents per no oferir-te'n un que no toca. El que no pot fer és posar diners al compte del teu client: si el AM04 es repeteix, la conversa amb ell és la que resol el cobrament.
Continua llegint
Comprovat al codi del connector (versió 17.0, 18.0, 19.0 i 20.0) i a les fonts enllaçades
Fonts
- 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
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 15 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 76 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 71 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 260 a 17.0 (d203ee6), línia 260 a 18.0 (e2ab18b), línia 260 a 19.0 (ce7f5a3) i línia 271 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 729 a 17.0 (d203ee6), línia 729 a 18.0 (e2ab18b), línia 728 a 19.0 (ce7f5a3) i línia 752 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 746 a 17.0 (d203ee6), línia 746 a 18.0 (e2ab18b), línia 745 a 19.0 (ce7f5a3) i línia 769 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 732 a 17.0 (d203ee6), línia 732 a 18.0 (e2ab18b), línia 731 a 19.0 (ce7f5a3) i línia 755 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 754 a 17.0 (d203ee6), línia 754 a 18.0 (e2ab18b), línia 753 a 19.0 (ce7f5a3) i línia 777 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 680 a 17.0 (d203ee6), línia 680 a 18.0 (e2ab18b), línia 679 a 19.0 (ce7f5a3) i línia 703 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 430 a 17.0 (d203ee6), línia 430 a 18.0 (e2ab18b), línia 429 a 19.0 (ce7f5a3) i línia 444 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 122 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 119 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 461 a 17.0 (d203ee6), línia 461 a 18.0 (e2ab18b), línia 460 a 19.0 (ce7f5a3) i línia 479 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 484 a 17.0 (d203ee6), línia 484 a 18.0 (e2ab18b), línia 483 a 19.0 (ce7f5a3) i línia 502 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: views/payment_transaction_views.xml, línia 13 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 63 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 418 a 17.0 (d203ee6), línia 418 a 18.0 (e2ab18b), línia 417 a 19.0 (ce7f5a3) i línia 432 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: views/payment_transaction_views.xml, línia 22 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: views/payment_transaction_views.xml, línia 27 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: views/payment_transaction_views.xml, línia 28 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 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/ca.po
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 436 a 17.0 (d203ee6), línia 436 a 18.0 (e2ab18b), línia 436 a 19.0 (ce7f5a3) i línia 438 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1083 a 17.0 (d203ee6), línia 1083 a 18.0 (e2ab18b), línia 1083 a 19.0 (ce7f5a3) i línia 1090 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 703 a 17.0 (d203ee6), línia 703 a 18.0 (e2ab18b), línia 703 a 19.0 (ce7f5a3) i línia 710 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 356 a 17.0 (d203ee6), línia 356 a 18.0 (e2ab18b), línia 356 a 19.0 (ce7f5a3) i línia 358 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1063 a 17.0 (d203ee6), línia 1063 a 18.0 (e2ab18b), línia 1063 a 19.0 (ce7f5a3) i línia 1070 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 408 a 17.0 (d203ee6), línia 408 a 18.0 (e2ab18b), línia 408 a 19.0 (ce7f5a3) i línia 410 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1016 a 17.0 (d203ee6), línia 1016 a 18.0 (e2ab18b), línia 1016 a 19.0 (ce7f5a3) i línia 1031 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1022 a 17.0 (d203ee6), línia 1022 a 18.0 (e2ab18b), línia 1022 a 19.0 (ce7f5a3) i línia 1037 a 20.0 (688d86b)
- Codi del mòdul: flexigo_payment_gocardless: __manifest__.py, línia 31 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
- support.gocardless.com/hc/en-gb/articles/360001467265
- Codi del mòdul: flexigo_payment_gocardless: const.py, línia 66 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 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
