AI-readiness scan

> Click here to fill out the English version of this scan

AI Reality Check

Is your organization truly ready for AI?

Discover in four minutes how your organization scores on data, control, human application, and demonstrable value.

16 questions. You will immediately receive a readiness analysis.

Why this scan

AI rarely gets stuck on the model alone

Many organizations start with tools and pilots, while the underlying data, access rights, human responsibility, and costs are not yet clear. This scan maps the entire value chain.

01

Data foundation

Quality, findability, metadata, ownership, and retention periods.

02

Data control

Data boundaries, access rights, and a deliberate choice between cloud and local.

03

People and work

Concrete processes, adoption, and clear human responsibility.

04

Value and growth

Measurable results, total costs, and controlled scaling.

After the scan

From score to concrete action plan

You will see the score immediately. Then leave your details to download a comprehensive analysis with risks, priorities, and actions for the next thirty, sixty, and ninety days.

The scan does not automatically choose cloud AI or local AI. The answers determine which approach best fits the data used, desired control, costs, and application.

#comex-ai-reality-check, #comex-ai-reality-check * { box-sizing: border-box; } #comex-ai-reality-check { --cxs-blue: #009be1; --cxs-blue-dark: #1559ed; --cxs-text: #3a4f66; --cxs-heading: #192a3d; --cxs-border: #e1e8ed; --cxs-soft: #f2f5f7; --cxs-softer: #fafbfc; --cxs-white: #ffffff; --cxs-good: #16845b; --cxs-warn: #c57a00; --cxs-risk: #c83b43; width: 100%; color: var(--cxs-text); background: var(--cxs-white); font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; font-size: 18px; line-height: 1.5; -webkit-font-smoothing: antialiased; } #comex-ai-reality-check button, #comex-ai-reality-check input, #comex-ai-reality-check select { font: inherit; } #comex-ai-reality-check button { cursor: pointer; } #comex-ai-reality-check button:focus-visible, #comex-ai-reality-check input:focus-visible, #comex-ai-reality-check select:focus-visible, #comex-ai-reality-check a:focus-visible { outline: 3px solid rgba(0, 155, 225, 0.35); outline-offset: 3px; } #comex-ai-reality-check h1, #comex-ai-reality-check h2, #comex-ai-reality-check h3, #comex-ai-reality-check p { margin-top: 0; } #comex-ai-reality-check h1, #comex-ai-reality-check h2, #comex-ai-reality-check h3 { color: var(--cxs-heading); font-weight: 700; letter-spacing: 0; } #comex-ai-reality-check h1 { max-width: 820px; margin-bottom: 24px; color: var(--cxs-blue); font-size: clamp(46px, 5.1vw, 68px); line-height: 1.13; font-weight: 600; } #comex-ai-reality-check h2 { margin-bottom: 20px; font-size: clamp(34px, 3.7vw, 50px); line-height: 1.2; font-weight: 600; } #comex-ai-reality-check h3 { margin-bottom: 10px; font-size: 24px; line-height: 1.3; } #comex-ai-reality-check p { margin-bottom: 20px; } #comex-ai-reality-check a { color: var(--cxs-blue); text-decoration: none; } #comex-ai-reality-check a:hover { color: var(--cxs-blue-dark); } #comex-ai-reality-check .cxs-shell { width: min(1290px, 90vw); margin: 0 auto; } #comex-ai-reality-check .cxs-hero, #comex-ai-reality-check .cxs-intro, #comex-ai-reality-check .cxs-scan-section, #comex-ai-reality-check .cxs-explain { padding: 96px 0; } #comex-ai-reality-check .cxs-hero { background: var(--cxs-soft); } #comex-ai-reality-check .cxs-hero-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(340px, 0.65fr); gap: 72px; align-items: center; } #comex-ai-reality-check .cxs-eyebrow { margin-bottom: 16px; color: var(--cxs-blue); font-size: 14px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; } #comex-ai-reality-check .cxs-lead { max-width: 760px; margin-bottom: 32px; color: var(--cxs-text); font-size: 22px; line-height: 1.5; font-weight: 600; } #comex-ai-reality-check .cxs-hero-actions { display: flex; flex-wrap: wrap; gap: 18px 24px; align-items: center; } #comex-ai-reality-check .cxs-meta { color: var(--cxs-text); font-size: 15px; font-weight: 600; } #comex-ai-reality-check .cxs-btn { display: inline-flex; min-height: 50px; align-items: center; justify-content: center; border: 1px solid transparent; border-radius: 0; padding: 12px 28px; transition: all 0.14s ease; font-size: 17px; font-weight: 600; line-height: 1.2; } #comex-ai-reality-check .cxs-btn-primary { border-color: var(--cxs-blue); color: var(--cxs-white); background: var(--cxs-blue); } #comex-ai-reality-check .cxs-btn-primary:hover { color: var(--cxs-blue); background: var(--cxs-white); } #comex-ai-reality-check .cxs-btn-secondary { border-color: var(--cxs-blue); color: var(--cxs-blue); background: var(--cxs-white); } #comex-ai-reality-check .cxs-btn-secondary:hover { color: var(--cxs-white); background: var(--cxs-blue); } #comex-ai-reality-check .cxs-btn-quiet { min-height: 44px; padding: 10px 18px; border-color: var(--cxs-border); color: var(--cxs-text); background: var(--cxs-white); font-size: 15px; } #comex-ai-reality-check .cxs-btn-quiet:hover { border-color: var(--cxs-blue); color: var(--cxs-blue); } #comex-ai-reality-check .cxs-btn[disabled] { cursor: not-allowed; opacity: 0.45; } #comex-ai-reality-check .cxs-hero-panel { padding: 42px; border-top: 6px solid var(--cxs-blue); background: var(--cxs-white); box-shadow: 0 18px 45px rgba(25, 42, 61, 0.09); } #comex-ai-reality-check .cxs-hero-panel h2 { margin-bottom: 16px; font-size: 28px; color: var(--cxs-heading); } #comex-ai-reality-check .cxs-hero-panel ul { margin: 0; padding: 0; list-style: none; } #comex-ai-reality-check .cxs-hero-panel li { position: relative; margin-bottom: 12px; padding-left: 26px; font-size: 16px; } #comex-ai-reality-check .cxs-hero-panel li::before { position: absolute; top: 0; left: 0; color: var(--cxs-blue); content: ">"; font-weight: 800; } #comex-ai-reality-check .cxs-score-preview { display: flex; margin-bottom: 24px; align-items: baseline; gap: 10px; } #comex-ai-reality-check .cxs-score-preview-number { color: var(--cxs-blue); font-size: 64px; line-height: 1; font-weight: 700; } #comex-ai-reality-check .cxs-score-preview-label { color: var(--cxs-text); font-size: 17px; font-weight: 700; } #comex-ai-reality-check .cxs-copy-narrow { max-width: 860px; } #comex-ai-reality-check .cxs-domain-grid { display: grid; margin-top: 52px; grid-template-columns: repeat(4, minmax(0, 1fr)); border-top: 1px solid var(--cxs-border); border-left: 1px solid var(--cxs-border); } #comex-ai-reality-check .cxs-domain-card { min-height: 220px; padding: 30px; border-right: 1px solid var(--cxs-border); border-bottom: 1px solid var(--cxs-border); background: var(--cxs-white); } #comex-ai-reality-check .cxs-domain-card:nth-child(even) { background: var(--cxs-softer); } #comex-ai-reality-check .cxs-domain-number { display: block; margin-bottom: 32px; color: var(--cxs-blue); font-size: 15px; font-weight: 800; } #comex-ai-reality-check .cxs-domain-card p { margin-bottom: 0; font-size: 16px; } #comex-ai-reality-check .cxs-scan-section { background: var(--cxs-soft); } #comex-ai-reality-check .cxs-scan-frame { max-width: 1040px; margin: 0 auto; border-top: 6px solid var(--cxs-blue); background: var(--cxs-white); box-shadow: 0 18px 55px rgba(25, 42, 61, 0.09); } #comex-ai-reality-check .cxs-app { min-height: 560px; padding: 58px; } #comex-ai-reality-check .cxs-app-intro { max-width: 760px; margin: 0 auto; text-align: center; } #comex-ai-reality-check .cxs-app-intro h2 { font-size: clamp(34px, 4vw, 48px); } #comex-ai-reality-check .cxs-start-list { display: grid; max-width: 650px; margin: 34px auto; padding: 0; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--cxs-border); list-style: none; } #comex-ai-reality-check .cxs-start-list li { padding: 18px 12px; background: var(--cxs-softer); color: var(--cxs-heading); font-size: 15px; font-weight: 700; } #comex-ai-reality-check .cxs-question-head { margin-bottom: 36px; } #comex-ai-reality-check .cxs-question-topline { display: flex; margin-bottom: 16px; justify-content: space-between; gap: 20px; color: var(--cxs-text); font-size: 14px; font-weight: 700; } #comex-ai-reality-check .cxs-progress { width: 100%; height: 8px; overflow: hidden; background: var(--cxs-border); } #comex-ai-reality-check .cxs-progress > span { display: block; height: 100%; background: var(--cxs-blue); transition: width 0.25s ease; } #comex-ai-reality-check .cxs-question-body { max-width: 820px; margin: 0 auto; } #comex-ai-reality-check .cxs-question-body h2 { margin-bottom: 14px; color: var(--cxs-heading); font-size: clamp(29px, 3.3vw, 42px); } #comex-ai-reality-check .cxs-question-help { margin-bottom: 30px; color: var(--cxs-text); font-size: 16px; } #comex-ai-reality-check .cxs-options { display: grid; gap: 12px; } #comex-ai-reality-check .cxs-option { display: grid; width: 100%; min-height: 72px; padding: 16px 20px; grid-template-columns: 28px 1fr; align-items: center; gap: 14px; border: 1px solid var(--cxs-border); border-radius: 0; color: var(--cxs-heading); background: var(--cxs-white); text-align: left; font-weight: 700; transition: all 0.14s ease; } #comex-ai-reality-check .cxs-option:hover { border-color: var(--cxs-blue); background: rgba(0, 155, 225, 0.045); } #comex-ai-reality-check .cxs-option[aria-pressed="true"] { border-color: var(--cxs-blue); color: var(--cxs-blue); background: rgba(0, 155, 225, 0.08); box-shadow: inset 4px 0 0 var(--cxs-blue); } #comex-ai-reality-check .cxs-radio { display: grid; width: 22px; height: 22px; place-items: center; border: 2px solid var(--cxs-border); border-radius: 50%; } #comex-ai-reality-check .cxs-option[aria-pressed="true"] .cxs-radio { border-color: var(--cxs-blue); } #comex-ai-reality-check .cxs-option[aria-pressed="true"] .cxs-radio::after { width: 10px; height: 10px; border-radius: 50%; background: var(--cxs-blue); content: ""; } #comex-ai-reality-check .cxs-question-actions { display: flex; margin-top: 34px; justify-content: space-between; gap: 16px; } #comex-ai-reality-check .cxs-results-header { display: grid; margin-bottom: 42px; grid-template-columns: 210px minmax(0, 1fr); gap: 42px; align-items: center; } #comex-ai-reality-check .cxs-total-score { display: grid; width: 190px; height: 190px; place-items: center; align-content: center; border: 10px solid var(--cxs-blue); border-radius: 50%; background: var(--cxs-white); } #comex-ai-reality-check .cxs-total-score strong { color: var(--cxs-blue); font-size: 58px; line-height: 1; } #comex-ai-reality-check .cxs-total-score span { margin-top: 5px; color: var(--cxs-text); font-size: 15px; font-weight: 700; } #comex-ai-reality-check .cxs-result-level { margin-bottom: 8px; color: var(--cxs-blue); font-size: 14px; font-weight: 800; letter-spacing: 0.07em; text-transform: uppercase; } #comex-ai-reality-check .cxs-results-header h2 { margin-bottom: 12px; font-size: clamp(32px, 4vw, 46px); } #comex-ai-reality-check .cxs-result-note { padding: 18px 20px; border-left: 4px solid var(--cxs-warn); background: #fff8ea; font-size: 15px; } #comex-ai-reality-check .cxs-result-grid { display: grid; margin-bottom: 42px; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; } #comex-ai-reality-check .cxs-domain-result { padding: 22px; border: 1px solid var(--cxs-border); background: var(--cxs-softer); } #comex-ai-reality-check .cxs-domain-result-head { display: flex; margin-bottom: 12px; justify-content: space-between; gap: 15px; color: var(--cxs-heading); font-size: 16px; font-weight: 800; } #comex-ai-reality-check .cxs-domain-result p { margin-top: 12px; margin-bottom: 0; font-size: 14px; } #comex-ai-reality-check .cxs-bar { width: 100%; height: 9px; background: var(--cxs-border); } #comex-ai-reality-check .cxs-bar span { display: block; height: 100%; background: var(--cxs-blue); } #comex-ai-reality-check .cxs-gaps { margin-bottom: 44px; } #comex-ai-reality-check .cxs-gaps h3 { margin-bottom: 18px; font-size: 28px; } #comex-ai-reality-check .cxs-gap-list { display: grid; gap: 1px; background: var(--cxs-border); border: 1px solid var(--cxs-border); } #comex-ai-reality-check .cxs-gap { display: grid; padding: 18px 20px; grid-template-columns: 36px 1fr; gap: 14px; background: var(--cxs-white); } #comex-ai-reality-check .cxs-gap-number { color: var(--cxs-blue); font-weight: 800; } #comex-ai-reality-check .cxs-gap strong { display: block; margin-bottom: 5px; color: var(--cxs-heading); font-size: 15px; } #comex-ai-reality-check .cxs-gap span:last-child { font-size: 14px; } #comex-ai-reality-check .cxs-report-gate { margin-top: 40px; padding: 38px; background: var(--cxs-heading); color: rgba(255, 255, 255, 0.82); } #comex-ai-reality-check .cxs-report-gate h3 { color: var(--cxs-white); font-size: 30px; } #comex-ai-reality-check .cxs-report-gate > p { max-width: 750px; } #wpforms-73202 { display: none; } body.elementor-editor-active #wpforms-73202, #comex-ai-reality-check #wpforms-73202.cxs-wpforms-active { display: block; } #comex-ai-reality-check .cxs-wpforms-slot { margin-top: 26px; } #comex-ai-reality-check .cxs-wpforms-loading { margin: 0; color: rgba(255, 255, 255, 0.82); font-size: 14px; } #comex-ai-reality-check #wpforms-73202 { margin: 0; } #comex-ai-reality-check #wpforms-73202 .wpforms-field { padding: 8px 0; } #comex-ai-reality-check #wpforms-73202 .wpforms-field-label, #comex-ai-reality-check #wpforms-73202 .wpforms-field-label-inline, #comex-ai-reality-check #wpforms-73202 .wpforms-field-description { color: var(--cxs-white); } #comex-ai-reality-check #wpforms-73202 .wpforms-field-sublabel { color: rgba(255, 255, 255, 0.82) !important; } #comex-ai-reality-check #wpforms-73202 .wpforms-field-label { margin-bottom: 7px; font-size: 14px; font-weight: 700; } #comex-ai-reality-check #wpforms-73202 input[type="text"], #comex-ai-reality-check #wpforms-73202 input[type="email"], #comex-ai-reality-check #wpforms-73202 input[type="tel"], #comex-ai-reality-check #wpforms-73202 select { width: 100%; max-width: none; min-height: 50px; padding: 11px 13px; border: 1px solid rgba(255, 255, 255, 0.28); border-radius: 0; color: var(--cxs-heading); background: var(--cxs-white); font-size: 16px; } #comex-ai-reality-check #wpforms-73202 input[type="checkbox"] { width: 18px; height: 18px; accent-color: var(--cxs-blue); } #comex-ai-reality-check #wpforms-73202 .wpforms-error, #comex-ai-reality-check #wpforms-73202 em.wpforms-error { color: #ffd37a; } #comex-ai-reality-check #wpforms-73202 .wpforms-submit-container { padding-top: 16px; } #comex-ai-reality-check #wpforms-73202 button[type="submit"], #comex-ai-reality-check #wpforms-73202 input[type="submit"] { min-height: 52px; padding: 14px 24px; border: 2px solid var(--cxs-blue); border-radius: 0; color: var(--cxs-white); background: var(--cxs-blue); font-size: 15px; font-weight: 800; line-height: 1.2; } #comex-ai-reality-check #wpforms-73202 button[type="submit"]:hover, #comex-ai-reality-check #wpforms-73202 input[type="submit"]:hover { border-color: var(--cxs-white); color: var(--cxs-heading); background: var(--cxs-white); } #comex-ai-reality-check .cxs-privacy { margin-top: 18px; margin-bottom: 0; color: rgba(255, 255, 255, 0.72); font-size: 13px; } #comex-ai-reality-check .cxs-form-actions { display: flex; margin-top: 24px; flex-wrap: wrap; gap: 14px; align-items: center; } #comex-ai-reality-check .cxs-form-status { min-height: 24px; margin: 14px 0 0; color: var(--cxs-white); font-size: 14px; font-weight: 600; } #comex-ai-reality-check .cxs-success { margin-top: 24px; padding: 22px; border-left: 4px solid var(--cxs-blue); color: var(--cxs-heading); background: var(--cxs-white); } #comex-ai-reality-check .cxs-success p { margin-bottom: 12px; } #comex-ai-reality-check .cxs-success a { font-weight: 800; } #comex-ai-reality-check .cxs-explain { background: var(--cxs-white); } #comex-ai-reality-check .cxs-explain-grid { display: grid; grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr); gap: 90px; } #comex-ai-reality-check .cxs-explain-copy p:last-child { margin-bottom: 0; } #comex-ai-reality-check .cxs-visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; overflow: hidden !important; clip: rect(1px, 1px, 1px, 1px) !important; white-space: nowrap !important; } @media (max-width: 980px) { #comex-ai-reality-check .cxs-hero-grid, #comex-ai-reality-check .cxs-explain-grid { grid-template-columns: 1fr; gap: 46px; } #comex-ai-reality-check .cxs-domain-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } #comex-ai-reality-check .cxs-results-header { grid-template-columns: 170px minmax(0, 1fr); gap: 30px; } #comex-ai-reality-check .cxs-total-score { width: 160px; height: 160px; } } @media (max-width: 680px) { #comex-ai-reality-check { font-size: 16px; } #comex-ai-reality-check .cxs-shell { width: min(100% - 32px, 1290px); } #comex-ai-reality-check .cxs-hero, #comex-ai-reality-check .cxs-intro, #comex-ai-reality-check .cxs-scan-section, #comex-ai-reality-check .cxs-explain { padding: 62px 0; } #comex-ai-reality-check h1 { font-size: 42px; } #comex-ai-reality-check h2 { font-size: 34px; } #comex-ai-reality-check .cxs-lead { font-size: 19px; } #comex-ai-reality-check .cxs-hero-panel, #comex-ai-reality-check .cxs-app, #comex-ai-reality-check .cxs-report-gate { padding: 28px 22px; } #comex-ai-reality-check .cxs-domain-grid, #comex-ai-reality-check .cxs-result-grid, #comex-ai-reality-check .cxs-start-list { grid-template-columns: 1fr; } #comex-ai-reality-check .cxs-domain-card { min-height: auto; } #comex-ai-reality-check .cxs-results-header { grid-template-columns: 1fr; text-align: center; } #comex-ai-reality-check .cxs-total-score { margin: 0 auto; } #comex-ai-reality-check .cxs-question-actions, #comex-ai-reality-check .cxs-form-actions, #comex-ai-reality-check .cxs-hero-actions { align-items: stretch; flex-direction: column; } #comex-ai-reality-check .cxs-btn { width: 100%; } #comex-ai-reality-check .cxs-question-topline { align-items: flex-start; flex-direction: column; gap: 5px; } } @media (prefers-reduced-motion: reduce) { #comex-ai-reality-check *, #comex-ai-reality-check *::before, #comex-ai-reality-check *::after { scroll-behavior: auto !important; transition: none !important; } } (() => { "use strict"; const root = document.getElementById("comex-ai-reality-check"); if (!root || root.dataset.cxsInitialized === "true") return; root.dataset.cxsInitialized = "true"; const app = root.querySelector("#cxs-app"); const CONFIG = { privacyUrl: "https://www.comex.eu/privacyverklaring-eu/", meetingUrl: "https://www.comex.eu/plan-een-meeting/", reportName: "Outcome AI readiness scan_Comex", wpforms: { formId: 73202, fields: { name: 1, email: 2, company: 3, phone: 4, role: 5, timeline: 6, priority: 7, marketingConsent: 8, total: 9, maturity: 10, data: 11, control: 12, people: 13, value: 14, infrastructure: 15, topGaps: 16, answers: 17 } } }; const domains = { data: { name: "Datafundament", short: "Data", recommendation: { low: "Breng eerst databronnen, kwaliteit en eigenaarschap in kaart. Start nog niet met brede AI-toegang.", medium: "De basis is deels aanwezig. Los ontbrekende metadata, dubbele gegevens en eigenaarschap gericht op.", high: "Het datafundament is sterk. Borg periodieke controles op kwaliteit, actualiteit en eigenaarschap." } }, control: { name: "Datacontrole en infrastructuur", short: "Controle", recommendation: { low: "Leg vast welke data de organisatie mag verlaten en waar prompts, data en resultaten worden verwerkt.", medium: "Vertaal algemeen beleid naar concrete AI-toepassingen en onderbouw per toepassing de keuze voor cloud, lokaal of hybride.", high: "De datagrenzen en infrastructuurkeuzes zijn goed onderbouwd. Blijf toegang, logging en leveranciersvoorwaarden controleren." } }, people: { name: "Mens en werk", short: "Mens", recommendation: { low: "Kies één werkproces, wijs een proceseigenaar aan en leg vast waar menselijke beoordeling verplicht blijft.", medium: "Betrek medewerkers actiever bij inrichting en evaluatie. Maak afspraken over verantwoord gebruik en shadow AI.", high: "De menselijke toepassing is goed ingericht. Meet gebruik, vertrouwen en effect op het dagelijkse werk." } }, value: { name: "Waarde en schaalbaarheid", short: "Waarde", recommendation: { low: "Bepaal eerst het gewenste resultaat, een nulmeting en de totale kosten voordat een nieuwe pilot start.", medium: "Maak succescriteria en kosten vollediger. Gebruik deze om te beslissen of opschaling verantwoord is.", high: "De waarde is meetbaar gemaakt. Gebruik de resultaten om gecontroleerd op te schalen naar meer gebruikers of processen." } } }; const questions = [ { id: "data_sources", domain: "data", question: "Weten jullie welke databronnen nodig zijn voor de beoogde AI-toepassing?", help: "Denk aan SharePoint, fileservers, CRM, ticketsystemen, kennisbanken en interne applicaties.", action: "Maak per toepassing een overzicht van de benodigde bronnen en de informatie die daaruit wordt gebruikt." }, { id: "data_quality", domain: "data", question: "Is de gebruikte data actueel, correct en vrij van dubbele of tegenstrijdige gegevens?", help: "AI neemt fouten, verouderde versies en tegenstrijdigheden uit de brondata over in de resultaten. Data hygiëne van brondata is dus uiterst belangrijk.", action: "Voer een gerichte kwaliteitscontrole uit op actualiteit, dubbele gegevens en tegenstrijdige versies." }, { id: "data_metadata", domain: "data", question: "Is de data voorzien van duidelijke metadata, classificaties en bewaartermijnen?", help: "Goede metadata helpt AI om context, gevoeligheid, geldigheid en herkomst van informatie te begrijpen.", action: "Bepaal minimale metadata, classificaties en bewaartermijnen voor de bronnen die AI gaat gebruiken." }, { id: "data_owner", domain: "data", question: "Is per databron duidelijk wie verantwoordelijk is voor kwaliteit, toegang en onderhoud?", help: "Zonder eigenaar blijven fouten en verouderde informatie vaak bestaan.", action: "Wijs voor iedere relevante databron een eigenaar aan met duidelijke verantwoordelijkheden." }, { id: "control_boundary", domain: "control", critical: true, question: "Is per type informatie vastgelegd welke data de organisatie wel en niet mag verlaten?", help: "Denk aan persoonsgegevens, klantinformatie, intellectueel eigendom, interne documenten, prompts en AI-resultaten.", action: "Maak een praktisch databeleid waarin per categorie staat of externe verwerking is toegestaan." }, { id: "control_location", domain: "control", critical: true, question: "Weten jullie waar data, prompts en AI-resultaten worden verwerkt, opgeslagen en gelogd?", help: "Neem ook tijdelijke opslag, logging, back-ups en verwerking door onderaannemers mee.", action: "Breng de volledige verwerkingsketen in kaart, inclusief opslag, logging, back-ups en derde partijen." }, { id: "control_choice", domain: "control", question: "Is per AI-toepassing bewust gekozen voor cloud AI, lokale AI of een hybride aanpak?", help: "De juiste keuze hangt af van gevoeligheid, controle, kosten, prestaties en afhankelijkheid van leveranciers.", action: "Leg per toepassing vast waarom cloud, lokaal of hybride het beste aansluit op de data en het gebruik." }, { id: "control_access", domain: "control", question: "Zijn toegang, logging en bescherming van gevoelige informatie aantoonbaar geregeld?", help: "Gebruikers mogen alleen data en resultaten zien waarvoor zij geautoriseerd zijn.", action: "Controleer rollen, rechten, logging en periodieke toegangsreviews voor alle AI-gerelateerde bronnen." }, { id: "people_process", domain: "people", question: "Is er één concreet werkproces gekozen waarin AI medewerkers ondersteunt?", help: "Een afgebakend proces maakt het eenvoudiger om gebruik, risico en resultaat te beoordelen.", action: "Kies één proces met voldoende volume, een herkenbaar probleem en een duidelijke proceseigenaar." }, { id: "people_accountability", domain: "people", critical: true, question: "Is duidelijk welke beslissingen AI ondersteunt en welke verantwoordelijkheid bij mensen blijft?", help: "Leg vast waar controle, goedkeuring en professionele beoordeling verplicht blijven.", action: "Beschrijf per processtap wat AI doet, wat een medewerker controleert en wie eindverantwoordelijk is." }, { id: "people_involvement", domain: "people", question: "Zijn medewerkers betrokken bij de keuze, inrichting en beoordeling van de toepassing?", help: "Adoptie groeit wanneer de toepassing een herkenbaar probleem oplost en aansluit op de bestaande workflow.", action: "Betrek eindgebruikers bij ontwerp, testen en evaluatie en verwerk hun feedback voor opschaling." }, { id: "people_shadow", domain: "people", question: "Zijn afspraken gemaakt over het gebruik van openbare AI-tools en het voorkomen van shadow AI?", help: "Shadow AI is het gebruik van niet-goedgekeurde AI-tools buiten het zicht en beheer van de IT-afdeling.", action: "Maak een korte en praktische AI-gebruiksrichtlijn met toegestane tools, data en escalatiepunten." }, { id: "value_goal", domain: "value", question: "Is vooraf bepaald welk resultaat AI moet verbeteren?", help: "Denk aan tijdwinst, kwaliteit, foutreductie, doorlooptijd, klanttevredenheid of lagere kosten.", action: "Kies één primaire KPI en maximaal twee ondersteunende indicatoren voor de eerste toepassing." }, { id: "value_baseline", domain: "value", question: "Is een nulmeting beschikbaar waarmee het resultaat kan worden vergeleken?", help: "Een nulmeting kan bijvoorbeeld vastleggen hoe een proces op dit moment verloopt, zodat je later kunt meten wat AI werkelijk oplevert.", action: "Meet de huidige tijd, kosten, fouten of kwaliteit voordat de AI-toepassing wordt ingevoerd." }, { id: "value_cost", domain: "value", question: "Zijn de totale kosten duidelijk, inclusief tokens, integraties, beheer, opslag en infrastructuur?", help: "Neem ook kosten mee die ontstaan wanneer meer medewerkers of agents de oplossing gebruiken.", action: "Maak een kostenmodel voor huidig gebruik en groei, inclusief variabele tokenkosten en intern beheer." }, { id: "value_scale", domain: "value", question: "Is er een plan om een werkende pilot gecontroleerd op te schalen?", help: "Leg vast wie beslist, welke resultaten nodig zijn en welke technische en organisatorische stappen volgen.", action: "Maak vooraf een besluitmoment met drempelwaarden voor resultaat, risico, kosten en adoptie." } ]; const answerOptions = [ { score: 2, label: "Ja, dit is duidelijk en vastgelegd" }, { score: 1, label: "Deels, maar nog niet volledig" }, { score: 0, label: "Nee of niet bekend" } ]; const maturityLevels = [ { min: 0, max: 10, title: "Het fundament ontbreekt", description: "Jullie experimenteren met AI zonder voldoende grip op data, controle, menselijk gebruik of resultaat. Begin bij de basis voordat je breder opschaalt." }, { min: 11, max: 18, title: "Kwetsbare pilotfase", description: "Er zijn ideeën en toepassingen, maar belangrijke onderdelen zijn nog niet structureel ingericht. Opschalen brengt nu onnodige risico’s en kosten mee." }, { min: 19, max: 25, title: "Goede basis met gerichte verbeterpunten", description: "Jullie hebben een bruikbaar fundament. Enkele hiaten rond data, controle, medewerkers of kosten beperken nog de schaalbaarheid." }, { min: 26, max: 32, title: "Klaar voor gecontroleerde toepassing", description: "Jullie kunnen gericht verder met AI. De aandacht verschuift naar implementatie, adoptie, meetbare resultaten en gecontroleerde groei." } ]; const state = { current: 0, answers: {}, view: "intro", result: null, pendingPayload: null, lastPayload: null, reportDownloaded: false }; function escapeHtml(value) { return String(value) .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """) .replace(/'/g, "'"); } function track(eventName, detail = {}) { if (Array.isArray(window.dataLayer)) { window.dataLayer.push({ event: eventName, ...detail }); } root.dispatchEvent(new CustomEvent(`comex:${eventName}`, { detail })); } function focusView() { window.requestAnimationFrame(() => { const target = app.querySelector("h2, h3, button"); if (target) { target.setAttribute("tabindex", "-1"); target.focus({ preventScroll: true }); } }); } function renderIntro() { state.view = "intro"; app.innerHTML = `

