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) | |
| Demande d'appro NOUVEAU | Reappro inter-magasin demande par le destinataire (pull) ➜ genere le bon de transfert | |
| 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
L'ecran de connexion parle trois langues v4.45
- Depuis tunirfid.app, le bouton Connexion ouvre le formulaire dans la langue du site — francais, anglais ou arabe (de droite a gauche). Auparavant il etait toujours en francais, quelle que soit la langue choisie.
- Un selecteur Francais · English · ع en bas de la page permet d'en changer, y compris si l'on arrive directement sur
app.tunirfid.apppar un favori. Le choix est memorise. - Il suit jusqu'a la page de creation de compte, et alimente la langue de la visite guidee et de l'assistant une fois connecte.
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 |
Caisses (postes de vente)
Multi-posteCaissier ≠ Caisse
Une caisse est un poste de vente physique — en pratique un ordinateur avec son ecran SalePoint (et, en Premium, son lecteur RFID). Vous avez autant de caissiers que vous voulez, mais un nombre limite de caisses (≈ vos ordinateurs). Le caissier choisit SA caisse au debut de son service ; chaque caisse a son panier independant et, en option, sa propre cloture / Z.
L'entite Caisse est universelle : elle existe en mode Base (code-barres seul) comme en Premium (code-barres + RFID en parallele). Une caisse Base = un ordinateur + lecteur code-barres, sans poste RFID.
Magasins ➜ bouton « Caisses »
Barre laterale ➜ Magasins. Sur la ligne d'un magasin (type STORE), cliquez « Caisses ». A la creation du magasin, une caisse C1 — Caisse 1 est creee automatiquement (caisse par defaut).
| Champ | Description | Exemple |
|---|---|---|
| Code | Identifiant court, unique dans le magasin | C2 |
| Libelle | Nom affiche au caissier a l'ouverture | Caisse 2 (entree) |
| Active | Une caisse desactivee n'apparait plus a l'ouverture | Oui |
| Defaut | Caisse pre-selectionnee ; une seule par magasin | C1 |
Selecteur de caisse a l'ouverture
Sur l'ecran de connexion SalePoint, sous le caissier, un selecteur « Caisse » apparait si le magasin a ≥ 2 caisses (masque s'il n'y en a qu'une — rien ne change pour les boutiques mono-poste). L'ordinateur memorise sa caisse : au login suivant elle est pre-selectionnee (modifiable).
Postes RFID ➜ selecteur Magasin
Barre laterale ➜ Postes RFID (module M15D). Un poste RFID = un lecteur fixe (4 ou 8 ports) qui pilote plusieurs antennes, chacune placee a une caisse ou a un portique. On le rattache donc a un MAGASIN (selecteur sur la ligne du poste, ou des l'ajout du poste), pas a une caisse unique. Le poste apprend son magasin automatiquement (heartbeat) — aucun redemarrage requis.
L'affectation fine antenne ➜ caisse se fait sur le poste (dashboard RFID, mode installateur ➜ Roles des antennes) : chaque antenne « caisse » vise une caisse precise du magasin — un meme lecteur peut ainsi alimenter 2 caisses. Sans affectation, les scans de l'antenne retombent sur la caisse par defaut du magasin.
Filtre caisse — Tableau de bord, Pilotage, Ventes
Chaque vente est rattachee a sa caisse. Dans Tableau de bord et Pilotage, apres avoir choisi un magasin, le selecteur « Caisse » filtre les chiffres sur un poste precis (defaut : « Toutes les caisses »). L'onglet Ventes conserve l'attribution caisse de chaque ticket.
Cloture fiscale par registre
Par defaut, la cloture reste par caissier / jour (inchangee). Sur activation de l'option tenant « cloture par caisse », la cloture et le numero Z deviennent independants par caisse (comme un registre Lightspeed / Square) : la vue Clotures affiche la colonne Caisse, et le theorique de chaque Z ne compte que les ventes de SA caisse.
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
- Rayon v3.84
- 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
Si une recherche est active, l'export ne contient que les variantes affichees — videz la recherche pour obtenir le catalogue complet. Le CSV s'ouvre directement dans Excel en francais (separateur point-virgule) ; dans le fichier Excel, la colonne code-barres est en format texte pour qu'un EAN13 ne soit pas transforme en notation scientifique. Chaque export est trace dans le journal d'audit, et l'acces suit le droit Articles ➜ Consulter.
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% |
Ou la remise apparait en caisse v3.86
Des qu'une campagne est Active et que la date du jour tombe dans une demarque, le prix soldé s'affiche partout ou le caissier voit un prix :
- Liste de recherche article (barre de scan du POS) : prix catalogue barre, prix soldé en bleu, badge −X % a cote de la designation.
- Modale « choisir une piece » (plusieurs exemplaires physiques du meme article) : meme affichage.
- Ligne de panier et ticket de caisse : prix barre + badge + libelle de la campagne.
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.
- Le catalogue voyage en Excel v4.59 : trois boutons a cote de « Parcourir & selectionner SKUs ». Exporter le catalogue telecharge toutes vos variantes, pre-remplies, avec une feuille Groupes qui montre ou est le volume. Exporter la campagne sort la campagne telle qu'elle est configuree, articles et taux compris — c'est votre sauvegarde hors application. Importer les taux recharge un classeur rempli, avec un apercu avant toute ecriture.
Le fichier a deux feuilles : Regles (le taux par famille, rayon ou fournisseur — quelques lignes suffisent) et Articles (les exceptions et les exclusions). Un article l'emporte sur une regle. Une cellule de taux laissee VIDE signifie « suit la regle de son groupe », ce n'est pas 0 %. Le chargement se fait sur un brouillon ; une campagne en cours n'est jamais modifiee. - Reprendre les taux d'une campagne passee v4.56 : sur un brouillon, le bouton « Reprendre les taux » reconstruit les taux article par article depuis les prix reellement pratiques lors d'une operation passee (annulee ou expiree). Utile quand les taux ne survivent plus dans la fiche de campagne — une demarque ramenee a 0 les rend tous nuls — car le journal des prix, lui, garde ce qui a ete encaisse.
Un apercu annonce d'abord ce qui sera repris, ce qui reste tel quel et ce qui n'a aucune trace ; rien n'est ecrit avant votre accord. Le taux est deduit du prix : un pourcentage s'il reproduit exactement le prix pratique, sinon un prix impose. Un article dont le prix catalogue a change depuis est signale, et son taux recalcule sur le prix du jour. Un taux que vous avez deja saisi n'est jamais ecrase, et une campagne en cours n'est jamais modifiee. - Dupliquer une campagne v4.54 : une campagne Annulee ou Expiree ne se reactive pas — on la duplique en nouveau brouillon. La copie reprend le type, les cibles, les sites et leurs surcharges, les demarques, et les taux par article ainsi que les exclusions saisis dans l'atelier. Le message de confirmation annonce combien de taux par article ont ete repris. Seules les dates sont remises a zero (aujourd'hui ➜ +14 jours) : ajustez-les avant d'activer, sinon l'operation tournera plus longtemps que prevu.
- Supprimer une campagne v3.90 : une campagne Brouillon, Annulee ou Expiree peut etre retiree de la liste (icone corbeille). Une campagne Active ne peut pas l'etre : il faut d'abord l'Annuler — la supprimer en cours changerait les prix en caisse dans la seconde. L'historique des prix pratiques est conserve : la suppression retire l'operation et ses parametres, jamais le journal d'audit exportable pour le ministere du Commerce. Le message de confirmation indique combien de lignes d'historique restent.
- Cibles combinables v3.89 : les articles choisis un par un dans l'atelier et les cibles larges du widget (famille, rayon, theme, fournisseur) s'additionnent. On peut donc solder toute la famille Pull plus trois sacs precis, en une seule campagne. La remise s'applique a l'union ; un article deja couvert par sa famille n'est pas compte deux fois. Le bouton Effacer du badge vert ne retire que les articles choisis a la piece — les cibles larges restent.
- Filtres multi-choix v3.88 : les filtres Familles, Rayons et Fournisseurs acceptent plusieurs valeurs a la fois (cases a cocher, avec une recherche interne et « Tout cocher / Tout decocher »). C'est ce qui permet de piloter le taux par groupe : cocher Vetements + Chaussures, tout selectionner, appliquer −30 % ; puis ne garder que Lingerie et appliquer −20 %. Les filtres se cumulent en ET (famille(s) et texte recherche).
- Tout selectionner v3.87 : le bouton « Tout selectionner (N) », en bas de l'atelier, coche tous les articles du filtre courant, toutes pages confondues — la case d'en-tete du tableau, elle, ne coche que la page affichee. Filtrer par famille puis cliquer une fois remplace le parcours des 49 pages qu'imposait un ciblage large. Le bouton Vider annule toute la selection. Si le catalogue depasse le plafond technique, un message le dit et invite a affiner le filtre — la selection n'est jamais silencieusement tronquee.
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
Reimprimer les etiquettes prix barre v3.82
- Sur la campagne ➜ bouton 🏷 Etiquettes : la modale affiche le tableau des references ciblees (code, designation, variante, code-barres, prix avant ➜ prix solde avec le % de la demarque active).
- Decochez les references a exclure de la reimpression (tout est coche par defaut ; case d'en-tete = tout cocher/decocher). Le compteur de selection et le total d'etiquettes suivent en direct.
- Style d'etiquette v3.83 : le modele systeme « Soldes » (bandeau inverse −X % + prix, ancien prix barre, code-barres large) ou l'un de tes modeles — duplique « Soldes » dans Etiquetage CB ➜ Modeles (categorie Soldes) et personnalise-le, il apparaitra dans la liste.
- Quantite par SKU, puis Lancer l'impression ➜ seules les etiquettes des references cochees partent a l'agent local.
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 |
Filtres par colonne NOUVEAU
Au-dessus de la table, une barre de filtres permet de cibler les mouvements colonne par colonne. Les filtres actifs se combinent (logique ET / AND multi-critères) : laisser un champ vide = ne pas filtrer dessus.
Code, Désignation, Couleur, Taille et Magasin sont des listes déroulantes à saisie (comboboxes) : cliquez dans le champ pour voir la liste des valeurs existantes de cette colonne (les magasins réels, les couleurs réelles…), ou tapez les premières lettres pour filtrer la liste (autocomplétion). Vous pouvez aussi taper une valeur partielle : le filtre reste un « contient ». Les listes reflètent le magasin actif sélectionné en haut de page.
| Colonne | Type de filtre | Exemple |
|---|---|---|
| Date | Plage Du / Au | du 01/06 au 30/06 |
| Type | Liste déroulante (Tous les types) | Vente, Retour… |
| Sens (delta) | Liste : Entrée (+) / Sortie (−) / Tous | Sortie (−) |
| Code | Combobox « contient » (liste des codes existants + autocomplétion) | TS-001 |
| Désignation | Combobox « contient » (liste des désignations existantes + autocomplétion) | chemise |
| Couleur | Combobox « contient » (liste des couleurs existantes + autocomplétion) | BLEU |
| Taille | Combobox « contient » (liste des tailles existantes + autocomplétion) | XL |
| Magasin | Combobox « contient » (liste des magasins existants + autocomplétion) | MAG1 |
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
Un seul commerce ? Il n'y a rien a faire ici. Une societe unique a ete creee automatiquement a partir de vos informations d'entreprise, tous vos magasins y sont rattaches, et le champ « Societe » reste masque a la creation d'un magasin.
Ce bloc sert aux groupes : plusieurs societes qui s'achetent et se vendent des marchandises entre elles. Un mouvement entre deux societes est une vente ; entre deux magasins d'une meme societe, un simple transfert. Des que vous declarez une deuxieme societe, le champ apparait dans la fiche magasin.
Suppression : la societe par defaut n'est jamais supprimable (elle porte l'existant), et une societe qui compte encore des magasins ou des utilisateurs ne l'est pas non plus — le bouton n'apparait tout simplement pas.
Ce que le rattachement change. Un utilisateur rattache ne voit que les magasins de sa societe — y compris un ADMIN, qui reste l'administrateur de sa societe et non du groupe. v4.42 La liste des magasins et celle des societes (Parametres) s'y conforment elles aussi : un administrateur rattache ne lit plus le nom des points de vente ni la raison sociale de ses societes soeurs. Une exception assumee : le selecteur de destination d'un transfert continue de proposer les magasins du groupe entier — un mouvement entre deux societes est un cas metier normal, et l'ecriture, elle, reste gardee. Il ne voit plus, ne modifie plus et ne reinitialise plus le PIN des utilisateurs des autres societes : ils lui sont annonces « introuvables ». Laisser le champ vide donne au contraire acces a l'ensemble du groupe — c'est l'etat de tous les comptes existants, et rien ne change tant que vous ne rattachez personne.
Deux refus a connaitre. Vous ne pouvez pas modifier votre propre rattachement : se rattacher soi-meme ferait perdre la vue groupe, et un administrateur rattache ne peut plus detacher personne — le groupe risquerait de se retrouver sans aucun administrateur. De meme, un administrateur deja rattache ne dispose que de sa societe : il ne peut ni en designer une autre, ni detacher quelqu'un. Dans les deux cas, passez par un administrateur du groupe.
Ordre conseille : creez d'abord les societes, rattachez-y les magasins (Parametres ➞ Magasins), puis les utilisateurs. Un utilisateur rattache a une societe sans magasin n'accede a rien.
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 la quantite reellement recue, ou scanner (code-barres a l'unite), ou utiliser "Import lecture RFID" (.xlsx/.xls/.csv, Premium) qui remplit les quantites a partir des EPC lus (borne a la qte envoyee). 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).
TRANSFER_RETURN, aucune perte nette) ou "Constater une perte (transit)" (le stock source reste debite = la perte). Le destinataire est credite de la quantite reellement recue dans les deux cas, et la decision est tracee (qui / quand / motif). Pour recevoir le reste plus tard sans trancher, choisissez plutot "Enregistrer (partiel)".↺ Rouvrir une reception (rattraper un ecart)
Un transfert finalise en RECU alors qu'il restait des unites affiche un bouton orange "↺ Rouvrir la reception" (MANAGER+). Un clic le repasse en EN RECEPTION sans toucher au stock deja recu ; vous reprenez la reception des unites restantes via "Recevoir". Le stock destination n'est augmente que du complement — jamais de double comptage.
Incidents / Ecarts de demarque NOUVEAU
Chaque ecart cloture (reception de transfert ou session d'inventaire) cree un incident trace, consultable dans le menu Incidents / Ecarts (ADMIN/MANAGER) : magasin, type d'articles, decision (reintegration / perte) et impact financier — perte valorisee au cout d'achat (ce que l'enseigne a paye) ET au prix de vente (manque a gagner).
Troisieme source v3.80 : Vente hors-ligne. Quand une vente encaissee pendant une coupure reseau est resynchronisee alors que le stock a bouge entre-temps, la vente est toujours enregistree (la marchandise est physiquement sortie — jamais de refus) et l'ecart constate cree un incident VENTE_OFFLINE, valorise comme les autres et filtrable dans la liste (badge « Vente hors-ligne », prefixe OFF).
- Rapport d'incident (PDF) — propose automatiquement a la cloture de chaque anomalie, ou re-generable depuis la liste.
- Bilan periode — filtres date / magasin / type / decision, puis export PDF (lecture) ou Excel (compta) : total perdu, nb incidents, repartition par magasin.
Demande d'approvisionnement — reappro (appro) inter-magasin v3.75
Onglet dedie "Demande d'appro" — menu Stock, juste avant Transferts. C'est la brique amont du transfert : un gerant qui manque de stock tire la marchandise en emettant une demande vers un autre magasin ou le depot ; la source valide et le bon de transfert est genere automatiquement. A ne pas confondre :
| Notion | Sens | Qui initie |
|---|---|---|
| Bon de commande | Achat a un fournisseur externe | — |
| Transfert | Envoi de stock magasin ➜ magasin (push) | La source |
| Demande d'appro | Reappro demande par le destinataire (pull) | Le demandeur |
emise
tout / partiel
genere
Cote demandeur — emettre une demande
- Onglet "Demande d'appro" ➜ vue "Mes demandes" ➜ "Nouvelle demande"
- Mon magasin (a approvisionner) est pre-selectionne ; choisir le magasin/depot source a qui on demande
- Ajouter les lignes via l'un des 4 modes de saisie (voir ci-dessous), avec la quantite souhaitee, puis envoyer
- Suivre le statut ; tant qu'elle est EN ATTENTE, la demande reste annulable
- 🔍 Manuel — rechercher la reference (code / designation), choisir la variante, saisir la quantite.
- 📷 Scan — scanner (ou taper) le code-barres ; la reference est identifiee cote serveur et la quantite cumulee par SKU a chaque scan (ideal pour lister les ruptures en rayon).
- 🗃️ Matrice — une reference, une grille taille × couleur ; outils rapides (copier une colonne, remplissage groupe, courbe 1-2-3-2-1).
- 📊 Import — charger un fichier .xlsx / .csv (bouton « Modele »), apercu de la correspondance (SKU), puis import des lignes valides.
Cote source — traiter et generer le bon de transfert
- Vue "A traiter" (un badge rouge signale les demandes en attente ou vous etes la source)
- "Accepter" ➜ ajuster la quantite accordee par article (validation partielle possible : accorder moins que demande si le stock manque ; une ligne a 0 est ecartee)
- Valider ➜ un transfert BROUILLON est cree avec les quantites accordees ➜ il suit ensuite le flux transfert normal (valider ➜ expedier ➜ recevoir)
- Ou "Refuser" avec un motif (trace)
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, chacun trace dans sku_units.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. Astuce : dans le Designer, la section « Champs ↓ clic pour ajouter » ajoute en un clic un champ (designation, prix, taille, couleur, EPC...) sans avoir a le taper :
| 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 min. 40 dots. Etiquette hybride RFID + code-barres : si la lecture RFID echoue, le code-barres reste scannable. Sa largeur de module s'adapte automatiquement pour tenir dans l'etiquette (plus de troncature). Une reference tres longue imprime un code dense : lisez-le de pres et verifiez via Apercu.
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
(coupee / neutralisee)
Meme EPC — statut STOCK
Statuts d'une unite (sku_units)
| Statut | Signification | Transition |
|---|---|---|
| STOCK | Unite en stock avec etiquette valide, vendable | Etat initial apres impression ; ou retour a STOCK |
| RESERVE | Piece dans un panier en cours (anti-double-vente) | Scannee en caisse ; revient a STOCK si le ticket est abandonne |
| VENDU | Unite encaissee | Au paiement du ticket |
| EN_TRANSIT | Unite entre deux magasins pendant un transfert | Expedition (STOCK ➜ EN_TRANSIT) ; reception (EN_TRANSIT ➜ STOCK) |
| DEFECTUEUX | Retour defectueux en quarantaine SAV (stock isole), hors rayon | Case « Article defectueux » a la caisse |
| PERDU_ETIQUETTE | Etiquette manquante ou endommagee — unite physiquement presente | Bouton "Marquer perdu" ; retour a STOCK apres reimpression |
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
- Detruisez ou neutralisez physiquement l'ancienne etiquette (coupez la puce). C'est indispensable : le meme EPC est reecrit, donc si l'ancienne reste active, deux etiquettes au meme EPC circulent et l'article peut franchir le portique en silence.
- 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
- Cocher la case "J'ai detruit / neutralise l'ancienne etiquette" — le bouton reste desactive tant qu'elle n'est pas cochee
- 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 ou code-barres) NOUVEAU
Comptez un rayon entier avec un lecteur mobile, puis importez le fichier exporte — le comptage se remplit tout seul. Deux variantes : RFID (lecture des EPC, ex. Chainway) ou code-barres (lecture des EAN).
- Sur une session BROUILLON, cliquez "Importer lecture RFID" (Premium) ou "Importer inventaire code-barres", et choisissez le fichier exporte (.csv, .xlsx ou .xls).
- 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.
- Un panneau Recommandations interprete le resultat : sous-comptage, articles rattaches a un autre magasin, codes inconnus, ecart net, et alerte si la lecture semble partielle.
- Cliquez "Appliquer au comptage" : les quantites se remplissent. La case "Mettre a 0 les non scannes" (decochee par defaut) ne sert qu'a un inventaire complet ; une confirmation s'affiche si des lignes risquent d'etre reduites a tort.
- 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.
Importer / Exporter la liste clients (Parametres ➜ Clients)
Deux boutons dans l'en-tete de l'onglet Parametres ➜ Clients, a cote de « Nouveau client » (reserve MANAGER / ADMIN) :
- Exporter ➜ choisir Excel (.xlsx) ou CSV : telecharge toute la liste (Code, Type, Nom/Prenom ou Raison sociale, Telephone, Email, Matricule fiscal, ICE, Ville, Adresse, Points, CA cumule, Nb achats, Notes, Actif). Le filtre « type » actif est respecte. L'export est trace dans le journal d'audit.
- Importer ➜ glisser-deposer un fichier CSV ou .xlsx (ou le coller avec Ctrl+V, ou cliquer sur « Choisir un fichier »). Les clients sont crees ou mis a jour (dedoublonnage par Code, sinon par Telephone). Un modele CSV est telechargeable depuis la fenetre d'import.
Chaque ligne est validee independamment : le Type doit valoir Particulier ou Entreprise, l'Email doit etre valide, le Nom (ou la Raison sociale) est obligatoire. Une ligne invalide est rejetee et listee (numero de ligne + motif) sans bloquer le reste de l'import. Le resume affiche : crees / mis a jour / ignores / erreurs.
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 et l'echelle
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).
Echelle (multi-magasins) : les selecteurs Magasin et Caisse affichent les stats tous magasins (defaut), par magasin, ou par caisse (choisissez d'abord un magasin pour lister ses caisses). Les memes selecteurs existent sur le Tableau de bord (la valeur du stock y reste au niveau magasin, le filtre caisse ne porte que sur les ventes).
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.
3. Tous les magasins (vue d'ensemble) NOUVEAU
Sous les indicateurs, un tableau comparatif des boutiques (dès que le tenant a plusieurs points de vente ; une boutique sans vente sur la période y figure à 0 ; les dépôts/entrepôts sont exclus — ils n'ont pas de recette) classe les points de vente par CA décroissant — le « one-glance » du directeur réseau :
- CA TTC avec une barre de rang et la part (%) du total réseau — quels magasins portent l'activité (règle 80/20).
- Δ% vs la période de comparaison (vert = hausse, rouge = baisse) — qui progresse, qui décroche.
- Marge %, Tickets, Panier moyen, Quantité — pour diagnostiquer pourquoi (trafic ? taille du panier ? rentabilité ?).
Chaque colonne est triable (clic sur l'en-tête) et une ligne Total réconcilie avec les indicateurs du haut. Le tableau suit les mêmes période et comparaison que le reste du cockpit.
Objectifs par magasin — suivi de performance
NOUVEAUBarre laterale ➜ Objectifs. Le manager fixe une cible (et, en option, des paliers et une alerte) par magasin et par période ; l'application calcule le réalisé depuis les ventes et affiche la progression — un pilotage « cible vs réel » par point de vente.
1. Definir un objectif
Choisissez le magasin, cliquez « Nouvel objectif », puis définissez un ou plusieurs indicateurs en une seule action :
- Période (commune) — Journalière / Hebdomadaire / Mensuelle / Annuelle. Les dates début et fin se remplissent automatiquement (semaine ISO lundi→dimanche, mois calendaire, année civile) — ajustables à la main.
- Indicateurs & cibles — une ligne par indicateur : bouton « + Ajouter un indicateur » pour en empiler plusieurs (ex. Chiffre d'affaires et Panier moyen). Chaque ligne = un des huit KPI (voir tableau) avec sa propre Cible (l'unité s'adapte : DT / articles / %), et en option ses paliers (Min / Stretch) et son seuil d'alerte %.
- Chaque indicateur renseigné devient une carte de suivi indépendante (progression, paliers, alerte propres). Un même indicateur ne peut figurer qu'une fois par lot ; une ligne laissée sans cible est ignorée.
2. Les 8 indicateurs
| KPI | Ce qu'il mesure | Unite |
|---|---|---|
| Chiffre d'affaires | CA consolidé B2C + B2B (tickets comptoir + Bons de Livraison Vente validés) sur la période | DT |
| Bénéfice (marge brute) | CA (ventes valides) − coût d'achat des articles vendus — même définition que le « bénéfice » du Pilotage | DT |
| Taux de marge | Bénéfice divisé par le CA, en pourcentage | % |
| Panier moyen | CA divisé par le nombre de tickets valides | DT |
| Articles par panier | Nombre d'articles vendus divisé par le nombre de tickets | articles |
| Nombre de tickets | Nombre de ventes valides sur la période | tickets |
| Articles vendus | Quantité totale d'articles vendus | articles |
| Précision inventaire RFID | Fiabilité du dernier inventaire validé du magasin : Σ min(compté, théorique) / Σ théorique | % |
3. Suivre mes objectifs v3.77
L'onglet ouvre directement sur vos objectifs : le magasin est auto-sélectionné (plus besoin de le choisir), et en multi-magasin vous pouvez basculer sur « 🏪 Tous mes magasins » pour tout voir d'un coup. Les objectifs sont groupés par état — 🎯 En cours, 🕐 À venir, ✅ Terminés — donc vous voyez tous vos objectifs enregistrés, pas seulement ceux du moment.
Chaque objectif s'affiche en carte : Réalisé, Cible, une barre de progression (repères minimum / cible / stretch), le pourcentage et un badge d'état. Un objectif terminé porte un badge ✓ Atteint ou ✗ Manqué ; un objectif à venir indique sa date de démarrage. Sur les indicateurs cumulatifs en cours (CA, bénéfice, tickets, articles), une mention « Attendu à ce jour » + un badge Dans les temps / En retard situent l'avancement ; un objectif sous son seuil d'alerte affiche « ⚠ À risque ».
- ✎ Modifier — édite en place la cible, les dates, les paliers et le seuil d'alerte (l'indicateur, la période et le magasin restent figés — les changer reviendrait à créer un autre objectif).
- × Supprimer — retire l'objectif (désactivation, sans effacer l'historique).
- « Évaluer au » — un sélecteur de date recalcule le réalisé, le rythme et l'état (à venir / en cours / terminé) des objectifs à une date donnée (revue d'un état passé). Vide = aujourd'hui.
4. Alertes par e-mail
Chaque jour, l'application évalue les objectifs munis d'un seuil d'alerte et envoie un e-mail récapitulatif aux ADMIN / MANAGER du magasin pour ceux qui viennent de passer « à risque ». La notification n'est envoyée qu'à la bascule (jamais tous les jours) : un objectif qui reste à risque n'est pas re-notifié. L'envoi suppose la messagerie SMTP configurée (Paramètres ➜ E-mail).
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)
📊 Connecter Power BI (flux OData — scope analytics:read) v3.70
Un connecteur OData v4 en lecture seule expose vos ventes et votre stock a Microsoft Power BI. Les flux sont tenant-scopes par la cle (aucune fuite inter-tenant possible) et reconcilient exactement avec l'onglet Pilotage / Ventes (« zero CA divergent » — ils reutilisent les memes agregats).
Cle API avec scope analytics
- SuperAdmin ➜ onglet Tenants ➜ + Generer une cle
- Cocher
analytics:readet mettre Limite req/min ≥ 120 (un rafraichissement Power BI enchaine plusieurs flux en une minute) - Copier la cle
tk_live_…(affichee une seule fois) et la transmettre a l'analyste
Get Data ➜ Flux OData
URL racine du flux : https://votre-domaine/api/public/v1/analytics/odata/
- Auth Basic (le plus simple) : identifiant = la cle
tk_live_…, mot de passe vide - Ou en-tete (Power Query M) :
OData.Feed("…/analytics/odata/", null, [Headers=[#"X-API-Key"="tk_live_…"]])
Modele en etoile expose
| Entity set | Type | Grain | Contenu |
|---|---|---|---|
SalesDaily | Fait | jour | CA B2C + B2B + total, tickets, unites, cout, benefice |
SalesByStoreDaily | Fait | jour × magasin | CA, marge %, panier moyen par point de vente |
SalesBySkuDaily | Fait | jour × article | Best-sellers : quantite, CA, benefice, couleur/taille |
StockSnapshot | Fait | article × magasin | Stock actuel (pas d'historique) |
Stores / Skus / Categories | Dimensions | — | Magasins, articles (sans prix d'achat), rayons/familles |
$metadata, importe les donnees, et le CA total colle a l'onglet Pilotage. Aucune donnee client nominative ni prix d'achat n'est exposee.🛡️ Controle d'integrite EPC — reconciliation stock v3.71
Un blindage automatique garantit que la localisation d'une etiquette RFID reste coherente entre les tables, pour que le surplus a la reception soit toujours bien classe (« deja en stock » vs « depot / hors bon »). Trois verites doivent s'aligner : le journal des mouvements (ledger, source de verite), sku_units (verite operationnelle lue par le classement du surplus) et items (miroir d'etiquette).
epc_store_drift (par locataire) est expose a la supervision (Grafana) — une valeur qui reste > 0 signale un magasin a reconcilier.Verifier la coherence
Un ADMIN interroge le compte courant (isole par le jeton — aucune fuite inter-compte) :
GET /api/admin/epc-drift-check— n'ecrit rien ; renvoie les etiquettes en derive (items↔units, units↔ledger, stock fantome) etclean: true/false.
Recadrer
POST /api/admin/epc-drift-repair— corps{"dry_run": true}(defaut : simule, n'ecrit rien) ;{"dry_run": false}aligne le miroiritems(sur). Ajouter{"reconcile_ledger": true}pour recadrersku_unitsdepuis le journal (corrige une verite operationnelle perimee ou du stock fantome) — chaque changement est trace dans l'audit des unites.- En ligne de commande (ops, multi-comptes) :
python scripts/repair_epc_store_drift.py --all-tenants --apply --reconcile-ledger(sans--apply= simulation).
--apply --reconcile-ledger.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 | Caisse uniquement (SalePoint) — ne se connecte PAS au back-office |
🔑 Comment chaque role se connecte
Deux portes d'entree, et deux secrets distincts par utilisateur. Ne pas les confondre.
| Application | Adresse | Identifiants | Roles autorises |
|---|---|---|---|
| Back-office (StockManager) | tunirfid.app |
Identifiant entreprise + (code ou email) + mot de passe web | ADMIN, MANAGER, WAREHOUSE |
| Caisse (SalePoint) | pos.tunirfid.app |
Code utilisateur + PIN (4-10 chiffres) | CAISSIER (et MANAGER/ADMIN s'ils tiennent la 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-10 chiffres), Role, et (optionnel) mot de passe web
- 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.5Barre 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.
Perimetre magasin (scoping) NOUVEAU
Un MANAGER (ou WAREHOUSE) affecte a un ou des magasins (Utilisateurs ➜ cases magasins) est strictement borne a son perimetre :
- Ses selecteurs de magasin ne proposent que ses magasins ; mono-magasin ➜ selectionne d'office.
- Ses donnees (stock, ventes, KPI, inventaires, BL...) sont filtrees sur ses magasins, et toute tentative d'acceder a un autre magasin est refusee (403) cote serveur.
- Cas particulier des transferts v3.86 : un transfert porte deux magasins, il est donc visible des que l'un des deux est dans le perimetre — ce qui preserve la vue sur les livraisons entrantes venues d'un depot auquel l'utilisateur n'a pas acces, sans lui montrer les transferts qui ne le concernent pas. Les actions (expedier / recevoir / trancher un ecart) restent limitees a ses magasins.
Les modules proteges (alignes 1:1 sur les onglets)
La matrice couvre desormais chaque onglet de StockManager + le Point de vente. Les cles de module sont identiques cote serveur (baseline) et cote editeur.
| Module | Droits disponibles |
|---|---|
| Tableau de bord | voir |
| Pilotage | voir |
| Articles | voir / creer / modifier / supprimer |
| Stock & Mouvements | voir / saisir mouvements |
| Etiquetage | RFID / code-barres |
| Soldes & Promotions | voir / creer / modifier |
| Bons de livraison (achat) | voir / creer / valider |
| Factures fournisseurs | voir / creer / payer |
| BL Vente | voir / creer / valider |
| Factures clients | voir / creer / payer |
| Ventes | voir / exporter |
| Clotures caisse | voir |
| Inventaire | voir / creer / valider |
| Retours fournisseurs | voir / creer / valider |
| Transferts | voir / creer / valider |
| Incidents / Ecarts | voir |
| Point de vente | acces caisse |
| Parametres | voir / modifier |
| Utilisateurs | voir / gerer |
| Outils & Aide | Postes RFID / Config. imprimante / Guide d'utilisation |
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 |
|---|---|---|
| Manager Boutique (sans finances) | MANAGER | Ventes, Factures, Pilotage : masques — operationnel uniquement |
| Magasinier Vue Seule | WAREHOUSE | Articles : voir uniquement (pas creer/modifier) |
| Consultant Pilotage | MANAGER | Pilotage + Ventes : voir — le reste bloque |
| Responsable Receptions | MANAGER | BL + Inventaire + Transferts ; pas de Factures ni Parametres |
Caisse (POS) — validation responsable par PIN NOUVEAU
Au point de vente, certaines actions sensibles sont reservees a un responsable (anti-fraude) : annuler une vente finalisee, retour, rapport Z, encaisser un credit, rouvrir une caisse cloturee.
Le caissier reste connecte : quand il declenche l'une de ces actions, la caisse affiche une fenetre « Validation responsable » et demande le PIN d'un responsable (ADMIN ou MANAGER actif), saisi sur place. Si le PIN est valide, l'action passe et est tracee (qui a autorise, quoi, quand). Chaque action est validee independamment (aucune elevation de session). Apres plusieurs PIN errones, la saisie se bloque temporairement.
Donner (ou retirer) l'acces caisse a un manager NOUVEAU
Un MANAGER a l'acces caisse par defaut, mais un profil de permission peut le restreindre : si la case Caisse (SalePoint) est decochee dans son profil, il verra « Acces caisse non autorise » au point de vente — meme apres une reinitialisation de PIN (le PIN ne donne pas l'acces, il valide une action). Pour corriger : Profils & Permissions ➜ cocher Caisse sur son profil.
Pas de session admin heritee NOUVEAU
Quand un caissier ou un manager ouvre Stock Manager depuis le bouton « Stock » du point de vente, il arrive sur la page de connexion et doit saisir ses identifiants — il n'herite jamais d'une session admin restee ouverte sur la machine. Chacun travaille avec ses propres droits (securite anti-elevation).
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 :
Poste Tunis Centreet magasin associe (le poste alimente les caisses de ce magasin) - 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
Configurer les antennes par port (cote serveur) NOUVEAU
Un poste est un lecteur a plusieurs ports d'antenne (2 / 4 / 8 / 16 / 32 selon le materiel). Chaque antenne recoit un role propre, configure et valide cote serveur (registre par port) :
| Role d'antenne | Effet |
|---|---|
| caisse | Les scans alimentent une caisse precise du magasin du poste |
| portique | Controle antivol en sortie (lecture des EPC qui passent) |
| les deux | Sert a la fois de caisse et de portique |
| inactive | Antenne ignoree |
Portique antivol (role portique)
Une antenne en role portique, placee en sortie de magasin, lit les EPC qui franchissent le portique et declenche une alarme si une unite n'est pas en statut VENDU (encore STOCK ou RESERVE). Couple au registre d'antennes par port et a la table des statuts d'unite (voir M7R).
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 depuis Etiquetage code a barres ou Config. imprimante — bouton "Installer l'agent d'impression". La fenetre qui s'ouvre annonce la version proposee et son poids, lus sur le fichier lui-meme : ces deux chiffres ne sont ecrits nulle part a la main, donc ils ne peuvent pas se perimer. 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 — la version proposee au telechargement. C'est le meme agent que pour les etiquettes : s'il tourne deja, ouvrez la fenetre "ℹ Agent", qui compare la version installee a celle du serveur et dit si vous devez la remplacer. La mise a jour automatique n'existe qu'a partir de la v2.5 : en dessous, il faut retelecharger et remplacer le fichier a la main, une derniere fois.
- 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.
%APPDATA%\TuniRFID\agent.log) dit « certificate has expired » : ce n'est pas le certificat du serveur (le navigateur, lui, passe sans rien dire) — c'est le magasin de certificats racine de ce PC qui est perime. Installez l'agent v2.10 ou superieur, qui embarque ses propres racines : la connexion repart telle quelle. Ne remplacez jamais wss:// par ws:// dans agent_config.json pour contourner : la cle de votre boutique circulerait alors en clair sur le reseau, pour un probleme qui n'a rien a voir avec le serveur.| 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
- Recherche par article NOUVEAU : filtre les ventes du jour qui contiennent un article donne (nom, code, ou code-barres scanne). Couplee au « Retour sans ticket » : scanner un code-barres pre-remplit ce filtre — on voit aussitot les tickets concernes. Le filtre par role (un caissier ne voit que ses propres ventes) reste applique.
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.
Onglet Retours — reporting NOUVEAU
Suivre les retours clients
Cote StockManager, l'onglet Retours (reserve ADMIN / MANAGER) agrege tous les retours enregistres en caisse. Filtres : periode, mode de remboursement (especes / CB / avoir), motif, magasin, et recherche libre.
- Indicateurs : total rembourse, nombre de retours, taux de retour (% du CA et % des tickets), nombre d'echanges, et la ventilation especes / CB / avoir.
- Top motifs : les motifs les plus frequents (defaut, taille, changement d'avis…) pour reperer un probleme produit ou un litige recurrent.
- Tableau detaille (ticket retour, ticket vente, caissier, montant, mode, motif) + export CSV.
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).
Le bouton « ? » de la caisse
- 🎯 Visite guidee et ✅ Pour commencer : les premiers pas (1re vente, cloture Z).
- 💬 Assistant : posez la question en francais, arabe ou darija — il repond a partir de ce guide et cite les sections utilisees, cliquables. S'il repond qu'il est momentanement indisponible, ce n'est pas votre question : signalez-le, le guide n'est pas charge cote serveur.
- 📖 Guide complet v4.44 : ce guide, ouvert directement depuis la caisse — sans passer par le bureau ni ressaisir un mot de passe.
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).
Si le magasin a plusieurs caisses, un selecteur Caisse apparait sous le caissier (pre-selectionne sur la caisse memorisee par l'ordinateur, modifiable). Chaque caisse a son panier independant — voir M1C — Caisses (postes de vente).
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 ; un EPC est hexadecimal (chiffres ET lettres A–F)
- 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).
Retrouver le ticket d'un client qui revient payer v4.51
Le client revient avec son ticket : ouvrez Credits clients et scannez le code-barres imprime en bas du ticket. La ligne correspondante s'isole aussitot ➜ Encaisser.
STORE012026081500001 quand l'ecran affiche STORE-01-20260815-00001 : la recherche compare les deux formes. Vous pouvez aussi chercher par nom de client ou telephone.« Aucun credit ouvert pour… » ne veut pas dire que le scan a echoue : cet ecran ne liste que les dettes en cours. Un ticket deja solde n'y figure plus — retrouvez-le dans Ventes.
Retours en caisse
Rembourser un article vendu (depuis la caisse ou l'onglet Ventes)
- Acces direct depuis la caisse NOUVEAU : bouton « Retour / Echange » sur l'ecran d'encaissement (plus besoin d'ouvrir l'onglet Ventes). Il retrouve d'abord la vente d'origine — scan de l'etiquette RFID de l'article, ou recherche dans Ventes (numero de ticket ou article) si l'etiquette a ete retiree a la vente.
- Depuis l'onglet Ventes (le chemin d'une boutique en code-barres, ou quand l'etiquette a ete retiree) : retrouvez la ligne du ticket, cliquez « Detail » ➜ la fiche de la vente s'ouvre, et c'est elle qui porte les actions : 🖨 Reimprimer, ↩ Retour partiel, Annuler cette vente. Le bouton « Retour / Echange » de l'ecran caisse vous depose ici lorsque le poste n'a pas de lecteur RFID.
- Quantite a rendre : se choisit avec les boutons +/− — aucune quantite negative a saisir ; ou retour par EPC (Premium) : scanner la piece exacte.
- Choisir un motif (Defaut produit, Mauvaise taille, Changement d'avis, Autre).
- Mode de remboursement : Avoir (bon d'achat) par defaut recommande, ou Especes / Carte (CB). L'avoir limite la sortie de caisse, fidelise le client et reste tracable — le caissier peut basculer en especes/CB d'un clic (un rappel indique le mode d'origine de la vente).
- Valider (manager + PIN responsable) ➜ le stock est restitue (mouvement RETURN), la piece RFID repasse en stock, les points de fidelite sont ajustes, et un bon de retour est imprime sur l'imprimante ticket 80 mm (meme chemin direct que le ticket de vente — plus de long ruban navigateur).
defective_stock), jamais dans le stock vendable (stock_levels) : elle ne reapparait pas en rayon et ne peut pas etre revendue par erreur. Si l'article porte une etiquette RFID, sa piece passe au statut DEFECTUEUX (et items en QUARANTINE / DEFECTIVE) ; un mouvement RETURN_DEFECTIVE est ecrit pour l'audit et la valorisation de la perte. La piece reste alors disponible pour le SAV / retour fournisseur / casse. Le remboursement client reste normal (Avoir / Especes / CB). Case non cochee = retour classique ➜ l'unite repasse en stock vendable (mouvement RETURN, statut STOCK) et une etiquette est reimprimee.Avoir (bon d'achat) NOUVEAU
Un retour en mode Avoir (le mode par defaut) emet un bon d'achat anonyme (code AV-AAAAMMJJ-NNNN) imprime sur le bon de retour avec un code-barres scannable et valable 1 an — le client le depense lors d'un prochain achat, sans compte client. A ne pas confondre avec le N° du bon de retour (R-…) : c'est le code AV-… qui s'encaisse.
- Encaisser un avoir : a la fenetre de paiement, panneau Avoir / bon d'achat ➜ scanner le code-barres du bon (ou saisir le code
AV-…a la main) ➜ Appliquer. Le scan retrouve l'avoir meme si le code-barres encode la forme sans tirets. Le total a regler baisse d'autant ; le client ne paie que le reste. - Consommation partielle : si l'avoir vaut plus que l'achat, le solde restant reste sur l'avoir (toujours actif) et s'imprime sur le ticket ; s'il couvre tout, l'avoir passe utilise.
- L'avoir reduit le total comme un bon de fidelite — il est neutre en cloture (jamais compte deux fois). Une garde anti double-depense empeche d'utiliser deux fois le meme code.
Echange — rendre un article et en prendre un autre NOUVEAU
Depuis Ventes, bouton ⇆ Echange sur le ticket d'origine. L'echange enchaine automatiquement un retour (converti en avoir) puis une nouvelle vente :
- Choisir l'article rendu ➜ le remboursement est force en avoir ; valider (PIN responsable).
- Une banniere « Echange en cours » s'affiche ➜ scanner le(s) nouvel(s) article(s).
- Au paiement, l'avoir est applique automatiquement — on n'encaisse que la difference :
- le nouvel article coute plus ➜ le client paie la difference ;
- il coute moins ➜ le reste demeure un credit (avoir) que le client garde ;
- meme prix ➜ rien a payer.
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.
Cloture par caissier & numero Z NOUVEAU
La cloture est par caissier : chaque caissier cloture sa journee et obtient son rapport Z — c'est la responsabilite individuelle de son tiroir. Le theorique = fond de caisse + encaissements (especes / CB ventiles) − remboursements du mode correspondant − mouvements de caisse (voir ci-dessous). Deux caissiers sur la meme caisse ont chacun leur Z.
Échange : le bouton est sur l'écran de retour NOUVEAU — apres avoir coche les articles rendus, « ⇄ Echanger plutot que rembourser » bascule en echange sans rien refaire (un lien permet de revenir en arriere). Le montant rendu devient un avoir, applique tout de suite au nouvel article : le bandeau affiche le reste a payer article par article (« avoir 25,200 · panier 40,000 → reste a payer 14,800 DT »). Si le nouvel article vaut moins cher, la difference reste sur l'avoir — jamais en especes. Comptablement, un echange = un retour + un avoir + une vente, trois ecritures tracables — mais UN SEUL papier pour le client : le TICKET D'ECHANGE (articles rendus, articles pris, avoir deduit, reste a payer, et le solde d'avoir scannable s'il en reste). Le bon de retour n'est donc plus imprime separement ; si l'echange est annule ou interrompu, il s'imprime alors (a l'annulation, ou au demarrage suivant de la caisse) pour que le client ait toujours le document de ce qu'il a rendu.
Tickets en attente : la cloture est bloquee NOUVEAU — un ticket mis en attente est un panier sauvegarde, pas une vente : il n'apparait ni dans le Z, ni dans l'onglet Ventes, alors que la marchandise est deja sortie du rayon. Tant qu'il en reste un a votre nom, la cloture est refusee et un bandeau orange les liste (etiquette, articles, montant, anciennete) avant le comptage du tiroir. Tranchez pour chacun via « Reprendre un ticket » : l'encaisser, ou le reprendre puis annuler le panier — un responsable peut aussi le supprimer directement.
Mouvements de caisse & ouverture assistee NOUVEAU
Mouvements de caisse (especes). Pendant la journee, le caissier enregistre les sorties (depense, achat paye du tiroir, prelevement / depot en banque) et les entrees (apport / appoint de monnaie, acompte recu) via « + Ajouter » dans la page Cloture. Chaque mouvement ajuste le theorique especes — fini le faux « ecart de caisse » quand on sort 42 DT pour payer un fournisseur. Les mouvements du jour sont listes (avec le net), corrigeables tant que la caisse est ouverte, puis verrouilles a la cloture et repris sur le ticket Z et l'e-mail admin.
Ouverture assistee. A l'ouverture, l'ecran rappelle la derniere cloture et le montant theorique attendu dans le tiroir (especes comptees a la derniere cloture, pre-remplies comme fond propose), et permet d'ajouter une remarque d'ouverture. A la connexion, si la caisse n'est pas encore ouverte pour la journee, une banniere invite le caissier a l'ouvrir. Discipline stricte (v3.73) : ouvrir la caisse est desormais OBLIGATOIRE pour encaisser — une vente sans session ouverte est refusee (« Ouvrez d'abord votre caisse »), car chaque vente doit appartenir au ticket Z de son caissier.
Ticket Z enrichi & tracabilite des annulations NOUVEAU
Details suppressions. Chaque annulation de vente capture desormais un motif, l'auteur et l'heure ; le ticket Z (et le detail cote StockManager) liste ces suppressions du jour — controle anti-fraude, comme les registres classiques. Un compteur des annulations part aussi dans l'e-mail admin de cloture.
Repartitions. Le Z affiche en plus les ventes par heure (rush du service) et, en multi-caissiers, les ventes par caissier du magasin sur la journee.
Rouvrir une caisse apres cloture
Une fois le Z fait, la caisse est fermee. Pour reprendre les ventes : ecran caisse ➜ bouton Ouvrir la caisse ➜ ressaisir le fond de caisse. Le caissier qui s'etait deconnecte se reconnecte normalement et rouvre ainsi son service. Comme c'est une action sensible, rouvrir une caisse deja cloturee demande un PIN responsable (anti-fraude).
Panneau de supervision (manager) NOUVEAU
Dans la page Cloture du point de vente, un MANAGER dispose d'un panneau de supervision listant les Z de tous les caissiers de son magasin (lecture seule, limite a son magasin). Il suit qui a cloture et les ecarts, et peut rouvrir une caisse au besoin — sans se substituer au caissier : la responsabilite du Z reste individuelle.
Caisse partagee : garde d'ouverture & reprise superviseur v3.72
Une caisse ouverte par un caissier doit etre cloturee avant qu'un autre ne l'ouvre. Si Rahma a ouvert la caisse et part sans cloturer, Yessine qui tente d'ouvrir la meme caisse voit un message nominatif « Caisse ouverte par Rahma depuis 08:12 » — il ne peut pas creer une session parallele. Sans cette garde, les ventes du second caissier n'apparaissaient dans aucun ticket Z (chaque Z ne couvre que les ventes de SON caissier).
Caissier absent ? La « reprise de caisse ». Un superviseur (MANAGER/ADMIN, PIN) debloque la situation en ~30 secondes :
- Il compte le tiroir (comptage contradictoire : especes obligatoires, carte/cheques/bons si presents) ;
- La session de l'absent est cloturee avec un vrai Z (theorique de SON perimetre vs compte, ecart reel), marquee FORCEE et tracee (qui a valide, quand) ;
- Une session neuve s'ouvre pour le repreneur, fond = especes comptees — le tiroir repart propre, chaque caissier reste responsable de SON perimetre.
Reconciliation Z vs ventes (alertes) v3.72
La plateforme verifie en continu que chaque vente encaissee est couverte par un ticket Z :
- A chaque cloture : si d'autres ventes du jour ne sont couvertes par aucun Z, la reponse ET l'e-mail admin le signalent (section rouge, caissier + montant) ;
- Bandeau supervision : la page Clotures (StockManager) et le panneau manager (POS) affichent « ⚠ Ventes non couvertes par un ticket Z » + les sessions de jours passes restees ouvertes ;
- Controle quotidien automatique : chaque matin, la veille est reconciliee sur tous les comptes — anomalie ➜ e-mail ADMIN/MANAGER (1 max par jour) avec le detail par caissier/caisse.
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.
Etiquette d'un autre magasin refusee (multi-magasin) NOUVEAU
Une etiquette RFID rattachee a un AUTRE magasin ne peut pas etre vendue sur cette caisse : le POS la refuse avec un message clair (anti survente fantome). Le selecteur « Choisir la copie #N » ne propose que les unites du magasin de la caisse ouverte.
Workflow Metier Complet — 9 Phases
Ce parcours suit le workflow reel d'un magasin de detail de bout en bout en 9 phases : 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 ➜ bouton « Retour / Echange » (ecran caisse) ou page Retours ➜ retrouver le ticket d'origine (scan de l'etiquette, ou recherche par numero)
- Retour par quantite : selectionner Polo Premium L-NOIR, quantite
1 - Motif : Defectueux ➜ cocher la case « Article defectueux » : la piece partira en quarantaine SAV (stock isole), pas en rayon
- Valider (PIN responsable) ➜ remboursement 79.000 DT ; le client est rembourse normalement, mais l'unite defectueuse ne redevient PAS vendable
- Verifier l'ajustement fidelite d'Ahmed (points proportionnels retires)
- StockManager ➜ Stock & Mouvements ➜ un mouvement RETURN (+1) est trace
Checkpoint
- Le stock vendable de Polo Premium L-NOIR n'augmente pas (l'unite part en stock defectueux isole / quarantaine SAV)
- 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
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 facture (IA)" — l'IA vision extrait lignes, prix et codes-barres EAN (vérifiés par clé de contrôle : un EAN douteux est vidé, jamais importé faux). Détecte signature / tampon (bandeau « validé / non signé ») et la pagination (« Page 1/6 » ➜ alerte pages manquantes). Les lignes à confiance < 60 % sont décochées par défaut : vérifiez puis recochez. Limite : 5 extractions/min/utilisateur.
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.
Regler des milliers de variantes dans l'ecran est impraticable. Trois boutons apparaissent donc a cote de « Parcourir & selectionner SKUs ».
Exporter le catalogue telecharge toutes vos variantes deja renseignees — code-barres, taille, couleur, designation, famille, rayon, fournisseur, prix et stock — avec les colonnes de taux a remplir. Une feuille Groupes montre ou est le volume : sur un catalogue de 3 771 variantes, la famille la plus fournie en porte pres de 2 000. Quatre lignes de regles couvrent alors ce que 3 000 lignes d'articles demanderaient.
Exporter la campagne sort la campagne telle qu'elle est configuree, ses articles cibles et leurs taux. C'est le voyage retour — on relit, on corrige, on recharge — et c'est aussi votre sauvegarde hors application, ce qui manquait quand une demarque ramenee a 0 a efface 2199 taux.
Importer les taux recharge un classeur rempli. Un apercu annonce d'abord combien d'articles recevraient un taux, par regle et par ligne, combien d'exclusions, et quelles lignes n'ont pas ete reconnues — nommement. Rien n'est ecrit avant votre accord.
Deux points a retenir sur le fichier. Une cellule de taux laissee VIDE signifie « cet article suit la regle de son groupe » : ce n'est pas 0 %, qui laisserait l'article au prix catalogue. Et ne modifiez ni le code-barres ni le code article : ce sont les cles d'identification. Les articles sans code-barres sont retrouves par code + taille + couleur.
Le chargement se fait sur une campagne en brouillon. Une campagne en cours n'est jamais modifiee : ses prix sont affiches en rayon.
Guide mis a jour le 17 aout 2026 — v4.58 : « Appliquer % en bloc » s'ouvre enfin devant vous.
Dans l'atelier « Parcourir & selectionner SKUs », cliquer « Appliquer % en bloc » ne montrait rien. La fenetre de saisie du pourcentage n'apparaissait qu'apres avoir ferme l'atelier : elle s'etait bien ouverte, mais derriere lui. Vu du comptoir, le bouton semblait mort.
Elle s'ouvre desormais par-dessus, immediatement, avec le champ pret a la saisie. Et la regle vaut pour toutes les fenetres ouvertes depuis une autre : la derniere ouverte passe devant, quel que soit l'ordre des gestes. Huit fenetres de l'application etaient exposees au meme defaut.
Guide mis a jour le 17 aout 2026 — v4.57 : Le journal des prix dit enfin ce qui a ete encaisse.
Le journal des prix — le document exigible en cas de controle (loi 1998 art. 23) — n'enregistrait que le prix calcule sur la demarque. Des qu'une remise venait d'un taux par article ou d'un taux propre a un magasin, la trace ne correspondait donc pas au prix reellement pratique.
Deux consequences. Votre trace legale etait inexacte. Et surtout, la configuration devenait irrecuperable : une campagne dont la demarque avait ete ramenee a 0 laissait 2199 articles marques « aucune remise », et les taux par lot reellement saisis n'existaient plus nulle part.
Le journal enregistre desormais le taux lui-meme, le magasin concerne et l'origine de la remise : taux article, taux magasin, demarque, ou article exclu — un article volontairement retire des soldes ne se confond plus avec un article tarife a part. La configuration d'une operation passee se reconstruit donc a l'identique, et « Reprendre les taux » relit le taux au lieu de le deviner.
L'avertissement arrive au moment ou la perte se produit. Enregistrer une campagne qui laisserait des articles au prix catalogue le dit tout de suite, en les nommant — jusqu'ici le defaut n'apparaissait qu'a l'activation, une fois la configuration d'origine perdue. C'est un avertissement, pas un refus : on configure souvent en plusieurs passes.
Et l'atelier dit d'ou vient chaque taux. Sous chaque valeur, une mention taux article, taux magasin ou demarque. Un « 0 % » propre a un article et un « 0 % » herite d'une demarque vide etaient indiscernables : c'est ce qui a fait prendre une campagne vide pour une campagne configuree.
Guide mis a jour le 17 aout 2026 — v4.56 : Recuperer les taux d'une operation passee.
Une campagne de soldes annulee par erreur, dupliquee pour repartir : les taux par article etaient bien copies — et tous a 0 %, la demarque aussi. Rien ne remisait, l'activation refusait a juste titre, et les remises reellement pratiquees pendant l'operation n'existaient plus dans la fiche de campagne.
Elles survivaient a un seul endroit : le journal des prix. A chaque activation, la plateforme y inscrit pour chaque article le prix avant et le prix apres — c'est ce que le ministere du Commerce peut exiger, et c'est aussi une memoire exploitable.
Nouveau bouton « Reprendre les taux » sur toute campagne en brouillon : choisissez l'operation passee, un apercu annonce ce qui sera repris, ce qui reste tel quel et ce qui n'a aucune trace, puis vous validez. Le taux est deduit du prix : un pourcentage s'il reproduit exactement le prix pratique, sinon un prix impose — jamais un arrondi qui decalerait les prix de quelques millimes sur des milliers d'articles. Un article dont le prix catalogue a change depuis est signale. Un taux que vous avez saisi a la main n'est jamais ecrase, et une campagne en cours n'est jamais touchee.
Deux corrections au passage. Le message de refus disait « 2199 taux par article seulement pour 2199 articles cibles » — deux nombres egaux, ce qui laissait croire la configuration complete. Il distingue desormais les taux qui remisent de ceux qui sont simplement presents, et annonce « tous a 0 » quand c'est le cas. Et l'atelier « Parcourir & selectionner SKUs » accepte un magasin : il affichait les prix de la demarque, donc pas ceux du comptoir dans une boutique au taux surcharge ; a defaut de magasin choisi, il signale l'existence de ces surcharges au lieu de laisser croire le contraire.
Guide mis a jour le 17 aout 2026 — v4.55 : Une remise reglee sur le magasin compte comme une remise.
Activer une campagne repondait « N article(s) cible(s) n'ont AUCUNE remise et sortiraient au prix catalogue » sur une operation qui remisait pourtant parfaitement en caisse. Aucun recours : ce controle ne se contourne pas.
La cause. Une campagne peut porter un taux propre a un magasin, qui remplace celui de la demarque — c'est ce que la caisse applique. Le controle d'activation, lui, ne regardait que la demarque et les taux par article. Sur une operation reglee « demarque a 0 %, −20 % sur la boutique », il voyait 0 % et bloquait tout.
Le meme oubli faussait les etiquettes, et c'est plus grave : elles annoncaient 0 % pendant que la caisse encaissait −20 %. Un prix affiche faux n'est pas un detail (loi 1998 art. 23). Les deux lisent desormais le taux du magasin.
Le controle garde toute sa raison d'etre — et gagne un cas qu'il manquait : si une boutique surcharge la demarque a 0 %, ses clients paieraient plein tarif pendant les soldes ; c'est maintenant signale, en nommant le magasin.
Et le message dit enfin pourquoi. Il annonce combien de taux par article existent face au nombre d'articles cibles, et si aucun n'est present il pointe la cause la plus probable : une campagne dupliquee avant le correctif du 16/08, dont les taux n'avaient pas ete repris. Dans ce cas, supprimez la copie et dupliquez de nouveau l'originale.
Guide mis a jour le 16 aout 2026 — v4.54 : Dupliquer une campagne emporte enfin les taux par article.
Une campagne annulee ne se reactive pas : on la duplique. La copie paraissait complete — memes cibles, memes demarques, meme site. Elle ne l'etait pas : les taux regles article par article dans l'atelier (« Parcourir & selectionner SKUs ») n'etaient pas repris, ni les exclusions.
Ce que ca donnait au comptoir. La caisse retombait sur le taux de la demarque : un article regle a −40 % sortait a −20 %, et surtout un article volontairement EXCLU redevenait solde. Rien ne le signalait — le controle qui bloque l'activation ne se declenche que si la demarque est a 0 %. La difference se decouvrait a la vente.
La copie emporte desormais ces taux et ces exclusions, chacun rattache a la bonne demarque de la nouvelle campagne. Le message de confirmation annonce combien de taux ont ete repris — et vous alerte si la reprise a echoue, au lieu de vous laisser le decouvrir en caisse.
Rappel qui n'a pas change : seules les dates sont remises a zero (aujourd'hui ➜ +14 jours). Ajustez-les avant d'activer, sinon l'operation tournera plus longtemps que prevu.
Guide mis a jour le 16 aout 2026 — v4.53 : « Demande d'appro » rejoint le groupe Stock.
L'onglet etait range sous Achats. Ce n'en est pourtant pas un : une demande d'appro ne commande rien a un fournisseur, elle tire de la marchandise d'un autre magasin ou du depot et debouche sur un bon de transfert.
Il passe donc dans le groupe Stock, juste avant Transferts — a cote de ce qu'il declenche, dans l'ordre ou le travail se fait : je constate le manque (Stock), je compte (Inventaire), je demande (Demande d'appro), la marchandise circule (Transferts), j'enregistre les ecarts (Incidents).
Rien d'autre ne change : meme page, memes droits, meme pastille de demandes en attente. Seule sa place dans le menu bouge.
Guide mis a jour le 16 aout 2026 — v4.52 : Le code-barres du bon de retour redevient lisible.
Le code-barres imprime en bas d'un bon de retour ne se scannait pas. Il etait pourtant bien imprime et parfaitement valide — il etait simplement trop fin.
La cause tenait a un seul caractere. Un bon de retour est numerote
R- suivi du numero de vente, soit un caractere de plus qu'un ticket ordinaire. C'est ce caractere qui faisait passer la largeur des barres sous le seuil de lecture : 0,224 mm la ou une douchette en exige 0,250, et le papier thermique elargit encore les barres a l'impression. Un ticket de vente ou de credit, lui, passait de justesse — d'ou l'impression que « le scan marche sauf pour les retours ».Les chiffres sont desormais codes deux par deux (jeu C du CODE128) au lieu d'un par un, et le code utilise toute la largeur du ticket au lieu d'etre bride. Les barres passent a 0,303 mm, au-dessus de la norme, sur un code plus court et plus lisible.
Rien a changer de votre cote : c'est la meme symbologie, la douchette lit exactement le meme numero, et la recherche fonctionne a l'identique. Les bons d'achat (avoirs) et les tickets de vente beneficient du meme gain.
Guide mis a jour le 16 aout 2026 — v4.51 : La douchette est rattrapee, ou que soit le curseur.
Sur l'ecran Credits clients de la caisse, scanner le code-barres du ticket d'un client venu payer sa dette ne donnait rien : pas un caractere dans la barre de recherche, pas de message. La lecture etait pourtant bonne.
Une douchette est un clavier : elle « tape » la ou se trouve le curseur. L'ecran ne placait le curseur dans la recherche qu'a son ouverture — or le caissier clique presque toujours avant de scanner : une ligne du tableau, « Actualiser », ou simplement la fermeture de la fenetre d'encaissement precedente. Le scan partait alors dans le vide. L'ecran de vente n'a jamais eu ce defaut, ce qui rendait la panne d'autant plus deroutante.
Toute lecture est desormais ramenee dans la barre de recherche, ou que vous en soyez sur l'ecran — et il en va de meme si vous commencez a taper au clavier, sans cliquer d'abord dans le champ. Pendant une fenetre d'encaissement, rien n'est detourne : les montants et numeros de cheque que vous tapez restent ou vous les tapez, et les touches
Echap, F3, F9 gardent leur role.Rappel utile : « Aucun credit ouvert pour… » ne signifie pas que le scan a echoue. Cet ecran ne liste que les dettes en cours ; un ticket deja solde se retrouve dans Ventes.
Au passage, la fenetre de PIN responsable ne perd plus les premieres frappes. Elle s'affichait un court instant avant de placer le curseur dans son champ : tape tres vite, le debut du PIN pouvait s'inscrire en clair dans la barre de recherche restee derriere, et la fenetre ne recevoir que la fin. Le curseur est desormais retire de l'ecran des l'ouverture.
Guide mis a jour le 15 aout 2026 — v4.50 : Le menu se range par metier.
La barre de gauche alignait 29 onglets sous quatre titres, dont un seul — « Principal » — en couvrait 23. Retrouver « Comptes clients B2B » entre « Factures clients » et « Inventaire » demandait de lire toute la colonne.
Cinq groupes repliables, ranges dans l'ordre ou la marchandise traverse la boutique : Pilotage (tableau de bord, objectifs), Catalogue (articles, etiquetage, soldes), Achats (bons de livraison, fournisseurs, demande d'appro), Ventes (ventes, retours, clôtures, factures clients) et Stock (mouvements, inventaire, transferts, ecarts). Un seul groupe reste ouvert a la fois : la barre tient desormais dans l'ecran, sans defilement.
Le groupe que vous laissez ouvert est retenu d'une session a l'autre. Et si vous ouvrez une page par un lien direct, son groupe s'ouvre tout seul — l'onglet en cours n'est jamais cache.
Chaque groupe porte un filet de couleur pour le reperer d'un coup d'oeil. L'indicateur de l'onglet ouvert garde sa couleur habituelle : « ou je suis » et « de quelle famille » restent deux informations distinctes.
Reglages, Aide et le lien vers la caisse descendent en bas de barre, hors des groupes : ce qui se regle une fois ne doit pas encombrer le chemin de celui qui vend.
Rien n'a change d'emplacement dans l'application : memes pages, memes droits. Un groupe dont vous n'avez aucun onglet — parce que votre offre ou votre profil ne l'inclut pas — ne s'affiche pas du tout, plutot que de s'ouvrir sur du vide.
Guide mis a jour le 15 aout 2026 — v4.49 : La reprise de caisse exige un vrai comptage.
Reprendre une caisse cloture de force la session du caissier absent, avec un ticket Z fige a son nom. Le champ « Especes comptees » etait pre-rempli a 0,000 et accepte sans un mot : valider sans compter suffisait a inscrire un manquant de plusieurs centaines de dinars au nom de quelqu'un qui n'avait rien fait. Un Z arrete ne se reecrit pas.
Le champ n'est plus pre-rempli : le montant se tape. Et si le comptage s'ecarte de plus de 20 DT du theorique de la session reprise, l'ecran refuse une premiere fois et affiche les deux montants, en nommant la personne dont le Z va etre fige. Vous pouvez confirmer : un ecart reel existe, c'est meme la raison d'etre du comptage contradictoire.
Le montant attendu n'est PAS affiche avant votre saisie, et c'est volontaire : un comptage contradictoire doit rester aveugle, sinon on recopie le chiffre du logiciel et le controle ne vaut plus rien. La confrontation vient apres.
Guide mis a jour le 15 aout 2026 — v4.48 : Une depense se saisit sur le tiroir d'ou l'argent sort.
Pour sortir de l'argent de la caisse, seul un responsable pouvait enregistrer le mouvement. Un responsable qui ne tient pas de tiroir n'avait alors qu'un chemin apparent : reprendre la caisse du caissier en poste. Or reprendre une caisse la cloture de force, avec le comptage saisi par le repreneur — et la depense s'impute ensuite sur le tiroir du repreneur, pas sur celui d'ou l'argent est reellement sorti.
Consequences vecues : un ticket Z fige au nom du caissier avec un ecart qui n'etait pas le sien, et une depense invisible du theorique du bon tiroir. Le caissier apparait en manque le soir, sans avoir rien fait.
Le panneau « Mouvements de caisse » de l'onglet Cloture est desormais visible par le caissier, pour SON tiroir uniquement. Il saisit la depense, et une fenetre lui demande le PIN d'un responsable pour valider. Le montant sort du bon tiroir, le bon porte le nom du responsable qui a autorise, et le caissier n'a plus a se deconnecter.
Le controle est intact. Sans PIN, rien ne s'enregistre : un caissier ne peut toujours pas faire baisser son propre theorique tout seul — c'est ce qui revelerait un manquant. Restent reserves au responsable : supprimer un mouvement et ouvrir le tiroir hors vente.
Rappel : la reprise de caisse garde son usage — un caissier parti sans cloturer. Elle demande un comptage reel du tiroir ; y laisser 0 fige un ecart au nom du caissier sortant.
Guide mis a jour le 15 aout 2026 — v4.47 : Encaisser une dette : on voit ce qu'on tape, et le rendu se calcule.
Sur l'ecran Credits clients de la caisse, la barre de recherche paraissait desactivee : le caissier tapait un numero de ticket, scannait un code-barres, et rien ne s'affichait. Le champ fonctionnait pourtant — son texte etait simplement ecrit en blanc sur fond blanc, un reliquat de l'ancien theme sombre. La recherche par numero de ticket, nom de client ou telephone, au clavier comme a la douchette, est de nouveau lisible.
Le rendu de monnaie arrive dans l'encaissement d'une dette. Jusqu'ici la fenetre n'affichait que le montant a imputer sur la dette : pour 65,200 DT dus, un client qui tend un billet de 100 obligeait le caissier a calculer de tete, au comptoir. Un champ « Especes recues du client », facultatif, affiche desormais le Rendu monnaie — ici 34,800 DT.
Ce champ ne change rien a ce qui est enregistre : la dette reglee reste 65,200 DT, et la monnaie ressort du tiroir a part. C'est une aide au comptoir, pas un montant encaisse. Il n'apparait que pour les especes et le mixte (sur la seule part especes) : une carte ou un cheque se reglent au centime. Si le montant annonce est inferieur a ce qui est encaisse, l'ecran affiche le manque sans bloquer.
Au passage : la projection « apres cet encaissement, il restera… » ne se mettait a jour qu'en mode Mixte. Elle suit desormais aussi le montant saisi en especes.
Guide mis a jour le 14 aout 2026 — v4.46 : L'offre commande ce que l'application ouvre.
Deux lignes de produit, comme sur le site : Code-barres (Comptoir, Enseigne, Groupe) et Premium RFID (Intégral). Jusqu'ici la distinction n'existait qu'à l'affichage : un client code-barres recevait l'application avec tout le RFID ouvert.
Ce qui change pour un nouveau client code-barres : l'étiquetage RFID, le remplacement d'étiquette et les postes RFID n'apparaissent plus. L'import de facture par photo devient une fonction des offres Groupe et Intégral. Le plafond de boutiques annonce désormais quelle offre le lève.
Rien ne change pour les clients en place. Les offres historiques conservent exactement les accès qu'elles avaient ; la dérivation ne s'applique qu'aux nouveaux comptes et aux changements d'offre. Le superadmin peut toujours déroger, locataire par locataire.
Retrait : le module Veille & Sourcing IA n'est plus commercialisé. Il disparaît des offres et de l'application ; il reste activable au cas par cas depuis la fiche du superadmin. L'assistant du bouton « ? » et l'agent RFID ZD621R, eux, sont inchangés.
Guide mis a jour le 14 aout 2026 — v4.45 : L'ecran de connexion suit la langue du site.
Le site tunirfid.app se lit en francais, en anglais et en arabe. Quelle que soit la langue choisie, cliquer sur Connexion ouvrait un formulaire francais : la seule page ou il faut taper quelque chose etait la seule qu'on ne comprenait pas forcement.
La connexion et la creation de compte s'affichent desormais dans la langue du site, l'arabe de droite a gauche. Un selecteur Francais · English · ع figure sur les deux pages — indispensable pour qui arrive par un favori sans passer par le site. Le choix est memorise et alimente la visite guidee et l'assistant.
Ce qui ne change pas : l'interieur de l'application reste en francais.
Guide mis a jour le 14 aout 2026 — v4.44 : L'assistant de la caisse repond de nouveau — et le guide s'ouvre depuis la caisse.
L'assistant du POS repondait « je n'ai pas trouvé cette information dans le guide » à toute question. En cause : le guide, dont il tire ses réponses, n'était pas embarqué dans l'application caisse. Il l'est désormais, et les sections citées sous chaque réponse s'ouvrent (elles menaient nulle part).
Nouveau : le menu « ? » de la caisse propose 📖 Guide complet, en français et en arabe.
À savoir : si l'assistant se dit momentanément indisponible, c'est lui qui est en panne, pas votre question — il ne fait plus semblant de chercher.
Guide mis a jour le 13 aout 2026 — v4.43 : Le bouton « Détail » de la caisse rouvre la fiche de vente.
Dans l'onglet Ventes de la caisse, cliquer sur Détail ne produisait rien : ni fiche, ni message. Le bouton est réparé.
Ce que cela débloque, au-delà de l'affichage. La fiche de vente est l'endroit où vivent 🖨 Réimprimer, ↩ Retour partiel et Annuler cette vente. Sur un poste sans lecteur RFID, le bouton « Retour / Échange » de l'écran d'encaissement dépose justement le caissier dans cette liste pour qu'il y retrouve le ticket : les trois actions étaient donc, en pratique, hors d'atteinte. La marche à suivre est désormais écrite dans Retours en caisse.
Au passage : sur une vente déjà annulée, « Retour partiel » disparaît de la fiche au lieu de mener à un refus.
Guide mis a jour le 13 aout 2026 — v4.42 : L'annuaire se cloisonne comme les données.
Le rattachement d'un utilisateur à sa société protégeait bien les données : un administrateur rattaché se voyait refuser le stock, les ventes, le tableau de bord et les transferts des magasins des autres sociétés. Mais l'annuaire, lui, restait ouvert : dans Paramètres, il lisait encore la liste complète des magasins du groupe et la liste complète des sociétés. Il ne pouvait rien en ouvrir — il savait seulement qu'elles existaient, avec leurs noms et leurs villes. Pour une enseigne à plusieurs entités, c'est déjà une information de trop.
Les deux listes respectent désormais le rattachement. Si vous n'avez qu'une société, ou si vous n'avez rattaché personne — l'état de tous les comptes existants — rien ne change : vous continuez de tout voir.
Une exception, volontaire. Le sélecteur de destination d'un transfert propose toujours les magasins du groupe entier. Un mouvement entre deux sociétés est un cas métier courant ; ce qui est gardé, c'est l'écriture, pas le nom de la destination.
Au passage : la colonne Société de la liste des magasins affichait « — » sur toutes les lignes, même quand le rattachement existait. Elle affiche maintenant la société réelle.
Guide mis a jour le 12 aout 2026 — v4.41 : Rattacher un utilisateur a sa société.
Un groupe de plusieurs sociétés pouvait déjà les déclarer et y rattacher ses magasins. Mais le cloisonnement des personnes — « l'administrateur de ZEDD ne voit pas ESP » — existait uniquement côté serveur : aucun écran ne permettait de le configurer. La fiche utilisateur comporte désormais un champ Société de rattachement.
Il n'apparaît qu'à partir de deux sociétés. Si vous n'en avez qu'une, rien ne change et rien ne s'affiche.
Un utilisateur rattaché ne voit plus que les magasins de sa société, et les utilisateurs des autres sociétés lui sont annoncés « introuvables » — il ne peut ni les renommer, ni changer leur rôle, ni réinitialiser leur PIN. La liste filtrait, mais ces gestes-là passaient encore : un cloisonnement à moitié posé n'en est pas un.
Deux refus volontaires. On ne modifie pas son propre rattachement, et un administrateur déjà rattaché ne dispose que de sa société — sans quoi il fabriquerait un administrateur de groupe en détachant quelqu'un.
Une société inconnue est refusée : un rattachement invalide ne donnerait pas « aucune limite » mais aucun accès, sans message. C'est la panne la plus difficile à diagnostiquer, elle est fermée à la saisie.
Guide mis a jour le 12 aout 2026 — v4.40 : Chaque installation reste chez elle.
Certaines enseignes disposent de leur propre installation, avec leurs adresses dédiées, séparée de l'installation partagée. Quatre boutons ne le savaient pas : ils visaient l'adresse de l'installation partagée, écrite en dur.
Ce qui ne marchait pas sur une installation dédiée :
• l'impression directe des tickets — la caisse cherchait le relais d'impression à une adresse qui ne le sert pas. Le bandeau vert « imprimante directe » n'apparaissait jamais et chaque ticket repassait par la boîte de dialogue de Chrome. Tout le routage par caisse était inerte avec lui ;
• le téléchargement de l'agent — le bouton ne téléchargeait rien, et la ligne « version proposée » restait vide ;
• le bouton soldes de la caisse — il rouvrait la caisse dans un nouvel onglet, tout en affichant « Création disponible dans Stock Manager ». L'écran disait le contraire de ce qu'il faisait ;
• le bouton Point de Vente du Stock Manager — celui-là n'était pas seulement inopérant : il ouvrait la caisse d'une autre enseigne.
Les quatre suivent désormais la même règle, celle déjà appliquée à la connexion : on reste sur son installation. Rien ne change si vous êtes sur l'installation partagée.
Au passage : le raccourci Chrome proposé dans Configuration imprimante affiche maintenant votre adresse. Il en nommait une autre — le raccourci créé sur le bureau menait chez un autre client.
Guide mis a jour le 12 aout 2026 — v4.39 : L'historique de caisse s'ouvre sur une période.
L'onglet Ventes de la caisse ne savait afficher qu'une journée. Retrouver le ticket d'un article rapporté la semaine suivante obligeait à ouvrir les jours un par un — et à savoir lequel.
Deux dates au lieu d'une. Le champ de gauche est le début, celui de droite la fin. Laissez la fin vide et rien ne change : c'est la journée du jour, comme avant. Trois raccourcis — Jour, 7 j, Mois — couvrent les demandes courantes.
Une colonne Date apparaît dès que la liste couvre plusieurs jours. Sans elle, deux tickets de 14 h 30 seraient indiscernables ; sur une seule journée elle reste masquée, puisqu'elle répéterait la même valeur.
Et l'écran dit s'il en cache. Au-delà de 200 tickets, un bandeau ambre annonce « 200 ventes affichées sur 743 — resserrez la période ou filtrez par article ». Sur une journée la question ne se posait pas ; sur un mois, se taire ferait lire « voici les ventes » à un extrait — et le ticket cherché resterait invisible.
Si vous saisissez une fin antérieure au début, l'écran recadre la date au lieu de vous montrer une liste vide qui se lirait « aucune vente ».
Le filtre par article fonctionne sur la période entière : c'est le chemin le plus court vers un retour sans ticket.
Guide mis a jour le 12 aout 2026 — v4.38 : La caisse dit combien de clients correspondent.
Le champ client de la caisse cherchait déjà au fur et à mesure de la frappe — il n'avait pas le défaut de la liste déroulante corrigé en v4.37. Mais il affichait huit résultats sans jamais dire combien il en existait. Avec trente-trois « Abbes » au fichier, le caissier en voyait huit et croyait les avoir tous vus : la vente partait sur le mauvais compte fidélité, et ça ne se rattrape qu'à la main.
La liste annonce désormais « 8 sur 33 — précisez votre recherche ». Quand tout tient, aucune mention : pas de bruit inutile.
Le clavier suffit. Flèches haut/bas pour parcourir les résultats, Entrée pour retenir le client, Échap pour refermer — sans lâcher la douchette pour la souris.
Et la caisse cherche comme le reste du logiciel. Sa recherche ignorait l'e-mail et la raison sociale, que l'écran Factures clients, lui, interrogeait : un client trouvé d'un côté restait introuvable de l'autre, sur le même fichier. Les deux écrans posent maintenant la même question.
Guide mis a jour le 12 aout 2026 — v4.37 : Retrouver un client parmi des milliers.
Sur un fichier de 6 901 clients, la liste déroulante « Client » des Bons de livraison et des Factures clients n'en proposait que 50 — les cinquante premiers par ordre alphabétique. Et rien ne le disait : on faisait défiler à la recherche d'un client qui n'était tout simplement pas dans la liste.
Le champ Client se tape maintenant au lieu de se dérouler. Écrivez un nom, un prénom, un code client, un numéro de téléphone ou un e-mail : les correspondances s'affichent au fur et à mesure, tirées de la totalité du fichier. Flèches haut/bas pour parcourir, Entrée pour choisir, Échap pour refermer.
Le compteur ne ment pas. Sous les résultats, l'écran affiche par exemple « 20 sur 6 901 — précisez votre recherche ». C'est délibéré : montrer vingt lignes sans dire qu'il en existe des milliers reproduirait exactement le défaut qu'on corrige.
Le même champ équipe les filtres des deux écrans (laisser vide = tous les clients) et la création rapide d'un client depuis un bon de livraison : le client créé est sélectionné immédiatement.
À savoir si vous cherchez une société : la recherche couvre désormais aussi la raison sociale. Elle en était absente alors que c'est le nom affiché pour un client professionnel — on ne trouvait pas ce qu'on lisait à l'écran.
Guide mis a jour le 12 aout 2026 — v4.36 : Le guide ne recopie plus les chiffres qu'il ne peut pas suivre.
Il annonçait l'agent d'impression à « ≈ 12 MB ». Le fichier en pèse 33 : le chiffre datait d'un agent d'avant plusieurs bibliothèques ajoutées depuis, et personne n'avait rouvert la phrase. Il nommait aussi un bouton, « Telecharger TuniRFID Agent », qui n'existe plus à l'écran.
La fenêtre d'installation affiche désormais le poids à côté de la version — « v2.10 · 33 Mo » — lu sur le fichier lui-même, en caisse comme dans l'étiquetage. Le guide y renvoie au lieu de répéter un nombre : c'est la seule façon qu'il ne se périme plus. Réécrire « 33 Mo » n'aurait fait que décaler l'erreur d'une livraison.
La consigne « lancer la v2.2 ou plus » disparait également : elle présentait comme suffisante une version vieille de huit livraisons, qui ne se met pas à jour toute seule. À la place, la fenêtre compare votre version à celle du serveur et vous dit quoi faire.
Guide mis a jour le 12 aout 2026 — v4.35 : La liste « poste d'impression » apparaît enfin.
La version 4.30 annonçait une liste déroulante « poste d'impression » sur chaque ligne de caisse, dans Paramètres → Magasins → Caisses. Elle n'apparaîssait pour personne — pas même pour un administrateur.
La cause : l'écran regardait le mauvais compte. Il exigeait la session code + PIN interne (celle de la gestion des utilisateurs) au lieu du compte avec lequel vous êtes connecté — celui affiché en haut à droite. Résultat : aucune liste, et pas davantage le message qui aurait expliqué l'écran vide.
Désormais, si vous êtes administrateur, vous voyez la liste. Et si aucun poste n'est encore connu, un encart ambre vous dit quoi faire : lancer l'agent TuniRFID sur la machine de la caisse, il apparaîtra ici dès sa première connexion.
Si vous ne voyez toujours rien après cette mise à jour : rechargez la page une fois (Ctrl+F5) — un onglet resté ouvert continue d'afficher l'ancienne version.
Guide mis a jour le 12 aout 2026 — v4.34 : Savoir quelle version de l'agent d'impression vous avez.
La fenêtre d'installation de l'agent — Étiquetage code à barres, bouton « ℹ Agent », et son équivalent en caisse — ne disait aucun numéro de version. Impossible de savoir ce qu'on installait, ni si l'agent déjà en place était périmé. Au téléphone, la question revenait à chaque dépannage.
La fenêtre annonce désormais deux choses : la version proposée au téléchargement, et celle installée sur cet ordinateur. Quand les deux coïncident, elle affiche « ✓ à jour ». La bandeau vert de l'écran porte aussi le numéro : « Agent v2.10 connecté ».
La distinction qui compte : la mise à jour automatique n'existe qu'à partir de la v2.5. En dessous — et pour un agent si ancien qu'il n'annonce même pas sa version — l'écran vous dit de télécharger le fichier et de remplacer l'ancien, au lieu de vous laisser attendre une mise à jour qui ne viendra jamais.
Deux mensonges corrigés au passage :
• la fenêtre affichait « ⚠ Fichier non encore déployé sur ce serveur » en permanence, alors que le fichier était bien là — sa vérification interrogeait le serveur d'une façon qu'il refusait ;
• en caisse, le bouton de mise à jour annonçait « (v2.2) », un numéro écrit en dur et faux depuis huit versions.
Guide mis a jour le 12 aout 2026 — v4.33 : L'agent d'impression n'a plus besoin du PC pour reconnaître le serveur.
Sur certains postes Windows, l'agent refusait de se connecter avec un message de certificat expiré — alors que le certificat du site est parfaitement valide et que le navigateur de la même machine passait sans broncher. La cause n'était pas le serveur : c'était la liste des autorités de certification du PC, jamais mise à jour.
L'agent embarque désormais sa propre liste (version 2.10). Il ne dépend plus de l'état du poste sur lequel il tourne, et se met à jour tout seul comme d'habitude.
Pourquoi cela comptait. Le contournement évident — passer l'adresse du relais de
wss:// à ws:// — fait circuler la clé de la boutique en clair sur le réseau, pour un défaut qui n'a rien à voir avec le serveur. Si un poste a été basculé ainsi, remettez wss:// après la mise à jour : le fichier de configuration distribué par le bouton « Config relay » l'a toujours écrit correctement.Rien à faire si vos impressions fonctionnent : ce défaut ne touche que les postes dont le magasin de certificats est périmé.
Guide mis a jour le 11 aout 2026 — v4.32 : Choisir sur quel poste sortent vos étiquettes.
Le ticket de caisse sait déjà retrouver l'imprimante de SA caisse. L'étiquette, elle, part d'un écran — et un écran peut être n'importe où dans la boutique.
Avec un seul poste, rien ne change : aucune question, aucun réglage. À partir de deux, l'encart de l'agent affiche « 🖨 Imprimer sur : » avec la liste des postes connectés, et un repère ambre « non choisi » tant que vous n'avez pas tranché. Le choix est mémorisé sur cet ordinateur — chaque poste garde le sien.
Si vous imprimez sans avoir choisi, le logiciel ne devine pas : il vous pose la question avant d'envoyer quoi que ce soit. Une étiquette sortie sur l'imprimante d'à côté ne se rattrape pas.
L'imprimante sélectionnée est retenue PAR POSTE. Un nom d'imprimante n'existe que sur sa machine : mémoriser « XP-80C » pour tout le monde enverrait les jobs vers une imprimante introuvable, avec une erreur incompréhensible.
Les accusés d'impression ne se mélangent plus. Le résultat d'un envoi revient désormais à l'écran qui l'a lancé, et à lui seul. Avant, deux écrans ouverts se renvoyaient mutuellement leurs compteurs et leurs erreurs.
Guide mis a jour le 11 aout 2026 — v4.31 : Choisir son imprimante d'étiquettes refonctionne.
La v4.29 annonçait que changer l'imprimante d'un poste depuis un autre écran était refusé. La règle était trop large : elle refusait aussi le cas où un seul poste est connecté — c'est-à-dire la situation de presque toutes les boutiques. Résultat : dans Étiquetage, choisir son imprimante répondait « choisissez d'abord le poste d'impression » alors qu'il n'y en avait qu'un.
La bonne règle : le refus ne protège que d'une ambiguïté. Un seul poste en ligne, aucun risque de dérégler celui du voisin — le réglage passe. Plusieurs postes et aucune cible désignée, le logiciel demande toujours de choisir.
Guide mis a jour le 11 aout 2026 — v4.30 : Dire quelle imprimante appartient à quelle caisse.
La version précédente a appris au logiciel à envoyer chaque ticket sur l'imprimante de SA caisse. Encore fallait-il pouvoir le lui dire : c'est ce que fait cette version.
Où ça se passe : Magasins → Caisses. Chaque ligne de caisse porte désormais une liste déroulante « poste d'impression ». Vous y trouvez les machines sur lesquelles l'agent TuniRFID tourne, avec leur nom d'ordinateur. Choisissez celle qui est à côté de cette caisse : l'effet est immédiat, sans redémarrer quoi que ce soit.
Un poste, une caisse. Si vous rattachez à une caisse un poste qui servait ailleurs, il est déplacé — et le logiciel vous dit lequel il vient de détacher. Déplacer une imprimante sans le savoir se découvrirait à l'imprimante, c'est-à-dire trop tard.
Un inventaire de vos postes apparaît en bas de l'écran Postes : qui est en ligne, quelle imprimante à tickets, quelle imprimante d'étiquettes, dernière activité. Un poste d'impression n'occupe aucune place dans votre forfait — ce n'est pas un poste RFID.
Un avertissement quand un poste n'est rattaché à rien. Ces postes-là reçoivent les impressions qui ne désignent personne. Avec une seule caisse, c'est sans conséquence. À partir de deux, la destination dépend du dernier poste qui s'est connecté — donc du hasard. L'écran vous nomme le poste concerné.
Un poste apparaît tout seul dès que l'agent démarre sur la machine : rien à déclarer, rien à saisir. Si la liste est vide, c'est que l'agent ne tourne pas encore.
Guide mis a jour le 11 aout 2026 — v4.29 : Chaque caisse imprime sur SON imprimante.
Ce qui se passait avec plusieurs caisses. Toutes les caisses d'une boutique envoyaient leurs tickets au dernier poste qui s'était connecté. Concrètement : le ticket de la caisse 2 sortait sur l'imprimante de la caisse 1, et le gagnant changeait tout seul à chaque redémarrage — sans que rien ne l'annonce. La même confusion touchait les étiquettes.
Désormais chaque poste est identifié, et le ticket part sur l'imprimante de la caisse qui encaisse.
Si l'imprimante de votre caisse est éteinte, le ticket ne part jamais sur celle d'à côté : la caisse repasse par l'impression du navigateur, avec la boîte de dialogue habituelle. Un ticket sort quand même — c'est voulu, un client repart toujours avec son ticket. Si cette boîte apparaît alors qu'elle n'apparaissait pas avant, c'est le signe que l'agent d'impression de ce poste ne répond plus : vérifiez qu'il tourne dans la barre des tâches.
Changer l'imprimante d'un poste depuis un autre écran est maintenant refusé. Ce réglage écrit dans la configuration de la machine : appliqué au mauvais poste, il dérègle durablement une autre caisse, sans que personne s'en aperçoive. Le logiciel demande désormais de désigner le poste avant.
Rien à faire si vous n'avez qu'une seule caisse : le comportement est identique à celui d'avant.
Guide mis a jour le 11 aout 2026 — v4.28 : Imprimer une étiquette n'entre plus rien en stock.
Ce qui changeait avant. La première impression d'une étiquette pour un article créait une réception : le stock montait d'autant d'unités qu'il y avait d'étiquettes. Sans fournisseur, sans document, sans prix d'achat — et sous le même type qu'une vraie réception, donc impossible à distinguer dans l'historique. La réimpression, elle, ne faisait déjà rien.
Désormais la règle est unique et sans exception : « imprimer une étiquette n'est jamais une entrée en stock ». Elle vaut pour tous les chemins — code-barres, RFID, impression simple ou par lot.
Le stock entre par un BON DE LIVRAISON, qui nomme un fournisseur, porte un prix d'achat et laisse une trace. Les transferts entre magasins et les inventaires restent également habilités. Une étiquette, elle, ne fait qu'identifier une pièce déjà reçue.
À savoir si vous étiquetiez pour faire entrer du stock. Ce raccourci n'existe plus. Passez par Achats → Bon de livraison : c'est un geste de plus, mais votre stock devient traçable — on sait de qui vient la marchandise, à quel prix, et à quelle date.
L'impression reste entièrement tracée : qui a imprimé quoi, quand, en quelle quantité. C'est l'écriture comptable qui disparaît, pas l'historique.
Guide mis a jour le 10 aout 2026 — v4.27 : Chercher un article sans Internet.
Coupure réseau en boutique. Le caissier tape le début d'un nom d'article et l'écran répondait « Erreur de recherche ». Sans article, pas de panier ; sans panier, pas d'encaissement. La caisse était à l'arrêt alors que tout le reste du mode hors-ligne fonctionnait — le scan d'un code-barres, le panier local, le règlement, la file de rattrapage.
Ce qui manquait : la recherche par NOM. Le catalogue embarqué savait retrouver un code-barres exact (c'est ce que fait le scanner), il ne savait pas chercher. Les désignations étaient pourtant déjà sur la machine.
Désormais, hors ligne, la recherche fonctionne : par nom, par mot du milieu du nom (« cuir » trouve « Blouson Cuir Noir »), par code, par code-barres, par couleur. Les accents n'ont pas d'importance : « ete » trouve « Été ».
Et l'écran dit ce qu'il sait. Un bandeau ambre annonce « Catalogue hors-ligne — stock non vérifié », et la colonne stock affiche « stock non vérifié » au lieu de « rupture ». C'est important : le catalogue embarqué ne porte pas les quantités, et afficher « rupture » ferait refuser une vente parfaitement possible. C'est le rayon qui tranche, pas l'écran.
Le poste prévient quand il n'a pas de filet. Sous le nom du magasin, il affichait « Catalogue local : N art. » — mais rien du tout quand ce catalogue était vide, c'est-à-dire dans le seul cas où l'information comptait. Il affiche maintenant « ⚠ Aucun catalogue hors-ligne » en rouge. Si vous le voyez, laissez la caisse connectée quelques instants : la synchronisation se fait seule.
Guide mis a jour le 10 aout 2026 — v4.26 : L'objectif du patron se lit enfin à la caisse.
Vous fixez un objectif dans Objectifs — « chiffre d'affaires du mois : 5 000 DT ». Jusqu'ici il s'arrêtait là : celui qui tient la caisse n'avait aucun retour sur le chiffre qu'on lui demande d'atteindre. Il l'a maintenant, sur son propre écran.
Une pastille dans la barre latérale de la caisse affiche l'avancement — « 🎯 CA 37 % » — et change de couleur selon l'état : bleu en cours, orange en retard, rouge à risque, vert quand c'est atteint. Un clic ouvre le détail : réalisé contre cible, les paliers, et ce qui était attendu à ce jour.
Vous choisissez ce qui descend au comptoir. Chaque indicateur porte désormais une case « Visible en caisse », décochée par défaut. Le gérant voit tous les objectifs de son magasin ; le caissier ne voit que ceux que vous avez cochés. C'est délibéré : Bénéfice et Taux de marge ne doivent pas se retrouver devant un client parce que personne n'a pensé à décocher. Les objectifs exposés portent un repère 🖥 Visible en caisse dans la liste, pour que vous sachiez d'un coup d'œil ce qui est montré.
Chaque caissier voit aussi SA part. Sous l'avancement du magasin, la caisse affiche ce qu'elle a encaissé elle-même — « Ma caisse : 600,000 DT ». Les deux ne s'additionnent jamais : l'un est le magasin, l'autre est le poste.
Une précision d'honnêteté : sur le chiffre d'affaires, la part d'une caisse est annoncée « hors B2B ». L'objectif, lui, consolide le comptoir et les bons de livraison — or un bon de livraison ne passe par aucune caisse. Sans cette mention, l'écart se lirait comme une erreur de calcul.
Rien à paramétrer pour démarrer : les objectifs existants restent invisibles en caisse tant que vous ne les cochez pas. Et si aucun objectif n'est exposé, la pastille n'apparaît pas — un écran de caisse ne se charge pas d'un badge vide.
Guide mis a jour le 10 aout 2026 — v4.25 : La liste des clients ne s'arrête plus à 50.
Un commerçant a importé son fichier client : 6 901 clients. L'onglet Paramètres → Clients en affichait 50 — les 50 premiers par ordre alphabétique — sans bouton page suivante et, le plus gênant, sans dire que 6 851 autres existaient. L'écran ne se trompait pas de chiffre : il n'en donnait aucun.
La liste est maintenant paginée, comme le catalogue Articles : numéros de page, et un compteur qui dit toujours où l'on en est — « 1–50 sur 6 901 clients — page 1/139 ». Un sélecteur permet 50, 100 ou 200 lignes par page.
Trois pièges évités au passage :
• Chercher depuis une page lointaine ramenait un tableau vide. Toute modification de la recherche ou du filtre revient désormais à la page 1 ; et si une page devient hors limites, l'écran se recadre au lieu de rester blanc ;
• « Aucun client enregistré » s'affichait aussi quand une recherche ne donnait rien — un message qui envoie chercher un problème d'import inexistant. Il dit maintenant « aucun client ne correspond à cette recherche » ;
• La recherche est temporisée. Chaque frappe déclenchait une interrogation complète du fichier ; taper un nom en coûtait une par lettre.
Pour retrouver un client précis, la recherche reste le moyen le plus rapide : elle porte sur le nom, le prénom, le code, le téléphone et l'e-mail, et le compteur annonce le nombre de résultats. Pour tout voir d'un coup, l'export Excel du même écran n'a jamais été limité.
Guide mis a jour le 10 aout 2026 — v4.24 : Le règlement mixte se lit au lieu de se calculer.
Choisir Mixte ouvrait quatre champs vides et laissait le caissier faire la soustraction de tête, devant le client. Une erreur ne se voyait qu'à la validation — ou pas du tout.
Un compteur sous les champs affiche en permanence le total, ce qui est déjà réparti, et ce qui reste à payer. Quand le compte y est, il passe au vert : « Tout est couvert », et la monnaie à rendre s'il y en a.
Un bouton « = reste » sur chaque ligne remplit ce moyen de paiement avec ce qui manque. Exemple : ticket 19,200 DT, le client donne 5 DT en espèces — un clic sur « = reste » de la ligne chèque cadeau y inscrit 14,200. Recliquer sur une ligne déjà remplie ne l'efface pas : le bouton calcule toujours sans la ligne qu'on vient de cliquer.
Deux messages arrivent désormais avant la validation, là où ils servent encore à quelque chose :
• Carte + chèque au-delà du total — ces montants sont exacts, ils ne rendent pas la monnaie. Le règlement sera refusé ; l'écran le dit et nomme l'excédent, au lieu de laisser partir un 400 du serveur après le clic ;
• Bon cadeau supérieur au dû — le surplus n'est pas restitué (un bon cadeau ne rend pas la monnaie). Le montant perdu est annoncé avant, pas découvert après.
La règle de répartition n'a pas changé : l'écran calcule exactement comme le serveur, et un test compare les deux à chaque livraison. Ce qui change, c'est qu'elle est enfin visible.
Le même compteur et les mêmes boutons équipent le règlement d'une dette client, qui annonce en plus ce qu'il restera à devoir après l'encaissement.
Guide mis a jour le 10 aout 2026 — v4.23 : Le tiroir théorique n'est plus gonflé par la monnaie rendue.
Sur un règlement mixte ou par chèque cadeau avec rendu de monnaie, la caisse enregistrait le montant tendu par le client au lieu de celui resté dans le tiroir. La trésorerie théorique de la clôture s'en trouvait augmentée du rendu — et le caissier apparaissait en manque de cette somme au comptage du soir, sans rien avoir fait.
Exemple. Ticket 19,200 DT. Le client donne 5 DT en espèces et 15 DT en bons cadeau. Le bon couvre 15, il reste 4,200 à couvrir en espèces, et 0,800 lui sont rendus. Le tiroir a gardé 4,200 ; la caisse notait 5. Écart : 0,800 DT, à chaque vente de ce type.
Corrigé pour les ventes à venir. Les modes espèces, carte et chèque n'étaient pas concernés : ils enregistraient déjà le net.
Les ventes déjà enregistrées gardent leur valeur erronée — les corriger est une écriture comptable, elle se décide et se trace. Si un écart de clôture passé vous a paru inexplicable sur une journée avec des règlements mixtes, c'est probablement là.
Guide mis a jour le 10 aout 2026 — v4.22 : Les offres de l'application sont celles du site.
L'application et tunirfid.app annonçaient deux grilles tarifaires différentes : la page d'inscription affichait encore Boutique 70 / Enseigne 100 / Réseau 600 pendant que le site public affichait Comptoir 100 / Enseigne 150 / Groupe sur devis et l'offre Intégral RFID, qui n'existait nulle part dans l'application.
Une seule grille, désormais : Comptoir, Enseigne, Groupe (sur devis) et Intégral. Les prix affichés à l'inscription sont lus depuis la configuration réelle des plans — ils ne peuvent plus diverger du site.
Rien ne change pour les clients en place. Les anciennes offres restent actives pour ceux qui les ont souscrites, au tarif signé. Deux corrections les concernent : une Enseigne peut maintenant créer ses 3 boutiques + 1 dépôt (le dépôt compte comme un site, et sa création était refusée), et la couche IA reste ouverte à qui l'avait achetée.
Côté superadmin : l'onglet Tarifs expose enfin les sièges de tableau de bord et les quotas de veille IA, jusque-là réglables en base mais invisibles à l'écran ; renouveler un an pré-remplit le montant annuel et non un mois ; et un changement de plan met à jour l'abonnement, donc le MRR.
Guide mis a jour le 10 aout 2026 — v4.22 : Les documents enregistrent enfin qui les a faits.
Le panneau « Détail » (v4.21) a mis au jour un trou plus ancien : la validation d'un inventaire n'enregistrait pas son valideur, et aucun des quatre chemins de création d'un bon de livraison n'enregistrait son auteur. Les colonnes existaient en base depuis toujours ; personne ne les remplissait. Sur un mouvement d'ajustement — qui ne porte, lui, aucun opérateur — c'était la seule source d'identité possible.
C'est corrigé pour la suite. Valider un inventaire inscrit désormais votre nom ; créer un bon de livraison aussi, par les quatre chemins (saisie, import OCR, duplication, génération depuis un bon de commande).
L'historique, lui, ne peut pas être rattrapé : un nom qui n'a jamais été écrit ne se retrouve pas, et l'inventer serait pire que de l'admettre. Les documents antérieurs affichent donc « non enregistré » — et non un tiret, qui se lirait comme un défaut d'affichage.
Aucun changement d'autorisation : les endpoints qui ne demandaient pas d'authentification n'en demandent pas davantage. On lit qui agit, on ne restreint pas qui le peut.
Guide mis a jour le 10 aout 2026 — v4.21 : D'où vient cette ligne de stock ?
L'onglet Historique des mouvements montrait un écart et rien d'autre : « Ajustement +17 », « Vente −1 ». Le chiffre dit ce qui a changé, jamais pourquoi ni par qui — et sur une boutique, l'écrasante majorité des lignes sont des ajustements, ceux-là mêmes qu'on voudrait expliquer.
Chaque ligne a désormais son bouton « Détail », quel que soit le type. Il ouvre le document qui a produit le mouvement :
• Vente → le ticket, la date, le caissier et la caisse ;
• Ajustement → l'inventaire, son numéro, qui l'a validé, sa note, et surtout le stock théorique face à la quantité comptée — l'origine exacte de l'écart ;
• Réception → le bon de livraison (ou le lot d'étiquettes imprimé, c'est dit explicitement) ;
• Transfert → le bon, le trajet, qui a expédié et qui a reçu.
Quand le document n'existe plus, l'écran le dit et affiche la référence brute. Il ne rapproche jamais le mouvement d'un document « probable » : un lien deviné fabriquerait une preuve, et c'est précisément dans ces moments-là qu'on a besoin de la vérité.
Une limite à connaître : sur un article code-barres, le suivi porte sur la ligne (article × magasin), pas sur une pièce précise — deux exemplaires identiques sont indiscernables. Le suivi à la pièce demande une étiquette RFID. Le panneau l'indique sur chaque mouvement plutôt que de laisser croire le contraire.
Le détail respecte vos droits : le lien « Voir le ticket complet » (panier du client, paiement) n'apparaît qu'aux profils autorisés sur les Ventes. Les autres voient l'essentiel — ticket, caissier, quantité — sans le reste du panier.
Guide mis a jour le 9 aout 2026 — v4.20 : Retrouver ses nouveautés dans un catalogue déjà soldé.
Constaté sur la campagne réelle « solde ete 2026 » (Sfax teniour) : 2 183 des 2 388 articles en stock y sont déjà. L'atelier d'ajout les affichait tous, sans les distinguer — les 205 nouveautés étaient noyées dans un tableau à 91 % inutile.
Une case « Masquer les N articles déjà dans la campagne » est cochée par défaut sur ce parcours ; elle nomme le nombre exact qu'elle cache. Décochez-la pour revoir tout le catalogue — utile pour vérifier qu'un article est bien déjà dans la promo plutôt que de le croire absent.
Le message d'ajout dit maintenant ce qu'il a ignoré : « 3 article(s) ajouté(s) · 17 déjà dans la campagne, inchangé(s) ». Sélectionner un article déjà soldé n'a jamais rien cassé — son taux n'est pas retouché —, mais l'écran n'annonçant que les ajouts, l'écart se lisait comme une perte.
Guide mis a jour le 9 aout 2026 — v4.19 : « Ajouter des articles » ouvre bien tout le catalogue.
La question posée en relisant la v4.18 : ce bouton couvre-t-il tout le stock du magasin, ou seulement les articles déjà dans la campagne ? — Seulement ceux déjà dedans. L'atelier s'ouvrait sur la liste des articles déjà ciblés : aucun article nouveau n'y était sélectionnable, et le bouton qui envoie l'ajout n'apparaissait même pas. Le geste existait, la porte donnait sur un mur.
L'atelier s'ouvre désormais sur le catalogue complet, avec la recherche et les filtres habituels (famille, rayon, sous-famille, saison, fournisseur), les colonnes de démarque de la campagne et l'aperçu du prix remisé. Le bouton dit ce qu'il fait : « Ajouter à la campagne ».
Le catalogue est borné aux magasins de la campagne. Une promo qui ne concerne qu'un site ne propose que des articles en stock dans ce site : ajouter à une promo un article absent du magasin concerné ne remiserait rien et encombrerait la liste à étiqueter. Une campagne sans site particulier parcourt toute l'enseigne, comme avant.
Le reste ne change pas : promo libre uniquement, manager ou admin, refus nominatif des articles sans taux, et la liste des articles à étiqueter après chaque ajout.
Guide mis a jour le 9 aout 2026 — v4.18 : Ajouter des articles à une promo déjà lancée.
Le besoin : une campagne est en cours, un réassort arrive, on veut le faire entrer dans la promo. C'était réputé impossible. En réalité, l'écran acceptait le geste et il ne se passait rien : le taux de l'article était bien enregistré, mais l'article n'était jamais inscrit comme cible de la campagne — et la caisse n'applique une remise qu'aux cibles. Un succès à l'écran, le plein tarif au comptoir. Le guide, lui, décrivait cette manœuvre comme supportée.
C'est désormais un vrai geste, avec son bouton. Sur la ligne d'une campagne promo libre en cours → ➕ Ajouter des articles → sélectionne, fixe les taux, confirme. La remise est active en caisse dans la seconde, et la page liste les articles à étiqueter : ils sont remisés, mais leur étiquette en rayon affiche encore le plein tarif.
Ce qui reste impossible, et c'est voulu : changer le taux d'un article déjà dans la campagne, ou l'en retirer. Son étiquette est posée sur le vêtement — on ne rappelle pas du papier. Un taux modifié ferait afficher −30 % et encaisser −20 %. Ajouter, au contraire, ne rend faux aucun prix déjà affiché.
Les soldes officiels sont exclus de cet ajout : leur périmètre est figé au lancement (loi 1998 art. 23, trace ministère). Pour une nouvelle opération, dupliquez la campagne.
Réservé aux profils Manager et Admin, et chaque ajout laisse une trace datée et nominative dans l'audit des prix.
Guide mis a jour le 9 aout 2026 — v4.17 : Réimprimer un échange rend bien le ticket d'échange.
Le ticket d'échange unique (v4.16) ne sortait qu'au comptoir. Le réimprimer depuis la liste des ventes rendait un ticket de vente sec, muet sur ce que le client avait rendu — alors que c'est justement en réimprimant, des semaines plus tard, qu'on cherche à savoir quel article est parti contre lequel.
Le bouton 🖨 Réimprimer rend désormais le même document qu'au comptoir : articles rendus, articles pris, avoir déduit, reste à payer.
Une limite à connaître : cela vaut pour les échanges réalisés à partir de cette version. Les échanges plus anciens n'ont pas le lien en base ; leur réimpression continue de rendre le ticket de vente, comme avant. Nous ne le devinons pas : un lien deviné produirait un « reste à payer » calculé sur un avoir inconnu, c'est-à-dire un ticket faux. Un document incomplet se corrige ; un document faux se conteste.
Le solde restant d'un avoir n'est pas réaffirmé sur une réimpression : il a pu être dépensé depuis. Le duplicata montre l'échange tel qu'il a eu lieu, pas l'état d'aujourd'hui du bon.
Guide mis a jour le 9 aout 2026 — v4.16 : Un échange, un seul ticket.
Un échange produit trois écritures en comptabilité (le retour, l'avoir, la vente) et sortait jusqu'ici deux papiers — dont un BON DE RETOUR annonçant « REMBOURSÉ 25,200 DT », d'un argent que le client n'a jamais touché. C'est la source de litige la plus banale du comptoir.
Le client reçoit désormais un seul TICKET D'ÉCHANGE : les articles rendus, les articles pris, l'avoir déduit, et le reste à payer. Les trois numéros y figurent (ticket d'origine, bon de retour, ticket de vente) pour retrouver l'opération des mois plus tard. Si le nouvel article vaut moins cher, le solde restant sur l'avoir est imprimé avec son code-barres, prêt pour un prochain achat.
Le papier finit toujours par sortir. Comme le bon de retour attend maintenant la fin de la vente, deux filets ont été posés : « Annuler l'échange » imprime le bon de retour (le client repart avec le document de ce qu'il a rendu, et son avoir reste valable) ; et si la caisse est fermée ou rechargée en plein échange, le bon s'imprime au démarrage suivant avec un message vous le signalant. C'était le vrai risque de cette évolution : la jambe retour est enregistrée dès sa validation, il ne fallait pas qu'elle puisse rester sans papier.
Le tiroir ne s'ouvre plus pendant la jambe retour d'un échange : aucun argent n'y bouge à ce moment-là (c'est un avoir qui est émis). Il s'ouvre au règlement, comme pour toute vente. Un retour simple remboursé en espèces, lui, ouvre le tiroir comme avant.
Un échange réglé à crédit imprime le ticket d'échange pour le client et le ticket de crédit pour la boutique — c'est ce dernier qui porte la reconnaissance de dette et la signature.
Guide mis a jour le 9 aout 2026 — v4.15 : L'échange se déclenche depuis l'écran de retour.
L'échange existait, mais il ne s'ouvrait que depuis l'onglet Ventes. Le caissier qui scanne l'étiquette de l'article rendu — le geste normal au comptoir — arrivait sur l'écran de retour et n'y trouvait que Avoir / Espèces / Carte. Le bouton s'appelait pourtant « Retour / Échange » : il ne pouvait produire qu'un remboursement.
Un bouton « ⇄ Échanger plutôt que rembourser » est désormais sur l'écran de retour, sous le mode de remboursement. Vous avez déjà coché les articles rendus : basculer ne vous fait rien refaire. Un lien « ↩ Revenir à un remboursement simple » permet de repartir en arrière si vous vous êtes trompé.
Le bandeau annonce maintenant le reste à payer, article par article, au lieu du seul montant de l'avoir : « avoir 25,200 DT · panier 40,000 → reste à payer 14,800 DT ». C'est le chiffre que le client demande, et le caissier n'a plus à le calculer de tête.
Si le nouvel article vaut moins cher, la différence reste sur l'avoir pour un prochain achat — elle ne sort jamais en espèces. Le bandeau le dit explicitement : « rien à payer, 10,800 DT restent sur l'avoir ».
Rien ne change dans la comptabilité : l'échange reste un retour + un avoir + une vente, trois écritures traçables. C'est ce qui permet de retrouver, des mois plus tard, quel article est parti contre lequel.
Guide mis a jour le 9 aout 2026 — v4.14 : On ne clôture plus une caisse par-dessus un ticket en attente.
Un ticket mis en attente est un panier sauvegardé : le client est parti chercher de l'argent ou essayer une autre taille, on met sa sélection de côté et on encaisse le suivant. Ce panier n'est pas une vente — il n'apparaît ni dans le rapport Z, ni dans l'onglet Ventes. Jusqu'ici, la caisse pouvait être clôturée sans que rien ne le signale : la marchandise était sortie du rayon, le panier restait en suspens, et le lendemain il était repris sur une autre journée — ou jamais.
Désormais la clôture est refusée tant qu'il reste un ticket en attente, et le refus dit lequel : étiquette, nombre d'articles, montant et ancienneté (« robe rouge — 3 art. · 245,000 DT, depuis 2 j »). Un bandeau orange l'annonce sur l'écran de clôture avant que vous ne comptiez le tiroir, avec un bouton « Voir les tickets en attente ».
Deux façons de trancher, selon votre profil. Un caissier reprend le ticket (« Reprendre un ticket ») puis l'encaisse, ou annule le panier s'il est abandonné. Un responsable peut en plus le supprimer directement depuis la même liste.
Ce que la garde ne fait pas. Elle ne bloque que vos tickets : le panier oublié par un collègue ne vous empêche pas de clôturer votre propre caisse — vous n'avez d'ailleurs pas le droit de le supprimer. En revanche, lors d'une reprise de caisse (un responsable clôture la caisse d'un caissier absent), ce sont les tickets de l'absent qui bloquent : c'est le cas le plus exposé, personne ne reviendra les réclamer.
Aucun montant ne change. Le Z était juste avant, il l'est après : cette garde ne corrige pas un calcul, elle force une décision pendant qu'il reste quelqu'un pour la prendre.
Guide mis a jour le 9 aout 2026 — v4.13 : La fenêtre d'impression des étiquettes de soldes reste ouverte.
Elle se refermait dès que l'impression partait. Or on n'imprime presque jamais une seule fois : changer de magasin, ajuster une quantité, filtrer sur un autre rayon puis relancer — chaque tour obligeait à rouvrir la fenêtre, refaire les filtres et re-cocher les articles. Sur une campagne à 2 000 références, cela représente plusieurs minutes perdues à chaque itération.
Désormais la fenêtre reste ouverte après l'envoi. Votre sélection, vos filtres et vos quantités sont conservés : vous enchaînez les impressions et vous fermez quand vous avez terminé, avec Annuler ou la croix.
Un récapitulatif vert apparaît sous le total : l'heure de l'envoi, le nombre d'étiquettes, et à partir du deuxième lancement le cumul de la fenêtre (« 3 lancements, 36 étiquettes »). C'est volontaire : la fenêtre restant ouverte, le message qui s'efface au bout de quelques secondes ne suffit plus à savoir si l'impression est bien partie — sans cette trace, on relance par doute et les étiquettes sortent en double, sur du papier.
Guide mis a jour le 9 aout 2026 — v4.12 : Le tiroir-caisse s'ouvre enfin tout seul.
Signalé par le comptoir : le tiroir ne s'ouvrait jamais, ni à l'impression d'un ticket, ni sur aucune opération. Diagnostic sans ambiguïté — la commande d'ouverture n'existait pas dans le logiciel. Ce n'était donc ni une panne ni un réglage : la fonction n'avait jamais été écrite. Elle l'est.
Le tiroir s'ouvre désormais sur : l'encaissement d'une vente (tous modes de paiement), un retour ou remboursement, un mouvement de caisse, l'ouverture de la caisse le matin et la clôture Z le soir. Un bouton 🗄 Ouvrir le tiroir est également disponible dans le panneau du responsable, pour l'appoint ou une vérification — réservé aux profils Manager et Admin, et chaque ouverture manuelle est journalisée (qui, quand, motif), visible juste en dessous.
Trois choses à savoir avant d'appeler au secours si le tiroir reste fermé.
1) L'agent d'impression est indispensable. Le tiroir n'est pas piloté par le logiciel : il est branché sur le port
DK (RJ11) de l'imprimante thermique, et c'est l'imprimante qui envoie l'impulsion. Sans TuniRFID_PrintAgent lancé sur le poste, l'ouverture est techniquement impossible — l'impression de secours par le navigateur passe par du HTML, qui ne peut envoyer aucune commande à une imprimante. Vérifiez l'icône de l'agent dans la barre des tâches.2) Le tiroir doit être câblé à l'imprimante. Posé à côté sans câble, ou fermé à clé, aucun logiciel ne l'ouvrira.
3) La broche peut être la 2 ou la 5 selon le modèle de tiroir. Se tromper ne produit aucun message : le tiroir reste simplement fermé. Le réglage se fait poste par poste (c'est du matériel, il appartient à la caisse physique). Si tout semble correct et que rien ne bouge, essayez l'autre broche.
Guide mis a jour le 9 aout 2026 — v4.11 : Les articles soldés ne rapportent plus de points de fidélité.
Une campagne de soldes rogne déjà la marge. Y ajouter des points de fidélité la rogne une seconde fois : le client paie moins cher et repart avec un avoir à valoir sur un prochain achat. C'est désormais le comportement par défaut : une ligne couverte par une campagne de soldes sort du calcul des points.
La règle s'applique par ARTICLE, pas par ticket. C'est le point à retenir. Un client qui achète 800 DT de soldé + 1 500 DT plein tarif gagne ses points sur les 1 500 DT — pas zéro. Annuler tout le panier parce qu'une ligne est soldée punirait l'achat complémentaire, qui est exactement ce qu'on cherche à encourager.
Une remise du caissier n'est pas un solde. Le geste commercial accordé au comptoir (« Remise article − », « Remise ticket % ») continue de rapporter des points normalement. Seules les campagnes de soldes configurées dans l'atelier Démarques sont concernées : ce sont elles qui portent l'identifiant de campagne sur la ligne de vente.
Pour revenir en arrière : Paramètres → Fidélité → encadré rouge Articles soldés → cocher « Les articles soldés rapportent aussi des points ». L'aperçu violet en dessous recalcule aussitôt l'exemple chiffré, pour que le réglage se vérifie avant d'enregistrer.
Attention au déploiement : le changement prend effet immédiatement et sans préavis pour vos clients porteurs de carte. Si des soldes sont en cours, un client habitué à cumuler verra son solde de points cesser de monter sur ces articles. Décidez en connaissance de cause — la case se coche en deux secondes.
Guide mis a jour le 9 aout 2026 — v4.10 : Les mouvements de caisse passent sous la responsabilité du gérant, et sortent sur papier.
Retirer des espèces du tiroir pour une dépense de boutique (achat de sacs, dépôt à la banque, avance) est une opération sans vente en face : elle fait baisser ce que la caisse doit contenir. Jusqu'ici n'importe quel caissier pouvait la saisir — et donc faire disparaître son propre écart de clôture, qui est justement le signal qu'un manquant existe.
Trois changements.
1) Réservé au responsable. Le bloc « Mouvements de caisse » n'apparaît plus que pour les profils Manager et Admin/Gérant. Un caissier ne le voit pas, et le serveur refuse l'opération même si on tente de l'appeler autrement.
2) On choisit la caisse concernée. L'argent sort du tiroir d'un caissier, mais c'est le gérant qui autorise — et le gérant n'ouvre en général aucune caisse. Un menu « Caisse concernée » liste les caisses ouvertes : le montant est retiré du tiroir choisi (son théorique, son ticket Z), et le nom du responsable est enregistré comme autorisation. Un manager ne voit que les caisses de son magasin ; un admin, celles de toute l'enseigne.
3) Un bon est imprimé. Chaque mouvement sort un bon 80 mm numéroté (
MC-2026-00001) portant la nature, le montant, le motif, la caisse, le responsable, et deux lignes de signature — celui qui remet l'argent et celui qui le reçoit. Le bon dit noir sur blanc qu'il n'est pas un ticket de vente, pour qu'il ne soit jamais classé avec les ventes. Il se réimprime depuis la liste (icône 🖨).Ce qui ne change pas — et qu'il faut avoir en tête. Une dépense diminue le tiroir, jamais le chiffre d'affaires : sortir 500 DT n'annule aucune vente. Le jour où votre caissier compte 553 DT alors qu'il a encaissé 1050 DT, c'est normal si 500 DT sont sortis en cours de journée — l'écart affiché sera de zéro, et le détail « dont mouvements de caisse » vous le rappelle sous le tableau de comptage. Le CA du jour, lui, reste entier dans Ventes et Pilotage.
Guide mis a jour le 8 aout 2026 — v4.9 : « Imprimer F4 » est retiré de la caisse.
Ce bouton n'imprimait pas toujours la même chose. Panier en cours non vide : il sortait un ticket du panier, sans paiement — un papier qui ressemble à un ticket de vente mais ne correspond à aucune vente enregistrée (absent du rapport Z, de l'onglet Ventes, de l'historique du client). Panier vide : il réimprimait une copie gardée en mémoire du navigateur, perdue au moindre rechargement de la page. Ni l'un ni l'autre : « Aucun ticket à imprimer ».
Un ticket qui circule sans contrepartie en base est un risque réel au comptoir. Rien ne change pour l'impression normale : le ticket part automatiquement dès que le règlement est validé, comme avant. Et pour réimprimer, deux chemins fiables, tous deux fondés sur la vente enregistrée — donc conformes à ce qui a été encaissé : le bouton 🖨 Réimprimer de la liste des ventes, et le rappel d'un ticket par son numéro via « Voir ticket F9 » (scan du code-barres du ticket).
Le raccourci clavier F4 ne fait plus rien. Les autres sont inchangés : F2 scan, F3/F8 régler, F9 voir ticket, F11 annuler ligne, F12 nouveau ticket.
Point à connaître : il n'existe plus de moyen d'imprimer un panier avant encaissement (devis / note à faire vérifier au client). Si ce geste vous manque, dites-le — il sera reconstruit comme un document distinct, clairement marqué, et non comme un ticket de caisse.
Guide mis a jour le 8 aout 2026 — v4.8 : Un bouton d'effacement de trop dans la caisse.
La v4.7 avait renommé « Corriger » en « Effacer saisie ». Le mot était plus juste, mais il ne réglait pas le vrai problème : ce bouton faisait double emploi. Le pavé numérique porte déjà « ✕ EFFACER », juste sous les chiffres, là où la main se trouve déjà. Et la seule chose que « Effacer saisie » faisait en plus — repasser en mode Quantité — se fait par le bouton « Quantité », deux cases plus haut dans le même panneau.
Pire, il n'agissait que sur le pavé. Quand rien n'avait été tapé, le clic ne changeait rien à l'écran : un bouton qui fonctionne et qu'on croit cassé. C'est exactement ce qui a été signalé au comptoir.
Il est donc retiré. Pour vider un nombre en cours de frappe : « ✕ EFFACER » sur le pavé. Pour revenir au mode Quantité : le bouton « Quantité ». Aucune fonction n'est perdue — il y a simplement un chemin au lieu de deux. Pour annuler une remise déjà validée, la marche à suivre est inchangée : resélectionner la ligne, choisir « Remise article », taper 0 et valider.
Guide mis a jour le 8 aout 2026 — v4.7 : Le pavé numérique de la caisse dit ce qu'il fait. (Le renommage décrit ci-dessous a été remplacé en v4.8 : ce bouton n'existe plus.)
« Corriger » devient « Effacer saisie ». Ce bouton vide le nombre en cours de frappe et remet le pavé en mode Quantité. Il ne touche ni au panier ni au ticket. Le mot « Corriger » laissait croire qu'il réparait une erreur déjà validée — un caissier venant d'appliquer une mauvaise remise pouvait le presser, croire l'avoir retirée, et encaisser le mauvais prix. Pour annuler une remise déjà passée, il faut resélectionner la ligne, choisir « Remise article », taper 0 et valider.
« Prix U. article + » est retiré. Le bouton s'allumait, on pouvait taper un prix et valider — et la caisse répondait « non disponible ». La fonction n'existait pas. Un bouton qui refuse use la confiance dans tout l'écran ; il reviendra le jour où la modification de prix au comptoir sera vraiment supportée.
Les trois modes utiles — Quantité, Remise article, Remise ticket — sont inchangés. Rappel du geste : sélectionner une ligne, choisir le mode, taper le nombre, valider.
Guide mis a jour le 8 aout 2026 — v4.6 : « Voir ticket F9 » rappelle enfin un ticket : ce bouton ouvrait la recherche article — exactement la même fenêtre que « + Art. » en haut de l'écran. Deux boutons, un seul geste. Et le ticket imprimé porte pourtant déjà un code-barres de son numéro, que rien ne savait relire : la seule façon de retrouver une vente passait par une étiquette RFID.
Désormais : le client pose son ticket, le caissier scanne, la vente s'ouvre — avec ses articles, ses remises, ses totaux et son mode de paiement. De là, deux gestes directs : réimprimer un duplicata et lancer un retour. La saisie manuelle du numéro reste possible si le ticket est abîmé.
Deux règles à connaître. La recherche remonte tout l'historique (un client revient rarement le jour même), mais reste limitée au magasin de la caisse : un ticket émis ailleurs répond « introuvable ». Et un caissier peut rappeler le ticket d'un collègue — scanner un ticket qu'on a en main n'est pas fouiller les ventes des autres ; la liste des ventes, elle, reste filtrée comme avant.
Guide mis a jour le 8 aout 2026 — v4.5 : La caisse se relève toute seule après une mise à jour : quand le serveur redémarre (une mise à jour, par exemple), le panier en cours — qui vit dans la mémoire du serveur — disparaît. L'écran de la caisse, lui, reste ouvert avec ses articles affichés. Résultat jusqu'ici : chaque bouton refusait de répondre, sans rien proposer. Le caissier cliquait dans le vide et devait se déconnecter.
Désormais, la caisse reconnaît ce cas précis et affiche la fenêtre « Session perdue » : le caissier saisit son PIN, et son panier repart intact — il est renvoyé au serveur depuis l'écran, qui ne l'avait jamais perdu. Aucun article à ressaisir.
À ne pas confondre avec la fenêtre PIN responsable, qui reste réservée aux opérations exigeant un manager (annulation d'une vente, retour, rapport Z). Un refus de droits n'ouvre jamais la fenêtre de reprise de session : ce sont deux PIN différents, demandés à deux personnes différentes.
Guide mis a jour le 8 aout 2026 — v4.4 : Prospects démo — on voit maintenant ce qu'ils ont regardé : depuis la v4.3 on sait qui ouvre la boutique de démonstration. On ne savait toujours pas ce qui l'intéresse — or un prospect qui passe douze minutes dans Ventes et ouvre la caisse ne se rappelle pas comme celui qui referme au bout de trente secondes.
Un onglet Prospects démo apparaît dans l'espace SuperAdmin. Chaque visiteur y figure avec son contact, sa durée, le nombre d'écrans parcourus, et s'il a ouvert la caisse. Un clic déplie le détail : quels écrans, combien de fois, au back-office comme en caisse. Un prospect qui laisse ses coordonnées puis repart sans rien ouvrir est affiché comme tel — ça aussi, c'est une information.
Rien ne change pour votre boutique : cette trace ne concerne QUE le compte de démonstration publique, jamais un compte client. Aucune de vos données, aucune de vos consultations n'est enregistrée ici.
Guide mis a jour le 7 aout 2026 — v4.3 : Boutique démo — on sait désormais qui la visite : la démo publique (
/demo) s'ouvrait sans rien demander. C'était voulu — un lien à partager à un prospect — mais personne ne savait qui la parcourait, et rien à l'écran ne disait qu'il s'agissait d'une démonstration : une capture d'écran a pu être prise pour un vrai compte client.Deux changements. 1) Avant d'entrer, on demande un nom et un moyen de rappel (e-mail ou téléphone — beaucoup de commerçants n'ont pas d'e-mail). La démo reste ouverte à tous, elle devient traçable : vous savez qui s'intéresse à la plateforme. 2) Un bandeau orange permanent — « DÉMONSTRATION — données fictives, aucune modification n'est enregistrée » — s'affiche en haut du back-office ET de la caisse. Il ne peut pas être fermé : c'est précisément son rôle.
Rien ne change pour votre compte : le bandeau n'apparaît que sur la démo. Et la démo reste ce qu'elle a toujours été — lecture seule absolue, sur des données fictives, isolée de tous les comptes réels.
Guide mis a jour le 7 aout 2026 — v4.2 : Soldes — une etiquette par piece en stock : la fenetre « Imprimer etiquettes » connait desormais votre stock. Chaque ligne recoit une colonne Qte pre-remplie avec le nombre de pieces presentes — 2 en stock, 2 etiquettes — et le total en bas est la somme de ces quantites. Un selecteur de magasin en haut precise de quel stock il s'agit : changer de magasin recalcule toutes les quantites sans rien perdre de vos cases cochees.
Deux garde-fous. 1) La quantite ne peut jamais depasser le stock : le champ est plafonne a l'ecran, et le serveur re-verifie au moment d'imprimer — entre l'ouverture de la fenetre et le clic, une vente a pu passer. Vous pouvez en revanche baisser une quantite (une seule etiquette abimee a remplacer). 2) Un article sans stock ne produit aucune etiquette, mais reste visible et son manque est annonce (« N article(s) a 0 en stock ») : il ne disparait pas du lot en silence. Deux boutons Tout = stock et Tout a 1 reglent toute la liste d'un coup. Le maximum de 5000 etiquettes par lot reste annonce avant le clic.
Guide mis a jour le 7 aout 2026 — v4.1 : Soldes — retrouver un article par sa reference avant d'imprimer : la fenetre « Imprimer etiquettes » recoit une barre de recherche. Sur une campagne de 2 000 articles, retrouver une piece precise imposait de faire defiler la liste. Tapez la reference (« D-007 ») — l'autocompletion propose celles des articles affiches — ou un code article, une designation, un code-barres. La recherche ignore accents et majuscules : « ete » trouve « ÉTÉ ». La reference figure aussi sur chaque ligne du tableau, sous la designation.
Deux points de comportement, identiques a ceux des filtres Rayon/Famille : la recherche restreint reellement l'impression (seuls les articles visibles sont imprimes) — c'est pourquoi le compte l'annonce en clair, et qu'une croix permet de l'effacer d'un clic ; et vos cases cochees sont conservees quand vous cherchez puis effacez, rien n'est perdu en naviguant. La recherche se combine avec les filtres : chercher une reference hors du rayon retenu ne donne aucun resultat, et le dit.
Guide mis a jour le 7 aout 2026 — v4.0 : Etiquette de solde — la reference de l'article y figure enfin : trois corrections demandees par le terrain, sur des etiquettes reellement imprimees. 1) La reference (« D-007 ») apparait desormais sous la couleur et la taille. Elle manquait totalement, et le champ qui aurait du la porter affichait en realite le code article (« PD-ETE 260015 ») — les deux etaient confondus. C'est corrige partout : reception, reimpression, atelier d'etiquetage et soldes. 2) Le bandeau noir partait du bord gauche et debordait d'un point a droite ; il est maintenant encadre d'une marge de 1 mm sur les quatre cotes. 3) Tout le bloc remonte : la marge sous le code-barres passe de 1,75 mm a 3 mm, pour qu'il ne sorte plus au ras du bord inferieur. Le code-barres reste largement au-dessus de la hauteur minimale de lecture.
Guide mis a jour le 7 aout 2026 — v3.99 : Soldes — la fenetre de saisie du % revient a chaque fois : « Appliquer % en bloc » ouvrait bien sa fenetre pour le PREMIER groupe, puis plus rien pour les suivants. La fenetre s'ouvrait pourtant — mais derriere l'atelier et son voile sombre, donc invisible : en se fermant, elle perdait son rang d'affichage et se rouvrait au niveau du dessous. Corrige, et pas seulement ici : huit fenetres de l'application etaient concernees par le meme defaut — ajout rapide de client ou de fournisseur, nouvelle etiquette, recalcul de prix, echeance a payer, lecture de facture. Chacune conserve desormais son rang, ouverture apres ouverture.
Guide mis a jour le 7 aout 2026 — v3.98 : L'ecran vous previent quand une nouvelle version est en ligne : le back-office reste ouvert toute la journee. Apres une mise a jour, l'onglet continue de faire tourner l'ancienne version — on signale alors des defauts deja corriges, et rien ne l'indique a l'ecran. Un bandeau discret apparait desormais en bas de page quand le serveur a change de version, avec un bouton Recharger. La page ne se recharge jamais toute seule : une campagne, un inventaire ou une reception en cours de saisie ne peuvent pas etre perdus — vous rechargez quand vous avez termine. La caisse dispose de ce mecanisme depuis longtemps ; le bureau l'a maintenant aussi.
Dans le meme esprit, deux corrections sur les actions en bloc de l'atelier soldes. 1) Le calcul de la portee passe par le serveur : sur un catalogue de plusieurs milliers d'articles ce delai etait visible, et pendant ce temps le bouton restait inerte — indiscernable d'un bouton mort. Les boutons s'affichent maintenant comme occupes pendant le calcul, et un double-clic ne lance plus deux fois la meme operation. 2) Les rares refus (tableau vide, filtre illisible) s'affichaient en notification fugace ; ce sont desormais des fenetres bloquantes qui disent quoi faire. Un refus discret se confond avec une panne.
Guide mis a jour le 7 aout 2026 — v3.97 : Soldes — « Appliquer % en bloc » repond toujours : en ouvrant l'atelier et en cliquant directement sur le bouton, rien ne se passait — une notification fugace disait « Selectionne d'abord des SKUs », facile a rater devant un tableau de 2000 lignes. Or c'est le point de depart normal : on cible une famille, on ouvre l'atelier, on veut donner un taux a ce qu'on voit. Desormais le bouton a toujours une portee, de la plus precise a la plus large : les articles coches dans le filtre, sinon tout le filtre, sinon les articles coches, sinon la selection, sinon tout ce que le tableau affiche. La fenetre annonce la portee et le nombre exact avant d'ecrire — c'est ce qui rend le dernier cas sur. Un refus ne subsiste que si le tableau est reellement vide, et il dit alors quoi faire.
Guide mis a jour le 7 aout 2026 — v3.96 : Soldes — l'onglet « Demarques » sort du parcours : les taux se fixent desormais groupe par groupe dans « 2. Cibles articles ». Le palier n'est plus une etape a remplir : il est cree automatiquement sur les dates de la campagne et suit ces dates si vous les changez. Le bloc est replie et devenu optionnel, a n'ouvrir que pour une remise qui augmente avec le temps (−30 % du 1er au 15, puis −50 % du 16 au 31).
En contrepartie, une garde a l'activation : si des articles cibles n'ont recu aucun taux, ils sortiraient au prix catalogue au milieu de vos soldes — l'activation est refusee et nomme les articles concernes. Rien ne passe plus entre les mailles. Les campagnes qui utilisent un taux global au palier ne changent pas de comportement : ce taux reste un repli legitime et ne declenche aucun blocage.
Guide mis a jour le 7 aout 2026 — v3.95 : Soldes — un taux par groupe, sans perdre le precedent : en fixant 10 % sur une famille puis 30 % sur une autre, on retrouvait 30 % partout. Deux causes. 1) Le champ « % » de la barre de demarques, en haut de l'atelier juste a cote du filtre, est la valeur de TOUTE la campagne — pas celle du groupe affiche. Il le dit desormais, et affiche un avertissement des qu'un filtre est actif. 2) Le bon geste (« Appliquer % en bloc ») etait bloque au deuxieme groupe : les articles deja traites restaient « selectionnes » et leur intersection avec le nouveau filtre etait vide. Les cibles accumulees et la selection de travail sont maintenant deux choses distinctes : chaque groupe se fige et on passe au suivant.
Nouveau recapitulatif en bas de « 2. Cibles articles » : une ligne par groupe configure, avec son filtre, son nombre d'articles et son taux par demarque (D1, D2…). Re-appliquer sur un groupe met sa ligne a jour ; si un article est repris dans un groupe suivant, c'est ecrit (le dernier taux gagne). Corriges aussi : les colonnes D1/D2/D3 affichaient toutes la valeur de D1 ; supprimer une demarque du milieu deplacait les taux sur le mauvais palier ; le compteur « modifications en attente » comptait des lignes qui n'etaient jamais enregistrees.
Guide mis a jour le 7 aout 2026 — v3.94 : Soldes — filtrer avant d'imprimer, et fixer un taux par sous-famille : la fenetre « Imprimer etiquettes » proposait les 3758 articles de la campagne d'un bloc. Quatre filtres arrivent — Rayon, Famille, Sous-famille, Saison — sur cet ecran et dans l'atelier catalogue, la ou l'on fixe les taux. La sous-famille est la granularite qui manquait : 58 sous-familles contre 8 familles, de quoi solder les chemises sans les pantalons. Choisir un rayon restreint les familles et sous-familles proposees ; si un choix devient hors perimetre il est decoche et annonce, jamais en silence. Trois points de comportement : « tout cocher » ne coche que ce qui est visible ; vos cases restent cochees quand vous changez de filtre (rien n'est perdu en naviguant) ; et le maximum de 5000 etiquettes par lot est desormais annonce avant de cliquer, avec les filtres comme levier.
Guide mis a jour le 7 aout 2026 — v3.93 : Soldes — l'ETIQUETTE imprimee dit le prix de la caisse : la fenetre « Imprimer etiquettes » d'une campagne affichait « — → — DT −0 % » sur toutes les lignes, et surtout l'etiquette elle-meme ignorait les taux par article : un article a taux propre 10 % dans une campagne a 20 % sortait etiquete −20 % alors que la caisse l'encaisse a −10 %. Un article exclu de la campagne recevait lui aussi une etiquette soldee. Le prix etait en outre calcule sur le prix brut au lieu du prix effectif (celui que la caisse remise). Tout cela est corrige : l'etiquette applique desormais exactement la meme regle que la caisse, les articles exclus n'ont plus d'etiquette (et sont signales dans la liste), les articles a taux propre portent un badge, et l'en-tete nomme la demarque reellement appliquee avec ses dates. Rappel utile : un prix affiche doit correspondre au prix encaisse (loi 1998 art. 23).
Guide mis a jour le 6 aout 2026 — v3.92 : Soldes — le taux saisi arrive VRAIMENT en caisse : quatre defauts qui faisaient croire « ma remise n'est pas appliquee » sont corriges. 1) Un taux applique via le filtre (ou tape sur une ligne non cochee) concernait des articles jamais selectionnes comme cibles : configure a l'ecran, invisible en caisse. Desormais tout article qui recoit un taux entre dans la selection, et la confirmation detecte les taux orphelins restants (les inclure ou les abandonner, au choix). 2) L'Apercu ignorait les taux par article et calculait sur le prix brut au lieu du prix effectif (pvuttc) : il montrait la demarque brute (-20 %) la ou la caisse aurait applique votre taux (-10 %). Il simule desormais exactement ce que la caisse fera et annonce « N articles avec taux propre ». 3) Un echec de sauvegarde s'affichait en notification fugace : facile a rater, on croyait avoir valide. C'est desormais une fenetre bloquante qui explique quoi corriger — le travail saisi reste a l'ecran. 4) « + Ajouter demarque » proposait des dates debordant de la campagne, et le serveur refusait toute la sauvegarde : les dates sont maintenant bornees a la fenetre de la campagne. Enfin, supprimer une campagne purge aussi ses taux par article (l'historique legal des prix, lui, reste toujours conserve).
Guide mis a jour le 6 aout 2026 — v3.91 : Soldes — un taux par famille, sans ecraser le precedent : « Appliquer % en bloc » agissait sur la selection, qui survit volontairement aux changements de filtre. Filtrer Vetements puis appliquer 30 % ecrivait donc 30 % sur les 2 403 articles de la campagne, pas sur les 1 984 affiches ; filtrer ensuite Lingerie et appliquer 20 % reecrivait tout. Chaque passe detruisait la precedente, en silence. Desormais l'action porte sur selection ∩ filtre courant (et sur tout le filtre si rien n'est coche), et la fenetre annonce la portee exacte avant d'ecrire. Le flux « je filtre une famille, je fixe son taux, je passe a la suivante » fonctionne enfin. Nouvelle garde a la confirmation : si des articles retenus finiraient sans aucune remise (demarque a 0 % et pas de taux propre), leur nombre est annonce avant d'enregistrer.
Guide mis a jour le 6 aout 2026 — v3.90 : Soldes — supprimer une campagne : les campagnes Annulees et Expirees s'accumulaient dans la liste sans aucun moyen de les retirer — seul un Brouillon etait supprimable. Une icone corbeille apparait desormais sur ces lignes. Une campagne Active reste protegee : il faut d'abord l'Annuler, car la supprimer en cours changerait les prix en caisse dans la seconde. Point important : la suppression retire l'operation et ses parametres (demarques, cibles, sites), mais PAS l'historique des prix pratiques — le journal d'audit reste complet et exportable pour le ministere du Commerce. Le message de confirmation le dit, et annonce le nombre de lignes conservees.
Guide mis a jour le 6 aout 2026 — v3.89 : Soldes — combiner des articles precis ET des familles entieres : les deux facons de cibler s'excluaient. Choisir trois articles dans l'atelier effacait sans le dire la famille deja ciblee, et l'ecran basculait en « mode tableau » en invitant a Effacer pour revenir en arriere. Elles s'additionnent desormais : on solde toute la famille Pull plus trois sacs precis, dans une seule campagne. L'en-tete annonce le total combine (« 3 articles + 2 cibles »), un article deja couvert par sa famille n'est pas compte deux fois, et Effacer ne retire que les articles choisis a la piece. Le serveur savait deja resoudre l'union de tous les types de cibles — c'est l'ecran qui imposait un choix.
Guide mis a jour le 6 aout 2026 — v3.88 : Soldes — filtrer l'atelier catalogue sur PLUSIEURS familles : les filtres Familles / Rayons / Fournisseurs passent en multi-choix (cases a cocher + recherche interne + « Tout cocher »). Jusqu'ici une seule valeur a la fois : pour appliquer −30 % a deux familles et −20 % a une troisieme, il fallait les traiter une par une et le taux finissait par dependre de l'ordre des manipulations. On coche desormais le groupe voulu, on clique Tout selectionner, on applique son taux, puis on passe au groupe suivant. Le bouton affiche le libelle quand une seule valeur est cochee (« Vetements ») et le compte au-dela (« 3 famille(s) »).
Guide mis a jour le 6 aout 2026 — v3.87 : Soldes — « Tout selectionner » dans l'atelier catalogue : cibler une campagne par famille resout souvent des milliers de variantes — 2 405 SKU repartis sur 49 pages chez un client. La case d'en-tete du tableau ne cochant que la page affichee, il fallait parcourir les 49 pages une par une. Un bouton « Tout selectionner (N) » coche desormais tout le filtre courant en une fois, et un bouton Vider annule la selection. Le serveur renvoie les identifiants du meme filtre que celui affiche — la selection ne peut pas diverger de ce que l'ecran montre — et previent explicitement si le volume depasse le plafond technique au lieu de tronquer en silence.
Guide mis a jour le 6 aout 2026 — v3.86 : Soldes — le prix remise apparait aussi dans la recherche article du POS : une campagne active etait bien appliquee au panier et au ticket, mais la liste de recherche de la barre de scan — celle que le caissier regarde AVANT d'ajouter l'article — annoncait encore le prix catalogue. Le terrain en concluait que la campagne ne fonctionnait pas. Desormais la liste affiche le prix catalogue barre, le prix solde et un badge −X %, strictement identiques a ce qui sera encaisse ; meme correction sur la modale « choisir une piece ». Aucun parametrage a changer : les campagnes existantes en beneficient immediatement.
Guide mis a jour le 3 aout 2026 — v3.85 : Articles — export du catalogue des variantes (SKUs) en Excel ou CSV : la vue SKUs de l'onglet Articles propose deux nouveaux boutons, Exporter les SKU (Excel) et CSV. Le fichier sort une ligne par variante avec le code-barres, la taille, la couleur, les prix (achat, vente HT/TTC, B2B), la marge, le rayon / la famille / la marque / le fournisseur, et le stock ventile magasin par magasin (une colonne par magasin). C'est ce qu'il faut pour reprendre un catalogue sur un autre outil : l'export Articles existant s'arrete au niveau article et ne porte donc ni code-barres, ni taille, ni couleur, ni prix. Une recherche active restreint l'export aux variantes affichees (videz-la pour tout exporter) ; dans le fichier Excel la colonne code-barres est en format texte pour qu'un EAN13 ne devienne pas
6,19123E+12. Export trace au journal d'audit et soumis au droit Articles ➜ Consulter. Voir Articles.Guide mis a jour le 31 juillet 2026 — v3.84 : Articles — rayon reellement rattache & bouton Enregistrer unique : le Rayon choisi dans la fiche article est desormais rattache a l'article (colonne Rayon du tableau, filtre par rayon, ciblage des campagnes de soldes et de la reimpression d'etiquettes par rayon) — avant, la valeur n'etait qu'un texte, la colonne restait vide et le filtre ne trouvait rien ; les articles deja saisis sont recadres automatiquement au demarrage quand leur libelle correspond a un rayon existant. Cote saisie, un seul bouton Enregistrer : la fiche reste ouverte sur l'article enregistre pour enchainer photos et variantes, au lieu d'ouvrir un formulaire vierge. Voir Articles.
Guide mis a jour le 29 juillet 2026 — v3.83 : Etiquettes soldees — nouveau rendu structure + choix du style : le modele systeme « Soldes » (50×30) est entierement redessine : bandeau inverse en tete (« −30 % 16.800 DT » en blanc sur noir), designation et taille/couleur alignees a gauche, ancien prix barre a droite, code-barres large en bas et reference dessous. Correction au passage de deux defauts d'impression : le bandeau noir vide (enseigne non renseignee) et le badge % en pave noir illisible (ordre TEXT/REVERSE du moteur TSPL corrige — le texte des zones inversees etait imprime noir sur noir). La modale d'impression d'une campagne offre desormais un selecteur de style : le modele systeme ou tes propres modeles — duplique « Soldes » dans Etiquetage CB ➜ Modeles, personnalise-le (categorie Soldes) et il apparait dans la liste. Voir Soldes & Promotions.
Guide mis a jour le 29 juillet 2026 — v3.82 : Impression des etiquettes soldees — tableau editable des articles + format CB unique : la modale « Imprimer etiquettes » d'une campagne affiche desormais le tableau complet des articles cibles (code, designation, variante, code-barres, prix avant ➜ prix solde avec le %) avec cases a cocher : decochez les articles a exclure avant de lancer (case d'en-tete = tout cocher/decocher, compteur et total d'etiquettes en direct, impression bloquee si aucune selection). L'option RFID a ete retiree de cette fenetre — format unique Code-barres 50×30 mm (l'etiquette solde se colle par-dessus, le tag RFID d'origine reste fonctionnel). Cote serveur, la selection est strictement intersectee avec les cibles de la campagne : impossible d'imprimer une etiquette solde pour un article hors campagne. Voir Soldes & Promotions.
Guide mis a jour le 29 juillet 2026 — v3.81 : Ticket de caisse — affichage explicite des remises et recapitulatif des economies : pour tout article solde (campagne de demarque), en promo ou beneficiant d'une remise caissier, le ticket imprime desormais le prix brut barre (« Prix brut : 100.000 DT »), le badge de la remise (« −30 % Soldes ete », « −10 % remise caissier », cumulables) et le prix net effectif — la ligne « qte × prix » utilise le prix net, donc qte × unitaire = total ligne (double marquage conforme loi tunisienne 1998 art. 23). Les articles sans remise gardent leur format habituel (une seule ligne). Avant le TOTAL TTC, un recapitulatif affiche le Total brut (avant remises) et les Economies realisees (soldes articles + remises caissier + regle panier + code promo) — uniquement si une remise existe. Le meme affichage vaut pour l'imprimante thermique ESC/POS (prix brut entre crochets
[100.000 DT], pas de barre fiable en ESC/POS), le duplicata depuis l'historique des ventes (qui recupere aussi desormais regle panier et code promo) et le ticket provisoire hors-ligne. Le panneau panier de la caisse affiche la ligne « Economies realisees » en temps reel. Voir Encaisser & imprimer le ticket (P3) et Soldes & Promotions.Guide mis a jour le 19 juillet 2026 — v3.80 : Fondations du mode hors-ligne caisse (Phase A — socle serveur) : la plateforme sait desormais rejouer une vente encaissee pendant une coupure reseau de facon idempotente (une vente rejouee deux fois ne compte qu'une fois) et jamais bloquante — si le stock a bouge entre-temps, la vente est enregistree quand meme (la marchandise est sortie) et l'ecart part en incident VENTE_OFFLINE, nouvelle source dans Incidents / Ecarts (badge « Vente hors-ligne », filtre dedie, valorisation cout + prix de vente). S'ajoutent un catalogue de secours synchronisable par la caisse (prix, TVA et demarques precalcules) et la numerotation reelle du ticket au rejeu (le ticket provisoire OFF-… imprime pendant la coupure est trace sur la vente). La caisse devient une application installable (icone sur le bureau/tablette) qui garde en memoire son catalogue et l'ecran de caisse : un rafraichissement de page pendant une coupure ne deconnecte plus le caissier. Vente hors-ligne (Phase A) : pendant une coupure, le caissier scanne au code-barres, compose le panier (prix et soldes du catalogue de secours), encaisse en especes / carte / cheque et imprime un ticket provisoire OFF-… ; la vente est mise en file locale (compteur « N en attente » dans le bandeau). RFID/EPC, retours, avoir, credit, fidelite et codes promo restent indisponibles hors-ligne. A la reconnexion, les ventes en file sont rejouees automatiquement (numero de ticket definitif attribue, idempotent : jamais de double-comptage) ; un ecart de stock eventuel part en incident VENTE_OFFLINE. La cloture Z est bloquee tant qu'il reste des ventes a synchroniser (sinon le Z les ignorerait) ; cliquez le compteur « a synchroniser » pour forcer le rejeu ou reessayer un echec. Durcissement : un montant d'encaissement grossierement incoherent transmis au rejeu (payload forge ou bugue) est ecarte au profit du recalcul serveur — le tiroir n'est jamais sous-compte — tandis qu'une derive de prix plausible (solde modifiee pendant la coupure) reste au prix effectivement imprime au client ; au-dela de 200 ventes en file, le caissier est alerte de retablir la connexion. Le rejeu refuse les payloads forges (UUID invalide, montant negatif, methode hors especes/carte/cheque, EPC, quantite absurde) et journalise chaque rejeu (
[offline-replay]) avec ses ecarts et anomalies.Guide mis a jour le 16 juillet 2026 — v3.79 : OCR facture fournisseur v2 — codes-barres EAN vérifiés, signature/tampon, multi-page : l'import de facture par IA extrait désormais le code-barres EAN de chaque ligne, contrôlé par la clé EAN-8/13 — un code douteux (chiffres mal relus) est vidé plutôt qu'importé faux, et un EAN valide pré-remplit la fiche article (fini les articles OCR sans code-barres, invendables au scan). Le document est classé validé / non signé (détection signature + tampon, tracé sur le BL) ; une facture multi-pages (« Page 1/6 ») déclenche une alerte pages manquantes avant validation. Les lignes à confiance < 60 % sont décochées par défaut (vérifier puis recocher). Robustesse : modèles de secours automatiques si le modèle principal est indisponible, et limite de 5 extractions/min par utilisateur. Voir Bons de livraison / OCR.
Guide mis a jour le 06 juillet 2026 — v3.74 : Cohérence financière entre les onglets (Tableau de bord / Ventes / Pilotage / Analytics) : correction de deux écarts de reporting. (1) Le CA « aujourd'hui » du Tableau de bord incluait par erreur les ventes d'hier (fenêtre de dates décalée d'un jour) — il affiche désormais exactement le jour, identique à l'onglet Ventes (idem 7j/30j/90j, top produits et CA par famille, qui n'avaient pas de borne de fin). (2) L'« Encaissé espèces » de l'onglet Ventes soustrayait le rendu deux fois (le montant espèces était déjà net) — il est maintenant aligné sur la clôture/Z, et les 4 modes somment au CA. En prime, les ventes remboursées sont désormais exclues du CA du Tableau de bord et de l'Analytics (comme dans Ventes/Pilotage) — le CA affiché peut donc baisser là où des remboursements existaient (correction attendue). Voir Tableau de bord / Ventes.
Guide mis a jour le 06 juillet 2026 — v3.73 : Discipline stricte de caisse — pas de session ouverte, pas de vente : l'encaissement exige désormais que le caissier ait ouvert SA caisse (fond déclaré) — une vente sans session ouverte est refusée (« Ouvrez d'abord votre caisse »). Remplace le rappel non-bloquant v3.68 : chaque dinar encaissé appartient désormais obligatoirement au ticket Z de son caissier — plus aucune vente hors Z possible (complète la garde d'ouverture et le verrou de vente sur caisse occupée). Avec la clôture par caisse (option), la session doit être ouverte sur la caisse utilisée. Voir Clôture SalePoint.
Guide mis a jour le 06 juillet 2026 — v3.72 : Caisse partagée — garde d'ouverture, reprise superviseur & réconciliation Z vs ventes : une caisse ouverte par un caissier doit être clôturée avant qu'un autre ne l'ouvre (message nominatif « Caisse ouverte par Rahma depuis 08:12 ») — fini les sessions parallèles dont les ventes n'apparaissaient dans aucun ticket Z. Caissier absent ? La « reprise de caisse » (PIN superviseur) clôture sa session avec un comptage contradictoire (vrai Z, écart réel, badge FORCÉE, tracé) et ouvre une session neuve au repreneur (fond = espèces comptées). En plus, la plateforme réconcilie Z vs ventes : avertissement à la clôture, bandeau supervision (ventes non couvertes + sessions jamais clôturées) et contrôle quotidien automatique avec e-mail ADMIN/MANAGER. Voir Clôture SalePoint.
Guide mis a jour le 06 juillet 2026 — v3.71 : Controle d'integrite EPC & reconciliation stock (blindage anti-mauvaise-classification) : la localisation d'une etiquette RFID est desormais surveillee automatiquement pour garantir que le surplus a la reception reste bien classe (« deja en stock » vs « depot / hors bon »). Un scan nocturne multi-comptes detecte les etiquettes dont la verite operationnelle (
sku_units) a derive du journal des mouvements (la classe du bug fahmi — store perime, stock fantome) et expose un compteur epc_store_drift a la supervision. Un ADMIN diagnostique (GET /api/admin/epc-drift-check, lecture seule) et reconcilie (POST /api/admin/epc-drift-repair, dry-run par defaut ; reconcile_ledger recadre sku_units depuis le journal, tout est trace) ; un script scripts/repair_epc_store_drift.py --all-tenants generalise le recadrage a toute la production. Idempotent, isole par compte, n'avance que vers la verite (journal ➜ unites ➜ items). Voir Analytics / Controle d'integrite EPC.Guide mis a jour le 04 juillet 2026 — v3.70 : Connecteur Power BI (flux OData — interopérabilité) : un flux analytique OData v4 en lecture seule permet de brancher Microsoft Power BI sur la plateforme (racine
/api/public/v1/analytics/odata/). Sept flux forment un modèle en étoile : faits CA journalier consolidé (B2C+B2B), CA par magasin/jour, ventes par article (best-sellers), snapshot de stock + dimensions Magasins / Articles / Catégories. C'est tenant-scope par la clé API (nouveau scope analytics:read, émis en SuperAdmin) — aucune fuite inter-tenant — et les chiffres réconcilient exactement avec le Pilotage / Ventes (« zéro CA divergent »). La clé voyage en en-tête (X-API-Key) ou en Basic-auth (identifiant = la clé) ; import seul (rafraîchissement planifié). Aucune donnée client nominative ni prix d'achat exposés. Voir M14 / Analytics.Guide mis a jour le 04 juillet 2026 — v3.69 : Ticket Z enrichi & traçabilité des annulations : chaque annulation de vente capture désormais un motif, son auteur et l'heure ; le ticket Z (et le détail clôture côté StockManager) liste les « Détails suppressions » du jour (contrôle anti-fraude) + un compteur dans l'e-mail admin. Le Z affiche aussi les ventes par heure et, en multi-caissiers, les ventes par caissier du magasin. Voir Clôture SalePoint.
Guide mis a jour le 04 juillet 2026 — v3.68 : Caisse — mouvements d'espèces & ouverture assistée : le caissier enregistre désormais les mouvements de caisse (dépenses, achats payés du tiroir, prélèvements/dépôts, apports, acomptes) — chaque mouvement ajuste le théorique espèces, ce qui supprime les faux « écarts de caisse » ; ils sont listés le jour même, verrouillés à la clôture et repris sur le ticket Z + l'e-mail admin. L'ouverture rappelle la dernière clôture, le montant théorique attendu au tiroir, et accepte une remarque d'ouverture. Voir M13c / Clôture SalePoint.
Guide mis a jour le 04 juillet 2026 — v3.67 : Objectifs par magasin — création groupée multi-indicateurs : le formulaire « Nouvel objectif » permet désormais de définir plusieurs indicateurs en une seule action pour un même magasin/période — une ligne par indicateur (bouton « + Ajouter un indicateur »), chacune avec sa cible, ses paliers et son alerte. Chaque indicateur reste une carte de suivi indépendante ; un KPI ne peut figurer qu'une fois par lot. Voir M13c.
Guide mis a jour le 04 juillet 2026 — v3.66 : Objectifs par magasin (Retail KPI Targets) : nouveau module Objectifs — un manager fixe une cible par magasin et par période (journalière / hebdomadaire / mensuelle / annuelle) sur l'un de 4 indicateurs : chiffre d'affaires (consolidé B2C + B2B), panier moyen, articles par panier, précision inventaire RFID. L'application calcule le réalisé — avec exactement les mêmes agrégats que le Pilotage / l'onglet Ventes (aucun chiffre divergent) — et affiche cible vs réel avec barre de progression, pourcentage, et pour le CA un repère « attendu à ce jour » avec badge dans les temps / en retard. 8 indicateurs (CA, bénéfice, taux de marge, panier moyen, articles/panier, nb tickets, articles vendus, précision RFID), paliers minimum/cible/stretch, édition en place d'un objectif, sélecteur « évaluer à une date », et alerte par e-mail (ADMIN/MANAGER) quand un objectif passe « à risque » sous son seuil. Création réservée ADMIN / MANAGER dans leur périmètre magasin ; isolé par magasin et étanche entre locataires. Voir M13c.
Guide mis a jour le 04 juillet 2026 — v3.65 : Réception de transfert par scan RFID — l'écart POSITIF (sur-lecture) est classe par cause : un lecteur mobile lit souvent plus d'étiquettes que le carton (normal). L'Import lecture RFID à la réception d'un transfert classe désormais chaque tag en trop par cause — autre magasin (voisinage), dépôt (surplus / hors bon), déjà en stock destination, anomalie (vendu/perdu), étiquette inconnue — dans un tableau (Désignation / EPC / Source / Magasin) exportable en CSV. Ces tags n'entrent PAS en stock automatiquement : le manager tranche. Le voisinage (tag d'un autre magasin) n'est plus compté comme reçu. Rappel : pour valider un carton contre son bon, utilisez la réception par scan RFID (scopée au bon), pas « Nouvel inventaire » (comptage magasin complet).
Guide mis a jour le 03 juillet 2026 — v3.64 : Remplacement étiquette RFID — impression via Zebra Browser Print (comme l'étiquetage) : la réimpression d'une étiquette imprime désormais sur l'imprimante USB locale du poste via Zebra Browser Print, exactement comme l'onglet Étiquetage RFID — fini l'erreur « le serveur ne peut pas imprimer en USB ». Le serveur (sur le cloud) ne peut pas atteindre une imprimante USB ; il prépare le ZPL et le poste l'imprime en local. Repli automatique sur l'impression réseau (ZEBRA_TARGET) si Browser Print n'est pas détecté. Même correctif appliqué à la réimpression des étiquettes lors d'un retour côté caisse. Prérequis : Zebra Browser Print installé sur le poste (comme pour l'étiquetage) et l'imprimante ZD621R branchée.
Guide mis a jour le 02 juillet 2026 — v3.63 : Remplacement étiquette RFID — sécurisé (anti-doublon & anti-résurrection) : la réimpression « même EPC » est désormais réservée aux unités En stock / Perdue — une unité Vendue / En transit / Réservée / Défectueuse est refusée (avant, on pouvait la faire « ressusciter » en stock vendable sans mouvement : double-vente / stock fantôme). La modale exige maintenant de cocher « j'ai détruit l'ancienne étiquette » avant d'imprimer (deux puces au même EPC franchiraient le portique en silence). Ajout d'un journal d'audit (qui / quand / statut), d'une garde anti-double-clic et anti-course avec une vente, et d'un accès réservé MANAGER+ (avec périmètre magasin). Le retour d'un article vendu (caisse) continue de réimprimer normalement (l'unité y est d'abord remise en stock).
Guide mis a jour le 01 juillet 2026 — v3.62 : Étiquetage RFID — magasin toujours attribué (fin des étiquettes « orphelines ») : à l'impression d'étiquettes RFID, l'unité est désormais rattachée au magasin du Bon de Livraison (depôt de réception) — ou à un magasin par défaut robuste — et JAMAIS à « aucun magasin ». Avant, une étiquette imprimée depuis le navigateur naissait sans magasin : elle n'entrait pas au dépôt, un transfert ne la retrouvait pas (« dispo : 0 ») et le portique la classait « autre magasin » alors que la quantité suivait bien le circuit. Désormais l'unité RFID entre au dépôt comme la quantité, le transfert la déplace vers la boutique, et le portique la voit « en stock ». Si aucun magasin n'est déterminable, l'impression est refusée (au lieu de créer une unité orpheline). Les étiquettes déjà orphelines se régularisent par un inventaire RFID du magasin.
Guide mis a jour le 30 juin 2026 — v3.61 : Pilotage — CA consolidé B2C + B2B : le Pilotage additionne désormais les ventes B2C (comptoir / SalePoint) et B2B (Bons de Livraison Vente) en un CA consolidé. Le CA B2B est compté dès qu'un BL Vente est validé (montant net après remise globale ; la facture ne le recompte pas). Quand il y a du B2B, trois cartes apparaissent — CA consolidé, CA B2C (comptoir), CA B2B (BL Vente) — chacune avec son évolution vs la période précédente ; sans B2B l'affichage reste inchangé. Le tableau par magasin expose aussi le CA B2B par magasin. (Pas de vente B2B au POS — le comptoir reste B2C.)
Guide mis a jour le 30 juin 2026 — v3.60 : Inventaire RFID — rattachement magasin par scan (portique fiabilisé) : un inventaire RFID attribue désormais les étiquettes scannées sans magasin (résidu de l'ancien étiquetage) au magasin de l'inventaire — le scan physique prouve qu'elles y sont. Conséquence : le portique peut enfin les protéger (avant, une unité sans magasin était classée « autre magasin » et ne déclenchait pas l'alarme). Sécurité : on ne touche QUE les étiquettes sans magasin — jamais une unité déjà rattachée à un autre magasin (aucun déplacement de stock). Faites donc un inventaire RFID par magasin pour assainir le parc d'étiquettes.
Guide mis a jour le 29 juin 2026 — v3.59 : Prix B2B (gros) — enregistrement fiable & calcul en direct : correction d'un bug où un prix B2B saisi seul (sans toucher le prix détail) était perdu en fermant la fiche article — il n'était alors jamais appliqué aux BL Vente. Désormais une modification du seul prix B2B est bien persistée (et propagée à toutes les variantes), sans écraser les prix détail propres à chaque variante. De plus, saisir la Marge B2B cible (%) calcule maintenant le P.U.H.T B2B en direct dès qu'un prix d'achat HT est connu (fini « j'ai tapé la marge mais le prix reste à 0 » ; le bouton Recalculer reste dispo). Une fois un prix B2B défini, il s'applique d'office à la recherche article du BL Vente (badge (B2B)).
Guide mis a jour le 29 juin 2026 — v3.58 : Caisse — auto-mise à jour du poste : un poste SalePoint laissé ouvert récupère désormais automatiquement les nouvelles versions déployées. Quand une mise à jour est dispo, le poste se recharge tout seul dès qu'il est au repos (pas de panier en cours, pas de fenêtre ouverte) — la session reprend seule, sans re-login. Si une vente est en cours, une bannière « Nouvelle version disponible » apparaît avec un bouton Recharger maintenant, et la MAJ s'applique à la fin de la vente. Fini le « j'ai déployé mais le poste voit encore l'ancienne version » (il fallait recharger manuellement). Note : les postes ouverts AVANT cette version doivent être rechargés une dernière fois à la main (Ctrl+Maj+R) pour embarquer l'auto-MAJ.
Guide mis a jour le 29 juin 2026 — v3.57 : Retours — bon de retour 80 mm, avoir scannable & mode par défaut : le bon de retour s'imprime desormais sur l'imprimante ticket 80 mm (meme chemin direct ESC/POS que le ticket de vente) au lieu d'un long ruban navigateur. Le mode de remboursement par défaut devient l'Avoir (bon d'achat) — recommande (limite la sortie de caisse, fidelise, tracable), le caissier pouvant basculer en especes/CB. L'avoir s'imprime avec un code-barres scannable : au reglement d'un prochain ticket, on scanne le bon (le code
AV-… est retrouve meme sans les tirets) au lieu de le saisir — fini la confusion avec le n° de ticket de retour R-…. Cote StockManager, le detail d'une vente marque les lignes retournees et indique le mode de remboursement de chaque retour. Le comportement article defectueux (quarantaine SAV, stock isole, jamais en rayon) est documente en detail.Guide mis a jour le 27 juin 2026 — v3.56 : Ticket de caisse — lisibilité thermique renforcée : l'impression 80 mm passe en gras (noir franc) au lieu d'un texte fin gris—pâle, le TOTAL TTC est mis en bloc inversé (blanc sur noir) bien visible, et les libellés d'en-tête repassent en noir pur. Plus net à la lecture sur l'imprimante thermique. Aucune action caissier : le ticket sort plus lisible automatiquement.
Guide mis a jour le 27 juin 2026 — v3.55 : Historique des mouvements — colonne et filtre « Référence » retirés : la colonne Référence (n° de BL / ticket) et son filtre ont été retirés de l'historique des mouvements de stock — information jugée sans utilité à cet endroit par les utilisateurs. La table affiche désormais Date, Type, Code, Désignation, Couleur, Taille, Delta et Magasin ; les autres filtres (dont les comboboxes) sont inchangés.
Guide mis a jour le 26 juin 2026 — v3.54 : Stock & Mouvements — filtres par colonne en comboboxes : sur l'historique des mouvements, les filtres Code, Désignation, Couleur, Taille, Magasin et Référence proposent désormais un menu déroulant des valeurs existantes de la colonne (les magasins réels, les couleurs réelles…) avec autocomplétion à la frappe, tout en restant un champ libre « contient » (saisie partielle conservée). Les listes sont calculées côté serveur sur tout l'historique (pas seulement la page affichée) et suivent le magasin actif ; les colonnes à forte cardinalité (Code, Désignation, Référence) sont plafonnées à 200 valeurs.
Guide mis a jour le 23 juin 2026 — v3.53 : Revue d'expert du guide — fonctionnalites POS/RFID recentes documentees : le corps enseigne desormais le retour d'article defectueux (quarantaine SAV), le bouton Retour / Echange sur l'ecran caisse, le retour sans ticket (scan etiquette), la recherche par article (onglet Ventes), les antennes RFID par port (N antennes, roles caisse / portique) avec le portique antivol, et la garde anti-vente cross-magasin. Corrections : table des statuts d'unite completee (RESERVE / VENDU / EN_TRANSIT / DEFECTUEUX), discrimination scan code-barres vs EPC, scenario de retour defectueux corrige (l'article part en stock isole, pas en rayon), ancre M17R reparee, version d'en-tete alignee.
Guide mis a jour le 22 juin 2026 — v3.52 : Garde anti-vente cross-magasin (RFID) : une etiquette RFID rattachee a un AUTRE magasin ne peut plus etre vendue par erreur sur une caisse (anti survente fantome) — le POS la refuse avec un message clair, et le selecteur de copie ne propose que les unites du magasin de la caisse. Sans impact mono-magasin (comportement inchange si une seule boutique).
Guide mis a jour le 22 juin 2026 — v3.51 : Recherche par article dans l'onglet Ventes : un champ de recherche filtre les ventes du jour qui contiennent un article donne (nom, code, ou code-barres scanne). Couple au « Retour sans ticket » : scanner un code-barres pre-remplit ce filtre — on voit aussitot les tickets concernes au lieu de parcourir toute la journee. Le filtre par role (un caissier ne voit que ses propres ventes) reste applique.
Guide mis a jour le 22 juin 2026 — v3.50 : Bouton « Retour / Echange » sur l'ecran caisse : un acces direct depuis l'ecran d'encaissement (plus besoin de passer par l'onglet Ventes). Il retrouve d'abord la vente d'origine — scan de l'etiquette RFID, ou recherche dans Ventes si l'etiquette a ete retiree a la vente — puis ouvre le retour. Aucune quantite negative a saisir : la quantite a rendre se choisit avec les boutons +/−. Sans impact sur le flux de retour existant.
Guide mis a jour le 22 juin 2026 — v3.49 : Retour d'un article defectueux + retour sans ticket : a la caisse, une case « Article defectueux » dans la fenetre de retour envoie l'article rendu en quarantaine SAV (stock isole) au lieu de le remettre en rayon — fini l'article casse revendu par erreur (le remboursement client reste normal). De plus, un bouton « Retour sans ticket » (page Ventes) retrouve le ticket d'origine en scannant l'etiquette RFID de l'article, sans ticket papier. Compatible : un retour normal (case non cochee) se comporte exactement comme avant.
Guide mis a jour le 21 juin 2026 — v3.48 : Postes RFID — antennes configurees par port cote serveur (N antennes) : chaque antenne d'un poste recoit un role (caisse / portique / les deux / inactive) et, si role caisse, alimente une caisse precise du magasin. La configuration est desormais stockee et validee cote serveur (registre par port, nombre d'antennes illimite : 2/4/8/16/32) puis appliquee au poste au heartbeat — elle survit a une reinstallation du poste, et une caisse hors du magasin du poste est refusee. Compatible : un poste sans config garde son comportement local.
Guide mis a jour le 20 juin 2026 — v3.47 : Integrite des donnees — controle & verrous : nouveau diagnostic admin qui liste les references orphelines, et completion des verrous de cle etrangere sur les 2 tables de stock (stock_levels, sku_units) avec suppression en cascade coherente (supprimer un article retire proprement son stock). Renforce la coherence stock ↔ articles/magasins. Operation idempotente et sans risque (reconstruction defensive, annulee a la moindre anomalie ; le verrou foreign_keys etait deja actif a l'execution).
Guide mis a jour le 20 juin 2026 — v3.46 : POS — lecture du scan fiabilisee : un code-barres compose de 24 chiffres n'est plus confondu avec une etiquette RFID (EPC) et passe par le chemin code-barres normal — fini le faux refus « module RFID desactive » sur un point de vente sans RFID. Le vrai tag RFID (hexadecimal, avec lettres) garde son traitement. Sans impact sur le scan habituel.
Guide mis a jour le 20 juin 2026 — v3.45 : POS — vente attribuee au magasin de la caisse + secours code-barres : l'encaissement, le decrement de stock et le restock d'un retour ciblent desormais le magasin de la caisse ouverte (et non une constante mono-magasin) — en multi-magasin, plus de vente ni de stock ecrits sur le mauvais magasin. De plus, une vente par code-barres (sans tag RFID scanne) consomme une unite physique en FIFO (etiquette synthetique CB d'abord, vraie etiquette EPC en dernier recours) : stock_levels et unites RFID restent synchronises, l'app RFID locale ne voit plus de stock fantome. Aucun effet sur le mono-magasin (repli inchange).
Guide mis a jour le 20 juin 2026 — v3.44 : RFID — etat « en transit » des unites : une unite RFID quitte le magasin source des l'expedition (STOCK ➜ EN_TRANSIT, liee au transfert) et arrive au destinataire a la reception (EN_TRANSIT ➜ STOCK) ; une annulation la ramene au source, un ecart la resout (retour source ou perte). Ferme la fenetre expedie➜recu (reconciliation coherente, plus de faux « etiquette perdue ») et isole les transferts concurrents. Aucun effet sur le code-barres (stock_levels) ni sur les unites CB synthetiques.
Guide mis a jour le 20 juin 2026 — v3.43 : RFID — les unites suivent les transferts : a la reception d'un transfert, les unites RFID (EPC) presentes au magasin source sont relocalisees vers le magasin destinataire (cas des articles deja etiquetes). Evite que la reconciliation quotidienne marque a tort les unites deplacees « etiquette perdue » au source. Sans effet sur le vrac (depot non etiquete — rien a deplacer).
Guide mis a jour le 20 juin 2026 — v3.42 : POS — stock scope par le magasin de la caisse : le stock affiche/vendable suit le magasin de la caisse ouverte (et non le magasin maison du caissier). Un ADMIN peut operer la caisse de n'importe quel magasin (selecteur multi-magasin) ; CAISSIER/MANAGER restent bornes a leur magasin (isolation inchangee). Corrige le « 0 en stock au POS apres transfert » quand l'operateur etait rattache a un autre magasin que la destination.
Guide mis a jour le 19 juin 2026 — v3.41 : suppression directe d'un poste RFID expiré — un poste dont le code d'activation a expiré (jamais installé) se supprime maintenant en un clic (corbeille) sans devoir le révoquer d'abord (un EXPIRED n'a jamais connecté → rien à protéger).
Guide mis a jour le 19 juin 2026 — v3.40 : Postes RFID rattaches a un MAGASIN (et non plus a une caisse unique) — un poste = un lecteur fixe dont les antennes desservent plusieurs caisses/portiques ; l'affectation antenne ➜ caisse se regle sur le poste (mode installateur, dashboard v1.7.0), avec repli sur la caisse par defaut du magasin. La vue d'ensemble du dashboard est recentree sur l'infra RFID (stock/recette/inventaire retires — deja dans Stock Manager + POS).
Guide mis a jour le 12 juin 2026 — v3.39 : module « Outils & Aide » ajoute a la matrice de permissions (Postes RFID, Config. imprimante, Guide d'utilisation) -> ces 3 onglets sont desormais parametrables et masques quand restreints.
Guide mis a jour le 27 juin 2026 — v3.39 : import / export clients — l'onglet Parametres ➜ Clients gagne deux boutons (MANAGER/ADMIN) : Exporter (CSV ou Excel .xlsx, audit-logge) et Importer (CSV/.xlsx, creation ou mise a jour avec dedoublonnage par code/telephone, validation par ligne, repli glisser-deposer + Ctrl+V pour les navigateurs bridant la selection de fichiers).
Guide mis a jour le 12 juin 2026 — v3.38 : fix anomalies enforcement — les modules Tableau de bord, Etiquetage (RFID/CB), Parametres, Utilisateurs et Acces caisse, qui etaient parametrables mais NON appliques, sont desormais reellement enforces (onglet masque + 403 serveur / blocage login POS). La matrice est integralement respectee.
Guide mis a jour le 12 juin 2026 — v3.37 : view Articles & Stock restreignable — un profil peut desormais masquer ces onglets + bloquer leur ecran de gestion (liste / KPI / export) ; les lectures partagees (recherche, fiche, niveaux de stock pour BL/caisse/promos) restent ouvertes.
Guide mis a jour le 12 juin 2026 — v3.36 : doc roles harmonisee — le CAISSIER ne se connecte PAS au back-office (corrige) + nouvelle carte « Comment chaque role se connecte » (back-office = code/email + mot de passe web ; caisse = code + PIN ; PIN distinct du mot de passe).
Guide mis a jour le 12 juin 2026 — v3.35 : caisse (POS) — validation responsable par PIN pour les actions sensibles (annuler / retour / Z / credit / reouverture) : le caissier reste connecte, un responsable valide sur place avec son PIN (trace + verrou anti-bruteforce) ; SUPERADMIN documente comme role plateforme.
Guide mis a jour le 12 juin 2026 — v3.34 : enforcement etendu a TOUS les onglets operationnels (Promotions, BL achat/vente, Inventaire, Retours, Transferts, Incidents en plus du financier) ; Articles & Stock = ecritures restreintes seulement (lectures partagees).
Guide mis a jour le 12 juin 2026 — v3.33 : Profils & Permissions APPLIQUES cote serveur (financier d'abord : Ventes, Clotures, Factures, Comptes, Pilotage) ; un profil assigne est verifie a chaque requete + onglets restreints masques ; sans profil = comportement historique.
Guide mis a jour le 12 juin 2026 — v3.32 : matrice Profils & Permissions alignee 1:1 sur les onglets (19 modules : ajout Pilotage, Ventes, Clotures, BL Vente, Factures clients, Inventaire, Retours, Incidents, Tableau de bord) ; correction Etiquetage (RFID / code-barres).
Guide mis a jour le 11 juin 2026 — v3.31 : scoping magasin des roles — un MANAGER affecte a un/des magasin(s) est strictement borne a son perimetre (selecteurs + donnees + 403 serveur) ; sans affectation = comportement historique ; le role CAISSIER ne se connecte plus au back-office (caisse uniquement).
11 juin 2026 — v3.30 : cartes KPI sur les Factures clients (solde du / creances).
11 juin 2026 — v3.29 : cartes KPI sur les Bons de livraison vente.
11 juin 2026 — v3.28 : cartes KPI sur les Factures fournisseur (solde du).
11 juin 2026 — v3.27 : cartes KPI sur les Bons de livraison fournisseur.
11 juin 2026 — v3.26 : cartes KPI sur Stock & Mouvements (reel / disponible / reserve / survente).
11 juin 2026 — v3.25 : cartes KPI sur l'onglet Articles (valeur du stock cout + vente, rupture).
11 juin 2026 — v3.24 : Incidents / Ecarts de demarque (impact financier + rapport PDF + bilan PDF/Excel).
10 juin 2026 — v3.23 : reception de transfert avec ecart (resolution veto reintegration/perte) + import RFID a la reception.
19 juin 2026 — v3.26 : Pilotage — le tableau « tous les magasins » n'affiche que les boutiques ; les dépôts/entrepôts (sans recette) en sont exclus pour ne pas polluer le comparatif.
19 juin 2026 — v3.25 : Pilotage — le tableau « tous les magasins » liste désormais tous les magasins actifs, même ceux sans vente sur la période (affichés à 0) : un réseau de 2 boutiques voit toujours ses 2 lignes, même si une seule a vendu.
19 juin 2026 — v3.24 : Pilotage — vue d'ensemble tous les magasins : un tableau comparatif (visible en multi-magasins) classe les points de vente par CA, avec barre de rang + part (%) du total, Δ% vs comparaison, marge %, tickets, panier et quantité. Colonnes triables + ligne Total. Voir d'un coup qui porte le réseau, qui progresse, qui décroche.
19 juin 2026 — v3.23 : Cycle retour complet — modes de remboursement (especes / CB / avoir), avoir (bon d'achat anonyme : emis au retour, encaisse en caisse, consommation partielle), echange (rendre A + prendre B, ne regle que la difference), et nouvel onglet Retours (reporting admin : taux de retour, ventilation, top motifs, echanges). Cote caisse : cloture par caissier, reouverture de caisse, panneau de supervision manager, et acces caisse pilote par profil de permission (+ connexion propre sans session admin heritee).
9 juin 2026 — v3.22 : import inventaire — panneau Recommandations + garde-fous scan partiel.
9 juin 2026 — v3.21 : support .xls + import inventaire code-barres.
9 juin 2026 — v3.20 : statistiques multi-niveau (tous magasins / magasin / caisse) sur Pilotage + Tableau de bord.
9 juin 2026 — v3.19 : inventaire par lecteur RFID (import .xlsx Chainway → comptage + ecarts).
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