TuniRFID Retail Suite v2.1

Guide complet des deux applications : StockManager (le bureau — catalogue, stock, achats, facturation, pilotage) et SalePoint (la caisse — vente au comptoir). Workflow metier de bout en bout : Configuration ➞ Reception & Etiquetage ➞ Vente comptoir ➞ Retours ➞ Cloture journee ➞ Pilotage (onglet Ventes : filtres, heatmap, exports, audit, annulation en lot). Inclut Soldes & Promotions, Ventes B2B Facturex, Veille & Sourcing IA, RFID Zebra ZD621R + Print Agent.

📋 17 Modules StockManager + 7 SalePoint 🛒 Caisse SalePoint (POS) documentee 📊 Onglet Ventes (heatmap, exports, audit, bulk void) 👥 Multi-magasin & Profils 🗀 Soldes & Promotions 📄 Facturex B2B ⚡ Agent IA ZD621R 🎯 13 scenarios pratiques (9 admin + 4 caisse) 🔗 tunirfid.app · pos.tunirfid.app
1

Vue d'ensemble de la plateforme

Architecture

StockManager est le back-office de gestion de stock, connecte a SalePoint (caisse) via une base SQLite partagee. Il couvre tout le cycle : approvisionnement, etiquetage RFID, transferts, ventes et fidelite client.

📦
Articles & SKUs
Catalogue produit
🚚
Bons de Livraison
Reception fournisseur
🔃
Transferts
Inter-depots
📊
Stock & Mouvements
Niveaux + historique
📡
RFID / CB
Etiquetage ZD621R
🔄
Rempl. Etiquette
Meme EPC, stock intact
👥
Clients & Fidelite
Points & bons
📄
Commandes
Planification achat
📋
Inventaire
Comptage physique
🔙
Retours Fourn.
Renvoi marchandise

Les 23 pages de l'application

SectionPageDescription
PrincipalTableau de bordKPIs, graphiques, alertes, activite recente
ArticlesCatalogue produit avec variantes (SKUs), upload photos
Etiquetage RFIDImpression d'etiquettes RFID (ZD621R)
Etiquetage Code a BarresImpression d'etiquettes code-barres
Soldes & Promotions NOUVEAUCampagnes de remise, regles panier, codes promo, atelier catalogue articles
Rempl. Etiquette RFIDRemplacement d'etiquettes perdues/endommagees — meme EPC, stock inchange
Stock & MouvementsNiveaux de stock + historique mouvements
Bons de livraisonReception marchandise fournisseur (+ OCR facture supplier)
Factures fournisseursFacture FF tirees depuis BL — valider, payer, echeancier
Comptes fournisseursEncours fournisseurs et historique paiements
BL Vente NOUVEAUBon de livraison vers client B2B (Facturex)
Factures clients NOUVEAUFacture B2B (Facturex) — valider, payer, echeancier, PDF
Comptes clients B2B NOUVEAUEncours clients B2B et historique paiements
InventaireComptage physique et ajustement
Retours fournisseursRenvoi marchandise au fournisseur
TransfertsTransfert entre depots/magasins (paire SORTIE/ENTREE)
Intelligence IAVeille & Sourcing IADecouverte tendances + sourcing fournisseurs (gated plans Reseau/Empire)
ConfigUtilisateursComptes, roles, PINs, affectations multi-magasin, profils de permission
Postes RFID NOUVEAUPostes boutique HMAC : api-keys, heartbeat, statut machines
ParametresRayons, familles, gammes, magasins, fidelite, Profils & Permissions
AideConfig. imprimanteZebra ZD621R via TuniRFID Print Agent (WS relay) ou Zebra Browser Print
Guide d'utilisationCe document
CaisseOuvrir la caisse ↗Lien vers SalePoint (POS) — port 8011 / pos.tunirfid.app

Flux de donnees — Achat → Reception → Vente B2C

Commande (BC)
BL Fournisseur
Stock +RECEPTION
Etiquettes RFID/CB
Transfert
Soldes / Promo
Vente caisse (SalePoint)
Stock -SALE

Flux de donnees — Ventes B2B (Facturex)

Compte client B2B
BL Vente
Stock -SORTIE
Facture client (Facturex)
Echeancier & paiements
PAYEE
2

Demarrage & Premier lancement

🎯
Nouveau — Prise en main guidee. Au premier login, une visite guidee demarre automatiquement. Le bouton « ? » en haut a droite la rouvre a tout moment, avec la checklist « Pour commencer » (6 etapes : reglages, 1er article, code-barres, 1re vente, cloture Z, tableau de bord) et ce guide. Un selecteur FR / ع bascule la langue de l'aide (francais / arabe).
cd D:/virtual_envs/langchain_kernel/langraph_testing/RFID/retail_suite
python -m uvicorn stock_manager.server:app --host 0.0.0.0 --port 8013 --reload

Ouvrir le navigateur ➜ http://localhost:8013

⚠️
Selecteur de magasin En bas de la barre laterale gauche, un selecteur de magasin (dropdown) filtre toutes les donnees de stock. Il est persiste dans localStorage. Si aucun magasin n'est configure, le stock ne s'affichera pas.
M1

Configuration initiale (Parametres)

Fondation

Barre laterale ➜ Parametres (section Configuration). La page contient 9 onglets.

Creer les Magasins / Depots

Les magasins representent vos points de stockage physiques. Chaque mouvement de stock est lie a un magasin.

ChampDescriptionExemple
CodeIdentifiant unique courtMAG-TUNIS
NomNom completMagasin Tunis Centre
VilleLocalisationTunis
AdresseAdresse physique12 Rue de la Liberte
TelephoneContact71 234 567
TypeSTORE / WAREHOUSE / HQSTORE
💡
Creez au minimum 2 magasins pour pouvoir tester les transferts inter-depots plus tard.
Magasin 1 : MAG-TUNIS  / "Magasin Tunis Centre"  / Type: STORE
Magasin 2 : DEP-SOUSSE / "Depot Sousse"           / Type: WAREHOUSE
Magasin 3 : HQ-SFAX    / "Siege Sfax"              / Type: HQ

Famille ➜ Sous-famille

Le Rayon est un attribut libre saisi directement sur l'article (ex: DAME, HOME, ENFANT). La hierarchie dans Parametres est : Famille (parent) → Sous-famille (enfant).

FAMILLES :
  CHEMISE  ➜ Chemises       PANTALON ➜ Pantalons
  TSHIRT   ➜ T-Shirts       VESTE    ➜ Vestes
  CEINTURE ➜ Ceintures      ECHARPE  ➜ Echarpes

SOUS-FAMILLES :
  CH-SLIM    ➜ Chemise Slim Fit      (Famille: Chemises)
  CH-CLASSIC ➜ Chemise Classique     (Famille: Chemises)
  PN-JEAN    ➜ Jean                  (Famille: Pantalons)
  PN-CHINO   ➜ Chino                 (Famille: Pantalons)

Gammes de tailles

Une gamme = un ensemble de tailles predefinies. Selectionnee dans l'article, elle alimente automatiquement les variantes.

Gamme ADULTE : 36, 38, 40, 42, 44, 46, 48
Gamme ENFANT : 2A, 4A, 6A, 8A, 10A, 12A, 14A
Gamme UNIQUE : TU (taille unique)
Gamme SHOES  : 39, 40, 41, 42, 43, 44, 45

Unites, Marques, Fournisseurs, Saisons, Genres

OngletDonnees a creer
UnitesPCE Piece, PQT Paquet, DOZ Douzaine, MTR Metre
MarquesZARA, LACOSTE, NIKE, LOCAL Fabrication locale
FournisseursFOURN-01 Societe Textile du Nord, FOURN-02 Istanbul Fashion, FOURN-03 Guangzhou Textile
SaisonsPE-2026 Printemps-Ete 2026, AH-2026 Automne-Hiver 2026
GenresHOMME, FEMME, ENFANT, MIXTE
Checkpoint La configuration de base est en place. Vous pouvez maintenant creer des articles.
M2

Creer son premier article

Barre laterale ➜ Articles ➜ Bouton "+ Nouvel article"

Le formulaire 3 panneaux

📋 Article (fond blanc)

  • Code (+ bouton Auto)
  • Designation (obligatoire)
  • Reference
  • Unite stock / Unite vente
  • Est gerable / Est vendable
  • Famille ➜ Sous-famille (cascade)
  • Saison
  • Stock minimum

🟩 Achat (fond vert)

  • Fournisseur
  • Ref fournisseur
  • %FODEC
  • TVA achat%
  • P.U.H.T achat
  • Remise achat%
  • P.U.T.T.C achat (auto)
  • Marge% (auto)
  • Qte min. commande

🔵 Vente (fond bleu)

  • Marque
  • Genre
  • Gamme de tailles
  • TVA vente%
  • P.U.H.T vente
  • P.U.T.T.C vente (auto)
  • Remise vente%
  • P.U.T.T.C final
  • Remise max%
  • P.U.H.T B2B (gros) NOUVEAU
  • P.U.T.T.C B2B (auto)
  • Marge B2B cible% + bouton Recalculer prix B2B
🔄
Calculateur bidirectionnel Saisissez dans n'importe quel champ de prix (HT achat, TTC achat, Marge, HT vente, TTC vente, TTC final) et tous les autres se recalculent automatiquement.
🤝
Prix de vente B2B (gros) Renseignez un P.U.H.T B2B pour fixer un tarif revendeur distinct du prix de detail. Le P.U.T.T.C B2B se calcule automatiquement depuis la TVA vente ; le bouton Recalculer prix B2B (marge cible) deduit le P.U.H.T B2B du prix d'achat HT et d'une marge cible. Ce tarif est applique automatiquement aux lignes de BL Vente (un badge B2B le signale). Laisse a 0, le BL Vente utilise le prix de detail.
💰
Arrondi : prix d'achat preserves au millime Les prix d'achat (P.U.H.T achat, P.U.T.T.C achat) ne sont jamais arrondis au 10 millimes : un prix fournisseur comme 23.994 reste exactement 23.994 (3 decimales / millime). Seuls les prix de vente suivent l'arrondi commercial (10 millimes + arrondi psychologique .900). Ainsi vos marges et la valorisation du stock restent exactes. La meme regle s'applique aux lignes de Bons de Livraison et Bons de Commande fournisseur (prix unitaire et totaux conserves au millime).

Definir Tailles et Couleurs

Tailles : Cliquer "Ajout gamme" ➜ les tailles (36-48) apparaissent comme des chips.

Couleurs : Saisir BLANC + Entree, NOIR + Entree, BLEU CIEL + Entree

Generer les variantes (SKUs)

Cliquer "Generer variantes" ➜ produit cartesien 7 tailles x 3 couleurs = 21 SKUs

Chaque SKU recoit un code-barres EAN13 unique genere automatiquement.

NBarcodeDesignationTailleCouleur
12140000000015Chemise Oxford Slim - 36 BLANC36BLANC
22140000000022Chemise Oxford Slim - 36 NOIR36NOIR
32140000000039Chemise Oxford Slim - 36 BLEU36BLEU CIEL
...............
212140000000213Chemise Oxford Slim - 48 BLEU48BLEU CIEL
Checkpoint L'article est cree avec 21 variantes. Le stock est a 0 partout. Il faut maintenant receptionner de la marchandise.
M2B

Soldes & Promotions

NOUVEAU

Barre laterale ➜ Soldes & Promotions (icone 🏷). La feature couvre 3 mecanismes complementaires de reduction qui peuvent se cumuler lors d'une meme vente :

3 Mecanismes de remise

MecanismeQuandCibleExemple
CampagneToujours actif (entre dates)Articles (SKU / famille / rayon / theme)"Soldes hiver 2026" -30% sur toute la collection HIV
Regle panierQuand panier remplit conditionsPanier total ou articles cibles"Achetes 3, payez 2" / "-10% si panier ≥ 200 DT"
Code promoSaisi en caisse par le clientLe panier globalCode BIENVENUE15 = -15%

