Affiliation enfant au foyer — attach et detach sur pivot + co-parent #158

Open
opened 2026-07-17 17:41:40 +00:00 by jmartin · 0 comments
Owner

Contexte

Aujourd’hui, créer un enfant (POST /enfants) rattache bien le pivot et le co-parent s’il existe.

En revanche :

  • rattacher (POST /parents/:id/enfants/:enfantId) ne crée qu’un seul lien ;
  • détacher (DELETE /parents/:id/enfants/:enfantId) ne retire qu’un seul lien.

Conséquence (#157) : compteurs « Enfants » divergents sur un même foyer (ex. Claire 7 / Thomas 6).


Règle métier (décision produit)

Le foyer est l’unité d’affiliation enfant↔responsables (v1 : pivot + co-parent).

Action Effet
Rattacher à un parent du foyer Liens créés pour tous les responsables du foyer
Détacher d’un parent du foyer Liens retirés pour tous les responsables du foyer
Plus aucun foyer lié Enfant orphelin → alerte liste Enfants (#157)

Le détachement n’est pas unitaire par parent.


Objectif

Symétrie attach / detach / create : même résolution de foyer (co-parent / même numero_dossier).


Backend

Attach — ParentsService.attachEnfant

  • Après lien sur parentUserId, résoudre le foyer (co-parent A↔B + éventuellement même numero_dossier)
  • Créer les liens manquants (idempotent si déjà présent)
  • Tests : attach sur A → enfant aussi sur B

Detach — ParentsService.detachEnfant

  • Sur détachement demandé pour un parent, retirer les liens de tous les responsables du même foyer
  • Si plus aucun lien ensuite → enfant orphelin OK (#157, plus de garde « au moins 1 parent »)
  • Tests : detach sur A → plus de lien sur B non plus ; compteurs alignés

Factorisation

  • Helper partagé « membres du foyer » (réutilisable avec POST /enfants #132)

Frontend (léger)

  • Messages UX : « Rattacher / détacher du foyer » si besoin
  • Retirer contournements double-attach (#157) devenus redondants
  • Compteurs liste Parents se réalignent via l’API

Critères d’acceptation

  • Rattacher à Claire → Thomas a le même enfant (et inversement)
  • Détacher depuis Claire → Thomas n’a plus l’enfant non plus
  • Compteurs liste Parents alignés pour les deux du foyer
  • Si c’était le seul foyer → enfant orphelin + alerte #157
  • Création enfant inchangée (déjà double-lien)

Hors scope

  • Alerte / tri orphelin UI → #157
  • Suppression enfant → #154
  • Famille complexe N responsables → #139

Milestone

0.1.0

Liens

  • Orphelin / alerte : #157
  • Création enfant staff : #132
  • Rattachement historique : #115 / #140
## Contexte Aujourd’hui, **créer** un enfant (`POST /enfants`) rattache bien le **pivot** et le **co-parent** s’il existe. En revanche : - **rattacher** (`POST /parents/:id/enfants/:enfantId`) ne crée qu’**un seul** lien ; - **détacher** (`DELETE /parents/:id/enfants/:enfantId`) ne retire qu’**un seul** lien. Conséquence (#157) : compteurs « Enfants » divergents sur un même foyer (ex. Claire 7 / Thomas 6). --- ## Règle métier (décision produit) > Le foyer est l’unité d’affiliation enfant↔responsables (v1 : pivot + co-parent). | Action | Effet | |--------|--------| | **Rattacher** à un parent du foyer | Liens créés pour **tous** les responsables du foyer | | **Détacher** d’un parent du foyer | Liens retirés pour **tous** les responsables du foyer | | Plus aucun foyer lié | Enfant **orphelin** → alerte liste Enfants (**#157**) | Le détachement **n’est pas** unitaire par parent. --- ## Objectif Symétrie attach / detach / create : même résolution de foyer (co-parent / même `numero_dossier`). --- ## Backend ### Attach — `ParentsService.attachEnfant` - [ ] Après lien sur `parentUserId`, résoudre le foyer (co-parent A↔B + éventuellement même `numero_dossier`) - [ ] Créer les liens manquants (idempotent si déjà présent) - [ ] Tests : attach sur A → enfant aussi sur B ### Detach — `ParentsService.detachEnfant` - [ ] Sur détachement demandé pour un parent, retirer les liens de **tous** les responsables du même foyer - [ ] Si plus aucun lien ensuite → enfant orphelin OK (#157, plus de garde « au moins 1 parent ») - [ ] Tests : detach sur A → plus de lien sur B non plus ; compteurs alignés ### Factorisation - [ ] Helper partagé « membres du foyer » (réutilisable avec `POST /enfants` #132) ## Frontend (léger) - [ ] Messages UX : « Rattacher / détacher du **foyer** » si besoin - [ ] Retirer contournements double-attach (#157) devenus redondants - [ ] Compteurs liste Parents se réalignent via l’API ## Critères d’acceptation - [ ] Rattacher à Claire → Thomas a le même enfant (et inversement) - [ ] Détacher depuis Claire → Thomas n’a plus l’enfant non plus - [ ] Compteurs liste Parents alignés pour les deux du foyer - [ ] Si c’était le seul foyer → enfant orphelin + alerte #157 - [ ] Création enfant inchangée (déjà double-lien) ## Hors scope - Alerte / tri orphelin UI → **#157** - Suppression enfant → **#154** - Famille complexe N responsables → **#139** ## Milestone **0.1.0** ## Liens - Orphelin / alerte : **#157** - Création enfant staff : **#132** - Rattachement historique : **#115** / **#140**
jmartin added this to the 0.1.0 milestone 2026-07-17 17:41:40 +00:00
jmartin added the
bug
frontend
backend
ux
gestionnaire
admin
phase-1
v0.1.0
labels 2026-07-17 17:41:40 +00:00
jmartin changed title from Rattachement enfant au foyer — lier automatiquement le co-parent to Affiliation enfant au foyer — attach et detach sur pivot + co-parent 2026-07-17 17:44:36 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jmartin/petitspas#158
No description provided.