Start de AI Reality Check

Hoe stevig is jullie AI-fundament?

Beantwoord zestien vragen. Kies steeds het antwoord dat de huidige situatie het beste beschrijft. De scan duurt ongeveer vier minuten.

  • Praktische vragen
  • Direct een persoonlijke score
  • Ontvang een uitgebreide analyse
`; } function renderQuestion() { state.view = "question"; const item = questions[state.current]; const selected = state.answers[item.id]; const progress = Math.round(((state.current + 1) / questions.length) * 100); app.innerHTML = `
${escapeHtml(domains[item.domain].name)} Vraag ${state.current + 1} van ${questions.length}

${escapeHtml(item.question)}

${escapeHtml(item.help)}

${answerOptions.map(option => ` `).join("")}
`; } function getBand(score) { if (score <= 2) return "low"; if (score { const score = Number(state.answers[question.id] ?? 0); total += score; domainScores[question.domain] += score; }); let levelIndex = maturityLevels.findIndex(level => total >= level.min && total <= level.max); if (levelIndex question.critical && Number(state.answers[question.id]) === 0); const capped = criticalGaps.length > 0 && levelIndex > 1; if (capped) levelIndex = 1; const topGaps = [...questions] .sort((a, b) => { const scoreDiff = Number(state.answers[a.id]) - Number(state.answers[b.id]); if (scoreDiff !== 0) return scoreDiff; return Number(Boolean(b.critical)) - Number(Boolean(a.critical)); }) .slice(0, 3); return { total, domainScores, level: maturityLevels[levelIndex], levelIndex, criticalGaps, capped, topGaps, infrastructure: getInfrastructureAdvice() }; } function getInfrastructureAdvice() { const boundary = Number(state.answers.control_boundary ?? 0); const location = Number(state.answers.control_location ?? 0); const choice = Number(state.answers.control_choice ?? 0); const access = Number(state.answers.control_access ?? 0); if (boundary === 0 || location === 0) { return { title: "Eerst datagrenzen vastleggen", text: "Jullie weten nog onvoldoende welke data de organisatie mag verlaten of waar AI-verwerking plaatsvindt. Stel dit vast voordat een cloud- of lokale architectuur wordt gekozen.", route: "Onderzoek daarna per toepassing of een lokale of hybride route nodig is." }; } if (choice <= 1 || access { const score = result.domainScores[key]; const band = getBand(score); return `
${escapeHtml(meta.name)} ${score} van 8

