Pular para o conteúdo principal

API Menages

L'API Menages permet de gerer les menages du registre social.

Vue d'ensemble​

Endpoints CRUD​

EndpointMethodeDescription
/api/menagesGETListe des menages
/api/menages/{id}GETDetail d'un menage
/api/menagesPOSTCreer un menage
/api/menages/{id}/updatePOSTModifier un menage
/api/menages/{id}DELETESupprimer un menage
/api/menages/{id}/membresGETMembres du menage
/api/menages/{id}/membres/bulkPOSTAjouter des membres en masse
/api/menages/{id}/validatePOSTValider et inscrire au programme (registre.menages_validate)
/api/menages/{id}/rejectPOSTRejeter (motif obligatoire, registre.menages_reject)
/api/menages/{id}/validation-historyGETHistorique de validation

Endpoints Workflow Pre-Collecte​

EndpointMethodeDescription
/api/menages/pre-collecteGETListe des menages en pre-collecte
/api/menages/pre-collecte/statsGETStatistiques pre-collecte
/api/menages/{id}/validerPOSTValider la collecte (registre.menages_validate)
/api/menages/{id}/rejeterPOSTRejeter la collecte (registre.menages_reject)
/api/menages/{id}/integrerPOSTIntegrer dans le registre (registre.menages_validate)
/api/menages/valider-massePOSTValidation en masse
/api/menages/integrer-massePOSTIntegration en masse

Endpoints PMT & Statistiques​

EndpointMethodeDescription
/api/menages/{id}/recalculate-pmtPOSTRecalculer le score PMT
/api/menages/recalculate-all-pmtPOSTRecalculer tous les PMT
/api/menages/bulk-recalculate-pmtPOSTRecalcul PMT en lot
/api/menages/stats/summaryGETStatistiques globales

Endpoints Operations en Masse​

EndpointMethodeDescription
/api/menages/bulk-enrollPOSTEnrolement en masse comme beneficiaires
/api/menages/bulk-deletePOSTSuppression en masse
/api/menages/{id}/check-dependenciesGETVerifier les dependances avant suppression

Modele de donnees​

Champs principaux​

ChampTypeDescription
idUUIDIdentifiant unique
codeMenagestringCode unique du menage
statutstringStatut principal (voir ci-dessous)
statutCollectestringStatut workflow collecte
milieustringMilieu (rural/urbain)
tailleMenageintNombre de membres

Champs demographiques​

ChampTypeDescription
nbEnfants04intEnfants 0-4 ans
nbEnfants514intEnfants 5-14 ans
nbEnfants010intEnfants 0-10 ans (alternatif)
nbEnfants1114intEnfants 11-14 ans (alternatif)
nbAdultes1564intAdultes 15-64 ans
nbPersonnes65PlusintPersonnes 65+ ans
nbHandicapesintPersonnes handicapees
nbActifsOccupesintActifs occupes
nbFemmes1564intFemmes 15-64 ans
nbFemmes1549intFemmes 15-49 ans (age fertile)
nbFemmesEnceintesintFemmes enceintes

Champs PMT & Eligibilite​

ChampTypeDescription
scorePmtdecimalScore PMT calcule (0-100)
categoriePauvretestringCategorie de pauvrete
eligibleProgrammebooleanEligible au programme

Champs Qualite des Donnees​

ChampTypeDescription
scoreQualitedecimalScore qualite des donnees (0-100)
problemesQualiteJSONListe des problemes detectes
scoreDoublondecimalScore de similarite doublon
resumeDoublonsJSONDetails des doublons potentiels
dateAnalyseQualitedatetimeDate derniere analyse

Champs Geolocalisation​

ChampTypeDescription
latitudestringLatitude GPS
longitudestringLongitude GPS
altitudestringAltitude
precisionGpsstringPrecision GPS en metres
regionobjectRegion
secteurobjectSecteur
localiteobjectLocalite

Champs Source & Synchronisation​

ChampTypeDescription
sourceDonneesstringSource des donnees
identifiantUniquestringIdentifiant unique externe
koboSubmissionIdstringID soumission KoBoToolbox
koboFormUidstringUID formulaire Kobo
koboValidationStatusstringStatut sync Kobo
idSourceExternestringID systeme externe
campagneobjectCampagne de collecte
enqueteurobjectEnqueteur assigne

Champs Validation​

ChampTypeDescription
dateValidationCollectedatetimeDate validation collecte
valideCollecteParobjectUtilisateur validateur
commentaireValidationCollectetextCommentaire validation
donneesValidationJSONDonnees validation
historiqueValidationJSONHistorique validations

Statuts​

Statut principal (statut)​

StatutDescription
collecteDonnees en cours de collecte
en_attenteEn attente de validation
valideMenage valide
rejeteMenage rejete

Statut collecte (statutCollecte)​

StatutDescription
pre_collectePre-collecte (avant validation UCP)
valideCollecte validee
integreIntegre dans le registre
rejeteCollecte rejetee

Liste des menages​

Endpoint​

GET /api/menages

Parametres de requete​

