Salta al contingut principal
GoCardless · mandats · replaced

GoCardless mandate_replaced: el mandat té un substitut

De vegades GoCardless cancel·la un mandat i el substitueix per un de nou, per exemple quan el creditor canvia d'identificador. Ho comunica amb l'esdeveniment replaced, que porta l'id del mandat nou, i el connector passa a ell el mètode de pagament del client. Si Odoo intenta cobrar amb el vell abans d'assabentar-se'n, l'API respon mandate_replaced.

FlexigoTech · Responsable: Víctor Gómez · Actualitzat el 6 de novembre de 2026

L'essencial

Versions
Odoo 17, 18, 19 i 20
Comprovat
al codi del connector, versió 17.0, 18.0, 19.0 i 20.0 · a les fonts enllaçades al final
Lectura
4 min

Què diu GoCardless

OnReason o causaText de GoCardless
API, en crear un cobrament (invalid_state)mandate_replacedMandate has been replaced. Check links[new_mandate] in the error or on the mandate itself.
mandates · replacedscheme_identifier_changedThe creditor has changed to a different scheme identifier, so this mandate has been cancelled and replaced by a new one.

La documentació d'esdeveniments ho explica així: «The mandate has been cancelled and replaced by a new mandate (for example, because the creditor has moved to a new Service User Number).». I el que porta l'esdeveniment: «The event will include links[new_mandate] with the ID of the new mandate.».

mandate_replaced és un error invalid_state: l'acció no val en l'estat actual del recurs. Per a aquests errors GoCardless demana avisar l'usuari i no reintentar («invalid_state → inform the end user, do not allow retry.»).

Targeta de l'error mandate_replaced de GoCardless
El reason, el seu tipus invalid_state, el camp links.new_mandate i la causa scheme_identifier_changed de l'esdeveniment.

Quan apareix

El canvi no el provoca el client ni el seu banc: l'esdeveniment replaced té origen gocardless, i la causa documentada és que el creditor, el compte amb què cobres a GoCardless, ha passat a un altre identificador d'esquema. GoCardless cancel·la el mandat vell i en crea un de nou en el seu lloc.

mandate_replaced només apareix si Odoo intenta cobrar amb el mandat vell: el cobrament d'una subscripció que es renova, o un pagament registrat amb el mètode de pagament desat del client, abans que Odoo hagi aplicat l'esdeveniment.

Què fa Odoo amb el connector

Amb l'esdeveniment replaced:

  1. Pren el mandat nou de links.new_mandate.
  2. Passa a aquest mandat el mètode de pagament desat del client i el dona per bo, en lloc de donar-lo per perdut. Si el mètode estava arxivat, el reactiva; Odoo 17 no deixa desarxivar un mètode de pagament, i aleshores el connector en crea un de nou per al mandat nou.
  3. L'escriu a la fitxa del client: «The GoCardless mandate is usable again (replaced).».

Aquesta nota l'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: «The GoCardless mandate is usable again (replaced).».

Amb mandate_replaced en un cobrament, el connector no fa res d'especial: en crear un cobrament només tracta a part mandate_is_inactive. La transacció passa a «Error» amb «GoCardless rejected the request.» i, a sota, el missatge de GoCardless amb mandate_replaced i el request_id entre claudàtors. El mandat nou el pren de l'esdeveniment, no de l'error. Aquest missatge també surt en anglès, tant si el llança un usuari com una tasca programada: «GoCardless rejected the request.».

Esquema: què envia GoCardless amb replaced i què fa Odoo amb el connector
Esquema fet a partir del codi del mòdul (17.0, 18.0, 19.0 i 20.0) i de la documentació de GoCardless; el que és ratllat és el que no cal.

Què fer

  1. Si un cobrament es queda en error amb mandate_replaced, obre la transacció 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.
  2. Mira a la fitxa del client si ja hi és la nota que el mandat es pot tornar a usar (replaced). Si hi és, el mètode de pagament ja apunta al mandat nou.
  3. Si no hi és, l'esdeveniment encara no ha arribat. La tasca que cada hora recupera els esdeveniments perduts el porta; si triga més, revisa que els webhooks de GoCardless arribin a Odoo.
  4. Amb el mètode de pagament al dia, torna a cobrar la factura.

Cal demanar al client que torni a signar?

No per seguir cobrant amb el connector: el mandat nou el crea GoCardless i el connector passa a ell el mètode de pagament desat.

Què passa a Odoo 17?

El mateix, amb una diferència: si el mètode de pagament vell estava arxivat, Odoo 17 no deixa reactivar-lo, així que el connector en crea un de nou per al mandat nou. A 18, 19 i 20 reactiva el que hi havia.

Amb el nostre connector

A Odoo 17, 18, 19 i 20 el connector segueix el mandat nou en quan GoCardless avisa de la substitució: el client conserva el seu mètode de pagament i la següent factura es cobra amb el mandat que GoCardless ha deixat al seu lloc.

Continua llegint

Error mandate_is_inactive de GoCardless en crear un cobrament des d'OdooGoCardless respon mandate_is_inactive en crear un pagament amb un mandat cancel·lat, fallit o caducat. Per què passa i com ho resol el connector a Odoo.GoCardless bank_account_transferred: AMEND, el mandat passa a un altre compteGoCardless avisa amb transferred i el codi AMEND que el mandat ha passat a un altre compte del client. Què fa Odoo amb el connector i què no cal fer.GoCardless mandate_expired: el mandat va caducar per no usar-loGoCardless marca un mandat com a expired quan no s'ha intentat cobrar amb ell durant tot el període d'inactivitat. Què fa Odoo i com seguir cobrant.
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/responses-and-errors
  • docs.gocardless.com/docs/api-reference/events/mandate
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 72 a 17.0 (d203ee6), línia 72 a 18.0 (e2ab18b), línia 72 a 19.0 (ce7f5a3) i línia 71 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: const.py, línia 150 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 158 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 77 a 17.0 (d203ee6), línia 77 a 18.0 (e2ab18b), línia 77 a 19.0 (ce7f5a3) i línia 76 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_token.py, línia 96 a 17.0 (d203ee6), línia 96 a 18.0 (e2ab18b), línia 96 a 19.0 (ce7f5a3) i línia 95 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 1157 a 17.0 (d203ee6), línia 1157 a 18.0 (e2ab18b), línia 1157 a 19.0 (ce7f5a3) i línia 1164 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 278 a 17.0 (d203ee6), línia 278 a 18.0 (e2ab18b), línia 278 a 19.0 (ce7f5a3) i línia 289 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_transaction.py, línia 281 a 17.0 (d203ee6), línia 281 a 18.0 (e2ab18b), línia 281 a 19.0 (ce7f5a3) i línia 292 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 397 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: models/payment_provider.py, línia 462 a 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) i 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, línia 521 a 17.0 (d203ee6), línia 521 a 18.0 (e2ab18b), línia 521 a 19.0 (ce7f5a3) i línia 523 a 20.0 (688d86b)
  • Codi del mòdul: flexigo_payment_gocardless: const.py, línia 117 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 247 a 17.0 (d203ee6), línia 247 a 18.0 (e2ab18b), línia 247 a 19.0 (ce7f5a3) i línia 258 a 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/ca.po
  • 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
  • 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)