Aller au contenu principal

Auto-évaluation — guide technique

Périmètre et architecture​

Pour les équipes d’implémentation et de support de la campagne historique d’auto-déclaration des compétences. Voir Fonctionnelle et Configuration. Les identifiants techniques sont Vérifiés dans le code local ; ils ne constituent pas une preuve de version déployée ni un contrat public d’intégration.

Composants​

Chemins relatifs à smartmobility-legacy/.

SourceResponsabilité
src/Company/CampaignBundle/Controller/DefaultController.phpListe, détail, brouillon, informations, étapes, participants et planification.
src/Company/CampaignBundle/Resources/views/Default/Assistant et synthèse Twig.
app/Resources/views/campaign-banner.html.twigBannière collaborateur, choix des compétences, notation et partage.
src/Main/ConfigBundle/Entity/User.phpCampagnes affectées courantes.
src/Main/ConfigBundle/Controller/CampaignController.phpProgression, complétion et état consulté.
src/Service/Skills/SkillCampaignService.phpÉcritures profil/métier et application finale.
src/Service/Skills/SkillHistoryService.phpHistorique collaborateur et manager.
src/Twig/Skill/SkillExtension.phpChargement et regroupement des compétences.
src/Command/Notifications/EmailProgramationCampaignCommand.phpTraitement des emails planifiés.

Flux de requêtes et progression​

  1. newAction crée AssessmentCampaign avec statut brouillon, tenant et école courants, puis redirige vers les informations. L’ouverture de la création écrit donc en base.
  2. La sauvegarde analyse dates/heures et applique les champs, le mode et l’option de mise à jour finale. Sans activation métier, mode Profil et métier nul. Le mode Métier exige un Job actif du même tenant.
  3. Les étapes sont enregistrées avec leur ordre. L’inscription crée un avancement à l’étape order_num = 1, done = 0, seenByUser = 0.
  4. User::getCurrentCampaigns exige affectation, statut publiée, début strictement passé et fin strictement future. La bannière considère aussi étape, complétion et état consulté.
  5. Le partage collaborateur appelle updateStepAction avec stepType = 3, sauvegarde les valeurs et cible l’étape d’évaluation manager. Ce paramètre est un type/une transition sémantique, pas un ID de ligne d’étape ni un ordre d’affichage.
  6. stepType = 4 conserve l’évaluation manager et sélectionne le type correspondant. stepType = 5 applique les valeurs au profil si activé, termine l’avancement et capture des informations organisationnelles. Le contrôleur ne démontre pas une machine d’états séquentielle complète.
  7. L’action de consultation marque le retour vu puis ouvre le profil à #assessment.

Contrats historiques​

Composition vérifiée dans config/routes.yaml, les routes de Company/CampaignBundle et Main/ConfigBundle/Resources/config/routing/campaign.yml. Routes internes de session ; aucun contrat public stable, mécanisme bearer ou garantie d’idempotence établi.

Méthode et cheminEntrée et résultat
GET /company/campaignListe ; le bundle fournit également le détail avec ID de campagne.
GET /company/campaign/c/newPersiste un brouillon et redirige ; lecture avec effet de bord.
POST /company/campaign/c/updatecampaign, name, description, status, startdate, starthour, enddate, endhour, updateUserProfile, éventuellement assessmentMode, assessmentJobId. Succès {"response":"success"}.
POST /company/campaign/c/stepscampaign et allSteps : type, nom, description, ordre, échéance, consigne et indicateur d’ID existant/nouveau.
POST /company/campaign/c/users/{id}/add-usersIDs users ; comptes actifs du tenant non inscrits, par lots. Réponses HTTP explicites 401/403/400 et précondition sur la date de fin.
POST /api/campaign/updateStepXMLHttpRequest : userId, campaignId, stepType, skills. Succès : status: 200, message: "Campaign updated". Certaines erreurs utilisent un statut dans le corps JSON plutôt que le statut HTTP correspondant.
POST /api/campaign/seenXMLHttpRequest : campaignUserId. Corps status: "success" ou "error" avec message.

