[Front] Cartes rose soins enfant — modales par sous-type + ack parents #207

Open
opened 2026-10-05 20:44:26 +00:00 by jmartin · 0 comments
Owner

Contexte

Epic #165. Backend associé : #206 (à livrer d'abord).
Spec : docs/32_MINI-SPEC-BULLES-CARTES.md §5.

Cartes rose soins enfant (AM → parents), après les congés (aqua), l'arrêt (bleu) et l'absence (pêche). Le socle UI est déjà amorcé — mapping soin_enfant → pink et sous-types présents dans carte_type_ui.dart / carte_bulle.dart — il reste à le brancher bout en bout et à écrire les formulaires.

Rose = doux et rassurant, pas une alerte médicale.

Cadrage commun (à ne pas perdre de vue)

L'outil n'a aucune valeur juridique, comme le module contrat : la vraie vie prévaut. Une carte soin vaut un message WhatsApp du genre « l'enfant a de la fièvre, je lui donne du paracétamol ». C'est informatif, ce n'est ni un circuit de validation ni une autorisation.

  • L'absence de carte n'engage pas la responsabilité de l'AM : elle reste libre d'agir et de ne rien saisir.
  • L'outil cadre et facilite la transmission, il ne la contraint pas.
  • Aucune fonctionnalité ne doit être présentée comme une preuve, une autorisation ou une obligation.

Ce qui rend ces cartes différentes des précédentes

  1. Elles portent un sous-type (une seule famille soin_enfant, trois formulaires distincts).
  2. Elles décrivent un instant T et non une période négociable.

On les conserve malgré tout dans evenements_agenda : c'est fait pour se souvenir. La période y est dégénérée (date_debut == date_fin) et l'instant précis vit dans heure_releve.

Sous-types retenus

sous_type Modale Réponse
fievre Fièvre ack
bobo Bobo ack
medicament Médicament ack

Pas de 4e sous-type « autre » : autre reste une valeur de la liste des natures de bobo.

Règle anti-ambiguïté : fièvre → carte fievre (le médicament éventuel y est un champ satellite) ; médicament pour toute autre raison → carte medicament. Un seul chemin par fait consigné, sinon l'historique devient incohérent.

Plusieurs cartes par jour sont normales : une fièvre se mesure plusieurs fois. Chaque relevé est une carte, pas de regroupement en V1.

Contrat de payload

Commun aux trois sous-types : sous_type, date_debut / date_fin (même jour en V1), heure_releve (HH:mm).
L'heure est indispensable : 38,2 à 9 h et 38,2 à 16 h ne racontent pas la même histoire, et sans elle les parents la redemandent dans le chat.

fievre

Champ Règle
temperature_c décimal ; saisie 3 chiffres avec virgule automatique (365 → 36,5)
bornes 34,0 – 43,0 ; alerte visuelle hors 36,0 – 38,0, sans blocage
medicament_donne texte libre, facultatif

On ne bloque pas une observation de santé : une hypothermie réelle doit pouvoir être consignée, et les mesures axillaires ou frontales descendent bas. Un formulaire qui refuse la réalité pousse à ne rien saisir.

Pas de champ poids : c'est une donnée stable qui appartient à la fiche enfant, et l'AM n'a pas de balance. Voir #208.

bobo

Champ Règle
bobo_nature chute | coup | egratignure | piqure | brulure | autre
description texte, max 120 caractères

La limite est volontaire : le fait suffit dans la carte, le contexte va dans la messagerie.

medicament

Champ Règle
medicament_nom obligatoire
contexte texte, max 120 caractères

À faire

Parcours de création (AM)

Dans ajouter_carte_modal.dart : l'AM choisit Soins enfant, puis le sous-type, puis remplit un formulaire distinct selon le sous-type choisi.

  • Sélecteur d'heure commun aux trois, prérempli à l'heure courante et modifiable.
  • Fièvre : champ formaté 3 chiffres → XX,X (virgule automatique), accepté de 34,0 à 43,0, liseré ou pictogramme d'alerte hors 36,0 – 38,0 sans empêcher la saisie, plus le champ médicament facultatif.
  • Bobo : liste des 6 natures (chute, coup, égratignure, piqûre, brûlure, autre) + zone de texte limitée à 120 caractères avec compteur.
  • Médicament : nom obligatoire + contexte limité à 120 caractères.
  • Retirer le sous-type catalogue autre du type soin_enfant (il reste une valeur de la liste des natures de bobo).
  • Ne pas envoyer de motif : le back le dérive du payload.

CardsService.creer a aujourd'hui une signature fermée (typeCode, idPlacement, dateDebut, dateFin, motif) : elle doit accepter les champs structurés du sous-type.

