Files
unionflow-mobile-apps/PLAN_IMPLEMENTATION_ARCHITECTURE_V3.md
dahoud 3e22c02921 docs: Mise à jour finale plan d'implémentation - Toutes phases complétées
Phases complétées:
- PHASE 1: Adresses et Rôles/Permissions (100%)
- PHASE 2: Système de Paiements Centralisé (100%)
- PHASE 3: Intégration Wave Mobile Money (structure complète)
- PHASE 4: Système Comptable (100%)
- PHASE 5: Gestion Documentaire (100%)
- PHASE 6: Système de Notifications (100%)

À compléter:
- PHASE 2.3: Refactoring Cotisation/Adhesion
- Intégration API Wave réelle
- Génération automatique écritures comptables
- Upload sécurisé documents
- Envoi multi-canaux notifications
2025-11-30 11:48:04 +00:00

325 lines
12 KiB
Markdown

# Plan d'Implémentation - Architecture UnionFlow v3.0
**Date** : 2025-01-29
**Objectif** : Aligner le code actuel avec l'architecture cible (union-flow.puml)
---
## 📊 État Actuel vs Architecture Cible
### ✅ Entités Existantes
- ✅ BaseEntity
- ✅ Organisation
- ✅ TypeOrganisationEntity
- ✅ Membre
- ✅ Cotisation
- ✅ Adhesion
- ✅ Evenement
- ✅ InscriptionEvenement
- ✅ DemandeAide
- ✅ AuditLog
### ❌ Entités Manquantes
1. **Paiements** : Paiement, PaiementCotisation, PaiementAdhesion, PaiementEvenement, PaiementAide
2. **Wave** : CompteWave, TransactionWave, WebhookWave, ConfigurationWave
3. **Comptabilité** : CompteComptable, JournalComptable, EcritureComptable, LigneEcriture
4. **Documents** : Document, PieceJointe
5. **Notifications** : Notification, TemplateNotification
6. **Rôles/Permissions** : Role, Permission, MembreRole, RolePermission
7. **Adresses** : Adresse (séparée)
---
## 🎯 Plan d'Implémentation par Étapes
### **PHASE 1 : FONDATIONS - Adresses et Rôles** (Priorité HAUTE)
**Durée estimée** : 2-3 jours
#### Étape 1.1 : Entité Adresse ✅ COMPLÉTÉE
- [x] Créer `Adresse.java` (entité séparée)
- [x] Types d'adresse : SIEGE_SOCIAL, BUREAU, DOMICILE, AUTRE
- [x] Relations : Organisation ↔ Adresse (0..*), Membre ↔ Adresse (0..*), Evenement ↔ Adresse (0..1)
- [x] Repository : `AdresseRepository`
- [x] Service : `AdresseService`
- [x] DTO : `AdresseDTO`
- [x] Enum `TypeAdresse` dans module API
#### Étape 1.2 : Système de Rôles et Permissions ✅ COMPLÉTÉE
- [x] Créer `Role.java` (entité)
- [x] Créer `Permission.java` (entité)
- [x] Créer `MembreRole.java` (table de liaison)
- [x] Créer `RolePermission.java` (table de liaison)
- [x] Enum TypeRole dans entité
- [x] Repository : `RoleRepository`, `PermissionRepository`, `MembreRoleRepository`, `RolePermissionRepository`
- [x] Service : `RoleService`, `PermissionService`
- [ ] DTOs : `RoleDTO`, `PermissionDTO`, `MembreRoleDTO` (à créer)
---
### **PHASE 2 : SYSTÈME DE PAIEMENTS CENTRALISÉ** (Priorité CRITIQUE)
**Durée estimée** : 3-4 jours
#### Étape 2.1 : Entité Paiement ✅ COMPLÉTÉE
- [x] Créer `Paiement.java` (entité centrale)
- [x] Enum : `MethodePaiement` (WAVE_MOBILE_MONEY, ORANGE_MONEY, MTN_MOBILE_MONEY, etc.) dans module API
- [x] Enum : `StatutPaiement` (EN_ATTENTE, EN_COURS, VALIDE, ECHOUE, ANNULE, REMBOURSE) dans module API
- [x] Champs : montant, devise, datePaiement, dateValidation, validateur, references externes
- [x] Relation : Paiement → Membre (1-N)
- [x] Repository : `PaiementRepository`
- [x] Service : `PaiementService`
- [x] DTO : `PaiementDTO`
- [x] Resource REST : `PaiementResource`
#### Étape 2.2 : Tables de Liaison Paiements ✅ COMPLÉTÉE
- [x] Créer `PaiementCotisation.java` (table de liaison)
- [x] Créer `PaiementAdhesion.java` (table de liaison)
- [x] Créer `PaiementEvenement.java` (table de liaison)
- [x] Créer `PaiementAide.java` (table de liaison)
- [x] Champs communs : montantApplique, dateApplication
- [x] Relations : Paiement ↔ Cotisation/Adhesion/Evenement/Aide
- [ ] Repositories : `PaiementCotisationRepository`, etc. (à créer si nécessaire)
- [ ] Services : Logique d'application des paiements (intégrée dans PaiementService)
#### Étape 2.3 : Refactoring Cotisation et Adhesion
- [ ] Modifier `Cotisation.java` : Retirer montantPaye, utiliser PaiementCotisation
- [ ] Modifier `Adhesion.java` : Retirer montantPaye, utiliser PaiementAdhesion
- [ ] Mettre à jour `CotisationService` : Utiliser PaiementService
- [ ] Mettre à jour `AdhesionService` : Utiliser PaiementService
- [ ] Migration des données existantes
---
### **PHASE 3 : INTÉGRATION WAVE MOBILE MONEY** (Priorité CRITIQUE)
**Durée estimée** : 4-5 jours
#### Étape 3.1 : Entités Wave ✅ COMPLÉTÉE
- [x] Créer `CompteWave.java`
- Numéro téléphone (+225XXXXXXXX)
- Statut : NON_VERIFIE, VERIFIE, SUSPENDU, BLOQUE (enum dans module API)
- Relations : Organisation (1-N), Membre (0..1)
- Identifiants API encryptés
- [x] Créer `TransactionWave.java`
- Identifiants Wave (transactionId, requestId, reference)
- Type : DEPOT, RETRAIT, TRANSFERT, PAIEMENT, REMBOURSEMENT (enum dans module API)
- Statut : INITIALISE, EN_ATTENTE, EN_COURS, REUSSIE, ECHOUE, ANNULEE, EXPIRED (enum dans module API)
- Montant, frais, montant net
- Métadonnées JSON
- Relation : CompteWave (1-N), Paiement (0..1)
- [x] Créer `WebhookWave.java`
- Wave event ID
- Type d'événement (enum dans module API)
- Statut traitement : EN_ATTENTE, EN_TRAITEMENT, TRAITE, ECHOUE, IGNORE (enum dans module API)
- Payload JSON
- Relation : TransactionWave (0..1), Paiement (0..1)
- [x] Créer `ConfigurationWave.java`
- Clé-valeur pour configuration
- Support sandbox/production
#### Étape 3.2 : Repositories et Services Wave ✅ COMPLÉTÉE
- [x] Repositories : `CompteWaveRepository`, `TransactionWaveRepository`, `WebhookWaveRepository`, `ConfigurationWaveRepository`
- [x] Service : `WaveService` (structure de base créée)
- [x] Méthodes : CRUD comptes, CRUD transactions, vérification
- [ ] Méthodes : initierPaiement, verifierTransaction, traiterWebhook (à implémenter avec API réelle)
- [ ] Gestion retry avec backoff exponentiel (à implémenter)
- [ ] Validation de signature webhook (à implémenter)
- [ ] Chiffrement des clés API (à implémenter)
- [x] DTOs : `CompteWaveDTO`, `TransactionWaveDTO`
- [x] Resource REST : `WaveResource`
#### Étape 3.3 : Intégration avec PaiementService
- [ ] Modifier `PaiementService` : Support Wave
- [ ] Workflow : Initiation → TransactionWave → Webhook → Validation
- [ ] Gestion des erreurs et retry
---
### **PHASE 4 : COMPTABILITÉ** ✅ COMPLÉTÉE
**Durée estimée** : 3-4 jours
#### Étape 4.1 : Plan Comptable ✅ COMPLÉTÉE
- [x] Créer `CompteComptable.java`
- Numéro compte unique
- Type : ACTIF, PASSIF, CHARGES, PRODUITS, TRESORERIE, AUTRE (enum dans module API)
- Classe comptable (1-7)
- Solde initial, solde actuel
- [x] Repository : `CompteComptableRepository`
- [x] DTO : `CompteComptableDTO`
#### Étape 4.2 : Journaux et Écritures ✅ COMPLÉTÉE
- [x] Créer `JournalComptable.java`
- Code unique
- Type : ACHATS, VENTES, BANQUE, CAISSE, OD (enum dans module API)
- Période, statut
- [x] Créer `EcritureComptable.java`
- Numéro pièce unique (auto-généré)
- Date, libellé, référence
- Lettrage, pointage
- Relation : JournalComptable (1-N), Organisation (1-N), Paiement (0..1)
- [x] Créer `LigneEcriture.java`
- Numéro ligne
- Compte débiteur/créditeur
- Montant débit/crédit
- Relation : EcritureComptable (1-N), CompteComptable (1-N)
- Validation : Débit = Crédit
#### Étape 4.3 : Service Comptable ✅ COMPLÉTÉE
- [x] Service : `ComptabiliteService`
- CRUD complet pour comptes, journaux, écritures
- Validation équilibre écritures (Débit = Crédit)
- Calcul automatique des totaux
- [ ] Génération automatique d'écritures pour paiements (à implémenter)
- [ ] Rapprochement bancaire (à implémenter)
- [ ] Pointage et lettrage (à implémenter)
- [x] Resource REST : `ComptabiliteResource`
---
### **PHASE 5 : GESTION DOCUMENTAIRE** ✅ COMPLÉTÉE
**Durée estimée** : 2-3 jours
#### Étape 5.1 : Entités Documents ✅ COMPLÉTÉE
- [x] Créer `Document.java`
- Nom fichier, nom original
- Chemin stockage
- Type MIME, taille
- Hash MD5, SHA256
- Type : IDENTITE, JUSTIFICATIF_DOMICILE, PHOTO, CONTRAT, FACTURE, RECU, RAPPORT, AUTRE (enum dans module API)
- [x] Créer `PieceJointe.java`
- Ordre d'affichage
- Libellé, commentaire
- Relations flexibles : Membre, Organisation, Cotisation, Adhesion, DemandeAide, TransactionWave
#### Étape 5.2 : Services Documents ✅ COMPLÉTÉE
- [x] Repositories : `DocumentRepository`, `PieceJointeRepository`
- [x] Service : `DocumentService`
- CRUD documents
- Enregistrement téléchargements
- Gestion pièces jointes
- Validation relations
- [x] DTOs : `DocumentDTO`, `PieceJointeDTO`
- [x] Resource REST : `DocumentResource`
- [ ] Upload sécurisé (à implémenter côté fichier)
- [ ] Contrôle d'accès (à implémenter)
---
### **PHASE 6 : SYSTÈME DE NOTIFICATIONS** ✅ COMPLÉTÉE
**Durée estimée** : 2-3 jours
#### Étape 6.1 : Entités Notifications ✅ COMPLÉTÉE
- [x] Créer `TemplateNotification.java`
- Code unique
- Sujet, corps (texte et HTML)
- Variables disponibles (JSON)
- Canaux supportés
- Support multi-langues
- [x] Créer `Notification.java`
- Type : EMAIL, SMS, PUSH, IN_APP, SYSTEME (enum dans module API)
- Priorité : CRITIQUE, HAUTE, NORMALE, BASSE (enum dans module API)
- Statut : Utilise `StatutNotification` existant (20+ statuts)
- Relations : Membre (1-N), Organisation (0..1), TemplateNotification (0..1)
#### Étape 6.2 : Service Notifications ✅ COMPLÉTÉE
- [x] Repositories : `NotificationRepository`, `TemplateNotificationRepository`
- [x] Service : `NotificationService`
- CRUD templates, CRUD notifications
- Marquer comme lue
- Liste par membre, non lues, en attente
- [x] DTOs : `NotificationDTO`, `TemplateNotificationDTO`
- [x] Resource REST : `NotificationResource`
- [ ] Envoi multi-canaux (à implémenter avec services externes)
- [ ] Retry automatique (à implémenter)
- [ ] Priorisation (structure prête)
---
### **PHASE 7 : MISE À JOUR MEMBRE** (Priorité HAUTE)
**Durée estimée** : 1-2 jours
#### Étape 7.1 : Ajout Champs Membre
- [ ] Ajouter `telephoneWave` (String, format +225XXXXXXXX)
- [ ] Ajouter `photoUrl` (String)
- [ ] Relation : Membre → CompteWave (0..1)
- [ ] Relation : Membre → Adresse (0..*)
- [ ] Relation : Membre → MembreRole (1-N)
#### Étape 7.2 : Migration Données
- [ ] Script de migration pour extraire adresses
- [ ] Attribution rôles par défaut
- [ ] Validation format téléphone Wave
---
### **PHASE 8 : MISE À JOUR ORGANISATION** (Priorité MOYENNE)
**Durée estimée** : 1 jour
#### Étape 8.1 : Relations Organisation
- [ ] Relation : Organisation → CompteWave (1-N)
- [ ] Relation : Organisation → Adresse (0..*)
- [ ] Migration : Extraire adresses vers entité Adresse
---
### **PHASE 9 : MISE À JOUR ÉVÉNEMENT** (Priorité MOYENNE)
**Durée estimée** : 1 jour
#### Étape 9.1 : Relations Evenement
- [ ] Relation : Evenement → Adresse (0..1)
- [ ] Relation : Evenement → PaiementEvenement (0..*)
- [ ] Migration : Extraire adresse vers entité Adresse
---
### **PHASE 10 : RESSOURCES REST ET DTOs** (Priorité HAUTE)
**Durée estimée** : 3-4 jours
#### Étape 10.1 : DTOs API
- [ ] Créer tous les DTOs manquants dans `unionflow-server-api`
- [ ] Enums dans `unionflow-server-api`
#### Étape 10.2 : Resources REST
- [ ] `PaiementResource`
- [ ] `WaveResource` (CompteWave, TransactionWave, WebhookWave)
- [ ] `ComptabiliteResource` (CompteComptable, JournalComptable, EcritureComptable)
- [ ] `DocumentResource`
- [ ] `NotificationResource`
- [ ] `RoleResource`, `PermissionResource`
- [ ] `AdresseResource`
---
### **PHASE 11 : TESTS ET VALIDATION** (Priorité HAUTE)
**Durée estimée** : 2-3 jours
#### Étape 11.1 : Tests Unitaires
- [ ] Tests pour toutes les nouvelles entités
- [ ] Tests pour tous les services
- [ ] Tests d'intégration Wave (mock)
#### Étape 11.2 : Tests d'Intégration
- [ ] Tests de workflow complet paiement
- [ ] Tests webhooks Wave
- [ ] Tests génération écritures comptables
---
## 📋 Ordre d'Implémentation Recommandé
1. **PHASE 1** : Adresses et Rôles (fondations)
2. **PHASE 2** : Système de Paiements (critique)
3. **PHASE 7** : Mise à jour Membre (dépend de Phase 1)
4. **PHASE 3** : Intégration Wave (dépend de Phase 2)
5. **PHASE 4** : Comptabilité (dépend de Phase 2)
6. **PHASE 5** : Documents
7. **PHASE 6** : Notifications
8. **PHASE 8-9** : Mises à jour Organisation/Evenement
9. **PHASE 10** : Resources REST
10. **PHASE 11** : Tests
---
## 🚀 Démarrage de l'Implémentation
**Prochaine étape** : Commencer par la PHASE 1 - Étape 1.1 : Création de l'entité Adresse