{"id":19219,"date":"2026-07-05T16:55:06","date_gmt":"2026-07-05T14:55:06","guid":{"rendered":"https:\/\/www.grip-facility.com\/scan-gestion-contrats\/"},"modified":"2026-07-05T17:11:58","modified_gmt":"2026-07-05T15:11:58","slug":"scan-gestion-contrats","status":"publish","type":"page","link":"https:\/\/www.grip-facility.com\/fr\/scan-gestion-contrats\/","title":{"rendered":"Scan de gestion des contrats | GRIP"},"content":{"rendered":"\n<div id=\"cm-scan-root\" style=\"font-family:'Poppins',sans-serif;background:#F1F5F9;min-height:60vh;padding:40px 0;\">\n<style>\n:root{--gb:#006BFF;--go:#FF4B2A;--gr:#E0341B;--gd:#0F172A;--gg:#475569;--gl:#F1F5F9;--gn:#10B981;--ga:#F59E0B;--bd:#E2E8F0}\n#cm-scan-root,#cm-scan-root *{box-sizing:border-box;line-height:1.6}\n.cms-container{max-width:880px;margin:0 auto;padding:0 20px}\n.cms-card{background:#fff;border-radius:12px;padding:28px 32px;margin-bottom:24px;box-shadow:0 2px 8px rgba(15,23,42,0.06)}\n.cms-header{background:linear-gradient(135deg,var(--gb) 0%,#0050cc 100%);color:#fff}\n.cms-header h1{font-size:clamp(1.5rem,3vw,2rem);font-weight:700;margin-bottom:8px}\n.cms-header p{font-size:15px;opacity:.95}\n.cms-brand{font-size:12px;opacity:.85;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px;font-weight:600}\n.cms-h2{font-size:18px;font-weight:700;color:var(--gd);margin-bottom:16px}\n.cms-field{margin-bottom:14px}\n.cms-field label{display:block;font-size:12px;font-weight:700;color:var(--gd);margin-bottom:5px;text-transform:uppercase;letter-spacing:.5px}\n.cms-field input,.cms-field select{width:100%;padding:11px 14px;border:1px solid var(--bd);border-radius:8px;font-family:inherit;font-size:14px;color:var(--gd);background:#fff;transition:border-color .15s}\n.cms-field input:focus,.cms-field select:focus{outline:none;border-color:var(--gb);box-shadow:0 0 0 3px rgba(0,107,255,.1)}\n.cms-fields-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}\n@media(max-width:560px){.cms-fields-row{grid-template-columns:1fr}}\n.cms-pillar{margin-bottom:28px;padding-top:8px;border-top:1px solid var(--bd)}\n.cms-pillar:first-of-type{border-top:0;padding-top:0}\n.cms-ph{display:flex;align-items:center;gap:12px;margin-bottom:4px;margin-top:12px}\n.cms-pnum{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:var(--gb);color:#fff;font-weight:700;font-size:14px;flex-shrink:0}\n.cms-ptitle{font-size:16px;font-weight:700;color:var(--gd)}\n.cms-pmeta{font-size:13px;color:var(--gg);margin-bottom:14px;margin-left:46px}\n.cms-q{padding:14px 0;border-bottom:1px dashed var(--bd)}\n.cms-q:last-child{border-bottom:0}\n.cms-qtext{font-size:14px;font-weight:500;color:var(--gd);margin-bottom:9px}\n.cms-opts{display:flex;gap:8px;flex-wrap:wrap}\n.cms-opts label{flex:1;min-width:80px;padding:9px 12px;border:1px solid var(--bd);border-radius:8px;text-align:center;cursor:pointer;font-size:13px;font-weight:500;color:var(--gg);background:#fff;transition:all .15s;user-select:none}\n.cms-opts label:hover{border-color:var(--gb);color:var(--gb)}\n.cms-opts label.sel{background:var(--gb);color:#fff;border-color:var(--gb)}\n.cms-acts{display:flex;gap:12px;justify-content:flex-end;margin-top:20px;flex-wrap:wrap}\n.cms-btn{padding:11px 22px;border-radius:8px;font-family:inherit;font-size:14px;font-weight:600;cursor:pointer;border:0;transition:transform .1s,box-shadow .15s}\n.cms-btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(15,23,42,.12)}\n.cms-btn-primary{background:var(--gb);color:#fff}\n.cms-btn-secondary{background:#fff;color:var(--gb);border:1px solid var(--gb)}\n.cms-btn-orange{background:var(--go);color:#fff}\n.cms-btn:disabled{opacity:.5;cursor:not-allowed;transform:none}\n#cms-results{display:none}\n.cms-score-hero{text-align:center;padding:28px 0}\n.cms-score-num{font-size:64px;font-weight:700;line-height:1}\n.cms-score-lbl{font-size:13px;color:var(--gg);text-transform:uppercase;letter-spacing:1px;margin-top:6px}\n.cms-verdict{font-size:20px;font-weight:700;margin-top:10px}\n.cms-v-low{color:var(--gr)}\n.cms-v-mid{color:var(--ga)}\n.cms-v-high{color:var(--gn)}\n.cms-pscores{display:flex;flex-direction:column;gap:10px;margin-top:20px}\n.cms-prow{display:flex;align-items:center;gap:14px;padding:10px 14px;background:var(--gl);border-radius:8px}\n.cms-prow-lbl{flex:1;font-weight:500;font-size:13px}\n.cms-prow-bar{flex:2;height:10px;background:var(--bd);border-radius:5px;overflow:hidden}\n.cms-prow-fill{height:100%;background:var(--gb);transition:width .6s ease}\n.cms-prow-val{font-weight:700;min-width:46px;text-align:right;font-size:13px}\n.cms-recs{margin-top:20px;padding:18px 20px;background:var(--gl);border-radius:8px;border-left:4px solid var(--go)}\n.cms-recs h3{margin-top:0;color:var(--go);font-size:15px;margin-bottom:10px}\n.cms-recs ul{list-style:none;padding-left:0;margin:0}\n.cms-recs li{padding:5px 0 5px 18px;position:relative;font-size:14px;color:var(--gd)}\n.cms-recs li::before{content:\"\\2192\";position:absolute;left:0;color:var(--go);font-weight:700}\n.cms-cta{background:linear-gradient(135deg,var(--gd) 0%,#1e293b 100%);color:#fff;padding:28px;border-radius:12px;margin-top:20px;text-align:center}\n.cms-cta h2{color:#fff;margin-bottom:10px;font-size:18px}\n.cms-cta p{color:rgba(255,255,255,.85);margin-bottom:16px;font-size:14px}\n.cms-lead-block{margin-top:20px;padding:20px;background:#F8FAFC;border-radius:10px;border:1px solid var(--bd)}\n.cms-lead-block h3{font-size:14px;font-weight:700;color:var(--gd);margin-bottom:8px}\n.cms-lead-block p{font-size:13px;color:var(--gg);margin-bottom:12px}\n.cms-lead-row{display:flex;gap:10px;align-items:flex-start}\n.cms-lead-row input{flex:1;padding:10px 14px;border:1px solid var(--bd);border-radius:8px;font-family:inherit;font-size:14px}\n.cms-lead-row input:focus{outline:none;border-color:var(--gb)}\n.cms-lead-status{font-size:13px;margin-top:8px;font-weight:500}\n.cms-back-link{text-align:center;margin-top:12px;font-size:13px;color:var(--gg)}\n.cms-back-link a{color:var(--gb);text-decoration:underline}\n<\/style>\n\n<div class=\"cms-container\">\n\n  <header class=\"cms-card cms-header\">\n    <div class=\"cms-brand\">GRIP &middot; Scan Gestion des Contrats<\/div>\n    <h1>O\u00f9 en est votre organisation en mati\u00e8re de gestion des contrats\u00a0?<\/h1>\n    <p>Faites le scan de gestion des contrats\u00a0: cinq piliers, seize questions en cinq minutes. D\u00e9couvrez les risques et les points d&rsquo;am\u00e9lioration pour votre organisation. Bas\u00e9 sur des m\u00e9thodologies reconnues en achats et gestion des contrats.<\/p>\n  <\/header>\n\n  <section class=\"cms-card\" id=\"cms-intro-card\">\n    <h2 class=\"cms-h2\">Un aper\u00e7u imm\u00e9diat pour vous<\/h2>\n    <ul style=\"list-style:none;padding:0;margin:0 0 12px 0;\">\n      <li style=\"padding:7px 0 7px 24px;position:relative;color:var(--gg);font-size:14px;\"><span style=\"position:absolute;left:0;color:var(--gb);font-weight:700;\">&#10003;<\/span>Des actions d&rsquo;am\u00e9lioration concr\u00e8tes li\u00e9es aux 9 \u00e9tapes de notre approche pour structurer une gestion des contrats professionnelle<\/li>\n      <li style=\"padding:7px 0 7px 24px;position:relative;color:var(--gg);font-size:14px;\"><span style=\"position:absolute;left:0;color:var(--gb);font-weight:700;\">&#10003;<\/span>Un score total avec une r\u00e9partition par pilier<\/li>\n      <li style=\"padding:7px 0 7px 24px;position:relative;color:var(--gg);font-size:14px;\"><span style=\"position:absolute;left:0;color:var(--gb);font-weight:700;\">&#10003;<\/span>Vous recevez le r\u00e9sultat directement par e-mail<\/li>\n    <\/ul>\n    <p style=\"font-size:12px;color:var(--gg);margin:0;\">Ce scan est une exploration g\u00e9n\u00e9rale. Il ne constitue pas un conseil juridique ou de conformit\u00e9.<\/p>\n  <\/section>\n\n  <section class=\"cms-card\" id=\"cms-questions\">\n    <h2 class=\"cms-h2\">Votre organisation <span style=\"font-size:13px;font-weight:400;color:var(--gg);\">(facultatif)<\/span><\/h2>\n    <div class=\"cms-fields-row\">\n      <div class=\"cms-field\">\n        <label for=\"cms-org\">Organisation<\/label>\n        <input id=\"cms-org\" type=\"text\" placeholder=\"p. ex. Groupe Sant\u00e9 Exemple\">\n      <\/div>\n      <div class=\"cms-field\">\n        <label for=\"cms-sector\">Secteur<\/label>\n        <select id=\"cms-sector\">\n          <option value=\"\">&#8212; choisir &#8212;<\/option>\n          <option value=\"Sant\u00e9\">Sant\u00e9<\/option>\n          <option value=\"Enseignement\">Enseignement<\/option>\n          <option value=\"Secteur public\">Secteur public<\/option>\n          <option value=\"Immobilier\">Immobilier<\/option>\n          <option value=\"Autre\">Autre<\/option>\n        <\/select>\n      <\/div>\n    <\/div>\n    <div class=\"cms-field\" style=\"max-width:50%\">\n      <label for=\"cms-size\">Taille<\/label>\n      <select id=\"cms-size\">\n        <option value=\"\">&#8212; choisir &#8212;<\/option>\n        <option value=\"Petite (&lt;50 employ\u00e9s)\">Petite (&lt;50 employ\u00e9s)<\/option>\n        <option value=\"Moyenne (50-249)\">Moyenne (50-249)<\/option>\n        <option value=\"Grande (250+)\">Grande (250+)<\/option>\n      <\/select>\n    <\/div>\n\n    <div id=\"cms-pillars\"><\/div>\n\n    <div class=\"cms-acts\">\n      <button class=\"cms-btn cms-btn-secondary\" onclick=\"cmsReset()\">Effacer<\/button>\n      <button class=\"cms-btn cms-btn-primary\" id=\"cms-submit-btn\" onclick=\"cmsShowResults()\">Voir le r\u00e9sultat<\/button>\n    <\/div>\n  <\/section>\n\n  <section class=\"cms-card\" id=\"cms-results\">\n    <h2 class=\"cms-h2\">Votre r\u00e9sultat<\/h2>\n    <div class=\"cms-score-hero\">\n      <div class=\"cms-score-num\" id=\"cms-score-num\" style=\"color:var(--gb);\">0%<\/div>\n      <div class=\"cms-score-lbl\">Maturit\u00e9 de gestion des contrats<\/div>\n      <div class=\"cms-verdict\" id=\"cms-verdict\">&#8212;<\/div>\n    <\/div>\n\n    <h3 style=\"font-size:15px;font-weight:700;color:var(--gb);margin:20px 0 4px 0;\">Scores par pilier<\/h3>\n    <div class=\"cms-pscores\" id=\"cms-pscores\"><\/div>\n\n    <div class=\"cms-recs\" id=\"cms-recs\">\n      <h3>\u00c9tapes recommand\u00e9es<\/h3>\n      <ul id=\"cms-rec-list\"><\/ul>\n    <\/div>\n\n    <div class=\"cms-lead-block\" id=\"cms-lead-block\">\n      <h3>Recevez le r\u00e9sultat par e-mail<\/h3>\n      <p>Indiquez votre adresse e-mail et nous vous enverrons un aper\u00e7u de votre score et des \u00e9tapes recommand\u00e9es.<\/p>\n      <div class=\"cms-lead-row\">\n        <input type=\"email\" id=\"cms-email\" placeholder=\"vous@email.fr\">\n        <button class=\"cms-btn cms-btn-primary\" onclick=\"cmsSubmitLead()\">Envoyer<\/button>\n      <\/div>\n      <div aria-hidden=\"true\" style=\"position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden;\"><label>Website<input type=\"text\" id=\"cms-website\" tabindex=\"-1\" autocomplete=\"off\"><\/label><\/div>\n      <label style=\"display:flex;gap:8px;align-items:flex-start;margin-top:12px;font-size:12px;color:var(--gg);font-weight:400;text-transform:none;letter-spacing:normal;cursor:pointer;\">\n        <input type=\"checkbox\" id=\"cms-consent\" style=\"width:auto;margin-top:2px;flex-shrink:0;\">\n        <span>Oui, envoyez-moi mon r\u00e9sultat de scan par e-mail. GRIP peut me contacter \u00e0 ce sujet. Consultez la <a href=\"\/fr\/conditions\/politique-confidentialite\/\" target=\"_blank\" rel=\"noopener\" style=\"color:var(--gb);text-decoration:underline;\">politique de confidentialit\u00e9<\/a>.<\/span>\n      <\/label>\n      <div class=\"cms-lead-status\" id=\"cms-lead-status\" style=\"display:none;\"><\/div>\n    <\/div>\n\n    <div class=\"cms-cta\" id=\"cms-cta-block\">\n      <h2>Pr\u00eat \u00e0 passer \u00e0 l&rsquo;\u00e9tape suivante\u00a0?<\/h2>\n      <p>\u00c9changez sur votre r\u00e9sultat lors d&rsquo;une session d&rsquo;exploration sans engagement. Nous regarderons ensemble o\u00f9 vous en \u00eates aujourd&rsquo;hui et quelle \u00e9tape apporte le plus de valeur en premier.<\/p>\n      <a class=\"cms-btn cms-btn-primary\" href=\"\/fr\/reserver-demo\/\" style=\"text-decoration:none;\">Planifier une session d&rsquo;exploration<\/a>\n      &nbsp;\n      <a class=\"cms-btn cms-btn-secondary\" href=\"\/fr\/nous-contacter\/\" style=\"text-decoration:none;margin-top:8px;display:inline-block;background:rgba(255,255,255,0.15);color:#fff;border-color:rgba(255,255,255,.4);\">Nous contacter<\/a>\n    <\/div>\n\n    <div class=\"cms-back-link\">\n      <a href=\"\/fr\/approche\/\">&#8592; Retour \u00e0 notre d\u00e9marche<\/a>\n    <\/div>\n\n    <div class=\"cms-acts\" style=\"margin-top:16px;\">\n      <button class=\"cms-btn cms-btn-secondary\" onclick=\"cmsReset()\">Recommencer<\/button>\n    <\/div>\n  <\/section>\n\n<\/div>\n\n<script>\nvar CMS_PILLARS = [\n  {\n    id: 'administratie',\n    title: 'Administration contractuelle',\n    meta: 'Pilier 1 \u00b7 Vue centralis\u00e9e et alertes',\n    questions: [\n      'Tous les contrats sont-ils centralis\u00e9s dans un seul endroit consultable (et non dispers\u00e9s entre bo\u00eetes mail et fichiers Excel)\u00a0?',\n      '\u00cates-vous automatiquement averti des \u00e9ch\u00e9ances, d\u00e9lais de pr\u00e9avis et moments d&rsquo;indexation \u00e0 venir\u00a0?',\n      'Les classifications contractuelles (valeur, risque, dur\u00e9e) sont-elles document\u00e9es et \u00e0 jour\u00a0?'\n    ]\n  },\n  {\n    id: 'organisatie',\n    title: 'Organisation et gouvernance',\n    meta: 'Pilier 2 \u00b7 Fondation',\n    questions: [\n      'Chaque contrat de votre organisation a-t-il un propri\u00e9taire d\u00e9sign\u00e9, responsable de l&rsquo;ensemble de son cycle de vie\u00a0?',\n      'Les r\u00f4les et responsabilit\u00e9s li\u00e9s \u00e0 la gestion des contrats sont-ils document\u00e9s par \u00e9crit et connus des personnes concern\u00e9es\u00a0?',\n      'La gestion des contrats est-elle un point fixe \u00e0 l&rsquo;ordre du jour des r\u00e9unions de direction ou de management\u00a0?'\n    ]\n  },\n  {\n    id: 'prestaties',\n    title: 'Gestion de la performance',\n    meta: 'Pilier 3 \u00b7 Mesurer et ajuster',\n    questions: [\n      'Mesurez-vous p\u00e9riodiquement si les fournisseurs respectent les accords du contrat (KPI, SLA)\u00a0?',\n      'Discutez-vous structurellement des performances des fournisseurs lors de r\u00e9unions p\u00e9riodiques bas\u00e9es sur des donn\u00e9es mesurables\u00a0?',\n      'Les indicateurs de performance contractuels sont-ils d\u00e9finis de mani\u00e8re concr\u00e8te et mesurable avant la signature du contrat\u00a0?'\n    ]\n  },\n  {\n    id: 'leveranciers',\n    title: 'Gestion des fournisseurs',\n    meta: 'Pilier 4 \u00b7 Portefeuille et gestion des risques',\n    questions: [\n      'Disposez-vous d&rsquo;un aper\u00e7u \u00e0 jour de tous les fournisseurs avec leur statut contractuel, leur classification de risque et le montant du contrat associ\u00e9\u00a0?',\n      'R\u00e9alisez-vous une \u00e9valuation p\u00e9riodique des fournisseurs et en consignez-vous les r\u00e9sultats dans le dossier\u00a0?',\n      'Pour les fournisseurs critiques, avez-vous d\u00e9fini contractuellement ce qui doit se passer en cas de non-conformit\u00e9 ou de r\u00e9siliation\u00a0?'\n    ]\n  },\n  {\n    id: 'relaties',\n    title: 'Gestion de la relation',\n    meta: 'Pilier 5 \u00b7 Collaboration et continuit\u00e9',\n    questions: [\n      'Existe-t-il un interlocuteur fixe chez le fournisseur et en interne pour chaque contrat strat\u00e9gique\u00a0?',\n      'Les modifications apport\u00e9es aux contrats (p\u00e9rim\u00e8tre, prix, dur\u00e9e) sont-elles formellement enregistr\u00e9es, et les deux parties connaissent-elles la version actuelle\u00a0?',\n      'Existe-t-il un protocole de transmission garantissant que la connaissance des contrats est pr\u00e9serv\u00e9e lors des changements de personnel\u00a0?',\n      'Disposez-vous d&rsquo;un aper\u00e7u \u00e0 jour de toutes les actions et obligations d\u00e9coulant des contrats, avec un responsable et une \u00e9ch\u00e9ance\u00a0?'\n    ]\n  }\n];\n\nvar CMS_ANSWERS = [\n  {value:'yes',label:'Oui',score:2},\n  {value:'partial',label:'Partiellement',score:1},\n  {value:'no',label:'Non',score:0},\n  {value:'unknown',label:'Je ne sais pas',score:0}\n];\n\nvar CMS_STATE = {};\n\nvar CMS_RECS = {\n  organisatie: {\n    steps: ['\u00c9tape 05\u00a0: Propri\u00e9t\u00e9 des contrats et organisation', '\u00c9tape 01\u00a0: Session d\u2019exploration'],\n    text: 'D\u00e9finissez la propri\u00e9t\u00e9 et les r\u00f4les. Chaque contrat a besoin d\u2019un responsable en charge de l\u2019ensemble de son cycle de vie.'\n  },\n  administratie: {\n    steps: ['\u00c9tape 02\u00a0: Collecte des donn\u00e9es contractuelles', '\u00c9tape 03\u00a0: Quickscan et administration en ordre'],\n    text: 'Centralisez tous les contrats en un seul endroit et mettez en place des alertes automatiques pour les \u00e9ch\u00e9ances et d\u00e9lais de pr\u00e9avis.'\n  },\n  prestaties: {\n    steps: ['\u00c9tape 08\u00a0: Mise en \u0153uvre logicielle et gestion de la performance', '\u00c9tape 04\u00a0: Inventaire des risques'],\n    text: 'D\u00e9finissez des KPI et mesurez-les p\u00e9riodiquement. Discutez des performances des fournisseurs sur la base de donn\u00e9es, pas d\u2019intuition.'\n  },\n  leveranciers: {\n    steps: ['\u00c9tape 04\u00a0: Inventaire des risques et classification des contrats', '\u00c9tape 03\u00a0: Quickscan'],\n    text: 'Constituez un registre des fournisseurs avec classification des risques. Vous saurez ainsi quels fournisseurs n\u00e9cessitent une gestion active.'\n  },\n  relaties: {\n    steps: ['\u00c9tape 05\u00a0: Propri\u00e9t\u00e9 des contrats', '\u00c9tape 09\u00a0: Adoption et ancrage'],\n    text: 'Assurez des interlocuteurs fixes et un protocole de transmission. La connaissance des contrats ne doit pas rester uniquement dans la t\u00eate des collaborateurs.'\n  }\n};\n\nfunction cmsRenderPillars() {\n  var root = document.getElementById('cms-pillars');\n  root.innerHTML = '';\n  CMS_PILLARS.forEach(function(pillar, pi) {\n    var div = document.createElement('div');\n    div.className = 'cms-pillar';\n    var html = '<div class=\"cms-ph\"><span class=\"cms-pnum\">' + (pi+1) + '<\/span><span class=\"cms-ptitle\">' + pillar.title + '<\/span><\/div>';\n    html += '<div class=\"cms-pmeta\">' + pillar.meta + '<\/div>';\n    pillar.questions.forEach(function(q, qi) {\n      var qid = pillar.id + '-q' + qi;\n      html += '<div class=\"cms-q\"><div class=\"cms-qtext\">' + (qi+1) + '. ' + q + '<\/div><div class=\"cms-opts\" data-qid=\"' + qid + '\">';\n      CMS_ANSWERS.forEach(function(a) {\n        html += '<label data-value=\"' + a.value + '\" onclick=\"cmsSelect(\\x27' + qid + '\\x27,\\x27' + a.value + '\\x27,this)\">' + a.label + '<\/label>';\n      });\n      html += '<\/div><\/div>';\n    });\n    div.innerHTML = html;\n    root.appendChild(div);\n  });\n}\n\nfunction cmsSelect(qid, value, el) {\n  CMS_STATE[qid] = value;\n  var group = el.parentElement;\n  group.querySelectorAll('label').forEach(function(l){l.classList.remove('sel');});\n  el.classList.add('sel');\n  cmsUpdateBtn();\n}\n\nfunction cmsUpdateBtn() {\n  var total = CMS_PILLARS.reduce(function(s,p){return s+p.questions.length;},0);\n  var answered = Object.keys(CMS_STATE).length;\n  var btn = document.getElementById('cms-submit-btn');\n  btn.textContent = answered < total ? ('Voir le r\u00e9sultat (' + answered + '\/' + total + ')') : 'Voir le r\u00e9sultat';\n}\n\nfunction cmsCompute() {\n  var pillarScores = {};\n  var totalPts = 0, maxPts = 0;\n  CMS_PILLARS.forEach(function(pillar) {\n    var pts = 0, maxP = pillar.questions.length * 2;\n    pillar.questions.forEach(function(q,qi) {\n      var val = CMS_STATE[pillar.id+'-q'+qi];\n      var ans = CMS_ANSWERS.find(function(a){return a.value===val;});\n      if (ans) pts += ans.score;\n    });\n    pillarScores[pillar.id] = {title:pillar.title,points:pts,max:maxP,percent:Math.round((pts\/maxP)*100)};\n    totalPts += pts; maxPts += maxP;\n  });\n  return {pillars:pillarScores, totalPercent:Math.round((totalPts\/maxPts)*100)};\n}\n\nfunction cmsComputeRecommendations() {\n  var scores = cmsCompute();\n  var sorted = Object.entries(scores.pillars).sort(function(a,b){return a[1].percent - b[1].percent;});\n  var recs = [];\n  sorted.forEach(function(entry) {\n    if (recs.length >= 3) return;\n    var id = entry[0], p = entry[1];\n    if (p.percent < 80) {\n      var rec = CMS_RECS[id];\n      if (rec) { recs.push({title:p.title, text:rec.text, steps:rec.steps}); }\n    }\n  });\n  return recs;\n}\n\nfunction cmsShowResults() {\n  var total = CMS_PILLARS.reduce(function(s,p){return s+p.questions.length;},0);\n  if (Object.keys(CMS_STATE).length < total) {\n    var firstMissing = null;\n    CMS_PILLARS.forEach(function(pillar) {\n      pillar.questions.forEach(function(q, qi) {\n        var qid = pillar.id + '-q' + qi;\n        if (!firstMissing) {\n          if (!CMS_STATE[qid]) { firstMissing = qid; }\n        }\n      });\n    });\n    if (firstMissing) {\n      var grp = document.querySelector('.cms-opts[data-qid=\"' + firstMissing + '\"]');\n      var qEl = grp ? grp.closest('.cms-q') : null;\n      if (qEl) {\n        qEl.style.transition = 'background .3s';\n        qEl.style.background = '#FEF3C7';\n        qEl.scrollIntoView({behavior:'smooth', block:'center'});\n        setTimeout(function(){ qEl.style.background = ''; }, 1800);\n      }\n    }\n    return;\n  }\n  var scores = cmsCompute();\n  var pct = scores.totalPercent;\n\n  \/\/ Score number color\n  var numEl = document.getElementById('cms-score-num');\n  numEl.textContent = pct + '%';\n  numEl.style.color = pct < 40 ? '#E0341B' : (pct < 70 ? '#F59E0B' : '#10B981');\n\n  var verdictEl = document.getElementById('cms-verdict');\n  if (pct < 40) {\n    verdictEl.textContent = 'Ad hoc\u00a0: les bases ne sont pas encore en place';\n    verdictEl.className = 'cms-verdict cms-v-low';\n  } else if (pct < 70) {\n    verdictEl.textContent = 'Structur\u00e9\u00a0: une bonne base, une am\u00e9lioration cibl\u00e9e est possible';\n    verdictEl.className = 'cms-verdict cms-v-mid';\n  } else {\n    verdictEl.textContent = 'Optimis\u00e9\u00a0: gestion des contrats professionnelle';\n    verdictEl.className = 'cms-verdict cms-v-high';\n  }\n\n  \/\/ Per-pillar bars\n  var proot = document.getElementById('cms-pscores');\n  proot.innerHTML = '';\n  Object.values(scores.pillars).forEach(function(p) {\n    var barColor = p.percent < 40 ? '#E0341B' : (p.percent < 70 ? '#F59E0B' : '#10B981');\n    var row = document.createElement('div');\n    row.className = 'cms-prow';\n    row.innerHTML = '<div class=\"cms-prow-lbl\">' + p.title + '<\/div>' +\n      '<div class=\"cms-prow-bar\"><div class=\"cms-prow-fill\" style=\"width:' + p.percent + '%;background:' + barColor + ';\"><\/div><\/div>' +\n      '<div class=\"cms-prow-val\" style=\"color:' + barColor + ';\">' + p.percent + '%<\/div>';\n    proot.appendChild(row);\n  });\n\n  \/\/ Recommendations\n  var recs = cmsComputeRecommendations();\n  var recList = document.getElementById('cms-rec-list');\n  recList.innerHTML = '';\n  recs.forEach(function(rec) {\n    var li = document.createElement('li');\n    li.innerHTML = '<strong>' + rec.title + ':<\/strong> ' + rec.text + ' <a href=\"\/fr\/approche\/\" style=\"color:#006BFF;font-size:12px;text-decoration:underline;\">(' + rec.steps.join(', ') + ')<\/a>';\n    recList.appendChild(li);\n  });\n  if (recs.length === 0) {\n    recList.innerHTML = '<li>Vous \u00eates bien positionn\u00e9. Concentrez-vous d\u00e9sormais sur la d\u00e9montrabilit\u00e9 et les audits internes pour ancrer ce niveau.<\/li>';\n  }\n\n  document.getElementById('cms-results').style.display = 'block';\n  document.getElementById('cms-results').scrollIntoView({behavior:'smooth'});\n}\n\nfunction cmsSubmitLead() {\n  var email = document.getElementById('cms-email').value.trim();\n  var statusEl = document.getElementById('cms-lead-status');\n  if (!email || !\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)) {\n    statusEl.textContent = 'Indiquez une adresse e-mail valide.';\n    statusEl.style.color = '#E0341B';\n    statusEl.style.display = 'block';\n    return;\n  }\n  if (!document.getElementById('cms-consent').checked) {\n    statusEl.textContent = 'Cochez la case pour que nous puissions vous envoyer le r\u00e9sultat par e-mail.';\n    statusEl.style.color = '#E0341B';\n    statusEl.style.display = 'block';\n    return;\n  }\n  var scores = cmsCompute();\n  var pct = scores.totalPercent;\n  var verdictLabel = pct < 40 ? 'Ad hoc' : (pct < 70 ? 'Structur\u00e9' : 'Optimis\u00e9');\n  var pillarsArr = Object.entries(scores.pillars).map(function(e){\n    return {id:e[0],title:e[1].title,percent:e[1].percent};\n  });\n\n  var btn = document.querySelector('#cms-lead-block button');\n  btn.disabled = true;\n  btn.textContent = 'Envoi...';\n  statusEl.style.display = 'none';\n\n  fetch('\/wp-json\/grip\/v1\/cm-scan', {\n    method: 'POST',\n    headers: {'Content-Type': 'application\/json'},\n    body: JSON.stringify({\n      email: email,\n      org: document.getElementById('cms-org').value,\n      sector: document.getElementById('cms-sector').value,\n      size: document.getElementById('cms-size').value,\n      score: pct,\n      verdict: verdictLabel,\n      pillars: pillarsArr,\n      recommendations: cmsComputeRecommendations(),\n      consent: true,\n      website: document.getElementById('cms-website').value,\n      lang: 'fr'\n    })\n  })\n  .then(function(r){return r.json();})\n  .then(function(data){\n    if (data.ok) {\n      statusEl.textContent = 'Merci\u00a0! Vous recevrez le r\u00e9sultat \u00e0 ' + email;\n      statusEl.style.color = '#10B981';\n    } else {\n      statusEl.textContent = 'Une erreur est survenue. R\u00e9essayez ou \u00e9crivez-nous \u00e0 info@grip-facility.com.';\n      statusEl.style.color = '#E0341B';\n    }\n    statusEl.style.display = 'block';\n    btn.disabled = false;\n    btn.textContent = 'Envoyer';\n  })\n  .catch(function(){\n    statusEl.textContent = 'Impossible de se connecter. R\u00e9essayez.';\n    statusEl.style.color = '#E0341B';\n    statusEl.style.display = 'block';\n    btn.disabled = false;\n    btn.textContent = 'Envoyer';\n  });\n}\n\nfunction cmsReset() {\n  CMS_STATE = {};\n  document.querySelectorAll('.cms-opts label').forEach(function(l){l.classList.remove('sel');});\n  document.getElementById('cms-results').style.display = 'none';\n  document.getElementById('cms-email').value = '';\n  document.getElementById('cms-lead-status').style.display = 'none';\n  document.getElementById('cms-org').value = '';\n  document.getElementById('cms-sector').value = '';\n  document.getElementById('cms-size').value = '';\n  var consentEl = document.getElementById('cms-consent'); if (consentEl) consentEl.checked = false;\n  var hpEl = document.getElementById('cms-website'); if (hpEl) hpEl.value = '';\n  cmsUpdateBtn();\n  window.scrollTo({top:0,behavior:'smooth'});\n}\n\ndocument.addEventListener('DOMContentLoaded', function() {\n  cmsRenderPillars();\n  cmsUpdateBtn();\n});\n<\/script>\n<\/div>\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>GRIP &middot; Scan Gestion des Contrats O\u00f9 en est votre organisation en mati\u00e8re de gestion des contrats\u00a0? Faites le scan de gestion des contrats\u00a0: cinq piliers, seize questions en cinq minutes. D\u00e9couvrez les risques et les points d&rsquo;am\u00e9lioration pour votre organisation. Bas\u00e9 sur des m\u00e9thodologies reconnues en achats et gestion des contrats. Un aper\u00e7u imm\u00e9diat [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-19219","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.grip-facility.com\/fr\/wp-json\/wp\/v2\/pages\/19219","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.grip-facility.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.grip-facility.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/www.grip-facility.com\/fr\/wp-json\/wp\/v2\/comments?post=19219"}],"version-history":[{"count":0,"href":"https:\/\/www.grip-facility.com\/fr\/wp-json\/wp\/v2\/pages\/19219\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.grip-facility.com\/fr\/wp-json\/wp\/v2\/media?parent=19219"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}