[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"footer-root-categories-fr-FR":3,"tool-content-estimateur-penalites-conformite-fr":83,"footer-cities-fr":123},[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":101,"tool_html":117,"source":118,"category":119,"audience":120,"publish_mode":121,"hero_image":122,"hero_image_alt":85},"estimateur-penalites-conformite","Estimateur de pénalités — Non-conformité salariale","Estimateur de sanctions transparence salariale 2026 — Expert-Zoom","Estimez le risque financier pour votre entreprise en cas de non-conformité à la directive 2023\u002F970 : pénalité proportionnelle à la masse salariale et amendes forfaitaires.","Calculez le risque financier lié au non-respect des obligations de la directive européenne sur la transparence salariale. Deux types de sanctions sont prévus par le projet de loi français : une pénalité proportionnelle à la masse salariale (1 % ou 2 % en récidive) et une amende forfaitaire de 450 € par infraction ciblée. Ce simulateur vous donne une estimation du risque global pour mieux décider de votre calendrier de mise en conformité.",[90],{"name":91,"@type":92,"offers":93,"inLanguage":97,"description":98,"operatingSystem":99,"applicationCategory":100},"Estimateur de pénalités — Non-conformité transparence salariale","WebApplication",{"@type":94,"price":95,"priceCurrency":96},"Offer","0","EUR","fr","Estimez le risque financier pour votre entreprise en cas de non-conformité à la directive 2023\u002F970 : pénalité proportionnelle sur masse salariale et amendes forfaitaires.","Any","FinanceApplication",[102,105,108,111,114],{"a":103,"q":104},"Le projet de loi français de transposition (mars 2026) prévoit deux types de sanctions : une pénalité proportionnelle à la masse salariale (1 % pour une première infraction, 2 % en cas de récidive dans les 5 ans) et une amende forfaitaire de 450 € par infraction ciblée (offre sans fourchette, refus d'information, etc.).","Quelles sont les sanctions prévues en France pour non-respect de la directive transparence salariale ?",{"a":106,"q":107},"Selon le projet de loi, la pénalité serait calculée sur les rémunérations et gains versés aux travailleurs au cours des périodes de non-conformité. Pour simplifier, ce simulateur applique le taux à la masse salariale annuelle totale, ce qui constitue une estimation haute du risque.","La pénalité de 1 % s'applique-t-elle sur toute la masse salariale ?",{"a":109,"q":110},"Oui. Les pénalités administratives s'accumulent avec l'obligation d'indemniser intégralement les salariés victimes de discrimination salariale (arriérés de salaires, primes, dommages et intérêts), sans plafond légal. Le risque total peut donc dépasser largement les seules amendes administratives.","Les sanctions s'ajoutent-elles aux indemnisations des salariés discriminés ?",{"a":112,"q":113},"Oui. La directive prévoit que les États membres peuvent instaurer l'exclusion des marchés publics comme sanction supplémentaire. Pour les entreprises ayant une activité significative avec le secteur public, ce risque peut être plus coûteux que les amendes elles-mêmes.","Une entreprise peut-elle être exclue des marchés publics pour non-conformité ?",{"a":115,"q":116},"La transposition devait être effective au plus tard le 7 juin 2026. La France accuse un retard, le projet de loi devant être présenté au Parlement fin mai 2026. Les sanctions s'appliqueront une fois la loi promulguée et entrée en vigueur, probablement à l'automne 2026.","À partir de quand ces sanctions sont-elles applicables en France ?","\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>Estimateur de pénalités – Transparence salariale\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      --green: #16a34a;\n      --green-light: #f0fdf4;\n      --amber: #d97706;\n      --amber-light: #fffbeb;\n      --red: #dc2626;\n      --red-light: #fef2f2;\n      --text: #1c1917;\n      --text-muted: #78716c;\n      --radius: 12px;\n    }\n    body { background: var(--bg); font-family: system-ui, -apple-system, sans-serif; color: var(--text); font-size: 15px; line-height: 1.5; }\n    .tool-root { max-width: 640px; margin: 0 auto; padding: 24px 16px 40px; }\n    .tool-header { margin-bottom: 20px; }\n    .tool-title { font-size: 1.25rem; font-weight: 700; color: var(--text); display: flex; align-items: center; gap: 8px; }\n    .tool-title i { color: var(--red); }\n    .tool-subtitle { font-size: 0.875rem; color: var(--text-muted); margin-top: 4px; }\n    .tabs { display: flex; gap: 0; border-bottom: 2px solid var(--border); margin-bottom: 20px; overflow-x: auto; }\n    .tab-btn {\n      padding: 10px 16px; font-size: 0.875rem; font-weight: 500; background: none; border: none;\n      cursor: pointer; color: var(--text-muted); white-space: nowrap; border-bottom: 2px solid transparent;\n      margin-bottom: -2px; transition: color 0.15s;\n    }\n    .tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); }\n    .tab-btn:hover:not(.active) { color: var(--text); }\n    .card { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px 20px; margin-bottom: 14px; }\n    .callout {\n      background: var(--accent-light); border: 1px solid #bfdbfe; border-radius: 8px;\n      padding: 12px 16px; font-size: 0.8125rem; color: #1d4ed8; margin-bottom: 16px;\n      display: flex; align-items: flex-start; gap: 8px;\n    }\n    .callout.red { background: var(--red-light); border-color: #fecaca; color: #991b1b; }\n    .callout i { flex-shrink: 0; margin-top: 2px; }\n    .field { margin-bottom: 14px; }\n    .field label { display: block; font-size: 0.8125rem; font-weight: 600; color: var(--text-muted); margin-bottom: 6px; }\n    .field input[type=number] {\n      width: 100%; padding: 9px 12px; border: 1px solid var(--border); border-radius: 8px;\n      font-size: 0.9375rem; color: var(--text); background: var(--surface); font-variant-numeric: tabular-nums;\n    }\n    .field input[type=number]:focus { outline: 2px solid var(--accent); border-color: transparent; }\n    .field .hint { font-size: 0.75rem; color: var(--text-muted); margin-top: 4px; }\n    .toggle-row { display: flex; align-items: center; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid var(--border); }\n    .toggle-row:last-child { border-bottom: none; }\n    .toggle-label { font-size: 0.875rem; color: var(--text); }\n    .toggle-sub { font-size: 0.75rem; color: var(--text-muted); }\n    .toggle-wrap { display: flex; align-items: center; gap: 12px; }\n    .toggle-count input { width: 60px; padding: 6px 8px; border: 1px solid var(--border); border-radius: 6px; font-size: 0.875rem; text-align: center; }\n    \u002F* Toggle switch *\u002F\n    .switch { position: relative; display: inline-block; width: 40px; height: 22px; }\n    .switch input { opacity: 0; width: 0; height: 0; }\n    .slider { position: absolute; cursor: pointer; inset: 0; background: #d6d3d1; border-radius: 22px; transition: .2s; }\n    .slider:before { position: absolute; content: \"\"; height: 16px; width: 16px; left: 3px; bottom: 3px; background: white; border-radius: 50%; transition: .2s; }\n    input:checked + .slider { background: var(--accent); }\n    input:checked + .slider:before { transform: translateX(18px); }\n    \u002F* Result *\u002F\n    .result-card { border-radius: var(--radius); padding: 20px; margin-top: 16px; }\n    .result-card.ok { background: var(--green-light); border: 1px solid #bbf7d0; }\n    .result-card.warn { background: var(--amber-light); border: 1px solid #fde68a; }\n    .result-card.bad { background: var(--red-light); border: 1px solid #fecaca; }\n    .result-main { font-size: 2.25rem; font-weight: 800; font-variant-numeric: tabular-nums; }\n    .result-card.ok .result-main { color: var(--green); }\n    .result-card.warn .result-main { color: var(--amber); }\n    .result-card.bad .result-main { color: var(--red); }\n    .result-label { font-size: 0.875rem; font-weight: 600; margin-top: 4px; margin-bottom: 12px; }\n    .result-card.ok .result-label { color: #15803d; }\n    .result-card.warn .result-label { color: #92400e; }\n    .result-card.bad .result-label { color: #991b1b; }\n    .result-rows { display: flex; flex-direction: column; gap: 8px; border-top: 1px solid rgba(0,0,0,0.07); padding-top: 12px; }\n    .result-row { display: flex; justify-content: space-between; font-size: 0.875rem; }\n    .result-row .rk { color: var(--text-muted); }\n    .result-row .rv { font-weight: 600; font-variant-numeric: tabular-nums; }\n    \u002F* Summary tab *\u002F\n    .summary-row { display: flex; justify-content: space-between; align-items: center; padding: 12px 0; border-bottom: 1px solid var(--border); }\n    .summary-row:last-child { border-bottom: none; }\n    .summary-label { font-size: 0.875rem; }\n    .summary-amount { font-size: 1rem; font-weight: 700; font-variant-numeric: tabular-nums; color: var(--red); }\n    .total-row { display: flex; justify-content: space-between; align-items: center; background: var(--red-light); border: 1px solid #fecaca; border-radius: 8px; padding: 14px 16px; margin-top: 14px; }\n    .total-label { font-size: 0.9375rem; font-weight: 700; }\n    .total-amount { font-size: 1.5rem; font-weight: 800; font-variant-numeric: tabular-nums; color: var(--red); }\n    .tab-panel { display: none; }\n    .tab-panel.active { display: block; }\n    .source { font-size: 0.75rem; color: var(--text-muted); border-top: 1px solid var(--border); padding-top: 14px; margin-top: 20px; }\n    .source a { color: var(--accent); text-decoration: none; }\n    .source a:hover { text-decoration: underline; }\n    select {\n      width: 100%; padding: 9px 12px; border: 1px solid var(--border); border-radius: 8px;\n      font-size: 0.9375rem; background: var(--surface); color: var(--text); appearance: none;\n    }\n  \u003C\u002Fstyle>\n\u003C\u002Fhead>\n\u003Cbody>\n\u003Cmain class=\"tool-root\">\n  \u003Cdiv class=\"tool-header\">\n    \u003Cdiv class=\"tool-title\">\n      \u003Ci data-lucide=\"alert-triangle\" width=\"20\" height=\"20\">\u003C\u002Fi>\n      Estimateur de pénalités — Non-conformité\n    \u003C\u002Fdiv>\n    \u003Cp class=\"tool-subtitle\">Estimez le risque financier en cas de manquement à la directive 2023\u002F970 sur la transparence salariale.\u003C\u002Fp>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"tabs\" role=\"tablist\">\n    \u003Cbutton class=\"tab-btn active\" onclick=\"switchTab(0)\" role=\"tab\">Pénalité proportionnelle\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" onclick=\"switchTab(1)\" role=\"tab\">Infractions ciblées\u003C\u002Fbutton>\n    \u003Cbutton class=\"tab-btn\" onclick=\"switchTab(2)\" role=\"tab\">Bilan global\u003C\u002Fbutton>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 0: Pénalité proportionnelle (1% ou 2% masse salariale) -->\n  \u003Cdiv class=\"tab-panel active\" id=\"panel-0\">\n    \u003Cdiv class=\"callout red\">\n      \u003Ci data-lucide=\"alert-circle\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>Projet de loi français (mars 2026) : pénalité administrative de \u003Cstrong>1 % de la masse salariale\u003C\u002Fstrong> pour non-respect des obligations, portée à \u003Cstrong>2 %\u003C\u002Fstrong> en cas de récidive dans les 5 ans.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Masse salariale annuelle brute (€)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"masseSal\" value=\"2500000\" min=\"0\" step=\"50000\" oninput=\"updateProp()\">\n        \u003Cdiv class=\"hint\">Total des rémunérations et charges sociales versées aux salariés sur l'année\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Situation de l'entreprise\u003C\u002Flabel>\n        \u003Cselect id=\"recidive\" onchange=\"updateProp()\">\n          \u003Coption value=\"0\">Première infraction (taux : 1 %)\u003C\u002Foption>\n          \u003Coption value=\"1\">Récidive dans les 5 ans (taux : 2 %)\u003C\u002Foption>\n        \u003C\u002Fselect>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"field\">\n        \u003Clabel>Effectif (pour évaluer le seuil de reporting)\u003C\u002Flabel>\n        \u003Cinput type=\"number\" id=\"effectif\" value=\"150\" min=\"1\" step=\"10\" oninput=\"updateProp()\">\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card bad\" id=\"res-prop\">\n      \u003Cdiv class=\"result-main\" id=\"res-prop-val\">—\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-label\" id=\"res-prop-label\">Pénalité estimée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\u003Cspan class=\"rk\">Taux appliqué\u003C\u002Fspan>\u003Cspan class=\"rv\" id=\"res-prop-taux\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan class=\"rk\">Seuil de reporting applicable\u003C\u002Fspan>\u003Cspan class=\"rv\" id=\"res-prop-seuil\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan class=\"rk\">Fréquence de rapport\u003C\u002Fspan>\u003Cspan class=\"rv\" id=\"res-prop-freq\">—\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 1: Infractions ciblées (450 € \u002F violation) -->\n  \u003Cdiv class=\"tab-panel\" id=\"panel-1\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>Le projet de loi prévoit une pénalité forfaitaire de \u003Cstrong>450 € par infraction ciblée\u003C\u002Fstrong> (ex. : offre sans fourchette salariale, refus de communiquer les données de rémunération, etc.).\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"toggle-row\">\n        \u003Cdiv>\n          \u003Cdiv class=\"toggle-label\">Offres d'emploi sans fourchette salariale\u003C\u002Fdiv>\n          \u003Cdiv class=\"toggle-sub\">Chaque offre publiée sans la fourchette obligatoire\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Cinput type=\"number\" class=\"toggle-count\" id=\"inf1\" value=\"0\" min=\"0\" oninput=\"updateInf()\">\n          \u003Cspan style=\"font-size:0.8rem;color:var(--text-muted)\">× 450 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"toggle-row\">\n        \u003Cdiv>\n          \u003Cdiv class=\"toggle-label\">Refus de communiquer les données salariales\u003C\u002Fdiv>\n          \u003Cdiv class=\"toggle-sub\">À un salarié qui en fait la demande\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Cinput type=\"number\" class=\"toggle-count\" id=\"inf2\" value=\"0\" min=\"0\" oninput=\"updateInf()\">\n          \u003Cspan style=\"font-size:0.8rem;color:var(--text-muted)\">× 450 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"toggle-row\">\n        \u003Cdiv>\n          \u003Cdiv class=\"toggle-label\">Absence de rapport sur les écarts de rémunération\u003C\u002Fdiv>\n          \u003Cdiv class=\"toggle-sub\">Non-publication du rapport annuel\u002Ftriennal obligatoire\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Cinput type=\"number\" class=\"toggle-count\" id=\"inf3\" value=\"0\" min=\"0\" oninput=\"updateInf()\">\n          \u003Cspan style=\"font-size:0.8rem;color:var(--text-muted)\">× 450 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"toggle-row\">\n        \u003Cdiv>\n          \u003Cdiv class=\"toggle-label\">Non-correction d'un écart ≥ 5 % sous 6 mois\u003C\u002Fdiv>\n          \u003Cdiv class=\"toggle-sub\">Par catégorie de poste non corrigée\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Cinput type=\"number\" class=\"toggle-count\" id=\"inf4\" value=\"0\" min=\"0\" oninput=\"updateInf()\">\n          \u003Cspan style=\"font-size:0.8rem;color:var(--text-muted)\">× 450 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"toggle-row\">\n        \u003Cdiv>\n          \u003Cdiv class=\"toggle-label\">Autres infractions ciblées\u003C\u002Fdiv>\n          \u003Cdiv class=\"toggle-sub\">Toute autre violation de la directive\u003C\u002Fdiv>\n        \u003C\u002Fdiv>\n        \u003Cdiv class=\"toggle-wrap\">\n          \u003Cinput type=\"number\" class=\"toggle-count\" id=\"inf5\" value=\"0\" min=\"0\" oninput=\"updateInf()\">\n          \u003Cspan style=\"font-size:0.8rem;color:var(--text-muted)\">× 450 €\u003C\u002Fspan>\n        \u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"result-card\" id=\"res-inf\">\n      \u003Cdiv class=\"result-main\" id=\"res-inf-val\">0 €\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-label\" id=\"res-inf-label\">Aucune infraction ciblée renseignée\u003C\u002Fdiv>\n      \u003Cdiv class=\"result-rows\">\n        \u003Cdiv class=\"result-row\">\u003Cspan class=\"rk\">Nombre d'infractions\u003C\u002Fspan>\u003Cspan class=\"rv\" id=\"res-inf-count\">0\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan class=\"rk\">Amende forfaitaire unitaire\u003C\u002Fspan>\u003Cspan class=\"rv\">450 €\u003C\u002Fspan>\u003C\u002Fdiv>\n        \u003Cdiv class=\"result-row\">\u003Cspan class=\"rk\">Total infractions ciblées\u003C\u002Fspan>\u003Cspan class=\"rv\" id=\"res-inf-total\">0 €\u003C\u002Fspan>\u003C\u002Fdiv>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003C!-- Tab 2: Bilan global -->\n  \u003Cdiv class=\"tab-panel\" id=\"panel-2\">\n    \u003Cdiv class=\"callout\">\n      \u003Ci data-lucide=\"info\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>Cumul des deux types de pénalités. Note : un manquement peut entraîner également l'exclusion des marchés publics et l'indemnisation intégrale des salariés discriminés (sans plafond).\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"card\">\n      \u003Cdiv class=\"summary-row\">\n        \u003Cspan class=\"summary-label\">Pénalité proportionnelle (masse salariale)\u003C\u002Fspan>\n        \u003Cspan class=\"summary-amount\" id=\"sum-prop\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"summary-row\">\n        \u003Cspan class=\"summary-label\">Pénalités forfaitaires (infractions ciblées)\u003C\u002Fspan>\n        \u003Cspan class=\"summary-amount\" id=\"sum-inf\">—\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"total-row\">\n      \u003Cspan class=\"total-label\">Risque financier total estimé\u003C\u002Fspan>\n      \u003Cspan class=\"total-amount\" id=\"sum-total\">—\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n    \u003Cdiv class=\"callout red\" style=\"margin-top:16px;\">\n      \u003Ci data-lucide=\"alert-circle\" width=\"15\" height=\"15\">\u003C\u002Fi>\n      \u003Cspan>Ce montant n'inclut pas les \u003Cstrong>dommages et intérêts aux salariés\u003C\u002Fstrong> (arriérés de salaire + primes, sans plafond légal) ni les coûts d'exclusion des marchés publics.\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\n  \u003Cdiv class=\"source\">\n    \u003Cstrong>Sources :\u003C\u002Fstrong>\n    \u003Ca href=\"https:\u002F\u002Fogletree.fr\u002Fpublications\u002Fod-flash-transparence-salariale-projet-de-loi-de-transposition-de-la-directive-nouvelles-sanctions-administratives-5-5\u002F\" target=\"_blank\" rel=\"noopener\">Ogletree Deakins – Sanctions administratives (projet de loi 2026)\u003C\u002Fa> ·\n    \u003Ca href=\"https:\u002F\u002Fwww.village-justice.com\u002Farticles\u002Ftransparence-des-remunerations-directive-2023-970-epreuve-pratique,54974.html\" target=\"_blank\" rel=\"noopener\">Village Justice – Directive 2023\u002F970 en pratique\u003C\u002Fa> ·\n    Projet de loi de transposition (mars 2026) · Estimatif — non un conseil juridique.\n  \u003C\u002Fdiv>\n\u003C\u002Fmain>\n\u003Cscript>\n  const fmtEur = v => new Intl.NumberFormat('fr', { style: 'currency', currency: 'EUR', maximumFractionDigits: 0 }).format(v);\n  const fmtPct = v => new Intl.NumberFormat('fr', { style: 'percent', minimumFractionDigits: 0, maximumFractionDigits: 0 }).format(v \u002F 100);\n\n  let propPenalty = 0;\n  let infPenalty = 0;\n\n  function updateProp() {\n    const masse = parseFloat(document.getElementById('masseSal').value) || 0;\n    const rec = parseInt(document.getElementById('recidive').value);\n    const eff = parseInt(document.getElementById('effectif').value) || 0;\n    const taux = rec === 1 ? 2 : 1;\n    propPenalty = masse * taux \u002F 100;\n\n    let seuil, freq;\n    if (eff >= 250) { seuil = '≥ 250 salariés'; freq = 'Rapport annuel obligatoire'; }\n    else if (eff >= 150) { seuil = '150–249 salariés'; freq = 'Rapport triennal (1ère fois : 2027)'; }\n    else if (eff >= 100) { seuil = '100–149 salariés'; freq = 'Rapport triennal (1ère fois : 2031)'; }\n    else { seuil = '\u003C 100 salariés'; freq = 'Obligations recrutement uniquement'; }\n\n    const cls = propPenalty > 100000 ? 'bad' : propPenalty > 20000 ? 'warn' : 'warn';\n    const card = document.getElementById('res-prop');\n    card.className = 'result-card ' + cls;\n    document.getElementById('res-prop-val').textContent = fmtEur(propPenalty);\n    document.getElementById('res-prop-label').textContent = rec ? 'Pénalité récidive (2 % masse salariale)' : 'Pénalité première infraction (1 % masse salariale)';\n    document.getElementById('res-prop-taux').textContent = fmtPct(taux);\n    document.getElementById('res-prop-seuil').textContent = seuil;\n    document.getElementById('res-prop-freq').textContent = freq;\n\n    updateSummary();\n  }\n\n  function updateInf() {\n    let total = 0;\n    let count = 0;\n    for (let i = 1; i \u003C= 5; i++) {\n      const v = parseInt(document.getElementById('inf' + i).value) || 0;\n      total += v * 450;\n      count += v;\n    }\n    infPenalty = total;\n\n    const cls = total === 0 ? 'ok' : total \u003C 5000 ? 'warn' : 'bad';\n    const card = document.getElementById('res-inf');\n    card.className = 'result-card ' + cls;\n    document.getElementById('res-inf-val').textContent = fmtEur(total);\n    document.getElementById('res-inf-label').textContent =\n      count === 0 ? 'Aucune infraction ciblée renseignée'\n      : `${count} infraction${count > 1 ? 's' : ''} ciblée${count > 1 ? 's' : ''} × 450 €`;\n    document.getElementById('res-inf-count').textContent = count;\n    document.getElementById('res-inf-total').textContent = fmtEur(total);\n\n    updateSummary();\n  }\n\n  function updateSummary() {\n    document.getElementById('sum-prop').textContent = fmtEur(propPenalty);\n    document.getElementById('sum-inf').textContent = fmtEur(infPenalty);\n    document.getElementById('sum-total').textContent = fmtEur(propPenalty + infPenalty);\n  }\n\n  function switchTab(n) {\n    document.querySelectorAll('.tab-btn').forEach((b, i) => b.classList.toggle('active', i === n));\n    document.querySelectorAll('.tab-panel').forEach((p, i) => p.classList.toggle('active', i === n));\n    if (n === 2) updateSummary();\n  }\n\n  document.addEventListener('DOMContentLoaded', () => {\n    lucide.createIcons();\n    updateProp();\n    updateInf();\n  });\n\n  const ro = new ResizeObserver(() => {\n    const h = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);\n    parent.postMessage({ type: 'resize', height: h }, '*');\n  });\n  ro.observe(document.documentElement);\n\u003C\u002Fscript>\n\u003C\u002Fbody>\n\u003C\u002Fhtml>\n","generated","juridique","consumer","both","https:\u002F\u002Fpub-bdebbd2dad294475a2da0eb657815b6b.r2.dev\u002Ftools\u002Festimateur-penalites-conformite-a486f04fd7.webp",[]]