Aller au contenu principal
GoCardless · mandats · expired

GoCardless mandate_expired : le mandat a expiré faute d'utilisation

Un mandat GoCardless n'est pas valable indéfiniment s'il n'est pas utilisé. Lorsque la période d'inactivité s'écoule sans aucune tentative de prélèvement, GoCardless le marque comme expired et ne permet plus de prélever avec lui. Il le signale dans un événement du mandat et, si un prélèvement restait à présenter, aussi dans celui du paiement, qui est annulé.

FlexigoTech · Responsable : Víctor Gómez · Mis à jour le 6 novembre 2026

L'essentiel

Versions
Odoo 17, 18, 19 et 20
Vérifié
dans le code du connecteur, version 17.0, 18.0, 19.0 et 20.0 · dans les sources citées à la fin
Lecture
4 min

Ce que dit GoCardless

ÉvénementCauseTexte 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 description de l'événement est claire : « No collection attempts were made against the mandate within the dormancy period of your service user number. ». Et la conséquence : « As a result it has expired, and no further collections can be taken against it. ». Le statut du mandat passe à expired, ce que GoCardless définit comme un mandat expiré pour cause d'inactivité.

Fiche de la cause mandate_expired de GoCardless
La cause, l'événement de mandat expiré, le paiement annulé et le texte de GoCardless.

Quand cela arrive

Cela touche un mandat qui a été signé puis n'a plus été utilisé : un client qui n'achète plus, ou un client qu'on prélève si rarement qu'entre deux prélèvements toute la période d'inactivité s'écoule. C'est le temps sans tentative de prélèvement qui compte, pas la date de signature.

Si un prélèvement attendait d'être présenté au moment de l'expiration, GoCardless l'annule avec la même cause : « The mandate expired before the payment could be collected. ».

Ce que fait Odoo avec le connecteur

  • L'événement de mandat expiré le retire. Le connecteur considère un mandat expired comme définitivement perdu : il archive le mode de paiement du client, indique sur sa fiche que le mandat ne peut plus être utilisé et crée l'activité « GoCardless mandate lost ». Il ne le fait qu'une fois ; si un autre événement apporte la même information, il trouve déjà le mode archivé.
  • Le paiement annulé passe sa transaction en « Erreur », accessible depuis la facture avec le bouton « Transaction de paiement » en haut, avec « GoCardless could not collect this payment (mandate_expired). ». Si la facture avait déjà été réglée avec ce prélèvement, il annule le paiement et la facture redevient à payer. Et comme mandate_expired fait partie des causes pour lesquelles le connecteur archive le mandat, cet événement le retire aussi, en tant que expired.
  • Sur la fiche du mode de paiement, « Mandate Status » affiche expired.

Ces textes sont écrits par le connecteur au moment d'appliquer l'événement, sans intervention de quiconque. Le connecteur n'est pas traduit en français : ces textes apparaissent toujours en anglais, même dans un Odoo en français, qu'ils soient déclenchés par un utilisateur ou par une action planifiée : « 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 » et « GoCardless could not collect this payment (mandate_expired). ».

Si Odoo tente de prélever avec le mandat avant d'en être informé, parce que l'événement s'est perdu en route, GoCardless répond mandate_is_inactive. Le connecteur consulte alors le mandat, l'archive et place dans la transaction son propre message : « The customer's GoCardless mandate is expired, so it cannot be charged. Ask the customer for a new mandate. ». La tâche qui récupère chaque heure les événements manqués finit aussi par ramener l'événement du mandat.

Schéma : ce que GoCardless envoie avec mandate_expired et ce que fait Odoo avec le connecteur
Schéma réalisé à partir du code du connecteur (17.0, 18.0, 19.0 et 20.0) et de la documentation de GoCardless.

Réactiver ou demander un autre mandat ?

GoCardless propose deux voies. Pour continuer à prélever ce client, indique-t-il, il faut demander son accord et utiliser la réactivation du mandat (« you should request their permission and use the reinstate endpoint »). Mais cet endpoint est restreint : il exige des pages de paiement personnalisées approuvées par GoCardless (« Restricted this endpoint requires approved custom payment pages »).

Le connecteur ne réactive pas les mandats en production : le bouton « Reinstate mandate (sandbox) » de la fiche du mode de paiement n'apparaît qu'avec le fournisseur en test et un mandat annulé, en échec ou expiré. En production, la voie est un nouveau mandat.

Que faire

  1. Parlez au client : s'il est toujours client, demandez-lui de signer un nouveau mandat. Dans Odoo, ce sera un nouveau mode de paiement.
  2. Encaissez avec lui les factures en attente. Les prélèvements que GoCardless a annulés à cause de l'expiration ne seront pas présentés automatiquement.
  3. Si un client n'est prélevé que très rarement, prévoyez que son mandat peut expirer entre deux prélèvements.

