# #131 — Fiche AM éditable + affiliation enfants (note front → back) **Ticket :** #131 (partie AM, doc `28_EVOLUTION-FAMILLE-ET-RESPONSABLES.md` §6.1) **Date :** 2026-06-01 **Statut front :** modale livrée (2 onglets) — **API affiliation AM↔enfant à implémenter** --- ## 1. Comportement UI (front) Modale `AdminAmEditModal` — même shell que la fiche parent (~930 px) : | Onglet | Contenu | |--------|---------| | **Identité & professionnel** | `IdentityBlock` éditable + grille pro (agrément, ville résidence, capacité, places, NIR/agrément date en lecture seule, biographie, switch disponible) + gélule statut | | **Enfants accueillis** | Liste cartes enfants (réutilise `AdminChildrenAffiliationPanel` / `AdminEnfantUserCard`) + rattacher / détacher | En-tête : prénom nom · sous-titre `Zone · Agrément · Dossier`. --- ## 2. Endpoints consommés ### Déjà existants (partiels) | Méthode | Route | Usage | |---------|-------|-------| | `GET` | `/api/v1/assistantes-maternelles` | Liste AM | | `GET` | `/api/v1/assistantes-maternelles/:userId` | Détail (403 possible pour `administrateur` → fallback liste) | | `PATCH` | `/api/v1/users/:userId` | Identité + statut (admin / super_admin uniquement) | | `PATCH` | `/api/v1/assistantes-maternelles/:userId` | Champs pro (gestionnaire / super_admin) | ### À créer (recommandé — miroir parent #131 / #115) | Méthode | Route | Rôle | |---------|-------|------| | `PATCH` | `/api/v1/assistantes-maternelles/:userId/fiche` | Mise à jour unifiée identité + pro + statut (`super_admin`, `gestionnaire`, `administrateur`) | | `POST` | `/api/v1/assistantes-maternelles/:userId/enfants/:enfantId` | Rattacher un enfant | | `DELETE` | `/api/v1/assistantes-maternelles/:userId/enfants/:enfantId` | Détacher un enfant | | `GET` | `/api/v1/assistantes-maternelles/:userId` | Inclure `amChildren[]` (relation enfant) | Le front appelle déjà ces routes ; en l’absence de `PATCH …/fiche`, il tente un fallback `PATCH users` + `PATCH assistantes-maternelles` (échoue selon le rôle connecté). --- ## 3. Modèle de données affiliation AM ↔ enfant **À définir côté BDD** (pas de table dédiée aujourd’hui, contrairement à `enfants_parents`) : Proposition alignée parent : ```sql -- Piste : enfants_assistantes_maternelles CREATE TABLE enfants_assistantes_maternelles ( id_am UUID NOT NULL REFERENCES utilisateurs(id) ON DELETE CASCADE, id_enfant UUID NOT NULL REFERENCES enfants(id) ON DELETE CASCADE, PRIMARY KEY (id_am, id_enfant) ); ``` Réponse API attendue sur `GET /assistantes-maternelles/:id` : ```json { "user_id": "uuid-am", "user": { "id": "…", "prenom": "Claire", "nom": "MARTIN", "statut": "actif" }, "approval_number": "AGR-2024-12345", "residence_city": "Bezons", "max_children": 4, "places_available": 2, "available": true, "amChildren": [ { "child": { "id": "uuid-enfant", "first_name": "Emma", "last_name": "MARTIN", "status": "actif", "birth_date": "2023-02-15" } } ] } ``` Le front parse `amChildren` / `am_children` / `assistanteChildren` (même logique que `parentChildren`). --- ## 4. Body `PATCH …/fiche` suggéré ```json { "nom": "MARTIN", "prenom": "Claire", "email": "claire@example.com", "telephone": "0612345678", "adresse": "5 place Bellecour", "ville": "Lyon", "code_postal": "69002", "statut": "actif", "approval_number": "AGR-2024-12345", "residence_city": "Lyon", "max_children": 4, "places_available": 2, "biography": "…", "available": true } ``` NIR et date d’agrément : lecture seule dans la modale (modification hors périmètre admin v1). --- ## 5. Fichiers front concernés | Fichier | Rôle | |---------|------| | `frontend/lib/widgets/admin/common/admin_am_edit_modal.dart` | Modale 2 onglets | | `frontend/lib/widgets/admin/common/admin_children_affiliation_panel.dart` | Liste enfants partagée parent/AM | | `frontend/lib/widgets/admin/common/admin_status_capsule.dart` | Gélule statut partagée | | `frontend/lib/models/assistante_maternelle_model.dart` | Parse champs pro + `amChildren` | | `frontend/lib/services/user_service.dart` | `getAssistanteMaternelle`, `updateAmFiche`, `attachEnfantToAm`, `detachEnfantFromAm` | | `frontend/lib/widgets/admin/assistante_maternelle_management_widget.dart` | Ouverture modale au clic Modifier | --- ## 6. Références - Fiche parent : `PATCH /parents/:id/fiche`, `POST|DELETE /parents/:id/enfants/:enfantId` - Ticket Gitea **#131**, **#115** - `docs/archive/temporaires/TEMP_131-back-fiche-parent-co-parent.md`