Dans les entreprises marocaines, la période d’essai reste un moment décisif, souvent mal compris, alors qu’il influence durablement la qualité de la relation de travail. Côté employeur, elle sert à vérifier l’adéquation entre un besoin opérationnel (tenir un portefeuille clients, maîtriser un outil, gérer une équipe) et des compétences réellement observables sur le terrain. Côté employé, elle permet de valider la promesse initiale : charge de travail, management, moyens disponibles, culture interne. Cette phase de test, encadrée par le droit du travail marocain, se distingue par une souplesse de rupture de contrat qui peut rassurer… ou fragiliser, si les règles sont appliquées à la légère.

Dans la pratique, les litiges naissent rarement d’un désaccord sur la performance pure. Ils proviennent plutôt de détails concrets : une durée mal calculée, un renouvellement non formalisé, un préavis ignoré après la première semaine, une fiche de poste floue, ou une décision perçue comme arbitraire. Au Maroc, la loi vise un équilibre : laisser de la flexibilité, sans ouvrir la porte aux abus (discrimination, prolongation illégale, accès aux données sensibles sans garde-fous). À l’approche d’une rupture, les meilleures précautions relèvent souvent du bon sens RH : prouver, dater, expliquer, sécuriser.

En bref

  • ✅ La période d’essai est un test réciproque : compétences côté salarié, conditions réelles côté entreprise.
  • ⏳ La durée varie selon le contrat de travail (CDI/CDD) et la catégorie (ouvrier, employé, cadre).
  • 📝 En CDI, le renouvellement est possible une seule fois s’il est prévu et formalisé avant la fin de la période initiale.
  • 📌 Après une semaine de travail, un préavis réduit s’applique (selon le mode de paiement) pour limiter les ruptures brutales.
  • 🛡️ La rupture ne doit pas être abusive : un licenciement discriminatoire reste sanctionnable, même pendant l’essai.
  • 🔐 Accès aux informations sensibles : clause de confidentialité et règles internes doivent être cadrées dès l’arrivée.

Période d’essai au Maroc : cadre légal, logique RH et points de vigilance

Au Maroc, la période d'essai est prévue par le droit du travail comme une étape où chacune des parties peut mettre fin au contrat de travail avec une liberté plus grande que lors d’une relation “confirmée”. L’esprit du texte est simple : éviter qu’une embauche se transforme en impasse coûteuse si le poste ne correspond pas, si l’organisation n’est pas prête, ou si les compétences attendues ne sont pas au rendez-vous. Mais cette souplesse est encadrée, car une rupture trop expéditive peut devenir un contentieux, notamment si elle ressemble à une sanction déguisée.

Le point de départ, souvent négligé, consiste à rendre l’essai “observable”. Dans une entreprise fictive de services numériques à Casablanca, un chargé de compte peut sembler performant en entretien, puis peiner à tenir un rythme de reporting hebdomadaire ou à gérer les escalades client. Un essai bien structuré prévoit alors des livrables simples : une prise en main d’outil CRM, un objectif de rendez-vous, une capacité à rédiger une proposition commerciale. Sans ces repères, comment justifier une décision, même si la loi n’exige pas systématiquement une motivation détaillée ? La prudence RH recommande de pouvoir démontrer la cohérence de la décision.

Autre vigilance : la confusion entre essai et stage. Le stage relève d’une logique de formation, avec une convention, tandis que la période d’essai s’inscrit dans un contrat de travail et implique salaire, intégration et protection sociale. Une entreprise qui “habille” une embauche en stage pour conserver une flexibilité maximale s’expose à des requalifications et à des sanctions. La sécurité, ici, passe par la clarté documentaire et le respect des circuits internes.

Enfin, l’essai n’est pas une zone de non-droit : hygiène, sécurité, durée du travail, repos et protections s’appliquent. La phrase-clé à retenir est la suivante : la flexibilité de rupture ne doit jamais devenir un prétexte à l’improvisation.

Durée de la période d’essai au Maroc : CDI, CDD, catégories et renouvellement

La durée de la période d’essai n’est pas une variable “au choix” : elle dépend du type de contrat de travail et du statut du poste. Cette précision évite les pratiques hasardeuses, comme fixer six mois d’essai à un employé non-cadre, ou imposer un renouvellement en CDD. Dans la vie réelle, de nombreuses tensions naissent d’une clause copiée-collée d’un modèle étranger, sans adaptation au droit local.

Pour un CDI, les plafonds généralement admis par le Code du travail marocain distinguent trois catégories : ouvriers, employés et cadres/assimilés. La logique est pragmatique : plus la responsabilité est élevée (management, engagement financier, stratégie), plus l’évaluation nécessite du temps. Mais ce temps n’est pas infini. Le renouvellement en CDI, lorsqu’il est prévu, ne peut se faire qu’une seule fois et doit rester dans les limites maximales, faute de quoi la situation peut être interprétée comme une confirmation implicite.

