# Audit — Insertions dans `etu_etape_student`

Ce document recense tous les endroits du code PHP qui insèrent des lignes dans la table `etu_etape_student` (colonne `id_etape`), ainsi que le contexte métier qui déclenche chaque insertion.

---

## Table de synthèse

| Étape  | Fichier                    | Déclencheur                                                                                          |
| ------- | -------------------------- | ----------------------------------------------------------------------------------------------------- |
| 1       | `student.php`            | Création ou mise à jour d'un candidat (`query == "add"`)                                          |
| 1, 2, 3 | `studentAdmisSave.php`   | Soumission du dossier d'admission par le candidat (`query == "save"`) avec nationalité renseignée |
| 2       | `student.php`            | Candidat a un intérêt de formation renseigné (`idInteret` présent, lors du `"add"`)           |
| 2       | `student.php`            | Envoi d'un e-mail d'accroche/relance au candidat (`query == "updateEmail"`)                         |
| 3       | `student.php`            | Candidat a confirmé son intérêt (`idInteret` présent, lors du `"add"`)                        |
| 4       | `student.php`            | Qualification du candidat enregistrée (`query == "addQualification"`)                              |
| 5       | `student.php`            | Date d'entretien projet planifiée (`entretienProjetDate` présent, lors du `"addQualification"`) |
| 6       | `student_evaluation.php` | Entretien projet réalisé (`entretienProjetDateFait` présent, lors du `query == "add"`)         |
| 7       | `student_evaluation.php` | Admission validée (`query == "validateAdmission"`)                                                 |
| 8       | `student_evaluation.php` | Inscription validée (`query == "validateInscription"`)                                             |
| 9       | `student_evaluation.php` | Notification d'inscription envoyée au candidat (`query == "validateNotificationInscription"`)      |
| 10      | `student_evaluation.php` | Profil professionnel validé (`query == "validatePresentation"`)                                    |

---

## Détail par étape

### Étape 1 — Candidat créé ou mis à jour

**Fichier :** `student.php` — ligne ~384
**Endpoint :** `?query=add`
**Condition :** Toujours, dès qu'un candidat est créé ou mis à jour via le formulaire de contact principal.
**SQL :**

```sql
INSERT IGNORE INTO etu_etape_student (id_etu, id_etape, date_fait, date_retard)
VALUES ($student->id, 1, NOW(), NOW() + INTERVAL 2 DAY)
```

**Fichier :** `studentAdmisSave.php` — fonction `manageStudentSteps()` ligne ~772
**Endpoint :** `?query=save` (portail candidat `studentAdmisSave.php`)
**Condition :** Le candidat a renseigné sa nationalité dans son dossier d'admission. Les étapes 1, 2 et 3 sont ajoutées en une seule passe si elles ne sont pas déjà présentes.
**SQL :**

```sql
INSERT INTO etu_etape_student (id_etu, id_etape, date_fait, date_retard)
VALUES (?, ?, NOW(), NOW())
```

---

### Étape 2 — Intérêt de formation confirmé / premier e-mail envoyé

**Fichier :** `student.php` — ligne ~391
**Endpoint :** `?query=add`
**Condition :** L'objet `$student` contient un `idInteret` (le conseiller a renseigné un intérêt de formation).

**Fichier :** `student.php` — ligne ~504
**Endpoint :** `?query=updateEmail`
**Condition :** Un e-mail d'accroche ou de relance est envoyé au candidat (`alreadySended` n'est pas vrai au moment de l'envoi). Couvre tous les types de message (accroche, relance_televersement, notification_inscription, res_admission, etc.).

**Fichier :** `studentAdmisSave.php` — fonction `manageStudentSteps()` ligne ~772
**Condition :** Même que pour l'étape 1 (dossier d'admission soumis avec nationalité).

---

### Étape 3 — Intérêt confirmé (suite)

**Fichier :** `student.php` — ligne ~397
**Endpoint :** `?query=add`
**Condition :** Même condition que l'étape 2 (`idInteret` présent). Les étapes 2 et 3 sont insérées ensemble lorsque le conseiller renseigne un intérêt de formation sur le profil candidat.