${escapeHtml(meta.recommendation[band])}

`; }).join(""); const gapCards = result.topGaps.map((question, index) => `
0${index + 1} ${escapeHtml(question.question)} ${escapeHtml(question.action)}
`).join(""); app.innerHTML = `
${result.total} van 32 punten

Jouw volwassenheidsniveau

${escapeHtml(result.level.title)}

${escapeHtml(result.level.description)}

${result.capped ? `
De volwassenheidsscore is begrensd omdat één of meer kritieke vragen over datagrenzen, verwerkingslocatie of menselijke verantwoordelijkheid met nee zijn beantwoord.
` : ""}
${domainCards}

Jouw drie eerste aandachtspunten

${gapCards}

Download jouw uitgebreide analyse

Ontvang een persoonlijk rapport met alle domeinscores, kritieke risico’s, een advies over cloud of lokale AI en een actieplan voor dertig, zestig en negentig dagen.

Het formulier wordt geladen…

We gebruiken je gegevens om het rapport beschikbaar te stellen en contact op te nemen over de uitslag. Lees de privacyverklaring.

`; window.setTimeout(() => mountWpforms(), 0); track("ai_scan_completed", { total_score: result.total, maturity_level: result.level.title, data_score: result.domainScores.data, control_score: result.domainScores.control, people_score: result.domainScores.people, value_score: result.domainScores.value }); } function getUtms() { const params = new URLSearchParams(window.location.search); const keys = ["utm_source", "utm_medium", "utm_campaign", "utm_content", "utm_term"]; return keys.reduce((output, key) => { output[key] = params.get(key) || ""; return output; }, {}); } function answerLabel(score) { return answerOptions.find(option => option.score === Number(score))?.label || "Niet beantwoord"; } function getWpformsFieldElements(form, fieldId) { return Array.from(form.querySelectorAll(`[name^="wpforms[fields][${fieldId}]"]`)); } function getWpformsFieldValue(form, fieldId) { const values = []; getWpformsFieldElements(form, fieldId).forEach(element => { if ((element.type === "checkbox" || element.type === "radio") && !element.checked) return; if (element instanceof HTMLSelectElement && element.multiple) { Array.from(element.selectedOptions).forEach(option => { if (option.value.trim()) values.push(option.value.trim()); }); return; } const value = String(element.value || "").trim(); if (value) values.push(value); }); return values.join(" ").trim(); } function setWpformsFieldValue(form, fieldId, value) { const field = form.querySelector(`#wpforms-${CONFIG.wpforms.formId}-field_${fieldId}`) || getWpformsFieldElements(form, fieldId)[0]; if (!field) return false; field.value = String(value ?? ""); field.dispatchEvent(new Event("input", { bubbles: true })); field.dispatchEvent(new Event("change", { bubbles: true })); return true; } function formatTopGaps(result) { return result.topGaps.map((question, index) => ( `${index + 1}. ${question.question}\nAanbevolen actie: ${question.action}` )).join("\n\n"); } function formatAllAnswers() { return questions.map((question, index) => { const score = Number(state.answers[question.id] ?? 0); return `${index + 1}. [${domains[question.domain].name}] ${question.question}\nAntwoord: ${answerLabel(score)} (${score}/2)\nAanbevolen actie: ${question.action}`; }).join("\n\n"); } function populateWpformsHiddenFields(form) { const result = state.result || calculateResult(); const fields = CONFIG.wpforms.fields; const infrastructure = [ result.infrastructure.title, result.infrastructure.text, result.infrastructure.route ].join("\n"); setWpformsFieldValue(form, fields.total, result.total); setWpformsFieldValue(form, fields.maturity, result.level.title); setWpformsFieldValue(form, fields.data, result.domainScores.data); setWpformsFieldValue(form, fields.control, result.domainScores.control); setWpformsFieldValue(form, fields.people, result.domainScores.people); setWpformsFieldValue(form, fields.value, result.domainScores.value); setWpformsFieldValue(form, fields.infrastructure, infrastructure); setWpformsFieldValue(form, fields.topGaps, formatTopGaps(result)); setWpformsFieldValue(form, fields.answers, formatAllAnswers()); } function buildPayload(form) { const result = state.result || calculateResult(); const fields = CONFIG.wpforms.fields; return { source: "Comex AI Reality Check", submittedAt: new Date().toISOString(), pageUrl: window.location.href, contact: { name: getWpformsFieldValue(form, fields.name), email: getWpformsFieldValue(form, fields.email), company: getWpformsFieldValue(form, fields.company), phone: getWpformsFieldValue(form, fields.phone), role: getWpformsFieldValue(form, fields.role), timeline: getWpformsFieldValue(form, fields.timeline), priority: getWpformsFieldValue(form, fields.priority), marketingConsent: Boolean(getWpformsFieldValue(form, fields.marketingConsent)) }, score: { total: result.total, maximum: 32, maturityLevel: result.level.title, maturityDescription: result.level.description, cappedByCriticalGap: result.capped, domainScores: result.domainScores, infrastructureAdvice: result.infrastructure }, answers: questions.map(question => ({ id: question.id, domain: domains[question.domain].name, question: question.question, score: Number(state.answers[question.id] ?? 0), answer: answerLabel(state.answers[question.id]), critical: Boolean(question.critical), recommendedAction: question.action })), utm: getUtms() }; } function bindWpformsSuccessEvent(form, attempt = 0) { if (window.jQuery) { window.jQuery(form) .off("wpformsAjaxSubmitSuccess.cxsAiRealityCheck") .on("wpformsAjaxSubmitSuccess.cxsAiRealityCheck", () => handleWpformsSuccess(form)); return; } if (attempt bindWpformsSuccessEvent(form, attempt + 1), 250); } } function bindWpforms(form) { if (form.dataset.cxsBound === "true") return; form.dataset.cxsBound = "true"; form.addEventListener("submit", () => { populateWpformsHiddenFields(form); state.pendingPayload = buildPayload(form); const status = app.querySelector("#cxs-form-status"); if (status) status.textContent = "Je gegevens en scanresultaten worden verwerkt."; }, true); bindWpformsSuccessEvent(form); } function mountWpforms(attempt = 0) { if (state.view !== "results") return; const slot = app.querySelector("#cxs-wpforms-slot"); const container = document.getElementById(`wpforms-${CONFIG.wpforms.formId}`); const form = document.getElementById(`wpforms-form-${CONFIG.wpforms.formId}`); if (!slot) return; if (!container || !form) { if (attempt mountWpforms(attempt + 1), 250); return; } slot.innerHTML = `

