# Voryntel ERP

ERP complet développé sous **Laravel 13 / PHP 8.5 / MariaDB**, couvrant les 20 modules
métier d'une société de services informatiques.

## Démarrage

```bash
# La base "erp" est déjà migrée et remplie de données de démonstration.
php artisan serve
# puis http://127.0.0.1:8000
```

Pour réinitialiser les données de démo :

```bash
php artisan migrate:fresh --seed
```

## Accès

| Espace | URL | Identifiants |
|--------|-----|--------------|
| Back-office | `/login` | `admin@voryntel.fr` / `password` |
| Portail client | `/portail/login` | email d'un client activé / `client` |

Autres comptes : `sophie@voryntel.fr`, `julien@voryntel.fr`, `compta@voryntel.fr` (mdp `password`).

## Modules couverts

| # | Module | État | Route |
|---|--------|------|-------|
| 1 | Tableau de bord (KPIs, graphiques, objectif, alertes) | ✅ Fonctionnel | `/dashboard` |
| 2 | CRM Prospects (pipeline kanban, activités, conversion) | ✅ CRUD complet | `/prospects` |
| 3 | Clients (fiche à onglets, contacts, actifs IT, portail) | ✅ CRUD complet | `/clients` |
| 4 | Catalogue de prestations (10 catégories) | ✅ CRUD complet | `/services` |
| 5 | Devis (éditeur de lignes, remises, options, acceptation) | ✅ CRUD complet | `/quotes` |
| 6 | Gestion des ventes (pipeline, taux de transfo) | ✅ Fonctionnel | `/opportunities` |
| 7 | Contrats (types, avenants, signature, facturation) | ✅ CRUD complet | `/contracts` |
| 8 | Ordres de Fabrication (checklist, temps, validation) | ✅ CRUD complet | `/work-orders` |
| 9 | Facturation (factures, avoirs, paiements, relances) | ✅ CRUD complet | `/invoices` |
| 10 | GED (import, OCR simulé, tags, recherche) | ✅ Fonctionnel | `/documents` |
| 11 | Agenda (calendrier mensuel) | ✅ Fonctionnel | `/agenda` |
| 12 | Automatisation (workflow builder) | ✅ Fonctionnel | `/workflows` |
| 13 | Intelligence décisionnelle (KPIs, prévision IA) | ✅ Fonctionnel | `/bi` |
| 14 | Assistant IA (interroge les données réelles) | ✅ Fonctionnel | `/assistant` |
| 15 | Notifications | ⚙️ Base présente (table `notifications`) | — |
| 16 | Paramètres (entreprise, TVA, numérotation) | ✅ Fonctionnel | `/parametres` |
| 17 | Utilisateurs, rôles, permissions, 2FA | ✅ CRUD complet | `/users` |
| 18 | Portail client (signature devis, validation OF) | ✅ Fonctionnel | `/portail` |
| 19 | Recherche globale (multi-entités, plein texte) | ✅ Fonctionnel | `/recherche` |
| 20 | Journal d'activité (audit filtrable) | ✅ Fonctionnel | `/audit` |

## Automatisation phare (Module 5 → 7/8/9)

À l'**acceptation d'un devis**, l'ERP génère automatiquement :
1. un **contrat** ;
2. un **ordre de fabrication** (avec checklist issue des lignes) ;
3. une **facture d'acompte de 30 %**.

Chaque action est tracée dans le journal d'audit.

## Architecture

- **28 modèles Eloquent** avec relations (`app/Models`)
- **19 contrôleurs** (`app/Http/Controllers`)
- **9 migrations métier** (`database/migrations/2026_07_18_*`)
- **UI** : Blade + Tailwind (CDN) + Alpine.js + Chart.js, layout d'administration
  avec sidebar (composants réutilisables dans `resources/views/components`)
- **Helpers** : `eur()`, `setting()`, `minutes_to_hm()`, `badge_class()` (`app/Helpers/helpers.php`)
- **Audit** : `ActivityLog::record()` appelé depuis les contrôleurs

## Fonctionnalités avancées (implémentées et testées)

### 📄 Génération PDF (dompdf)
- Devis : bouton **PDF** sur la fiche + `GET /devis/{id}/pdf`
- Factures : bouton **PDF** sur la fiche + `GET /factures/{id}/pdf`
- Gabarits dédiés impression : `resources/views/pdf/{quote,invoice}.blade.php`
- Service : `App\Services\PdfService`
- PDF A4, police embarquée, disponibles aussi depuis le portail client.

### 📊 Exports Excel (PhpSpreadsheet)
- Factures, Clients, Devis → vrais fichiers `.xlsx` (en-têtes stylés, totaux, figement)
- Boutons sur les listes correspondantes et dans le module Décisionnel
- Routes `GET /exports/{factures,clients,devis}`
- Service : `App\Services\ExcelExport`

### ✉️ Notifications email (Laravel Mail)
- Envoi d'un **devis** (avec PDF joint) → `QuoteController@send`
- Envoi d'une **facture** (avec PDF joint) → `InvoiceController@send`
- **Relance** de facture impayée → `InvoiceController@remind`
- Mailables : `App\Mail\{QuoteMail, InvoiceMail}` (templates Markdown)
- ⚙️ `MAIL_MAILER=log` par défaut (les emails sont écrits dans `storage/logs/laravel.log`).
  Pour un envoi réel, configurez le SMTP dans `.env` (`MAIL_MAILER=smtp`, `MAIL_HOST`, …).

### 🔎 OCR réel (Tesseract 5)
- Extraction automatique du texte à l'import d'un document (`DocumentController@store`)
- **Images** : OCR direct · **PDF** : conversion via `pdftoppm` (poppler) puis OCR des 3 premières pages
- Langues : français + anglais · Service : `App\Services\OcrService`
- Le texte extrait alimente la **recherche plein texte** de la GED.

## Autres pistes d'extension

- Signature manuscrite (canvas → `signature_data`)
- Assistant IA génératif branché sur l'API Claude
- Notifications SMS/push
- File d'attente pour la facturation récurrente des abonnements (`php artisan schedule`)
