fix: corrige la régression EditSaisieModal et le nombre réel de sous-émotions
Suite à la revue par agents : - EditSaisieModal : réinitialise prevSaisieId à la fermeture (saisie=null) pour que la réouverture de la MÊME saisie réaffiche ses valeurs d'origine (régression introduite par le passage de useEffect à l'ajustement d'état) - corrige le nombre de sous-émotions 28 -> 33 (compte réel du seeder : 6+5+5+5+4+4+4) dans le dossier, les slides, le plan d'oral et CLAUDE.md - régénère le cahier des charges (19 p.) et le support de soutenance (16 slides) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
@@ -48,7 +48,7 @@ Cesizen/
|
|||||||
| Configurer les émotions (2 niveaux) | Admin | ✅ | N/A |
|
| Configurer les émotions (2 niveaux) | Admin | ✅ | N/A |
|
||||||
|
|
||||||
### Hiérarchie des émotions (seed)
|
### Hiérarchie des émotions (seed)
|
||||||
7 émotions de base (niveau 1) avec 28 sous-émotions (niveau 2) :
|
7 émotions de base (niveau 1) avec 33 sous-émotions (niveau 2) :
|
||||||
Joie, Tristesse, Colère, Peur, Dégoût, Surprise, Amour.
|
Joie, Tristesse, Colère, Peur, Dégoût, Surprise, Amour.
|
||||||
|
|
||||||
## Grille de priorisation des besoins
|
## Grille de priorisation des besoins
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
| **0:00 – 2:00** (2′) | 1 — 2 | **Introduction** | Se présenter. Annoncer le commanditaire (Ministère) et l'objet : une plateforme grand public de santé mentale. Donner le fil rouge : « je vais dérouler le recueil du besoin, la priorisation, la réponse fonctionnelle, puis la modélisation technique et la conformité RGPD. » Présenter le sommaire (slide 2). |
|
| **0:00 – 2:00** (2′) | 1 — 2 | **Introduction** | Se présenter. Annoncer le commanditaire (Ministère) et l'objet : une plateforme grand public de santé mentale. Donner le fil rouge : « je vais dérouler le recueil du besoin, la priorisation, la réponse fonctionnelle, puis la modélisation technique et la conformité RGPD. » Présenter le sommaire (slide 2). |
|
||||||
| **2:00 – 5:00** (3′) | 3 — 4 | **Contexte, enjeux, parties prenantes** | Rappeler l'enjeu sociétal (22 % des Français, SPF 2023) et la stigmatisation. Énoncer les 4 objectifs stratégiques. Présenter les parties prenantes et les 3 acteurs (Visiteur, Utilisateur, Administrateur). Insister : « le besoin a été **reformulé**, pas recopié. » |
|
| **2:00 – 5:00** (3′) | 3 — 4 | **Contexte, enjeux, parties prenantes** | Rappeler l'enjeu sociétal (22 % des Français, SPF 2023) et la stigmatisation. Énoncer les 4 objectifs stratégiques. Présenter les parties prenantes et les 3 acteurs (Visiteur, Utilisateur, Administrateur). Insister : « le besoin a été **reformulé**, pas recopié. » |
|
||||||
| **5:00 – 7:00** (2′) | 5 — 6 | **Besoins & priorisation** | Périmètre : 2 modules obligatoires + Tracker au choix ; modules écartés assumés. Présenter la grille pondérée /15 (5 critères). Conclusion argumentée : « le Tracker cumule 4 fonctionnalités à 9-10/15, c'est le module au choix le plus rentable. » |
|
| **5:00 – 7:00** (2′) | 5 — 6 | **Besoins & priorisation** | Périmètre : 2 modules obligatoires + Tracker au choix ; modules écartés assumés. Présenter la grille pondérée /15 (5 critères). Conclusion argumentée : « le Tracker cumule 4 fonctionnalités à 9-10/15, c'est le module au choix le plus rentable. » |
|
||||||
| **7:00 – 12:00** (5′) | 7 — 8 — 9 | **Réponse fonctionnelle** | Module Comptes : JWT, RGPD, admin (slide 7 + maquette). Module Informations : feeds, modération, slug auto (slide 8). Module Tracker : wizard 3 étapes, journal, rapports 4 périodes, 7+28 émotions (slide 9 + maquettes). Montrer que chaque écran répond à un besoin précis. |
|
| **7:00 – 12:00** (5′) | 7 — 8 — 9 | **Réponse fonctionnelle** | Module Comptes : JWT, RGPD, admin (slide 7 + maquette). Module Informations : feeds, modération, slug auto (slide 8). Module Tracker : wizard 3 étapes, journal, rapports 4 périodes, 7+33 émotions (slide 9 + maquettes). Montrer que chaque écran répond à un besoin précis. |
|
||||||
| **12:00 – 16:00** (4′) | 10 — 11 — 12 | **Modélisation** | Cas d'usage UML (slide 10) : couverture par acteur. MCD Merise (slide 11) : 8 entités, cardinalités, hiérarchie d'émotions auto-référencée. Architecture MVC découplée (slide 12) : 1 API REST Laravel → 2 clients ; justifier le pattern (testabilité, évolutivité, non-duplication). |
|
| **12:00 – 16:00** (4′) | 10 — 11 — 12 | **Modélisation** | Cas d'usage UML (slide 10) : couverture par acteur. MCD Merise (slide 11) : 8 entités, cardinalités, hiérarchie d'émotions auto-référencée. Architecture MVC découplée (slide 12) : 1 API REST Laravel → 2 clients ; justifier le pattern (testabilité, évolutivité, non-duplication). |
|
||||||
| **16:00 – 17:30** (1′30) | 13 | **RGPD & données sensibles** | Données de santé = sensibles (art. 9). Consentement, droits CNIL (export/anonymisation), soft delete. Sécurité : chiffrement AES-256/TLS, JWT, HDS, table audits. |
|
| **16:00 – 17:30** (1′30) | 13 | **RGPD & données sensibles** | Données de santé = sensibles (art. 9). Consentement, droits CNIL (export/anonymisation), soft delete. Sécurité : chiffrement AES-256/TLS, JWT, HDS, table audits. |
|
||||||
| **17:30 – 19:00** (1′30) | 14 | **Prototype & perspectives** | Prototype fonctionnel (Laravel + Next.js + Expo + Docker). Ouverture : activer les modules écartés sans réécrire le modèle, Open Data, Mon Espace Santé (FHIR), i18n. |
|
| **17:30 – 19:00** (1′30) | 14 | **Prototype & perspectives** | Prototype fonctionnel (Laravel + Next.js + Expo + Docker). Ouverture : activer les modules écartés sans réécrire le modèle, Open Data, Mon Espace Santé (FHIR), i18n. |
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
> Le besoin est un journal personnel unique ; le tracker est créé automatiquement à l'inscription. Le modèle reste extensible (passer en 1-N) si un jour on veut plusieurs journaux thématiques.
|
> Le besoin est un journal personnel unique ; le tracker est créé automatiquement à l'inscription. Le modèle reste extensible (passer en 1-N) si un jour on veut plusieurs journaux thématiques.
|
||||||
|
|
||||||
**Q7. Comment gérez-vous la hiérarchie d'émotions à 2 niveaux ?**
|
**Q7. Comment gérez-vous la hiérarchie d'émotions à 2 niveaux ?**
|
||||||
> Une seule table `emotions` avec auto-référence `parent_id` : niveau 1 = parent_id NULL, niveau 2 = parent_id renseigné. 7 émotions de base + 28 sous-émotions. L'admin la configure via le CRUD émotions.
|
> Une seule table `emotions` avec auto-référence `parent_id` : niveau 1 = parent_id NULL, niveau 2 = parent_id renseigné. 7 émotions de base + 33 sous-émotions. L'admin la configure via le CRUD émotions.
|
||||||
|
|
||||||
### Données & sécurité (RGPD)
|
### Données & sécurité (RGPD)
|
||||||
**Q8. Les données émotionnelles sont sensibles — comment êtes-vous conforme ?**
|
**Q8. Les données émotionnelles sont sensibles — comment êtes-vous conforme ?**
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ export default function EditSaisieModal({ saisie, isOpen, onClose }: EditSaisieM
|
|||||||
|
|
||||||
// Synchronise le formulaire quand une nouvelle saisie est passée : ajustement
|
// Synchronise le formulaire quand une nouvelle saisie est passée : ajustement
|
||||||
// d'état pendant le rendu (pattern recommandé par React, sans effet).
|
// d'état pendant le rendu (pattern recommandé par React, sans effet).
|
||||||
|
// À la fermeture (saisie = null) on réinitialise prevSaisieId pour que la
|
||||||
|
// réouverture de la MÊME saisie réaffiche bien ses valeurs d'origine.
|
||||||
const [prevSaisieId, setPrevSaisieId] = useState<number | null>(null);
|
const [prevSaisieId, setPrevSaisieId] = useState<number | null>(null);
|
||||||
if (saisie && saisie.id !== prevSaisieId) {
|
if (saisie && saisie.id !== prevSaisieId) {
|
||||||
setPrevSaisieId(saisie.id);
|
setPrevSaisieId(saisie.id);
|
||||||
@@ -31,6 +33,8 @@ export default function EditSaisieModal({ saisie, isOpen, onClose }: EditSaisieM
|
|||||||
setIntensite(saisie.intensite);
|
setIntensite(saisie.intensite);
|
||||||
setNote(saisie.note || '');
|
setNote(saisie.note || '');
|
||||||
setDateSaisie(saisie.date_saisie.split('T')[0]);
|
setDateSaisie(saisie.date_saisie.split('T')[0]);
|
||||||
|
} else if (!saisie && prevSaisieId !== null) {
|
||||||
|
setPrevSaisieId(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleSubmit = async () => {
|
const handleSubmit = async () => {
|
||||||
|
|||||||
@@ -585,7 +585,7 @@ pdf.h2("5.3 Module 'Tracker d'émotions' (au choix)")
|
|||||||
pdf.paragraph(
|
pdf.paragraph(
|
||||||
"Le module Tracker permet à l'utilisateur d'enregistrer son état émotionnel via un wizard en 3 étapes, "
|
"Le module Tracker permet à l'utilisateur d'enregistrer son état émotionnel via un wizard en 3 étapes, "
|
||||||
"de consulter son journal, et de visualiser des rapports analytiques sur 4 périodes (semaine, mois, trimestre, année). "
|
"de consulter son journal, et de visualiser des rapports analytiques sur 4 périodes (semaine, mois, trimestre, année). "
|
||||||
"Les émotions sont structurées en 2 niveaux (7 émotions de base + 28 sous-émotions précises)."
|
"Les émotions sont structurées en 2 niveaux (7 émotions de base + 33 sous-émotions précises)."
|
||||||
)
|
)
|
||||||
pdf.h3("Wizard d'ajout de saisie (3 étapes)")
|
pdf.h3("Wizard d'ajout de saisie (3 étapes)")
|
||||||
pdf.block_callout(
|
pdf.block_callout(
|
||||||
|
|||||||
+2
-2
@@ -229,7 +229,7 @@ cols = [
|
|||||||
]),
|
]),
|
||||||
("1 module AU CHOIX (retenu)", BLUE, [
|
("1 module AU CHOIX (retenu)", BLUE, [
|
||||||
"Tracker d'émotions : journal, saisies, rapports périodiques.",
|
"Tracker d'émotions : journal, saisies, rapports périodiques.",
|
||||||
"Hiérarchie : 7 émotions de base + 28 sous-émotions.",
|
"Hiérarchie : 7 émotions de base + 33 sous-émotions.",
|
||||||
]),
|
]),
|
||||||
("Modules ÉCARTÉS", GREY, [
|
("Modules ÉCARTÉS", GREY, [
|
||||||
"Diagnostic de stress.",
|
"Diagnostic de stress.",
|
||||||
@@ -326,7 +326,7 @@ bullets(s, [
|
|||||||
"Journal de bord : consultation, modification, suppression des saisies.",
|
"Journal de bord : consultation, modification, suppression des saisies.",
|
||||||
"Rapports analytiques sur 4 périodes : semaine, mois, trimestre, année.",
|
"Rapports analytiques sur 4 périodes : semaine, mois, trimestre, année.",
|
||||||
"Statistiques : intensité moyenne, émotion dominante, répartition, évolution.",
|
"Statistiques : intensité moyenne, émotion dominante, répartition, évolution.",
|
||||||
"Hiérarchie configurable par l'admin : 7 émotions + 28 sous-émotions.",
|
"Hiérarchie configurable par l'admin : 7 émotions + 33 sous-émotions.",
|
||||||
"Web (graphiques Recharts) et mobile (Expo) synchronisés via l'API.",
|
"Web (graphiques Recharts) et mobile (Expo) synchronisés via l'API.",
|
||||||
], Inches(0.7), Inches(1.45), Inches(7.0), Inches(5.3), size=16, gap=10)
|
], Inches(0.7), Inches(1.45), Inches(7.0), Inches(5.3), size=16, gap=10)
|
||||||
image_fit(s, "mockup_wizard.png", Inches(7.9), Inches(1.35), Inches(2.5), Inches(5.3))
|
image_fit(s, "mockup_wizard.png", Inches(7.9), Inches(1.35), Inches(2.5), Inches(5.3))
|
||||||
|
|||||||
Reference in New Issue
Block a user