# 1. Flux de paiement en ligne (via QR Code)

Ce flux est destiné aux utilisateurs non authentifiés qui paient pour une session de recharge unique via une carte de crédit.

### Étapes du flux

1.  **Initiation** : L'utilisateur scanne un QR code sur une borne de recharge, ce qui le redirige vers une page web dédiée à cette borne.

2.  **Création d'une intention de paiement** :
    *   Le frontend appelle l'API pour créer une intention de paiement : `GET /api/payments/evse/:slug/with-capture`.
    *   Le backend crée une intention de paiement (Payment Intent) auprès de Stripe avec la méthode de capture manuelle (`capture_method: 'manual'`). Cela autorise un montant pré-défini sans le débiter immédiatement.
    *   Un enregistrement est créé dans la table `payments` avec le statut `PAYMENT_CREATED` et un `tagId` temporaire est généré.
    *   L'API retourne un `client_secret` au frontend.

3.  **Confirmation du paiement par l'utilisateur** :
    *   Le frontend utilise le `client_secret` pour afficher le formulaire de paiement Stripe.
    *   L'utilisateur saisit ses informations de carte bancaire et valide le paiement.

4.  **Démarrage de la transaction** :
    *   Une fois le paiement confirmé côté client, le frontend appelle l'API : `POST /api/payments/remote-start-after-payment-confirmed`.
    *   Le backend vérifie la validité du paiement, met à jour le statut de l'enregistrement `payments` à `PAYMENT_CONFIRMED`.
    *   Le backend envoie une commande `RemoteStartTransaction` à la borne via le protocole OCPP, en utilisant le `tagId` temporaire.
5.  **Session de recharge** : La session de recharge est active. Un enregistrement est créé dans la table `transactions` et lié à l'enregistrement `payments`.

6.  **Arrêt de la transaction** :
    *   L'utilisateur arrête la recharge depuis la page web, ce qui déclenche un appel à `POST /api/payments/transaction/:idOrSlug/stop`.
    *   La borne envoie une notification `StopTransaction` au backend.

7.  **Capture du paiement** :
    *   La notification `StopTransaction` déclenche un événement `transaction-payment-capture`.
    *   Un service écoute cet événement et appelle la méthode `paymentsService.capturePaymentWithCapture()`.
    *   Cette méthode finalise la transaction Stripe en capturant le montant final de la recharge (le coût réel de l'énergie consommée).
    *   Le statut de l'enregistrement `payments` est mis à jour à `PAYMENT_CAPTURED`.