# Checklist de mise en production — Imoplex

Guide de déploiement sur hébergement mutualisé cPanel (Namecheap), sans SSH.
À suivre dans l'ordre. Les scripts `bin/` s'exécutent via **Cron Jobs** de cPanel
(`php /home/UTILISATEUR/chemin/bin/script.php`) ou en SSH si disponible.

## 1. Fichiers et arborescence

- [ ] Téléverser le contenu du paquet hors du dossier web public.
      Cible recommandée : `/home/UTILISATEUR/imoplex/` (racine projet), et faire
      pointer le **Document Root** du domaine vers `.../imoplex/public_html`.
- [ ] Si le Document Root ne peut pas être déplacé, garder `public_html/` comme
      racine web et remonter `app/`, `storage/`, `bin/` **au-dessus** de la racine web.
- [ ] Vérifier la présence des `.htaccess` : `public_html/` (réécriture + sécurité),
      `storage/` et `app/` (`Require all denied`).

## 2. Base de données (cPanel → MySQL Databases)

- [ ] Créer la base et un utilisateur dédié, lui donner tous les droits sur la base.
- [ ] Importer dans l'ordre via phpMyAdmin :
      `1-schema-mvp.sql`, `2-schema-phase2.sql`, `3-schema-phase3.sql`.
- [ ] **Ne PAS importer `4-data-demo.sql`** en production (données et comptes de démo).

## 3. Configuration (`app/Config/config.php`)

- [ ] `APP_ENV` = `production` (désactive l'affichage des erreurs).
- [ ] Renseigner `DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASS`.
- [ ] **Régénérer `APP_SECRET`** : lancer `php bin/generer-secret.php` et coller la
      ligne fournie. Sans cela, le chiffrement des identifiants de passerelles est faible.
- [ ] Renseigner **APP_URL** (URL publique, sans slash final) : sert aux liens dans les e-mails.

- [ ] (Optionnel) Configurer l'e-mail dans /admin/email : les envois marchent par défaut via mail(), SMTP possible pour la délivrabilité.

## 4. Permissions des dossiers

- [ ] `storage/` et ses sous-dossiers (`documents/`, `uploads/`, `backups/`, `logs/`)
      inscriptibles par PHP (`755`, ou `750` si le propriétaire est l'utilisateur PHP).
- [ ] Confirmer que `storage/` et `app/` ne sont **pas** accessibles par le web
      (tester `https://votre-domaine/storage/` → doit être refusé).

## 5. Vérification automatique

- [ ] Lancer `php bin/verifier-prod.php`.
      Objectif : **0 bloquant**. Corriger tout `[ KO ]` (PHP < 8, extension manquante,
      APP_SECRET non modifié, BDD injoignable, dossier non inscriptible…).

## 6. Purge des données de démonstration (si `4-data-demo.sql` a été importé)

- [ ] `php bin/purger-comptes-demo.php` (aperçu), puis `--confirmer` pour supprimer
      les comptes `@demo.bj` (mots de passe publics).
- [ ] Créer le vrai compte super administrateur et la vraie agence.

## 7. Sauvegarde initiale et récurrente

- [ ] `php bin/sauvegarde-bdd.php` : crée un export SQL dans `storage/backups/`
      (PHP pur, sans mysqldump). Conserve les 14 dernières (rotation auto).
- [ ] Programmer une **tâche cron** quotidienne :
      `php /home/UTILISATEUR/imoplex/bin/sauvegarde-bdd.php`
- [ ] Programmer une **tâche cron quotidienne** pour les rappels de loyer :
      `php /home/UTILISATEUR/imoplex/bin/rappels-echeances.php`
- [ ] Compléter avec les sauvegardes cPanel (fichiers + base) si disponibles.

## 8. HTTPS et sécurité finale

- [ ] Activer le certificat SSL (AutoSSL cPanel), puis décommenter la redirection
      HTTPS en tête de `public_html/.htaccess`.
- [ ] Vérifier les en-têtes de sécurité (déjà posés : `X-Content-Type-Options`,
      `X-Frame-Options`, `Referrer-Policy`).
- [ ] Se connecter, activer la 2FA (TOTP) sur le compte super administrateur.

## 9. Recette fonctionnelle en conditions réelles

- [ ] Parcours minimal : connexion, création d'un bien, d'un bail, encaissement d'un
      loyer, génération d'une quittance PDF, reversement propriétaire.
- [ ] Vérifier la corbeille (supprimer puis restaurer un enregistrement de test).
- [ ] Vérifier un import CSV (locataires) et le journal d'import.

---
**Rappel architecture** : application 100 % autonome. Les passerelles SMS/WhatsApp
sont un magasin de configuration passif — aucun envoi automatique n'est effectué par
l'application (finalisation manuelle/semi-automatique). Aucune dépendance externe.
