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/.
| Source | Responsabilité |
|---|---|
src/Company/CampaignBundle/Controller/DefaultController.php | Liste, 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.twig | Bannière collaborateur, choix des compétences, notation et partage. |
src/Main/ConfigBundle/Entity/User.php | Campagnes affectées courantes. |
src/Main/ConfigBundle/Controller/CampaignController.php | Progression, complétion et état consulté. |
src/Service/Skills/SkillCampaignService.php | Écritures profil/métier et application finale. |
src/Service/Skills/SkillHistoryService.php | Historique collaborateur et manager. |
src/Twig/Skill/SkillExtension.php | Chargement et regroupement des compétences. |
src/Command/Notifications/EmailProgramationCampaignCommand.php | Traitement des emails planifiés. |
Flux de requêtes et progression
newActioncréeAssessmentCampaignavec statutbrouillon, tenant et école courants, puis redirige vers les informations. L’ouverture de la création écrit donc en base.- 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
Jobactif du même tenant. - Les étapes sont enregistrées avec leur ordre. L’inscription crée un avancement à l’étape
order_num = 1,done = 0,seenByUser = 0. User::getCurrentCampaignsexige affectation, statutpubliée, début strictement passé et fin strictement future. La bannière considère aussi étape, complétion et état consulté.- Le partage collaborateur appelle
updateStepActionavecstepType = 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. stepType = 4conserve l’évaluation manager et sélectionne le type correspondant.stepType = 5applique 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.- 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 chemin | Entrée et résultat |
|---|---|
GET /company/campaign | Liste ; le bundle fournit également le détail avec ID de campagne. |
GET /company/campaign/c/new | Persiste un brouillon et redirige ; lecture avec effet de bord. |
POST /company/campaign/c/update | campaign, name, description, status, startdate, starthour, enddate, endhour, updateUserProfile, éventuellement assessmentMode, assessmentJobId. Succès {"response":"success"}. |
POST /company/campaign/c/steps | campaign et allSteps : type, nom, description, ordre, échéance, consigne et indicateur d’ID existant/nouveau. |
POST /company/campaign/c/users/{id}/add-users | IDs 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/updateStep | XMLHttpRequest : 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/seen | XMLHttpRequest : 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 |
|---|---|
AssessmentCampaign | Informations, publication, dates, tenant/école, mode, métier et option de mise à jour ; liens étapes, avancements et historiques. |
CampaignSteps | Type, ordre, dates, titre, description et consignes de campagne. |
CampaignUserCompletion | Collaborateur, école, campagne, étape, date de mise à jour, done, seen_by_user, photographie organisationnelle de complétion. |
CampaignHistory | Collaborateur/manager/campagne, niveaux et motivation, dates, liens optionnels compétence et compétence de profil. |
UserSkillHistory | Historique de changement utilisé par le mode Profil. |
Userskill | Niveau, 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é
campagneAutoDeclarationetcampaign_createcontrôlent le menu inspecté, avec cas particulier des permissions vides.auto_evaluation_with_job_skillscontrôle les champs et la sauvegarde du mode Métier.hide_motivation_campaign_bo_fomasque la motivation ;skillLeveldu 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.
| Incident | Diagnostic |
|---|---|
| Campagne invisible | Affectation, valeur de publication, période, étape et état consulté. |
| Métier refusé | Activation, métier actif et tenant. |
| Erreur de progression | Avancement et types d’étapes ; lire le corps JSON et le statut HTTP. |
| Écriture partielle | Profil, 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és | Idempotence 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ôleursCompany/CampaignBundleetMain/ConfigBundle/Controller/CampaignController.php,src/Service/Skills/SkillCampaignService.phpet 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