Pour un CDD, l’essai se calcule autrement : il est corrélé à la durée du contrat lui-même. Sur le terrain, cela protège l’employé contre un essai disproportionné sur un contrat court. Un exemple parlant : sur un CDD de 3 mois dans la distribution, imposer un mois complet d’essai viderait le contrat de sa substance. La règle vise donc une proportionnalité.

Type de contrat 📄 Catégorie 👔 Durée maximale usuelle ⏳ Renouvellement 🔁
CDI Ouvrier 🧰 15 jours ✅ 1 fois (durée équivalente)
CDI Employé 🗂️ 1 mois et demi ✅ 1 fois (durée équivalente)
CDI Cadre / assimilé 🧠 3 mois ✅ 1 fois (durée équivalente)
CDD Selon durée du CDD 📆 1 jour/semaine (max 2 semaines) si ≤ 6 mois ; 1 mois si > 6 mois ❌ non

En pratique, une convention collective ou un règlement intérieur peut prévoir des dispositions plus favorables (essai plus court). Lorsque c’est le cas, l’entreprise a intérêt à harmoniser ses modèles de contrats et à former ses managers : un essai mal calibré crée du risque, sans améliorer la qualité du recrutement. La passerelle logique mène alors à la question suivante : comment rompre proprement pendant cette fenêtre ?

Rupture de contrat pendant la période d’essai : préavis, abus, licenciement et preuves

La rupture de contrat durant la période d’essai est souvent présentée comme “simple”. Elle l’est sur le plan des indemnités : en principe, il n’y a pas d’indemnité de licenciement à verser du seul fait de la rupture pendant l’essai. Pourtant, ce moment concentre plusieurs pièges : le préavis réduit après la première semaine, la notion d’abus, et la nécessité de garder une traçabilité minimale.

Le préavis réduit est un point technique, mais concret. Après une semaine de travail, la rupture obéit à un délai court : deux jours lorsque la paie est journalière/hebdomadaire/quinzaine, et huit jours lorsqu’elle est mensuelle. Ce mécanisme évite les départs “du jour au lendemain” une fois l’intégration démarrée. Un oubli de préavis peut se traduire par des dommages-intérêts équivalents au salaire correspondant à la période non respectée. Pour l’employeur, c’est un risque évitable ; pour l’employé, c’est un levier de négociation si la sortie a été brutale.

L’abus, lui, se situe ailleurs : discrimination, représailles, rupture motivée par un état de santé, une grossesse, une activité syndicale, ou un motif étranger au travail. Même pendant l’essai, ces comportements restent sanctionnables. Une scène classique : une nouvelle recrue annonce une contrainte médicale, puis reçoit une rupture “sans explication” 48 heures après. Sans accuser à tort, une politique RH prudente consiste à documenter des faits professionnels objectifs (qualité, délais, comportement au travail), afin de ne pas laisser planer un soupçon.

Dans un cas vécu typique d’entreprise industrielle (exemple reconstitué), un superviseur rompt l’essai d’un technicien car “il ne s’intègre pas”. Or, aucun point formel n’a été organisé, aucune attente n’a été formulée, et les outils n’avaient pas été fournis à temps. Résultat : la rupture paraît injuste. La meilleure précaution n’est pas de “se blinder”, mais de piloter : objectifs simples, points de suivi, et une décision notifiée proprement.

Avant d’appuyer sur “stop”, une question utile : la difficulté vient-elle d’une inadaptation du profil, ou d’un onboarding insuffisant ? Cette lucidité évite des ruptures répétées qui finissent par coûter plus cher qu’un accompagnement ciblé. Le fil conducteur conduit naturellement aux droits et obligations pendant l’essai, souvent sous-estimés.

Droits et obligations pendant la période d’essai : rémunération, CNSS, ancienneté, congés

Une idée tenace circule encore : pendant la période d’essai, le salarié serait “à moitié” dans l’entreprise. C’est faux. Sur le plan légal, l’essai est du travail effectif. L’employé doit être rémunéré conformément au contrat de travail (au moins selon les minima applicables), et l’employeur doit effectuer les déclarations sociales dès le premier jour, notamment l’affiliation à la CNSS et à l’AMO. Ce socle n’est pas une option : il protège l’entreprise autant qu’il protège la personne.

La rémunération est un terrain sensible. Certaines sociétés envisagent un salaire “réduit” pendant l’essai puis “plein” après confirmation. Cela peut se concevoir uniquement si c’est clair, accepté et écrit, avec des règles compréhensibles. En revanche, une baisse décidée unilatéralement après signature, au motif que “le niveau n’est pas celui attendu”, crée un conflit immédiat. Une approche plus saine consiste à fixer un salaire unique et à organiser l’évaluation sur des critères objectifs. Si un ajustement doit exister, il doit être cadré dès le départ.

L’ancienneté, elle, démarre dès le premier jour. Cela a des impacts concrets : calculs ultérieurs, droits liés à la durée de service, et crédibilité des documents RH. La confusion apparaît parfois lorsque l’entreprise “fait démarrer” le contrat après l’essai. Cette pratique, risquée, brouille la chronologie et peut être contestée. La prudence veut que les dates soient cohérentes : date d’entrée, durée d’essai, et, si renouvellement, acte écrit avant l’échéance.

