Entités Matching Instantané
InstantMatchingReservation
Table : instant_matching_reservation
Description : Réservation temporaire (15 min) d'un jeune + 3 bénévoles pendant une session de matching instantané. 3 lignes par session (une par bénévole), même jeuneId et reservationDate.
| Champ | Type | Description |
|---|---|---|
id |
bigint |
Identifiant unique |
jeuneId |
varchar |
ID du jeune (FK → jeune.id) |
benevoleId |
varchar |
ID du bénévole (FK → benevole.id) |
reservationDate |
timestamp |
Date/heure de la réservation — sert à calculer l'expiration (+ 15 min) |
orderIndex |
int (nullable) |
Ordre de proposition (0, 1, 2) — tri pour l'affichage |
etat |
enum |
État de la réservation (voir ci-dessous) |
score |
float (nullable) |
Score de compatibilité — issu du microservice (v2) ou de l'algo classique (legacy) |
typeMentor |
varchar(255) (nullable) |
Clé du bloc mentors retourné par le microservice (ex. femmes, non_femmes, generalistes). NULL si parcours back_office, fallback algo V1, ou catégorie introuvable |
deletedAt |
timestamp |
Soft delete — null = réservation active |
Valeurs de etat :
| Valeur | Description |
|---|---|
proposé |
Valeur par défaut à la création |
sélectionné |
Bénévole choisi au clic sur "Confirmer mon choix" |
autre selectionné |
Les deux autres bénévoles lors de la confirmation |
matché |
Bénévole sélectionné lors de la validation finale (création du binôme) |
refusé |
Les 3 bénévoles lors d'un refus explicite |
desactivation |
Les 3 bénévoles lors d'une demande de désactivation |
L'état est mis à jour avant le soft-delete pour conserver l'historique dans les enregistrements archivés.
Relations :
jeune: ManyToOne →Jeunebenevole: ManyToOne →Benevole
Migrations :
| Migration | Description |
|---|---|
1771338886269-addInstantMatchingReservation.ts |
Création de la table |
1772612100000-add-order-index-instant-matching-reservation.ts |
Ajout order_index |
1772612200000-add-etat-instant-matching-reservation.ts |
Ajout etat (enum) |
1772612300000-add-score-instant-matching-reservation.ts |
Ajout score |
1772612400000-add-matche-etat-instant-matching-reservation.ts |
Ajout valeur matché à l'enum |
1774950000000-add-type-mentor-instant-matching-reservation.ts |
Ajout type_mentor |
AlgoMatchingTrace
Table : algo_matching_trace
Description : Trace d'exécution de l'algo de matching instantané. Permet à l'équipe Data d'analyser le profil jeune, le stock de mentors et les scores de compatibilité à chaque session. Pas d'API exposée — consultation directe en BDD. 3 lignes par session (une par bénévole), même jeuneDetail et stockDetail.
| Champ | Type | Description |
|---|---|---|
id |
bigint |
Identifiant unique |
instantMatchingReservationId |
bigint |
FK → instant_matching_reservation.id (sans ON DELETE CASCADE — la trace survit à la suppression de la réservation) |
jeuneDetail |
json |
Corps envoyé au microservice (buildRequestBody()) — profil complet du jeune au moment de l'appel |
stockDetail |
json |
Réponse brute du microservice : objet mentors complet (toutes catégories, avant filtrage dispo). {} si fallback algo classique |
compatibiliteAnalyse |
json |
Données de compatibilité pour CE bénévole proposé. { "fallback": true } si microservice indisponible |
createdAt |
timestamp |
Date d'insertion (DEFAULT NOW()) |
Structure de jeuneDetail (JSON) :
{
"jeune_programme": "EL",
"jeune_id": 123,
"jeune_cursus_actuel_ou_passe_cf": "Licence",
"jeune_filiere_actuelle_ou_passee_cf": ["Droit"],
"jeune_secteur_vise_cf": ["Finance"],
"jeune_besoin": "Définir mon projet pro",
"reponse_recepteur": "front_jeune"
}
Structure de stockDetail (JSON) :
{
"femmes": [{ "id": 456, "rang": 1, "compatibilite": 0.87 }],
"non_femmes": [],
"generalistes": []
}
Structure de compatibiliteAnalyse (JSON) :
{
"benevole_id": "456",
"category": "femmes",
"rang": 1,
"compatibilite": 0.87,
"score_final": 87.0,
"disponible": true,
"raison_exclusion": null
}
Champ JSON libre : l'équipe Data peut en faire évoluer le contenu sans passer par un dev.