# SALSABIL MADRASSAS — P1 AL QIYAM MULTI-PÔLES SAFE

Date : 24/09/2026  
Base officielle : `b841dc13-b1b6-4bf7-9657-88959e6a9627.zip`  
Prérequis : P0 « NORMALISATION SAFE » (inclus dans ce ZIP cumulatif)  
Migration P1 : `DoctrineMigrations\\Version20260924223000`

## Objectif

P1 sépare proprement les deux programmes historiques Al Qiyam 2026 et prépare le troisième pôle « Al Qiyam Institute » 2026-2027, sans supprimer les historiques et sans modifier les autres madrassas.

Modèle retenu, sans nouvelle table métier :

- `Section` = programme / pôle durable ;
- `AnneeScolaire` = session / année du programme ;
- les anciennes écoles à année générale (`section_id = NULL`) restent rétrocompatibles ;
- plusieurs programmes d'une même école peuvent avoir leur session active en parallèle.

## État cible après migration

Al Qiyam :

1. **Internat Islamique de Vacances**
   - la session historique existante conserve son ID ;
   - elle est rattachée à la section Internat ;
   - libellé : `Internat Islamique de Vacances — 2026` ;
   - aucune inscription, étudiant, paiement, échéance ou suivi n'est recréé.

2. **Formation des femmes en Coran et sciences religieuses**
   - création d'une session propre : `Formation des femmes — Session 2026` ;
   - dates : 02/07/2026 → 21/08/2026 ;
   - la classe femmes 2026, les dossiers/parcours femmes et la règle de frais correspondante sont rattachés à cette session ;
   - les objets financiers/étudiants éventuels sont déplacés uniquement s'ils sont identifiables comme appartenant au programme femmes.

3. **Al Qiyam Institute**
   - création d'une nouvelle section `institut` ;
   - création de l'année académique `2026-2027`, rentrée le 12/10/2026 ;
   - section + année + filières + classes laissées **inactives / BROUILLON** en P1 ;
   - aucune inscription publique à l'Institut n'est ouverte avant P2 ;
   - aucune grille tarifaire n'est créée tant que les montants ne sont pas validés.

Filières préparées (9) :

- Génie logiciel ;
- Télécommunications ;
- Graphiques informatiques et développement Web ;
- Science des données ;
- Finance islamique ;
- Comptabilité ;
- Marketing et commerce international ;
- Banque et finance ;
- Microfinance.

Le tronc commun est documenté dans la section Institut : Qur'an, Fiqh, Éthique islamique, Aqeedah et Tawhid, Hadith et Sira, Langue arabe.

## Sécurités ajoutées

- le formulaire public résout désormais la session active **du programme sélectionné** ;
- une section/niveau/classe inactive ne peut pas être sélectionnée depuis l'inscription publique ;
- les paiements initiés depuis un étudiant utilisent d'abord la session propre de cet étudiant, puis celle de sa section ;
- les exports de niveau utilisent la session de la section correspondante ;
- l'audit plateforme détecte désormais les incohérences `objet ↔ session d'un autre programme` lorsque l'année est scindée par section ;
- l'ancien `app:seed:alqiyam` devient inoffensif après P1 : il refuse de remettre Al Qiyam dans l'ancien modèle à session unique ;
- le mot de passe admin par défaut `password` a été supprimé du seed historique pour les installations neuves ;
- aucune migration P1 ne supprime de ligne dans son `up()` ;
- P1 est transactionnel : une erreur pendant la migration SQL/DML provoque le rollback de la migration.

## Volumes attendus avec le dump de référence du 24/09/2026

Avant P1 :

- sections : 6
- années/sessions : 5
- niveaux : 12
- classes : 17
- étudiants : 123
- inscriptions : 129
- paiements : 59
- échéances : 574
- suivis : 815

Après P1 :

- sections : **7** (+1 Institut)
- années/sessions : **7** (+1 femmes, +1 Institut)
- niveaux : **21** (+9 filières Institut)
- classes : **26** (+9 classes Institut)
- étudiants : **123** (=)
- inscriptions : **129** (=)
- paiements : **59** (=)
- échéances : **574** (=)
- suivis : **815** (=)

Sur le dump de référence, 4 dossiers Formation femmes sont rattachés à la nouvelle session ; aucun étudiant/paiement/échéance femme n'existe encore, donc ces volumes métier restent inchangés.

## Installation recommandée — production cPanel

### 0. Sauvegarde obligatoire

Avant extraction, conserver :

- un dump SQL complet de la base ;
- une copie du code actuel ;
- le snapshot P0 déjà validé, si souhaité.

Exemple pour conserver le snapshot P0 :

```bash
cp var/audit/platform-preflight.json var/audit/platform-preflight-P0-2026-09-24.json
```

### 1. Extraire le ZIP cumulatif à la racine du projet

Le ZIP contient directement `src/`, `templates/`, `migrations/`, etc. Il ne contient ni `vendor/`, ni `var/`, ni `.env*`, ni `public/uploads/`.

### 2. Vérifier PHP

```bash
php -v
```

Le projet exige PHP 8.4.

Si le CLI cPanel ne pointe pas vers PHP 8.4, utiliser par exemple :

```bash
/opt/cpanel/ea-php84/root/usr/bin/php -v
```

Dans les commandes suivantes, remplacer `php` par ce binaire si nécessaire.

### 3. Contrôle AVANT migration

```bash
php bin/console cache:clear --env=prod
php bin/console app:platform:preflight --snapshot=var/audit/platform-preflight-P1.json --env=prod
php bin/console app:alqiyam:p1-check --phase=before --env=prod
```

**Ne pas lancer la migration si l'une de ces deux commandes de contrôle retourne une erreur.**

### 4. Migration Doctrine

```bash
php bin/console doctrine:migrations:migrate --no-interaction --env=prod
```

La migration attendue est :

```text
DoctrineMigrations\\Version20260924223000
```

### 5. Contrôle APRÈS migration

```bash
php bin/console cache:clear --env=prod
php bin/console app:alqiyam:p1-check --phase=after --env=prod
php bin/console app:platform:postflight --snapshot=var/audit/platform-preflight-P1.json --env=prod
```

Le `postflight` signalera comme augmentations normales :

- sections +1 ;
- annees_scolaires +2 ;
- niveaux +9 ;
- classes +9.

Il ne doit détecter **aucune diminution** des données protégées.

## À ne pas faire

Après P1, ne plus utiliser l'ancien seed pour reconfigurer Al Qiyam :

```bash
php bin/console app:seed:alqiyam
```

La commande est désormais protégée et se neutralise si P1 est présent, mais elle reste une commande de bootstrap historique et non l'outil de création des sessions futures.

## Rollback

La migration contient un `down()` protégé, mais pour une production réelle la procédure privilégiée en cas d'échec est :

1. mettre le site en maintenance ;
2. restaurer le dump SQL pris juste avant P1 ;
3. restaurer le code précédent/P0 ;
4. vider le cache ;
5. relancer `app:platform:preflight`.

Le rollback Doctrine est volontairement refusé si l'Institut contient déjà des données métier, afin d'éviter toute perte par suppression des structures préparées.

## Limites volontaires de P1

P1 **ne refond pas encore le site public Al Qiyam** et **n'ouvre pas les inscriptions de l'Institut**. Cela sera P2. Ainsi, la migration métier et les historiques peuvent être validés avant de modifier le portail public.

P1 ne crée pas encore de module `Matière / Cours / Notes / Bulletin`. Cela viendra dans une phase académique dédiée.
