# Description Métier - UnionFlow

**Version** : 2.0  
**Date** : 2025-01-29  
**Domaine** : Gestion d'organisations associatives (Lions Clubs, Associations, Coopératives, etc.)

---

## 🎯 Vision et Mission

**UnionFlow** est une plateforme de gestion intégrée conçue pour les unions et associations Lions Club de Côte d'Ivoire. Elle centralise et automatise la gestion administrative, financière et opérationnelle de ces organisations à but non lucratif.

### Mission
Faciliter la gestion quotidienne des organisations associatives en automatisant les processus administratifs, financiers et événementiels, tout en favorisant la solidarité entre membres.

### Vision
Devenir la référence en matière de gestion numérique pour les organisations associatives en Afrique de l'Ouest.

---

## 🏢 Contexte Métier

### Organisations Cibles
UnionFlow s'adresse à différents types d'organisations :
- **Lions Clubs** : Clubs de service international
- **Associations** : Organisations à but non lucratif
- **Coopératives** : Groupements économiques
- **Fédérations** : Regroupements d'organisations
- **Mutuelles** : Organisations de solidarité
- **Syndicats** : Organisations professionnelles
- **Fondations** : Organisations philanthropiques
- **ONG** : Organisations non gouvernementales

### Problématiques Résolues
1. **Gestion dispersée** : Informations éparpillées dans des fichiers Excel, carnets, etc.
2. **Suivi financier complexe** : Difficulté à suivre les cotisations, paiements, relances
3. **Communication inefficace** : Manque de centralisation pour les événements et annonces
4. **Solidarité non structurée** : Absence de processus formalisé pour les demandes d'aide
5. **Traçabilité limitée** : Pas d'historique complet des actions et décisions

---

## 👥 Acteurs et Rôles

### 1. **SUPER_ADMIN**
- **Rôle** : Administration système complète
- **Permissions** :
  - Gestion de tous les utilisateurs et organisations
  - Configuration du système
  - Gestion du catalogue des types d'organisations
  - Accès à toutes les données et statistiques
- **Cas d'usage** : Configuration initiale, maintenance, support technique

### 2. **ADMIN** (Administrateur d'Organisation)
- **Rôle** : Gestion complète d'une organisation
- **Permissions** :
  - Gestion des membres de son organisation
  - Gestion des cotisations
  - Organisation d'événements
  - Validation des adhésions
  - Traitement des demandes d'aide
  - Consultation des statistiques de son organisation
- **Cas d'usage** : Gestion quotidienne d'un Lions Club ou d'une association

### 3. **MEMBRE**
- **Rôle** : Membre actif d'une organisation
- **Permissions** :
  - Consultation de son profil
  - Consultation de ses cotisations
  - Inscription aux événements
  - Soumission de demandes d'aide
  - Consultation des événements publics
- **Cas d'usage** : Participation active à la vie de l'organisation

### 4. **ORGANISATEUR_EVENEMENT**
- **Rôle** : Organisation et gestion d'événements
- **Permissions** :
  - Création et modification d'événements
  - Gestion des inscriptions
  - Suivi des participants
- **Cas d'usage** : Organisation d'assemblées générales, formations, manifestations

---

## 📋 Modules Fonctionnels

### 1. 🏛️ Gestion des Organisations

#### Description
Module central permettant de gérer toutes les informations relatives aux organisations (clubs, associations, etc.).

#### Fonctionnalités Principales

**Création et Configuration**
- Enregistrement d'une nouvelle organisation avec toutes ses informations :
  - Identité : nom, nom court, type, statut
  - Contact : email, téléphones, adresse complète, coordonnées GPS
  - Web : site web, logo, réseaux sociaux
  - Finances : budget annuel, devise, cotisation obligatoire, montant
  - Métier : objectifs, activités principales, certifications, partenaires
  - Paramètres : organisation publique, accepte nouveaux membres

**Hiérarchie Organisationnelle**
- Structure hiérarchique (organisation parente)
- Niveaux hiérarchiques (0 = racine)
- Gestion des relations parent-enfant

