# SALSABIL MADRASSAS — P0 NORMALISATION SAFE

Base officielle : `b841dc13-b1b6-4bf7-9657-88959e6a9627.zip`  
SHA-256 base : `196f3cc305fef3aa9bd774be8b8c1a410f3d98667ab27fb058e12c325f141536`

## Objectif

Préparer SALSABIL MADRASSAS à faire coexister plusieurs sessions actives au sein d'une même école, sans casser le fonctionnement historique des écoles existantes et sans modifier les données métier.

P0 n'ajoute **aucune table**, ne supprime **aucune colonne** et ne déplace **aucune inscription, étudiant, paiement ou suivi**.

## Changements P0

- Une année/session active ne désactive plus toutes les autres années de l'école.
- Une seule session active est conservée **dans le même périmètre** :
  - `section_id IS NULL` = année générale de l'école ;
  - `section_id = X` = session propre à la section/programme X.
- Plusieurs sections/programmes peuvent donc avoir chacune leur session active simultanément.
- `findCurrentForEcole()` reste rétrocompatible et privilégie l'année générale active lorsqu'elle existe.
- Ajout de `findCurrentForSection()` pour les futurs flux ciblés par programme.
- La suppression d'une année/session déjà utilisée est bloquée afin d'éviter que les clés étrangères `ON DELETE SET NULL` effacent silencieusement son rattachement historique.
- Ajout de deux commandes d'audit :
  - `app:platform:preflight`
  - `app:platform:postflight`
- Les incohérences historiques de hiérarchie éventuellement détectées sont seulement signalées ; P0 ne les corrige pas automatiquement.

## Installation locale

1. Faire une sauvegarde de la base.
2. Extraire ce ZIP **à la racine du projet** en autorisant l'écrasement des fichiers du patch.
3. Vérifier PHP :

```bash
php -v
```

Le projet requiert PHP 8.4 ou supérieur.

4. Vider le cache :

```bash
php bin/console cache:clear
```

5. Lancer le contrôle P0 et enregistrer le snapshot :

```bash
php bin/console app:platform:preflight
```

6. Vérifier que la commande termine avec `Preflight OK`.
7. Lancer le contrôle comparatif :

```bash
php bin/console app:platform:postflight
```

P0 ne contient **aucune migration Doctrine** ; il n'est donc pas nécessaire d'exécuter `doctrine:migrations:migrate` pour ce patch.

## Installation cPanel / production

Avant toute intervention : exporter la base SQL complète et conserver le ZIP/code actuellement en production.

Si `php` pointe déjà vers PHP 8.4 :

```bash
php -v
php bin/console cache:clear --env=prod
php bin/console app:platform:preflight --env=prod
php bin/console app:platform:postflight --env=prod
```

Si cPanel utilise le binaire EasyApache PHP 8.4 :

```bash
/opt/cpanel/ea-php84/root/usr/bin/php -v
/opt/cpanel/ea-php84/root/usr/bin/php bin/console cache:clear --env=prod
/opt/cpanel/ea-php84/root/usr/bin/php bin/console app:platform:preflight --env=prod
/opt/cpanel/ea-php84/root/usr/bin/php bin/console app:platform:postflight --env=prod
```

Le snapshot est écrit par défaut dans :

`var/audit/platform-preflight.json`

Ce fichier n'est pas destiné à être versionné et ne contient pas les noms/téléphones des étudiants ; il contient essentiellement des compteurs et l'état des sessions actives.

## Test fonctionnel recommandé après installation

- Ouvrir le tableau de bord de Qamar.
- Ouvrir le tableau de bord de Daroul-Ilm.
- Ouvrir le tableau de bord de Sahaba.
- Ouvrir le tableau de bord d'Al Qiyam.
- Vérifier la liste des inscriptions et des étudiants.
- Vérifier la page Finance et au moins un paiement/reçu existant.
- Ouvrir `Organisation > Années & sessions`.
- Ne pas modifier les anciennes sessions Al Qiyam dans P0 ; la séparation historique sera faite dans P1 avec une migration métier contrôlée.

## Rollback P0

P0 ne modifie pas le schéma ni les données. En cas de problème applicatif, remettre simplement les anciens fichiers du code ou restaurer le ZIP de base officiel, puis :

```bash
php bin/console cache:clear --env=prod
```

Aucune restauration SQL n'est normalement nécessaire pour P0 tant qu'aucune modification manuelle de données n'a été faite après son installation.
