Initial commit - Facturation SANTINOVA

This commit is contained in:
manus-admin
2026-04-23 04:49:21 -04:00
commit 6ab833945c
55 changed files with 12642 additions and 0 deletions

236
README.md Normal file
View File

@@ -0,0 +1,236 @@
# 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