[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-ouvriers-employes-par-les-entreprises-du-batiment-fr":83,"footer-cities-fr":140},[4,14,22,30,38,45,53,60,67,75],{"seo_content":5,"id":8,"name":9,"slug":10,"parentId":7,"lang":11,"_count":12},[6],{"page_slug":7},null,"cmkzhl7xm00dbulbc93h4qog5","Juridique","avocats","fr-FR",{"experts":13},8,{"seo_content":15,"id":17,"name":18,"slug":19,"parentId":7,"lang":11,"_count":20},[16],{"page_slug":7},"cmkzhl84700djulbcbv6pzu9e","Informatique","informaticiens",{"experts":21},3,{"seo_content":23,"id":25,"name":26,"slug":27,"parentId":7,"lang":11,"_count":28},[24],{"page_slug":7},"cmkzhlaos00gnulbc07i9jrco","Amélioration de la Maison","artisans",{"experts":29},4,{"seo_content":31,"id":33,"name":34,"slug":35,"parentId":7,"lang":11,"_count":36},[32],{"page_slug":7},"cmkzhlaqg00gpulbcx38bwoc2","Général","divers-generalistes",{"experts":37},0,{"seo_content":39,"id":41,"name":42,"slug":43,"parentId":7,"lang":11,"_count":44},[40],{"page_slug":7},"cmkzhlbvq00i3ulbcutdbcz50","Électronique Grand Public","techniciens-electronique",{"experts":21},{"seo_content":46,"id":48,"name":49,"slug":50,"parentId":7,"lang":11,"_count":51},[47],{"page_slug":7},"cmkzhlcaw00ilulbc38pxoogr","Santé","medecins",{"experts":52},5,{"seo_content":54,"id":56,"name":57,"slug":58,"parentId":7,"lang":11,"_count":59},[55],{"page_slug":7},"cmkzhlcmi00izulbcxva1m47f","Gestion de Patrimoine","conseillers-patrimoniaux",{"experts":21},{"seo_content":61,"id":63,"name":64,"slug":65,"parentId":7,"lang":11,"_count":66},[62],{"page_slug":7},"cmkzhldcv00jvulbcmcd5a7mk","Animaux et Vétérinaires","veterinaires",{"experts":21},{"seo_content":68,"id":70,"name":71,"slug":72,"parentId":7,"lang":11,"_count":73},[69],{"page_slug":7},"cmkzhldrr00kdulbchxfo67eg","Mécanique et Réparation","mecaniciens",{"experts":74},1,{"seo_content":76,"id":78,"name":79,"slug":80,"parentId":7,"lang":11,"_count":81},[77],{"page_slug":7},"cmkzhl9l300fbulbcv3i8q8p3","Aide aux Devoirs","professeurs-particuliers",{"experts":82},6,{"slug":84,"title":85,"page_title":86,"description":87,"content_md":88,"local_slug":84,"json_ld":89,"faq":109,"tool_html":134,"source":135,"category":136,"audience":137,"publish_mode":138,"hero_image":139,"hero_image_alt":85},"ccn-ouvriers-employes-par-les-entreprises-du-batiment","CCN des ouvriers employés par les entreprises du bâtiment visées par le décret — calculateur complet","Calculateur CCN Bâtiment Ouvriers IDCC 1596 | Expert Zoom","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille de salaires, la prime de vacances et l'indemnisation intempéries de la CCN des ouvriers du bâtiment (IDCC 1596).","Ce calculateur couvre 5 fonctions clés de la convention collective IDCC 1596 : l'indemnité de licenciement (formule 1\u002F5 + 2\u002F15 au-delà de 10 ans), les durées de préavis spécifiques au bâtiment, la grille conventionnelle de salaires (coefficients 150 à 270), la prime de vacances à 30 % et l'indemnisation intempéries via la CIBTP à 75 % du salaire.",[90],{"name":91,"@type":92,"about":93,"author":97,"@context":100,"isPartOf":101,"inLanguage":104,"description":105,"operatingSystem":106,"applicationCategory":107,"isAccessibleForFree":108},"Calculateur CCN Bâtiment Ouvriers — IDCC 1596","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective des ouvriers employés par les entreprises du bâtiment visées par le décret","Thing","IDCC 1596",{"name":98,"@type":99},"Expert-Zoom","Organization","https:\u002F\u002Fschema.org",{"url":102,"@type":103},"\u002Ffr\u002Fmagazine\u002Fjuridique\u002Fles-conventions-collectives-en-france","Article","fr","Outil interactif couvrant l'indemnité de licenciement, le préavis, la grille de salaires conventionnelle, la prime de vacances et l'indemnisation intempéries de la convention collective des ouvriers du bâtiment (IDCC 1596).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131],{"a":111,"q":112},"La convention collective IDCC 1596 prévoit une indemnité égale à 1\u002F5 de mois de salaire brut par année d'ancienneté, augmentée de 2\u002F15 de mois par année d'ancienneté au-delà de 10 ans. Cette formule peut s'avérer plus avantageuse que le minimum légal (art. L1234-9 du code du travail) pour les salariés ayant une longue ancienneté. En cas de licenciement pour inaptitude, l'indemnité est doublée. Une ancienneté minimale d'1 an est requise.","Comment calculer l'indemnité de licenciement pour un ouvrier du bâtiment (IDCC 1596) ?",{"a":114,"q":115},"Selon l'IDCC 1596, le préavis de licenciement est de 24 heures si l'ancienneté est inférieure à 6 mois, de 1 semaine entre 6 mois et 2 ans d'ancienneté, et de 1 mois au-delà de 2 ans. Pour les travailleurs handicapés reconnus, ces durées sont doublées dans la limite de 3 mois.","Quelle est la durée du préavis de licenciement dans la convention collective bâtiment ouvriers ?",{"a":117,"q":118},"La grille conventionnelle IDCC 1596 s'échelonne du coefficient 150 (niveau N1-P1, ouvrier débutant) au coefficient 270 (niveau N4-P2, chef d'équipe expérimenté). Les salaires minimaux sont fixés régionalement par avenant chaque année. À titre indicatif, pour l'Île-de-France en 2026, le niveau d'entrée se situe autour de 1 843 €\u002Fmois brut (35h) et le niveau le plus élevé autour de 2 510 €\u002Fmois brut.","Quels sont les coefficients de la grille de salaires de la CCN bâtiment ouvriers 2026 ?",{"a":120,"q":121},"La prime de vacances est égale à 30 % de l'indemnité de congés payés légale calculée sur 24 jours ouvrables. Elle est versée en même temps que l'indemnité de congés payés, sous réserve que l'ouvrier ait travaillé au moins 1 675 heures durant l'année de référence. Cette prime est spécifique à la convention bâtiment et s'ajoute aux congés légaux.","À quoi correspond la prime de vacances dans la convention collective bâtiment ouvriers IDCC 1596 ?",{"a":123,"q":124},"Les ouvriers du bâtiment relevant de l'IDCC 1596 sont indemnisés via la CIBTP (Caisse Intempéries BTP) à hauteur de 75 % de leur salaire horaire brut de base, hors primes et heures supplémentaires. Le plafond est fixé à 120 % du plafond horaire de la Sécurité sociale. La première heure de chaque semaine constitue une heure de carence non indemnisée. La durée maximum d'indemnisation est de 495 heures (55 jours) par année. L'ouvrier doit avoir travaillé au moins 200 heures dans les 2 mois précédant l'arrêt pour être éligible.","Comment fonctionne l'indemnisation des intempéries pour les ouvriers du bâtiment ?",{"a":126,"q":127},"Oui, la CCN IDCC 1596 prévoit des durées spécifiques pour la démission : 2 jours de préavis jusqu'à 3 mois d'ancienneté (fin de période d'essai), et 2 semaines au-delà de 3 mois d'ancienneté.","Le préavis de démission est-il différent du code du travail dans la convention bâtiment IDCC 1596 ?",{"a":129,"q":130},"La CCN IDCC 1596 ne prévoit pas de prime d'ancienneté mensuelle en numéraire. En revanche, elle accorde des jours de congés supplémentaires au titre de l'ancienneté : 2 jours à partir de 20 ans, 4 jours à partir de 25 ans, et 6 jours à partir de 30 ans d'ancienneté dans l'entreprise.","Y a-t-il une prime d'ancienneté en numéraire dans la convention collective bâtiment ouvriers ?",{"a":132,"q":133},"Les taux de majoration pour les heures supplémentaires sont de 25 % pour les heures effectuées entre 36 et 43 heures hebdomadaires, et de 50 % pour les heures au-delà de 43 heures. Un contingent annuel de 145 heures est applicable pour les aménagements du temps de travail annualisés, et de 180 heures pour les autres cas. Ces taux sont alignés sur le code du travail mais explicitement codifiés dans la convention.","Quelle est la grille des heures supplémentaires dans la CCN bâtiment ouvriers IDCC 1596 ?","\u003C!DOCTYPE html>\n\u003Chtml lang=\"fr\">\n\u003Chead>\n  \u003Cmeta charset=\"utf-8\">\n  \u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n  \u003Ctitle>Calculateur CCN Bâtiment Ouvriers IDCC 1596\u003C\u002Ftitle>\n  \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Flucide@latest\u002Fdist\u002Fumd\u002Flucide.min.js\">\u003C\u002Fscript>\n  \u003Cstyle>\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n    :root {\n      --bg: #fafaf9;\n      --card: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --text: #1c1917;\n      --muted: #78716c;\n      --success: #15803d;\n      --success-bg: #f0fdf4;\n      --warn: #b45309;\n      --warn-bg: #fffbeb;\n      --radius: 0.75rem;\n      --shadow: 0 1px 3px rgba(0,0,0,0.1);\n    }\n    body { font-family: system-ui, -apple-system, sans-serif; background: var(--bg); color: var(--text); font-size: 15px; line-height: 1.5; }\n    .tool-root { max-width: 720px; margin: 0 auto; padding: 1.25rem 1rem 2rem; }\n    .tool-header { margin-bottom: 1.25rem; }\n    .tool-header h1 { font-size: 1.15rem; font-weight: 700; color: var(--text); line-height: 1.3; }\n    .tool-header .idcc-badge { display: inline-flex; align-items: center; gap: 0.35rem; margin-top: 0.4rem; background: var(--accent-light); color: var(--accent); font-size: 0.75rem; font-weight: 600; padding: 0.2rem 0.6rem; border-radius: 999px; }\n    \u002F* Tabs *\u002F\n    .tabs-nav { display: flex; flex-wrap: wrap; gap: 0.25rem; border-bottom: 2px solid var(--border); margin-bottom: 1.25rem; }\n    .tab-btn { display: flex; align-items: center; gap: 0.3rem; padding: 0.5rem 0.85rem; font-size: 0.8rem; font-weight: 600; color: var(--muted); background: none; border: none; border-bottom: 2px solid transparent; margin-bottom: -2px; cursor: pointer; border-radius: 0.375rem 0.375rem 0 0; transition: color 0.15s, border-color 0.15s; white-space: nowrap; }\n    .tab-btn:hover { color: var(--accent); background: var(--accent-light); }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n    \u002F* Cards *\u002F\n    .card { background: var(--card); border: 1px solid var(--border); border-radius: var(--radius); padding: 1rem 1.25rem; box-shadow: var(--shadow); margin-bottom: 1rem; }\n    .rule-callout { display: flex; gap: 0.75rem; align-items: flex-start; background: var(--accent-light); border-left: 3px solid var(--accent); border-radius: 0 0.5rem 0.5rem 0; padding: 0.85rem 1rem; margin-bottom: 1rem; }\n    .rule-callout svg { flex-shrink: 0; color: var(--accent); margin-top: 0.1rem; }\n    .rule-callout p { font-size: 0.85rem; color: #1e3a5f; line-height: 1.5; }\n    .rule-callout strong { font-weight: 700; }\n    \u002F* Inputs *\u002F\n    .input-group { margin-bottom: 1rem; }\n    .input-group label { display: flex; justify-content: space-between; align-items: center; font-size: 0.82rem; font-weight: 600; color: var(--muted); margin-bottom: 0.4rem; }\n    .input-group label span { font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }\n    input[type=range] { width: 100%; height: 6px; accent-color: var(--accent); cursor: pointer; }\n    select { width: 100%; padding: 0.5rem 0.75rem; border: 1px solid var(--border); border-radius: 0.5rem; font-size: 0.875rem; background: var(--card); color: var(--text); cursor: pointer; appearance: none; background-image: url(\"data:image\u002Fsvg+xml,%3Csvg xmlns='http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2378716c' stroke-width='2'%3E%3Cpath d='m6 9 6 6 6-6'\u002F%3E%3C\u002Fsvg%3E\"); background-repeat: no-repeat; background-position: right 0.75rem center; padding-right: 2rem; }\n    .pills { display: flex; flex-wrap: wrap; gap: 0.4rem; }\n    .pill { padding: 0.35rem 0.75rem; border: 1.5px solid var(--border); border-radius: 999px; font-size: 0.8rem; font-weight: 500; cursor: pointer; background: var(--card); color: var(--muted); transition: all 0.15s; }\n    .pill.active { border-color: var(--accent); background: var(--accent-light); color: var(--accent); font-weight: 600; }\n    \u002F* Result *\u002F\n    .result-card { background: var(--success-bg); border: 1.5px solid #86efac; border-radius: var(--radius); padding: 1rem 1.25rem; margin-top: 1rem; }\n    .result-card.warn { background: var(--warn-bg); border-color: #fcd34d; }\n    .result-card .result-label { font-size: 0.78rem; font-weight: 600; color: var(--success); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 0.35rem; }\n    .result-card.warn .result-label { color: var(--warn); }\n    .result-card .result-value { font-size: 2rem; font-weight: 800; color: var(--success); font-variant-numeric: tabular-nums; line-height: 1; }\n    .result-card.warn .result-value { color: var(--warn); }\n    .result-card .result-detail { font-size: 0.8rem; color: var(--muted); margin-top: 0.4rem; line-height: 1.5; }\n    .result-card .result-detail strong { color: var(--text); }\n    \u002F* Grid *\u002F\n    .grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }\n    @media (max-width: 480px) { .grid2 { grid-template-columns: 1fr; } }\n    \u002F* Salary table *\u002F\n    .sal-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; margin-top: 0.75rem; }\n    .sal-table th { background: var(--accent); color: #fff; padding: 0.45rem 0.6rem; text-align: left; font-size: 0.75rem; }\n    .sal-table td { padding: 0.4rem 0.6rem; border-bottom: 1px solid var(--border); }\n    .sal-table tr:last-child td { border-bottom: none; }\n    .sal-table tr.highlight td { background: var(--accent-light); font-weight: 700; color: var(--accent); }\n    \u002F* Disclaimer *\u002F\n    .disclaimer { font-size: 0.75rem; color: var(--muted); line-height: 1.5; margin-top: 1.5rem; padding-top: 1rem; border-top: 1px solid var(--border); }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n    .section-title { font-size: 0.9rem; font-weight: 700; color: var(--text); margin-bottom: 0.75rem; display: flex; align-items: center; gap: 0.4rem; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 1596 — Ouvriers employés par les entreprises du bâtiment\n     Deviations from Code du travail:\n     indemnite: L1234-9 → 1\u002F5 × salaire × ancienneté + 2\u002F15 après 10 ans (plus favorable > 10 ans)\n     preavis: L1234-1 → périodes spécifiques: \u003C6mois=24h, 6mois-2ans=1 semaine, >2ans=1 mois\n     salaire-min: SMIC → grille conventionnelle coefficients 150 à 270\n     prime-vacances: pas de baseline légale → 30% de l'indemnité de congés (1675h travaillées)\n     intermperies: pas de baseline légale → indemnisation CIBTP 75% salaire, max 495h\u002Fan\n     Source: Legifrance KALICONT000005635221, code.travail.gouv.fr contributions IDCC 1596 -->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — Convention collective Bâtiment Ouvriers\u003C\u002Fh1>\n    \u003Cdiv class=\"idcc-badge\">\u003Ci data-lucide=\"building-2\" style=\"width:12px;height:12px\">\u003C\u002Fi> IDCC 1596\u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab navigation -->\n  \u003Cnav class=\"tabs-nav\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\n      \u003Ci data-lucide=\"calculator\" style=\"width:13px;height:13px\">\u003C\u002Fi> Indemnité\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\n      \u003Ci data-lucide=\"clock\" style=\"width:13px;height:13px\">\u003C\u002Fi> Préavis\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire-min\" role=\"tab\">\n      \u003Ci data-lucide=\"bar-chart-2\" style=\"width:13px;height:13px\">\u003C\u002Fi> Grille salaires\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"prime-vacances\" role=\"tab\">\n      \u003Ci data-lucide=\"sun\" style=\"width:13px;height:13px\">\u003C\u002Fi> Prime vacances\n    \u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"intermperies\" role=\"tab\">\n      \u003Ci data-lucide=\"cloud-rain\" style=\"width:13px;height:13px\">\u003C\u002Fi> Intempéries\n    \u003C\u002Fbutton>\n  \u003C\u002Fnav>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 1 — INDEMNITÉ DE LICENCIEMENT\n  ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"indemnite\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN bâtiment ouvriers IDCC 1596 prévoit une indemnité de \u003Cstrong>1\u002F5 de mois de salaire par année d'ancienneté\u003C\u002Fstrong>, majorée de \u003Cstrong>2\u002F15 de mois par année au-delà de 10 ans\u003C\u002Fstrong>. Cette formule peut être plus favorable que le code du travail (1\u002F4 + 1\u002F3 après 10 ans) pour les longues anciennetés.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"sliders\" style=\"width:15px;height:15px\">\u003C\u002Fi> Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Salaire brut mensuel de référence \u003Cspan id=\"ind-sal-val\">2 500 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-sal\" min=\"1400\" max=\"6000\" step=\"50\" value=\"2500\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Ancienneté (années complètes) \u003Cspan id=\"ind-anc-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"ind-anc\" min=\"1\" max=\"40\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel style=\"margin-bottom:0.5rem;\">Motif du licenciement\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"ind-motif-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"standard\">Standard\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"inaptitude\">Inaptitude (×2)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"ind-result\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Indemnité conventionnelle brute\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"ind-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"ind-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"scale\" style=\"width:15px;height:15px\">\u003C\u002Fi> Comparaison avec le code du travail\u003C\u002Fdiv>\n      \u003Cdiv class=\"grid2\">\n        \u003Cdiv>\n          \u003Cdiv style=\"font-size:0.75rem;font-weight:600;color:var(--muted);margin-bottom:0.3rem;\">CCN IDCC 1596\u003C\u002Fdiv>\n          \u003Cdiv id=\"comp-ccn\" style=\"font-size:1.1rem;font-weight:800;color:var(--accent);font-variant-numeric:tabular-nums;\">\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:0.72rem;color:var(--muted);margin-top:0.2rem;\">1\u002F5 + 2\u002F15 après 10 ans\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv>\n          \u003Cdiv style=\"font-size:0.75rem;font-weight:600;color:var(--muted);margin-bottom:0.3rem;\">Code du travail (L1234-9)\u003C\u002Fdiv>\n          \u003Cdiv id=\"comp-legal\" style=\"font-size:1.1rem;font-weight:800;color:#64748b;font-variant-numeric:tabular-nums;\">\u003C\u002Fdiv>\n          \u003Cdiv style=\"font-size:0.72rem;color:var(--muted);margin-top:0.2rem;\">1\u002F4 + 1\u002F3 après 10 ans\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv id=\"comp-verdict\" style=\"margin-top:0.75rem;font-size:0.8rem;\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 2 — PRÉAVIS\n  ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"preavis\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN bâtiment ouvriers IDCC 1596 prévoit des \u003Cstrong>durées de préavis spécifiques\u003C\u002Fstrong>, généralement plus courtes que le code du travail pour les licenciements. La durée varie selon l'ancienneté et le type de rupture.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"sliders\" style=\"width:15px;height:15px\">\u003C\u002Fi> Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel style=\"margin-bottom:0.5rem;\">Type de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pre-type-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"licenciement\">Licenciement\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"retraite\">Retraite \u002F Mise à la retraite\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\" style=\"margin-top:0.75rem;\">\n        \u003Clabel>Ancienneté \u003Cspan id=\"pre-anc-val\">3 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pre-anc\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\" id=\"pre-invalide-group\">\n        \u003Clabel style=\"margin-bottom:0.5rem;\">Travailleur handicapé \u002F invalide\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"pre-invalide-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"non\">Non\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"oui\">Oui (durée doublée)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"pre-result\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Durée de préavis conventionnelle\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pre-duration\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"pre-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:15px;height:15px\">\u003C\u002Fi> Tableau récapitulatif\u003C\u002Fdiv>\n      \u003Ctable class=\"sal-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Licenciement\u003C\u002Fth>\u003Cth>Démission\u003C\u002Fth>\u003Cth>Retraite\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr>\u003Ctd>&lt; 6 mois\u003C\u002Ftd>\u003Ctd>24 heures\u003C\u002Ftd>\u003Ctd>2 jours\u003C\u002Ftd>\u003Ctd>2 mois\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>6 mois à 2 ans\u003C\u002Ftd>\u003Ctd>1 semaine\u003C\u002Ftd>\u003Ctd>2 semaines\u003C\u002Ftd>\u003Ctd>1 mois\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr>\u003Ctd>&gt; 2 ans\u003C\u002Ftd>\u003Ctd>1 mois\u003C\u002Ftd>\u003Ctd>2 semaines\u003C\u002Ftd>\u003Ctd>2 mois\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n      \u003Cp style=\"font-size:0.75rem;color:var(--muted);margin-top:0.5rem;\">* Travailleurs handicapés : durée doublée (licenciement), plafonnée à 3 mois.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 3 — GRILLE SALAIRES\n  ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"salaire-min\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1596 établit une \u003Cstrong>grille conventionnelle de salaires\u003C\u002Fstrong> avec des coefficients de 150 à 270, organisée en 4 niveaux et 2 positions. Les montants varient selon la région (Île-de-France, Nouvelle-Aquitaine, etc.) et sont révisés annuellement.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"sliders\" style=\"width:15px;height:15px\">\u003C\u002Fi> Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel style=\"margin-bottom:0.5rem;\">Niveau \u002F Coefficient\u003C\u002Flabel>\n        \u003Cdiv class=\"pills\" id=\"sal-coeff-pills\">\n          \u003Cbutton class=\"pill active\" data-val=\"150\">N1-P1 (150)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"160\">N1-P2 (160)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"170\">N2 (170)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"185\">N2-P2 (185)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"210\">N3-P1 (210)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"230\">N3-P2 (230)\u003C\u002Fbutton>\n          \u003Cbutton class=\"pill\" data-val=\"270\">N4-P2 (270)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\" style=\"margin-top:0.75rem;\">\n        \u003Clabel>Heures hebdomadaires \u003Cspan id=\"sal-h-val\">35 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-h\" min=\"24\" max=\"48\" step=\"0.5\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"sal-result\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Salaire minimum conventionnel brut\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"sal-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:15px;height:15px\">\u003C\u002Fi> Grille 2026 (valeurs indicatives Île-de-France)\u003C\u002Fdiv>\n      \u003Ctable class=\"sal-table\" id=\"sal-table\">\n        \u003Cthead>\u003Ctr>\u003Cth>Niveau\u003C\u002Fth>\u003Cth>Coefficient\u003C\u002Fth>\u003Cth>Description\u003C\u002Fth>\u003Cth>Mensuel brut (35h)\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n        \u003Ctbody>\n          \u003Ctr data-coeff=\"150\">\u003Ctd>N1-P1\u003C\u002Ftd>\u003Ctd>150\u003C\u002Ftd>\u003Ctd>Débutant, pas de formation\u003C\u002Ftd>\u003Ctd>1 843 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr data-coeff=\"160\">\u003Ctd>N1-P2\u003C\u002Ftd>\u003Ctd>160\u003C\u002Ftd>\u003Ctd>1re spécialisation\u003C\u002Ftd>\u003Ctd>1 962 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr data-coeff=\"170\">\u003Ctd>N2\u003C\u002Ftd>\u003Ctd>170\u003C\u002Ftd>\u003Ctd>Spécialité avec diplôme\u003C\u002Ftd>\u003Ctd>2 037 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr data-coeff=\"185\">\u003Ctd>N2-P2\u003C\u002Ftd>\u003Ctd>185\u003C\u002Ftd>\u003Ctd>Ouvrier qualifié\u003C\u002Ftd>\u003Ctd>2 152 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr data-coeff=\"210\">\u003Ctd>N3-P1\u003C\u002Ftd>\u003Ctd>210\u003C\u002Ftd>\u003Ctd>Exécution qualifiée\u003C\u002Ftd>\u003Ctd>2 280 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr data-coeff=\"230\">\u003Ctd>N3-P2\u003C\u002Ftd>\u003Ctd>230\u003C\u002Ftd>\u003Ctd>Travaux délicats, connaissances solides\u003C\u002Ftd>\u003Ctd>2 390 €\u003C\u002Ftd>\u003C\u002Ftr>\n          \u003Ctr data-coeff=\"270\">\u003Ctd>N4-P2\u003C\u002Ftd>\u003Ctd>270\u003C\u002Ftd>\u003Ctd>Chef d'équipe expérimenté\u003C\u002Ftd>\u003Ctd>2 510 €\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003C\u002Ftbody>\n      \u003C\u002Ftable>\n      \u003Cp style=\"font-size:0.75rem;color:var(--muted);margin-top:0.5rem;\">Grilles régionales signées en 2025-2026. SMIC 2026 = 1 823,03 €\u002Fmois (35h). Tout salaire conventionnel inférieur doit être porté au niveau du SMIC.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 4 — PRIME DE VACANCES\n  ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"prime-vacances\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>La CCN IDCC 1596 prévoit une \u003Cstrong>prime de vacances égale à 30 % de l'indemnité de congés payés légale\u003C\u002Fstrong> (sur 24 jours ouvrables). Elle est due dès lors que l'ouvrier a travaillé \u003Cstrong>au moins 1 675 heures\u003C\u002Fstrong> durant l'année de référence.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"sliders\" style=\"width:15px;height:15px\">\u003C\u002Fi> Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Salaire brut mensuel \u003Cspan id=\"pv-sal-val\">2 200 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pv-sal\" min=\"1400\" max=\"6000\" step=\"50\" value=\"2200\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Heures travaillées sur l'année de référence \u003Cspan id=\"pv-h-val\">1 750 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"pv-h\" min=\"0\" max=\"2200\" step=\"25\" value=\"1750\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"pv-result\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Prime de vacances conventionnelle\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"pv-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"pv-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 5 — CONGÉS INTEMPÉRIES\n  ═══════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"intermperies\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px\">\u003C\u002Fi>\n      \u003Cp>Les ouvriers du bâtiment bénéficient d'une \u003Cstrong>indemnisation intempéries via la CIBTP\u003C\u002Fstrong> à hauteur de \u003Cstrong>75 % du salaire horaire brut\u003C\u002Fstrong> (hors primes). Le plafond est de 495 heures\u002Fan ou 55 jours. La première heure de la semaine est une heure de carence.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"sliders\" style=\"width:15px;height:15px\">\u003C\u002Fi> Paramètres\u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Salaire horaire brut de base \u003Cspan id=\"int-sal-val\">14,00 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"int-sal\" min=\"10.50\" max=\"35\" step=\"0.25\" value=\"14\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Heures d'arrêt intempéries (semaine en cours) \u003Cspan id=\"int-h-val\">8 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"int-h\" min=\"0\" max=\"45\" step=\"0.5\" value=\"8\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"input-group\">\n        \u003Clabel>Heures déjà indemnisées cette semaine \u003Cspan id=\"int-hd-val\">0 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"int-hd\" min=\"0\" max=\"44\" step=\"0.5\" value=\"0\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv id=\"int-result\" class=\"result-card\">\n      \u003Cdiv class=\"result-label\">Indemnité intempéries nette (semaine)\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-value\" id=\"int-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-detail\" id=\"int-detail\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"card\" style=\"margin-top:1rem;\">\n      \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"info\" style=\"width:15px;height:15px\">\u003C\u002Fi> Conditions d'éligibilité\u003C\u002Fdiv>\n      \u003Cul style=\"font-size:0.82rem;color:var(--muted);padding-left:1.2rem;line-height:1.8;\">\n        \u003Cli>Avoir travaillé \u003Cstrong>200 heures\u003C\u002Fstrong> dans les 2 mois précédant l'arrêt\u003C\u002Fli>\n        \u003Cli>Être présent au moment où l'arrêt est décidé\u003C\u002Fli>\n        \u003Cli>Plafond annuel : \u003Cstrong>495 heures\u003C\u002Fstrong> (55 jours)\u003C\u002Fli>\n        \u003Cli>Indemnité plafonnée à \u003Cstrong>120 % du plafond SS horaire\u003C\u002Fstrong> (≈ 36 €\u002Fh en 2026)\u003C\u002Fli>\n        \u003Cli>Première heure de la semaine = heure de carence (non indemnisée)\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       DISCLAIMER (shared)\n  ═══════════════════════════════════════════ -->\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la CCN IDCC 1596 (Bâtiment ouvriers — entreprises visées par le décret).\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635221\" target=\"_blank\" rel=\"noopener\">Legifrance KALICONT000005635221\u003C\u002Fa> et \u003Ca href=\"https:\u002F\u002Fcode.travail.gouv.fr\" target=\"_blank\" rel=\"noopener\">Code du travail numérique\u003C\u002Fa>.\n    Les grilles salariales sont révisées annuellement par voie d'avenants régionaux — vérifier la grille applicable à votre région.\n    Pour toute validation juridique\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n(function () {\n  'use strict';\n\n  \u002F\u002F ── Format helpers ──────────────────────────────────────────────\n  const fmt = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 });\n  const fmtDec = new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 });\n\n  \u002F\u002F ── Tab system ──────────────────────────────────────────────────\n  const tabBtns = document.querySelectorAll('[data-tab]');\n  const tabPanels = document.querySelectorAll('[data-panel]');\n\n  function activate(id) {\n    tabBtns.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n    tabPanels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n    try { if (location.hash !== '#' + id) location.hash = id; } catch(e) {}\n    requestAnimationFrame(() => {\n      notifyHeight();\n      window.dispatchEvent(new Event('resize'));\n    });\n  }\n\n  tabBtns.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n  const hashTab = location.hash.slice(1);\n  const validTabs = Array.from(tabBtns).map(t => t.dataset.tab);\n  activate(validTabs.includes(hashTab) ? hashTab : validTabs[0]);\n\n  \u002F\u002F ── Resize notify ───────────────────────────────────────────────\n  function notifyHeight() {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  }\n  const ro = new ResizeObserver(notifyHeight);\n  ro.observe(document.documentElement);\n\n  \u002F\u002F ── Pills helper ────────────────────────────────────────────────\n  function makePills(containerId, onChange) {\n    const c = document.getElementById(containerId);\n    if (!c) return;\n    c.querySelectorAll('.pill').forEach(p => {\n      p.addEventListener('click', () => {\n        c.querySelectorAll('.pill').forEach(x => x.classList.remove('active'));\n        p.classList.add('active');\n        onChange(p.dataset.val);\n      });\n    });\n  }\n  function getActivePill(containerId) {\n    const c = document.getElementById(containerId);\n    const a = c && c.querySelector('.pill.active');\n    return a ? a.dataset.val : null;\n  }\n\n  \u002F\u002F ═══════════════════════════════════════════\n  \u002F\u002F TAB 1 — INDEMNITÉ\n  \u002F\u002F ═══════════════════════════════════════════\n  const indState = { sal: 2500, anc: 5, motif: 'standard' };\n\n  function computeInd() {\n    const { sal, anc, motif } = indState;\n    \u002F\u002F CCN 1596 formula: 1\u002F5 × sal × anc (all years) + 2\u002F15 × sal × years > 10\n    const anc10plus = Math.max(0, anc - 10);\n    const ccn = sal * (1\u002F5) * anc + sal * (2\u002F15) * anc10plus;\n    \u002F\u002F Code du travail L1234-9: 1\u002F4 × sal × anc (≤10) + 1\u002F3 × sal × (anc > 10)\n    const ancBase = Math.min(anc, 10);\n    const legal = sal * (1\u002F4) * ancBase + sal * (1\u002F3) * anc10plus;\n    const multiplier = motif === 'inaptitude' ? 2 : 1;\n    return { ccn: ccn * multiplier, legal: legal * multiplier, anc10plus };\n  }\n\n  function renderInd() {\n    const { ccn, legal, anc10plus } = computeInd();\n    const mul = indState.motif === 'inaptitude' ? 2 : 1;\n    document.getElementById('ind-amount').textContent = fmt.format(ccn);\n    document.getElementById('ind-detail').innerHTML =\n      `\u003Cstrong>Formule CCN :\u003C\u002Fstrong> (1\u002F5 × ${fmt.format(indState.sal)} × ${indState.anc} ans)` +\n      (anc10plus > 0 ? ` + (2\u002F15 × ${fmt.format(indState.sal)} × ${anc10plus} ans au-delà de 10 ans)` : '') +\n      (mul === 2 ? ' × 2 (inaptitude)' : '') + '.';\n    document.getElementById('comp-ccn').textContent = fmt.format(ccn);\n    document.getElementById('comp-legal').textContent = fmt.format(legal);\n    const diff = ccn - legal;\n    const verdict = document.getElementById('comp-verdict');\n    if (Math.abs(diff) \u003C 1) {\n      verdict.innerHTML = '\u003Cspan style=\"color:var(--muted)\">Les deux montants sont équivalents pour cette ancienneté.\u003C\u002Fspan>';\n    } else if (diff > 0) {\n      verdict.innerHTML = `\u003Cspan style=\"color:var(--success)\">\u003Cstrong>La CCN est plus favorable\u003C\u002Fstrong> de ${fmt.format(diff)} par rapport au code du travail.\u003C\u002Fspan>`;\n    } else {\n      verdict.innerHTML = `\u003Cspan style=\"color:#b91c1c\">\u003Cstrong>Le code du travail est plus favorable\u003C\u002Fstrong> de ${fmt.format(-diff)}. L'employeur doit appliquer le minimum légal.\u003C\u002Fspan>`;\n    }\n  }\n\n  document.getElementById('ind-sal').addEventListener('input', function() {\n    indState.sal = +this.value;\n    document.getElementById('ind-sal-val').textContent = fmt.format(indState.sal);\n    renderInd();\n  });\n  document.getElementById('ind-anc').addEventListener('input', function() {\n    indState.anc = +this.value;\n    document.getElementById('ind-anc-val').textContent = this.value + ' ans';\n    renderInd();\n  });\n  makePills('ind-motif-pills', v => { indState.motif = v; renderInd(); });\n  \u002F\u002F init display\n  document.getElementById('ind-sal-val').textContent = fmt.format(indState.sal);\n  document.getElementById('ind-anc-val').textContent = indState.anc + ' ans';\n  renderInd();\n\n  \u002F\u002F ═══════════════════════════════════════════\n  \u002F\u002F TAB 2 — PRÉAVIS\n  \u002F\u002F ═══════════════════════════════════════════\n  const preState = { type: 'licenciement', anc: 3, invalide: 'non' };\n\n  function computePre() {\n    const { type, anc, invalide } = preState;\n    let dur = '', detail = '';\n    if (type === 'licenciement') {\n      if (anc \u003C 0.5) { dur = '24 heures'; detail = 'Ancienneté \u003C 6 mois.'; }\n      else if (anc \u003C 2) { dur = '1 semaine'; detail = 'Ancienneté de 6 mois à 2 ans.'; }\n      else { dur = '1 mois'; detail = 'Ancienneté > 2 ans.'; }\n      if (invalide === 'oui') {\n        if (anc \u003C 0.5) dur = '48 heures';\n        else if (anc \u003C 2) dur = '2 semaines';\n        else dur = '2 mois (plafonné à 3 mois)';\n        detail += ' Durée doublée pour travailleur handicapé.';\n      }\n    } else if (type === 'demission') {\n      if (anc \u003C= 0.25) { dur = '2 jours'; detail = 'Fin de période d\\'essai à 3 mois.'; }\n      else { dur = '2 semaines'; detail = 'Ancienneté > 3 mois.'; }\n    } else { \u002F\u002F retraite\n      if (anc \u003C 0.5) { dur = '2 mois'; detail = 'Ancienneté \u003C 6 mois.'; }\n      else if (anc \u003C 2) { dur = '1 mois'; detail = 'Ancienneté de 6 mois à 2 ans.'; }\n      else { dur = '2 mois'; detail = 'Ancienneté > 2 ans.'; }\n    }\n    return { dur, detail };\n  }\n\n  function renderPre() {\n    const { dur, detail } = computePre();\n    document.getElementById('pre-duration').textContent = dur;\n    document.getElementById('pre-detail').textContent = detail;\n  }\n\n  document.getElementById('pre-anc').addEventListener('input', function() {\n    preState.anc = +this.value;\n    document.getElementById('pre-anc-val').textContent = this.value + ' ans';\n    renderPre();\n  });\n  makePills('pre-type-pills', v => { preState.type = v; renderPre(); });\n  makePills('pre-invalide-pills', v => { preState.invalide = v; renderPre(); });\n  document.getElementById('pre-anc-val').textContent = preState.anc + ' ans';\n  renderPre();\n\n  \u002F\u002F ═══════════════════════════════════════════\n  \u002F\u002F TAB 3 — GRILLE SALAIRES\n  \u002F\u002F ═══════════════════════════════════════════\n  const salState = { coeff: 150, heures: 35 };\n\n  \u002F\u002F Base hourly rates Île-de-France (approximate 2026 values)\n  const salGrid = {\n    150: { monthly35: 1843, label: 'N1-P1 — Débutant sans formation' },\n    160: { monthly35: 1962, label: 'N1-P2 — 1re spécialisation' },\n    170: { monthly35: 2037, label: 'N2 — Spécialité avec diplôme' },\n    185: { monthly35: 2152, label: 'N2-P2 — Ouvrier qualifié' },\n    210: { monthly35: 2280, label: 'N3-P1 — Exécution qualifiée' },\n    230: { monthly35: 2390, label: 'N3-P2 — Travaux délicats' },\n    270: { monthly35: 2510, label: 'N4-P2 — Chef d\\'équipe expérimenté' },\n  };\n\n  function renderSal() {\n    const { coeff, heures } = salState;\n    const base = salGrid[coeff];\n    const hourly = base.monthly35 \u002F 151.67;\n    const monthly = hourly * (heures * 4.333);\n    document.getElementById('sal-amount').textContent = fmt.format(monthly);\n    document.getElementById('sal-detail').innerHTML =\n      `\u003Cstrong>${base.label}\u003C\u002Fstrong>\u003Cbr>Coeff. ${coeff} — taux horaire indicatif : ${fmtDec.format(hourly)}\u002Fh · ${heures}h\u002Fsem.`;\n    \u002F\u002F Highlight table row\n    document.querySelectorAll('#sal-table tbody tr').forEach(r => {\n      r.classList.toggle('highlight', +r.dataset.coeff === coeff);\n    });\n  }\n\n  document.getElementById('sal-h').addEventListener('input', function() {\n    salState.heures = +this.value;\n    document.getElementById('sal-h-val').textContent = this.value + ' h';\n    renderSal();\n  });\n  makePills('sal-coeff-pills', v => { salState.coeff = +v; renderSal(); });\n  renderSal();\n\n  \u002F\u002F ═══════════════════════════════════════════\n  \u002F\u002F TAB 4 — PRIME VACANCES\n  \u002F\u002F ═══════════════════════════════════════════\n  const pvState = { sal: 2200, heures: 1750 };\n  const PV_MIN_HOURS = 1675;\n  const PV_RATE = 0.30;\n\n  function renderPv() {\n    const { sal, heures } = pvState;\n    const eligible = heures >= PV_MIN_HOURS;\n    const el = document.getElementById('pv-result');\n    \u002F\u002F Indemnité de congés légale sur 24 jours ouvrables ≈ sal × 24\u002F25.83\n    const indemConges = sal * (24 \u002F 25.83);\n    const prime = eligible ? indemConges * PV_RATE : 0;\n    el.className = eligible ? 'result-card' : 'result-card warn';\n    el.querySelector('.result-label').textContent = eligible ? 'Prime de vacances conventionnelle' : 'Prime non due';\n    document.getElementById('pv-amount').textContent = eligible ? fmt.format(prime) : '0 €';\n    document.getElementById('pv-detail').innerHTML = eligible\n      ? `\u003Cstrong>Calcul :\u003C\u002Fstrong> 30 % × indemnité de congés (24 j.o.) = 30 % × ${fmt.format(indemConges)} = \u003Cstrong>${fmt.format(prime)}\u003C\u002Fstrong>. Conditions remplies (${heures.toLocaleString('fr-FR')} h ≥ 1 675 h).`\n      : `Condition non remplie : ${heures.toLocaleString('fr-FR')} heures travaillées &lt; 1 675 heures requises. La prime n'est pas due.`;\n  }\n\n  document.getElementById('pv-sal').addEventListener('input', function() {\n    pvState.sal = +this.value;\n    document.getElementById('pv-sal-val').textContent = fmt.format(pvState.sal);\n    renderPv();\n  });\n  document.getElementById('pv-h').addEventListener('input', function() {\n    pvState.heures = +this.value;\n    document.getElementById('pv-h-val').textContent = this.value + ' h';\n    renderPv();\n  });\n  document.getElementById('pv-sal-val').textContent = fmt.format(pvState.sal);\n  renderPv();\n\n  \u002F\u002F ═══════════════════════════════════════════\n  \u002F\u002F TAB 5 — CONGÉS INTEMPÉRIES\n  \u002F\u002F ═══════════════════════════════════════════\n  const intState = { sal: 14, heures: 8, hDeja: 0 };\n  const INT_RATE = 0.75;\n  const SS_PLAFOND_HORAIRE = 30; \u002F\u002F 2026 approx\n  const INT_MAX_H_WEEK = 45;\n\n  function renderInt() {\n    const { sal, heures, hDeja } = intState;\n    const el = document.getElementById('int-result');\n    \u002F\u002F First hour of week is \"carence\"\n    const carenceH = hDeja === 0 ? 1 : 0;\n    const indemnisableH = Math.max(0, heures - carenceH);\n    const capH = Math.min(indemnisableH, INT_MAX_H_WEEK - hDeja - carenceH);\n    const tauxPlafonne = Math.min(sal, SS_PLAFOND_HORAIRE * 1.2);\n    const indemnite = capH * tauxPlafonne * INT_RATE;\n    document.getElementById('int-amount').textContent = fmt.format(indemnite);\n    document.getElementById('int-detail').innerHTML =\n      `Taux horaire retenu : ${fmtDec.format(tauxPlafonne)} €\u002Fh (plafonné à 120 % plafond SS = ${fmtDec.format(SS_PLAFOND_HORAIRE * 1.2)} €\u002Fh)\u003Cbr>` +\n      `Heures indemnisables : ${capH} h (${heures} h demandées${carenceH > 0 ? ' − 1 h carence' : ''}).\u003Cbr>` +\n      `Indemnité = ${capH} h × ${fmtDec.format(tauxPlafonne)} × 75 % = \u003Cstrong>${fmt.format(indemnite)}\u003C\u002Fstrong>.`;\n  }\n\n  document.getElementById('int-sal').addEventListener('input', function() {\n    intState.sal = +this.value;\n    document.getElementById('int-sal-val').textContent = (+this.value).toFixed(2) + ' €';\n    renderInt();\n  });\n  document.getElementById('int-h').addEventListener('input', function() {\n    intState.heures = +this.value;\n    document.getElementById('int-h-val').textContent = this.value + ' h';\n    renderInt();\n  });\n  document.getElementById('int-hd').addEventListener('input', function() {\n    intState.hDeja = +this.value;\n    document.getElementById('int-hd-val').textContent = this.value + ' h';\n    renderInt();\n  });\n  renderInt();\n\n  \u002F\u002F Initial lucide + notify\n  if (typeof lucide !== 'undefined') lucide.createIcons();\n  requestAnimationFrame(notifyHeight);\n})();\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-ouvriers-employes-par-les-entreprises-du-batiment-c85182c30c.webp",[]]