CRUD Projets
Cette page documente les operations de creation, lecture, mise a jour et suppression des projets.
Liste des projets
Endpoint
GET /api/projets
Parametres de requete
| Parametre | Type | Description |
|---|---|---|
actif | boolean | Filtrer par projets actifs |
Reponse
{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "PCH",
"nom": "Programme de Cash Harmonise"
}
]
}
Detail d'un projet
Endpoint
GET /api/projets/{id}
Reponse
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "PCH",
"nom": "Programme de Cash Harmonise",
"description": "Programme de transferts monetaires conditionnes",
"dateDebut": "2024-01-01",
"dateFin": "2027-12-31",
"actif": true,
"lectureSeule": false,
"bailleur": "Banque Mondiale",
"peutCollecter": true,
"peutScorer": true,
"peutEnroler": true,
"pmtMethode": {
"id": "...",
"nom": "PMT GB v2"
},
"institution": {
"id": "...",
"nom": "MAS"
},
"createdAt": "2024-01-01T00:00:00+00:00"
}
}
Creer un projet
Endpoint
POST /api/projets
Corps de la requete
{
"code": "FILET",
"nom": "Programme Filet Social",
"description": "Programme d'aide aux menages vulnerables",
"dateDebut": "2026-07-01",
"dateFin": "2029-06-30",
"actif": true,
"lectureSeule": false,
"bailleur": "Union Europeenne",
"peutCollecter": true,
"peutScorer": true,
"peutEnroler": true
}
Champs requis
| Champ | Description |
|---|---|
code | Code unique du projet (max 20 caracteres) |
nom | Nom du projet (max 100 caracteres) |
Reponse (201 Created)
{
"success": true,
"data": {
"id": "...",
"code": "FILET",
"nom": "Programme Filet Social",
"actif": true
},
"message": "Projet cree avec succes"
}
Modifier un projet
Endpoint
PUT /api/projets/{id}
Corps de la requete (partiel)
{
"actif": false,
"lectureSeule": true,
"dateFin": "2026-12-31"
}
Reponse
{
"success": true,
"data": { ... },
"message": "Projet mis a jour"
}
Supprimer un projet
Endpoint
DELETE /api/projets/{id}
Conditions
La suppression n'est autorisee que si :
- Aucun menage n'est associe au projet
- Aucun beneficiaire n'est associe au projet
- Aucun cycle de paiement n'est associe au projet
Reponse en cas de succes
{
"success": true,
"message": "Projet supprime"
}
Reponse en cas d'echec
{
"success": false,
"error": "Impossible de supprimer : 1500 menages associes"
}
Archiver un projet
Pour archiver un projet sans le supprimer :
Endpoint
PUT /api/projets/{id}
Corps
{
"actif": true,
"lectureSeule": true,
"peutCollecter": false,
"peutScorer": false,
"peutEnroler": false
}
Cette configuration :
- Garde le projet visible
- Empeche toute modification des donnees
- Conserve l'historique complet
Capacites d'un projet
Il n'y a pas d'endpoint dédié : le détail du projet porte les champs actif, lectureSeule, peutCollecter, peutScorer et peutEnroler. Un projet est modifiable s'il est actif et pas en lecture seule ; un projet archivé refuse toute écriture.
Reprise de ménages d'un autre projet
Un ménage a une identité unique au registre et peut participer à plusieurs projets.
| Méthode | Endpoint | Permission | Description |
|---|---|---|---|
| GET | /api/projets/{id}/menages-disponibles | registre.menages_view | Ménages candidats (page, limit 25 par défaut et 200 au plus, source, region, horsCouverture=1) |
| POST | /api/projets/{id}/reprise | registre.menages_edit | Fait participer des ménages au projet |
{ "menageIds": ["<uuid>", "<uuid>"], "commentaire": "Reprise après ciblage" }
{ "success": true, "data": { "reprises": 2, "dejaPresents": 0, "introuvables": 0 } }
Un projet archivé ne peut pas accueillir de ménages (400) ; sans ménage sélectionné : 400 Aucun ménage sélectionné.
Synchronisation avec l'outil de collecte
Chaque projet peut avoir son propre compte Kobo et/ou Survey Solutions ; à défaut, la configuration globale s'applique.
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/projets/{id}/synchronisation | Configuration du projet |
| PUT | /api/projets/{id}/synchronisation | Enregistre les blocs kobo et/ou surveySolutions |
| POST | /api/projets/{id}/synchronisation/test | Teste la connexion ({"source": "kobo"} ou Survey Solutions) |
Seul un gestionnaire ou un utilisateur dont le périmètre contient le projet peut lire ou modifier cette configuration. Les secrets ne sont jamais renvoyés : la lecture indique seulement s'ils sont renseignés, et une sauvegarde qui les omet les conserve.
Codes d'erreur
| Code | HTTP | Description |
|---|---|---|
NOT_FOUND | 404 | Projet non trouve |
DUPLICATE_CODE | 409 | Code deja utilise |
HAS_DEPENDENCIES | 400 | Donnees associees existantes |
FORBIDDEN | 403 | Permission insuffisante |
Exemples d'utilisation
Creer un projet pilote
{
"code": "PILOTE-2026",
"nom": "Programme Pilote 2026",
"description": "Phase pilote limitee a la region de Biombo",
"dateDebut": "2026-01-01",
"dateFin": "2026-06-30",
"actif": true,
"peutCollecter": true,
"peutScorer": false,
"peutEnroler": false
}
Cloturer un projet termine
{
"actif": true,
"lectureSeule": true,
"dateFin": "2026-05-31"
}