Concernant les congés, le droit au congé annuel payé dépend d’une ancienneté minimale de service continu. Dans les faits, certaines équipes s’arrangent pour autoriser quelques jours pendant l’essai, afin de gérer une situation familiale, un déménagement, ou un impératif administratif. Ce type d’accord doit rester tracé, même par un email, pour éviter les malentendus. La règle d’or : la flexibilité opérationnelle ne doit pas dégrader la conformité.

Pour sécuriser le quotidien, voici une liste de repères utiles :

  • 🧾 Vérifier que le contrat de travail mentionne clairement la durée de l’essai et, en CDI, la possibilité de renouvellement.
  • 💰 Confirmer par écrit les modalités de rémunération applicables pendant l’essai (montant, primes, variables).
  • 🛡️ S’assurer de la déclaration CNSS/AMO dès le premier jour, sans “période d’attente”.
  • 🕒 Mettre en place 2 points de suivi minimum (mi-parcours et avant échéance) pour éviter les surprises.
  • 📩 Formaliser toute décision (renouvellement ou rupture) avant la date limite, avec respect du préavis si applicable.

Ce socle social et contractuel ouvre un sujet souvent négligé : l’accès aux informations sensibles et les clauses à manier avec discernement, surtout quand une rupture est possible à très court terme.

Un point technique mérite d’être traité de façon opérationnelle : comment protéger l’entreprise sans transformer l’essai en parcours de méfiance ?

Précautions avant de rompre le contrat : confidentialité, données sensibles, renouvellement et prévention des litiges

Les meilleures précautions avant une rupture de contrat ne se limitent pas à une lettre. Elles commencent dès l’arrivée, car c’est pendant la période d'essai que l’entreprise donne parfois accès à des actifs critiques : fichiers clients, prix, stratégie commerciale, code source, procédures internes. Le paradoxe est connu : plus une personne doit “produire vite”, plus elle a besoin d’accès… alors même que la relation peut s’arrêter rapidement. D’où l’intérêt d’un cadrage simple et proportionné.

Première précaution : organiser l’accès par paliers. Un commercial junior n’a pas besoin d’exporter la base complète dès la première semaine. Un analyste peut travailler sur des jeux de données anonymisés avant d’accéder à des données nominatives. Cette logique de “besoin d’en connaître” réduit le risque sans entraver le travail. Deuxième précaution : formaliser une clause de confidentialité, et, si pertinent, une clause de non-concurrence conforme et équilibrée. Ces clauses n’ont d’intérêt que si elles sont comprises et applicables ; des formulations excessives peuvent être contestées ou simplement inopérantes.

Ensuite vient la gestion du renouvellement en CDI. C’est un moment à haut risque de contentieux : si l’entreprise attend le dernier jour, sans écrit, puis “prolonge” oralement, elle se fragilise. Un renouvellement doit être décidé avant l’échéance, avec une date claire, et idéalement accompagné d’objectifs révisés. Pourquoi ? Parce que le renouvellement, par définition, signifie que l’évaluation n’est pas terminée. Il faut donc préciser ce qui doit être observé en plus : autonomie, qualité, relation client, respect des procédures. Sans cela, le renouvellement ressemble à un simple report, parfois vécu comme une mise sous pression.

Que faire si l’entreprise dépasse les limites ? Le risque est double : d’une part, la situation peut être requalifiée comme confirmation ; d’autre part, des sanctions peuvent viser l’employeur, et le salarié peut saisir l’inspection du travail ou la juridiction compétente. En prévention, les DRH matures utilisent un calendrier partagé : date d’entrée, fin d’essai, alerte à J-15, décision à J-7. Ce sont des mesures simples, qui évitent des erreurs coûteuses.

Frise interactive — Période d’essai au Maroc

Repères pratiques pour sécuriser la période d’essai, décider à temps et formaliser la fin du contrat.

Filtrer
Filtrer :

Astuce : utilisez ↑ ↓ pour naviguer entre les étapes, Entrée/Espace pour ouvrir, Échap pour fermer.