**Fichier :** `studentAdmisSave.php` — fonction `manageStudentSteps()` ligne ~772
**Condition :** Même que pour les étapes 1 et 2 (dossier d'admission soumis avec nationalité).

---

### Étape 4 — Candidat qualifié

**Fichier :** `student.php` — ligne ~844
**Endpoint :** `?query=addQualification`
**Condition :** Le conseiller enregistre ou met à jour les informations de qualification du candidat (bac, âge, CP, permis, etc.). L'étape est insérée systématiquement lors de cette action.
**Note métier :** Si c'est la première qualification et que la note globale est > 1, un commentaire de suivi « profil premium » est généré ; sinon un commentaire standard est créé.

---

### Étape 5 — Entretien projet planifié

**Fichier :** `student.php` — ligne ~866
**Endpoint :** `?query=addQualification`
**Condition :** En plus de l'étape 4, si le champ `entretienProjetDate` est renseigné (date d'entretien projet fixée), l'étape 5 est également insérée lors de la même requête.

---

### Étape 6 — Entretien projet réalisé

**Fichier :** `student_evaluation.php` — ligne ~145
**Endpoint :** `?query=add` (sur `student_evaluation.php`)
**Condition :** Le champ `entretienProjetDateFait` est renseigné (date effective à laquelle l'entretien a eu lieu). Le conseiller valide que l'entretien s'est bien déroulé.

---

### Étape 7 — Admission validée (notification envoyée)

**Fichier :** `student_evaluation.php` — fonction `validateAdmission()` ligne ~197**Endpoint :** `?query=validateAdmission`**Condition :** Le conseiller valide la décision d'admission, quel que soit le résultat (`admis`, `refuse`, ou `liste_complementaire`). Effets secondaires selon le résultat :

- `refuse` → clôture automatique du candidat (`date_cloture = NOW()`)
- `liste_complementaire` → suivi planifié à 180 jours
- `admis` → suivi planifié à 180 jours

---

### Étape 8 — Inscription validée

**Fichier :** `student_evaluation.php` — fonction `validateInscription()` ligne ~229
**Endpoint :** `?query=validateInscription`
**Condition :** Le conseiller valide l'inscription administrative du candidat. Un suivi est créé avec une prochaine action à 1 jour.

---

### Étape 9 — Notification d'inscription envoyée

**Fichier :** `student_evaluation.php` — fonction `validateNotificationInscription()` ligne ~252
**Endpoint :** `?query=validateNotificationInscription`
**Condition :** Le conseiller confirme que le candidat a été notifié de son inscription. Un suivi est créé avec une prochaine action à 1 jour.

---

### Étape 10 — Profil professionnel validé

**Fichier :** `student_evaluation.php` — fonction `validatePresentation()` ligne ~280
**Endpoint :** `?query=validatePresentation`
**Condition :** Le conseiller valide la présentation/profil professionnel du candidat (champ `presentationCandidat` mis à jour dans `etu_evaluation`). Un suivi est créé avec une prochaine action à 1 jour si l'étape n'était pas déjà présente.

---

---

---

# Vue métier — Quand chaque étape est-elle déclenchée ?

> Cette section est destinée aux équipes métier et aux clients. Elle décrit le parcours candidat tel qu'il est enregistré dans le système, sans détail technique.

---


## Table de synthèse

| Étape  | Fichier                    | Déclencheur                                                                                          |
| ------- | -------------------------- | ----------------------------------------------------------------------------------------------------- |
| 1       | `student.php`            | Création ou mise à jour d'un candidat (`query == "add"`)                                          |
| 1, 2, 3 | `studentAdmisSave.php`   | Soumission du dossier d'admission par le candidat (`query == "save"`) avec nationalité renseignée |
| 2       | `student.php`            | Candidat a un intérêt de formation renseigné (`idInteret` présent, lors du `"add"`)           |
| 2       | `student.php`            | Envoi d'un e-mail d'accroche/relance au candidat (`query == "updateEmail"`)                         |
| 3       | `student.php`            | Candidat a confirmé son intérêt (`idInteret` présent, lors du `"add"`)                        |
| 4       | `student.php`            | Qualification du candidat enregistrée (`query == "addQualification"`)                              |
| 5       | `student.php`            | Date d'entretien projet planifiée (`entretienProjetDate` présent, lors du `"addQualification"`) |
| 6       | `student_evaluation.php` | Entretien projet réalisé (`entretienProjetDateFait` présent, lors du `query == "add"`)         |
| 7       | `student_evaluation.php` | Admission validée (`query == "validateAdmission"`)                                                 |
| 8       | `student_evaluation.php` | Inscription validée (`query == "validateInscription"`)                                             |
| 9       | `student_evaluation.php` | Notification d'inscription envoyée au candidat (`query == "validateNotificationInscription"`)      |
| 10      | `student_evaluation.php` | Profil professionnel validé (`query == "validatePresentation"`)                                    |

## Le parcours en 10 étapes

### ✅ Étape 1 — Le candidat entre dans le système

**Quand ?** Dès qu'un conseiller crée ou met à jour la fiche d'un candidat (nom, prénom, téléphone, e-mail, formation souhaitée). C'est le point de départ de tout candidat dans le CRM.
Peut aussi être déclenchée lorsque **le candidat lui-même remplit son dossier en ligne** (formulaire d'admission), à condition qu'il ait renseigné sa nationalité.

---

### ✅ Étape 2 — Le candidat montre un intérêt / est contacté

**Quand ?** Cette étape est franchie dans deux situations :

- Le conseiller renseigne un **intérêt de formation** sur la fiche du candidat.
- Un **e-mail est envoyé** au candidat (accroche, relance, résultat d'admission, notification d'inscription…).

Elle peut également être enregistrée lors de la soumission du **dossier d'admission en ligne** (si nationalité renseignée).

---

### ✅ Étape 3 — L'intérêt du candidat est confirmé

**Quand ?** Simultanément à l'étape 2, lorsque le conseiller valide qu'un **intérêt de formation est avéré** sur le profil. Un message de suivi interne est automatiquement généré pour tracer cette confirmation.

Elle peut également être enregistrée lors de la soumission du **dossier d'admission en ligne** (si nationalité renseignée).

---

### ✅ Étape 4 — Le candidat est qualifié

**Quand ?** Le conseiller enregistre les **informations de qualification** du candidat : bac, année, mention, lycée, âge, code postal, permis de conduire, etc. C'est l'étape d'évaluation du profil.
En coulisse, une **note factuelle** est calculée automatiquement (proximité géographique, mobilité, spécialité bac, mérite, âge, partenariat lycée) et un commentaire de suivi est généré selon le niveau du profil.

---

### ✅ Étape 5 — Un entretien projet est planifié

**Quand ?** Lors de la même action que l'étape 4, si le conseiller a également renseigné une **date d'entretien projet** à venir. Les étapes 4 et 5 peuvent donc être franchies en même temps.

---

### ✅ Étape 6 — L'entretien projet a eu lieu

**Quand ?** Le conseiller confirme que **l'entretien s'est bien déroulé** en renseignant la date effective à laquelle il a eu lieu (en présentiel, par téléphone, ou lors d'une JPO). Un message de suivi est automatiquement créé.

---

### ✅ Étape 7 — La décision d'admission est prise

**Quand ?** Le conseiller **valide la décision d'admission** du candidat. Trois issues possibles, chacune avec un effet automatique :

- **Admis** → notification envoyée, suivi planifié à 6 mois.
- **Refusé** → le dossier est automatiquement clôturé.
- **Liste complémentaire** → suivi planifié à 6 mois.

---

### ✅ Étape 8 — L'inscription est validée

**Quand ?** Le conseiller confirme que **l'inscription administrative du candidat est finalisée**. Un suivi est planifié le lendemain.

---

### ✅ Étape 9 — Le candidat est notifié de son inscription

**Quand ?** Le conseiller confirme que **le candidat a bien été informé de son inscription** (par e-mail, téléphone, etc.). Un suivi est planifié le lendemain.

---

### ✅ Étape 10 — Le profil professionnel est validé

**Quand ?** Le conseiller valide la **présentation et le profil professionnel** du candidat (texte de présentation pour les entreprises partenaires). Un suivi est planifié le lendemain.

---

## Résumé visuel du parcours

```
[Étape 1] Fiche créée
    ↓
[Étape 2] Intérêt renseigné ou e-mail envoyé
    ↓
[Étape 3] Intérêt confirmé
    ↓
[Étape 4] Candidat qualifié (note calculée)
    ↓
[Étape 5] Entretien planifié
    ↓
[Étape 6] Entretien réalisé
    ↓
[Étape 7] Décision d'admission (admis / refusé / liste complémentaire)
    ↓
[Étape 8] Inscription validée
    ↓
[Étape 9] Candidat notifié de son inscription
    ↓
[Étape 10] Profil professionnel validé ✓
```

---

## Notes complémentaires

- Toutes les insertions utilisent `INSERT IGNORE` (sauf dans `manageStudentSteps` et dans la route `validatePresentation` qui vérifie `mysqli_affected_rows`) pour éviter les doublons grâce à une contrainte d'unicité `(id_etu, id_etape)`.
- Après chaque insertion, la fonction `consolidateStudentStep($con, $idStudent)` (définie dans `student.service.php`) est appelée pour mettre à jour le champ `etape` (étape courante consolidée) sur le profil du candidat.
- Le portail candidat (`studentAdmisSave.php`) gère les étapes 1, 2 et 3 dans une fonction dédiée (`manageStudentSteps`), conditionnée uniquement à la présence de la nationalité dans le dossier.
