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>
219 lines
8.3 KiB
Markdown
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)
|