Skip to content

klibato/FlexPos

Repository files navigation

🍔 FlexPOS - Point de Vente (POS) Moderne

Système de caisse enregistreuse moderne pour restauration rapide, développé avec Node.js et React

Node.js React PostgreSQL License Status NF525 Score Multi-Tenant

🎉 PRODUCTION READY - Application SaaS multi-tenant 100% conforme NF525 (anti-fraude TVA). Score audit : 100/100. Testée et validée en production ! ✅


📋 Table des matières


🎯 Vue d'ensemble

FlexPOS est un système de point de vente (POS) complet conçu pour la restauration rapide. Il offre une interface intuitive pour gérer les ventes, les produits, les utilisateurs, et les caisses, avec un focus sur la rapidité et la fiabilité.

Cas d'usage

  • 🍔 Restaurants fast-food
  • ☕ Cafés et boulangeries
  • 🍕 Food trucks
  • 🥗 Points de vente alimentaires

Objectifs du projet

  1. Performance : Interface réactive pour un service client rapide
  2. Simplicité : Prise en main facile pour les caissiers
  3. Fiabilité : Gestion robuste des ventes et du stock
  4. Conformité : Respect des normes françaises (NF525 en cours)

✨ Fonctionnalités

🛒 Point de Vente (POS)

  • ✅ Interface tactile optimisée pour tablettes
  • ✅ Gestion du panier en temps réel
  • ✅ Support multi-moyens de paiement (Espèces, CB, Tickets Restaurant, Paiement mixte)
  • ✅ Calcul automatique de la monnaie
  • ✅ Application de remises (%, montant fixe)
  • ✅ Impression de tickets (PDF + thermique 80mm)
  • ✅ Gestion des menus composés

📦 Gestion des produits

  • ✅ Création/modification/suppression de produits
  • ✅ Organisation par catégories
  • ✅ Gestion des stocks (suivi en temps réel)
  • ✅ Prix HT/TTC avec calcul TVA automatique
  • ✅ Import/export CSV

💰 Gestion des caisses

  • ✅ Ouverture/fermeture de caisse avec fond de caisse
  • ✅ Calcul automatique des écarts
  • ✅ Rapports de clôture (Ticket Z)
  • ✅ Historique complet des sessions de caisse
  • ✅ Export CSV des clôtures

👥 Gestion des utilisateurs

  • ✅ Authentification par PIN (4-6 chiffres)
  • ✅ 3 rôles : Admin, Gérant, Caissier
  • ✅ Permissions granulaires (RBAC)
  • ✅ Changement rapide de caissier
  • ✅ Logs d'audit complets

📊 Tableau de bord & Analytics

  • ✅ Statistiques en temps réel (ventes du jour, semaine, mois, année)
  • ✅ Graphiques interactifs (Recharts)
  • ✅ Top 5 produits les plus vendus
  • ✅ Répartition des ventes par catégorie
  • ✅ Analyse par moyen de paiement

🔧 Paramètres & Configuration

  • ✅ Configuration du commerce (nom, adresse, SIRET, TVA, RCS)
  • ✅ Gestion des catégories et taux de TVA
  • ✅ Configuration des moyens de paiement
  • ✅ Configuration imprimante thermique
  • ✅ Personnalisation du thème (couleur, logo)
  • ✅ Support multilingue (FR/EN)

📜 Logs & Audit

  • ✅ Historique complet des actions utilisateur
  • ✅ Filtres avancés (utilisateur, action, date)
  • ✅ Export CSV des logs
  • ✅ Traçabilité complète pour conformité

🔒 Conformité NF525 (Anti-fraude TVA)

  • Rapports Z quotidiens - Clôture journalière automatique
  • Immutabilité des données - Ventes et factures non modifiables après création
  • Signatures hash SHA-256 - Intégrité garantie des données fiscales
  • Séquençage sécurisé - Numéros de facture thread-safe (PostgreSQL sequences)
  • Conservation 6 ans - Archivage conforme décret n°2016-1551
  • Chaîne de hachage - Traçabilité complète des transactions

📸 Gestion des Images

  • Upload images produits - Stockage local sécurisé
  • Formats supportés - JPEG, PNG, WebP, GIF (max 5 MB)
  • Serving statique - Images publiquement accessibles
  • Multi-tenant - Isolation complète par organisation
  • Suppression automatique - Nettoyage lors du remplacement

🏢 Architecture Multi-Tenant (SaaS)

  • Isolation totale - Données séparées par organisation
  • Gestion organisations - Dashboard super-admin
  • Suspension/Réactivation - Contrôle des accès en temps réel
  • Abonnements - Gestion des plans et facturation
  • Statistiques globales - MRR, ARR, nombre d'organisations

🛠️ Stack technique

