[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-ccn-prothesistes-dentaires-et-des-personnels-des-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-prothesistes-dentaires-et-des-personnels-des","CCN Prothésistes dentaires — calculateur complet IDCC 993","Calculateur CCN Prothésistes Dentaires IDCC 993 | Expert Zoom","Outil interactif couvrant indemnité de licenciement, préavis, grille salariale, prime d'ancienneté, congés et heures supp de la CCN des prothésistes dentaires et laboratoires de prothèse dentaire (IDCC 993).","Ce calculateur couvre les 6 déviations majeures de la CCN 993 (IDCC 993) par rapport au Code du travail : indemnité de licenciement avec barème forfaitaire par tranches, préavis différencié cadres\u002Fnon-cadres, grille salariale 2025 en 12 catégories, prime d'ancienneté obligatoire (1 % par an, plafond 20 %), jours de congés supplémentaires liés à l'ancienneté, et seuil d'heures supplémentaires à 40 heures.",[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 Prothésistes Dentaires — IDCC 993","WebApplication",{"name":94,"@type":95,"identifier":96},"Convention collective nationale des prothésistes dentaires et des personnels des laboratoires de prothèse dentaire","Thing","IDCC 993",{"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 salariale, la prime d'ancienneté, les congés payés et les heures supplémentaires de la convention collective des prothésistes dentaires et personnels des laboratoires de prothèse dentaire (IDCC 993).","All","FinanceApplication",true,[110,113,116,119,122,125,128,131],{"a":111,"q":112},"La CCN 993 prévoit un barème par tranche d'ancienneté : 1\u002F5 de mois par année pour 1 à 3 ans, puis des montants fixes (1,5 mois de 3 à 6 ans, 2 mois de 6 à 9 ans, 2,5 mois de 9 à 12 ans), et une formule spécifique au-delà de 12 ans (1\u002F5 × salaire × années + 2\u002F15 × salaire × années au-delà de 10). Ce barème est plus favorable que le minimum légal (L1234-9) pour les tranches intermédiaires.","Comment calculer l'indemnité de licenciement dans la CCN des prothésistes dentaires (IDCC 993) ?",{"a":114,"q":115},"Pour les non-cadres : 7 jours si ancienneté inférieure à 6 mois, 1 mois entre 6 mois et 2 ans, 2 mois au-delà de 2 ans. Pour les cadres (chefs de laboratoire) : 3 mois dès 1 an d'ancienneté dans le poste. En cas de mise à la retraite par l'employeur : 6 mois pour tous les salariés.","Quelle est la durée du préavis dans la convention collective des prothésistes dentaires ?",{"a":117,"q":118},"La CCN 993 fixe des salaires minimaux par catégorie professionnelle, revus à la hausse de 2 % en moyenne depuis juin 2025. À titre indicatif : Personnel de service 1 837 €, Employé en prothèse 1 849 €, Technicien qualifié TQ1 1 916 €, TQ2 2 107 €, TQ3 2 224 €, Prothésiste hautement qualifié PHQ1 2 282 €, PHQ2 2 510 €, Responsable de secteur 2 701 €, Directeur de laboratoire 3 235 €. Des primes de qualification CFAO et CQP s'ajoutent.","Quelle est la grille de salaires de la CCN 993 en 2025 ?",{"a":120,"q":121},"Oui, la CCN 993 impose une prime d'ancienneté à partir de 2 ans de service. Elle est calculée sur le salaire minimum conventionnel de la catégorie : 1 % par année d'ancienneté à partir de 2 ans, avec un plafond de 20 % à 20 ans d'ancienneté. Cette prime doit figurer sur une ligne distincte du bulletin de paie.","La CCN des prothésistes dentaires prévoit-elle une prime d'ancienneté ?",{"a":123,"q":124},"Oui, partiellement. La base reste 30 jours ouvrables comme la loi (L3141-3), mais la CCN 993 accorde un jour supplémentaire à partir de 20 ans d'ancienneté, et deux jours supplémentaires à partir de 25 ans. La période de référence est du 1er juin au 31 mai, avec obligation de prendre 12 jours consécutifs en été.","Les congés payés dans la CCN prothésistes dentaires sont-ils supérieurs à la loi ?",{"a":126,"q":127},"La CCN 993 fixe le seuil de déclenchement des majorations d'heures supplémentaires à 40 heures par semaine, au lieu des 35 heures légales. Les heures entre 36 et 40 sont rémunérées au taux normal sans majoration. Les heures de 41 à 43 sont majorées de 25 %, et les heures au-delà de 43 de 50 %. Le contingent annuel est de 130 heures en modulation.","Quel est le seuil des heures supplémentaires dans la CCN 993 ?",{"a":129,"q":130},"Oui, la CCN 993 prévoit 2 heures par jour payées pour recherche d'emploi pendant la durée du préavis de licenciement. Ces heures sont proratisées pour les salariés à temps partiel. Elles cessent d'être dues si le salarié a trouvé un nouvel emploi avant la fin du préavis.","Le salarié peut-il s'absenter pour rechercher un emploi pendant le préavis ?",{"a":132,"q":133},"Au-delà de 12 ans d'ancienneté, la formule est : (1\u002F5 × salaire mensuel × nombre total d'années) + (2\u002F15 × salaire mensuel × nombre d'années au-delà de 10 ans). Cette formule peut différer du minimum légal selon le profil du salarié. Le salaire de référence est le plus favorable entre la moyenne des 12 derniers mois ou le tiers des 3 derniers mois.","Comment s'applique le barème d'indemnité de licenciement CCN 993 pour plus de 12 ans d'ancienneté ?","\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 Prothésistes Dentaires IDCC 993\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      --surface: #ffffff;\n      --border: #e7e5e4;\n      --accent: #2563eb;\n      --accent-light: #eff6ff;\n      --accent-hover: #1d4ed8;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --success-bg: #f0fdf4;\n      --success-border: #bbf7d0;\n      --success-text: #166534;\n      --info-bg: #eff6ff;\n      --info-border: #bfdbfe;\n      --info-text: #1e40af;\n      --warning-bg: #fffbeb;\n      --warning-border: #fde68a;\n      --warning-text: #92400e;\n      --radius: 0.75rem;\n      --radius-sm: 0.5rem;\n      --shadow: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.05);\n    }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; font-size: 14px; color: var(--text); line-height: 1.5; }\n    .tool-root { max-width: 680px; margin: 0 auto; padding: 1rem; }\n    .tool-header { margin-bottom: 1rem; }\n    .tool-header h1 { font-size: 1.1rem; font-weight: 700; color: var(--text); }\n    .tool-header .idcc-badge { display: inline-flex; align-items: center; gap: 0.3rem; background: var(--accent-light); color: var(--accent); font-size: 0.72rem; font-weight: 600; padding: 0.2rem 0.5rem; border-radius: 999px; margin-top: 0.25rem; }\n\n    \u002F* Tabs *\u002F\n    .tabs-bar { display: flex; flex-wrap: wrap; gap: 0.25rem; border-bottom: 2px solid var(--border); margin-bottom: 1.25rem; padding-bottom: 0; }\n    .tab-btn { display: flex; align-items: center; gap: 0.35rem; padding: 0.45rem 0.75rem; font-size: 0.78rem; font-weight: 500; color: var(--text-muted); background: none; border: none; border-bottom: 2px solid transparent; margin-bottom: -2px; cursor: pointer; border-radius: var(--radius-sm) var(--radius-sm) 0 0; transition: all 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); background: var(--accent-light); font-weight: 600; }\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n\n    \u002F* Rule callout *\u002F\n    .rule-callout { display: flex; gap: 0.6rem; align-items: flex-start; background: var(--info-bg); border: 1px solid var(--info-border); border-radius: var(--radius-sm); padding: 0.75rem; margin-bottom: 1rem; }\n    .rule-callout i { color: var(--accent); flex-shrink: 0; margin-top: 1px; }\n    .rule-callout p { font-size: 0.8rem; color: var(--info-text); }\n    .rule-callout strong { font-weight: 600; }\n\n    \u002F* Form *\u002F\n    .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-bottom: 1rem; }\n    @media (max-width: 480px) { .form-grid { grid-template-columns: 1fr; } }\n    .form-group { display: flex; flex-direction: column; gap: 0.35rem; }\n    .form-group.full { grid-column: 1 \u002F -1; }\n    label { font-size: 0.78rem; font-weight: 600; color: var(--text); }\n    .label-hint { font-weight: 400; color: var(--text-muted); font-size: 0.73rem; }\n    input[type=range] { width: 100%; accent-color: var(--accent); cursor: pointer; }\n    .range-val { font-size: 0.8rem; font-weight: 700; color: var(--accent); font-variant-numeric: tabular-nums; }\n    select, input[type=number] { width: 100%; padding: 0.4rem 0.6rem; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 0.82rem; background: var(--surface); color: var(--text); outline: none; transition: border-color 0.15s; }\n    select:focus, input[type=number]:focus { border-color: var(--accent); }\n\n    \u002F* Pills *\u002F\n    .pill-group { display: flex; flex-wrap: wrap; gap: 0.35rem; }\n    .pill { padding: 0.3rem 0.65rem; border: 1px solid var(--border); border-radius: 999px; font-size: 0.75rem; font-weight: 500; cursor: pointer; background: var(--surface); color: var(--text-muted); transition: all 0.15s; white-space: nowrap; }\n    .pill.selected { background: var(--accent); color: #fff; border-color: var(--accent); }\n\n    \u002F* Result card *\u002F\n    .result-card { background: var(--success-bg); border: 1.5px solid var(--success-border); border-radius: var(--radius); padding: 1rem 1.25rem; margin-bottom: 0.75rem; }\n    .result-card .result-label { font-size: 0.75rem; font-weight: 600; color: var(--success-text); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 0.3rem; }\n    .result-card .result-amount { font-size: 2rem; font-weight: 800; color: var(--success-text); font-variant-numeric: tabular-nums; }\n    .result-card .result-sub { font-size: 0.75rem; color: var(--success-text); margin-top: 0.25rem; opacity: 0.8; }\n    .result-card.neutral { background: var(--accent-light); border-color: var(--info-border); }\n    .result-card.neutral .result-label, .result-card.neutral .result-amount, .result-card.neutral .result-sub { color: var(--info-text); }\n\n    \u002F* Detail breakdown *\u002F\n    .breakdown { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.6rem 0.85rem; margin-bottom: 0.75rem; font-size: 0.78rem; }\n    .breakdown-row { display: flex; justify-content: space-between; padding: 0.25rem 0; border-bottom: 1px solid var(--border); }\n    .breakdown-row:last-child { border-bottom: none; font-weight: 600; }\n    .breakdown-row .bk-label { color: var(--text-muted); }\n    .breakdown-row .bk-val { font-variant-numeric: tabular-nums; font-weight: 500; }\n\n    \u002F* Table *\u002F\n    .mini-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; margin-bottom: 0.75rem; }\n    .mini-table th { background: var(--accent-light); color: var(--accent); font-weight: 600; padding: 0.4rem 0.6rem; text-align: left; border: 1px solid var(--border); }\n    .mini-table td { padding: 0.35rem 0.6rem; border: 1px solid var(--border); }\n    .mini-table tr:nth-child(even) { background: #fafaf9; }\n    .highlight-row { background: var(--accent-light) !important; font-weight: 600; }\n\n    \u002F* Disclaimer *\u002F\n    .disclaimer { font-size: 0.72rem; color: var(--text-muted); border-top: 1px solid var(--border); padding-top: 0.75rem; margin-top: 0.5rem; line-height: 1.6; }\n    .disclaimer a { color: var(--accent); text-decoration: none; }\n    .disclaimer a:hover { text-decoration: underline; }\n\n    \u002F* Section spacing *\u002F\n    .section-title { font-size: 0.78rem; font-weight: 700; color: var(--text); margin-bottom: 0.5rem; display: flex; align-items: center; gap: 0.35rem; }\n\n    \u002F* Toggle *\u002F\n    .toggle-group { display: flex; border: 1px solid var(--border); border-radius: var(--radius-sm); overflow: hidden; }\n    .toggle-btn { flex: 1; padding: 0.35rem 0.5rem; font-size: 0.77rem; font-weight: 500; border: none; background: var(--surface); color: var(--text-muted); cursor: pointer; transition: all 0.15s; text-align: center; }\n    .toggle-btn.active { background: var(--accent); color: #fff; font-weight: 600; }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003C!-- CCN IDCC 993 — deviations\n     indemnite: formule conventionnelle avec montants fixes par tranches (3-12 ans) vs L1234-9 progressif\n     preavis: non-cadres 7j\u002F\u003C6m, 1m\u002F6m-2ans, 2m\u002F2ans+; cadres 3 mois; vs L1234-1 générique\n     salaire-min: grille conventionnelle 12 catégories (avenant 2025) + primes qualifications\n     prime-anciennete: 1% par an à partir de 2 ans, plafond 20% à 20 ans (pas de dispositif légal)\n     conges: +1j à 20 ans, +2j à 25 ans → dépasse L3141-3 30j ouvrables max légal\n     heures-supp: seuil 40h (vs 35h légal), pas de majoration 36-40h\n-->\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Ch1>Calculateur — CCN Prothésistes Dentaires\u003C\u002Fh1>\n    \u003Cspan class=\"idcc-badge\">\u003Ci data-lucide=\"shield-check\" style=\"width:12px;height:12px;\">\u003C\u002Fi> IDCC 993\u003C\u002Fspan>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"tabs-bar\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn\" data-tab=\"indemnite\" role=\"tab\">\u003Ci data-lucide=\"banknote\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Indemnité\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"preavis\" role=\"tab\">\u003Ci data-lucide=\"calendar-clock\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Préavis\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"salaire\" role=\"tab\">\u003Ci data-lucide=\"bar-chart-2\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Grille salaires\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"anciennete\" role=\"tab\">\u003Ci data-lucide=\"star\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Prime ancienneté\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"conges\" role=\"tab\">\u003Ci data-lucide=\"umbrella\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Congés\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" data-tab=\"heures\" role=\"tab\">\u003Ci data-lucide=\"clock\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Heures supp\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\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 993 prévoit des \u003Cstrong>montants fixes par tranche d'ancienneté\u003C\u002Fstrong> (3–12 ans), plus favorables que la formule progressive du Code du travail (L1234-9 : 1\u002F4 mois × années ≤10 ans + 1\u002F3 mois × années >10 ans).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire brut mensuel de référence \u003Cspan class=\"label-hint\" id=\"sal-ind-val\">3 000 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-ind\" min=\"1500\" max=\"8000\" step=\"50\" value=\"3000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"label-hint\" id=\"anc-ind-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-ind\" min=\"1\" max=\"30\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group full\">\n        \u003Clabel>Motif du licenciement\u003C\u002Flabel>\n        \u003Cdiv class=\"pill-group\" id=\"motif-ind\">\n          \u003Cdiv class=\"pill selected\" data-val=\"perso\">Cause personnelle\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"eco\">Cause économique\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card\" id=\"res-ind\">\n      \u003Cdiv class=\"result-label\">Indemnité conventionnelle brute\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"ind-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"ind-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\" id=\"ind-breakdown\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Barème conventionnel CCN 993\u003C\u002Fdiv>\n    \u003Ctable class=\"mini-table\">\n      \u003Cthead>\u003Ctr>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Calcul CCN 993\u003C\u002Fth>\u003Cth>Code du travail (L1234-9)\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n      \u003Ctbody>\n        \u003Ctr>\u003Ctd>1 à 3 ans\u003C\u002Ftd>\u003Ctd>1\u002F5 × salaire × années\u003C\u002Ftd>\u003Ctd>1\u002F4 × salaire × années\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>3 à 6 ans\u003C\u002Ftd>\u003Ctd>\u003Cstrong>1,5 mois (fixe)\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>1\u002F4 × salaire × années\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>6 à 9 ans\u003C\u002Ftd>\u003Ctd>\u003Cstrong>2 mois (fixe)\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>1\u002F4 × salaire × années\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>9 à 12 ans\u003C\u002Ftd>\u003Ctd>\u003Cstrong>2,5 mois (fixe)\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>1\u002F4 × salaire × années\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>12 ans et +\u003C\u002Ftd>\u003Ctd>1\u002F5 × sal × années + 2\u002F15 × sal × (années − 10)\u003C\u002Ftd>\u003Ctd>1\u002F4 × sal × années (≤10) + 1\u002F3 × sal × (années > 10)\u003C\u002Ftd>\u003C\u002Ftr>\n      \u003C\u002Ftbody>\n    \u003C\u002Ftable>\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 993 prévoit des durées de préavis \u003Cstrong>plus précises et souvent plus longues\u003C\u002Fstrong> que le Code du travail (L1234-1), avec des paliers distincts pour les non-cadres et un préavis de \u003Cstrong>3 mois pour les cadres\u003C\u002Fstrong>.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"label-hint\" id=\"anc-preavis-val\">3 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-preavis\" min=\"0\" max=\"30\" step=\"1\" value=\"3\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Statut\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-group\" id=\"statut-preavis\">\n          \u003Cbutton class=\"toggle-btn active\" data-val=\"non-cadre\">Non-cadre\u003C\u002Fbutton>\n          \u003Cbutton class=\"toggle-btn\" data-val=\"cadre\">Cadre (chef de laboratoire)\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Type de rupture\u003C\u002Flabel>\n        \u003Cdiv class=\"pill-group\" id=\"motif-preavis\">\n          \u003Cdiv class=\"pill selected\" data-val=\"licenciement\">Licenciement\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"demission\">Démission\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"retraite\">Départ en retraite\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"mise-retraite\">Mise à la retraite\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card neutral\" id=\"res-preavis\">\n      \u003Cdiv class=\"result-label\">Durée du préavis\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"preavis-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"preavis-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Barème CCN 993 — Préavis\u003C\u002Fdiv>\n    \u003Ctable class=\"mini-table\">\n      \u003Cthead>\u003Ctr>\u003Cth>Situation\u003C\u002Fth>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Durée préavis\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n      \u003Ctbody>\n        \u003Ctr>\u003Ctd rowspan=\"3\">Non-cadre — Licenciement\u003C\u002Ftd>\u003Ctd>&lt; 6 mois\u003C\u002Ftd>\u003Ctd>7 jours\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>6 mois à 2 ans\u003C\u002Ftd>\u003Ctd>1 mois\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>≥ 2 ans\u003C\u002Ftd>\u003Ctd>2 mois\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>Cadre — Licenciement\u003C\u002Ftd>\u003Ctd>≥ 1 an dans le poste\u003C\u002Ftd>\u003Ctd>3 mois\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>Mise à la retraite (tous)\u003C\u002Ftd>\u003Ctd>Tous\u003C\u002Ftd>\u003Ctd>6 mois\u003C\u002Ftd>\u003C\u002Ftr>\n      \u003C\u002Ftbody>\n    \u003C\u002Ftable>\n    \u003Cp style=\"font-size:0.75rem; color:var(--text-muted); margin-top:0.4rem;\">Note : en cas de licenciement, le salarié bénéficie de 2h\u002Fjour payées pour recherche d'emploi (sauf emploi trouvé).\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 3 — GRILLE DE SALAIRES\n  ════════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"salaire\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN 993 fixe une \u003Cstrong>grille de 12 catégories\u003C\u002Fstrong> de salaires minimaux conventionnels (avenant en vigueur depuis juin 2025, +2 % en moyenne). Des primes de qualification CFAO et CQP s'y ajoutent.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group full\">\n        \u003Clabel>Catégorie professionnelle\u003C\u002Flabel>\n        \u003Cselect id=\"categorie-sal\">\n          \u003Coption value=\"1837\">Personnel de service\u003C\u002Foption>\n          \u003Coption value=\"1849\">Employé en prothèse dentaire\u003C\u002Foption>\n          \u003Coption value=\"1854\">Secrétaire administratif \u002F Aide-comptable\u003C\u002Foption>\n          \u003Coption value=\"1857\">Auxiliaire en prothèse dentaire\u003C\u002Foption>\n          \u003Coption value=\"1916\">Technicien qualifié en prothèse (TQ1)\u003C\u002Foption>\n          \u003Coption value=\"2107\">Technicien qualifié en prothèse (TQ2)\u003C\u002Foption>\n          \u003Coption value=\"2224\">Technicien qualifié en prothèse (TQ3)\u003C\u002Foption>\n          \u003Coption value=\"2282\">Prothésiste hautement qualifié (PHQ1)\u003C\u002Foption>\n          \u003Coption value=\"2510\">Prothésiste hautement qualifié (PHQ2)\u003C\u002Foption>\n          \u003Coption value=\"2000\">Comptable\u003C\u002Foption>\n          \u003Coption value=\"2701\">Responsable de secteur\u003C\u002Foption>\n          \u003Coption value=\"3235\">Directeur de laboratoire\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group full\">\n        \u003Clabel>Prime de qualification (optionnel)\u003C\u002Flabel>\n        \u003Cdiv class=\"pill-group\" id=\"prime-qual\">\n          \u003Cdiv class=\"pill selected\" data-val=\"0\">Aucune\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"85\">CQP Technicien \u002F CFAO niv. I (+85 €)\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"105\">Spécialiste techniques numériques (+105 €)\u003C\u002Fdiv>\n          \u003Cdiv class=\"pill\" data-val=\"160\">Certifications avancées (+160 €)\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Heures hebdomadaires \u003Cspan class=\"label-hint\" id=\"hh-sal-val\">35h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hh-sal\" min=\"24\" max=\"44\" step=\"0.5\" value=\"35\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card neutral\">\n      \u003Cdiv class=\"result-label\">Salaire mensuel brut minimum conventionnel\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"sal-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"sal-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 4 — PRIME D'ANCIENNETÉ\n  ════════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"anciennete\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN 993 impose une \u003Cstrong>prime d'ancienneté\u003C\u002Fstrong> dès 2 ans de service : 1 % du salaire minimum conventionnel par année, plafonnée à \u003Cstrong>20 % à 20 ans\u003C\u002Fstrong>. Aucun équivalent légal obligatoire dans le Code du travail.\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Salaire minimum conventionnel mensuel \u003Cspan class=\"label-hint\" id=\"sal-anc-val\">2 000 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"sal-anc\" min=\"1700\" max=\"4000\" step=\"50\" value=\"2000\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"label-hint\" id=\"anc-anc-val\">5 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-anc\" min=\"0\" max=\"25\" step=\"1\" value=\"5\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card neutral\" id=\"res-anc\">\n      \u003Cdiv class=\"result-label\">Prime d'ancienneté mensuelle\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"anc-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"anc-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\" id=\"anc-breakdown\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Barème prime d'ancienneté CCN 993\u003C\u002Fdiv>\n    \u003Ctable class=\"mini-table\">\n      \u003Cthead>\u003Ctr>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Taux\u003C\u002Fth>\u003Cth>Base de calcul\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n      \u003Ctbody>\n        \u003Ctr>\u003Ctd>&lt; 2 ans\u003C\u002Ftd>\u003Ctd>0 %\u003C\u002Ftd>\u003Ctd>—\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>2 ans\u003C\u002Ftd>\u003Ctd>1 %\u003C\u002Ftd>\u003Ctd>Salaire minimum conventionnel\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>3 ans\u003C\u002Ftd>\u003Ctd>2 %\u003C\u002Ftd>\u003Ctd>Salaire minimum conventionnel\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>…\u003C\u002Ftd>\u003Ctd>+1 % par année\u003C\u002Ftd>\u003Ctd>Salaire minimum conventionnel\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>≥ 20 ans\u003C\u002Ftd>\u003Ctd>20 % (plafond)\u003C\u002Ftd>\u003Ctd>Salaire minimum conventionnel\u003C\u002Ftd>\u003C\u002Ftr>\n      \u003C\u002Ftbody>\n    \u003C\u002Ftable>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 5 — CONGÉS PAYÉS\n  ════════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"conges\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN 993 accorde des \u003Cstrong>jours supplémentaires de congés\u003C\u002Fstrong> liés à l'ancienneté (+1 jour dès 20 ans de service, +2 jours dès 25 ans), au-delà des 30 jours ouvrables légaux (L3141-3).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Ancienneté \u003Cspan class=\"label-hint\" id=\"anc-cong-val\">15 ans\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"anc-cong\" min=\"0\" max=\"35\" step=\"1\" value=\"15\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Temps de travail\u003C\u002Flabel>\n        \u003Cdiv class=\"toggle-group\" id=\"temps-cong\">\n          \u003Cbutton class=\"toggle-btn active\" data-val=\"plein\">Temps plein\u003C\u002Fbutton>\n          \u003Cbutton class=\"toggle-btn\" data-val=\"partiel\">Temps partiel\u003C\u002Fbutton>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card neutral\">\n      \u003Cdiv class=\"result-label\">Congés payés annuels\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"cong-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"cong-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\" id=\"cong-breakdown\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Tableau récapitulatif CCN 993\u003C\u002Fdiv>\n    \u003Ctable class=\"mini-table\">\n      \u003Cthead>\u003Ctr>\u003Cth>Ancienneté\u003C\u002Fth>\u003Cth>Jours ouvrables\u003C\u002Fth>\u003Cth>Jours supplémentaires CCN\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n      \u003Ctbody>\n        \u003Ctr>\u003Ctd>0 à &lt; 20 ans\u003C\u002Ftd>\u003Ctd>30\u003C\u002Ftd>\u003Ctd>0\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>20 à &lt; 25 ans\u003C\u002Ftd>\u003Ctd>30\u003C\u002Ftd>\u003Ctd>+1 jour\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>25 ans et +\u003C\u002Ftd>\u003Ctd>30\u003C\u002Ftd>\u003Ctd>+2 jours\u003C\u002Ftd>\u003C\u002Ftr>\n      \u003C\u002Ftbody>\n    \u003C\u002Ftable>\n    \u003Cp style=\"font-size:0.75rem; color:var(--text-muted); margin-top:0.4rem;\">Période de référence : 1er juin – 31 mai. 12 jours consécutifs obligatoires en été (mai–octobre).\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003C!-- ═══════════════════════════════════════════\n       TAB 6 — HEURES SUPPLÉMENTAIRES\n  ════════════════════════════════════════════ -->\n  \u003Cdiv class=\"tab-panel\" data-panel=\"heures\">\n    \u003Cdiv class=\"rule-callout\">\n      \u003Ci data-lucide=\"info\" style=\"width:16px;height:16px;\">\u003C\u002Fi>\n      \u003Cp>La CCN 993 fixe le \u003Cstrong>seuil de déclenchement des majorations à 40 h\u002Fsemaine\u003C\u002Fstrong> (au lieu de 35 h légalement). Les heures 36 à 40 sont rémunérées au taux normal. Contingent annuel : 130 h (modulation).\u003C\u002Fp>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"form-grid\">\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Taux horaire brut \u003Cspan class=\"label-hint\" id=\"th-val\">14,50 €\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"th\" min=\"10\" max=\"35\" step=\"0.5\" value=\"14.5\">\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"form-group\">\n        \u003Clabel>Heures travaillées cette semaine \u003Cspan class=\"label-hint\" id=\"hw-val\">42 h\u003C\u002Fspan>\u003C\u002Flabel>\n        \u003Cinput type=\"range\" id=\"hw\" min=\"35\" max=\"60\" step=\"0.5\" value=\"42\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"result-card neutral\">\n      \u003Cdiv class=\"result-label\">Rémunération totale de la semaine\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-amount\" id=\"hs-amount\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-sub\" id=\"hs-sub\">\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\n    \u003Cdiv class=\"breakdown\" id=\"hs-breakdown\">\u003C\u002Fdiv>\n\n    \u003Cdiv class=\"section-title\">\u003Ci data-lucide=\"table\" style=\"width:14px;height:14px;\">\u003C\u002Fi> Seuils de majoration CCN 993\u003C\u002Fdiv>\n    \u003Ctable class=\"mini-table\">\n      \u003Cthead>\u003Ctr>\u003Cth>Heures\u003C\u002Fth>\u003Cth>Taux majoration CCN 993\u003C\u002Fth>\u003Cth>Code du travail (L3121-36)\u003C\u002Fth>\u003C\u002Ftr>\u003C\u002Fthead>\n      \u003Ctbody>\n        \u003Ctr>\u003Ctd>1 à 35 h\u003C\u002Ftd>\u003Ctd>Taux normal\u003C\u002Ftd>\u003Ctd>Taux normal\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>36 à 40 h\u003C\u002Ftd>\u003Ctd>\u003Cstrong>Taux normal (pas de majoration)\u003C\u002Fstrong>\u003C\u002Ftd>\u003Ctd>+25 % (heures supp légales)\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>41 à 43 h\u003C\u002Ftd>\u003Ctd>+25 %\u003C\u002Ftd>\u003Ctd>+25 %\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>44 h et +\u003C\u002Ftd>\u003Ctd>+50 %\u003C\u002Ftd>\u003Ctd>+50 %\u003C\u002Ftd>\u003C\u002Ftr>\n        \u003Ctr>\u003Ctd>Jour férié\u003C\u002Ftd>\u003Ctd>+25 % spécifique CCN\u003C\u002Ftd>\u003Ctd>Pas de majoration légale auto.\u003C\u002Ftd>\u003C\u002Ftr>\n      \u003C\u002Ftbody>\n    \u003C\u002Ftable>\n  \u003C\u002Fdiv>\n\n  \u003Cp class=\"disclaimer\">\n    Calcul indicatif basé sur la convention collective nationale IDCC 993 des prothésistes dentaires et personnels des laboratoires de prothèse dentaire.\n    Source : \u003Ca href=\"https:\u002F\u002Fwww.legifrance.gouv.fr\u002Fconv_coll\u002Fid\u002FKALICONT000005635414\" target=\"_blank\" rel=\"noopener\">Legifrance — KALICONT000005635414\u003C\u002Fa>.\n    Pour toute validation légale\n  \u003C\u002Fp>\n\u003C\u002Fmain>\n\n\u003Cscript>\n\u002F\u002F ── Formatters ──────────────────────────────────────────────\nconst fmtEur = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\nconst fmtEurDec = v => new Intl.NumberFormat('fr-FR', { style: 'currency', currency: 'EUR', minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(v);\n\n\u002F\u002F ── State ────────────────────────────────────────────────────\nconst state = {\n  ind: { sal: 3000, anc: 5, motif: 'perso' },\n  preavis: { anc: 3, statut: 'non-cadre', motif: 'licenciement' },\n  sal: { categorie: 1837, prime: 0, hh: 35 },\n  anc: { sal: 2000, anc: 5 },\n  cong: { anc: 15, temps: 'plein' },\n  hs: { th: 14.5, hw: 42 }\n};\n\n\u002F\u002F ── Compute functions ────────────────────────────────────────\nfunction computeInd(s) {\n  const { sal, anc } = s.ind;\n  let montant = 0, label = '';\n  if (anc \u003C 1) return { montant: 0, label: 'Ancienneté insuffisante (moins de 1 an)' };\n  if (anc >= 1 && anc \u003C 3) {\n    montant = (1\u002F5) * sal * anc;\n    label = `1\u002F5 × ${fmtEur(sal)} × ${anc} an${anc>1?'s':''}`;\n  } else if (anc >= 3 && anc \u003C 6) {\n    montant = 1.5 * sal;\n    label = `Forfait 1,5 mois de salaire (tranche 3–6 ans)`;\n  } else if (anc >= 6 && anc \u003C 9) {\n    montant = 2 * sal;\n    label = `Forfait 2 mois de salaire (tranche 6–9 ans)`;\n  } else if (anc >= 9 && anc \u003C 12) {\n    montant = 2.5 * sal;\n    label = `Forfait 2,5 mois de salaire (tranche 9–12 ans)`;\n  } else {\n    \u002F\u002F 12 ans +\n    montant = (1\u002F5) * sal * anc + (2\u002F15) * sal * (anc - 10);\n    label = `1\u002F5 × ${fmtEur(sal)} × ${anc} + 2\u002F15 × ${fmtEur(sal)} × ${anc - 10} (années > 10)`;\n  }\n  \u002F\u002F Legal baseline for comparison\n  let legal = 0;\n  if (anc \u003C= 10) legal = (1\u002F4) * sal * anc;\n  else legal = (1\u002F4) * sal * 10 + (1\u002F3) * sal * (anc - 10);\n  return { montant, label, legal };\n}\n\nfunction computePreavis(s) {\n  const { anc, statut, motif } = s.preavis;\n  if (motif === 'mise-retraite') return { duree: '6 mois', semaines: 26, label: 'Mise à la retraite : préavis de 6 mois (tous statuts, CCN 993)' };\n  if (motif === 'retraite') {\n    if (statut === 'cadre') return { duree: '3 mois', semaines: 13, label: 'Cadre — départ en retraite : 3 mois' };\n    if (anc \u003C 0.5) return { duree: '7 jours', semaines: 1, label: 'Non-cadre \u003C 6 mois : 7 jours' };\n    if (anc \u003C 2) return { duree: '1 mois', semaines: 4, label: 'Non-cadre 6 mois–2 ans : 1 mois' };\n    return { duree: '2 mois', semaines: 8, label: 'Non-cadre ≥ 2 ans : 2 mois' };\n  }\n  if (statut === 'cadre') {\n    if (anc >= 1) return { duree: '3 mois', semaines: 13, label: 'Cadre (≥ 1 an dans le poste) : 3 mois — CCN 993' };\n    return { duree: '1 mois', semaines: 4, label: 'Cadre (\u003C 1 an) : 1 mois' };\n  }\n  \u002F\u002F non-cadre\n  if (anc \u003C 0.5) return { duree: '7 jours', semaines: 1, label: 'Non-cadre \u003C 6 mois : 7 jours' };\n  if (anc \u003C 2) return { duree: '1 mois', semaines: 4, label: 'Non-cadre 6 mois–2 ans : 1 mois' };\n  return { duree: '2 mois', semaines: 8, label: 'Non-cadre ≥ 2 ans : 2 mois' };\n}\n\nfunction computeSal(s) {\n  const base = s.sal.categorie;\n  const prime = s.sal.prime;\n  const hh = s.sal.hh;\n  let total = base + prime;\n  if (hh !== 35) total = (total \u002F 151.67) * (hh * 4.33);\n  return { total, base, prime, hh };\n}\n\nfunction computeAnc(s) {\n  const { sal, anc } = s.anc;\n  if (anc \u003C 2) return { prime: 0, taux: 0, label: 'Ancienneté \u003C 2 ans : prime non applicable' };\n  const taux = Math.min(anc - 1, 20);  \u002F\u002F 1% par an à partir de 2 ans\n  const prime = sal * taux \u002F 100;\n  return { prime, taux, label: `${taux} % × ${fmtEur(sal)} (salaire minimum conventionnel)` };\n}\n\nfunction computeCong(s) {\n  const { anc } = s.cong;\n  let base = 30;\n  let extra = 0;\n  if (anc >= 25) extra = 2;\n  else if (anc >= 20) extra = 1;\n  return { total: base + extra, base, extra };\n}\n\nfunction computeHs(s) {\n  const { th, hw } = s.hs;\n  let total = 0;\n  const rows = [];\n  \u002F\u002F 1-35h: normal\n  const h_normal = Math.min(hw, 35);\n  const pay_normal = h_normal * th;\n  total += pay_normal;\n  rows.push({ label: `${h_normal} h × ${fmtEurDec(th)} (taux normal)`, val: fmtEurDec(pay_normal) });\n  \u002F\u002F 36-40h: taux normal (pas de majoration CCN 993)\n  if (hw > 35) {\n    const h_3640 = Math.min(hw, 40) - 35;\n    if (h_3640 > 0) {\n      const pay_3640 = h_3640 * th;\n      total += pay_3640;\n      rows.push({ label: `${h_3640} h (36–40) × ${fmtEurDec(th)} (taux normal — seuil CCN 40h)`, val: fmtEurDec(pay_3640) });\n    }\n  }\n  \u002F\u002F 41-43h: +25%\n  if (hw > 40) {\n    const h_4143 = Math.min(hw, 43) - 40;\n    if (h_4143 > 0) {\n      const rate = th * 1.25;\n      const pay = h_4143 * rate;\n      total += pay;\n      rows.push({ label: `${h_4143} h (41–43) × ${fmtEurDec(rate)} (+25 %)`, val: fmtEurDec(pay) });\n    }\n  }\n  \u002F\u002F 44h+: +50%\n  if (hw > 43) {\n    const h_44p = hw - 43;\n    const rate = th * 1.5;\n    const pay = h_44p * rate;\n    total += pay;\n    rows.push({ label: `${h_44p} h (≥44) × ${fmtEurDec(rate)} (+50 %)`, val: fmtEurDec(pay) });\n  }\n  rows.push({ label: 'Total semaine', val: fmtEurDec(total), bold: true });\n  return { total, rows };\n}\n\n\u002F\u002F ── Render functions ─────────────────────────────────────────\nfunction renderInd() {\n  const res = computeInd(state);\n  document.getElementById('ind-amount').textContent = fmtEur(res.montant);\n  document.getElementById('ind-sub').textContent = res.label || '';\n  const bd = document.getElementById('ind-breakdown');\n  if (res.legal !== undefined) {\n    const diff = res.montant - res.legal;\n    const sign = diff >= 0 ? '+' : '';\n    bd.innerHTML = `\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Indemnité légale (L1234-9)\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${fmtEur(res.legal)}\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Indemnité CCN 993\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${fmtEur(res.montant)}\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Gain conventionnel\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${sign}${fmtEur(diff)}\u003C\u002Fspan>\u003C\u002Fdiv>\n    `;\n  } else { bd.innerHTML = ''; }\n}\n\nfunction renderPreavis() {\n  const res = computePreavis(state);\n  document.getElementById('preavis-amount').textContent = res.duree;\n  document.getElementById('preavis-sub').textContent = res.label;\n}\n\nfunction renderSal() {\n  const res = computeSal(state);\n  document.getElementById('sal-amount').textContent = fmtEur(Math.round(res.total));\n  document.getElementById('sal-sub').textContent = `Catégorie : ${fmtEur(res.base)} brut\u002Fmois (base 35h)${res.prime > 0 ? ` + prime qualification ${fmtEur(res.prime)}` : ''}${res.hh !== 35 ? ` — proratisé pour ${res.hh}h\u002Fsem` : ''}`;\n}\n\nfunction renderAnc() {\n  const res = computeAnc(state);\n  document.getElementById('anc-amount').textContent = fmtEurDec(res.prime);\n  document.getElementById('anc-sub').textContent = res.label;\n  const bd = document.getElementById('anc-breakdown');\n  if (res.taux > 0) {\n    bd.innerHTML = `\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Taux d'ancienneté\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${res.taux} %\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Prime mensuelle\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${fmtEurDec(res.prime)}\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Prime annuelle\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${fmtEurDec(res.prime * 12)}\u003C\u002Fspan>\u003C\u002Fdiv>\n    `;\n  } else { bd.innerHTML = ''; }\n}\n\nfunction renderCong() {\n  const res = computeCong(state);\n  document.getElementById('cong-amount').textContent = `${res.total} jours ouvrables`;\n  const bd = document.getElementById('cong-breakdown');\n  bd.innerHTML = `\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Congés légaux (L3141-3)\u003C\u002Fspan>\u003Cspan class=\"bk-val\">30 jours ouvrables\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Jours supplémentaires CCN\u003C\u002Fspan>\u003Cspan class=\"bk-val\">+${res.extra} jour${res.extra > 1 ? 's' : ''}\u003C\u002Fspan>\u003C\u002Fdiv>\n    \u003Cdiv class=\"breakdown-row\">\u003Cspan class=\"bk-label\">Total\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${res.total} jours ouvrables\u003C\u002Fspan>\u003C\u002Fdiv>\n  `;\n  document.getElementById('cong-sub').textContent = res.extra > 0 ? `Ancienneté ${state.cong.anc} ans → +${res.extra} jour${res.extra > 1 ? 's' : ''} conventionnel${res.extra > 1 ? 's' : ''}` : 'Pas de jour supplémentaire conventionnel pour cette ancienneté';\n}\n\nfunction renderHs() {\n  const res = computeHs(state);\n  document.getElementById('hs-amount').textContent = fmtEurDec(res.total);\n  document.getElementById('hs-sub').textContent = `Pour ${state.hs.hw} heures travaillées — seuil de majoration à 40 h (CCN 993)`;\n  const bd = document.getElementById('hs-breakdown');\n  bd.innerHTML = res.rows.map(r => `\u003Cdiv class=\"breakdown-row${r.bold?' ':''}\" style=\"${r.bold?'font-weight:700;':''}\">\u003Cspan class=\"bk-label\">${r.label}\u003C\u002Fspan>\u003Cspan class=\"bk-val\">${r.val}\u003C\u002Fspan>\u003C\u002Fdiv>`).join('');\n}\n\nfunction renderAll() {\n  renderInd(); renderPreavis(); renderSal(); renderAnc(); renderCong(); renderHs();\n}\n\n\u002F\u002F ── Inputs — Tab 1 Indemnité ─────────────────────────────────\ndocument.getElementById('sal-ind').addEventListener('input', e => {\n  state.ind.sal = +e.target.value;\n  document.getElementById('sal-ind-val').textContent = fmtEur(state.ind.sal);\n  renderInd();\n});\ndocument.getElementById('anc-ind').addEventListener('input', e => {\n  state.ind.anc = +e.target.value;\n  document.getElementById('anc-ind-val').textContent = `${state.ind.anc} an${state.ind.anc > 1 ? 's' : ''}`;\n  renderInd();\n});\ndocument.querySelectorAll('#motif-ind .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#motif-ind .pill').forEach(x => x.classList.remove('selected'));\n    p.classList.add('selected');\n    state.ind.motif = p.dataset.val;\n    renderInd();\n  });\n});\n\n\u002F\u002F ── Inputs — Tab 2 Préavis ───────────────────────────────────\ndocument.getElementById('anc-preavis').addEventListener('input', e => {\n  state.preavis.anc = +e.target.value;\n  document.getElementById('anc-preavis-val').textContent = `${state.preavis.anc} an${state.preavis.anc > 1 ? 's' : ''}`;\n  renderPreavis();\n});\ndocument.querySelectorAll('#statut-preavis .toggle-btn').forEach(b => {\n  b.addEventListener('click', () => {\n    document.querySelectorAll('#statut-preavis .toggle-btn').forEach(x => x.classList.remove('active'));\n    b.classList.add('active');\n    state.preavis.statut = b.dataset.val;\n    renderPreavis();\n  });\n});\ndocument.querySelectorAll('#motif-preavis .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#motif-preavis .pill').forEach(x => x.classList.remove('selected'));\n    p.classList.add('selected');\n    state.preavis.motif = p.dataset.val;\n    renderPreavis();\n  });\n});\n\n\u002F\u002F ── Inputs — Tab 3 Salaire ───────────────────────────────────\ndocument.getElementById('categorie-sal').addEventListener('change', e => {\n  state.sal.categorie = +e.target.value;\n  renderSal();\n});\ndocument.querySelectorAll('#prime-qual .pill').forEach(p => {\n  p.addEventListener('click', () => {\n    document.querySelectorAll('#prime-qual .pill').forEach(x => x.classList.remove('selected'));\n    p.classList.add('selected');\n    state.sal.prime = +p.dataset.val;\n    renderSal();\n  });\n});\ndocument.getElementById('hh-sal').addEventListener('input', e => {\n  state.sal.hh = +e.target.value;\n  document.getElementById('hh-sal-val').textContent = `${state.sal.hh}h`;\n  renderSal();\n});\n\n\u002F\u002F ── Inputs — Tab 4 Ancienneté ────────────────────────────────\ndocument.getElementById('sal-anc').addEventListener('input', e => {\n  state.anc.sal = +e.target.value;\n  document.getElementById('sal-anc-val').textContent = fmtEur(state.anc.sal);\n  renderAnc();\n});\ndocument.getElementById('anc-anc').addEventListener('input', e => {\n  state.anc.anc = +e.target.value;\n  document.getElementById('anc-anc-val').textContent = `${state.anc.anc} an${state.anc.anc > 1 ? 's' : ''}`;\n  renderAnc();\n});\n\n\u002F\u002F ── Inputs — Tab 5 Congés ────────────────────────────────────\ndocument.getElementById('anc-cong').addEventListener('input', e => {\n  state.cong.anc = +e.target.value;\n  document.getElementById('anc-cong-val').textContent = `${state.cong.anc} an${state.cong.anc > 1 ? 's' : ''}`;\n  renderCong();\n});\ndocument.querySelectorAll('#temps-cong .toggle-btn').forEach(b => {\n  b.addEventListener('click', () => {\n    document.querySelectorAll('#temps-cong .toggle-btn').forEach(x => x.classList.remove('active'));\n    b.classList.add('active');\n    state.cong.temps = b.dataset.val;\n    renderCong();\n  });\n});\n\n\u002F\u002F ── Inputs — Tab 6 Heures supp ───────────────────────────────\ndocument.getElementById('th').addEventListener('input', e => {\n  state.hs.th = +e.target.value;\n  document.getElementById('th-val').textContent = `${fmtEurDec(state.hs.th)}`;\n  renderHs();\n});\ndocument.getElementById('hw').addEventListener('input', e => {\n  state.hs.hw = +e.target.value;\n  document.getElementById('hw-val').textContent = `${state.hs.hw} h`;\n  renderHs();\n});\n\n\u002F\u002F ── Tab navigation ───────────────────────────────────────────\nconst tabs = document.querySelectorAll('[data-tab]');\nconst panels = document.querySelectorAll('[data-panel]');\n\nfunction activate(id) {\n  tabs.forEach(t => t.classList.toggle('active', t.dataset.tab === id));\n  panels.forEach(p => p.classList.toggle('active', p.dataset.panel === id));\n  if (location.hash !== '#' + id) location.hash = id;\n  requestAnimationFrame(() => {\n    window.dispatchEvent(new Event('resize'));\n  });\n}\n\ntabs.forEach(t => t.addEventListener('click', () => activate(t.dataset.tab)));\n\n\u002F\u002F Initial tab from hash or default\nconst hashId = location.hash.slice(1);\nconst validIds = Array.from(tabs).map(t => t.dataset.tab);\nactivate(validIds.includes(hashId) ? hashId : validIds[0]);\n\n\u002F\u002F ── Resize observer ──────────────────────────────────────────\nlucide.createIcons();\nrenderAll();\n\nconst ro = new ResizeObserver(() => {\n  const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n  parent.postMessage({ type: 'resize', height: h }, '*');\n});\nro.observe(document.documentElement);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Fccn-prothesistes-dentaires-et-des-personnels-des-3e53e72807.webp",[]]