Ce que dit GoCardless
| Événement | Code SEPA Core | Texte de GoCardless |
|---|---|---|
| payments · failed | AC04 | The bank account for this payment has been closed. The mandate will also be cancelled. |
| payments · failed | MD07 | This payment failed because the customer is deceased. |
| mandates · cancelled | AC04 | The bank account for this mandate has been closed. Any subscriptions and pending payment will also be cancelled. |
| mandates · cancelled | MD07 | This 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.

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
- Passe la transaction en erreur avec « GoCardless could not collect this payment (bank_account_closed). » et enregistre la cause.
- Si la facture était déjà payée avec ce prélèvement, annule le paiement dans Odoo et la facture redevient en attente.
- Archive le moyen de paiement du client :
bank_account_closedest l'une des quatre causes qui font considérer le mandat comme mort par le connecteur, avecmandate_cancelled,mandate_expiredetauthorisation_disputed. - 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. »
- 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.

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