Structure illustrative non exécutable, avec identifiants fictifs :

userId=<ID du collaborateur affecté>
campaignId=<ID de campagne>
stepType=3
skills[<ID selon le mode>][rating]=<niveau choisi>
skills[<ID selon le mode>][motivation]=<motivation choisie>

En mode Profil, les clés désignent des Userskill ; en mode Métier, des Skill. Le service métier intersecte les IDs soumis avec les compétences du métier d’évaluation. Ne pas réutiliser le même contrat d’ID entre modes.

Modèle de données et écritures​

Mappings dans src/Main/ConfigBundle/Resources/config/doctrine/.

EntitéÉtat principal
AssessmentCampaignInformations, publication, dates, tenant/école, mode, métier et option de mise à jour ; liens étapes, avancements et historiques.
CampaignStepsType, ordre, dates, titre, description et consignes de campagne.
CampaignUserCompletionCollaborateur, école, campagne, étape, date de mise à jour, done, seen_by_user, photographie organisationnelle de complétion.
CampaignHistoryCollaborateur/manager/campagne, niveaux et motivation, dates, liens optionnels compétence et compétence de profil.
UserSkillHistoryHistorique de changement utilisé par le mode Profil.
UserskillNiveau, motivation et niveau manager du profil vivant.

AutoAssessmentMode définit Profile = 1, Job = 2. L’entité initialise le mode Profil et la mise à jour à vrai ; le mapping déclare un défaut base à faux pour cette dernière. Distinguer nouvelles entités, valeurs base et données migrées.

Mode Profil : les clics de niveau/motivation appellent immédiatement la route de mise à jour de compétence. saveAllSkill écrit aussi sur le profil au partage et appelle l’historique. Supprimer une compétence retire l’entité de profil. updateUserProfile = false n’isole donc pas le profil.

Mode Métier : les clics collaborateur restent locaux jusqu’au partage. Le partage conserve l’historique des compétences appartenant au métier choisi. Les chaînes vides sont normalisées à null dans le service ; le JavaScript utilise aussi zéro pour certaines valeurs absentes. Null et zéro ne sont pas interchangeables.

Application finale : le service sort sans appliquer l’historique si l’option est fausse. En mode Profil, le niveau manager non nul prévaut sur le niveau collaborateur ; motivation non nulle copiée. En mode Métier, mise à jour des compétences existantes ; création d’une compétence absente seulement si elle a un niveau manager. Aucun retour arrière automatique établi.

Configuration, droits et confidentialité​

  • campagneAutoDeclaration et campaign_create contrôlent le menu inspecté, avec cas particulier des permissions vides.
  • auto_evaluation_with_job_skills contrôle les champs et la sauvegarde du mode Métier.
  • hide_motivation_campaign_bo_fo masque la motivation ; skillLevel du tenant fournit l’échelle.
  • Plusieurs lectures administratives comparent le tenant de campagne au tenant courant, mais les contrôles ne sont pas uniformes entre les gestionnaires inspectés. Le contrôleur de progression n’établit pas une matrice complète tenant, sujet et manager. Une revue d’autorisation distincte est nécessaire avant exposition à une intégration. Aucun accès non autorisé testé.
  • Les évaluations et photographies organisationnelles sont des données collaborateur : limiter exports et captures aux publics autorisés, sans notes identifiantes ni secrets dans les exemples.

Notifications, dépendances et incidents​

updateStepAction utilise MailerHandler et les types historiques de notification de complétion. Les exceptions d’email sont interceptées sans remonter l’échec à l’appelant. Un succès JSON ne prouve donc pas la livraison. Les emails Email planifiés passent par EmailNotification:Campaign et exigent la campagne publiée ; fréquence du planificateur et transport déployé Non vérifiés.

Dépendances : Symfony/session/sécurité/Twig, Doctrine, traductions et activations du tenant, rattachements collaborateur-manager, transport et traitement des emails. Le fuseau d’exécution déployé n’a pas été établi.

IncidentDiagnostic
Campagne invisibleAffectation, valeur de publication, période, étape et état consulté.
Métier refuséActivation, métier actif et tenant.
Erreur de progressionAvancement et types d’étapes ; lire le corps JSON et le statut HTTP.
Écriture partielleProfil, historique, progression et email utilisent plusieurs appels/flushs ; aucune atomicité globale ou restauration garantie établie.
Rattachement manquantÉcole, manager et contexte collaborateur utilisés pour complétion et email.
Messages répétésIdempotence non établie : inspecter l’état avant de rejouer un partage.

Coexistence avec nextgen et frontière AIHub​

La route Vue ModuleConfig/Campaigns/modules/Reviews/modules/UserReview charge le formulaire individuel d’entretien, distinct de cette campagne. Côté nextgen, EvaluationCompletedNotificationResolver traite UserReviewType::SELF et peut rendre l’évaluation disponible aux évaluateurs après l’auto-évaluation lorsque isParallel est faux. Ne pas transposer ces règles aux transitions AssessmentCampaign.

Aucun remplacement nextgen autonome ou migration automatique de cette campagne n’a été établi. Aucun appel direct AIHub trouvé dans le chemin bannière → progression → compétences/historique tracé ; aucun score généré par IA n’est démontré. La recherche AIHub portait sur la terminologie, sans audit exhaustif de tous les consommateurs de compétences.

Pour une extension, conserver les responsabilités : contrôleur/modèles de l’assistant pour la configuration, services de compétences/historique pour les écritures, extension Twig et dépôts pour les populations, mailer/commande pour les notifications. Préserver les types sémantiques et contrats d’ID propres aux modes.

Preuves et limites​

Observé le 25 octobre 2026 : PS Testing 2026, Jim Carter, espaces personnel/manager ; liste, brouillon non publié sauvegardé, sélecteur de types, participants vides et absence de notification. Aucune publication, inscription ou soumission. Captures complètes dans Configuration.

Vérifié dans le code : chemins historiques ci-dessus, src/Enum/Assessment/AutoAssessmentMode.php, mappings AssessmentCampaign, CampaignUserCompletion, CampaignHistory, migration Version20260518132457.php ; frontend nextgen src/modules/ModuleConfig/Campaigns/modules/Reviews/modules/UserReview/userReview.routes.ts ; backend nextgen src/Infrastructure/Persistence/Notification/Resolver/EvaluationCompletedNotificationResolver.php.

Non vérifié : alignement des versions déployées, mode Métier en direct, partage final manager, livraison email, matrice d’autorisation, fréquence du planificateur et fuseau d’exécution. Aucun dépôt applicatif modifié.

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.

  • Observé dans l’application : PS Testing 2026, compte Jim Carter, interface anglaise, le 25 octobre 2026 ; espaces personnel et manager, liste, informations du brouillon, types d’étapes, participants vides et planification sans notification.
  • Brouillon Documentation — Self-assessment — PS Testing créé et conservé non publié, sans participants, étapes ou notifications planifiées. Aucune évaluation ni retour manager soumis.
  • Vérifié dans le code : smartmobility-legacy/app/Resources/views/campaign-banner.html.twig, src/Main/ConfigBundle/Entity/User.php, contrôleurs Company/CampaignBundle et Main/ConfigBundle/Controller/CampaignController.php, src/Service/Skills/SkillCampaignService.php et modèles de campagne/fiche collaborateur.
  • Non vérifié : soumission collaborateur, clôture manager, livraison email, mode métier en direct et matrice complète des droits. Aucune donnée individuelle d’évaluation n’est reproduite.

Le parcours suivant est Vérifié dans le code, dans app/Resources/views/campaign-banner.html.twig, mais n’a pas été exécuté de bout en bout dans l’application.

Dernière mise à jour : 3 novembre 2026