Skip to content

Dashboard Revendeur (Self-Service)

Interface de self-service pour revendeurs actifs — consultation revenus, abonnés, sessions, profil.

URL de production : https://admin-rgz.duckdns.org/dashboard/revendeurAuth : JWT RS256 + verif reseller_id ownership Accessible : Revendeurs (V1/V2/V3), NOC, Admin


Sections Principales


Section 1 : Mes Revenus

Affichage détaillé revenus revendeur avec split 50/50 RGZ.

┌─ REVENUS ───────────────────────────────────┐
│ Période : [30 jours ▼] [90 jours] [YTD]    │
├─────────────────────────────────────────────┤
│                                             │
│ TOTAL BRUT (période)        450 000 F       │
│ Commission système (-1.5%)    -6 750 F      │
│ NET (avant split)            443 250 F      │
│                                             │
│ ┌─────────────────────────────────────────┐│
│ │ Split 50/50 RGZ ↔ Revendeur            ││
│ │                                         ││
│ │ Part RGZ        221 625 F (50%)  ✓      ││
│ │ Votre part      221 625 F (50%)  💰     ││
│ └─────────────────────────────────────────┘│
│                                             │
│ DÉTAIL PAR JOUR (graphique linéaire)       │
│          ↑ 20K                             │
│          │    ╱╲    ╱╲    ╱╲              │
│      15K │───╱  ╲──╱  ╲──╱  ╲──           │
│      10K │                                │
│          │────────────────────→ (30j)     │
│                                             │
│ Jours actifs : 28/30                      │
│ Moyenne par jour : 14 870 F                │
│ Meilleur jour : 22 450 F (17/02/2026)     │
│ Dépôt prévu : 25/02/2026 (RGZ part)      │
│                                             │
│ [Télécharger rapports détaillés (CSV/PDF)]│
│ [Voir factures mensuelles]                 │
└─────────────────────────────────────────────┘

Métrique Détaillées

MétriqueCalculFréquence MAJ
Total brutSUM invoices montant (période)1 min
CommissionTotal × 1.5%1 min
NET (avant split)Total - Commission1 min
Part RGZNET × 50%1 min
Votre partNET × 50%1 min
Jours actifsCOUNT(DISTINCT date invoices)1 min
Moyenne/jourNET / jours_actifs1 min
Meilleur jourMAX(daily_revenue)1 min
Dépôt prévuCalculé selon calendrier financierHebdo

API : GET /api/v1/dashboard/revendeur/revenue?period=30d → Cache Redis 5 min

TIP

Transparence financière — Le revendeur voit exactement le calcul NET = (Total - Commission) × 50%. Pas de surprise. Télécharge facture officielle mensuelle (PDF signé RGZ).


Section 2 : Mes Abonnés

Liste abonnés du revendeur avec filtrage et recherche.

┌─ MES ABONNÉS ───────────────────────────────┐
│ Filtre : [Tous ▼] [Actifs] [Suspendus]     │
│ Recherche : [MSISDN ou subscriber_ref...]   │
├─────────────────────────────────────────────┤
│ Affichage : 1-20 de 1234                   │
│                                             │
│ subscriber_ref │ MSISDN      │ Status    │ Devices │ Forfait  │
│─────────────────────────────────────────────│
│ RGZ-0197979964 │ +229979... │ Active    │ 1 / 2   │ Mensuel  │
│ RGZ-0267834512 │ +229678... │ Active    │ 2 / 2   │ Hebdo    │
│ RGZ-0145639217 │ +229456... │ Suspended │ 0       │ Expiré   │
│ RGZ-0178945623 │ +229789... │ Blocked   │ 0       │ N/A      │
│ ...            │ ...        │ ...       │ ...     │ ...      │
│                                             │
│ [Afficher plus] ou [Pagination 20/50/100]  │
│ [Exporter CSV (abonnés actifs)]             │
└─────────────────────────────────────────────┘

Colonnes Abonnés

ColonneVisible RevendeurNotes
subscriber_refID unique "RGZ-MSISDN"
MSISDNMasqué dernier 3 chiffres (privacy)
Statusactive/suspended/blocked
Devices actifsCompteur MACs sessions actuelles
Forfait actifJournalier/Hebdo/Mensuel (ou expiré)
Données consomméesSeulement si fair-use en vigueur
Créé leDate inscription
Dernière sessionHorodatage ou "jamais"

API : GET /api/v1/dashboard/revendeur/subscribers?page=1&status=active&limit=20

WARNING

Privacy — Revendeur ne voit PAS les MACs détaillées (sécurité équipement abonné). Juste compteur "X devices connectés".


Section 3 : Mes Sessions

Sessions RADIUS actives en temps réel.

┌─ MES SESSIONS ACTIVES ──────────────────────┐
│ Refresh : Real-time (5s)                    │
│ Filtre : [Tous] [Journalier] [Hebdo] [Mens]│
├─────────────────────────────────────────────┤
│ Total sessions : 567 | Données ↓/↑ : 2.3GB │
│                                             │
│ Abonné      │ MAC         │ Depuis │ Débit │
│─────────────────────────────────────────────│
│ RGZ-019...  │ C8:2A:**:**│ 02:45  │ 5.2M  │
│ RGZ-026...  │ D4:5E:**:**│ 15:32  │ 2.1M  │
│ RGZ-014...  │ 88:A1:**:**│ 23:12  │ 1.8M  │
│ ...         │ ...        │ ...    │ ...   │
│                                             │
│ Légende : ↓ = download, ↑ = upload (Mbps)  │
│ [Déconnecter session] [Historique] [Export]│
│                                             │
│ HISTORIQUE SESSIONS (derniers 7j)          │
│ Graphique linéaire : sessions actives     │
│ Crête : 892 sessions (17/02 16h)          │
│ Moyenne : 456 sessions                    │
│                                             │
└─────────────────────────────────────────────┘

