Post-vente

Le paiement

Mouvements bancaires, lettrage/rapprochement paiement ↔ facture, et les deux circuits d'encaissement.

Étape 4 — Le paiement de l'acheteur

Entre « l'acheteur a viré l'argent » et « la facture est marquée payée », il y a une étape invisible mais essentielle : le rapprochement bancaire.

Le mouvement bancaire (BankMovement) : la brique universelle

Tout flux d'argent — entrant ou sortant, Ponto ou MangoPay — est représenté par un mouvement bancaire (enregistrement d'un flux d'argent : un virement reçu, un paiement carte, un remboursement, un reversement vendeur… C'est l'objet pivot entre la banque et les factures) avec :

  • un type : IN (argent qui entre), OUT (argent qui sort), INTERNAL (mouvement interne plateforme), TRANSFER ;
  • un montant, une devise, une date ;
  • la communication (remittanceInformation) : le texte du virement, idéalement la référence structurée XXX/XXXX/XXXXX ;
  • un statut qui suit son traitement.

Le cycle d'un paiement entrant :

flowchart LR
  a["NEW"] --> b["LINKED"]
  b --> c["MATCHED"]
  c --> d["SETTLED"]
StatutSignification
NEWLe mouvement vient d'être créé (synchronisé depuis Ponto, ou créé par un webhook MangoPay). Personne ne sait encore à quelle facture il correspond.
LINKEDUn lien provisoire vers une ou plusieurs factures a été posé (objet BankMovementInvoice avec le montant affecté à chaque facture).
AUTO_MATCHED / MANUAL_MATCHEDLe rapprochement est confirmé : automatiquement (montant + référence + IBAN concordants) ou à la main par un comptable dans l'admin. C'est ce qui déclenche le passage de la facture à PAID.
SETTLEDLe mouvement est définitivement réconcilié avec la transaction bancaire réelle.

Pour les mouvements sortants (reversements, remboursements), le cycle est : SUBMITTED (préparé) → EXECUTED (envoyé à la banque / à MangoPay) → SETTLED (confirmé) — ou REJECTED en cas d'échec. Autres statuts : DRAFT, IGNORED (mouvement volontairement écarté, ex. frais bancaires), SIGNED (legacy Ponto), PENDING, CANCELLED.

Le lettrage / rapprochement : comment on marie paiement et facture

En comptabilité, « lettrer » c'est relier un paiement à la facture qu'il règle. Sans lettrage, vous avez d'un côté une pile de factures impayées, de l'autre une pile de virements anonymes, et personne ne sait qui a payé quoi. Le système fait ce travail automatiquement quand il le peut, et propose des suggestions sinon.

L'algorithme de suggestion (« guess ») croise plusieurs critères :

  • le montant du virement = montant dû de la facture (avec tolérance) ;
  • la communication structurée (la référence XXX/XXXX/XXXXX est décodée — formats STRUCTURED ISO 20022, STRUCTURED_BE belge +++xxx/xxxx/xxxxx+++, ou texte libre UNSTRUCTURED nettoyé) ;
  • la date (proche de l'échéance) ;
  • l'organisation (le payeur correspond à l'acheteur ; côté MangoPay, l'IBAN virtuel crédité identifie directement l'acheteur).

Un virement peut couvrir plusieurs factures (le cas normal en facturation double : un seul virement règle la SALES et la BUYER_FEES grâce à la référence partagée). Les comptables disposent dans l'admin des actions LINK / UNLINK / MANUAL_MATCH / AUTO_MATCH / UNMATCH / IGNORE.

Cas imparfaits

SituationCe qui se passe
Trop-perçu (a payé 1 050 € au lieu de 1 000 €)Le rapprochement automatique échoue (montants différents) → traitement manuel ; l'excédent est remboursé via un avoir/remboursement.
Paiement partiel (500 € sur 1 000 €)Le mouvement est lié partiellement : amountPaid = 500 €, amountDue = 500 € ; la facture n'est pas encore PAID. Relance de l'acheteur.
Pas de référence / référence fausseSuggestion par montant + organisation + date ; sinon lettrage manuel.
Jamais payéAprès l'échéance : action NO_PAY (manuelle ou NO_PAY_AUTO) → facture et item NOT_PAID, emails d'impayé, et éventuels frais d'annulation (BUYER_CANCELLATION_FEES_NOT_PAID).

Les deux circuits d'encaissement en pratique

  1. L'email de confirmation d'achat contient soit une URL de paiement carte (3-D Secure), soit l'IBAN virtuel personnel de l'acheteur chez MangoPay ;
  2. Carte : une PaymentRequest (demande de paiement portant les factures et le montant) initie le PayIn ; le rapprochement est immédiat et certain (on sait exactement quelles factures sont payées) ;
  3. Virement : l'acheteur vire sur son IBAN virtuel ; le webhook PAYIN_NORMAL_SUCCEEDED crée le mouvement IN, et comme l'IBAN virtuel appartient à un seul acheteur, l'auto-rapprochement est très fiable ;
  4. Facture → PAID, l'argent attend dans le wallet, prêt pour la répartition (chapitre suivant).
Copyright © 2026