DOCS/creche/myinfomate-creche-spec.md
Thomas Fransolet a5a8ecdb20 Documentation interne MyInfoMate / Unov
Import initial de la documentation : statut, roadmap, plans V1/V2,
specs verticales (creche, sport), audits securite, plan de test,
analyse concurrentielle et maquettes de design.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-11 11:17:01 +02:00

219 lines
8.3 KiB
Markdown

# MyInfoMate Crèche — Spécification technique et fonctionnelle
## Contexte
MyInfoMate Crèche est une déclinaison (Flutter flavor) de la solution MyInfoMate destinée aux crèches et milieux d'accueil de la petite enfance. Une instance = une crèche.
L'objectif : remplacer les carnets papier, les appels téléphoniques intempestifs et les groupes WhatsApp par une app professionnelle aux couleurs de la crèche.
---
## Nouveaux rôles
| Rôle | Description |
|------|-------------|
| `Director` | Responsable de la crèche — accès complet au manager-app |
| `Educator` | Puéricultrice/trice — encodage des journaux quotidiens et des activités |
| `Parent` | Accès lecture seule — journal de son/ses enfant(s) uniquement |
Les rôles `Director` et `Educator` utilisent le manager-app (web).
Les `Parent` utilisent l'app mobile.
> **Note :** `User` reste l'entité existante (côté manager-app). `Parent` est une nouvelle entité côté mobile, distincte de `User`, liée à un ou plusieurs `Child`. Même séparation que `Member` dans la déclinaison Sport.
---
## Nouvelles entités backend
### `Child`
```
Id, FirstName, LastName, BirthDate, PhotoUrl
GroupId (FK → Group)
InstanceId (FK → Instance)
```
### `Group`
```
Id, Name, Color, EducatorId (FK → User, nullable)
InstanceId (FK → Instance)
```
Exemples : "Les Poussins", "Les Lutins", "Les Papillons"
### `Parent`
```
Id, FirstName, LastName, Email, PhoneNumber
InstanceId (FK → Instance)
```
Relation many-to-many `Parent ↔ Child` (deux parents peuvent avoir le même enfant).
Auth par email/password ou magic link email (comme Member dans Sport).
### `DailyReport`
```
Id, ChildId (FK), Date, EducatorId (FK → User)
Meals: { Morning: string, Noon: string, Afternoon: string }
Naps: [ { Start: DateTime, End: DateTime } ]
Diapers: [ { Time: DateTime, Type: enum (Wet/Dirty/Both) } ]
Mood: enum (Happy, Calm, Tired, Difficult)
Note: string?
Activities: string?
```
Stocké en JSONB pour Meals, Naps, Diapers (listes variables).
### `DailyReportPhoto`
```
Id, DailyReportId (FK), ResourceId (FK → Resource), Caption: string?
```
### `Announcement`
```
Id, Title, Body, PinnedUntil: DateTime?, TargetGroupId: string? (null = toute la crèche)
AuthorId (FK → User), InstanceId, CreatedAt
```
---
## App mobile parents
### Navigation (bottom bar)
| Onglet | Contenu |
|--------|---------|
| Accueil | Annonces épinglées, dernier journal de chaque enfant, météo |
| Journal | Historique des journaux quotidiens de l'enfant sélectionné |
| Galerie | Photos de l'enfant (issues des journaux) |
| Infos | Horaires de la crèche, règlement, contacts, carte |
Si un parent a plusieurs enfants : sélecteur d'enfant en haut de l'écran (comme le sélecteur d'équipe dans Sport).
### Écran Accueil
- Carte de bienvenue avec photo et prénom de l'enfant
- Météo (module existant MyInfoMate)
- Dernière annonce épinglée de la crèche
- Résumé du dernier journal : humeur (emoji), repas (oui/non), dernière sieste
### Écran Journal — détail d'un jour
- Humeur (icône colorée)
- Repas : matin / midi / goûter (texte libre)
- Siestes : heures de début/fin
- Changes : nombre et type
- Note de la puéricultrice
- Photos du jour
### Notifications push
- Nouveau journal disponible → notification au(x) parent(s) concerné(s)
- Nouvelle annonce importante → notification à toute la crèche ou groupe ciblé
- Rappel d'absence à déclarer (optionnel, V2)
---
## Manager-app — adaptations
### Onglet "Enfants" (nouveau)
- Liste des enfants par groupe
- Fiche enfant : infos, liste des parents associés, historique des journaux
- Ajout/modification/archivage d'un enfant
- Invitation des parents par email
### Onglet "Groupes" (nouveau)
- Création et gestion des groupes
- Assignation des enfants et de l'éducatrice référente
### Onglet "Journal quotidien" (nouveau — Educator + Director)
**Vue liste — point d'entrée**
- Date en haut (flèches gauche/droite pour naviguer, défaut : aujourd'hui)
- Filtre par groupe (si l'éducatrice a plusieurs groupes)
- Liste des enfants du groupe : photo + prénom + badge statut (À compléter / Complété / Absent)
- Tap sur un enfant → ouvre le panneau d'encodage (pas une nouvelle page — drawer ou bottom sheet pour rester dans le flux)
**Panneau d'encodage rapide (par enfant)**
Tout inline, dans l'ordre naturel de la journée :
1. **Présence** — présent / absent (si absent, le reste est masqué)
2. **Arrivée / Départ** — heure d'arrivée et heure de départ (time picker, saisie manuelle ou tap "maintenant")
3. **Humeur** — rangée de 5 icônes colorées (très heureux → difficile), un tap
4. **Repas**
- 3 lignes : Matin / Midi / Goûter
- Chips prédéfinis par ligne : "Bien mangé" / "Peu mangé" / "Refusé" + champ texte optionnel pour le détail
5. **Siestes** — bouton "+ Ajouter une sieste" → saisie heure début / fin (time picker)
- Affiche les plages ajoutées en chips supprimables
6. **Changes** — compteur +/- avec sélecteur type (Mouillé / Sale / Les deux)
7. **Note** — champ texte libre, optionnel
8. **Photos** — bouton appareil photo + galerie, aperçu des photos ajoutées
9. **Bouton "Envoyer"** en bas, sticky — notifie les parents immédiatement
**Principes UX à respecter**
- Zéro navigation entre les enfants : fermer le panneau → retour liste → tap suivant
- Encodage minimum viable (humeur + présence) = 2 taps, 10 secondes
- Encodage complet = ~30 secondes par enfant
- L'éducatrice peut encoder en plusieurs fois dans la journée (sieste le matin, repas à midi, note en fin de journée) — les données sont sauvegardées à chaque modification
- "Envoyer" déclenche la notification push aux parents — distinct de la sauvegarde automatique
### Onglet "Annonces" (nouveau)
- Création d'annonces (titre, corps, date d'expiration, groupe cible)
- Historique des annonces envoyées
### Sections de contenu existantes réutilisées
Les sections suivantes de MyInfoMate sont directement utiles sans adaptation :
- `SectionArticle` → règlement intérieur, documents importants
- `SectionAgenda` → agenda des activités, fermetures exceptionnelles
- `SectionMap` → plan d'accès à la crèche
- `SectionWeather` → météo sur la page d'accueil
---
## Stratégie code commun
| Composant | Réutilisation |
|-----------|---------------|
| Backend `manager-service` | Identique — nouvelles entités ajoutées, aucune entité modifiée |
| `Instance` | Identique — une crèche = une instance |
| Sections de contenu | Identiques — toutes réutilisables |
| Push notifications | Identiques — même service FCM |
| Auth JWT + API Key | Identiques |
| `manager-app` | Code commun + nouveaux onglets conditionnels selon le `InstanceType` |
| App mobile | Nouveau flavor Flutter `myinfomate_creche` — UI spécifique, même client API |
### `InstanceType` (à ajouter sur `Instance`)
```csharp
public enum InstanceType { Generic, Sport, Creche }
public InstanceType Type { get; set; } = InstanceType.Generic;
```
Le manager-app affiche les onglets conditionnellement selon ce type. Pas de duplication de code.
---
## V1 — Périmètre de lancement
- Journal quotidien complet (repas, siestes, changes, humeur, note, photos)
- Annonces crèche/groupe
- App mobile parents avec notifications
- Gestion des enfants, groupes, parents dans manager-app
- Sections de contenu (règlement, carte, agenda)
## V2 — Évolutions
- **Déclaration d'absences** — parent déclare l'absence de son enfant dans l'app
- **Galerie partagée** — album photos du groupe (pas nominatif, sur opt-in)
- **Signature électronique** — entrée/sortie de l'enfant (RGPD)
- **Carnet de santé** — vaccins, poids, taille (données sensibles, chiffrement renforcé)
- **Facturation** — export des présences pour calcul de la facturation (format ONE/Kind & Gezin)
---
## Pricing suggéré
- **Pilote** : gratuit 3 mois
- **Standard** : 40-50€/mois par crèche
- Pas de quota IA ni de module arbitrage → coût infra plus faible
- **White-label** (Flutter flavor aux couleurs de la crèche) : option sur demande, pas inclus par défaut
---
## Points RGPD à anticiper
- Données de mineurs → consentement parental obligatoire
- Photos des enfants → opt-in par parent, pas de partage entre familles par défaut
- Durée de conservation → supprimer les données à la fin du contrat d'accueil
- Hébergement en UE obligatoire (déjà le cas : VPS OVH Belgique)