/* BIA Readiness Check — Continuity Hub. Standalone quiz engine. Data + rendering + scoring + email gate. Embedded via base64 bootstrap. */ (function () { "use strict"; var DATA = { intro: { title: "BIA Readiness Check", lede: "See how your Business Impact Analysis aligns with ISO 22301, ISO 22317, and common regulator expectations. Answer five questions about your current BIA practice. You'll get a score, a readiness band, and five prioritized actions you can start within 30 days.", startLabel: "Start the check" }, questions: [ { prompt: "Which statement best describes your organization's formal Business Impact Analysis?", standard: "Tests ISO 22301:2019 \u00a78.2.2 and ISO 22317:2021 Clause 5", options: [ { label: "No documented BIA, or only informal notes.", points: 0 }, { label: "A BIA exists but is older than 24 months or was not updated after a major change (reorg, new critical system, merger).", points: 5 }, { label: "A documented BIA exists, updated within the last 24 months, but updates are not tied to a defined change trigger.", points: 15 }, { label: "A documented BIA is maintained on a defined schedule and after significant organizational, process, or technology changes.", points: 20 } ] }, { prompt: "How were your recovery time objectives (RTOs) and maximum tolerable periods of disruption (MTPDs) established?", standard: "Tests ISO 22317:2021 Clauses 7\u20138 and ISO 22301:2019 \u00a78.4.2", options: [ { label: "RTOs/MTPDs are not documented, or only IT backup windows are listed.", points: 0 }, { label: "Leadership or IT set default targets (e.g., 24/48 hours) without structured impact-over-time analysis.", points: 5 }, { label: "Impacts were assessed by function, but RTOs/MTPDs were not validated with process owners or aligned to actual dependencies.", points: 15 }, { label: "RTOs and MTPDs were derived from documented impact-over-time analysis, agreed with process owners, and recorded in the BIA.", points: 20 } ] }, { prompt: "How does your BIA treat critical third-party vendors and outsourced services?", standard: "Tests ISO 22301:2019 \u00a78.2.4 and FFIEC Business Continuity Management expectations", options: [ { label: "Third parties are not mapped in the BIA, or only named in a separate vendor list.", points: 0 }, { label: "Critical vendors are listed, without recovery requirements, contractual RTOs, or substitutability notes.", points: 5 }, { label: "Critical dependencies are in the BIA, but recovery expectations or alternate arrangements are incomplete or stale.", points: 15 }, { label: "Critical third parties are mapped to affected activities, with documented recovery expectations, contract references, and known gaps or alternates.", points: 20 } ] }, { prompt: "How are BIA priorities and recovery strategies tested or validated?", standard: "Tests ISO 22301:2019 \u00a7\u00a78.5\u20138.6 and FFIEC testing expectations", options: [ { label: "No exercises or tests linked to BIA-critical activities in the last 24 months.", points: 0 }, { label: "Tests occur (e.g., backup restore, DR failover) but are not scoped to BIA-tier activities or documented outcomes.", points: 5 }, { label: "Exercises cover some critical activities; results are logged but BIA/RTO assumptions are rarely updated from findings.", points: 15 }, { label: "An annual exercise programme targets BIA-priority activities; results feed documented updates to strategies, RTOs, or the BIA.", points: 20 } ] }, { prompt: "Who owns the BIA, and how often is it reviewed with leadership?", standard: "Tests ISO 22301:2019 \u00a7\u00a75.1, 9.3 and 10.2", options: [ { label: "No named owner; the BIA is not on a management or board agenda.", points: 0 }, { label: "A coordinator maintains the BIA, but senior management review is ad hoc or more than 24 months ago.", points: 5 }, { label: "An owner and review cycle exist; leadership receives summaries but does not approve priorities or resource decisions from the BIA.", points: 15 }, { label: "An accountable executive owner is named; the BIA is reviewed at least annually with leadership, with decisions on priorities and gaps recorded.", points: 20 } ] } ], bands: [ { min: 0, max: 40, name: "At risk", headline: "Your BIA needs a foundation before recovery planning can be trusted.", meaning: "Your BIA is missing, outdated, or disconnected from strategies, vendors, and leadership. Recovery priorities may not match real impacts or dependencies.", checklist: [ "Assign an executive BIA owner and publish the role in your BC policy or charter (ISO 22301 \u00a75.1).", "Inventory your critical activities (top 10\u201315) using ISO 22317 impact categories; capture owners and peak periods in a single register.", "Run one facilitated impact-over-time session for your highest-risk activity; draft MTPD and RTO with the process owner.", "List critical third parties for those activities; note contract name, service, and whether an alternate exists (ISO 22301 \u00a78.2.4).", "Schedule a 60-minute leadership readout within 30 days to confirm priorities and set the date for a full BIA pass." ] }, { min: 41, max: 70, name: "Developing", headline: "You have BIA building blocks \u2014 now align RTOs, vendors, testing, and review.", meaning: "Core BIA elements exist but are inconsistently applied \u2014 RTOs, vendors, testing, or governance need tightening before you can rely on them for decisions.", checklist: [ "Define BIA change triggers (org change, new system, vendor change, regulatory change) and add them to your BC procedure (ISO 22317 Clause 5).", "Reconcile RTOs/MTPDs with process owners for all Tier 1 activities; document disagreements and the escalation path (ISO 22317 Clauses 7\u20138).", "Extend the BIA rows for critical vendors: required recovery time, contractual commitment, gap, and mitigation owner.", "Scope one tabletop or technical test to a BIA Tier 1 activity; record pass/fail against the stated RTO (ISO 22301 \u00a78.5).", "Add the BIA to the management review agenda with a one-page status: last update, open gaps, decisions needed (ISO 22301 \u00a79.3)." ] }, { min: 71, max: 100, name: "Resilient", headline: "Your BIA practice is strong \u2014 prioritize evidence, gaps, and continual improvement.", meaning: "Your BIA is documented, governed, and linked to dependencies and exercises. Focus on closing gaps, keeping outputs current, and proving alignment under audit or exam.", checklist: [ "Map BIA outputs to strategies and plans in a traceability matrix (activity \u2192 RTO \u2192 strategy \u2192 plan section) for audit readiness (ISO 22301 \u00a78.4.2).", "Refresh third-party BIA entries using latest SOC reports, contract renewals, or vendor BC summaries; update the gap register.", "Conduct an exercise debrief that explicitly asks: \u201cWhich BIA assumptions were wrong?\u201d Assign owners to update the BIA within 14 days (ISO 22301 \u00a7\u00a78.6, 10.2).", "Benchmark review cadence against FFIEC/OCC-style expectations: confirm the board or committee receives a BC/BIA summary at least annually.", "Pilot an ISO 22317 alignment check on one business unit \u2014 verify methodology, data sources, and approval records match your documented process." ] } ] }; var state = { screen: "intro", qIndex: 0, answers: [] }; var root = null; function esc(s) { return String(s).replace(/&/g, "&").replace(//g, ">").replace(/"/g, """); } function bandFor(score) { for (var i = 0; i < DATA.bands.length; i++) { var b = DATA.bands[i]; if (score >= b.min && score <= b.max) return b; } return DATA.bands[0]; } function render() { if (!root) return; if (state.screen === "intro") renderIntro(); else if (state.screen === "quiz") renderQuiz(); else if (state.screen === "result") renderResult(); var top = root.querySelector(".bia-check-card"); if (top && root.scrollIntoView) { try { top.scrollIntoView({ behavior: "smooth", block: "start" }); } catch (e) {} } } function renderIntro() { root.innerHTML = '
' + '
Continuity Hub · Interactive assessment
' + '

' + esc(DATA.intro.title) + '

' + '

' + esc(DATA.intro.lede) + '

' + '' + '

Five questions · about two minutes · no account needed

' + '
'; } function renderQuiz() { var q = DATA.questions[state.qIndex]; var n = DATA.questions.length; var pct = Math.round((state.qIndex / n) * 100); var html = '
' + '
' + '
Question ' + (state.qIndex + 1) + ' of ' + n + '
' + '

' + esc(q.prompt) + '

' + '
' + esc(q.standard) + '
' + '
'; for (var i = 0; i < q.options.length; i++) { html += ''; } html += '
'; if (state.qIndex > 0) { html += ''; } html += '
'; root.innerHTML = html; } function renderResult() { var score = 0, i; for (i = 0; i < state.answers.length; i++) { score += DATA.questions[i].options[state.answers[i]].points; } var band = bandFor(score); var items = ""; for (i = 0; i < band.checklist.length; i++) { items += '
  • ' + (i + 1) + '' + esc(band.checklist[i]) + '
  • '; } root.innerHTML = '
    ' + '
    Your result
    ' + '
    ' + score + '/100
    ' + '
    ' + esc(band.name) + '
    ' + '

    ' + esc(band.headline) + '

    ' + '

    ' + esc(band.meaning) + '

    ' + '
    ' + '

    Get your 30-day action plan

    ' + '

    Enter your work email and we’ll unlock your personalized five-step checklist below.

    ' + '
    ' + '
    ' + '' + '' + '
    '; wireGate(); } function wireGate() { /* The form lives in a dedicated Shortcode block (WP renders shortcodes server-side); move the rendered form into the gate. */ try { var stash = document.querySelector(".bia-form-stash"); var wrap = root.querySelector("[data-formwrap]"); if (stash && wrap) { stash.classList.remove("bia-form-stash"); stash.style.display = ""; wrap.appendChild(stash); } } catch (e) {} function unlock() { var gate = root.querySelector("[data-gate]"); var list = root.querySelector("[data-list]"); if (gate) gate.style.display = "none"; if (list) list.style.display = ""; document.removeEventListener("fluentform_submission_success", unlock); } document.addEventListener("fluentform_submission_success", unlock); /* Fallback: if the form markup signals success some other way, poll briefly. */ var tries = 0; var timer = setInterval(function () { tries++; var ok = root.querySelector(".ff-message-success, .fluentform-submission-success"); if (ok) { clearInterval(timer); unlock(); } if (tries > 40) clearInterval(timer); }, 500); } function onClick(e) { var t = e.target; while (t && t !== root && !t.getAttribute("data-act")) t = t.parentNode; if (!t || t === root) return; var act = t.getAttribute("data-act"); if (act === "start") { state.screen = "quiz"; state.qIndex = 0; state.answers = []; render(); } else if (act === "answer") { state.answers[state.qIndex] = parseInt(t.getAttribute("data-i"), 10); if (state.qIndex < DATA.questions.length - 1) { state.qIndex++; render(); } else { state.screen = "result"; render(); } } else if (act === "back") { if (state.qIndex > 0) { state.qIndex--; render(); } } else if (act === "restart") { state.screen = "intro"; state.qIndex = 0; state.answers = []; render(); } } function init() { root = document.getElementById("bia-check-app"); if (!root) return; root.addEventListener("click", onClick); render(); } if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); } else { init(); } })();