# 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.