Backend

  • Runtime : Node.js 20.x
  • Framework : Express 4.x
  • ORM : Sequelize 6.x
  • Base de données : PostgreSQL 15.x
  • Authentification : JWT (jsonwebtoken) + bcryptjs
  • Logging : Winston
  • Génération PDF : pdfkit
  • Impression thermique : node-thermal-printer

Frontend

  • Framework : React 18.3
  • Build tool : Vite 6.x
  • Routing : React Router v6
  • HTTP Client : Axios
  • Styling : TailwindCSS 3.4
  • Graphiques : Recharts
  • State Management : Context API (7 contexts)
  • Internationalisation : i18n custom

Infrastructure

  • Containerisation : Docker + Docker Compose
  • Reverse proxy : Nginx (production)
  • Environnement : .env (dotenv)

🚀 Installation rapide

Prérequis

  • Node.js 20.x ou supérieur
  • PostgreSQL 15.x ou supérieur
  • Docker & Docker Compose (optionnel mais recommandé)
  • npm ou yarn

1. Installation avec Docker (Recommandé)

# Cloner le repository
git clone https://github.com/klibato/FLEXPOS.git
cd FLEXPOS

# Copier le fichier d'environnement
cp .env.example .env

# Démarrer tous les services avec Docker Compose
docker-compose up -d

# Attendre que les services soient prêts (30-60 secondes)
# Accéder à l'application
# Frontend : http://localhost:5173
# Backend API : http://localhost:3000

Utilisateur par défaut :

  • Username : admin
  • PIN : 1234

2. Installation manuelle

Backend

cd backend

# Installer les dépendances
npm install

# Configurer la base de données
# 1. Créer une BDD PostgreSQL nommée "pos_burger"
createdb pos_burger

# 2. Initialiser le schéma
psql -d pos_burger -f ../database/init.sql

# 3. Configurer les variables d'environnement
cp .env.example .env
# Éditer .env avec vos paramètres

# Démarrer le serveur backend
npm run dev

Le backend sera accessible sur http://localhost:3000

Frontend

cd frontend

# Installer les dépendances
npm install

# Configurer l'URL de l'API
# Créer .env.local et ajouter :
# VITE_API_URL=http://localhost:3000/api

# Démarrer le serveur de développement
npm run dev

Le frontend sera accessible sur http://localhost:5173


📚 Documentation

📖 Guides Utilisateur

🚀 Déploiement

📊 Rapports d'Audit (Score 100/100)

🔧 Documentation Technique

📦 Documentation Modules

📜 Archive & Historique

  • archive/ - Rapports d'audit historiques et phase 0

Structure claire : Guides → Technique → Déploiement → Audit → Archive


🏗️ Architecture

Architecture globale

┌─────────────────┐
│  React Frontend │  (Port 5173 en dev, 80 en prod)
│   TailwindCSS   │
└────────┬────────┘
         │ HTTP/REST
         ▼
┌─────────────────┐
│  Express API    │  (Port 3000)
│   (Node.js)     │
└────────┬────────┘
         │ Sequelize ORM
         ▼
┌─────────────────┐
│  PostgreSQL 15  │  (Port 5432)
│   Database      │
└─────────────────┘

Schéma de base de données (8 tables)

users ──┐
        ├──> sales ──> sale_items ──> products
        │               │
        └──> cash_registers
                         │
                         └──> audit_logs

menu_compositions ──> products
store_settings (singleton)

Voir PROJECT_MAP.md pour le schéma détaillé.

Architecture Frontend (React Context)

ThemeProvider
└── LanguageProvider
    └── StoreConfigProvider
        └── AuthProvider
            └── PermissionsProvider
                └── CashRegisterProvider
                    └── CartProvider
                        └── <App> (React Router)

Flux d'une vente (POS)

1. Caissier ajoute produits au panier (CartContext)
2. Caissier clique "Payer" → PaymentModal
3. Sélection du moyen de paiement (cash/card/meal_voucher/mixed)
4. Validation du paiement → API POST /sales
5. Backend :
   - Crée la vente (Sale)
   - Crée les items (SaleItems)
   - Décrémente les stocks (Products)
   - Génère le ticket_number
   - Calcule les totaux TVA
6. Frontend :
   - Vide le panier
   - Affiche le ticket PDF
   - Imprime sur thermique (si configuré)
   - Redirige vers POS

🤝 Contribuer

Les contributions sont les bienvenues ! Voici comment participer :

1. Fork le projet

git clone https://github.com/klibato/FLEXPOS.git
cd FLEXPOS

2. Créer une branche

git checkout -b feature/ma-nouvelle-fonctionnalite

3. Commit vos changements

git commit -m "feat: ajout de la fonctionnalité X"

