# TODO-APP.md ## 📋 Liste des tĂąches Ă  effectuer sur l'application GEOSECTOR ### 🔧 Migration du pattern de gestion des erreurs API #### 🎯 Objectif Appliquer le nouveau pattern de gestion des erreurs pour que tous les messages spĂ©cifiques de l'API soient correctement affichĂ©s aux utilisateurs (au lieu du message gĂ©nĂ©rique "Erreur inattendue"). --- ### ✅ Repositories dĂ©jĂ  migrĂ©s - [x] **MembreRepository** (`lib/core/repositories/membre_repository.dart`) - ✅ Conversion DioException → ApiException - ✅ Simplification du code - ✅ Logs avec LoggerService --- ### 📝 Repositories Ă  migrer #### 1. **UserRepository** (`lib/core/repositories/user_repository.dart`) - [ ] VĂ©rifier/ajouter l'import `ApiException` - [ ] Simplifier `updateUser()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `syncUser()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `syncAllUsers()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Remplacer `debugPrint` par `LoggerService` - [ ] AmĂ©liorer la gestion des erreurs dans le bloc catch (ne pas logger DioException) #### 2. **OperationRepository** (`lib/core/repositories/operation_repository.dart`) - [ ] VĂ©rifier/ajouter l'import `ApiException` - [ ] Simplifier `createOperation()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `updateOperation()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `deleteOperation()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `activateOperation()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Remplacer `debugPrint` par `LoggerService` - [ ] AmĂ©liorer la gestion des erreurs dans le bloc catch (ne pas logger DioException) #### 3. **PassageRepository** (`lib/core/repositories/passage_repository.dart`) - [ ] VĂ©rifier/ajouter l'import `ApiException` - [ ] Simplifier `createPassage()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `updatePassage()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `updatePassageStatus()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `syncPassages()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Remplacer `debugPrint` par `LoggerService` - [ ] AmĂ©liorer la gestion des erreurs dans le bloc catch (ne pas logger DioException) #### 4. **SectorRepository** (`lib/core/repositories/sector_repository.dart`) - [ ] VĂ©rifier/ajouter l'import `ApiException` - [ ] Simplifier `createSector()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `updateSector()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `deleteSector()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `assignUserToSector()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Remplacer `debugPrint` par `LoggerService` - [ ] AmĂ©liorer la gestion des erreurs dans le bloc catch (ne pas logger DioException) #### 5. **AmicaleRepository** (`lib/core/repositories/amicale_repository.dart`) - [ ] VĂ©rifier/ajouter l'import `ApiException` - [ ] Simplifier `updateAmicale()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `createAmicale()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Simplifier `syncAmicales()` - supprimer les vĂ©rifications de statut aprĂšs l'appel API - [ ] Remplacer `debugPrint` par `LoggerService` - [ ] AmĂ©liorer la gestion des erreurs dans le bloc catch (ne pas logger DioException) --- ### đŸ› ïž Pattern Ă  appliquer #### ❌ Code Ă  supprimer (ancien pattern) ```dart try { final response = await ApiService.instance.put('/endpoint', data: data); if (response.statusCode == 200) { // Traitement succĂšs return true; } // ⚠ Ce code ne sera JAMAIS exĂ©cutĂ© if (response.data != null && response.data is Map) { final responseData = response.data as Map; if (responseData['status'] == 'error') { throw Exception(responseData['message']); } } return false; } catch (e) { debugPrint('Erreur: $e'); rethrow; } ``` #### ✅ Nouveau pattern Ă  utiliser ```dart try { final response = await ApiService.instance.put('/endpoint', data: data); // Si on arrive ici, la requĂȘte a rĂ©ussi (200/201) // Traitement succĂšs return true; } catch (e) { // Log propre sans dĂ©tails techniques if (e is ApiException) { LoggerService.error('Erreur lors de l\'opĂ©ration: ${e.message}'); } else { LoggerService.error('Erreur lors de l\'opĂ©ration'); } rethrow; // Propager pour affichage UI } ``` --- ### 📩 Imports nĂ©cessaires Ajouter ces imports dans chaque repository si manquants : ```dart import 'package:geosector_app/core/services/logger_service.dart'; import 'package:geosector_app/core/utils/api_exception.dart'; ``` --- ### đŸ§Ș Tests de validation Pour chaque repository migrĂ©, tester : 1. **Test d'erreur 409 (Conflict)** : - CrĂ©er/modifier avec un email dĂ©jĂ  existant - VĂ©rifier que le message "Cet email est dĂ©jĂ  utilisĂ©" s'affiche 2. **Test d'erreur 400 (Bad Request)** : - Envoyer des donnĂ©es invalides - VĂ©rifier que le message d'erreur spĂ©cifique s'affiche 3. **Test d'erreur rĂ©seau** : - Couper la connexion - VĂ©rifier que "ProblĂšme de connexion rĂ©seau" s'affiche 4. **Test de succĂšs** : - OpĂ©ration normale - VĂ©rifier que tout fonctionne comme avant --- ### 📊 CritĂšres de succĂšs - [ ] Tous les repositories utilisent le nouveau pattern - [ ] Plus aucun `debugPrint` dans les repositories (remplacĂ© par `LoggerService`) - [ ] Les messages d'erreur spĂ©cifiques de l'API s'affichent correctement - [ ] Les logs en production sont dĂ©sactivĂ©s (sauf erreurs) - [ ] Le code est plus simple et maintenable --- ### 🔍 Commandes utiles pour vĂ©rifier ```bash # Rechercher les anciens patterns Ă  remplacer grep -r "response.statusCode ==" lib/core/repositories/ grep -r "responseData\['status'\] == 'error'" lib/core/repositories/ grep -r "debugPrint" lib/core/repositories/ # VĂ©rifier les imports manquants grep -L "LoggerService" lib/core/repositories/*.dart grep -L "ApiException" lib/core/repositories/*.dart ``` --- ### 📅 PrioritĂ© 1. **Haute** : UserRepository (utilisĂ© partout) 2. **Haute** : OperationRepository (fonctionnalitĂ© critique) 3. **Moyenne** : PassageRepository (utilisĂ© frĂ©quemment) 4. **Moyenne** : AmicaleRepository (gestion administrative) 5. **Basse** : SectorRepository (moins critique) --- ### 📝 Notes - Cette migration amĂ©liore l'UX en affichant des messages d'erreur clairs - Le LoggerService dĂ©sactive automatiquement les logs en production - Le code devient plus maintenable et cohĂ©rent - Documenter dans README-APP.md une fois terminĂ© --- ## đŸ§Ș Tests unitaires Flutter Ă  implĂ©menter ### 📁 Structure des tests Le dossier `/test` doit contenir des tests unitaires pour valider le comportement de l'application. ### 📝 Tests prioritaires Ă  crĂ©er #### 1. **Tests des Repositories** (`test/repositories/`) ##### `test/repositories/membre_repository_test.dart` - [ ] Test de crĂ©ation d'un membre avec succĂšs - [ ] Test de crĂ©ation avec email dĂ©jĂ  existant (409) - [ ] Test de mise Ă  jour d'un membre - [ ] Test de suppression d'un membre - [ ] Test de gestion des erreurs rĂ©seau - [ ] Test du cache Hive local ##### `test/repositories/user_repository_test.dart` - [ ] Test de connexion rĂ©ussie - [ ] Test de connexion avec mauvais identifiants - [ ] Test de mise Ă  jour du profil utilisateur - [ ] Test de synchronisation des donnĂ©es - [ ] Test de gestion de session ##### `test/repositories/operation_repository_test.dart` - [ ] Test de crĂ©ation d'opĂ©ration - [ ] Test d'activation/dĂ©sactivation - [ ] Test de rĂ©cupĂ©ration des opĂ©rations par amicale - [ ] Test de suppression avec transfert de passages #### 2. **Tests des Services** (`test/services/`) ##### `test/services/api_service_test.dart` - [ ] Test de dĂ©tection d'environnement (DEV/REC/PROD) - [ ] Test de gestion des sessions - [ ] Test de conversion DioException vers ApiException - [ ] Test des diffĂ©rents codes d'erreur HTTP - [ ] Test du retry automatique ##### `test/services/logger_service_test.dart` - [ ] Test de dĂ©sactivation des logs en PROD - [ ] Test des diffĂ©rents niveaux de log - [ ] Test du formatage des messages ##### `test/services/hive_service_test.dart` - [ ] Test d'initialisation des boĂźtes Hive - [ ] Test de sauvegarde et rĂ©cupĂ©ration - [ ] Test de suppression de donnĂ©es - [ ] Test de migration de schĂ©ma #### 3. **Tests des Models** (`test/models/`) ##### `test/models/membre_model_test.dart` - [ ] Test de sĂ©rialisation JSON - [ ] Test de dĂ©sĂ©rialisation JSON - [ ] Test de conversion vers UserModel - [ ] Test des valeurs par dĂ©faut ##### `test/models/amicale_model_test.dart` - [ ] Test de sĂ©rialisation/dĂ©sĂ©rialisation - [ ] Test des nouveaux champs boolĂ©ens (chk_mdp_manuel, chk_username_manuel) - [ ] Test de validation des donnĂ©es #### 4. **Tests des Widgets** (`test/widgets/`) ##### `test/widgets/user_form_test.dart` - [ ] Test d'affichage conditionnel des champs (username/password) - [ ] Test de validation du mot de passe (regex) - [ ] Test de validation de l'username (pas d'espaces) - [ ] Test de gĂ©nĂ©ration automatique d'username - [ ] Test du mode crĂ©ation vs modification ##### `test/widgets/membre_table_widget_test.dart` - [ ] Test d'affichage responsive (mobile vs web) - [ ] Test de masquage des colonnes sur mobile - [ ] Test des icĂŽnes de statut - [ ] Test du tri et filtrage #### 5. **Tests d'intĂ©gration** (`test/integration/`) ##### `test/integration/auth_flow_test.dart` - [ ] Test du flow complet de connexion - [ ] Test de persistance de session - [ ] Test de dĂ©connexion - [ ] Test de redirection aprĂšs expiration ##### `test/integration/membre_management_test.dart` - [ ] Test de crĂ©ation complĂšte d'un membre - [ ] Test de modification avec validation - [ ] Test de suppression avec transfert - [ ] Test de gestion des erreurs ### đŸ› ïž Configuration des tests #### Fichier `test/test_helpers.dart` ```dart import 'package:flutter_test/flutter_test.dart'; import 'package:mockito/mockito.dart'; import 'package:dio/dio.dart'; import 'package:hive_flutter/hive_flutter.dart'; // Mocks nĂ©cessaires class MockDio extends Mock implements Dio {} class MockBox extends Mock implements Box {} class MockApiService extends Mock implements ApiService {} // Helper pour initialiser Hive en tests Future setupTestHive() async { await Hive.initFlutter(); // Initialiser les boĂźtes de test } // Helper pour nettoyer aprĂšs les tests Future tearDownTestHive() async { await Hive.deleteFromDisk(); } // Helper pour crĂ©er des donnĂ©es de test class TestDataFactory { static UserModel createTestUser() { return UserModel( id: 1, username: 'test_user', email: 'test@example.com', // ... ); } static MembreModel createTestMembre() { return MembreModel( id: 1, fkEntite: 100, name: 'Test', firstName: 'User', // ... ); } } ``` ### 📋 Commandes de test ```bash # Lancer tous les tests flutter test # Lancer un test spĂ©cifique flutter test test/repositories/membre_repository_test.dart # Lancer avec coverage flutter test --coverage # GĂ©nĂ©rer un rapport HTML de couverture genhtml coverage/lcov.info -o coverage/html open coverage/html/index.html ``` ### 🎯 Objectifs de couverture - [ ] **Repositories** : 80% minimum - [ ] **Services** : 90% minimum - [ ] **Models** : 95% minimum - [ ] **Widgets critiques** : 70% minimum - [ ] **Couverture globale** : 75% minimum ### 📚 DĂ©pendances de test Ă  ajouter Dans `pubspec.yaml` : ```yaml dev_dependencies: flutter_test: sdk: flutter mockito: ^5.4.4 build_runner: ^2.4.8 test: ^1.25.2 flutter_lints: ^4.0.0 coverage: ^1.7.2 ``` ### 🔄 IntĂ©gration CI/CD Ajouter dans le pipeline CI : ```yaml test: stage: test script: - flutter test --coverage - genhtml coverage/lcov.info -o coverage/html artifacts: paths: - coverage/ coverage: '/lines\.*: \d+\.\d+\%/' ``` ### 📝 Bonnes pratiques 1. **Isolation** : Chaque test doit ĂȘtre indĂ©pendant 2. **Mocking** : Utiliser des mocks pour les dĂ©pendances externes 3. **Nommage** : Utiliser des noms descriptifs (test_should_xxx_when_yyy) 4. **AAA** : Suivre le pattern Arrange-Act-Assert 5. **Edge cases** : Tester les cas limites et erreurs 6. **Performance** : Les tests unitaires doivent ĂȘtre rapides (<100ms) --- ## 💬 Module Chat en ligne GEOSECTOR ### 📋 Vue d'ensemble Le module chat est partiellement implĂ©mentĂ© avec une architecture MQTT pour les notifications en temps rĂ©el. Il nĂ©cessite des dĂ©veloppements supplĂ©mentaires pour ĂȘtre pleinement fonctionnel. ### đŸ—ïž Architecture existante ``` lib/chat/ ├── models/ # ✅ ModĂšles créés avec Hive │ ├── conversation_model.dart # Conversations (one-to-one, groupe, annonce) │ ├── message_model.dart # Messages avec piĂšces jointes │ ├── participant_model.dart # Participants aux conversations │ └── audience_target_model.dart # Cibles pour les annonces ├── repositories/ # ⚠ À complĂ©ter │ └── chat_repository.dart # Logique mĂ©tier du chat ├── services/ # ⚠ Partiellement implĂ©mentĂ© │ ├── chat_api_service.dart # Communication avec l'API │ ├── offline_queue_service.dart # File d'attente hors ligne │ └── notifications/ # 🔧 MQTT configurĂ© │ ├── mqtt_notification_service.dart │ └── mqtt_config.dart ├── widgets/ # ⚠ À implĂ©menter │ ├── chat_screen.dart # Écran principal du chat │ ├── conversations_list.dart # Liste des conversations │ ├── message_bubble.dart # Bulles de messages │ └── chat_input.dart # Zone de saisie └── pages/ # ⚠ À complĂ©ter └── chat_page.dart # Page principale ``` ### 📝 TĂąches de dĂ©veloppement Chat #### 1. **Finalisation des modĂšles Hive** - [ ] ComplĂ©ter les adaptateurs Hive pour tous les modĂšles - [ ] Ajouter la gestion des piĂšces jointes (images, documents) - [ ] ImplĂ©menter le modĂšle `AnonymousUserModel` pour les utilisateurs temporaires - [ ] Ajouter les timestamps et statuts de lecture #### 2. **Repository ChatRepository** - [ ] ImplĂ©menter `createConversation()` avec participants - [ ] ImplĂ©menter `sendMessage()` avec queue hors ligne - [ ] ImplĂ©menter `getConversations()` avec pagination - [ ] ImplĂ©menter `getMessages()` avec lazy loading - [ ] Ajouter la gestion des participants (ajout/suppression) - [ ] ImplĂ©menter les annonces ciblĂ©es par groupe #### 3. **Services** - [ ] ComplĂ©ter `ChatApiService` avec endpoints REST - [ ] ImplĂ©menter la synchronisation bidirectionnelle - [ ] Configurer `OfflineQueueService` pour messages en attente - [ ] ImplĂ©menter le retry automatique avec exponential backoff - [ ] Ajouter la compression des images avant envoi #### 4. **Notifications MQTT** - [ ] Installer et configurer Mosquitto dans le container Incus - [ ] Configurer SSL/TLS pour MQTT (port 8883) - [ ] ImplĂ©menter l'authentification par token JWT - [ ] CrĂ©er les topics par utilisateur/groupe/conversation - [ ] ImplĂ©menter le systĂšme de prĂ©sence (online/offline/typing) - [ ] Ajouter les ACLs pour sĂ©curiser les topics #### 5. **Interface utilisateur** - [ ] CrĂ©er `ChatScreen` avec liste de messages - [ ] ImplĂ©menter `ConversationsList` avec badges non-lus - [ ] Designer `MessageBubble` (texte, images, documents) - [ ] CrĂ©er `ChatInput` avec: - [ ] Saisie de texte avec emoji picker - [ ] Bouton d'envoi de fichiers - [ ] Indicateur "en train d'Ă©crire" - [ ] Enregistrement vocal (optionnel) - [ ] Ajouter les animations (apparition messages, typing indicator) - [ ] ImplĂ©menter le swipe pour rĂ©pondre - [ ] Ajouter la recherche dans les conversations #### 6. **FonctionnalitĂ©s avancĂ©es** - [ ] Notifications push locales via `flutter_local_notifications` - [ ] Chiffrement end-to-end des messages sensibles - [ ] RĂ©actions aux messages (emojis) - [ ] Messages Ă©phĂ©mĂšres avec auto-suppression - [ ] Partage de localisation en temps rĂ©el - [ ] Appels audio/vidĂ©o via WebRTC (phase 2) ### 🔧 Configuration backend requise #### Base de donnĂ©es ```sql -- Tables Ă  crĂ©er (voir chat_tables.sql) CREATE TABLE chat_conversations ( id INT PRIMARY KEY AUTO_INCREMENT, type ENUM('one_to_one', 'group', 'announcement'), created_by INT, created_at TIMESTAMP, updated_at TIMESTAMP ); CREATE TABLE chat_messages ( id INT PRIMARY KEY AUTO_INCREMENT, conversation_id INT, sender_id INT, content TEXT, type ENUM('text', 'image', 'file', 'location'), status ENUM('sent', 'delivered', 'read'), created_at TIMESTAMP ); CREATE TABLE chat_participants ( conversation_id INT, user_id INT, role ENUM('admin', 'member'), joined_at TIMESTAMP, last_read_message_id INT ); ``` #### Configuration MQTT ```bash # Installation Mosquitto apt-get install mosquitto mosquitto-clients # Configuration /etc/mosquitto/mosquitto.conf listener 1883 listener 8883 cafile /etc/mosquitto/ca.crt certfile /etc/mosquitto/server.crt keyfile /etc/mosquitto/server.key allow_anonymous false password_file /etc/mosquitto/passwd ``` ### 📩 DĂ©pendances Ă  ajouter ```yaml dependencies: # MQTT et notifications mqtt5_client: ^4.0.0 flutter_local_notifications: ^17.0.0 # UI et UX emoji_picker_flutter: ^2.0.0 cached_network_image: ^3.3.1 photo_view: ^0.14.0 file_picker: ^6.1.1 # Utilitaires path_provider: ^2.1.2 image_picker: ^1.0.7 image: ^4.1.7 # Pour compression intl: ^0.19.0 # Pour formatage dates ``` ### đŸ§Ș Tests Ă  implĂ©menter - [ ] Tests unitaires des repositories - [ ] Tests d'intĂ©gration MQTT - [ ] Tests de performance (1000+ messages) - [ ] Tests hors ligne/online - [ ] Tests de sĂ©curitĂ© (injection, XSS) --- ## 💳 Module de paiement Stripe ### 📋 Vue d'ensemble IntĂ©gration de Stripe pour permettre aux amicales ayant activĂ© `chk_stripe` d'accepter les paiements par carte bancaire avec une commission de 1.4%. ### 🎯 Objectifs 1. Permettre le paiement en ligne lors des passages 2. GĂ©rer les comptes Stripe des amicales 3. Suivre les transactions et commissions 4. Offrir une expĂ©rience de paiement fluide ### 📝 TĂąches de dĂ©veloppement Stripe #### 1. **Configuration initiale Stripe** - [ ] CrĂ©er un compte Stripe Connect Platform - [ ] Configurer les webhooks Stripe - [ ] Mettre en place l'environnement de test (sandbox) - [ ] Configurer les clĂ©s API (publishable/secret) - [ ] ImplĂ©menter la gestion sĂ©curisĂ©e des clĂ©s #### 2. **Onboarding des amicales** - [ ] CrĂ©er un workflow d'inscription Stripe pour les amicales - [ ] ImplĂ©menter Stripe Connect Onboarding - [ ] GĂ©rer le KYC (Know Your Customer) requis par Stripe - [ ] Stocker de maniĂšre sĂ©curisĂ©e le `stripe_account_id` - [ ] CrĂ©er une page de statut du compte Stripe - [ ] GĂ©rer les documents requis (RIB, statuts, etc.) #### 3. **ModĂšles de donnĂ©es** - [ ] CrĂ©er `StripeAccountModel` pour les comptes Connect - [ ] CrĂ©er `PaymentIntentModel` pour les intentions de paiement - [ ] CrĂ©er `TransactionModel` pour l'historique - [ ] Ajouter les champs Stripe dans `PassageModel` - [ ] ImplĂ©menter la table des commissions #### 4. **Service StripeService** ```dart class StripeService { // Compte Connect Future createConnectAccount(AmicaleModel amicale); Future updateAccountStatus(String accountId); Future createAccountLink(String accountId); // Paiements Future createPaymentIntent({ required double amount, required String currency, required String connectedAccountId, }); Future confirmPayment(String paymentIntentId); Future refundPayment(String paymentIntentId); // Commissions double calculateApplicationFee(double amount); // 1.4% } ``` #### 5. **Interface de paiement dans PassageForm** - [ ] DĂ©tecter si l'amicale accepte Stripe (`chk_stripe`) - [ ] Ajouter l'option "Paiement par carte" dans le dropdown - [ ] IntĂ©grer Stripe Elements pour la saisie de carte - [ ] ImplĂ©menter le flow de paiement 3D Secure - [ ] GĂ©rer les erreurs de paiement - [ ] Afficher le reçu de paiement - [ ] Permettre l'envoi du reçu par email #### 6. **Widget StripePaymentSheet** ```dart class StripePaymentSheet extends StatefulWidget { final double amount; final String currency; final AmicaleModel amicale; final Function(String) onSuccess; final Function(String) onError; // UI avec: // - Montant Ă  payer // - Formulaire de carte (Stripe Elements) // - Bouton de validation // - Indicateur de traitement // - Gestion 3D Secure } ``` #### 7. **Tableau de bord financier** - [ ] Page de suivi des transactions Stripe - [ ] Graphiques des paiements par pĂ©riode - [ ] Export des transactions (CSV/Excel) - [ ] Calcul automatique des commissions - [ ] Rapprochement bancaire - [ ] Dashboard temps rĂ©el des paiements #### 8. **Webhooks Stripe** ```php // Backend PHP pour gĂ©rer les webhooks class StripeWebhookHandler { // Events Ă  gĂ©rer: - payment_intent.succeeded - payment_intent.failed - account.updated - payout.created - refund.created } ``` #### 9. **SĂ©curitĂ©** - [ ] Chiffrement des donnĂ©es sensibles - [ ] Validation PCI DSS - [ ] Audit trail des transactions - [ ] DĂ©tection de fraude - [ ] Rate limiting sur les API - [ ] Tokenisation des cartes #### 10. **Tests et conformitĂ©** - [ ] Tests avec cartes de test Stripe - [ ] Tests des cas d'erreur (carte refusĂ©e, etc.) - [ ] Tests 3D Secure - [ ] Tests de performance - [ ] ConformitĂ© RGPD pour les donnĂ©es de paiement - [ ] Documentation utilisateur ### 🔧 Configuration backend requise #### Tables base de donnĂ©es ```sql CREATE TABLE stripe_accounts ( id INT PRIMARY KEY AUTO_INCREMENT, fk_entite INT NOT NULL, stripe_account_id VARCHAR(255) ENCRYPTED, status ENUM('pending', 'active', 'restricted'), charges_enabled BOOLEAN DEFAULT FALSE, payouts_enabled BOOLEAN DEFAULT FALSE, created_at TIMESTAMP, updated_at TIMESTAMP ); CREATE TABLE stripe_transactions ( id INT PRIMARY KEY AUTO_INCREMENT, fk_passage INT, stripe_payment_intent_id VARCHAR(255), amount DECIMAL(10,2), currency VARCHAR(3), status VARCHAR(50), application_fee DECIMAL(10,2), created_at TIMESTAMP ); ``` #### Variables d'environnement ```env STRIPE_PUBLISHABLE_KEY=pk_test_xxx STRIPE_SECRET_KEY=sk_test_xxx STRIPE_WEBHOOK_SECRET=whsec_xxx STRIPE_APPLICATION_FEE_PERCENT=1.4 ``` ### 📩 DĂ©pendances Stripe ```yaml dependencies: # Stripe flutter_stripe: ^10.1.1 # SĂ©curitĂ© flutter_secure_storage: ^9.0.0 # UI shimmer: ^3.0.0 # Loading states lottie: ^3.1.0 # Animations succĂšs/Ă©chec ``` ### 🚀 Roadmap d'implĂ©mentation **Phase 1 (2 semaines)** - Configuration Stripe Connect - Onboarding basique des amicales - Tests en sandbox **Phase 2 (3 semaines)** - IntĂ©gration dans PassageForm - Gestion des paiements simples - Webhooks essentiels **Phase 3 (2 semaines)** - Dashboard financier - Export et rapports - Tests complets **Phase 4 (1 semaine)** - Mise en production - Monitoring - Documentation ### 💰 Estimation des coĂ»ts - **Stripe Connect** : 0.25€ par compte actif/mois - **Transactions** : 1.4% + 0.25€ par transaction - **Commission application** : 1.4% (reversĂ©e Ă  GEOSECTOR) - **CoĂ»t net pour l'amicale** : ~2.8% + 0.25€ par transaction --- **Date de crĂ©ation** : 2025-08-07 **Auteur** : Architecture Team **Version** : 1.2.0