ParametreTypeRequisDescription
pageintNonNumero de page (defaut: 1)
limitintNonElements par page (max: 100)
statutstringNonFiltrer par statut
statutCollectestringNonFiltrer par statut collecte
searchstringNonRecherche textuelle
regionUUIDNonFiltrer par region
secteurUUIDNonFiltrer par secteur
localiteUUIDNonFiltrer par localite
milieustringNonFiltrer par milieu (urbain/rural)
eligiblebooleanNonFiltrer par eligibilite
categoriePauvretestringNonFiltrer par categorie
campagneUUIDNonFiltrer par campagne
enqueteurUUIDNonFiltrer par enqueteur
scorePmt[gte]decimalNonPMT minimum
scorePmt[lte]decimalNonPMT maximum
tailleMenage[gte]intNonTaille minimum
tailleMenage[lte]intNonTaille maximum

Reponse​

{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"codeMenage": "MEN-OIO-001",
"statut": "valide",
"statutCollecte": "integre",
"tailleMenage": 5,
"scorePmt": 0.42,
"scoreQualite": 95.5,
"categoriePauvrete": "pauvre",
"eligibleProgramme": true,
"milieu": "rural",
"region": {"id": "...", "nom": "Oio"},
"secteur": {"id": "...", "nom": "Farim"},
"localite": {"id": "...", "nom": "Farim Centro"},
"chefMenage": {
"id": "...",
"nomComplet": "Mamadou Diallo",
"sexe": "M",
"age": 45
},
"campagne": {"id": "...", "nom": "Campagne 2024"},
"enqueteur": {"id": "...", "nomComplet": "Fatou Sow"},
"createdAt": "2024-06-15T10:00:00+00:00"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 15000,
"pages": 750
}
}

Workflow Pre-Collecte​

Le workflow pre-collecte permet de valider les donnees avant leur integration dans le registre officiel.

Liste des menages en pre-collecte​

GET /api/menages/pre-collecte

Retourne les menages avec statutCollecte = 'pre_collecte'.

Statistiques pre-collecte​

GET /api/menages/pre-collecte/stats
{
"success": true,
"data": {
"total": 500,
"enAttente": 450,
"valides": 30,
"rejetes": 20,
"parCampagne": [
{"campagne": "Campagne 2024", "total": 300},
{"campagne": "Campagne 2023", "total": 200}
]
}
}

Valider la collecte​

POST /api/menages/{id}/valider
{
"commentaire": "Donnees completes et coherentes"
}

Rejeter la collecte​

POST /api/menages/{id}/rejeter
{
"motif": "Donnees GPS manquantes"
}

motif est obligatoire (400 Le motif de rejet est obligatoire).

Integrer dans le registre​

POST /api/menages/{id}/integrer

Passe le menage de pre_collecte a integre et met statut a valide.

Validation en masse​

POST /api/menages/valider-masse
{
"ids": ["uuid1", "uuid2", "uuid3"],
"commentaire": "Validation lot 15 juin"
}

Integration en masse​

POST /api/menages/integrer-masse
{
"ids": ["uuid1", "uuid2", "uuid3"]
}

Detail d'un menage​

Endpoint​

GET /api/menages/{id}

Reponse​

{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"codeMenage": "MEN-OIO-001",
"statut": "valide",
"statutCollecte": "integre",
"milieu": "rural",
"tailleMenage": 5,
"nbEnfants04": 1,
"nbEnfants514": 2,
"nbEnfants010": 2,
"nbEnfants1114": 1,
"nbAdultes1564": 2,
"nbPersonnes65Plus": 0,
"nbHandicapes": 0,
"nbActifsOccupes": 2,
"nbFemmes1564": 1,
"nbFemmes1549": 1,
"nbFemmesEnceintes": 0,
"scorePmt": 0.42,
"categoriePauvrete": "pauvre",
"eligibleProgramme": true,
"scoreQualite": 95.5,
"problemesQualite": [],
"scoreDoublon": 0,
"resumeDoublons": [],
"dateAnalyseQualite": "2024-06-20T10:00:00+00:00",
"latitude": "12.345678",
"longitude": "-15.678901",
"altitude": "25.5",
"precisionGps": "5.0",
"sourceDonnees": "kobo",
"identifiantUnique": "MEN-2024-001",
"koboSubmissionId": "abc123",
"koboFormUid": "xyz789",
"dateCollecte": "2024-06-15T10:00:00+00:00",
"dateValidationCollecte": "2024-06-18T14:30:00+00:00",
"region": {
"id": "...",
"nom": "Oio",
"code": "OIO"
},
"secteur": {
"id": "...",
"nom": "Farim"
},
"localite": {
"id": "...",
"nom": "Farim Centro"
},
"campagne": {
"id": "...",
"nom": "Campagne Oio 2024"
},
"enqueteur": {
"id": "...",
"nomComplet": "Fatou Sow"
},
"chefMenage": {
"id": "...",
"nomComplet": "Mamadou Diallo",
"sexe": "M",
"age": 45,
"niveauEducation": "primaire",
"occupationPrincipale": "agriculture",
"statutMatrimonial": "marie",
"telephone": "+245955123456",
"numeroMobileMoney": "+245955123456",
"compteBancaire": null
},
"logement": {
"id": "...",
"typeLogement": "maison_individuelle",
"statutOccupation": "proprietaire",
"nbPieces": 3,
"materiauMur": "brique_ciment",
"materiauToit": "tole",
"materiauSol": "ciment",
"sourceEau": "puits_ameliore",
"typeToilette": "latrine_amelioree",
"sourceEclairage": "solaire",
"combustibleCuisine": "bois",
"traitementEau": "filtration",
"evacuationDechets": "fosse",
"aUneCuisine": true
},
"createdAt": "2024-06-15T10:00:00+00:00",
"updatedAt": "2025-01-10T14:30:00+00:00"
}
}

