# Facturation SANTINOVA Application web complète de gestion de la réception et du traitement des factures pour l'entreprise SANTINOVA. ## Fonctionnalités ### Réception multi-canal des factures - Upload manuel (PDF, images, scans) - Préparation pour réception par email (intégration future) - Préparation pour import depuis portail fournisseur (intégration future) - Support des documents scannés ### Extraction automatique par OCR/IA - Extraction via OpenAI Vision API (GPT-4.1-mini) - Détection automatique : fournisseur, numéro de facture, dates, montants - Extraction des lignes de détail - Score de confiance OCR - Création automatique des fournisseurs détectés ### Classement et archivage - Classement par fournisseur, date, statut - Archivage des documents originaux (PDF/images) - Recherche full-text sur le contenu des factures ### Workflow de validation/approbation - Statuts : Reçue → En vérification → Validée → Approuvée → Payée → Archivée - Rôles : Opérateur, Validateur, Approbateur, Administrateur - Historique complet des actions (audit log) - Contrôle des permissions par rôle ### Rapprochement avec bons de commande - Gestion complète des bons de commande - Rapprochement automatique/manuel facture ↔ bon de commande - Détection des écarts de montant - Alertes en cas d'écart significatif ### Suivi des échéances de paiement - Tableau de bord des échéances - Alertes pour factures en retard - Alertes pour factures proches de l'échéance (7 jours) - Statistiques par fournisseur et par période ### Exports comptables - Export CSV (compatible tableurs) - Export Excel (XLSX formaté) - Module préparatoire CEGI Compta First (intégration future) ### Dashboard - Vue d'ensemble : KPIs, factures en attente, montants - Graphiques : répartition par statut, évolution mensuelle, top fournisseurs - Actions en attente selon le rôle de l'utilisateur ### Authentification et gestion des utilisateurs - Authentification JWT - Gestion des rôles et permissions - CRUD utilisateurs (admin uniquement) ## Stack technique | Composant | Technologie | |-----------|------------| | Backend | Node.js + Express + TypeScript | | Frontend | React + Vite + TypeScript + Tailwind CSS | | Base de données | MySQL 8.0 avec Drizzle ORM | | OCR/IA | OpenAI Vision API (GPT-4.1-mini) | | Graphiques | Chart.js + react-chartjs-2 | | Authentification | JWT (jsonwebtoken + bcryptjs) | | Upload | Multer | | Export | xlsx (SheetJS) | | Conteneurisation | Docker + Docker Compose | ## Déploiement avec Docker ### Prérequis - Docker et Docker Compose installés - Clé API OpenAI (optionnelle, pour l'OCR) ### Configuration 1. Copier et modifier le fichier `.env` : ```bash cp .env .env.local ``` 2. Modifier les variables dans `.env.local` : ```env DB_ROOT_PASSWORD=votre_mot_de_passe_db JWT_SECRET=votre_secret_jwt_unique OPENAI_API_KEY=votre_cle_api_openai APP_PORT=8080 ``` ### Lancement ```bash # Construire et démarrer tous les services docker compose up -d --build # Vérifier les logs docker compose logs -f # Arrêter les services docker compose down ``` ### Accès - **Application** : http://localhost:8080 - **API** : http://localhost:8080/api - **Health check** : http://localhost:8080/api/health ### Compte administrateur par défaut | Champ | Valeur | |-------|--------| | Email | `adminItinova@santinova-soft.org` | | Mot de passe | `Itinova69!` | ## Développement local ### Backend ```bash cd backend npm install cp .env.example .env # Modifier .env avec vos paramètres npm run db:migrate npm run db:seed npm run dev ``` ### Frontend ```bash cd frontend npm install npm run dev ``` Le frontend est accessible sur http://localhost:5173 et proxifie les appels API vers le backend sur le port 3001. ## Structure du projet ``` facturation-santinova/ ├── backend/ │ ├── src/ │ │ ├── config/ # Configuration DB │ │ ├── db/ # Schéma, migrations, seed │ │ ├── middleware/ # Auth JWT, upload Multer │ │ ├── routes/ # Routes API Express │ │ ├── services/ # Services (OCR, audit) │ │ └── index.ts # Point d'entrée serveur │ ├── uploads/ # Stockage des fichiers │ ├── package.json │ └── tsconfig.json ├── frontend/ │ ├── src/ │ │ ├── components/ # Composants React (Layout) │ │ ├── context/ # Contexte Auth │ │ ├── pages/ # Pages de l'application │ │ ├── services/ # Client API Axios │ │ ├── types/ # Types TypeScript │ │ └── utils/ # Utilitaires (formatage) │ ├── package.json │ └── vite.config.ts ├── Dockerfile # Build multi-stage production ├── Dockerfile.migrate # Migration et seed DB ├── docker-compose.yml # Orchestration Docker ├── .env # Variables d'environnement └── README.md ``` ## API Endpoints ### Authentification - `POST /api/auth/login` - Connexion - `GET /api/auth/me` - Profil utilisateur courant - `GET /api/auth/users` - Liste des utilisateurs (admin) - `POST /api/auth/users` - Créer un utilisateur (admin) - `PUT /api/auth/users/:id` - Modifier un utilisateur (admin) - `DELETE /api/auth/users/:id` - Désactiver un utilisateur (admin) ### Factures - `GET /api/invoices` - Liste des factures (paginée, filtrable) - `GET /api/invoices/stats` - Statistiques - `GET /api/invoices/:id` - Détail d'une facture - `POST /api/invoices/upload` - Upload et OCR - `PUT /api/invoices/:id` - Modifier une facture - `PUT /api/invoices/:id/lines` - Modifier les lignes - `POST /api/invoices/:id/status` - Changer le statut (workflow) - `POST /api/invoices/:id/match` - Rapprochement BC - `GET /api/invoices/:id/file` - Télécharger le fichier original - `DELETE /api/invoices/:id` - Supprimer (admin) ### Fournisseurs - `GET /api/suppliers` - Liste - `GET /api/suppliers/:id` - Détail - `POST /api/suppliers` - Créer - `PUT /api/suppliers/:id` - Modifier - `DELETE /api/suppliers/:id` - Désactiver ### Bons de commande - `GET /api/purchase-orders` - Liste - `GET /api/purchase-orders/:id` - Détail - `POST /api/purchase-orders` - Créer - `PUT /api/purchase-orders/:id` - Modifier - `DELETE /api/purchase-orders/:id` - Supprimer ### Exports - `GET /api/exports/invoices/csv` - Export CSV - `GET /api/exports/invoices/excel` - Export Excel - `GET /api/exports/cegi` - Export CEGI (préparatoire) ### Dashboard - `GET /api/dashboard` - Données du tableau de bord ### Notifications - `GET /api/notifications` - Liste - `PUT /api/notifications/:id/read` - Marquer comme lue - `PUT /api/notifications/read-all` - Tout marquer comme lu - `GET /api/notifications/count` - Compteur non lues ## Intégrations futures prévues - **CEGI Compta First** : Module d'export comptable complet - **Réception email** : Parsing automatique des factures reçues par email - **Portail fournisseur** : Import automatisé depuis les portails - **Notifications email** : Alertes par email pour les échéances ## Licence Propriétaire - SANTINOVA