Korat
Fonctionnalité

Caisse restaurant, écran cuisine et commande à table

Un système de commande pour restaurants commence à table : un client scanne le QR et se retrouve dans la carte. Le commerce obtient un écran cuisine, une addition détaillée avec laquelle la caisse est d’accord et une file de livraisons — sans qu’aucun prix ne soit confié au téléphone qui l’a envoyé. Aucun logiciel à installer : l’écran cuisine s’ouvre dans le navigateur d’une tablette. Le tout est gratuit, sans abonnement et sans frais par table ni par commande.

Les logiciels de commande pour restaurants échouent en général à deux endroits : quand un inconnu peut commander sur une table qui n’est pas la sienne, et quand le total affiché au client diffère de celui de la caisse. Le module a été conçu à rebours de ces deux échecs. La session de table est ouverte par le personnel et porte un jeton à usage unique ; l’addition est le même jeu de lignes que la caisse lit ; et place_dining_order calcule chaque ligne côté serveur.

Le QR de table est un jeton à usage unique, pas un numéro

Il n’existe volontairement aucun chemin « saisissez votre numéro de table ». C’est la fonction évidente à construire, et la raison pour laquelle tant de systèmes s’abusent depuis le parking : si le seul justificatif est un numéro imprimé, toute personne ayant mangé là peut commander sur n’importe quelle table, indéfiniment. À la place, le personnel ouvre la table depuis la console, ce qui frappe un jeton à usage unique intégré au QR. Un QR photographié, une capture transmise ou l’impression de mardi dernier portent un jeton qui n’est plus courant, et ne fonctionnent pas.

Un client debout devant la table n’est ni membre du commerce ni hôte d’une session qui n’existe pas encore : sous la sécurité au niveau des lignes, il ne peut pas lire la table dining_sessions du tout. La sécurité des lignes juge qui appelle ; elle ne peut pas juger qu’une requête porte un jeton valide. Le scan passe donc par join_session_by_token, une fonction SECURITY DEFINER qui compare le jeton côté serveur, fait du premier scanneur l’hôte, et renvoie null sans dire pourquoi. Une erreur qui distinguerait « mauvais jeton » de « jeton expiré » serait un oracle de devinette.

Une fois à l’intérieur, l’hôte peut inviter le reste de la table par un lien ou par une carte en conversation, pour que l’ami arrivé en retard rejoigne la même session et que ses plats tombent sur la même addition.

Commander : options, notes, et une carte qui sait qu’elle ferme

La carte est organisée par catégorie et chaque plat peut porter des groupes d’options — le supplément, le niveau de piment, le choix de nouilles — avec écart de prix, caractère obligatoire et nombre maximal de choix. L’écart est attaché à l’option, pas tapé dans une note : c’est pourquoi le bon de cuisine et la ligne d’addition sont d’accord sur ce qui a été commandé. Les plats acceptent aussi une note libre et une quantité, et le panier reste modifiable jusqu’à l’envoi.

Horaires, dernière commande et contrôle de l’âge pour l’alcool

Les commerces règlent leurs horaires avec une marge de dernière commande. À l’approche, la carte prévient que la cuisine ferme bientôt ; au-delà, la commande est bloquée plutôt qu’acceptée puis annulée en silence. Les plats indisponibles ou en rupture le disent sur la carte, avant le geste. L’alcool porte son propre indicateur : contrôle de l’âge à partir de la date de naissance du client, et le personnel peut vérifier l’âge de toute une table d’un coup.

La file de confirmation : rien n’atteint la cuisine avant qu’une personne dise oui

Les commandes envoyées n’arrivent pas directement au passe. Elles tombent dans une file d’attente de confirmation sur l’écran cuisine, et le personnel confirme ou refuse chacune avant qu’elle ne devienne du travail. Un système qui laisse un téléphone déposer des tickets en cuisine a donné à un inconnu le pouvoir de coûter de la marchandise, et supprime le moment où un humain remarque que la table six a commandé quatre menus identiques par erreur.

Depuis l’écran cuisine, le personnel fait avancer les commandes d’un état au suivant, et la console affiche des pastilles rafraîchies toutes les quelques secondes — commandes actives, tables qui appellent, réservations en attente, nouvelles livraisons — plus un bandeau rouge dès qu’une table appelle le personnel. Les clients ont l’autre moitié de la boucle : appeler le personnel, demander l’addition, ou quitter la table.

L’addition détaillée en direct, et son partage par QR PromptPay

