Wat GoCardless zegt
| Gebeurtenis | SEPA Core-code | Tekst van 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. |
De oorzaak is in alle vier de rijen gelijk, bank_account_closed; de code maakt het verschil in de reden. Let op de derde: naast het mandaat annuleert GoCardless ook de openstaande betalingen van dat mandaat, die bij jou terechtkomen als geannuleerde betalingen met dezelfde oorzaak.

Twee gebeurtenissen voor hetzelfde feit
Een gesloten rekening komt twee keer in Odoo aan: bij de betaling die mislukt en bij het mandaat dat wordt geannuleerd. De connector verwerkt beide: de eerste die binnenkomt archiveert het mandaat en geeft een melding, de tweede vindt het al gearchiveerd en herhaalt de melding niet. Als er één via de webhook niet aankomt, haalt de taak die elk uur de gemiste gebeurtenissen bij GoCardless opvraagt die alsnog op, tot 100 per ronde.
Wat de connector doet
- Zet de transactie op fout met "GoCardless could not collect this payment (bank_account_closed)." en bewaart de oorzaak.
- Als de factuur met die incasso al betaald was, annuleert hij de betaling in Odoo en staat de factuur weer open.
- Archiveert hij de betaalmethode van de klant:
bank_account_closedis een van de vier oorzaken waarbij de connector het mandaat als dood beschouwt, samen metmandate_cancelled,mandate_expiredenauthorisation_disputed. - Schrijft hij dit in de klantkaart: "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."
- Maakt hij een activiteit "GoCardless mandate lost" aan, zodat iemand dit oppakt vóór de volgende factuur.
Het gearchiveerde mandaat blijft in Odoo staan als historie, maar wordt niet meer aangeboden om mee te incasseren. De transactie open je vanaf de factuur, met de knop "Betalingstransactie" bovenaan; het menu met transacties verschijnt alleen in de ontwikkelaarsmodus, en in Odoo 20 bestaat het niet.
Deze drie teksten schrijft de connector zelf bij het verwerken van de gebeurtenis, zonder dat er iemand bij is. De connector is niet in het Nederlands vertaald: deze teksten verschijnen altijd in het Engels, ook in een Nederlandstalige Odoo, of een gebruiker of een geplande actie ze nu start: "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." en "GoCardless mandate lost".
Hoe je AC04 van MD07 onderscheidt
Vanuit Odoo zie je dat niet. De oorzaak is dezelfde, de connector bewaart de oorzaak en niet de SEPA-code, en de klantnotitie en de activiteit zeggen in beide gevallen hetzelfde. De code zie je bij GoCardless. Volgens hun helpcentrum staat de reden van elke mislukking in de tijdlijn van de betaling, in het Dashboard ("You are able to view the reason for a payment failure in the status timeline of the payment in your GoCardless dashboard."). In de geavanceerde modus staat de exacte code ook in de gebeurtenis (details.reason_code), en het Dashboard bewaart de verzendingen van de laatste 3 maanden onder Developers > Webhooks, met hun inhoud.
Als de code MD07 is
MD07 is geen technisch probleem. De rekeninghouder is overleden en het mandaat wordt geannuleerd. De openstaande facturen van deze klant worden niet via incasso geïnd, en hoe je die alsnog opeist, is een zaak voor je accountant, niet voor de connector. Verstandig is de geplande incasso's en abonnementen van die klant in Odoo na te lopen, zodat er geen nieuwe worden aangemaakt. De notitie van Odoo vraagt ook in dit geval om een nieuw mandaat, omdat die alleen de oorzaak kent: bij MD07 vraag je er geen.
Wat te doen bij AC04
- Neem contact op met de klant: die heeft een nieuwe rekening, of krijgt die, en moet daarmee een mandaat ondertekenen.
- Zodra die tekent, is het nieuwe mandaat een andere betaalmethode in Odoo; het oude blijft gearchiveerd.
- Incasseer de openstaande facturen met het nieuwe mandaat.

Kan ik een betaling met bank_account_closed opnieuw proberen?
Dat heeft geen zin: de rekening bestaat niet meer. Bovendien archiveert de connector het mandaat, en met een gearchiveerd mandaat verschijnt de knop "Retry collection" niet in de transactie.
En als de klant van bank is gewisseld via de dienst voor overdracht van rekeningen?
Dat is geen sluiting: GoCardless meldt het als een overgedragen mandaat, met de oorzaak bank_account_transferred, en het mandaat blijft geldig.
Met onze connector
De GoCardless-connector voor Odoo 17, 18, 19 en 20 doet bij bank_account_closed wat een oplettend mens zou doen: hij zet de incasso op mislukt, opent de factuur weer, haalt het dode mandaat weg zodat niemand het nog gebruikt, en laat een melding met de oorzaak achter op de klantkaart.
Lees verder
Gecontroleerd in de broncode van de connector (versie 17.0, 18.0, 19.0 en 20.0) en in de gelinkte bronnen
Bronnen
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 15 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 442 in 17.0 (d203ee6), regel 442 in 18.0 (e2ab18b), regel 441 in 19.0 (ce7f5a3) en regel 456 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_token.py, regel 83 in 17.0 (d203ee6), regel 83 in 18.0 (e2ab18b), regel 83 in 19.0 (ce7f5a3) en regel 82 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 145 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/mandate
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 76 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 33 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_token.py, regel 131 in 17.0 (d203ee6), regel 131 in 18.0 (e2ab18b), regel 131 in 19.0 (ce7f5a3) en regel 130 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 725 in 17.0 (d203ee6), regel 725 in 18.0 (e2ab18b), regel 724 in 19.0 (ce7f5a3) en regel 748 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 754 in 17.0 (d203ee6), regel 754 in 18.0 (e2ab18b), regel 753 in 19.0 (ce7f5a3) en regel 777 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 117 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 436 in 17.0 (d203ee6), regel 436 in 18.0 (e2ab18b), regel 436 in 19.0 (ce7f5a3) en regel 438 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1148 in 17.0 (d203ee6), regel 1148 in 18.0 (e2ab18b), regel 1148 in 19.0 (ce7f5a3) en regel 1155 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 495 in 17.0 (d203ee6), regel 495 in 18.0 (e2ab18b), regel 495 in 19.0 (ce7f5a3) en regel 497 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: __manifest__.py, regel 31 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- docs.gocardless.com/docs/api-reference/events/payment
- Broncode van de module: flexigo_payment_gocardless: views/payment_transaction_views.xml, regel 13 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 63 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: models/payment_transaction.py, regel 418 in 17.0 (d203ee6), regel 418 in 18.0 (e2ab18b), regel 417 in 19.0 (ce7f5a3) en regel 432 in 20.0 (688d86b)
- Broncode van de module: flexigo_payment_gocardless: i18n/flexigo_payment_gocardless.pot, regel 1016 in 17.0 (d203ee6), regel 1016 in 18.0 (e2ab18b), regel 1016 in 19.0 (ce7f5a3) en regel 1031 in 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
- Broncode van de module: flexigo_payment_gocardless: const.py, regel 66 in 17.0 (d203ee6), 18.0 (e2ab18b), 19.0 (ce7f5a3) en 20.0 (688d86b)
- github.com/odoo/odoo/blob/20.0/addons/account_payment/views/account_move_views.xml
