Aller au contenu principal

API Éligibilité

L'API Éligibilité permet de définir et d'évaluer des règles d'éligibilité pour les ménages.

Vue d'ensemble

EndpointMéthodeDescription
/api/eligibility/rulesetsGETListe des ensembles de règles
/api/eligibility/rulesets/{id}GETDétail d'un ensemble
/api/eligibility/rulesetsPOSTCréer un ensemble
/api/eligibility/rulesets/{id}PUTModifier un ensemble
/api/eligibility/rulesets/{id}DELETESupprimer un ensemble
/api/eligibility/rulesets/{id}/clonePOSTCloner un ensemble
/api/eligibility/templatesGETTemplates disponibles
/api/eligibility/evaluate/menage/{id}POSTÉvaluer un ménage
/api/eligibility/evaluate/batchPOSTÉvaluation en lot
/api/eligibility/simulatePOSTSimuler des règles
/api/eligibility/fieldsGETChamps disponibles
/api/eligibility/operatorsGETOpérateurs disponibles
/api/eligibility/statsGETStatistiques globales

Permissions requises

  • registre.eligibilite_view : Consultation
  • registre.eligibilite_create : Création
  • registre.eligibilite_edit : Modification
  • registre.eligibilite_delete : Suppression
  • registre.eligibilite_evaluate : Évaluation

Liste des ensembles de règles

Endpoint

GET /api/eligibility/rulesets

Paramètres de requête

ParamètreTypeRequisDescription
pageintNonNuméro de page (défaut: 1)
limitintNonÉléments par page (max: 100)
programmeIdUUIDNonFiltrer par programme
estTemplatebooleanNonUniquement les templates
actifbooleanNonUniquement les actifs
searchstringNonRecherche textuelle

Réponse

{
"success": true,
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "ELIG-PMT-001",
"nom": "Ciblage PMT Standard",
"description": "Règles de ciblage basées sur le score PMT",
"logique": "AND",
"estTemplate": true,
"actif": true,
"version": 3,
"nbRegles": 5,
"nbReglesActives": 5,
"nbEvaluations": 3500,
"nbEligibles": 2800,
"tauxEligibilite": 80.0,
"derniereEvaluation": "2025-03-15T10:30:00+00:00",
"createdAt": "2025-01-01T08:00:00+00:00"
}
],
"meta": {
"total": 15,
"page": 1,
"limit": 20,
"pages": 1
}
}

Détail d'un ensemble de règles

Endpoint

GET /api/eligibility/rulesets/{id}

Réponse

{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"code": "ELIG-PMT-001",
"nom": "Ciblage PMT Standard",
"description": "Règles de ciblage basées sur le score PMT et caractéristiques du ménage",
"logique": "AND",
"estTemplate": true,
"actif": true,
"version": 3,
"nbRegles": 5,
"nbReglesActives": 5,
"nbEvaluations": 3500,
"nbEligibles": 2800,
"tauxEligibilite": 80.0,
"programme": {
"id": "...",
"code": "PCH-GW",
"nom": "PCH Guinée-Bissau"
},
"creePar": {
"id": "...",
"nom": "Admin User"
},
"rules": [
{
"id": "550e8400-e29b-41d4-a716-446655440010",
"nom": "Score PMT",
"description": "Score PMT inférieur au seuil de pauvreté",
"categorie": "menage",
"champ": "scorePmt",
"typeChamp": "number",
"operateur": "<=",
"operateurLabel": "Inférieur ou égal à",
"valeur": 0.5,
"valeurSecondaire": null,
"ordre": 1,
"actif": true,
"messageEchec": "Le score PMT doit être inférieur ou égal à 0.5"
},
{
"id": "550e8400-e29b-41d4-a716-446655440011",
"nom": "Taille du ménage",
"description": "Ménage avec au moins 3 personnes",
"categorie": "menage",
"champ": "tailleMenage",
"typeChamp": "number",
"operateur": ">=",
"valeur": 3,
"ordre": 2,
"actif": true
}
],
"createdAt": "2025-01-01T08:00:00+00:00",
"updatedAt": "2025-03-10T14:30:00+00:00"
}
}

Créer un ensemble de règles

Endpoint

POST /api/eligibility/rulesets

Corps de la requête

{
"nom": "Ciblage Régional Oio",
"description": "Règles spécifiques pour la région Oio",
"logique": "AND",
"estTemplate": false,
"actif": true,
"programmeId": "550e8400-e29b-41d4-a716-446655440001",
"notes": "Adapté aux conditions locales",
"rules": [
{
"nom": "Score PMT",
"champ": "scorePmt",
"typeChamp": "number",
"operateur": "<=",
"valeur": 0.45,
"categorie": "menage",
"obligatoire": true,
"messageEchec": "Score PMT trop élevé"
},
{
"nom": "Zone rurale",
"champ": "milieu",
"typeChamp": "string",
"operateur": "=",
"valeur": "rural",
"categorie": "menage"
}
]
}

Logiques disponibles

LogiqueDescription
ANDToutes les règles doivent être validées
ORAu moins une règle doit être validée

Réponse

{
"success": true,
"message": "RuleSet créé avec succès",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440002",
"code": "ELIG-OIO-001"
}
}

Cloner un ensemble de règles

Endpoint

POST /api/eligibility/rulesets/{id}/clone

Corps de la requête

