# language: fr

@api @premium @payment @mvp
Fonctionnalité: Webhooks et retry automatique des paiements

  En tant que système de paiement
  Je veux gérer les échecs de paiement avec retry intelligent
  Afin de maximiser les conversions et minimiser le churn

  Scénario: Webhook Mangopay de paiement réussi
    Étant donné un abonnement Premium en cours
    Quand Mangopay envoie un webhook "PAYIN_NORMAL_SUCCEEDED"
    Alors le système enregistre le paiement
    Et l'abonnement est prolongé de 30 jours
    Et un email de confirmation est envoyé
    Et un événement "PAYMENT_SUCCESS_WEBHOOK_RECEIVED" est enregistré

  Scénario: Webhook de paiement échoué
    Étant donné un abonnement Premium
    Quand Mangopay envoie un webhook "PAYIN_NORMAL_FAILED"
    Alors le système programme un retry automatique
    Et l'utilisateur est notifié: "Échec de paiement. Nous réessayerons dans 3 jours."
    Et un événement "PAYMENT_FAILED_WEBHOOK_RECEIVED" est enregistré

  Scénario: Retry automatique après 3 jours
    Étant donné un paiement échoué il y a 3 jours
    Quand le système tente un retry automatique
    Alors une nouvelle tentative de prélèvement est lancée
    Et l'utilisateur reçoit un email: "Nouvelle tentative de paiement en cours"
    Et un événement "PAYMENT_RETRY_ATTEMPTED" est enregistré

  Scénario: Série de retries intelligents (3, 7, 14 jours)
    Étant donné un premier échec de paiement
    Alors le système programme:
      | Retry | Délai      | Statut abonnement |
      | 1     | J+3        | Actif             |
      | 2     | J+7        | Actif             |
      | 3     | J+14       | Suspendu          |
    Et après le 3ème échec, l'abonnement est annulé
    Et un événement "PAYMENT_RETRY_SERIES_CONFIGURED" est enregistré

  Scénario: Suspension de l'abonnement après 3 échecs
    Étant donné 3 tentatives de paiement échouées
    Quand le 3ème retry échoue
    Alors l'abonnement est suspendu
    Et l'utilisateur repasse en mode Free
    Et un email explique comment mettre à jour la carte
    Et un événement "SUBSCRIPTION_SUSPENDED_PAYMENT_FAILURE" est enregistré

  Scénario: Webhook de carte expirée
    Étant donné un abonnement avec carte expirant ce mois
    Quand Mangopay envoie un webhook "CARD_EXPIRING"
    Alors une notification est envoyée 30 jours avant
    Et rappelée 7 jours avant
    Et le jour de l'expiration
    Et un événement "CARD_EXPIRY_WARNING_SENT" est enregistré

  Scénario: Mise à jour de carte et reprise de l'abonnement
    Étant donné un utilisateur avec abonnement suspendu
    Quand il met à jour sa carte bancaire
    Alors un paiement est immédiatement tenté
    Et si succès, l'abonnement est réactivé
    Et les jours perdus sont récupérés pro-rata
    Et un événement "SUBSCRIPTION_REACTIVATED_AFTER_PAYMENT" est enregistré

  Scénario: Webhooks de remboursement
    Étant donné un utilisateur qui annule son abonnement
    Et demande un remboursement (satisfait ou remboursé 30j)
    Quand Mangopay envoie "PAYOUT_NORMAL_SUCCEEDED"
    Alors le remboursement est enregistré
    Et l'utilisateur reçoit confirmation
    Et un événement "REFUND_WEBHOOK_PROCESSED" est enregistré

  Scénario: Métriques de performance des retries
    Étant donné que 1000 paiements ont échoué
    Alors les indicateurs suivants sont disponibles:
      | Métrique                        | Valeur |
      | Taux de succès au 1er retry (J+3)| 45%    |
      | Taux de succès au 2ème retry (J+7)| 25%   |
      | Taux de succès au 3ème retry (J+14)| 10%  |
      | Taux de récupération global     | 80%    |
      | Taux d'annulation définitive    | 20%    |
    Et les métriques sont exportées vers le monitoring
