# Plateforme de validation de BAT (PHP + MySQL)

Au lieu d'envoyer les BAT par e-mail, l'imprimeur dépose le PDF dans la plateforme. Le client reçoit un e-mail avec un lien,
visualise le PDF dans une grande interface (compatible mobile), pose des post-it, puis **approuve** ou **refuse avec motif**.
L'imprimeur est notifié (tableau de bord + e-mail) et suit tous ses BAT : en attente, acceptés, refusés, imprimés (avec date et heure).

## Installation (PHP 8.1+, MySQL/MariaDB ; extensions pdo_mysql, mbstring, openssl, fileinfo)
1. Copier le dossier sur le serveur. Le **document root** du site doit être le dossier `public/` (le dossier `storage/` ne doit jamais être accessible par le web).
2. Rendre `storage/` et le dossier racine inscriptibles par PHP (le temps de l'installation pour la racine : `config.php` y est écrit).
3. Ouvrir `https://votre-site/install.php` : base de données, nom de l'imprimerie, compte imprimeur. Puis **supprimer `install.php`**.
4. Se connecter, puis **Paramètres** : adresse publique du site, e-mail de notification, **SMTP** (mode « SMTP »), délais de relance. Utiliser « Tester l'envoi ».
5. Planifier les tâches (cron) :
   ```
   0 * * * *    php /chemin/bat/cron/reminders.php     # relances automatiques
   */5 * * * *  php /chemin/bat/cron/scan_inbox.php    # (optionnel) dossier d'échange ERP
   ```
Nginx : servir `.mjs` en `text/javascript`, régler `client_max_body_size 70m` et `upload_max_filesize` / `post_max_size` PHP.

Tant que le mode d'envoi est « Test », aucun e-mail réel n'est envoyé : ils sont lisibles dans l'onglet **E-mails** (pratique pour tester).

## Parcours
- **Imprimeur** : *Nouveau BAT* → glisser le PDF, choisir un client existant ou saisir un e-mail (le client est créé automatiquement : plus de ressaisie), message, relance automatique facultative.
- **Client** : e-mail → page de validation plein écran : zoom, post-it (« Ajouter un post-it » puis cliquer/toucher le document), **Approuver** ou **Refuser** (motif obligatoire, motifs rapides). Un client ne voit que ses propres BAT (lien « Mes autres BAT », jeton personnel).
- **Tableau de bord** : compteurs, filtres (en attente / en retard / à imprimer / refusés / imprimés), dates et heures, badge « Nouveau » sur les décisions non vues, bouton **Relancer**, bouton **Marquer imprimé**, actualisation automatique.
- **Refus** : l'imprimeur ouvre la fiche, lit le motif et les post-it, envoie une **nouvelle version** (V2, V3…) ; l'historique complet est conservé.
- **Relances** : bouton manuel à tout moment ; option « relance automatique » à l'envoi (tous les N jours, maximum configurable). Le délai par défaut et le seuil « en retard » se règlent dans Paramètres.
- **Clients** : création / modification / import CSV, code client ERP, lien d'espace client régénérable.

## Récupérer l'e-mail du client sans ressaisie (ERP / dossier de fabrication)
Trois niveaux, du plus simple au plus automatisé :
1. **Base clients** : un client saisi une fois est réutilisé. Import **CSV** (`nom;societe;email;telephone;code_erp`) depuis un export ERP.
2. **Dossier surveillé** `storage/inbox/` (`cron/scan_inbox.php`) : déposer un sous-dossier `CODE_CLIENT_ERP/` contenant le PDF → le client est retrouvé par son code ERP et le BAT part tout seul.
   Un fichier `bat.json` facultatif (ou `client.json`) permet d'indiquer `email`, `erp_code`, `name`, `company`, `title`, `reference`, `message`, `reminder_enabled`, `reminder_days`.
   Le lien avec le dossier de fabrication : l'ERP (ou le script de scan du dossier de fab) écrit ce `bat.json` à côté du PDF.
   Dossiers traités → `inbox/_traites`, en erreur → `inbox/_erreurs` (avec `erreur.txt`). Le dossier peut être changé via `inbox_dir` dans `config.php`.
3. **API HTTP** : `POST /api_import.php` avec l'en-tête `X-API-Key` (clé dans Paramètres) et les champs `file` (PDF), `email` ou `erp_code`, `name`, `company`, `title`, `reference`, `message`, `reminder_enabled`, `reminder_days`.
   ```
   curl -H "X-API-Key: ..." -F file=@bat.pdf -F erp_code=C00123 -F title="Flyer A5" https://votre-site/api_import.php
   ```
Pour brancher l'ERP lui-même, il suffit d'un petit script qui appelle cette API (ou dépose le dossier ci-dessus).

## Sécurité
Mots de passe hachés, protection CSRF sur l'espace imprimeur, liens clients à jeton aléatoire (48 caractères), PDF stockés hors du dossier public sous des noms aléatoires et servis par `file.php`, post-it modifiables uniquement tant que le BAT est en attente, décision définitive une fois prise. Utiliser HTTPS en production. Le mot de passe SMTP est stocké en clair en base : utiliser un compte d'envoi dédié.

## Structure
`public/` pages web · `src/` logique (bootstrap, bats, mailer, layout, schema.sql) · `cron/` tâches planifiées · `storage/` PDF et dossier d'échange ERP · visionneuse : PDF.js (Apache 2.0) embarqué dans `public/assets/vendor`.

## Pistes pour une v2
Preuve de validation renforcée (IP, accusé PDF horodaté), rôles utilisateurs, comparaison V1/V2, connecteur ERP dédié, export CSV du tableau de bord, SMS de relance.
