POS

Système complet de gestion des stocks et de point de vente pour votre site Larapen. Suivez les stocks dans plusieurs entrepôts, traitez les ventes via un POS intégré, gérez les caisses enregistreuses et surveillez l'inventaire avec des alertes en temps réel et des rapports complets.

Inventaire multi-entrepôts

Suivez les stocks dans plusieurs entrepôts/emplacements avec des quantités par entrepôt, des niveaux de réapprovisionnement et des emplacements de bacs.

Mouvements de stock

Enregistrez tous les changements de stock : réception, expédition, transfert entre entrepôts et ajustements d'inventaire avec piste d'audit complète.

Terminal de vente

Caisse enregistreuse plein écran avec recherche de produits, lecture de codes-barres, gestion du panier et traitement des paiements.

Caisses enregistreuses

Suivez les sessions de caissier avec les montants d'ouverture/fermeture, l'écart entre espèces attendues et comptées, et la détection automatique des écarts.

Alertes de stock

Notifications automatiques de stock bas lorsque les quantités passent sous les niveaux de réapprovisionnement. Notifications par e-mail et en base de données.

Rapports & Analyses

Tableau de bord avec graphiques de ventes, rapports de valorisation des stocks, analyse des mouvements et classement des produits les plus vendus.

Cas d'utilisation

Gestion de magasin de détail

Suivez l'inventaire en magasin et en entrepôt, traitez les ventes via le POS, surveillez les niveaux de stock. Recevez des alertes lorsque les produits sont en rupture et analysez les tendances de ventes avec les rapports intégrés.

Opérations d'entrepôt

Inventaire multi-emplacements avec transferts, ajustements et journalisation complète des mouvements. Suivez chaque changement de stock avec une piste d'audit immuable dans tous vos entrepôts.

Restaurant / Café

Gérez le stock d'ingrédients avec suivi des unités (kg, litres, pièces), réceptionnez les livraisons, suivez la consommation. Utilisez le POS pour les ventes en salle et surveillez les niveaux d'ingrédients.

Prérequis

  • Larapen CMS v1.0.0 ou ultérieur
  • PHP 8.3+
  • MySQL 8.0+
Note : Cet add-on est réservé à l'administration — il ne fournit aucune page front-end. Toutes les fonctionnalités sont accessibles depuis le panneau d'administration.

Installation

Étape 1 : Placer l'add-on

Copiez ou créez un lien symbolique du dossier pos dans le répertoire "extensions/addons" de votre Larapen :

Étape 2 : Activer l'add-on

Allez dans Admin → Add-ons → Add-ons installés et activez POS.

Étape 3 : Exécuter les migrations

Cela crée les tables suivantes : pos_products, pos_warehouses, pos_warehouse_product, pos_movements, pos_registers, pos_sales, pos_sale_items et pos_alerts. Les catégories de produits utilisent la table principale categories avec categorizable_type = 'pos_product'.

Étape 4 : Définir les permissions

L'add-on enregistre 26 permissions (voir Permissions). Attribuez-les aux rôles d'administration via Admin → Utilisateurs → Rôles & Permissions.

Étape 5 : Configurer

Naviguez vers Admin → POS → Paramètres et configurez les taux de taxe, la devise, la génération de SKU, les alertes et les options de reçus. Voir Configuration.

Configuration

Tous les paramètres sont gérés dans Admin → POS → Paramètres (stockés dans la table settings, groupe pos). Les valeurs par défaut sont définies dans config/pos.php.

Général

Paramètre Description Défaut
pos_default_tax_rate Pourcentage de taxe appliqué aux ventes POS. 0
pos_currency_symbol Symbole de devise affiché sur les prix et les reçus. $

SKU & Code-barres

Paramètre Description Défaut
pos_auto_generate_sku Créer automatiquement un SKU pour les nouveaux produits. true
pos_sku_prefix Préfixe pour les SKU générés automatiquement (ex. STK-000001). STK
pos_barcode_enabled Activer le champ code-barres sur les produits et la lecture de codes-barres dans le POS. true

