Calculé par JeunesService.getJeuneCible (back/src/binomes/services/jeunes.service.ts), à partir de 4 critères :

Critère Vrai si
critBourse boursier (boursier = OUI ou En attente de bourse), étudiant étranger, QPV, ZRR, ou ASE
critEtude projetteEtude = Bac+5 ou Au delà
critCursus schoolCursus = CPGE, ou filière dans Droit, Justice, Notariat / Médical, Santé, ou école dans une liste figée d'établissements sélectifs (grandes écoles, Sciences Po...)
wannaBe wannaBeEL = true ou null (pas de refus explicite du jeune)
critBourse && critEtude && critCursus && wannaBe  → 'EL'
critBourse (seul)                                 → 'PP'
sinon                                             → 'PNP'

Le programme est recalculé et sauvegardé à l'inscription et à chaque mise à jour de champ impactant (école, filière, statut boursier, QPV/ZRR, genre) — voir calculateAndSaveProgrammeJeune et les appels à getJeuneCible dans jeunes.service.ts. Chaque changement est loggé via LoggingService.createLogProgramme.

EL/PP conditionnent aussi la visibilité de certains événements Linx non publiés (voir event-linx.md).