Feed (parents et AM)

  • Teinte pink (card_pink_h.png déjà présent) et icône selon le sous-type (thermomètre, pansement, flacon).
  • Résumé lisible sans ouvrir : température et heure, nature du bobo, nom du médicament.
  • Action ack côté parents (« Bien reçu ») ; l'AM créatrice n'a pas de bouton de réponse (miroir).
  • Libellés et statuts cohérents avec les autres bulles.

Correction (fenêtre de 24 h)

  • Bouton Corriger sur une bulle soin, visible pour l'AM auteure uniquement pendant 24 h, qui rouvre la modale du sous-type pré-remplie. Suppression idem. Passé le délai, les deux disparaissent.
  • Le back reste l'autorité : le front masque, il ne garantit pas.
  • Marqueur « Corrigée » avec l'heure de correction, visible côté parents comme côté AM.
  • Après correction, la carte repasse à traiter et doit être acquittée de nouveau.

Hors scope

  • Photos et pièces jointes médicales
  • Sous-types présentés comme des cartes séparées
  • Regroupement de plusieurs relevés d'une journée
  • Ne pas toucher aux flux congés / arrêt / absence

Done when

  • L'AM crée les trois sous-types depuis « Ajouter une carte », chacun avec son formulaire
  • Les parents voient la bulle rose, son résumé, et peuvent acquitter
  • Une correction dans les 24 h est visible (« Corrigée ») et redemande un acquittement
  • Au-delà de 24 h, plus de bouton Corriger ni Supprimer
  • Mapping front only : soin_enfant → pink, aucune couleur venant de l'API

Réf.

  • frontend/lib/models/carte_type_ui.dart, carte_bulle.dart
  • frontend/lib/widgets/quotidien/cartes_feed.dart, ajouter_carte_modal.dart
  • frontend/lib/services/api/cards_service.dart
  • Assets frontend/assets/cards/card_pink*.png