Het formulier kon niet worden geladen. Controleer in Elementor of WPForms-formulier ${CONFIG.wpforms.formId} direct onder deze HTML-widget staat.

`; return; } slot.replaceChildren(container); container.classList.add("cxs-wpforms-active"); populateWpformsHiddenFields(form); bindWpforms(form); const submit = form.querySelector('button[type="submit"], input[type="submit"]'); if (submit instanceof HTMLInputElement) { submit.value = "Download mijn analyse"; } else if (submit) { submit.textContent = "Download mijn analyse"; } } function parkWpforms() { const container = document.getElementById(`wpforms-${CONFIG.wpforms.formId}`); const parking = root.querySelector("#cxs-wpforms-parking"); if (!container || !parking || !root.contains(container)) return; container.classList.remove("cxs-wpforms-active"); parking.appendChild(container); } function handleWpformsSuccess(form) { if (state.reportDownloaded) return; const status = app.querySelector("#cxs-form-status"); try { const payload = state.pendingPayload || buildPayload(form); const format = downloadPdfReport(payload); state.reportDownloaded = true; state.lastPayload = payload; state.pendingPayload = null; track("ai_scan_report_downloaded", { total_score: payload.score.total, maturity_level: payload.score.maturityLevel, report_format: format, demo_mode: false }); if (status) { status.textContent = "Bedankt. Het rapport is gedownload en je aanvraag is ontvangen."; } const success = app.querySelector("#cxs-success"); if (success) { success.innerHTML = `