Alertes

Paramètre Description Défaut
pos_low_pos_alerts_enabled Activer la création automatique d'alertes de stock bas lorsque les quantités passent sous les niveaux de réapprovisionnement. true
pos_large_adjustment_threshold Seuil de quantité pour déclencher les notifications d'ajustement important. 50

Ventes & Reçus

Paramètre Description Défaut
pos_sale_number_prefix Préfixe pour les numéros de vente générés (ex. SALE-000001). SALE
pos_receipt_header Texte personnalisé affiché en haut des reçus imprimés. (vide)
pos_receipt_footer Texte personnalisé affiché en bas des reçus imprimés. (vide)

Variables d'environnement

POS_DEFAULT_TAX_RATE=0
POS_CURRENCY_SYMBOL=$
POS_AUTO_GENERATE_SKU=true
POS_SKU_PREFIX=STK
POS_BARCODE_ENABLED=true
POS_LOW_POS_ALERTS=true
POS_LARGE_ADJUSTMENT_THRESHOLD=50
POS_SALE_PREFIX=SALE
Note : Les variables d'environnement sont utilisées comme valeurs par défaut. Les paramètres enregistrés dans le panneau d'administration les remplacent.

Admin : Tableau de bord

Le tableau de bord POS (POS → Tableau de bord) est la page d'accueil pour les opérations POS quotidiennes. Il fournit un aperçu rapide des indicateurs clés et un accès rapide aux tâches courantes.

Cartes KPI

Six cartes récapitulatives en haut de la page :

  • Total Produits : nombre de produits POS actifs.
  • Valeur du stock : valeur totale de tout l'inventaire (prix de revient × quantité).
  • Alertes stock bas : nombre d'alertes de stock bas actives.
  • Ventes du jour : nombre de ventes réalisées aujourd'hui.
  • Chiffre d'affaires du jour : revenu total des ventes du jour.
  • Caisses ouvertes : nombre de caisses enregistreuses actuellement ouvertes.

Actions rapides

Boutons en un clic pour les opérations les plus courantes :

  • Ouvrir le terminal : accéder au terminal de vente.
  • Ouvrir une caisse : démarrer une nouvelle session de caisse.
  • Nouveau mouvement : enregistrer un mouvement de stock.
  • Nouveau produit : créer un produit.
  • Voir les rapports : accéder à la page des rapports.

Activité récente

  • Ventes récentes : les 5 dernières ventes avec numéro de vente, montant, statut et date.
  • Mouvements récents : les 5 derniers mouvements de stock avec produit, type, quantité et date.

Admin : Produits

La page Produits (POS → Produits) gère votre catalogue d'inventaire.

Liste des produits

Un tableau paginé affichant :

  • Nom
  • SKU
  • Code-barres
  • Unité (pièce, kg, g, litre, mètre, boîte, pack)
  • Prix de revient
  • Prix de vente
  • Stock total (somme de tous les entrepôts)
  • Statut (actif / inactif)

Actions par élément : Modifier, Supprimer. Suppression en masse avec sélection par case à cocher. Les produits supprimés peuvent être restaurés.

Création & Modification de produits

Le formulaire de produit comprend les champs suivants :

  • Nom (traduisible) : titre du produit affiché dans toute l'administration.
  • Slug (traduisible) : identifiant compatible URL. Généré automatiquement à partir du nom si vide.
  • Description (traduisible) : description détaillée du produit.
  • SKU : unité de gestion de stock. Généré automatiquement si pos_auto_generate_sku est activé.
  • Code-barres : valeur de code-barres optionnelle pour la lecture POS.
  • Unité : unité de mesure — pièce, kg, g, litre, mètre, boîte ou pack.
  • Prix de revient : coût d'achat/fabrication (utilisé pour les rapports de valorisation).
  • Prix de vente : prix de détail utilisé dans les ventes POS.
  • Catégorie : sélectionner parmi les catégories de produits POS.
  • Image principale : image du produit via la médiathèque.
  • Actif : les produits inactifs sont masqués du POS et des rapports.

