Initial commit - Facturation SANTINOVA
This commit is contained in:
236
README.md
Normal file
236
README.md
Normal 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
|
||||
Reference in New Issue
Block a user