Operations en masse​

Suppression en masse​

POST /api/menages/bulk-delete
{
"ids": ["uuid1", "uuid2", "uuid3"]
}

Note: Verifie les dependances avant suppression (beneficiaires, plaintes, visites sante, etc.)

Verifier les dependances​

GET /api/menages/{id}/check-dependencies
{
"success": true,
"data": {
"canDelete": false,
"dependencies": {
"beneficiaires": 2,
"plaintes": 1,
"visitesSante": 3,
"mesuresAccompagnement": 5
},
"message": "Ce menage a des dependances et ne peut pas etre supprime"
}
}

Enrolement en masse​

POST /api/menages/bulk-enroll
{
"ids": ["uuid1", "uuid2", "uuid3"],
"programmeId": "uuid-programme"
}

Ajout de membres en masse​

POST /api/menages/{id}/membres/bulk
{
"membres": [
{
"nom": "Diallo",
"prenom": "Aminata",
"sexe": "F",
"dateNaissance": "2010-05-15",
"lienParente": "fille"
},
{
"nom": "Diallo",
"prenom": "Moussa",
"sexe": "M",
"dateNaissance": "2015-08-20",
"lienParente": "fils"
}
]
}

Recalculer le score PMT​

Endpoint​

POST /api/menages/{id}/recalculate-pmt

Description​

Recalcule le score PMT (Proxy Means Test) pour un menage specifique en fonction de ses caracteristiques.

Reponse​

{
"success": true,
"data": {
"menageId": "550e8400-e29b-41d4-a716-446655440000",
"codeMenage": "MEN-OIO-001",
"oldScore": 0.45,
"newScore": 0.42,
"categoriePauvrete": "pauvre",
"eligibleProgramme": true
}
}

Statistiques des menages​

Endpoint​

GET /api/menages/stats/summary

Parametres de requete​

ParametreTypeRequisDescription
regionstringNonFiltrer par nom de region
campagneUUIDNonFiltrer par campagne

Reponse​

{
"success": true,
"data": {
"general": {
"total": 15000,
"valides": 14500,
"enAttente": 400,
"rejetes": 100,
"preCollecte": 200,
"eligibles": 12000,
"avecPmt": 14800,
"pmtMoyen": 42.5,
"totalPopulation": 75000,
"tailleMoyenne": 5.0,
"qualiteMoyenne": 92.3
},
"composition": {
"totalEnfants04": 8000,
"totalEnfants514": 12000,
"totalEnfants010": 15000,
"totalEnfants1114": 12000,
"totalAdultes1564": 35000,
"totalPersonnes65Plus": 3000,
"totalHandicapes": 500,
"totalActifs": 28000,
"totalFemmes1564": 18000,
"totalFemmes1549": 15000,
"totalFemmesEnceintes": 800
},
"parStatut": {
"valide": 14500,
"en_attente": 400,
"collecte": 0,
"rejete": 100
},
"parStatutCollecte": {
"pre_collecte": 200,
"valide": 500,
"integre": 14200,
"rejete": 100
},
"parCategorie": {
"extreme_pauvre": 3000,
"pauvre": 9000,
"vulnerable": 2000,
"non_pauvre": 1000
},
"parMilieu": {
"rural": 12000,
"urbain": 3000
},
"parRegion": [
{
"id": "...",
"nom": "Oio",
"total": 5000,
"valides": 4800,
"enAttente": 150,
"preCollecte": 50
}
],
"parCampagne": [
{
"id": "...",
"nom": "Campagne 2024",
"total": 3000,
"valides": 2800
}
]
}
}

Categories de pauvrete​

CategorieSeuil PMTDescription
extreme_pauvre< 20Pauvrete extreme
pauvre20-50Pauvre
vulnerable50-70Vulnerable
non_pauvre> 70Non pauvre

Sources de donnees​

SourceDescription
koboCollecte via KoBoToolbox
survey_solutionsCollecte via Survey Solutions
manuelSaisie manuelle
importImport depuis fichier
migrationMigration depuis autre systeme

Codes d'erreur​

CodeStatut HTTPDescription
NOT_FOUND404Menage non trouve
VALIDATION_ERROR400Donnees invalides
DUPLICATE_CODE400Code menage deja existant
HAS_DEPENDENCIES400Menage a des dependances
FORBIDDEN403Permission insuffisante
INVALID_STATUS400Transition de statut invalide