SKU & Code-barres

Lorsque pos_auto_generate_sku est activé, les nouveaux produits reçoivent automatiquement un SKU au format {préfixe}-{ID avec zéros} (ex. STK-000042). Vous pouvez remplacer le SKU généré automatiquement à tout moment.

Lorsque pos_barcode_enabled est activé, un champ code-barres apparaît sur le formulaire produit. Les codes-barres sont utilisés pour la recherche rapide de produits dans le POS via un lecteur de codes-barres.

Admin : Catégories

Les catégories de produits utilisent la table unifiée categories avec categorizable_type = 'pos_product'. Les catégories sont gérées via POS → Catégories.

  • Nom (traduisible) et Slug (traduisible, généré automatiquement).
  • Description (traduisible).
  • Catégorie parente : prend en charge l'imbrication hiérarchique.
  • Position : valeur d'ordonnancement.
  • Est actif : bascule d'activation.

Admin : Entrepôts

La page Entrepôts (POS → Entrepôts) gère vos emplacements de stockage.

Champs d'entrepôt

  • Nom (traduisible) : nom d'affichage de l'entrepôt.
  • Code : code d'identification unique (ex. WH-MAIN, WH-EAST).
  • Adresse, Ville, Pays : emplacement physique.
  • Téléphone et E-mail : informations de contact.
  • Par défaut : marque cet entrepôt comme entrepôt par défaut pour les nouveaux mouvements de stock et les ventes POS.
  • Actif : les entrepôts inactifs sont exclus des formulaires de mouvement et du POS.
  • Utilisateurs assignés : sélectionnez quels utilisateurs administrateurs peuvent accéder à cet entrepôt. Les utilisateurs non assignés à un entrepôt peuvent accéder à tous les entrepôts par défaut.

Les entrepôts sont supprimés de manière réversible et peuvent être restaurés.

Entrepôt par défaut

Exactement un entrepôt doit être marqué comme par défaut. L'entrepôt par défaut est présélectionné dans les formulaires de mouvement de stock et utilisé comme entrepôt source pour les ventes POS. Si aucun défaut n'est défini, le premier entrepôt actif est utilisé.

Contrôle d'accès aux entrepôts

Vous pouvez restreindre les entrepôts auxquels un utilisateur peut accéder en l'assignant à des entrepôts spécifiques sur la page de modification de l'entrepôt. Cela contrôle les données qu'il voit dans l'ensemble du module POS :

  • Utilisateurs assignés : ne peuvent voir et interagir qu'avec les données (caisses, ventes, mouvements, alertes, rapports) de leurs entrepôts assignés.
  • Utilisateurs sans assignation (c'est-à-dire non assignés à un entrepôt) peuvent accéder à tous les entrepôts par défaut.
  • Utilisateurs avec la permission pos.warehouses.access_all contournent tout filtrage d'entrepôt et peuvent accéder à tout, indépendamment des assignations.

Le filtrage est appliqué automatiquement à toutes les pages POS : liste des entrepôts, caisses, ventes, mouvements de stock, alertes, rapports et terminal de vente.

Astuce : Pour restreindre un utilisateur à un seul entrepôt, assignez-le uniquement à cet entrepôt. Pour donner à un responsable l'accès à tous les entrepôts, laissez-le sans assignation ou accordez-lui la permission pos.warehouses.access_all.

Admin : Mouvements de stock

La page Mouvements de stock (POS → Mouvements) affiche une piste d'audit immuable de tous les changements d'inventaire.

Types de mouvements

Type Description Effet
Entrée Stock reçu (achat, livraison). +quantité dans l'entrepôt de destination
Sortie Stock retiré (perte, dommage, mise au rebut). −quantité dans l'entrepôt source
Transfert Stock déplacé entre entrepôts. −source, +destination
Ajustement Corriger la quantité après un comptage physique. Définit la nouvelle valeur
Vente Vente POS (créée automatiquement). −quantité
Retour Annulation de vente (créée automatiquement). +quantité

Création de mouvements

Pour créer un mouvement manuel :

  1. Sélectionnez le type de mouvement (Entrée, Sortie, Transfert ou Ajustement).
  2. Sélectionnez le produit.
  3. Sélectionnez le(s) entrepôt(s) — source et/ou destination selon le type.
  4. Saisissez la quantité.
  5. Ajoutez optionnellement une référence (ex. numéro de bon de commande) et des notes.

Le formulaire s'ajuste dynamiquement en fonction du type de mouvement sélectionné (ex. le Transfert affiche les champs d'entrepôt source et destination).

