Files
petitspas/docs/30_DECOUPAGE-TICKETS-QUOTIDIEN.md
T
jmartinandCursor 823ea6cd22 feat(#195): SSE realtime Cartes (stream + emit audience)
GET /api/v1/cards/stream (Bearer ou ?access_token=).
Events card.created|updated|deleted, response.added + heartbeat.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-24 11:50:30 +02:00

11 KiB
Raw Blame History

Découpage tickets — Quotidien parent / AM

Statut : backlog Gitea 0.2.0 / épic #165 — architecture absences + cartes recentrée (sept. 2026).
Réf. visuelle : maquettes/courantes/maquette-dashboard-parent-quotidien-v4.png
Mini-spec : 31_MINI-SPEC-QUOTIDIEN-PARENT-AM.md
Décision : 24_DECISIONS-PROJET.md §32 (Cartes ≠ back Absences).

Intention produit (rappel)

  • TdB PC en 3 colonnes : cartes | blog (défaut) | messagerie
  • Contexte actif = couple enfant–nounou (parent) / enfant–parent(s) (AM)
  • Blog indispensable (AM + RPE) ; messagerie type WhatsApp (BABA, 2 parents = même fil AM)
  • Look papier / pastel / lignée inscription (pas le dashboard staff)
  • Widgets partagés parent ↔ AM (blog, messagerie, cartes, coquille, couple paramétré) — pas de double implémentation
  • « Effet démo » = logiciel peuplé + sync live multi-écrans — pas un sous-MVP jetable
  • Hors ce découpage (jalons suivants) : page Contrat riche (Pajemploi, CP), notifs CDC fourre-tout, masquage messages, posts blog parent, Agenda « riche » (entrée bandeau possible en stub)

Contrainte technique front (dictée 23/09)

Les panneaux parent et AM étant quasiment identiques, le découpage impose des briques réutilisables :

Widget / module Tickets concernés
Coquille TdB 3 colonnes + bandeau A1, B1 — B1 réutilise la coquille d’A1
Sélecteur couple (mode parent vs AM) A2, B2 — un composant, 2 modes
Flux de cartes C2, C3 — un widget + config rôles
Blog (fil + composeur) D2, D3, D4 — même brique
Messagerie (chat + onglets) E4, E5, E6 — même brique

Les tickets [Front] AM (B1, B2, C3, D3, E5) = intégration / mode rôle, pas une 2ᵉ copie du code.

Proposition de milestone

Champ Valeur
Titre 0.2.0 (rouvert)
Description Quotidien parent / AM — TdB 3 colonnes, cartes, blog, messagerie
Label v0.2.0

Mapping Gitea

Id Issue Titre
Epic #165 Epic quotidien
A1 #166 [Front] Coquille TdB parent
A2 #167 [Front] Couple enfant–nounou
A3 #168 [Backend] API couples parent
B1 #169 [Front] Coquille TdB AM
B2 #170 [Front] Couple enfant–parent(s)
B3 #171 [Backend] API enfants AM
C1 #172 [Backend] API cartes
C2 #173 [Front] Cartes parent
C3 #174 [Front] Cartes AM
C4 #175 [Front] Déclarer absence
C5 #176 [Front] Formulaires AM cartes
D1 #177 [Backend] API blog
D2 #178 [Front] Blog parent
D3 #179 [Front] Blog AM
D4 #180 [Front] Blog gestionnaire
E1 #181 [Backend] Socle messagerie
E2 #182 [Backend] Mess. AM
E3 #183 [Backend] Mess. RPE
E4 #184 [Front] Messagerie parent
E5 #185 [Front] Messagerie AM
E6 #186 [Front] Mess. RPE gestionnaire
F1 #187 [Front] Stubs Agenda / Contrat
F2 #188 [Front] Swipe mobile
G1 #189 [Backend] Seeds quotidien

Epic A — Coquille TdB parent

A1 — [Front] Coquille TdB parent 3 colonnes + bandeau → #166

Bandeau TdB / Agenda / Contrat + menu user ; corps en 3 colonnes (cartes | blog | messagerie) ; fond papier / pastel. Livrer la coquille comme widget/layout réutilisable (l’AM B1 s’en branche). Remplace / refactor ParentDashboardScreen + dashbord_parent/.

A2 — [Front] Sélecteur couple enfant–nounou → #167

Composant paramétrable (mode parent : enfant|nounou). Dropdown si plusieurs gardes ; informatif si une seule. B2 = même widget en mode AM.

A3 — [Back] API contexte de garde actif (couples parent)

Endpoint(s) listant les couples enfant–AM du parent connecté + couple « courant » (persistance session / préférence). Données mini : ids, noms, photos.


Epic B — Coquille TdB AM (miroir)

B1 — [Front] Coquille TdB AM 3 colonnes + bandeau → #169

Réutilise la coquille d’A1/#166 ; point de départ am_dashboard_screen.dart.

B2 — [Front] Sélecteur couple enfant–parent(s) → #170

Même widget qu’A2 en mode AM : gauche photo enfant ; droite parent1+parent2 empilés ou un parent centré.

B3 — [Back] API contexte enfants accueillis (AM)

Liste des enfants / foyers pour l’AM + contexte courant (symétrique A3).


Epic C — Absences + Cartes (file d’attention)

Séparation : back absences_garde = vérité métier (périodes / placement) ; module Cartes = collecte / bulles / workflow. Annulation = DELETE. expire_at dès le modèle.

Back (ordre)

Étape Contenu
BDD Table absences_garde + drop evenements
API CRUD + GET liste (placementId | tous les placements du user)
Cartes SYSTEM Module cards/ types S1–S3 (sans sondages V1)
Realtime WS/SSE bulles → SSE GET /cards/stream (#195)
Purge TTL Job expire_at / purge_at

Front (après API — hors chantier back immédiat)

Ticket Contenu
Feed parent / AM File d’attention bulles (widget partagé)
Modale « Ajouter une bulle » Générique + absence parent / congé·arrêt AM
Agenda Consommer GET liste (lignes)

Hors V1 cartes

Sondages / catalogue admin OPTIONNEL / sortie riche / desktop 2 panneaux (évolution séparée).


Epic D — Blog

D1 — [Back] Modèle + API blog (posts + médias)

Posts par auteur AM ou gestionnaire (RPE) ; texte + photos ; ciblage enfants (AM) / audience (RPE) ; fil visible parents (et AM selon règles). Sync temps réel ou polling acceptable V1.

D2 — [Front] Colonne Blog parent (défaut)

Fil de posts ; auteur distinct AM vs RPE ; miniatures ; pas de bouton « Écrire un post » parent en V1 (reporté).

D3 — [Front] Colonne Blog AM — lecture + écrire un post

Composer texte + photos + sélection enfants concernés ; publication.

D4 — [Front] Publication blog gestionnaire (point d’entrée staff)

UI minimale côté dashboard gestionnaire (ou réutilisation) pour publier une annonce RPE visible sur les TdB parent/AM.


Epic E — Messagerie

E1 — [Back] Socle messagerie (choix lib / protocole) + API

Évaluer brique existante (style chat WhatsApp : texte, emoji, images). Conversations, participants, pièces jointes images. Temps réel (WS ou équivalent) souhaité pour l’effet multi-écrans.

E2 — [Back] Mess. AM — conversation foyer ↔ AM

Une conversation par couple/foyer ; les deux parents voient le même fil. Pas de masquage V1.

E3 — [Back] Mess. RPE — privée + ajout de participants

Fil 1↔1 par défaut (parent↔RPE ou AM↔RPE) ; possibilité d’ajouter 2ᵉ parent / AM / parent pour médiation.

E4 — [Front] Colonne messagerie parent (onglets Mess. AM | Mess. RPE)

UI chat + saisie + PJ ; défaut = Mess. AM.

E5 — [Front] Colonne messagerie AM (onglets équivalents)

Miroir parent ; Mess. AM = foyer courant ; Mess. RPE = canal relais.

E6 — [Front] Mess. RPE côté gestionnaire (entrée minimale)

Liste / réponse aux fils RPE + ajout de participants pour médiation.


Epic F — Navigation & mobile (socle)

F1 — [Front] Navigation Agenda / Contrat (stubs ou routes)

Entrées bandeau : pages placeholder ou squelette (Agenda / Contrat pleine page) pour ne pas bloquer le TdB — contenu métier = jalons suivants.

F2 — [Front] Adaptation mobile — swipe 3 panneaux

Sur téléphone : swipe Blog ↔ Cartes ↔ Messagerie ; navigation TdB/Agenda/Contrat hors swipe. Contrat peut rester limité (« mieux sur PC ») en V1 si besoin.


Epic G — Données de démo / peuplement

G1 — [Back/Outillage] Jeu de données peuplé quotidien

Scripts / seeds : foyer 2 parents, AM, enfant(s), quelques cartes, posts blog, fils messagerie — pour enchaîner une démo multi-écrans sans saisie manuelle lourde.


Hors découpage (volontairement)

Sujet Motif
Page Contrat (Pajemploi, CP, avenants) Module valué — jalon dédié
Agenda calendrier riche Entrée bandeau OK en stub ; métier plus tard
Notifs CDC (contrat/paiement/dossier) Plus tard
Masquage messages / privé parent↔AM Plus tard
Parent auteur de posts blog Hypothétique / plus tard
Photo parent à l’inscription Non ; éventuel menu profil plus tard

Ordre de réalisation suggéré

  1. A1 → A2 → A3 (coquille + contexte parent) — fait
  2. BDD absences → API absences puis Cartes SYSTEM (congés/absences/arrêt)
  3. Feed / modale bulles (front) + agenda lignes
  4. D1 → D2 / D3 (blog)
  5. E1 → E2 → E4 (messagerie AM)
  6. B1 → B2 → B3 + miroirs AM
  7. Realtime / purge TTL / RPE / F/G

Desktop 2 panneaux (cartes prioritaires sur blog) = évolution hors 0.2.0.


Validation

Backlog créé sur Gitea (#165–#189, milestone 0.2.0).
Implémentation code : seulement après relecture PO / ajustements éventuels sur le découpage.