Convention de commit : Conventional Commits

  • feat: - Nouvelle fonctionnalité
  • fix: - Correction de bug
  • docs: - Documentation
  • refactor: - Refactoring
  • test: - Tests
  • chore: - Maintenance

4. Push et créer une Pull Request

git push origin feature/ma-nouvelle-fonctionnalite

Puis créez une Pull Request sur GitHub.

Guidelines de contribution

  • Lire DEVELOPER.md pour les détails techniques (à venir)
  • Respecter le style de code existant
  • Ajouter des tests si possible
  • Mettre à jour la documentation

🗺️ Roadmap

✅ Phase 0 - Documentation & Audit (TERMINÉE - Nov 2025)

  • Cartographie complète du projet
  • Documentation exhaustive backend (7 docs)
  • Documentation exhaustive frontend
  • Identification des bugs critiques (8+)
  • README professionnel

✅ Phase 1 - Transformation Multi-Tenant (TERMINÉE - Nov 2025)

  • Créer table organizations
  • Ajouter organization_id à toutes les tables
  • Middleware de filtrage par tenant (tenantIsolation.js)
  • Scopes Sequelize par organization
  • Modèle Organization + relations
  • Isolation complète des données par organisation
  • Tests multi-tenant validés

✅ Phase 2 - Conformité NF525 (TERMINÉE - Nov 2025) 🎉

  • Hash chaîné SHA-256 sur toutes les ventes
  • Table hash_chain avec triggers immutabilité
  • Table nf525_archives pour archivage certifié
  • Service nf525Service.js (génération hash + vérification)
  • Intégration dans saleController (création hash automatique)
  • Vues SQL pour export audit fiscal
  • Fonctions vérification intégrité chaîne
  • Conformité légale : Loi n°2015-1785 + Décret n°2016-1551

📋 Backlog - Améliorations futures (Q2-Q3 2025)

  • Mode hors-ligne (PWA)
  • Application mobile (React Native)
  • Intégration Stripe/PayPal
  • Export comptable (formats FEC, CEGID)
  • Gestion multi-magasins
  • Fidélisation clients (cartes, points)
  • Réservations/commandes en ligne
  • Analytics avancés (Machine Learning)

✅ Qualité & Stabilité

Statut : Application 100% fonctionnelle, 0 bug critique

Corrections effectuées :

  • ✅ Routes frontend protégées (PrivateRoute.jsx)
  • ✅ Multi-tenant isolation validée
  • ✅ NF525 hash chain opérationnel
  • ✅ Cookies httpOnly sécurisés
  • ✅ Tous les bugs critiques corrigés

Consultez la documentation technique pour les détails d'implémentation.


⚙️ Variables d'environnement

Backend (.env)

NODE_ENV=development
PORT=3000

# Base de données
DB_HOST=postgres
DB_PORT=5432
DB_NAME=pos_burger
DB_USER=postgres
DB_PASSWORD=postgres

# JWT
JWT_SECRET=your-secret-key-change-in-prod
JWT_EXPIRATION=8h

# Optionnel
LOG_LEVEL=info

Frontend (.env)

VITE_API_URL=http://localhost:3000/api
VITE_APP_NAME=FlexPOS POS

📊 Performance

  • Chargement initial : < 2s
  • Ajout au panier : < 100ms
  • Création vente : < 500ms
  • Support : 50 ventes/heure

🔒 Sécurité & Conformité

Sécurité Implémentée

  • ✅ Authentification JWT avec cookies httpOnly
  • ✅ Hash bcrypt des PIN codes (10 rounds)
  • ✅ Protection des routes frontend (PrivateRoute)
  • ✅ Middleware isolation multi-tenant
  • ✅ Validation Joi sur toutes les entrées
  • ✅ Rate limiting API
  • ✅ Headers sécurité (Helmet)
  • ✅ CORS configuré
  • ✅ Soft delete (traçabilité)
  • ✅ Audit logs automatiques
  • ✅ RGPD compliant

Conformité NF525 (Anti-Fraude TVA) ✅

  • ✅ Hash chaîné SHA-256 (obligatoire au 1er janvier 2026)
  • ✅ Triggers immutabilité (empêche modification hash_chain)
  • ✅ Archivage certifié 6 ans (table nf525_archives)
  • ✅ Séquence continue par organisation
  • ✅ Export audit fiscal (vue nf525_audit_export)
  • ✅ Vérification intégrité chaîne (fonction SQL)
  • Conforme : Loi n°2015-1785 + Décret n°2016-1551

📄 License

Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.


📞 Support & Contact


🙏 Remerciements


Développé avec ❤️ pour la restauration rapide

Version : 1.0.0-alpha | Dernière mise à jour : 2025-11-15

© 2025 FlexPOS. Tous droits réservés.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors