Aller au contenu principal
GoCardless · SEPA Core · paiement échoué et mandat annulé

GoCardless bank_account_closed : AC04 et MD07, le compte n'existe plus

bank_account_closed est un échec sans retour en arrière : le compte sur lequel le client a signé le mandat est clôturé, ou son titulaire est décédé. GoCardless le signale dans le paiement qui échoue et dans le mandat, qui est annulé. Aucune nouvelle tentative ne le corrige.

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énementCode SEPA CoreTexte de GoCardless
payments · failedAC04The bank account for this payment has been closed. The mandate will also be cancelled.
payments · failedMD07This payment failed because the customer is deceased.
mandates · cancelledAC04The bank account for this mandate has been closed. Any subscriptions and pending payment will also be cancelled.
mandates · cancelledMD07This mandate has been cancelled because the customer is deceased.

La cause est la même dans les quatre lignes, bank_account_closed ; le code distingue le motif. Remarquez la troisième : outre le mandat, GoCardless annule les paiements en attente de ce mandat, qui vous parviendront comme paiements annulés avec la même cause.

Fiche de la cause bank_account_closed de GoCardless
La cause, ses codes AC04 et MD07 et le texte de GoCardless pour AC04.

Deux événements pour un même fait

La clôture d'un compte arrive dans Odoo deux fois : avec le paiement qui échoue et avec le mandat qui est annulé. Le connecteur traite les deux : le premier qui arrive archive le mandat et signale l'incident, et le second le trouve déjà archivé, sans répéter l'avertissement. Si l'un n'arrive pas par le webhook, la tâche qui demande chaque heure à GoCardless les événements manqués le récupère, jusqu'à 100 par passage.

Ce que fait le connecteur

  1. Passe la transaction en erreur avec « GoCardless could not collect this payment (bank_account_closed). » et enregistre la cause.
  2. Si la facture était déjà payée avec ce prélèvement, annule le paiement dans Odoo et la facture redevient en attente.
  3. Archive le moyen de paiement du client : bank_account_closed est l'une des quatre causes qui font considérer le mandat comme mort par le connecteur, avec mandate_cancelled, mandate_expired et authorisation_disputed.
  4. L'écrit dans la fiche du client : « The GoCardless direct debit mandate of … is no longer usable (bank_account_closed). No further collection can be taken against it. Ask the customer to set up a new mandate. »
  5. Crée une activité « GoCardless mandate lost » pour que quelqu'un s'en occupe avant la prochaine facture.

Le mandat archivé reste dans Odoo comme historique, mais il n'est plus proposé pour encaisser. La transaction s'ouvre depuis la facture, avec le bouton « Transaction de paiement » en haut ; le menu des transactions n'apparaît qu'en mode développeur, et il n'existe pas dans Odoo 20.

Ces trois textes sont écrits par le connecteur au moment d'appliquer l'événement, sans intervention humaine. Le connecteur n'est pas traduit en français : ces textes sortent toujours en anglais, y compris dans une base de données en français : « GoCardless could not collect this payment (bank_account_closed). », « The GoCardless direct debit mandate of … is no longer usable (bank_account_closed). No further collection can be taken against it. Ask the customer to set up a new mandate. » et « GoCardless mandate lost ».

Comment savoir si c'est AC04 ou MD07

Depuis Odoo, on ne peut pas le distinguer. La cause est la même : le connecteur enregistre la cause et non le code SEPA, et la note du client comme l'activité disent la même chose dans les deux cas. Le code se consulte dans GoCardless. Selon leur centre d'aide, le motif de chaque échec apparaît dans la chronologie du paiement, dans le Dashboard (« You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard. »). En mode avancé, le code exact figure aussi dans l'événement (details.reason_code), et le Dashboard conserve les envois des 3 derniers mois dans Developers > Webhooks, avec leur contenu.

Si le code est MD07

MD07 n'est pas un problème technique. Le titulaire du compte est décédé et le mandat est annulé. Les factures en attente de ce client ne seront pas encaissées par prélèvement, et la manière de les réclamer relève de votre cabinet comptable, pas du connecteur. Il est prudent de revoir ses encaissements programmés et ses abonnements dans Odoo pour qu'il n'en soit pas généré d'autres. La note d'Odoo demande un nouveau mandat dans ce cas aussi, car elle ne connaît que la cause : avec MD07, ne le demandez pas.

Que faire avec AC04

  • Contactez le client : il a, ou va avoir, un nouveau compte, et il doit signer un mandat avec celui-ci.
  • Une fois signé, le nouveau mandat sera un autre moyen de paiement dans Odoo ; l'ancien reste archivé.
  • Encaissez avec le nouveau mandat les factures restées en attente.
Schéma : ce que GoCardless envoie avec bank_account_closed 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.

Puis-je relancer un paiement avec bank_account_closed ?

Ce n'est pas utile : le compte n'existe plus. De plus, le connecteur archive le mandat, et avec le mandat archivé le bouton « Retry collection » n'apparaît pas dans la transaction.

Et si le client a changé de banque avec le service de transfert de comptes ?

Ce n'est pas une clôture : GoCardless l'indique comme mandat transféré, avec la cause bank_account_transferred, et le mandat reste valable.

Avec notre connecteur

Le connecteur GoCardless pour Odoo 17, 18, 19 et 20 traite bank_account_closed comme le ferait une personne attentive : il passe l'encaissement en échec, rouvre la facture, retire le mandat mort pour que personne ne le réutilise et laisse un avertissement avec la cause dans la fiche du client.

À lire aussi

GoCardless invalid_bank_details : AC01 et BE06, le compte indiqué n'existe pasGoCardless invalid_bank_details avec AC01 ou BE06 : le compte du mandat n'existe pas. Pourquoi cela arrive et ce que fait le connecteur Odoo.GoCardless direct_debit_not_enabled : AG01 et AC06, un compte qui n'accepte pas le prélèvementGoCardless direct_debit_not_enabled avec AG01 ou AC06 : le compte du client n'accepte pas les prélèvements SEPA, ou est bloqué. Ce que fait Odoo.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.
Vérifié dans le code du connecteur (version 17.0, 18.0, 19.0 et 20.0) et dans les sources citées

Sources

  • Code du module : flexigo_payment_gocardless: const.py, ligne 15 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 442 en 17.0 (d203ee6), ligne 442 en 18.0 (e2ab18b), ligne 441 en 19.0 (ce7f5a3) et ligne 456 en 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: const.py, ligne 145 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/mandate
  • 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: 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 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: 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: const.py, ligne 117 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 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: 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: __manifest__.py, ligne 31 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/events/payment
  • Code du module : flexigo_payment_gocardless: views/payment_transaction_views.xml, ligne 13 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 63 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 418 en 17.0 (d203ee6), ligne 418 en 18.0 (e2ab18b), ligne 417 en 19.0 (ce7f5a3) et ligne 432 en 20.0 (688d86b)
  • Code du module : flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, ligne 1016 en 17.0 (d203ee6), ligne 1016 en 18.0 (e2ab18b), ligne 1016 en 19.0 (ce7f5a3) et ligne 1031 en 20.0 (688d86b)
  • docs.gocardless.com/docs/api-reference/webhooks
  • github.com/odoo/odoo/blob/17.0/odoo/http.py
  • support.gocardless.com/hc/en-gb/articles/360001467265
  • Code du module : flexigo_payment_gocardless: const.py, ligne 66 en 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) et 20.0 (688d86b)
  • github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml