Recrutement¶
À quoi ça sert¶
Ce module couvre tout le cycle de recrutement : demande de personnel (ouverture de poste), publication d'une offre d'emploi, réception et suivi des candidatures dans un pipeline par étapes, planification des entretiens, puis émission d'une lettre d'offre jusqu'à sa signature par le candidat.
Prérequis¶
Prérequis
- Modules sous licence :
RECRUITMENT - Permissions :
recruitment.requisition.create,recruitment.requisition.update,recruitment.requisition.delete,recruitment.requisition.submit,recruitment.requisition.read,recruitment.requisition.approve,recruitment.requisition.reject,recruitment.offer.create,recruitment.offer.update,recruitment.offer.publish,recruitment.offer.close,recruitment.offer.delete,recruitment.offer.read,recruitment.candidate.create,recruitment.application.read,recruitment.application.update,recruitment.interview.create,recruitment.interview.read,recruitment.interview.update,recruitment.interview.complete - Rôles :
RECRUITER,HR_MANAGER,ORG_ADMIN
Comment ça marche¶
1. Créer une demande de personnel (requisition)¶
- Ouvrez Recrutement → Demandes de personnel (
/dashboard/recruitment/requisitions). - Cliquez sur Nouvelle demande : intitulé du poste, département, justification (
REPLACEMENTremplacement,NEW_POSITIONcréation de poste,GROWTHcroissance), priorité (URGENT,NORMAL,FUTURE), type de contrat visé (CDI,CDD,STAGE,CONSULTANT,INTERIM), fourchette de salaire. - La demande est créée en statut Brouillon (
DRAFT) — son auteur peut la modifier ou la supprimer librement tant qu'elle reste à ce statut. - Cliquez sur Soumettre pour l'envoyer en approbation (
PENDING_APPROVAL) : ceci déclenche une instance du moteur de workflow générique sur l'entitéJOB_REQUISITION(voir Workflows d'approbation). - Les approbateurs successifs approuvent ou rejettent la demande. Une fois toutes les étapes validées, elle passe à
APPROVED, puis peut être publiée (PUBLISHED) sous forme d'offre d'emploi. - La demande se termine en
FILLED(poste pourvu) ou peut être annulée (CANCELLED) à tout moment.
2. Publier une offre d'emploi¶
- Depuis une demande approuvée, ou directement sous Recrutement → Offres (
/dashboard/recruitment/offers), créez une offre d'emploi : titre, description, compétences requises, langues et niveaux exigés. - L'offre suit son propre cycle :
DRAFT→ Publier →PUBLISHED(visible publiquement pour candidature) → Clôturer →CLOSED→ARCHIVED. - Un modèle d'offre réutilisable peut être sauvegardé pour accélérer la création des prochaines offres similaires.
- Une offre publiée génère un lien public de candidature, utilisé par les candidats externes (formulaire hors authentification,
PublicJobApplicationController).
3. Suivre le pipeline de candidatures¶
- Ouvrez Recrutement → Pipeline (
/dashboard/recruitment/pipeline), vue par colonnes correspondant aux étapes (PipelineStage). - Chaque candidature progresse à travers les statuts :
NEW→SCREENING→INTERVIEW→OFFER_SENT→HIRED, ouREJECTEDà tout moment (avec possibilité de réintégration —REINSTATEDdans l'historique d'activité). - Glissez une candidature vers une autre étape (Déplacer), ajoutez des notes, ou notez le candidat directement sur sa fiche.
- Chaque action (candidature reçue, changement d'étape, offre envoyée, rejet, note ajoutée, notation) est journalisée dans l'historique d'activité de la candidature (
ApplicationActivity). - La source du candidat est enregistrée (
DIRECT,REFERRAL,LINKEDIN,JOB_BOARD,AGENCY,INTERNAL) pour analyser l'efficacité des canaux de sourcing (tableau de bord recrutement).
4. Planifier et évaluer les entretiens¶
- Depuis une candidature, cliquez sur Planifier un entretien : type (
PHONE_SCREEN,TECHNICAL,HR,FINAL), date/heure, interviewers. - Les invitations sont envoyées automatiquement aux interviewers avec un fichier calendrier
.icsjoint (IcsGeneratorService) ; le candidat peut confirmer ou décliner sa disponibilité via un lien de RSVP public sécurisé par jeton (RsvpPublicController), sans avoir de compte Jigi. - Recrutement → Calendrier (
/dashboard/recruitment/calendar) donne une vue agenda de tous les entretiens planifiés, avec possibilité de renvoyer les invitations. - Après l'entretien, l'interviewer soumet son retour (feedback) avec une note (
STRONG_YES,YES,NEUTRAL,NO,STRONG_NO) puis l'entretien est marqué Terminé (COMPLETED) ; il peut aussi être annulé (CANCELLED) ou marqué absence (NO_SHOW).
5. Émettre et suivre une lettre d'offre¶
- Depuis une candidature au stade
OFFER_SENT, générez une lettre d'offre (/dashboard/recruitment/offer-letters) à partir d'un modèle (OfferLetterTemplate), avec les conditions retenues (salaire, date de début, avantages). - Si le tenant a configuré un workflow d'approbation sur l'entité
OFFER_LETTER, la lettre passe parPENDING_APPROVALavant envoi ; en cas de rejet interne elle repasse enREJECTED. - Une fois approuvée, cliquez sur Envoyer : la lettre passe à
SENTet un lien public sécurisé est transmis au candidat (PublicOfferLetterController), qui peut l'accepter ou la décliner sans compte Jigi, avec vérification par code envoyé par email. - Statuts finaux possibles :
ACCEPTED,DECLINED, ouEXPIREDsi le candidat ne répond pas dans le délai imparti.
Qui peut faire quoi¶
| Permission requise | Rôles concernés |
|---|---|
recruitment.requisition.create |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.requisition.update |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.requisition.delete |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.requisition.submit |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.requisition.read |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.requisition.approve |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.requisition.reject |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.offer.create |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.offer.update |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.offer.publish |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.offer.close |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.offer.delete |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.offer.read |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.candidate.create |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.application.read |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.application.update |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.interview.create |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.interview.read |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.interview.update |
RECRUITER, HR_MANAGER, ORG_ADMIN |
recruitment.interview.complete |
RECRUITER, HR_MANAGER, ORG_ADMIN |
| Rôle système | Portée |
|---|---|
ORG_ADMIN |
Toutes les actions (permission globale) |
RECRUITER |
Création/modification/suppression/soumission des demandes de personnel, lecture des demandes ; lecture + création + mise à jour des offres ; création de candidats, lecture/mise à jour des candidatures ; accès complet aux entretiens |
| Permission | Donne accès à |
|---|---|
recruitment.requisition.create / .update / .delete / .submit / .read |
Cycle de vie de la demande de personnel côté brouillon/soumission (le créateur d'un brouillon peut aussi le modifier/supprimer sans permission de gestion, tant qu'il reste en DRAFT) |
recruitment.requisition.approve / .reject |
Décider d'une étape d'approbation de la demande |
recruitment.offer.create / .update / .publish / .close / .delete / .read |
Cycle de vie de l'offre d'emploi |
recruitment.candidate.create |
Créer une fiche candidat (dépôt de candidature) |
recruitment.application.read / .update |
Consulter/faire progresser le pipeline de candidatures |
recruitment.interview.create / .read / .update / .complete |
Planifier, consulter, modifier, clôturer un entretien |
recruitment.offer_letter.create / .read / .send |
Créer, consulter, envoyer une lettre d'offre |
recruitment.offer_letter.approve / .reject |
Valider ou rejeter une lettre d'offre en attente d'approbation interne |
Détails techniques¶
Détails techniques
Entités principales : JobRequisition, JobOffer/JobOfferTemplate/JobOfferSkill/JobOfferLanguage, Candidate/CandidateApplication/ApplicationActivity, Interview/InterviewInterviewer/InterviewRsvp, OfferLetter/OfferLetterTemplate/OfferLetterResponseGate (packages app.jigi.hr.recruitment.*).
Endpoints clés :
POST/PUT/DELETE /recruitment/requisitions[/{id}],/submit,/approve,/reject(JobRequisitionController) — l'autorisation de modifier/supprimer un brouillon combinehasAuthority('recruitment.requisition.update')ou@jobRequisitionAccess.isDraftOwner(...)(le créateur du brouillon)POST/PUT/DELETE /recruitment/offers[/{id}],/publish,/close(JobOfferController)POST /recruitment/offers/{offerId}/apply,GET /recruitment/applications,POST /recruitment/applications/{id}/move|offer|reject(CandidatePipelineController)POST/GET/PUT /recruitment/applications/{applicationId}/interviews,/recruitment/interviews/{id}/feedback|complete|cancel(InterviewController)GET /recruitment/calendar,/recruitment/interviews/{id}/ics,/send-invitations(InterviewCalendarController) ; RSVP public via jeton (RsvpPublicController)POST /recruitment/applications/{applicationId}/offer-letters,/{id}/send,/{id}/approve,/{id}/reject(OfferLetterController) ; réponse candidat viaPublicOfferLetterController
Workflow : JOB_REQUISITION (approbation de la demande de personnel) et OFFER_LETTER (validation interne avant envoi) sont deux entités distinctes du moteur générique — voir Workflows d'approbation.
Tableau de bord : RecruitmentAnalyticsController/RecruitmentDashboardDto agrègent délai moyen de recrutement, taux de conversion par étape et répartition par source de candidat.
Cas d'erreur et FAQ¶
Un recruteur peut-il approuver ses propres demandes de personnel ? Non. Le moteur de workflow bloque explicitement l'auto-approbation : l'engine rejette une tentative d'approuver ou de rejeter sa propre demande.
Que se passe-t-il si un candidat ne répond pas à une lettre d'offre ?
Elle passe automatiquement au statut EXPIRED une fois le délai dépassé.
Comment un candidat confirme-t-il sa présence à un entretien sans compte Jigi ? Via un lien de RSVP public sécurisé par jeton, envoyé avec l'invitation — aucune authentification Jigi n'est requise.
Peut-on rouvrir une candidature rejetée ?
Oui, l'historique d'activité prévoit une action REINSTATED pour réintégrer un candidat précédemment rejeté dans le pipeline.
Quelle est la différence entre une demande de personnel et une offre d'emploi ? La demande de personnel est la validation interne du besoin (budget, poste, justification) ; l'offre d'emploi est l'annonce publiée pour recevoir des candidatures, généralement créée une fois la demande approuvée.