Ce que « fonctionne hors ligne » veut vraiment dire pour une caisse de restaurant
Le mode hors ligne est facile à promettre et difficile à construire. Voici ce qu'une caisse doit continuer à faire sans internet, ce qu'elle ne peut pas faire, et comment la file se rattrape ensuite sans dégât.
Toutes les caisses cloud annoncent un mode hors ligne. Très peu expliquent ce que cette phrase recouvre, et l’écart entre la promesse et le comportement se découvre le pire soir de l’année.
Le hors-ligne est un problème de file, pas d’écran
N’importe quelle application peut mettre une carte en cache et afficher un écran sans connexion. C’est la moitié facile. La moitié difficile, c’est ce qu’il advient des vingt commandes, quatre remboursements et une clôture de poste créés pendant la coupure.
Ce ne sont pas des écrans. Ce sont des faits dont dépendent les chiffres d’autres personnes — le stock, la cuisine, la comptabilité, le tiroir. Les faire revenir dans le bon ordre, exactement une fois, c’est tout le problème d’ingénierie.
Ce que la caisse doit continuer à faire
Sans internet, un point de vente doit encore :
- Ouvrir un poste et saisir un fond de caisse.
- Afficher toute la carte, avec prix, options, tailles et menus.
- Prendre des commandes, les mettre en attente, partager l’addition, appliquer remises et codes promo.
- Encaisser en espèces et imprimer un reçu sur une imprimante connectée localement.
- Annuler et rembourser avec les mêmes règles d’approbation.
- Continuer à compter le tiroir pour que la clôture tombe juste.
C’est un restaurant qui fonctionne. Rien de cette liste n’a besoin d’un serveur pour être vrai.
Ce qui ne peut sincèrement pas fonctionner
L’honnêteté est ici une fonctionnalité, pas une faiblesse :
- Cartes et paiements en ligne. Une autorisation exige la passerelle. Vous prenez l’espèce, ou la carte au retour de la ligne.
- Les vues inter-établissements en direct. Le stock d’une autre succursale est un fait qui vit sur le serveur.
- Tout ce qu’un second appareil doit voir immédiatement. Un écran cuisine sur le même réseau local peut encore être servi ; un téléphone en 4G ne peut pas être prévenu par une caisse sans lien montant.
Un système qui prétend que tout cela marche hors ligne se trompe, ou redéfinit le mot.
Comment le rattrapage est sécurisé
Au retour de la connexion, l’appareil ne se contente pas de renvoyer. Chaque action a été écrite localement comme un enregistrement immuable au moment où elle s’est produite, portant :
| Champ | Pourquoi il existe |
|---|---|
clientActionId | Un UUID créé sur l’appareil — l’identité de l’action |
deviceId | Quelle caisse l’a créée |
actionType | Commande créée, paiement encaissé, poste clôturé… |
payloadJson | L’action complète, figée au moment des faits |
localCreatedAt | Pour rejouer les actions dans l’ordre réel |
Le serveur les stocke avec une clé unique sur (deviceId, clientActionId). Si la même action arrive deux fois — wifi capricieux, redémarrage, nouvelle tentative impatiente — la seconde est reconnue et le résultat d’origine renvoyé, au lieu de créer une deuxième commande. Les paiements portent une clé d’idempotence pour la même raison : une relance ne peut pas débiter deux fois.
Les tentatives s’espacent progressivement au lieu de marteler la connexion, et ce qui échoue encore au-delà du seuil part en file d’attente morte, visible et résolvable par un responsable, plutôt que de disparaître en silence.
Quand deux caisses se contredisent
Voilà la question à poser à tout éditeur. Deux caisses hors ligne. Toutes deux vendent les cinq dernières portions du plat du jour. Toutes deux reviennent en même temps.
Il n’y a pas de réponse magique — les portions n’existent pas. Ce qui compte, c’est que le système soit déterministe et vous le dise :
- Un stock qui deviendrait négatif est refusé avec une erreur exploitable, pas accepté en silence.
- Le statut d’une commande ne suit que des transitions valides : un ticket « servi » ne se rouvre pas.
- Un paiement supérieur au total est refusé.
- L’état des tables prend la version du serveur : deux personnes ne peuvent pas occuper la table 6.
Vous devrez quand même offrir un plat. Mais vous le saurez à l’instant du conflit, au lieu de trouver une ligne de stock négative trois semaines plus tard.
Le test d’une minute
Avant de signer, faites ceci pendant la démo : mettez la tablette en mode avion, prenez quatre commandes, remboursez-en une, clôturez le poste, puis rétablissez la connexion. Regardez ensuite trois écrans — stock, historique cuisine et ventes du jour — et vérifiez que les quatre commandes sont là, une fois chacune, dans le bon ordre, remboursement extourné.
Ce test prend une minute et vous apprend plus que n’importe quelle liste de fonctionnalités.
Gérez tout cela depuis un seul système
Caisse, cuisine, stock, coût des recettes, personnel et comptabilité — connectés, et gratuit pour commencer.
Créer mon compte gratuit