237 lines
7.1 KiB
Markdown
237 lines
7.1 KiB
Markdown
# 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
|