Membres du Ménage
Les membres sont gérés par des routes imbriquées sous le ménage.
| Méthode | Endpoint | Permission | Description |
|---|---|---|---|
| GET | /api/menages/{id}/membres | utilisateur connecté | Liste des membres |
| POST | /api/menages/{id}/membres | registre.menages_membres | Ajouter un membre |
| POST | /api/menages/{id}/membres/bulk | registre.menages_membres | Ajouter plusieurs membres |
| PUT, PATCH | /api/menages/{id}/membres/{membreId} | registre.menages_membres | Modifier un membre |
| DELETE | /api/menages/{id}/membres/{membreId} | registre.menages_membres | Supprimer un membre |
Toutes ces routes vérifient que le ménage est dans le périmètre de l'utilisateur. Un ménage d'un projet archivé est en lecture seule : les écritures renvoient une erreur Ce projet est en lecture seule, les modifications ne sont pas autorisées.
GET /api/menages/{id}/membres
{
"success": true,
"data": [
{
"id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"identifiantUnique": "…",
"nomComplet": "Membre Exemple",
"sexe": "F",
"age": 12,
"lienParente": "fille",
"niveauEducation": "primaire",
"occupation": "eleve",
"handicape": false,
"dateNaissance": "2014-03-02",
"scolarise": true,
"beneficiairePrincipal": false,
"beneficiaireSubstitut": false
}
]
}
La liste renvoie la fiche complète de chaque membre : identité, documents, éducation, santé (dont grossesse et allaitement), handicap (questions du Washington Group), téléphonie et rôle de bénéficiaire. identifiantUnique est l'identifiant lisible de la personne dans le SIG ; l'UUID id identifie seulement la ligne.
Ménage introuvable : 404 {"success": false, "message": "Ménage non trouvé"}.
POST /api/menages/{id}/membres
{
"nomComplet": "Membre Exemple",
"sexe": "F",
"lienParente": "fille",
"dateNaissance": "2014-03-02",
"niveauEducation": "primaire",
"scolarise": true
}
Seul nomComplet est obligatoire. Les autres champs sont ceux de la fiche ci-dessus ; une clé absente n'est pas modifiée. Les valeurs à choix (sexe, lien de parenté, niveau d'éducation…) sont ramenées au code du référentiel du questionnaire ménage, si bien qu'un libellé ou un code d'import donnent la même valeur.
Réponse 201 Created :
{
"success": true,
"message": "Membre ajouté avec succès",
"data": {
"id": "…",
"identifiantUnique": "…",
"nomComplet": "Membre Exemple",
"sexe": "F",
"age": 12,
"lienParente": "fille",
"niveauEducation": "primaire",
"occupation": null,
"handicape": false
}
}
Erreur 400 si nomComplet manque.
POST /api/menages/{id}/membres/bulk
{
"membres": [
{ "nomComplet": "Membre Un", "sexe": "F", "lienParente": "fille" },
{ "nomComplet": "Membre Deux", "sexe": "M", "lienParente": "fils" }
]
}
Réponse : { "success": true, "message": "2 membre(s) ajouté(s)", "data": { … } }. Sans tableau membres : 400 Liste de membres requise.
PUT /api/menages/{id}/membres/{membreId}
Mêmes champs que la création, tous optionnels. Réponse : { "success": true, "message": "Membre mis à jour avec succès", "data": { … } }. Membre introuvable : 404 Membre non trouvé.
DELETE /api/menages/{id}/membres/{membreId}
Réponse : { "success": true, "message": "Membre supprimé avec succès" }.
Exemple JavaScript
const base = `https://sig.example.com/api/menages/${menageId}/membres`;
const headers = { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' };
const { data: membres } = await (await fetch(base, { headers })).json();
await fetch(base, {
method: 'POST',
headers,
body: JSON.stringify({ nomComplet: 'Membre Exemple', sexe: 'F', lienParente: 'fille' }),
});
Notes
- Le chef de ménage n'est pas un membre de cette liste : il se modifie avec le ménage.
- Les modifications sont tracées dans le journal d'audit.