Important : Les mouvements sont des enregistrements d'audit immuables. Une fois créés, ils ne peuvent être ni modifiés ni supprimés. Pour corriger une erreur, créez un nouveau mouvement de type Ajustement.

Filtres

La liste des mouvements peut être filtrée par : type, produit, entrepôt et plage de dates.

Admin : Terminal de vente

Le Terminal de vente (POS → Terminal) fournit une interface de caisse enregistreuse plein écran pour traiter les ventes directement depuis le panneau d'administration.

Prérequis : Vous devez avoir une caisse ouverte avant d'accéder au POS. Si aucune caisse n'est ouverte, vous serez invité à en ouvrir une.

Utilisation du POS

Le POS utilise une disposition à deux panneaux :

  • Panneau gauche : recherche de produits et panier. Recherchez par nom de produit, SKU ou code-barres. Cliquez sur un produit pour l'ajouter au panier. Ajustez les quantités ou supprimez des articles directement.
  • Panneau droit : traitement du paiement. Sélectionnez le mode de paiement (Espèces, Carte ou Autre). Pour les paiements en espèces, saisissez le montant reçu pour voir le calcul de la monnaie à rendre.

Finalisation de la vente

Après avoir finalisé une vente :

  • Un numéro de vente est généré avec le préfixe configuré (ex. SALE-000001).
  • Les quantités en stock sont automatiquement diminuées dans l'entrepôt de la caisse.
  • Des mouvements de stock de type Vente sont créés pour chaque article.
  • Les totaux courants de la caisse sont mis à jour.
  • Un reçu est affiché et peut être imprimé.

Lecture de codes-barres

Lorsque pos_barcode_enabled est activé, le champ de recherche POS détecte automatiquement l'entrée du lecteur de codes-barres. Les lecteurs de codes-barres envoient généralement des caractères suivis d'une touche Entrée, ce qui déclenche une recherche automatique du produit. Si un produit correspondant est trouvé, il est immédiatement ajouté au panier.

Reçus

Après chaque vente, un reçu est généré contenant :

  • Texte d'en-tête personnalisé (depuis le paramètre pos_receipt_header).
  • Numéro de vente et date/heure.
  • Liste détaillée avec quantités, prix unitaires et totaux par ligne.
  • Sous-total, taxe et total.
  • Mode de paiement et montant.
  • Monnaie à rendre (pour les paiements en espèces).
  • Texte de pied de page personnalisé (depuis le paramètre pos_receipt_footer).

Admin : Caisses

La page Caisses (POS → Caisses) gère les sessions de caisse enregistreuse. Chaque session de caisse suit le poste d'un caissier de l'ouverture à la fermeture.

Ouverture d'une caisse

  • Sélectionnez un entrepôt — toutes les ventes POS pendant cette session sont liées à cet entrepôt.
  • Saisissez le montant d'ouverture — les espèces de départ dans la caisse.

