Functional Guide (English)
2026-04-06
This functional guide documents Njangui from the operational point of view. It details user journeys, governance rules, tontine and finance workflows, notifications, penalties, and reporting behavior for daily usage and stakeholder alignment.
Njangui solves a real operational problem: helping a community manage its full financial and governance lifecycle in one application.
It covers: - tontine operations, - caisse accounting, - events and main levees, - disciplinary penalties, - staff governance, - financial and disciplinary reporting.
Njangui is designed as a rich client: - business rules are implemented in the mobile app, - Firebase is used as persistence/synchronization, - architecture keeps room for a future backend replacement without rewriting all user workflows.
versionName: 1.1.0versionCode: 4code name: AJEMI-UDsA complete journey usually follows:
From Login, the user can: - sign in, - register, - reset
password.
Actor: staff with MANAGE_MEMBERS.
Can: - invite/remove members, - register initial staff, - create elections (when eligible), - manage replacement workflows requiring approvals.
Critical controls: - mandate state, - post-expiry eligibility window, - confirmation dialogs for high-impact actions.
Actor: staff with MANAGE_TONTINES.
Typical flow:
Business constraints include: - start-date constraints relative to round duration, - participant vs random ranking modes, - ranking reset when rules are changed.
MANAGE_CAISSES)MANAGE_PENALTIES)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
Operational hub for the active group: - invitations, - governance actions, - group administration, - current-round highlights for active tontines.
Removal rule: - not-started tontines: member is removed from participants/ranking, - ongoing/past tontines: historical data is preserved.
Permissions depend on: - active mandate, - expiry timing window, - delegated rights.
individualAmountPerRoundstartDateroundDurationmaxWinnerPerRoundparticipants (with totalNames
support)Preconditions: - multipleNamesStrategy
(NONE / BALANCED) - fixed
positionning - rankingType
(RANDOM_ALGORITHM / PARTICIPANT_SELECTION) -
deadlineForParticipantSelection
Core rules: - winners are grouped by maxWinnerPerRound,
- closing can auto-complete missing picks, - precondition updates
invalidate existing draws and require re-draw.
Supported models: - individual caisse (per-member balance), - shared caisse (single collective balance).
Capabilities: - CRUD caisse, - accounting operations (credit/debit), - temporary low-balance alert suspension, - shared caisse distribution, - filtered transaction view and export.
All amounts use the group’s configured currency.
Supported flows: - events with individual contributions, - events with collective contribution, - internal/external beneficiaries, - prioritized caisse outflow deduction, - outflow rollback for correction.
Automatic effects: - caisse debits, - penalties generated on deficits/late rules.
Penalty lifecycle:
A penalty may include: - amount-based fines, - text-based sanctions, - context (tontine/round/free text), - due date.
Provides: - filtered views by period/member/context, - consolidated aggregates, - single export action based strictly on filtered dataset.
Current notification families include: - invitations + invitation feedback, - tontine creation, - ranking lifecycle (pick, deadline, completion, changes, rules updates), - round lifecycle (start, reminder, closure required, completed, ended), - governance lifecycle (election, reminders, results, missing staff, replacements), - penalties lifecycle (review, validation, due, recovery), - low-balance caisse reminders, - events/main levee lifecycle signals.
Notifications are persisted in Firestore and pulled by the background worker for device delivery.
This section provides “living mockups”: structure + behavior expectations + critical states.
+------------------------------------------------------+
| NJANGUI |
| Subtitle: Organize your community with confidence |
| |
| Email [______________________________] |
| Password [______________________________] |
| |
| [ Sign in ] |
| |
| Create account Forgot password |
+------------------------------------------------------+
Expected states: - action loader while authenticating, - clear feedback for unknown/deactivated account, - safe redirect on success.
+------------------------------------------------------+
| Active group [Select] [Refresh] |
+------------------------------------------------------+
| KPI cards: Active members | Invitations | Staff |
+------------------------------------------------------+
| Governance: [Register Staff] [Create Election] |
| [Vote] [Approve Replacement] |
+------------------------------------------------------+
| Group admin: [Rename] [Currency] [Admins] [Leave] |
+------------------------------------------------------+
| Active tontines: current round + beneficiaries |
+------------------------------------------------------+
+------------------------------------------------------+
| Current tontine [Select by name] |
+------------------------------------------------------+
| Tontine summary card: status, current round, winners |
+------------------------------------------------------+
| Actions: [Ranking] [Rules] [Round operations] |
+------------------------------------------------------+
| My tontines list (cards) |
| - Name | Status | Rights-based actions |
+------------------------------------------------------+
UX notes: - selected tontine must be obvious, - avoid duplicate controls in top area and cards, - clear visual spacing between functional blocks.
+------------------------------------------------------+
| Ranking results |
| ... ordered slots ... |
| |
| [ Close ] [ Close ranking ] |
+------------------------------------------------------+
Action hierarchy: - secondary action on left, - destructive/high-impact action emphasized on right, - explicit confirmation before irreversible transition.
+------------------------------------------------------+
| Filters: date, account, type, search |
| [Apply] [Reset] |
| ---------------------------------------------------- |
| Filtered transactions list |
| ---------------------------------------------------- |
| [Close] [Export transactions] |
+------------------------------------------------------+
Export button must stay reachable on small devices.
+------------------------------------------------------+
| Member invitations |
| [Invite] [Remind] |
+------------------------------------------------------+
| Active staff / Mandate |
| [Register staff] [Create election] |
+------------------------------------------------------+
| Positions (inline editable): |
| - Position title |
| - Rights chips |
| - Candidates / assignees |
+------------------------------------------------------+
For Caisses, Events, Penalties, Finance: - top filters, - aggregate summary card, - detailed list, - rights-aware actions, - one export button scoped to current filtered data.
Every page should expose: - initialization loader, - action loader, - guided empty state, - recoverable error state, - pull-to-refresh.
Always verify: - active group selection, - user effective role and rights, - staff mandate state (active/expired), - network connectivity, - data freshness (pull-to-refresh).
Most frequent cause: rights or timeline condition not satisfied.
Checklist: 1. Is the user an active member? 2. Is required
MANAGE_* right granted? 3. Does staff mandate state allow
this action now? 4. Is the target tontine/event in the required
status?
Recommended actions: - pull-to-refresh, - leave/re-enter screen, - verify loaders and completion callbacks, - verify Firestore write actually succeeded.
Check: - device notification permission, - authenticated user
session, - worker scheduling state, -
notifications/<groupId> document fields
(type, recipients, contentData,
…).
Possible causes: - ranking not complete/closed, - missing
MANAGE_CAISSES right, - incomplete contribution/outflow
payload, - round already closed.
Penalty visibility is lifecycle-dependent: - creation, - validation, - notification, - payment, - recovery closure.
Capture at minimum: - module + screen, - user role, - exact action taken, - expected vs actual result, - logs/stacktrace with timestamp, - affected group/tontine identifiers.
This structure shortens diagnosis and reduces back-and-forth.
Purpose: map business rules to practical usage, with a functional focus (minimal technical vocabulary).
| Domain | Key action | Who can do it | Business impact |
|---|---|---|---|
| Members | Invite or remove member | Member management role | Updates real group composition |
| Governance | Create election / register staff | Role and mandate dependent | Activates governance rights |
| Tontines | Configure ranking and close draw | Tontine management role | Defines beneficiary order |
| Rounds | Close a tontine round | Caisse management role | Archives round and may generate penalties |
| Caisses | Record credit/debit operations | Caisse management role | Ensures financial traceability |
| Events | Close contributions/outflows | Caisse + events roles | Direct balance and discipline impact |
| Penalties | Validate / mark paid / close recovery | Penalty + caisse roles | Updates disciplinary and financial state |
| Reports | Export report | Authorized module user | Produces filtered audit-ready document |
| Action | Why sensitive |
|---|---|
| Update ranking rules | May invalidate already completed picks |
| Close incomplete ranking | Triggers automatic picks for missing participants |
| Close round | Creates archives and potential penalties |
| Delete caisse | Also removes linked accounting entries |
| Delete tontine / group | Major structural impact |
| Close penalty recovery | Finalizes monetary allocation |
| Family | Examples | Target audience |
|---|---|---|
| Invitations | invite, accept, decline | members and coordinators |
| Tontines | created, ranking updates, position changes | impacted participants |
| Rounds | started, reminder, closure | participants + caisse managers |
| Governance | election, vote reminder, results | members and staff |
| Penalties | validation, due reminder, recovery | impacted member + penalty/caisse staff |
| Caisses | low-balance warning | impacted members |
| Events / main levees | outflow required, closure | caisse staff + impacted members |
Global rule in the app: - one export action per report area, - export must use only currently filtered data.
| Module | Typical filters |
|---|---|
| Caisse transactions | date, account, type, search |
| Finance | period, member, context |
| Penalties | type, period, context, member |