Evalixo — Documentation fonctionnelle
Plateforme d'évaluation technique en marque blanche — le logo et le nom du cabinet sur ce que voient candidats et tiers : un cabinet construit sa banque de questions et de tests, envoie des épreuves à des candidats sans compte, et exploite les copies corrigées.
1Le produit
Evalixo couvre la chaîne complète d'une évaluation de recrutement : construire le contenu, l'envoyer, encadrer le passage, corriger, décider.
Les cinq objets du métier
| Objet | Définition |
|---|---|
| Question | L'unité élémentaire : un énoncé, un type, un barème, un temps accordé (et, au besoin, une durée estimée). Vit dans une banque, réutilisable dans plusieurs tests. |
| Test | Une suite ordonnée de questions. Ses caractéristiques (durée, barème, niveau, compétences) sont déduites des questions, jamais saisies. |
| Questionnaire | Le dossier déclaratif — un formulaire sans notation ni chronomètre (motivation, administratif, auto-évaluation). |
| Évaluation | Un envoi : un candidat × une épreuve. C'est une ligne sur la fiche du candidat, avec son propre lien de passage, sa propre échéance et son propre déroulement, figé au moment de l'envoi. |
| Campagne | L'orchestration : un poste, des épreuves ordonnées, des candidats. Elle génère les évaluations en série. |
Son seul sésame est un lien opaque et daté (/t/{token} pour une épreuve,
/p/{token} pour un parcours de campagne). Révoquer l'évaluation tue le lien.
2Personas & accès
Recruteur
Travaille dans un cabinet (tenant). Tout ce qu'il crée appartient au cabinet et est partagé avec ses collègues.
- Banque privée : questions, tests, questionnaires
- Recrutement : clients, postes, campagnes, candidats
- Consulte le catalogue officiel sans pouvoir le modifier
Administrateur plateforme
Ne recrute pas. Il conserve le catalogue officiel et supervise les cabinets.
- Catalogue officiel : questions et tests partagés à tous
- Sociétés, comptes recruteurs, candidats tous cabinets
- Messages du formulaire de contact
| Règle | Comportement |
|---|---|
| Authentification | Page hébergée par Keycloak, avant même le chargement de l'application. Aucun écran de connexion interne. |
| Ouverture d'un compte | Self-service depuis le site public : le recruteur s'inscrit, vérifie son e-mail, nomme son cabinet et entre (§3). La création d'un compte par l'administrateur reste possible et n'a pas changé (§20) — les deux voies coexistent. |
| Cloisonnement | Chaque lecture est filtrée par le cabinet. Un objet d'un autre cabinet est introuvable (404), jamais « interdit ». |
| Contenu officiel | Lecture pour tous, écriture réservée à l'administrateur. Une tentative d'écriture par un recruteur est refusée 403. |
| Séparation des espaces | Les écrans de recrutement sont fermés à l'administrateur, la supervision est fermée au recruteur — chacun est renvoyé vers son accueil. |
3Création de compte & espace de travail
Un recruteur ouvre son compte lui-même depuis le site public : le bouton « Créer mon compte » mène à l'écran d'inscription. Aucune invitation préalable, aucun devis, aucune création par l'administrateur n'est nécessaire. Le parcours va de l'inscription à un espace de travail utilisable — cabinet créé, plan posé, contenu d'exemple en place.
Le parcours
| Étape | Ce qui se passe |
|---|---|
| Inscription | Sur l'écran hébergé, le même que la connexion et aux couleurs d'Evalixo (§2). L'e-mail est l'identifiant : il n'y a pas d'autre nom d'utilisateur. |
| Vérification de l'e-mail obligatoire | Un lien de vérification part à l'adresse saisie. Tant qu'il n'a pas été suivi, la connexion reste fermée : le compte existe mais n'ouvre rien. |
| Première connexion | Le compte n'appartient encore à aucun cabinet et ne porte aucun rôle. L'application n'ouvre donc aucun écran de travail et renvoie sur « Une dernière étape ». |
| Nom du cabinet | Un champ, un seul. À la validation, l'espace est créé, le compte en devient recruteur, et le contenu d'exemple y est posé. |
| Arrivée | Le tableau de bord (§17), avec un bandeau de bienvenue qui pointe vers le rapport à corriger. |
L'écran « Une dernière étape »
| Règle | Comportement |
|---|---|
| Écran isolé | Il s'affiche hors de l'application : ni barre latérale, ni recherche globale, ni menu (§4). Il n'y a rien d'autre à faire que le franchir. |
| Un seul champ | Le nom du cabinet, obligatoire. Rien d'autre n'est demandé — ni logo, ni adresse, ni collègues : tout cela se règle ensuite (§18). |
| Nom déjà porté ailleurs | Le nom saisi est conservé tel quel — il n'est pas unique à l'échelle de la plateforme. L'identifiant de l'espace, lui, est rendu unique automatiquement : rien à corriger, aucun refus. |
| Plan de départ | Le cabinet s'ouvre sur le plan Free (§19). Le recruteur en lit les plafonds dès son arrivée, en lecture seule. |
| Franchie une fois | L'étape ne réapparaît plus : un compte rattaché à un cabinet entre directement dans l'application. |
Les exemples guidés
Un espace vide ne se visite pas : chaque écran renverrait un état vide, et rien ne montrerait à quoi ressemble un rapport, une campagne ou une correction en attente. La création du cabinet dépose donc un jeu d'exemples cohérent, qui couvre la chaîne complète.
| Objet | Ce qui est posé |
|---|---|
| Client & poste | Un client et un poste rattaché (§8), pour que la campagne ait un contexte. |
| Test | « Test Java — découverte (exemple) » : six questions copiées du catalogue officiel dans la banque privée du cabinet (§6). C'est un test ordinaire — modifiable, envoyable, supprimable. |
| Campagne | Une campagne en cours sur ce poste (§9), avec les trois candidats déjà invités. |
| Candidat — copie corrigée | Épreuve rendue et entièrement corrigée : score définitif, rapport complet à lire (§15). |
| Candidat — copie à corriger | Épreuve rendue avec deux réponses libres sans note : score provisoire. C'est la porte d'entrée de la correction — à la main ou assistée par l'IA (§16). |
| Candidat — invitation ouverte | Lien encore valide, passage non commencé : l'état « invité » a lui aussi son exemple (§10). |
| Règle | Comportement |
|---|---|
| Signalés | Chaque objet d'exemple porte la mention « (exemple) » dans son nom — listes comme fiches. Rien ne se fait passer pour une donnée réelle. |
| Adresses inertes | Les candidats de démonstration portent des adresses non routables (domaine réservé aux exemples) : aucun message ne peut leur parvenir, ni invitation ni relance. |
| Hors quotas jamais comptés | Rien de ce qui est posé n'entre dans les compteurs du plan (§19) — ni le test, ni les candidats, ni les passages : le cabinet démarre à zéro consommation, comme s'il était vide. Les jauges de l'écran « Abonnement & consommation » comptent exactement ce que la création vérifie : l'écran ne peut pas annoncer un chiffre que le blocage ne jugerait pas. Corollaire : supprimer un exemple ne libère rien, il n'y avait rien à libérer. |
| Passages hors du mois | Les épreuves d'exemple sont datées en dehors du mois en cours (une quarantaine de jours en arrière). Le rapport se lit normalement ; le compteur mensuel de passages, lui, reste à zéro. |
| Suppression libre | Objet par objet, avec les règles ordinaires de suppression et de révocation (§22). Ce n'est pas un mode d'essai à quitter : ce sont des objets comme les autres. |
| Jamais recréés | Les exemples sont posés une seule fois, à la création du cabinet. Supprimés, ils ne reviennent pas. |
L'inscription ne demande aucun choix d'offre et aucune carte bancaire : le cabinet naît sur Free. Le passage à Starter ou Growth se fait après coup, par carte, depuis l'écran « Abonnement & consommation » du cabinet (§19) — c'est aussi pour cela que les offres payantes du site public renvoient vers la création de compte. Scale, lui, se vend sur devis et s'active par l'équipe Evalixo (§20).
5Bibliothèque de questions
Deux périmètres coexistent : Officielles (le catalogue de la plateforme) et Personnalisées (celles du cabinet). Une question officielle se copie dans sa propre bibliothèque pour être adaptée.
Une question personnalisée peut aussi être rédigée avec l'IA : elle arrive alors en brouillon, à relire puis à adopter, et n'entre dans la bibliothèque qu'à ce moment-là (§16).
Les sept types de question
| Type | Ce que fait le candidat | Notation |
|---|---|---|
| QCM | Coche une seule bonne réponse. | Tout ou rien |
| Choix multiples | Coche plusieurs bonnes réponses. | Tout ou rien |
| Réponse libre | Rédige un texte. | Correction manuelle |
| Échelle | S'auto-évalue sur une échelle. | Déclaratif — non noté |
| Ordonnancement | Remet les étapes dans l'ordre. | Tout ou rien |
| Association | Relie chaque item à sa correspondance. | Proportionnelle |
| Texte à trous | Complète les {{n}} de l'énoncé. | Proportionnelle |
Règles de gestion
| Règle | Comportement |
|---|---|
| Éditeur visuel | L'énoncé et la réponse attendue d'une question libre se rédigent dans un éditeur visuel (gras, italique, code, listes, bloc de code coloré pendant la frappe — 16 langages, détection automatique). Les réponses (propositions d'un QCM, étapes d'un ordonnancement) acceptent gras, italique et code, sur une seule ligne. La description d'un poste se rédige dans le même éditeur. Le format stocké reste du texte à marqueurs : les questions existantes ne bougent pas. Les autres zones de texte (notes, commentaires) restent des notes simples. |
| Visuel d'énoncé | Une question porte soit une image, soit un visuel HTML — jamais les deux. Le visuel HTML est réservé à l'administrateur (il s'exécute chez le candidat, dans un cadre isolé). |
| Options mélangées | Pour l'ordonnancement et l'association, l'ordre affiché au candidat est brassé côté serveur — jamais l'ordre de saisie, qui est la solution. |
| Suppression | Refusée 409 dès qu'un test référence la question ou qu'un candidat y a répondu : une réponse est une preuve, l'effacer réécrirait des scores passés. |
| Copie d'une officielle | Une seule copie par question et par cabinet. La deuxième tentative renvoie vers la copie existante. |
| Pas de métier | Une question porte un domaine et des compétences, jamais un métier. Le champ n'existe ni au formulaire de création, ni en facette du banc de questions. Le métier est l'intention d'un test (§6) : la même question sert dix métiers, l'y enfermer obligerait à la dupliquer. |
Chaque réponse d'un candidat fige la question telle qu'elle était le jour du passage. Les instantanés produits avant le retrait du métier gardent le champ tel quel : un document gelé ne se réécrit pas, même pour le nettoyer.
6Bibliothèque de tests
Même découpage que les questions : Officielles et Personnalisées. Chaque carte affiche les caractéristiques déduites du contenu et porte le bouton d'envoi.
Un test personnalisé peut être composé par l'IA — métier visé, répartition des types, questions comprises. Il arrive en brouillon, se relit question par question, et ne devient un test envoyable qu'une fois adopté (§16).
Grille ou liste
Les listes s'affichent au choix en liste (une ligne par objet, pour balayer et comparer des chiffres alignés) ou en grille (des tuiles, pour découvrir un catalogue). La liste est l'affichage par défaut : on vient sur ces écrans pour retrouver un objet parmi d'autres, pas pour contempler un catalogue. Le sélecteur est au-dessus de la liste, à droite ; le choix est général — il vaut pour les tests, les questions et les campagnes — et il est retenu d'une visite à l'autre.
Chaque écran a la vue qui lui manquait : le test se couche sur une ligne (identité, signature, gestes), la question gagne sa tuile (énoncé sur trois lignes et la rangée barème · durée · niveau, qui se compare d'une tuile à l'autre), la campagne se couche en gardant sa barre d'avancement — alignées, dix barres se lisent d'un coup d'œil.
Le constructeur
Deux colonnes : le test en construction à gauche, la banque de questions à droite. Une question s'ajoute d'un clic, l'ordre se règle par glisser-déposer. Sous 1024 px, les deux colonnes deviennent des onglets.
En tête, un bandeau épinglé porte les chiffres du test — questions · durée · barème · niveau · type — dans la même rangée à séparateurs que la carte du banc de tests : on reconnaît la signature d'un test d'un écran à l'autre. La carte « Informations du test », en dessous, ne garde que ce qui se décide : le nom sur une ligne, puis le métier visé et les domaines côte à côte, enfin le niveau annoncé. Ce qui est déduit des questions est repoussé sous un filet, en pied de carte : les compétences évaluées. La durée n'est plus dans la carte — c'est un chiffre, elle vit dans le bandeau avec les autres.
Le constructeur ne porte plus aucun réglage de déroulement : ni passage en une seule fois, ni mesures anti-triche. Ces choix se font à l'envoi, épreuve par épreuve — voir §11. Un même test peut donc partir surveillé chez un candidat et libre chez un autre, sans être dupliqué : c'est ce qui permet de régler un test officiel, qu'un recruteur ne peut pas modifier.
Règles de gestion
| Règle | Comportement |
|---|---|
| Tout est déduit | Durée (somme des questions), barème, niveau, type (noté / déclaratif) et compétences sont recalculés à chaque enregistrement. Aucun de ces champs ne se saisit. |
| Métier visé — obligatoire | Un test déclare le métier qu'il évalue, choisi dans une liste fermée (une vingtaine de valeurs couvrant les domaines du référentiel). Il est obligatoire : absent ou hors liste, l'enregistrement est refusé 422 (VALIDATION_FAILED / UNKNOWN_JOB_ROLE). Le bouton n'est jamais grisé — un enregistrement incomplet marque le champ. La valeur « Transversal » est la réponse d'un test qui ne vise aucun métier en particulier : un choix, jamais un oubli. Le domaine, lui, reste dérivé des questions. |
| Métier ↔ domaines — cohérence | Chaque métier du référentiel appartient à UN domaine (Développeur backend → IT, Comptable → Comptabilité…). Sur un test, le domaine du métier doit FIGURER PARMI les domaines du test — il suffit qu'il y soit, les autres restent libres (un test backend peut aussi couvrir Data). Sinon 422 JOB_ROLE_DOMAIN_MISMATCH. « Transversal » est exempté : il ne vise aucun domaine. En pratique le refus ne se rencontre pas — l'écran ajoute le domaine du métier choisi et l'épingle (plus de « × ») tant que ce métier tient. |
| Métier — facette et carte | Le banc de tests porte un filtre Métier résolu côté serveur (multi-valeurs, comme le domaine), et le métier se lit sur chaque carte de test à côté des domaines. C'est aussi lui qui préfiltre le sélecteur d'épreuves d'une campagne (§9). |
| Condition d'envoi | Un test est envoyable dès qu'il contient au moins une question. C'est l'unique règle : un test vide se crée et se garde, il ne part jamais. |
| Test « vivant » | Un test déjà envoyé s'édite, avec un bandeau d'avertissement : des candidats détiennent son lien. Les copies déjà rendues ne bougent pas — elles sont figées. |
| Officiel en lecture | Un recruteur consulte un test officiel, l'envoie directement et en règle le déroulement à l'envoi (§11). Pour le modifier, il l'ajoute d'abord à sa bibliothèque : « Ajouter à mes tests » en fait une copie privée. Le partager à un tiers, en revanche, ne demande aucune copie préalable (§12). |
| La FICHE d'un officiel — ce qu'elle porte, et ce qu'elle ne porte pas | Ouvrir un test officiel mène au même écran qu'un des siens, en consultation. Deux gestes ne suivent pas la même règle et il ne faut pas les confondre. « Partager à un tiers » y figure : la fiche l'exigeait en copie PRIVÉE, alors que le pied de carte du banc de tests l'offrait déjà sur le catalogue et que le serveur ne l'a jamais refusé — c'était une divergence entre deux écrans, pas une règle de gestion, et la fiche était le seul des deux à mentir. La suppression, elle, reste réservée aux tests PRIVÉS : le lien de la zone dangereuse ne s'affiche que sur une copie du cabinet, l'officiel étant tenu par l'administrateur depuis la banque. Rien n'a changé de ce côté-là. |
| Le panneau « Partagé pour relecture » de la fiche | La colonne de droite porte les liens posés sur ce test. Conséquence de la règle ci-dessus, il paraît aussi sur un officiel. Trois comportements : il arrive REPLIÉ — c'est l'historique du test, pas l'objet de la visite —, son en-tête porte le nombre de partages même fermé (le compte suffit à le rendre découvrable, sans coûter une colonne), et il ne s'affiche pas du tout quand le test n'a aucun partage : un panneau vide n'apprend rien. Point contre-intuitif, à dire au support : il liste les partages DU CABINET sur ce test, pas ceux du recruteur connecté — un test appartient à la banque du cabinet, ses liens aussi. |
| Suppression | Toujours possible. Voir §22 pour l'effet en cascade. |
7Questionnaires (dossiers)
Le questionnaire est un formulaire — pas un test : pas de score, pas de chronomètre, pas de niveau, pas de catalogue officiel. Il sert à recueillir ce qui ne se note pas : motivation, disponibilité, auto-évaluation, informations administratives.
Les sept types de champ
Texte court · Texte long · Choix unique · Choix multiples · Échelle · Nombre · Date.
| Règle | Comportement |
|---|---|
| Champs à options | Un choix unique ou multiple exige au moins deux options. |
| Condition d'envoi | Comme un test : au moins un champ. |
| Gel à l'envoi | La structure est figée dans le dossier du candidat au moment de l'envoi. Modifier le questionnaire ensuite ne change aucun dossier déjà parti. |
| Champs obligatoires | Vérifiés à la remise contre la structure figée, pas contre la version courante. |
| Statuts | Un dossier n'est jamais « en cours » côté suivi : Envoyé, puis Dossier reçu. |
Pièces à joindre
Le recruteur déclare, au niveau du questionnaire — jamais dans une section, jamais numérotée avec les champs — les pièces attendues du candidat : un libellé, obligatoire ou non, et une ou plusieurs familles de formats parmi un référentiel fermé (Documents, Images, Tableurs, Archives).
| Règle | Comportement |
|---|---|
| Gel à l'envoi | Les pièces déclarées sont figées dans le dossier au moment de l'envoi, comme le reste du gabarit. Modifier le questionnaire ensuite — ajouter, retirer, rendre obligatoire — ne change aucun dossier déjà parti. |
| Un fichier par pièce | Le candidat dépose un fichier unique par pièce ; un nouveau dépôt écrase le précédent, il n'y a pas d'historique à conserver. |
| Validation serveur | Extension, type déclaré et taille sont vérifiés côté serveur à chaque dépôt : extension hors des familles figées ou type incohérent 422 FILE_TYPE_NOT_ALLOWED, au-delà du plafond 413 UPLOAD_TOO_LARGE. |
| Plafond plateforme | Variable d'environnement QUESTIONNAIRE_FILE_MAX_MB (défaut 10 Mo), elle-même bornée par la taille multipart globale du serveur. Ce n'est jamais un choix du recruteur ni une valeur figée dans un dossier : elle est relue à chaque dépôt. |
| Remise | Une pièce obligatoire encore manquante refuse la remise 422 FORM_REQUIRED_FIELD_MISSING — le même code que pour un champ texte obligatoire vide. |
| Dossier rendu | Plus aucun dépôt ni retrait possible une fois le dossier remis. |
| Suppression en cascade | Supprimer le candidat ou son dossier efface les fichiers en cascade — aucun octet ne survit à son dossier. |
| Lecture | Les octets ne sont jamais chargés avec les listes ni avec le gabarit du questionnaire : une pièce se télécharge à la demande, individuellement. |
8Clients & postes
Le client est la société pour laquelle le cabinet recrute — y compris un service ou une filiale de la maison, si on compte lui refacturer (le client est celui qui reçoit la facture). Le poste est la fiche de besoin réutilisable ; il déclare obligatoirement pour qui l'on recrute (son intention), et se rattache nommément à un client quand l'intention le dit.
| Règle | Comportement |
|---|---|
| Client — unicité | Le nom est unique dans le cabinet, à la casse et aux espaces près 409. |
| Client — suppression | Refusée tant qu'un poste y est rattaché 409. Détacher d'abord. |
| Poste — listes fermées | Domaine, séniorité, type de contrat et mode de travail sont des listes fermées ; une valeur inconnue est rejetée 422. |
| Poste — métier facultatif | Le poste porte un métier visé pris dans la même liste fermée que les tests, mais facultatif (une valeur hors liste reste refusée 422 UNKNOWN_JOB_ROLE). L'intitulé du poste demeure libre, le domaine reste obligatoire. L'asymétrie avec le test est délibérée : le test est l'objet indexé — un index doit être complet —, le poste est un consommateur de cet index, et un critère de recherche peut manquer. |
| Poste — métier ↔ domaine | Un poste ne porte qu'UN domaine : la règle est l'ÉGALITÉ, pas l'appartenance — le domaine du métier doit être exactement celui du poste, sinon 422 JOB_ROLE_DOMAIN_MISMATCH (« Transversal » exempté). L'écran borne d'ailleurs la liste des métiers au domaine du poste (+ « Transversal »), avec un Voir tous les métiers pour la rouvrir ; changer le domaine re-filtre et lâche un métier devenu incohérent. |
| Poste — intention obligatoire | Chaque poste déclare son intention, référentiel fermé à trois valeurs : CLIENT (un client nommé), INTERNAL (recrutement interne — une campagne visant un tel poste ne peut pas être facturée), TBD (client à définir plus tard — exigé au moment de marquer le recrutement). Valeur inconnue 422 POSITION_INVALID. |
| Poste — intention ↔ client | CLIENT exige un client nommé ; INTERNAL et TBD en interdisent un, sinon 422 CLIENT_INTENT_MISMATCH. La règle est applicative, jamais une contrainte de base : supprimer un client détache ses postes (l'intention CLIENT reste, le nom disparaît) sans jamais bloquer d'autres écritures. Les postes antérieurs à la règle ont été repris : CLIENT s'ils avaient un client, TBD sinon — une intention ne se devine pas. |
| Poste — clôture | Le poste se clôture quand le recrutement est terminé (ou abandonné) : ⋯ → Clôturer sur l'écran Postes, confirmation à l'appui. Il n'y a pas de statut séparé — la date de clôture est l'état : absente = en cours, présente = clôturé. Le geste est toujours permis, même quand des campagnes en cours visent le poste : c'est un marqueur de cycle de vie, il ne verrouille rien. |
| Poste — clôture réversible | ⋯ → Remettre en cours efface la date et rend le poste à la sélection, sans confirmation (un geste qui rend la main ne se fait pas confirmer). Clôturer un poste déjà clos, ou rouvrir un poste en cours, est refusé 409 (POSITION_ALREADY_CLOSED / POSITION_NOT_CLOSED) — un geste sans effet laisserait croire qu'on l'a posé deux fois. |
| Poste clôturé — effets | Le poste clôturé ne se propose plus là où l'on choisit un poste (création et édition de campagne) : le filtre est serveur. En revanche l'écran Postes continue de tout lister, en deux temps — « En cours · n » puis « Clôturés · n » —, la rangée portant une pastille Clôturé. Les campagnes existantes qui le visent sont intactes : elles se lisent, se suivent et se clôturent normalement, et la fiche du poste reste affichée dans leur détail. La fiche elle-même reste lisible et modifiable, et dupliquer un poste clôturé crée un poste en cours. |
| Poste — deux compteurs de campagnes | Le poste porte deux comptes dérivés, qui ne répondent pas à la même question et peuvent donc diverger. Campagnes en cours (activeCampaignCount) : celles dont le statut n'est pas CLOSED — donc les RUNNING et les brouillons, exactement le périmètre de la section « En cours » de l'écran Campagnes. C'est le seul compte AFFICHÉ : bandeau de la fiche de poste, pastille de l'écran Postes, carte « Postes rattachés » d'une fiche client. Total (campaignCount) : toutes les campagnes, clôturées comprises ; il ne s'affiche pas seul — il n'existe que pour armer et EXPLIQUER la garde de suppression. Les deux sortent d'une seule requête (un GROUP BY à deux colonnes sur la liste, un agrégat à deux colonnes sur la fiche) : jamais un aller-retour de plus. |
| Poste — suppression | Refusée si une campagne l'utilise 409 POSITION_IN_USE — et la garde compte le TOTAL, pas les campagnes en cours : une campagne clôturée retient le poste tout autant qu'une campagne vivante. Ce n'est pas un choix produit mais une contrainte d'intégrité : campaigns.position_id référence le poste sans ON DELETE, et relâcher la garde ne libérerait pas la suppression — elle sortirait en 500 sur violation de contrainte. Les messages le disent explicitement, sans quoi l'écran se contredirait : le bandeau de la fiche annonce « Aucune campagne en cours n'utilise ce poste, mais 2 campagnes clôturées le référencent encore : il ne peut pas être supprimé », et le refus lui-même « Une campagne utilise ce poste — même clôturée, elle le retient ». Inchangé par la clôture DU POSTE : clôturer n'est pas supprimer, et un poste clôturé mais utilisé reste indestructible. |
| Client — barème | Facultatif, trois volets indépendants : placement (PERCENT + un pourcentage de ]0;100], ou FLAT + un forfait), passation (UNIT + un prix unitaire, ou pas de barème) et campagne (FLAT + un forfait, PER_SITTING — à la copie rendue —, ou pas de barème). « Incluse » a disparu des deux volets : elle se comportait exactement comme « pas de barème » (aucun prix proposé, rien de bloqué) — deux réglages pour un même comportement, un seul reste ; les fiches qui la portaient ont été migrées vers « pas de barème ». Un mode sans sa valeur est refusé 422 CLIENT_BILLING_INVALID ; une valeur que le mode ne désigne pas est simplement écartée — le mode tranche, il n'y a rien à deviner. Le barème existe dès qu'un seul des trois volets est posé. Détail et usage : §13. |
| Client — volet campagne | Le troisième volet a son mode comme les deux autres : FLAT propose un forfait (> 0) quand on facture la campagne, PER_SITTING la propose aux copies rendues au prix du volet passation, mode absent = rien n'est convenu. La carte « Barème de facturation » de la fiche client affiche trois lignes — Placement · Passation de test · Campagne —, chacune retombant sur « Non défini ». Il ne se surcharge pas au poste : seul le placement se négocie ainsi. |
| Poste — surcharge du barème | La fiche de poste ne montre plus la finance : le bloc « Barème applicable » a quitté l'éditeur (le barème se lit et se règle sur la fiche client, et le montant s'ajuste au besoin dans la modale « Facturer »). Une surcharge déjà en base — un taux chez un client au pourcentage (]0;100]), un forfait chez un client au forfait (> 0), bornes toujours tenues par le serveur (422 POSITION_INVALID) — continue de faire foi : prévisionnel du poste, montant proposé au placement, ligne qui retient que la valeur venait du poste. Elle ne remplace jamais le MODE, qui vient toujours du client. |
| Surcharge dormante | Les deux colonnes de surcharge (taux et forfait) coexistent et ne se nettoient jamais quand le client change de mode : un nettoyage détruirait une négociation à chaque bascule de barème. La surcharge que le mode ne désigne pas dort, et reparle inchangée le jour où le client revient à son mode d'origine. Depuis que l'éditeur de poste ne montre plus la finance, enregistrer la fiche renvoie les surcharges telles quelles : un simple enregistrement n'en efface aucune. |
| Poste — surcharge dormante | Les deux surcharges coexistent sur la fiche. Si le client change de mode, celle qui ne correspond plus n'est pas effacée — on n'efface pas une négociation : elle dort et redevient active si le client revient à son mode d'origine. |
9Campagnes
Une campagne réunit un poste, des épreuves ordonnées (tests et/ou questionnaires) et des candidats. Le lancement génère toutes les évaluations et envoie un seul e-mail par candidat, contenant le lien de son parcours.
Qui et quoi, en toutes lettres. La liste comme la fiche d'une campagne préfixent explicitement les deux noms qui la situent : « Poste : Développeur backend » et « Client : Atelier Nova ». Nus et côte à côte, un intitulé et une raison sociale se lisaient comme deux étiquettes de même nature et l'on ne savait plus laquelle disait sur quoi et laquelle disait pour qui. Le client vient du poste (une campagne n'en porte pas elle-même) : il ne paraît donc que là où un poste est rattaché, et reste muet sur un poste interne ou dont le client n'est pas encore choisi.
Le préfixe est teinté et la valeur ne l'est pas : « Poste : » et « Client : » se lisent en corail, ce qu'ils annoncent garde la couleur du texte. Aucun mot n'est ajouté — on fait seulement entendre celui qui y était déjà.
La liste en deux temps : « En cours » et « Clôturées »
La page de campagnes se lit en deux sections nommées. « En cours » réunit les campagnes lancées et les brouillons — un brouillon est du travail en cours, pas de l'archive ; il y garde son badge « Brouillon ». « Clôturées » vient ensuite. Le classement n'a pas bougé (il est résolu serveur) : la frontière est simplement dite.
| Règle | Comportement |
|---|---|
| Le compte est celui de la PAGE | L'intitulé porte le nombre de lignes affichées (« En cours · 4 »), jamais le total serveur : il doit décrire ce qu'on a sous les yeux. La pagination reste inchangée (10 par page). |
| Une section vide ne paraît pas | Si la page courante n'a rien à mettre dans une section, l'intitulé disparaît — un titre suivi de rien se lit comme un manque. Filtré sur « Clôturée », seule la seconde section s'affiche. |
| Les deux affichages | Le découpage vaut en liste comme en grille : intitulé, puis les lignes ou les tuiles de la section. |
Le menu « ⋯ » d'une campagne, depuis la liste
Chaque ligne (et chaque tuile) porte un menu ⋯ — au bout de la ligne en liste, en tête de la tuile en grille. Il donne les gestes de la fiche sans ouvrir la fiche, et ce qu'il propose dépend du statut.
| Statut | Ce que le menu propose |
|---|---|
| Brouillon | Modifier (retour au builder) · Partager désactivé, avec la raison : « Disponible après le lancement ». Le geste existe mais n'est pas atteignable — un brouillon n'a pas de liste vivante, il n'y a encore personne à montrer. Absent, on le chercherait ailleurs. |
| En cours | Modifier (l'écran de suivi, qui est le lieu d'édition d'une campagne lancée) · Partager · Clôturer. |
| Clôturée | Partager · Remettre en cours. |
| Règle | Comportement |
|---|---|
| Partager = la feuille de la fiche | Le geste ouvre exactement la même feuille que « Partager au client » depuis la fiche, avec la même liste vivante (le vivier, relu à chaque ouverture du lien) et le même campaignId — donc la même garde : un seul lien vivant par adresse et par campagne, avec la sortie « Clôturer et remplacer » (voir le partage). La liste n'ayant qu'un résumé de la campagne, le détail est relu au clic avant d'ouvrir la feuille. |
| Clôturer passe par une question | La confirmation partagée s'ouvre, puis la campagne est clôturée et la page courante se relit — la campagne change de section sous vos yeux. La clôture n'est pas définitive : le texte de la confirmation le dit (« Vous pourrez la remettre en cours »). |
| Remettre en cours part directement | Aucune confirmation : un geste qui rend la main ne se fait pas confirmer. Même comportement que sur la fiche. |
| Le menu ne vole pas le clic de la carte | Un clic sur une ligne ouvre la campagne ; un clic dans le menu ne l'ouvre pas. Le menu s'affiche hors de la carte et arrête la propagation. |
Le sélecteur d'épreuves se préfiltre sur le poste
Quand la campagne vise un poste, « Ajouter une épreuve » s'ouvre déjà filtré sur le métier du poste. Si le poste n'en porte pas — il est facultatif —, le préfiltre retombe sur son domaine ; sans poste, rien n'est préfiltré.
| Règle | Comportement |
|---|---|
| Ordre de priorité | Métier du poste, sinon domaine du poste, sinon aucun préfiltre. Le métier prime : c'est l'indice le plus précis. |
| Débrayable d'un clic | Le préfiltre arrive sous la forme d'une puce ordinaire de la barre de recherche — même dessin, même « × » que celles qu'on pose soi-même. La retirer rouvre toute la bibliothèque : c'est une amorce, pas un verrou. |
| Il ne compte pas comme un critère | La bascule automatique vers l'onglet « Personnalisées » (quand le catalogue officiel ne rend rien) continue de jouer sous préfiltre : celui-ci n'est pas une recherche du recruteur. |
Lancer la campagne — l'assistant en trois étapes
Le bouton Lancer la campagne ouvre un assistant, lui aussi en trois temps.
| Étape | Ce qu'on y fait | Détail |
|---|---|---|
| ① | Déroulement du passage | Un seul réglage — rythme et mesures anti-triche — pour toutes les épreuves de type test du parcours. Les questionnaires l'ignorent. Voir §11. |
| ② | Récapitulatif | Le poste, les épreuves dans l'ordre, les candidats, l'échéance, et le déroulement retenu affiché en pastilles. Retour ramène à l'étape ①. |
| ③ | Informer en copie, puis Lancer | Les adresses tierces simplement prévenues du lancement — aucun lien de passage. Le bouton Lancer génère toutes les évaluations et envoie un e-mail de parcours par candidat. La même case facultative qu'à l'envoi — « Partager automatiquement le résultat aux personnes en copie dès qu'il est disponible », décochée par défaut — apparaît dès qu'une adresse est en copie et que le parcours contient au moins une épreuve de type test. Cochée, un encadré annonce le partage à venir et le recruteur choisit le droit du lien — Consultation (défaut) ou Correction — qui vaudra aussi pour les candidats qui termineront plus tard : la liste du partage suit la campagne. Chaque candidat qui termine un test fait naître (ou enrichit) pour ces adresses un lien d'accès au rapport (échéance J+14, prolongée à chaque nouveau résultat), visible dans Collaboration → Résultats partagés — un seul lien vivant par adresse et par campagne : le tiers y voit la liste vivante du parcours, qui s'enrichit au fil des complétions. Le droit choisi au lancement vaut pour toute la vie du lien — un envoi ultérieur ne le change pas. Si tous les candidats du lien sont effacés, le lien survit vide et se révoque à la main. |
Cycle de vie
| Statut | Ce qui est possible |
|---|---|
| Brouillon | Tout se modifie : poste, épreuves, candidats. Aucune évaluation n'existe encore. |
| En cours | Les épreuves sont figées. La campagne reste ouverte : un candidat ajouté reçoit aussitôt ses épreuves et son lien. |
| Clôturée | Plus d'ajout de candidat. Les évaluations déjà envoyées restent valides — la clôture n'invalide aucun lien. |
| Règle | Comportement |
|---|---|
| Sens unique | Brouillon → En cours → Clôturée. Aucun retour en arrière. |
| Condition de lancement | Au moins une épreuve et au moins un candidat. |
| Échéance | La date limite de la campagne devient l'échéance commune des évaluations générées. Elle doit être aujourd'hui ou plus tard : une date déjà passée est refusée au clic (enregistrement du brouillon comme lancement), marquée sous le champ « Date limite » — le serveur ne voit pas ce cas. S'il le refuse malgré tout (400 INVALID_EXPIRY_DATE), le message s'affiche dans la fenêtre de l'assistant, jamais sur l'écran qu'elle recouvre. |
| Épreuves figées | Retirer un test d'une campagne lancée n'est pas possible : le geste de suivi, c'est retirer un candidat. |
| Déroulement figé au lancement | Le réglage de l'étape ① est figé sur la campagne et recopié sur chaque évaluation de test générée. Un candidat ajouté à une campagne en cours en hérite — l'assistant ne le redemande pas, et le réglage n'est pas rejugé. La fiche de campagne l'affiche en pastilles (neutre tant que la campagne est un brouillon). |
| Réglage refusé | 400 INVALID_SITTING_SETTINGS — le passage en une seule fois est validé contre la durée de chacune des épreuves de type test du parcours. |
| Refus pendant l'assistant | Tout refus survenu pendant les étapes de lancement (INVALID_EXPIRY_DATE, CAMPAIGN_NOT_LAUNCHABLE, INVALID_SITTING_SETTINGS…) s'affiche dans la fenêtre de l'étape courante, en bandeau au-dessus des boutons, avec une phrase propre au code (générique pour un code inconnu). L'assistant reste ouvert ; changer d'étape efface le bandeau. |
| Retrait d'un candidat | Possible à tout statut. Voir §22. |
10Candidats & invitations
La fiche candidat centralise l'identité, le CV, les notes privées du recruteur et toutes ses évaluations, séparées en tests et questionnaires.
Liste, recherche et filtres
| Règle | Comportement |
|---|---|
| Pagination | La liste est paginée côté serveur, 10 candidats par page. Le compte affiché est le total filtré, stable d'une page à l'autre. |
| Recherche | Porte sur le nom complet, l'e-mail et le nom des épreuves passées (l'instantané porté par chaque évaluation), insensible à la casse et aux accents. Elle s'applique au serveur, jamais à la page affichée. |
| Filtres mono-choix | Quatre filtres — statut, test, domaine, source (campagne ou envoi direct) — à un seul choix chacun. Le statut Expiré est déduit de l'échéance : un lien mort n'apparaît plus sous Invité. Les options de test et de domaine proposées sont celles réellement présentes dans le cabinet. |
| Tri | Récents (par défaut) ou ordre alphabétique. Le tri par score a été retiré : le score est recalculé à la lecture, il ne peut pas ordonner la liste. |
| Créer un candidat — le bouton n'est JAMAIS grisé | Le formulaire d'ajout désactivait Enregistrer tant que l'e-mail n'était pas valide : on avait un bouton mort sous les yeux sans savoir pourquoi. C'était un écart à la règle générale des formulaires de l'application, pas un choix. Le bouton est actif ; le clic sur un formulaire incomplet marque le champ fautif, fait défiler jusqu'à lui et dit le motif — avec deux messages distincts, parce que ce sont deux fautes différentes : « L'e-mail est obligatoire : c'est la clé du candidat » quand il est vide, « Cette adresse e-mail n'est pas valide (exemple : prenom.nom@societe.fr) » quand il est mal formé. L'e-mail reste la seule exigence : prénom et nom peuvent attendre. Le doublon garde son propre encart, avec le lien vers la fiche existante. |
| Toute carte se déplie | Chaque candidat est une carte à chevron qui s'ouvre en place sur ses panneaux d'évaluations (Tests / Questionnaires). Un candidat sans aucune évaluation (« Fiche seule ») porte le même chevron et s'ouvre sur une ligne sobre — « Pas de résultat encore reçu. » Auparavant il n'en avait pas du tout : on cliquait dans le vide en cherchant le sien, et la carte semblait d'une autre espèce. Une absence annoncée se lit mieux qu'une carte qui ne réagit pas — et une simple phrase grise suffit là où un état vide illustré pèserait plus lourd que la carte. |
La fiche vivante — présenter, pas seulement suivre
La fiche n'est plus un simple dossier de suivi : c'est le document de présentation que vous partagez à vos clients. Sa colonne principale se lit dans l'ordre où un client la lirait — la synthèse d'abord, les données ensuite — et chaque carte annonce sa visibilité : Visible client (elle peut partir dans un partage) ou Interne (elle ne sort jamais du cabinet).
| Règle | Comportement |
|---|---|
| Statut de la fiche | Une pastille à côté du nom — Disponible, En process, Recruté, Inactif — qui se change d'un clic, sans mode édition. Une seule écriture automatique : enregistrer un recrutement passe la fiche à « Recruté » ; tout le reste est votre décision. |
| Synthèse du cabinet | Le paragraphe que le client lit en premier : qui est ce candidat, et pourquoi vous le présentez. Rédigée dans l'éditeur visuel (gras, listes…), rendue à l'identique sur la page du client. Vide, la carte vous le dit avec l'enjeu : le client ne verra que les données brutes. |
| Conditions & recherche | Les questions pratiques du client, structurées : contrat (référentiel), prétentions (fourchette en k€), télétravail, mobilité. Les prétentions sont marquées Interne par défaut : elles ne partent au client que si le partage les coche explicitement. |
| Compétences & tags | Des compétences à niveau (Notions / Confirmé / Expert) — libellé libre, doublon refusé à la saisie, jamais dédupliqué en silence. Dessous, les tags libres du cabinet (#cooptation…), affichés au héros de la fiche : eux sont internes, ils ne sortent jamais. |
| Activité — dérivée, jamais saisie | La carte raconte le process toute seule : création (et sa source), invitations, épreuves terminées (avec le score), partages (et l'identité masquée le cas échéant), avis des clients, recrutements et annulations. Tout est recomposé depuis l'existant — il n'y a rien à tenir à jour, et rien de tout cela ne sort du cabinet. |
| Partager depuis la fiche | Le bouton Partager au client, à côté de l'envoi de test, ouvre la même feuille de partage que la liste et les campagnes — avec ce seul candidat et ses épreuves rendues. Un geste, pas un parcours. |
| Effacer une valeur | Sur la fiche comme au serveur, l'effacement est explicite : un champ texte se vide, une borne salariale s'efface en la laissant blanche, le contrat en re-choisissant sa valeur courante. Une fourchette à l'envers est refusée (min ≤ max), à l'écran comme en base. |
Marquer un recrutement
La carte Recrutements du rail droit de la fiche enregistre le fait qu'un candidat a été embauché — chez un client, ou en interne. Un recrutement est une pièce : le nom du client et l'intitulé du poste y sont figés à la création (supprimer ou renommer la fiche ensuite ne change rien à la pièce). Un recrutement qui n'a pas tenu s'annule, horodaté et motivé : la suppression est réservée à l'erreur de saisie (voir le tableau).
Un recrutement ne porte plus aucun montant. La carte alimente le suivi et rien d'autre : ni honoraires saisis, ni honoraires affichés, et aucune ligne de facturation n'est créée par le geste. Ce qui se facture se décide depuis l'écran Facturation (§13), jamais en marge d'un suivi — la modale le dit elle-même en sous-titre. Le salaire brut annuel reste sur la pièce, mais c'est un attribut du recrutement, pas un honoraire : il sert de base au montant que le barème proposera le jour où l'on facturera ce placement.
| Règle | Comportement |
|---|---|
| Client ou interne | Un recrutement non interne exige un client 422 CLIENT_REQUIRED ; un recrutement interne n'en nomme aucun 422 INTERNAL_WITH_CLIENT. L'interne est enregistré pour le suivi ; sans client, il ne sert de base à aucune proposition de barème. |
| Salaire obligatoire | Le brut annuel est un entier strictement positif, en euros 422 INVALID_SALARY — c'est la base sur laquelle le barème proposera un montant au moment de facturer le placement, jamais un honoraire en soi. |
| Date d'embauche | Seule la forme se juge (AAAA-MM-JJ) 422 INVALID_HIRED_ON : une embauche passée comme une prise de poste future sont légales. |
| Poste facultatif, cohérent | Fourni, le poste doit être rattaché au client facturé (ou à aucun) 422 POSITION_CLIENT_MISMATCH. |
| Pré-remplissage | La fenêtre se pré-remplit depuis la dernière campagne du candidat quand son poste vise un client encore existant — modifiable, et la chaîne s'arrête net sinon (jamais la campagne d'avant). |
| Second recrutement actif | Jamais bloqué — c'est une situation (double embauche, saisie à corriger), pas une erreur. L'interface prévient avant d'enregistrer, le serveur accepte toujours. |
| Annulation | Une seule fois 422 ALREADY_CANCELLED ; la ligne reste visible, barrée, datée, motivée. Re-recruter le même candidat plus tard est une nouvelle ligne, pas une réouverture. |
| Suppression ≠ annulation | DELETE …/placements/{id} → 204. Réservé à l'erreur de saisie : le recrutement n'a jamais eu lieu, il est réellement supprimé. Possible qu'il soit annulé ou non ; 404 uniforme sur un id inconnu ou étranger. |
| Aucune cascade vers la facturation | Annuler ou supprimer un recrutement ne touche aucune ligne de facturation : les deux objets vivent leur vie. Une embauche qui n'a pas tenu se solde en annulant aussi la ligne, depuis l'écran Facturation (§13) — c'est une décision commerciale, pas une conséquence mécanique. |
| Badge « Recruté » | Sur la liste des candidats dès qu'au moins un recrutement non annulé existe — dérivé serveur, jamais stocké. |
| Deux chemins, un seul recrutement | La modale de la fiche candidat n'est pas le seul point d'entrée : la feuille Facturer, sur la nature « Un placement » en création, peut marquer le recrutement dans la foulée (mêmes règles, mêmes messages, même carte) — et le salaire brut annuel s'y saisit dans le même champ que celui du barème. Voir §13. |
Envoyer une épreuve — l'assistant en trois étapes
L'envoi se déclenche depuis la bibliothèque ou depuis la fiche candidat. Dans les deux cas, la popup est un assistant en trois étapes : on avance avec Suivant, on revient avec Retour, et rien n'est perdu aux allers-retours. L'envoi ne part qu'au bouton Envoyer de la dernière étape.
| Étape | Ce qu'on y fait | Détail |
|---|---|---|
| ① | L'épreuve et l'échéance | Depuis la bibliothèque : le candidat (existant, ou un simple e-mail — la fiche est créée à la volée) ; depuis la fiche : l'épreuve (test ou questionnaire). Puis la date limite du lien. |
| ② | Déroulement du passage | Le Rythme (passage en une seule fois) et les Mesures anti-triche (préréglages, puis les interrupteurs au détail). Voir §11. Étape sautée pour un questionnaire : un dossier ne se surveille pas. |
| ③ | Informer en copie | Facultatif. Ces personnes reçoivent un e-mail les informant que le candidat a reçu le test — elles ne passent pas l'épreuve et ne reçoivent aucun lien de passage. Elles sont prévenues à nouveau quand la copie est rendue. Sous le champ, une case facultative — « Partager automatiquement le résultat aux personnes en copie dès qu'il est disponible » — décochée par défaut : elle n'apparaît que pour un test (un questionnaire ne produit pas de rapport) et seulement tant qu'au moins une adresse est en copie ; vider la copie la décoche. Cochée, un encadré annonce qu'un partage sera créé dans Collaboration → Résultats partagés, et le recruteur choisit le droit du lien : Consultation (défaut — le tiers lit, sans rien modifier) ou Correction (le tiers peut noter les questions ouvertes). Chaque adresse reçoit à la fin du passage un lien d'accès au rapport (échéance J+14), créé par le serveur au moment où le candidat termine. Aucun doublon : si un lien vivant existe déjà pour cette adresse sur ce rapport, rien n'est recréé. |
Le sélecteur de candidats des popups (envoi direct, ajout à une campagne) cherche côté serveur, par pages de 20 : au-delà, on tourne les pages (« 1–20 sur 42 », « Page 1 sur 3 ») avec la même pagination que les listes de l'application — la liste complète du cabinet n'est jamais téléchargée. Elle n'apparaît qu'à partir de deux pages, et toute nouvelle recherche ramène à la première. Les trois popups de sélection la partagent : choix d'une épreuve, envoi à un candidat, ajout de candidats à une campagne. Ses lignes sont dessinées comme celles du sélecteur d'épreuves — filet coloré à gauche, nom puis e-mail, coche ronde à droite : choisir un candidat et choisir un test sont le même geste, les trois popups de sélection (envoi à un candidat, ajout de candidats à une campagne, choix d'une épreuve) se lisent pareil. La ligne « Créer le candidat … » garde son icône, pour rester une action et non un résultat.
Le filet dit la nature de la ligne : corail pour un candidat, violet pour un test, vert pour un questionnaire. Chaque liste est coiffée d'une étiquette qui dit ce qu'on regarde — « Mes candidats », « Tests officiels », « Mes tests », « Mes questionnaires » : une liste nue laisserait deviner d'où viennent ses lignes. Dans le parcours de partage, où les onglets de portée sont masqués, cette étiquette porte seule la règle — on y lit « Mes tests ».
Actions selon le statut
| Statut | Actions offertes |
|---|---|
| Invité | Copier le lien · Relancer · Prolonger · Révoquer |
| En cours | Copier le lien · Relancer · Prolonger · Révoquer (le candidat est éjecté) |
| Terminé | Voir le rapport, ou Corriger s'il reste des réponses libres |
| Expiré | Prolonger — la seule issue d'un lien mort |
| Règle | Comportement |
|---|---|
| Échéance | Entre demain et un an après l'envoi. Par défaut : 30 jours. |
| Expiration | Déduite de la date, jamais stockée : le lien cesse d'ouvrir, mais une session déjà commencée peut se terminer — sous la seule réserve d'une invitation envoyée en passage en une seule fois (§11), qui, elle, borne l'épreuve. |
| Déroulement figé | Le rythme et les mesures anti-triche choisis à l'étape ② sont figés sur l'évaluation. Aucune modification ultérieure — du test comme des réglages — n'atteint une invitation déjà partie (§11). |
| Relance | Exige un lien encore vivant 400 sinon. Prolonger envoie aussi la relance. |
| Unicité e-mail | Un e-mail = une fiche par cabinet 409. |
| CV | PDF ou Word (.pdf, .doc, .docx), 10 Mo max. Le contenu réel est vérifié — un fichier renommé est refusé 422, et le téléchargement (fiche comme partage) sert le vrai type du fichier. |
| Décision | À retenir / À revoir / Non adapté, posée sur l'évaluation, visible sur la liste et la fiche. |
| Suppression d'une fiche | Jamais bloquée — elle emporte évaluations, dossiers, copies, journal de surveillance et CV. |
11Déroulement du passage
Le déroulement — le rythme du passage et les mesures anti-triche — n'est pas une propriété du test : c'est un choix fait à l'envoi, puis figé sur l'évaluation comme le nom du test ou son niveau. Deux envois du même test peuvent donc se dérouler différemment, et un test officiel se règle sans être copié — c'était le but.
Où le réglage se pose
| Envoi | Où |
|---|---|
| Envoi direct | Étape ② de l'assistant d'envoi (§10), depuis la bibliothèque comme depuis la fiche candidat. Le réglage vaut pour cette invitation. |
| Lancement de campagne | Étape ① de l'assistant « Lancer la campagne » (§9) : un seul réglage pour toutes les épreuves de type test du parcours. |
| Questionnaire | Aucune étape : l'assistant la saute. Un dossier déclaratif ne se chronomètre ni ne se surveille. |
Rythme : reprise libre ou passage en une seule fois
La durée d'un test reste déduite de ses questions ; ce qui se choisit à l'envoi, c'est la manière dont le candidat la consomme. Le groupe Rythme rappelle la durée de l'épreuve retenue et porte une seule option.
| Réglage | Ce que vit le candidat |
|---|---|
| Reprise libre défaut | Seul le chronomètre de chaque question le limite. Il peut s'interrompre et revenir autant de fois qu'il veut — une session commencée reste ouverte aussi longtemps qu'il le faut. |
| Passage en une seule fois | Le temps court à partir du démarrage, sans pause possible : le candidat dispose de la durée du test, d'un seul tenant. Au-delà, le serveur refuse toute nouvelle réponse et clôt la session avec les réponses déjà validées. |
Mesures anti-triche : trois préréglages, puis le détail
| Préréglage | Contenu |
|---|---|
| Aucune | Passage libre, aucune mesure. |
| Standard | Plein écran + détection de sortie d'onglet. |
| Stricte | Standard + caméra, micro, captures, mélanges — et la détection d'un passage repris ailleurs. |
« Personnaliser les mesures » déplie la liste complète pour composer un réglage sur mesure. Les mesures sont annoncées au candidat avant le départ et son acceptation est horodatée.
Les mesures disponibles
| Mesure | Effet pendant le passage |
|---|---|
| Plein écran forcé | Le passage s'ouvre en plein écran. |
| Détection de sortie d'onglet | Chaque sortie est journalisée comme incident. |
| Copier-coller bloqué | Le collage est refusé et journalisé. |
| Détection second écran | La présence d'un écran additionnel est signalée. |
| Détecter un passage repris ailleurs Stricte | Signale que le passage a continué depuis un autre appareil — le lien a été ouvert ailleurs. Le passage n'est jamais bloqué ; le rapport en porte la trace. Aucune adresse ni aucun matériel ne sont conservés en clair. Voir §15. |
| Caméra / micro obligatoires | L'autorisation est demandée au démarrage ; sans elle, le test ne commence pas. |
| Captures webcam périodiques | Photos à intervalle aléatoire, jointes au rapport. |
| Captures d'écran périodiques | Idem, sur l'écran du candidat. |
| Questions / options mélangées | L'ordre change d'un candidat à l'autre, de façon stable pour un même passage. |
Règles de gestion
| Règle | Comportement |
|---|---|
| Figé à l'envoi | Le réglage est recopié sur l'évaluation au moment où l'invitation part. Le serveur ne le relit jamais sur le test : modifier le test, le dupliquer ou le supprimer ne change aucune invitation déjà partie. |
| Jamais rétroactif | Corollaire : on ne « libère » plus un passage en cours en décochant quelque chose, et on ne l'enferme plus après coup. Pour changer le déroulement, on renvoie une invitation. |
| Deux envois, deux déroulements | Le même test peut partir surveillé et minuté chez un candidat, libre chez un autre. Aucun besoin de dupliquer le test — un officiel se règle donc aussi. |
| Héritage en campagne | Le réglage choisi au lancement est figé sur la campagne. Un candidat ajouté à une campagne en cours hérite de ce réglage sans qu'on le redemande : le dernier inscrit passe la même épreuve que le premier. |
| Réglage refusé | 400 INVALID_SITTING_SETTINGS : passage en une seule fois demandé sur une épreuve qui ne dure rien, ou tolérance technique hors de ses bornes API. En campagne, la validation est faite contre la durée de chacune des épreuves de type test. |
| Tolérance technique | Une tolérance de quelques minutes est incluse au-delà de la durée affichée — elle n'est pas réglable et n'apparaît nulle part dans l'interface. Le candidat n'a jamais qu'un seul chiffre en tête : la durée du test. |
| Ce que fait le dépassement | Le serveur termine la session lui-même : la copie est rendue, la durée réelle figée, l'évaluation passe à Terminé et les adresses en copie sont prévenues comme pour une remise normale. L'écriture qui a déclenché la clôture, elle, est refusée 409. |
| Ce que voit le candidat | L'accueil l'annonce avant tout engagement : « Ce test se passe en une seule fois : une fois commencé, vous disposez de N minutes, sans pause possible. » Rien ne s'affiche en reprise libre. Au dépassement, l'écran Temps écoulé confirme que les réponses déjà validées ont été transmises. Voir §14. |
| Aucune tâche planifiée | Rien ne tourne en fond : le dépassement se constate à l'écriture suivante du candidat. Une session abandonnée en cours de route reste « en cours » jusqu'à ce qu'il revienne — ou jusqu'à ce que le recruteur révoque l'invitation. |
| Durée vive, réglage figé | La limite effective se recompose à la lecture : réglage figé de l'évaluation + durée vive du test. Ajouter une question à un test allonge donc la limite des passages en cours — la durée, elle, reste dérivée. |
L'échéance du lien (§10) décide jusqu'à quand le candidat peut ouvrir son invitation ; elle n'interrompt jamais une session déjà commencée. Le passage en une seule fois décide combien de temps dure l'épreuve une fois démarrée. L'une gouverne l'accès, l'autre le chronomètre.
Un test surveillé ne démarre pas sans la case d'acceptation. L'horodatage du consentement est conservé avec l'évaluation : c'est la trace de l'information préalable du candidat. Le refus d'une capture non demandée se juge lui aussi sur le réglage de l'évaluation, jamais sur celui du catalogue.
12Demandes & partages
Un client ou un expert externe travaille sur vos tests sans compte : un lien
/s/{token} daté lui ouvre l'écran correspondant à ce qu'on lui demande.
Trois natures, une seule table — et un écran qui les suit toutes, ouvert par le menu
Collaboration (dernier groupe de la barre latérale, une seule sous-entrée
Demandes / Partages — voir §4).
Les deux surfaces publiques de ce chapitre — /s/ (partage d'un test) et
/r/ (partage de candidats et de résultats) — portent le logo et
le nom du cabinet en en-tête et dans le titre de
l'onglet dès que le plan inclut la marque blanche
(§19) ; le pied du rapport imprimable devient
« Rapport établi par {nom du cabinet} … ». L'e-mail qui porte le lien part sous le
nom d'expéditeur du cabinet. Sans la fonction, ou sans marque configurée,
tout cela reste à l'identité Evalixo, sans erreur (§18).
| Nature | Ce que le tiers fait | Ce qui bouge chez vous |
|---|---|---|
| Relecture | Il consulte le test comme un candidat le verrait et rend un avis. | Rien : le test ne bouge jamais. |
| Édition | Il travaille sur une COPIE du test et vous la rend. | À l'acceptation, la copie remplace le contenu de l'original — qui garde son identité, donc ses envois passés et ses rapports. |
| Création | Il n'y a pas de test : il en compose un à partir de votre brief (intitulé, domaine, métier visé — facultatif, et soumis à la même règle d'ÉGALITÉ qu'un poste : le domaine du métier doit être celui du brief, sinon 422 JOB_ROLE_DOMAIN_MISMATCH —, niveau, consignes). | À l'acceptation, le test naît dans votre bibliothèque, avec les questions qu'il a écrites, et hérite du métier du brief (« Transversal » si vous n'en aviez pas fixé — un test en porte toujours un). |
Deux portes d'entrée. Depuis un test : le bouton Partager ouvre la popup sur ce test-là, en une seule feuille — au pied de sa carte comme sur sa fiche, catalogue officiel compris, les deux écrans offrant enfin le même geste. Depuis l'écran Demandes / Partages : « Ajouter une collaboration » propose d'abord la nature — quatre cartes, dans cet ordre : « Faire relire ou modifier un test » (cochée par défaut), « Partager des candidats (avec ou sans résultats) », « Partager une campagne », puis « Commander un test ». Relecture et édition n'ouvrent qu'une seule porte : après la nature, leur parcours était le même au mot près, et le droit — relecture ou modification — se règle de toute façon à l'étape suivante, sur la pilule qui le porte déjà. Deux cartes obligeaient à trancher le droit avant même de savoir sur quel test. Cet écran de nature EST l'étape 1 du parcours (« 1/… » dans l'en-tête), et le total suit la nature cochée, sous les yeux : trois temps pour un test confié ou un résultat, deux pour une création. Pour un test confié : 2. choisir le test dans le sélecteur d'épreuves de l'application — le même qu'à l'envoi à un candidat (recherche, filtres domaine et niveau, tri), ici verrouillé sur les tests et sur la banque personnelle, la pilule des droits au-dessus ; 3. la popup « Partager le test », exactement celle de la fiche. Retour ramène au temps précédent sans rien perdre — le droit et le test restent cochés. Une création, elle, ne vise aucun test et va droit à son brief (2/2). La nature « Partager des candidats (avec ou sans résultats) » ne vise pas un test mais des candidats : elle enchaîne « Choisir les candidats à partager » — en multi-sélection, sur la liste ENTIÈRE des candidats du cabinet — puis la feuille « Partager des candidats » — voir « Partager des CANDIDATS à un tiers » plus bas. Son libellé dit désormais que l'épreuve est facultative : la nature acceptait déjà un profil sans test, mais « Partager des candidats » laissait croire qu'il fallait un résultat sous la main — ambiguïté devenue coûteuse depuis que la carte « campagne » vit juste à côté.
La quatrième nature — « Partager une campagne » — mène à la même feuille et à la même collection (l'onglet « Candidats et résultats partagés ») : ce qui la distingue n'est pas un réglage du partage, c'est la nature de sa liste. Elle est vivante — le vivier du parcours est relu à chaque ouverture du lien —, et cela se décide avant de choisir quoi que ce soit : d'où une carte à part plutôt qu'une case dans la précédente. Le parcours fait trois temps : 2. « Choisir la campagne à partager », un sélecteur paginé (vingt par page, recherche débouncée sur le nom du parcours, l'intitulé du poste et le client, ligne « n candidats · n terminés ») qui ne propose que les campagnes LANCÉES ou closes — un brouillon n'a encore personne à montrer, et le serveur le refuserait ; une campagne au vivier vide se voit mais ne se coche pas ; 3. la feuille de partage préremplie campagne — aucune sélection de candidats, récap en lecture seule, encadré « La liste suit la campagne », et tous les réglages habituels (fiche, identité masquée, CV, avis, échéance, Consultation / Correction). C'est exactement la feuille qu'ouvre Partager au client depuis la fiche campagne : deux portes, un seul écran.
Les droits (relecture ou édition) ne se demandent plus à l'écran de nature : ils se posent à l'étape 2/3, sur Relecture par défaut, et se revoient à l'étape 3/3 — la même pilule segmentée aux deux endroits. Le dernier choix fait foi où qu'il ait été fait : revenir de la feuille de partage vers le sélecteur remontre le droit effectivement retenu, et remonter jusqu'aux trois natures y trouve la carte du test confié cochée — le droit, lui, attend intact qu'on redescende. La ligne créée, elle, porte bien le droit effectif : elle atterrit dans Tests partagés en relecture ou en édition.
Le sélecteur ne borne pas le partage aux tests envoyables : un test encore incomplet ne s'envoie pas à un candidat, mais c'est précisément ce qu'on peut confier à un tiers pour qu'il le complète.
Un test officiel se partage — depuis le pied de sa carte au banc de tests, et depuis sa fiche — mais en RELECTURE seulement. Ce qui reste borné aux tests personnalisés, c'est le parcours « Ajouter une collaboration » : son sélecteur d'épreuves est verrouillé sur la banque du cabinet (fixedScope="mine"), parce qu'on y vient chercher quelque chose à faire retoucher. Quand cette banque est vide, la popup l'explique au lieu de proposer une liste vide. Ce cadrage-là est un choix d'écran ; la restriction sur l'édition, elle, est une règle de gestion, tenue par le serveur : il accepte la relecture d'un officiel depuis n'importe quelle porte, et refuse l'édition dès la création du lien (422 SHARE_INVALID), comme il refuse la demande de retouche qui s'ensuivrait (voir « Un test OFFICIEL se confie en RELECTURE seulement » plus bas).
Les états, et qui doit agir
Le statut enregistre le dernier mot du tiers ; ce qui pilote l'écran, c'est qui a la balle.
| État | Qui doit agir | Où |
|---|---|---|
| En attente d'avis (relecture) | Le tiers : il doit rendre un avis. | Chez un tiers |
| En attente de la remise (édition, création) | Le tiers : il doit vous rendre une copie. Le mot suit la nature du lien — un tiers en édition n'a pas d'avis à donner. | Chez un tiers |
| Proposition reçue | Vous : accepter ou renvoyer — les deux gestes sont SUR la ligne du rendu. | Chez un tiers |
| Modifs demandées (relecture) | Vous : le tiers demande une correction (son message se lit dans le fil, sous la ligne). Une fois corrigé, « Redemander un avis » renvoie la balle. | Chez un tiers |
| Modifs demandées (édition, création) | Le tiers : vous lui avez renvoyé sa copie. | Chez un tiers |
| Validé / Appliqué / Accepté | Personne — mais le lien vit encore. | Chez un tiers, jusqu'à la clôture |
L'écran Demandes / Partages
Il n'y a PAS de file « à traiter » séparée : une décision se prend là où elle se pose, sur la ligne du rendu. L'écran tient en deux temps.
- Chez un tiers — trois onglets, parce qu'ils ne se lisent pas de la même
façon ; le compte vit sur l'onglet, et l'adresse dit lequel on regarde
(
/collaboration/demandes,/collaboration/partages,/collaboration/resultats) :- Demandes — l'ancien onglet « Commandes ». Une carte par demande, titre préfixé « Commande : », le cadre de la demande (domaine · métier · niveau) sous le titre — la consigne, elle, ouvre le fil que déplie la pastille d'état —, et le tiers occupe un BANDEAU corail pleine largeur — le corail est la couleur du TIERS, quelle que soit la nature du lien : trois lignes (« Commandé à », son nom, son adresse) à gauche, l'état et les gestes à droite. Sous le fil « └ Test livré », une seule ligne : le nom de ce qui a été livré — ses chiffres au survol — puis « Ouvrir le test » une fois accepté, ou « Demander une modif » et « Accepter » tant que le rendu attend votre décision. Rien encore livré : un cadre pointillé dit ce qu'on attend et depuis quand.
- Tests partagés — groupés PAR TEST : la carte du test une seule fois, COUCHÉE sur une ligne (identité à gauche, la signature du test au centre — questions, durée, niveau, type —, « Ouvrir le test » à droite), puis un bandeau par destinataire — le MÊME composant que sur une commande, avec la nature du partage (Relecture, Édition) collée au nom. Sur un rendu, les deux gestes de décision y figurent aussi ; après un verdict, « Redemander un avis ».
- Résultats partagés — les rapports de candidats confiés à un
tiers, groupés PAR RAPPORT comme les tests le sont par test : une carte
par rapport, ses destinataires en dessous. En tête de carte, la signature du rapport —
l'anneau de score miniature (mêmes seuils de couleur que le rapport,
pourcentage au centre), le nom du candidat derrière un mini-rail
corail (la couleur d'une personne) et celui de l'épreuve
derrière un mini-rail à la couleur de la bibliothèque (violette par
défaut, réglable — voir Apparence), puis la ligne de
détail « 36/53 pts · ce qu'il reste à corriger » (ambre tant qu'il en reste, neutre une
fois tout corrigé) et « Ouvrir le rapport ». Puis
« └ Partagé à N tiers » et une ligne par lien : le MÊME bandeau destinataire que
partout, la puce du droit (Consultation, Correction), la trace d'ouverture au survol des
initiales, l'état du lien et ses gestes. Le compte de l'onglet est celui des
rapports, pas des e-mails partis. Ce qu'il reste à corriger appartient
au RAPPORT, pas au lien : il se lit une fois, en tête de carte, et non répété sur
chaque destinataire.
Les partages d'une même campagne se regroupent dans UNE carte : le nom de la campagne en titre, une ligne de provenance « Campagne — liste vivante » qui mène à la fiche de campagne, et un bandeau par destinataire. La ligne « Partagé au tiers : 3 candidats · 5 épreuves » se déplie en deux listes nommées — « Candidats : » et « Épreuves : » — qui disent qui part et quel test : la seconde ne paraît pas quand le partage ne porte aucune épreuve (une liste de profils est un partage légitime). L'origine ne se dit plus sur les bandeaux : dès qu'au moins un lien de la carte est né d'une copie d'envoi, une chipsette « Créé(s) automatiquement (copie d'envoi) » se lit en tête de carte, au compte des liens concernés — un groupe mixte garde donc sa trace d'origine. Chaque bandeau destinataire porte en revanche ses conditions à lui, en petites puces neutres et seulement celles qui sont vraies : Fiche jointe, Identité masquée, CV, Surveillance, Avis demandé — deux tiers du même envoi peuvent recevoir deux choses différentes, et rien ne le disait.
- Terminé — replié par défaut, sous les onglets : les liens morts, clôturés ou expirés, des trois onglets à la fois (c'est une étagère de l'écran, pas d'un onglet), avec le dernier avis du tiers et la date de fin. La clôture laisse elle aussi son jalon dans le fil du partage.
Tout se pagine par dix — chaque onglet ET l'étagère des clôturés (une seule liste à l'œil, les deux collections comptées ensemble). La pagination n'apparaît qu'au-delà de dix : en dessous, rien à naviguer.
Les deux façons de finir
| Geste | Effet |
|---|---|
| Clôturer | À tout moment, quelle que soit la nature. Le lien meurt (échéance anticipée) et la ligne descend dans « Terminé » en gardant le dernier avis. Elle ne se prolonge plus : pour reprendre, on repartage. Si le tiers avait un chantier ouvert, sa copie et les questions qu'il avait écrites sont abandonnées — la popup l'annonce, chiffre à l'appui. |
| Révoquer (supprimer) | La ligne disparaît et le lien meurt : il ne reste aucune trace de la collaboration. Pour la garder dans l'historique, il faut clôturer. |
| Le score de la carte | Le score d'un rapport reste dérivé — recalculé à la lecture, réponse par réponse, à partir du barème de chaque question, jamais stocké. La liste des partages le sert désormais (scorePercent / scoreEarned / scoreMax sur GET /api/result-shares) : la carte porte l'anneau miniature — pourcentage au centre, seuils de couleur du rapport, provisoire tant qu'il reste des questions à corriger — et les points se lisent sur la ligne de détail (« 36/53 pts · À corriger : n »). Une épreuve purement déclarative n'a pas de score : la carte garde alors le repère neutre dont l'infobulle renvoie au rapport. |
| Le doublon n’est plus refusé (V20) | Une garde refusait autrefois deux liens vivants du même rapport vers la même personne (409 SHARE_ALREADY_ACTIVE), sur les trois gestes qui pouvaient la créer — créer, prolonger, rouvrir. Elle a été retirée avec la règle qu’elle protégeait : un partage porte désormais une SÉLECTION de candidats, et deux sélections qui se recoupent partiellement sont la situation normale. Le code existe toujours pour le partage d’un test, où la règle garde son sens — et il sert de nouveau au partage d’une CAMPAGNE, sur un critère exact cette fois (cabinet, adresse, campagne, origine manuelle) : voir « Le doublon d’une CAMPAGNE, lui, est refusé ». |
| Rouvrir un rapport partagé | Comme un test partagé : une ligne clôturée se remet en route sous une nouvelle échéance, et « Rouvrir » prend la place de « Prolonger » dans son menu. Aucun avertissement ici — il n'y a pas de chantier à perdre, et les corrections déjà posées par le tiers restent acquises au rapport quoi qu'il advienne du lien. La réouverture est soumise à la même garde anti-doublon. |
| Rouvrir (une clôture n'est plus un aller simple) | Une ligne clôturée se remet en route : le lien redevient valable jusqu'à une nouvelle échéance (obligatoire, forcément future), le tiers est prévenu par e-mail, et la ligne remonte de « Terminé » vers « Chez un tiers ». Le geste remplace « Prolonger » sur une ligne close : un lien rangé ne se prolonge pas, il repart — les deux ne coexistent jamais dans le menu. Il n'est PAS offert sur une ligne simplement expirée (elle, se prolonge), ni sur une commande déjà acceptée : sa copie est dans la bibliothèque, il n'y a plus rien à attendre. |
| Le chantier abandonné ne revient pas | La clôture d'une édition ou d'une création jette la copie du tiers et les questions qu'il avait écrites. Rouvrir ne les ressuscite pas : un brouillon NEUF est rebâti — la copie actuelle du test pour une édition, une page blanche pour une création — et le partage repart « En attente de la remise ». La popup de réouverture le dit avant de confirmer, dans un encadré ambre. Une relecture n'avait pas de chantier à perdre : elle garde son dernier verdict, et la popup n'affiche aucun avertissement. |
| Règle | Comportement |
|---|---|
| Périmètre | Relecture et édition portent sur un test — personnalisé ou officiel. Seul le parcours « Ajouter une collaboration » se borne à la banque du cabinet (voir l'encadré plus haut) ; les deux autres portes — pied de carte du banc de tests, fiche du test — offrent aussi le catalogue. La nature du test décide de ce qu'on peut confier : un test personnalisé se confie en relecture COMME en édition, un test officiel en relecture SEULEMENT — l'édition est refusée dès la création du lien (422 SHARE_INVALID). Sur un officiel, le tiers valide ou commente ; il ne demande pas de retouches et ne propose pas de réécriture. Création : aucun test visé, un brief. |
| Banque personnelle vide | L'étape « Choisir un test à partager » ne tend pas une liste vide : elle affiche la règle dans un encadré d'information (« Seuls vos tests personnalisés peuvent être partagés… ») — une règle du produit, pas une micro-aide sous le champ. Une recherche qui ne trouve rien reste, elle, un simple « aucun résultat ». Ni l'un ni l'autre ne s'affiche tant que le serveur n'a pas répondu : on ne commente pas un vide qu'on ne connaît pas encore. |
| Retrouver ce qui est confié | Le sélecteur de tests porte un filtre Collaboration → « En collaboration », offert sur vos tests seulement — c'est une facette de la banque du cabinet, pas du catalogue ; un officiel confié se retrouve, lui, par l'écran Demandes / Partages — : il ne garde que les tests ayant au moins un partage encore vivant. Il se combine à la recherche, aux filtres et au tri. Chaque ligne concernée porte en plus une puce corail avec la ou les natures en cours — « Relecture », « Édition », « Création », ou plusieurs séparées d'un point médian. |
| « Encore vivant », au sens exact | Ni clôturé par vous, ni passé son échéance — mot pour mot ce que l'écran Collaboration range sous « Chez un tiers », le reste étant descendu dans « Terminé ». Révoquer supprimant le partage, il n'y a rien à exclure de ce côté. Une commande n'y entre que livrée et acceptée : avant cela elle ne vise aucun test. |
| Le choix des droits | Une pilule segmentée — Relecture / Édition — où chaque segment porte la pastille de sa nature (vert relecture, violet édition), visible des deux côtés : le code couleur est celui des puces de l'écran Collaboration. Le segment retenu prend le fond teinté de sa nature, et une ligne sous la pilule dit ce que le droit engage. Le même sélecteur sert partout — depuis la fiche d'un test comme aux deux étapes du parcours Collaboration. |
| Ce que dit la popup de partage | La phrase d'en-tête suit les droits choisis et change à la bascule : en relecture, « le tiers consulte le test et rend son avis — il ne le passe pas » ; en édition, « il travaille sur une COPIE et vous la rend — l'original reste intact tant que vous n'acceptez pas ». Le corrigé ne s'offre qu'en relecture : passer en édition retire la bascule. |
| Banque du tiers | En édition et en création, il pioche dans le catalogue officiel et la banque du cabinet, bornés au domaine demandé, plus les questions qu'il écrit lui-même. Celles-ci restent hors banque jusqu'à l'acceptation. Cette règle est énoncée UNE fois, dans le descriptif de la nature « Commander un test » de la popup « Ajouter une collaboration » — au moment où l'on décide. L'encadré qui la répétait dans le formulaire de commande a disparu : il arrivait après le choix, et les deux textes avaient fini par se contredire (l'un fermait la banque du cabinet, l'autre l'ouvrait au domaine demandé). |
| Le tiers ne choisit ni le MÉTIER ni les DOMAINES | Sur un chantier d'édition, le domaine était déjà imposé par la demande et affiché épinglé — mais le sélecteur de métier restait ouvert, et l'écran remplace les domaines quand on change de métier (règle de cohérence métier ↔ domaines, §6) : l'interdiction se contournait par la porte d'à côté. Le métier s'affiche donc désormais en lecture seule chez le tiers — même puce, même cadenas que les domaines, infobulle « Métier fixé par la demande — il ne se change pas ici ». La vraie raison n'est pas la cohérence mais le contrat de la remise : ni le métier ni les domaines n'ont JAMAIS été transmis au serveur depuis un chantier de tiers. Ce qui remonte, c'est la COMPOSITION — nom du test, questions et leur ordre. Le geste ne produisait donc aucun effet et laissait croire le contraire. Corollaire : le métier ne peut plus bloquer un enregistrement côté tiers (il sort de la liste des champs obligatoires) — un champ qu'on ne peut pas remplir ne doit jamais retenir un « Enregistrer ». |
| Corrigé | Relecture seulement, masqué par défaut : le recruteur décide à l'envoi. En édition, le tiers compose — le corrigé lui est servi pour choisir. |
| Verdict | Valider ou Demander des modifications — le commentaire est alors obligatoire. Le tiers garde la main jusqu'à l'échéance : le dernier verdict fait foi, horodaté. |
| Un test OFFICIEL se confie en RELECTURE seulement | Le partage d'un test du catalogue était interdit par l'écran : il fallait d'abord en faire une copie privée. La restriction n'avait aucune justification pour la relecture, et elle bloquait un geste courant — « je vous propose ce test standard, ça vous va ? ». Elle est levée pour la relecture : « Partager » figure au pied de chaque test du catalogue, à côté de + Ajouter / Ma copie, et sur la FICHE du test. En revanche l'ÉDITION d'un officiel est refusée, et elle l'est à la création du lien : 422 SHARE_INVALID. Pourquoi : confier un test en édition, c'est promettre au tiers que sa copie REMPLACERA l'original à l'acceptation. Or le catalogue appartient à toute la plateforme — il n'a pas de propriétaire, aucun cabinet n'a le droit de l'écrire (403 OFFICIAL_ITEM_IMMUTABLE) : la copie rendue n'aurait personne pour l'adopter, et le tiers aurait travaillé pour rien. Deuxième raison, aussi lourde : le tiers écrit ses questions dans la banque du cabinet ; les adopter ferait entrer de la matière privée d'un tenant dans un test que tous les cabinets lisent. Pour pouvoir retoucher, on ajoute d'abord le test à ses tests et on partage sa copie : elle, se réécrit. Ce qui reste vrai pour le tiers en relecture : il peut valider et commenter, jamais demander des retouches — la demande mettrait le cabinet devant une requête qu'il n'a pas le droit de satisfaire, un état sans issue que seule une révocation effacerait. La règle est dite trois fois, à trois niveaux : la feuille de partage n'offre plus la bascule sur un officiel (« Relecture — un test du catalogue ne se confie pas en édition ») et retombe sur Relecture même si un parcours amont avait pré-choisi Édition ; la page du tiers ne montre que « Valider » et écrit pourquoi (SharedTestDto.canRequestChanges porte la règle, jamais la taxonomie — le tiers n'a aucune raison de savoir ce qu'est un « test officiel ») ; et le serveur REFUSE. Un écran n'est jamais la seule autorité sur une règle. Sur une copie privée, rien ne bouge : édition et demande de retouche restent ouvertes. |
| Deux gardes serveur, pas une | La règle « un officiel ne se réécrit pas » est tenue à deux endroits, volontairement redondants. À l'entrée : la création d'un partage en Édition sur un officiel est refusée en 422 SHARE_INVALID, avant tout effet de bord — aucune ligne de collaboration, aucune copie de travail, aucun e-mail ne naît d'un geste sans issue. Au point d'écriture : l'acceptation d'un rendu dont la cible serait un officiel est refusée en 403 OFFICIAL_ITEM_IMMUTABLE, la même garde que toute écriture sur le catalogue. La seconde peut sembler inutile puisque la première interdit d'y arriver : c'est précisément la leçon du défaut qu'elle corrige. Une règle d'intégrité ne doit pas dépendre du seul chemin qui l'a violée — l'écran du tiers refusait déjà de « demander des retouches » sur un officiel, mais le chemin qui ÉCRIT, lui, n'avait aucune garde, et le partage en édition le traversait sans rencontrer personne. |
| Redemander un avis | La SUITE d'une relecture : le tiers a tranché, vous avez corrigé le test. Le geste ouvre une popup avec un mot facultatif pour le tiers — sans lui, il recevait un rappel sans savoir CE QUI avait changé depuis son passage ; le champ ne bloque rien, une relance sans commentaire reste possible. Le mot rejoint le fil (bulle « redemande un avis »). Le partage repart en attente d'avis et l'e-mail repart avec lui ; tout l'historique reste lisible sous la ligne. Disponible après un Validé comme après un Modifs demandées, tant que le lien vit. L'édition et la commande n'en ont pas besoin : leur aller-retour est déjà modélisé (renvoyer la copie, le tiers reprend la main). |
| Accepter quand même | Vous avez renvoyé la copie d’un tiers (édition ou commande), puis vous changez d’avis : elle vous convient telle quelle. La ligne en « Modifs demandées » porte alors « Accepter quand même » — le libellé le dit, « Accepter » tout court ferait croire qu’on adopte une nouvelle version qui n’existe pas. Sans ce geste, la seule issue était d’attendre un nouveau passage du tiers, pour rien. Le geste est le MÊME que depuis l’examen d’un rendu (la copie rejoint la bibliothèque). Il n’a de sens que là où une copie EXISTE : jamais sur une relecture, jamais sur un lien mort. |
| L'attente se dit selon la NATURE | Un lien en attente n'attend pas la même chose selon ce qu'on a confié : une relecture attend un avis (« En attente d'avis »), une édition ou une commande attendent qu'on vous rende quelque chose (« En attente de la remise »). Le libellé suit donc la nature du partage, partout où l'état s'affiche. (Auparavant : une commande en cours annonçait « En attente d'avis », alors que le tiers n'a aucun avis à rendre.) |
| Atterrir là où l'objet est parti | Après une création depuis « Ajouter une collaboration », l'écran s'ouvre sur l'onglet correspondant — une commande sur Demandes, une relecture ou une édition sur Tests partagés, un rapport sur Résultats. Rafraîchir l'onglet qu'on regardait laissait croire que rien ne s'était passé : la nouvelle ligne était sur un autre onglet. |
| Une couleur, un état | L’état d’un partage porte la MÊME teinte partout où il s’affiche — lignes de l’écran Collaboration, panneau des partages d’un test, pages publiques : Validé et Appliqué en vert, Copie rendue à la couleur de la bibliothèque (violette par défaut — il y a une copie de test à lire), Modifs demandées en ambre (quelque chose vous attend), En attente d’avis en neutre. Un picto double la couleur, pour qui ne la distingue pas. La table vit à UN endroit (styles/_pills.scss) : un état ne peut pas être vert ici et gris là. |
| « Copie rendue », des deux côtés | Le tiers lit « Copie rendue » sur son écran après avoir remis son travail ; le recruteur lit le MÊME mot sur sa ligne. (Auparavant : « Proposition reçue » côté recruteur.) |
| Un FIL de conversation, pas un dernier mot | La pastille d’état devient cliquable (chevron, aria-expanded, accessible au clavier) et déplie sous la ligne le fil complet des échanges : des bulles datées du plus ancien au plus récent, corps coupé à trois lignes. Auparavant, seul le dernier commentaire s’affichait — au deuxième aller-retour, ni le recruteur ni le tiers ne savait plus ce qui avait été demandé au premier. Le même dessin des deux côtés du lien : la page du tiers (relecture comme édition/commande) montre exactement le même fil. L’infobulle au survol a disparu — elle tronquait la pensée du tiers, s’échappait au clavier et interdisait le copier-coller. |
| Ce que porte une bulle | Surtitre « {AUTEUR} · {date} — {ce qu’il a fait} » : « demande des modifications », « a validé », « redemande un avis ». Une simple note ne s’annonce pas — le nom et la date suffisent. Les sauts de ligne sont conservés. |
| Un seul dessin de bulle | Toutes les bulles ont le même fond discret, quel que soit l’auteur ou la nature du message — pas de rail vertical, pas d’aplat coloré. C’est le NOM qui porte la couleur : le tiers en corail-ambre (la teinte de l’externe dans toute l’application), le cabinet en violet (celle des tests et de l’édition). Un aplat ambre sur les seules demandes de modifications faisait deux styles de bulle dans un même fil : on y lisait deux encadrés qui se répondent, pas une conversation. Seule l’étiquette « — demande des modifications » garde l’ambre. |
| Les JALONS du partage | Entre les bulles, à leur date, des lignes sobres à pastille de couleur qui disent ce qui s’est produit plutôt que ce qui s’est dit : « Copie rendue par {adresse} · {date} », « Partage clôturé · {date} ». Elles sont dérivées des champs du partage, pas des messages — un partage peut donc avoir une histoire sans que personne n’ait écrit un mot. |
| Le mot de création est CONSERVÉ | Le « message d’accompagnement » saisi à la création d’un partage ou d’une commande n’est plus perdu après l’envoi de l’e-mail : il rejoint le fil, attribué au recruteur. Le tiers le relit à tout moment, le recruteur aussi. |
| La CONSIGNE est le premier échange | Sur une commande, le brief n’est plus un encadré à part : il ouvre le fil, en première bulle (auteur : le recruteur), suivi du mot d’accompagnement. C’est bien ce qu’une consigne est — quelque chose que quelqu’un a écrit, à une date —, et elle se lit donc comme le reste, avec son auteur, son horodatage et sa coupe à trois lignes. Il n’y a plus d’encadré de consigne ni côté tiers (l’écran d’édition/commande) ni sur la carte de commande de l’écran Collaboration. Ce qui RESTE de part et d’autre, c’est le cadre de la demande : intitulé · domaine · métier visé · niveau visé. Sur la carte de commande, la pastille d’état s’ouvre comme sur un test partagé pour dérouler ce fil. |
| Rendre sa copie avec un mot | La fenêtre de confirmation « Rendre votre copie ? » propose au tiers un mot pour le recruteur, facultatif — il a souvent quelque chose à signaler en rendant (« j’ai laissé de côté la partie réseau, faute de matière »), et il n’avait aucun endroit où l’écrire. Le champ ne bloque rien : une remise muette reste le geste normal. Le mot rejoint le fil, après le jalon « Copie rendue ». |
| Une copie RENDUE est figée | Après « Rendre ma copie », l'écran du tiers ne disparaît pas — il relit ce qu'il a livré — mais il passe entièrement en lecture seule (SUBMITTED comme APPLIED). Seuls les trois boutons Enregistrer / Aperçu / Rendre s'effaçaient jusqu'ici : tout le reste du builder répondait encore. Le tiers pouvait renommer le test, forcer le niveau annoncé, réordonner et supprimer des questions, en ajouter depuis la banque, et même en ÉCRIRE une nouvelle — laquelle partait au serveur pour s'y faire refuser, sans qu'aucun bouton ne puisse plus enregistrer quoi que ce soit. Le serveur a toujours été correct (il refuse toute écriture sur un partage déjà rendu) ; c'est l'écran qui mentait, et un écran ne doit jamais offrir un geste dont le seul destin est d'être perdu en silence. Un bandeau l'annonce — « Votre composition reste consultable ci-dessous, mais elle n'est plus modifiable » — sous le titre qui distingue les deux fins : « Copie rendue » (le recruteur l'examine, il peut encore la renvoyer) et « Copie acceptée » (elle a rejoint la bibliothèque du cabinet). Sous 1024 px, l'onglet Banque disparaît en même temps que la colonne qu'il ouvrait, et le volet retombe sur Test : un onglet choisi AVANT la remise aurait laissé le tiers devant une colonne vide, sans rien pour en revenir. |
| On NOMME la personne | Jamais « le recruteur » ni « le client » : chaque bulle porte un nom, figé au moment où le message a été écrit (un renommage ultérieur ne réécrit pas l’histoire). Si ce nom stocké est vide, un repli propre à l’écran s’applique : côté recruteur, un message du tiers prend le nom du client destinataire, à défaut son adresse ; côté tiers, un message du cabinet prend le nom de la société (companyName). En dernier recours seulement, un tiret — jamais un rôle générique. |
| Trois lignes, puis « Afficher plus » | Tout message d’échange — bulle du fil, consigne d’une commande — se coupe à trois lignes avec « Afficher plus » / « Réduire ». Le bouton n’apparaît que si le texte déborde réellement (mesuré, pas deviné). La mesure est continue et non prise une fois pour toutes : elle est refaite quand les polices de la page ont fini de charger et à chaque changement de largeur. Sans quoi, sur une page chargée à froid (celle du tiers), le premier rendu se faisait avec la police de repli, un texte de quatre lignes en tenait trois, et la consigne restait coupée sans bouton pour l’ouvrir. Un seul composant porte ce motif partout. |
| Les sauts de ligne sont de l’information | Un message écrit en trois paragraphes se lit en trois paragraphes — de la saisie à la base (TEXT, seul un trim aux extrémités) jusqu’à l’écran de l’autre côté (white-space: pre-line), dans les DEUX sens. |
| Ouverture | La première ouverture du lien est horodatée. L'information se lit au survol de la pastille d'initiales du tiers — « Partagé le … · Jamais ouvert » —, ce qui rend la relance sensée sans alourdir la ligne. |
| Fin de vie | Le lien meurt à l'échéance, à la clôture, ou immédiatement si le partage est supprimé. Prolonger ressuscite un lien EXPIRÉ ; Rouvrir remet en route un lien CLÔTURÉ (sauf commande déjà acceptée). Seule la révocation est sans retour. |
| Indépendance | Un partage ne verrouille rien : le test reste modifiable et supprimable. |
Partager des CANDIDATS à un tiers
Le partage précédent porte sur un test — un sujet à relire ou à composer.
Celui-ci porte sur des candidats : des personnes, et ce qu'elles ont rendu.
Le lien public est /r/{token}, daté, opaque et anonyme, sur le même modèle que
/s/ et /t/ : le token est le seul identifiant, le tenant est lu sur la
ligne du lien, jamais sur un jeton d'authentification.
L'unité a changé. Jusqu'ici un partage montrait UN rapport : un candidat, une épreuve. Trois demandes qui semblaient distinctes — plusieurs résultats, une campagne, une liste de profils sans test — se sont révélées être le MÊME objet : des candidats portant 0..n épreuves. Une seule structure les couvre, aucun objet nouveau n'a été ajouté au produit, et le partage d'un rapport isolé en est devenu le cas dégénéré (un membre, une épreuve, aucune commande de navigation) : les liens déjà envoyés s'ouvrent à l'identique. Le mot « épreuve » est celui du parcours de campagne — un test rendu et un dossier de questionnaire reçu entrent par la même porte : « rapport » exclurait le questionnaire, « dossier » se confondrait avec la fiche du candidat.
| Règle | Comportement |
|---|---|
| Points d'entrée | Quatre. Candidats → le bouton « Partager des candidats » arme un mode de cases : la barre d'action « n candidats sélectionnés » ouvre la feuille. Il s'appelait Sélectionner et ne disait pas POUR QUOI — on arrivait sur l'écran sans savoir qu'on pouvait y présenter des profils à un tiers ; l'encadré d'information de la page bascule en outre sur l'INSTRUCTION dès que le mode s'arme. La barre est FIXE au bas de la fenêtre : en « sticky » elle se collait au bas de son CONTENEUR et remontait au milieu des cartes dès que la liste dépassait l'écran — elle en recouvrait une. Fiche campagne → Partager au client (dès qu'elle est lancée et qu'elle a un inscrit). Collaboration → Ajouter une collaboration, nature « Partager des candidats (avec ou sans résultats) » — ou, pour un parcours entier, la nature « Partager une campagne », qui ouvre la MÊME feuille préremplie que la fiche campagne. Et les deux chemins historiques d'un rapport isolé : le bouton Partager du bandeau d'un rapport, l'action « Partager le résultat » du menu ⋯ d'une épreuve — inchangés, ils produisent un partage à un membre. Hors mode sélection, la liste des candidats reste ce qu'elle était : aucune case parasite sur une page qu'on vient consulter, et sortir du mode oublie la sélection (la garder ferait repartir un partage avec des gens choisis pour autre chose). |
| La SOURCE décide si la liste bouge | Deux sources, exactement l'une des deux. Une campagne : les membres SONT son vivier et les épreuves celles du parcours, relus à chaque ouverture du lien — un candidat inscrit demain apparaît chez le tiers sans geste du recruteur, une copie rendue demain aussi. La feuille le dit (« La liste suit la campagne ») et passe son récap en lecture seule : c'est le vivier qui fait foi. Une sélection à la main : la liste est ce qui a été coché, et rien ne la fait bouger toute seule. Les deux à la fois sont refusées (SHARE_INVALID, 422) — il faudrait dire laquelle l'emporte le jour où le vivier change. Corollaire assumé : on ne retire pas quelqu'un d'un partage de campagne ; pour un sous-ensemble, on fabrique une sélection. |
| Composer la sélection — on coche des PERSONNES | Dans Ajouter une collaboration, l’étape s’appelle « Choisir les candidats à partager » et liste TOUS les candidats — exactement la liste de l’écran Candidats, mêmes pages de 20, même recherche débouncée sur prénom+nom, e-mail et nom d’épreuve. C’est un changement d’UNITÉ, pas de vocabulaire : on y cochait des rapports (status=completed + hasResult=true) là où l’écran Candidats coche des personnes — deux réponses à la même question selon la porte empruntée, et surtout l’impossibilité de partager d’ici une liste de profils sans test, pourtant l’un des trois cas d’usage. La ligne du candidat se coche ; ses épreuves rendues partent avec lui, et le tri de ce qu’on montre se fait ensuite dans le récap de la feuille — une seule question par écran. Un candidat à plusieurs épreuves se déplie par un chevron séparé : déplier n’est pas choisir, et ce qui s’ouvre est en LECTURE. Re-cliquer une ligne la décoche. Le groupement par candidat n’est plus une précaution d’écran, il est structurel. |
| La règle « ce qu’un candidat apporte », écrite UNE fois | Deux chemins la posent désormais (la liste des candidats et Collaboration) : elle vit donc dans le modèle du partage et se réutilise telle quelle, jamais réécrite en face — deux copies auraient divergé. Seules les épreuves RENDUES entrent, test et dossier confondus. Corollaire d’un défaut trouvé à cette occasion : le sélecteur bâtissait sa liste sur resultId, donc sur les TESTS seuls — un dossier de questionnaire reçu n’en a pas, il partait avec le candidat sans que la ligne l’annonce, et l’écran pouvait afficher « aucune épreuve rendue » sur quelqu’un qui en apportait une. Il lit maintenant le même critère que le partage ; resultId ne décide plus que de l’anneau de score. |
| L’onglet et les mots | « Résultats partagés » devient « Candidats et résultats partagés » : le nom dit les DEUX, l’ancien laissant croire qu’un profil sans test n’y avait pas sa place. Les trois onglets de Collaboration portent en outre un encart explicatif permanent — ils se ressemblent et ne racontent pas la même histoire ; chacun dit ce qu’on regarde ET d’où ça vient. Permanent et non masquable : un texte qu’on masque une fois ne réexplique jamais, et c’est justement quand on doute qu’on en a besoin. Enfin, sur un profil sans épreuve ni CV, la feuille dit « seule la fiche sera partagée » plutôt que d’énumérer deux manques. |
| Le RÉCAP dépliable — le cœur de la feuille | On ne coche pas une catégorie qu'on ne voit pas : la feuille montre ce qui part. Un candidat par ligne, dépliable sur ses épreuves, chacune décochable (« elle s'est plantée au Frontend, je ne montre que le Java » est un geste de short-list, pas un raffinement), et une mention « CV joint » / « pas de CV » qui évite de promettre un CV que deux candidats sur trois n'ont pas. Le compteur en tête compte ce qui PART, jamais ce qui existe : décocher une épreuve le fait baisser. |
| Un candidat SANS épreuve est légitime | Partager une liste de profils — sans aucun test — est un des trois cas d'usage, pas une donnée manquante. La feuille l'affiche (« Aucune épreuve rendue »), la page publique aussi (« Ce candidat vous est présenté sur sa fiche seule »). Une invitation encore ouverte n'apparaît nulle part : on ne montre que ce qui a été rendu. |
| Ce que le tiers verra — cinq réglages, plus la surveillance | La fiche candidat (activée par défaut) : poste recherché, ville, disponibilité, LinkedIn — jamais les notes du recruteur, ni les recrutements, ni la facturation ; ce ne sont pas des oublis, c'est la définition de la vue. Masquer l'identité (désactivé). Joindre le CV (désactivé). Inclure la surveillance (activée — le recruteur retire, il n'a pas à penser à ajouter), et sous elle les captures webcam. Le cinquième n’est pas une visibilité mais une question posée : Demander un avis (activé — voir plus bas). Ce sont des décisions de politique : elles valent pour tout le monde d'un coup, là où le récap choisit pièce par pièce. |
| Le CONTENU de la fiche — quatre sous-réglages | Sous « Inclure la fiche », le partage choisit désormais ce qui la compose : la synthèse du cabinet (cochée), les conditions — contrat, télétravail, mobilité — (cochées), les compétences et leurs niveaux (cochées), et les prétentions salariales — décochées par défaut : la donnée est sensible et chaque cabinet a sa pratique, on ne la présume pas. Fiche décochée ⇒ rien de tout cela ne part, quoi que disent les sous-cases. Les liens déjà envoyés n'exposent rien de plus qu'avant : les quatre réglages naissent à FAUX en base, seuls les nouveaux partages portent les défauts produit. Le statut, les tags et l'activité de la fiche ne sortent jamais. |
| La synthèse sous identité masquée — on prévient | La synthèse est du texte libre : si celle d'un candidat contient un morceau de son propre nom, « Candidat A » ne masque plus rien. La feuille le détecte et l'écrit — corrigez-la ou passez en identité visible — mais ne bloque jamais : même doctrine que le CV. |
| « Masquer », jamais « anonymiser » | Le réglage remplace le nom par « candidat A », « candidat B »… à la position du membre — position stockée, si bien que deux ouvertures du même lien ne renomment jamais personne et que le tiers peut dire « le candidat C » à son collègue. Le masquage est fait à la source : e-mail, téléphone et LinkedIn ne sont pas mis dans la réponse, et le rapport lui-même est rebâti sans nom, sans e-mail et sans identifiant de candidat — masquer la fiche en laissant le rapport nommer son auteur n'aurait rien masqué. Ce qui reste est ce qui fait juger un profil sans le nommer : poste, ville, disponibilité, et la totalité de la copie. Le produit ne promet pas l'anonymat : une réponse libre qui raconte « je faisais ça chez Decathlon » n'est pas nettoyable — d'où le mot du réglage. |
| Le CV : on prévient, on ne bloque pas | Le CV porte l'identité même sous masquage. La feuille avertit (bandeau ambre : « Le CV porte l'identité du candidat : le masquage ne s'y applique pas ») et laisse faire — un CV anonymisé par le cabinet lui-même est un livrable courant, et l'humain tranche. Le fichier ne descend que par la porte du partage : 404 quand le lien ne le joint pas. |
| Les captures : la seule exception à cette doctrine | Sous identité masquée, les captures webcam partent d'office — c'est le seul endroit du produit où l'on ne se contente pas d'avertir. La raison est de degré : un nom se devine, un visage se reconnaît, et la fuite est irrattrapable. La bascule reste offerte avec sa raison écrite (« Retirées : elles montrent le visage du candidat. À recocher en connaissance de cause »), si bien que les remettre reste possible — mais en le sachant. Le journal, lui, part quand même : il ne parle pas de la copie mais du comportement. Sanitisation à la source dans les deux cas : ce qui est retiré ne quitte jamais le serveur, et la porte des images se ferme avec la section (404). |
| La visite du tiers — DEUX niveaux | La racine du lien sert la liste : le cabinet, l'échéance, les membres avec leur fiche et leurs épreuves. Volontairement légère — un partage de trente candidats n'a aucune raison de télécharger quatre-vingt-dix rapports pour dessiner un rail. Le tiers navigue entre les candidats (rail cliquable, flèches ← →, et les flèches du clavier — un dossier de candidatures se feuillette ; ignorées dès qu'une saisie a le focus, sinon le correcteur ne pourrait plus déplacer son curseur), puis entre les épreuves de celui qu'il lit (onglets portant le score). Les flèches ne paraissent qu’à plusieurs personnes (il n’y a rien à parcourir) et portent la couleur d’ACTION : c’est la commande principale de cette page, elle était grise et de la taille d’une puce ; celle qui bute en fin de file reste en place — la retirer ferait sauter la mise en page à chaque candidat — mais cesse d’appeler. Les ONGLETS d’épreuve, eux, s’affichent MÊME à UNE seule épreuve : l’onglet ne sert pas qu’à naviguer, il NOMME ce qu’on lit — sans lui le tiers avait un rapport sous les yeux sans savoir de quelle épreuve il s’agissait, et deux candidats se lisaient différemment selon qu’ils en avaient une ou trois. Le contenu d'une épreuve se charge à la demande, quand le tiers y arrive. |
| Le CONFORT du tiers | La fiche candidat est une CARTE titrée, avec le rail corail des cartes de l’application : c’était une bande de libellés sans en-tête, qui se lisait comme un chapeau de page — on ne savait pas qu’on regardait une fiche. Et les trois pages publiques (/r/, /s/, /t/) portent désormais la bascule clair / sombre : ni le tiers ni le candidat n’ont de menu où la chercher, alors qu’un passage dure parfois une heure. C’est le MÊME composant partagé qu’utilisaient déjà /t/ et /p/ — il ne manquait qu’à /r/ et /s/ — et le choix est PERSISTÉ : revenir sur le lien retrouve son réglage. |
| Le PÉRIMÈTRE : ce qui n'est pas partagé n'existe pas | Toutes les portes du second niveau — un rapport, un dossier, une pièce jointe, une capture, un visuel d'énoncé, un CV — se jugent contre le contenu du partage, et rien d'autre. Une épreuve décochée, fût-elle celle d'un membre du partage, répond 404 uniforme : dire « ça existe mais pas pour vous » serait déjà dire quelque chose. |
| Test ou dossier, même niveau | Un test rendu ouvre son rapport complet ; un questionnaire reçu ouvre son dossier — sections, réponses, pièces jointes téléchargeables. Jamais les deux : la nature de l'épreuve décide, et elle se lit sur son instantané. Les deux se lisent avec les mêmes composants que le recruteur (corps de rapport, corps de dossier) : il n'existe pas de « version tiers ». |
| Ce que le tiers voit d'un rapport — PAS un réglage | Le rapport complet : réponses du candidat ET bonnes réponses, barème et guide de correction compris. Aucune bascule « inclure le corrigé », contrairement au partage d'un test : on ne juge pas un candidat sur la moitié d'une copie, et on ne corrige pas sans barème. |
| Les deux droits | Consultation (pastille verte) — le tiers regarde. Correction (pastille violette) — il peut en plus noter les questions ouvertes en attente, épreuve par épreuve. Même pilule segmentée que le partage d'un test, mêmes couleurs. Elle vit à un seul endroit : la feuille de partage, sur Consultation par défaut. |
| La CORRECTION, par épreuve | Noter une question ouverte porte sur une épreuve, et reste réservée au droit Correction. Mêmes bornes et mêmes refus que le chemin recruteur (ANSWER_NOT_REVIEWABLE, REVIEW_POINTS_OUT_OF_RANGE, CONCURRENT_MODIFICATION) ; le score est re-dérivé, jamais persisté. En Consultation le serveur refuse en 422 SHARE_INVALID — le token est valide, c’est CE lien qui ne le permet pas. |
| L'ORIGINE de la correction | Chaque note écrit qui l'a posée : le genre (RECRUITER | THIRD_PARTY) et, pour un tiers, le libellé de son partage — nom du client sinon adresse —, résolu à l'instant de la correction et FIGÉ : un partage clôturé puis supprimé n'efface pas l'attribution. La dernière correction gagne — un recruteur qui repasse derrière un tiers remet l'origine sur le cabinet et le repère tombe (une correction du cabinet est la norme, pas une information). L'information voyage uniquement sur le rapport du recruteur (GET /api/results/{id}) : la surface publique /r/ ne la porte pas — le tiers n'a pas à voir qui a corrigé quoi, et c'est presque toujours lui. |
| L’AVIS du tiers — sur la PERSONNE | La moitié retour du geste : le cabinet dit « voici cinq profils », le tiers répond « celui-là, oui ». Il porte sur le candidat et non sur une de ses copies — c’est l’unité du partage, et la seule qui existe toujours : une liste de profils sans test n’a aucune épreuve à quoi accrocher une décision. Un partage à cinq candidats produit donc cinq avis, un par personne. Trois valeurs, celles du recruteur mot pour mot (keep / review / reject) — seuls les MOTS de l’écran changent de côté : le tiers lit « je veux le rencontrer », le cabinet lit « à rencontrer ». Re-cliquer la pastille déjà choisie efface l’avis : se raviser doit être aussi facile que se prononcer. L’avis se relit et se révise — il est renvoyé au tiers à chaque ouverture, redemander ce qu’on a déjà répondu étant le meilleur moyen d’obtenir deux réponses différentes. |
| Le MOT qui l’accompagne | Sous la pastille, un champ libre facultatif (2 000 caractères) : « à revoir » sans raison ne sert personne. Il ne s’ouvre qu’une fois la décision prise — un mot sans pastille serait un avis à moitié dit, illisible sur la carte du cabinet. Une note vide et une note absente sont la même chose (trimée à la source, jamais rattrapée à l’affichage) ; la borne est jugée APRÈS normalisation, et un dépassement sort en 422 SHARE_INVALID. Ce n’est pas une note chiffrée : la pastille est la réponse, le mot est ce qu’on ajoute. |
| Le MODE n’entre PAS dans la règle | L’avis dépend du seul réglage Demander un avis, jamais du droit : on peut vouloir l’avis d’un client sans lui déléguer la correction des questions ouvertes — et c’est même le cas le plus courant. C’est ce qui comble le trou de V20 : un lien de consultation ne pouvait répondre que par e-mail. Un partage qui ne demande rien n’affiche aucun panneau, et l’écriture y est refusée en 422 SHARE_INVALID — même nuance que le refus de correction. Les liens nés d’une copie en CC ne demandent rien : ils annoncent un résultat, poser une question que personne n’a voulu poser serait un piège. |
| L’avis ne touche PLUS la décision du recruteur | Jusqu’à V20 le tiers écrivait dans evaluations.verdict, c’est-à-dire la colonne du cabinet : son « pas pour moi » effaçait sans bruit le « à garder » du recruteur, et rien à l’écran ne disait qui avait tranché. L’avis a désormais sa propre table, fille du partage et du candidat — pas du membre, un partage de campagne n’en ayant aucun. Deux jugements, deux endroits : le verdict de la fiche candidat n’appartient plus qu’au cabinet. Corollaire : deux partages différents peuvent porter deux avis opposés sur la même personne — ce sont deux interlocuteurs, et c’est souvent tout l’intérêt de la question. |
| Où la réponse atterrit | Sous le bandeau du destinataire dans Résultats partagés, et non sur la carte : la carte décrit la sélection, l’avis appartient à celui qui l’a rendu. Un résumé — « 2 à rencontrer · 1 écarté · 2 sans réponse » — puis le détail : une pastille colorée, le vrai nom (le masquage vaut pour le tiers, pas pour le cabinet) et le mot en entier. Le reste attendu est compté sur les candidats du partage : sans lui, trois avis sur cinq profils se liraient comme une réponse complète. Tant que rien n’est venu, la ligne le dit (« Aucun avis rendu pour l’instant ») — un vide passerait pour un bug d’affichage. Les avis voyagent AVEC la ligne, en lecture groupée : c’est la réponse qu’on attendait en envoyant le lien, elle ne se mérite pas par un clic de plus. |
| Le doublon d'une SÉLECTION n'est pas refusé | La garde SHARE_ALREADY_ACTIVE (409) — un seul lien vivant par rapport, destinataire et droit — a été retirée avec la règle qu'elle protégeait. Dès qu'un partage porte cinq candidats, deux sélections qui se recoupent partiellement sont la situation normale (« je lui renvoie les trois profils retenus ») : la refuser bloquerait un geste légitime. Une garde qui se déclenche à peu près est pire que pas de garde. Le sélecteur ne marque donc rien comme « déjà partagé », et la prolongation comme la réouverture ne peuvent plus répondre 409. |
| Le doublon d'une CAMPAGNE, lui, est refusé | Une garde revient, sur le seul critère qui n'a rien d'approchant : le triplet (cabinet, adresse normalisée, campagne). À la création manuelle d'un partage portant un campaignId, un second lien vivant (ni clôturé ni expiré) et d'origine MANUELLE vers la même adresse est refusé en 409 SHARE_ALREADY_ACTIVE. La raison tient à la liste : deux liens de campagne vers la même personne portent exactement la même liste vivante — c'est deux URL pour une conversation, deux échéances et deux jeux de réglages à tenir. Le mode n'entre pas dans le critère (contrairement au partage d'un test) : passer de Consultation à Correction sur le même parcours n'est pas une seconde conversation, c'est un droit à changer sur le lien qui existe. Un lien AUTOMATIQUE (origine CC) ne bloque PAS : il annonce des résultats au fil de l'eau, sans fiche ni avis demandé, alors que le recruteur qui pose un partage de campagne partage délibérément plus riche — prendre la trace d'un envoi pour une décision serait un contresens. Les deux cohabitent, et la feuille le dit plutôt que de le refuser. Enfin, ce 409 n'est pas une impasse : voir « Clôturer et remplacer » ci-dessous. |
| « Clôturer et remplacer » — la sortie du 409 | Le refus n'est pas un échec technique : le lien existe, et le recruteur voulait manifestement partager. Une confirmation s'ouvre — « Un lien vivant existe déjà pour cette adresse, avec ses conditions. » — et propose le geste qu'il avait en tête : clôturer l'ancien puis créer le nouveau avec les réglages qui viennent d'être saisis. Dans cet ordre, et jamais l'inverse : deux liens vivants sur la même campagne sont précisément ce que la garde refuse. Si la clôture échoue, RIEN n'est créé et l'erreur s'affiche — un geste qui n'a pas eu lieu vaut mieux qu'un doublon que personne n'a demandé. Le serveur désigne lui-même le lien à clôturer (champ manualCampaignShareId de la lecture d'annonce) : l'écran n'a pas à charger la liste entière des partages du cabinet pour retrouver une ligne que le serveur vient de nommer. |
| Les ANNONCES non bloquantes de la feuille | Ce qui n'est pas refusé est dit. À l'ouverture de la feuille et à chaque saisie d'adresse (débouncée), un encadré discret — la recette bleue des encadrés de règle, jamais l'ambre d'un avertissement — annonce ce que cette adresse tient déjà. Deux cas, un seul à la fois : sur une sélection, « Cette adresse tient déjà n lien(s) vivant(s) portant certains de ces candidats » — la doctrine laisse passer, mais laisser passer n'est pas taire, et le recruteur tranche entre recréer et aller prolonger ; sur une campagne, « Cette adresse reçoit déjà un lien automatique — il continuera de vivre », le seul cas qui mérite d'être annoncé puisqu'il ne bloque pas et produirait sinon deux e-mails inexpliqués. Le lien manuel d'une campagne n'est pas annoncé : il refusera à l'enregistrement, et un 409 qui propose sa sortie vaut mieux qu'un avertissement lu deux minutes plus tôt. L'encadré est silencieux quand il n'y a rien à dire (un encadré permanent ne se lit plus), ne grise aucun bouton, et une lecture en échec le laisse simplement vide — un encadré d'information n'a pas le droit d'empêcher de partager. La lecture est servie par GET /api/result-shares/live (paramètres tous facultatifs, candidateIds répétable) : elle ne peut retourner aucun 4xx, une adresse en cours de frappe rendant « rien à annoncer ». |
| Aucun rapport encore | L'étape de sélection ne tend pas une liste vide : elle explique d'où vient un rapport. Une recherche sans résultat reste un simple « aucun candidat ne correspond ». Ni l'un ni l'autre ne s'affiche tant que le serveur n'a pas répondu. |
| Destinataire · Échéance | Un client du module ou une adresse libre, comme le partage d'un test ; l'adresse est toujours portée en propre (instantané). Échéance J+14 par défaut, validée comme toute échéance d'invitation (demain → J+365, sinon SHARE_INVALID). |
| Cycle de vie | Identique au partage d'un test : copier le lien, relancer (refusée sur un lien mort), prolonger (ressuscite un expiré, jamais un clôturé), clôturer (idempotent) et révoquer. Une clôture n'abandonne rien : les corrections déjà posées restent acquises. |
| La carte du recruteur | Dans l'onglet Résultats partagés : une carte par partage — grouper deux sélections parce qu'elles se recoupent n'aurait aucun sens. Elle porte le nombre de personnes là où l'anneau de score se trouvait (une sélection n'a pas de score à elle), son objet (un nom quand elle n'a qu'une personne, un compte au-delà, le nom du parcours pour une campagne), la ligne « n candidats · n épreuves », une chip Identité masquée le cas échéant, et Suit la campagne quand la liste est vivante. Les vrais noms y figurent : le masquage vaut pour le TIERS — cacher au cabinet les candidats qu'il vient de choisir n'aurait aucun sens. |
| Partages nés d'une copie | Inchangé : quand un envoi (ou un lancement de campagne) a coché « Partager automatiquement le résultat aux personnes en copie », le serveur crée tout seul, à la complétion, un partage en Consultation (J+14) par adresse en copie — origine CC, signalée par la chipsette de carte « Créé(s) automatiquement (copie d'envoi) » — elle paraît dès qu'un lien de la carte en vient et en donne le compte ; les bandeaux, eux, ne portent plus l'origine. Il pose bien son membre et son épreuve (sans quoi le tiers ouvrirait une liste vide), n'inclut pas la fiche (on informe d'un résultat, on ne fait pas circuler un profil) et ne masque rien. Aucun geste ne change. Le doublon n'y est plus jugé non plus. |
| Un partage meurt avec son DERNIER membre | Effacer un candidat le retire des partages qui le montraient. Quand c'était le dernier, le partage disparaît : un lien qui ouvre sur rien n'a pas à survivre. « Meurs quand ton dernier membre s'en va » est une règle sur un ensemble qu'aucune clé étrangère ne sait dire — elle vit donc dans le module partage, déclenchée par un événement d'effacement. Un partage de campagne est épargné : sa liste n'a jamais été à lui. |
| Les liens DÉJÀ envoyés gardent leur pouvoir | Le réglage arrive avec un défaut de base FAUX et un défaut produit VRAI — l’écart est voulu, comme pour la fiche candidat en V20 : le défaut de base ne concerne que les lignes déjà écrites. Un rattrapage les remet ensuite à l’état exact d’hier : un lien de correction affichait les pastilles de décision (il était le seul), il demande donc un avis ; un lien de consultation n’a jamais rien pu répondre, il ne demande rien. Aucun tiers ne voit un panneau apparaître — ni disparaître — entre deux ouvertures du même lien. Les avis posés par l’ancienne route restent, eux, indiscernables de ceux du recruteur : on ne fabrique pas un historique qu’on ne sait pas reconstituer. |
| Lien mort · Cloisonnement | 410 SHARE_EXPIRED passé l'échéance ou après clôture ; 404 uniforme sur un token inconnu ou révoqué. Un candidat, une épreuve ou un partage d'un autre cabinet : 404, à la création comme sur tout geste. |
Gabarit tenant « partage de résultat » (GET/PUT /api/settings/result-share-email), variables inchangées. Une sélection en nomme plusieurs : {{candidateName}} devient « n candidats » au-delà d'une personne et {{testName}} porte le nom de la campagne ou rien — le gabarit n'a donc pas à être migré, et un cabinet qui a personnalisé le sien continue de lire une phrase juste. Envoi best-effort après commit ; le lien rejoint aussi le presse-papiers. |
13Facturation
L'écran Facturation vit dans le groupe Finance de la barre
latérale (§4), route /billing, persona recruteur
uniquement — l'administrateur plateforme n'a pas de cabinet, donc rien à facturer.
Evalixo ne produit aucune facture : il tient l'état et l'exporte — la
facturation électronique reste l'affaire de l'outil comptable du cabinet.
La doctrine
Rien ne se crée automatiquement. Déclarer un recrutement (§10), rendre une copie ou régler un barème n'écrit aucune ligne. Il n'existe plus ni valorisation à la déclaration, ni ligne de passation posée par le système, ni rattrapage des copies non facturées, ni cascade d'annulation. Une ligne existe parce que quelqu'un a cliqué Ajouter une ligne (l'ex-« Facturer » — le mot « facturer » désigne désormais un passage d'état, voir le cycle de vie plus bas). Et la règle qui gouverne tout : le barème propose des prix, il n'en impose jamais — tout montant s'écrase, l'écart est simplement marqué « ajusté ».
Une ligne reste une pièce : le nom du destinataire, le libellé, le montant, le prix unitaire, le montant calculé par le barème, le candidat et la campagne y sont figés à la création. Réviser un barème ne réécrit AUCUNE ligne existante.
Le cycle de vie d'une ligne (V6)
Evalixo ne produit toujours aucune facture — mais il sait désormais où en est chaque ligne : À facturer → Facturée → Réglée. « Facturée » se marque avec la référence de la facture émise dans votre outil comptable (c'est le pont entre les deux mondes), une date et une échéance ; « Réglée » d'un clic. Chaque pas est réversible, un seul à la fois. L'annulation reste orthogonale et PRIME à l'affichage — un comptable qui lit « Facturée » sur une annulée la compterait.
| Règle | Comportement |
|---|---|
| Un lot = une facture | Marquer facturées… — depuis la pastille d'état d'une ligne, ou depuis le bouton de la section client, qui embarque tout son « à facturer » (décochable dans la feuille) — exige des lignes du même destinataire 422 sinon. Chaque ligne porte UN id et part pour elle-même : une campagne facturée est une ligne, elle entre dans un lot comme les autres (l'agrégat qui devait « partir entier » n'existe plus). |
| L'échéance — proposée, jamais imposée | Sans échéance saisie : la date de facture + le délai du client (nouveau champ « Échéance des factures » de son barème), sinon 30 jours. Elle n'arme QUE la pastille « en retard » et les compteurs — aucune relance automatique, Evalixo n'envoie rien. |
| Le pilotage — dérivé, jamais saisi | Quatre tuiles de lecture en tête d'écran (À facturer, Facturé en attente, En retard, Réglé — « en retard » est un sous-ensemble de « facturé », jamais une cinquième famille) et les six derniers mois en barres empilées. Montants HT, annulées exclues, calcul serveur. Les tuiles n'ont AUCUN geste : une statistique ne se devine pas cliquable (retour utilisateur) — le filtre d'état vit dans la rangée de chips sous la barre de contrôle (Tous · À facturer · Facturée · En retard · Réglée, chacune avec son compte), à côté du sélecteur de client et de la recherche élargie au nom, prénom ou e-mail du candidat (l'adresse se lit sur la fiche vivante — la ligne fige le nom, pas l'e-mail). |
| La fiche client gagne sa carte Finance | Facturé cette année, en attente, en retard (avec la plus ancienne facture et son échéance), à facturer — en lecture seule : les gestes vivent sur l'écran Facturation. Sous le barème, fiche client (§9). |
| Les liens antérieurs | Toute ligne née avant V6 est « À facturer » : rien n'est deviné, le rattrapage est un geste du recruteur. |
Le barème campagne — quatre branches, aucune n'impose
| Règle | Comportement |
|---|---|
| Le volet Campagne du barème | TROIS branches : Forfait par campagne, « Facturer à la copie rendue » (l'ancien sens CACHÉ de « Pas de forfait », enfin nommé — au prix unitaire du volet passation), et le VRAI « Pas de forfait » (défaut) : le barème ne propose rien, la feuille reste entièrement libre. « Incluse » a été retirée — même comportement observable que « pas de forfait », un seul état suffit ; les fiches qui la portaient ont été migrées. Les barèmes qui vivaient sur l'ancien sens caché ont été migrés vers « à la copie rendue » — leur comportement n'a pas bougé. |
| La feuille « Une campagne » ne bloque plus rien | Les deux modes se choisissent toujours — renommés « Une seule ligne (forfait) » et « Une ligne par copie » : le choix dit ce qu'il PRODUIT sur l'état, plus un prix. « Une seule ligne » n'est plus éteinte faute de barème — le montant se saisit dessous. Le forfait du barème pré-remplit et se corrige (marqué « ajusté »). Sans suggestion du barème, le recruteur tranche le mode — plus d'auto-sélection ; seule impossibilité de FAIT : « aux copies » à zéro copie rendue. |
Le barème du client — trois volets
Le barème se règle sur la fiche client (§8) et se lit ici : c'est lui qui propose les montants. Il porte trois volets indépendants, tous facultatifs — la carte « Barème de facturation » de la fiche client affiche donc trois lignes, dans cet ordre : Placement · Passation de test · Campagne, chacune retombant sur « Non défini » quand elle n'est pas réglée.
| Volet | Ce qu'on règle | Ce qu'il propose |
|---|---|---|
| Placement | Un mode : PERCENT + un pourcentage de ]0;100], ou FLAT + un forfait (> 0). |
Le montant d'un placement : le pourcentage s'applique au salaire brut annuel, le forfait se propose tel quel. |
| Passation de test | Un mode : UNIT + un prix unitaire, ou rien. |
Le prix d'une copie rendue. Sans mode, aucun prix n'est proposé — l'ex-« incluse » a fusionné avec ce silence. |
| Campagne (parcours complet) | Un mode : FLAT + un forfait (> 0), PER_SITTING, ou rien. |
Le forfait proposé quand on facture une campagne au forfait ; PER_SITTING propose aux copies rendues, au prix unitaire du volet passation. Mode absent ⇒ rien n'est convenu, la feuille reste libre. |
| Règle | Comportement |
|---|---|
| Trois volets, trois questions | Les volets sont indépendants : un client peut n'avoir qu'un forfait de campagne, ou qu'un taux de placement. Un barème existe dès qu'un seul des trois est posé. |
| « Incluse » a fusionné avec « pas de barème » | La distinction a été retirée (retour utilisateur) : les deux réglages produisaient exactement le même comportement — aucun montant proposé, rien de bloqué — et une décision qui ne change rien n'est pas une décision enregistrable. Il ne reste qu'un silence, « pas de barème » ; la migration a remis à ce silence les fiches qui portaient INCLUDED (passation et campagne), et un INCLUDED envoyé est désormais un mode inconnu 422 CLIENT_BILLING_INVALID. Rien n'interdit de facturer sans barème : le barème propose, il n'impose jamais. |
| Bornes | Forfait de campagne strictement positif — le zéro est refusé 422 CLIENT_BILLING_INVALID : un forfait à zéro, c'est un forfait absent. (Le prix unitaire d'une passation, lui, accepte le zéro : « offert » n'est pas « inclus ».) |
| Surcharge du poste | Elle ne concerne que le placement (taux ou forfait négocié pour ce poste, §8). Il n'existe aucune surcharge de poste pour la passation ni pour le forfait de campagne : une campagne ne vise qu'un poste, mais le forfait se négocie au contrat cadre. |
Le geste « Facturer »
Le bouton ouvre une feuille unique qui commence par la nature de ce qu'on facture. La nature est le geste, pas forcément le type de la ligne produite : « Une campagne » crée une ou N lignes de type passation selon le mode retenu. En modification, le sélecteur disparaît — la nature d'une ligne ne change pas.
| Nature | Ce qu'on saisit | Ce qui se passe |
|---|---|---|
| Un placement | Destinataire + candidat, le salaire brut annuel quand le barème est un pourcentage, puis libellé, montant HT et date (proposés). | Le devis propose un montant : surcharge du poste d'abord, mais le MODE vient toujours du client — PERCENT ⇒ taux × brut annuel arrondi au centime, FLAT ⇒ le forfait. Sans barème, aucune proposition (jamais un 0 : « rien à proposer » n'est pas « zéro euro »). Une ligne de type placement. Voir plus bas. |
| Une campagne | La campagne, puis comment la facturer — au forfait ou aux copies rendues. | Le récapitulatif affiche le client, le nombre de copies rendues, le forfait par campagne, le prix unitaire et le total proposé. Une seule ligne (forfait) ⇒ UNE ligne ; Une ligne par copie ⇒ le détail dépliable. Le destinataire est déduit du client du poste visé : il ne se saisit pas. Voir plus bas. |
| Une passation | Destinataire + candidat + la copie rendue, puis libellé, montant et date. | Le sélecteur de copie reste désactivé tant qu'aucun candidat n'est choisi et ne liste que ses copies rendues (les questionnaires en sont exclus). Le devis propose le prix unitaire du barème et cale la date sur celle de la copie, pas sur aujourd'hui. |
| Libre | Destinataire + libellé + montant + date. | Ce qu'aucune des trois autres ne dit : frais annexes, régularisation. Aucun devis, aucun avertissement. |
| Règle | Comportement |
|---|---|
| Destinataire — deux formes exclusives | Soit un client du référentiel, soit hors référentiel : un nom (≤ 120) ET un e-mail (≤ 180, normalisé en minuscules), les deux obligatoires ensemble. Les deux formes à la fois, aucune des deux à la création, ou un couple incomplet 422 BILLING_LINE_INVALID ; client inconnu ou d'un autre cabinet → 404 uniforme. Dans les deux cas le nom est figé sur la ligne : une ligne a toujours quelqu'un à facturer. |
| « Hors référentiel » en TÊTE de liste | La liste des destinataires s'ouvre sur « — Hors référentiel — », avant les clients du cabinet. C'est une échappatoire, pas le dernier client de l'annuaire : reléguée en queue, il fallait dérouler cent noms pour découvrir qu'elle existait. |
| Le barème du destinataire est rappelé | Dès que le destinataire retenu porte un barème, un bandeau le rappelle en tête de feuille — « Barème {client} : 22 % du brut annuel », « … forfait de 8 000 € », « … 90 € la copie », « … Forfait 2 500 € », ou « Incluse dans les honoraires de placement » ; plusieurs volets se joignent par « · ». Pas de barème, pas de bandeau : on n'annonce pas une absence. Il ne paraît qu'en création (on ne re-propose pas une pièce qu'on corrige) et ne coûte aucun appel de plus — la fiche du destinataire est déjà chargée pour le sélecteur. |
| Le devis n'écrit rien | Les trois endpoints de proposition sont en lecture seule : les consulter cent fois ne laisse aucune trace. Ils répondent aussi alreadyInvoiced et sa date. Un devis de passation sur une copie non rendue est un 404, pas un « 0 € ». |
| Déjà facturé — on prévient | Facturer un placement, une campagne ou une passation déjà facturés affiche un avertissement daté (la date de la dernière ligne vivante correspondante) et n'est jamais refusé : second lot, régularisation — c'est une situation, pas une erreur. Aucun code d'erreur de doublon n'existe dans le module. L'avertissement de placement est nominatif : même candidat ET même destinataire. |
| Marque « ajusté » | Le montant proposé est conservé à côté du montant retenu dès qu'il existe, même identique (une confirmation est une information) ; seule la marque exige un écart : ajusté ⇔ montant retenu ≠ montant proposé. À la modification, la marque est recalculée : revenir au montant proposé n'est plus un ajustement. Dans la feuille, la proposition s'affiche barrée sous la mention « Montant ajusté ». |
| Bornes de saisie | Libellé non vide, ≤ 200. Montant HT > 0 et ≤ 10 000 000 : le zéro est refusé sur une ligne. Date au format AAAA-MM-JJ, sans borne temporelle — on régularise le passé comme on provisionne l'avenir. Tout écart 422 BILLING_LINE_INVALID. Seule exception : le prix unitaire forcé d'une campagne, où le zéro est légal (« facturé mais offert » n'est pas « inclus »). |
| Bouton jamais grisé | Conformément à la règle générale des formulaires, Facturer n'est désactivé que pendant l'enregistrement. Un clic incomplet marque chaque champ manquant. Les refus du serveur s'affichent dans la feuille, pas en toast sur l'écran qu'elle recouvre. |
Facturer un placement — le salaire fait le montant
Quand le barème applicable est un pourcentage — le taux surchargé du poste s'il existe, sinon celui du client —, la feuille demande le Salaire brut annuel : un pourcentage sans base ne calcule rien. Sur un barème au forfait, le champ n'apparaît pas : le montant est proposé d'emblée, demander un brut ne servirait à rien.
| Règle | Comportement |
|---|---|
| Pré-rempli, jamais imposé | Le champ arrive pré-rempli depuis le recrutement actif du candidat s'il en a un, vide sinon — et il reste modifiable dans les deux cas. Le barème s'applique même sans recrutement : c'est la base qui manquait, pas le contrat. |
| Recalcul à la frappe | Le montant se recalcule à chaque frappe — taux × brut annuel, arrondi au centime — et la trace du calcul se lit sous le montant : « Barème : 22 % × 42 000 € = 9 240 € », ou « Taux du poste (18 %) × … » quand la valeur vient de la surcharge. Saisir un autre montant barre la proposition et pose la marque ajusté. |
| UN seul champ pour DEUX usages | Le même champ sert au recrutement quand la case « Marquer aussi {candidat} comme recruté chez {client} » est cochée — l'aide sous le champ le dit. Demander deux fois le même salaire dans une même feuille, ce serait inviter à le saisir deux fois différemment. Le champ vit plus haut dans la feuille ; seule la date d'embauche apparaît sous la case. |
| Obligatoire ou facultatif | Le salaire est exigé dès que la case de recrutement est cochée (mêmes règles et mêmes messages que la modale de la fiche candidat : entier strictement positif 422 INVALID_SALARY). Sans la case, il reste facultatif — marqué comme tel : on peut toujours saisir le montant à la main. |
| Le salaire ne part pas avec la ligne | Ce qui est envoyé au serveur, c'est le montant retenu (et le montant proposé), jamais le salaire : la ligne de facturation n'a pas à porter une rémunération. Le brut annuel n'est stocké que là où il décrit quelque chose — sur le recrutement. |
| Marquer recruté dans la foulée | Sur la nature « Un placement » en création seulement. La case n'apparaît que si un candidat est choisi, que le destinataire est un vrai client du référentiel (un recrutement ne se rattache pas à un nom libre) et que le devis répond hasActivePlacement: false. Décochée par défaut, et remise à zéro dès qu'on change de nature, de destinataire ou de candidat. |
| Ordre et échec | Le recrutement part d'abord. S'il est refusé, aucune ligne n'est facturée — une ligne orpheline serait pire que l'échec. L'inverse est admis et n'est jamais compensé en silence : si la ligne échoue après un recrutement réussi, le recrutement reste et la feuille rouvre son erreur pour retenter la ligne. |
Facturer une campagne — au forfait ou aux copies rendues
Une campagne se facture de deux façons, et la feuille pose la question sous le titre « Comment facturer ? ». Les deux branches sont toujours affichées : celle qui ne s'applique pas reste visible, désactivée, avec sa raison. Cacher une branche laisserait croire qu'elle n'existe pas ; la montrer éteinte dit ce qu'il manque et où le corriger.
| Mode | Ce qu'il produit | Désactivé quand… |
|---|---|---|
| Une seule ligne (forfait) | UNE ligne, « Forfait — campagne {nom} », indépendante des copies rendues : une campagne sans aucune copie se facture ainsi. Elle ne porte ni candidat, ni prix unitaire, aucun détail à déplier, et sa date est celle du geste — rien dans la campagne ne date un forfait ; elle se corrige comme n'importe quelle date. | Jamais : sans forfait au barème, le montant se saisit simplement dessous — le barème propose, il n'impose pas. |
| Une ligne par copie | UNE ligne également — qui totalise les copies retenues (toutes cochées par défaut, décochables une à une) au prix unitaire retenu, et porte leur liste figée en détail dépliable (candidat, épreuve, jour). Sa date est celle de la copie la plus récente parmi les retenues. Le montant vaut copies × prix et reste écrasable : l'écart sera marqué « ajusté ». | La campagne n'a aucune copie rendue, ou toutes ont été décochées : « aucune copie à facturer » — la seule impossibilité de FAIT (le forfait existe pour facturer sans compter). |
| Règle | Comportement |
|---|---|
| Deux praticables ⇒ le recruteur choisit | Aucun mode n'est présélectionné : le forfait et les copies ne disent pas la même chose au client, l'outil n'a pas à trancher. Valider sans avoir choisi marque le champ — « Choisissez comment facturer cette campagne. » |
| Un seul praticable ⇒ retenu d'office | Le mode applicable est coché d'emblée ; l'autre reste affiché, éteint, avec sa raison. Un clic sur une branche éteinte ne change rien — sinon on choisirait un mode que le serveur refuserait. |
| Aucun praticable ⇒ à la main | Ni forfait au barème, ni copie rendue : les deux branches disparaissent au profit d'un simple Montant HT à saisir — « Aucun mode automatique sur cette campagne — indiquez le montant à facturer. » Le résultat est une ligne au forfait pour ce montant. |
| Prix unitaire modifiable | En mode aux copies rendues, un Montant unitaire facultatif peut forcer le prix ; laissé vide, le barème fait foi. Le zéro y est légal — « facturé mais offert » n'est pas « inclus ». |
| Campagne non facturable | Le poste visé par la campagne ne désigne aucun client (recrutement interne, ou client à définir), ou aucun prix n'est disponible dans le mode retenu 422 BILLING_LINE_INVALID. Une campagne sans copie rendue facturée aux copies répond 200 avec une liste vide : n'avoir rien à faire n'est pas une erreur, et un 201 annoncerait une création qui n'a pas eu lieu. Au forfait, la même campagne crée bien sa ligne 201. |
Lire l'état
Deux vues d'un même jeu de lignes, un même jeu de filtres — et l'export sert exactement ce que l'écran vient d'afficher : il n'y a pas de second calcul à maintenir.
| Règle | Comportement |
|---|---|
| Deux vues | Par client : une section par destinataire, son total, et le Total général en pied — non paginée, un état à facturer se lit ENTIER. Toutes les lignes : tableau à plat paginé (10 par page, la taille de toutes les listes), le destinataire dans la ligne puisque aucune section ne le nomme. Changer de vue revient à la page 1. |
| Filtres | Tous facultatifs : une recherche texte (libellé, nom du destinataire, nom du candidat — insensible à la casse et aux accents, déclenchée après une pause de frappe) et deux dates libres from / to (AAAA-MM-JJ), bornes incluses sur la date de l'événement. Chacune peut manquer : sans borne, on lit tout l'historique. Il n'y a pas de sélecteur de mois. Bornes mal formées ou inversées 422 BILLING_LINE_INVALID. |
| Groupement | Par nom de destinataire FIGÉ, pas par identité : deux lignes du même nom se regroupent même si la fiche client a été supprimée entre-temps. Destinataires par ordre alphabétique (collation française), lignes par date puis libellé. Les totaux viennent du serveur, annulées déjà déduites — l'écran n'additionne rien. |
| Facturer une campagne = UNE ligne | Le geste crée une seule ligne, de nature Campagne — au forfait (un montant, quel que soit le nombre de copies) ou aux copies rendues (les copies retenues × leur prix). L'ancien fonctionnement — N lignes de passation, re-groupées à la lecture en un « agrégat » sans identité — a disparu : il produisait un bloc que l'on ne pouvait ni modifier, ni annuler, ni suivre, et dont les filles portaient chacune un état séparé. Une campagne facturée est désormais une pièce comme les autres : son id, son état, son menu, sa place dans un lot. |
| Ce qui se DÉPLIE : les copies retenues | Une ligne de campagne aux copies rendues porte la liste des copies qu'elle totalise (candidat, épreuve, jour — tous figés à la création) et se déplie dessus. Ce détail n'est pas une ligne : ni montant propre, ni état propre, ni action — seule la ligne mère se modifie, s'annule et se suit. Un forfait, lui, ne totalise aucune copie : rien à déplier. |
| Les anciennes lignes ne sont PAS fusionnées | Les campagnes facturées avant la refonte ont produit de vraies lignes de passation, chacune avec son id, son état et sa possible annulation. Les fondre après coup en une seule détruirait ces faits : elles restent telles quelles et se lisent désormais une par une (nature Copie), l'agrégation qui les réunissait à l'écran ayant disparu. |
| Chaque ligne dit le FAIT | La ligne s'ouvre sur ce qu'elle facture, dérivé des colonnes figées — jamais du libellé libre, qui se modifie et ne prouve rien : une pastille de nature, l'objet (le candidat, ou la campagne), et la méthode de calcul (« 22 % × 42 000 € », « 3 copies × 18 € », « forfait global — indépendant du nombre de copies », « montant saisi »). Les deux vues (par client, à plat) racontent la même chose. |
| UNE pastille par NATURE, et sa FORME | Quatre natures — exactement les quatre choix de la feuille « Facturer » : Placement · Campagne · Copie · Ligne libre. Elle ne se devine plus d'un couple de colonnes : c'est le type figé de la ligne. La pastille dit en plus la forme quand il y en a une — « Campagne · forfait », « Campagne · copies », « Placement · % », « Placement · forfait » : « au forfait ou à l'unité ? » se pose sur chaque ligne, la pastille y répond seule. Les couleurs sont celles du système : une copie prend le jeton bibliothèque (le test), une campagne le jeton recrutement (corail), un placement le dégradé des deux, une ligne libre le neutre — le cabinet rethème les deux blocs, rien n'est écrit en dur. Une ligne d'AVANT la refonte qui porte une campagne sans nommer personne est un ancien forfait : elle se lit « Campagne · forfait », pas « Copie » — une vraie copie nomme toujours son candidat. |
| Les lignes s'ALIGNENT | Toutes les lignes d'un destinataire partagent UNE grille — dépliage · date · nature · objet et méthode · état · montant · actions : les colonnes sont résolues une fois pour la carte entière, si bien que tout tombe au même endroit d'une ligne à l'autre. Une grille par ligne calait au contraire chaque colonne sur le contenu de SA ligne, et la pastille d'état sautait d'une rangée à l'autre. Un plancher de largeur accorde aussi les cartes entre elles. Sur écran étroit, la rangée redevient une pile : mieux vaut replier que déborder. |
| Le libellé est DÉMOTÉ | Le libellé libre passe en seconde ligne — « Libellé sur l'état : « … » » — et seulement quand il s'écarte du fait : un libellé qui répète l'objet n'apprend rien. Une copie le garde dès qu'il diffère (lui seul porte le nom du test) ; une ligne libre ne le démote jamais — son libellé EST la ligne. L'impression et le CSV, eux, gardent le libellé en tête : c'est le document que le client lit, rien n'y change. |
| Pastilles | annulée sur une ligne mise de côté, hors référentiel sur l'en-tête de section quand le destinataire n'est pas un client du référentiel. La marque ajusté vit désormais à côté du montant — c'est le prix qu'elle qualifie — avec la proposition écartée, barrée, dessous quand elle est connue (« proposé 2 000 € »). Jamais « ajusté » sur une annulée : annulée l'emporte. |
| La pastille d'état est une LISTE DÉROULANTE | La pastille du cycle (« À facturer », « Facturée · F2026-041 », « Réglée le … »), à droite de la ligne, se clique (retour utilisateur) : elle n'offre que les crans que le serveur accepte, un à la fois — depuis « à facturer », Marquer facturée… (la feuille du n°) ; depuis « facturée », Marquer réglée ou Repasser « à facturer » ; depuis « réglée », Repasser « facturée ». Les gestes du cycle ont donc quitté le menu ⋯ (qui garde Modifier · Annuler · Supprimer) ; l'agrégat se pilote par SA pastille (ses filles suivent) et n'a plus aucun menu. Une annulée garde une pastille muette : son état se lit, il ne se pilote pas. Le bouton de section « Marquer facturées… » (le lot) ne change pas. |
| Lignes annulées | Présentes dans l'écran et dans l'export, barrées, avec leur motif — mais hors de tous les totaux (destinataire et général). |
| Export CSV | Servi par le serveur (mêmes filtres, même requête, même assemblage que l'écran) : BOM UTF-8 et point-virgule pour Excel FR, nombres à virgule décimale, fins de ligne CRLF, dates en ISO (sans ambiguïté jour/mois d'un tableur à l'autre). Colonnes : Client ; Date ; Type ; Libellé ; Candidat ; Quantité ; Prix unitaire ; Montant HT ; État ; N° facture ; Échéance ; Motif — l'État porte le cycle (À facturer / Facturée / Facturée — en retard / Payée / Annulée, l'annulation prime). Seules les lignes de premier niveau sont exportées — un agrégat dit « 12 copies à 35 € », ses filles restent à l'écran. Ligne de total finale hors annulées. |
| Export PDF | Impression du navigateur, sans rendu serveur : chrome, filtres et actions masqués, en-tête révélé — titre Facturation, Période : {du} → {au} en dates longues (ou « toutes les lignes » si aucune borne) et Généré le {jour}. La période s'y nomme absolument — une feuille archivée doit se relire des mois plus tard. Une section de destinataire ne se coupe pas entre deux pages. |
La vie d'une ligne
Quatre gestes, tous à la main du recruteur. Rien n'est irréversible sauf Supprimer, qui est justement le geste de l'erreur de saisie. Chaque écriture est suivie d'une relecture complète de l'état : rien n'est deviné côté écran.
| Geste | Comportement |
|---|---|
| Une PASSATION nomme sa copie | « Une passation d'un test, c'est une épreuve » : une ligne de cette nature facture UNE copie rendue, elle doit donc dire laquelle. POST /api/billing/lines avec kind: SITTING et sans evaluationId est refusé 422 BILLING_LINE_INVALID — le champ cesse d'être facultatif pour cette seule nature (les autres n'en portent pas ; une ligne de campagne facture ses copies par son détail). L'invariant se juge À L'ÉCRITURE, jamais en base : evaluation_id reste ON DELETE SET NULL, si bien qu'une évaluation supprimée plus tard laisse la ligne sans lien — et elle se relit sans erreur, ses noms figés prenant le relais. Une contrainte SQL rendrait la base incohérente au premier effacement légitime. |
| Modifier | Le LIBELLÉ, le MONTANT et la DATE — rien d'autre (décision produit) : une coquille dans ce que le client LIT, une négociation qui bouge, une date mal saisie se rattrapent ; une pièce mal QUALIFIÉE, elle, se supprime et se refait — corriger après coup la nature, le destinataire, le candidat ou la copie fabriquerait une ligne qui dirait autre chose que ce qu'on a facturé. La feuille l'énonce dans son sous-titre, et LIT ce qu'elle ne change pas — nature, objet, méthode, destinataire — avec les mots exacts de l'écran d'état (même dérivation, pas une seconde formulation). Le corps du PATCH ne porte donc que label, amount et eventOn ; le serveur en accepterait davantage, c'est l'écran qui décide. Une ligne annulée reste modifiable : on corrige AVANT de remettre. |
| Annuler | Sa propre fenêtre (récapitulatif + motif facultatif, ≤ 300). La ligne reste visible, barrée, motivée, hors totaux et sort de l'agrégation. Ce qui est annulé, c'est la facturation, jamais l'événement : la copie reste rendue, le recrutement reste vrai. Deux fois 422 ALREADY_CANCELLED — le premier motif fait foi. |
| Remettre | Action directe, sans fenêtre : la ligne redevient facturable, date et motif d'annulation repassent à vide. Aucun historique d'annulation n'est conservé — décision produit assumée. Sur une ligne qui n'est pas annulée 422 BILLING_LINE_INVALID : il n'y a rien à remettre. |
| Supprimer | Confirmation danger → DELETE 204, suppression réelle et définitive. Réservé à l'erreur de saisie : la ligne n'aurait jamais dû exister. Possible qu'elle soit annulée ou non. Pour une ligne qui a bien eu lieu mais qu'on ne facture pas, c'est Annuler. |
| Sur une ligne de campagne | Les gestes sont ceux de toute ligne — modifier, annuler, remettre, supprimer, et le cycle de vie —, car c'en est une. Ses copies retenues ne se corrigent pas à l'unité : la sélection se fait au moment de facturer ; pour la changer, on supprime la ligne et on refacture. La suppression emporte le détail. |
| Aucune cascade depuis le recrutement | Annuler ou supprimer un recrutement (§10) ne touche aucune ligne : les deux objets vivent leur vie. Une embauche qui n'a pas tenu se solde en annulant aussi la ligne, ici — c'est une décision commerciale, pas une conséquence mécanique. |
14Le passage candidat
Trois surfaces publiques, sans compte ni mot de passe : l'épreuve, le dossier et le parcours de campagne. Le lien porte l'identité.
| Règle | Comportement |
|---|---|
| Une question à la fois | Chaque question a son propre chronomètre. Valider est définitif : pas de retour en arrière. |
| Chronomètre d'une question | À son terme, la question passe automatiquement à la suivante. Le passage, lui, continue. |
| Une seule fois — annoncé | Quand l'invitation a été envoyée en passage en une seule fois (§11), l'accueil prévient avant l'engagement : « Ce test se passe en une seule fois : une fois commencé, vous disposez de N minutes, sans pause possible. » En reprise libre, rien n'est annoncé — il n'y a rien à annoncer. |
| Une seule fois — temps écoulé | Le serveur clôt la session avec les réponses déjà validées et sert l'écran Temps écoulé : plus rien ne se saisit, et la copie part telle quelle au recruteur. Rien n'est perdu de ce qui avait été validé. |
| Reprise | Une session interrompue se reprend où elle s'est arrêtée ; l'ordre mélangé reste le même. Sur une invitation envoyée en une seule fois, revenir après le temps imparti ne rouvre rien : la session se clôt à ce moment-là. |
| Dossier | Pas de chronomètre, brouillon enregistré au fil de l'eau, remise en une fois. |
| Parcours de campagne | Un lien unique donne accès aux épreuves successives et indique celles déjà rendues. |
| Confort | Thème clair ou sombre, modifiable à tout moment pendant le passage. |
| La marque du cabinet | Quand le plan inclut la marque blanche (§19), /t/ et /p/ portent le logo et le nom du cabinet en en-tête et dans le titre de l'onglet ; le candidat sait qui le fait passer. Sinon — plan sans la fonction, ou cabinet qui n'a rien configuré — la page garde l'identité Evalixo, sans erreur. Les couleurs du cabinet ne s'appliquent pas ici, sa police oui (§18). |
15Résultats & correction
Il n'y a pas d'écran « liste des résultats » : les copies se lisent depuis la fiche du candidat. Le rapport détaille la copie question par question, regroupée par compétence.
| Règle | Comportement |
|---|---|
| Score recalculé | Jamais stocké : recalculé à la lecture depuis les réponses. Corriger une réponse libre met le score à jour immédiatement. |
| Score provisoire | Tant qu'une réponse libre attend sa correction, le score est marqué provisoire. |
| Copie figée | Chaque réponse conserve la question telle qu'elle a été passée. Réviser la banque ne réécrit aucun rapport. |
| Correction | Le recruteur attribue les points d'une réponse libre (0 au barème) et peut joindre un commentaire. Les copies à corriger se retrouvent depuis le bloc À traiter du tableau de bord — le rapport ne propose plus de « copie suivante ». Une note posée par un tiers depuis un partage en droit Correction porte, à côté d'elle, une pastille neutre « Corrigé par le client » ; une note du cabinet n'affiche rien, et les rapports antérieurs à cette trace non plus. |
| Correction assistée | Sur demande, l'IA propose une note et sa justification pour une réponse libre, ou corrige le rapport entier. Elle propose, le recruteur valide, et la note reste modifiable ensuite — le détail en §16. |
| Export | Le rapport s'exporte en PDF. Le pied de page du document imprimé porte la marque du cabinet quand son plan inclut la marque blanche — « Rapport établi par {nom du cabinet} … », sans mention d'Evalixo ; sinon il garde le pied Evalixo (§18). |
Journal de surveillance
Sous le détail des réponses, le rapport reconstitue le passage minute par minute : l'horodatage du consentement, les compteurs par type d'incident, puis la chronologie — chaque incident renvoie à la question affichée à cet instant, et les captures webcam et écran s'intercalent à leur heure.
| Incident journalisé | Déclencheur |
|---|---|
| Sortie d'onglet ou de fenêtre | Le candidat quitte la page du test. |
| Sortie / retour en plein écran | Le plein écran est interrompu, puis rétabli. |
| Collage bloqué | Tentative de coller du texte dans une réponse. |
| Copie bloquée | Clic droit ou Ctrl+C sur l'énoncé. |
| Second écran détecté | Un écran additionnel est présent. |
| Le passage a changé d'appareil | Le passage a continué depuis un autre appareil que celui qui l'avait commencé — le lien a été ouvert ailleurs. Uniquement si la mesure était active à l'envoi (§11). |
| Captures | Photos webcam et copies d'écran prises pendant le passage. |
Origine du passage
Quand le passage a été repris depuis un autre appareil, le journal ouvre un bloc Origine du passage. Il n'apparaît qu'à partir de deux origines : un passage resté sur un seul appareil — le cas normal — n'affiche rien, pour ne pas ajouter de bruit à un rapport qui n'a rien à signaler.
| Élément | Ce qu'il dit |
|---|---|
| Le bandeau | À deux origines : le passage a commencé sur un appareil et s'est poursuivi sur un autre. Au-delà, la phrase annonce le nombre d'appareils. Dans les deux cas, à vérifier avec le candidat. |
| Une ligne par origine | Origine 1, Origine 2… : la famille d'appareil en clair (ordinateur, mobile, tablette, appareil inconnu) et la plage horaire pendant laquelle elle a répondu. Les origines au-delà de la première sont mises en évidence. |
| Réponses en alternance | Mention renforcée quand les plages de deux appareils se chevauchent — le signal le plus sérieux : ce n'est plus une reprise, ce sont deux passages entremêlés. Au-delà de deux origines, la mention dit « au moins deux » : le chevauchement se juge par paire, rien ne garantit que toutes se recouvrent. |
Règles de gestion
| Règle | Comportement |
|---|---|
| On signale, jamais on ne bloque | Aucun passage n'est interrompu, aucune copie n'est invalidée. Un changement d'appareil peut être parfaitement légitime : batterie vide, plantage du navigateur, poste indisponible. Le rapport le dit, le recruteur décide. |
| Ce n'est pas une preuve | Le bloc établit qu'un autre appareil a écrit, rien de plus : il ne dit ni qui, ni où, ni pourquoi. Il appelle une vérification avec le candidat, pas une conclusion. |
| Rien n'est conservé en clair | Seules des empreintes sont comparées entre elles. Aucune adresse ni aucun matériel n'est enregistré ni affiché — ni pour le recruteur, ni pour un tiers, ni dans un export. La mesure ne parle que d'appareil. |
| Mesure figée à l'envoi | Comme toutes les mesures anti-triche : activée à l'envoi ou pas du tout. Un passage parti sans elle n'a pas d'origines à montrer, même a posteriori. |
| Visible aussi côté tiers | Le bloc part avec le rapport partagé quand la surveillance est incluse (§12) : le tiers voit le même signal que le recruteur, sans qu'aucun autre candidat n'y soit nommé. |
16Assistance IA
L'IA propose, l'humain décide. Elle ne pose aucun verdict, n'envoie rien à un candidat et n'enregistre rien dans la bibliothèque sans un geste explicite du recruteur. Une note qu'elle a suggérée est une note comme les autres : elle reste modifiable à tout moment, y compris longtemps après.
Elle n'est jamais une destination : aucune entrée de menu, aucune conversation. Un geste, sur l'écran où le travail se fait déjà — le rapport, la campagne, la banque de questions, la banque de tests.
Tout ce que l'IA propose porte le glyphe ✦ et le liseré dégradé cyan → violet → vert. Cette signature ne sert à rien d'autre dans l'application : là où elle n'est pas, l'IA n'est pas intervenue. Elle échappe volontairement au thème du cabinet (§18) — un geste d'IA doit se reconnaître à l'identique sur un écran Résultats et sur un écran Bibliothèque.
Où l'IA se pose
| Écran | Le geste proposé |
|---|---|
| Rapport d'une copie | Une suggestion de note par réponse libre, et la correction automatique du rapport entier. |
| Rapport partagé à un tiers | Les mêmes suggestions, si et seulement si le partage porte le droit de correction (§12). Sinon, aucune trace d'IA. |
| Détail d'une campagne | La file des corrections en attente, tous candidats confondus. |
| Mes questions | La génération de brouillons de questions. |
| Mes tests | La génération d'un test complet en brouillon. |
| Paramètres → IA | Activation, correction automatique en fin de passage, quotas et consommation. |
Les catalogues officiels n'offrent aucune génération : l'IA écrit dans la bibliothèque du cabinet, jamais dans celle de la plateforme. Le tableau de bord, les candidats et les écrans d'administration n'en portent pas non plus.
Correction assistée d'une réponse libre
| Règle | Comportement |
|---|---|
| Qui peut la demander | Seul qui peut déjà poser une note : le recruteur du cabinet, ou le tiers dont le partage porte le droit de correction. Un lecteur en simple relecture ne voit pas le bouton. |
| Le geste | ✦ Proposer une correction, à côté de Corriger sur une réponse en attente, dans l'éditeur de correction ouvert, et à côté de Modifier sur une réponse déjà notée — une note posée n'est pas une note figée. |
| Ce qui est proposé | Une note sur le barème de la question (les demi-points sont admis) et une justification rédigée. Rien n'est enregistré à ce stade. |
| Les trois issues | Valider écrit la note telle quelle. Ajuster… verse la proposition dans les champs de correction manuelle, points et commentaire compris, et rend la main. Ignorer referme sans rien écrire. |
| Traçabilité | Une note issue de l'IA porte la pastille ✦ corrigée avec l'IA sur sa ligne du rapport. La modifier ensuite à la main est toujours possible. |
| Suggestion mémorisée | Redemander une suggestion sur la même réponse ressort celle qui a déjà été calculée, immédiatement et sans consommer de quota. On peut donc rouvrir un rapport autant de fois qu'on veut. |
| Copie blanche | Une réponse vide n'est pas notée par l'IA : elle se corrige à la main. |
| Score | Inchangé : le score reste provisoire tant qu'une réponse libre attend sa note, et se recalcule à chaque note posée (§15). |
Correction automatique d'un rapport
| Règle | Comportement |
|---|---|
| Quand le geste apparaît | ✦ Corriger automatiquement n'est proposé en tête de rapport que s'il reste au moins une réponse libre à corriger. |
| Ce qui est annoncé | La fenêtre dit combien de questions seront notées et prévient que les notes seront enregistrées sans validation individuelle. On confirme, ou on renonce. |
| Pendant | Une progression réponse par réponse (« 3 réponses sur 7 corrigées »). La fenêtre reste ouverte jusqu'au bout — elle le demande explicitement. |
| Après | Chaque note reste ajustable depuis le rapport, une par une, comme n'importe quelle correction manuelle. |
| Interruption | Les notes déjà enregistrées sont conservées ; les réponses non traitées restent simplement en attente. |
| Une à la fois | Deux corrections automatiques ne peuvent pas tourner sur le même rapport. |
L'option « Corriger automatiquement en fin de passage »
Réglage d'organisation, désactivé par défaut (§18). Activé, il déclenche la correction dès qu'un candidat termine son épreuve, sans que personne ne l'ait demandé — la nuit et le week-end compris. Deux conséquences à assumer : la consommation mensuelle monte toute seule, et un rapport peut arriver déjà pré-corrigé. Le rapport le dit alors à l'ouverture. Les notes restent ajustables.
File de corrections d'une campagne
| Règle | Comportement |
|---|---|
| Où | Sur le détail de la campagne (§9), sous l'avancement — et seulement si au moins un passage est terminé. |
| Ce qu'elle enchaîne | Les questions libres en attente de cette campagne, tous candidats confondus, l'une après l'autre : « Question 3 sur 12 », le nom du candidat, l'énoncé, la réponse, les consignes de correction s'il y en a. |
| Le geste | La même carte de suggestion que sur le rapport, avec trois sorties : Valider, Ajuster… — points et commentaire se modifient sur place, sans quitter la file — et Passer. |
| Ce qui est passé | Reste à corriger : passer n'est pas écarter. Le bilan de fin le rappelle (« 9 questions corrigées, 3 passées »). |
| File vide | Message explicite : aucune question libre en attente sur cette campagne. |
Génération de questions
Depuis Mes questions (§5). Les sept types sont générables — QCM, choix multiple, réponse libre, échelle, remise en ordre, association, texte à trous.
| Champ | Ce qu'il pilote |
|---|---|
| Type de question | Un des sept types. Il est figé sur les brouillons produits. |
| Domaine | Obligatoire ; figé lui aussi sur le brouillon. |
| Compétences | Facultatives, saisies en étiquettes. Dès qu'il y en a une, un réglage Cibler arbitre entre ces compétences uniquement et élargir au domaine. Sans compétence saisie, l'IA couvre les compétences les plus représentatives du domaine. |
| Difficulté | Facile, moyen ou difficile. |
| Nombre de brouillons | De 1 à 5 par demande. |
| Précision | Consigne libre (« orienter vers la gestion des erreurs », « viser un profil junior »). |
Le brouillon, et les trois décisions
| Règle | Comportement |
|---|---|
| Rien n'entre tout seul | Une question générée arrive en brouillon. Tant qu'elle n'est pas adoptée, elle n'est ni dans la banque, ni utilisable dans un test. |
| Adopter | Enregistre la question dans la bibliothèque du cabinet, telle quelle. |
| Relire | Ouvre le brouillon dans l'éditeur de question habituel. Le domaine et le type sont fixés ; tout le reste se modifie librement — énoncé, réponses, barème, compétences. La bonne réponse est déjà cochée : c'est bien ce qu'il faut relire. |
| Écarter | Abandonne le brouillon. |
| Ne rien décider | Le brouillon reste en attente — c'est ce qui rend honnête le compteur de reprise. |
| Origine visible | La banque expose un filtre Source — IA ou manuelle : on retrouve à tout moment ce qui a été écrit avec l'IA. |
| Régénérer remplace | Relancer une génération perd les brouillons non traités. L'application le dit et demande confirmation, avec leur nombre. |
Génération d'un test entier
Depuis Mes tests (§6). L'IA compose un test complet — ses questions comprises — au lieu de les produire une à une.
| Champ | Ce qu'il pilote |
|---|---|
| Domaine et métier visé | Les deux sont obligatoires, le métier se choisit parmi ceux du domaine retenu. C'est ici que le métier se déclare : une question n'en porte pas, un test si (§6). |
| Compétences | Facultatives, avec le même arbitrage Cibler que pour les questions. |
| Difficulté | Difficulté visée de l'ensemble. |
| Nombre de questions | De 3 à 15 (8 par défaut). |
| Types de questions | Variée — recommandé, et proposé en premier : l'IA répartit elle-même les types. Sinon, on impose les types voulus. |
| Précision | Consigne libre, comme pour les questions. |
Relecture du brouillon de test
| Règle | Comportement |
|---|---|
| Le récapitulatif | En tête : le nom du test (modifiable), son domaine, son métier, sa difficulté, le nombre de questions et la durée estimée, puis l'avancement de la relecture (« 5 sur 8 décidées »). |
| Question par question | Trois décisions : Garder telle quelle, Relire — l'éditeur habituel — ou Écarter. |
| Adopter le test | Enregistre le test et ses questions dans la bibliothèque du cabinet. Il faut avoir tranché sur chaque question, et en garder au moins une : un test vide ne s'envoie pas. |
| Rien n'est envoyé | Un brouillon de test ne part à aucun candidat. L'envoi reste le geste normal, après adoption (§10). |
| Un seul à la fois | Un seul brouillon de test par recruteur : en relancer un demande confirmation. |
| Échec en cours d'adoption | Les questions déjà enregistrées sont conservées dans la banque. |
Brouillons persistants
Les brouillons ne vivent pas dans le navigateur : ils survivent à la fermeture de la fenêtre, au rafraîchissement de la page et au changement de session ou de poste. Une génération lancée continue même si l'on ferme la fenêtre.
| Règle | Comportement |
|---|---|
| Où on les retrouve | Sur le bouton ✦ lui-même, qui change de libellé : Reprendre les brouillons (4) côté questions, Reprendre le brouillon de test côté tests. Il n'y a pas d'écran « mes brouillons » à aller chercher. |
| Génération en cours | Le bouton l'annonce également (Génération en cours…), et la retrouve après un rafraîchissement. |
| Ils sont personnels | Un brouillon appartient au recruteur qui l'a demandé ; il n'apparaît pas chez ses collègues. |
| Ils ne s'accumulent pas | Les brouillons laissés sans décision finissent par expirer, et leur nombre en attente est plafonné : au-delà, l'application demande d'en traiter quelques-uns avant d'en générer d'autres. |
Réglages d'organisation
Onglet IA des Paramètres (§18). Les réglages valent pour toute l'organisation, pas pour un recruteur.
| Réglage | Effet |
|---|---|
| IA activée | Actif par défaut. Coupé, aucune fonctionnalité d'IA n'est proposée nulle part : ni suggestion de correction, ni génération. |
| Corriger automatiquement en fin de passage | Inactif par défaut. Voir plus haut. |
| Quotas mensuels | Quatre plafonds distincts — suggestions de correction, corrections automatiques, générations de questions, générations de tests. Champ vide = pas de limite ; 0 = usage interdit. |
| Consommation du mois | Un compteur par usage, avec sa jauge et son reste, et la date de bascule du mois. Les usages non consommés ne sont pas affichés. |
| Ce qui compte pour un | Une suggestion se compte à la réponse notée. Une correction automatique, une génération de questions ou de test se comptent au lot lancé : un geste, une unité, quel que soit le nombre de questions à l'intérieur. |
| Ce qui ne coûte rien | Une demande qui échoue ne consomme rien, et une suggestion déjà obtenue redemandée non plus. |
| Le mois | Un mois calendaire, identique pour toute l'organisation quel que soit le fuseau de chacun. Rien n'est « remis à zéro » : la période bascule. |
| Le tiers correcteur | Un tiers qui demande une suggestion depuis un rapport partagé consomme le quota du cabinet qui lui a ouvert le partage. |
Ce qui peut refuser
| Situation | Ce que voit le recruteur |
|---|---|
| IA désactivée | Message renvoyant vers Réglages → IA. Aucun bouton ✦ n'est affiché de toute façon. |
| Quota atteint | Le message nomme l'usage concerné, le plafond atteint et la date de bascule du mois — les autres usages restent disponibles. |
| Trop de demandes d'un coup | Invitation à réessayer dans un instant. |
| Indisponibilité passagère | Le travail en cours n'est pas perdu : on réessaie. |
Elle ne pose pas de verdict sur un candidat, ne classe personne, n'écarte personne. Elle ne modifie aucune copie rendue — un rapport reste figé tel qu'il a été passé (§15). Elle n'écrit pas dans les catalogues officiels, ne remplace aucune note sans qu'on le lui demande, et n'empêche jamais de corriger à la main.
17Tableau de bord
Une seule page d'entrée, orientée action.
| Bloc | Contenu |
|---|---|
| À traiter | Les copies à corriger et les dossiers reçus, avec le geste direct. |
| Le pouls · 30 jours | Tests envoyés, taux de complétion, score moyen, en attente de correction. |
| Recrutements en cours | Les campagnes actives, leur avancement et leur échéance. |
| Activité récente | Le fil des événements — chaque ligne ouvre l'objet concerné. |
| Entonnoir | Invités → commencés → terminés sur 30 jours. |
18Paramètres
E-mails aux candidats
Quatre modèles éditables : Invitation, Relance, Questionnaire, Parcours de campagne. Les variables entre accolades sont remplacées à l'envoi et un aperçu se met à jour en direct.
Le nom d'expéditeur de ces e-mails — et de ceux qui portent un lien de partage à un tiers — suit la marque blanche : c'est le nom du cabinet quand son plan l'inclut, « Evalixo » sinon. L'adresse d'envoi, elle, ne change jamais, et aucun logo n'est inséré dans les e-mails à ce stade (voir Apparence ci-dessous).
IA
Un onglet dédié règle ce que l'IA a le droit de faire pour l'organisation : son activation, la correction automatique en fin de passage, les quotas mensuels par usage et le suivi de la consommation du mois. Le détail est en §16.
Apparence
La marque blanche d'Evalixo, c'est le logo et le nom du cabinet, posés sur tout ce que voient les candidats et les tiers. Les trois couleurs de bloc et la police du même écran ne changent pas de rôle : elles habillent l'espace du recruteur — la police atteignant, seule, les pages candidat. Les couleurs ne s'appliquent pas aux pages publiques : c'est une décision produit, pas une limite technique (voir l'encadré plus bas).
Ce qui se règle
| Réglage | Règle |
|---|---|
| Logo | PNG ou JPEG, 300 Ko au plus. L'image est redimensionnée à l'enregistrement — on dépose le fichier tel qu'on l'a, l'écran s'occupe du reste. Un logo posé se retire depuis la même zone. |
| Nom de marque | Le nom affiché aux candidats et aux tiers. Il est prérempli avec le nom du cabinet (§3) et se modifie librement — un cabinet peut évaluer sous une enseigne différente de sa raison sociale. Vidé, il retombe sur le nom du cabinet : la marque n'est jamais vide. |
| Aperçu | Un aperçu fidèle montre le rendu — l'en-tête tel que le candidat le verra, avec le logo et le nom — pendant le réglage, avant enregistrement. |
| Police | Habille l'espace du recruteur et les pages candidat : c'est le seul réglage typographique qui franchit la porte publique. |
| Trois couleurs de bloc | Une par groupe du menu — Bibliothèque (violette par défaut, écrans Tests et Questions), Questionnaires (verte par défaut), Recrutement (corail par défaut : Campagnes, Postes, Clients, Candidats et les rapports, qui se lisent toujours depuis un candidat). Il n'y a pas de « couleur de la marque » : l'accent d'un écran suit le bloc où l'on se trouve — boutons, onglets actifs, rails, en-têtes pleins, halos de focus. L'aperçu montre les trois rails côte à côte pendant le réglage. |
| Réinitialiser | Un seul bouton, et il ramène TOUT à l'identité Evalixo : les trois couleurs, la police, le nom de marque — et le logo, purgé. Il ne reste rien du cabinet après le geste, sur aucune surface. |
| Portée | Réglage de cabinet : il vaut pour tous ses recruteurs et pour tous les liens qu'ils envoient. Il n'existe pas de marque par recruteur, par campagne ni par client. |
Où la marque apparaît
Quand le plan du cabinet inclut la marque blanche (§19) et que le cabinet a posé sa marque, le logo et le nom remplacent l'identité Evalixo sur les surfaces suivantes.
| Surface | Ce qui porte la marque |
|---|---|
Passage candidat /t/ | En-tête de la page (logo + nom) et titre de l'onglet du navigateur. |
Parcours de campagne /p/ | Idem : en-tête et titre d'onglet, sur toute la traversée du parcours. |
Partage de résultat /r/ | Idem, pour le tiers qui lit des candidats et leurs épreuves (§12). |
Partage de test /s/ | Idem, pour le tiers qui relit ou compose un test (§12). |
| Rapport imprimable | Le pied de page devient « Rapport établi par {nom du cabinet} … » : plus aucune mention d'Evalixo sur le document que le client reçoit. |
| E-mails aux candidats et aux tiers | Le nom d'expéditeur devient celui du cabinet. L'adresse d'envoi ne change pas — elle reste celle d'Evalixo — et il n'y a pas de logo dans les e-mails à ce stade. Vaut pour les quatre gabarits candidats comme pour les envois de partage. |
| Espace recruteur | Le logo et le nom s'y affichent aussi, aux côtés des couleurs de bloc et de la police — mais c'est l'espace du cabinet, pas une surface publique. |
Un cabinet qui n'a rien configuré, ou dont le plan n'inclut pas la marque blanche, voit toutes ces surfaces garder l'identité Evalixo — logo, nom, titre d'onglet, nom d'expéditeur, pied du rapport. Aucune erreur, aucun trou, aucun encart « logo manquant » : le repli est un état normal, pas une panne. Le repli se joue réglage par réglage : un cabinet qui a posé un logo mais pas de nom de marque affiche son logo et le nom du cabinet.
En Free — ou sur tout plan sans marque blanche — l'écran Apparence n'est pas fermé : le cabinet y prépare sa marque, la dépose, la voit dans l'aperçu, et l'écran le dit — elle s'appliquera aux pages candidat et tiers à la montée de gamme, sans rien avoir à refaire. C'est l'exception à la règle « fonction non incluse ⇒ geste fermé » de §19 : ici on prépare, on n'expose pas.
Décision produit : les trois couleurs de bloc ne s'appliquent pas aux pages
/t/, /p/, /r/ et /s/. Elles disent
où l'on est dans une application qu'on parcourt tous les jours ; un candidat voit un
écran, une fois, et n'a aucun bloc à distinguer. Ce qui l'intéresse — qui me fait passer
ce test — tient dans le logo et le nom. Les aplats de
ces pages gardent donc les couleurs Evalixo, quel que soit le réglage du cabinet.
Erreurs
| Situation | Ce que voit le recruteur |
|---|---|
| Logo trop lourd | Le fichier dépasse 300 Ko : le dépôt est refusé par un message clair qui rappelle la limite — « Logo trop lourd », avec le poids accepté. Le logo en place n'est pas touché. |
| Format non pris en charge | Autre chose qu'un PNG ou un JPEG : refus explicite nommant les deux formats acceptés. |
| Fichier illisible | Une image corrompue est refusée de la même façon ; rien n'est enregistré. |
| Aucun refus silencieux | Un dépôt refusé ne modifie rien : l'écran garde l'état précédent et le recruteur peut redéposer aussitôt. |
Les écrans qui n'appartiennent à aucun bloc gardent l'indigo par défaut, non réglable : le tableau de bord, les paramètres et les écrans d'administration. La barre latérale et la barre du haut aussi : le cadre de l'application ne change pas de couleur quand on passe d'un monde à l'autre — c'est lui qui dit qu'on est revenu au même endroit. Dans la barre latérale, seule l'entrée active porte la couleur de son bloc.
Les rails et pastilles gardent exactement la teinte choisie. Seuls les aplats (boutons, en-têtes pleins) sont assombris juste assez pour que le texte reste lisible — et si la teinte est vraiment lumineuse, c'est le texte du bouton qui passe au sombre. Une note discrète l'annonce pendant le choix. Une bibliothèque en jaune donne donc des rails jaunes et des boutons lisibles.
Les écrans vus par le candidat portent le logo, le nom de marque et la police du cabinet. Le candidat ne navigue pas dans vos blocs : il voit un écran, une fois — les aplats y gardent les couleurs Evalixo par défaut.
Il n'y a pas de « couleur des tests » séparée : un test fait partie de la bibliothèque, il en porte donc la couleur. Le réglage « Bibliothèque » déplace d'un coup toute référence à un test dans l'application — rails et pastilles de test, mini-rail des cartes « Résultats partagés », lignes des sélecteurs d'épreuve, panneaux Tests d'un candidat ou d'une campagne, référence test du fil « Demandes / Partages ».
Échappent au thème les couleurs sémantiques (danger, avertissement, succès, pastilles de domaine et de difficulté) et les couleurs du fil d'échanges d'un partage — noms colorés par auteur, jalons de la conversation : un fil doit se lire pareil des deux côtés du lien. La signature de l'IA y échappe aussi (§16) : elle doit se reconnaître à l'identique d'un écran à l'autre.
Le filet qui longe un groupe et l'entrée sélectionnée portent la couleur de leur bloc : violet Bibliothèque, vert Questionnaires, corail Recrutement, dégradé Collaboration. Le fond de la barre, lui, reste indigo.
La Collaboration est le seul bloc qui tient les deux bouts — ce qu'on confie (la Bibliothèque) et à qui on le confie (le Recrutement). Son identité est donc un dégradé de la couleur Bibliothèque à la couleur Recrutement, présent à trois endroits : l'entrée Demandes / Partages du menu quand elle est sélectionnée, le bouton « Ajouter une collaboration », et le soulignement de l'onglet actif de l'écran. Les libellés restent à l'encre forte, lisibles en thème clair comme en sombre.
Le dégradé se construit sur les deux réglages : changer l'un ou l'autre déplace la borne correspondante. Les autres accents pleins de cet écran (liens, halos de focus, boutons) prennent la couleur Bibliothèque — la borne gauche, celle qui dit ce dont il s'agit.
Les e-mails et l'apparence appartiennent au cabinet : ils s'appliquent à tous ses recruteurs. Le compte et les notifications appartiennent à l'utilisateur.
19Plans & abonnement
Chaque cabinet est rattaché à un plan qui borne son usage de la plateforme : combien de recruteurs y travaillent, combien d'épreuves partent chaque mois, quelle quantité de contenu la banque accueille, et quelles fonctions lui sont ouvertes. Quatre plans, du plus léger au plus complet — Free, Starter, Growth et Scale : plus le plan monte, plus les plafonds s'élèvent et plus de fonctions s'ouvrent.
Un cabinet créé en self-service démarre sur Free (§3) — et le contenu d'exemple posé à sa création ne consomme aucun quota. Le cabinet monte lui-même sur Starter ou Growth, par carte bancaire, depuis son écran « Abonnement & consommation » ; Scale se négocie et s'active par l'équipe Evalixo. Les bornes d'un plan, elles, ne se règlent jamais côté cabinet : c'est l'administrateur de la plateforme qui tient la grille (§20).
La grille
| Plan | Pour qui | Prix | Comment il s'obtient |
|---|---|---|---|
| Free | Pour découvrir Evalixo, sans limite de temps. | 0 € / mois | À la création du compte, sans geste et sans carte bancaire. C'est aussi le plan sur lequel on retombe après une résiliation. |
| Starter | Indépendant ou premier recrutement. | 29 € / mois | Self-service : paiement par carte depuis l'écran d'abonnement, facturé mensuellement, sans engagement. |
| Growth le plus choisi | Cabinet ou équipe qui recrute en continu. | 89 € / mois | Idem Starter : carte, mensuel, sans engagement. |
| Scale | Multi-équipes, volume et exigences sur mesure. | Sur devis | Sur devis : on prend contact, l'équipe Evalixo active l'offre et envoie les factures par e-mail. |
TVA non applicable — art. 293 B du CGI. Evalixo relève de la franchise en base de TVA : aucune taxe n'est collectée, et aucune TVA n'est ajoutée au paiement. Le prix de la grille est donc le montant réellement débité — un Starter à 29 €, c'est 29 € sur la carte. La mention légale figure sur la facture émise par Stripe, qu'on retrouve dans le portail client.
Un plan peut aussi être posé à la main par l'équipe Evalixo, quel qu'il soit — offre négociée, geste commercial, dépannage. Le cabinet en profite exactement comme s'il l'avait acheté ; simplement, il n'a rien à payer en ligne (voir « Une offre gérée par Evalixo » plus bas).
Ce qu'un plan borne
| Limite | Ce qu'elle compte |
|---|---|
| Sièges recruteurs | Le nombre de comptes recruteurs que le cabinet peut faire vivre. Au plafond, on n'en ajoute plus tant qu'un siège ne s'est pas libéré ou que le plan n'a pas grandi. |
| Passages par mois | Le nombre d'épreuves envoyées sur le mois en cours. Compteur mensuel. |
| Tests créés | La taille de la banque de tests du cabinet (§6). Plafond de stock, pas de rythme. |
| Questions créées | La taille de la banque de questions (§5). Plafond de stock lui aussi. |
| Candidats | Le nombre de candidats enregistrés dans le cabinet (§10). |
| Quotas IA | Des plafonds d'IA — suggestions de correction et générations de questions ou de tests — portés par le plan, en plus des quotas fins que le cabinet peut resserrer lui-même dans Paramètres → IA (§16). Compteurs mensuels. |
Les plafonds de stock (tests, questions, candidats, sièges) comptent ce qui existe à l'instant ; les plafonds mensuels (passages, IA) comptent ce qui a été consommé depuis le début du mois.
Fonctions incluses ou non
Au-delà des compteurs, un plan ouvre ou ferme des fonctions entières :
| Fonction | Ce qu'elle recouvre |
|---|---|
| Marque blanche | Le logo et le nom du cabinet sur ce que voient les candidats et les tiers — pages /t/, /p/, /r/, /s/ (en-tête et titre d'onglet), pied du rapport imprimable, nom d'expéditeur des e-mails (§18). Sans elle, ces surfaces gardent l'identité Evalixo, sans erreur. L'écran Apparence reste accessible quel que soit le plan : le cabinet y prépare sa marque, elle s'appliquera à la montée de gamme. |
| Collaboration / partage à un tiers | Confier un test ou un rapport à un tiers pour relecture, édition ou correction (§12). |
| Anti-triche webcam | Les mesures de surveillance par webcam au passage (§11). Les autres mesures ne dépendent pas de cette fonction. |
| Exports | Les exports de données — la sortie CSV de l'état de facturation, notamment (§13). |
| Pré-facturation | L'écran Facturation lui-même (§13) : préparer, suivre et exporter ce que les clients doivent. |
Quand une limite est atteinte
| Situation | Ce que voit le recruteur |
|---|---|
| Plafond de stock atteint | La création est bloquée — un test, une question, un candidat ou un siège de plus est refusé — avec une invitation à passer au plan supérieur. Ce qui existe déjà n'est jamais touché. |
| Plafond mensuel atteint | L'action du mois — un envoi de plus, une demande d'IA — est bloquée jusqu'à la bascule du mois, avec la même invitation. Les autres usages restent disponibles. |
| Fonction non incluse | Le geste (partage, webcam, export, facturation, placement) est fermé dès le clic : la modale de montée de gamme s'ouvre à la place de l'action, sans aller-retour serveur — le serveur garde la même garde en 422 FEATURE_NOT_IN_PLAN. Dans le réglage du déroulement d'un envoi, les deux mesures webcam (caméra obligatoire, captures webcam) sont marquées « Non inclus dans votre plan » et le niveau Stricte s'applique sans elles ; le micro et les captures d'écran restent de l'anti-triche basique, ouvert à tous. La marque blanche fait exception : l'écran Apparence reste ouvert et le cabinet y prépare sa marque — ce sont les surfaces publiques qui gardent l'identité Evalixo tant que le plan ne l'inclut pas (§18). |
| Le blocage n'efface rien | Une limite atteinte arrête l'action à venir ; elle ne supprime ni ne dégrade jamais ce qui est déjà en place. |
Consulter son plan et sa consommation
Paramètres → « Abonnement & consommation » (§18). Le recruteur y lit le plan du cabinet, chaque limite avec sa jauge et son reste, l'état des fonctions incluses, et la date à laquelle les compteurs mensuels basculent. C'est aussi de cet écran que part l'abonnement.
S'abonner et payer
Le paiement est confié à Stripe, notre prestataire : aucune donnée de carte ne transite par Evalixo ni n'y est conservée.
Un visiteur peut arriver avec une intention d'achat : les boutons des cartes Starter et Growth du site public mènent à l'inscription en emportant le plan visé. Dans ce cas, l'espace propose de finaliser l'abonnement à la première connexion, par un bandeau refermable — il ne l'impose jamais, et le cabinet naît bien sur Free tant que rien n'est payé.
| Geste | Ce qui se passe |
|---|---|
| Passer à Starter ou Growth | Le bouton du plan ouvre une page de paiement Stripe (carte bancaire), puis ramène le recruteur sur son écran d'abonnement. L'abonnement est mensuel, sans engagement. |
| Le prix affiché est le prix débité TVA non applicable | Evalixo est en franchise en base de TVA (art. 293 B du CGI) : la page de paiement n'ajoute aucune taxe. Un Starter à 29 € est débité 29 €. La mention légale figure sur la facture Stripe, consultable depuis le portail. |
| Le plan s'active au paiement confirmé jamais avant | C'est Stripe qui annonce le paiement à Evalixo ; le plan bascule à cette annonce, pas au retour du navigateur. Revenir sur l'écran depuis une page de paiement abandonnée ne change donc rien — et le plan peut apparaître avec quelques secondes de décalage. |
| « Gérer mon abonnement » | Ouvre le portail client Stripe, hors d'Evalixo : le recruteur y change de carte, change de plan, retrouve ses factures et résilie. Ce portail n'apparaît que si le cabinet a déjà payé au moins une fois. |
| Changer de plan (Starter ⇄ Growth) | Se fait dans le portail, jamais par un second achat : tant qu'un abonnement est en cours, l'écran d'abonnement ne propose plus de payer, il renvoie vers « Gérer mon abonnement ». Le nouveau plan est répercuté automatiquement sur le cabinet dès que Stripe l'annonce — montée comme descente —, sans aucun geste côté Evalixo. Le cabinet ne peut pas porter deux abonnements. |
| Résilier | Depuis le portail. Rien n'est coupé le jour de la demande : l'abonnement va jusqu'au bout de la période déjà payée, puis le cabinet retombe sur Free. Rien n'est supprimé : le contenu reste, seules les bornes du plan Free s'appliquent de nouveau — ce qui dépasse n'est pas détruit, mais la création est refusée tant qu'on est au-dessus. |
| Le bandeau d'annulation jusqu'à l'échéance | Dès que l'annulation est enregistrée, l'écran « Abonnement & consommation » affiche un bandeau : le plan reste actif jusqu'à la date de fin de la période payée, puis le cabinet reviendra sur Free. Pendant tout ce délai, plafonds et fonctions du plan payant restent entièrement ouverts — l'annulation ne dégrade rien par avance. |
| Reprendre (annuler l'annulation) | Tant que l'échéance n'est pas passée, le recruteur revient sur sa décision depuis le portail, à tout moment : l'abonnement repart, la facturation reprend normalement à la période suivante, et le bandeau disparaît de l'écran d'abonnement. Aucun nouvel achat n'est nécessaire. |
| Free | Ne demande aucune carte : aucun bouton de paiement, aucun portail tant que le cabinet n'a jamais payé. |
| Scale | Ne s'achète pas en ligne. Le cabinet prend contact, l'équipe Evalixo active l'offre et lui envoie des factures par e-mail (lien de paiement hébergé, relances automatiques — voir §20). |
Quand le plan a été posé à la main par l'équipe — offre négociée, Scale, geste commercial —, le cabinet n'a rien à payer en ligne : l'écran d'abonnement affiche le plan et sa consommation, et la gestion (changement, arrêt) se fait avec l'équipe Evalixo. Cette attribution manuelle fait autorité : elle n'est jamais écrasée par le prestataire de paiement.
Les compteurs mensuels — passages du mois, usages d'IA — se remettent à zéro le 1er de chaque mois. Les plafonds de stock (tests, questions, candidats, sièges), eux, ne « repartent » pas : ils comptent ce qui existe, et ne baissent qu'en supprimant.
20Supervision (administrateur)
| Écran | Ce qu'on peut faire |
|---|---|
| Sociétés | Créer, renommer, supprimer un cabinet. L'identifiant technique est dérivé du nom à la création et ne change jamais : c'est la clé d'appartenance des comptes. |
| Recruteurs | Créer un compte, le rattacher à une société, réinitialiser son mot de passe. Le mot de passe temporaire n'est affiché qu'une fois. Cette voie subsiste à côté de l'inscription self-service (§3) : un compte ouvert ici est déjà rattaché, il ne passe donc pas par « Une dernière étape ». |
| Candidats | Recherche et gestion transverses, tous cabinets confondus. |
| Messages | Les demandes envoyées via « Contactez-nous ». |
| Bibliothèque officielle | Création et révision des questions et tests officiels — sans jamais toucher les copies privées des cabinets. |
L'opération emporte toute sa production. Les comptes recruteurs doivent être supprimés d'abord : sans cela, leur prochaine connexion recrée la société automatiquement.
Superviser un cabinet
Une page dédiée donne à l'administrateur la vue d'ensemble d'un cabinet. Il choisit un cabinet — et, s'il le veut, un recruteur de ce cabinet pour affiner —, puis lit d'un coup tous les compteurs : candidats, postes, clients, campagnes, tests et questions personnels, passages. À côté figure la consommation du cabinet — usage rapporté à son plan (§19), avec ce qu'il reste.
| Règle | Comportement |
|---|---|
| Le choix du périmètre | Le cabinet est obligatoire ; le recruteur est facultatif. Sans recruteur, les compteurs valent pour tout le cabinet ; avec, ils se restreignent à ce qu'il a produit. |
| Chaque compteur se déplie | Un compteur se clique et ouvre la liste détaillée de ce qu'il totalise — les candidats, les postes, les campagnes… — sans quitter la supervision. |
| Lecture, pas recrutement | L'administrateur observe ; il n'entre pas dans les écrans de recrutement du cabinet, fermés à son persona (§2). |
Gestion des plans
C'est ici que se définissent les plans que les cabinets consulteront (§19). L'administrateur crée un plan, l'édite — ses plafonds et les fonctions qu'il ouvre — et l'assigne à un cabinet. Changer le plan d'un cabinet déplace aussitôt ses bornes ; ce qui dépasse alors le nouveau plafond n'est pas détruit, mais la création reste bloquée tant qu'on est au-dessus.
La fiche d'un plan porte aussi son volet commercial : son accroche, son prix mensuel et son mode de vente.
| Réglage | Règle |
|---|---|
| Mode de vente | Trois valeurs, et c'est le mode qui désigne ce qu'on attend : gratuit et sur devis ne portent aucun prix ; libre-service en exige un, strictement positif (un abonnement à 0 €, c'est le plan gratuit). Un prix saisi sous un mode qui n'en veut pas est simplement ignoré. |
| Prix mensuel TVA non applicable | En euros, c'est le prix affiché et facturé — et le montant exact qui sera débité : Evalixo étant en franchise en base de TVA (art. 293 B du CGI), aucune taxe n'est ajoutée au paiement. Ce qu'on saisit ici est donc ce que le cabinet paie, pas une base de calcul. Les plans en libre-service sont publiés chez le prestataire de paiement : le premier enregistrement les y crée, un renommage y suit. |
| Changer un prix n'affecte pas les abonnés | Un nouveau tarif ne vaut que pour les abonnements à venir : les cabinets déjà abonnés gardent le prix auquel ils ont souscrit, jusqu'à ce qu'ils changent eux-mêmes de plan. Aucune facture passée n'est réécrite. |
| Accroche | La phrase affichée sous le nom du plan (site public et écran d'abonnement). Du texte, jamais une règle. |
| Le nom se change, la clé jamais | Le libellé commercial est libre ; l'identifiant technique du plan, lui, ne change pas — c'est lui qui relie la grille, les cabinets et le prestataire de paiement. |
| Supprimer un plan | Refusé tant qu'un cabinet y est rattaché. Il faut d'abord les réassigner ailleurs. |
Assigner un plan à la main
Depuis la fiche d'un cabinet, l'administrateur pose n'importe quel plan, sans paiement : offre négociée, Scale, geste commercial, dépannage. Deux règles encadrent la cohabitation avec le paiement en ligne.
| Règle | Comportement |
|---|---|
| Une attribution manuelle fait autorité jamais écrasée | Un plan posé à la main n'est jamais modifié par le prestataire de paiement : ni un changement de plan, ni une résiliation venus de son côté ne le déplacent. |
| Un paiement abouti, si | Seul un achat effectivement payé par le cabinet reprend la main : le cabinet vient d'être débité, son plan doit suivre. À partir de là, l'abonnement est piloté par le paiement — jusqu'à ce qu'un administrateur repose un plan à la main. |
| La fiche dit d'où vient le plan | Elle indique si le plan a été posé à la main ou payé en ligne, et si le cabinet a un abonnement en cours — de quoi savoir s'il faut le facturer soi-même ou le laisser à son abonnement. |
Facturer une offre sur devis (Scale)
Scale n'a pas de prix catalogue : il se négocie, s'assigne à la main, puis se facture depuis la fiche du cabinet — une facture ponctuelle par période convenue, plutôt qu'un abonnement automatique.
| Règle | Comportement |
|---|---|
| Émettre une facture | La modale demande un montant, un libellé, un e-mail de facturation — obligatoire : c'est à cette adresse que Stripe envoie la facture — et, si l'on veut, un délai de paiement (30 jours par défaut). La facture part aussitôt : le prestataire l'envoie par e-mail au cabinet, avec un lien de paiement hébergé, et relance tout seul jusqu'au règlement. Comme pour la grille, le montant saisi est le montant dû tel quel — aucune TVA n'y est ajoutée (art. 293 B du CGI). |
| Refus de saisie | Montant nul ou négatif, montant déraisonnable, libellé vide ou trop long, e-mail de facturation manquant ou mal formé, délai hors bornes : la facture n'est pas émise et la feuille le dit. |
| L'historique vit chez le prestataire | La fiche affiche les dernières factures du cabinet avec leur état et leur lien — lues chez le prestataire, jamais recopiées ici : la numérotation, l'encaissement et les relances lui appartiennent. Un cabinet jamais facturé affiche simplement une liste vide. |
| Ne pas doubler un abonnement | Rien n'interdit d'émettre une facture à un cabinet par ailleurs abonné par carte — mais il serait alors facturé deux fois : la fiche indique l'abonnement en cours pour que le cas se voie. |
Réglages IA d'un cabinet
L'administrateur peut aussi régler l'IA d'un cabinet depuis la supervision : son activation et ses quotas, les mêmes leviers que le cabinet trouve dans Paramètres → IA (§16), pilotés cette fois côté plateforme.
21Cycles de vie
Évaluation (une ligne de la fiche candidat)
| Statut | Signification | Origine |
|---|---|---|
| Invité | Le lien est parti, le candidat n'a pas ouvert. | Envoi |
| En cours | Le passage a démarré. | Premier accès du candidat |
| Terminé | La copie est rendue (ou le dossier reçu). | Remise |
| Expiré | L'échéance est passée sans remise. | Déduit de la date, jamais posé |
Campagne
Brouillon → En cours → Clôturée, et Clôturée → En cours : la clôture se défait (« Remettre en cours », depuis la fiche ou depuis le menu ⋯ de la liste). Seul le passage par le brouillon est sans retour. Voir §9.
22Suppression & révocation
Tout le système obéit à une phrase : une épreuve non terminée se révoque toujours, une épreuve terminée ne se détruit jamais — elle se détache.
| Geste | Invité | En cours | Terminé |
|---|---|---|---|
| Supprimer un test / questionnaire | Révoquée | Révoquée (éjecté) | Conservée, détachée |
| Retirer un candidat d'une campagne | Révoquée | Révoquée (éjecté) | Conservée, détachée |
| Supprimer une campagne | Révoquée | Révoquée (éjecté) | Conservée, détachée |
| Révoquer une évaluation à la main | Révoquée | Révoquée (éjecté) | Refusé — 409 |
Ce que « révoquer » et « détacher » veulent dire
- Révoquer — la ligne d'évaluation disparaît, le lien
/t/tombe en 404. Un candidat en plein passage est éjecté et ses réponses partielles sont perdues. - Détacher — la copie rendue reste sur la fiche du candidat, elle perd seulement son lien vers le test supprimé. Le rapport est intégralement lisible : nom du test et forme de chaque question sont des instantanés.
Effets de bord d'une suppression de test
- Les partages
/s/de ce test meurent avec lui. - Les étapes de campagne qui le portaient disparaissent ; la campagne survit avec une épreuve de moins.
- Les copies privées nées d'un test officiel survivent, elles perdent seulement leur filiation.
Un rapport ne dépend jamais du catalogue vivant : le nom du test, l'énoncé de chaque question et les options proposées sont figés au moment du passage. C'est ce qui permet de supprimer un test sans réécrire l'histoire des candidats.
23Verrous & unicité
| Ce qui est verrouillé | Condition | Réponse |
|---|---|---|
| Supprimer une question | Utilisée par un test ou déjà répondue | 409 |
| Supprimer un client | Un poste y est rattaché | 409 |
| Supprimer un poste | Une campagne l'utilise — même clôturée | 409 |
| Révoquer une évaluation | Elle est terminée | 409 |
| Modifier une campagne | Elle est lancée | 409 |
| Écrire sur un contenu officiel | L'auteur est un recruteur | 403 |
| Créer un candidat | L'e-mail existe déjà dans le cabinet | 409 |
| Créer un client | Le nom existe déjà dans le cabinet | 409 |
| Copier un contenu officiel | La copie existe déjà | 409 |
| Envoyer une épreuve vide | Zéro question / zéro champ | 400 |
| Écrire dans un passage | Le temps imparti est écoulé (passage en une seule fois) — la session vient d'être close | 409 |
| Envoyer en une seule fois | Épreuve sans durée : aucune question à chronométrer | 400 |
24Notation
| Règle | Comportement |
|---|---|
| Barème | Porté par la question. Le total du test est la somme de ses questions. |
| Temps accordé | Porté par la question, en secondes — le temps que l'on DONNE au candidat. C'est LA durée : celle d'un test en est la somme, et c'est elle qui borne un passage « en une seule fois ». Il se saisit en minutes + secondes (un QCM se tranche en 30 à 45 s) et se propose d'après le type et la difficulté tant qu'on n'y touche pas. |
| Durée estimée | Facultative, portée par la question — le temps qu'il faut probablement pour répondre. Vide dans la plupart des cas et purement indicative : elle ne borne rien et ne coupe rien. Elle ne peut jamais dépasser le temps accordé. |
| Test « X · estimé à Y » | Les deux durées d'un test sont déduites : sa durée est la somme des temps accordés, son estimation la somme des durées estimées — une question non estimée comptant pour son temps accordé. Sans aucune estimation, les deux sont égales et l'écran n'affiche que la durée. Les cartes de la bibliothèque, elles, n'affichent que la durée en minutes arrondies ; la lecture « X · estimé à Y » se fait sur le détail du test. |
| Tout ou rien | QCM, choix multiples et ordonnancement : la réponse est juste ou fausse. |
| Proportionnelle | Association et texte à trous : les points suivent la part d'éléments corrects. |
| Réponse libre | Notée à la main par le recruteur, entre 0 et le barème. |
| Échelle | Déclarative : jamais comptée dans un score. |
| Test déclaratif | Un test composé uniquement de questions non notées n'a ni score ni niveau. |
| Dossiers | Un questionnaire n'entre dans aucune statistique de score. |
25Codes d'erreur
Chaque refus métier porte un code stable, affiché à l'utilisateur sous forme de message.
| Code | HTTP | Sens |
|---|---|---|
| QUESTION_IN_USE | 409 | Question utilisée par un test ou déjà répondue. |
| CLIENT_IN_USE | 409 | Client encore rattaché à un poste. |
| POSITION_IN_USE | 409 | Poste utilisé par une campagne — la garde compte le TOTAL, campagnes clôturées comprises (la clé étrangère les retient), et non le compteur « en cours » qu'affichent les écrans. Voir §8. |
| POSITION_ALREADY_CLOSED | 409 | Clôture refusée : le poste est déjà clôturé. |
| POSITION_NOT_CLOSED | 409 | Remise en cours refusée : le poste n'est pas clôturé. |
| CLIENT_NAME_EXISTS | 409 | Nom de client déjà pris dans le cabinet. |
| CANDIDATE_EMAIL_EXISTS | 409 | E-mail déjà porté par une fiche du cabinet. |
| COPY_ALREADY_EXISTS | 409 | Copie privée déjà présente dans la bibliothèque. |
| EVALUATION_ALREADY_COMPLETED | 409 | Révocation refusée : la copie est rendue. |
| CAMPAIGN_ALREADY_LAUNCHED | 409 | Édition refusée : la campagne est lancée. |
| CAMPAIGN_CANDIDATE_EXISTS | 409 | Candidat déjà inscrit à la campagne. |
| SITTING_WRONG_KIND | 409 | Flux de test appelé avec un lien de dossier (ou l'inverse). |
| SITTING_TIME_OVER | 409 | Temps écoulé, session close : l'invitation avait été envoyée en une seule fois et l'écriture arrive au-delà du temps imparti (tolérance technique comprise). La session vient d'être terminée avec les réponses déjà validées — plus rien ne s'écrit. |
| CONCURRENT_MODIFICATION | 409 | L'objet a été modifié entre-temps (un collègue, un autre onglet) : recharger la page avant de réenregistrer. |
| OFFICIAL_ITEM_IMMUTABLE | 403 | Écriture d'un recruteur sur un contenu officiel — y compris par la bande : l'acceptation d'un rendu de tiers dont la cible serait un test du catalogue est refusée au même titre qu'une modification directe. |
| VISUAL_HTML_FORBIDDEN | 403 | Visuel HTML réservé à l'administrateur. |
| TENANT_MISSING | 403 | Compte sans rattachement à un cabinet. |
| TEST_NOT_SENDABLE | 400 | Test sans question. |
| QUESTIONNAIRE_NOT_SENDABLE | 400 | Questionnaire sans champ. |
| INVALID_EXPIRY_DATE | 400 | Échéance hors bornes (demain … +1 an). |
| INVITATION_NOT_ACTIVE | 400 | Relance sur un lien mort. |
| CAMPAIGN_NOT_LAUNCHABLE | 400 | Lancement sans épreuve ou sans candidat. |
| INVALID_SITTING_SETTINGS | 400 | Déroulement refusé à l'envoi : passage en une seule fois demandé sur une épreuve qui ne dure rien (en campagne, la règle vaut pour chacune des épreuves de type test), ou tolérance technique hors de ses bornes API — celle-ci n'étant pas exposée dans l'interface, seul le premier cas se rencontre à l'usage. |
| QUESTIONNAIRE_INVALID | 422 | Champ à options avec moins de deux options. |
| POSITION_INVALID | 422 | Valeur hors des listes fermées du poste, ou surcharge de barème hors bornes (taux particulier hors de ]0;100], montant particulier négatif ou nul). |
| UNKNOWN_JOB_ROLE | 422 | Métier hors du référentiel fermé — sur un test (où il est obligatoire) comme sur un poste (où il est facultatif mais tout aussi fermé). |
| JOB_ROLE_DOMAIN_MISMATCH | 422 | Métier incohérent avec le domaine : son domaine ne figure pas parmi ceux du test, ou n'est pas celui du poste / du brief de commande. « Transversal » ne vise aucun domaine : il n'est jamais refusé ici. |
| CLIENT_INVALID | 422 | Secteur d'activité inconnu. |
| CLIENT_INTENT_MISMATCH | 422 | Intention du poste incohérente : CLIENT sans client nommé, ou INTERNAL/TBD avec un client. |
| CLIENT_BILLING_INVALID | 422 | Barème client incohérent : un mode de facturation déclaré sans sa valeur (pourcentage, forfait ou prix unitaire), une valeur hors bornes, ou un forfait de campagne nul ou négatif — ce volet-là n'a pas de mode, mais son montant doit être strictement positif. |
| BILLING_LINE_INVALID | 422 | Le code fourre-tout du module facturation, côté saisie comme côté lecture. Saisie : nature inconnue, destinataire ambigu ou incomplet (les deux formes à la fois, aucune des deux, un nom ou un e-mail manquant ou hors bornes), libellé vide ou trop long, montant hors bornes, date mal formée, campagne non facturable (poste sans client, mode de facturation inconnu, ou aucun prix disponible dans le mode retenu), remise d'une ligne qui n'est pas annulée. Lecture : période mal formée ou inversée — les deux bornes, elles, sont facultatives. |
| CLIENT_REQUIRED | 422 | Recrutement non interne déclaré sans client. |
| INTERNAL_WITH_CLIENT | 422 | Recrutement interne déclaré avec un client — l'interne n'en nomme aucun. |
| INVALID_SALARY | 422 | Salaire brut annuel absent, nul ou négatif : un entier strictement positif, en euros. |
| INVALID_HIRED_ON | 422 | Date d'embauche mal formée (AAAA-MM-JJ) — passée ou future, les deux sont légales. |
| POSITION_CLIENT_MISMATCH | 422 | Le poste du recrutement est rattaché à une autre société que le client de ce recrutement. |
| ALREADY_CANCELLED | 422 | Objet déjà annulé — un recrutement comme une ligne de facturation. Le premier motif fait foi, rien ne se ré-annule. |
| FORM_REQUIRED_FIELD_MISSING | 422 | Dossier remis avec un champ obligatoire vide, ou une pièce à joindre obligatoire non déposée. |
| FILE_TYPE_NOT_ALLOWED | 422 | Pièce jointe de questionnaire refusée : extension hors des familles de formats figées sur la pièce, ou type déclaré incohérent avec l'extension. |
| SHARE_INVALID | 422 | Partage refusé : commentaire manquant, domaine ou métier hors référentiel, rendu déjà remis, geste impossible sur une collaboration close (relancer, prolonger), test du catalogue OFFICIEL confié en ÉDITION (il se confie en relecture seulement — refusé dès la création du lien, avant tout effet de bord), ou correction demandée depuis un lien de simple consultation (partage de résultat). |
| SHARE_EXPIRED | 410 | Lien de relecture /s/ ou de rapport /r/ échu — ou clôturé, ce qui est une échéance anticipée. |
| UPLOAD_TOO_LARGE | 413 | Fichier trop volumineux : 10 Mo max pour un téléversement (CV, image), 4 Mo max pour tout envoi depuis un lien public — sauf le dépôt d'une pièce jointe de questionnaire, plafonné par le réglage plateforme QUESTIONNAIRE_FILE_MAX_MB (10 Mo par défaut). |
| SETTINGS_INVALID | 422 | Préférences hors bornes (document trop volumineux ou structure inattendue). |
| TOO_MANY_REQUESTS | 429 | Trop de requêtes en peu de temps (liens publics, e-mail de test, formulaire de contact) : réessayer dans un instant. |