Un seul utilisateur peut avoir une caisse ouverte à la fois.

Fermeture d'une caisse

Lors de la fermeture d'une caisse :

  • Saisissez les espèces comptées — le montant réel d'espèces dans la caisse.
  • Le système affiche le montant attendu (montant d'ouverture + ventes en espèces).
  • La différence entre le montant attendu et le montant compté est affichée, mettant en évidence tout écart.

Une notification Caisse fermée est envoyée aux administrateurs lorsqu'une caisse est fermée.

Admin : Ventes

La page Ventes (POS → Ventes) affiche toutes les transactions POS.

Liste des ventes

Un tableau paginé et filtrable affichant le numéro de vente, le client, les articles, le total, le mode de paiement, le statut, l'entrepôt et la date. Filtrez par statut, mode de paiement, entrepôt et plage de dates.

Détail de la vente

La page de détail de la vente affiche :

  • Numéro de vente et date/heure.
  • Informations client (si fournies).
  • Tableau des articles : nom du produit, SKU, quantité, prix unitaire et total par ligne.
  • Résumé financier : sous-total, taxe et total.

Annulation de ventes

Pour annuler une vente :

  • Un motif est requis (minimum 10 caractères).
  • Le stock est automatiquement rétabli — les quantités sont restituées à l'entrepôt.
  • Des mouvements de stock de type Retour sont créés pour chaque article.
Important : Les ventes ne sont jamais supprimées du système. Les ventes annulées restent dans les enregistrements avec leur motif d'annulation à des fins d'audit.

Admin : Alertes

La page Alertes (POS → Alertes) affiche les alertes d'inventaire.

Les alertes sont créées automatiquement lorsque la quantité d'un produit dans un entrepôt atteint ou passe sous son niveau de réapprovisionnement. Les alertes ont trois statuts :

  • Active : le stock est sous le niveau de réapprovisionnement.
  • Résolue : le stock a été réapprovisionné au-dessus du niveau de réapprovisionnement.
  • Ignorée : ignorée manuellement par un administrateur.

Utilisez le bouton Lancer la vérification du stock pour effectuer un balayage global de tous les produits et créer/résoudre les alertes en fonction des niveaux de stock actuels.

Admin : Rapports

La page Rapports (POS → Rapports) fournit des graphiques analytiques, des tableaux et trois types de rapports détaillés. Utilisez le filtre de période pour ajuster la plage de dates.

Graphiques & Tableaux d'ensemble

La page principale des rapports affiche :

  • Ventes dans le temps : graphique en courbes montrant les tendances de ventes quotidiennes.
  • Mouvements par type : graphique en anneau décomposant les mouvements de stock.
  • Produits les plus vendus : classés par quantité vendue dans la période sélectionnée.
  • Stock par entrepôt : total de produits et quantité par entrepôt.

Valorisation du stock

Affiche la valeur totale de votre inventaire :

  • Décomposition de la valeur par produit et par entrepôt (prix de revient × quantité).
  • Total général pour tous les produits et entrepôts.

Analyse des mouvements

Analysez les mouvements de stock sur une période sélectionnée :

  • Filtre de période : sélectionnez la plage de dates.
  • Graphique en anneau : décomposition visuelle par type de mouvement.
  • Tableau de décomposition : nombre et quantité totale par type de mouvement.

Analyse des ventes

Analysez les performances de vente sur une période sélectionnée :

  • Filtre de période : sélectionnez la plage de dates.
  • Graphique en courbes : tendances de ventes dans le temps.
  • Graphique circulaire des modes de paiement : répartition du chiffre d'affaires par mode de paiement (Espèces, Carte, Autre).
  • Produits phares : classés par quantité vendue.

Admin : Paramètres

La page des paramètres (POS → Paramètres) est organisée en sections :

  • Général : taux de taxe par défaut, symbole de devise.
  • SKU & Code-barres : génération automatique de SKU, préfixe SKU, bascule de lecture de codes-barres.
  • Alertes : bascule des alertes de stock bas, seuil d'ajustement important.
  • Ventes & Reçus : préfixe du numéro de vente, texte d'en-tête/pied de page du reçu.

Permissions

L'add-on enregistre 27 permissions :

Permission Description
pos.dashboard.view Voir le tableau de bord POS
pos.products.view Voir la liste des produits POS
pos.products.create Créer de nouveaux produits POS
pos.products.edit Modifier les produits POS existants
pos.products.delete Supprimer des produits POS
pos.categories.view Voir les catégories POS
pos.categories.create Créer des catégories POS
pos.categories.edit Modifier les catégories POS
pos.categories.delete Supprimer des catégories POS
pos.warehouses.view Voir les entrepôts
pos.warehouses.create Créer de nouveaux entrepôts
pos.warehouses.edit Modifier les entrepôts existants
pos.warehouses.delete Supprimer des entrepôts
pos.warehouses.access_all Accéder à tous les entrepôts indépendamment des assignations
pos.movements.view Voir les mouvements POS
pos.movements.create Créer des mouvements POS manuels
pos.registers.view Voir les caisses enregistreuses
pos.registers.open Ouvrir une session de caisse
pos.registers.close Fermer une session de caisse
pos.sales.view Voir les ventes POS
pos.sales.create Créer des ventes via le POS
pos.sales.void Annuler des ventes finalisées
pos.alerts.view Voir les alertes POS
pos.alerts.dismiss Ignorer les alertes POS
pos.reports.view Accéder aux rapports POS
pos.settings.view Voir les paramètres POS
pos.settings.edit Modifier les paramètres POS
Note : Les 27 permissions sont listées ci-dessus.

Notifications

L'add-on envoie 3 types de notifications (gérés via le système centralisé de notifications dans Admin → Paramètres → Notifications) :

Notification Déclencheur Canaux
Alerte de stock bas La quantité d'un produit passe sous son niveau de réapprovisionnement dans un entrepôt. E-mail, Base de données
Caisse fermée Une session de caisse enregistreuse est fermée par un caissier. E-mail, Base de données
Ajustement important Un mouvement d'ajustement de stock dépasse le seuil configuré. E-mail, Base de données

Commandes Artisan

Commande Description
php artisan pos:check-levels Analyse tous les niveaux de stock des entrepôts et crée/résout les alertes en conséquence. Il est recommandé de la planifier toutes les heures via le planificateur de tâches de Laravel.

Pour planifier la commande, ajoutez-la à votre routes/console.php :

Schedule::command('pos:check-levels')->hourly();

Dépannage

Le POS ne fonctionne pas

  • Assurez-vous d'avoir une caisse ouverte. Le POS nécessite une session de caisse active avant de traiter les ventes.
  • Un seul utilisateur peut avoir une caisse ouverte à la fois. Fermez la caisse existante avant d'en ouvrir une nouvelle.

Stock manquant

  • Les mouvements sont immuables — ils ne peuvent être ni modifiés ni supprimés une fois créés.
  • Pour corriger les quantités en stock, créez un nouveau mouvement de type Ajustement.
  • Consultez l'historique des mouvements du produit pour retracer où le stock a été alloué.

Les alertes ne se déclenchent pas

  • Vérifiez que pos_low_pos_alerts_enabled est défini sur true dans les paramètres.
  • Assurez-vous que le produit a un reorder_level supérieur à 0 défini dans la table pivot entrepôt-produit.
  • Exécutez php artisan pos:check-levels pour déclencher manuellement une analyse des alertes.

Les numéros de vente ne sont pas séquentiels

  • Changer le paramètre pos_sale_number_prefix réinitialise le compteur de séquence.
  • Les ventes annulées consomment toujours un numéro de vente — ils ne sont pas recyclés.

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket