Aller au contenu

Runbook — Tenant suspendu par erreur

Sévérité : Mineure (1 client impacté, gérable rapidement)
Temps de résolution attendu : 5 à 15 min

Symptômes

  • Le client appelle/email : "je n'arrive plus à me connecter, mon abonnement est-il à jour ?"
  • Page de connexion {slug}.cavalmanager.fr/login affiche "Compte suspendu, contactez le support"
  • Admin → Tenants → {slug} → status = SUSPENDED

Causes possibles

  1. Échec paiement Stripe non traité — la carte CB a été remplacée mais le webhook a raté
  2. Le cron checkSubscriptions a passé subscriptionEndsAt sans renouvellement détecté
  3. Action manuelle dans l'admin (suspension par erreur)
  4. Bug dans la logique de relance (jamais arrivé jusqu'ici, mais possible)

Diagnostic

```bash

1. État Stripe du customer

ssh -p 2222 lcdm@192.168.1.40 'sudo docker exec cm-admin-backend node -e " const Stripe = require(\"stripe\"); const stripe = new Stripe(process.env.STRIPE_SECRET_KEY); stripe.subscriptions.list({customer: \"cus_XXX\"}).then(r => console.log(JSON.stringify(r.data, null, 2))); "'

2. État côté admin

ssh -p 2222 lcdm@192.168.1.40 'sudo docker exec cm-admin-db psql -U cm_admin -d cavalmanager_admin -c " SELECT slug, status, plan, subscriptionEndsAt, stripeSubscriptionId, suspendedAt FROM \"Client\" WHERE slug = '\''{slug}'\'';"' ```

Procédure de réactivation

Si paiement Stripe OK mais status SUSPENDED :

```bash

Via admin UI : Clients → {slug} → bouton "Réactiver"

Ou via SQL d'urgence :

ssh -p 2222 lcdm@192.168.1.40 'sudo docker exec cm-admin-db psql -U cm_admin -d cavalmanager_admin -c " UPDATE \"Client\" SET status = '\''ACTIVE'\'', suspendedAt = NULL WHERE slug = '\''{slug}'\'';"'

Redémarrer les containers tenants

ssh -p 2222 lcdm@192.168.1.41 'sudo docker compose -f /opt/cavalmanager/clients/{slug}/docker-compose.yml restart backend' ```

Si paiement vraiment en échec :

  1. Envoyer le lien Stripe Customer Portal pour mettre à jour la CB
  2. Demander au client de payer la facture pending
  3. Le webhook invoice.paid réactivera automatiquement

Email type au client

Bonjour,

Suite à votre message, nous avons identifié [cause]. Votre compte est de nouveau opérationnel à https://{slug}.cavalmanager.fr.

Toutes nos excuses pour la gêne.

L'équipe CavalManager

Prévention

  • Webhooks Stripe : vérifier que TOUS les events sont bien réceptionnés (Stripe Dashboard → Webhooks)
  • Avant suspension auto : 3 rappels email (J-10, J-5, J-1) déjà envoyés par checkSubscriptions