**Statuts Organisationnels**
- **ACTIVE** : Organisation opérationnelle
- **SUSPENDUE** : Temporairement suspendue (ne peut plus accepter de membres)
- **DISSOUTE** : Organisation dissoute (archivée)

**Gestion du Catalogue des Types**
- CRUD complet des types d'organisations
- Codes uniques (LIONS_CLUB, ASSOCIATION, etc.)
- Libellés et descriptions
- Ordre d'affichage
- Activation/désactivation

**Statistiques**
- Nombre de membres
- Nombre d'administrateurs
- Ancienneté (années depuis la fondation)
- Budget et finances

#### Règles Métier
- Unicité de l'email par organisation
- Unicité du numéro d'enregistrement
- Unicité du nom
- Date de fondation optionnelle mais utilisée pour calculer l'ancienneté
- Statut par défaut : ACTIVE
- Type par défaut : ASSOCIATION
- Devise par défaut : XOF (Franc CFA)

---

### 2. 👤 Gestion des Membres

#### Description
Gestion complète du cycle de vie des membres d'une organisation.

#### Fonctionnalités Principales

**Inscription de Membres**
- Création d'un nouveau membre avec :
  - Identité : prénom, nom, email (unique), téléphone
  - Dates : naissance, adhésion
  - Affiliation : organisation
  - Rôles : chaîne de caractères pour les rôles multiples

**Génération Automatique**
- **Numéro de membre** : Format `UF{ANNEE}-{UUID}` (ex: `UF2025-A1B2C3D4`)
  - Généré automatiquement si non fourni
  - Unique dans tout le système
- **Date d'adhésion** : Automatiquement définie à `LocalDate.now()` si non fournie
- **Date de naissance** : Par défaut à 18 ans en arrière si non fournie (pour éviter les contraintes @NotNull)

**Statuts Membres**
- **ACTIF** : Membre actif et opérationnel
- **INACTIF** : Membre désactivé
- **SUSPENDU** : Membre temporairement suspendu

**Recherche et Filtrage**
- Recherche par nom, prénom, email
- Filtrage par statut, organisation, date d'adhésion
- Recherche avancée avec critères multiples :
  - Âge (min/max)
  - Période d'adhésion
  - Organisation(s)
  - Rôles

**Statistiques**
- Total de membres
- Membres actifs vs inactifs
- Nouveaux membres (30 derniers jours)
- Taux d'activité

#### Règles Métier
- Email unique dans tout le système
- Numéro de membre unique
- Un membre appartient à une seule organisation
- Vérification de majorité (18 ans) pour certaines opérations
- Calcul automatique de l'âge à partir de la date de naissance

---

### 3. 💰 Gestion des Cotisations

#### Description
Suivi complet des cotisations des membres : création, paiement, relances, statistiques.

#### Fonctionnalités Principales

**Types de Cotisations**
- **MENSUELLE** : Cotisation mensuelle récurrente
- **ANNUELLE** : Cotisation annuelle
- **ADHESION** : Frais d'adhésion initiale
- **EVENEMENT** : Participation à un événement payant
- **FORMATION** : Frais de formation
- **PROJET** : Contribution à un projet
- **SOLIDARITE** : Contribution au fonds de solidarité

**Création de Cotisation**
- Association à un membre
- Montant dû (obligatoire, positif)
- Code devise (ISO 3 lettres, défaut : XOF)
- Date d'échéance
- Période (année, mois optionnel)
- Description et observations
- Type de cotisation

**Génération Automatique**
- **Numéro de référence** : Format `COT-{ANNEE}-{TIMESTAMP}` (ex: `COT-2025-12345678`)
  - Généré automatiquement si non fourni
  - Unique dans tout le système

**Statuts de Cotisation**
- **EN_ATTENTE** : Créée mais non payée
- **PAYEE** : Intégralement payée
- **EN_RETARD** : Date d'échéance dépassée, non payée
- **PARTIELLEMENT_PAYEE** : Paiement partiel effectué
- **ANNULEE** : Cotisation annulée

**Gestion des Paiements**
- Enregistrement de paiements partiels ou complets
- Méthode de paiement (espèces, virement, mobile money, etc.)
- Référence de paiement
- Date de paiement
- Validation par un administrateur (optionnel)

**Relances Automatiques**
- Suivi du nombre de rappels
- Date du dernier rappel
- Détection automatique des cotisations en retard

**Recherche et Filtrage**
- Par membre
- Par statut
- Par type
- Par période (année, mois)
- Cotisations en retard

**Statistiques**
- Total de cotisations
- Cotisations payées
- Cotisations en retard
- Taux de paiement
- Montants collectés par période

#### Règles Métier
- Montant dû doit être positif
- Montant payé ne peut pas dépasser le montant dû
- Date d'échéance ne peut pas être antérieure à un an
- Une cotisation marquée "PAYEE" doit avoir montantPaye = montantDu
- Impossible de supprimer une cotisation déjà payée
- Calcul automatique du montant restant : `montantDu - montantPaye`
- Détection automatique des cotisations en retard : `dateEcheance < aujourd'hui && !payeeIntegralement()`

---

### 4. 📅 Gestion des Événements

#### Description
Organisation complète d'événements : création, inscriptions, suivi, statistiques.

#### Fonctionnalités Principales

**Types d'Événements**
- **ASSEMBLEE_GENERALE** : Assemblée générale annuelle
- **REUNION** : Réunion régulière
- **FORMATION** : Session de formation
- **CONFERENCE** : Conférence ou séminaire
- **ATELIER** : Atelier pratique
- **SEMINAIRE** : Séminaire
- **EVENEMENT_SOCIAL** : Événement social (soirée, gala, etc.)
- **MANIFESTATION** : Manifestation publique
- **CELEBRATION** : Célébration (anniversaire, fête, etc.)
- **AUTRE** : Autre type d'événement

**Création d'Événement**
- Titre (obligatoire)
- Description détaillée
- Dates : début (obligatoire), fin (optionnelle)
- Lieu et adresse complète
- Type d'événement
- Capacité maximale (optionnelle, pour gérer les inscriptions)
- Prix de participation (optionnel)
- Instructions particulières
- Contact organisateur
- Matériel requis
- Visibilité publique

**Gestion des Inscriptions**
- Inscription requise (oui/non)
- Date limite d'inscription
- Capacité maximale
- Suivi des inscriptions :
  - **CONFIRMEE** : Inscription validée
  - **EN_ATTENTE** : En attente de validation
  - **ANNULEE** : Inscription annulée
  - **REFUSEE** : Inscription refusée

**Statuts d'Événement**
- **PLANIFIE** : Événement planifié (défaut)
- **CONFIRME** : Événement confirmé
- **EN_COURS** : Événement en cours
- **TERMINE** : Événement terminé
- **ANNULE** : Événement annulé
- **REPORTE** : Événement reporté

**Règles d'Ouverture aux Inscriptions**
Un événement est ouvert aux inscriptions si :
- `inscriptionRequise = true`
- `actif = true`
- Date limite d'inscription non dépassée
- Date de début non dépassée
- Capacité non atteinte (si définie)
- Statut = PLANIFIE ou CONFIRME

**Statistiques**
- Nombre total d'événements
- Événements actifs
- Événements à venir
- Événements en cours
- Événements passés
- Événements publics
- Taux de remplissage (inscrits / capacité)
- Taux d'activité

#### Règles Métier
- Titre obligatoire
- Date de début obligatoire et ne peut pas être dans le passé (sauf tolérance de 1 heure)
- Date de fin ne peut pas être antérieure à la date de début
- Capacité maximale doit être positive si définie
- Prix ne peut pas être négatif
- Impossible de supprimer un événement avec des inscriptions
- Impossible de changer le statut d'un événement terminé ou annulé
- Calcul automatique de la durée en heures
- Calcul automatique des places restantes
- Vérification si un membre est déjà inscrit

---

### 5. 🤝 Gestion des Adhésions

#### Description
Processus complet de demande, validation et paiement d'adhésion à une organisation.

#### Fonctionnalités Principales

**Création de Demande d'Adhésion**
- Membre demandeur
- Organisation cible
- Date de demande (automatique si non fournie)
- Frais d'adhésion (montant)
- Code devise (défaut : XOF)

