Skip to main content

Cycle de vie d’une offre

Une offre traverse quatre états principaux : DRAFT → PUBLISHED → CLOSED → ARCHIVED.

Diagramme d’états

États détaillés

ÉtatVisible publicCandidaturesIndexée FTSDashboard recruteur
DRAFTNonNonNonOui
PUBLISHEDOuiOuiOuiOui
CLOSEDOui (profil entreprise)NonNonOui
ARCHIVEDNonNonNonOui (filtre “archivées”)

Transitions autorisées

Validations à la publication

Modifications en PUBLISHED

Certains champs sont verrouillés une fois publié pour éviter le bait-and-switch :
ChampModifiable en PUBLISHED
titreNon
typeContratNon
villeNon
salaireMin/MaxNon (sauf prolongation par admin)
descriptionOui
competencesRequisesOui
dateExpirationOui (future uniquement)
Pour changer un champ verrouillé, il faut unpublish → modifier en DRAFT → publish à nouveau. Les candidatures existantes restent attachées.

Expiration automatique

Quota offres actives par plan

PlanMax PUBLISHED simultanément
Gratuit2
Essentiel10
Pro50
Entreprise

Impact sur les candidatures

Suppression

Une offre PUBLISHED ne peut pas être supprimée — seulement archivée. Une offre DRAFT peut être supprimée. Une offre ARCHIVED peut être supprimée après 30 jours pour laisser le temps de contester.

Événements émis

État sourceÉtat cibleÉvénementNotif email
*PUBLISHEDoffre.publishedAbonnés alertes matchantes
PUBLISHEDCLOSED (auto)offre.expiredRecruteur
PUBLISHEDCLOSED (manuel)offre.closed
*ARCHIVEDoffre.archived

Traces audit

Chaque transition d’état est loggée dans offres_status_history :
CREATE TABLE offres_status_history (
  id BIGSERIAL PRIMARY KEY,
  offre_id BIGINT REFERENCES offres(id),
  from_status VARCHAR(20),
  to_status VARCHAR(20),
  changed_by BIGINT REFERENCES users(id),
  changed_at TIMESTAMPTZ DEFAULT NOW(),
  reason TEXT
);