L’addition en direct montre exactement les lignes que lit la caisse, mise à jour au fur et à mesure que les plats sont confirmés : pas de révélation en fin de repas, pas de reconstitution de mémoire. À la fermeture de la table, l’app produit une fiche de fin — avec des suggestions d’ajout en ami pour les personnes qui ont partagé la session — puis un rappel d’avis. Les reçus restent dans un historique personnel.

Partager l’addition : combien chacun doit

La vue de partage répond à la seule question qui fait vraiment débat : ce que je dois. Chacun voit son propre sous-total à la carte plus une part égale d’un éventuel buffet posé sur la table. Un QR PromptPay peut être généré pour le montant, au format QR thaïlandais standard avec sa somme de contrôle CRC-16.

Le partage d’addition est une répartition, pas des paiements séparés. Il calcule ce que chacun doit ; il ne débite pas quatre cartes pour quatre parts. Le règlement se fait toujours entre les personnes à table et le commerce.

Et il n’existe volontairement aucun recours par saisie du numéro de table. Si le QR d’un client ne se scanne pas, le personnel rouvre la table depuis la console. Ajouter un chemin manuel rendrait exactement le trou que le jeton a été frappé pour fermer.

Buffet : forfait par personne, minuteur et frais de restes

Le buffet a son propre modèle plutôt que d’être simulé par un plat au prix par tête. Une formule a un prix par personne, un minuteur avec prolongations accordées par le personnel, et des effectifs adultes et enfants distincts. Les plats portent un rôle buffet — inclus, à la carte uniquement, ou inclus avec supplément — pour qu’une seule carte serve les deux publics. La facturation des restes est prise en charge avec des unités : la règle que la plupart des buffets thaïlandais impriment déjà sur la table et que la plupart des logiciels feignent d’ignorer.

Livraison, vente à emporter et réservations de table

La même carte alimente la livraison et l’emporter. Une commande porte des frais, un prestataire, une heure de retrait planifiée et une adresse, et passe par nouvelle, en cuisine, en route et terminée, avec notification des deux côtés à chaque transition. Les réservations de table prennent une date, une heure, un nombre de convives et une note, et attendent la confirmation du commerce. Un commerce qui vend aussi des produits emballés passe par le module boutique, bâti sur la même règle de tarification serveur.

Deux variantes fréquentes. Un établissement qui sert au comptoir et appelle par numéro utilise la file d’attente plutôt que des tables. Et si vous voulez d’abord savoir ce qu’ouvrir un commerce demande, la page pour les professionnels le décrit en entier.

Chaque prix est calculé sur le serveur

La règle qui sécurise tout le reste : le client ne fixe jamais un prix. place_dining_order et place_shop_order lisent les prix, les écarts d’options et les frais de livraison dans la base et ignorent ce que le téléphone a envoyé. Un champ client auquel on fait confiance est une remise en libre-service. Le même principe couvre les avis : seul un client dont la base peut prouver qu’il a mangé sur place ou commandé en livraison peut en écrire un, et la note en étoiles est recalculée par un déclencheur.

Questions fréquentes

Un client peut-il commander sans scanner le QR de la table ?

Pas sur place. La saisie manuelle d’un numéro de table n’existe pas, car un numéro imprimé devient un justificatif que toute la ville finit par posséder. Le personnel ouvre la table depuis la console, ce qui frappe le jeton porté par le QR.

La livraison et l’emporter fonctionnent autrement : ils se commandent depuis la page du commerce, sans table.

Qu’est-ce qui empêche quelqu’un de photographier notre QR pour commander plus tard ?

Le jeton du QR est à usage unique et lié à la session ouverte par le personnel. Une fois cette session close, le jeton ne correspond plus et le scan ne résout rien. Le contrôle a lieu dans une fonction SECURITY DEFINER, pas dans l’app : parler directement à l’API ne le contourne pas.

Les commandes partent-elles directement en cuisine ?

Non. Chaque commande arrive d’abord dans une file d’attente de confirmation sur l’écran cuisine, et le personnel confirme ou refuse. C’est à cette étape que les erreurs et les abus sont attrapés avant de coûter de la marchandise.

Chacun peut-il payer sa part par carte ?

Non. La vue de partage calcule ce que chacun doit — ses plats plus une part égale d’un éventuel buffet — et le règlement se fait avec le commerce. Korat ne traite pas de paiements par carte séparés.

Que se passe-t-il si un client commande juste au moment où nous fermons ?

Les commerces règlent leurs horaires d’ouverture plus une marge de dernière commande. À l’intérieur de cette marge, l’app prévient que la cuisine ferme bientôt ; au-delà, la commande est bloquée plutôt qu’acceptée puis annulée ensuite.

Ouvrez une table et voyez la boucle

Le côté client et le côté console sont la même app. Installez-la, créez un commerce, et scannez votre propre QR.