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+
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
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_skuest 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_allcontournent 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.
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 :
- Sélectionnez le type de mouvement (Entrée, Sortie, Transfert ou Ajustement).
- Sélectionnez le produit.
- Sélectionnez le(s) entrepôt(s) — source et/ou destination selon le type.
- Saisissez la quantité.
- 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).
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.
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.
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 |
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_enabledest défini surtruedans les paramètres. - Assurez-vous que le produit a un
reorder_levelsupérieur à 0 défini dans la table pivot entrepôt-produit. - Exécutez
php artisan pos:check-levelspour déclencher manuellement une analyse des alertes.
Les numéros de vente ne sont pas séquentiels
- Changer le paramètre
pos_sale_number_prefixréinitialise le compteur de séquence. - Les ventes annulées consomment toujours un numéro de vente — ils ne sont pas recyclés.