Guide Fonctionnel (Français)
2026-04-06
Ce guide fonctionnel présente Njangui du point de vue métier. Il décrit les parcours utilisateur, les règles de gouvernance, les workflows financiers et disciplinaires, ainsi que les mécanismes de notification et de reporting nécessaires à l’exploitation quotidienne du njangui.
Njangui répond à un besoin concret: permettre à un groupe de gérer, dans une seule application, toute sa vie de njangui/tontines sans éclater les informations entre plusieurs outils.
L’application couvre: - l’organisation des tontines, - la gestion des caisses, - les événements et mains levées, - la discipline (sanctions), - la gouvernance (staff, élections, droits), - la production de rapports fiables.
Njangui est pensé comme un client riche: - la logique métier est implémentée dans l’application mobile, - Firebase sert principalement de stockage/synchronisation, - l’architecture prépare un remplacement futur du backend sans casser l’expérience métier.
versionName: 1.1.0versionCode: 4code name: AJEMI-UDsUn parcours complet passe généralement par les étapes suivantes:
Depuis Login, l’utilisateur peut: - se connecter, -
créer un compte, - réinitialiser son mot de passe.
Acteur: staff avec MANAGE_MEMBERS.
Il peut: - inviter/supprimer des membres (selon règles d’état des tontines), - enregistrer un staff initial, - créer une élection quand autorisé, - gérer des remplacements de staff (avec approbations requises).
Points de contrôle: - existence et validité du mandat, - fenêtre temporelle après expiration de mandat, - confirmations avant actions lourdes.
Acteur: staff avec MANAGE_TONTINES.
Cycle type:
Règles importantes: - la date de début est contrainte par la durée de round, - le tirage peut être participant ou algorithmique, - les règles modifiées peuvent invalider les tirages précédents.
MANAGE_CAISSES)MANAGE_PENALTIES)L’application privilégie: - loaders cohérents pendant les opérations, - refresh après chaque action critique, - pull-to-refresh pour recharger manuellement une page, - notifications locales même en arrière-plan (worker périodique).
flowchart LR
A[Overview] --> B[Members & Staff]
A --> C[Tontines]
A --> D[Caisses]
A --> E[Events]
A --> F[Penalties]
A --> G[Finance]
A --> H[Settings]
C --> D
C --> F
D --> G
E --> D
E --> F
F --> G
Rôle: cockpit de pilotage.
Contient: - résumé membres/invitations/staff, - actions de gouvernance (staff, élections, votes), - actions d’administration du njangui (nom, devise, admins, suppression, quitter), - informations de rounds en cours (tour courant et bénéficiaires).
Règle de suppression: - tontines non commencées: membre retiré (y compris du tirage), - tontines en cours/passées: données historiques conservées.
Règles d’accès: - basées sur le mandat actif/expiré, - fallback admin/creator après délai métier prévu.
Champs essentiels: - individualAmountPerRound, -
startDate, - roundDuration
(jours/semaines/mois), - maxWinnerPerRound, -
participants (avec nombre de noms par participant).
Préconditions configurables: - multipleNamesStrategy
(NONE / BALANCED), - positionning
(positions fixes), - rankingType
(RANDOM_ALGORITHM / PARTICIPANT_SELECTION), -
deadlineForParticipantSelection.
Règles métier clés: - regroupement des bénéficiaires par
maxWinnerPerRound, - clôture possible manuelle ou
algorithmique pour manquants, - modification des règles => annulation
des tirages existants + relance.
SuccessfulRound,Types: - individuelles (solde par membre), - collectives (solde unique partagé).
Fonctionnalités: - CRUD de caisses, - opérations comptables (crédit/débit), - désactivation temporaire d’alertes de déficit, - distribution d’une caisse collective entre membres/externes, - consultation/filtrage/export des transactions.
Règle devise: - la devise du njangui s’applique à tous les montants affichés.
Deux familles: - Événements, - Mains levées.
Cas gérés: - contributions individuelles, - contributions collectives, - bénéficiaires internes et externes, - outflow avec priorités de caisses, - rollback d’outflow avant validation finale.
Effets automatiques: - débits sur caisses, - sanctions générées si déficit ou retard selon règles.
Cycle de vie d’une sanction:
Une sanction peut contenir: - des pénalités de type montant, - des pénalités de type texte (ex: suspension), - un contexte (tontine/round/libre), - une date limite.
Permet: - filtrage par période/contexte/membre, - agrégats lisibles (contributions, caisses, sanctions, événements, mains levées), - export PDF basé uniquement sur le filtre courant.
Les notifications couvrent notamment: - invitations/retours d’invitation, - création tontine, - tirage (token, classement, deadline, clôture, changement de rang), - rounds (début, rappel, clôture, fin tontine), - gouvernance (élection, rappel vote, résultats, staff manquant, remplacements), - sanctions (revue, validation, échéance, recouvrement), - caisses (déficit), - événements/mains levées (outflow requis/appliqué, contributions, clôture).
Elles sont émises dans Firestore puis délivrées localement via worker périodique.
Cette section propose des maquettes textuelles “vivantes”: au-delà de la structure, elles décrivent les intentions UX, les états et les actions attendues.
+------------------------------------------------------+
| NJANGUI |
| Sous-titre: Gérez votre communauté en confiance |
| |
| Email [______________________________] |
| Mot de passe [______________________________] |
| |
| [ Se connecter ] |
| |
| Créer un compte Mot de passe oublié |
+------------------------------------------------------+
États clés: - loader pendant authentification, - message clair en cas de compte inexistant/désactivé, - navigation propre après succès.
+------------------------------------------------------+
| Groupe actif [Select] [Actualiser] |
+------------------------------------------------------+
| Cartes KPI: Membres actifs | Invitations | Staff |
+------------------------------------------------------+
| Gouvernance: [Register Staff] [Create Election] |
| [Vote] [Approve Replacement] |
+------------------------------------------------------+
| Vie du groupe: [Rename] [Currency] [Admins] [Leave] |
+------------------------------------------------------+
| Tontines en cours: round actuel + bénéficiaires |
+------------------------------------------------------+
+------------------------------------------------------+
| Tontine courante [Select nom tontine] |
+------------------------------------------------------+
| Carte info: statut, round courant, bénéficiaires |
+------------------------------------------------------+
| Actions: [Gérer tirage] [Configurer règles] [...] |
+------------------------------------------------------+
| Liste de mes tontines (cards) |
| - Nom | Statut | Actions selon droits |
+------------------------------------------------------+
Détails UX: - la tontine courante doit être identifiable sans ambiguïté, - pas de doublon d’actions entre header et cartes, - séparation visuelle nette entre blocs.
+------------------------------------------------------+
| Résultats du tirage |
| ... classement ... |
| |
| [ Close ] [ Clore le tirage ] |
+------------------------------------------------------+
Règles de style: - bouton secondaire (close) à gauche, - bouton dangereux/impactant en style accentué à droite, - confirmations avant actions irréversibles.
+------------------------------------------------------+
| Filtres: dates, compte, type, recherche |
| [Appliquer] [Réinitialiser] |
| ---------------------------------------------------- |
| Liste transactions filtrées |
| ---------------------------------------------------- |
| [Fermer] [Exporter transactions] |
+------------------------------------------------------+
Le bouton export doit rester visible, même sur petits écrans.
+------------------------------------------------------+
| Invitations membres |
| [Inviter] [Relancer] |
+------------------------------------------------------+
| Staff actif / Mandat |
| [Enregistrer staff] [Créer élection] |
+------------------------------------------------------+
| Postes (édition inline): |
| - Nom du poste |
| - Droits (chips) |
| - Candidats / titulaires |
+------------------------------------------------------+
Principe commun: - filtres en haut, - carte de synthèse agrégée, - liste détaillée, - actions contextualisées par droit, - export unique basé sur le filtre courant.
À prévoir sur tous les écrans: - loader d’initialisation, - loader d’action, - état vide guidé (quoi faire ensuite), - état erreur récupérable, - pull-to-refresh.
Toujours vérifier: - le njangui actif sélectionné, - le rôle effectif de l’utilisateur, - l’état du mandat staff (actif/expiré), - la connectivité réseau, - la fraîcheur des données (pull-to-refresh).
Cause fréquente: manque de droit ou règle temporelle non satisfaite.
Checklist: 1. l’utilisateur est-il membre actif? 2. possède-t-il le
droit MANAGE_* attendu? 3. le mandat staff permet-il cette
action maintenant? 4. la tontine/événement est-il dans le bon état?
Actions recommandées: - glisser vers le bas pour rafraîchir, - sortir/revenir sur l’écran, - vérifier les loaders (si absents, logguer le cas), - vérifier la persistance effective dans Firestore.
Vérifier: - permission notification accordée, - utilisateur
authentifié, - worker périodique planifié, - document
notifications/<groupId> avec champs valides
(type, recipients, contentData,
etc.).
Causes possibles: - tirage incomplet ou non clos, - droits
insuffisants (MANAGE_CAISSES), - données
contributions/outflows incomplètes, - round déjà clôturé.
Une sanction suit un cycle: - création, - validation, - notification, - paiement, - clôture de recouvrement.
Selon son état, la visibilité et les actions changent.
Quand un bug est remonté, capturer: - module + écran, - rôle de l’utilisateur, - action exacte déclenchée, - résultat attendu vs observé, - logs (stacktrace + horodatage), - identifiant du njangui/tontine concerné.
Ce format réduit fortement le temps de diagnostic.
Objectif: relier rapidement chaque règle métier à son usage concret, sans entrer dans le détail technique d’implémentation.
| Domaine | Action clé | Qui peut le faire | Impact métier |
|---|---|---|---|
| Membres | Inviter ou retirer un membre | Responsable membres | Met à jour la composition réelle du njangui |
| Gouvernance | Créer une élection / enregistrer un staff | Selon état du mandat et rôle autorisé | Met en place les droits de pilotage |
| Tontines | Configurer le tirage et clore les étapes | Responsable tontines | Définit l’ordre des bénéficiaires |
| Rounds | Clore un tour de tontine | Responsable caisses | Archive le tour et déclenche sanctions si besoin |
| Caisses | Enregistrer crédit/débit | Responsable caisses | Assure la traçabilité financière |
| Événements | Clore contributions/outflows | Responsable caisses + événements | Impact direct sur soldes et discipline |
| Sanctions | Valider / marquer payé / clore recouvrement | Censeurs + caissiers | Met à jour l’état disciplinaire et financier |
| Rapports | Exporter un rapport | Utilisateur autorisé du module | Produit un document d’audit filtré |
| Action | Pourquoi c’est sensible |
|---|---|
| Modifier les règles de tirage | Peut invalider des tirages déjà effectués |
| Clore un tirage incomplet | Lance un tirage automatique pour les manquants |
| Clore un round | Génère des archives et potentiellement des sanctions |
| Supprimer une caisse | Supprime aussi les écritures liées |
| Supprimer une tontine / le njangui | Impact structurel important pour le groupe |
| Clore un recouvrement de sanction | Valide définitivement l’affectation financière |
| Famille | Exemples | Public cible |
|---|---|---|
| Invitations | invitation, acceptation, refus | membres et responsables |
| Tontines | création, tirage, changement de position | participants concernés |
| Rounds | début, rappel, clôture | participants + responsables caisses |
| Gouvernance | élection, rappel de vote, résultats | membres et staff |
| Sanctions | validation, échéance, recouvrement | membre concerné + censeurs/caissiers |
| Caisses | alerte déficit | membres en défaut |
| Événements / mains levées | outflow requis, clôture | caissiers + membres concernés |
Principe unique dans l’application: - un seul bouton d’export par zone, - export basé strictement sur les données actuellement filtrées.
| Module | Filtres usuels |
|---|---|
| Transactions de caisses | dates, compte, type, texte |
| Finance | période, membre, contexte |
| Sanctions | type, période, contexte, membre |