{
"code": "ELIG-BAFATA-001",
"nom": "Ciblage Régional Bafata",
"programmeId": "550e8400-e29b-41d4-a716-446655440001"
}

Réponse

{
"success": true,
"message": "RuleSet cloné avec succès",
"data": {
"id": "550e8400-e29b-41d4-a716-446655440003",
"code": "ELIG-BAFATA-001"
}
}

Évaluer un ménage

Endpoint

POST /api/eligibility/evaluate/menage/{menageId}

Corps de la requête

{
"ruleSetId": "550e8400-e29b-41d4-a716-446655440000"
}

Ou avec un programme :

{
"programmeId": "550e8400-e29b-41d4-a716-446655440001"
}

Réponse

{
"success": true,
"data": {
"menage": {
"id": "...",
"code": "MEN-OIO-001",
"scorePmt": 0.42,
"categoriePauvrete": "pauvre"
},
"evaluation": {
"eligible": true,
"score": 100,
"reglesEvaluees": 5,
"reglesValidees": 5,
"reglesEchouees": 0,
"details": [
{
"regle": "Score PMT",
"valide": true,
"valeurAttendue": "≤ 0.5",
"valeurReelle": 0.42
},
{
"regle": "Taille du ménage",
"valide": true,
"valeurAttendue": "≥ 3",
"valeurReelle": 5
}
]
}
}
}

Évaluation en lot

Endpoint

POST /api/eligibility/evaluate/batch

Corps de la requête

{
"ruleSetId": "550e8400-e29b-41d4-a716-446655440000",
"filters": {
"region": "550e8400-e29b-41d4-a716-446655440010",
"statut": "valide"
},
"updateEligibility": true
}

Réponse

{
"success": true,
"message": "Évaluation terminée: 3500 ménages évalués, 2800 éligibles",
"data": {
"total": 3500,
"eligible": 2800,
"nonEligible": 700,
"tauxEligibilite": 80.0,
"parRegion": [
{"region": "Oio", "total": 1200, "eligibles": 1000},
{"region": "Bafata", "total": 1500, "eligibles": 1150}
],
"duree": "45.2s"
}
}

Simuler des règles

Endpoint

POST /api/eligibility/simulate

Corps de la requête

{
"rules": [
{
"champ": "scorePmt",
"operateur": "<=",
"valeur": 0.4
},
{
"champ": "nbEnfants514",
"operateur": ">=",
"valeur": 2
}
],
"logique": "AND",
"menageIds": [],
"limit": 50
}

Réponse

{
"success": true,
"data": {
"totalEvalues": 50,
"eligibles": 35,
"tauxEligibilite": 70.0,
"preview": [
{
"menageId": "...",
"code": "MEN-OIO-001",
"eligible": true,
"score": 100
}
]
}
}

Champs disponibles

Endpoint

GET /api/eligibility/fields

Réponse

{
"success": true,
"data": [
{
"categorie": "menage",
"champs": [
{"nom": "scorePmt", "label": "Score PMT", "type": "number"},
{"nom": "tailleMenage", "label": "Taille du ménage", "type": "number"},
{"nom": "nbEnfants04", "label": "Enfants 0-4 ans", "type": "number"},
{"nom": "nbEnfants514", "label": "Enfants 5-14 ans", "type": "number"},
{"nom": "categoriePauvrete", "label": "Catégorie pauvreté", "type": "string"},
{"nom": "milieu", "label": "Milieu (urbain/rural)", "type": "string"}
]
},
{
"categorie": "chef",
"champs": [
{"nom": "sexe", "label": "Sexe", "type": "string"},
{"nom": "age", "label": "Âge", "type": "number"},
{"nom": "niveauEducation", "label": "Niveau éducation", "type": "string"}
]
},
{
"categorie": "logement",
"champs": [
{"nom": "typeLogement", "label": "Type de logement", "type": "string"},
{"nom": "nbPieces", "label": "Nombre de pièces", "type": "number"},
{"nom": "sourceEau", "label": "Source d'eau", "type": "string"}
]
}
]
}

Opérateurs disponibles

Endpoint

GET /api/eligibility/operators

Réponse

{
"success": true,
"data": {
"number": [
{"code": "=", "label": "Égal à"},
{"code": "!=", "label": "Différent de"},
{"code": ">", "label": "Supérieur à"},
{"code": ">=", "label": "Supérieur ou égal à"},
{"code": "<", "label": "Inférieur à"},
{"code": "<=", "label": "Inférieur ou égal à"},
{"code": "between", "label": "Entre"}
],
"string": [
{"code": "=", "label": "Égal à"},
{"code": "!=", "label": "Différent de"},
{"code": "contains", "label": "Contient"},
{"code": "starts_with", "label": "Commence par"},
{"code": "in", "label": "Dans la liste"}
],
"boolean": [
{"code": "=", "label": "Égal à"},
{"code": "!=", "label": "Différent de"}
]
}
}

Statistiques globales

Endpoint

GET /api/eligibility/stats

Réponse

{
"success": true,
"data": {
"global": {
"totalRuleSets": 15,
"ruleSetsActifs": 12,
"totalEvaluations": 25000,
"tauxEligibiliteMoyen": 78.5
},
"mostUsed": [
{
"id": "...",
"code": "ELIG-PMT-001",
"nom": "Ciblage PMT Standard",
"nbEvaluations": 15000,
"tauxEligibilite": 80.0
}
]
}
}