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 16 pages de l'application
| Section | Page | Description |
|---|---|---|
| Principal | Tableau de bord | KPIs, graphiques, alertes, activite recente |
| Articles | Catalogue produit avec variantes (SKUs) | |
| Etiquetage RFID | Impression d'etiquettes RFID (ZD621R) | |
| Etiquetage Code a Barres | Impression d'etiquettes code-barres | |
| 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 | |
| Commandes fournisseurs | Bons de commande achat | |
| Inventaire | Comptage physique et ajustement | |
| Retours fournisseurs | Renvoi marchandise au fournisseur | |
| Transferts | Transfert entre depots/magasins | |
| Analyse | Analytics | CA, ventes par jour/heure/rayon/famille |
| Rapports | KPIs stock, graphiques, top articles | |
| Clients | Gestion clients + programme fidelite | |
| Config | Utilisateurs | Comptes, roles, PINs, affectations multi-magasin, profils de permission |
| Parametres | Rayons, familles, gammes, magasins, fidelite, Profils & Permissions | |
| Config. imprimante | Zebra Browser Print : statut, guide installation, test impression, calibrage RFID |
Flux de donnees principal
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%
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 |
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 |
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 |
Transferts inter-depots
TRANSFER_OUT
TRANSFER_IN
Impact sur le stock alloue
| Statut transfert | Allouee | Explication |
|---|---|---|
| BROUILLON | Visible | Stock reserve au magasin source |
| EXPEDIE | Visible | Stock en transit |
| RECU | 0 | Allocation liberee — stock transfere |
Creer un transfert
- Depot source :
Magasin Tunis Centre - Depot destination :
Depot Sousse - Utiliser la matrice pour ajouter les lignes
- Verifier l'allocation sur la page Stock
Cliquer "Expedier" ➜ mouvements TRANSFER_OUT crees ➜ stock source diminue
Changer de magasin ➜ Depot Sousse ➜ Ouvrir le transfert ➜ "Recevoir" ➜ mouvements TRANSFER_IN ➜ stock destination augmente
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
Concept
L'inventaire compare le stock theorique (systeme) avec le stock compte (physique). Les ecarts sont ajustes automatiquement a la validation.
INVENTORY_ADJUST
- Creer un inventaire (magasin + notes)
- Saisir la quantite comptee pour chaque ligne
- Valider ➜ mouvements
INVENTORY_ADJUSTpour chaque ecart
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)
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)
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) |
Config. imprimante Zebra ZD621R
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
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) |
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
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
TuniRFID · Retail Suite