Wil je de uitkomst bespreken?

Plan een gesprek van 30 minuten over jullie data, AI-infrastructuur en eerste toepassing.

Plan een gesprek met Comex >
`; } } catch (error) { if (status) { status.textContent = "De inzending is ontvangen, maar het rapport kon niet automatisch worden gedownload. Vernieuw de pagina en probeer het opnieuw."; } console.error("Comex AI Reality Check rapportfout", error); } } function addWrappedText(pdf, text, x, y, width, options = {}) { const { size = 10, color = [58, 79, 102], style = "normal", lineHeight = 5.2, before = 0, after = 3 } = options; let cursor = y + before; pdf.setFont("helvetica", style); pdf.setFontSize(size); pdf.setTextColor(...color); const lines = pdf.splitTextToSize(String(text), width); const needed = lines.length * lineHeight + after; if (cursor + needed > 278) { pdf.addPage(); cursor = 22; } pdf.text(lines, x, cursor); return cursor + lines.length * lineHeight + after; } function downloadPdfReport(payload) { const jsPDF = window.jspdf && window.jspdf.jsPDF; if (!jsPDF) { downloadHtmlReport(payload); return "html"; } const pdf = new jsPDF({ unit: "mm", format: "a4", compress: true }); const blue = [0, 155, 225]; const heading = [25, 42, 61]; const text = [58, 79, 102]; const light = [242, 245, 247]; const border = [225, 232, 237]; const margin = 18; const width = 174; let y = 22; const pageHeader = (label) => { pdf.setFillColor(...blue); pdf.rect(0, 0, 7, 297, "F"); pdf.setFont("helvetica", "bold"); pdf.setFontSize(8); pdf.setTextColor(...blue); pdf.text("COMEX AI REALITY CHECK", margin, 13); if (label) { pdf.setTextColor(...text); pdf.text(label.toUpperCase(), 192, 13, { align: "right" }); } }; const newPage = (label) => { pdf.addPage(); pageHeader(label); y = 25; }; const sectionTitle = (titleText) => { if (y > 260) newPage("Analyse"); pdf.setFont("helvetica", "bold"); pdf.setFontSize(17); pdf.setTextColor(...heading); pdf.text(titleText, margin, y); y += 9; }; pageHeader("Persoonlijke analyse"); y = 35; pdf.setFont("helvetica", "bold"); pdf.setFontSize(27); pdf.setTextColor(...blue); const titleLines = pdf.splitTextToSize("Is jouw organisatie klaar voor AI?", 150); pdf.text(titleLines, margin, y); y += titleLines.length * 12 + 7; y = addWrappedText(pdf, `Persoonlijke analyse voor ${payload.contact.company}`, margin, y, width, { size: 14, color: heading, style: "bold", lineHeight: 7, after: 10 }); pdf.setFillColor(...light); pdf.rect(margin, y, width, 45, "F"); pdf.setFont("helvetica", "bold"); pdf.setFontSize(34); pdf.setTextColor(...blue); pdf.text(String(payload.score.total), margin + 10, y + 22); pdf.setFontSize(11); pdf.setTextColor(...text); pdf.text("van 32 punten", margin + 10, y + 31); pdf.setFontSize(16); pdf.setTextColor(...heading); pdf.text(payload.score.maturityLevel, margin + 52, y + 17); const introLines = pdf.splitTextToSize(payload.score.maturityDescription, 108); pdf.setFont("helvetica", "normal"); pdf.setFontSize(9.5); pdf.setTextColor(...text); pdf.text(introLines, margin + 52, y + 25); y += 58; sectionTitle("Managementsamenvatting"); y = addWrappedText(pdf, payload.score.infrastructureAdvice.text, margin, y, width, { size: 10.5, lineHeight: 5.7 }); y = addWrappedText(pdf, payload.score.infrastructureAdvice.route, margin, y, width, { size: 10.5, style: "bold", lineHeight: 5.7 }); if (payload.score.cappedByCriticalGap) { y = addWrappedText(pdf, "Let op. De volwassenheid is begrensd door een kritisch risico rond datagrenzen, verwerkingslocatie of menselijke verantwoordelijkheid.", margin, y, width, { size: 9.5, color: [197, 122, 0], style: "bold", before: 3, after: 5 }); } newPage("Domeinscores"); sectionTitle("Score per domein"); Object.entries(domains).forEach(([key, meta]) => { const score = payload.score.domainScores[key]; const band = getBand(score); if (y > 245) newPage("Domeinscores"); pdf.setFont("helvetica", "bold"); pdf.setFontSize(12); pdf.setTextColor(...heading); pdf.text(meta.name, margin, y); pdf.setTextColor(...blue); pdf.text(`${score} van 8`, 192, y, { align: "right" }); y += 5; pdf.setFillColor(...border); pdf.rect(margin, y, width, 4, "F"); pdf.setFillColor(...blue); pdf.rect(margin, y, width * (score / 8), 4, "F"); y += 9; y = addWrappedText(pdf, meta.recommendation[band], margin, y, width, { size: 9.4, lineHeight: 5, after: 8 }); }); newPage("Prioriteiten"); sectionTitle("De drie eerste aandachtspunten"); state.result.topGaps.forEach((question, index) => { if (y > 250) newPage("Prioriteiten"); pdf.setFillColor(...light); pdf.rect(margin, y - 5, width, 9, "F"); pdf.setFont("helvetica", "bold"); pdf.setFontSize(10); pdf.setTextColor(...blue); pdf.text(`0${index + 1}`, margin + 3, y + 1); y += 8; y = addWrappedText(pdf, question.question, margin, y, width, { size: 11, color: heading, style: "bold", lineHeight: 5.8 }); y = addWrappedText(pdf, question.action, margin, y, width, { size: 9.6, lineHeight: 5.2, after: 9 }); }); sectionTitle("Actieplan voor 30, 60 en 90 dagen"); const plan = [ ["Eerste 30 dagen", "Kies één werkproces. Breng de benodigde databronnen en eigenaars in kaart. Leg vast welke data de organisatie wel en niet mag verlaten."], ["Binnen 60 dagen", "Controleer data, toegangsrechten en verwerkingslocaties. Bepaal menselijke verantwoordelijkheden. Maak een nulmeting en een volledig kostenmodel."], ["Binnen 90 dagen", "Start een gecontroleerde toepassing met een beperkte gebruikersgroep. Meet gebruik, kwaliteit, tijdwinst en kosten. Beslis daarna over opschaling."] ]; plan.forEach(([label, planText]) => { y = addWrappedText(pdf, label, margin, y, width, { size: 10.5, color: blue, style: "bold", lineHeight: 5.5, after: 1 }); y = addWrappedText(pdf, planText, margin, y, width, { size: 9.5, lineHeight: 5.2, after: 6 }); }); newPage("Cloud of lokaal"); sectionTitle("Cloud AI, lokale AI of hybride"); y = addWrappedText(pdf, payload.score.infrastructureAdvice.title, margin, y, width, { size: 14, color: blue, style: "bold", lineHeight: 7 }); y = addWrappedText(pdf, payload.score.infrastructureAdvice.text, margin, y, width, { size: 10, lineHeight: 5.5 }); y = addWrappedText(pdf, payload.score.infrastructureAdvice.route, margin, y, width, { size: 10, style: "bold", lineHeight: 5.5, after: 10 }); const routes = [ ["Cloud AI", "Past bij openbare of weinig gevoelige data, snel experimenteren, wisselend gebruik en toepassingen waarvoor standaardmodellen voldoende zijn."], ["Lokale AI", "Past bij gevoelige bedrijfsinformatie, strikte toegangscontrole, intensief gebruik en situaties waarin kosten en verwerking voorspelbaar moeten blijven."], ["Hybride AI", "Past wanneer algemene taken in de cloud kunnen plaatsvinden, terwijl gevoelige data en bedrijfsspecifieke kennis lokaal blijven."] ]; routes.forEach(([label, routeText]) => { pdf.setDrawColor(...border); pdf.setFillColor(...light); pdf.rect(margin, y - 4, width, 10, "F"); y = addWrappedText(pdf, label, margin + 3, y + 2, width - 6, { size: 10.5, color: heading, style: "bold", after: 3 }); y = addWrappedText(pdf, routeText, margin, y, width, { size: 9.5, lineHeight: 5.2, after: 8 }); }); newPage("Antwoorden"); sectionTitle("Overzicht van alle antwoorden"); payload.answers.forEach((answer, index) => { if (y > 258) newPage("Antwoorden"); pdf.setFont("helvetica", "bold"); pdf.setFontSize(8.5); pdf.setTextColor(...blue); pdf.text(`${index + 1}. ${answer.domain}`, margin, y); y += 5; y = addWrappedText(pdf, answer.question, margin, y, width, { size: 9.3, color: heading, style: "bold", lineHeight: 5, after: 1 }); y = addWrappedText(pdf, `Antwoord: ${answer.answer}`, margin, y, width, { size: 9, lineHeight: 4.8, after: 5 }); }); newPage("Vervolg"); sectionTitle("Bespreek de uitslag met Comex"); y = addWrappedText(pdf, "De AI Reality Check geeft richting, maar iedere infrastructuur en toepassing vraagt om een eigen afweging. In een gesprek van 30 minuten lopen we de scores, datagrenzen en gewenste toepassing samen door.", margin, y, width, { size: 11, lineHeight: 6, after: 10 }); y = addWrappedText(pdf, "Plan een Data en AI Reality Check via comex.eu/plan-een-meeting/", margin, y, width, { size: 12, color: blue, style: "bold", lineHeight: 6 }); const pageCount = pdf.getNumberOfPages(); for (let page = 1; page { const score = payload.score.domainScores[key]; const band = getBand(score); return `${escapeHtml(meta.name)}${score} van 8${escapeHtml(meta.recommendation[band])}`; }).join(""); const answerRows = payload.answers.map((answer, index) => ` ${index + 1} ${escapeHtml(answer.question)} ${escapeHtml(answer.answer)} `).join(""); /* * Bouw afsluitende documenttags pas tijdens uitvoering op. FlyingPress * scant de ruwe Elementor-HTML voordat JavaScript draait. Een letterlijke * afsluitende style-, head- of bodytag in deze fallback kan daardoor als * paginagrens worden gezien, waarna FlyingPress midden in dit script code * injecteert. Zonder die tokens in de bron werkt de scan zowel in de * publieke cache als in de ingelogde preview. */ const closeDocumentTag = tagName => ``; const html = [ "", '', 'Comex AI Reality Check', "", "body{font-family:Arial,sans-serif;color:#3a4f66;line-height:1.5;max-width:1000px;margin:40px auto;padding:0 24px}", "h1,h2{color:#192a3d}h1{color:#009be1;font-size:42px}.score{font-size:54px;font-weight:700;color:#009be1}", "table{width:100%;border-collapse:collapse;margin:22px 0}th,td{padding:12px;border:1px solid #e1e8ed;text-align:left;vertical-align:top}", "th{background:#192a3d;color:white}.note{padding:20px;background:#f2f5f7}.print{margin-bottom:25px;padding:12px 20px;background:#009be1;color:white;border:0}", "@media print{.print{display:none}}", closeDocumentTag("style"), closeDocumentTag("head"), "", '', `