## Contexte Epic [#165](https://git.ptits-pas.fr/jmartin/petitspas/issues/165). Backend associé : [#206](https://git.ptits-pas.fr/jmartin/petitspas/issues/206) (à livrer d'abord). Spec : [docs/32_MINI-SPEC-BULLES-CARTES.md](https://git.ptits-pas.fr/jmartin/petitspas/src/branch/develop/docs/32_MINI-SPEC-BULLES-CARTES.md) §5. Cartes **rose** soins enfant (AM → parents), après les congés (aqua), l'arrêt (bleu) et l'absence (pêche). Le socle UI est déjà amorcé — mapping `soin_enfant` → pink et sous-types présents dans `carte_type_ui.dart` / `carte_bulle.dart` — il reste à le brancher bout en bout et à écrire les formulaires. **Rose = doux et rassurant, pas une alerte médicale.** ## Cadrage commun (à ne pas perdre de vue) **L'outil n'a aucune valeur juridique**, comme le module contrat : la vraie vie prévaut. Une carte soin vaut un message WhatsApp du genre « l'enfant a de la fièvre, je lui donne du paracétamol ». C'est **informatif**, ce n'est ni un circuit de validation ni une autorisation. - L'absence de carte **n'engage pas** la responsabilité de l'AM : elle reste libre d'agir et de ne rien saisir. - L'outil **cadre et facilite** la transmission, il ne la contraint pas. - Aucune fonctionnalité ne doit être présentée comme une preuve, une autorisation ou une obligation. ## Ce qui rend ces cartes différentes des précédentes 1. Elles portent un **sous-type** (une seule famille `soin_enfant`, trois formulaires distincts). 2. Elles décrivent un **instant T** et non une période négociable. On les conserve malgré tout dans `evenements_agenda` : **c'est fait pour se souvenir**. La période y est dégénérée (`date_debut == date_fin`) et l'instant précis vit dans `heure_releve`. ## Sous-types retenus | `sous_type` | Modale | Réponse | |---|---|---| | `fievre` | Fièvre | `ack` | | `bobo` | Bobo | `ack` | | `medicament` | Médicament | `ack` | Pas de 4e sous-type « autre » : `autre` reste une **valeur de la liste des natures de bobo**. **Règle anti-ambiguïté** : fièvre → carte `fievre` (le médicament éventuel y est un champ satellite) ; médicament pour **toute autre raison** → carte `medicament`. Un seul chemin par fait consigné, sinon l'historique devient incohérent. **Plusieurs cartes par jour sont normales** : une fièvre se mesure plusieurs fois. Chaque relevé est une carte, pas de regroupement en V1. ## Contrat de payload Commun aux trois sous-types : `sous_type`, `date_debut` / `date_fin` (même jour en V1), **`heure_releve`** (`HH:mm`). L'heure est indispensable : 38,2 à 9 h et 38,2 à 16 h ne racontent pas la même histoire, et sans elle les parents la redemandent dans le chat. **`fievre`** | Champ | Règle | |---|---| | `temperature_c` | décimal ; saisie 3 chiffres avec virgule automatique (`365` → `36,5`) | | | bornes **34,0 – 43,0** ; **alerte visuelle** hors 36,0 – 38,0, **sans blocage** | | `medicament_donne` | texte libre, facultatif | On ne bloque pas une observation de santé : une hypothermie réelle doit pouvoir être consignée, et les mesures axillaires ou frontales descendent bas. Un formulaire qui refuse la réalité pousse à ne rien saisir. **Pas de champ poids** : c'est une donnée stable qui appartient à la fiche enfant, et l'AM n'a pas de balance. Voir [#208](https://git.ptits-pas.fr/jmartin/petitspas/issues/208). **`bobo`** | Champ | Règle | |---|---| | `bobo_nature` | `chute` \| `coup` \| `egratignure` \| `piqure` \| `brulure` \| `autre` | | `description` | texte, **max 120 caractères** | La limite est volontaire : le fait suffit dans la carte, le contexte va dans la messagerie. **`medicament`** | Champ | Règle | |---|---| | `medicament_nom` | obligatoire | | `contexte` | texte, **max 120 caractères** | ## À faire ### Parcours de création (AM) Dans `ajouter_carte_modal.dart` : l'AM choisit **Soins enfant**, puis le **sous-type**, puis remplit un **formulaire distinct** selon le sous-type choisi. - Sélecteur d'**heure** commun aux trois, prérempli à l'heure courante et modifiable. - **Fièvre** : champ formaté 3 chiffres → `XX,X` (virgule automatique), accepté de 34,0 à 43,0, liseré ou pictogramme d'alerte hors 36,0 – 38,0 **sans empêcher la saisie**, plus le champ médicament facultatif. - **Bobo** : liste des 6 natures (chute, coup, égratignure, piqûre, brûlure, autre) + zone de texte limitée à 120 caractères avec compteur. - **Médicament** : nom obligatoire + contexte limité à 120 caractères. - Retirer le sous-type catalogue `autre` du type `soin_enfant` (il reste une valeur de la liste des natures de bobo). - **Ne pas envoyer de `motif`** : le back le dérive du payload. `CardsService.creer` a aujourd'hui une signature fermée (`typeCode`, `idPlacement`, `dateDebut`, `dateFin`, `motif`) : elle doit accepter les champs structurés du sous-type. ### Feed (parents et AM) - Teinte **pink** (`card_pink_h.png` déjà présent) et icône selon le sous-type (thermomètre, pansement, flacon). - Résumé lisible sans ouvrir : température et heure, nature du bobo, nom du médicament. - Action **ack** côté parents (« Bien reçu ») ; l'AM créatrice n'a pas de bouton de réponse (miroir). - Libellés et statuts cohérents avec les autres bulles. ### Correction (fenêtre de 24 h) - Bouton **Corriger** sur une bulle soin, visible pour l'AM auteure **uniquement pendant 24 h**, qui rouvre la modale du sous-type pré-remplie. Suppression idem. Passé le délai, les deux disparaissent. - Le back reste l'autorité : le front masque, il ne garantit pas. - Marqueur **« Corrigée »** avec l'heure de correction, visible côté parents comme côté AM. - Après correction, la carte repasse à traiter et doit être acquittée de nouveau. ## Hors scope - Photos et pièces jointes médicales - Sous-types présentés comme des cartes séparées - Regroupement de plusieurs relevés d'une journée - Ne pas toucher aux flux congés / arrêt / absence ## Done when - L'AM crée les trois sous-types depuis « Ajouter une carte », chacun avec son formulaire - Les parents voient la bulle rose, son résumé, et peuvent acquitter - Une correction dans les 24 h est visible (« Corrigée ») et redemande un acquittement - Au-delà de 24 h, plus de bouton Corriger ni Supprimer - Mapping front only : `soin_enfant` → pink, aucune couleur venant de l'API ## Réf. - `frontend/lib/models/carte_type_ui.dart`, `carte_bulle.dart` - `frontend/lib/widgets/quotidien/cartes_feed.dart`, `ajouter_carte_modal.dart` - `frontend/lib/services/api/cards_service.dart` - Assets `frontend/assets/cards/card_pink*.png`
jmartin added this to the 0.2.0 milestone 2026-10-05 20:44:26 +00:00
jmartin added the enhancementfrontenduiv0.2.0 labels 2026-10-05 20:44:26 +00:00
jmartin changed title from [Front] Cartes rose — soins / bobo enfant (modale AM + ack parents) to [Front] Cartes rose soins enfant — modales par sous-type + ack parents 2026-10-05 21:33:25 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jmartin/petitspas#207