Galaxie des métiers — guide technique
Ce guide décrit la galaxie legacy observée sur PS Testing 2026 et les sources locales associées. Il s'adresse aux équipes d'implémentation et de support. Les guides fonctionnel et de configuration couvrent les usages et activations.
Architecture et responsabilités
Vérifié dans le code : Symfony/Twig sert l'écran depuis smartmobility-legacy. GoJS dessine la carte. Les scripts legacy gèrent recherche, détails, parcours, compétences/formations, favoris et plans.
| Composant | Rôle |
|---|---|
GalaxyController | Page, calcul du parcours et points d'entrée associés. |
GalaxyService | Métiers éligibles, familles, groupes/anneaux, candidats IA, fraîcheur et adaptation des étapes. |
UserJobMatchingRepository | Lecture des scores enregistrés avec filtres de langue, visibilité et niveau. |
galaxy_canvas.html.twig | Sérialisation du contexte, des jeux de données, URL et libellés. |
galaxy_search_job.js, galaxy_path.js | Recherche locale, chargement, cache navigateur et panneau. |
GalaxyProvider | Validation par entreprise, messages IA, cache et fournisseur LLM. |
PathResponseProcessor | Traitement de la réponse ; une erreur de traitement invalide le cache de parcours. |
galaxy_career_planner.js | Sélection/création du plan, horizons et ajout de cible. |
Chargement et données de carte
L'action de page contrôle galaxy_module, récupère le salarié et son métier, puis rend Default/galaxy.html.twig. Le sous-menu désactive séparément le lien sans métier affecté. L'action de page déréférence directement ce métier : une URL directe ne remplace pas ce prérequis.
La requête joint user_job_matching, métiers, traductions, statuts et compétences. Elle sélectionne l'utilisateur courant, sa langue, les métiers actifs, non masqués et de statut visible ; elle exclut le métier actuel dans la carte ordinaire. Un niveau courant non nul impose des niveaux positifs entre le niveau courant et ce niveau + 2. La préparation d'une cible peut ajouter un plafond de niveau. hide-job-grading neutralise le filtre de niveau ordinaire.
Le service exige un champ entreprise métier marqué job_family, applique les familles, trie par score et limite l'ensemble à 400 métiers. Les fortes proximités occupent des anneaux ; les autres sont regroupées par famille. Rayon initial 250, incrément 150, longueur estimée de libellé 130 pixels : ces valeurs décrivent le dessin, pas des probabilités.
La classification SQL teste les bornes inclusives rouges, puis orange, et classe le reste en vert. Les bornes vertes chargées ne sont pas testées séparément dans ce CASE. Avec les replis 0–1, tous les scores ordinaires peuvent tomber dans le rouge. Évitez les intervalles qui se chevauchent.
La recherche filtre getAllJobs() sur le titre après normalisation des accents et de la casse. Jusqu'à trois métiers consultés sont conservés dans le stockage local du navigateur, clé jobs_clicked_history. Effacer la recherche réinitialise la vue sans supprimer les favoris/plans.
Contrats des requêtes
Préfixe des routes : /plateforme/internal-job. Les exemples utilisent des identifiants fictifs et ne sont pas des commandes à exécuter hors de l'interface authentifiée.
| Méthode / suffixe | Entrée et sortie | Effet ou erreur |
|---|---|---|
GET /galaxy | HTML et données initiales. | Modèle d'accès interdit si le module est désactivé. |
POST /galaxy/compute_path | Champ de formulaire jid ; tableau JSON de parcours. | 401 sans authentification ; 400 sans métier ou étape résolue ; 404 pour cible inconnue ou absence de parcours. |
GET /galaxy/job_description | jid ; titre, image, mission, famille, favori, mentors. | 400 no job found pour un métier inconnu. |
POST /galaxy/job_path_details | Tableau d'étapes path ; JSON jobs (identifiants/titres) et plans (métiers présents dans les plans du salarié). | Entrée vide : JSON vide ; non testé séparément. |
POST /galaxy/career_path_list | user ; plans et type suivant. | Lecture du sélecteur. |
POST /galaxy/create_new_path | user, plan ; JSON vide. | Création d'un UserPlan ; 400 si entrée manquante ou limite atteinte. |
POST /galaxy/get_plan_targets | user, plan ; choix HTML. | Retire les horizons déjà utilisés dans le plan. |
POST /galaxy/add_job_career_path | user, job, plan, target ; JSON vide. | Crée UserPlanJob ; doublon sans nouvelle écriture. |
POST /galaxy/get_core_skills | job ; JSON coreSkills et maxrating. | Requête du panneau. |
POST /galaxy/get_skills_trainings | job ; JSON jobskills, sugestions, user, locale, maxsugestions, maxrating (orthographe conservée). | 400 si entrée métier absente. |
POST /galaxy/check_session | Session ; galaxySession 0/1. | Utilise galaxy_timeout. |
Ces routes internes ne constituent pas une API publique complète. Conservez le parcours fourni et examinez les autorisations avant toute réutilisation.
POST /plateforme/internal-job/galaxy/compute_path
Content-Type: application/x-www-form-urlencoded
jid=12345
Réponse simplifiée, vérifiée dans le code :
[
{
"path_id": 0,
"slugs": ["openai_path", "shortest_path"],
"steps": [
{
"step_number": 0,
"job_source_id": 12300,
"job_target_id": 12345,
"job_source_title": "Métier actuel",
"job_target_title": "Métier cible",
"step_score": 1,
"motivation_score": null,
"nb_skills_missing": 0,
"nb_level_skills_upgraded": -999,
"job_source_on_career_plan": 0,
"job_target_on_career_plan": 0,
"has_mobility": false
}
],
"mean_motivation_score": 0,
"mean_skills_learned": -999,
"explanation": "Explication générée"
}
]
Les constantes 1, 0, null et -999 sont des valeurs d'adaptation/sentinelles de buildSteps et buildPaths. Elles ne mesurent pas des gains de compétences ou une qualité calibrée. Le libellé shortest_path n'établit pas une optimalité mathématique.
Préparation IA, validation et cache
Les candidats appartiennent à la famille du métier courant ou cible et subissent les restrictions de niveau/proximité. Le CSV est limité à 400 métiers ; si la cible n'y figure pas, il est vide et le fournisseur n'est pas appelé. Les compétences salarié retenues ont source IS NULL et un niveau inférieur au maximum de l'entreprise. Le fournisseur réduit ensuite ces données aux titres et niveaux de maîtrise.
ValidationProvider choisit un validateur selon l'entreprise. Le validateur par défaut accepte ; un validateur spécifique peut ajouter des règles. Les messages contiennent nom d'entreprise, langue, métiers/familles, candidats et compétences. LLMProviderLocator résout le fournisseur entreprise. Le code utilise une température 0,2 et 2000 tokens maximum de sortie.
Le fournisseur calcule une empreinte des messages et délègue le cache à GalaxyCacheInterface, avec salarié, cible, score et type. checkForDataFreshness demande un rafraîchissement lorsqu'un score courant existe et diffère du score en cache, ou que ce dernier manque. Un score courant nul ne déclenche pas de rafraîchissement. Ce contrôle ne prouve pas l'invalidation immédiate à chaque modification de profil/configuration. Le navigateur garde aussi des réponses en mémoire par cible.
Les métiers produits sont résolus par identifiant entier et entreprise, ou titre/langue/entreprise. Le métier actuel est ignoré lors de la construction des étapes. Un métier introuvable provoque une erreur. PathProcessorException efface le cache ; d'autres exceptions du fournisseur renvoient un résultat vide, transformé par le contrôleur en absence de parcours. Une panne LLM peut donc apparaître comme un 404 de parcours.
Persistance, autorisations et confidentialité
Favoris, création de plan et ajout d'une cible sont des mutations explicites séparées du calcul. Le modèle autorise trois plans. Création et association ne forment pas une opération atomique du navigateur : une interruption peut laisser un plan sans sa cible.
Des méthodes acceptent des identifiants client et renvoient un JSON vide dans plusieurs cas sans modification. Un statut 200 ne prouve pas l'ajout : relisez le plan et l'association. Ce guide ne certifie pas la couverture complète des contrôles d'entreprise, de propriété et CSRF. Examinez pare-feu, voters, listeners et chaque mutation avant de réutiliser ces routes internes.
La page inclut un formulaire CSRF pour les actions métier. La sauvegarde de l'algorithme de proximité utilise puis retire un jeton dédié. Ces mécanismes ne prouvent pas la couverture de toutes les routes de la galaxie. Excluez des diagnostics clients les secrets, évaluations individuelles et messages IA bruts. Le traitement transmet au fournisseur configuré un contexte métiers/compétences ; gouvernance et rétention doivent être vérifiées pour le déploiement concerné.
Configuration, coexistence et dépendances
- Legacy :
galaxy_module, visibilité des niveaux et intervalles contrôlent accès/données. Les paramètres de graphe deGalaxyApiParameterssont conservés, mais non transmis par le calcul actuel au fournisseur LLM. - Le modèle de configuration désactive DS pour les parcours et sélectionne Live AI.
JOB_PROXIMITY_ALGORITHMconcerne séparément les scores enregistrés. - Nextgen back : clé
GALAXY_PATH_ALGORITHM, enumDS_API = 1obsolète etLive_AI = 2. Aucun écran autonome trouvé dans le frontend inspecté ; le contrôleur legacy ne lit pas cette clé. - AIhub : adaptateurs de scores JPM dans
src/matching/job_proximity/api/scores_router.py. Le changelog mentionne la suppression d'un ancien routeur Galaxy. Cela ne prouve pas un appel AIhub lors de chaque sélection de cible. - Dépendances : Symfony/Doctrine, tables de métiers/familles/traductions et matching, configuration entreprise, session, cache, GoJS et fournisseur LLM. L'action de calcul inspectée ne déclenche pas de nouvelle file ou d'événement. Le délai de synchronisation des scores amont n'a pas été établi.
Échecs et observabilité
| Symptôme | Vérifier |
|---|---|
| Accès interdit ou désactivé | Module, métier affecté, navigation et expiration de session. |
| Exception de configuration | Champ Smart Editor job_family. |
| Carte peu remplie | Scores, langue, statut, niveaux, familles et limite de chargement. |
| 404 au calcul | Cible, CSV, validateur, fournisseur/cache et traitement ; une exception peut devenir « aucun parcours ». |
| 400 après réponse IA | Résolution des étapes dans l'entreprise et la langue du salarié. |
| Parcours ancien | Cache navigateur, score enregistré et cache fournisseur. |
| Cible absente après sauvegarde | Identifiants requis, plan, horizons, doublon ou absence d'écriture ; vérifier les données persistées. |
Le fournisseur journalise ses erreurs de réponse ; le contrôleur journalise la récupération des détails au niveau debug ; les scripts journalisent les erreurs AJAX. Ces chemins de code ne prouvent pas un tableau de supervision opérationnel. Utilisez des diagnostics nettoyés des données personnelles et secrets.

La cible ouvre une fiche à gauche et un parcours surligné sur la carte. Lisez métier et explication, puis ouvrez la fiche complète si nécessaire ; le parcours proposé ne change pas votre métier affecté.
Preuves et limites
Observé dans l'application : Chrome, PS Testing 2026, Jim Carter, 23 octobre 2026 ; parcours et explication, compétences/formations, choix/création de plan non soumis, recherche sans résultat et configuration refusée. Aucune mutation métier soumise.
Vérifié dans le code : chemins relatifs à la racine de chaque dépôt, sans garantie d'équivalence avec la version déployée :
| Dépôt | Sources inspectées |
|---|---|
smartmobility-legacy | src/Customer/InternalJobBundle/Controller/GalaxyController.php, Services/GalaxyService.php, Resources/config/routing.yml, vues Default/galaxy.html.twig et galaxy/galaxy_canvas.html.twig, scripts Resources/public/js/galaxy/{galaxy_search_job,galaxy_path,galaxy_career_planner}.js sous ce bundle. |
smartmobility-legacy | src/Repository/{UserJobMatchingRepository,GalaxyApiParametersRepository}.php, src/Entity/GalaxyApiParameters.php, src/Service/AI/Galaxy/GalaxyProvider.php, Validation/{ValidationProvider,DefaultValidation}.php sous ce service. |
smartmobility-legacy | src/Main/ConfigBundle/Form/Type/GalaxyApiParametersType.php, src/Main/ConfigBundle/Entity/UserPlan.php, src/Company/AccountBundle/Controller/SettingController.php, vues et routes de ce bundle, config/routes.yaml, InternalJobTabsEnum et InternalJobSubmenuService dans Main/SitemapBundle. |
smartmobility-nextgen-back | src/Domain/V1/Job/Enum/GalaxyAlgorithm.php, src/Domain/V2/Company/Enum/ConfigurationKey.php. |
smartmobility-nextgen-front | Recherche dans src sans écran autonome sous les termes Galaxy/Galaxie ; cela ne prouve pas l'absence de tout remplacement futur. |
aihub | src/matching/job_proximity/api/scores_router.py, docs/en/changelog.md. |
Non vérifié : commit déployé, synchronisation des scores, algorithme/seuils réels du tenant, persistance soumise, audit complet des autorisations, mobile et traces réseau/fournisseur. L'accès administrateur est resté refusé avec le compte requis. Aucun point d'entrée n'a été appelé hors de l'interface observée.
Sources du guide fonctionnel
Ces références d’implémentation et de produit étayent le guide fonctionnel. Le code local n’établit pas la révision ou les options déployées. Les observations dans l’application restent distinctes du code et des sources documentaires.
Vérifié dans le code : contrôleurs, services, vues et scripts de Customer/InternalJobBundle, sous-menu de Main/SitemapBundle et Repository/UserJobMatchingRepository.php du legacy. Voir les sources techniques.
Vérification des parcours du 26 octobre 2026
Observé dans l’application : PS Testing 2026, Jim Carter. La recherche live n’a renvoyé aucun résultat pour Data ou Manager et n’a montré que le nœud du métier courant. Aucun chemin cible ni sauvegarde depuis la galaxie n’a pu être réalisé. C’est le résultat de cette session, pas une invalidation de l’ancienne capture ni une preuve de suppression de la fonctionnalité.
Dernière mise à jour : 3 novembre 2026