Vocabulaire des campagnes

  • Campagne : conteneur d'une operation commerciale. Contient au moins une demarque.
  • Demarque : palier de remise dans le temps (ex: D1=-20% du 01/01 au 10/01, D2=-30% du 11/01 au 20/01, D3=-40% du 21/01 au 31/01).
  • Override par site : taux specifique pour un magasin (ex: D1=-20% partout mais -25% a Sfax).
  • Override par SKU : taux specifique pour 1 ou N articles dans une demarque (saisi dans l'atelier catalogue).
  • Atelier catalogue articles ⭐ : tableau ouvrable depuis la modale campagne pour selectionner les articles, editer les demarques en place, appliquer des % en bloc, et tracker les ventes/stocks par SKU.

Soldes hiver 2026 avec 3 demarques progressives

  1. Sidebar ➜ 🏷 Soldes & Promotions+ Nouvelle campagne
  2. Nom = SOLDES HIVER 2026, Type = SOLDES
  3. Dates : du 2026-01-01 au 2026-01-31
  4. Section 3. Demarques : + Ajouter demarque × 3 :
    • D1 : -20% du 01/01 au 10/01
    • D2 : -30% du 11/01 au 20/01
    • D3 : -40% du 21/01 au 31/01
  5. Section 4. Cibles ➜ bouton Parcourir & selectionner SKUs ➜ tableau atelier s'ouvre
  6. Filtrer par saison HIV-2026 ➜ cocher la ligne d'en-tete ➜ tous les SKUs HIV sont selectionnes
  7. (Optionnel) Override par SKU : pour le SKU doudoune cuir, fixer D3 a -50% inline
  8. Section 5. Sites ➜ cocher les magasins concernes
  9. Enregistrer ➜ la campagne devient active
💡
Le tableau atelier est ouvrable sans avoir sauvegarde la campagne (auto-save brouillon). Les demarques peuvent etre ajoutees/editees directement dans l'atelier sans fermer la modale.

Le chantier des soldes — un tableau, tout sous la main

L'atelier est l'outil central pour piloter une campagne sur des centaines de SKUs.

ActionEffet
Cocher SKUsDevient cible de la campagne au save
Edition demarque inlineModifie le % d'un SKU pour D1/D2/D3 sans quitter le tableau
Appliquer % en bloc (modale stylee)Met le meme taux sur tous les SKUs coches d'une demarque
+ Ajouter demarqueCree D4, D5... directement depuis le tableau
Tri Ventes faibles ↓ / fortes ↑Identifier les articles a brader en priorite
Colonnes Vendus et StockDecision basee sur la donnee reelle
Preview liveVoir le prix final avec la demarque appliquee

Achetez 3, payez 2 — pack famille T-shirts

  1. Sidebar ➜ Soldes & Promotions ➜ onglet Regles panier
  2. + Nouvelle regle ➜ type = QUANTITE
  3. Condition : 3 articles de la famille T-SHIRTS
  4. Action : Article le moins cher offert (100% remise sur le SKU le moins cher)
  5. Cumul : non-cumulable avec les codes promo
  6. Enregistrer

Code promo distribuable

  1. Onglet Codes promo+ Nouveau code
  2. Code = BIENVENUE15 (saisi par le client en caisse)
  3. Reduction : -15% sur le total panier HT
  4. Validite : du 2026-05-01 au 2026-06-30, usage max 500
  5. Premiere visite client uniquement (case a cocher)
  6. Enregistrer ➜ le code apparait dans la liste avec compteur d'usage
⚠️
Conformite legale TN (art. 23 loi 1998) : chaque variation de prix d'un SKU pendant une periode de soldes est tracee dans la table price_audit (prix avant, prix apres, raison, utilisateur, date). Necessaire en cas de controle Direction Generale Concurrence.
Checkpoint Campagne, regle panier et code promo crees. Le SalePoint applique automatiquement les reductions lors de l'encaissement.
M3

Receptionner la marchandise (BL)

Concept

Le Bon de Livraison (BL) enregistre l'arrivee physique de marchandise. Quand vous le validez, le stock augmente automatiquement (mouvement type RECEPTION).

BROUILLON
VALIDE
FACTURE
Valider = stock +RECEPTION   |   Depuis VALIDE: "Creer retour" possible

Creer un BL

  1. Numero : Auto-genere (BL-2026-00001) — lecture seule
  2. Fournisseur : Societe Textile du Nord (obligatoire)
  3. Depot : Magasin Tunis Centre (obligatoire)
  4. Date BL : aujourd'hui
  5. Ref fournisseur : FAC-STN-2026-0142
  6. Remise globale % : 0
  7. Notes : Livraison PE 2026 lot 1

Ajouter une ligne (mode standard)

  1. Taper Oxford dans "Ajouter article" ➜ autocomplete
  2. Selectionner ➜ dropdown "Variante" apparait
  3. Choisir 36 - BLANC
  4. Remplir : Qte=10, Prix HT=25.000, Rem%=0, TVA%=19, FODEC%=1
  5. Montants calcules en live ➜ Cliquer "Ajouter"

Repeter pour chaque variante... Mais c'est fastidieux pour 21 variantes ! ➜ C'est la qu'intervient la Matrice.

M3F

Factures Fournisseur

NOUVEAU

Role dans le workflow

Apres avoir valide un Bon de Livraison (reception physique), vous creez la Facture Fournisseur : le document financier qui lie un ou plusieurs BLs a un justificatif de paiement. Cycle : BROUILLONVALIDEEPAYEE.

Creer une Facture depuis un BL

  1. Ouvrir un BL valide ➜ bouton "Creer Facture FF"
  2. La facture est creee en BROUILLON avec les totaux du BL
  3. Aller dans Factures fournisseurs ➜ la facture apparait dans la liste
  4. Cliquer 🔍 (Detail) ➜ verifier les montants HT/TVA/TTC
💡
Vous pouvez aussi creer une FF depuis le menu Factures fournisseurs avec "+ Nouvelle facture" et y rattacher plusieurs BLs en meme temps.

Valider et Payer

ActionBoutonEffet
Valider✓ (vert)Statut → VALIDEE ; BLs passes en FACTURE
Payer💳 (bleu)Saisir montant + mode ➜ PAYEE si total atteint
Supprimer🗑Seulement en BROUILLON
M3V

Ventes B2B — Facturex (BL Vente / Factures clients / Comptes B2B)

NOUVEAU

Concept

La filiere Facturex couvre la vente de marchandise vers des clients professionnels (revendeurs, magasins distributeurs). Symetrique des achats fournisseur : un BL Vente sort le stock, puis une Facture client est emise et payee selon un echeancier. Distincte des ventes B2C en caisse (SalePoint).

Compte client B2B
BL Vente (BROUILLON)
VALIDE
-stock SORTIE
Facture client
VALIDEE
PAYEE

Page Comptes clients B2B

  1. Sidebar ➜ Comptes clients B2B+ Nouveau client B2B
  2. Raison sociale, matricule fiscal, RC, adresse, contact, telephone, email
  3. Conditions commerciales : remise par defaut (%), delai de paiement (jours), plafond encours (DT)
  4. Enregistrer ➜ le client apparait avec encours = 0 DT

Page BL Vente

  1. Sidebar ➜ BL Vente+ Nouveau BL Vente
  2. Client B2B (obligatoire), magasin source, date de livraison
  3. Ajouter les articles ➜ matrice de variantes ou ligne par ligne
  4. Le prix est pre-rempli automatiquement : prix de vente B2B (gros) de l'article s'il est defini, sinon repli sur le prix de detail. Un badge B2B signale que le tarif gros a ete applique. Remise % editable par ligne ; le prix reste modifiable.
  5. Sauvegarder ➜ statut BROUILLON
  6. Valider le BL ➜ statut VALIDE, stock decremente (mouvement SORTIE_B2B)
⚠️
La validation est bloquee si le stock est insuffisant. Le BL reste en BROUILLON jusqu'a ce que le stock soit reapprovisionne.

Bouton Creer Facture client

  1. Sur le BL Vente VALIDE, cliquer Creer Facture client
  2. Confirmer ➜ la facture est creee en BROUILLON avec les lignes du BL et les bons prix
  3. Le BL passe a FACTURE
  4. Aller dans Factures clients ➜ ouvrir la facture
  5. Selectionner ou creer un echeancier (ex: 30 jours fin de mois ➜ date echeance auto-calculee)
  6. Valider la facture ➜ statut VALIDEE
  7. L'encours du client B2B augmente du montant TTC de la facture

Paiement total ou partiel

  1. Sur une facture VALIDEE, cliquer le bouton 💳 Paiement
  2. Saisir : montant, mode (Especes / Cheque / Virement / Traite), reference, date
  3. Si paiement partiel : la facture reste VALIDEE avec un solde du visible
  4. Si paiement complet : la facture passe a PAYEE
  5. L'encours du client B2B diminue du montant paye

PDF facture client (Facturex)

Depuis une facture (BROUILLON ou superieur), bouton 📄 PDF ➜ un PDF aux normes Tunisian-compliant Facturex est genere : numero sequentiel, identifiants fiscaux, mentions legales, TVA, total en lettres.

🔗
Vue agregee : la page Comptes clients B2B liste chaque client avec son encours total, son nombre de factures impayees, et son historique de paiements. Utile pour le suivi commercial et la relance.
M4

La Matrice Taille x Couleur

NOUVEAU

Concept

La matrice permet de saisir les quantites de toutes les variantes d'un article en une seule grille, puis de les ajouter en bloc. Gain de temps considerable pour les articles multi-tailles/couleurs.

Activer la saisie matricielle

  1. Ouvrir un BL (nouveau ou existant en BROUILLON)
  2. Section Articles ➜ cliquer "Saisie matricielle"
  3. Le formulaire ligne par ligne est masque, la grille apparait

Pour revenir : cliquer "Saisie ligne par ligne"

Selectionner l'article

Taper Oxford ➜ selectionner ➜ toutes les variantes se chargent ➜ la grille se construit :

Chemise Oxford Slim Fit    |    Prix HT: 25.00   Rem%: 0   TVA%: 19   FODEC%: 1
TailleBLANCNOIRBLEU CIELTotal
363
386
409
4212
449
466
483
Total161616GT: 48

Les 4 methodes de saisie

MethodeBoutonDescriptionCas d'usage
Manuelle - Cliquer dans chaque cellule et saisir Quantites differentes par taille ET couleur
Copier colonne Copier colonne Duplique la 1ere colonne vers toutes les autres Memes quantites pour chaque couleur
Copier valeur Copier valeur Prompt ➜ remplit toutes les cellules avec la valeur Commande uniforme (ex: 5 de chaque)
Courbe en cloche 1-2-3-2-1 Distribution symetrique : plus au milieu, moins aux extremes Pattern standard pret-a-porter

Patterns de la courbe en cloche

Nb taillesPattern
3 tailles1 - 2 - 1
4 tailles1 - 2 - 2 - 1
5 tailles1 - 2 - 3 - 2 - 1
7 tailles1 - 2 - 3 - 4 - 3 - 2 - 1
⚠️
Seules les cellules avec qte > 0 sont envoyees. Les cellules vides ou a 0 sont ignorees.
M5

Gestion du Stock

MIS A JOUR

Barre laterale ➜ Stock & Mouvements

Onglet 1 — Niveaux de stock (10 colonnes)

CodeDesignationFamilleCouleurTaillePrix TTCMagasinReelleAlloueeDisponible
CH-001Chemise OxfordChemisesBLANC4253.55MAG-TUNIS422
CH-001Chemise OxfordChemisesNOIR4253.55MAG-TUNIS404
CH-001Chemise OxfordChemisesBLANC4853.55MAG-TUNIS13-2
🎨
Codes couleur des badges
Reelle neutre   Allouee > 0 orange   Dispo > 0 vert   Dispo ≤ 0 rouge

Onglet 2 — Historique des mouvements

TypeBadgeDescriptionImpact
RECEPTIONRECEPTIONBL valide+stock
SALESALEVente en caisse-stock
RETURNRETURNRetour client+stock
TRANSFER_OUTTRANSFER_OUTExpedition transfert-stock source
TRANSFER_INTRANSFER_INReception transfert+stock dest
LOSSLOSSPerte/casse-stock
INVENTORY_ADJUSTADJUSTAjustement inventaire±stock
SUPPRESSIONSUPPRESSIONRetour fournisseur valide-stock
M5b

Gestion par lot & péremption

NOUVEAU

Pour les produits qui arrivent par lots : un même article reçu plusieurs fois, chaque arrivage portant un numéro de lot et souvent une date de péremption — ex. parfums, cosmétiques, alimentaire.

💡
Un lot n'est pas une variante. La taille / la couleur sont des variantes (permanentes). Un lot est un arrivage : il change à chaque réception. Avec le suivi par lot, recevoir le même article avec un lot différent ne crée aucune variante en double — le stock est simplement ventilé par lot.

1. Activer le suivi par lot sur l'article

Fiche article ➜ cochez « Suivi par lot / péremption ». La case est décochée par défaut : seuls les articles concernés sont suivis, aucun impact sur les autres.

2. Saisir le lot à la réception

Dans un bon de livraison, en ajoutant une ligne pour un article suivi par lot, deux champs apparaissent : Lot (obligatoire) et Péremption (date, format AAAA-MM-JJ).

  • Reçu 5 parfums lot T20001 (exp. 2027-01) ➜ ligne avec Lot = T20001.
  • Plus tard, 3 du même parfum lot T20002 ➜ nouvelle ligne, même article : le stock devient 5 (T20001) + 3 (T20002), sans variante en double.
À la validation du BL, un article suivi par lot sans numéro de lot est refusé (message clair) : on ne reçoit jamais de stock-lot sans lot.

3. Voir & filtrer : onglet « Lots & Péremption »

Barre latérale ➜ Stock & Mouvements ➜ onglet Lots & Péremption : la liste de tous les lots en stock (article, variante, magasin, lot, date, quantité).

  • Filtre : recherche (lot / code / désignation), magasin, « périme avant le… ».
  • Pastilles : Périmés   Périme ≤ 30j   OK.
  • Résumé d'alerte en haut : nombre de lots périmés et bientôt périmés.

4. Vente en caisse : FEFO automatique

Quand le caissier vend un article suivi par lot, le système déduit automatiquement du lot qui périme en premier (FEFO — First Expired, First Out). Le caissier ne fait rien de plus ; le(s) lot(s) vendu(s) sont tracé(s) sur le mouvement de stock.

Cycle complet : cocher « suivi par lot » ➜ saisir lot + péremption à la réception ➜ surveiller / filtrer dans l'onglet Lots & Péremption ➜ vente FEFO.
Stock déjà présent : si vous activez le suivi par lot sur un article qui a déjà du stock (sans lot), ce stock reste vendable normalement ; les lots se constituent au fil des prochaines réceptions.
M6

Transferts inter-depots

BROUILLON
EN ATTENTE
validation
VALIDE
EXPEDIE
TRANSFER_OUT
EN RECEPTION
partiel
RECU
TRANSFER_IN
Workflow d'approbation obligatoire — un transfert se soumet (BROUILLON ➜ EN ATTENTE), puis un MANAGER+ le valide (EN ATTENTE ➜ VALIDE) avant l'expedition. Le contenu est verrouille des la validation ; pour le corriger, utiliser "Remettre en brouillon" (devalider).

Impact sur le stock

StatutStock sourceStock destination
BROUILLON / VALIDEReserve (alloue)
EXPEDIEDiminue de la qte totale (TRANSFER_OUT)En transit
EN RECEPTIONDiminueAugmente des seules unites deja recues
RECUDiminueAugmente (TRANSFER_IN) — solde transfere
Le stock source est decremente de la TOTALITE a l'expedition, mais le stock destination n'augmente que des unites reellement recues. La difference (expedie − recu) constitue l'ecart : marchandise sortie mais pas encore pointee a l'arrivee (ou perdue en transit).

Creer puis faire valider

  1. Choisir depot source et depot destination
  2. Ajouter les lignes : Manuel, Scan, Matrice, Import Excel, Depuis BL/Facture, ou Cloner un transfert existant
  3. "Soumettre" ➜ le transfert passe EN ATTENTE
  4. Un MANAGER+ clique "Valider" ➜ statut VALIDE (contenu verrouille)

Sur un transfert VALIDE, cliquer "Expedier" ➜ mouvements TRANSFER_OUT ➜ le stock du depot source diminue de la quantite totale.

Receptionner au magasin destinataire

Se placer cote magasin destinataire ➜ ouvrir le transfert (bouton "Recevoir" ▼) ➜ pour chaque ligne, saisir ou scanner la quantite reellement recue. Deux boutons en bas :

  • "Enregistrer (partiel)" — sauvegarde ce qui est recu et garde le bon ouvert (statut EN RECEPTION). A utiliser si la marchandise arrive en plusieurs fois, ou si le pointage n'est pas termine : vous pourrez reprendre plus tard.
  • "Finaliser la reception"cloture le transfert (statut RECU). Le stock destination augmente des unites recues (mouvement TRANSFER_IN).
Finaliser un bon incomplet = cloture avec ecart. Si vous cliquez "Finaliser" alors qu'il manque des unites, un avertissement s'affiche : les unites manquantes sont considerees comme perdues et ne pourront plus etre recues. Pour recevoir le reste plus tard, choisissez plutot "Enregistrer (partiel)".

↺ Rouvrir une reception (rattraper un ecart)

Un transfert finalise en RECU alors qu'il restait des unites affiche un bouton orange "↺ Rouvrir la reception" (MANAGER+). Un clic le repasse en EN RECEPTION sans toucher au stock deja recu ; vous reprenez la reception des unites restantes via "Recevoir". Le stock destination n'est augmente que du complement — jamais de double comptage.

💡
Exemple — 24 unites expediees, 12 pointees puis finalisees ➜ ecart de 12. Verifiez physiquement au magasin : si les 12 y sont, cliquez Rouvrir, pointez-les, finalisez ➜ stock destination = 24, ecart resorbe. Si elles sont reellement absentes, c'est une perte en transit (l'ecart reste comme trace a investiguer).
M7