Comex AI Reality Check

Persoonlijke analyse voor ${escapeHtml(payload.contact.company)}

`, `

${payload.score.total} van 32

${escapeHtml(payload.score.maturityLevel)}

`, `

${escapeHtml(payload.score.maturityDescription)}

`, `
${escapeHtml(payload.score.infrastructureAdvice.title)}

${escapeHtml(payload.score.infrastructureAdvice.text)}

${escapeHtml(payload.score.infrastructureAdvice.route)}

`, `

Domeinscores

${domainRows}
DomeinScoreAdvies
`, `

Antwoorden

${answerRows}
NrVraagAntwoord
`, `

Volgende stap

Plan een gesprek via ${CONFIG.meetingUrl}.

`, closeDocumentTag("body"), closeDocumentTag("html") ].join(""); const blob = new Blob([html], { type: "text/html;charset=utf-8" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = `${CONFIG.reportName}.html`; document.body.appendChild(link); link.click(); link.remove(); window.setTimeout(() => URL.revokeObjectURL(url), 1000); } root.addEventListener("click", event => { const actionElement = event.target.closest("[data-cxs-action]"); if (!actionElement) return; const action = actionElement.dataset.cxsAction; if (action === "start-scroll") { root.querySelector("#cxs-scan").scrollIntoView({ behavior: "smooth", block: "start" }); window.setTimeout(() => { if (state.view === "intro") { state.current = 0; state.answers = {}; renderQuestion(); track("ai_scan_started"); focusView(); } }, 450); } if (action === "start") { state.current = 0; state.answers = {}; renderQuestion(); track("ai_scan_started"); focusView(); } if (action === "answer") { const question = questions[state.current]; state.answers[question.id] = Number(actionElement.dataset.score); renderQuestion(); track("ai_scan_question_answered", { question_id: question.id, domain: question.domain, score: state.answers[question.id] }); } if (action === "back" && state.current > 0) { state.current -= 1; renderQuestion(); focusView(); } if (action === "next") { const question = questions[state.current]; if (typeof state.answers[question.id] !== "number") return; if (state.current < questions.length - 1) { state.current += 1; renderQuestion(); focusView(); } else { renderResults(); root.querySelector("#cxs-scan").scrollIntoView({ behavior: "smooth", block: "start" }); focusView(); } } if (action === "restart") { if (state.reportDownloaded) { window.location.reload(); return; } parkWpforms(); state.current = 0; state.answers = {}; state.result = null; state.pendingPayload = null; renderIntro(); root.querySelector("#cxs-scan").scrollIntoView({ behavior: "smooth", block: "start" }); focusView(); } if (action === "redownload" && state.lastPayload) { downloadPdfReport(state.lastPayload); } }); renderIntro(); })();
Name
Marketing consent

Book a free consultation

In a free 30-minute conversation, we will discuss your score and the three most important points of attention. You will receive initial advice on the data foundation, responsible AI use, and the choice between cloud AI, local AI, or a hybrid approach.

No obligation. 30 minutes. Focused on your situation.

Subscribe for tips and info

We regularly write blogs on current topics from the world of digital storage technology. Sign up here to be notified about new blogs.