Délivrance du certificat de travail : quelles sont les obligations de l’employeur selon l’article 72
25 mai 2026 · par Benjamin Le Goff
À la fin d’un contrat de travail, certains documents ne relèvent pas de la courtoisie mais d’une véritable documentation légale. Le certificat de travail en fait partie, et sa délivrance cristallise souvent des tensions : salarié pressé de justifier une preuve d’emploi, service RH qui clôture des dossiers, manager qui veut « tourner la page » vite. Or, les textes encadrent précisément ce moment, notamment autour de l’article 72 tel qu’il est invoqué dans de nombreuses politiques internes et discussions de conformité, en miroir des dispositions du Code du travail relatives aux documents de fin de contrat. Derrière un formulaire en apparence simple se cachent des obligations structurantes : mentions imposées, interdictions, délai de remise, modalités de mise à disposition, et risques de sanctions. Le document sert aussi le salarié sur des sujets inattendus, comme certaines démarches honorifiques ou la traçabilité d’une carrière. L’enjeu est donc double : sécuriser les droits du salarié et protéger l’employeur contre des litiges évitables, tout en gardant une exécution fluide et respectueuse.
En bref
📌 La délivrance du certificat de travail est obligatoire à la fin de contrat, quel que soit le motif de rupture.
⏱️ La remise intervient à la fin du préavis, même s’il n’est pas exécuté (préavis payé/non travaillé).
🧾 Le contenu est encadré : dates, emplois/qualifications et portabilité mutuelle/prévoyance font partie des mentions clés.
🚫 Les appréciations négatives et mentions nuisibles sont à proscrire : elles exposent l’employeur.
⚖️ En cas d’erreur, retard ou absence : risques civils (astreinte, dommages-intérêts) et pénaux (contravention).
📮 Le document est en principe « quérable » (à disposition), mais l’envoi postal est possible pour éviter les frictions.
Délivrance du certificat de travail en fin de contrat : cadre, article 72 et logique de conformité
La délivrance du certificat de travail est un passage obligé lors de la fin de contrat, que la rupture résulte d’une démission, d’un licenciement, d’une rupture conventionnelle, de l’arrivée du terme d’un CDD, ou encore d’une fin de période d’essai. L’idée centrale est simple : le salarié doit pouvoir attester qu’il quitte l’entreprise et qu’il a bien été lié par un contrat de travail sur une période donnée. Cette preuve d’emploi est souvent exigée dans des démarches administratives, bancaires ou de recrutement.
Dans de nombreux environnements corporate, l’article 72 est cité comme repère interne de gouvernance documentaire : il renvoie, selon les référentiels (règlements, conventions, procédures), à l’exigence de remise des pièces de sortie et à la traçabilité des échanges. Dans la pratique, même lorsque l’expression « article 72 » varie selon les sources et contextes, le raisonnement de conformité reste stable : un document obligatoire doit être produit, contrôlé, archivé et remis selon un processus opposable. Ce point est essentiel : en cas de contentieux, ce n’est pas seulement le document qui compte, mais la capacité de l’employeur à démontrer la bonne exécution de ses obligations.
Un cas fréquent illustre l’enjeu : un salarié, appelons-le Karim, quitte une filiale industrielle après trois ans. Son futur recruteur demande une confirmation de la date de sortie, tandis que Karim entame des démarches liées à la médaille d’honneur du travail, pour lesquelles l’historique d’activité est déterminant. Sans certificat fiable, la mécanique se grippe et la relation se tend. Une organisation rigoureuse évite ce point de rupture : validation RH, édition, signature, remise, et preuve de mise à disposition.
Au passage, la robustesse administrative s’inscrit dans un ensemble plus vaste : marque employeur, lisibilité des parcours, qualité de l’expérience collaborateur, y compris au moment de la séparation. Certaines directions s’inspirent d’approches de management et d’organisation exposées dans des retours d’expérience sur le leadership en contexte multinational, car un départ bien géré protège autant la réputation que la sécurité juridique.
Cette section s’achève sur une idée directrice : le certificat ne doit jamais être traité comme une formalité secondaire, car il matérialise la séparation et sécurise la suite, des deux côtés.
Obligations de l’employeur : délai de remise, certificat « quérable » et preuve de mise à disposition
Le point le plus sensible n’est pas toujours le contenu, mais le timing. La règle opérationnelle à retenir est la suivante : le certificat de travail est dû à l’expiration du contrat de travail, c’est-à-dire à la fin du préavis, qu’il soit exécuté ou non. Concrètement, lorsqu’un préavis est payé mais non travaillé, la date de fin reste celle intégrant le préavis. L’employeur peut préparer et remettre le document plus tôt, à condition d’indiquer clairement la date de cessation des fonctions.
Le certificat est traditionnellement qualifié de document « quérable » : il doit être tenu à la disposition du salarié dans l’entreprise. Cette notion, parfois mal comprise, ne signifie pas que l’entreprise peut se désintéresser de la remise. En pratique, si un départ se fait dans un climat tendu, la simple mise à disposition sans information traçable peut conduire à un litige. Les équipes RH structurées privilégient donc des méthodes qui laissent une trace : remise en main propre contre décharge, courrier recommandé, ou remise via un rendez-vous de sortie consigné.
Pour éviter les angles morts, certaines entreprises intègrent la délivrance dans une check-list unique de fin de contrat avec les autres documents obligatoires. Le certificat n’est pas isolé : l’attestation destinée aux organismes d’emploi et le reçu pour Solde de tout compte s’inscrivent souvent dans la même séquence. Lorsque les départs sont nombreux (restructuration, fin de mission), l’industrialisation du processus devient une question de maîtrise des risques.
Exemple concret : Sofia, technicienne, termine un CDD. Le site ferme pour congés le jour exact de la fin contractuelle. Si le certificat reste « à disposition » derrière une porte close, l’obligation est fragilisée. Une solution pragmatique consiste à anticiper l’envoi postal, ou à convenir d’un créneau effectif de remise avant fermeture. C’est souvent ici que l’on reconnaît la différence entre une conformité théorique et une conformité vécue.
Ce sujet se rattache également à une gestion fine des temps et absences : préavis, congés posés, congés payés dus. Des ressources de calcul et de clarification, comme le calcul du congé annuel, aident à sécuriser les dates et donc la date de sortie à afficher sur le certificat. Une date mal fixée peut générer des contradictions entre documents, et c’est précisément ce que les contentieux exploitent.
Insight final : la meilleure protection de l’employeur est une remise à la fois ponctuelle et prouvable, qui rend toute contestation difficile.
Au-delà des principes, la prochaine étape consiste à maîtriser le contenu exact du document, car une mention manquante peut coûter plus cher qu’un simple retard.
Mentions obligatoires et rédaction : contenu contrôlé, mentions interdites et exemples de formulation
Le contenu du certificat de travail est encadré par des règles précises. Les mentions obligatoires visent à restituer une photographie objective de la relation d’emploi, sans transformer le document en lettre de recommandation. Une rédaction factuelle protège les droits du salarié tout en limitant les interprétations. Les textes prévoient notamment des mentions liées aux dates, aux fonctions et à certains dispositifs de protection sociale.
Les 5 points clés du certificat de travail
📜
Obligation légale
La remise est obligatoire dans tous les cas de rupture : démission, licenciement, CDD, rupture conventionnelle.
⏰
Délai de remise
Le certificat doit être disponible à la fin du préavis, même si le préavis est payé non travaillé.
📝
Mentions obligatoires
Dates d'entrée et sortie, emplois occupés, qualifications, et portabilité de la mutuelle/prévoyance.
🚫
Appréciations interdites
Aucune mention négative ou nuisible. Le certificat ne doit contenir que des informations factuelles.
⚖️
Sanctions en cas de manquement
Retard ou absence expose à des dommages-intérêts, astreinte et contravention pénale.
Les mentions obligatoires à sécuriser (et pourquoi elles comptent)
Le document doit faire apparaître la date d’entrée dans l’entreprise, en incluant, lorsque c’est applicable, la période d’essai ou d’apprentissage. Il doit également indiquer la date de sortie, correspondant à la fin du contrat (préavis inclus, même non travaillé). Un troisième bloc crucial concerne la nature de l’emploi ou des emplois successifs : intitulés, qualifications, et périodes correspondantes. Enfin, la mention relative au maintien temporaire et gratuit de la mutuelle et de la prévoyance (portabilité) figure parmi les points attendus, car elle a un impact direct sur la couverture du salarié après la rupture.
Une bonne pratique consiste à vérifier la cohérence entre le certificat, le dernier bulletin de paie, l’avenant de changement de poste, et l’attestation destinée aux organismes d’emploi. La moindre divergence (par exemple un intitulé de poste approximatif) peut compliquer une mobilité ou une équivalence de qualification.
Mentions usuelles non prévues explicitement, mais attendues dans la pratique
Même lorsque certains éléments ne sont pas explicitement listés dans un article précis, la pratique professionnelle impose un socle : nom, adresse et raison sociale de l’entreprise, identité du salarié, lieu de délivrance, et signature de l’employeur ou de son représentant légal. Sans ces éléments, le document perd en crédibilité auprès des tiers. Dans les grandes organisations, la signature peut être portée par délégation, mais la délégation doit être réelle et traçable.
Mentions facultatives et mentions interdites : rester juste et prudent
Il est possible d’ajouter une appréciation positive, à la manière d’un mot de recommandation, mais uniquement avec l’accord du salarié. À l’inverse, les mentions susceptibles de nuire (appréciation négative, insinuations, éléments diffamatoires) sont à proscrire. Un certificat « piégé » expose l’employeur à un contentieux quasi certain, car il dégrade l’employabilité et porte atteinte aux droits du salarié.
Pour clarifier, voici une liste opérationnelle :
✅ 📅 À inclure : date d’entrée (essai/apprentissage compris), date de sortie (préavis inclus), emplois/qualifications et périodes.
✅ 🛡️ À inclure : mention de la portabilité mutuelle/prévoyance (si applicable).
Le fil conducteur reste la neutralité. Un certificat de travail n’est ni un bilan de performance, ni un procès-verbal : c’est une preuve d’emploi à valeur administrative.
Sanctions et recours : prud’hommes, contravention et réparation du préjudice en cas de manquement
Quand la délivrance du certificat de travail n’est pas conforme, les conséquences peuvent être rapides. Les manquements typiques sont : absence totale de remise, remise tardive, mentions obligatoires manquantes, informations inexactes, ou insertion de mentions nuisibles. Sur le terrain, l’erreur la plus fréquente reste la date de sortie, surtout quand le préavis n’est pas effectué mais payé : le certificat doit refléter la date de fin contractuelle, pas la dernière journée travaillée.
Les risques se répartissent classiquement entre le pénal et le civil. Côté pénal, l’employeur peut encourir une amende correspondant à une contravention de 4e classe, prévue par les textes applicables. Même si ce levier est moins souvent actionné dans les échanges quotidiens, il rappelle que la règle n’est pas facultative. Côté civil, le salarié peut saisir le Conseil de prud’hommes pour obtenir la remise du document, y compris sous astreinte : l’entreprise est alors contrainte, avec une pénalité financière par jour de retard.
Le point le plus coûteux, toutefois, réside souvent dans les dommages-intérêts. En cas de préjudice démontré, la jurisprudence admet l’indemnisation : perte d’une opportunité d’embauche, impossibilité de faire valoir une ancienneté, retard dans une démarche administrative, ou complication dans l’ouverture de droits. Ce préjudice n’est pas théorique ; il se prouve, par exemple, via un email de recruteur demandant une preuve d’emploi ou un dossier incomplet bloqué.
Situation ⚖️
Risque principal 📌
Exemple concret 🧩
Réaction recommandée ✅
Remise tardive ⏱️
Astreinte + tension sociale
Le salarié ne peut pas finaliser un dossier de recrutement
Envoi postal traçable + preuve de mise à disposition
Date de sortie erronée 📅
Dommages-intérêts possibles
Le préavis non travaillé est omis, incohérence avec paie
Recalage sur la fin contractuelle + rectificatif signé
Document neutre, factuel, sans appréciation négative
Un parallèle utile : dans des secteurs industriels où la conformité documentaire est déjà structurée (sécurité, qualité, traçabilité), la gestion de sortie des salariés gagne à être traitée avec le même sérieux. Des exemples d’exigence process existent dans des environnements industriels exigeants, comme évoqué dans cet aperçu du secteur sidérurgique, où la discipline procédurale est une culture, pas une option.
Point final de cette partie : l’entreprise qui corrige vite, trace ses actions et communique sobrement évite la majorité des escalades.
Frise interactive — Délivrance du certificat de travail (article 72)
Parcourez les étapes clés, filtrez selon votre situation et cochez ce qui est déjà fait.
0 % complété
Filtrer :
Optionnel : calcule des dates indicatives à partir de votre « Jour J ».
Cliquez sur une étape pour voir le détail et les actions recommandées.
Conseil de lecture
Cette frise aide à structurer la démarche autour de la remise du certificat de travail. Adaptez-la à vos processus internes et au calendrier réel (préavis, remise en mains propres, mise à disposition, envoi postal, etc.).
/*
Aucune API externe n’est nécessaire : la timeline utilise uniquement les données fournies.
Si vous souhaitez plus tard connecter un service 100 % gratuit pour récupérer des jours fériés (optionnel),
une API publique possible est :
URL (exemple) : https://date.nager.at/api/v3/PublicHolidays/2026/FR
Exemple de réponse JSON (extrait) :
[
{
« date »: « 2026-01-01 »,
« localName »: « Jour de l’an »,
« name »: « New Year’s Day »,
« countryCode »: « FR »,
« fixed »: true,
« global »: true,
« counties »: null,
« launchYear »: null,
« types »: [« Public »]
}
]
*/
(() => {
// =========================
// Chaînes éditables (i18n FR)
// =========================
const STR = {
filtreToutes: « Toutes »,
filtreAvant: « Avant la fin »,
filtreJourJ: « Jour J »,
filtreApres: « Après la fin »,
statutPct: (pct) => `${pct} % complété`,
copieOk: « Résumé copié. »,
copieKo: « Impossible de copier automatiquement. Sélectionnez puis copiez le texte. »,
detailTitreDefaut: « Détail d’une étape »,
detailQuandDefaut: « Sélectionnez une étape à gauche. »,
btnToutDevelopper: « Tout développer »,
btnToutReduire: « Tout réduire »,
badgeAvant: « Avant la fin »,
badgeJourJ: « Jour J »,
badgeApres: « Après la fin »,
mentionDateIndicative: (d) => `Date indicative : ${d}`,
mentionDateNonCalculee: « Date indicative : non calculée »,
resumeCopie: (etape) => `Étape : ${etape.titre}nQuand : ${etape.quandLabel}nDescription : ${etape.description}nActions : ${etape.actions.join( » ; « )}`,
};
// =========================
// Données timeline (FR, issues du prompt)
// =========================
const ETAPES = [
{
id: « j-15 »,
ordre: 1,
categorie: « avant »,
tag: « J-15 »,
titre: « J-15 — Préparation des données »,
description: « Rassembler les informations nécessaires à l’édition du certificat de travail afin d’éviter tout retard au moment de la remise. »,
actions: [
« Vérifier l’identité du/de la salarié(e) et l’intitulé du poste »,
« Consolider dates d’entrée et éléments de parcours utiles »,
« Préparer un brouillon interne pour relecture »
],
offsetDaysFromJ: -15,
ancre: « J-15 »
},
{
id: « j-7 »,
ordre: 2,
categorie: « avant »,
tag: « J-7 »,
titre: « J-7 — Contrôle des mentions obligatoires »,
description: « Contrôler la présence et la cohérence des mentions requises avant la finalisation du document. »,
actions: [
« Contrôler les mentions obligatoires et la cohérence des dates »,
« Vérifier l’orthographe (nom, fonctions, intitulés) et la forme »,
« Valider le circuit de signature (qui signe, quand, format) »
],
offsetDaysFromJ: -7,
ancre: « J-7 »
},
{
id: « dernier-jour »,
ordre: 3,
categorie: « jourj »,
tag: « Dernier jour travaillé »,
titre: « Dernier jour travaillé — Vérification de la date de fin contractuelle »,
description: « S’assurer que la date de fin retenue correspond bien à la situation contractuelle (fin réelle, congés, dispense de préavis, etc.). »,
actions: [
« Vérifier la date de fin contractuelle vs. le dernier jour effectivement travaillé »,
« Aligner les informations avec le dossier RH et les courriers éventuels »,
« Bloquer la version finale pour remise »
],
offsetDaysFromJ: 0,
ancre: « Jour J »
},
{
id: « fin-preavis »,
ordre: 4,
categorie: « jourj »,
tag: « Fin de préavis »,
titre: « Fin de préavis — Remise ou mise à disposition »,
description: « Remettre le certificat de travail ou le mettre à disposition du/de la salarié(e) au moment approprié, selon l’organisation retenue. »,
actions: [
« Préparer la remise en mains propres (contre décharge si utilisé) »,
« Si mise à disposition : informer clairement le/la salarié(e) (où, quand, comment) »,
« Tracer la remise (preuve, date, mode de transmission) »
],
offsetDaysFromJ: 0,
ancre: « Jour J (fin de préavis) »
},
{
id: « j+2 »,
ordre: 5,
categorie: « apres »,
tag: « J+2 »,
titre: « J+2 — Relance proactive si non retiré »,
description: « Si le certificat n’a pas été récupéré, relancer rapidement pour limiter les blocages et documenter la démarche. »,
actions: [
« Relancer par un canal traçable (courriel, courrier, SMS selon usage interne) »,
« Proposer un créneau ou un mode de récupération alternatif »,
« Consigner la relance dans le dossier RH »
],
offsetDaysFromJ: 2,
ancre: « J+2 »
},
{
id: « j+7 »,
ordre: 6,
categorie: « apres »,
tag: « J+7 »,
titre: « J+7 — Envoi postal »,
description: « Procéder à un envoi postal si le document n’est pas retiré, en conservant des preuves adaptées au mode d’envoi. »,
actions: [
« Choisir un mode d’envoi permettant de prouver l’expédition (et idéalement la distribution) »,
« Vérifier l’adresse postale la plus récente disponible »,
« Archiver la preuve d’envoi (et de réception si disponible) »
],
offsetDaysFromJ: 7,
ancre: « J+7 »
},
{
id: « j+30 »,
ordre: 7,
categorie: « apres »,
tag: « J+30 »,
titre: « J+30 — Audit interne et archivage des preuves de remise »,
description: « Clore le dossier en vérifiant la complétude des pièces et en archivant les preuves de remise, relances et envois. »,
actions: [
« Vérifier que la version finale correspond à la version remise/envoyée »,
« Archiver preuves de remise, relances et expéditions »,
« Noter les améliorations de process pour les prochains départs »
],
offsetDaysFromJ: 30,
ancre: « J+30 »
}
];
// =========================
// Stockage local (progression)
// =========================
const STORAGE_KEY = « timeline_certificat72_progress_v1 »;
function loadProgress() {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return {};
const parsed = JSON.parse(raw);
return (parsed && typeof parsed === « object ») ? parsed : {};
} catch {
return {};
}
}
function saveProgress(state) {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(state));
} catch {
// Si le stockage est indisponible, on ignore silencieusement.
}
}
// =========================
// Utilitaires dates
// =========================
const pad2 = (n) => String(n).padStart(2, « 0 »);
function toISODate(d) {
return `${d.getFullYear()}-${pad2(d.getMonth() + 1)}-${pad2(d.getDate())}`;
}
function formatDateFR(iso) {
// Affichage simple FR (jj/mm/aaaa)
if (!iso) return « »;
const [y, m, d] = iso.split(« -« );
if (!y || !m || !d) return iso;
return `${d}/${m}/${y}`;
}
function addDays(date, days) {
const d = new Date(date);
d.setDate(d.getDate() + days);
return d;
}
function safeParseDate(value) {
// value attendu: YYYY-MM-DD
if (!value) return null;
const d = new Date(value + « T00:00:00 »);
return isNaN(d.getTime()) ? null : d;
}
// =========================
// Rendu + interactions
// =========================
const $ = (sel, root = document) => root.querySelector(sel);
const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel));
const elList = $(« #tlList »);
const elDetailTitle = $(« #tlDetailTitle »);
const elDetailWhen = $(« #tlDetailWhen »);
const elDetailDesc = $(« #tlDetailDesc »);
const elDetailActions = $(« #tlDetailActions »);
const elDetailDone = $(« #tlDetailDone »);
const elDetailTag = $(« #tlDetailTag »);
const elProgressBar = $(« #tlProgressBar »);
const elProgressText = $(« #tlProgressText »);
const elProgressTotal = $(« #tlProgressTotal »);
const elStatusPill = $(« #tlStatusPill »);
const elCopyBtn = $(« #tlCopyBtn »);
const elCopyFeedback = $(« #tlCopyFeedback »);
const elResetBtn = $(« #tlResetBtn »);
const elExpandAllBtn = $(« #tlExpandAllBtn »);
const elReferenceDate = $(« #tlReferenceDate »);
const elTodayBtn = $(« #tlTodayBtn »);
let progress = loadProgress(); // { [id]: true/false }
let selectedId = null;
let currentFilter = « toutes »;
let expandedAll = false;
function categoryBadgeText(cat) {
if (cat === « avant ») return STR.badgeAvant;
if (cat === « jourj ») return STR.badgeJourJ;
return STR.badgeApres;
}
function categoryBadgeClasses(cat) {
// Pastel + lisible
if (cat === « avant ») return « border-indigo-200 bg-indigo-50 text-indigo-800 »;
if (cat === « jourj ») return « border-amber-200 bg-amber-50 text-amber-900 »;
return « border-emerald-200 bg-emerald-50 text-emerald-800 »;
}
function computeWhenLabel(etape, refDate) {
// Affiche l’ancre (J-15, J+7…) + date indicative si refDate est renseignée
const base = etape.ancre;
if (!refDate) {
return `${base} • ${STR.mentionDateNonCalculee}`;
}
const d = addDays(refDate, etape.offsetDaysFromJ);
return `${base} • ${STR.mentionDateIndicative(formatDateFR(toISODate(d)))}`;
}
function getRefDate() {
const d = safeParseDate(elReferenceDate.value);
return d;
}
function isVisibleByFilter(etape) {
if (currentFilter === « toutes ») return true;
if (currentFilter === « avant ») return etape.categorie === « avant »;
if (currentFilter === « jourj ») return etape.categorie === « jourj »;
if (currentFilter === « apres ») return etape.categorie === « apres »;
return true;
}
function buildListItem(etape) {
const done = !!progress[etape.id];
const ref = getRefDate();
const whenLabel = computeWhenLabel(etape, ref);
const li = document.createElement(« li »);
li.className = « relative pl-10 »;
li.dataset.id = etape.id;
li.dataset.categorie = etape.categorie;
const btn = document.createElement(« button »);
btn.type = « button »;
btn.className = [
« w-full text-left rounded-xl border shadow-sm transition »,
« focus:outline-none focus:ring-2 focus:ring-slate-300 »,
« hover:bg-slate-50 »,
done ? « border-slate-200 bg-slate-50 » : « border-slate-200 bg-white »
].join( » « );
btn.setAttribute(« aria-expanded », « false »);
// Marqueur sur la ligne
const dot = document.createElement(« div »);
dot.className = [
« absolute left-4 top-5 -translate-x-1/2 h-3.5 w-3.5 rounded-full border »,
done ? « bg-slate-900 border-slate-900 » : « bg-white border-slate-300″
].join( » « );
dot.setAttribute(« aria-hidden », « true »);
const inner = document.createElement(« div »);
inner.className = « p-4 »;
const top = document.createElement(« div »);
top.className = « flex items-start justify-between gap-3 »;
const left = document.createElement(« div »);
const h = document.createElement(« h4 »);
h.className = « text-sm font-semibold text-slate-900 »;
h.textContent = etape.titre;
const meta = document.createElement(« p »);
meta.className = « mt-1 text-xs text-slate-600 »;
meta.textContent = whenLabel;
left.appendChild(h);
left.appendChild(meta);
const right = document.createElement(« div »);
right.className = « flex items-center gap-2 »;
const badge = document.createElement(« span »);
badge.className = `inline-flex items-center rounded-full border px-2.5 py-1 text-[11px] font-medium ${categoryBadgeClasses(etape.categorie)}`;
badge.textContent = categoryBadgeText(etape.categorie);
const donePill = document.createElement(« span »);
donePill.className = [
« inline-flex items-center rounded-full border px-2.5 py-1 text-[11px] font-medium »,
done ? « border-slate-900 bg-slate-900 text-white » : « border-slate-200 bg-white text-slate-700″
].join( » « );
donePill.textContent = done ? « Fait » : « À faire »;
right.appendChild(badge);
right.appendChild(donePill);
top.appendChild(left);
top.appendChild(right);
const preview = document.createElement(« p »);
preview.className = « mt-3 text-sm text-slate-700 leading-relaxed »;
preview.textContent = etape.description;
// Zone repliable (actions + checkbox rapide)
const details = document.createElement(« div »);
details.className = « mt-3 hidden »;
details.dataset.role = « details »;
const actionsTitle = document.createElement(« p »);
actionsTitle.className = « text-xs font-semibold uppercase tracking-wide text-slate-600 »;
actionsTitle.textContent = « Actions suggérées »;
const ul = document.createElement(« ul »);
ul.className = « mt-2 space-y-1.5 »;
etape.actions.forEach(a => {
const liA = document.createElement(« li »);
liA.className = « text-sm text-slate-700 »;
liA.textContent = « • » + a;
ul.appendChild(liA);
});
const quickRow = document.createElement(« div »);
quickRow.className = « mt-3 flex items-center justify-between gap-3 »;
const label = document.createElement(« label »);
label.className = « inline-flex items-center gap-2 text-sm text-slate-700 »;
const cb = document.createElement(« input »);
cb.type = « checkbox »;
cb.className = « h-4 w-4 rounded border-slate-300 text-slate-900 focus:ring-slate-300 »;
cb.checked = done;
cb.addEventListener(« click », (e) => e.stopPropagation());
cb.addEventListener(« change », () => {
progress[etape.id] = cb.checked;
saveProgress(progress);
render(); // met à jour pastilles + progression + labels
selectEtape(etape.id, { scrollIntoView: false }); // rafraîchit le panneau de droite
});
const cbTxt = document.createElement(« span »);
cbTxt.textContent = « Marquer comme fait »;
label.appendChild(cb);
label.appendChild(cbTxt);
const openHint = document.createElement(« span »);
openHint.className = « text-xs text-slate-500 »;
openHint.textContent = « Astuce : cliquez pour afficher/masquer »;
quickRow.appendChild(label);
quickRow.appendChild(openHint);
details.appendChild(actionsTitle);
details.appendChild(ul);
details.appendChild(quickRow);
inner.appendChild(top);
inner.appendChild(preview);
inner.appendChild(details);
btn.appendChild(inner);
btn.addEventListener(« click », () => {
// Sélection + toggle détails
selectEtape(etape.id, { scrollIntoView: false });
const isExpanded = btn.getAttribute(« aria-expanded ») === « true »;
btn.setAttribute(« aria-expanded », String(!isExpanded));
details.classList.toggle(« hidden », isExpanded);
});
// Accessibilité : touche Entrée/Espace déjà gérées par button.
li.appendChild(dot);
li.appendChild(btn);
// Attribut utile pour copie
li.dataset.whenLabel = whenLabel;
return li;
}
function render() {
elList.innerHTML = « »;
// Total et progression
const total = ETAPES.length;
const doneCount = ETAPES.reduce((acc, e) => acc + (progress[e.id] ? 1 : 0), 0);
const pct = total ? Math.round((doneCount / total) * 100) : 0;
elProgressTotal.textContent = String(total);
elProgressText.textContent = String(doneCount);
elProgressBar.style.width = `${pct}%`;
elStatusPill.textContent = STR.statutPct(pct);
// Liste filtrée
const frag = document.createDocumentFragment();
ETAPES
.slice()
.sort((a, b) => a.ordre – b.ordre)
.filter(isVisibleByFilter)
.forEach(e => frag.appendChild(buildListItem(e)));
elList.appendChild(frag);
// Si l’étape sélectionnée n’est plus visible, on désélectionne
if (selectedId) {
const stillVisible = $(`[data-id= »${CSS.escape(selectedId)} »]`, elList);
if (!stillVisible) {
selectedId = null;
renderDetail(null);
} else {
// Mettre en évidence visuellement l’élément sélectionné
highlightSelected();
// Actualiser le panneau droit (ex: date indicative recalculée)
renderDetail(selectedId);
}
}
}
function highlightSelected() {
$$(« li[data-id] », elList).forEach(li => {
const btn = li.querySelector(« button »);
const isSel = li.dataset.id === selectedId;
if (!btn) return;
btn.classList.toggle(« ring-2 », isSel);
btn.classList.toggle(« ring-slate-300″, isSel);
});
}
function selectEtape(id, { scrollIntoView } = { scrollIntoView: true }) {
selectedId = id;
highlightSelected();
renderDetail(id);
if (scrollIntoView) {
const li = $(`li[data-id= »${CSS.escape(id)} »]`, elList);
if (li) li.scrollIntoView({ behavior: « smooth », block: « nearest » });
}
}
function renderDetail(id) {
if (!id) {
elDetailTitle.textContent = STR.detailTitreDefaut;
elDetailWhen.textContent = STR.detailQuandDefaut;
elDetailDesc.textContent = « La frise présente une séquence type : préparation, contrôle, vérification au dernier jour travaillé, remise à la fin de préavis, relances et archivage. »;
elDetailActions.innerHTML = ‘
Une fois les risques compris, reste à organiser une méthode robuste, surtout lorsque l’entreprise gère plusieurs départs simultanés ou des statuts variés (CDI, CDD, alternance, stage).
Organisation RH et bonnes pratiques 2026 : processus, multi-sites, et cohérence avec les autres documents de fin de contrat
Une gestion efficace du certificat de travail repose sur un enchaînement simple : collecte des données, contrôle de conformité, signature habilitée, remise, puis archivage de la preuve. En 2026, les entreprises qui maîtrisent le mieux ce sujet sont rarement celles qui « connaissent la règle », mais celles qui ont conçu un flux robuste et auditable. Les départs ne surviennent pas toujours dans un contexte stable : fermeture de site, mobilité internationale, télétravail, départ pendant une période de congés, ou dossiers disciplinaires sensibles.
La première bonne pratique est de définir un référent : RH paie, HRBP, ou responsable administratif, mais avec une responsabilité nette. Trop d’organisations échouent parce que la tâche se perd entre le manager, la paie et l’administration du personnel. La seconde est de disposer d’un modèle unique validé juridiquement, avec champs verrouillés pour éviter les « ajouts créatifs ».
Cas d’école : départ en télétravail et salarié à distance
Imaginons Claire, cadre en télétravail dans une autre région. Son dernier jour de présence physique remonte à plusieurs semaines. Le certificat « quérable » au siège a peu de sens opérationnel si aucun canal n’est prévu. Dans ce cas, l’envoi postal, accompagné d’une information claire (mail de mise à disposition), permet de concilier l’esprit du texte et la réalité du travail distribué. Le respect des obligations se mesure à la capacité de l’entreprise à rendre le document réellement accessible.
Aligner certificat, attestation et solde de tout compte : la cohérence comme réflexe
La cohérence documentaire est un marqueur de qualité. Une date de fin de contrat identique sur l’ensemble des documents, un intitulé de poste identique à l’avenant, une portabilité correctement mentionnée : ces détails empêchent les blocages. Les litiges naissent souvent de contradictions internes. Une vérification croisée, même rapide, est un investissement rentable.
Former les managers : éviter les “messages” dans un document légal
Le manager peut être tenté d’utiliser le certificat pour « laisser une trace » d’un conflit. C’est une erreur. Le certificat relève de la documentation légale ; il doit rester factuel. Pour canaliser cela, il est utile de proposer un autre support, distinct et optionnel : lettre de recommandation, message de départ, ou appréciation séparée, avec accord du salarié.
Enfin, une entreprise mature traite la fin de relation comme un acte de management responsable. Les plateformes de recrutement et l’écosystème RH en parlent de plus en plus : l’expérience de sortie fait partie de l’image employeur. Sur ce point, des initiatives orientées vivier et parcours, comme certaines pratiques de recrutement et de gestion de talents, rappellent qu’une trajectoire professionnelle se construit aussi sur des documents simples, mais impeccables.
Dernier insight : un départ bien documenté pacifie le présent et protège l’avenir, car la séparation est souvent le premier contact d’un futur “réseau” avec l’entreprise.
Ce que personne ne vous dit ⚠️
Est-ce que le certificat de travail est obligatoire après une démission ?
Oui, le code du travail l'impose quel que soit le motif de rupture, y compris la démission.
Mon employeur peut-il écrire que j'ai été un mauvais salarié sur le certificat ?
Non, c'est interdit. Toute appréciation négative ou nuisible est prohibée et peut exposer l'employeur à des poursuites.
Dans quel délai dois-je recevoir mon certificat de travail ?
À la fin du préavis, même si ce dernier est payé sans être travaillé. Le document doit être disponible dès le dernier jour.
Que faire si mon employeur ne me donne pas mon certificat ?
Envoyez une lettre recommandée avec accusé de réception pour réclamer le document. S'il persiste, vous pouvez saisir le conseil de prud'hommes.
Vous avez une expérience à partager ? Dites-le nous ci-dessous
Benjamin Le Goff, redacteur en chef et fondateur, ancien consultant en strategie RH passe par les grands cabinets internationaux. Specialiste du tissu economique marocain et observateur attentif des transformations sociales qui touchent les cols blancs comme les ouvriers du Royaume, Benjamin publie chaque semaine une enquete, une analyse de fond ou une interview de DRH ou de dirigeant. La ligne editoriale assume sa subjectivite : rigueur factuelle, sources verifiables et zero complaisance commerciale.