Colonnes Session Temps Réel

ColonneSourceRefreshÉditable
subscriber_refradius_sessions FKReal-time
MAC (masquée)radius_sessionsReal-time
Depuissession_startReal-time
Débit actuelAcct-Output-Octets diff30s
Forfaitinvoices (dernière)1 min
Bytes ↓/↑sum(Acct-*-Octets)30s

Actions :

  • Déconnecter (CoA RADIUS) : Admin + Revendeur
  • Historique (7j) : CSV export

API : GET /api/v1/dashboard/revendeur/sessions?active=true (Websocket pour live)

TIP

Débit Temps Réel — Revendeur voit upload/download live. Utile pour diagnostiquer congestion ou slow client. Données brutes = octets/intervalle → conversion Mbps frontend.


Section 4 : Mon Profil

Paramètres + infos revendeur.

┌─ MON PROFIL ────────────────────────────────┐
│ [Infos générales] [Sites] [Documents]      │
├─────────────────────────────────────────────┤
│                                             │
│ INFOS GÉNÉRALES                             │
│ ┌──────────────────────────────────────────┐│
│ │ Nom revendeur : Kossou Tech Connect      ││
│ │ Classification : V2 (Multi-site)         ││
│ │ Status : Active                          ││
│ │ Date validation : 15/12/2025             ││
│ │ Responsable : Kossou Jacques             ││
│ │ Email : contact@kossou.bj               ││
│ │ Téléphone : +229 97 98 XX XX            ││
│ │ Adresse : Cotonou, Rue du Commerce      ││
│ └──────────────────────────────────────────┘│
│                                             │
│ SITES (V2)                                  │
│ ┌──────────────────────────────────────────┐│
│ │ S1 | Cotonou Centre   | 10.142.0.0/24   ││
│ │ S2 | Cotonou Sud      | 10.143.0.0/24   ││
│ │ [Ajouter site] (si V3 upgrade possible)  ││
│ └──────────────────────────────────────────┘│
│                                             │
│ DOCUMENTS CONTRAT                           │
│ ┌──────────────────────────────────────────┐│
│ │ [📄 Convention partenariat v1.0.docx]   ││
│ │ [📄 IFU technique v2.3.pdf]             ││
│ │ [📄 Amendement ARCEP 2026-02.pdf]       ││
│ │ [📄 SLA document v1.0.pdf]              ││
│ └──────────────────────────────────────────┘│
│                                             │
│ PARAMÈTRES                                  │
│ ┌──────────────────────────────────────────┐│
│ │ Notification email invoices : ✓ OUI     ││
│ │ Rappel paiement avant : 3 jours          ││
│ │ Compte bancaire IBAN : [IBAN...]         ││
│ │ [Modifier] [Valider]                     ││
│ └──────────────────────────────────────────┘│
│                                             │
│ SUSPENSION / RÉSILIATION                    │
│ [Demander suspension (30j)] [Résilier]    │
│                                             │
└─────────────────────────────────────────────┘

Champs Profil (Lecture Seule)

ChampÉditablitéNotes
Nom revendeurImmuable après validation
ClassificationModifiable par Admin (V1→V2→V3 upgrade)
StatusAdmin only
DatesTimestamps audit
ResponsableRevendeur peut éditer
EmailRevendeur peut éditer
TéléphoneRevendeur peut éditer
Sites✓ (Admin)Admin ajoute sites (V2/V3)
Paramètres emailRevendeur contrôle
IBANRevendeur renseigne pour virement

API : GET /api/v1/dashboard/revendeur/profile (read) + PATCH /api/v1/dashboard/revendeur/profile (write champs autorisés)

INFO

Autonomie revendeur — Peut modifier nom responsable, emails, params notifications, IBAN. Impossible de changer classification (admin only). Demande suspension/résiliation créé ticket support pour approbation admin.



Authentification Revendeur

JWT claim : {
  sub: reseller_id (UUID),
  role: 'reseller',
  reseller_name: 'Kossou Tech',
  exp: timestamp (8h)
}

Vérification ownership :
  - Endpoint /api/v1/dashboard/revendeur/*
  - Valide JWT claim.reseller_id = resource.reseller_id
  - Jamais faire confiance au frontend (reseller_id)
  - Code backend : if current_user.reseller_id != resource.reseller_id: raise 403

Session : Redis TTL 8h, inactivité 1h = logout auto

WARNING

Sécurité IDOR — Systématiquement valider ownership avant retourner données (LL#SEC-01). Revendeur A ne peut jamais voir revenus Revendeur B même si URL manipulée.


Intégrations Outils RGZ

OutilImpact Dashboard RevendeurAPI
#19 Moteur FacturationCalcul revenus 50/50GET /api/v1/dashboard/revendeur/revenue
#20 VouchersPas visible revendeurN/A (admin only)
#21 RéconciliationDonnées factures mises à jourAuto 00:15 UTC
#51 Dashboard RevendeurCETTE interfaceGET /api/v1/dashboard/revendeur/*
#56 OnboardingStatus étape visible en profilGET /api/v1/resellers/{id}/onboarding-step
#6 RADIUSSessions actives affichéesWebsocket stream
#47 ARCEPDocuments téléchargementGET /api/v1/reports/arcep/... (revendeur peut télécharger export personnel)

Dernière mise à jour : 2026-02-24 Stack : React 18 + Tailwind CSS Hébergement : docker/web/ (nginx:alpine) HTTPS : Let's Encrypt Traefik Polling : Websocket pour sessions real-time, HTTP polling 5s pour autres

PROJET MOSAÏQUE — 81 outils, 22 conteneurs, 500+ revendeurs WiFi Zone