<!-- OneTrust Cookies Consent Notice start for lightyear.cloud --> <script src="https://cdn-ukwest.onetrust.com/scripttemplates/otSDKStub.js" type="text/javascript" charset="UTF-8" data-domain-script="0197a69a-8630-7f3b-bd4c-caeb8c6dff1c" ></script> <script type="text/javascript"> (function () { // --- Script version 2.0 (21/05/2026) --- var RULES = [ { test: /\/\/(?:www\.)?youtube(?:-nocookie)?\.com\//i, groups: ["C0003"] }, { test: /\/\/youtubei\.googleapis\.com\//i, groups: ["C0003"] }, { test: /\/\/[is]\.ytimg\.com\//i, groups: ["C0003"] }, { test: /\/\/yt3\.ggpht\.com\//i, groups: ["C0003"] }, { test: /\/\/(?:player\.)?vimeo\.com\//i, groups: ["C0003"] }, { test: /\/\/[fi]\.vimeocdn\.com\//i, groups: ["C0003"] }, { test: /\/\/munchkin\.marketo\.net\//i, groups: ["C0004"] }, { test: /\/\/(?:cdn\.)?biz(?:ible|ibly)\.com\//i, groups: ["C0004"] }, { test: /\/\/adobedc\.net\//i, groups: ["C0004"] }, // OptinMonster - a, api and cdn subdomains { test: /\/\/(?:a|api|cdn)\.omappapi\.com\//i, groups: ["C0004"] }, { test: /\/\/tracker\.gaconnector\.com\//i, groups: ["C0004"] }, { test: /\/\/static\.hotjar\.com\//i, groups: ["C0004"] }, { test: /\/\/js\.hs-scripts\.com\//i, groups: ["C0004"] }, { test: /\/scripts\/custom-gclid\.js\//i, groups: ["C0004"] }, { test: /\/\/js\.hub(?:spot|sforms\.net|scta\.net|sadspixel\.net|s-analytics\.net|s-banner\.com)/i, groups: ["C0004"] }, { test: /\/\/(?:bat\.|c\.)?bing\.com(?:\/api)?\//i, groups: ["C0004"] }, { test: /\/\/clarity\.ms\//i, groups: ["C0004"] }, { test: /\/\/(?:www\.)?msn\.com(?:\/api)?\//i, groups: ["C0004"] }, { test: /\/\/(?:snap\.|px\.ads\.|www\.)?linkedin\.com(?:\/px)?\//i, groups: ["C0005"] }, { test: /\/\/platform\.linkedin\.com\//i, groups: ["C0005"] }, ]; var IFRAME_RULES = [ { test: /youtube(?:-nocookie)?\.com|youtu\.be/i, groups: ["C0003"] }, { test: /(?:player\.)?vimeo\.com/i, groups: ["C0003"] }, ]; var VIDEO_RULES = [ { test: /youtube(?:-nocookie)?\.com|youtu\.be/i, groups: ["C0003"] }, { test: /vimeo(?:cdn)?\.com|player\.vimeo\.com/i, groups: ["C0003"] }, { test: /(?:fast\.)?wistia\.com/i, groups: ["C0003"] }, { test: /(?:players\.)?brightcove\.com/i, groups: ["C0003"] }, { test: /vidyard\.com/i, groups: ["C0003"] }, { test: /jwp(?:layer|cdn)\.com/i, groups: ["C0003"] }, { test: /cloudinary\.com/i, groups: ["C0003"] }, { test: /streamable\.com/i, groups: ["C0003"] }, ]; var cookiePatterns = { C0003: [ /^YSC|^VISITOR_(?:INFO|PRIVACY)|^PREF|^GPS|^CONSENT|_Secure-ROLLOUT|^LOGIN_INFO|^SIDCC|^[HS]SID|^[AS]?APISID|^DEVICE_INFO|^CONSISTENCY|^(?:use_hitbox|remote_sid)/, /^vuid|^player|^_(?:abexps|gcl|calendly)|^continuous_play|^has_logged_in/, /calendly/, ], C0004: [ /gaconnector|_biz|_BUID|^_biz_(?:uid|nA|pendingA|sid|flagsA)|^m(?:kto|kt)_|^_mkto_trk|^__hs[ctscr]?|hubspot|_uet|MUID|_cl[ck]k|MSN/, // OptinMonster cookies /^_omappv[ps]|^om-|^omSeen-|^omSuccess-|^omFolders(?:Optin|Closed)|^omLast(?:Seen)|^omVisits/, ], C0005: [ /^li_|^lidc|^b[sc]cookie|^lang|^(?:Analytics)?SyncHistory|^UserMatchHistory/, ], }; function matchRule(src, rules) { rules = rules || RULES; for (var i = 0; i < rules.length; i++) if (rules[i].test.test(src)) return rules[i]; return null; } function hasConsent(req) { var g = (window.OneTrustActiveGroups || window.OnetrustActiveGroups || "").split(","); return req.every(function (id) { return g.indexOf(id) !== -1; }); } function isMunchkinNode(node) { return /\/\/munchkin\.marketo\.net\//i.test(node.getAttribute("data-gated-src") || node.getAttribute("src") || ""); } // --- Restore a blocked script element --- function restoreScript(node) { var replayQ = null; if (isMunchkinNode(node) && window.Munchkin && window.Munchkin.__otStub) { replayQ = window.Munchkin.__q ? window.Munchkin.__q.slice() : null; try { delete window.Munchkin; } catch (e) { window.Munchkin = undefined; } } var s = document.createElement("script"); ["src","async","defer","noModule","crossorigin","referrerpolicy","integrity","nonce"].forEach(function (a) { var v = node.getAttribute(a); if (v !== null) s.setAttribute(a, v); }); var t = node.getAttribute("type"); s.type = t && t !== "text/plain" ? t : "text/javascript"; if (node.onload) s.onload = node.onload; if (node.onerror) s.onerror = node.onerror; if (node.onreadystatechange) s.onreadystatechange = node.onreadystatechange; if (node.text && !s.src) s.text = node.text; if (isMunchkinNode(node) && replayQ) { s.addEventListener("load", function () { if (window.Munchkin && typeof window.Munchkin.init === "function") { replayQ.forEach(function (item) { var m = item[0]; if (typeof window.Munchkin[m] === "function") window.Munchkin[m].apply(window.Munchkin, item[1] || []); }); } }); } node.replaceWith(s); } function restoreAllEligible() { document.querySelectorAll('script.optanon-blocked[type="text/plain"][data-gated-src]').forEach(function (n) { var src = n.getAttribute("data-gated-src") || ""; var rule = matchRule(src); if (rule && hasConsent(rule.groups)) restoreScript(n); }); } // --- Video placeholder --- var videoIdCounter = 0; function createPlaceholder(type, uniqueId) { var el = document.createElement("div"); el.className = "optanon-video-placeholder"; if (uniqueId) el.id = "optanon-placeholder-" + uniqueId; el.style.cssText = "position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center;padding:20px;background:rgba(0,0,0,0.8);color:white;border-radius:5px;z-index:10;"; el.innerHTML = "<p>Video Consent Required</p><p>This " + type + " requires your consent to load content from third-party providers.</p>" + "<button onclick='window.OneTrust.ToggleInfoDisplay()' style='margin-top:15px;padding:12px 24px;background:#E4173F;color:white;border:none;border-radius:24px;cursor:pointer;font-size:16px;'>Manage Preferences</button>"; return el; } // --- Block / restore HTML5 video --- function blockVideo(video) { if (video.hasAttribute("data-blocked")) return; var src = video.getAttribute("src") || video.getAttribute("data-src") || ""; var sources = video.querySelectorAll("source"); var rule = matchRule(src, VIDEO_RULES); if (!rule) { for (var i = 0; i < sources.length && !rule; i++) rule = matchRule(sources[i].getAttribute("src") || "", VIDEO_RULES); } if (!rule && video.hasAttribute("data-require-consent")) rule = { groups: ["C0003"] }; if (!rule || hasConsent(rule.groups)) return; var uid = ++videoIdCounter; video.setAttribute("data-consent-required", rule.groups.join(",")); video.setAttribute("data-video-unique-id", uid); video.classList.add("optanon-blocked-video"); if (video.src) { video.setAttribute("data-blocked-src", video.src); video.removeAttribute("src"); } if (sources.length) { video.setAttribute("data-blocked-sources", JSON.stringify( Array.prototype.map.call(sources, function (s) { return { src: s.src, type: s.type, media: s.media }; }) )); while (video.firstChild) video.removeChild(video.firstChild); } Object.assign(video.style, { position: "relative", backgroundColor: "#f0f0f0", minHeight: video.style.height || "315px", minWidth: video.style.width || "560px" }); video.removeAttribute("autoplay"); video.removeAttribute("controls"); video.setAttribute("data-blocked", "true"); var ph = createPlaceholder("video", uid); if (video.parentElement) { if (!/(absolute|relative|fixed)/.test(video.parentElement.style.position)) video.parentElement.style.position = "relative"; video.parentElement.appendChild(ph); video.setAttribute("data-placeholder-id", ph.id); } } function restoreBlockedVideos() { document.querySelectorAll("video.optanon-blocked-video").forEach(function (video) { if (!hasConsent((video.getAttribute("data-consent-required") || "").split(","))) return; var phId = video.getAttribute("data-placeholder-id"); if (phId) { var ph = document.getElementById(phId); if (ph) ph.remove(); } video.parentElement && video.parentElement.querySelectorAll(".optanon-video-placeholder").forEach(function (p) { p.remove(); }); var bSrc = video.getAttribute("data-blocked-src"); if (bSrc) { video.src = bSrc; video.removeAttribute("data-blocked-src"); } var bSources = video.getAttribute("data-blocked-sources"); if (bSources) { try { JSON.parse(bSources).forEach(function (sd) { var s = document.createElement("source"); s.src = sd.src; if (sd.type) s.type = sd.type; if (sd.media) s.media = sd.media; video.appendChild(s); }); } catch (e) { console.error("Error parsing video sources:", e); } video.removeAttribute("data-blocked-sources"); } video.setAttribute("controls", "true"); ["data-blocked","data-consent-required","data-placeholder-id","data-video-unique-id"].forEach(function (a) { video.removeAttribute(a); }); video.classList.remove("optanon-blocked-video"); Object.assign(video.style, { backgroundColor: "", minHeight: "", minWidth: "", position: "" }); video.load(); }); document.querySelectorAll(".optanon-video-placeholder").forEach(function (ph) { var uid = ph.id.replace("optanon-placeholder-", ""); var vid = document.querySelector('[data-video-unique-id="' + uid + '"]'); if (!vid || !vid.hasAttribute("data-blocked")) ph.remove(); }); } // --- Block / restore iframes --- function blockIframe(iframe) { var src = iframe.getAttribute("src") || iframe.getAttribute("data-src") || ""; var rule = matchRule(src, IFRAME_RULES); if (!rule || hasConsent(rule.groups)) return; if (iframe.src) { iframe.setAttribute("data-blocked-src", iframe.src); iframe.removeAttribute("src"); } iframe.setAttribute("data-consent-required", rule.groups.join(",")); iframe.classList.add("optanon-blocked-iframe"); iframe.style.cssText += "background-color:#f0f0f0;min-height:" + (iframe.style.minHeight || "315px") + ";"; var ph = createPlaceholder("video"); if (iframe.parentElement) { if (!/(absolute|relative)/.test(iframe.parentElement.style.position)) iframe.parentElement.style.position = "relative"; iframe.parentElement.appendChild(ph); iframe.setAttribute("data-placeholder-id", ph.className); } } function restoreBlockedIframes() { document.querySelectorAll("iframe.optanon-blocked-iframe").forEach(function (iframe) { var bSrc = iframe.getAttribute("data-blocked-src"); if (!bSrc || !hasConsent((iframe.getAttribute("data-consent-required") || "").split(","))) return; var ph = iframe.parentElement && iframe.parentElement.querySelector(".optanon-video-placeholder"); if (ph) ph.remove(); iframe.src = bSrc; ["data-blocked-src","data-consent-required"].forEach(function (a) { iframe.removeAttribute(a); }); iframe.classList.remove("optanon-blocked-iframe"); iframe.style.backgroundColor = ""; iframe.style.minHeight = ""; }); } // --- Dynamic iframe src interception --- var _origCreateElement = document.createElement; document.createElement = function (tag) { var el = _origCreateElement.call(document, tag); if (tag.toLowerCase() === "iframe") { var desc = Object.getOwnPropertyDescriptor(el, "src") || Object.getOwnPropertyDescriptor(HTMLIFrameElement.prototype, "src"); Object.defineProperty(el, "src", { get: function () { return this.getAttribute("src"); }, set: function (v) { var rule = matchRule(v, IFRAME_RULES); if (rule && !hasConsent(rule.groups)) { this.setAttribute("data-blocked-src", v); this.classList.add("optanon-blocked-iframe"); this.setAttribute("data-consent-required", rule.groups.join(",")); } else { desc.set.call(this, v); } }, configurable: true, }); } return el; }; // --- DOM insertion hooks --- ["appendChild", "insertBefore", "replaceChild"].forEach(function (m) { var orig = Node.prototype[m]; Node.prototype[m] = function (child) { if (child) { if (child.tagName === "IFRAME") { try { blockIframe(child); } catch (e) {} } else if (child.tagName === "VIDEO") { try { blockVideo(child); } catch (e) {} } } var result = orig.apply(this, arguments); if (child) { if (child.tagName === "IFRAME") setTimeout(function () { blockIframe(child); }, 0); else if (child.tagName === "VIDEO") setTimeout(function () { blockVideo(child); }, 0); } return result; }; }); // MutationObserver for innerHTML insertions var mediaObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { mutation.addedNodes.forEach(function (node) { if (node.tagName === "IFRAME") blockIframe(node); else if (node.tagName === "VIDEO") blockVideo(node); if (node.querySelectorAll) { node.querySelectorAll("iframe").forEach(blockIframe); node.querySelectorAll("video").forEach(blockVideo); } }); }); }); function startObserving() { mediaObserver.observe(document.body, { childList: true, subtree: true }); blockExistingMedia(); } function blockExistingMedia() { document.querySelectorAll("iframe").forEach(blockIframe); document.querySelectorAll("video").forEach(blockVideo); } document.body ? startObserving() : document.addEventListener("DOMContentLoaded", startObserving); // --- Tracking pixel blocking --- var PIXEL_DOMAINS = /bizible\.com|bizibly\.com|adobedc\.net/; function blockPixel(img) { var src = img.src || img.getAttribute("src") || ""; if (PIXEL_DOMAINS.test(src) && !hasConsent(["C0004"])) { img.setAttribute("data-blocked-src", src); img.removeAttribute("src"); img.style.display = "none"; } } var pixelObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { mutation.addedNodes.forEach(function (node) { if (node.tagName === "IMG") blockPixel(node); }); }); }); if (document.body) { pixelObserver.observe(document.body, { childList: true, subtree: true }); document.querySelectorAll("img").forEach(blockPixel); } // --- Custom video click-to-load interception --- function interceptVideoButtons() { document.querySelectorAll(".js-video[data-video-url], .video[data-video-url]").forEach(function (container) { var videoUrl = container.getAttribute("data-video-url"); if (!videoUrl) return; var groups = /youtube\.com|youtu\.be/.test(videoUrl) ? ["C0003"] : /vimeo\.com/.test(videoUrl) ? ["C0003"] : null; if (!groups || hasConsent(groups)) return; var btn = container.querySelector('.js-videoPlay, button[type="button"]'); if (!btn || btn.getAttribute("data-consent-required")) return; var origOnclick = btn.onclick; btn.setAttribute("data-consent-required", groups.join(",")); btn.onclick = function (e) { e.preventDefault(); e.stopPropagation(); if (hasConsent(groups)) { if (origOnclick) origOnclick.call(this, e); } else showVideoConsentModal(container, groups); return false; }; var _origAEL = btn.addEventListener; btn.addEventListener = function (type, listener, opts) { _origAEL.call(this, type, type !== "click" ? listener : function (e) { if (!hasConsent(groups)) { e.preventDefault(); e.stopPropagation(); showVideoConsentModal(container, groups); return false; } return listener.call(this, e); }, opts); }; }); } function showVideoConsentModal(container, groups) { var existing = container.querySelector(".optanon-video-consent-modal"); if (existing) { existing.style.display = "block"; return; } var modal = document.createElement("div"); modal.className = "optanon-video-consent-modal"; modal.style.cssText = "position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);display:flex;align-items:center;justify-content:center;z-index:1000;"; modal.innerHTML = '<div style="background:white;padding:30px;border-radius:8px;text-align:center;max-width:400px;margin:10% auto;">' + '<h3 style="margin:0 0 15px 0;color:#111;">Video consent required</h3>' + '<p style="margin:0 0 20px 0;color:#111;">This video requires your consent to load content from third-party providers.</p>' + '<button onclick="window.OneTrust.ToggleInfoDisplay()" style="padding:12px 24px;background:#E4173F;color:white;border:none;border-radius:24px;cursor:pointer;font-size:16px;margin-right:10px;">Manage preferences</button>' + '<button onclick="this.closest(\'.optanon-video-consent-modal\').style.display=\'none\'" style="padding:12px 24px;background:#F7F7F7;color:#111;border:none;border-radius:24px;cursor:pointer;font-size:16px;">Cancel</button>' + '</div>'; container.style.position = "relative"; container.appendChild(modal); } function recheckVideoButtons() { document.querySelectorAll("[data-consent-required]").forEach(function (btn) { if (hasConsent((btn.getAttribute("data-consent-required") || "").split(","))) { var container = btn.closest(".js-video, .video"); if (container) { var m = container.querySelector(".optanon-video-consent-modal"); if (m) m.remove(); } } }); } document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", function () { setTimeout(interceptVideoButtons, 100); }) : setTimeout(interceptVideoButtons, 100); setInterval(interceptVideoButtons, 2000); // --- Script blocking via DOM insertion hooks --- function handleScript(node) { var src = node.getAttribute("src") || ""; var rule = matchRule(src); if (!rule || hasConsent(rule.groups)) return; node.setAttribute("data-gated-src", src); node.type = "text/plain"; node.classList.add("optanon-blocked"); } ["appendChild", "insertBefore"].forEach(function (m) { var orig = Node.prototype[m]; Node.prototype[m] = function (child) { if (child && child.tagName === "SCRIPT") { try { handleScript(child); } catch (e) {} } return orig.apply(this, arguments); }; }); // --- Patch document.write / writeln --- function gateHtml(html) { return String(html).replace( /<script\b([^>]*?)\bsrc\s*=\s*(['"])([^'"]+)\2([^>]*)>(?:<\/script>)?/gi, function (_m, pre, q, src, post) { var rule = matchRule(src || ""); if (!rule || hasConsent(rule.groups)) return _m; var attrs = ((pre || "") + " src=" + q + src + q + (post || "")).replace(/\btype\s*=\s*(['"])[^'"]*\1/gi, ""); attrs += ' type="text/plain" class="optanon-blocked" data-gated-src="' + src.replace(/"/g, "&quot;") + '"'; return "\<script " + attrs + "\>\<\/script\>"; } ); } ["write", "writeln"].forEach(function (m) { var orig = document[m]; document[m] = function () { return orig.call(document, gateHtml(Array.prototype.join.call(arguments, ""))); }; }); // --- Cookie blocking --- var _origCookie = Object.getOwnPropertyDescriptor(Document.prototype, "cookie"); var _origPostMessage = window.postMessage; window.postMessage = function (msg, origin) { if (origin && origin.includes("youtube.com") && !hasConsent(["C0003"])) return; return _origPostMessage.apply(this, arguments); }; Object.defineProperty(Document.prototype, "cookie", { get: function () { return _origCookie.get.call(this); }, set: function (value) { var name = value.split("=")[0].trim(); if (name.startsWith("OptAnon")) return _origCookie.set.call(this, value); if (name === "__cf_bm" || name === "_cf_bm") return _origCookie.set.call(this, value); // Allow VWO cookies — consent managed by VWO's built-in feature if (name.startsWith("_vis_opt") || name.startsWith("_vwo")) return _origCookie.set.call(this, value); for (var cat in cookiePatterns) { if (!hasConsent([cat])) { for (var i = 0; i < cookiePatterns[cat].length; i++) if (cookiePatterns[cat][i].test(name)) return; } } return _origCookie.set.call(this, value); }, configurable: true, }); // --- Storylane consent notify --- function notifyStorylaneConsent() { if (!hasConsent(["C0003"])) return; document.querySelectorAll("iframe[name='sl-embed']").forEach(function (sl) { try { sl.contentWindow && sl.contentWindow.postMessage({ message: "storylane-cookie-consent" }, "*"); } catch (e) {} }); } // --- Consent change handler --- window.addEventListener("OneTrustGroupsUpdated", function () { restoreAllEligible(); restoreBlockedIframes(); restoreBlockedVideos(); recheckVideoButtons(); notifyStorylaneConsent(); }); document.querySelectorAll("script[src]").forEach(function (n) { try { handleScript(n); } catch (e) {} }); restoreAllEligible(); notifyStorylaneConsent(); // --- Munchkin stub --- if (!window.Munchkin) { var MK = function () {}; MK.__otStub = true; MK.__q = []; MK.init = function () { MK.__q.push(["init", Array.prototype.slice.call(arguments)]); }; window.Munchkin = MK; } })(); function OptanonWrapper() { } </script> <!-- OneTrust Cookies Consent Notice end for lightyear.cloud --> AP Audit Checklist
Free trial

Complete your details to download our checklist

Download

Audit your AP Function

Still working with manual finance processes?

Keen to understand where your gaps are and how you can build a future-proof finance team? 

Use our AP checklist to asses your current processes and take your AP function from over worked to over achieving!

You will assess:

  • Invoice capture & data entry
  • Approval workflows
  • Payment ​processes
  • Reporting ​capabilities
  • Staffing & resources
  • Risk & ​compliance