Skip to main content

Refunds & Notifications · Article 6.3

Remboursement SEPA / hors canal : quand l'automatisation ne peut pas aider

Lorsque l'acompte original a été payé par virement bancaire SEPA (ou tout autre canal hors Stripe), Clozo ne peut pas rembourser automatiquement — l'API Stripe n'a rien à rembourser. Vous effectuez le virement SEPA manuellement depuis votre banque, puis cliquez sur `Marquer comme remboursé` pour mettre à jour la note de crédit et notifier le client.

Les virements bancaires SEPA sont courants dans l'UE, notamment en Allemagne, aux Pays-Bas et en Autriche où le paiement de compte à compte est habituel en B2B. Clozo prend en charge SEPA pour l'acompte original via le QR code EPC sur la facture d'acompte — mais Stripe n'intervient pas dans cette transaction, donc quand un remboursement est nécessaire sur un acompte payé par SEPA, Stripe ne peut rien faire. Le flux revient au manuel : vous transférez les fonds, puis enregistrez le transfert dans Clozo pour que la note de crédit reflète la réalité et que le client reçoive une confirmation.

Step by step

  1. Recevez le déclencheur post-signature.

    Après que le client signe l'avenant Δ_REFUND, la note de crédit apparaît avec le statut pending et la raison « Paiement manuel du freelancer requis ».

  2. Recherchez l'IBAN du client.

    Soit depuis vos dossiers (si vous l'avez enregistré lors de l'acompte SEPA original), soit depuis l'e-mail de facture d'acompte (le client vous a envoyé les fonds ; son IBAN figure sur le relevé bancaire), soit en envoyant un e-mail au client pour confirmer que l'IBAN de destination est le même que celui utilisé pour le paiement.

  3. Effectuez le virement SEPA depuis votre banque.

    Utilisez le numéro de note de crédit comme référence (ex. « Remboursement CRN-2026-0007 »). La plupart des banques européennes traitent les virements SEPA le jour même ou le lendemain ouvré ; le SEPA Instant transfrontalier est souvent en quelques secondes.

  4. Cliquez sur Marquer comme remboursé sur la note de crédit.

    Depuis la bannière de remboursement de la page du devis, la page des notes de crédit (/credit-notes) ou la ligne de note de crédit dans le menu déroulant Documents.

  5. Fournissez une raison.

    Minimum 1 caractère ; typiquement : numéro de référence bancaire (« Référence Sparkasse 9XK7-2026-0511 ») ou une courte note. Cette information est stockée définitivement sur la ligne de note de crédit.

  6. Confirmez — la note de crédit passe à manual.

    L'e-mail est envoyé au client ; le devis se ferme à Payé si applicable.

La bannière de remboursement indique « Remboursement manuel initié » avec les détails de la note de crédit, votre compte bancaire masqué et un bouton Confirmer le remboursement effectué. Après avoir cliqué et fourni une raison, la bannière bascule vers « Remboursement effectué par virement manuel le [date] » avec le texte de raison en ligne.

Why this works this way

La bascule se produit dans _trigger_stripe_refund (amendment_postsign.py:472) :

`` if not payment: credit_note.refund_status = REFUND_PENDING credit_note.refund_failure_reason = ( "No Stripe PaymentIntent found — likely SEPA flow. " "Manual freelancer payout required." ) ``

Cela configure la note de crédit pour afficher l'interface de remboursement manuel. La bannière du devis indique « Remboursement manuel initié — confirmez le virement bancaire » avec les détails de la note de crédit et un CTA pour marquer le remboursement comme effectué.

L'action côté freelancer (CreditNoteMarkRefundedView dans amendment_views.py:686) :

1. Vérifier que la note de crédit n'est pas déjà à l'état succeeded (idempotent — renvoie 409 si c'est le cas). 2. Exiger un champ reason dans le corps (1 à 500 caractères) — typiquement un numéro de référence bancaire, une date de paiement ou une courte note. Stocké comme manual_refund_reason pour l'audit. 3. Définir refund_status=manual, refund_completed_at=now, enregistrer. 4. Appeler close_proposal_if_settled pour faire passer le devis à Payé si aucune autre obligation ne reste. 5. Mettre en file send_credit_note_refund_completed_email — même modèle d'e-mail que le chemin de remboursement Stripe complété ; l'expérience du client est identique.

L'état manual (vs succeeded) préserve la distinction d'audit : succeeded signifie que le webhook Stripe a confirmé ; manual signifie que le freelancer atteste que le remboursement a été émis hors canal. Les deux ferment la note de crédit à des fins comptables ; seule la piste d'audit enregistre la différence.

Troubleshooting

Keep reading

Remboursement SEPA / hors canal : quand l'automatisation ne peut pas aider · Help · Clozo