# CRM SYNOLUVIA - LOT 15

Date : 17/08/2026

## Objectifs

1. Nettoyer l'interface de tous les marqueurs visuels issus de la preproduction/deploiement.
2. Transformer la gestion existante des fichiers prospects en GED privee rangee par cle primaire prospect.

## POINT 1 - Nettoyage de l'interface

### Supprime de l'interface

- menu `Production OVH` sur desktop et mobile ;
- route `/production-ovh` ;
- bouton `Controle production` dans Parametres ;
- panneau technique `Etat systeme` dans Parametres ;
- badge `CRUD actif` des modeles d'e-mail ;
- mentions techniques `MySQL OVH` dans le formulaire prospect ;
- badge `OVH compatible` de l'ecran de connexion ;
- badges de preproduction/developpement : `Prospection active`, `Actions accessibles`, `Creation active`, `Pilotage actif`, `Historique actif`, `Notes actives`, `Fiche active`, `Saisie active`, `Gestion prospect active` ;
- references de lot/deploiement restantes dans le controleur du tableau de bord.

Les statuts metier reels (modele actif/inactif, compte actif/inactif, etc.) sont conserves.

### Fichiers devenus obsoletes a supprimer sur le serveur

- `app/Http/Controllers/Admin/ProductionChecklistController.php`
- `resources/js/Pages/Production/Index.vue`

La route ayant ete retiree, ces fichiers ne sont plus accessibles, mais leur suppression physique est demandee pour nettoyer le code.

## POINT 2 - GED prospects

### Stockage

Le stockage des nouvelles pieces jointes est realise hors de `public/`, sous :

```text
<racine CRM>/GED/<prospect_id>/<uuid>.<extension>
```

En production :

```text
~/programme/crm/GED/<prospect_id>/...
```

Exemple pour le prospect ID 123 :

```text
~/programme/crm/GED/123/7a8f...-....pdf
```

Le nom original reste conserve en base dans `crm_files.original_name`.

### Formats autorises

- PDF : `.pdf`
- Word : `.doc`, `.docx`
- Images : `.png`, `.jpg`, `.jpeg`
- Images iPhone : `.heic`, `.heif`
- Archives : `.zip`

Taille applicative maximale : 25 Mo par fichier. Cette limite reste soumise aux limites PHP de l'hebergement (`upload_max_filesize` / `post_max_size`).

### Securite

- `GED` est hors du dossier `public` ;
- aucun lien web direct vers le chemin physique n'est expose ;
- ouverture et telechargement passent par des routes Laravel authentifiees ;
- controle de l'appartenance du fichier au prospect ;
- controle de chemin pour empecher une sortie du dossier GED ;
- en-tetes `X-Content-Type-Options: nosniff` et cache prive ;
- seuls PDF/JPEG/PNG/HEIC/HEIF peuvent etre proposes en affichage inline ; Word et ZIP sont telecharges ;
- un `.htaccess` de defense supplementaire interdit un acces HTTP direct si le DocumentRoot etait un jour mal configure.

### Compatibilite historique

Les fichiers crees avant le LOT 15 et encore presents dans `storage/app/public/crm-files` restent telechargeables. Ils ne sont pas deplaces automatiquement, afin d'eviter toute operation destructive.

### Archivage

L'action anciennement nommee `Desactiver` devient `Archiver`.

L'archivage :

- passe `crm_files.is_active` a `false` ;
- retire la piece de l'affichage courant ;
- conserve physiquement le fichier dans la GED.

### Interface

L'onglet `Fichiers` de la fiche prospect devient `GED`.

Le choix d'un fichier :

- remplit automatiquement le nom de la piece si le champ Nom est vide ;
- affiche les formats acceptes et la limite de 25 Mo ;
- propose `Ouvrir`, `Telecharger` et `Archiver` ;
- indique le rangement `GED/<id prospect>/`.

## Base de donnees

Aucune migration SQL dans le LOT 15.

La table `crm_files` existante est reutilisee telle quelle.

## Build frontend

Le dossier `public/build` compile avec Vite est inclus dans le ZIP incrementiel.

Il ne faut pas executer `npm run build` sur OVH.

## Verification effectuee

- syntaxe PHP des fichiers modifies : OK ;
- routes Laravel : routes GED `store`, `open`, `download`, `destroy` presentes ;
- route `production-ovh` absente ;
- recherche des libelles visuels de preproduction : aucun des libelles cibles ne reste dans les sources ou le build ;
- `npm run build` : OK, Vite 6.4.3, 775 modules transformes ;
- tests PHPUnit ajoutes : `tests/Feature/ProspectGedFilesTest.php` ;
- PHPUnit non executable dans l'environnement de generation car les extensions PHP `dom`, `mbstring`, `xml` et `xmlwriter` n'y sont pas installees.

## Deploiement OVH

Aucune migration a executer.

Apres sauvegarde et transfert du ZIP :

```bash
cd ~/programme/crm

# Sauvegarde des fichiers sensibles du lot
mkdir -p ~/backup_crm_lot15
cp -a app/Http/Controllers/CrmFileController.php ~/backup_crm_lot15/
cp -a routes/web.php ~/backup_crm_lot15/
cp -a public/build ~/backup_crm_lot15/public-build

# Il est recommande de remplacer completement l'ancien build
rm -rf public/build

# Decompresser le ZIP LOT 15 dans ~/programme/crm
unzip -o ~/crm_synoluvia_lot_15.zip -d .

# Supprimer les anciens ecrans de preproduction devenus inutiles
rm -f app/Http/Controllers/Admin/ProductionChecklistController.php
rm -f resources/js/Pages/Production/Index.vue
rmdir resources/js/Pages/Production 2>/dev/null || true

# Garantir le dossier GED
mkdir -p GED
chmod 750 GED

# Recharger Laravel
php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

Aucun `php artisan migrate` n'est necessaire pour ce lot.