Puis-je prélever avec un mandat expiré si le client est d'accord ?

Non, avec ce mandat : GoCardless ne permet pas de créer de prélèvements. Il faut un nouveau mandat ou, là où c'est possible, la réactivation par GoCardless.

Peut-on tester la réactivation ?

Oui, dans le sandbox de GoCardless. Avec le fournisseur en test, la fiche du mode de paiement affiche « Reinstate mandate (sandbox) » lorsque le mandat est expiré.

Avec notre connecteur

Sur Odoo 17, 18, 19 et 20, le connecteur retire le mandat expiré dès que GoCardless le signale, laisse le prélèvement annulé en erreur avec sa cause et prévient sur la fiche du client, afin de demander un nouveau mandat avant la prochaine facture.

À lire aussi

GoCardless mandate_not_inactive : le mandat ne peut pas être réactivéGoCardless renvoie mandate_not_inactive si l'on réactive un mandat déjà actif ou en cours de soumission. Quand c'est possible et ce que fait le connecteur.Erreur mandate_is_inactive de GoCardless lors de la création d'un encaissement depuis OdooGoCardless répond mandate_is_inactive quand un paiement est créé avec un mandat annulé, échoué ou expiré. Pourquoi et comment le connecteur le gère.GoCardless MD01 : mandate_cancelled et authorisation_disputed sur un prélèvement SEPALe code SEPA MD01 arrive dans GoCardless sous mandate_cancelled ou authorisation_disputed, sur un prélèvement échoué, rejeté ou annulé. Ce que fait Odoo.
Vérifié dans le code du connecteur (version 17.0, 18.0, 19.0 et 20.0) et dans les sources citées

Sources

  • docs.gocardless.com/docs/api-reference/events/mandate
  • docs.gocardless.com/docs/api-reference/events/payment
  • docs.gocardless.com/docs/api-reference/mandate
  • Code du module : flexigo_payment_gocardless: const.py, ligne 33 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 83 en 17.0 (d203ee6), ligne 83 en 18.0 (e2ab18b), ligne 83 en 19.0 (ce7f5a3) et ligne 82 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 131 en 17.0 (d203ee6), ligne 131 en 18.0 (e2ab18b), ligne 131 en 19.0 (ce7f5a3) et ligne 130 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1148 en 17.0 (d203ee6), ligne 1148 en 18.0 (e2ab18b), ligne 1148 en 19.0 (ce7f5a3) et ligne 1155 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 495 en 17.0 (d203ee6), ligne 495 en 18.0 (e2ab18b), ligne 495 en 19.0 (ce7f5a3) et ligne 497 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: const.py, ligne 76 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 914 en 17.0 (d203ee6), ligne 914 en 18.0 (e2ab18b), ligne 913 en 19.0 (ce7f5a3) et ligne 937 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 725 en 17.0 (d203ee6), ligne 725 en 18.0 (e2ab18b), ligne 724 en 19.0 (ce7f5a3) et ligne 748 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 754 en 17.0 (d203ee6), ligne 754 en 18.0 (e2ab18b), ligne 753 en 19.0 (ce7f5a3) et ligne 777 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 436 en 17.0 (d203ee6), ligne 436 en 18.0 (e2ab18b), ligne 436 en 19.0 (ce7f5a3) et ligne 438 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 278 en 17.0 (d203ee6), ligne 278 en 18.0 (e2ab18b), ligne 278 en 19.0 (ce7f5a3) et ligne 289 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_transaction.py, ligne 321 en 17.0 (d203ee6), ligne 321 en 18.0 (e2ab18b), ligne 321 en 19.0 (ce7f5a3) et ligne 332 en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/responses-and-errors
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1233 en 17.0 (d203ee6), ligne 1233 en 18.0 (e2ab18b), ligne 1233 en 19.0 (ce7f5a3) et ligne 1240 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: views/payment_token_views.xml, ligne 15 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 785 en 17.0 (d203ee6), ligne 785 en 18.0 (e2ab18b), ligne 785 en 19.0 (ce7f5a3) et ligne 800 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: views/payment_token_views.xml, ligne 23 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 998 en 17.0 (d203ee6), ligne 998 en 18.0 (e2ab18b), ligne 998 en 19.0 (ce7f5a3) et ligne 1013 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: models/payment_token.py, ligne 162 en 17.0 (d203ee6), ligne 162 en 18.0 (e2ab18b), ligne 162 en 19.0 (ce7f5a3) et ligne 161 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: const.py, ligne 117 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • github.com/odoo/odoo/blob/20.0/addons/payment/i18n/fr.po
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
  • Code du module : flexigo_payment_gocardless: __manifest__.py, ligne 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)