0 / 0 étape(s) affichée(s)
    /** * Outil : Frise interactive « Période d’essai au Maroc » * – 100% HTML + JS, sans images, compatible copier/coller * – Accessibilité : navigation clavier, aria-live, boutons focusables * – Données : intégrées ci-dessous (aucun service externe requis) * * — Option API (100% gratuite, sans clé) si vous voulez charger des jours fériés au Maroc * API: https://date.nager.at/api/v3/PublicHolidays/2026/MA * Exemple de réponse JSON (extrait) : * [ * { * « date »: »2026-01-01″, * « localName »: »Jour de l’an », * « name »: »New Year’s Day », * « countryCode »: »MA », * « fixed »:true, * « global »:true, * « counties »:null, * « launchYear »:null, * « types »:[« Public »] * } * ] * Usage possible : afficher une alerte si une échéance tombe sur un jour férié. */ (function () { // —————————- // Textes FR facilement éditables // —————————- const I18N = { categories: { administratif: « Administratif », evaluation: « Évaluation », decision: « Décision » }, labels: { whenPrefix: « Moment : « , riskPrefix: « Risque si négligé : « , checklistTitle: « Checklist rapide », step: « Étape », open: « Ouvrir », close: « Fermer », expanded: « déplié », collapsed: « replié » }, toast: { copied: « Copié dans le presse-papiers. », copyFail: « Impossible de copier automatiquement. Sélectionnez puis copiez manuellement. » }, buttons: { expandAll: « Déplier tout », collapseAll: « Replier tout » } }; // —————————- // Données de la timeline (exclusivement en français) // —————————- const STEPS = [ { id: « j1 », ordre: 1, titre: « Jour 1 — Signature & déclarations (CNSS/AMO) », moment: « Jour 1 », categorie: « administratif », resume: « Formaliser l’entrée et sécuriser la preuve du démarrage (contrat, CNSS/AMO, infos internes). », risque: « Litiges sur la date de début, couverture sociale incomplète, contestation des droits. », checklist: [ « Faire signer le contrat et remettre un exemplaire. », « Lancer la déclaration CNSS/AMO selon le processus interne. », « Documenter la date/heure de prise de poste (mail d’accueil, badge, registre). », « Remettre les règles clés : horaires, discipline, confidentialité, sécurité. » ], astuces: [ « Centraliser les preuves (mails, accusés, captures des démarches) dans un dossier RH. », « Clarifier dès le départ les objectifs attendus pendant l’essai. » ] }, { id: « j7 », ordre: 2, titre: « Jour 7 — Vérifier si un préavis réduit devient applicable », moment: « Jour 7 (repère de vérification) », categorie: « administratif », resume: « Contrôler les règles internes/contractuelles : préavis, modalités de rupture, délais, forme écrite. », risque: « Rupture mal formalisée, délai non respecté, contestation de la procédure. », checklist: [ « Relire la clause de période d’essai et ses modalités. », « Vérifier les règles de préavis (contrat, usages, note interne). », « Aligner RH et manager sur le scénario : confirmation, renouvellement, rupture. », « Mettre à jour une trame de notification écrite (prête à l’emploi). » ], astuces: [ « Mettre un rappel calendrier : points d’étape et décision avant la fin. », « Si doute, demander une validation RH/juridique interne. » ] }, { id: « mid », ordre: 3, titre: « Milieu de période — Point d’évaluation documenté », moment: « Milieu de période d’essai », categorie: « evaluation », resume: « Faire un point factuel sur la performance, l’intégration et les écarts, avec traces écrites. », risque: « Décision perçue comme arbitraire, absence d’éléments objectifs en cas de contestation. », checklist: [ « Fixer un entretien formalisé (ordre du jour + compte rendu). », « Lister objectifs, résultats, comportements, compétences. », « Documenter les actions correctives et délais (plan court). », « Partager un feedback clair, respectueux et actionnable. » ], astuces: [ « S’appuyer sur des exemples concrets (livrables, retours clients, délais). », « Éviter les appréciations vagues; préférer des faits datés. » ] }, { id: « j15 », ordre: 4, titre: « J-15 — Revue RH + manager (préparation de la décision) », moment: « 15 jours avant la fin », categorie: « evaluation », resume: « Consolider les éléments, vérifier les risques et préparer les documents (confirmation/renouvellement/rupture). », risque: « Décision tardive, erreurs de forme, incohérences entre RH et management. », checklist: [ « Passer en revue les preuves (objectifs, évaluations, échanges). », « Vérifier les dates : début, fin, éventuel renouvellement prévu. », « Préparer les lettres (confirmation / renouvellement / rupture). », « Anticiper la restitution matériel et la clôture des accès. » ], astuces: [ « Préparer un plan de passation si départ probable. », « S’assurer que le discours du manager est aligné avec l’écrit. » ] }, { id: « j7fin », ordre: 5, titre: « J-7 — Décision : confirmation, renouvellement (CDI) ou rupture », moment: « 7 jours avant la fin », categorie: « decision », resume: « Trancher et formaliser : confirmer, renouveler (si prévu) ou rompre, en respectant les règles. », risque: « Délais dépassés, renouvellement impossible, rupture contestée. », checklist: [ « Valider la décision (RH + manager) et sa justification factuelle. », « Choisir la voie : confirmation / renouvellement / rupture. », « Planifier l’entretien de notification et l’envoi de l’écrit. », « Préparer la communication interne (équipe, accès, matériel). » ], astuces: [ « Éviter d’attendre le dernier jour : cela augmente les erreurs. », « Prévoir un message neutre et confidentiel pour l’équipe. » ] }, { id: « last », ordre: 6, titre: « Dernier jour — Notification écrite, restitution matériel, clôture des accès », moment: « Dernier jour », categorie: « decision », resume: « Finaliser proprement : écrit, inventaire, récupération et sécurité (IT/accès). », risque: « Risques de sécurité, contentieux sur la remise des documents, perte de matériel/données. », checklist: [ « Remettre/Envoyer la notification écrite selon la procédure interne. », « Récupérer le matériel (PC, badge, clés) avec inventaire signé. », « Clôturer les accès (messagerie, VPN, outils SaaS) selon checklist IT. », « Confirmer la passation et archiver les documents. » ], astuces: [ « Faire une checklist conjointe RH/IT pour éviter les oublis. », « Rester factuel : éviter les débats émotionnels dans l’écrit. » ] }, { id: « weekAfter », ordre: 7, titre: « Semaine suivante — Attestation de travail / solde de tout compte (si applicable) », moment: « Semaine suivante », categorie: « administratif », resume: « Clôturer administrativement et remettre les documents éventuels dans des délais raisonnables. », risque: « Réclamations ultérieures, incompréhensions sur les montants, réputation employeur dégradée. », checklist: [ « Préparer l’attestation de travail si applicable. », « Traiter le solde de tout compte si applicable (éléments, validation). », « Mettre à jour le dossier salarié (sortie, archivage). », « Répondre aux questions restantes via un point de contact unique. » ], astuces: [ « Garder une trace des remises de documents (accusé). », « Uniformiser les pratiques pour réduire les litiges. » ] } ]; // —————————- // Helpers // —————————- const $ = (sel, root = document) => root.querySelector(sel); const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel)); const state = { filter: « tous », query: «  », focusMode: false, expanded: new Set(), // ids ouverts activeId: null, expandAll: false }; // Elements const root = $(« #timeline-essai-maroc »); const listEl = $(« #tlList »); const emptyEl = $(« #tlEmptyState »); const searchEl = $(« #tlSearch »); const progressBarEl = $(« #tlProgressBar »); const progressTextEl = $(« #tlProgressText »); const totalTextEl = $(« #tlTotalText »); const expandAllBtn = $(« #tlExpandAllBtn »); const resetBtn = $(« #tlResetBtn »); const focusModeEl = $(« #tlFocusMode »); const detailTitleEl = $(« #tlDetailTitle »); const detailWhenEl = $(« #tlDetailWhen »); const detailTagEl = $(« #tlDetailTag »); const detailRiskEl = $(« #tlDetailRisk »); const detailDescEl = $(« #tlDetailDesc »); const detailChecklistEl = $(« #tlDetailChecklist »); const toastEl = $(« #tlToast »); const copyBtn = $(« #tlCopyBtn »); const prevBtn = $(« #tlPrevBtn »); const nextBtn = $(« #tlNextBtn »); function normalize(str) { return (str || «  ») .toLowerCase() .normalize(« NFD ») .replace(/[u0300-u036f]/g, «  »); } function matches(step) { const q = normalize(state.query.trim()); const inFilter = state.filter === « tous » ? true : step.categorie === state.filter; if (!q) return inFilter; const hay = normalize( [ step.titre, step.moment, I18N.categories[step.categorie] || step.categorie, step.resume, step.risque, …(step.checklist || []), …(step.astuces || []) ].join( » | « ) ); return inFilter && hay.includes(q); } function getVisibleSteps() { let filtered = STEPS.filter(matches).sort((a, b) => a.ordre – b.ordre); // Mode focus : n’afficher que 3 étapes autour de l’étape active (si possible) if (state.focusMode) { const idx = Math.max(0, filtered.findIndex(s => s.id === state.activeId)); if (idx >= 0) { const start = Math.max(0, idx – 1); const end = Math.min(filtered.length, idx + 2); filtered = filtered.slice(start, end); } else { filtered = filtered.slice(0, 3); } } return filtered; } function setToast(msg) { toastEl.textContent = msg; toastEl.classList.remove(« hidden »); window.clearTimeout(setToast._t); setToast._t = window.setTimeout(() => toastEl.classList.add(« hidden »), 1800); } function setActive(stepId) { state.activeId = stepId; // Mise à jour du panneau détail const step = STEPS.find(s => s.id === stepId); if (!step) return; detailTitleEl.textContent = step.titre; detailWhenEl.textContent = I18N.labels.whenPrefix + step.moment; detailTagEl.textContent = I18N.categories[step.categorie] || step.categorie; detailRiskEl.textContent = I18N.labels.riskPrefix + step.risque; detailDescEl.textContent = step.resume; detailChecklistEl.innerHTML = «  »; (step.checklist || []).forEach(item => { const li = document.createElement(« li »); li.className = « flex gap-2 »; li.innerHTML = ‘‘ + ‘‘; li.querySelector(« span:last-child »).textContent = item; detailChecklistEl.appendChild(li); }); // Boutons prev/next dans l’ordre des steps visibles (pas forcément tous) const visible = getVisibleSteps(); const idx = visible.findIndex(s => s.id === stepId); prevBtn.disabled = idx = visible.length – 1; [prevBtn, nextBtn].forEach(btn => { btn.classList.toggle(« opacity-40 », btn.disabled); btn.classList.toggle(« cursor-not-allowed », btn.disabled); }); // Mettre en évidence dans la liste $$(« [data-step-item] », root).forEach(li => { const isActive = li.getAttribute(« data-step-item ») === stepId; li.classList.toggle(« ring-2 », isActive); li.classList.toggle(« ring-slate-900/15 », isActive); li.classList.toggle(« bg-slate-50 », isActive); const badge = li.querySelector(« [data-step-badge] »); if (badge) { badge.classList.toggle(« bg-slate-900 », isActive); badge.classList.toggle(« text-white », isActive); badge.classList.toggle(« bg-white », !isActive); badge.classList.toggle(« text-slate-900 », !isActive); } }); } function toggleExpanded(stepId, forceValue) { const isOpen = state.expanded.has(stepId); const next = typeof forceValue === « boolean » ? forceValue : !isOpen; if (next) state.expanded.add(stepId); else state.expanded.delete(stepId); render(); // re-render pour synchroniser aria + contenu } function render() { const visible = getVisibleSteps(); const total = visible.length; totalTextEl.textContent = String(total); // Progression : si active visible -> position/total, sinon 0 const idx = visible.findIndex(s => s.id === state.activeId); const progress = idx >= 0 ? (idx + 1) : 0; progressTextEl.textContent = String(progress); const pct = total > 0 ? (progress / total) * 100 : 0; progressBarEl.style.width = pct + « % »; // Bouton « déplier tout » visible si >0 expandAllBtn.classList.toggle(« hidden », total === 0); expandAllBtn.textContent = state.expandAll ? I18N.buttons.collapseAll : I18N.buttons.expandAll; // Etat vide emptyEl.classList.toggle(« hidden », total !== 0); // Render liste listEl.innerHTML = «  »; visible.forEach((step, i) => { const isOpen = state.expandAll || state.expanded.has(step.id); const isActive = state.activeId === step.id; const li = document.createElement(« li »); li.setAttribute(« data-step-item », step.id); li.className = « relative ml-0 rounded-2xl border border-slate-200 bg-white p-4 sm:p-5 shadow-sm  » + « transition-colors »; // Point sur la ligne const dot = document.createElement(« div »); dot.className = « absolute -left-[2px] top-6 »; dot.innerHTML = `
    `; li.appendChild(dot); // Contenu const cat = I18N.categories[step.categorie] || step.categorie; li.innerHTML += `
    ${String(i + 1).padStart(2, « 0 »)} ${cat} ${step.moment}

    ${step.titre}

    ${step.resume}

    Précautions & preuves

    Risque si négligé : ${step.risque}

    Checklist

      ${(step.checklist || []).slice(0, 4).map(item => `
    • ${item}
    • `).join(«  »)}

    Conseils pratiques

      ${(step.astuces || []).map(item => `
    • ${item}
    • `).join(«  »)}
    `; // Accessibilité : rendre l’élément focusable pour navigation clavier li.tabIndex = 0; li.setAttribute(« role », « group »); li.setAttribute(« aria-label », `${I18N.labels.step} ${i + 1} : ${step.titre}`); listEl.appendChild(li); }); // Si aucune étape active ou active filtrée, sélectionner la première visible if (visible.length > 0) { if (!state.activeId || !visible.some(s => s.id === state.activeId)) { state.activeId = visible[0].id; // Par défaut, en mode focus, ouvrir l’étape active pour réduire le bruit if (state.focusMode) state.expanded.add(state.activeId); } setActive(state.activeId); } else { state.activeId = null; detailTitleEl.textContent = « Sélectionnez une étape »; detailWhenEl.textContent = «  »; detailTagEl.textContent = « — »; detailRiskEl.textContent = « — »; detailDescEl.textContent = « Utilisez la frise à gauche pour afficher les actions recommandées, les précautions et les points de preuve. »; detailChecklistEl.innerHTML = «  »; prevBtn.disabled = true; nextBtn.disabled = true; [prevBtn, nextBtn].forEach(btn => { btn.classList.add(« opacity-40 », « cursor-not-allowed »); }); } // Afficher/masquer reset btn en desktop déjà géré; sur mobile on garde le reset via bouton haut si besoin } // —————————- // Events // —————————- // Recherche (debounce léger) let tSearch = null; searchEl.addEventListener(« input », () => { window.clearTimeout(tSearch); tSearch = window.setTimeout(() => { state.query = searchEl.value; render(); }, 90); }); // Filtres $$(« .tlFilterBtn », root).forEach(btn => { btn.addEventListener(« click », () => { const f = btn.getAttribute(« data-filter »); state.filter = f; // Styles boutons $$(« .tlFilterBtn », root).forEach(b => { const active = b.getAttribute(« data-filter ») === state.filter; b.classList.toggle(« bg-white », active); b.classList.toggle(« text-slate-900 », active); b.classList.toggle(« bg-white/10 », !active); b.classList.toggle(« text-white », !active); b.classList.toggle(« ring-1 », !active); b.classList.toggle(« ring-white/15 », !active); }); render(); }); }); // Mode focus focusModeEl.addEventListener(« change », () => { state.focusMode = !!focusModeEl.checked; // En mode focus, ouvrir automatiquement l’étape active if (state.focusMode && state.activeId) state.expanded.add(state.activeId); render(); }); // Déplier/Replier tout expandAllBtn.addEventListener(« click », () => { state.expandAll = !state.expandAll; // Si on replie tout, conserver seulement l’étape active ouverte (optionnel) if (!state.expandAll) { state.expanded.clear(); if (state.activeId) state.expanded.add(state.activeId); } render(); }); // Reset resetBtn.addEventListener(« click », () => { state.filter = « tous »; state.query = «  »; state.focusMode = false; state.expandAll = false; state.expanded.clear(); state.activeId = null; searchEl.value = «  »; focusModeEl.checked = false; // reset styles filtres $$(« .tlFilterBtn », root).forEach(b => { const active = b.getAttribute(« data-filter ») === « tous »; b.classList.toggle(« bg-white », active); b.classList.toggle(« text-slate-900 », active); b.classList.toggle(« bg-white/10 », !active); b.classList.toggle(« text-white », !active); b.classList.toggle(« ring-1 », !active); b.classList.toggle(« ring-white/15 », !active); }); render(); }); // Clicks dans la liste (délégation) listEl.addEventListener(« click », (e) => { const btn = e.target.closest(« button[data-action] »); if (!btn) return; const id = btn.getAttribute(« data-id »); const action = btn.getAttribute(« data-action »); if (action === « select ») { setActive(id); // En mode focus, ouvrir automatiquement la sélection if (state.focusMode) state.expanded.add(id); render(); return; } if (action === « toggle ») { toggleExpanded(id); return; } }); // Navigation via boutons prev/next prevBtn.addEventListener(« click », () => { if (prevBtn.disabled) return; const visible = getVisibleSteps(); const idx = visible.findIndex(s => s.id === state.activeId); if (idx > 0) { setActive(visible[idx – 1].id); if (state.focusMode) state.expanded.add(state.activeId); render(); } }); nextBtn.addEventListener(« click », () => { if (nextBtn.disabled) return; const visible = getVisibleSteps(); const idx = visible.findIndex(s => s.id === state.activeId); if (idx >= 0 && idx { if (!state.activeId) return; const step = STEPS.find(s => s.id === state.activeId); if (!step) return; const lines = [ step.titre, `${I18N.labels.whenPrefix}${step.moment}`, `${I18N.categories[step.categorie] || step.categorie}`, «  », step.resume, «  », `${I18N.labels.riskPrefix}${step.risque}`, «  », « Checklist : », …(step.checklist || []).map(x => `- ${x}`) ]; const text = lines.join(« n »); try { await navigator.clipboard.writeText(text); setToast(I18N.toast.copied); } catch (err) { // fallback minimal : afficher dans le toast (sans surcharger) setToast(I18N.toast.copyFail); } }); // Navigation clavier : ↑ ↓ pour changer d’étape, Entrée/Espace pour déplier/replier, Échap pour replier listEl.addEventListener(« keydown », (e) => { const li = e.target.closest(« [data-step-item] »); if (!li) return; const id = li.getAttribute(« data-step-item »); const visible = getVisibleSteps(); const idx = visible.findIndex(s => s.id === id); if (e.key === « ArrowDown ») { e.preventDefault(); const next = visible[Math.min(visible.length – 1, idx + 1)]; if (next) { setActive(next.id); // focus l’élément correspondant const el = listEl.querySelector(`[data-step-item= »${next.id} »]`); if (el) el.focus(); if (state.focusMode) state.expanded.add(next.id); render(); } } else if (e.key === « ArrowUp ») { e.preventDefault(); const prev = visible[Math.max(0, idx – 1)]; if (prev) { setActive(prev.id); const el = listEl.querySelector(`[data-step-item= »${prev.id} »]`); if (el) el.focus(); if (state.focusMode) state.expanded.add(prev.id); render(); } } else if (e.key === « Enter » || e.key ===  » « ) { e.preventDefault(); setActive(id); toggleExpanded(id); } else if (e.key === « Escape ») { e.preventDefault(); state.expanded.delete(id); state.expandAll = false; render(); } }); // Init // Par défaut : étape 1 active et ouverte state.activeId = STEPS[0]?.id || null; if (state.activeId) state.expanded.add(state.activeId); render(); })();

    Enfin, lors d’une rupture, la checklist de sortie doit être aussi rigoureuse que l’entrée : restitution du PC, suppression des accès, récupération des badges, rappel des obligations de confidentialité. Ce formalisme n’est pas hostile ; il protège toutes les parties et rend la séparation propre. La dernière idée à garder en tête : une rupture bien préparée est souvent celle qui n’ira jamais au conflit.

    {« @context »: »https://schema.org », »@type »: »FAQPage », »mainEntity »:[{« @type »: »Question », »name »: »Quelle est la duru00e9e de la pu00e9riode d’essai au Maroc pour un CDI ? », »acceptedAnswer »:{« @type »: »Answer », »text »: »En pratique, les duru00e9es maximales usuelles pru00e9vues par le Code du travail marocain varient selon la catu00e9gorie : 15 jours pour un ouvrier, 1 mois et demi pour un employu00e9, 3 mois pour un cadre et assimilu00e9. En CDI, un renouvellement est possible une seule fois si cela est pru00e9vu et formalisu00e9 avant la fin de la pu00e9riode initiale. »}},{« @type »: »Question », »name »: »Peut-on rompre un contrat pendant la pu00e9riode d’essai sans indemnitu00e9 ? », »acceptedAnswer »:{« @type »: »Answer », »text »: »Oui, la rupture de contrat pendant la pu00e9riode d’essai nu2019ouvre en principe pas droit u00e0 une indemnitu00e9 de licenciement. En revanche, apru00e8s une semaine de travail, un pru00e9avis ru00e9duit peut su2019appliquer selon le mode de paiement. Une rupture abusive (par exemple discriminatoire) peut aussi entrau00eener des dommages-intu00e9ru00eats. »}},{« @type »: »Question », »name »: »La CNSS est-elle obligatoire du00e8s le du00e9but de la pu00e9riode d’essai ? », »acceptedAnswer »:{« @type »: »Answer », »text »: »Oui. Lu2019employeur doit du00e9clarer lu2019employu00e9 u00e0 la CNSS et lu2019affilier u00e0 lu2019AMO du00e8s le premier jour, mu00eame pendant la pu00e9riode d’essai. Le non-respect expose lu2019entreprise u00e0 des sanctions et fragilise sa position en cas de litige. »}},{« @type »: »Question », »name »: »La pu00e9riode d’essai compte-t-elle pour lu2019anciennetu00e9 au Maroc ? », »acceptedAnswer »:{« @type »: »Answer », »text »: »Oui, la pu00e9riode d’essai est du travail effectif et doit u00eatre prise en compte dans le calcul de lu2019anciennetu00e9. Lu2019anciennetu00e9 court u00e0 partir du premier jour de prise de fonction tel quu2019u00e9tabli par le contrat de travail. »}},{« @type »: »Question », »name »: »Quelles pru00e9cautions prendre avant de rompre une pu00e9riode d’essai ? », »acceptedAnswer »:{« @type »: »Answer », »text »: »Les pru00e9cautions clu00e9s consistent u00e0 vu00e9rifier la duru00e9e lu00e9gale et la date du2019u00e9chu00e9ance, respecter le pru00e9avis ru00e9duit si applicable, formaliser la du00e9cision par u00e9crit, documenter des u00e9lu00e9ments objectifs (objectifs, points de suivi), et su00e9curiser la sortie (restitution matu00e9riel, clu00f4ture des accu00e8s, rappel de confidentialitu00e9). Cela ru00e9duit fortement le risque de contestation pour licenciement abusif. »}}]}

    Quelle est la durée de la période d’essai au Maroc pour un CDI ?

    En pratique, les durées maximales usuelles prévues par le Code du travail marocain varient selon la catégorie : 15 jours pour un ouvrier, 1 mois et demi pour un employé, 3 mois pour un cadre et assimilé. En CDI, un renouvellement est possible une seule fois si cela est prévu et formalisé avant la fin de la période initiale.

    Peut-on rompre un contrat pendant la période d’essai sans indemnité ?

    Oui, la rupture de contrat pendant la période d’essai n’ouvre en principe pas droit à une indemnité de licenciement. En revanche, après une semaine de travail, un préavis réduit peut s’appliquer selon le mode de paiement. Une rupture abusive (par exemple discriminatoire) peut aussi entraîner des dommages-intérêts.

    La CNSS est-elle obligatoire dès le début de la période d’essai ?

    Oui. L’employeur doit déclarer l’employé à la CNSS et l’affilier à l’AMO dès le premier jour, même pendant la période d’essai. Le non-respect expose l’entreprise à des sanctions et fragilise sa position en cas de litige.

    La période d’essai compte-t-elle pour l’ancienneté au Maroc ?

    Oui, la période d’essai est du travail effectif et doit être prise en compte dans le calcul de l’ancienneté. L’ancienneté court à partir du premier jour de prise de fonction tel qu’établi par le contrat de travail.

    Quelles précautions prendre avant de rompre une période d’essai ?

    Les précautions clés consistent à vérifier la durée légale et la date d’échéance, respecter le préavis réduit si applicable, formaliser la décision par écrit, documenter des éléments objectifs (objectifs, points de suivi), et sécuriser la sortie (restitution matériel, clôture des accès, rappel de confidentialité). Cela réduit fortement le risque de contestation pour licenciement abusif.