Aller au contenu

Échecs de paiement et relances

flowchart TD
  subgraph systeme["Système et Stripe"]
    s1["Stripe signale un prélèvement échoué"]:::external
    b["Paiement en échec"]:::problem
    c["Première échéance : l'offre repasse à chiffrée<br/>Échéance suivante : la police ne bouge pas"]:::status
    rec["Tâche de récupération<br/>7 jours après l'échec, 09h45"]:::action
    p0["Paiement jamais terminé<br/>reste en attente"]:::status
    u["Stripe annonce le prochain prélèvement"]:::external
    mand["Stripe signale un mandat SEPA invalidé<br/>alerte Slack"]:::external
    sub["Abonnement supprimé : paiements ouverts en échec,<br/>alerte Slack, aucun email, police conservée"]:::problem
    dis["Litige : alerte Slack, aucun email<br/>Litige perdu : police annulée, commission reprise<br/>Remboursement fait dans Stripe : rapproché, aucun email"]:::problem
  end
  subgraph client["Client"]
    m1["EMAIL : Paiement échoué<br/>À : contacts de la police, sinon cabinet et contact de l'offre<br/>Type : avertissement"]:::email
    m3["EMAIL : Récupération d'une échéance échouée<br/>À : contact de l'offre<br/>Type : relance, lien de changement de carte 14 jours"]:::email
    g["Change sa carte<br/>Stripe rejoue la facture"]:::action
    m4["EMAIL : Rappel de paiement<br/>À : contact de l'offre<br/>Type : relance, lien 30 jours"]:::email
    m5["EMAIL : Second rappel de paiement<br/>À : contact de l'offre<br/>Type : relance, lien 30 jours"]:::email
    m6["EMAIL : Prochain prélèvement<br/>À : utilisateur client<br/>Type : avertissement, lien de connexion 14 jours"]:::email
    m7["EMAIL : Mandat SEPA invalidé<br/>À : utilisateur client<br/>Type : avertissement, lien de connexion 14 jours"]:::email
  end
  subgraph courtier["Courtier"]
    m2["EMAIL et PORTAIL : Paiement échoué<br/>À : tous les utilisateurs du cabinet, Inqase en copie<br/>Type : notification, email obligatoire"]:::email
  end
  s1 --> b
  b -->|à chaque échec| m1
  b -->|à chaque échec| m2
  b --> c
  b -->|échéance suivante| rec
  rec -->|une fois, 09h45| m3
  m3 --> g
  p0 -->|3 jours après l'ouverture, 09h30| m4
  p0 -->|14 jours après l'ouverture, 09h30| m5
  u -->|avant le prélèvement| m6
  mand -->|si une police existe| m7
  classDef action fill:#ffe86d,stroke:#a28e26,color:#574900
  classDef status fill:#9ce6ff,stroke:#2c97bb,color:#1c4657
  classDef problem fill:#ffb575,stroke:#b8742f,color:#5a2d00
  classDef email fill:#b8acfb,stroke:#8a7be0,color:#231266
  classDef external fill:#e5e7eb,stroke:#9ca3af,color:#374151

Les emails d’échec partent à chaque échec signalé par Stripe ; les rappels ne couvrent que les paiements jamais terminés, pas les paiements échoués.

  1. Stripe signale l’échec : le paiement passe en échec, le client et le courtier reçoivent un email.
  2. Au premier paiement, l’offre repasse à chiffrée et redevient payable. Pour une échéance suivante, la police reste en place.
  3. Une échéance échouée depuis 7 jours reçoit un lien de changement de carte, valable 14 jours. Le client change sa carte et Stripe rejoue la facture.
  4. Un paiement jamais terminé reçoit un rappel à 3 jours puis à 14 jours.
  5. Avant chaque prélèvement, Stripe annonce l’échéance : le client reçoit un email avec un lien de connexion.
  6. Un mandat SEPA invalidé alerte l’équipe sur Slack et prévient le client s’il a une police active.
  • Un premier paiement échoué ne reçoit aucune relance : les rappels visent seulement les paiements restés en attente, la récupération seulement les échéances suivantes. Que fait-on du client qui a échoué une fois ?
  • Chaque tentative échouée de Stripe renvoie l’email au client et au courtier. Combien de tentatives et à quel rythme ? Le réglage est dans Stripe, pas dans le code.
  • Un simple échec de prélèvement n’envoie aucune alerte Slack à l’équipe (seuls l’abonnement supprimé, le mandat invalidé et les litiges en envoient). Qui suit les échéances impayées, et qui décide d’une résiliation ?
  • Un abonnement supprimé passe les paiements ouverts en échec sans aucun email au client ni au courtier. Est-ce voulu ?
  • Chaque rappel ne couvre qu’une fenêtre d’un jour : si la tâche planifiée ne tourne pas un jour, la relance est perdue. Faut-il un rattrapage ?
  • Le cabinet peut recevoir deux emails d’échec (contacts de la police et notification du cabinet). Faut-il n’en garder qu’un ?

Les règles des échecs, des litiges, des remboursements et de la reprise de commission sont dans Échecs, avenants et remboursements. Les notifications Stripe sont dans Paiements.

  • app/Http/Controllers/StripeWebhookController.php
  • app/Services/PaymentService.php, app/Console/Commands/RemindPendingPayments.php, RecoverFailedPayments.php
  • app/Listeners/Broker/NotifyBrokerOfPaymentFailed.php, SendPaymentFailedNotification.php
  • app/Listeners/Stripe/, routes/console.php