Documentation technique du système de matching jeune/bénévole (algo classique par scoring). Pour le matching via microservice (nouvel algo bêta, matching instantané), voir matching-instantane.md.
1. Filtres de disqualification (rating = -99)
Ces critères excluent immédiatement un bénévole du matching :
| Critère | Condition |
|---|---|
| Admin associé différent | Jeune ou bénévole suivi par un autre admin (sauf superadmin) |
| Jeune PNP + Mentor VIP | Programme PNP incompatible avec badge vip |
| Jeune PNP + Mentor Partenaire | Programme PNP incompatible avec badge partenaire |
| Blacklist | Jeune ou bénévole en état Blacklist |
| Sandbox différente | Jeune et bénévole pas dans la même sandbox |
| Non Autonome | Jeune ou bénévole avec state ≠ Autonome |
| Multibinome autre admin | Mentor MATCHE multibinome déjà suivi par autre admin |
| Mentor VIP sans admin VIP | Admin non-VIP ne peut pas matcher un mentor VIP |
| Statut incorrect | Status ≠ APTE ou MATCHE |
| Badge région | Mentor avec badge region hors des régions de l'admin |
| Badge partenaire | Mentor avec badge partenaire hors des régions de l'admin |
2. Bonus de scoring par type de jeune
2.1 LYCÉEN / COLLÉGIEN
| Critère | Points |
|---|---|
| Même département | +0.5 |
2.2 ÉTUDIANT LICENCE - Cursus CPGE
| Critère | Points |
|---|---|
| Même cursus "CPGE" | +4 |
| Même filière (ex: "Scientifique") | +5 |
| Même secteur métier | +1 |
| Même département | +1 |
2.3 ÉTUDIANT LICENCE - Autres cursus
| Critère | Points |
|---|---|
| Même cursus | +2 |
| Même filière | +2 |
| Même secteur métier | +3 |
| Même département | +1 |
2.4 ÉTUDIANT MASTER
| Critère | Points |
|---|---|
| Même cursus | +1 |
| Même filière | +1 |
| Même secteur métier | +5 |
| Même département | +1 |
2.5 Bonus communs (tous types)
| Critère | Points |
|---|---|
| Multibinome (status MATCHE) | +0.5 |
| Passions communes | Affiché dans le détail (pas de points) |
3. Algorithme MVLS (sandbox spécifique)
3.1 Filtre d'exclusion MVLS
| Critère | Points |
|---|---|
| Préférence genre non respectée | -99 (exclusion) |
3.2 Bonus MVLS
| Critère | Points |
|---|---|
| Même domaine/filière | +4 |
| Cursus = choix n°1 du lycéen | +2 |
| Cursus = choix n°2 du lycéen | +0.5 |
| Cursus = choix n°3 du lycéen | +0.5 |
| Même département | +1 |
| Même région | +0.5 |
3.3 Besoins MVLS
| Besoin jeune | Condition mentor | Points |
|---|---|---|
RÉUSSIR (succeed) |
Besoin succeed coché |
+1 |
CANDIDATER (apply) |
Besoin apply coché |
+1 |
CANDIDATER (apply) |
Case "alternance" cochée | +1 |
FINANCER (finance) |
Besoin finance coché |
+1 |
FINANCER (finance) |
Bourse CROUS comme source | +1 |
DÉCOUVRIR (discover) |
Besoin discover coché |
+1 |
DÉMÉNAGER (move) |
Besoin move coché |
+1 |
4. Correspondance des champs
| Critère | Champ Jeune | Champ Bénévole |
|---|---|---|
| Cursus | school_cursus |
cursusbenevole.cursus |
| Filière | filieres (JSON array) |
cursusbenevole.filiere |
| Secteur métier | sectors (JSON array) |
secteur_metier ou postebenevole.secteur |
| Département | school_department |
department |
| Région | school_region |
region |
| Besoins | besoins (JSON) |
besoins (JSON) |
| Passions | passions (JSON array) |
passions (JSON array) |
5. Score maximum théorique
| Type de jeune | Calcul | Score max |
|---|---|---|
| Lycéen/Collégien | 0.5 | 0.5 |
| Étudiant Licence CPGE | 4 + 5 + 1 + 1 + 0.5 | 11.5 |
| Étudiant Licence autre | 2 + 2 + 3 + 1 + 0.5 | 8.5 |
| Étudiant Master | 1 + 1 + 5 + 1 + 0.5 | 8.5 |
| MVLS (tous bonus) | 4 + 2 + 0.5 + 0.5 + 1 + 0.5 + 7×1 | 15.5 |
6. Flux de traitement
┌─────────────────────────────────────────────────────────────┐
│ REQUÊTE MATCHING │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ FILTRES SQL (benevole.repository.ts) │
│ • sandbox = sandbox du jeune │
│ • state = 'Autonome' │
│ • status IN ('APTE', 'MATCHE') │
│ • adminAssocieId compatible │
│ • badges VIP/partenaire (si jeune PNP) │
│ • badges région (si admin régional) │
│ • badges partenaire + région (si admin régional) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ FILTRES JS (rating.controller.ts) │
│ • Réservation active par autre admin │
│ • Nombre de binômes actifs < max │
│ • Exclusion des profils en réservation matching instantané │
│ active (15 min) │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ CALCUL RATING (rating.service.ts) │
│ • Vérifications de sécurité (double check) │
│ • Calcul des points selon type de jeune │
│ • Génération du texte de détail │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ TRI ET LIMITE │
│ • Tri décroissant par rating │
│ • Retour des 50 premiers résultats │
└─────────────────────────────────────────────────────────────┘
7. Fichiers sources
| Fichier | Rôle |
|---|---|
back/src/binomes/services/rating.service.ts |
Calcul du score de matching |
back/src/binomes/repositories/benevole.repository.ts |
Filtres SQL optimisés |
back/src/binomes/controllers/rating.controller.ts |
Orchestration du matching |
back/src/binomes/entities/Benevole.entity.ts |
Structure données bénévole |
back/src/binomes/entities/Jeune.entity.ts |
Structure données jeune |
Document généré le 2026-02-04