Refunds & Notifications · Article 8.4
Marquer un remboursement manuellement — pour les preuves SEPA et hors Stripe
Lorsqu'un remboursement est émis en dehors de Stripe — virement bancaire SEPA, espèces, PayPal, chèque postal — `Mark refunded` est la façon de l'enregistrer dans Clozo.
Stripe gère les remboursements automatiquement pour les paiements effectués via Stripe — vous cliquez sur Refund, Stripe débite la carte, et Clozo met à jour le statut via webhook. Mais si le paiement original a été effectué par virement SEPA, en espèces ou via tout autre canal hors Stripe, le remboursement doit également être émis hors Stripe. Une fois que vous avez transféré les fonds à votre client par les moyens normaux (virement bancaire, espèces en main propre, etc.), utilisez Mark refunded pour fermer la boucle dans Clozo.
Step by step
Émettez le remboursement via votre canal bancaire.
Effectuez le virement bancaire, remise d'espèces, ou tout autre transfert à votre client. Notez la référence de transaction ou confirmez la réception.
Confirmez que les fonds ont été reçus par le client.
Pour les virements : vérifiez que le transfert sortant apparaît dans votre relevé bancaire. Pour les espèces : obtenez un accusé de réception du client si possible.
Ouvrez la note de crédit dans Clozo.
Naviguez vers la page de détail du devis → section Documents → cliquez sur la note de crédit.
Cliquez sur
Mark refunded.Le bouton n'est visible que lorsque le statut de la note de crédit est
requested. Si vous ne le voyez pas, vérifiez l'état actuel de la note de crédit.Saisissez la raison.
Entrez la référence du virement bancaire, la date de remise d'espèces, l'identifiant de transaction PayPal, ou toute autre preuve. Ce champ est obligatoire.
Cliquez sur
Confirm.Le statut de la note de crédit passe à
manual. Le PDF de la note de crédit est mis à jour. L'e-mail client est envoyé automatiquement. Si c'était la dernière note de crédit en attente du devis, le devis passe àCompleted.
Une bannière de remboursement sur la page de la note de crédit avec le bouton Mark refunded ; une fenêtre de dialogue pour saisir la raison ; la Chronologie enregistre l'action avec votre identifiant et l'horodatage ; le statut de la note de crédit affiche manual après confirmation.
Why this works this way
Flux de contrôle du backend (CreditNoteMarkRefundedView) :
1. Récupère la note de crédit par identifiant + propriétaire (404 si non trouvée).
2. Vérifie credit_note.status == 'requested' — n'accepte que les notes de crédit à l'état demandé (garde d'idempotence : les notes de crédit déjà à l'état refunded ou cancelled sont rejetées avec 409 Conflict).
3. Valide que le champ reason est non vide (requis pour la piste d'audit).
4. Met à jour credit_note.status = 'manual' et credit_note.manual_refund_reason = reason.
5. Vérifie si toutes les notes de crédit du devis sont maintenant dans un état terminal (remboursé, annulé, manuel). Si oui, fait passer le devis à Completed.
6. Déclenche la tâche de notification par e-mail send_refund_manual_notification (asynchrone via Celery).
Pourquoi le statut est `manual` et non `refunded`. Le statut refunded est réservé aux remboursements Stripe confirmés par webhook — lorsqu'une charge Stripe est réellement annulée. manual signale que le transfert a été effectué par un canal externe, sans confirmation automatisée possible. Les deux statuts sont terminaux (aucune action supplémentaire requise dans Clozo), mais le PDF de la note de crédit et la Chronologie affichent la méthode de manière à correspondre.
Champ de raison — ce qu'il capture. Ce champ en texte libre est la référence externe pour la piste d'audit : référence du virement, confirmation de remise d'espèces, identifiant de transaction PayPal, numéro de chèque, etc. Il apparaît dans le PDF de la note de crédit et dans l'e-mail client envoyé. Ne le laissez pas vide — le backend l'applique (validation côté serveur), et c'est votre défense en cas de litige.
Envoi de l'e-mail au client. Après le marquage, Clozo envoie un e-mail « Remboursement effectué » au client avec le montant, la méthode (manuel / externe) et votre raison. Le PDF de la note de crédit est joint. L'e-mail indique « Nous avons effectué un remboursement de X € » sans mentionner le canal spécifique (le champ de raison vous appartient ; il n'est pas reformulé dans l'e-mail objet).
Quand utiliser ceci plutôt que `Refund via Stripe`. Utilisez Mark refunded manually quand : le paiement original était par virement SEPA (Clozo ne peut pas émettre de crédit sur un virement SEPA) ; le client préfère être remboursé en espèces ; vous avez utilisé un transfert Wise/Revolut pour le remboursement car c'est plus rapide à l'international ; le paiement Stripe original est trop ancien pour un remboursement de carte (limite de 90 jours de Stripe). Utilisez Refund via Stripe quand le paiement original était via Stripe et que la carte est toujours valide — c'est plus propre car Stripe envoie des fonds directement à la banque du client.
Troubleshooting
Keep reading
Refunds & Notifications
Stripe automatic refund (Direct Charges via Connect)
When the original deposit was paid via Stripe, the refund is automatic. Clozo issues a Refund on the freelancer's connected account, watches for the `refund.updated` webhook, and flips the credit note to `succeeded` once Stripe confirms — typically within 3–5 business days for the cash to reach the client.
Refunds & Notifications
SEPA / out-of-band refund: when automation can't help
When the original deposit was paid via SEPA bank transfer (or any non-Stripe channel), Clozo can't refund automatically — Stripe API has nothing to refund. You issue the SEPA transfer manually from your bank, then click `Mark refunded` to update the credit note and notify the client.
Refunds & Notifications
Refund stages: issued → requested → succeeded (or manual)
The credit note moves through up to four states from creation to settled. Each state corresponds to a specific point in the refund lifecycle, with predictable UI badges and email triggers.
Refunds & Notifications
Failed refunds & recovery — common Stripe failure reasons
A `failed` credit note has a `refund_failure_reason` string from Stripe. Most reasons fall into a small set; here's what each means and the recommended recovery.