📖 Documentation officielle

AllyStore
Guide complet

La plateforme SaaS tout-en-un pour supermarchés africains. Découvrez en détail chaque module, son rôle et comment l'utiliser au quotidien.

42Modules documentés
22Pays ciblés
100%Cloud
80%Tâches automatisées
Pensé pour le terrain

Un supermarché, c'est mille gestes par jour.
AllyStore les relie tous.

Derrière chaque module, il y a une caissière pressée, un gérant qui surveille ses marges, un livreur sous la pluie. AllyStore n'est pas un logiciel de plus : c'est le fil qui relie la caisse au stock, le stock au fournisseur, le client au point de fidélité. Voici comment tout s'emboîte.

AllyStore42 modules · 1 cœurCaisse POSStocksCRM & FidélitéComptabilitéAnalyticsRH & PlanningLogistiqueAnti-gaspi
Une seule vente, tout se synchronise — en temps réelLe clientpasse en caisseCaisse POSscanne le panierStockse met à jour −1Fidélitécrédite les pointsComptaécrit la venteAnalyticsactualise le tableau

Tableau de bord

Votre magasin d'un seul coup d'œil — KPIs, ventes récentes et alertes en temps réel.

Pourquoi ce module ? Le tableau de bord est le premier écran affiché après connexion. Il consolide les indicateurs essentiels du jour (chiffre d'affaires, stock bas, fidélité) pour que le responsable sache immédiatement où en est son magasin. Chaque chiffre est cliquable et redirige vers le module concerné pour aller plus loin.

🔧 Comment l'utiliser

1

Connexion et vue immédiate

Après authentification, AllyStore charge automatiquement le tableau de bord. Toutes les données sont calculées en temps réel depuis la base de données de votre boutique.

2

Lire les KPI du jour

Parcourez la rangée de cartes en haut : CA du jour, Ventes du jour, Panier moyen (chacune avec sa variation ▲/▼ vs hier), CA du mois (avec son objectif = total du mois dernier) et Alertes (stock bas + DLC ≤ 10 jours). Tous les montants sont nets de remises — identiques à ce qu'encaisse réellement la caisse.

3

Analyser les graphiques

Sous les cartes : la courbe du CA sur 14 jours (les jours sans vente apparaissent à zéro — pas de trous trompeurs), la jauge « Objectif mensuel » (demi-cercle : ambre < 60 %, bleu, vert ≥ 100 % de l'objectif = total du mois dernier), le donut des modes de paiement et le camembert du CA par catégorie (top 5 + « Autres ») sur 30 jours, et le Top 5 produits avec barres de progression et quantités vendues.

4

Consulter les ventes récentes

Le tableau central liste les 10 dernières ventes avec numéro, montant TTC, mode de paiement, caissier et heure. Cliquez sur une ligne pour ouvrir le reçu complet.

5

Gérer les alertes stock bas

La zone d'alertes liste tous les produits dont le stock actuel est inférieur ou égal au seuil minimum configuré. Cliquez sur un produit pour créer directement un bon de commande fournisseur.

6

Vérifier les infos boutique

Le panneau latéral affiche la devise active (FCFA), le taux de TVA, votre rôle (Admin / Caissier / Manager) et si le programme fidélité est activé pour cette boutique.

7

Drill-down vers les modules

Chaque KPI et chaque alerte contient un lien "Voir tout" qui navigue directement vers le module concerné (Stocks, Caisse POS, Clients…) avec les filtres pré-appliqués.

⭐ Fonctionnalités clés

📊

KPIs avec tendance

CA du jour, ventes et panier moyen — chacun avec sa variation ▲/▼ vs hier. Jamais un chiffre isolé.

🎯

Jauge objectif mensuel

Demi-cercle de progression du CA du mois vs le total du mois dernier — ambre, bleu puis vert à 100 %.

📈

Courbe CA 14 jours

Évolution du chiffre d'affaires net de remises, jour par jour, jours creux inclus.

🍩

Donut paiements

Répartition Espèces / Carte / Mobile Money du CA des 30 derniers jours.

🥧

Camembert catégories

Poids de chaque catégorie dans le CA (top 5 + « Autres ») pour repérer ce qui porte le magasin.

🏆

Top 5 produits

Meilleures ventes sur 30 jours avec barres de progression et quantités vendues.

🔔

Alertes consolidées

Produits sous seuil minimum + lots à DLC proche (≤ 10 jours) dans une seule carte.

🧾

Ventes récentes

Dernières transactions avec montant net, mode de paiement et caissier responsable.

🏪

Infos boutique

Devise, TVA, rôle, fidélité, produits actifs et clients inscrits en un coup d'œil.

ally-store.vercel.app/dashboard
CA du jour
847 500 FC
▲ +12% vs hier
Ventes du jour
47
▲ +8% vs hier
Panier moyen
18 032 FC
▼ -4% vs hier
CA du mois
3,2 M FC
Objectif : 4,1 M FC
Alertes
9
⚠ 6 stock bas · 3 DLC
CHIFFRE D'AFFAIRES — 14 JOURS
OBJECTIF MENSUEL
78%
3,2 M / 4,1 M FC
N° VenteMontant TTCPaiementCaissierHeure
#V-2026-004718 500 FCEspècesAmina K.14:32
#V-2026-004642 000 FCMobile MoneyDjibril O.14:17
#V-2026-00459 750 FCCarteAmina K.13:58
#V-2026-004463 200 FCEspècesFatou S.13:41
#V-2026-004327 800 FCMobile MoneyDjibril O.13:20
6 produits sous seuil minimum : Riz 25kg (stock 2 / seuil 10), Huile Palme 5L (stock 1 / seuil 5), Farine de maïs 10kg (stock 3 / seuil 8)… Voir tous les produits →
💡
Astuce : Tous les montants du tableau de bord sont nets de remises (promotions et points fidélité déduits) — ils correspondent exactement à ce que la caisse encaisse. L'heure d'actualisation s'affiche en haut à droite ; rechargez la page pour rafraîchir. Si plusieurs caisses sont actives simultanément, le CA du jour les consolide toutes.

Caisse POS

Encaissez rapidement, appliquez des remises, fidélisez vos clients et gérez tous les modes de paiement.

Pourquoi ce module ? La caisse POS est le cœur opérationnel d'AllyStore. Elle permet d'encaisser en quelques secondes grâce à la recherche produit instantanée ou au scan code-barres. Elle calcule automatiquement la TVA, applique les promotions actives, identifie le client fidélité et génère le rendu monnaie. Chaque vente met à jour le stock en temps réel et enregistre les points fidélité.

🔧 Comment l'utiliser

1

Rechercher ou scanner un produit

Tapez le nom du produit dans la barre de recherche (panneau gauche) ou scannez son code-barres. La grille de produits se filtre instantanément avec le stock disponible affiché sous chaque carte.

2

Ajouter au panier

Cliquez sur un produit pour l'ajouter au panier (panneau droit). Ajustez la quantité avec + / -. Appliquez une remise par ligne en pourcentage ou montant fixe directement sur la ligne article.

3

Identifier le client fidélité (optionnel)

Entrez le numéro de téléphone du client dans le champ dédié. AllyStore affiche son nom, son solde de points actuel et les récompenses disponibles. La vente lui attribuera automatiquement de nouveaux points.

4

Vérifier les totaux

Le récapitulatif panier affiche le sous-total HT, le montant TVA calculé par taux, les remises appliquées et le total TTC final. Les promotions actives (ex : -10% sur le riz) sont appliquées automatiquement.

5

Choisir le mode de paiement

Cliquez sur Encaisser. La modal de paiement propose : Espèces (saisie du montant remis → rendu calculé automatiquement), Carte, Mobile Money, ou Paiement mixte (plusieurs méthodes combinées).

6

Payer avec les points fidélité

Si un client fidélité est identifié et qu'il a un solde de points, un encart « Payer avec les points » apparaît au checkout : saisissez le nombre de points (ou bouton Max) — leur contre-valeur se déduit du total, le reste se règle normalement (espèces, carte, mobile money). Le solde est vérifié et débité côté serveur : impossible d'utiliser plus de points que le client n'en possède, même depuis deux caisses en même temps.

7

Finaliser et imprimer

La modal de succès confirme le numéro de vente, le rendu monnaie, les points fidélité gagnés et propose d'imprimer ou d'envoyer le reçu. Le stock est immédiatement decrementé. Si un produit atteint 0, il passe en statut PENDING_DELIVERY.

8

Annuler une vente (erreur de caisse)

Depuis la modal de succès, le bouton « Annuler la vente » (confirmation en deux temps) contre-passe TOUT automatiquement : la vente passe en VOIDED, le stock est réintégré article par article, les compteurs du fonds de caisse sont corrigés, les promotions utilisées sont libérées, les points gagnés sont repris et les points utilisés en paiement sont remboursés au client. Chaque annulation est tracée (motif + caissier) dans le journal d'audit.

⭐ Fonctionnalités clés

🔎

Recherche instantanée

Filtrage produits en temps réel par nom, SKU ou catégorie avec affichage du stock restant.

📷

Scan code-barres

Compatible lecteur USB et caméra mobile pour ajouter un produit en une seconde.

💸

Remises flexibles

Remise globale sur le panier ou par ligne article, en pourcentage ou montant fixe (FC).

💰

Rendu monnaie auto

Saisissez le montant remis par le client — AllyStore calcule et affiche le rendu en gros chiffres.

📱

Mobile Money

Prise en charge Wave, Orange Money, M-Pesa et paiements mixtes espèces + mobile.

🎁

Fidélité intégrée

Identification client par téléphone, cumul automatique de points et affichage des récompenses disponibles.

🏷️

Promotions auto

Les promotions actives (période, produit, catégorie) sont détectées et appliquées sans action du caissier.

🔄

Cycle stock auto

Stock 0 déclenche automatiquement le passage en PENDING_DELIVERY pour alerter le responsable.

Paiement par points

Le client règle tout ou partie de son panier avec ses points fidélité — solde vérifié et débité côté serveur.

↩️

Annulation sécurisée

Void en deux clics : stock réintégré, caisse corrigée, points contre-passés, promotions libérées, audit tracé.

🛡️

Anti-survente

Le décrément de stock est conditionnel en base : deux caisses ne peuvent jamais vendre le même dernier article.

🧮

Montants recalculés serveur

Prix, promotions et remises sont recalculés côté serveur à l'encaissement — un poste caisse compromis ne peut pas fausser le CA.

ally-store.vercel.app/pos
🔍 Recherche produit
riz…
Riz 25kg
12 500 FC
Stock : 8
Riz parfumé 5kg
3 200 FC
Stock : 24
Riz brisé 10kg
5 800 FC
Stock : 2 ⚠
Huile Palme 5L
4 500 FC
Stock : 12
🛒 Panier
ProduitQtéPUTotal
Riz 25kg212 50025 000 FC
Huile Palme 5L34 50013 500 FC
Farine maïs 10kg16 0006 000 FC
Sous-total HT41 125 FC
TVA 18%7 403 FC
Total TTC44 375 FC
Encaisser →
💡
Paiement mixte : Si un client paie 30 000 FC en espèces et le reste en Mobile Money, utilisez l'option "Paiement mixte" dans la modal — AllyStore répartit automatiquement et génère un reçu unifié.

Gestion des shifts caisse

Ouvrez et fermez la caisse chaque jour, contrôlez l'écart de trésorerie et auditez l'historique des shifts.

Pourquoi ce module ? La gestion de caisse permet de formaliser chaque session de travail : un shift commence avec un montant initial mis en caisse et se termine avec un comptage physique. AllyStore calcule l'écart entre le montant attendu (ventes espèces - remboursements) et le montant compté, ce qui permet de détecter immédiatement toute anomalie (erreur de rendu, vol, oubli).

🔧 Comment l'utiliser

1

Ouvrir un shift

En début de journée (ou de session), cliquez sur Ouvrir la caisse. Saisissez le montant d'amorce mis physiquement dans le tiroir-caisse. AllyStore horodate l'ouverture et enregistre le caissier responsable.

2

Vendre pendant le shift

Toutes les ventes enregistrées via la Caisse POS sont automatiquement rattachées au shift ouvert. Vous pouvez consulter en temps réel le cumul des ventes espèces, carte et mobile money du shift en cours.

3

Fermer le shift

En fin de session, cliquez sur Fermer la caisse. Saisissez le montant compté physiquement dans le tiroir. AllyStore calcule l'écart : Attendu = Amorce + Ventes espèces - Remboursements espèces.

4

Analyser l'écart

Un écart positif (trop en caisse) ou négatif (manquant) est affiché en rouge/vert avec le montant précis. Notez la cause dans le champ commentaire avant de valider la fermeture.

5

Réconciliation et historique

Le responsable peut marquer un shift fermé comme Réconcilié après vérification comptable. L'historique complet (tous les shifts) reste accessible avec filtres par date et caissier.

⭐ Fonctionnalités clés

🔓

Ouverture horodatée

Chaque shift est daté, lié au caissier et au montant d'amorce initial.

⚖️

Calcul d'écart auto

Comparaison montant attendu vs compté avec affichage immédiat de la différence.

📋

Historique complet

Tous les shifts avec statut (Ouvert / Fermé / Réconcilié) et statistiques détaillées.

📈

Stats par shift

Nombre de ventes, total des encaissements, annulations et remboursements du shift.

🔒

Audit & réconciliation

Le manager valide chaque shift fermé et peut ajouter un commentaire de clôture comptable.

👤

Responsabilité caissier

Chaque shift est nominatif — aucune vente ne peut être enregistrée sans shift ouvert.

ally-store.vercel.app/cash-shifts
Shift en cours
Ouvert
Depuis 08:15
Ventes shift
31 ventes
287 500 FC
Espèces attendues
142 300 FC
Amorce 25 000 incluse
Écart dernier shift
-1 500 FC
⚠ Déficit
DateCaissierOuvertureFermetureÉcartStatut
04/06/2026Amina K.08:15Ouvert
03/06/2026Djibril O.08:0018:30-1 500 FCFermé
02/06/2026Fatou S.08:1018:45+200 FCRéconcilié
01/06/2026Amina K.08:0518:000 FCRéconcilié
Important : Un shift ne peut pas être rouvert une fois fermé. Si vous avez saisi un mauvais montant de comptage, le responsable peut ajouter un commentaire de correction lors de la réconciliation, mais l'écart reste enregistré pour la traçabilité.

Gestion des stocks

Gérez l'inventaire complet, réceptionnez les livraisons et suivez le cycle de vie de chaque produit en rayon.

Pourquoi ce module ? Les stocks sont la colonne vertébrale du magasin. AllyStore trace chaque produit depuis sa création jusqu'à sa mise en rayon via un cycle de 4 états clairs. Chaque mouvement (vente, réception, perte, ajustement) est enregistré dans un journal d'inventaire (InventoryLog) qui garantit la traçabilité totale et facilite les inventaires périodiques.

🔧 Comment l'utiliser

1

Créer un nouveau produit

Cliquez sur + Nouveau produit. Renseignez : nom, SKU, catégorie, prix HT, taux TVA, stock initial, seuil minimum d'alerte, fournisseur et si le produit est périssable (date d'expiration obligatoire à la réception).

2

Réceptionner une livraison

Depuis la fiche produit ou via le bon de commande, cliquez sur Réceptionner un lot. Saisissez la quantité reçue, le prix d'achat HT, le numéro de lot et les dates de fabrication / expiration si le produit est périssable.

3

Changer le stade du produit

Depuis le panneau latéral de la fiche produit, faites progresser le produit dans son cycle : PENDING_DELIVERY → IN_DELIVERY → IN_STOCK → ON_SHELF. Seuls les produits ON_SHELF apparaissent dans la caisse POS.

4

Filtrer et surveiller les niveaux

Utilisez les filtres en haut de la liste : recherche textuelle, catégorie, niveau de stock (OK / Bas / Rupture), et stade de cycle. Les produits en rupture ou sous seuil sont mis en évidence automatiquement.

5

Ajuster manuellement le stock

Pour corriger une erreur de comptage, enregistrer une perte ou un vol, utilisez Ajustement stock. Le motif et la quantité sont enregistrés dans l'InventoryLog avec le type approprié (DAMAGE, THEFT, MANUAL_ADJUSTMENT).

⭐ Fonctionnalités clés

🔄

Cycle de vie 4 états

PENDING_DELIVERY → IN_DELIVERY → IN_STOCK → ON_SHELF — chaque transition est horodatée.

📦

Réception par lots

Réceptionnez avec n° de lot, prix d'achat et dates fab/expiration pour les périssables.

🔍

Filtres avancés

Combinez catégorie, niveau de stock et stade pour retrouver n'importe quel produit en 2 clics.

📷

Photo produit

Chaque fiche produit peut intégrer une photo affichée dans la caisse POS pour éviter les confusions.

📝

InventoryLog complet

Journal de tous les mouvements de stock : ventes, réceptions, pertes, ajustements, retours.

🏭

Lien fournisseur

Chaque produit est rattaché à un fournisseur pour faciliter la création de bons de commande.

⚠️

Alertes seuil min

Notification automatique dès qu'un produit passe sous son seuil minimum configuré.

🧮

Valeur de stock

Calcul automatique de la valeur totale du stock au prix d'achat et au prix de vente.

ally-store.vercel.app/stocks
🔍 Rechercher… Toutes catégories Tous niveaux Tous stades
ProduitSKUCatégoriePrix TTCStock / SeuilStadeActions
Riz parfumé 25kgRIZ-PF-25Alimentaire12 500 FC 8 / 10 ON_SHELF Voir
Huile Palme 5LHUI-PAL-5Alimentaire4 500 FC 1 / 5 ON_SHELF Commander
Farine de maïs 10kgFAR-MAI-10Alimentaire6 000 FC 3 / 8 ON_SHELF Commander
Savon Lux x12SAV-LUX-12Hygiène8 400 FC 45 / 20 IN_STOCK Mettre en rayon
Lait concentré sucréLAI-CON-02Alimentaire1 200 FC 0 / 15 PENDING_DELIVERY Commander
📌
Cycle de vie : Un produit IN_STOCK est en réserve (arrière-boutique) mais pas encore accessible à la vente. Il faut explicitement le passer en ON_SHELF pour qu'il apparaisse dans la caisse POS. Cela permet de séparer la gestion physique (où est la marchandise ?) de la gestion commerciale (est-ce vendable ?).

Pertes & Démarque

Enregistrez les pertes involontaires (casse, vol, expiration) et mesurez leur impact financier sur votre marge.

Pourquoi ce module ? La démarque inconnue représente en moyenne 1 à 3% du chiffre d'affaires dans le commerce de détail africain. AllyStore permet de tracer chaque perte avec son motif, sa quantité et sa valeur financière. Ces données alimentent le journal InventoryLog et sont disponibles dans les rapports de gestion pour calculer précisément votre taux de démarque.

🔧 Comment l'utiliser

1

Accéder au module

Depuis le menu principal, cliquez sur Stocks → Pertes & Démarque. Vous voyez immédiatement le journal des dernières pertes enregistrées et les totaux par type.

2

Déclarer une nouvelle perte

Cliquez sur + Nouvelle perte. Choisissez le produit concerné, le type de perte (DAMAGE / THEFT / EXPIRED / MANUAL_ADJUSTMENT), la quantité et ajoutez un commentaire optionnel (ex : "carton tombé du rayonnage").

3

Valider et impacter le stock

À la validation, AllyStore décrémente automatiquement le stock du produit de la quantité saisie et crée une entrée dans l'InventoryLog avec le type correspondant. La valeur financière est calculée au prix d'achat moyen.

4

Analyser les pertes

Le tableau de synthèse affiche les pertes totales du mois par type (casse, vol, expiration) avec leur valeur en FCFA. Exportez les données pour votre comptable ou votre assureur.

⭐ Fonctionnalités clés

🗂️

4 types de pertes

Casse (DAMAGE), Vol (THEFT), Expiration (EXPIRED), Correction manuelle (ADJUSTMENT).

💵

Valorisation auto

Chaque perte est valorisée au prix d'achat moyen pondéré pour quantifier l'impact réel sur la marge.

📓

Journal InventoryLog

Toutes les pertes sont tracées dans le journal central consultable par produit, période ou type.

📊

Synthèse mensuelle

Totaux par type de perte avec comparaison mois précédent et taux de démarque en pourcentage du CA.

🔗

Impact stock immédiat

La déclaration d'une perte décrémente le stock en temps réel sans passer par la caisse.

ally-store.vercel.app/stocks/shrinkage
Pertes ce mois
34 200 FC
▲ +12% vs mai
Casse (DAMAGE)
18 500 FC
54% du total
Vol (THEFT)
9 200 FC
27% du total
Expiration
6 500 FC
19% du total
DateProduitTypeQtéValeurCommentaire
04/06Yaourt Activia x6EXPIRED43 600 FCDLC dépassée
03/06Huile Palme 5LDAMAGE29 000 FCBouteilles cassées
02/06Savon Lux x12THEFT18 400 FCVol constaté inventaire
01/06Biscuits Oreo 300gDAMAGE64 800 FCEmballages écrasés
💡
Bonne pratique : Réalisez un inventaire physique hebdomadaire et comparez le stock AllyStore au comptage réel. Les écarts non justifiés doivent être déclarés comme THEFT ou MANUAL_ADJUSTMENT pour maintenir la fiabilité de votre inventaire comptable.

Bons de commande

Formalisez vos commandes fournisseurs, suivez les livraisons et réceptionnez les marchandises en toute traçabilité.

Pourquoi ce module ? Un bon de commande formel protège le commerçant en cas de litige fournisseur et garantit que les quantités commandées correspondent à ce qui est attendu. AllyStore génère des numéros de BC automatiques, suit chaque commande jusqu'à la réception complète et met à jour le stock en temps réel dès la réception partielle ou totale.

🔧 Comment l'utiliser

1

Créer un bon de commande

Cliquez sur + Nouveau BC. Sélectionnez le fournisseur, ajoutez les produits avec quantité commandée et prix HT négocié. Saisissez la date de livraison attendue. AllyStore attribue automatiquement le numéro BC-2026-XXXX.

2

Envoyer la commande

Passez le BC en statut SENT pour signifier que la commande a été transmise au fournisseur (par téléphone, WhatsApp ou email). Le BC est verrouillé en modification une fois envoyé.

3

Réceptionner la livraison

À l'arrivée des marchandises, cliquez sur Réceptionner. Pour chaque ligne produit, saisissez la quantité effectivement reçue (peut être inférieure à la quantité commandée). Le stock est incrémenté et un log SUPPLIER_IN est créé.

4

Gérer les réceptions partielles

Si une partie seulement de la commande arrive, le BC passe en statut PARTIALLY_RECEIVED. Il reste ouvert pour une réception complémentaire ultérieure. Le suivi des quantités restantes est affiché par ligne.

5

Clôturer ou annuler

Une fois toutes les quantités reçues, le BC passe automatiquement en RECEIVED. Un BC peut être annulé (CANCELLED) tant qu'il n'a pas encore de réception enregistrée.

⭐ Fonctionnalités clés

📄

Numérotation auto

Format BC-AAAA-XXXX généré automatiquement pour chaque commande, par année civile.

🔄

5 statuts de suivi

DRAFT → SENT → PARTIALLY_RECEIVED → RECEIVED / CANCELLED avec historique des transitions.

📦

Réception partielle

Réceptionnez ligne par ligne, quantité par quantité — le BC reste ouvert jusqu'à réception complète.

🏭

Multi-fournisseurs

Un BC par fournisseur — retrouvez facilement l'historique de vos commandes par fournisseur.

📈

Impact stock auto

Chaque réception génère un log SUPPLIER_IN et incrémente le stock en temps réel.

💰

Prix d'achat négocié

Enregistrez le prix HT fournisseur pour calculer la marge brute précise à la revente.

ally-store.vercel.app/purchase-orders
DRAFT
SENT
PARTIALLY_RECEIVED
RECEIVED
N° BCFournisseurMontant HTLivraison prévueStatut
BC-2026-0018Diallo & Frères SARL185 000 FC06/06/2026 SENT
BC-2026-0017Coulibaly Distribution320 000 FC04/06/2026 PARTIALLY_RECEIVED
BC-2026-0016Mansour Import-Export97 500 FC01/06/2026 RECEIVED
BC-2026-0015Diallo & Frères SARL210 000 FC28/05/2026 RECEIVED
BC-2026-0014SOCOCE Grossiste45 000 FC CANCELLED
📌
Note : Les produits en statut PENDING_DELIVERY ou IN_DELIVERY sont automatiquement suggérés lors de la création d'un nouveau BC, avec la quantité recommandée calculée pour atteindre 2× le seuil minimum.

Retours clients

Gérez les retours produits, évaluez l'état des articles et remboursez le client de la manière la plus adaptée.

Pourquoi ce module ? Un retour bien géré fidélise le client. AllyStore structure le processus de retour en distinguant la raison du retour, l'état physique de l'article (peut-il être remis en vente ?) et le mode de remboursement. Chaque retour approuvé impacte automatiquement le stock et les finances selon les règles configurées pour votre boutique.

🔧 Comment l'utiliser

1

Initier un retour

Cliquez sur + Nouveau retour. Recherchez la vente d'origine par numéro (ex : #V-2026-0042) ou par téléphone client. La vente d'origine est optionnelle si le client ne dispose plus du reçu.

2

Sélectionner les articles retournés

Parmi les articles de la vente, cochez ceux qui sont retournés et saisissez la quantité. Pour chaque article, évaluez la condition : GOOD (article intact, remis en stock), DAMAGED (article abîmé) ou UNSELLABLE (invendable, à jeter).

3

Renseigner la raison du retour

Sélectionnez la raison : produit défectueux, erreur de commande, insatisfaction, date d'expiration proche, etc. Cette information est utilisée dans les rapports qualité fournisseur.

4

Choisir le mode de remboursement

Sélectionnez comment rembourser le client : Espèces (montant sorti de caisse), Avoir (crédit utilisable sur un prochain achat) ou Points fidélité (conversion en points sur le compte client).

5

Approuver et traiter

Le caissier soumet le retour (PENDING). Le manager l'examine et l'approuve (APPROVED) ou le rejette (REJECTED) avec motif. Après approbation, un clic sur Traiter passe en PROCESSED et impacte le stock et les finances.

6

Vérifier l'impact stock

Les articles en condition GOOD sont réintégrés en stock avec un log RETURN_IN. Les articles DAMAGED ou UNSELLABLE génèrent un log DAMAGE et ne sont pas réintégrés.

⭐ Fonctionnalités clés

🔍

Recherche vente origine

Retrouvez la vente d'origine par numéro, téléphone client ou date pour pré-remplir le formulaire.

🔬

3 conditions article

GOOD (remis en stock), DAMAGED (perte valorisée), UNSELLABLE (mise au rebut) — impact différencié.

💳

3 modes de remboursement

Espèces, Avoir ou Points fidélité — choisissez selon la politique de votre boutique.

Workflow approbation

Séparation des rôles : le caissier initie, le manager approuve — sécurité et traçabilité garanties.

📦

Impact stock auto

Réintégration automatique des articles GOOD avec log RETURN_IN, démarque pour les autres.

📊

Rapport qualité

Synthèse des retours par raison et par fournisseur pour identifier les produits problématiques.

ally-store.vercel.app/returns
Retours ce mois
12
1,4% du nb ventes
Valeur remboursée
48 200 FC
▲ +3 200 vs mai
Articles réintégrés
7 articles
Condition GOOD
En attente approbation
2 retours
⚠ À traiter
N° RetourClientProduitConditionRemboursementStatut
#R-2026-0012Mariama B.Riz parfumé 25kg DAMAGED 12 500 FC espèces PENDING
#R-2026-0011Oumar D.Savon Lux x12 GOOD Avoir 8 400 FC PROCESSED
#R-2026-0010Kadiatou S.Yaourt Activia UNSELLABLE 3 600 FC espèces PROCESSED
#R-2026-0009Ibrahima C.Huile Palme 5L DAMAGED REJECTED
Politique de retour : Définissez dans les paramètres boutique le délai maximum de retour accepté (ex : 7 jours) et les catégories de produits non-retournables (ex : produits frais, médicaments). AllyStore vérifiera automatiquement ces règles à la création d'un retour.
💡
Fidélité et remboursement : Proposer un remboursement en points fidélité plutôt qu'en espèces encourage le client à revenir en boutique. Configurez un taux de conversion attractif (ex : 1 FC remboursé = 1,2 point) pour rendre cette option préférable pour le client.

Clients CRM

Centralisez l'historique, les points et les achats de chaque client en un seul endroit.

Pourquoi ce module ? Sans CRM, le commerçant ne connaît pas ses clients : qui revient souvent, qui dépense le plus, depuis quand il n'est plus venu. AllyStore crée automatiquement une fiche client dès la première transaction et enrichit son profil à chaque passage en caisse. Vous pouvez ainsi personnaliser l'accueil, récompenser la fidélité et relancer les clients inactifs avec des données réelles.

🔧 Comment l'utiliser

1

Accéder à la liste clients

Menu latéral → Clients. La liste affiche tous les clients triés par CA total descendant. Utilisez la barre de recherche pour trouver un client par nom ou téléphone.

GET /api/store/customers?search=Aminata&limit=25
2

Créer un client manuellement

Bouton + Nouveau client : saisissez prénom, nom, téléphone (requis), email et date de naissance (optionnel pour le bonus anniversaire). La carte fidélité est générée automatiquement.

POST /api/store/customers { firstName, lastName, phone, email, birthDate }
3

Consulter la fiche client

Cliquez sur un client pour ouvrir le panel latéral : solde de points, équivalent cashback, niveau de fidélité avec barre de progression vers le niveau suivant et historique complet.

GET /api/store/customers/:id
4

Ajouter des points manuellement

Dans la fiche → onglet Historique → bouton Ajuster les points. Choisissez le montant (positif ou négatif), la raison (cadeau, compensation, erreur de caisse) et confirmez.

POST /api/store/loyalty/adjust { customerId, points, reason }
5

Suivre les KPI globaux

En haut de la page Clients : CA lifetime total de tous les clients, total des points actifs non rachetés et panier moyen calculé sur les 90 derniers jours.

GET /api/store/customers/stats

⭐ Fonctionnalités clés

👤

Fiche client complète

Avatar avec initiales colorées, coordonnées, date de naissance, niveau de fidélité et progression vers le palier suivant.

💰

CA lifetime & panier moyen

Chaque achat incrémente le CA total et le compteur de visites. Le panier moyen se recalcule en temps réel.

🎖️

Niveaux Bronze → Platinum

Progression automatique : Bronze (0 pts), Silver (1 000), Gold (5 000), Platinum (15 000). Rétrogradation possible si règle configurée.

🔄

Historique transactions

Toutes les transactions de points (EARN, REDEEM, ADJUST, EXPIRE) horodatées et liées à la vente source si applicable.

🛒

Achats récents

Les 10 dernières ventes du client avec date, montant FCFA et statut de paiement directement depuis la fiche.

⚙️

Ajustement manuel

Ajout ou retrait de points avec motif obligatoire (cadeau, compensation, erreur) pour garder un audit trail complet.

💡
Le numéro de téléphone est l'identifiant principal du client en Afrique subsaharienne — il est unique et obligatoire. L'email reste optionnel pour couvrir les clients sans accès régulier à Internet.
ally-store.vercel.app/crm/customers
CA Lifetime total
14 820 000 FC
+8,3 % ce mois
Points actifs
238 450 pts
≈ 238 450 FC cashback
Panier moyen
7 240 FC
-2,1 % vs mois passé
ClientTéléphoneNiveauPointsCA TotalVisitesDernière visite
KO Kofi Ouédraogo +225 07 12 34 56 Gold 6 840 pts 3 420 000 FC 47 Aujourd'hui
AD Aminata Diallo +221 77 456 78 90 Platinum 18 220 pts 5 150 000 FC 89 Hier
MC Moussa Coulibaly +223 76 234 56 78 Silver 1 340 pts 890 000 FC 12 Il y a 5 jours
FT Fatou Traoré +225 05 98 76 54 Bronze 280 pts 145 000 FC 3 Il y a 18 jours

Fidélité & Points

Un programme de points configurable pour récompenser chaque achat et fidéliser vos meilleurs clients.

Pourquoi ce module ? Un client fidèle coûte 5× moins cher à conserver qu'un nouveau client à acquérir. AllyStore intègre un programme de points complet qui se déclenche automatiquement à la caisse : le client accumule des points sans rien faire de spécial, et peut les convertir en remise directe ou en cashback. Vous contrôlez toutes les règles depuis votre tableau de bord.

🔧 Comment l'utiliser

1

Configurer les règles de points

Paramètres → Fidélité → définissez le multiplicateur de base (ex : 1 point par 100 FC dépensés), les bonus par catégorie produit et la récompense par visite.

PATCH /api/store/loyalty/settings { pointsPerFcfa: 0.01, visitBonus: 50 }
2

Utilisation automatique en caisse

Lors d'une vente, si le client est identifié (téléphone ou carte fidélité), ses points sont calculés et crédités automatiquement à la validation du paiement. Aucune saisie supplémentaire.

POST /api/store/sales → déclenche EARN_PURCHASE automatiquement
3

Rachat de points à la caisse

Bouton Utiliser les points dans l'écran de paiement. Saisissez le nombre de points à racheter — la remise équivalente s'affiche en FCFA et s'applique au total.

POST /api/store/loyalty/redeem { customerId, pointsToRedeem, saleId }
4

Bonus anniversaire

Si la date de naissance est renseignée, un bonus (configurable, ex : 500 pts) est crédité automatiquement le jour J via un cron quotidien à minuit UTC.

Cron 0 0 * * * → scan clients anniversaire du jour → EARN_BONUS
5

Expiration des points

Configurez une durée de validité (ex : 12 mois sans achat). Les points expirés génèrent une transaction EXPIRE dans l'historique du client avec la date et le montant concernés.

PATCH /api/store/loyalty/settings { pointsExpiryDays: 365 }

⭐ Fonctionnalités clés

⚙️

Règles configurables

Multiplicateur de base, bonus par catégorie (ex : ×2 sur les produits frais), récompense à la Nième visite, bonus anniversaire.

🧾

6 types de transactions

EARN_PURCHASE, EARN_BONUS, REDEEM_DISCOUNT, CASHBACK_EARN, ADJUST et EXPIRE — chaque mouvement est tracé avec sa source.

💳

Scan carte fidélité

Code-barres ou QR code imprimé sur la carte du client — scan via caméra ou douchette pour identification instantanée.

🎁

Conversion remise / cashback

Le client choisit : remise immédiate sur l'achat en cours ou cashback crédit à utiliser lors d'une prochaine visite.

📊

Statistiques programme

Clients actifs, points distribués ce mois, points rachetés, taux de rachat global et évolution mensuelle en graphe.

🔔

Alertes changement de niveau

Notification SMS ou email automatique quand un client passe de Bronze à Silver, Silver à Gold, etc.

⚠️
Le rachat de points réduit directement le chiffre d'affaires comptabilisé. Assurez-vous que votre comptable est informé du taux de rachat moyen pour ajuster les provisions mensuelles.
ally-store.vercel.app/loyalty/settings

Règles actives du programme

RègleValeurStatut
Points par 100 FC dépensés1 pointActif
Bonus catégorie Frais (riz, manioc)×2 pointsActif
Récompense 10e visite+200 ptsActif
Bonus anniversaire+500 ptsActif
Expiration points inactifs365 joursConfiguré
1 point = cashback FCFA1 FCActif
Clients actifs programme
342
+14 ce mois
Points distribués
87 600 pts
ce mois
Taux de rachat
23,4 %
+3 pts vs mois passé

Analyse clients

Segmentez votre clientèle, mesurez la rétention et identifiez les clients à fort potentiel.

Pourquoi ce module ? Savoir que vous avez 342 clients ne suffit pas — vous devez savoir lesquels reviennent, lesquels ont disparu et lesquels méritent une attention particulière. L'analyse clients transforme vos données brutes en segments actionnables : relancer les inactifs, récompenser les meilleurs, comprendre quand vous perdez des clients et pourquoi.

🔧 Comment l'utiliser

1

Analyser les cohortes d'acquisition

Onglet Cohortes : tableau mensuel des nouveaux clients acquis. Survolez un mois pour voir le taux de rétention à 30j, 60j et 90j de cette cohorte.

GET /api/store/analytics/customers/cohorts?months=6
2

Mesurer la rétention

Onglet Rétention : clients actifs (achat dans les 30j), à risque (31-90j) et inactifs (>90j). Cliquez sur une catégorie pour exporter la liste et créer une campagne ciblée.

GET /api/store/analytics/customers/retention
3

Consulter la répartition par niveau

Graphe en anneau : proportion Bronze / Silver / Gold / Platinum avec nombre de clients et CA cumulé par niveau. Utile pour mesurer l'efficacité du programme de fidélité.

GET /api/store/analytics/customers/tiers
4

Identifier le Top 10 clients

Onglet Top clients : classement par CA total ou par fréquence de visite. Chaque ligne donne accès direct à la fiche CRM du client.

GET /api/store/analytics/customers/top?sort=revenue&limit=10
5

Suivre les événements client

Flux d'événements temps réel : PURCHASE, RETURN, TIER_UPGRADE, FIRST_VISIT, BIRTHDAY_VISIT, REACTIVATION. Filtrez par type ou par client pour auditer le comportement.

GET /api/store/analytics/customers/events?type=TIER_UPGRADE

⭐ Fonctionnalités clés

📅

Cohortes d'acquisition

Visualisez mois par mois combien de nouveaux clients vous avez gagnés et mesurez leur rétention à 30, 60 et 90 jours.

🔁

Analyse de rétention RFM

Segmentation Récence / Fréquence / Montant pour identifier vos champions, clients fidèles, clients à risque et clients perdus.

🥇

Top clients actionnable

Classement croisé CA / fréquence avec lien direct vers la fiche CRM pour offrir une attention personnalisée immédiate.

🎯

Répartition par niveau

Visualisez l'évolution de votre base Bronze → Platinum pour mesurer la montée en gamme de votre clientèle mois après mois.

📡

6 types d'événements tracés

PURCHASE, RETURN, TIER_UPGRADE, FIRST_VISIT, BIRTHDAY_VISIT, REACTIVATION — chaque événement est horodaté et filtrable.

📤

Export segments

Exportez n'importe quel segment (clients inactifs, clients Gold, nouveaux ce mois) en CSV pour vos campagnes externes.

ally-store.vercel.app/crm/analytics
Clients actifs (30j)
218
63,7 % de la base
À risque (31-90j)
84
24,6 % de la base
Inactifs (+90j)
40
11,7 % de la base

Top 5 clients — CA cumulé

#ClientNiveauCA TotalVisitesDernier événement
1Aminata DialloPlatinum5 150 000 FC89PURCHASE — aujourd'hui
2Kofi OuédraogoGold3 420 000 FC47TIER_UPGRADE — Bronze→Gold
3Ibrahim SawadogoGold2 890 000 FC38BIRTHDAY_VISIT — +500 pts
4Mariam KeïtaSilver1 240 000 FC21REACTIVATION — après 95j
5Seydou BahSilver980 000 FC17FIRST_VISIT — il y a 3j

Campagnes marketing

Créez et envoyez des campagnes Email ou SMS ciblées pour annoncer promotions, nouveautés et offres exclusives.

Pourquoi ce module ? Une promotion sans communication ne rapporte rien. AllyStore vous permet d'envoyer un message personnalisé directement aux bons clients — par exemple "tous vos clients Gold inactifs depuis 90 jours" — sans passer par un outil externe. Chaque campagne est liée à votre base CRM : les segments se mettent à jour automatiquement selon les règles que vous définissez.

🔧 Comment l'utiliser

1

Créer une campagne

Marketing → + Nouvelle campagne. Saisissez le nom, choisissez le canal (Email ou SMS), sélectionnez ou créez un segment cible, rédigez le sujet (email) et le corps du message.

POST /api/store/campaigns { name, channel, segmentId, subject, body }
2

Définir un segment

Les segments sont des règles JSON : tier minimum, nombre de visites, jours depuis dernière visite, CA minimum. Prévisualisez le nombre de clients ciblés avant envoi.

{ "tier": "GOLD", "lastVisitDays": 90, "minRevenue": 500000 }
3

Programmer ou envoyer immédiatement

Bouton Envoyer maintenant ou définissez une date/heure de programmation. Le statut passe de DRAFT → SCHEDULED → SENDING → SENT automatiquement.

PATCH /api/store/campaigns/:id/schedule { sendAt: "2026-06-10T09:00:00Z" }
4

Suivre les résultats

Page de détail campagne : total destinataires, messages envoyés, échoués, en attente, et taux de livraison. Pour les emails, taux d'ouverture si le provider le supporte.

GET /api/store/campaigns/:id/stats
5

Annuler une campagne programmée

Tant que le statut est SCHEDULED, vous pouvez annuler l'envoi. Les CampaignRecipients déjà en statut PENDING sont marqués CANCELLED.

PATCH /api/store/campaigns/:id/cancel

⭐ Fonctionnalités clés

📧

Canal Email & SMS

Email pour les messages riches avec mise en page, SMS pour les notifications rapides — choisissez selon votre audience et votre budget.

🎯

Segments dynamiques JSON

Règles combinables : tier, minVisits, lastVisitDays, minRevenue. La liste des destinataires se génère au moment de l'envoi pour inclure les dernières données.

📅

Envoi programmé

Planifiez vos campagnes à l'avance : annonce de ramadan, promotion de fin de mois, newsletter mensuelle — sans être présent au moment de l'envoi.

Envoi asynchrone

Les messages sont mis en file d'attente et envoyés en arrière-plan. Aucun ralentissement de l'interface même pour des campagnes de 1 000 destinataires.

📈

Statistiques temps réel

Livraisons réussies, échouées et en attente mises à jour en direct pendant l'envoi via polling ou WebSocket.

📋

Exemples de segments prêts

Clients Gold inactifs 90j, nouveaux clients 30j, clients anniversaire ce mois, clients ayant acheté du bissap — templates copiables.

DRAFT SCHEDULED SENDING SENT / CANCELLED
ally-store.vercel.app/crm/campaigns
CampagneCanalSegmentDestinatairesEnvoyésÉchecsStatut
Promo Ramadan 2026 Email Clients Gold+ 87 87 0 SENT
Relance inactifs 90j SMS Inactifs >90j 40 38 2 SENT
Soldes huile palme SMS Tous clients 342 SCHEDULED
Newsletter juin Email Tous clients DRAFT

Prospects

Pipeline commercial pour gérer les magasins candidats à rejoindre AllyStore — de la prise de contact à la signature.

Pourquoi ce module ? AllyStore est un SaaS multi-tenant : chaque nouveau magasin est un client B2B à convertir. Ce module donne à l'équipe commerciale un pipeline Kanban pour suivre chaque prospect de la découverte jusqu'à la signature, avec un historique d'activités et des alertes de relance pour ne jamais laisser une opportunité sans suite.
🔒
Ce module est réservé aux utilisateurs SuperAdmin — il n'est pas visible par les gérants de magasins individuels. Il gère le pipeline commercial de la plateforme AllyStore elle-même.

🔧 Comment l'utiliser

1

Ajouter un prospect

Pipeline → + Nouveau prospect. Renseignez l'entreprise, le contact, email, téléphone, pays, ville, CA mensuel estimé, plan visé (Starter/Pro/Enterprise) et la source d'acquisition.

POST /api/store/prospects { company, contactName, email, phone, country, city, estimatedRevenue, targetPlan, source }
2

Faire progresser dans le pipeline

Glissez la carte Kanban vers la colonne suivante ou utilisez le menu déroulant dans la fiche : LEAD → QUALIFIED → PROPOSAL_SENT → NEGOTIATION → WON / LOST.

PATCH /api/store/prospects/:id { status: "PROPOSAL_SENT" }
3

Enregistrer une activité

Dans la fiche → Timeline → + Activité : type (appel, email, réunion, note), description, date et optionnellement une prochaine relance.

POST /api/store/prospects/:id/activities { type, notes, nextFollowUpAt }
4

Traiter les alertes de relance

Le tableau de bord SuperAdmin affiche les prospects dont la date de relance est dépassée en rouge. Cliquez pour accéder directement à la fiche et enregistrer l'action.

GET /api/store/prospects?overdueFollowUp=true
5

Convertir en client

Statut WON → bouton Créer le tenant : AllyStore crée automatiquement l'organisation, l'administrateur et envoie l'email d'invitation au gérant.

POST /api/store/prospects/:id/convert → crée Organization + User admin

⭐ Fonctionnalités clés

📊

Pipeline Kanban visuel

6 colonnes drag-and-drop : LEAD, QUALIFIED, PROPOSAL_SENT, NEGOTIATION, WON, LOST. Chaque carte affiche le CA estimé et la date de dernière activité.

🏢

Fiche prospect complète

Coordonnées entreprise, contact principal, localisation (pays + ville), plan visé et CA mensuel estimé pour calculer le potentiel du pipeline.

📋

Timeline d'activités

Historique chronologique de chaque interaction : appel, email, réunion, note — avec l'auteur et la date, pour un suivi d'équipe transparent.

🔔

Alertes relance dépassées

Badge rouge sur les prospects dont la prochaine relance est passée. Visible sur le dashboard SuperAdmin pour une action immédiate.

🌍

5 sources de prospects

REFERRAL, COLD_OUTREACH, INBOUND, PARTNER, EVENT — mesurez l'efficacité de chaque canal d'acquisition B2B.

Conversion automatique

WON → un clic crée le tenant, l'admin et envoie l'invitation. Zéro saisie manuelle côté technique pour onboarder un nouveau magasin.

ally-store.vercel.app/admin/prospects
Total prospects
28
+5 ce mois
Qualifiés
11
39 % du pipeline
Convertis (30j)
3
CA estimé 2,4 M FC/mois
EntrepriseVillePlan viséCA estiméStatutRelance
Épicerie Ndiaye & FilsDakarPro850 000 FCNEGOTIATION⚠️ Hier
Supermarché TanohAbidjanEnterprise2 400 000 FCPROPOSAL_SENTDans 3j
Boutique DialloConakryStarter320 000 FCWON
Marché Bio BamakoBamakoPro680 000 FCQUALIFIEDDans 7j

Anti-gaspillage

Réduisez les pertes sur les produits périssables en pilotant les remises et dons avant expiration.

Pourquoi ce module ? En Afrique subsaharienne, jusqu'à 30 % des produits frais (manioc, banane, tomate, lait) sont jetés faute de gestion des DLC. AllyStore scanne chaque jour votre stock, identifie les lots à risque et vous propose des actions concrètes : remise immédiate pour vendre vite, ou don à une association partenaire pour valoriser ce qui ne peut pas être vendu. Moins de perte, meilleure image, comptabilité propre.

🔧 Comment l'utiliser

1

Consulter les lots à risque

Menu → Anti-gaspillage → onglet DLC. La liste affiche tous les lots avec leur date d'expiration, quantité restante et badge d'urgence coloré calculé automatiquement.

GET /api/store/antiwaste/batches?status=AT_RISK
2

Appliquer une remise sur un lot

Cliquez Appliquer remise sur un lot → modal avec slider de % ou boutons présélection 20 / 30 / 50 %. La remise est enregistrée et s'applique immédiatement en caisse sur ce lot.

PATCH /api/store/antiwaste/batches/:id/discount { discountPercent: 30 }
3

Donner à une association

Bouton Donner → sélectionnez l'association partenaire dans la liste → confirmez. Le lot est vidé (quantité → 0) et un mouvement ADJUSTMENT_OUT est enregistré dans le stock.

POST /api/store/antiwaste/batches/:id/donate { partnerId }
4

Configurer les règles automatiques

Onglet Règles auto+ Nouvelle règle : définissez "X jours avant expiration → appliquer Y % de remise". Activez/désactivez chaque règle avec le toggle.

POST /api/store/antiwaste/rules { daysBeforeExpiry: 5, discountPercent: 20 }
5

Laisser le cron travailler

Chaque jour à 7h UTC, AllyStore scanne automatiquement tous les lots et applique les règles actives. Un badge rouge sur la sidebar indique le nombre de lots nécessitant une action manuelle.

Cron 0 7 * * * → scanBatchExpiry() → applique règles → notifie

⭐ Fonctionnalités clés

🚨

Badges d'urgence DLC

Rouge (Expiré), Orange (Critique <3j), Jaune (Bientôt 3-10j) — visibilité immédiate des priorités sans avoir à lire les dates.

💸

Remise rapide 20/30/50 %

Boutons présélection pour aller vite en situation d'urgence. La remise s'applique en temps réel sur le prix affiché en caisse.

🤝

Don aux associations

Liste des associations partenaires configurables. Le don génère un bon de sortie comptable automatique pour la déduction fiscale.

⚙️

Règles automatiques

Créez des règles "si J-5 → -20 %, si J-2 → -50 %" activées ou désactivées à la volée. Le cron les applique chaque matin.

🔴

Badge sidebar temps réel

Le nombre de lots nécessitant une action est visible en permanence dans le menu — impossible de les oublier même en pleine journée chargée.

📉

Dashboard valeur en jeu

Valeur totale FCFA des lots à risque : visualisez l'enjeu financier d'une action rapide vs d'un jet.

💡
Configurer une règle J-7 → -15 % sur les produits frais (riz précuit, manioc tranché, huile artisanale) permet de vendre 80 % des lots à risque avant qu'ils ne deviennent critiques — sans même y penser.
ally-store.vercel.app/antiwaste
Lots à traiter
12
3 critiques aujourd'hui
Unités à risque
284 unités
dont 47 expirées
Valeur en jeu
186 500 FC
si jeté demain
ProduitQté restanteExpirationRemiseUrgenceAction
Manioc tranché 500g 23 sachets 2026-06-04 Expiré Donner →
Lait frais Saloum 18 bouteilles 2026-06-06 Critique J-2 Remise 50 %
Bissap séché 250g 54 sachets 2026-06-09 20 % appliqué Bientôt J-5
Huile palme artisanale 12 bidons 2026-06-12 Bientôt J-8 Remise 20 %

HACCP

Enregistrez et tracez les contrôles sanitaires obligatoires pour répondre aux exigences réglementaires alimentaires.

Pourquoi ce module ? La réglementation alimentaire impose aux commerces de produits frais un registre de contrôle HACCP (températures, nettoyage, réceptions, vérification DLC). Sans outil, c'est un cahier papier souvent incomplet et impossible à auditer. AllyStore numérise ce registre : chaque relevé est horodaté, signé, stocké et exportable pour un contrôle inspecteur en 30 secondes.
Module premium : HACCP fait partie des modules optionnels de votre abonnement. S'il n'est pas activé pour votre magasin, l'entrée disparaît du menu et les écrans sont inaccessibles. Contactez AllyStore pour l'ajouter à votre plan.

🔧 Comment l'utiliser

1

Créer les points de contrôle

HACCP → Paramétrage+ Point de contrôle. Choisissez le type (TEMPERATURE, CLEANING, RECEPTION, EXPIRY_CHECK, OTHER), définissez la fréquence en heures et les seuils min/max si applicable.

POST /api/store/haccp/checkpoints { name, type, frequencyHours, minValue, maxValue, unit }
2

Saisir un relevé

HACCP → Registre+ Nouveau relevé. Sélectionnez le point de contrôle, saisissez la valeur mesurée, le résultat (OK / NON_COMPLIANT) et le signataire. Le résultat peut être calculé automatiquement si les seuils sont définis.

POST /api/store/haccp/records { checkpointId, value, result, signedBy, notes }
3

Documenter une action corrective

Si le résultat est NON_COMPLIANT, le champ Action corrective devient obligatoire avant de pouvoir valider le relevé. Décrivez l'action prise (ex : "Compresseur relancé, température rétablie à 4°C à 10h30").

POST /api/store/haccp/records { ..., correctiveAction: "Compresseur relancé..." }
4

Activer le relevé IoT automatique

Si vous disposez d'un capteur connecté (sonde de température WiFi), liez-le au point de contrôle via l'API. Les relevés s'enregistrent automatiquement selon la fréquence définie.

PATCH /api/store/haccp/checkpoints/:id { iotSensorId: "SENSOR_001" }
5

Exporter le registre

Bouton Exporter PDF ou Exporter CSV sur n'importe quelle plage de dates. Le registre horodaté et signé est prêt pour une inspection ou un audit interne.

GET /api/store/haccp/records/export?from=2026-06-01&to=2026-06-30&format=pdf
6

Surveiller les KPI de conformité

Dashboard HACCP : nombre de points de contrôle actifs, relevés effectués aujourd'hui vs attendus, et non-conformités des 7 derniers jours avec statut d'action corrective.

GET /api/store/haccp/dashboard

⭐ Fonctionnalités clés

🌡️

5 types de contrôle

TEMPERATURE (réfrigérateurs, congélateurs), CLEANING (surfaces, équipements), RECEPTION (produits reçus), EXPIRY_CHECK (vérification DLC), OTHER (procédures personnalisées).

Calcul automatique OK/NON_COMPLIANT

Si les seuils min/max sont définis (ex : 0°C–4°C), le résultat est calculé automatiquement à la saisie de la valeur. Zéro erreur humaine possible.

📝

Action corrective obligatoire

Impossible de valider un relevé NON_COMPLIANT sans décrire l'action prise. Garantit un registre complet et auditable en toutes circonstances.

🔌

Lien capteur IoT

Connexion optionnelle à des sondes de température WiFi/Bluetooth pour des relevés automatiques sans saisie humaine.

📅

Registre horodaté et signé

Chaque relevé conserve l'identité du signataire, l'heure exacte et la valeur brute mesurée — conforme aux exigences réglementaires.

📤

Export PDF / CSV

Générez un registre officiel sur n'importe quelle période, prêt à présenter lors d'un contrôle sanitaire ou d'un audit de certification.

🚨
Un relevé de température NON_COMPLIANT sans action corrective documentée peut entraîner une fermeture administrative lors d'un contrôle sanitaire. AllyStore rend cette saisie obligatoire pour vous protéger.
Paramétrer les points de contrôle
Saisir le relevé + valeur
Résultat calculé auto
Si NON_COMPLIANT → action corrective
Registre archivé + exportable
ally-store.vercel.app/haccp
Points de contrôle actifs
7
Fréquence : 2h à 24h
Relevés aujourd'hui
14 / 18
4 en attente
Non-conformités (7j)
2
Actions correctives : 2/2
Point de contrôleTypeValeurSeuilsRésultatSignataireHeure
Réfrigérateur viande TEMP 3,2 °C 0 – 4 °C OK Kofi O. 07:12
Congélateur poisson TEMP -17,8 °C -25 – -15 °C OK Aminata D. 07:15
Nettoyage plan de coupe CLEANING OK Moussa C. 09:00
Réception riz Basmati RECEPTION 24 °C ambiant < 30 °C OK Fatou T. 11:30
Réfrigérateur laitier TEMP 7,1 °C 0 – 4 °C NON-CONFORME Kofi O. 13:00
⚠️
Relevé 13h00 — Réfrigérateur laitier hors seuil. Action corrective enregistrée : "Compresseur relancé manuellement, température revenue à 3,8°C à 13h45. Produits vérifiés, aucune perte."

Comptabilité

Vue financière centralisée — dépenses, budgets et trésorerie en un coup d'œil

Pourquoi ce module ? Tenir la comptabilité d'une épicerie à la main, c'est chronophage et source d'erreurs. AllyStore centralise toutes les dépenses fournisseurs, les factures en attente et les budgets en un seul tableau de bord. Vous savez en temps réel combien vous avez dépensé ce mois, ce qui est encore dû, et si vous restez dans les clous budgétaires.

🔧 Comment l'utiliser

1

Accéder au tableau de bord comptable

Depuis le menu latéral, cliquez sur Comptabilité. Le dashboard s'affiche avec les indicateurs du mois en cours : total dépenses, factures en attente et en retard, taux de consommation budgétaire.

Menu → Comptabilité → Dashboard
2

Surveiller les factures en attente

Le widget "Factures en attente" liste les fournisseurs non encore réglés. Cliquez sur une ligne pour accéder directement au détail de la facture.

Comptabilité → Factures fournisseurs (sous-module)
3

Contrôler les retards de paiement

Les factures dont la date d'échéance est dépassée apparaissent en rouge avec le badge OVERDUE. Une alerte email est envoyée si la configuration le prévoit.

Badge OVERDUE → Enregistrer paiement
4

Naviguer vers les sous-modules

Deux boutons de navigation rapide mènent vers Factures fournisseurs (gestion des factures d'achat) et Budgets & Prévisions (planification des dépenses).

Dashboard → Sous-modules Factures / Budgets
5

Analyser la trésorerie mensuelle

Le graphe de trésorerie compare les entrées (ventes caisse) et les sorties (règlements fournisseurs) semaine par semaine pour le mois sélectionné.

Dashboard → Graphe Trésorerie → Sélecteur de mois

⭐ Fonctionnalités clés

📊

KPI temps réel

Dépenses totales du mois, nombre de factures en attente, montant en retard et budget consommé mis à jour à chaque synchronisation.

🔗

Navigation rapide

Accès en un clic aux sous-modules Factures fournisseurs et Budgets, sans passer par le menu général.

⚠️

Alertes retards

Indicateur visuel rouge pour chaque facture OVERDUE, avec montant total des impayés en retard clairement affiché.

📈

Graphe trésorerie

Visualisation semaine par semaine des flux entrants et sortants pour anticiper les tensions de liquidités.

🗓️

Sélecteur de période

Basculez entre mois, trimestre ou année pour adapter la vue à votre horizon de pilotage.

ally-store.vercel.app/accounting
Dépenses du mois
4 820 000 FC
Juin 2026
Factures en attente
7
1 380 000 FC
Factures en retard
2
▲ 490 000 FC
Budget consommé
68 %
sur 7 100 000 FC
Navigation rapide
📄 Factures fournisseurs
📋 Budgets & Prévisions
💳 Enregistrer un paiement
💡 Le budget consommé dépasse 65 % avant la mi-mois : anticipez vos prochaines commandes pour éviter un dépassement.

Factures fournisseurs

Enregistrez, suivez et réglez toutes vos factures d'achat depuis une interface unifiée

Pourquoi ce module ? Sans traçabilité des factures fournisseurs, il est impossible de savoir ce que vous devez encore payer, à qui, et quand. Ce module remplace les classeurs papier : chaque facture est numérisée, son statut mis à jour automatiquement au fil des paiements, et les retards sont signalés avant qu'ils n'engendrent des pénalités ou des ruptures de confiance avec vos fournisseurs.

🔧 Comment l'utiliser

1

Saisir une nouvelle facture

Cliquez sur Nouvelle facture. Sélectionnez le fournisseur, renseignez le numéro de facture, la date d'émission et la date d'échéance. Ajoutez ensuite les lignes (description, quantité, prix unitaire HT, taux TVA).

POST /api/store/supplier-invoices — { supplierId, invoiceNumber, lines[], dueDate }
2

Vérifier les montants calculés

Le système calcule automatiquement le montant HT total, la TVA et le montant TTC. Vérifiez la cohérence avec la facture papier avant de valider.

totalTTC = totalHT × (1 + tauxTVA / 100)
3

Enregistrer un paiement

Sur une facture PENDING ou PARTIAL, cliquez sur Enregistrer paiement. Saisissez le montant versé, la méthode (virement, espèces, chèque), la référence et la date. Le statut passe à PARTIAL si le règlement est partiel, PAID si complet.

POST /api/store/supplier-invoices/:id/payments — { amount, method, reference, paidAt }
4

Surveiller les factures en retard

Un job automatique vérifie chaque nuit les dates d'échéance. Les factures dépassées passent en statut OVERDUE. Filtrez sur ce statut pour prioriser vos règlements.

Filtre → Statut : OVERDUE → Trier par date échéance croissante
5

Annuler une facture

En cas d'erreur de saisie ou d'avoir reçu, passez la facture en statut CANCELLED. Les paiements déjà enregistrés restent en historique pour traçabilité comptable.

PATCH /api/store/supplier-invoices/:id — { status: "CANCELLED" }

⭐ Fonctionnalités clés

🧾

Saisie multi-lignes

Ajoutez autant de lignes que nécessaire par facture, avec description libre, quantité, prix unitaire HT et taux de TVA (0 %, 5 %, 10 %, 18 %).

💸

Paiements partiels

Un fournisseur accepte un acompte ? Enregistrez-le. Le solde restant est recalculé automatiquement à chaque versement. Passage PAID dès que le solde atteint zéro.

🔴

Alertes OVERDUE

Détection automatique des retards de paiement à minuit. Badge rouge visible dans la liste, et remontée dans le dashboard Comptabilité.

🔍

Filtres puissants

Filtrez par fournisseur, statut, période, montant min/max. Exportez la liste filtrée en CSV pour votre comptable externe.

📜

Historique des paiements

Chaque facture conserve l'intégralité des versements : montant, date, méthode, référence. Traçabilité complète pour les audits.

🔗

Lien avec les achats

Une facture peut être liée à un bon de commande fournisseur existant pour rapprochement automatique des quantités reçues.

ally-store.vercel.app/accounting/invoices
N° Facture Fournisseur HT TVA TTC Payé Statut Échéance
FAC-2026-0089 SOCOPRO Dakar 1 200 000 FC 216 000 FC 1 416 000 FC 1 416 000 FC PAID 28/05/2026
FAC-2026-0093 Moussa Diallo & Fils 850 000 FC 85 000 FC 935 000 FC 500 000 FC PARTIAL 10/06/2026
FAC-2026-0094 Aminata Trading Co. 620 000 FC 111 600 FC 731 600 FC 0 FC OVERDUE 01/06/2026
FAC-2026-0097 Fatou Agri-Prod 430 000 FC 43 000 FC 473 000 FC 0 FC PENDING 15/06/2026
FAC-2026-0098 Kofi Imports 310 000 FC 55 800 FC 365 800 FC 365 800 FC PAID 20/06/2026
⚠️ 2 factures en retard — FAC-2026-0094 (Aminata Trading) dépasse son échéance depuis 3 jours. Réglez pour préserver la relation fournisseur.
Flux de statut
PENDING
PARTIAL
PAID
|
OVERDUE
|
CANCELLED

Budgets & Prévisions

Planifiez vos dépenses par catégorie et mesurez l'écart réel vs prévu en temps réel

Pourquoi ce module ? Beaucoup de commerces africains dépensent sans enveloppe définie, découvrant les dépassements trop tard. AllyStore vous permet de fixer des budgets par catégorie (achats, frais généraux, personnel, transport…) et de mesurer en continu si vos dépenses réelles restent dans les limites prévues — avec une barre de progression colorée qui s'emballe en rouge quand ça dérape.

🔧 Comment l'utiliser

1

Créer un budget

Cliquez sur Nouveau budget. Donnez-lui un nom (ex. "Achats Juin 2026"), choisissez la période (MONTHLY, QUARTERLY, ANNUAL) et le montant total planifié.

POST /api/store/budgets — { name, period, plannedTotal, startDate }
2

Ajouter des lignes budgétaires

Décomposez le budget en catégories : Achats alimentaires, Frais de transport, Électricité, Salaires temporaires… Chaque ligne a un libellé et un montant planifié.

POST /api/store/budgets/:id/lines — { category, label, plannedAmount }
3

Suivre la consommation

À chaque facture fournisseur réglée, le montant est imputé automatiquement à la ligne budgétaire correspondante. Le taux de consommation (réel / planifié × 100) se met à jour en direct.

actualAmount / plannedAmount × 100 → barre de progression
4

Interpréter les couleurs

Barre verte : consommation < 70 %. Orange : entre 70 % et 90 %. Rouge : dépassement imminent ou dépassé. Agissez avant d'atteindre 100 %.

0-69 % → vert | 70-89 % → orange | 90+ % → rouge
5

Verrouiller un budget finalisé

Une fois le budget approuvé par le gérant, activez Verrouiller. Plus aucune modification des montants planifiés n'est possible, garantissant l'intégrité de la comparaison réel/prévu.

PATCH /api/store/budgets/:id — { isLocked: true }

⭐ Fonctionnalités clés

📅

Multi-périodes

Créez des budgets mensuels pour le quotidien, trimestriels pour les investissements, annuels pour la stratégie globale.

📉

Écart réel vs prévu

Chaque ligne affiche l'écart en montant et en pourcentage. Un écart positif (dépassement) est signalé en rouge, un écart négatif (économie) en vert.

🔒

Verrouillage budget

Fige les montants planifiés pour empêcher toute modification a posteriori. Indispensable pour les audits ou la validation par un tiers.

🔄

Imputation automatique

Les paiements fournisseurs sont rattachés aux lignes budgétaires sans ressaisie manuelle, réduisant les erreurs de catégorisation.

📊

Vue synthétique

Un tableau récapitulatif par budget montre le total planifié, le total réel, le solde disponible et le taux global de consommation.

ally-store.vercel.app/accounting/budgets
Budget — Achats Juin 2026 MONTHLY EN COURS
Catégorie Libellé Planifié Réel Consommation Écart
Achats alimentaires Céréales & farines 1 500 000 FC 1 320 000 FC ■■■■■■■■░░ 88 % +180 000
Achats alimentaires Huiles & graisses 800 000 FC 850 000 FC ■■■■■■■■■■ 106 % -50 000
Transport Livraisons fournisseurs 300 000 FC 195 000 FC ■■■■■░░░░░ 65 % +105 000
Énergie Électricité & groupe 450 000 FC 398 000 FC ■■■■■■■░░░ 88 % +52 000
Frais généraux Emballages & sachets 150 000 FC 57 000 FC ■■■░░░░░░░ 38 % +93 000
Total planifié
3 200 000 FC
Total réel
2 820 000 FC
Solde disponible
380 000 FC
Consommation globale
88 %

Tarification

Gérez les prix de vente et les marges de tous vos produits depuis une interface inline-edit centralisée

Pourquoi ce module ? Modifier les prix produit par produit dans une fiche article est laborieux dès lors qu'on dépasse cinquante références. La page Tarification affiche tous les produits en tableau interactif : cliquez sur une cellule, modifiez le prix, la marge est recalculée instantanément. Le code couleur alerte en rouge les marges négatives avant qu'elles n'érodent votre rentabilité.

🔧 Comment l'utiliser

1

Ouvrir le tableau de tarification

Accédez via Catalogue → Tarification. Tous les produits actifs s'affichent avec leurs prix d'achat, de vente, TVA et marge calculée.

Menu → Catalogue → Tarification
2

Modifier un prix en inline

Cliquez sur la cellule "Prix vente HT" d'un produit. Le champ devient éditable directement dans la table. Saisissez le nouveau prix et appuyez sur Entrée ou cliquez ailleurs pour sauvegarder.

PATCH /api/store/products/:id — { sellingPriceHT: 1200 }
3

Lire la marge calculée

La marge est recalculée à chaque modification : (vente HT − achat HT) / vente HT × 100. Elle s'affiche colorée : rouge si négative, orange si < 10 %, vert si ≥ 30 %.

marge % = (prixVenteHT - prixAchatHT) / prixVenteHT × 100
4

Filtrer et rechercher

Utilisez la barre de recherche (nom produit ou SKU), le filtre par catégorie, ou le filtre "Marge basse" pour isoler les produits nécessitant un ajustement de prix.

?search=riz&category=cereales&marginFilter=low
5

Vérifier les KPI globaux

Les 4 KPI en haut de page donnent une vision globale : total produits, marge moyenne, nombre de produits à marge basse et nombre de produits en perte.

Dashboard KPI → actions correctives si margeNégative > 0

⭐ Fonctionnalités clés

✏️

Édition inline

Modifiez prix d'achat, prix de vente et taux TVA directement dans la cellule du tableau. Aucun formulaire séparé, aucun chargement de page.

🎨

Code couleur marge

Rouge (< 0 %), orange (< 10 %), vert (≥ 30 %) — identification visuelle immédiate des produits à risque sans avoir à lire chaque chiffre.

🧮

TTC auto-calculé

Le prix TTC est recalculé en temps réel dès que vous changez le prix HT ou le taux TVA. Idéal pour vérifier le prix affiché en rayon.

🔍

Filtres intelligents

Filtrez sur la marge (basse, négative, normale), la catégorie, ou recherchez par nom/SKU. Le compteur de résultats s'actualise en temps réel.

📤

Export CSV

Exportez la grille tarifaire complète ou filtrée en CSV pour partager avec un responsable achats ou intégrer dans un outil externe.

🔒

Historique des prix

Chaque modification de prix est horodatée et attribuée à l'utilisateur auteur. Naviguez dans l'historique pour comprendre l'évolution d'un tarif.

ally-store.vercel.app/pricing
Total produits
312
Marge moyenne
24,6 %
Marge basse (<10 %)
18 produits
Marge négative
3 produits
Produit Catégorie Achat HT Vente HT TTC TVA Marge %
Riz parfumé 25 kg Céréales 18 500 FC 22 000 FC 23 760 FC 8 % 15,9 %
Huile palme 5 L Huiles 4 800 FC 5 200 FC 5 616 FC 8 % 7,7 %
Lait en poudre 2 kg Produits laitiers 6 200 FC 8 500 FC 9 180 FC 8 % 27,1 %
Savon de Marseille Hygiène 1 100 FC 980 FC 1 058 FC 8 % -12,2 %
Tomate concentrée 850g Conserves 1 900 FC 2 800 FC 3 024 FC 8 % 32,1 %
⚠️ Le Savon de Marseille est vendu à perte (−12,2 %). Cliquez sur la cellule "Vente HT" pour corriger le prix immédiatement.

Promotions

Créez des offres spéciales, codes promo et remises automatiques pour stimuler vos ventes

Pourquoi ce module ? Les promotions ciblées augmentent le panier moyen et fidélisent les clients — mais les gérer manuellement en caisse génère des erreurs et des litiges. AllyStore permet de configurer vos promos à l'avance (pourcentage, montant fixe, offre groupée) et de les appliquer automatiquement en caisse dès que les conditions sont remplies, sans action supplémentaire pour le caissier.

🔧 Comment l'utiliser

1

Créer une promotion

Cliquez sur Nouvelle promotion. Choisissez le type (PERCENT, AMOUNT, BOGO), la cible (produit, catégorie, panier), la valeur et les dates de validité.

POST /api/store/promotions — { type, target, value, startDate, endDate }
2

Configurer le ciblage

PRODUCT cible un produit précis, CATEGORY s'applique à toute une gamme, CART nécessite un montant de panier minimum. Combinez avec un code promo optionnel pour les offres exclusives.

target: "CATEGORY", targetId: "cat_cereales", minCartAmount: 10000
3

Activer et publier

La promo est créée en statut DRAFT. Passez-la en ACTIVE pour qu'elle entre en vigueur. Elle s'appliquera automatiquement en caisse entre startDate et endDate.

PATCH /api/store/promotions/:id — { status: "ACTIVE" }
4

Suivre les utilisations

Chaque application en caisse crée une entrée PromotionRedemption. Consultez le compteur d'utilisations et définissez une limite maximale pour les offres à quantité limitée.

GET /api/store/promotions/:id/redemptions — maxRedemptions: 200
5

Mettre en pause ou clôturer

Passez une promo en PAUSED pour la suspendre temporairement sans la supprimer. Elle expire automatiquement à la date de fin ou quand le quota d'utilisations est atteint (statut EXPIRED).

status: ACTIVE → PAUSED → ACTIVE | EXPIRED (auto)

⭐ Fonctionnalités clés

🏷️

3 types de remise

PERCENT (ex. −15 %), AMOUNT (ex. −500 FC sur le panier), BOGO (achetez 2 packs de lait → 1 offert). Chaque type a sa logique de calcul distincte.

🎯

Ciblage précis

Ciblez un produit exact, toute une catégorie de produits, ou déclenchez la remise au-delà d'un seuil de panier minimum. Flexibilité maximale.

🔑

Code promo optionnel

Créez des codes promotionnels (ex. FETE2026) à saisir en caisse ou à partager avec des clients VIP. La remise ne s'applique qu'en cas de saisie correcte du code.

📊

Compteur d'utilisations

Limitez le nombre total d'utilisations pour créer des offres exclusives. Le compteur est décrémenté en temps réel ; la promo expire automatiquement à épuisement.

🔗

Empilement configurable

Définissez si une promo peut se cumuler avec d'autres offres actives. Par défaut, seule la promo la plus avantageuse est appliquée.

Application automatique en caisse

Le moteur de promotions évalue toutes les promos ACTIVE à chaque ajout de ligne en caisse. Aucune action supplémentaire pour le caissier.

ally-store.vercel.app/promotions
Nom Type Cible Valeur Code Utilisations Validité Statut
Fête des mères PERCENT Cosmétiques −20 % MAMA2026 47 / 100 01−30/06/2026 ACTIVE
Promo Riz géant BOGO Riz parfumé 25 kg 2 → 1 offert 23 / illimité 01−15/06/2026 ACTIVE
Panier weekend AMOUNT Panier ≥ 25 000 FC −2 000 FC 89 / 200 06−08/06/2026 PAUSED
Soldes céréales PERCENT Céréales −10 % CEREAL10 200 / 200 15−31/05/2026 EXPIRED
Cycle de vie
DRAFT
ACTIVE
PAUSED
EXPIRED
💡 Les promotions BOGO et PERCENT sans code promo s'appliquent automatiquement. Ajoutez un code si vous souhaitez réserver l'offre à une liste de clients.

Drive / Click & Collect

Permettez à vos clients de commander en ligne et de venir retirer leurs courses en magasin

Pourquoi ce module ? La commande en ligne avec retrait en magasin est un service en forte croissance, même dans les commerces de proximité africains. AllyStore permet d'ouvrir des créneaux horaires de retrait avec une capacité maîtrisée, de préparer chaque commande article par article, et de gérer les substitutions si un article est manquant — réduisant les abandons et fidélisant la clientèle urbaine connectée.

🔧 Comment l'utiliser

1

Configurer les créneaux Drive

Dans Drive → Créneaux, créez des plages horaires (ex. "08h00–10h00") avec une capacité maximale (nombre de commandes acceptées simultanément). Activez ou désactivez chaque créneau selon vos disponibilités.

POST /api/store/drive/slots — { startTime, endTime, maxCapacity, date }
2

Recevoir et affecter les commandes

Les commandes passées en ligne apparaissent automatiquement dans la file d'attente. Affectez un préparateur (picker) à chaque commande. Le statut passe à PREPARING.

PATCH /api/store/drive/orders/:id — { status: "PREPARING", pickerId }
3

Préparer la commande article par article

Le picker scanne ou coche chaque article : PICKED (trouvé), MISSING (rupture de stock), SUBSTITUTED (remplacé par un produit alternatif). Le client est notifié en temps réel des substitutions.

PATCH /api/store/drive/orders/:id/items/:itemId — { status: "SUBSTITUTED", substituteProductId }
4

Marquer READY et notifier le client

Quand tous les articles sont traités, passez la commande en READY. Une notification est envoyée au client (SMS ou email) : "Votre commande est prête, venez la récupérer !"

PATCH /api/store/drive/orders/:id — { status: "READY" }
5

Finaliser à la remise

Lorsque le client retire sa commande, passez en DELIVERED. Si la commande est liée à une livraison à domicile, elle est transmise automatiquement au module Livraisons.

PATCH /api/store/drive/orders/:id — { status: "DELIVERED" }

⭐ Fonctionnalités clés

🕐

Créneaux avec capacité

Définissez combien de commandes vous pouvez préparer par créneau. Le créneau se ferme automatiquement quand la capacité maximale est atteinte.

📦

Préparation guidée

Le picker suit une checklist article par article, réduit les oublis et les erreurs. Statut PICKED / MISSING / SUBSTITUTED par ligne.

🔄

Gestion des substitutions

Si un article est en rupture, proposez un produit de remplacement. Le client est notifié et peut accepter ou refuser la substitution.

🔗

Lien avec Livraisons

Une commande Drive peut générer automatiquement un arrêt dans une tournée de livraison pour les clients qui ne peuvent pas se déplacer.

📱

Notifications client

SMS ou email automatiques aux étapes clés : confirmation commande, commande en préparation, commande prête à retirer.

📊

Tableau de bord Drive

Vue en temps réel du nombre de commandes par statut, taux de substitution, et commandes en retard de préparation.

ally-store.vercel.app/drive
À préparer
5
En préparation
3
Prêtes
2
Livrées aujourd'hui
14
Commande Client Créneau Articles Montant Statut
DRV-0241 Aminata Kouyaté 08h00–10h00 12 articles 47 800 FC READY
DRV-0242 Seun Adeyemi 10h00–12h00 7 articles 28 500 FC PREPARING
DRV-0243 Moussa Traoré 10h00–12h00 18 articles 82 000 FC TO_PREPARE
DRV-0240 Fatou Diallo 08h00–10h00 9 articles 31 200 FC DELIVERED
Flux de préparation
TO_PREPARE
PREPARING
READY
DELIVERED
|
CANCELLED

Livraisons & Tournées

Planifiez, organisez et suivez vos tournées de livraison jusqu'au dernier kilomètre

Pourquoi ce module ? Livrer des clients à domicile sans organisation, c'est du carburant gaspillé, des retards et des clients insatisfaits. AllyStore structure chaque tournée avec un chauffeur, un véhicule, une liste d'arrêts ordonnés et un suivi statut en temps réel. Les commandes Drive sont automatiquement converties en arrêts de livraison, évitant toute ressaisie.

🔧 Comment l'utiliser

1

Créer une tournée

Cliquez sur Nouvelle tournée. Assignez un chauffeur (employé), un véhicule, la date planifiée et une note interne. La tournée est créée en statut PLANNED.

POST /api/store/deliveries — { driverId, vehicleId, plannedDate, notes }
2

Ajouter des arrêts

Pour chaque client à livrer, ajoutez un arrêt : nom du client, adresse, téléphone, numéro d'ordre de passage et commande Drive liée (optionnel). Réordonnez les arrêts par glisser-déposer.

POST /api/store/deliveries/:id/stops — { clientName, address, phone, orderIndex, driveOrderId }
3

Démarrer la tournée

Quand le chauffeur part, cliquez sur Démarrer. L'horodatage de départ est enregistré automatiquement. Le statut passe à IN_PROGRESS.

PATCH /api/store/deliveries/:id — { status: "IN_PROGRESS", startedAt: now() }
4

Mettre à jour les arrêts

Le chauffeur (ou le dispatcher) marque chaque arrêt DELIVERED au moment de la remise, ou FAILED avec un motif (absent, adresse incorrecte, refus…).

PATCH /api/store/deliveries/:id/stops/:stopId — { status: "FAILED", failureReason: "Client absent" }
5

Clôturer la tournée

À son retour, cliquez sur Terminer la tournée. L'horodatage de fin est enregistré. Un récapitulatif (arrêts livrés, échoués) est disponible pour le rapport journalier.

PATCH /api/store/deliveries/:id — { status: "COMPLETED", completedAt: now() }

⭐ Fonctionnalités clés

🗺️

Arrêts ordonnés

Définissez l'ordre de passage optimal pour minimiser le trajet. Réordonnez par glisser-déposer avant le départ de la tournée.

⏱️

Horodatage automatique

Heure de départ et heure de fin enregistrées automatiquement. Durée de tournée calculée pour le reporting RH et logistique.

Gestion des échecs

Un arrêt FAILED conserve le motif (absent, refus, mauvaise adresse). Ces cas peuvent générer un rappel client ou un second passage programmé.

🔗

Lien commande Drive

Chaque arrêt peut être lié à une commande Drive. Le statut de la commande Drive est mis à jour automatiquement quand l'arrêt passe à DELIVERED.

🚗

Gestion des véhicules

Créez une flotte de véhicules (moto, voiture, tricycle) avec immatriculation et capacité de charge. Assignez le bon véhicule à chaque tournée.

📋

Récapitulatif tournée

Après clôture, un rapport synthétise le nombre d'arrêts livrés / échoués, la durée, le chauffeur et les notes. Exportable en PDF.

ally-store.vercel.app/deliveries
Tournée #T-042 — 04/06/2026 IN_PROGRESS
🚗 Véhicule : Peugeot Partner — AB 1234 CD
👤 Chauffeur : Kofi Mensah
🕗 Départ : 09h12
# Client Adresse Téléphone Commande Statut arrêt
1 Fatou Sarr Quartier Médina, Rue 12 +221 77 234 56 78 DRV-0238 DELIVERED
2 Moussa Camara Plateau, Av. Indépendance +221 70 456 78 90 DRV-0239 DELIVERED
3 Aminata Bah Grand Yoff, Impasse 5 +221 76 111 22 33 PENDING
4 Ibou Diop Parcelles Assainies, B17 +221 77 987 65 43 DRV-0243 FAILED — absent
5 Seun Okonkwo HLM, Villa 23 +221 76 555 44 33 PENDING
📌 Arrêt 4 (Ibou Diop) — Client absent. Prévoir un second passage ou contacter le client avant de clôturer la tournée.

Énergie & IoT

Surveillance temps réel des températures, consommations énergétiques et alertes équipements

Pourquoi ce module ? Un frigo qui monte en température la nuit, c'est une perte de marchandises le lendemain matin et un risque sanitaire majeur. AllyStore connecte vos capteurs IoT (température, consommation électrique) et envoie des alertes en temps réel dès qu'un seuil critique est dépassé. La maintenance préventive planifiée évite les pannes coûteuses en haute saison.

🔧 Comment l'utiliser

1

Déclarer un appareil IoT

Dans Énergie → Appareils, créez chaque équipement : type (FRIDGE, FREEZER, SENSOR, METER), nom, code unique, emplacement dans le magasin et seuils min/max.

POST /api/store/energy/devices — { type: "FRIDGE", name: "Frigo Boissons", minThreshold: 2, maxThreshold: 8 }
2

Recevoir les relevés automatiques

Les capteurs envoient leurs mesures toutes les 5 à 15 minutes via l'API. Chaque relevé est enregistré avec la valeur, l'unité (°C, kWh) et l'horodatage.

POST /api/store/energy/readings — { deviceId, value: 6.4, unit: "°C", recordedAt }
3

Consulter le tableau de bord

La vue principale affiche la température actuelle de chaque frigo/congélateur avec une pastille colorée (vert = normal, orange = attention, rouge = critique), et le graphe historique des 24 dernières heures.

GET /api/store/energy/dashboard — températures + alertes actives
4

Gérer les alertes

Une alerte est créée automatiquement quand une mesure sort des seuils. Niveaux : INFO (hors cible), WARNING (seuil approché), CRITICAL (seuil dépassé). Accusez réception (ACKNOWLEDGED) ou résolvez (RESOLVED).

PATCH /api/store/energy/alerts/:id — { status: "ACKNOWLEDGED" }
5

Planifier la maintenance préventive

Créez des interventions planifiées sur chaque appareil : nettoyage du condenseur, contrôle du joint, remplacement filtre. La maintenance est horodatée et liée à l'appareil pour traçabilité.

POST /api/store/energy/maintenance — { deviceId, type, scheduledDate, technicianId }

⭐ Fonctionnalités clés

🌡️

4 types d'appareils

FRIDGE (frigo positif), FREEZER (congélateur), SENSOR (capteur générique température/humidité), METER (compteur électrique kWh).

🚨

Alertes 3 niveaux

INFO pour les déviations légères, WARNING pour les approches de seuil, CRITICAL pour les dépassements avérés nécessitant une action immédiate.

📈

Graphe historique

Visualisez l'évolution de la température sur les dernières 24h, 7 jours ou 30 jours. Identifiez les dérives nocturnes ou les pics liés aux ouvertures de portes.

🔧

Maintenance préventive

Planifiez des entretiens récurrents sur chaque équipement. Un calendrier de maintenance évite les pannes en haute saison et prolonge la durée de vie des appareils.

Compteur électrique

Connectez votre compteur principal pour suivre la consommation en kWh par jour/mois et détecter les surconsommations anormales (appareil défaillant, fuite thermique).

📍

Localisation des appareils

Chaque appareil est localisé par emplacement textuel (ex. "Rayon frais", "Réserve B"). Idéal pour guider le technicien lors d'une intervention.

ally-store.vercel.app/energy
Appareils actifs
8
Alertes OPEN
2
Conso. aujourd'hui
87 kWh
Maintenance prévue
1 ce mois
Appareil Type Emplacement Valeur actuelle Seuils Statut
Frigo Boissons FRIDGE Rayon frais 6,2 °C 2 °C – 8 °C ● Normal
Congel. Poissons FREEZER Réserve A −16,8 °C −20 °C – −15 °C ● Attention
Vitrine Charcuterie FRIDGE Rayon traiteur 10,4 °C 2 °C – 8 °C ● CRITIQUE
Compteur principal METER Tableau élect. 87 kWh / jour — / 120 kWh ● Normal
🚨 ALERTE CRITIQUE — Vitrine Charcuterie : température 10,4 °C (seuil max : 8 °C). Risque sanitaire élevé. Intervenez immédiatement ou déplacez les produits.

Rayons & Planogrammes

Organisez visuellement vos rayons, positionnez vos produits et pilotez les tâches des employés

Pourquoi ce module ? Un rayon bien organisé vend mieux : les produits à forte marge placés à hauteur des yeux, les promotions en tête de gondole, les réapprovisionnements assignés avant les ruptures. AllyStore permet de créer un plan de magasin numérique par allée, de définir le positionnement de chaque produit (planogramme), et d'assigner des tâches aux employés avec suivi photo de réalisation.

🔧 Comment l'utiliser

1

Créer les allées du magasin

Dans Rayons → Allées, créez chaque allée avec un nom et une description (ex. "Allée A — Céréales", "Allée B — Boissons & Eaux"). Chaque allée représente une zone physique du magasin.

POST /api/store/shelves/aisles — { name: "Allée A", description: "Céréales, Farines, Légumineuses" }
2

Définir le planogramme

Pour chaque allée, uploadez ou éditez le planogramme : un JSON structuré décrivant les étagères, le nombre de positions par étagère et le produit affecté à chaque position.

PUT /api/store/shelves/aisles/:id/planogram — { shelves: [{ level: 1, slots: [{ position: 1, productId, facings: 3 }] }] }
3

Créer des tâches rayon

Assignez des tâches aux employés : réapprovisionnement, facing, nettoyage, pose de signalétique. Définissez la priorité (LOW / MEDIUM / HIGH) et la date d'échéance.

POST /api/store/shelves/tasks — { aisleId, type: "RESTOCK", assignedTo, priority: "HIGH", dueDate }
4

Suivre l'avancement des tâches

L'employé passe la tâche en IN_PROGRESS quand il commence, puis en DONE à la fin. Il peut joindre une photo de réalisation (facing bien fait, rayon réapprovisionné) pour valider la tâche.

PATCH /api/store/shelves/tasks/:id — { status: "DONE", completionPhotoUrl: "..." }
5

Analyser l'organisation du magasin

Le tableau de bord Rayons donne une vue synthétique : tâches en attente par allée, tâches en retard, taux de complétion de la semaine. Identifiez les zones négligées.

GET /api/store/shelves/dashboard — tâches par statut + allées + employés

⭐ Fonctionnalités clés

🗂️

Organisation par allées

Créez autant d'allées que votre magasin en compte. Chaque allée a son propre planogramme et sa propre liste de tâches.

📐

Planogramme JSON

Le planogramme décrit précisément étagères, positions et facings (nombre de produits côte à côte). Exportez-le pour votre chef de rayon ou votre merchandiser.

Tâches avec priorité

LOW, MEDIUM, HIGH — les tâches urgentes (rupture imminente, hygiène) remontent en haut de la liste. Code couleur visuel pour la prioritisation immédiate.

👤

Assignation employés

Chaque tâche est assignée à un employé précis. Il la retrouve dans son tableau de bord personnel et reçoit une notification si elle devient urgente.

📸

Validation par photo

L'employé prend une photo du rayon une fois la tâche accomplie. Le manager valide visuellement la conformité depuis son interface. Fin des allers-retours.

📊

Tableau de bord rayons

Vue globale des tâches par statut (TODO / IN_PROGRESS / DONE), par allée et par employé. Identifiez en un coup d'œil les zones à problème.

ally-store.vercel.app/shelves
Allées configurées
6
Tâches en attente
9
Tâches HIGH prio
3
Taux complétion
72 %
cette semaine
Tâches actives — aujourd'hui
Allée Type de tâche Assigné à Priorité Échéance Statut
Allée A — Céréales Réapprovisionnement Riz Kofi Atta HIGH Aujourd'hui 10h IN_PROGRESS
Allée B — Boissons Facing Jus de goyave Aminata Sy MEDIUM Aujourd'hui 12h TODO
Allée C — Hygiène Signalétique promo Moussa Keïta HIGH Aujourd'hui 09h EN RETARD
Allée D — Épices Nettoyage étagères Fatou Cissé LOW Demain 08h TODO
Allée E — Conserves Réapprovisionnement tomates Seun Babatunde MEDIUM Aujourd'hui 15h DONE ✓
Exemple de planogramme — Allée A (Céréales)
📐 Étagère 1 (hauteur yeux) — Position 1 : Riz parfumé 25 kg (×2 facings) · Position 2 : Riz brisé 25 kg (×2) · Position 3 : Promo Riz −10 % (signalétique)
Étagère 2 (hauteur main) — Position 1 : Maïs farine 5 kg (×3) · Position 2 : Semoule fine 2 kg (×4)
Étagère 3 (bas) — Position 1 : Sacs mil 10 kg (×2) · Position 2 : Sorgho 5 kg (×2)
💡 Placez toujours les produits à forte marge (≥ 30 %) à hauteur des yeux (étagère 1). Les produits d'appel (prix bas, forte rotation) en bas attirent les clients vers l'allée.

RH & Planning

Gérez les équipes, planifiez les shifts hebdomadaires et suivez les présences en temps réel.

Pourquoi ce module ? Gérer une équipe sans outil dédié coûte du temps et génère des erreurs : absences non anticipées, shifts mal couverts, heures mal comptées. Le module RH centralise la planification, le pointage et les présences pour que vous sachiez à tout moment qui est là, quand et combien d'heures ont été travaillées.
Employés actifs
12
+2 ce mois
Shifts cette semaine
47
84 % confirmés
Heures planifiées
312 h
Semaine en cours
Taux de présence
91 %
↑ vs sem. préc.

🔧 Comment l'utiliser

1

Ajouter les employés

Créez une fiche par employé avec nom, poste, email, téléphone et taux horaire. Le statut est ACTIVE par défaut.

POST /api/store/hr/employees
2

Planifier les shifts

Assignez des créneaux horaires à chaque employé par jour. Statut initial : PLANNED, puis CONFIRMED ou ABSENT.

POST /api/store/hr/shifts
3

Pointage du jour

À l'arrivée, l'employé ou le manager clique Check-in. Au départ, Check-out. Les heures sont calculées automatiquement.

POST /api/store/hr/attendance/checkin
4

Consulter les présences

Filtrez par employé ou période. Exportez la synthèse mensuelle pour le calcul de paie.

GET /api/store/hr/attendance?from=2025-06-01&to=2025-06-30

⭐ Fonctionnalités clés

📅

Calendrier hebdomadaire

Vue grille 7 jours × employés avec créneaux colorés selon le statut (vert = confirmé, orange = planifié, rouge = absent).

⏱️

Pointage en temps réel

Bouton Check-in / Check-out par employé pour aujourd'hui. Heure enregistrée au moment du clic.

📊

Synthèse des heures

Calcul automatique heures travaillées = checkout − checkin, avec total mensuel par employé.

🔔

Alertes absences

Notification si un employé avec shift confirmé n'a pas pointé 30 minutes après l'heure de début.

ally-store.vercel.app/hr

Équipe — Liste employés

NomPosteEmailTaux horaireStatut
Kofi AsanteCaissierkofi@ally.sn1 200 FC/hActif
Aminata DialloResponsable stockaminata@ally.sn1 800 FC/hActif
Moussa CoulibalyManagermoussa@ally.sn2 500 FC/hActif
Fatou NdiayeCaissièrefatou@ally.sn1 200 FC/hCongé

Pointage aujourd'hui — 04/06/2026

EmployéCheck-inCheck-outHeuresAction
Kofi Asante08:02Check-out
Aminata Diallo07:5516:058 h 10OK
Moussa CoulibalyCheck-in

Formations

Planifiez et suivez les formations obligatoires et volontaires de votre équipe.

Pourquoi ce module ? Les obligations légales imposent des formations récurrentes (hygiène, sécurité, HACCP). Sans suivi structuré, les échéances sont manquées et l'entreprise s'expose à des risques. Le module Formations garantit qu'aucun employé ne dépasse les délais de recyclage et que les compétences de l'équipe progressent en continu.
Formations actives
8
Catalogue complet
Complétées ce mois
14
↑ 3 vs mois préc.
Arrivant à échéance
3
Dans 30 jours

🔧 Comment l'utiliser

1

Créer le catalogue

Ajoutez chaque formation : titre, catégorie, durée en heures, caractère obligatoire, et fréquence de recyclage en mois.

POST /api/store/hr/trainings
2

Assigner à un employé

Créez une TrainingCompletion : employé + formation + date planifiée. Statut initial PLANNED.

POST /api/store/hr/training-completions
3

Suivre la progression

Passez le statut à IN_PROGRESS puis COMPLETED avec la date de réalisation, le score et les notes.

PATCH /api/store/hr/training-completions/[id]
4

Gérer les alertes d'échéance

AllyStore calcule automatiquement la prochaine date de recyclage et génère une alerte 30 jours avant.

GET /api/store/hr/training-completions?expiring=true

⭐ Fonctionnalités clés

📚

Catalogue centralisé

Bibliothèque de formations réutilisables, obligatoires ou facultatives, avec durée et cycle de recyclage.

🔁

Recyclage automatique

Pour les formations récurrentes, la prochaine échéance est calculée dès la complétion de la précédente.

📋

Suivi individuel

Historique complet par employé : toutes les formations passées, scores, notes et statuts.

⚠️

Alertes proactives

Notifications 30 jours avant échéance des formations obligatoires récurrentes pour anticipation.

ally-store.vercel.app/hr/training

Catalogue formations

FormationCatégorieDuréeObligationRecyclage
HACCP Niveau 1Hygiène8 hObligatoire12 mois
Sécurité incendieSécurité4 hObligatoire24 mois
Accueil clientSoft skills6 hFacultatif
Gestion de caisseOpérationnel3 hRecommandé
⚠️ 3 formations arrivant à échéance — Kofi Asante : HACCP expire le 28/06/2026. Planifiez le recyclage dès maintenant.

Contrats de travail

Enregistrez, gérez et générez en PDF les contrats de travail de vos employés.

Pourquoi ce module ? Conserver les contrats en format papier expose à des pertes et complique la gestion RH. Centraliser les contrats numériquement permet de retrouver instantanément un document, de visualiser l'historique d'un employé et de générer un PDF prêt à signer en quelques secondes.

🔧 Comment l'utiliser

1

Créer un contrat

Sélectionnez l'employé, le type (CDI, CDD, STAGE, INTERIM, FREELANCE), les dates, le salaire brut et le poste.

POST /api/store/hr/contracts
2

Générer le PDF

Cliquez sur "Générer PDF" pour obtenir un document formaté avec toutes les données du contrat.

GET /api/store/hr/contracts/[id]/pdf
3

Archiver les anciens contrats

Les contrats expirés ou remplacés passent en statut ARCHIVED et restent consultables dans l'historique.

PATCH /api/store/hr/contracts/[id] { "status": "ARCHIVED" }

⭐ Fonctionnalités clés

📄

5 types de contrats

CDI, CDD, Stage, Intérim et Freelance — chaque type adapte les champs affichés (date de fin optionnelle pour CDI).

🖨️

Génération PDF

PDF prêt à imprimer avec en-tête magasin, données employé, conditions de travail et signature.

🗂️

Historique par employé

Consultez tous les contrats passés et actifs d'un employé, triés chronologiquement.

Statut actif / archivé

Les contrats actifs sont mis en évidence. L'archivage conserve la trace sans encombrer la vue principale.

ally-store.vercel.app/hr/contracts

Contrats actifs

EmployéTypeDébutFinSalaire brutStatutAction
Kofi AsanteCDI01/01/2024192 000 FC/moisActifPDF
Fatou NdiayeCDD01/03/202631/08/2026144 000 FC/moisActifPDF
Sidy KonatéStage01/06/202631/08/202660 000 FC/moisActifPDF
Binta TraoréCDI15/05/2022216 000 FC/moisArchivéPDF
💡 Le PDF est généré côté serveur via /api/store/hr/contracts/[id]/pdf. La clé secrète n'est jamais exposée au navigateur.

Pointage avancé

Suivez les horaires réels avec écarts vs planning pour un calcul de paie précis.

Pourquoi ce module ? Le planning prévisionnel ne reflète pas toujours la réalité. Un employé arrive en retard, part plus tôt ou fait des heures supplémentaires. Le pointage avancé capture les horaires réels, calcule automatiquement les écarts et fournit les données brutes pour établir la paie mensuelle sans erreurs de saisie manuelle.
Taux de présence (juin)
91 %
↑ 4 pts vs mai
Heures totales (juin)
1 248 h
Équipe complète
Retards > 15 min
7
Ce mois
Absences injustifiées
2
À traiter

🔧 Comment l'utiliser

1

Check-in en temps réel

Le manager ou l'employé clique le bouton Check-in. L'heure exacte est enregistrée côté serveur.

POST /api/store/hr/attendance/checkin { "employeeId": "emp_001" }
2

Check-out en fin de shift

Le checkout clôt la session. Les heures travaillées sont calculées : checkout − checkin.

POST /api/store/hr/attendance/checkout { "employeeId": "emp_001" }
3

Saisie manuelle

En cas d'oubli, le manager peut saisir manuellement les heures d'arrivée et de départ pour n'importe quelle date passée.

POST /api/store/hr/attendance/manual
4

Export mensuel

Générez un récapitulatif par employé sur la période choisie pour préparer la paie.

GET /api/store/hr/attendance/export?month=2026-06

⭐ Fonctionnalités clés

🖱️

Pointage en un clic

Interface simple et rapide pour le check-in / check-out, accessible depuis mobile ou tablette de caisse.

🔢

Calcul automatique

Heures travaillées, écarts vs planning et retards calculés sans aucune saisie manuelle.

📉

Détection des retards

Comparaison automatique entre l'heure de shift prévue et l'heure de check-in réelle.

📤

Export paie

Synthèse mensuelle exportable par employé : jours travaillés, heures totales, absences.

ally-store.vercel.app/hr/attendance

Synthèse présences — Juin 2026

EmployéJours travaillésHeures réellesHeures planifiéesÉcartRetards
Kofi Asante22176 h176 h0 h1
Aminata Diallo21168 h176 h-8 h0
Moussa Coulibaly22184 h176 h+8 h0
Fatou Ndiaye18144 h176 h-32 h3

Analytics

Analysez les performances du magasin sur des périodes personnalisées pour prendre de meilleures décisions.

Pourquoi ce module ? Gérer un magasin sans données, c'est naviguer à l'aveugle. AllyStore Analytics centralise les métriques essentielles — chiffre d'affaires, paniers, moyens de paiement, top catégories — et les rend lisibles en quelques secondes pour que chaque décision soit fondée sur des faits, pas des intuitions.
7 jours 30 jours 90 jours 365 jours Personnalisé
CA total TTC
4 280 000 FC
↑ +12 % vs période préc.
Nombre de ventes
847
↑ +8 % vs période préc.
Panier moyen
5 054 FC
↑ +4 % vs période préc.
Clients uniques
312
↑ +22 nouveaux

⭐ Fonctionnalités clés

📈

Courbe CA journalière

Sparkline du chiffre d'affaires jour par jour sur la période sélectionnée pour identifier les pics et creux.

💳

Répartition des paiements

Espèces, carte bancaire, Mobile Money (Wave, Orange Money) — barres proportionnelles avec pourcentages.

🏆

Top catégories

CA et nombre de ventes par catégorie en barres horizontales triées par performance décroissante.

Alertes stock intégrées

Ruptures et produits en stock bas affichés directement dans le dashboard Analytics pour action immédiate.

ally-store.vercel.app/analytics

Répartition paiements — 30 derniers jours

ModeMontantTransactionsPart
💵 Espèces2 140 000 FC52450 %
📱 Mobile Money1 498 000 FC24535 %
💳 Carte642 000 FC7815 %

Top catégories

CatégorieCAVentesÉvolution
Alimentation sèche1 820 000 FC312↑ +14 %
Boissons956 000 FC201↑ +9 %
Hygiène744 000 FC188→ 0 %
Produits frais560 000 FC146↓ -5 %

Analytics Pricing & Marges

Analysez la rentabilité de votre catalogue et identifiez les produits qui perdent de l'argent.

Pourquoi ce module ? Vendre plus ne suffit pas si les marges sont insuffisantes. Certains produits peuvent générer du trafic mais être vendus à perte. Ce module révèle la réalité économique de chaque référence : marge nette, taux de rentabilité et alertes automatiques pour les produits à risque ou en perte sèche.

⭐ Fonctionnalités clés

📊

Vue marges par produit

Tableau complet : prix achat, prix vente, marge absolue (FC), taux de marge (%), classé par rentabilité croissante.

🔴

Produits à marge négative

Liste des références vendues à perte (prix vente < prix achat). Action directe : ajuster le prix ou contacter le fournisseur.

🟡

Produits sous seuil de risque

Alertes pour les produits dont la marge est inférieure à un seuil paramétrable (ex. : < 10 %).

💡

Suggestions de réévaluation

Pour chaque produit sous seuil, AllyStore suggère un prix de vente minimum ou un prix d'achat cible.

ally-store.vercel.app/analytics/pricing

Analyse marges — Catalogue complet

ProduitPrix achatPrix venteMarge FCTauxStatut
Huile Palme 1L850 FC750 FC-100 FC-11.8 %Perte
Lait Gloria 500g1 200 FC1 250 FC50 FC4.0 %Risque
Riz Parfumé 5kg3 200 FC3 800 FC600 FC15.8 %OK
Savon Kaloum200 FC350 FC150 FC42.9 %Excellent
⚠️ 2 produits en perte sèche. Vérifiez le prix d'achat Huile Palme : la revente à 750 FC génère une perte de 100 FC par unité vendue.

Analytics Drive

Mesurez les performances du service Drive : remplissage des créneaux, articles manquants et délais de préparation.

Pourquoi ce module ? Le service Drive mobilise du personnel et des créneaux de livraison. Sans mesure, il est impossible de savoir si les créneaux sont bien utilisés, quels articles posent problème ou si les délais de préparation sont tenables. Ce module fournit les indicateurs pour optimiser l'organisation du Drive et améliorer la satisfaction client.
Taux utilisation créneaux
73 %
↑ +8 pts vs semaine préc.
Délai moyen préparation
18 min
Cible : < 20 min ✓
Commandes Drive (30j)
142
17 % du volume total
Articles manquants
34
Ce mois

⭐ Fonctionnalités clés

🕐

Taux de remplissage

Ratio commandes réelles / capacité par créneau. Identifiez les créneaux sous-utilisés pour les supprimer ou les réaffecter.

🚫

Top articles manquants

Classement des produits les plus souvent substitués ou indisponibles — base pour réajuster les réassorts Drive.

Délai de préparation

Temps moyen entre TO_PREPARE et READY par créneau. Détectez les goulots d'étranglement en préparation.

⚖️

Drive vs POS

Comparaison du volume de commandes Drive vs ventes en caisse pour mesurer la part du canal digital.

ally-store.vercel.app/analytics/drive

Articles les plus manquants — Juin 2026

ProduitOccurrencesAction
Eau Cristaline 1.5L (pack 6)8 foisRéassort urgent
Tomates concentrées Boni6 foisRéassort urgent
Chips Paprika 150g4 foisVérifier stock
Lait Gloria 1L3 foisVérifier stock

Financier avancé

LTV, CAC, churn, cohortes et prévisions de revenus — les métriques SaaS appliquées au retail africain.

Pourquoi ce module ? La croissance durable repose sur la compréhension de la valeur vie client, du coût d'acquisition et de la rétention. Ces métriques, popularisées par le SaaS, sont tout aussi pertinentes pour un commerce physique. Elles permettent de savoir si votre modèle commercial est sain et de projeter vos revenus avec méthode.
LTV moyen
128 400 FC
Clients actifs
CAC estimé
18 200 FC
15 % rev. / nouveaux clients
Ratio LTV/CAC
7.1×
Excellent (> 3×)
MRR (30 derniers jours)
4 280 000 FC
↑ +12 % vs M-1
Churn 30j
8.4 %
Clients actifs à 60j perdus

⭐ Fonctionnalités clés

💰

LTV & CAC

LTV = lifetimeSpent moyen des clients actifs. CAC = proxy acquisition à 15 % du CA / nouveaux clients. Ratio LTV/CAC coloré selon santé.

📉

Churn 30 jours

% de clients actifs sur les 60 derniers jours qui n'ont pas acheté sur les 30 derniers jours.

👥

Tableau cohortes 6 mois

Nouveaux clients, revenus, panier moyen et rétention M+1 sur les 6 derniers mois pour mesurer la fidélisation.

🔮

Prévisions de revenus

Régression linéaire sur les 3 derniers mois projetée sur les 3 prochains — hypothèses basse / centrale / haute.

ally-store.vercel.app/analytics/finance

Cohortes — Nouveaux clients par mois

MoisNouveaux clientsRevenus cohortePanier moyenRétention M+1
Janvier 202628480 000 FC17 143 FC68 %
Février 202634612 000 FC18 000 FC71 %
Mars 202631527 000 FC17 000 FC59 %
Avril 202642798 000 FC19 000 FC74 %
Mai 202638722 000 FC19 000 FC72 %
Juin 202622418 000 FC19 000 FC
💡 Un ratio LTV/CAC > 3× indique un modèle commercial sain. Votre ratio actuel de 7.1× signifie que chaque franc investi en acquisition génère 7.1 FC de valeur vie client.

Changelog

Communiquez les évolutions d'AllyStore aux utilisateurs avec une timeline versionnée.

Pourquoi ce module ? Les utilisateurs veulent savoir ce qui change dans leur outil. Un changelog structuré renforce la confiance, réduit les questions au support et valorise le travail de développement. Les SuperAdmins peuvent cibler les annonces par plan (STARTER / PRO / ENTERPRISE) pour une communication pertinente.

🔧 Comment l'utiliser

1

Créer une entrée (SuperAdmin)

Rédigez le titre, la version, le type (FEATURE, IMPROVEMENT, BUGFIX, SECURITY, DEPRECATION) et le contenu. Statut initial : brouillon.

POST /api/store/changelog
2

Publier l'entrée

Définir publishedAt déclenche la visibilité pour les utilisateurs du plan ciblé. Filtrez par STARTER / PRO / ENTERPRISE / tous.

PATCH /api/store/changelog/[id] { "publishedAt": "2026-06-04" }
3

Vue publique utilisateur

Tous les utilisateurs connectés voient la timeline des versions publiées, triée de la plus récente à la plus ancienne.

GET /api/store/changelog/public

⭐ Fonctionnalités clés

🏷️

5 types d'entrées

FEATURE (bleu), IMPROVEMENT (vert), BUGFIX (orange), SECURITY (rouge), DEPRECATION (gris) — badges colorés distinctifs.

📢

Ciblage par plan

Publiez une nouveauté uniquement pour les comptes PRO ou ENTERPRISE sans la montrer aux utilisateurs STARTER.

🔒

Admin exclusif

Seuls les SuperAdmins peuvent créer, modifier ou supprimer des entrées. Les managers voient uniquement la vue publique.

📜

Timeline versionnée

Affichage chronologique en timeline avec numéros de version sémantique (v2.5.0, v2.4.1, etc.).

ally-store.vercel.app/changelog

Changelog AllyStore — Dernières versions

VersionTypeTitreDatePlan
v2.5.0FeatureModule Drive avec créneaux personnalisables04/06/2026PRO+
v2.4.2BugfixCorrection calcul TVA multi-taux28/05/2026Tous
v2.4.1ImprovementPerformances caisse POS ×320/05/2026Tous
v2.4.0SecurityRenforcement JWT + rotation des clés API10/05/2026Tous

Notifications

Alertez les bons utilisateurs sur les événements critiques : stock bas, DLC, paiements, retours.

Pourquoi ce module ? Un stock en rupture silencieuse, une DLC dépassée non détectée ou une facture fournisseur oubliée peuvent coûter cher. Le système de notifications proactif d'AllyStore s'assure qu'aucun événement critique ne passe inaperçu, sur le canal préféré de chaque utilisateur.

🔧 Comment l'utiliser

1

Configurer les canaux

Dans les paramètres, activez IN_APP (toujours actif), EMAIL et/ou SMS selon votre abonnement et préférences.

PATCH /api/store/settings/notifications
2

Recevoir les alertes

La cloche dans la barre de navigation affiche un badge rouge avec le nombre de notifications non lues.

GET /api/store/notifications?unread=true
3

Marquer comme lu

Cliquez sur une notification pour la marquer lue individuellement, ou "Tout marquer lu" pour vider le centre.

PATCH /api/store/notifications/[id]/read

⭐ Fonctionnalités clés

🔔

8 types d'événements

LOW_STOCK, EXPIRY_ALERT, SALE_COMPLETED, NEW_CUSTOMER, PAYMENT_RECEIVED, SUPPLIER_INVOICE_DUE, BUDGET_EXCEEDED, RETURN_CREATED.

📡

3 canaux de diffusion

IN_APP (centre de notifications en temps réel), EMAIL (récapitulatif) et SMS (alertes urgentes uniquement).

📋

Centre chronologique

Liste de toutes les notifications triées par date, avec badge de non-lues et actions rapides.

🔄

Cycle de statut complet

PENDING → SENT → READ / FAILED. Traçabilité complète de chaque notification pour audit.

ally-store.vercel.app/notifications

Centre de notifications — 4 non lues

TypeMessageCanalStatutDate
LOW_STOCKRiz Parfumé 5kg : 3 unités restantesIN_APP + EMAILNon luAujourd'hui 09:14
EXPIRY_ALERTYaourt Bissap : DLC dans 2 joursIN_APPNon luAujourd'hui 08:30
PAYMENT_RECEIVEDPaiement Mobile Money 45 000 FC reçuIN_APPLuHier 17:22
BUDGET_EXCEEDEDBudget Frais généraux dépassé de 12 %IN_APP + SMSNon luHier 14:05

Imprimante & tiroir-caisse

Impression directe des tickets (ePOS) et ouverture automatique du tiroir — sans aucun logiciel à installer sur le poste.

Pourquoi ce module ? Sans intégration matérielle, chaque ticket passe par la boîte de dialogue du navigateur (lent, ticket mal formaté) et le tiroir doit être ouvert à la clé. Avec une imprimante thermique compatible ePOS (Epson), AllyStore imprime le ticket instantanément depuis n'importe quel poste — PC, tablette Android ou iPad — et ouvre le tiroir automatiquement sur les paiements en espèces.

🔧 Comment l'utiliser

1

Brancher le matériel

Imprimante sur le réseau du magasin (Ethernet/WiFi), tiroir-caisse relié à l'imprimante par câble RJ12 (port DK). Réservez l'IP de l'imprimante dans votre routeur (bail DHCP statique).

Imprimante compatible ePOS-Print requise (ex. Epson TM-m30III)
2

Configurer le poste de caisse

Paramètres → Imprimante de caisse : saisissez l'adresse IP de l'imprimante (visible sur son ticket de statut), activez SSL, puis lancez un ticket de test. La configuration est propre à chaque poste.

Config stockée par poste (localStorage) — pas en base
3

Encaisser normalement

Après chaque vente, bouton « Imprimer le ticket » dans l'écran de succès. Sur paiement espèces, le tiroir s'ouvre automatiquement — y compris pour les ventes hors-ligne.

Ticket 80mm : TVA ventilée, remises, points fidélité, rendu monnaie

⭐ Fonctionnalités clés

🖨️

Impression directe ePOS

Le navigateur parle directement à l'imprimante en HTTP/XML sur le réseau local. Aucun driver, aucun agent à installer — fonctionne sur PC, Android et iPad.

💰

Tiroir piloté

Ouverture automatique sur paiement espèces via l'impulsion DK de l'imprimante. Test manuel disponible depuis l'écran de configuration.

🧾

Ticket conforme

En-tête et pied personnalisables (Paramètres → Ticket), ventilation TVA par taux, remises promotions, points fidélité, rendu monnaie, devise du magasin.

🔐

SSL imprimante

L'application étant servie en HTTPS, l'imprimante est appelée en SSL (certificat à accepter une fois par poste) — guide intégré dans l'écran de réglages.

ally-store.vercel.app/settings/printer

Imprimante de caisse — poste Caisse 1

RéglageValeurStatut
Adresse IP192.168.1.50Joignable
Device IDlocal_printerOK
SSLActivéCertificat accepté
Ticket de testImprimé + tiroir ouvertTest réussi ✓

Mode hors-ligne

La caisse continue d'encaisser pendant les coupures internet — synchronisation automatique au retour du réseau.

Pourquoi ce module ? Délestages, connexions instables : en Afrique, l'internet permanent n'est pas garanti. Un supermarché ne peut pas arrêter d'encaisser parce que la connexion est tombée. Le mode hors-ligne d'AllyStore (PWA) garde la caisse opérationnelle et garantit qu'aucune vente n'est perdue ni comptée deux fois.

🔧 Comment ça marche

1

Coupure détectée

Un bandeau rouge apparaît en caisse : « Mode hors-ligne ». Vous continuez à scanner et encaisser normalement — les ventes reçoivent un ticket provisoire (OFF-XXXXXXXX).

File locale IndexedDB — rien ne quitte le poste
2

Retour du réseau

Les ventes en attente se synchronisent automatiquement (bandeau ambre avec compteur). Chaque vente porte un identifiant unique généré avant l'envoi : aucun doublon possible, même si la réponse réseau se perd.

POST /api/store/sales (clientSaleId idempotent)
3

Numérotation définitive

Une fois synchronisée, la vente reçoit son numéro officiel et les stocks affichés se rafraîchissent. Les annulations restent désactivées tant qu'une vente n'est pas synchronisée.

Synchro périodique de secours toutes les 60 s

⭐ Fonctionnalités clés

📴

Caisse ininterrompue

Scan, panier, remises et encaissement espèces/carte fonctionnent sans réseau. L'impression du ticket aussi — l'imprimante est sur le réseau local.

🔁

Synchro idempotente

Identifiant client généré avant l'envoi : si la réponse se perd après l'enregistrement serveur, le renvoi ne crée pas de doublon.

⚠️

Limites maîtrisées

Le paiement par points fidélité est désactivé hors-ligne (le solde vit côté serveur). Les stocks affichés peuvent être légèrement décalés jusqu'à la synchro.

🔋

Combo onduleur

Associé à un onduleur UPS (kit Complet), le magasin encaisse même pendant une coupure de courant ET d'internet.

Support & Aide

Tickets de support intégrés, guide contextuel et assistance par votre canal préféré.

Pourquoi ce module ? Un gérant de magasin n'a pas le temps de chercher dans une FAQ externe. Le support est intégré directement dans AllyStore : un ticket se crée en 30 secondes depuis l'écran concerné, la conversation se poursuit dans l'application, et la page d'aide documente chaque module selon votre abonnement.

🔧 Comment l'utiliser

1

Créer un ticket

Menu Support → « Nouveau ticket » : titre, description, priorité. L'équipe AllyStore est notifiée immédiatement.

POST /api/store/tickets
2

Suivre la conversation

Chaque ticket a un fil de discussion. Vous êtes notifié à chaque réponse du support ; répondre à un ticket résolu le rouvre automatiquement.

POST /api/store/tickets/[id]/messages
3

Consulter le guide intégré

La page Aide documente tous vos écrans, filtrés selon les modules actifs de votre abonnement — inutile de lire la doc d'un module que vous n'avez pas.

GET /help — généré depuis le registre des pages

⭐ Fonctionnalités clés

🎫

Tickets intégrés

Statuts OPEN → IN_PROGRESS → RESOLVED, priorités, réouverture automatique. Tout l'historique reste consultable.

📖

Aide contextuelle

Guide intégré généré automatiquement depuis le registre des pages — toujours à jour avec l'application, filtré par abonnement.

💬

Multi-canal

Tickets in-app pour le suivi, WhatsApp et téléphone pour l'urgence (caisse bloquée, imprimante en panne) — 7j/7, 8h–18h GMT.

🛠️

Console admin dédiée

Côté plateforme, l'équipe AllyStore traite les tickets de tous les magasins avec vue par priorité et temps de réponse.

Équipements & kits matériel

Trois kits clés en main pour équiper votre magasin : du démarrage simple au supermarché multi-caisses.

Pourquoi ce catalogue ? Un logiciel de caisse sans le bon matériel, c'est la moitié de la solution. AllyStore Équipements propose du matériel testé et certifié compatible — imprimantes ePOS, douchettes, balances connectées, terminaux mobile money — livré dans 22 pays, installé et configuré sur place par nos techniciens.
Catalogue complet des équipements AllyStore 19 produits · 3 kits · prix FCFA · comparatif détaillé — ouvre dans un nouvel onglet

⭐ Les trois kits

🌱

Kit Minimal — 149 000 FCFA

Tablette POS + douchette USB + imprimante ePOS. Le strict nécessaire pour encaisser proprement dès le premier jour. Pour boutiques et petites épiceries (plan Starter).

Kit Standard — 545 000 FCFA

Caisse complète : 2 tablettes, tiroir-caisse piloté, écran client, balance connectée, routeur WiFi, terminal mobile money. Le plus populaire (plan Growth).

🚀

Kit Complet — 1 290 000 FCFA

Supermarché multi-caisses : 19 équipements dont station POS 15", scanners omnidirectionnels, NAS de sauvegarde, caméras IP et onduleur (plan Premium).

🔧

Installation incluse

Livraison 22 pays (5–10 jours), installation et formation sur site, garantie 2 ans avec remplacement sous 72h. Paiement en 3× sans frais dès le kit Standard.

allystore.io/equipements

Catalogue équipements — devis en ligne

ÉquipementKitCompatibilité AllyStore
Imprimante thermique ePOS 80mmTousImpression directe + tiroir piloté
Lecteur code-barres USBTousScan → panier instantané
Balance connectée 15kgStandard+Poids → prix au kilo auto
Terminal Mobile MoneyStandard+Rapports de caisse par mode
Serveur NAS 2 ToCompletExports + sauvegarde locale

Paramètres magasin

Configurez l'identité, la devise, la TVA et le programme de fidélité de votre magasin.

Pourquoi ce module ? Chaque magasin a ses propres règles : devise locale, taux de TVA, programme de fidélité personnalisé. Ces paramètres fondamentaux impactent l'ensemble de la plateforme — les prix affichés, les tickets de caisse générés et les points de fidélité calculés. Une configuration initiale soignée évite des incohérences coûteuses.
🧩
Carte « Modules actifs » : en tête de la page Paramètres, une carte liste les modules activés pour votre magasin (badge PRO pour les premium) et votre consommation de quota (ex. 5 / 7 modules selon votre plan). Un module non souscrit est invisible dans le menu, ses pages redirigent vers le tableau de bord et ses API répondent 403 MODULE_INACTIVE — l'activation se gère avec le support AllyStore.

🔧 Comment l'utiliser

1

Informations de base

Définissez le nom du magasin, la devise (XOF, XAF, KMF, KES, NGN, EUR, USD…), le symbole monétaire, la locale et le fuseau horaire. À la création du magasin, la devise est pré-remplie automatiquement selon le pays (KMF aux Comores, KES au Kenya…).

PATCH /api/store/settings { "currency": "XOF", "symbol": "FC" }
2

Configurer la TVA

Définissez les trois taux : normal (18 % par défaut), réduit (8 %) et super-réduit (5 %) appliqués aux ventes.

PATCH /api/store/settings { "vatStandard": 18, "vatReduced": 8 }
3

Activer la fidélité

Activez le programme, définissez les points par unité monétaire, la valeur par point et le taux de cashback.

PATCH /api/store/settings { "loyaltyEnabled": true, "pointsPerUnit": 1 }

⭐ Fonctionnalités clés

💱

Multi-devises africaines

Prise en charge native de XOF (Franc CFA BCEAO), XAF (Franc CFA BEAC), EUR, USD avec symbole et locale configurables.

📊

TVA à 3 niveaux

Taux normal, réduit et super-réduit assignables par catégorie de produit pour une conformité fiscale complète.

🎁

Programme fidélité flexible

Points par unité, valeur par point, taux de cashback — entièrement paramétrable selon votre stratégie commerciale.

🧾

Ticket de caisse personnalisé

En-tête, pied de page et affichage du logo sur chaque ticket imprimé depuis la caisse POS.

ally-store.vercel.app/settings

Paramètres — Supermarché Diallo & Frères

ParamètreValeur
DeviseXOF — Franc CFA (FC)
Localefr-SN (Sénégal)
Fuseau horaireAfrica/Dakar (UTC+0)
TVA normale18 %
TVA réduite8 % (alimentation)
Programme fidélitéActif
Points par 1 000 FC10 points
Valeur par point5 FC
Taux cashback1 %

Facturation & Abonnement

Consultez votre abonnement AllyStore, vos factures, et payez directement par mobile money.

Pourquoi ce module ? Votre accès à AllyStore est un abonnement (mensuel ou annuel) lié à un plan — STARTER, PRO ou ENTERPRISE — qui détermine vos quotas d'utilisateurs et de modules. L'écran Facturation (Paramètres → Facturation) vous rend autonome : voir où en est votre abonnement, télécharger l'historique de vos factures et surtout payer en quelques secondes avec le moyen de paiement de votre pays (Orange Money, M-Pesa, MVola, Flutterwave, carte…), sans contacter le support.

🔧 Comment l'utiliser

1

Consulter votre abonnement

La carte du haut affiche votre plan, le statut de l'abonnement — Essai (14 jours offerts à la création), Actif, Impayé ou Annulé — la période en cours et le cycle (mensuel / annuel, l'annuel étant remisé).

2

Lire vos factures

Le tableau liste vos 20 dernières factures : numéro (INV-2026-00042), date d'émission, montant TTC dans votre devise locale (TVA 18 % incluse), date d'échéance (7 jours) et statut — À payer ou Payée. À chaque émission, les propriétaires du magasin reçoivent un email.

3

Payer une facture

Bouton Payer sur toute facture impayée → choisissez le moyen de paiement parmi ceux activés pour votre magasin, saisissez votre numéro de téléphone (mobile money), puis Payer maintenant. Selon le provider : une page de paiement s'ouvre, ou un code USSD à composer s'affiche (avec bouton copier). Validez sur votre téléphone puis cliquez Actualiser.

POST /api/store/payments/initiate { provider, amount, currency, phone, reference }
4

Confirmation automatique

Dès que le provider confirme le paiement (notification sécurisée vérifiée par signature), la facture passe Payée, l'abonnement redevient Actif et vous recevez un email de confirmation. Aucune action manuelle.

5

Comprendre le cycle d'impayé

Facture émise → J+5 après l'échéance : email de relance avec la date limite → J+7 : l'accès du magasin est suspendu automatiquement (écran « Accès suspendu » pour toute l'équipe). Le paiement de la facture réactive l'accès immédiatement, sans intervention du support.

⭐ Fonctionnalités clés

📄

Historique des factures

20 dernières factures avec numéro, montants TTC, échéance et statut, triées de la plus récente à la plus ancienne.

📱

Paiement mobile money

Orange Money, M-Pesa, MVola, Tigo Pesa, Flutterwave, Stripe… selon les providers activés pour votre magasin et votre pays.

#️⃣

Code USSD intégré

Pour les providers sans page web : le code à composer s'affiche en grand avec un bouton copier.

💱

Facture en devise locale

Si un tarif local existe pour votre devise (KES, KMF, NGN…), la facture est émise dedans — sinon en FCFA.

📧

Emails automatiques

Facture émise, relance avant suspension et confirmation de paiement — en français ou anglais, aux couleurs de votre magasin.

🔓

Réactivation instantanée

Un magasin suspendu pour impayé est rouvert automatiquement dès que le paiement est confirmé.

ally-store.vercel.app/settings/billing
Plan
PRO
● Actif
Cycle
Mensuel
Période : 01/06 → 01/07
Prochaine facture
41 300 FC
TVA 18 % incluse
NuméroDateMontant TTCÉchéanceStatut
INV-2026-0005701/06/202641 300 FC08/06/2026À payerPayer →
INV-2026-0004301/05/202641 300 FC08/05/2026Payée
INV-2026-0002901/04/202641 300 FC08/04/2026Payée
Facture INV-2026-00057 à régler avant le 08/06. Sans paiement au 15/06, l'accès du magasin sera suspendu automatiquement (réactivation immédiate au paiement).
💡
Astuce : Vous ne voyez aucun moyen de paiement dans le panneau « Payer » ? Aucun provider n'est encore activé pour votre magasin — contactez le support AllyStore qui l'activera selon votre pays. En attendant, le support peut enregistrer un paiement manuel (virement, espèces) qui réactive votre accès de la même façon.

Thème & Logo

Personnalisez l'apparence visuelle pour une marque blanche — vos couleurs, votre identité.

Pourquoi ce module ? AllyStore est une plateforme marque blanche : chaque magasin peut avoir sa propre identité visuelle. Les couleurs de votre enseigne, votre logo et votre favicon remplacent les valeurs par défaut pour que vos équipes et clients reconnaissent immédiatement votre marque dans l'interface.

🔧 Comment l'utiliser

1

Uploader le logo

Glissez votre logo (PNG/SVG, fond transparent recommandé). AllyStore l'envoie sur Cloudinary et stocke l'URL.

POST /api/store/theme/logo (multipart/form-data)
2

Choisir les couleurs

Sélectionnez via color picker une couleur primaire, secondaire et accent. La prévisualisation se met à jour en direct.

PATCH /api/store/theme { "primary": "#1a6b3c", "secondary": "#f59e0b" }
3

Sauvegarder & appliquer

Les couleurs sont injectées comme CSS custom properties. Tous les boutons, badges et la navigation adoptent les nouvelles couleurs immédiatement.

--color-primary: #1a6b3c; --color-accent: #f59e0b;

⭐ Fonctionnalités clés

🖼️

Logo & favicon Cloudinary

Upload direct vers Cloudinary avec optimisation automatique. URL HTTPS sécurisée stockée en base.

🎨

3 couleurs configurables

Primaire (navigation, boutons principaux), secondaire (accents), accent (badges, highlights) — via color picker natif.

👁️

Prévisualisation en direct

L'interface se met à jour en temps réel pendant la sélection des couleurs, sans rechargement de page.

🏪

Isolation par tenant

Chaque magasin a ses propres paramètres de thème indépendants. La personnalisation est strictement isolée.

ally-store.vercel.app/settings/theme

Configuration thème — Supermarché Diallo & Frères

ÉlémentValeurPrévisualisation
Logologo-diallo.png (Cloudinary)✓ Uploadé
Faviconfavicon-diallo.ico✓ Uploadé
Couleur primaire#1a6b3c (Vert forêt)████
Couleur secondaire#f59e0b (Or)████
Couleur accent#ef4444 (Rouge vif)████
💡 Les couleurs personnalisées s'appliquent aux boutons CTA, à la barre de navigation, aux badges de statut et aux en-têtes de tableaux. Le reste de l'interface reste neutre.

Équipe

Gérez les utilisateurs du back-office avec des rôles distincts pour sécuriser les accès.

Pourquoi ce module ? Donner un accès total à toute l'équipe est un risque opérationnel et sécuritaire. Le système de rôles d'AllyStore garantit que chaque collaborateur accède uniquement aux fonctions dont il a besoin : le caissier gère la caisse, le gestionnaire de stock gère les produits, et le manager supervise sans avoir accès aux paramètres critiques.

🔧 Comment l'utiliser

1

Inviter un utilisateur

Saisissez l'email, prénom, nom, rôle et un mot de passe provisoire. L'utilisateur reçoit un email d'invitation.

POST /api/store/team/invite
2

Choisir le rôle

OWNER (tous droits), MANAGER (gestion sans admin), CASHIER (caisse uniquement), STOCK_CLERK (stocks uniquement).

{ "role": "CASHIER" }
3

Désactiver un compte

En cas de départ, désactivez le compte (isActive = false) sans le supprimer — l'historique des actions reste intact.

PATCH /api/store/team/[userId] { "isActive": false }

⭐ Fonctionnalités clés

🔑

4 rôles granulaires

OWNER, MANAGER, CASHIER, STOCK_CLERK — chaque rôle ouvre uniquement les modules nécessaires à la fonction.

📧

Invitation par email

Email d'invitation automatique avec mot de passe provisoire sécurisé à changer à la première connexion.

🚫

Désactivation sans suppression

Les comptes désactivés ne peuvent plus se connecter mais leur historique (ventes, actions) reste consultable.

🕐

Historique de connexion

lastLoginAt enregistré à chaque connexion pour auditabilité et détection de comptes inactifs.

ally-store.vercel.app/settings/team

Membres de l'équipe — Supermarché Diallo & Frères

NomEmailRôleDernière connexionStatut
Moussa Diallomoussa@diallo-sm.snOWNERAujourd'hui 08:02Actif
Aminata Sowaminata@diallo-sm.snMANAGERAujourd'hui 08:45Actif
Kofi Asantekofi@diallo-sm.snCASHIERHier 18:30Actif
Binta Traorébinta@diallo-sm.snSTOCK_CLERK03/06/2026Désactivé

Clés API & Sécurité

Permettez à des applications tierces d'accéder à l'API AllyStore de façon sécurisée via des clés à scopes.

Pourquoi ce module ? Pour connecter AllyStore à un ERP, un site e-commerce ou un outil BI, des applications tierces ont besoin d'un accès sécurisé à vos données. Les clés API permettent cet accès de façon contrôlée : chaque clé a un périmètre précis (scopes), une expiration optionnelle et peut être révoquée à tout moment sans impacter les autres intégrations.
🚨 Sécurité critique : La clé complète est affichée une seule fois lors de la création. Copiez-la immédiatement dans votre gestionnaire de secrets. AllyStore ne stocke jamais la clé en clair — uniquement son hash SHA-256.

🔧 Comment l'utiliser

1

Générer une clé

Donnez un nom descriptif à la clé, sélectionnez les scopes nécessaires et définissez une date d'expiration optionnelle.

POST /api/store/security/api-keys
2

Copier la clé (one-time)

La clé complète ally_sk_ab12cd34ef56... s'affiche une seule fois. Copiez-la maintenant dans votre application.

Authorization: Bearer ally_sk_ab12cd34ef56gh78ij90
3

Utiliser dans votre app

Ajoutez le header Authorization à chaque requête API. AllyStore vérifie le hash et les scopes à chaque appel.

GET /api/store/products (avec Authorization)
4

Révoquer si nécessaire

Désactivez une clé compromise en un clic sans la supprimer — la trace audit reste. Toutes les requêtes avec cette clé sont immédiatement rejetées.

PATCH /api/store/security/api-keys/[id]/revoke

⭐ Fonctionnalités clés

🔐

Stockage SHA-256

La clé brute n'est jamais persitée en base. Seul son hash SHA-256 est stocké — même une compromission DB n'expose pas les clés.

🏷️

Préfixe identifiable

Format ally_sk_[8 chars]... — les 8 premiers caractères sont visibles en clair pour identifier la clé sans l'exposer.

🎯

Scopes précis

READ_ALL, WRITE_ALL, SALES_READ, SALES_WRITE, PRODUCTS_READ, PRODUCTS_WRITE, CUSTOMERS_READ, CUSTOMERS_WRITE, ANALYTICS_READ — principe du moindre privilège.

📅

Expiration optionnelle

Définissez une date d'expiration pour les intégrations temporaires. La clé est automatiquement invalidée à échéance.

ally-store.vercel.app/settings/security

Clés API actives

NomPréfixeScopesExpirationStatutAction
ERP Odoo Prod ally_sk_ab12cd34 READ_ALL WRITE_ALL 31/12/2026 Actif Révoquer
BI Metabase ally_sk_ef56gh78 ANALYTICS_READ SALES_READ Actif Révoquer
Boutique WooCommerce ally_sk_ij90kl12 PRODUCTS_READ CUSTOMERS_WRITE 30/06/2026 Expiré Renouveler
ℹ️ Chaque clé révoquée reste visible dans l'historique pour audit. La date de révocation et l'utilisateur ayant effectué l'action sont enregistrés.