Files
app_fideliter/README.md
T
Mathew 1d3ee69c6d Initial commit — app fidélité magasin (tablette)
App Flutter de programme de fidélité : login staff, clients (nom/prénom),
scan QR, factures (€→points), récompenses, réglages. Backend Supabase
(schéma SQL + RLS anti-triche dans supabase/). Icône incluse.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 21:37:06 +02:00

92 lines
3.9 KiB
Markdown

# Fidélité — App magasin (tablette)
App Android (Flutter) de **programme de fidélité** pour un magasin, conçue pour
une tablette en caisse. Chaque client a une **carte de fidélité = un QR code** :
on le scanne, on ajoute ses factures, il cumule des **points**, qu'il peut
échanger contre des **récompenses**.
**Backend : Supabase** (comptes + données partagées avec l'app client
[`app_fideliter_client`](../app_fideliter_client)). La tablette se connecte avec
un compte **staff** (personnel du magasin).
App sœur de [`gestion_prix_produit`](../gestion_prix_produit) : même stack et même
design (Material 3, noir & blanc + accent vert émeraude pour la distinguer sur la
même tablette).
## Fonctions
- **Connexion staff** : email + mot de passe (compte staff, voir SETUP).
- **Clients** : liste, recherche (nom / téléphone / code), création « au comptoir »
(code unique + QR générés côté serveur).
- **Scanner** : scan du QR d'un client → ouverture directe de sa fiche.
(Caméra de la tablette ; la scanette externe viendra ensuite.)
- **Fiche client** : solde de points, **ajout d'une facture** (montant € → points
selon le ratio), **utilisation d'une récompense** (débit), historique, correction
manuelle.
- **Récompenses** : catalogue (ex : « Café offert » = 10 pts), activer/désactiver.
- **Réglages** : **ratio** « euros pour 1 point », nom du magasin, déconnexion.
### Calcul des points
`points gagnés = montant de la facture ÷ (euros par point)`
Points **fractionnaires**. Ex : avec 1 pt = 10 €, une facture de 12 € rapporte
`1,2 pt`. Le solde est recalculé **côté base** (trigger) à chaque mouvement, donc
fiable même si plusieurs appareils écrivent.
## Configuration (à faire une fois)
Voir **[`supabase/SETUP.md`](supabase/SETUP.md)** : créer le projet Supabase,
exécuter [`supabase/schema.sql`](supabase/schema.sql), coller l'URL + la clé anon
dans [`lib/supabase_config.dart`](lib/supabase_config.dart), créer le compte staff.
## Techno
- Flutter (Material 3, thème noir & blanc + accent vert)
- `supabase_flutter` (auth staff + base de données partagée)
- `mobile_scanner` (scan du QR), `qr_flutter` (affichage du QR d'un client)
## Lancer l'app
```bash
flutter run
```
## Structure
```text
lib/
├── main.dart # init (locale fr, Supabase) + thème
├── config.dart # constantes par défaut
├── supabase_config.dart # URL + clé anon (À REMPLIR)
├── theme.dart
├── models/ # client, mouvement, recompense
├── services/
│ ├── reglages.dart # ratio €/point + nom magasin (Supabase)
│ ├── client_repository.dart # clients + factures + récompenses (Supabase)
│ └── recompense_repository.dart # catalogue (Supabase)
├── screens/
│ ├── auth_gate.dart # login staff ↔ app selon la session
│ ├── staff_login_screen.dart
│ ├── home_shell.dart # 4 onglets + navigation
│ ├── clients_screen.dart
│ ├── client_edit_screen.dart
│ ├── client_detail_screen.dart
│ ├── scan_screen.dart
│ ├── recompenses_screen.dart
│ └── reglages_screen.dart
├── widgets/ # pastille_points, qr_client
└── utils/format.dart
supabase/
├── schema.sql # tables + triggers + sécurité (RLS)
└── SETUP.md # guide de configuration
```
## Prochaines étapes (roadmap)
1. **Scanette externe** : le lecteur se comporte comme un clavier — un champ caché
reçoit le code et appelle `scan_screen.dart``_ouvrirParCode` (déjà factorisé).
2. **Temps réel** : abonnement Supabase Realtime pour mettre à jour les soldes
sans rafraîchir.
3. Impression du QR (carte physique), statistiques, bonus de bienvenue / paliers.