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.
Les 23 pages de l'application
| Section | Page | Description |
|---|---|---|
| Principal | Tableau de bord | KPIs, graphiques, alertes, activite recente |
| Articles | Catalogue produit avec variantes (SKUs), upload photos | |
| Etiquetage RFID | Impression d'etiquettes RFID (ZD621R) | |
| Etiquetage Code a Barres | Impression d'etiquettes code-barres | |
| Soldes & Promotions NOUVEAU | Campagnes de remise, regles panier, codes promo, atelier catalogue articles | |
| Rempl. Etiquette RFID | Remplacement d'etiquettes perdues/endommagees — meme EPC, stock inchange | |
| Stock & Mouvements | Niveaux de stock + historique mouvements | |
| Bons de livraison | Reception marchandise fournisseur (+ OCR facture supplier) | |
| Factures fournisseurs | Facture FF tirees depuis BL — valider, payer, echeancier | |
| Comptes fournisseurs | Encours fournisseurs et historique paiements | |
| BL Vente NOUVEAU | Bon de livraison vers client B2B (Facturex) | |
| Factures clients NOUVEAU | Facture B2B (Facturex) — valider, payer, echeancier, PDF | |
| Comptes clients B2B NOUVEAU | Encours clients B2B et historique paiements | |
| Inventaire | Comptage physique et ajustement | |
| Retours fournisseurs | Renvoi marchandise au fournisseur | |
| Transferts | Transfert entre depots/magasins (paire SORTIE/ENTREE) | |
| Intelligence IA | Veille & Sourcing IA | Decouverte tendances + sourcing fournisseurs (gated plans Reseau/Empire) |
| Config | Utilisateurs | Comptes, roles, PINs, affectations multi-magasin, profils de permission |
| Postes RFID NOUVEAU | Postes boutique HMAC : api-keys, heartbeat, statut machines | |
| Parametres | Rayons, familles, gammes, magasins, fidelite, Profils & Permissions | |
| Aide | Config. imprimante | Zebra ZD621R via TuniRFID Print Agent (WS relay) ou Zebra Browser Print |
| Guide d'utilisation | Ce document | |
| Caisse | Ouvrir la caisse ↗ | Lien vers SalePoint (POS) — port 8011 / pos.tunirfid.app |
Flux de donnees — Achat → Reception → Vente B2C
Flux de donnees — Ventes B2B (Facturex)
Demarrage & Premier lancement
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
Configuration initiale (Parametres)
FondationBarre 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.
| Champ | Description | Exemple |
|---|---|---|
| Code | Identifiant unique court | MAG-TUNIS |
| Nom | Nom complet | Magasin Tunis Centre |
| Ville | Localisation | Tunis |
| Adresse | Adresse physique | 12 Rue de la Liberte |
| Telephone | Contact | 71 234 567 |
| Type | STORE / WAREHOUSE / HQ | STORE |
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
| Onglet | Donnees a creer |
|---|---|
| Unites | PCE Piece, PQT Paquet, DOZ Douzaine, MTR Metre |
| Marques | ZARA, LACOSTE, NIKE, LOCAL Fabrication locale |
| Fournisseurs | FOURN-01 Societe Textile du Nord, FOURN-02 Istanbul Fashion, FOURN-03 Guangzhou Textile |
| Saisons | PE-2026 Printemps-Ete 2026, AH-2026 Automne-Hiver 2026 |
| Genres | HOMME, FEMME, ENFANT, MIXTE |
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
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.
| N | Barcode | Designation | Taille | Couleur |
|---|---|---|---|---|
| 1 | 2140000000015 | Chemise Oxford Slim - 36 BLANC | 36 | BLANC |
| 2 | 2140000000022 | Chemise Oxford Slim - 36 NOIR | 36 | NOIR |
| 3 | 2140000000039 | Chemise Oxford Slim - 36 BLEU | 36 | BLEU CIEL |
| ... | ... | ... | ... | ... |
| 21 | 2140000000213 | Chemise Oxford Slim - 48 BLEU | 48 | BLEU CIEL |
Soldes & Promotions
NOUVEAUBarre 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
| Mecanisme | Quand | Cible | Exemple |
|---|---|---|---|
| Campagne | Toujours actif (entre dates) | Articles (SKU / famille / rayon / theme) | "Soldes hiver 2026" -30% sur toute la collection HIV |
| Regle panier | Quand panier remplit conditions | Panier total ou articles cibles | "Achetes 3, payez 2" / "-10% si panier ≥ 200 DT" |
| Code promo | Saisi en caisse par le client | Le panier global | Code 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
- Sidebar ➜ 🏷 Soldes & Promotions ➜ + Nouvelle campagne
- Nom =
SOLDES HIVER 2026, Type = SOLDES - Dates : du
2026-01-01au2026-01-31 - 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
- Section 4. Cibles ➜ bouton Parcourir & selectionner SKUs ➜ tableau atelier s'ouvre
- Filtrer par saison
HIV-2026➜ cocher la ligne d'en-tete ➜ tous les SKUs HIV sont selectionnes - (Optionnel) Override par SKU : pour le SKU doudoune cuir, fixer D3 a -50% inline
- Section 5. Sites ➜ cocher les magasins concernes
- Enregistrer ➜ la campagne devient active
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.
| Action | Effet |
|---|---|
| Cocher SKUs | Devient cible de la campagne au save |
| Edition demarque inline | Modifie 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 demarque | Cree D4, D5... directement depuis le tableau |
| Tri Ventes faibles ↓ / fortes ↑ | Identifier les articles a brader en priorite |
| Colonnes Vendus et Stock | Decision basee sur la donnee reelle |
| Preview live | Voir le prix final avec la demarque appliquee |
Achetez 3, payez 2 — pack famille T-shirts
- Sidebar ➜ Soldes & Promotions ➜ onglet Regles panier
- + Nouvelle regle ➜ type = QUANTITE
- Condition :
3 articlesde la familleT-SHIRTS - Action : Article le moins cher offert (100% remise sur le SKU le moins cher)
- Cumul : non-cumulable avec les codes promo
- Enregistrer
Code promo distribuable
- Onglet Codes promo ➜ + Nouveau code
- Code =
BIENVENUE15(saisi par le client en caisse) - Reduction : -15% sur le total panier HT
- Validite : du
2026-05-01au2026-06-30, usage max500 - Premiere visite client uniquement (case a cocher)
- Enregistrer ➜ le code apparait dans la liste avec compteur d'usage
price_audit (prix avant, prix apres, raison, utilisateur, date). Necessaire en cas de controle Direction Generale Concurrence.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).
Creer un BL
- Numero : Auto-genere (
BL-2026-00001) — lecture seule - Fournisseur :
Societe Textile du Nord(obligatoire) - Depot :
Magasin Tunis Centre(obligatoire) - Date BL : aujourd'hui
- Ref fournisseur :
FAC-STN-2026-0142 - Remise globale % :
0 - Notes :
Livraison PE 2026 lot 1
Ajouter une ligne (mode standard)
- Taper
Oxforddans "Ajouter article" ➜ autocomplete - Selectionner ➜ dropdown "Variante" apparait
- Choisir
36 - BLANC - Remplir : Qte=
10, Prix HT=25.000, Rem%=0, TVA%=19, FODEC%=1 - Montants calcules en live ➜ Cliquer "Ajouter"
Repeter pour chaque variante... Mais c'est fastidieux pour 21 variantes ! ➜ C'est la qu'intervient la Matrice.
Factures Fournisseur
NOUVEAURole 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 : BROUILLON → VALIDEE → PAYEE.
Creer une Facture depuis un BL
- Ouvrir un BL valide ➜ bouton "Creer Facture FF"
- La facture est creee en BROUILLON avec les totaux du BL
- Aller dans Factures fournisseurs ➜ la facture apparait dans la liste
- Cliquer 🔍 (Detail) ➜ verifier les montants HT/TVA/TTC
Valider et Payer
| Action | Bouton | Effet |
|---|---|---|
| Valider | ✓ (vert) | Statut → VALIDEE ; BLs passes en FACTURE |
| Payer | 💳 (bleu) | Saisir montant + mode ➜ PAYEE si total atteint |
| Supprimer | 🗑 | Seulement en BROUILLON |
Ventes B2B — Facturex (BL Vente / Factures clients / Comptes B2B)
NOUVEAUConcept
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).
-stock SORTIE
Page Comptes clients B2B
- Sidebar ➜ Comptes clients B2B ➜ + Nouveau client B2B
- Raison sociale, matricule fiscal, RC, adresse, contact, telephone, email
- Conditions commerciales : remise par defaut (%), delai de paiement (jours), plafond encours (DT)
- Enregistrer ➜ le client apparait avec encours = 0 DT
Page BL Vente
- Sidebar ➜ BL Vente ➜ + Nouveau BL Vente
- Client B2B (obligatoire), magasin source, date de livraison
- Ajouter les articles ➜ matrice de variantes ou ligne par ligne
- 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.
- Sauvegarder ➜ statut BROUILLON
- Valider le BL ➜ statut VALIDE, stock decremente (mouvement
SORTIE_B2B)
Bouton Creer Facture client
- Sur le BL Vente VALIDE, cliquer Creer Facture client
- Confirmer ➜ la facture est creee en BROUILLON avec les lignes du BL et les bons prix
- Le BL passe a FACTURE
- Aller dans Factures clients ➜ ouvrir la facture
- Selectionner ou creer un echeancier (ex: 30 jours fin de mois ➜ date echeance auto-calculee)
- Valider la facture ➜ statut VALIDEE
- L'encours du client B2B augmente du montant TTC de la facture
Paiement total ou partiel
- Sur une facture VALIDEE, cliquer le bouton 💳 Paiement
- Saisir : montant, mode (Especes / Cheque / Virement / Traite), reference, date
- Si paiement partiel : la facture reste VALIDEE avec un solde du visible
- Si paiement complet : la facture passe a PAYEE
- 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.
La Matrice Taille x Couleur
NOUVEAUConcept
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
- Ouvrir un BL (nouveau ou existant en BROUILLON)
- Section Articles ➜ cliquer "Saisie matricielle"
- 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 :
| Taille | BLANC | NOIR | BLEU CIEL | Total |
|---|---|---|---|---|
| 36 | 3 | |||
| 38 | 6 | |||
| 40 | 9 | |||
| 42 | 12 | |||
| 44 | 9 | |||
| 46 | 6 | |||
| 48 | 3 | |||
| Total | 16 | 16 | 16 | GT: 48 |
Les 4 methodes de saisie
| Methode | Bouton | Description | Cas 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 tailles | Pattern |
|---|---|
| 3 tailles | 1 - 2 - 1 |
| 4 tailles | 1 - 2 - 2 - 1 |
| 5 tailles | 1 - 2 - 3 - 2 - 1 |
| 7 tailles | 1 - 2 - 3 - 4 - 3 - 2 - 1 |
Gestion du Stock
MIS A JOURBarre laterale ➜ Stock & Mouvements
Onglet 1 — Niveaux de stock (10 colonnes)
| Code | Designation | Famille | Couleur | Taille | Prix TTC | Magasin | Reelle | Allouee | Disponible |
|---|---|---|---|---|---|---|---|---|---|
| CH-001 | Chemise Oxford | Chemises | BLANC | 42 | 53.55 | MAG-TUNIS | 4 | 2 | 2 |
| CH-001 | Chemise Oxford | Chemises | NOIR | 42 | 53.55 | MAG-TUNIS | 4 | 0 | 4 |
| CH-001 | Chemise Oxford | Chemises | BLANC | 48 | 53.55 | MAG-TUNIS | 1 | 3 | -2 |
Reelle neutre Allouee > 0 orange Dispo > 0 vert Dispo ≤ 0 rouge
Onglet 2 — Historique des mouvements
| Type | Badge | Description | Impact |
|---|---|---|---|
RECEPTION | RECEPTION | BL valide | +stock |
SALE | SALE | Vente en caisse | -stock |
RETURN | RETURN | Retour client | +stock |
TRANSFER_OUT | TRANSFER_OUT | Expedition transfert | -stock source |
TRANSFER_IN | TRANSFER_IN | Reception transfert | +stock dest |
LOSS | LOSS | Perte/casse | -stock |
INVENTORY_ADJUST | ADJUST | Ajustement inventaire | ±stock |
SUPPRESSION | SUPPRESSION | Retour fournisseur valide | -stock |
Gestion par lot & péremption
NOUVEAUPour 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.
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.
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.
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.
Transferts inter-depots
validation
TRANSFER_OUT
partiel
TRANSFER_IN
Impact sur le stock
| Statut | Stock source | Stock destination |
|---|---|---|
| BROUILLON / VALIDE | Reserve (alloue) | — |
| EXPEDIE | Diminue de la qte totale (TRANSFER_OUT) | En transit |
| EN RECEPTION | Diminue | Augmente des seules unites deja recues |
| RECU | Diminue | Augmente (TRANSFER_IN) — solde transfere |
Creer puis faire valider
- Choisir depot source et depot destination
- Ajouter les lignes : Manuel, Scan, Matrice, Import Excel, Depuis BL/Facture, ou Cloner un transfert existant
- "Soumettre" ➜ le transfert passe EN ATTENTE
- 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).
↺ 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.
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.
Impression unitaire
- Selectionner l'imprimante dans le dropdown
- Chercher l'article ➜ choisir la variante
- Regler Copies, Darkness (20), Offset vertical (0), Depot
- "Apercu" ➜ image PNG via Labelary
- "Imprimer RFID"
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
- Page Articles ➜ selectionner les variantes (checkboxes)
- "Imprimer RFID batch"
- "Imprimer tout le batch"
visual_only=True (pas de ^RFW) pour eviter les ghost marks.Parametres ZPL confirmes (ZD621R, 44x11mm)
| Parametre | Valeur | Explication |
|---|---|---|
^RFW H,1,2,6 | 6 words | 96-bit EPC encoding |
^RFEN | sans espace | Pas de void sur erreur |
^PR2,2 | 2 ips | Vitesse lente = encodage fiable |
~SD20 | darkness 20 | Contraste impression |
^RSA | auto | Detection auto du chip |
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
- Page Etiquetage RFID
- Cliquer sur l'onglet "Designer" (a cote de "Impression")
- 2 templates seeds sont disponibles par defaut :
- Standard RFID (barcode) ★ — code barres + textes + EPC
- Batch simplifie (prix) — designation + prix centres
Interface : 3 colonnes
| Zone | Contenu | Actions 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
| Element | Bouton | Parametres cles | ZPL 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 :
| Placeholder | Valeur injectee | Exemple |
|---|---|---|
{{designation}} | Nom de l'article | GILET LAINE FEMME |
{{barcode}} | Code EAN / batch | 2140000000015 |
{{epc}} | EPC 96-bit hexadecimal | E2000000000000000000001 |
{{taille}} | Taille de la variante | M |
{{couleur}} | Couleur de la variante | BLANC |
{{taille_couleur}} | Taille / Couleur fusionnes | M / BLANC |
{{prix_ttc}} | Prix TTC formate | 64.900 DT |
{{reference}} | Code article | ART-001 |
"Ref: {{reference}} — {{taille_couleur}}" donnera "Ref: ART-001 — M / BLANC"Ajout d'un logo (Image)
- Cliquer "Image" dans la toolbar
- Selectionner un fichier PNG, JPG ou BMP
- 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)
- L'image apparait sur le canvas — deplacez-la a votre guise
- Dans les proprietes : bouton "Remplacer l'image" pour changer
Apercu editable — Modifier avant impression
- Onglet Impression ➜ selectionner article + variante
- Bouton "Apercu" ➜ la modale s'ouvre avec les champs editables
- Modifier librement : Designation, Reference, Taille, Couleur, Prix TTC
- Cliquer "Rafraichir apercu" ➜ Labelary re-rend l'etiquette avec vos modifications
- Cocher "Appliquer ces modifications a tout le batch" pour propager les changements
- Cliquer "Imprimer maintenant"
Workflow complet : creer et utiliser un design
| Etape | Action | Resultat |
|---|---|---|
| 1 | Onglet Designer ➜ dropdown "Nouveau..." | Canvas vierge |
| 2 | Nommer le design dans le champ texte | ex: "Etiquette Premium" |
| 3 | Ajouter elements (texte, barcode, logo...) | Elements sur le canvas |
| 4 | Selectionner un element ➜ regler proprietes | Police, contenu, position |
| 5 | Drag & drop pour repositionner (snap 5 dots) | Alignement precis |
| 6 | Bouton "Apercu Labelary" | PNG rendu en temps reel |
| 7 | Bouton "Sauvegarder" | Design stocke en SQLite |
| 8 | Onglet Impression ➜ dropdown "Modele d'etiquette" | Choisir le nouveau design |
| 9 | Imprimer / Apercu | ZPL compile depuis le JSON |
Conseils de mise en page (44×19mm, 203 DPI)
Laissez au moins 5 dots de marge en bordure (evite les coupures)
FontH 16–22 pour etre lisible. Utilisez "centre" pour les labels batch.
Hauteur minimum 40 dots. Largeur minimale pour scanners : 180 dots.
Placez en coin superieur gauche ou droit, max 60×40 dots sur cette taille.
Desactiver la grille pour un positionnement precis au dot pres.
Bouton "Voir ZPL" affiche le code brut — utile pour diagnostiquer un probleme d'impression.
build_zpl() / build_zpl_batch()) est utilise. Vos impressions existantes ne sont pas affectees.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
- Page Etiquetage RFID
- Cliquer sur l'onglet "Agent IA ZD621R" (3eme onglet, apres "Designer")
- L'agent est disponible immediatement — pas d'installation, pas de compte requis
zd621r_agent/.env.Interface du chat
| Element | Description |
|---|---|
| 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
"Quelle est la syntaxe complete de ^RFW pour un EPC 96-bit ?"
"Pourquoi mes etiquettes sortent VOID apres calibration ?"
"Comment calibrer l'imprimante RFID pas a pas ?"
"Comment envoyer du ZPL via TCP/IP en Python (port 9100) ?"
"Quels sont nos parametres post-calibration (Read/Write Power, Position) ?"
"Quelle est la difference entre ^RFEN et ^RFE N ?"
Base de connaissances integree (14 sections)
| # | Sujet | Contenu |
|---|---|---|
| 1 | Specifications techniques | ZD621R vs ZD621, DPI, vitesse, connectivite, RE40 |
| 2 | Commandes ZPL II | ^FO, ^A, ^BC, ^GB, ^GF, ^FD, ^PQ, ^XA/^XZ… |
| 3 | Commandes RFID | ^RS, ^RFW, ^RFR, ^RFE, ^RI — syntaxe complete + exemples |
| 4 | Encodage EPC SGTIN-96 | Structure 96-bit, calcul des champs, conversions hex |
| 5 | Commandes SGD | Configuration avancee via commandes Set/Get/Do |
| 6 | Notre configuration 44×19mm | 351×152 dots, ^PR2,2, ^RFW H,1,2,6 — parametres valides |
| 7 | Calibration | Procedure pas-a-pas, SmartCal, parametres RFID menu |
| 8 | Menu RFID touchscreen | Arborescence complete du menu RFID de l'imprimante |
| 9 | Qualite d'impression | Darkness, vitesse, problemes courants |
| 10 | Patterns LED | Interpretation des voyants et bips |
| 11 | Maintenance | Nettoyage tete, remplacement pieces |
| 12 | Connectivite | USB, Ethernet, Wi-Fi, Bluetooth, TCP port 9100 |
| 13 | ZD621R vs ZD621 | Differences hardware entre les deux modeles |
| 14 ★ | Donnees reelles de notre imprimante | Captures 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
retail_suite ou les autres modules StockManager, consultez ce tutorial ou le code source directement.
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.
(numero sur etiquette ou scan RFID)
PERDU_ETIQUETTE
Meme EPC — statut STOCK
Statuts d'une unite (sku_units)
| Statut | Signification | Transition |
|---|---|---|
| STOCK | Unite en stock avec etiquette valide | Etat initial apres impression |
| PERDU_ETIQUETTE | Etiquette manquante ou endommagee — unite physiquement presente | Bouton "Marquer perdu" |
| STOCK | Retour a STOCK apres reimpression reussie | Bouton "Reimprimer" confirme |
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 :
| # | EPC | Depot | Imprimee le | Statut | Scan live | Actions |
|---|---|---|---|---|---|---|
| 1 | E20000…0010 | Boutique Sfax | 31/03/2026 | STOCK | ✓ Detecte | — |
| 2 | E20000…0011 | Boutique Sfax | 31/03/2026 | PERDU_ETIQUETTE | ✗ Non detecte | 🔄 Reimprimer |
| 3 | E20000…0012 | Boutique Sfax | 31/03/2026 | STOCK | ✓ Detecte | — |
Identification automatique par scan RFID
Si un lecteur RFID est connecte au RFID Dashboard (ws://localhost:8000/ws) :
- Cliquer "📡 Demarrer scan"
- Passer le lecteur sur les articles presentes en rayon
- La colonne Scan live se met a jour en temps reel : ✓ Detecte / ✗ Non detecte
- L'unite non detectee = etiquette manquante ou illisible
- 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
- Cliquer "🔄 Reimprimer" sur l'unite perdue
- La modale s'ouvre : EPC affiche en lecture seule, imprimante et darkness selectionnables
- Verifier que c'est bien l'EPC de l'unite #N a restituer
- Cliquer "🖨 Reimprimer meme EPC"
- Le statut repasse a STOCK
Prerequis
- Les etiquettes RFID doivent avoir ete imprimees depuis Etiquetage RFID ➜ Impression (v1.3+) pour que les entrees
sku_unitssoient 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:8000et un lecteur RFID connecte.
Impression Code a Barres
- Selectionner un modele d'etiquette
- Chercher l'article ➜ choisir la variante
- Saisir le nombre de copies
- Cliquer "Imprimer"
Batch: selectionner les variantes sur la page Articles puis lancer un batch CB.
Commandes Fournisseurs (BC)
Concept
La commande fournisseur (BC) planifie un achat. Confirmee, elle peut etre convertie en BL pour la reception.
Actions cles
- Confirmer ➜ statut CONFIRME
- Creer BL ➜ BL pre-rempli avec les lignes de la commande
- Dupliquer ➜ copie BROUILLON (commandes recurrentes)
Inventaire physique
NOUVEAU : partielConcept
L'inventaire compare le stock theorique (systeme) avec le stock compte (physique). Les ecarts sont ajustes automatiquement a la validation.
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.
- Choisir le depot ➜ le perimetre (Complet/Partiel) ➜ "Demarrer l'inventaire".
- Saisir ou scanner la quantite comptee de chaque ligne. Une pastille verte marque les lignes deja comptees ; le compteur "X comptes" suit l'avancement.
- Valider ➜ un mouvement
INVENTORY_ADJUSTest cree pour chaque ecart.
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.
- Sur une session BROUILLON, cliquez "Importer lecture RFID (.xlsx)" et choisissez le fichier exporte par le lecteur (liste d'EPC).
- 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.
- Cliquez "Appliquer au comptage" : les quantites comptees se remplissent. La case "Mettre a 0 les non scannes" traite la demarque (articles attendus mais absents).
- Verifiez puis Validez normalement — l'ajustement de stock est identique a la saisie manuelle.
Retours Fournisseurs
SUPPRESSION
Motifs de retour
Creez un retour depuis la page Retours ou directement depuis un BL valide (bouton "Creer retour").
Clients & Programme Fidelite
Creer un client
Code auto-genere (CLT-XXXXXXXX), nom, prenom, telephone, email, ville.
Configuration fidelite (Parametres ➜ Fidelite)
| Parametre | Description | Exemple |
|---|---|---|
| Montant tranche | Achat pour gagner des points | 10 DT |
| Points tranche | Points gagnes par tranche | 1 point |
| Valeur point | Valeur d'un point en dinars | 0.100 DT |
| Seuil bon | Points min pour un bon | 100 points |
| Expiration | Validite du bon | 365 jours |
Tableau de Bord & Rapports
Tableau de bord — 15 KPIs en 3 rangees
| Rangee | KPIs |
|---|---|
| Operationnel | Articles actifs, Tags RFID, Etiquettes aujourd'hui, Ventes, Alertes stock |
| CA / Finance | CA Aujourd'hui, CA Semaine, CA Mois, Valeur stock, Clients actifs |
| Pipeline achat | BC 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)
Pilotage — cockpit business
NOUVEAUBarre 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.
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)
Veille & Sourcing IA (RetailIntel)
IAai_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
- Sidebar ➜ Veille & Sourcing (section Intelligence IA)
- L'app dediee
/intel.html(Signal Room) s'ouvre dans le meme onglet - Onglet Preferences ➜ cocher les secteurs autorises pour ce tenant (limites par
allowed_sectorsdefini en superadmin)
Pipeline Discovery
- En haut de l'app : Mode Decouverte (par defaut)
- Choisir le secteur (parmi ceux actives en preferences)
- Saisir un brief : zone geo, fourchette de prix, contraintes
- Cliquer Lancer ➜ le pipeline v5 demarre :
query_planner_collector ➜ page_extractor ➜ supplier_resolver_extractor ➜ qualifier_scorer ➜ report_composer ➜ finalize - L'UI affiche la progression en direct via WebSocket (etapes vert/orange, lignes ajoutees au fil de l'eau)
- A la fin, un rapport apparait : tendances reperees, fournisseurs scoreds (business TN, confiance donnee, evidence weight), priorite haute/medium/basse
intel_max_cost_per_run_usd). Si le pipeline atteint le plafond, il s'arrete proprement avec un rapport partiel.Watchlists par tenant
- Mode Marques BPS ➜ surveille les marques de la watchlist
{slug}.yaml - Mode Concurrents ➜ surveille les sites de la watchlist
{slug}_competitors.yaml - Notifications : un digest 4h regroupe les nouveautes (08/12/16/20h Tunis), envoye par email ou Telegram
- 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.
fournisseurs du StockManager.Utilisateurs, Roles & Multi-magasin
v1.4Barre laterale ➜ Utilisateurs (section Configuration). L'admin cree les comptes, leur attribue un role et les affecte a un ou plusieurs magasins.
🆕 4 Roles disponibles
| Role | Niveau | Perimetre |
|---|---|---|
| ADMIN | 4 | Acces total — gestion utilisateurs, parametres, tout |
| MANAGER | 3 | Gestion stock, BL, transferts, clients, rapports |
| WAREHOUSE | 2 | Reception, inventaire, etiquetage — pas de suppression |
| CASHIER | 1 | Consultation 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
- Cliquer "+ Nouvel utilisateur"
- Remplir : Nom, Code unique, PIN (4-6 chiffres), Role
- Section "Affectations magasins" : cocher chaque magasin souhaite
- Pour chaque magasin coche, le toggle Actif / Inactif est disponible
- Cliquer "Enregistrer"
| Affectation | Acces effectif |
|---|---|
| Actif | L'utilisateur voit et interagit avec ce magasin |
| Inactif | Affectation conservee mais acces suspendu |
| Non coche | Pas 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
- Modifier l'utilisateur ➜ dropdown "Profil de permission"
- Choisir le profil voulu (ou "Aucun profil" pour permissions completes du role)
- Enregistrer ➜ les permissions effectives sont recalculees instantanement
La gestion des profils se fait dans Parametres ➜ onglet "Profils & Permissions". Voir module M15P ci-dessous.
Profils & Permissions granulaires
v1.4Barre 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
| Module | Droits disponibles |
|---|---|
| Articles | voir / creer / modifier / supprimer |
| Stock | voir / ajuster |
| Bons de livraison | voir / creer / valider |
| Transferts | voir / creer / valider |
| Etiquetage | voir / imprimer |
| Clients | voir / creer / modifier |
| Rapports | voir |
| Utilisateurs | voir / creer / modifier |
| Parametres | voir / modifier |
Creer un profil de permission
- Onglet "Profils & Permissions" dans Parametres
- Cliquer "+ Nouveau profil"
- Saisir un nom (ex:
Magasinier Vue Seule) et une description - Dans la matrice : pour chaque module, cocher les droits a autoriser (les droits non coches seront refuses, meme si le role les permet)
- Colonne "Effectif" affiche le resultat apres AND avec la baseline du role
- Cliquer "Enregistrer"
Exemples de profils utiles
| Nom profil | Role cible | Restrictions typiques |
|---|---|---|
| Magasinier Vue Seule | WAREHOUSE | Articles : voir uniquement (pas creer/modifier) |
| Manager Sans Suppression | MANAGER | Articles, Stock : modifier OK, supprimer interdit |
| Consultant Rapports | MANAGER | Rapports : voir — tout le reste bloque |
| Caissier Etendu | CASHIER | Clients : voir + creer (pour fidelite) |
Postes RFID (machines boutique)
NOUVEAUSidebar ➜ 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
- Page Postes RFID ➜ + Nouveau poste
- Nom :
Caisse 1 Tunis, magasin associe, type (CAISSE / PORTIQUE / INVENTAIRE) - Le systeme genere une API-key HMAC + URL webhook : a copier dans le fichier de config du rfid_dashboard sur la machine
- Statut initial : JAMAIS VU — passe a EN LIGNE au premier
heartbeatrecu
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
- Bouton 🔌 Regenerer cle ➜ l'ancienne cle est invalidee, une nouvelle est emise
- La machine en boutique doit etre reconfiguree avec la nouvelle cle (sinon ses requetes 401)
- 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.
Config. imprimante Zebra ZD621R & TuniRFID Print Agent
v1.4Barre 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
- Page Config. imprimante ➜ section "Guide d'installation"
- Cliquer "Telecharger le script d'installation" ➜ un fichier
install_zbp.batest telecharg - Executer le
.baten tant qu'administrateur ➜ il telecharg et installe ZBP automatiquement - ZBP demarre en arriere-plan et ecoute sur
localhost:9100
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
- La carte "Statut Zebra Browser Print" en haut de la page affiche en temps reel
- Si Deconnecte : ZBP n'est pas lance ➜ verifier le service Windows ou relancer le .bat
- Si Connecte mais aucune imprimante : brancher le cable USB et allumer l'imprimante
- L'imprimante ZD621R doit apparaitre, de preference avec connexion
usb(raw ZPL direct, plus fiable quedriver)
Imprimer une etiquette de test
- Cliquer le bouton "Imprimer etiquette test"
- ZBP envoie un ZPL de test directement a l'imprimante USB
- L'etiquette doit imprimer proprement avec texte lisible et code-barres
- 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)
- Cliquer "Calibrer le lecteur RFID"
- L'imprimante envoie une commande SGD pour lire la puissance RFID actuelle
- Puissance recommandee : Read = 30 / Write = 30 (configurable via l'ecran tactile de l'imprimante)
- Si une etiquette sort avec la mention VOID en noir : l'encodage RFID a echoue ➜ augmenter la puissance ou verifier l'alignement media
^PR2,2 (2 ips) est obligatoire. Une vitesse elevee provoque des echecs d'encodage.Depannage rapide
| Symptome | Cause probable | Solution |
|---|---|---|
| Imprimante n'imprime pas (OK affiche) | File d'attente Windows bloquee | Utiliser connexion usb (raw) plutot que driver |
| Jobs bloques dans la file | Jobs precedents en attente | Bouton "Purger file" dans la modale d'impression (envoi ~JA) |
| Etiquette VOID noire | Echec encodage RFID | Augmenter puissance Write a 30, vitesse <= 2 ips |
| Accents corrompus (ete → ?) | Charset non declare | Deja corrige : ^CI28 present dans tous les templates |
| ZBP Deconnecte apres redemarrage | Service Windows arrete | Relancer 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".
Mise en service (une seule fois, sur le PC de caisse)
- 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.
- Verifier la config relay dans
%APPDATA%\TuniRFID\agent_config.json:relay_url=wss://tunirfid.app/ws/print-relay, plusrelay_tenant_slugetrelay_api_key(fournis par la modale "Config relay"). Deja en place si les etiquettes fonctionnent. - 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. - Brancher et allumer l'imprimante, papier 80mm en place, capot ferme.
| Symptome | Cause probable | Solution |
|---|---|---|
| Badge "Imprimante directe" absent | Agent eteint ou relay mal configure | Lancer l'agent ; verifier relay_api_key (icone de l'agent verte dans la barre des taches) |
| Le ticket sort via le dialogue navigateur | Agent non connecte (repli normal) | Demarrer l'agent : le badge confirme le mode direct |
| "Impression directe KO" puis bascule navigateur | Imprimante hors ligne ou en pause | Allumer l'imprimante ; purger la file Windows et reprendre l'impression |
| Rien ne sort alors que l'agent est connecte | Mauvaise imprimante detectee | Forcer receipt_printer = nom exact (Parametres Windows ➜ Imprimantes) |
Onglet Ventes — Historique detaille
NOUVEAUA 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 ».
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
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.
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).
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)
- Cochez les ventes a annuler (la case d'une vente deja annulee est desactivee). La case d'entete coche toute la page.
- Une barre rouge apparait : « N ventes selectionnees · Total X.XXX TND ».
- Cliquez « ❌ Annuler ces ventes » ➜ fenetre de confirmation.
- Raison obligatoire (tracee dans le journal d'audit) + limite 50 ventes par operation.
- 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.
SalePoint — La caisse (Point de Vente)
NOUVEAUStockManager & 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).
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.
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
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
Encaisser & imprimer le ticket
Choisir le mode de paiement
Bouton REGLER TICKET (raccourci F3) ➜ le total du s'affiche en grand. Modes disponibles :
| Mode | Saisie | Particularite |
|---|---|---|
| Especes | Montant remis | Le rendu monnaie est calcule automatiquement |
| Carte | Montant CB | Doit couvrir le total |
| Cheque | N°, banque, echeance | Numero + banque obligatoires |
| Mixte ENRICHI | Especes + Carte + Cheque + Cheque cadeau | Toute combinaison. Carte/cheque exacts, bon plafonne (surplus perdu), rendu uniquement sur les especes. Une part cheque exige n° + banque. |
| Credit (a terme) | Client obligatoire | Acompte 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. |
Confirmez ➜ le ticket 80 mm s'imprime (entete enseigne, articles, totaux, ventilation des modes de paiement, points fidelite gagnes).
Retours en caisse
Rembourser un article vendu
- Ouvrir le ticket d'origine (recherche par numero)
- Retour par quantite : choisir les articles et la quantite a rendre ; ou retour par EPC (Premium) : scanner la piece exacte
- Choisir un motif (Defectueux, Taille, Couleur, Erreur, Remboursement client)
- Valider ➜ le stock est restitue (mouvement RETURN), la piece RFID repasse en stock, et les points de fidelite sont ajustes
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).
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.
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.
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.
Phase 0 — Configurer l'equipe et l'imprimante
Etape A — Creer les profils de permission
- Menu Parametres ➜ onglet "Profils & Permissions"
- Cliquer "+ Nouveau profil" ➜ nom :
Magasinier Vue Seule - Dans la matrice, pour le module Articles : cocher voir uniquement (decocher creer/modifier/supprimer)
- Enregistrer
- Creer un deuxieme profil :
Manager Sans Suppression - Pour tous les modules : cocher voir/creer/modifier — decocher supprimer
- Enregistrer
Etape B — Creer les utilisateurs multi-magasin
- Menu Utilisateurs ➜ "+ Nouvel utilisateur"
- Nom :
Karim Slim| Code :KARIM| PIN :1234| Role : WAREHOUSE - Section "Affectations magasins" : cocher
Magasin Tunis(Actif) etDepot Sousse(Actif) - Profil de permission :
Magasinier Vue Seule - Enregistrer
- Creer un second utilisateur :
- Nom :
Sonia Ben| Code :SONIA| PIN :5678| Role : MANAGER - Affectations :
Magasin Tunis(Actif),Siege Sfax(Inactif — magasin ferme ce mois) - Profil :
Manager Sans Suppression➜ Enregistrer
Etape C — Verifier l'imprimante
- Menu Config. imprimante
- Verifier que le bloc "Statut ZBP" affiche Connecte
- Si deconnecte : telecharger et executer
install_zbp.bat - Cliquer "Imprimer etiquette test" ➜ une etiquette test sort de l'imprimante
- 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
KARIM / PIN 1234 ➜ dans Articles, les boutons "Creer" et "Modifier" doivent etre absents (profil vue seule actif).
Phase 1 — Configuration initiale du magasin
- Menu Configuration ➜ onglet Rayons / Familles
- Creer le rayon :
PRET-A-PORTER - Ajouter la famille :
POLOS(sous PRET-A-PORTER) - Ajouter la sous-famille :
POLOS HOMME - Onglet Gammes ➜ creer la gamme :
ADULTEavec les taillesS, M, L, XL, XXL - Onglet Fournisseurs ➜ creer :
Textile Sahel, contactcontact@sahel.tn - 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
Article 1 — Polo Classic
- Menu Articles ➜ bouton "Nouvel article"
- Remplir : Designation =
POLO CLASSIC HOMME, Famille = POLOS HOMME, Fournisseur = Textile Sahel - Prix : Achat HT =
18 DT| Vente TTC =49 DT - Gamme = ADULTE, Couleurs :
BLANCetMARINE - Cliquer "Generer les SKUs" ➜ verifier que 10 variantes sont creees (5 tailles × 2 couleurs)
Article 2 — Polo Premium
- Meme procedure : Designation =
POLO PREMIUM HOMME - Prix : Achat HT =
28 DT| Vente TTC =79 DT - Gamme = ADULTE, Couleurs :
NOIR,ROUGE,BLEU - 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)
- Menu Bons de livraison ➜ "Nouveau BL"
- Fournisseur = Textile Sahel | Magasin = votre magasin
- Ajouter POLO CLASSIC HOMME ➜ bouton "Matrice"
- Dans la matrice : choisir mode "Cloche" ➜ valeur = 3
Resultat : S=1, M=2, L=3, XL=2, XXL=1 pour chaque couleur = 18 pieces - Ajouter POLO PREMIUM HOMME ➜ mode "Copier valeur" = 5
Resultat : 5 pieces x 15 variantes = 75 pieces - Cliquer "Sauvegarder le BL" ➜ statut BROUILLON
- Cliquer "Valider le BL" ➜ confirmer
- 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
- Menu Bons de livraison ➜ ouvrir le BL de Phase 3 (statut VALIDE)
- Cliquer le bouton "Creer Facture FF" (bleu, en bas de la fenetre)
- Confirmer la creation ➜ message : "Facture FF-2026-00001 creee"
- Menu Factures fournisseurs ➜ la facture apparait en BROUILLON
- Cliquer 🔍 (Detail) ➜ verifier les montants HT / TVA / TTC / Net
- Cliquer le bouton "Valider la facture" ➜ statut passe a VALIDEE
- 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)
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
Etape A — Impression CB depuis le BL
- Menu Bons de livraison ➜ ouvrir le BL (statut VALIDE ou FACTURE)
- Cliquer le bouton violet "🏷 Imprimer etiquettes"
- Choisir le mode Code-barres
- Selectionner le modele :
Standard 58×40mm (CODE128) - Le tableau des variantes est pre-rempli avec les quantites BL
- Cocher toutes les lignes ➜ ajuster les quantites si besoin
- Cliquer "Imprimer" ➜ les jobs sont crees dans Etiquetage Code a Barres
- Aller dans Etiquetage Code a Barres ➜ verifier les jobs
Etape B — Designer RFID + Agent IA
- Menu Etiquetage RFID ➜ onglet Designer
- Dropdown Template ➜ "Nouveau..." ➜ nommer :
Etiquette Polo - Ajouter Designation (Y=8), Taille/Couleur (Y=32), Barcode (Y=52), Prix (Y=62)
- Cliquer "Apercu Labelary" ➜ verifier le rendu ➜ Sauvegarder
- 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
Creation et expedition
- Menu Transferts ➜ "Nouveau transfert"
- De : votre magasin | Vers : Sfax
- Ajouter POLO PREMIUM HOMME :
3 × L-NOIRet2 × XL-NOIR - Sauvegarder ➜ cliquer "Expedier" ➜ confirmer
- Menu Stock : mouvement TRANSFER_OUT cree, Disponible a baisse
Reception ligne par ligne (avec ecart)
- Ouvrir le transfert ➜ cliquer "Recevoir"
- Une modale s'ouvre avec le tableau ligne par ligne
- Pour la ligne
L-NOIR: saisir3(conforme) - Pour la ligne
XL-NOIR: saisir1au lieu de 2 (1 piece abimee) ➜ l'ecart s'affiche en orange - Cliquer "Valider la reception"
- Message : "Reception avec 1 ecart(s)" ➜ le transfert passe en RECU / ECART
- 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)
Reponse : 6 - 10 = -4, affiche en rouge — c'est un avertissement, pas un blocage.
Phase 7 — Retour fournisseur, inventaire et fidelite client
Retour fournisseur
- Menu Retours ➜ "Nouveau retour"
- Selectionner le BL de Phase 3
- Cocher la ligne
S-BLANC(Polo Classic), quantite =3, motif =DEFAUT - Sauvegarder ➜ Confirmer ➜ Valider
- Verifier dans Stock : S-BLANC diminue de 3
Inventaire de fin de semaine
- Menu Inventaire ➜ "Nouvel inventaire"
- Filtrer par famille POLOS ➜ saisir les quantites comptees :
| Variante | Theorique | Comptee | Ecart |
|---|---|---|---|
| M-BLANC | 2 | 2 | 0 |
| L-BLANC | 3 | 2 | -1 |
| M-MARINE | 2 | 3 | +1 |
- Valider l'inventaire ➜ les ajustements sont appliques
Programme fidelite
- Menu Clients ➜ "Nouveau client"
- Creer :
Ahmed Ben Ali, tel =55 987 654 - Onglet Points ➜ "Ajustement manuel" : +80 points, motif
Achat 160 DT - Verifier solde = 80 points
- Cliquer "Convertir en avoir" ➜ 80 pts × 0.100 = bon de 8 DT
- 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
Config ➜ Utilisateurs ➜ Articles ➜ BL Reception ➜ Facture FF ➜ Etiquetage depuis BL ➜ Transfert + Reception ecarts ➜ Retour ➜ Inventaire ➜ Client & Fidelite ➜ Remplacement Etiquette (Phase 8)
Phase 8 — Remplacer une etiquette RFID perdue
Identifier et marquer l'unite
- Barre laterale ➜ "Rempl. Etiquette"
- Dans le champ de recherche, taper
POLO CLASSIC➜ selectionner la varianteM / BLANC - Selectionner votre depot dans le dropdown ➜ cliquer "Afficher"
- Le tableau affiche toutes les unites :
#1,#2,#3... toutes en statut STOCK - Lire le numero imprime sur l'etiquette dechiree ➜ c'est l'unite
#3 - Cliquer le bouton "⚠ Marquer perdu" sur la ligne #3
- Confirmer ➜ le statut passe a PERDU_ETIQUETTE
(Optionnel) Confirmer par scan RFID
- Cliquer "📡 Demarrer scan"
- Passer le lecteur sur les articles en rayon — les unites #1, #2 sont detectees, #3 reste ✗ Non detecte
- Cliquer "⏹ Arreter"
Reimprimer le meme EPC
- Sur la ligne #3 (statut PERDU_ETIQUETTE), cliquer "🔄 Reimprimer"
- La modale s'ouvre avec l'EPC original en lecture seule (
E20000…0012) - Selectionner l'imprimante
ZDesigner ZD621R, Darkness =20 - Cliquer "🖨 Reimprimer meme EPC"
- 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…0012reimprime — le scanner de caisse reconnait la piece normalement - Aucun mouvement de stock cree (verifier dans Stock & Mouvements)
- Tableau de bord : KPI "Tags RFID" inchange
Config ➜ Articles ➜ BL Reception ➜ Facture FF ➜ Etiquetage depuis BL ➜ Remplacement etiquette ➜ Transfert + Reception ecarts ➜ Retour ➜ Inventaire ➜ Client & Fidelite
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.
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
Etape A — Connexion & ticket
- Ouvrir
pos.tunirfid.app➜ selectionner l'enseigne TuniRFID Boutique - Choisir le caissier Mehdi ➜ saisir le PIN
2468➜ VALIDER - Cliquer Nouveau (ou
F12) ➜ panier vide
Etape B — Composer le panier
- Scanner (douchette code-barres, ou lecteur RFID en Premium) un Polo Premium L-NOIR ➜ la ligne s'ajoute
- Porter la quantite a 2 (bouton +), ou scanner une 2e piece
- Rechercher le client Ahmed Ben Ali ➜ ses points fidelite s'affichent
- Verifier le total : 2 × 79 = 158.000 DT TTC
Etape C — Encaisser
- Cliquer REGLER TICKET (
F3) - Mode Especes ➜ saisir
200➜ le rendu monnaie 42.000 DT s'affiche - 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)
Scenario D — Retour client & litige
- SalePoint ➜ page Retours ➜ rechercher le ticket d'origine (par numero)
- Retour par quantite : selectionner Polo Premium L-NOIR, quantite
1 - Motif : Defectueux
- Valider ➜ remboursement 79.000 DT, la piece repasse en stock
- Verifier l'ajustement fidelite d'Ahmed (points proportionnels retires)
- 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 »
Scenario E — Cloture de journee & rapport caisse
- SalePoint ➜ page Rapport ➜ lire le CA TTC du jour, le nombre de tickets, le ticket moyen
- Regarder la ventilation par mode de paiement (Especes / Carte / ...)
- Compter physiquement les especes du tiroir et comparer au total « Especes » affiche
- Documenter un eventuel ecart (ex. −2 DT)
- StockManager ➜ Tableau de bord ➜ verifier que « CA Aujourd'hui » correspond
- 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)
- StockManager ➜ onglet Ventes ➜ puce « 7 derniers jours »
- Lire les KPI : Ventes, CA TND, Panier moyen, Annulees %
- Filtrer par mode Carte puis Especes pour comparer la repartition
- Trier la colonne Total TTC (decroissant) ➜ identifier les plus gros tickets
- Cliquer « Afficher heatmap horaire » ➜ metrique CA TND ➜ reperer les pics (ex. jeudi 18–19h)
- Cliquer le nom Ahmed Ben Ali dans une ligne ➜ voir tout son historique (drill-down)
- Retirer le filtre client (× sur la puce), puis Exporter en Excel la semaine complete
- Ouvrir le bouton Audit ➜ verifier que votre export vient d'etre trace (utilisateur, date, filtres)
- 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
bulk_void est tracee avec la raison.
Config (admin) ➜ Reception + Etiquetage ➜ Vente comptoir (caisse) ➜ Retour ➜ Cloture journee ➜ Pilotage hebdo (Ventes + heatmap + export + audit) ➜ Reassort transfert. Vous maitrisez les deux applications.
Aide-memoire — Astuces
Bouton "Auto" genere un code sequentiel
Saisissez n'importe quel champ et les autres se recalculent
Les "+" dans les dropdowns creent sans quitter le formulaire
Remplissez la 1ere colonne puis dupliquez
Pattern adapte au nombre de tailles
Bouton "Creer Facture FF" sur un BL valide
Bouton "Imprimer etiquettes" pre-remplit les quantites
Creez un retour depuis un BL valide
Saisie ligne par ligne ➜ ecart signale en orange
Le selecteur en bas de la sidebar filtre tout
Marquer perdu ➜ Reimprimer meme EPC — stock inchange
Imprime sur chaque etiquette RFID — identifie la piece sans scanner
Un utilisateur peut etre affecte a N magasins — toggle Actif/Inactif par magasin
Restreint le role sans le changer — logique AND : profil ne peut qu'enlever des droits
Preferer la connexion "usb" (raw ZPL) au lieu de "driver" (spooler Windows pouvant bloquer)
Bouton "Purger file" dans la modale d'impression envoie ~JA (annule tous les jobs)
L'app est responsive — icone hamburger (☰) ouvre la sidebar sur mobile
Soldes ➜ "Parcourir & selectionner SKUs" — ouvrable meme sans avoir sauvegarde la campagne (auto-save brouillon)
Dans l'atelier, cocher N SKUs ➜ modale "Appliquer %" applique le meme taux a tous d'un coup
Tableau atelier ➜ cliquer la colonne Vendus pour identifier les articles a brader en priorite
Bouton "Creer Facture client" sur un BL Vente VALIDE genere une facture Facturex prete a editer
1 run actif par tenant (lock applicatif), watchdog 30 min libere les runs zombies
TuniRFID_PrintAgent.exe : agent Windows tray, sortie WebSocket vers wss://tunirfid.app/ws/print-relay (contourne PNA Chrome)
Cle permanente par poste boutique — pas de JWT (machines 24/7 sans login user)
Atelier ➜ edition demarque inline d'1 SKU — ce taux ecrase l'override par site et le taux de la demarque
Page BL ➜ "Importer depuis facture" — Claude vision extrait lignes & prix, prevue editable avant insertion
F3 = Regler le ticket · F12 = Nouveau ticket. Le rendu monnaie (especes) est calcule automatiquement.
Une campagne active s'applique automatiquement au scan — le caissier ne saisit rien.
Les filtres de l'onglet Ventes sont dans l'URL — copiez le lien pour partager exactement la meme vue.
Onglet Ventes ➜ clic sur un nom client = toutes ses ventes filtrees (puce × pour retirer).
Chaque export CSV/XLSX est enregistre dans le journal d'audit (qui, quand, quels filtres).
Cocher N ventes ➜ raison obligatoire ➜ stock restitue automatiquement. Max 50 / operation.
Standard = code-barres seul. Premium = + RFID (EPC unique, anti-double-vente entre caisses). L'UI s'adapte au plan.
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