Le FIFO expliqué
FIFO signifie First-In-First-Out (premier entré, premier sorti) - les crédits les plus anciens sont consommés en premier. Ce principe est fondamental pour le système de paiement flexible.
Le principe de base
Analogie : le lait dans le réfrigérateur
Imagine ton réfrigérateur :
- Tu achètes du lait le lundi (valable jusqu'à vendredi)
- Le mercredi, tu achètes du nouveau lait (valable jusqu'à mercredi prochain)
- Lequel bois-tu en premier ? Celui du lundi !
C'est comme ça que fonctionne le FIFO avec les crédits.
Avec les crédits
Chronologie :
─────────────────────────────────────────────────→
01.01. Achat : 10 crédits (valable jusqu'au 01.04.) [█████]
15.01. Achat : 20 crédits (valable jusqu'au 15.04.) [██████████]
Réservation le 20.01. (8 crédits) :
→ Déduction depuis les crédits les plus anciens (achat du 01.01.)
→ 2 crédits du 01.01. restants
→ 20 crédits du 15.01. non touchés
Pourquoi le FIFO ?
Avantages
- Minimise les expirations : les crédits qui expirent bientôt sont utilisés en premier
- Traitement équitable : les achats plus anciens sont débités en premier
- Transparence : une logique claire et compréhensible
- Automatique : aucune intervention manuelle nécessaire
L'alternative serait...
LIFO (Last-In-First-Out) : les crédits les plus récents en premier
- Problème : les anciens crédits expirent inutilisés
- Injuste pour les clients
Manuel : le client choisit lui-même
- Problème : compliqué, source d'erreurs
- Déroute les clients
Le FIFO en pratique
Exemple 1 : cas simple
Solde du compte :
┌─────────────────────────────────────────────────┐
│ Achat 01.01. │ 10 crédits │ valable jusqu'au 01.04. │
└─────────────────────────────────────────────────┘
Réservation : Cours de yoga pour 10 crédits
Résultat :
┌─────────────────────────────────────────────────┐
│ Achat 01.01. │ 0 crédit │ consommé │
└─────────────────────────────────────────────────┘
Exemple 2 : plusieurs forfaits
Solde du compte :
┌─────────────────────────────────────────────────┐
│ Achat 01.01. │ 5 crédits │ valable jusqu'au 01.04. │
│ Achat 15.01. │ 20 crédits │ valable jusqu'au 15.04. │
│ Achat 01.02. │ 10 crédits │ valable jusqu'au 01.05. │
└─────────────────────────────────────────────────┘
Réservation : Atelier pour 12 crédits
Logique FIFO :
1. 5 crédits de l'achat 01.01. (0 restant)
2. 7 crédits de l'achat 15.01. (13 restants)
3. Achat 01.02. non touché
Résultat :
┌─────────────────────────────────────────────────┐
│ Achat 01.01. │ 0 crédit │ consommé │
│ Achat 15.01. │ 13 crédits │ valable jusqu'au 15.04. │
│ Achat 01.02. │ 10 crédits │ valable jusqu'au 01.05. │
└─────────────────────────────────────────────────┘
Exemple 3 : avec annulation
Situation de départ après réservation :
┌─────────────────────────────────────────────────┐
│ Achat 15.01. │ 13 crédits │ valable jusqu'au 15.04. │
│ Achat 01.02. │ 10 crédits │ valable jusqu'au 01.05. │
└─────────────────────────────────────────────────┘
Le client annule la réservation de 12 crédits
Remboursement :
- 12 crédits sont "rendus"
- Nouvel enregistrement avec les dates d'expiration d'origine
Résultat :
┌─────────────────────────────────────────────────┐
│ Remb. │ 5 crédits │ valable jusqu'au 01.04. │
│ Remb. │ 7 crédits │ valable jusqu'au 15.04. │
│ Achat 15.01. │ 13 crédits │ valable jusqu'au 15.04. │
│ Achat 01.02. │ 10 crédits │ valable jusqu'au 01.05. │
└─────────────────────────────────────────────────┘
FIFO lors des annulations
Comment fonctionne le remboursement ?
En cas d'annulation :
- Les crédits sont rembookés
- La date d'expiration d'origine est conservée
- Les crédits sont triés selon la date d'expiration
- Le FIFO s'applique à nouveau lors de la prochaine réservation
Important
- Les crédits annulés n'expirent pas plus tard
- La date d'expiration d'origine est valable
- Empêche la "réinitialisation de l'expiration" via annulation + nouvelle réservation
Affichage FIFO pour les clients
Dans le portefeuille
Les clients voient leurs crédits regroupés :
Mes crédits
─────────────────────────────────────
5 crédits │ expire le 01.04.
20 crédits │ expire le 15.04.
10 crédits │ expire le 01.05.
─────────────────────────────────────
Total : 35 crédits
Lors d'une réservation
Réservation : Pilates pour 8 crédits
Crédits utilisés :
- 5 crédits (expirant le 01.04.)
- 3 crédits (expirant le 15.04.)
Solde après réservation : 27 crédits
Cas particuliers
Mêmes dates d'expiration
Si plusieurs forfaits expirent le même jour :
- L'achat le plus ancien est utilisé en premier
- Basé sur l'horodatage d'achat
Crédits illimités
Les crédits sans date d'expiration :
- Sont utilisés en dernier
- Les crédits qui expirent ont la priorité
Crédits liés à un coach
- Utilisés uniquement pour les cours correspondants
- Le FIFO s'applique au sein des crédits coach
- Les crédits classiques restent non touchés
FAQ sur le FIFO
Puis-je désactiver le FIFO ?
Non, le FIFO est ancré dans le système. C'est la méthode la plus juste et la plus transparente.
Puis-je "réserver" certains crédits ?
Non, les crédits sont toujours consommés selon le FIFO. Une sélection manuelle n'est pas possible.
Que se passe-t-il si une seule partie d'un forfait suffit ?
Les crédits sont combinés entre forfaits. Si le forfait A n'a que 3 crédits et qu'il t'en faut 5, 3 sont pris du forfait A et 2 du forfait suivant.
Les crédits expirés sont-ils remboursés lors d'une annulation ?
Non. Si les crédits avaient déjà expiré au moment de l'annulation, il n'y a pas de remboursement.
Détails techniques
Modèle de données
Chaque entrée de crédit possède :
amount: nombre de créditsremaining: crédits restantspurchased_at: date d'achatexpires_at: date d'expirationuser_id: client associé
Requête FIFO
SELECT * FROM credits
WHERE user_id = $userId
AND remaining > 0
AND (expires_at IS NULL OR expires_at > NOW())
ORDER BY expires_at ASC NULLS LAST, purchased_at ASC
Résumé
| Aspect | Comportement FIFO |
|---|---|
| Consommation | Crédits les plus anciens en premier |
| Tri | Par date d'expiration, puis date d'achat |
| Annulation | La date d'expiration d'origine est conservée |
| Crédits illimités | Utilisés en dernier |
| Désactivation | Impossible (by design) |