Impression RFID (ZD621R)

Tracabilite unitaire — EPC unique par etiquette

Depuis la v1.3, chaque copie imprimee recoit un EPC unique et un numero d'unite imprime sur l'etiquette (#1, #2, #3...). Ces entrees sont enregistrees dans la table sku_units. Cela permet de retrouver precisement quelle etiquette physique est manquante sans scanner — il suffit de lire le numero imprime. Le stock en base est inchange.

🆕
Interface simplifiee (v1.4) : La page Etiquetage RFID propose uniquement "Imprimer RFID" et "Apercu". Les boutons Calibrer et Test visuel ont ete deplace dans Config. imprimante (menu Config.) pour une meilleure coherence.

Impression unitaire

  1. Selectionner l'imprimante dans le dropdown
  2. Chercher l'article ➜ choisir la variante
  3. Regler Copies, Darkness (20), Offset vertical (0), Depot
  4. "Apercu" ➜ image PNG via Labelary
  5. "Imprimer RFID"
Exemple 3 copies : La ligne 2 de chaque etiquette affiche M / BLANC #1, M / BLANC #2, M / BLANC #3 avec des EPC distincts. Chaque entree est tracee dans sku_units avec statut STOCK.

Impression batch

  1. Page Articles ➜ selectionner les variantes (checkboxes)
  2. "Imprimer RFID batch"
  3. "Imprimer tout le batch"
⚠️
Le mode batch utilise visual_only=True (pas de ^RFW) pour eviter les ghost marks.

Parametres ZPL confirmes (ZD621R, 44x11mm)

ParametreValeurExplication
^RFW H,1,2,66 words96-bit EPC encoding
^RFENsans espacePas de void sur erreur
^PR2,22 ipsVitesse lente = encodage fiable
~SD20darkness 20Contraste impression
^RSAautoDetection auto du chip
M7+

Designer d'etiquettes RFID

Le Designer permet de creer et personaliser visuellement les gabarits d'etiquettes RFID. Chaque design est stocke en base et peut etre selectionne au moment de l'impression — le layout fixe reste disponible comme fallback.

Acces au Designer

  1. Page Etiquetage RFID
  2. Cliquer sur l'onglet "Designer" (a cote de "Impression")
  3. 2 templates seeds sont disponibles par defaut :
    • Standard RFID (barcode) ★ — code barres + textes + EPC
    • Batch simplifie (prix) — designation + prix centres

Interface : 3 colonnes

ZoneContenuActions possibles
Toolbar gauche Template, boutons Ajouter, Affichage Charger/sauvegarder, zoom 2x–5x, grille snap 5 dots
Canvas central Etiquette 351×151 dots (44×19mm) a l'echelle Clic = selectionner, drag = deplacer, Suppr = effacer
Proprietes droite Parametres de l'element selectionne X, Y, police, contenu, centrage, epaisseur…

Types d'elements disponibles

ElementBoutonParametres clesZPL genere
Texte T FontH, FontW, Police (0/A/B), Centrage, Contenu ^FO…^A0N,h,w^FD…^FS ou ^FB si centre
Barcode B Type (Code128/EAN13), Hauteur, Largeur ^FO…^BCN,h,N,N,N^FD…^FS
Rectangle Largeur, Hauteur, Epaisseur trait ^FO…^GB{w},{h},{t}^FS
Ligne Longueur, Epaisseur ^FO…^GB{w},{t},{t}^FS
Image (Logo) IMG Fichier PNG/JPG — converti en monochrome 1-bit ^FO…^GFA,{bytes},…,{hex}^FS

Placeholders dynamiques

Dans le champ Contenu d'un element texte ou barcode, utilisez ces variables — elles sont resolues avec les donnees du SKU au moment de l'impression :

PlaceholderValeur injecteeExemple
{{designation}}Nom de l'articleGILET LAINE FEMME
{{barcode}}Code EAN / batch2140000000015
{{epc}}EPC 96-bit hexadecimalE2000000000000000000001
{{taille}}Taille de la varianteM
{{couleur}}Couleur de la varianteBLANC
{{taille_couleur}}Taille / Couleur fusionnesM / BLANC
{{prix_ttc}}Prix TTC formate64.900 DT
{{reference}}Code articleART-001
💡
Combinez librement : "Ref: {{reference}} — {{taille_couleur}}" donnera "Ref: ART-001 — M / BLANC"

Ajout d'un logo (Image)

  1. Cliquer "Image" dans la toolbar
  2. Selectionner un fichier PNG, JPG ou BMP
  3. Le serveur convertit automatiquement :
    • Transparence ➜ fond blanc
    • Couleur ➜ niveaux de gris
    • Dithering Floyd-Steinberg ➜ monochrome 1-bit
    • Redimensionnement auto (max 150×80 dots sur 44×19mm)
  4. L'image apparait sur le canvas — deplacez-la a votre guise
  5. Dans les proprietes : bouton "Remplacer l'image" pour changer
⚠️
Recommandations logo ZD621R : Utilisez un logo noir sur fond blanc, sans niveaux de gris ni degrade. Taille source ideale : 200×80 px minimum. Evitez les zones de gris moyen qui dithering mal a 203 DPI.

Apercu editable — Modifier avant impression

  1. Onglet Impression ➜ selectionner article + variante
  2. Bouton "Apercu" ➜ la modale s'ouvre avec les champs editables
  3. Modifier librement : Designation, Reference, Taille, Couleur, Prix TTC
  4. Cliquer "Rafraichir apercu" ➜ Labelary re-rend l'etiquette avec vos modifications
  5. Cocher "Appliquer ces modifications a tout le batch" pour propager les changements
  6. Cliquer "Imprimer maintenant"
💡
Les modifications de l'apercu n'affectent pas la base de donnees — elles sont appliquees uniquement pour cette impression.

Workflow complet : creer et utiliser un design

EtapeActionResultat
1Onglet Designer ➜ dropdown "Nouveau..."Canvas vierge
2Nommer le design dans le champ texteex: "Etiquette Premium"
3Ajouter elements (texte, barcode, logo...)Elements sur le canvas
4Selectionner un element ➜ regler proprietesPolice, contenu, position
5Drag & drop pour repositionner (snap 5 dots)Alignement precis
6Bouton "Apercu Labelary"PNG rendu en temps reel
7Bouton "Sauvegarder"Design stocke en SQLite
8Onglet Impression ➜ dropdown "Modele d'etiquette"Choisir le nouveau design
9Imprimer / ApercuZPL compile depuis le JSON

Conseils de mise en page (44×19mm, 203 DPI)

📏
Marge minimale

Laissez au moins 5 dots de marge en bordure (evite les coupures)

🔥
Designation

FontH 16–22 pour etre lisible. Utilisez "centre" pour les labels batch.

📊
Barcode Code128

Hauteur minimum 40 dots. Largeur minimale pour scanners : 180 dots.

🏠
Logo

Placez en coin superieur gauche ou droit, max 60×40 dots sur cette taille.

Snap grille

Desactiver la grille pour un positionnement precis au dot pres.

👁
Voir ZPL

Bouton "Voir ZPL" affiche le code brut — utile pour diagnostiquer un probleme d'impression.

Retrocompatibilite : Si aucun design n'est selectionne dans le dropdown "Modele d'etiquette", le layout fixe existant (build_zpl() / build_zpl_batch()) est utilise. Vos impressions existantes ne sont pas affectees.
M7⚡

Agent IA ZD621R IA

Un expert virtuel dedie a l'imprimante Zebra ZD621R integre directement dans StockManager. Il repond en francais a toutes les questions techniques : syntaxe ZPL, encodage RFID, calibration, depannage, configuration. Il connait notre configuration reelle (etiquettes 44×19mm, Read/Write Power=19, Position=B6).

Acces a l'agent

  1. Page Etiquetage RFID
  2. Cliquer sur l'onglet "Agent IA ZD621R" (3eme onglet, apres "Designer")
  3. L'agent est disponible immediatement — pas d'installation, pas de compte requis
L'agent fonctionne via OpenRouter (API gratuite). Une connexion Internet est requise. Le modele actuel est configurable dans le fichier zd621r_agent/.env.

Interface du chat

ElementDescription
Zone de messages Bulle bleue = votre question, bulle grise = reponse de l'agent. Supporte le Markdown (gras, code, listes).
Chips de suggestions 6 questions frequentes en acces rapide (calibration, VOID labels, ^RFW, TCP/IP, etc.)
Zone de saisie Tapez votre question. Entree = envoyer, Shift+Entree = nouvelle ligne.
Bouton Effacer Remet a zero l'historique de la conversation (contexte efface).

Questions typiques

🔄
Syntaxe ZPL

"Quelle est la syntaxe complete de ^RFW pour un EPC 96-bit ?"

⚠️
Depannage VOID

"Pourquoi mes etiquettes sortent VOID apres calibration ?"

Calibration

"Comment calibrer l'imprimante RFID pas a pas ?"

💻
Pilotage Python

"Comment envoyer du ZPL via TCP/IP en Python (port 9100) ?"

📊
Config reelle

"Quels sont nos parametres post-calibration (Read/Write Power, Position) ?"

👀
Differences cles

"Quelle est la difference entre ^RFEN et ^RFE N ?"

Base de connaissances integree (14 sections)

#SujetContenu
1Specifications techniquesZD621R vs ZD621, DPI, vitesse, connectivite, RE40
2Commandes ZPL II^FO, ^A, ^BC, ^GB, ^GF, ^FD, ^PQ, ^XA/^XZ…
3Commandes RFID^RS, ^RFW, ^RFR, ^RFE, ^RI — syntaxe complete + exemples
4Encodage EPC SGTIN-96Structure 96-bit, calcul des champs, conversions hex
5Commandes SGDConfiguration avancee via commandes Set/Get/Do
6Notre configuration 44×19mm351×152 dots, ^PR2,2, ^RFW H,1,2,6 — parametres valides
7CalibrationProcedure pas-a-pas, SmartCal, parametres RFID menu
8Menu RFID touchscreenArborescence complete du menu RFID de l'imprimante
9Qualite d'impressionDarkness, vitesse, problemes courants
10Patterns LEDInterpretation des voyants et bips
11MaintenanceNettoyage tete, remplacement pieces
12ConnectiviteUSB, Ethernet, Wi-Fi, Bluetooth, TCP port 9100
13ZD621R vs ZD621Differences hardware entre les deux modeles
14 ★Donnees reelles de notre imprimanteCaptures touchscreen post-calibration : Read/Write Power=19, Antenna=A1, Position=B6, chip Impinj Monza

Configuration du modele IA

Le fichier RFID/zd621r_agent/.env controle le modele utilise par l'agent (CLI et interface web) :

# Modele actuel (recommande, gratuit)
OPENROUTER_MODEL=meta-llama/llama-3.3-70b-instruct:free

# Alternatives disponibles :
# OPENROUTER_MODEL=arcee-ai/trinity-large-preview:free   # fallback si llama rate-limite
# OPENROUTER_MODEL=nousresearch/hermes-3-llama-3.1-405b:free
# OPENROUTER_MODEL=nvidia/nemotron-3-super-120b-a12b:free  # modele reasoning — eviter
⚠️
Limite du tier gratuit : ~20 requetes/minute. Si vous recevez une erreur "429 Too Many Requests", attendez quelques secondes avant de renvoyer votre question. Evitez d'envoyer plusieurs messages en rafale.
💡
Limites de l'agent : L'agent repond uniquement sur la base de sa knowledge base (ZD621R + notre configuration). Pour les questions sur le code Python retail_suite ou les autres modules StockManager, consultez ce tutorial ou le code source directement.
M7R

Remplacement Etiquette RFID NOUVEAU

Problematique

Un magasin possede 5 pantalons identiques (meme taille, meme couleur) mais chacun porte une etiquette RFID avec un EPC distinct et un numero d'unite imprime (#1 a #5). Si une etiquette est perdue ou endommagee, il faut retrouver precisement l'unite concernee et reimprimer le meme EPC — sans cree de mouvement de stock.

Workflow de remplacement
Identifier l'unite manquante
(numero sur etiquette ou scan RFID)
Marquer perdu
PERDU_ETIQUETTE
Reimprimer
Meme EPC — statut STOCK

Statuts d'une unite (sku_units)

StatutSignificationTransition
STOCKUnite en stock avec etiquette valideEtat initial apres impression
PERDU_ETIQUETTEEtiquette manquante ou endommagee — unite physiquement presenteBouton "Marquer perdu"
STOCKRetour a STOCK apres reimpression reussieBouton "Reimprimer" confirme
⚠️
Stock inchange : Marquer une unite comme PERDU_ETIQUETTE et la reimprimer ne cree aucun mouvement de stock. Seul le statut de l'etiquette est mis a jour.

Etapes d'utilisation

Barre laterale ➜ Rempl. Etiquette

La page charge automatiquement la liste des depots disponibles.

Chercher le SKU concerne

Tapez le nom de l'article dans le champ de recherche (autocompletion). Cliquez sur la variante souhaitee.

Un bandeau bleu confirme la selection : POLO CLASSIC HOMME — M / BLANC (25 unites enregistrees)

Selectionner le depot

Utilisez le dropdown depot pour filtrer les unites par point de vente. Cliquez "Afficher".

Tableau des unites physiques

Chaque ligne correspond a une unite tracee :

#EPCDepotImprimee leStatutScan liveActions
1E20000…0010Boutique Sfax31/03/2026STOCK✓ Detecte
2E20000…0011Boutique Sfax31/03/2026PERDU_ETIQUETTE✗ Non detecte🔄 Reimprimer
3E20000…0012Boutique Sfax31/03/2026STOCK✓ Detecte

Identification automatique par scan RFID

Si un lecteur RFID est connecte au RFID Dashboard (ws://localhost:8000/ws) :

  1. Cliquer "📡 Demarrer scan"
  2. Passer le lecteur sur les articles presentes en rayon
  3. La colonne Scan live se met a jour en temps reel : ✓ Detecte / ✗ Non detecte
  4. L'unite non detectee = etiquette manquante ou illisible
  5. Cliquer "⏹ Arreter" quand termine

Marquer l'unite comme perdue

Sur la ligne de l'unite sans etiquette, cliquer le bouton "⚠ Marquer perdu". Le statut passe a PERDU_ETIQUETTE.

Reimprimer avec le meme EPC

  1. Cliquer "🔄 Reimprimer" sur l'unite perdue
  2. La modale s'ouvre : EPC affiche en lecture seule, imprimante et darkness selectionnables
  3. Verifier que c'est bien l'EPC de l'unite #N a restituer
  4. Cliquer "🖨 Reimprimer meme EPC"
  5. Le statut repasse a STOCK
L'etiquette reprend le meme EPC qu'avant — le scanner RFID de la caisse reconnait l'article sans modification. Aucun mouvement de stock n'est cree.

Prerequis

  • Les etiquettes RFID doivent avoir ete imprimees depuis Etiquetage RFID ➜ Impression (v1.3+) pour que les entrees sku_units soient creees.
  • Le depot doit etre selectionne lors de l'impression initiale (store_id) pour que le filtre fonctionne.
  • Le scan RFID live necessite le RFID Dashboard en cours d'execution sur http://localhost:8000 et un lecteur RFID connecte.
M8

Impression Code a Barres

  1. Selectionner un modele d'etiquette
  2. Chercher l'article ➜ choisir la variante
  3. Saisir le nombre de copies
  4. Cliquer "Imprimer"

Batch: selectionner les variantes sur la page Articles puis lancer un batch CB.

M9

Commandes Fournisseurs (BC)

Concept

La commande fournisseur (BC) planifie un achat. Confirmee, elle peut etre convertie en BL pour la reception.

BROUILLON
CONFIRME
Creer BL
BL BROUILLON

Actions cles

  • Confirmer ➜ statut CONFIRME
  • Creer BL ➜ BL pre-rempli avec les lignes de la commande
  • Dupliquer ➜ copie BROUILLON (commandes recurrentes)
M10

Inventaire physique

NOUVEAU : partiel

Concept

L'inventaire compare le stock theorique (systeme) avec le stock compte (physique). Les ecarts sont ajustes automatiquement a la validation.

BROUILLON
VALIDE
INVENTORY_ADJUST

Inventaire complet ou partiel

A la creation, apres avoir choisi le depot, selectionnez le perimetre :

  • Complet — tous les articles du depot (inventaire annuel, magasin generalement ferme).
  • Partiel — un sous-ensemble, sans fermer le magasin (comptage tournant / spot check). On compte par Article(s) (recherche multi-select cumulable), Famille, Rayon, Marque ou Fournisseur. Ideal pour : un client signale un ecart sur un article, controle d'un rayon, ou verification apres une livraison fournisseur.
  1. Choisir le depot ➜ le perimetre (Complet/Partiel) ➜ "Demarrer l'inventaire".
  2. Saisir ou scanner la quantite comptee de chaque ligne. Une pastille verte marque les lignes deja comptees ; le compteur "X comptes" suit l'avancement.
  3. Valider ➜ un mouvement INVENTORY_ADJUST est cree pour chaque ecart.
📊
Ecart = compte − theorique. Seules les lignes presentant un ecart ajustent le stock. En partiel, un avertissement signale a la validation si des articles du perimetre n'ont pas encore ete comptes (ils ne seront alors pas ajustes).
Magasin ouvert pendant le comptage ? Aucun souci : la validation applique l'ecart en delta sur le stock vivant (et non un ecrasement). Les ventes faites pendant le comptage sont preservees, et le stock ne descend jamais sous zero.

Inventaire par lecteur RFID (.xlsx) NOUVEAU

Si vos articles sont etiquetes RFID, comptez un rayon entier en quelques secondes avec un lecteur mobile (ex. Chainway), puis importez le resultat — le comptage se remplit tout seul.

  1. Sur une session BROUILLON, cliquez "Importer lecture RFID (.xlsx)" et choisissez le fichier exporte par le lecteur (liste d'EPC).
  2. Un apercu s'affiche : EPC lus / resolus / inconnus, articles deplaces (rattaches a un autre depot) et anomalies (tags vendus/perdus retrouves), et l'ecart theorique vs compte par article.
  3. Cliquez "Appliquer au comptage" : les quantites comptees se remplissent. La case "Mettre a 0 les non scannes" traite la demarque (articles attendus mais absents).
  4. Verifiez puis Validez normalement — l'ajustement de stock est identique a la saisie manuelle.
👑
Le format du fichier est auto-detecte (colonne EPC avec ou sans en-tete). Fonctionnalite Premium (module RFID). Les EPC inconnus (tags etrangers) sont ignores ; les deplaces et anomalies sont comptes et signales.
M11

Retours Fournisseurs

BROUILLON
CONFIRME
VALIDE
SUPPRESSION

Motifs de retour

DEFAUT EXCES ERREUR AUTRE

Creez un retour depuis la page Retours ou directement depuis un BL valide (bouton "Creer retour").

M12

Clients & Programme Fidelite

Creer un client

Code auto-genere (CLT-XXXXXXXX), nom, prenom, telephone, email, ville.

Configuration fidelite (Parametres ➜ Fidelite)

ParametreDescriptionExemple
Montant trancheAchat pour gagner des points10 DT
Points tranchePoints gagnes par tranche1 point
Valeur pointValeur d'un point en dinars0.100 DT
Seuil bonPoints min pour un bon100 points
ExpirationValidite du bon365 jours
Achat 100 DT
+10 points
100 pts cumules
Bon de 10 DT
M13

Tableau de Bord & Rapports

Tableau de bord — 15 KPIs en 3 rangees

RangeeKPIs
OperationnelArticles actifs, Tags RFID, Etiquettes aujourd'hui, Ventes, Alertes stock
CA / FinanceCA Aujourd'hui, CA Semaine, CA Mois, Valeur stock, Clients actifs
Pipeline achatBC Brouillons, BC Confirmes, BC En cours, BL Brouillons, BL Valides

Rapports (7j / 30j / 90j / 365j)

  • 4 KPIs : Articles actifs, Stock total, Valeur stock DT TTC, Mouvements
  • Stock par famille (barres), Repartition par famille (donut)
  • Flux entrees/sorties par jour (lignes), Mouvements par type (barres)
  • Top 10 articles par stock (table)
M13b

Pilotage — cockpit business

NOUVEAU

Barre laterale ➜ Pilotage. Une page mobile-first pour suivre l'activite en un coup d'oeil, pensee pour une consultation rapide sur telephone par le proprietaire.

1. Choisir la periode

Boutons rapides Aujourd'hui / 7 jours / 30 jours / Ce mois, ou un intervalle personnalise (deux dates). Le selecteur « Comparer » bascule entre periode precedente et meme periode l'an dernier (utile pour la saisonnalite).

2. Les indicateurs

  • Chiffre d'affaires (TTC) — le total vendu sur la periode.
  • Benefice = CA − cout d'achat des articles vendus ; et la Marge %.
  • Total achats (cout des marchandises vendues).
  • Articles vendus, Tickets, Panier moyen.

Chaque carte montre sa variation (fleche verte a la hausse, rouge a la baisse) vs la periode de comparaison. En bas : la courbe des ventes par jour et le Top 5 produits.

🔒
Page reservee aux roles ADMIN / MANAGER (donnees financieres) ; un caissier n'y a pas acces.
📱
Installer sur le téléphone : ouvrez le menu du navigateur (Chrome / Safari) → « Ajouter à l'écran d'accueil ». Une icône TuniRFID apparaît et ouvre directement le Pilotage en plein écran, comme une application.
M14

Analytics (Ventes)

Filtres: date debut / date fin. Donnees des tables sales + sale_items (SalePoint).

  • CA par jour (line), CA par heure (bar), CA par rayon (bar), CA par famille (bar)
  • Top articles, Top clients, Top SKUs par quantite (tables)
M14B

Veille & Sourcing IA (RetailIntel)

IA
🔒
Acces gated : ce module n'apparait dans la sidebar (section Intelligence IA) que pour les plans Reseau et Empire (flag ai_agent=true). Le superadmin peut aussi le desactiver tenant par tenant via le toggle intel_enabled.

A quoi sert RetailIntel ?

Service AI qui scrute le web pour repondre a 3 questions metier :

  • Decouverte — "Quelles sont les tendances dans mon secteur et qui pourrait me les fournir ?" Scoute par secteur (5 profils YAML : haberdashery, apparel, footwear, cosmetics, construction_design).
  • Marques (brand_watch) — "Mes fournisseurs ont-ils sorti de nouveaux produits ?" Surveille les catalogues de marques d'une watchlist (BPS only au MVP).
  • Concurrents (competitor_watch) — "Que font les concurrents ?" Scan des sites concurrents sur des produits/categories cibles (BPS only au MVP).

Ouvrir Veille & Sourcing

  1. Sidebar ➜ Veille & Sourcing (section Intelligence IA)
  2. L'app dediee /intel.html (Signal Room) s'ouvre dans le meme onglet
  3. Onglet Preferences ➜ cocher les secteurs autorises pour ce tenant (limites par allowed_sectors defini en superadmin)

Pipeline Discovery

  1. En haut de l'app : Mode Decouverte (par defaut)
  2. Choisir le secteur (parmi ceux actives en preferences)
  3. Saisir un brief : zone geo, fourchette de prix, contraintes
  4. Cliquer Lancer ➜ le pipeline v5 demarre : query_planner_collector ➜ page_extractor ➜ supplier_resolver_extractor ➜ qualifier_scorer ➜ report_composer ➜ finalize
  5. L'UI affiche la progression en direct via WebSocket (etapes vert/orange, lignes ajoutees au fil de l'eau)
  6. A la fin, un rapport apparait : tendances reperees, fournisseurs scoreds (business TN, confiance donnee, evidence weight), priorite haute/medium/basse
💰
Plafond de cout par run : chaque run a une enveloppe USD definie par plan (intel_max_cost_per_run_usd). Si le pipeline atteint le plafond, il s'arrete proprement avec un rapport partiel.

Watchlists par tenant

  1. Mode Marques BPS ➜ surveille les marques de la watchlist {slug}.yaml
  2. Mode Concurrents ➜ surveille les sites de la watchlist {slug}_competitors.yaml
  3. Notifications : un digest 4h regroupe les nouveautes (08/12/16/20h Tunis), envoye par email ou Telegram
  4. Heures creuses 22h–07h Tunis : pas d'envoi (anti-spam)

Donnees isolees

Chaque tenant a sa propre base SQLite intel : {slug}_intel.db, separee de l'inventaire. Stocke : trends, suppliers, contacts, scores, reports, runs. Aucun melange entre tenants.

1 run actif par tenant

Un verrou applicatif empeche de lancer plus d'un run simultanement (eviter double facturation API). Si un run reste bloque > 30 minutes, un watchdog le marque zombie et libere le lock automatiquement.

Checkpoint Vous avez lance un run, vu la progression live, et recu le rapport final. Les fournisseurs decouverts peuvent etre importes en 1 clic dans la table fournisseurs du StockManager.
M15

Utilisateurs, Roles & Multi-magasin

v1.4

Barre laterale ➜ Utilisateurs (section Configuration). L'admin cree les comptes, leur attribue un role et les affecte a un ou plusieurs magasins.

🆕 4 Roles disponibles

RoleNiveauPerimetre
ADMIN4Acces total — gestion utilisateurs, parametres, tout
MANAGER3Gestion stock, BL, transferts, clients, rapports
WAREHOUSE2Reception, inventaire, etiquetage — pas de suppression
CASHIER1Consultation seule — utilise principalement SalePoint (caisse)

🏭 Affectation multi-magasin (Phase 1)

Un meme utilisateur peut etre affecte a plusieurs magasins. Chaque affectation peut etre active (acces autorise) ou inactive (acces suspendu temporairement sans supprimer l'affectation).

Procedure

  1. Cliquer "+ Nouvel utilisateur"
  2. Remplir : Nom, Code unique, PIN (4-6 chiffres), Role
  3. Section "Affectations magasins" : cocher chaque magasin souhaite
  4. Pour chaque magasin coche, le toggle Actif / Inactif est disponible
  5. Cliquer "Enregistrer"
💡
Cas d'usage : Un caissier qui tourne sur 2 magasins → coche les 2. Fermeture temporaire d'un magasin → passer toutes ses affectations en Inactif d'un seul coup.
AffectationAcces effectif
ActifL'utilisateur voit et interagit avec ce magasin
InactifAffectation conservee mais acces suspendu
Non cochePas d'affectation — le magasin n'existe pas pour cet utilisateur

🔒 Profil de permission (Phase 2)

Un Profil de permission est un preset reutilisable qui restreint les droits d'un role. Il ne peut jamais accorder plus que le role de base — logique AND : le droit effectif = droit du role ET droit du profil.

Exemple : WAREHOUSE restreint

Role WAREHOUSE autorise "articles : voir + creer + modifier". Profil "Magasinier Vue seule" n'autorise que voir. Resultat : l'utilisateur ne peut QUE voir les articles, meme s'il est WAREHOUSE.

Procedure

  1. Modifier l'utilisateur ➜ dropdown "Profil de permission"
  2. Choisir le profil voulu (ou "Aucun profil" pour permissions completes du role)
  3. Enregistrer ➜ les permissions effectives sont recalculees instantanement

La gestion des profils se fait dans Parametres ➜ onglet "Profils & Permissions". Voir module M15P ci-dessous.

M15P

Profils & Permissions granulaires

v1.4

Barre laterale ➜ Parametres ➜ onglet "Profils & Permissions".

Principe — Restriction par profil

Chaque role a une baseline de droits (ce qu'il peut faire au maximum). Un profil restreint cette baseline. On ne peut jamais elever un droit au-dela du role. Plusieurs utilisateurs peuvent partager le meme profil.

Les 9 modules proteges

ModuleDroits disponibles
Articlesvoir / creer / modifier / supprimer
Stockvoir / ajuster
Bons de livraisonvoir / creer / valider
Transfertsvoir / creer / valider
Etiquetagevoir / imprimer
Clientsvoir / creer / modifier
Rapportsvoir
Utilisateursvoir / creer / modifier
Parametresvoir / modifier

Creer un profil de permission

  1. Onglet "Profils & Permissions" dans Parametres
  2. Cliquer "+ Nouveau profil"
  3. Saisir un nom (ex: Magasinier Vue Seule) et une description
  4. Dans la matrice : pour chaque module, cocher les droits a autoriser (les droits non coches seront refuses, meme si le role les permet)
  5. Colonne "Effectif" affiche le resultat apres AND avec la baseline du role
  6. Cliquer "Enregistrer"
⚠️
Suppression d'un profil : Impossible si des utilisateurs lui sont assignes. Retirez d'abord le profil des utilisateurs concernes, puis supprimez-le.

Exemples de profils utiles

Nom profilRole cibleRestrictions typiques
Magasinier Vue SeuleWAREHOUSEArticles : voir uniquement (pas creer/modifier)
Manager Sans SuppressionMANAGERArticles, Stock : modifier OK, supprimer interdit
Consultant RapportsMANAGERRapports : voir — tout le reste bloque
Caissier EtenduCASHIERClients : voir + creer (pour fidelite)
M15D

Postes RFID (machines boutique)

NOUVEAU

Sidebar ➜ section Configuration ➜ Postes RFID (lien direct vers /devices.html). Cette page n'est visible que si le tenant a rfid_enabled=true.

A quoi sert ce module ?

Une "boutique" peut avoir un ou plusieurs postes RFID (PC dedies en magasin avec un lecteur HH340 ou une antenne UHF). Ces postes ne sont pas des utilisateurs : ils communiquent en machine-to-machine avec le SaaS via une API-key HMAC propre, sur des routes EPC dediees (/api/items/by-epc, /api/items/{epc}/sell, /api/heartbeat).

Provisionner une machine

  1. Page Postes RFID+ Nouveau poste
  2. Nom : Caisse 1 Tunis, magasin associe, type (CAISSE / PORTIQUE / INVENTAIRE)
  3. Le systeme genere une API-key HMAC + URL webhook : a copier dans le fichier de config du rfid_dashboard sur la machine
  4. Statut initial : JAMAIS VU — passe a EN LIGNE au premier heartbeat recu

Heartbeat et statut

Chaque poste pinge POST /api/heartbeat toutes les 60s avec son etat (lecteur connecte, derniers EPC lus). La liste affiche en temps reel :

  • EN LIGNE — heartbeat < 2 min
  • SILENCIEUX — heartbeat 2–15 min
  • HORS LIGNE — pas de heartbeat depuis > 15 min

Securite

  1. Bouton 🔌 Regenerer cle ➜ l'ancienne cle est invalidee, une nouvelle est emise
  2. La machine en boutique doit etre reconfiguree avec la nouvelle cle (sinon ses requetes 401)
  3. Bouton 🚫 Suspendre ➜ le poste ne peut plus emettre de ventes ou heartbeats

Pourquoi HMAC plutot que JWT ?

Les postes RFID tournent 24/7 sans utilisateur connecte. Un JWT expirerait et casserait le service. La HMAC est permanente, scope a un seul tenant, et chaque requete est signee : tampering immediatement detecte.

⚠️
Ne pas confondre : "Postes RFID" = machines auto en boutique (M2M HMAC). "Utilisateurs" = humains qui se loguent au SaaS (JWT). Les deux coexistent.
M16

Config. imprimante Zebra ZD621R & TuniRFID Print Agent

v1.4

Barre laterale ➜ Config. imprimante (section Configuration). Page dediee a la mise en service de l'imprimante Zebra ZD621R pour l'etiquetage RFID et code-barres.

Architecture SaaS + impression locale

StockManager est en cloud (EC2). L'imprimante est locale (USB). Le Zebra Browser Print (ZBP) est un agent local (port 9100) qui fait le pont : le serveur genere le ZPL, le navigateur l'envoie via ZBP a l'imprimante.

Installer Zebra Browser Print

  1. Page Config. imprimante ➜ section "Guide d'installation"
  2. Cliquer "Telecharger le script d'installation" ➜ un fichier install_zbp.bat est telecharg
  3. Executer le .bat en tant qu'administrateur ➜ il telecharg et installe ZBP automatiquement
  4. ZBP demarre en arriere-plan et ecoute sur localhost:9100
Apres installation, rechargez la page — le bloc "Statut ZBP" en haut doit afficher Connecte avec l'imprimante listee.
🔌
Alternative recommandee — TuniRFID Print Agent : pour les imprimantes CB seules (TSC TTP-244 Pro) ou si Zebra Browser Print pose probleme (PNA Chrome bloquant localhost), utilisez TuniRFID_PrintAgent.exe. C'est un agent Windows tray (icone barre des taches) qui se connecte en sortant au relay WebSocket wss://tunirfid.app/ws/print-relay. Le serveur fait le pont entre la session navigateur et l'agent local — pas de probleme de policy reseau. Telechargement sur la page Config. imprimante — bouton "Telecharger TuniRFID Agent" (GET /api/download/print-agent, ≈ 12 MB). Au lancement, l'icone affiche "Relay: connecte".

Verifier le statut ZBP

  1. La carte "Statut Zebra Browser Print" en haut de la page affiche en temps reel
  2. Si Deconnecte : ZBP n'est pas lance ➜ verifier le service Windows ou relancer le .bat
  3. Si Connecte mais aucune imprimante : brancher le cable USB et allumer l'imprimante
  4. L'imprimante ZD621R doit apparaitre, de preference avec connexion usb (raw ZPL direct, plus fiable que driver)

Imprimer une etiquette de test

  1. Cliquer le bouton "Imprimer etiquette test"
  2. ZBP envoie un ZPL de test directement a l'imprimante USB
  3. L'etiquette doit imprimer proprement avec texte lisible et code-barres
  4. Si les caracteres accentues (e, a, etc.) apparaissent corrompus : le firmware ZBP n'a pas recu ^CI28 — cette commande est deja incluse dans tous les templates de StockManager

Calibrage RFID (ZD621R uniquement)

  1. Cliquer "Calibrer le lecteur RFID"
  2. L'imprimante envoie une commande SGD pour lire la puissance RFID actuelle
  3. Puissance recommandee : Read = 30 / Write = 30 (configurable via l'ecran tactile de l'imprimante)
  4. Si une etiquette sort avec la mention VOID en noir : l'encodage RFID a echoue ➜ augmenter la puissance ou verifier l'alignement media
⚠️
Vitesse d'impression : Pour les etiquettes RFID (44×11 mm), la vitesse ^PR2,2 (2 ips) est obligatoire. Une vitesse elevee provoque des echecs d'encodage.

Depannage rapide

SymptomeCause probableSolution
Imprimante n'imprime pas (OK affiche)File d'attente Windows bloqueeUtiliser connexion usb (raw) plutot que driver
Jobs bloques dans la fileJobs precedents en attenteBouton "Purger file" dans la modale d'impression (envoi ~JA)
Etiquette VOID noireEchec encodage RFIDAugmenter puissance Write a 30, vitesse <= 2 ips
Accents corrompus (ete → ?)Charset non declareDeja corrige : ^CI28 present dans tous les templates
ZBP Deconnecte apres redemarrageService Windows arreteRelancer install_zbp.bat (ou demarrer le service ZBP manuellement)

Imprimante ticket de caisse (80mm) — impression directe ESC/POS

Les tickets de caisse (imprimante thermique 80mm, type XP-80C) s'impriment en ESC/POS direct via le meme TuniRFID Print Agent que les etiquettes RFID. Les octets partent du POS vers l'agent (relay EC2) puis directement a l'imprimante : plus de driver GDI Windows ni de file d'attente — c'est la fin des notifications "Erreur - Impression sur XP-80C".

Repli automatique garanti : si l'agent n'est pas lance, le ticket s'imprime quand meme via le dialogue du navigateur (en 80mm). L'impression marche toujours — l'agent ajoute la fiabilite et la coupe automatique.

Mise en service (une seule fois, sur le PC de caisse)

  1. Lancer TuniRFID_PrintAgent.exe (v2.2 ou +). C'est le meme agent que pour les etiquettes : s'il tourne deja, le re-telecharger (bouton dans Config. imprimante) pour passer en v2.2, puis le relancer.
  2. Verifier la config relay dans %APPDATA%\TuniRFID\agent_config.json : relay_url = wss://tunirfid.app/ws/print-relay, plus relay_tenant_slug et relay_api_key (fournis par la modale "Config relay"). Deja en place si les etiquettes fonctionnent.
  3. L'imprimante 80mm est detectee automatiquement (XP-80C, POS-80, EPSON TM, etc.). Pour forcer un modele precis : ajouter "receipt_printer": "XP-80C" dans agent_config.json.
  4. Brancher et allumer l'imprimante, papier 80mm en place, capot ferme.
💡
Sur la caisse (SalePoint), apres connexion, un badge 🖨 Imprimante directe apparait en bas a gauche quand l'agent est joignable. Chaque vente lance alors l'impression ESC/POS directe et la coupe du ticket.
SymptomeCause probableSolution
Badge "Imprimante directe" absentAgent eteint ou relay mal configureLancer l'agent ; verifier relay_api_key (icone de l'agent verte dans la barre des taches)
Le ticket sort via le dialogue navigateurAgent non connecte (repli normal)Demarrer l'agent : le badge confirme le mode direct
"Impression directe KO" puis bascule navigateurImprimante hors ligne ou en pauseAllumer l'imprimante ; purger la file Windows et reprendre l'impression
Rien ne sort alors que l'agent est connecteMauvaise imprimante detecteeForcer receipt_printer = nom exact (Parametres Windows ➜ Imprimantes)
M17

Onglet Ventes — Historique detaille

NOUVEAU

A quoi sert cet onglet ?

L'onglet Ventes (menu lateral, icone panier) est le centre de pilotage commercial cote administration. Il agrege toutes les ventes de la caisse SalePoint (et des magasins) et permet de chercher, filtrer, analyser, exporter et corriger l'historique. C'est la contrepartie « bureau » de la caisse « comptoir ».

🔐
Acces par role Reserve aux roles ADMIN MANAGER et au SUPERADMIN. Un CASHIER ou WAREHOUSE qui tente d'y acceder recoit un refus (403). L'annulation en lot est ADMIN uniquement.

1. Les 5 indicateurs en haut de page

Mis a jour selon les filtres actifs (periode 24h par defaut) :

  • Ventes — nombre total de tickets (detail : X valides + Y annulees)
  • CA TND — chiffre d'affaires des ventes valides uniquement (les annulees sont exclues)
  • Panier moyen — CA / nombre de ventes valides
  • Annulees % — taux d'annulation sur le total
  • En attente d'encaissement (TND) NOUVEAU — montant total des ventes carte/credit/cheque pas encore validees par l'admin. C'est l'argent vendu mais pas encore confirme en caisse : un coup d'oeil sur votre tresorerie a recouvrer.

2. Filtres multicriteres (combinables)

  • Puces rapides : Aujourd'hui · 7 derniers jours · 30 jours · Mois en cours · Tout
  • Plage de dates Du / Au (remplacee par les puces si vous cliquez l'une d'elles)
  • Mode de paiement : Especes / Carte / Cheque / Mixte / Credit
  • Statut : Valide (encaisse) / En attente d'encaissement / Annulee / Remboursee
  • Caissier (recherche partielle du nom)
  • Magasin — visible seulement si le tenant a plusieurs magasins actifs
  • Recherche libre : n° de ticket, code client ou raison sociale
🔗
Lien partageable Les filtres se refletent dans l'URL (#page-sales?...). Vous pouvez copier le lien et le renvoyer a un collegue : il retrouvera exactement la meme vue filtree.

2bis. Vues enregistrees (sauvegarder vos filtres) NOUVEAU

Reglez vos filtres puis cliquez "Enregistrer la vue" et nommez-la (ex. « Especes ce mois », « Annulations 30j »). Elle apparait sous forme de pastille ★ en haut de la barre : un clic la reapplique instantanement.

  • Cochez "Partager avec l'equipe" pour la rendre visible a tous les ADMIN/MANAGER du magasin.
  • Le × sur une pastille supprime la vue (proprietaire ou ADMIN).
  • Les vues sont synchronisees cote serveur — vous les retrouvez sur tous vos appareils (a la difference d'un simple favori navigateur).

3. Tableau, tri et pagination

Colonnes : Ticket · Date/Heure · Caissier · Client · Articles · Mode (badge colore) · Magasin · Total TTC · Validation admin · Statut · Actions.

La colonne Statut est placee juste apres Validation admin car elle en decoule (cycle d'encaissement, par ordre de priorite) : ❌ Annulee > ↩ Remboursee > ✅ Valide (espece, ou non-espece coche par l'admin) > ⏳ En attente (non-espece pas encore validee). Plus de contradiction « Valide » + « en attente » sur la meme ligne.

  • Tri sur 3 colonnes (Date, Total TTC, N° ticket) — la fleche ▾/▴ indique le sens
  • Pagination 25 / 50 / 100 lignes par page, avec indicateur « X–Y / Z »
  • Clic sur une ligne ➜ ouvre le detail complet de la vente

4. Validation admin de l'encaissement

La colonne Validation admin tranche entre un encaissement deja confirme et un encaissement en attente selon le mode de paiement :

  • Especes✅ Auto : l'argent est encaisse a la caisse, la vente est validee d'office. Rien a faire.
  • Tout autre mode (carte, credit, cheque, cheque cadeau, mixte) ➜ case a cocher en attente : l'encaissement reel (virement TPE, recouvrement du credit, compensation du cheque) n'est pas garanti au moment de la vente.

Qui peut cocher ? Seuls les profils Admin et Superadmin. Pour les autres roles la case s'affiche mais reste desactivee (lecture seule).

Comment valider : une fois l'argent reellement recu, cochez la case sur la ligne ➜ la vente bascule en « encaissement valide » et le systeme enregistre qui a valide et quand. Decocher annule la validation (champs remis a zero).

Note : les ventes deja presentes dans l'historique avant cette mise a jour restent considerees comme validees (pas de reouverture massive). Une vente annulee ne peut pas etre validee.

💡
Coherence avec le Statut : la colonne Statut (juste a droite) reflete ce choix en temps reel — une vente non-espece non cochee affiche ⏳ En attente, et passe a ✅ Valide des que vous cochez. Vous pouvez aussi filtrer la liste sur « En attente d'encaissement » pour ne voir que ce qui reste a confirmer.

5. Fiche detail d'une vente

La fenetre affiche : entete (ticket, date, caissier, magasin, statut), liste des articles (designation, code, qte, prix unitaire TTC, total ligne), bloc client, et le detail des taxes (HT / TVA / FODEC / Droit de consommation / TPE / Timbre / TTC). Si la vente a fait l'objet de retours, un encadre jaune liste l'historique des retours (date, montant, motif).

💵
Ventilation du paiement (mixte) Pour une vente Mixte, la ligne du tableau affiche directement la ventilation par mode sous le badge (ex. « 💵 5.000 · 💳 3.000 · 🧾 2.000 · 🎁 5.000 »). La fiche detail reprend le breakdown complet (Especes / Carte / Cheque / Cheque cadeau / Rendu). En haut de page, le bandeau « Encaisse par mode » totalise, sur la periode filtree, ce qui est entre par chaque mode — parts mixtes incluses (especes nettes du rendu) : le vrai suivi tresorerie. Ces montants sont exactement ceux saisis a la caisse.

6. Voir toutes les ventes d'un client

Cliquez sur le nom d'un client dans la colonne Client ➜ la liste se filtre automatiquement sur ce client et une puce « 👤 Client : NOM × » apparait en haut. Les autres filtres (dates, mode...) restent actifs. Cliquez le × pour retirer ce filtre.

7. Exporter (CSV et Excel)

  • CSV — fichier texte universel (separateur « ; », encodage compatible Excel FR)
  • Excel (.xlsx) — mise en forme riche : entete bleu, ligne d'entete figee, format millimes 0.000 sur HT/TTC, statuts colores (vert valide / orange en attente / rouge annulee / jaune remboursee), ligne de totaux, et un 2e onglet « Filtres appliques » qui trace le contexte de l'export
  • Les deux formats incluent desormais les colonnes « Valide par » et « Valide le » — utile pour la passation comptable (qui a confirme l'encaissement, et quand)

L'export respecte les filtres actifs (un export « CARTE, ce mois » ne contient que ces ventes). Plafond de securite : 50 000 lignes par export.

8. Carte de chaleur horaire

Bouton « Afficher heatmap horaire » ➜ grille 7 jours × 24 heures coloree selon l'intensite. Basculez la metrique entre 🛒 Nombre de ventes et 💰 CA TND. Les ventes annulees sont exclues. Usage typique : reperer les pics d'affluence (ex. jeudi 18–19h, samedi 10–12h) pour ajuster les horaires caissiers.

9. Journal d'audit (tracabilite)

Bouton « Audit » ➜ fenetre listant qui a fait quoi et quand sur les actions sensibles : exports CSV/XLSX et annulations en lot. Chaque ligne : utilisateur, role, action, filtres utilises, nombre de lignes, adresse IP, horodatage. Filtrable par action et par date. Utile pour la conformite (qui a exporte les donnees ce mois ?).

10. Annuler plusieurs ventes d'un coup (ADMIN)

  1. Cochez les ventes a annuler (la case d'une vente deja annulee est desactivee). La case d'entete coche toute la page.
  2. Une barre rouge apparait : « N ventes selectionnees · Total X.XXX TND ».
  3. Cliquez « ❌ Annuler ces ventes » ➜ fenetre de confirmation.
  4. Raison obligatoire (tracee dans le journal d'audit) + limite 50 ventes par operation.
  5. Confirmez : chaque vente est annulee en transaction isolee (une erreur sur une vente n'affecte pas les autres), le stock est restitue (mouvement RETURN) et les EPC RFID repassent en stock.
Action irreversible L'annulation en lot restitue le stock et marque les ventes annulees definitivement. Reservez-la aux corrections legitimes (doublons, ventes de test, erreur de masse). Tout est trace dans l'audit.
POS

SalePoint — La caisse (Point de Vente)

NOUVEAU

StockManager & SalePoint : deux applications, un seul systeme

StockManager (cette application, le « bureau ») gere le catalogue, les stocks, les achats, la facturation et le pilotage. SalePoint (la « caisse », sur pos.tunirfid.app) sert a vendre au comptoir. Les deux partagent la meme base de donnees par magasin : un article cree dans StockManager est immediatement vendable en caisse, un solde/promotion s'applique automatiquement au ticket, et chaque vente caisse cree un mouvement de stock visible cote bureau (et dans l'onglet Ventes M17).

Article (StockManager)
Scan en caisse (SalePoint)
Paiement + ticket
Stock decremente + KPI Ventes (StockManager)
🔑
Standard vs Premium En offre Standard, la caisse fonctionne au code-barres (scan EAN13/CODE128, agregation par quantite). En offre Premium, le RFID s'ajoute : scan d'EPC unique, tracabilite a la piece, reservation anti-double-vente entre caisses. Les ecrans RFID sont masques automatiquement chez un tenant Standard.
P1

Connexion caissier & ouverture de ticket

Se connecter a la caisse

Sur pos.tunirfid.app : choisir l'enseigne (tenant), selectionner le caissier dans la liste, puis saisir le PIN au pave numerique ➜ VALIDER. La session reste ouverte (le caissier ne voit que ses propres ventes dans l'historique).

Demarrer un ticket

Bouton Nouveau (raccourci F12) ➜ panier vide pret a scanner. Le ticket precedent est automatiquement clos.

P2

Scanner & composer le panier

Ajouter des articles

Trois facons d'ajouter une ligne au panier :

  • Code-barres (douchette) — l'article s'ajoute, la quantite s'incremente si deja present
  • EPC RFID (lecteur, offre Premium) — identifie la piece exacte (24 caracteres hex)
  • PLU — saisie d'un code court (1 a 6 chiffres) au clavier
🔢
Plusieurs exemplaires identiques (Premium) Si un SKU a plusieurs pieces physiques etiquetees RFID, une fenetre « Choisir la copie #N » s'affiche pour selectionner l'unite vendue.

Quantites, remises, client

  • Quantite : boutons + / − sur chaque ligne ; bouton × pour retirer
  • Remise ligne ou remise globale (% sur le total)
  • Client fidelite : rechercher le client ➜ ses points et avoirs s'affichent
  • Code promo ou bon de reduction : saisir la reference, validee en direct
📦
Limite au stock du magasin La quantite d'une ligne (boutons + ou scans repetes) ne peut JAMAIS depasser le stock reel de l'article dans le magasin de la caisse. Au-dela, un message « Stock insuffisant : N en stock... » bloque l'ajout. Pour un article RFID, 1 etiquette = 1 unite : scannez une autre etiquette pour augmenter. Au paiement, si le stock a ete vendu entre-temps (autre caisse), l'encaissement est refuse et la vente annulee — ajustez la quantite, aucune survente possible.
🗀
Soldes automatiques Si une campagne de Soldes/Promotions (module M2B) est active sur un article, le prix reduit s'applique automatiquement au scan — le caissier n'a rien a saisir.
P3

Encaisser & imprimer le ticket

Choisir le mode de paiement

Bouton REGLER TICKET (raccourci F3) ➜ le total du s'affiche en grand. Modes disponibles :

ModeSaisieParticularite
EspecesMontant remisLe rendu monnaie est calcule automatiquement
CarteMontant CBDoit couvrir le total
ChequeN°, banque, echeanceNumero + banque obligatoires
Mixte ENRICHIEspeces + Carte + Cheque + Cheque cadeauToute combinaison. Carte/cheque exacts, bon plafonne (surplus perdu), rendu uniquement sur les especes. Une part cheque exige n° + banque.
Credit (a terme)Client obligatoireAcompte optionnel, solde en compte client. L'encaissement de la dette (« Encaisser une dette ») accepte especes / carte / cheque / cheque cadeau ou mixte ; chaque part est ventilee dans la cloture.
💰
Paiement mixte multi-modes En mode Mixte, saisissez les montants par mode (especes, carte, cheque, cheque cadeau) : leur somme doit couvrir le total. Le cheque cadeau est plafonne au reste (surplus perdu) et le rendu monnaie ne sort que des especes. Chaque part est enregistree separement et reportee dans l'onglet Ventes (cloture de caisse incluse).

Confirmez ➜ le ticket 80 mm s'imprime (entete enseigne, articles, totaux, ventilation des modes de paiement, points fidelite gagnes).

P4

Retours en caisse

Rembourser un article vendu

  1. Ouvrir le ticket d'origine (recherche par numero)
  2. Retour par quantite : choisir les articles et la quantite a rendre ; ou retour par EPC (Premium) : scanner la piece exacte
  3. Choisir un motif (Defectueux, Taille, Couleur, Erreur, Remboursement client)
  4. Valider ➜ le stock est restitue (mouvement RETURN), la piece RFID repasse en stock, et les points de fidelite sont ajustes
P5

Fidelite & bons

Comment fonctionne la fidelite

  • A chaque vente, le client cumule des points selon le bareme (ex. 10 DT depenses = 1 point)
  • Au seuil defini (ex. 100 points), un bon de reduction est genere (ex. 10 DT), avec une date d'expiration
  • Le bon s'utilise en caisse en saisissant sa reference au moment du paiement

Le bareme se configure cote StockManager (module M12 Clients / Fidelite).

Identifier ou creer un client des le debut du ticket NOUVEAU

En haut de l'ecran de vente (sous le numero de ticket), une barre Client permet d'associer un client au ticket avant le paiement — pour voir ses points pendant qu'on scanne :

  • Identifier un client existant : tapez nom, telephone ou code dans le champ « 👤 Client » ➜ selection dans la liste ➜ ses points s'affichent et ses bons deviennent disponibles au paiement.
  • + Nouveau : ouvre le formulaire client complet (identique a celui de StockManager › Parametres) — Particulier (B2C) ou Entreprise (B2B : raison sociale, matricule fiscal, ICE), telephone, email, adresse… Le client est cree dans la meme base que l'admin et associe au ticket.
  • Le client choisi est conserve jusqu'au paiement (les points de fidelite sont calcules a l'encaissement) ; un nouveau ticket repart sans client.

Le meme champ client reste disponible dans la fenetre de reglement (pour l'ajouter au dernier moment).

P6

Historique du jour & Rapport de caisse

Consulter les ventes

Page Ventes de la caisse : liste des tickets du jour avec filtres (date, mode, caissier). Un MANAGER peut ouvrir le detail et annuler une vente isolee (le stock est reverse).

Rapport journee (cloture)

Page Rapport : indicateurs du jour — CA TTC, nombre de tickets, ticket moyen, ventilation par mode de paiement, top produits, et detail par caissier. Sert a compter la caisse en fin de journee et documenter un eventuel ecart especes.

📊
Bureau vs comptoir Le « Rapport journee » de la caisse donne le bilan du jour pour une caisse. L'onglet Ventes (M17) cote StockManager agrege tous les magasins et offre l'analyse multi-periode (heatmap, exports, audit).
P7

RFID en caisse & Standard vs Premium

Anti-double-vente (Premium)

Quand une piece RFID est scannee, son EPC passe en statut RESERVE. Si une autre caisse scanne la meme piece au meme instant, la premiere gagne (200 OK) et la seconde recoit un refus (409) — impossible de vendre deux fois la meme piece physique. Au paiement, l'EPC passe VENDU ; si le ticket est abandonne, il revient automatiquement en STOCK.

🔑
Offre Standard Sans module RFID, tous ces ecrans sont masques : la caisse fonctionne uniquement au code-barres, par agregation de quantite. Aucune action requise — l'interface s'adapte au plan du tenant.
EX

Workflow Metier Complet — 11 Etapes

Ce parcours suit le workflow reel d'un magasin de detail de bout en bout : configuration equipe & imprimante, articles, reception marchandise, facturation fournisseur, etiquetage, transfert et reception ligne par ligne, retour, inventaire et fidelite. Chaque etape s'enchaine — completez-les dans l'ordre.

📚
Scenario : Vous etes responsable du magasin TuniRFID Boutique. Vous configurez d'abord l'equipe (utilisateurs, imprimante), puis gerez tout le cycle marchandise : du fournisseur Textile Sahel jusqu'au magasin de Sfax.

Phase 0 — Configurer l'equipe et l'imprimante

★☆☆☆☆ ~15 min  |  M15 + M15P + M16
Contexte : Avant d'utiliser le systeme, l'administrateur cree les profils de permission, les utilisateurs avec leurs affectations magasins, et verifie que l'imprimante Zebra ZD621R est prete.

Etape A — Creer les profils de permission

  1. Menu Parametres ➜ onglet "Profils & Permissions"
  2. Cliquer "+ Nouveau profil" ➜ nom : Magasinier Vue Seule
  3. Dans la matrice, pour le module Articles : cocher voir uniquement (decocher creer/modifier/supprimer)
  4. Enregistrer
  5. Creer un deuxieme profil : Manager Sans Suppression
  6. Pour tous les modules : cocher voir/creer/modifier — decocher supprimer
  7. Enregistrer

Etape B — Creer les utilisateurs multi-magasin

  1. Menu Utilisateurs"+ Nouvel utilisateur"
  2. Nom : Karim Slim  |  Code : KARIM  |  PIN : 1234  |  Role : WAREHOUSE
  3. Section "Affectations magasins" : cocher Magasin Tunis (Actif) et Depot Sousse (Actif)
  4. Profil de permission : Magasinier Vue Seule
  5. Enregistrer
  6. Creer un second utilisateur :
  7. Nom : Sonia Ben  |  Code : SONIA  |  PIN : 5678  |  Role : MANAGER
  8. Affectations : Magasin Tunis (Actif), Siege Sfax (Inactif — magasin ferme ce mois)
  9. Profil : Manager Sans Suppression ➜ Enregistrer

Etape C — Verifier l'imprimante

  1. Menu Config. imprimante
  2. Verifier que le bloc "Statut ZBP" affiche Connecte
  3. Si deconnecte : telecharger et executer install_zbp.bat
  4. Cliquer "Imprimer etiquette test" ➜ une etiquette test sort de l'imprimante
  5. Verifier que les accents (e, a) sont correctement imprimes

Checkpoint

  • Profils "Magasinier Vue Seule" et "Manager Sans Suppression" crees dans Parametres
  • Karim : WAREHOUSE, 2 magasins actifs, profil restreint
  • Sonia : MANAGER, 1 magasin actif + 1 inactif, profil sans suppression
  • ZBP Connecte, test impression reussi
Verification : Connectez-vous avec le code KARIM / PIN 1234 ➜ dans Articles, les boutons "Creer" et "Modifier" doivent etre absents (profil vue seule actif).

Phase 1 — Configuration initiale du magasin

★☆☆☆☆ ~10 min  |  M1
Contexte : Avant tout, le systeme doit connaitre votre structure commerciale : qui vous fournit, comment vos produits sont organises et sur quelles tailles vous travaillez.
  1. Menu Configuration ➜ onglet Rayons / Familles
  2. Creer le rayon : PRET-A-PORTER
  3. Ajouter la famille : POLOS (sous PRET-A-PORTER)
  4. Ajouter la sous-famille : POLOS HOMME
  5. Onglet Gammes ➜ creer la gamme : ADULTE avec les tailles S, M, L, XL, XXL
  6. Onglet Fournisseurs ➜ creer : Textile Sahel, contact contact@sahel.tn
  7. Onglet Magasins ➜ verifier que votre magasin principal existe (sinon le creer)

Checkpoint

  • Rayon PRET-A-PORTER visible dans la liste
  • Famille POLOS avec sous-famille POLOS HOMME
  • Gamme ADULTE avec 5 tailles
  • Fournisseur Textile Sahel enregistre

Phase 2 — Creer les articles du catalogue

★★☆☆☆ ~15 min  |  M2 + M4
Contexte : Textile Sahel vous propose 2 articles. Vous les enregistrez dans le catalogue avec leur matrice de variantes.

Article 1 — Polo Classic

  1. Menu Articles ➜ bouton "Nouvel article"
  2. Remplir : Designation = POLO CLASSIC HOMME, Famille = POLOS HOMME, Fournisseur = Textile Sahel
  3. Prix : Achat HT = 18 DT  |  Vente TTC = 49 DT
  4. Gamme = ADULTE, Couleurs : BLANC et MARINE
  5. Cliquer "Generer les SKUs" ➜ verifier que 10 variantes sont creees (5 tailles × 2 couleurs)

Article 2 — Polo Premium

  1. Meme procedure : Designation = POLO PREMIUM HOMME
  2. Prix : Achat HT = 28 DT  |  Vente TTC = 79 DT
  3. Gamme = ADULTE, Couleurs : NOIR, ROUGE, BLEU
  4. 15 variantes (5 × 3) generees

Checkpoint

  • 2 articles dans le catalogue, 25 SKUs au total
  • Chaque SKU a un code EAN genere automatiquement
  • Prix Achat et Vente visibles dans la liste

Phase 3 — Reception de la marchandise (BL)

★★★☆☆ ~15 min  |  M3
Contexte : Le camion de Textile Sahel arrive. Vous creez le bon de livraison et validez la reception pour mettre le stock a jour.
  1. Menu Bons de livraison"Nouveau BL"
  2. Fournisseur = Textile Sahel  |  Magasin = votre magasin
  3. Ajouter POLO CLASSIC HOMME ➜ bouton "Matrice"
  4. Dans la matrice : choisir mode "Cloche" ➜ valeur = 3
    Resultat : S=1, M=2, L=3, XL=2, XXL=1 pour chaque couleur = 18 pieces
  5. Ajouter POLO PREMIUM HOMME ➜ mode "Copier valeur" = 5
    Resultat : 5 pieces x 15 variantes = 75 pieces
  6. Cliquer "Sauvegarder le BL" ➜ statut BROUILLON
  7. Cliquer "Valider le BL" ➜ confirmer
  8. Menu Stock ➜ verifier que les lignes apparaissent avec Reelle > 0

Checkpoint

  • BL valide : statut VALIDE, mouvements RECEPTION crees
  • Polo Classic : 18 unites en stock (cloche 1-2-3-2-1 × 2 couleurs)
  • Polo Premium : 75 unites (5 × 15 variantes)
  • Stock total : 93 unites, Disponible = Reelle (Allouee = 0)

Phase 4 — Creer la Facture Fournisseur depuis le BL

★★☆☆☆ ~8 min  |  M3F
Contexte : Le BL est valide (marchandise en stock). Maintenant vous rattachez la facture financiere du fournisseur pour le suivi comptable et le paiement.
  1. Menu Bons de livraison ➜ ouvrir le BL de Phase 3 (statut VALIDE)
  2. Cliquer le bouton "Creer Facture FF" (bleu, en bas de la fenetre)
  3. Confirmer la creation ➜ message : "Facture FF-2026-00001 creee"
  4. Menu Factures fournisseurs ➜ la facture apparait en BROUILLON
  5. Cliquer 🔍 (Detail) ➜ verifier les montants HT / TVA / TTC / Net
  6. Cliquer le bouton "Valider la facture" ➜ statut passe a VALIDEE
  7. Observer que le BL est maintenant en statut FACTURE

Checkpoint

  • Facture FF-2026-00001 en statut VALIDEE
  • BL associe passe de VALIDE a FACTURE
  • Totaux corrects (HT + 19% TVA = TTC)
Paiement : Cliquer 💳 ➜ saisir 500 DT, mode = Virement. Verifier que le statut reste VALIDEE (paiement partiel). Saisir le solde restant ➜ statut passe a PAYEE.

Phase 5 — Imprimer les etiquettes depuis le BL

★★★☆☆ ~15 min  |  M3 + M7 / M8
Contexte : Le BL est valide ou facture. Vous utilisez le nouveau bouton "Imprimer etiquettes" directement depuis le BL pour pre-remplir la quantite a imprimer par variante.

Etape A — Impression CB depuis le BL

  1. Menu Bons de livraison ➜ ouvrir le BL (statut VALIDE ou FACTURE)
  2. Cliquer le bouton violet "🏷 Imprimer etiquettes"
  3. Choisir le mode Code-barres
  4. Selectionner le modele : Standard 58×40mm (CODE128)
  5. Le tableau des variantes est pre-rempli avec les quantites BL
  6. Cocher toutes les lignes ➜ ajuster les quantites si besoin
  7. Cliquer "Imprimer" ➜ les jobs sont crees dans Etiquetage Code a Barres
  8. Aller dans Etiquetage Code a Barres ➜ verifier les jobs

Etape B — Designer RFID + Agent IA

  1. Menu Etiquetage RFID ➜ onglet Designer
  2. Dropdown Template ➜ "Nouveau..." ➜ nommer : Etiquette Polo
  3. Ajouter Designation (Y=8), Taille/Couleur (Y=32), Barcode (Y=52), Prix (Y=62)
  4. Cliquer "Apercu Labelary" ➜ verifier le rendu ➜ Sauvegarder
  5. Onglet Agent IA ZD621R ➜ demander : "Pourquoi ^PR2,2 est critique pour les petites etiquettes ?"

Checkpoint

  • Jobs CB crees dans l'onglet Etiquetage CB (lies au BL)
  • Design "Etiquette Polo" sauvegarde dans le Designer
  • Agent IA repond en francais sur ^PR2,2 (vitesse reduite = encodage fiable)

Phase 6 — Transfert inter-magasins et reception avec ecarts

★★★★☆ ~15 min  |  M5 + M6
Contexte : Le magasin de Sfax commande des polos. Vous creez le bon de transfert, l'expediez, puis la reception se fait ligne par ligne — avec un ecart signale.

Creation et expedition

  1. Menu Transferts"Nouveau transfert"
  2. De : votre magasin  |  Vers : Sfax
  3. Ajouter POLO PREMIUM HOMME : 3 × L-NOIR et 2 × XL-NOIR
  4. Sauvegarder ➜ cliquer "Expedier" ➜ confirmer
  5. Menu Stock : mouvement TRANSFER_OUT cree, Disponible a baisse

Reception ligne par ligne (avec ecart)

  1. Ouvrir le transfert ➜ cliquer "Recevoir"
  2. Une modale s'ouvre avec le tableau ligne par ligne
  3. Pour la ligne L-NOIR : saisir 3 (conforme)
  4. Pour la ligne XL-NOIR : saisir 1 au lieu de 2 (1 piece abimee) ➜ l'ecart s'affiche en orange
  5. Cliquer "Valider la reception"
  6. Message : "Reception avec 1 ecart(s)" ➜ le transfert passe en RECU / ECART
  7. Stock Sfax : +3 L-NOIR et +1 XL-NOIR (quantites reellement recues)

Checkpoint

  • Transfert RECU avec statut_reception = ECART
  • Stock Sfax credite avec les quantites reelles
  • Ligne XL-NOIR : statut_reception = ECART (visible dans le detail)
Question : Si vous creez un transfert de 10 unites alors qu'il n'en reste que 6, que vaut Disponible ?
Reponse : 6 - 10 = -4, affiche en rouge — c'est un avertissement, pas un blocage.

Phase 7 — Retour fournisseur, inventaire et fidelite client

★★★★★ ~20 min  |  M10 + M11 + M12
Contexte : Controle qualite : 3 polos defectueux a retourner. Fin de semaine : inventaire rapide. Un client fidelise achete pour la premiere fois.

Retour fournisseur

  1. Menu Retours"Nouveau retour"
  2. Selectionner le BL de Phase 3
  3. Cocher la ligne S-BLANC (Polo Classic), quantite = 3, motif = DEFAUT
  4. Sauvegarder ➜ ConfirmerValider
  5. Verifier dans Stock : S-BLANC diminue de 3

Inventaire de fin de semaine

  1. Menu Inventaire"Nouvel inventaire"
  2. Filtrer par famille POLOS ➜ saisir les quantites comptees :
VarianteTheoriqueCompteeEcart
M-BLANC220
L-BLANC32-1
M-MARINE23+1
  1. Valider l'inventaire ➜ les ajustements sont appliques

Programme fidelite

  1. Menu Clients"Nouveau client"
  2. Creer : Ahmed Ben Ali, tel = 55 987 654
  3. Onglet Points ➜ "Ajustement manuel" : +80 points, motif Achat 160 DT
  4. Verifier solde = 80 points
  5. Cliquer "Convertir en avoir" ➜ 80 pts × 0.100 = bon de 8 DT
  6. Verifier : solde = 0 pts, 1 bon actif de 8 DT

Verification finale — Tableau de bord

  • Stock Polo Classic S-BLANC : initial - 3 (retour valide)
  • Inventaire : L-BLANC -1, M-MARINE +1 (ajustements INVENTAIRE dans historique)
  • Client Ahmed : 0 points, bon de reduction 8 DT actif
  • Menu Dashboard ➜ KPIs mis a jour : valeur stock, mouvements du jour
Workflow metier en cours :
Config ➜ Utilisateurs ➜ Articles ➜ BL Reception ➜ Facture FFEtiquetage depuis BLTransfert + Reception ecarts ➜ Retour ➜ Inventaire ➜ Client & Fidelite ➜ Remplacement Etiquette (Phase 8)

Phase 8 — Remplacer une etiquette RFID perdue

★★★☆☆ ~10 min  |  M7R
Contexte : Apres l'etiquetage de Phase 5, le magasinier constate que l'etiquette RFID du POLO CLASSIC HOMME M-BLANC #3 est dechiree et illisible. La piece est toujours en rayon mais son etiquette ne scanne plus. Il faut reimprimer le meme EPC sans toucher au stock.

Identifier et marquer l'unite

  1. Barre laterale ➜ "Rempl. Etiquette"
  2. Dans le champ de recherche, taper POLO CLASSIC ➜ selectionner la variante M / BLANC
  3. Selectionner votre depot dans le dropdown ➜ cliquer "Afficher"
  4. Le tableau affiche toutes les unites : #1, #2, #3... toutes en statut STOCK
  5. Lire le numero imprime sur l'etiquette dechiree ➜ c'est l'unite #3
  6. Cliquer le bouton "⚠ Marquer perdu" sur la ligne #3
  7. Confirmer ➜ le statut passe a PERDU_ETIQUETTE

(Optionnel) Confirmer par scan RFID

  1. Cliquer "📡 Demarrer scan"
  2. Passer le lecteur sur les articles en rayon — les unites #1, #2 sont detectees, #3 reste ✗ Non detecte
  3. Cliquer "⏹ Arreter"

Reimprimer le meme EPC

  1. Sur la ligne #3 (statut PERDU_ETIQUETTE), cliquer "🔄 Reimprimer"
  2. La modale s'ouvre avec l'EPC original en lecture seule (E20000…0012)
  3. Selectionner l'imprimante ZDesigner ZD621R, Darkness = 20
  4. Cliquer "🖨 Reimprimer meme EPC"
  5. L'imprimante sort l'etiquette avec le meme EPC et le label M / BLANC #3

Checkpoint

  • Unite #3 revient a statut STOCK dans le tableau
  • EPC E20000…0012 reimprime — le scanner de caisse reconnait la piece normalement
  • Aucun mouvement de stock cree (verifier dans Stock & Mouvements)
  • Tableau de bord : KPI "Tags RFID" inchange
Workflow metier complet accompli :
Config ➜ Articles ➜ BL Reception ➜ Facture FFEtiquetage depuis BLRemplacement etiquetteTransfert + Reception ecarts ➜ Retour ➜ Inventaire ➜ Client & Fidelite
PV

Parcours Caisse & Pilotage — 4 scenarios

Ce parcours est la suite directe de l'atelier admin ci-dessus. Apres avoir configure la boutique et recu/etiquete la marchandise, vous passez cote vente : encaisser au comptoir (SalePoint), gerer un retour, cloturer la journee, puis piloter la semaine depuis l'onglet Ventes. Meme boutique fil rouge : TuniRFID Boutique.

📚
Equipe du fil rouge : CAISSIER Mehdi (PIN 2468) tient la caisse · MANAGER Sonia (PIN 5678) supervise · cliente reguliere Ahmed Ben Ali (tel 55 987 654). Produits : Polo Classic Homme (49 DT TTC) et Polo Premium Homme (79 DT TTC), deja en stock depuis l'atelier admin.

Scenario C — Premiere vente au comptoir

★★☆☆☆ ~10 min  |  SalePoint P1 ➝ P3
Contexte : Mehdi ouvre la caisse. Un client achete 2 Polo Premium (taille L, Noir) et paie en especes avec un billet de 200 DT. C'est la cliente fidele Ahmed Ben Ali.

Etape A — Connexion & ticket

  1. Ouvrir pos.tunirfid.app ➜ selectionner l'enseigne TuniRFID Boutique
  2. Choisir le caissier Mehdi ➜ saisir le PIN 2468VALIDER
  3. Cliquer Nouveau (ou F12) ➜ panier vide

Etape B — Composer le panier

  1. Scanner (douchette code-barres, ou lecteur RFID en Premium) un Polo Premium L-NOIR ➜ la ligne s'ajoute
  2. Porter la quantite a 2 (bouton +), ou scanner une 2e piece
  3. Rechercher le client Ahmed Ben Ali ➜ ses points fidelite s'affichent
  4. Verifier le total : 2 × 79 = 158.000 DT TTC

Etape C — Encaisser

  1. Cliquer REGLER TICKET (F3)
  2. Mode Especes ➜ saisir 200 ➜ le rendu monnaie 42.000 DT s'affiche
  3. Confirmer ➜ le ticket 80 mm s'imprime

Checkpoint

  • Ticket imprime avec 2 lignes Polo Premium + rendu 42.000 DT
  • Stock Polo Premium L-NOIR decremente de 2 (verifiable dans StockManager ➜ Stock)
  • Ahmed Ben Ali a gagne des points (158 DT ➜ +15 points au bareme 10 DT = 1 pt)
  • La vente apparait dans l'onglet Ventes de StockManager (KPI « Ventes » +1)
Verification : Cote StockManager, ouvrez l'onglet Ventes ➜ puce « Aujourd'hui » ➜ votre ticket doit apparaitre, mode CASH, statut ✅ Valide.

Scenario D — Retour client & litige

★★★☆☆ ~12 min  |  SalePoint P4 + StockManager M5
Contexte : Le lendemain, Ahmed revient : l'un des deux polos a un defaut de couture. Sonia (Manager) traite le retour d'1 unite et verifie l'impact stock.
  1. SalePoint ➜ page Retours ➜ rechercher le ticket d'origine (par numero)
  2. Retour par quantite : selectionner Polo Premium L-NOIR, quantite 1
  3. Motif : Defectueux
  4. Valider ➜ remboursement 79.000 DT, la piece repasse en stock
  5. Verifier l'ajustement fidelite d'Ahmed (points proportionnels retires)
  6. StockManager ➜ Stock & Mouvements ➜ un mouvement RETURN (+1) est trace

Checkpoint

  • Stock Polo Premium L-NOIR : +1 (retour enregistre)
  • Mouvement RETURN visible dans l'historique avec le numero de ticket
  • Litige documente par le motif « Defectueux »
Verification : Dans l'onglet Ventes, ouvrez la fiche detail du ticket d'Ahmed ➜ un encadre jaune « historique des retours » liste ce retour (date + montant + motif).

Scenario E — Cloture de journee & rapport caisse

★★☆☆☆ ~8 min  |  SalePoint P6 + StockManager M13/M17
Contexte : Fin de journee. Mehdi edite le rapport de caisse, compte les especes physiques, et Sonia rapproche avec le bureau.
  1. SalePoint ➜ page Rapport ➜ lire le CA TTC du jour, le nombre de tickets, le ticket moyen
  2. Regarder la ventilation par mode de paiement (Especes / Carte / ...)
  3. Compter physiquement les especes du tiroir et comparer au total « Especes » affiche
  4. Documenter un eventuel ecart (ex. −2 DT)
  5. StockManager ➜ Tableau de bord ➜ verifier que « CA Aujourd'hui » correspond
  6. StockManager ➜ onglet Ventes ➜ puce « Aujourd'hui » ➜ rapprocher le nombre de tickets et le CA

Checkpoint

  • Rapport caisse coherent : CA TTC = somme des tickets valides
  • Ecart especes documente (le cas echeant)
  • Tableau de bord StockManager et onglet Ventes affichent les memes totaux du jour

Scenario F — Pilotage hebdomadaire (onglet Ventes)

★★★☆☆ ~15 min  |  StockManager M17 + M14
Contexte : Dimanche soir, Sonia analyse la semaine pour decider des reassorts et des horaires. Tout se passe dans l'onglet Ventes (M17).
  1. StockManager ➜ onglet Ventes ➜ puce « 7 derniers jours »
  2. Lire les KPI : Ventes, CA TND, Panier moyen, Annulees %
  3. Filtrer par mode Carte puis Especes pour comparer la repartition
  4. Trier la colonne Total TTC (decroissant) ➜ identifier les plus gros tickets
  5. Cliquer « Afficher heatmap horaire » ➜ metrique CA TND ➜ reperer les pics (ex. jeudi 18–19h)
  6. Cliquer le nom Ahmed Ben Ali dans une ligne ➜ voir tout son historique (drill-down)
  7. Retirer le filtre client (× sur la puce), puis Exporter en Excel la semaine complete
  8. Ouvrir le bouton Audit ➜ verifier que votre export vient d'etre trace (utilisateur, date, filtres)
  9. Decision : reassort prioritaire du Polo Premium L-NOIR ➜ creer un Transfert depuis DEPOT-02 (module M6)

Checkpoint

  • Heatmap lue : creneau horaire de pic identifie
  • Fichier Excel telecharge (mise en forme + onglet « Filtres appliques »)
  • Ligne d'audit « export_xlsx » visible avec vos filtres
  • Decision de reassort prise sur la base des donnees
Bonus ADMIN : Reperez 2 tickets de test crees par erreur ➜ cochez-les ➜ « Annuler ces ventes » ➜ raison « tickets de test » ➜ confirmez. Verifiez ensuite dans Audit que l'action bulk_void est tracee avec la raison.
🎉
Workflow metier complet de bout en bout :
Config (admin) ➜ Reception + Etiquetage ➜ Vente comptoir (caisse)RetourCloture journeePilotage hebdo (Ventes + heatmap + export + audit) ➜ Reassort transfert. Vous maitrisez les deux applications.
AS

Aide-memoire — Astuces

🆔
Auto-code

Bouton "Auto" genere un code sequentiel

💲
Calcul prix

Saisissez n'importe quel champ et les autres se recalculent

Creer en ligne

Les "+" dans les dropdowns creent sans quitter le formulaire

📋
Copier colonne

Remplissez la 1ere colonne puis dupliquez

🔴
Cloche 1-2-3-2-1

Pattern adapte au nombre de tailles

📄
BL ➜ Facture FF

Bouton "Creer Facture FF" sur un BL valide

🏷
BL ➜ Etiquettes

Bouton "Imprimer etiquettes" pre-remplit les quantites

🔙
BL ➜ Retour

Creez un retour depuis un BL valide

Reception ecarts

Saisie ligne par ligne ➜ ecart signale en orange

📍
Magasin actif

Le selecteur en bas de la sidebar filtre tout

🔄
Rempl. Etiquette

Marquer perdu ➜ Reimprimer meme EPC — stock inchange

🏿
Numero unite (#N)

Imprime sur chaque etiquette RFID — identifie la piece sans scanner

🏭
Multi-magasin

Un utilisateur peut etre affecte a N magasins — toggle Actif/Inactif par magasin

🔒
Profil de permission

Restreint le role sans le changer — logique AND : profil ne peut qu'enlever des droits

📷
ZBP — connexion USB

Preferer la connexion "usb" (raw ZPL) au lieu de "driver" (spooler Windows pouvant bloquer)

🗑
Purger file impression

Bouton "Purger file" dans la modale d'impression envoie ~JA (annule tous les jobs)

📱
Application mobile

L'app est responsive — icone hamburger (☰) ouvre la sidebar sur mobile

🏷
Atelier catalogue articles

Soldes ➜ "Parcourir & selectionner SKUs" — ouvrable meme sans avoir sauvegarde la campagne (auto-save brouillon)

💾
Appliquer % en bloc

Dans l'atelier, cocher N SKUs ➜ modale "Appliquer %" applique le meme taux a tous d'un coup

📊
Tri Vendus / Stock

Tableau atelier ➜ cliquer la colonne Vendus pour identifier les articles a brader en priorite

📄
BL Vente ➜ Facture

Bouton "Creer Facture client" sur un BL Vente VALIDE genere une facture Facturex prete a editer

🔎
Veille IA

1 run actif par tenant (lock applicatif), watchdog 30 min libere les runs zombies

🔌
Print Agent

TuniRFID_PrintAgent.exe : agent Windows tray, sortie WebSocket vers wss://tunirfid.app/ws/print-relay (contourne PNA Chrome)

🔐
Postes RFID HMAC

Cle permanente par poste boutique — pas de JWT (machines 24/7 sans login user)

🗀
Override SKU

Atelier ➜ edition demarque inline d'1 SKU — ce taux ecrase l'override par site et le taux de la demarque

📰
OCR facture fournisseur

Page BL ➜ "Importer depuis facture" — Claude vision extrait lignes & prix, prevue editable avant insertion

🛒
Caisse : raccourcis

F3 = Regler le ticket · F12 = Nouveau ticket. Le rendu monnaie (especes) est calcule automatiquement.

💰
Soldes en caisse

Une campagne active s'applique automatiquement au scan — le caissier ne saisit rien.

📊
Ventes : lien filtre

Les filtres de l'onglet Ventes sont dans l'URL — copiez le lien pour partager exactement la meme vue.

👤
Drill-down client

Onglet Ventes ➜ clic sur un nom client = toutes ses ventes filtrees (puce × pour retirer).

📋
Export Excel trace

Chaque export CSV/XLSX est enregistre dans le journal d'audit (qui, quand, quels filtres).

Annulation en lot (ADMIN)

Cocher N ventes ➜ raison obligatoire ➜ stock restitue automatiquement. Max 50 / operation.

🔑
Standard vs Premium

Standard = code-barres seul. Premium = + RFID (EPC unique, anti-double-vente entre caisses). L'UI s'adapte au plan.

Guide mis a jour le 9 juin 2026 — v3.19 : inventaire par lecteur RFID. Sur une session d'inventaire, importez le .xlsx exporte par le lecteur mobile (Chainway) : les EPC sont resolus en articles, le comptage se remplit automatiquement et les ecarts sont calcules. Voir module Inventaire physique.
9 juin 2026 — v3.18 : la page Pilotage s'installe sur le téléphone (PWA) — dans le navigateur : menu → « Ajouter à l'écran d'accueil » → une icône TuniRFID ouvre le cockpit en plein écran, comme une appli.
9 juin 2026 — v3.17 : nouvelle page « Pilotage » (cockpit mobile : CA, benefice, marge, achats, articles, tickets, panier + courbe + top 5, sur intervalle au choix avec comparaison ; reservee ADMIN / MANAGER).
8 juin 2026 — v3.16 : alerte peremption sur le tableau de bord (banniere lots perimes / <= 30j).
8 juin 2026 — v3.15 : section dédiée « Gestion par lot & péremption » (module M5b + sommaire) + indexation assistant IA.
8 juin 2026 — v3.14 : Gestion par lot (3/3) — caisse FEFO : la vente consomme le lot qui perime en premier ; lot(s) trace(s) sur le mouvement. Cycle complet livre.
8 juin 2026 — v3.13 : onglet Lots & Peremption (liste + filtre lot/magasin/« perime avant » + pastilles + resume d'alerte). v3.12 : case « suivi par lot » + saisie lot/peremption a la reception.
8 juin 2026 — v3.12 : Gestion par lot (1/3) — case « Suivi par lot » sur l'article + saisie lot/peremption a la reception (recevoir T20001 puis T20002 sans creer de variantes en double).
8 juin 2026 — v3.11 : Articles — filtres par attributs en pastilles (retrait individuel) + « Tout effacer » visible des qu'un filtre d'attribut est actif.
7 juin 2026 — v3.10 : Articles — correctif filtres par attributs personnalises : la valeur saisie est desormais conservee dans le champ apres l'affichage des resultats (avant, le champ se vidait a chaque rafraichissement).
7 juin 2026 — v3.9 : SalePoint (caisse) a desormais lui aussi le bouton « ? » : visite guidee, checklist (1re vente, cloture Z) et l'assistant multilingue (FR/arabe/darija).
6 juin 2026 — v3.8 : Assistant d'aide multilingue — depuis le bouton « ? » → Assistant, pose ta question en francais, arabe ou darija ; il repond a partir du guide et propose les sections utiles.
6 juin 2026 — v3.7 : Boutique demo publique — un lien /demo (partageable WhatsApp) ouvre une boutique deja remplie, sans inscription et en lecture seule. Pour montrer la plateforme a un prospect.
6 juin 2026 — v3.6 : Prise en main guidee — visite guidee au premier login, bouton « ? » qui rouvre la visite, la checklist « Pour commencer » (6 etapes, progression sauvegardee) et le guide, avec bascule FR / arabe.
6 juin 2026 — v3.5 : Articles — la recherche de l'onglet Articles trouve aussi les attributs personnalises (ex. « Coton » remonte les articles dont la Matiere = Coton). Les filtres d'attributs « texte libre » fonctionnent en « contient » ; « liste de valeurs » / « nombre » restent en correspondance exacte.
5 juin 2026 — v3.4 : Catalogue — nouveau prix de vente B2B (gros) par article (onglet Vente du formulaire article : P.U.H.T B2B, P.U.T.T.C B2B calcule auto depuis la TVA, bouton Recalculer prix B2B (marge cible)). Ce tarif est applique automatiquement a la creation des lignes de BL Vente ; laisse a 0, le BL Vente retombe sur le prix de detail.
5 juin 2026 — v3.3 : Caisse — barre Client en haut de l'ecran de vente : identifier un client existant (points/bons visibles des le scan) ou en creer un au formulaire complet (B2C/B2B, meme base que StockManager) avant le paiement.
5 juin 2026 — v3.2 : Encaissement d'une dette (credit) — mode Mixte = especes + carte + cheque + cheque cadeau ; ventilation cloture ; progression d'encaissement dans l'onglet Ventes.
5 juin 2026 — v3.1 : Onglet Ventes — ventilation d'une vente Mixte en ligne + bandeau « Encaisse par mode » (parts mixtes incluses).
5 juin 2026 — v3.0 : Caisse — le mode Mixte accepte especes + carte + cheque + cheque cadeau (rendu sur especes, bon plafonne, part cheque tracee) ; cloture compte la part cheque du mixte.
5 juin 2026 — v2.9 : la regle « prix d'achat au millime » s'etend aux lignes de Bons de Livraison et Bons de Commande fournisseur.
5 juin 2026 — v2.8 : Catalogue — les prix d'achat ne sont plus arrondis au 10 millimes : un prix fournisseur (ex. 23.994) est conserve exactement au millime (3 decimales). Seuls les prix de vente suivent l'arrondi commercial.
4 juin 2026 — v2.7 : Onglet Ventes — la colonne Statut devient le cycle d'encaissement (Valide / En attente / Annulee / Remboursee) et suit la Validation admin (cible coherence) ; nouvelle carte KPI « En attente d'encaissement (TND) », filtre dedie, et colonnes « Valide par / le » dans les exports.
4 juin 2026 — v2.6 : Onglet Ventes — nouvelle colonne « Validation admin » : les especes sont validees d'office a la caisse, tout autre mode (carte, credit, cheque, cheque cadeau, mixte) reste « en attente » jusqu'a ce qu'un Admin coche l'encaissement reel.
4 juin 2026 — v2.5 : Caisse — anti-survente renforce jusqu'au paiement (l'encaissement est refuse si le stock a ete vendu entre-temps ; aucune survente concurrente possible).
4 juin 2026 — v2.4 : Caisse — la quantite d'une ligne ne peut plus depasser le stock du magasin (message « Stock insuffisant » au stepper et au scan ; RFID : 1 etiquette = 1 unite)
4 juin 2026 — v2.3 : Inventaire partiel (comptage par article / famille / rayon / marque / fournisseur ; reconciliation des ecarts en delta)
4 juin 2026 — v2.2 : Transferts (workflow d'approbation, reception partielle reprenable) · Onglet Ventes (vues de filtres enregistrees)
15 mai 2026 — v2.0 : Soldes & Promotions, Ventes B2B Facturex, Veille & Sourcing IA, Postes RFID HMAC, TuniRFID Print Agent, multi-magasin, profils granulaires
TuniRFID · Retail Suite