**Génération Automatique**
- **Numéro de référence** : Format `ADH-{TIMESTAMP}-{UUID}` (ex: `ADH-1706541234567-A1B2C3D4`)
  - Généré automatiquement si non fourni
  - Unique dans tout le système

**Workflow d'Adhésion**

1. **EN_ATTENTE** (Statut initial)
   - Demande soumise
   - En attente de validation par l'organisation

2. **APPROUVEE**
   - Demande approuvée par un administrateur
   - Date d'approbation enregistrée
   - Approuveur enregistré
   - Passage automatique en attente de paiement

3. **EN_PAIEMENT**
   - Paiement partiel effectué
   - Montant payé < frais d'adhésion

4. **PAYEE**
   - Paiement intégral effectué
   - Montant payé >= frais d'adhésion
   - Date de paiement enregistrée

5. **REJETEE**
   - Demande rejetée par l'organisation
   - Motif de rejet enregistré

6. **ANNULEE**
   - Demande annulée (par le demandeur ou l'organisation)

**Gestion des Paiements**
- Enregistrement de paiements partiels ou complets
- Méthode de paiement
- Référence de paiement
- Date de paiement
- Calcul automatique du montant restant

**Actions Métier**
- **Approuver** : Valide une demande en attente
- **Rejeter** : Refuse une demande avec motif
- **Enregistrer paiement** : Enregistre un paiement (partiel ou complet)
- **Annuler** : Annule une demande (si non payée)

**Recherche et Filtrage**
- Par membre
- Par organisation
- Par statut
- Adhésions en attente

**Statistiques**
- Total d'adhésions
- Adhésions approuvées
- Adhésions en attente
- Adhésions payées
- Taux d'approbation
- Taux de paiement

#### Règles Métier
- Frais d'adhésion doivent être positifs
- Montant payé ne peut pas dépasser les frais d'adhésion
- Seules les adhésions EN_ATTENTE peuvent être approuvées ou rejetées
- Seules les adhésions APPROUVEE ou EN_PAIEMENT peuvent recevoir un paiement
- Impossible de supprimer une adhésion déjà payée
- Passage automatique en PAYEE si paiement intégral
- Passage automatique en EN_PAIEMENT si paiement partiel

---

### 6. ❤️ Système de Solidarité (Demandes d'Aide)

#### Description
Gestion complète du cycle de vie des demandes d'aide entre membres : soumission, évaluation, approbation, versement.

#### Fonctionnalités Principales

**Types d'Aide**
- **FINANCIERE** : Aide financière directe
- **MATERIELLE** : Fourniture de matériel
- **ALIMENTAIRE** : Aide alimentaire
- **MEDICALE** : Aide médicale
- **SCOLAIRE** : Aide scolaire (frais, fournitures)
- **LOGEMENT** : Aide au logement
- **EMPLOI** : Aide à l'emploi
- **FORMATION** : Aide à la formation
- **AUTRE** : Autre type d'aide

**Création de Demande**
- Titre et description détaillée
- Type d'aide
- Montant demandé (pour aide financière)
- Justification
- Documents fournis (liste)
- Urgence (oui/non)
- Membre demandeur
- Organisation traitante

**Génération Automatique**
- **Numéro de référence** : Format `DA-{ANNEE}-{NUMERO}` (ex: `DA-2025-123456`)
  - Généré automatiquement
  - Unique dans tout le système
- **Score de priorité** : Calculé automatiquement selon :
  - Priorité (CRITIQUE, URGENTE, NORMALE, FAIBLE)
  - Type d'aide (urgent ou non)
  - Montant (si financière)
  - Ancienneté de la demande

**Workflow de Demande d'Aide**

1. **BROUILLON** (Statut initial)
   - Demande en cours de rédaction
   - Modifiable par le demandeur

2. **SOUMISE**
   - Demande soumise à l'organisation
   - Date de soumission enregistrée

3. **EN_ATTENTE**
   - En attente d'évaluation

4. **EN_COURS_EVALUATION**
   - Évaluation en cours par un évaluateur
   - Évaluateur assigné

5. **INFORMATIONS_REQUISES**
   - Informations complémentaires demandées
   - Retour au demandeur

6. **APPROUVEE**
   - Demande approuvée intégralement
   - Montant approuvé = montant demandé
   - Date d'approbation enregistrée

7. **APPROUVEE_PARTIELLEMENT**
   - Demande approuvée partiellement
   - Montant approuvé < montant demandé

8. **EN_COURS_TRAITEMENT**
   - Traitement en cours (préparation de l'aide)

9. **EN_COURS_VERSEMENT**
   - Versement en cours (pour aide financière)

10. **VERSEE**
    - Aide versée (pour aide financière)
    - Date de versement enregistrée

11. **LIVREE**
    - Aide livrée (pour aide matérielle)

12. **TERMINEE**
    - Processus complètement terminé

13. **REJETEE**
    - Demande rejetée
    - Commentaire d'évaluation avec motif

14. **ANNULEE**
    - Demande annulée

15. **EXPIREE**
    - Demande expirée (délai dépassé)

16. **SUSPENDUE**
    - Demande temporairement suspendue

17. **EN_SUIVI**
    - Demande en suivi post-versement

18. **CLOTUREE**
    - Demande clôturée définitivement

**Historique des Statuts**
- Traçabilité complète des changements de statut
- Date de chaque changement
- Auteur du changement
- Motif du changement
- Indication si changement automatique ou manuel

**Priorités**
- **CRITIQUE** : Intervention immédiate requise
- **URGENTE** : Intervention rapide requise
- **NORMALE** : Traitement normal
- **FAIBLE** : Traitement différé possible

**Recherche et Filtrage**
- Par organisation
- Par type d'aide
- Par statut
- Par priorité
- Par demandeur
- Demandes urgentes
- Demandes en retard (délai dépassé)

**Statistiques**
- Total de demandes
- Demandes par statut
- Demandes par type
- Montants demandés vs approuvés
- Taux d'approbation
- Délais moyens de traitement

#### Règles Métier
- Une demande ne peut être modifiée qu'en statut BROUILLON
- Transitions de statut validées (workflow strict)
- Calcul automatique du score de priorité
- Détection automatique des demandes en retard
- Calcul automatique du pourcentage d'approbation
- Vérification de l'urgence pour priorisation
- Historique complet et immuable des changements

---

## 🔄 Processus Métier Principaux

### Processus 1 : Inscription d'un Nouveau Membre

1. **Saisie des informations**
   - Nom, prénom, email, téléphone
   - Date de naissance
   - Organisation d'affiliation

2. **Validation automatique**
   - Vérification unicité email
   - Génération numéro de membre
   - Définition date d'adhésion

3. **Création du membre**
   - Persistance en base
   - Attribution statut ACTIF par défaut

4. **Mise à jour organisation**
   - Incrémentation nombre de membres

### Processus 2 : Gestion d'une Cotisation

1. **Création de la cotisation**
   - Association au membre
   - Définition montant, type, échéance
   - Génération numéro de référence

2. **Suivi du paiement**
   - Statut initial : EN_ATTENTE
   - Enregistrement paiements (partiels ou complets)
   - Mise à jour automatique du statut

3. **Relances**
   - Détection automatique des cotisations en retard
   - Envoi de rappels (nombre de rappels suivi)

4. **Finalisation**
   - Statut PAYEE quand intégralement payée
   - Validation par un administrateur (optionnel)

### Processus 3 : Organisation d'un Événement

1. **Création de l'événement**
   - Saisie des informations (titre, dates, lieu, etc.)
   - Définition capacité et prix
   - Configuration inscriptions

2. **Ouverture des inscriptions**
   - Vérification automatique des conditions
   - Affichage public si visible

3. **Gestion des inscriptions**
   - Inscription des membres
   - Validation/refus des inscriptions
   - Suivi du nombre d'inscrits

4. **Exécution de l'événement**
   - Changement de statut (CONFIRME → EN_COURS → TERMINE)
   - Suivi de la participation

### Processus 4 : Demande d'Adhésion

1. **Soumission de la demande**
   - Membre soumet une demande d'adhésion
   - Statut initial : EN_ATTENTE

2. **Évaluation**
   - Administrateur examine la demande
   - Décision : APPROUVEE ou REJETEE

3. **Paiement**
   - Si approuvée, enregistrement des paiements
   - Passage automatique en PAYEE si intégral

4. **Finalisation**
   - Membre officiellement admis
   - Mise à jour de l'organisation

### Processus 5 : Demande d'Aide (Solidarité)

1. **Création de la demande**
   - Membre crée une demande (statut BROUILLON)
   - Saisie des informations complètes

2. **Soumission**
   - Passage en statut SOUMISE
   - Assignation à l'organisation

3. **Évaluation**
   - Assignation d'un évaluateur
   - Statut : EN_COURS_EVALUATION
   - Analyse de la demande

4. **Décision**
   - APPROUVEE / APPROUVEE_PARTIELLEMENT / REJETEE
   - Enregistrement du montant approuvé (si financière)

5. **Traitement**
   - Préparation de l'aide
   - Versement (si financière) ou livraison (si matérielle)

6. **Suivi**
   - Statut TERMINEE ou CLOTUREE
   - Historique complet conservé

---

## 📊 Indicateurs et Statistiques

### Indicateurs Organisationnels
- Nombre total de membres
- Nombre de membres actifs
- Taux d'activité (%)
- Nouveaux membres (30 jours)
- Budget annuel
- Montant cotisations collectées

### Indicateurs Financiers
- Total cotisations créées
- Cotisations payées
- Cotisations en retard
- Taux de paiement (%)
- Montants collectés par période
- Adhésions payées

### Indicateurs Événementiels
- Total événements
- Événements à venir
- Événements en cours
- Taux de remplissage moyen
- Participation moyenne

### Indicateurs Solidarité
- Total demandes d'aide
- Demandes urgentes
- Demandes approuvées
- Montants demandés vs approuvés
- Taux d'approbation
- Délais moyens de traitement

---

## 🔐 Sécurité et Contrôle d'Accès

### Authentification
- **Keycloak OIDC** : Authentification centralisée
- Tokens JWT pour l'accès aux APIs
- Refresh automatique des tokens

### Autorisations par Rôle
- **SUPER_ADMIN** : Accès total
- **ADMIN** : Gestion de son organisation
- **MEMBRE** : Consultation et actions limitées
- **ORGANISATEUR_EVENEMENT** : Gestion événements

### Audit et Traçabilité
- **AuditLog** : Enregistrement de toutes les actions importantes
- Champs d'audit sur toutes les entités :
  - `creePar` : Créateur
  - `modifiePar` : Dernier modificateur
  - `dateCreation` : Date de création
  - `dateModification` : Date de modification
  - `version` : Version optimiste (gestion des conflits)

---

## 🎨 Principes de Conception

### DRY (Don't Repeat Yourself)
- Composants réutilisables pour l'UI
- Services partagés
- DTOs standardisés

### WOU (Write Once Use)
- Bibliothèque de composants JSF/PrimeFaces
- Fragments réutilisables
- Templates standardisés

### Séparation des Responsabilités
- **API** : Contrats et interfaces
- **Implémentation** : Logique métier et persistance
- **Client** : Interface utilisateur

### Traçabilité Complète
- Historique des modifications
- Logs d'audit
- Versioning optimiste

---

## 🚀 Évolutions Futures

### Court Terme
- Intégration paiements mobiles (Wave, Orange Money, MTN Mobile Money)
- Notifications automatiques (email, SMS)
- Export de rapports (PDF, Excel)

### Moyen Terme
- Application mobile native (Flutter)
- Tableau de bord analytique
- Gestion documentaire (upload de documents)

### Long Terme
- Intelligence artificielle pour recommandations
- Prédiction des cotisations en retard
- Optimisation automatique des événements

---

## 📞 Support et Maintenance

### Support Utilisateur
- Documentation complète
- Formation des administrateurs
- Support technique

### Maintenance
- Sauvegardes régulières
- Mises à jour de sécurité
- Monitoring des performances

---

**Document généré le** : 2025-01-29  
**Version UnionFlow** : 2.0  
**Auteur** : UnionFlow Team

