{"id":157,"date":"2025-10-18T14:28:41","date_gmt":"2025-10-18T14:28:41","guid":{"rendered":"https:\/\/aman360.org\/?page_id=157"},"modified":"2025-10-19T08:11:28","modified_gmt":"2025-10-19T08:11:28","slug":"business-continuity-planning","status":"publish","type":"page","link":"https:\/\/aman360.org\/ar\/tools\/business-continuity-planning\/","title":{"rendered":"Business Continuity Planning"},"content":{"rendered":"\n<!doctype html>\n<html lang=\"ar\" dir=\"rtl\">\n<head>\n<meta charset=\"utf-8\"\/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\"\/>\n<title>Aman360 \u2022 Business Continuity Quick Planner<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Tajawal:wght@400;600;800&#038;family=Inter:wght@400;600;800&#038;display=swap\" rel=\"stylesheet\">\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/html2canvas@1.4.1\/dist\/html2canvas.min.js\"><\/script>\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/jspdf@2.5.1\/dist\/jspdf.umd.min.js\"><\/script>\n<style>\n:root{\n  --bg:#0b1224; --panel:#0f1b36; --ink:#e6f0ff; --muted:#9fb3d9;\n  --brand:#22a3ff; --line:#1f3160; --chip:#0a1531;\n}\n*{box-sizing:border-box}\nbody{margin:0;background:var(--bg);color:var(--ink);font-family:Tajawal,Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif}\n.container{max-width:1200px;margin:36px auto;padding:0 16px}\n.header{display:flex;gap:12px;align-items:center;justify-content:space-between;margin-bottom:12px}\n.h-title{font-weight:800;font-size:28px}\n.h-actions{display:flex;gap:8px;flex-wrap:wrap}\n.btn{background:var(--brand);color:#00162b;border:none;padding:10px 14px;border-radius:10px;font-weight:700;cursor:pointer}\n.btn.alt{background:#1d2f59;color:var(--ink)}\n.lang{background:var(--chip);border:1px solid var(--line);color:var(--ink);padding:8px 10px;border-radius:10px}\n.grid{display:grid;gap:16px}\n@media (min-width:1000px){ .grid-2{grid-template-columns:1fr 1fr} .grid-3{grid-template-columns:1fr 1fr 1fr} }\n.card{background:linear-gradient(180deg,#0f1b36 0%,#0c1630 100%);border:1px solid var(--line);border-radius:16px;padding:16px}\n.label{color:var(--muted);font-size:13px;margin-bottom:6px}\n.input,select,textarea{width:100%;background:#0a1330;color:var(--ink);border:1px solid #203462;border-radius:10px;padding:10px 12px}\ntextarea{min-height:88px;resize:vertical}\nhr.sep{border:0;height:1px;background:var(--line);margin:14px 0}\n.table{width:100%;border-collapse:separate;border-spacing:0 8px}\n.table thead th{color:var(--muted);font-weight:600;text-align:inherit}\n.table tbody tr{background:#0a1531;border:1px solid var(--line)}\n.table th,.table td{padding:10px 12px}\n.actions{display:flex;gap:8px;flex-wrap:wrap}\n.small{font-size:12px;color:var(--muted)}\n.badge{background:#12366a;color:#cfe4ff;border:1px solid #1f4c93;padding:3px 8px;border-radius:999px}\n.note{background:#0a1531;border:1px dashed var(--line);padding:10px;border-radius:12px}\n.footer{margin-top:12px;display:flex;gap:8px;flex-wrap:wrap}\n.print-only{display:none}\n@media print{\n  .no-print{display:none !important}\n  .print-only{display:block}\n  body{background:#fff;color:#000}\n}\n<\/style>\n<\/head>\n<body>\n<div class=\"container\" id=\"capture\">\n  <div class=\"header no-print\">\n    <div class=\"h-title\" id=\"title\">\u0645\u064f\u062e\u0637\u0651\u0650\u0637 \u0627\u0633\u062a\u0645\u0631\u0627\u0631\u064a\u0629 \u0627\u0644\u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u0633\u0631\u064a\u0639<\/div>\n    <div class=\"h-actions\">\n      <select id=\"lang\" class=\"lang\">\n        <option value=\"ar\" selected>\u0627\u0644\u0639\u0631\u0628\u064a\u0629<\/option>\n        <option value=\"en\">English<\/option>\n      <\/select>\n      <button class=\"btn alt\" id=\"btnPrint\">Print<\/button>\n      <button class=\"btn alt\" id=\"btnCSV\">CSV<\/button>\n      <button class=\"btn alt\" id=\"btnPDF\">PDF<\/button>\n      <button class=\"btn\" id=\"btnGenerate\">\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0644\u062e\u0635<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- ===== Inputs ===== -->\n  <div class=\"grid grid-2 no-print\">\n    <div class=\"card\">\n      <div class=\"grid grid-2\">\n        <div>\n          <div class=\"label\" data-i=\"org\">\u0627\u0644\u0645\u0624\u0633\u0633\u0629<\/div>\n          <input id=\"org\" class=\"input\" placeholder=\"Aman360\"\/>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"dept\">\u0627\u0644\u0642\u0633\u0645\/\u0627\u0644\u0648\u062d\u062f\u0629<\/div>\n          <input id=\"dept\" class=\"input\" placeholder=\"Operations\"\/>\n        <\/div>\n      <\/div>\n      <div class=\"grid grid-2\" style=\"margin-top:10px\">\n        <div>\n          <div class=\"label\" data-i=\"scenario\">\u0627\u0644\u062d\u062f\u062b \u0627\u0644\u0645\u0624\u062b\u0631<\/div>\n          <input id=\"scenario\" class=\"input\" placeholder=\"\u0627\u0646\u0642\u0637\u0627\u0639 \u0627\u0644\u0643\u0647\u0631\u0628\u0627\u0621 \/ \u0647\u062c\u0648\u0645 \u0633\u064a\u0628\u0631\u0627\u0646\u064a \/ \u0641\u064a\u0636\u0627\u0646\u0627\u062a ...\"\/>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"impact\">\u0627\u0644\u062a\u0623\u062b\u064a\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a<\/div>\n          <input id=\"impact\" class=\"input\" placeholder=\"\u062a\u0648\u0642\u0641 \u0627\u0644\u0623\u0646\u0638\u0645\u0629 \/ \u062a\u0639\u0637\u0651\u0644 \u0645\u0631\u0643\u0632 \u0627\u0644\u0628\u064a\u0627\u0646\u0627\u062a ...\"\/>\n        <\/div>\n      <\/div>\n      <hr class=\"sep\">\n      <div class=\"grid grid-3\">\n        <div>\n          <div class=\"label\" data-i=\"rto\">RTO (\u0623\u0642\u0635\u0649 \u0632\u0645\u0646 \u062a\u0648\u0642\u0641 \u0628\u0627\u0644\u0633\u0627\u0639\u0627\u062a)<\/div>\n          <input id=\"rto\" type=\"number\" min=\"0\" class=\"input\" value=\"8\"\/>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"rpo\">RPO (\u0623\u0642\u0635\u0649 \u0641\u0642\u062f \u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0627\u0644\u0633\u0627\u0639\u0627\u062a)<\/div>\n          <input id=\"rpo\" type=\"number\" min=\"0\" class=\"input\" value=\"2\"\/>\n        <\/div>\n        <div>\n          <div class=\"label\" data-i=\"altSite\">\u0645\u0648\u0642\u0639 \u0628\u062f\u064a\u0644\/\u062a\u0634\u063a\u064a\u0644\u064a<\/div>\n          <input id=\"altSite\" class=\"input\" placeholder=\"DR Site \/ Cloud region\"\/>\n        <\/div>\n      <\/div>\n      <div style=\"margin-top:10px\">\n        <div class=\"label\" data-i=\"deps\">\u0627\u0639\u062a\u0645\u0627\u062f\u0627\u062a \u062d\u0627\u0633\u0645\u0629 (\u0645\u0648\u0631\u062f\u064a\u0646\/\u0623\u0646\u0638\u0645\u0629\/\u0634\u0628\u0643\u0627\u062a)<\/div>\n        <textarea id=\"deps\" class=\"input\" placeholder=\"\u0645\u0632\u0648\u062f \u0627\u0644\u0625\u0646\u062a\u0631\u0646\u062a\u060c \u0646\u0638\u0627\u0645 ERP\u060c \u0628\u0648\u0627\u0628\u0629 \u0627\u0644\u062f\u0641\u0639 ...\"><\/textarea>\n      <\/div>\n    <\/div>\n\n    <div class=\"card\">\n      <div class=\"label\" data-i=\"critFn\">\u0627\u0644\u0648\u0638\u0627\u0626\u0641 \u0627\u0644\u062d\u0631\u062c\u0629<\/div>\n      <table class=\"table\" id=\"fnTable\">\n        <thead>\n          <tr>\n            <th data-i=\"fnName\">\u0627\u0644\u0648\u0638\u064a\u0641\u0629<\/th>\n            <th data-i=\"owner\">\u0627\u0644\u0645\u0627\u0644\u0643<\/th>\n            <th data-i=\"minLevel\">\u0627\u0644\u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062e\u062f\u0645\u0629<\/th>\n            <th class=\"no-print\"><\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"fnBody\"><\/tbody>\n      <\/table>\n      <div class=\"actions no-print\">\n        <button class=\"btn alt\" id=\"addFn\">+ <span data-i=\"addFn\">\u0625\u0636\u0627\u0641\u0629 \u0648\u0638\u064a\u0641\u0629<\/span><\/button>\n      <\/div>\n      <hr class=\"sep\">\n      <div class=\"label\" data-i=\"teams\">\u0641\u0631\u0642 \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629 (\u0627\u0644\u0627\u0633\u0645\/\u0627\u0644\u062f\u0648\u0631\/\u0627\u0644\u062a\u0648\u0627\u0635\u0644)<\/div>\n      <table class=\"table\" id=\"teamTable\">\n        <thead>\n          <tr>\n            <th data-i=\"person\">\u0627\u0644\u0627\u0633\u0645<\/th>\n            <th data-i=\"role\">\u0627\u0644\u062f\u0648\u0631<\/th>\n            <th data-i=\"contact\">\u0627\u0644\u062a\u0648\u0627\u0635\u0644<\/th>\n            <th class=\"no-print\"><\/th>\n          <\/tr>\n        <\/thead>\n        <tbody id=\"teamBody\"><\/tbody>\n      <\/table>\n      <div class=\"actions no-print\">\n        <button class=\"btn alt\" id=\"addTeam\">+ <span data-i=\"addTeam\">\u0625\u0636\u0627\u0641\u0629 \u0639\u0636\u0648<\/span><\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- ===== Output Summary ===== -->\n  <div class=\"card\" id=\"summary\" style=\"margin-top:16px\">\n    <div class=\"badge\" id=\"summaryTitle\">\u0645\u0644\u062e\u0635 \u062e\u0637\u0629 \u0627\u0633\u062a\u0645\u0631\u0627\u0631\u064a\u0629 \u0627\u0644\u0623\u0639\u0645\u0627\u0644<\/div>\n    <hr class=\"sep\">\n    <div id=\"summaryContent\" class=\"small\"><\/div>\n    <div class=\"note small\" style=\"margin-top:10px\" id=\"footnote\">\n      * \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u062e\u0635 \u062a\u0645 \u062a\u0648\u0644\u064a\u062f\u0647 \u0639\u0628\u0631 Aman360 \u2022 Business Continuity Quick Planner\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\nconst I18N={\n  ar:{\n    title:\"\u0645\u064f\u062e\u0637\u0651\u0650\u0637 \u0627\u0633\u062a\u0645\u0631\u0627\u0631\u064a\u0629 \u0627\u0644\u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u0633\u0631\u064a\u0639\",\n    org:\"\u0627\u0644\u0645\u0624\u0633\u0633\u0629\", dept:\"\u0627\u0644\u0642\u0633\u0645\/\u0627\u0644\u0648\u062d\u062f\u0629\", scenario:\"\u0627\u0644\u062d\u062f\u062b \u0627\u0644\u0645\u0624\u062b\u0631\", impact:\"\u0627\u0644\u062a\u0623\u062b\u064a\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a\",\n    rto:\"RTO (\u0623\u0642\u0635\u0649 \u0632\u0645\u0646 \u062a\u0648\u0642\u0641 \u0628\u0627\u0644\u0633\u0627\u0639\u0627\u062a)\", rpo:\"RPO (\u0623\u0642\u0635\u0649 \u0641\u0642\u062f \u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0627\u0644\u0633\u0627\u0639\u0627\u062a)\", altSite:\"\u0645\u0648\u0642\u0639 \u0628\u062f\u064a\u0644\/\u062a\u0634\u063a\u064a\u0644\u064a\",\n    deps:\"\u0627\u0639\u062a\u0645\u0627\u062f\u0627\u062a \u062d\u0627\u0633\u0645\u0629 (\u0645\u0648\u0631\u062f\u064a\u0646\/\u0623\u0646\u0638\u0645\u0629\/\u0634\u0628\u0643\u0627\u062a)\",\n    critFn:\"\u0627\u0644\u0648\u0638\u0627\u0626\u0641 \u0627\u0644\u062d\u0631\u062c\u0629\", fnName:\"\u0627\u0644\u0648\u0638\u064a\u0641\u0629\", owner:\"\u0627\u0644\u0645\u0627\u0644\u0643\", minLevel:\"\u0627\u0644\u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062e\u062f\u0645\u0629\", addFn:\"\u0625\u0636\u0627\u0641\u0629 \u0648\u0638\u064a\u0641\u0629\",\n    teams:\"\u0641\u0631\u0642 \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629 (\u0627\u0644\u0627\u0633\u0645\/\u0627\u0644\u062f\u0648\u0631\/\u0627\u0644\u062a\u0648\u0627\u0635\u0644)\", person:\"\u0627\u0644\u0627\u0633\u0645\", role:\"\u0627\u0644\u062f\u0648\u0631\", contact:\"\u0627\u0644\u062a\u0648\u0627\u0635\u0644\", addTeam:\"\u0625\u0636\u0627\u0641\u0629 \u0639\u0636\u0648\",\n    generate:\"\u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0644\u062e\u0635\", pdf:\"PDF\", csv:\"CSV\", print:\"\u0637\u0628\u0627\u0639\u0629\",\n    sumTitle:\"\u0645\u0644\u062e\u0635 \u062e\u0637\u0629 \u0627\u0633\u062a\u0645\u0631\u0627\u0631\u064a\u0629 \u0627\u0644\u0623\u0639\u0645\u0627\u0644\",\n    labels:{\n      org:\"\u0627\u0644\u0645\u0624\u0633\u0633\u0629\", dept:\"\u0627\u0644\u0642\u0633\u0645\", scenario:\"\u0627\u0644\u062d\u062f\u062b\", impact:\"\u0627\u0644\u062a\u0623\u062b\u064a\u0631\", rto:\"RTO (\u0633)\", rpo:\"RPO (\u0633)\", altSite:\"\u0627\u0644\u0645\u0648\u0642\u0639 \u0627\u0644\u0628\u062f\u064a\u0644\", deps:\"\u0627\u0644\u0627\u0639\u062a\u0645\u0627\u062f\u0627\u062a\"\n    },\n    fnHeader:\"\u0627\u0644\u0648\u0638\u0627\u0626\u0641 \u0627\u0644\u062d\u0631\u062c\u0629\",\n    teamHeader:\"\u0641\u0631\u0642 \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629\",\n    placeholderFn:\"\u0625\u062f\u0627\u0631\u0629 \u0627\u0644\u0637\u0644\u0628\u0627\u062a\", placeholderOwner:\"\u0645\u062d\u0645\u062f \u0639\u0644\u064a\", placeholderLvl:\"\u062a\u0634\u063a\u064a\u0644 50%\",\n    placeholderName:\"\u0633\u0627\u0631\u0629 \u062e\u0627\u0644\u062f\", placeholderRole:\"\u0642\u0627\u0626\u062f \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629\", placeholderPhone:\"+962 7 0000 0000\"\n  },\n  en:{\n    title:\"Business Continuity Quick Planner\",\n    org:\"Organization\", dept:\"Department\/Unit\", scenario:\"Disruption Scenario\", impact:\"Operational Impact\",\n    rto:\"RTO (Max downtime in hours)\", rpo:\"RPO (Max data loss in hours)\", altSite:\"Alternate\/DR Site\",\n    deps:\"Critical Dependencies (Vendors\/Systems\/Networks)\",\n    critFn:\"Critical Functions\", fnName:\"Function\", owner:\"Owner\", minLevel:\"Minimum Service Level\", addFn:\"Add function\",\n    teams:\"Response Teams (Name\/Role\/Contact)\", person:\"Name\", role:\"Role\", contact:\"Contact\", addTeam:\"Add member\",\n    generate:\"Generate Summary\", pdf:\"PDF\", csv:\"CSV\", print:\"Print\",\n    sumTitle:\"Business Continuity Plan Summary\",\n    labels:{\n      org:\"Organization\", dept:\"Department\", scenario:\"Scenario\", impact:\"Impact\", rto:\"RTO (h)\", rpo:\"RPO (h)\", altSite:\"Alternate site\", deps:\"Dependencies\"\n    },\n    fnHeader:\"Critical Functions\",\n    teamHeader:\"Response Teams\",\n    placeholderFn:\"Order Management\", placeholderOwner:\"John Doe\", placeholderLvl:\"Run at 50%\",\n    placeholderName:\"Jane Smith\", placeholderRole:\"Response Lead\", placeholderPhone:\"+1 555 555 1234\"\n  }\n};\n\nconst els={\n  lang:document.getElementById('lang'),\n  title:document.getElementById('title'),\n  btnGenerate:document.getElementById('btnGenerate'),\n  btnPDF:document.getElementById('btnPDF'),\n  btnCSV:document.getElementById('btnCSV'),\n  btnPrint:document.getElementById('btnPrint'),\n  summaryTitle:document.getElementById('summaryTitle'),\n  summaryContent:document.getElementById('summaryContent'),\n  footnote:document.getElementById('footnote'),\n  \/\/ inputs\n  org:document.getElementById('org'),\n  dept:document.getElementById('dept'),\n  scenario:document.getElementById('scenario'),\n  impact:document.getElementById('impact'),\n  rto:document.getElementById('rto'),\n  rpo:document.getElementById('rpo'),\n  altSite:document.getElementById('altSite'),\n  deps:document.getElementById('deps'),\n  fnBody:document.getElementById('fnBody'),\n  addFn:document.getElementById('addFn'),\n  teamBody:document.getElementById('teamBody'),\n  addTeam:document.getElementById('addTeam'),\n  sum:document.getElementById('summary')\n};\n\nfunction applyLang(){\n  const t=I18N[els.lang.value];\n  document.documentElement.lang=els.lang.value;\n  document.documentElement.dir=(els.lang.value==='ar')?'rtl':'ltr';\n  els.title.textContent=t.title;\n  els.btnGenerate.textContent=t.generate;\n  els.btnPDF.textContent=t.pdf;\n  els.btnCSV.textContent=t.csv;\n  els.btnPrint.textContent=t.print;\n  els.summaryTitle.textContent=t.sumTitle;\n  document.querySelectorAll('[data-i]').forEach(e=>{\n    const key=e.getAttribute('data-i'); e.textContent=t[key];\n  });\n  \/\/ placeholders for rows\n  [...els.fnBody.querySelectorAll('.fn-name')].forEach((i)=>i.placeholder=t.placeholderFn);\n  [...els.fnBody.querySelectorAll('.fn-owner')].forEach((i)=>i.placeholder=t.placeholderOwner);\n  [...els.fnBody.querySelectorAll('.fn-lvl')].forEach((i)=>i.placeholder=t.placeholderLvl);\n  [...els.teamBody.querySelectorAll('.tm-name')].forEach((i)=>i.placeholder=t.placeholderName);\n  [...els.teamBody.querySelectorAll('.tm-role')].forEach((i)=>i.placeholder=t.placeholderRole);\n  [...els.teamBody.querySelectorAll('.tm-contact')].forEach((i)=>i.placeholder=t.placeholderPhone);\n  \/\/ footnote\n  els.footnote.textContent = (els.lang.value==='ar')\n    ? \"* \u0647\u0630\u0627 \u0627\u0644\u0645\u0644\u062e\u0635 \u062a\u0645 \u062a\u0648\u0644\u064a\u062f\u0647 \u0639\u0628\u0631 Aman360 \u2022 Business Continuity Quick Planner\"\n    : \"* Generated via Aman360 \u2022 Business Continuity Quick Planner\";\n  \/\/ summary refresh\n  generateSummary();\n}\n\nfunction rowFn(name='',owner='',lvl=''){\n  const tr=document.createElement('tr');\n  tr.innerHTML = `\n    <td><input class=\"input fn-name\" value=\"${name}\"\/><\/td>\n    <td><input class=\"input fn-owner\" value=\"${owner}\"\/><\/td>\n    <td><input class=\"input fn-lvl\" value=\"${lvl}\"\/><\/td>\n    <td class=\"no-print\"><button class=\"btn alt btnDel\">\u00d7<\/button><\/td>\n  `;\n  tr.querySelector('.btnDel').onclick=()=>tr.remove();\n  return tr;\n}\nfunction rowTeam(name='',role='',contact=''){\n  const tr=document.createElement('tr');\n  tr.innerHTML = `\n    <td><input class=\"input tm-name\" value=\"${name}\"\/><\/td>\n    <td><input class=\"input tm-role\" value=\"${role}\"\/><\/td>\n    <td><input class=\"input tm-contact\" value=\"${contact}\"\/><\/td>\n    <td class=\"no-print\"><button class=\"btn alt btnDel\">\u00d7<\/button><\/td>\n  `;\n  tr.querySelector('.btnDel').onclick=()=>tr.remove();\n  return tr;\n}\n\n\/\/ add two default rows\nfunction ensureDefaults(){\n  if(!els.fnBody.children.length){\n    els.fnBody.appendChild(rowFn());\n    els.fnBody.appendChild(rowFn());\n  }\n  if(!els.teamBody.children.length){\n    els.teamBody.appendChild(rowTeam());\n    els.teamBody.appendChild(rowTeam());\n  }\n}\n\nfunction generateSummary(){\n  const t=I18N[els.lang.value];\n  const data={\n    org:els.org.value, dept:els.dept.value, scenario:els.scenario.value, impact:els.impact.value,\n    rto:els.rto.value, rpo:els.rpo.value, altSite:els.altSite.value, deps:els.deps.value\n  };\n  const fnRows=[...els.fnBody.querySelectorAll('tr')].map(tr=>{\n    return {\n      name:tr.querySelector('.fn-name')?.value||'',\n      owner:tr.querySelector('.fn-owner')?.value||'',\n      lvl:tr.querySelector('.fn-lvl')?.value||'',\n    };\n  });\n  const tmRows=[...els.teamBody.querySelectorAll('tr')].map(tr=>{\n    return {\n      name:tr.querySelector('.tm-name')?.value||'',\n      role:tr.querySelector('.tm-role')?.value||'',\n      contact:tr.querySelector('.tm-contact')?.value||'',\n    };\n  });\n\n  const html = `\n  <div class=\"grid grid-3\">\n    <div><div class=\"label\">${t.labels.org}<\/div><div>${escapeHtml(data.org)}<\/div><\/div>\n    <div><div class=\"label\">${t.labels.dept}<\/div><div>${escapeHtml(data.dept)}<\/div><\/div>\n    <div><div class=\"label\">${t.labels.scenario}<\/div><div>${escapeHtml(data.scenario)}<\/div><\/div>\n    <div><div class=\"label\">${t.labels.impact}<\/div><div>${escapeHtml(data.impact)}<\/div><\/div>\n    <div><div class=\"label\">${t.labels.rto}<\/div><div>${escapeHtml(data.rto)}<\/div><\/div>\n    <div><div class=\"label\">${t.labels.rpo}<\/div><div>${escapeHtml(data.rpo)}<\/div><\/div>\n    <div><div class=\"label\">${t.labels.altSite}<\/div><div>${escapeHtml(data.altSite)}<\/div><\/div>\n  <\/div>\n  <hr class=\"sep\">\n  <div class=\"label\">${t.labels.deps}<\/div>\n  <div>${escapeHtml((data.deps||'').replace(\/\\n\/g,'<br>'))}<\/div>\n  <hr class=\"sep\">\n  <div class=\"badge\">${t.fnHeader}<\/div>\n  <table class=\"table\" style=\"margin-top:8px\">\n    <thead><tr><th>${t.fnName}<\/th><th>${t.owner}<\/th><th>${t.minLevel}<\/th><\/tr><\/thead>\n    <tbody>\n      ${fnRows.map(r=>`<tr><td>${escapeHtml(r.name)}<\/td><td>${escapeHtml(r.owner)}<\/td><td>${escapeHtml(r.lvl)}<\/td><\/tr>`).join('')}\n    <\/tbody>\n  <\/table>\n  <hr class=\"sep\">\n  <div class=\"badge\">${t.teamHeader}<\/div>\n  <table class=\"table\" style=\"margin-top:8px\">\n    <thead><tr><th>${t.person}<\/th><th>${t.role}<\/th><th>${t.contact}<\/th><\/tr><\/thead>\n    <tbody>\n      ${tmRows.map(r=>`<tr><td>${escapeHtml(r.name)}<\/td><td>${escapeHtml(r.role)}<\/td><td>${escapeHtml(r.contact)}<\/td><\/tr>`).join('')}\n    <\/tbody>\n  <\/table>`;\n  els.summaryContent.innerHTML = html;\n  return {data,fnRows,tmRows};\n}\n\nfunction escapeHtml(s){return (s??'').toString().replace(\/[&<>\"']\/g,m=>({ '&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;' }[m]));}\n\n\/\/ CSV export\nfunction exportCSV(){\n  const t=I18N[els.lang.value]; const {data,fnRows,tmRows}=generateSummary();\n  const rows=[['section','key','value']];\n  Object.entries(data).forEach(([k,v])=>rows.push(['meta',k,v]));\n  rows.push(['meta','deps', (data.deps||'').replace(\/\\n\/g,' ')]);\n  rows.push(['functions','name','owner','min_level']);\n  fnRows.forEach(r=>rows.push(['function',r.name,r.owner,r.lvl]));\n  rows.push(['teams','name','role','contact']);\n  tmRows.forEach(r=>rows.push(['team',r.name,r.role,r.contact]));\n  const csv=rows.map(r=>r.map(x=>`\"${(x??'').toString().replace(\/\"\/g,'\"\"')}\"`).join(',')).join('\\n');\n  const blob=new Blob([csv],{type:'text\/csv;charset=utf-8'});\n  const url=URL.createObjectURL(blob); const a=document.createElement('a');\n  a.href=url; a.download='aman360-bcp.csv'; a.click(); URL.revokeObjectURL(url);\n}\n\n\/\/ PDF export\nasync function exportPDF(){\n  const node=document.getElementById('capture');\n  \/\/ \u0645\u0624\u062b\u0631: \u0627\u0644\u062a\u0639\u062f\u064a\u0644 \u0627\u0644\u0645\u0624\u0642\u062a \u0639\u0644\u0649 \u0627\u0644\u062e\u0644\u0641\u064a\u0627\u062a \u0644\u0646\u062a\u064a\u062c\u0629 PDF \u0623\u0641\u0636\u0644\n  const canvas=await html2canvas(node,{backgroundColor:'#0b1224',scale:2});\n  const img=canvas.toDataURL('image\/png');\n  const { jsPDF } = window.jspdf;\n  const pdf=new jsPDF('p','pt','a4');\n  const pageW=pdf.internal.pageSize.getWidth();\n  const pageH=pdf.internal.pageSize.getHeight();\n  const imgW=pageW; const imgH=canvas.height*(imgW\/canvas.width);\n  let y=0; let first=true;\n  while(y<imgH){\n    if(!first) pdf.addPage();\n    pdf.addImage(img,'PNG',0,0 - y,pageW,imgH);\n    y += pageH; first=false;\n  }\n  pdf.save('aman360-bcp.pdf');\n}\n\n\/\/ events\nels.addFn.onclick=()=>{ els.fnBody.appendChild(rowFn()); applyLang(); }\nels.addTeam.onclick=()=>{ els.teamBody.appendChild(rowTeam()); applyLang(); }\nels.btnGenerate.onclick=generateSummary;\nels.btnCSV.onclick=exportCSV;\nels.btnPDF.onclick=exportPDF;\nels.btnPrint.onclick=()=>{ window.print(); };\nels.lang.onchange=applyLang;\n\n\/\/ init\nensureDefaults();\napplyLang();\ngenerateSummary();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Aman360 \u2022 Business Continuity Quick Planner \u0645\u064f\u062e\u0637\u0651\u0650\u0637 \u0627\u0633\u062a\u0645\u0631\u0627\u0631\u064a\u0629 \u0627\u0644\u0623\u0639\u0645\u0627\u0644 \u0627\u0644\u0633\u0631\u064a\u0639 \u0627\u0644\u0639\u0631\u0628\u064a\u0629English Print CSV PDF \u0625\u0646\u0634\u0627\u0621 \u0627\u0644\u0645\u0644\u062e\u0635 \u0627\u0644\u0645\u0624\u0633\u0633\u0629 \u0627\u0644\u0642\u0633\u0645\/\u0627\u0644\u0648\u062d\u062f\u0629 \u0627\u0644\u062d\u062f\u062b \u0627\u0644\u0645\u0624\u062b\u0631 \u0627\u0644\u062a\u0623\u062b\u064a\u0631 \u0639\u0644\u0649 \u0627\u0644\u0639\u0645\u0644\u064a\u0627\u062a RTO (\u0623\u0642\u0635\u0649 \u0632\u0645\u0646 \u062a\u0648\u0642\u0641 \u0628\u0627\u0644\u0633\u0627\u0639\u0627\u062a) RPO (\u0623\u0642\u0635\u0649 \u0641\u0642\u062f \u0628\u064a\u0627\u0646\u0627\u062a \u0628\u0627\u0644\u0633\u0627\u0639\u0627\u062a) \u0645\u0648\u0642\u0639 \u0628\u062f\u064a\u0644\/\u062a\u0634\u063a\u064a\u0644\u064a \u0627\u0639\u062a\u0645\u0627\u062f\u0627\u062a \u062d\u0627\u0633\u0645\u0629 (\u0645\u0648\u0631\u062f\u064a\u0646\/\u0623\u0646\u0638\u0645\u0629\/\u0634\u0628\u0643\u0627\u062a) \u0627\u0644\u0648\u0638\u0627\u0626\u0641 \u0627\u0644\u062d\u0631\u062c\u0629 \u0627\u0644\u0648\u0638\u064a\u0641\u0629 \u0627\u0644\u0645\u0627\u0644\u0643 \u0627\u0644\u0645\u0633\u062a\u0648\u0649 \u0627\u0644\u0623\u062f\u0646\u0649 \u0644\u0644\u062e\u062f\u0645\u0629 + \u0625\u0636\u0627\u0641\u0629 \u0648\u0638\u064a\u0641\u0629 \u0641\u0631\u0642 \u0627\u0644\u0627\u0633\u062a\u062c\u0627\u0628\u0629 (\u0627\u0644\u0627\u0633\u0645\/\u0627\u0644\u062f\u0648\u0631\/\u0627\u0644\u062a\u0648\u0627\u0635\u0644) \u0627\u0644\u0627\u0633\u0645 \u0627\u0644\u062f\u0648\u0631 \u0627\u0644\u062a\u0648\u0627\u0635\u0644 + [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":148,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-with-title","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-157","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/comments?post=157"}],"version-history":[{"count":2,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/157\/revisions"}],"predecessor-version":[{"id":159,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/157\/revisions\/159"}],"up":[{"embeddable":true,"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/pages\/148"}],"wp:attachment":[{"href":"https:\/\/aman360.org\/ar\/wp-json\/wp\/v2\/media?parent=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}