Cycle de vie d’un recruteur
Un compte recruteur ne peut publier d’offres qu’après double validation : email + admin.
Diagramme d’états complet
États
| État | Peut publier | Peut login | Peut recevoir candidatures |
|---|
PENDING_EMAIL_VERIFICATION | Non | Non | Non |
PENDING_ADMIN_APPROVAL | Non | Oui (lecture seule) | Non |
ACTIVE | Oui | Oui | Oui |
REJECTED | Non | Oui (voir motif) | Non |
SUSPENDED | Non | Non | Non (offres passées en CLOSED) |
DEACTIVATED | Non | Non | Non |
Inscription complète
Validation admin — critères
La validation admin vise à éviter les fausses offres. Les critères ne sont pas automatisables — jugement humain requis.
Motifs de rejet fréquents
| Motif | Recours |
|---|
| RCCM invalide ou introuvable | Fournir justificatif par email support |
| Entreprise inexistante en ligne | Fournir preuves d’activité |
| Email non professionnel (gmail, yahoo) | Utiliser email @entreprise.com |
| Doublon d’entreprise | Contacter admin existant de l’entreprise |
| Activité non conforme | Irrévocable |
Revalidation après rejet
Suspension
Un recruteur peut être suspendu pour :
- Publication d’offres frauduleuses répétées
- Contact direct des candidats hors-plateforme (bypass)
- Violation RGPD signalée
- Plainte candidat confirmée
Multi-recruteurs par entreprise
Une entreprise peut avoir plusieurs recruteurs. Le premier recruteur inscrit est le propriétaire (owner), les suivants sont rattachés en tant que MEMBER.
Permissions intra-entreprise
| Action | OWNER | MEMBER |
|---|
| Publier offre | Oui | Oui |
| Éditer offre (la sienne) | Oui | Oui |
| Éditer offre (d’un collègue) | Oui | Non |
| Modifier logo / infos entreprise | Oui | Non |
| Inviter nouveau recruteur | Oui | Non |
| Révoquer membre | Oui | Non |
| Supprimer compte entreprise | Oui | Non |
Audit trail
Toutes les transitions sont loggées :
CREATE TABLE recruiter_status_history (
id BIGSERIAL PRIMARY KEY,
recruiter_id BIGINT,
from_status VARCHAR(30),
to_status VARCHAR(30),
reason TEXT,
changed_by BIGINT,
changed_at TIMESTAMPTZ DEFAULT NOW()
);
Accessible via GET /v1/api/admin/recruiters/{id}/status-history.