{"id":269,"date":"2026-02-01T20:17:09","date_gmt":"2026-02-01T19:17:09","guid":{"rendered":"https:\/\/www.comunedicaivano.it\/servizidigitali\/?page_id=269"},"modified":"2026-02-03T07:03:29","modified_gmt":"2026-02-03T06:03:29","slug":"calcolo-piano-sicurezza","status":"publish","type":"page","link":"https:\/\/www.comunedicaivano.it\/servizidigitali\/calcolo-piano-sicurezza\/","title":{"rendered":"Calcolo rischio \u2013 Piano Safety &amp; Security (SAFETY)"},"content":{"rendered":"\n<section class=\"container my-5\" id=\"safety-risk-tool\">\n  <div class=\"p-4 border rounded-4 bg-light\">\n    <p class=\"text-muted mb-4\">\n      Compila i campi per ottenere il punteggio e il livello di rischio (Basso \/ Medio \/ Elevato) e la tabella riepilogativa\n      con risorse minime e documentazione richiesta all\u2019organizzatore.\n      <br><strong>Soglie:<\/strong> &lt; 15 Basso \u2014 15\u201330 Medio \u2014 &gt; 30 Elevato. <strong>Affollamento &gt; 10.000:<\/strong> rischio automaticamente <strong>ELEVATO<\/strong>.\n    <\/p>\n\n    <!-- FORM -->\n    <form class=\"row g-4\" onsubmit=\"return false;\">\n      <!-- ===================== A) VARIABILI LEGATE ALL\u2019EVENTO ===================== -->\n      <div class=\"col-12\">\n        <h4 class=\"mb-2\">A) Variabili legate all\u2019evento<\/h4>\n        <p class=\"text-muted mb-0\">Seleziona le opzioni applicabili. Alcune voci consentono pi\u00f9 scelte.<\/p>\n      <\/div>\n\n      <!-- Periodicit\u00e0 -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Periodicit\u00e0 dell\u2019evento<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_periodicita\">\n          <option value=\"1\">Annualmente (1)<\/option>\n          <option value=\"2\">Mensilmente (2)<\/option>\n          <option value=\"3\">Tutti i giorni (3)<\/option>\n          <option value=\"4\">Occasionalmente \/ all\u2019improvviso (4)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- Tipologia -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Tipologia dell\u2019evento<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_tipologia\">\n          <option value=\"1\">Religioso (1)<\/option>\n          <option value=\"1\">Sportivo (1)<\/option>\n          <option value=\"2\">Intrattenimento (2)<\/option>\n          <option value=\"4\">Politico, sociale (4)<\/option>\n          <option value=\"4\">Concerto pop\/rock (4)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- Altre variabili -->\n      <div class=\"col-12\">\n        <label class=\"form-label fw-semibold\">Altre variabili (seleziona quelle presenti)<\/label>\n\n        <!-- wrapper per evitare sovrapposizioni -->\n        <div class=\"sr-checkgrid\">\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_alcol\" data-points=\"1\">\n            <span>Prevista vendita\/consumo di alcol (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_droghe\" data-points=\"1\">\n            <span>Possibile consumo di droghe (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_fragili\" data-points=\"1\">\n            <span>Presenza categorie deboli (bambini\/anziani\/disabili) (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_media\" data-points=\"1\">\n            <span>Evento ampiamente pubblicizzato dai media (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_figure\" data-points=\"1\">\n            <span>Presenza figure politiche\/religiose (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_viabilita\" data-points=\"1\">\n            <span>Possibili difficolt\u00e0 nella viabilit\u00e0 (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_tensioni\" data-points=\"1\">\n            <span>Presenza tensioni socio-politiche (+1)<\/span>\n          <\/label>\n        <\/div>\n      <\/div>\n\n      <!-- Durata -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Durata (incl. tempi ingresso\/uscita)<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_durata\">\n          <option value=\"1\">&lt; 12 ore (1)<\/option>\n          <option value=\"2\">Da 12h a 3 giorni (2)<\/option>\n          <option value=\"3\">&gt; 3 giorni (3)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- Luogo (multi) -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Luogo (seleziona le voci applicabili)<\/label>\n\n        <div class=\"sr-checkgrid\">\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_citta\" data-points=\"1\">\n            <span>In citt\u00e0 (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_periferia\" data-points=\"2\">\n            <span>In periferia\/paesi\/piccoli centri (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_acqua\" data-points=\"2\">\n            <span>In ambiente acquatico (lago\/fiume\/mare\/piscina) (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_altro\" data-points=\"2\">\n            <span>Altro (montano\/impervio\/rurale) (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_aperto\" data-points=\"2\">\n            <span>All\u2019aperto (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_localizzato\" data-points=\"1\">\n            <span>Localizzato e ben definito (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_esteso\" data-points=\"2\">\n            <span>Esteso &gt; campo di calcio (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_no_rec\" data-points=\"1\">\n            <span>Non delimitato da recinzioni (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_rec\" data-points=\"2\">\n            <span>Delimitato da recinzioni (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_scale\" data-points=\"2\">\n            <span>Presenza scale in entrata\/uscita (+2)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_rec_temp\" data-points=\"3\">\n            <span>Recinzioni temporanee (+3)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_palco\" data-points=\"3\">\n            <span>Ponteggio\/palco\/coperture temporanee (+3)<\/span>\n          <\/label>\n        <\/div>\n      <\/div>\n\n      <!-- Logistica -->\n      <div class=\"col-12\">\n        <label class=\"form-label fw-semibold\">Logistica dell\u2019area (seleziona le voci applicabili)<\/label>\n\n        <div class=\"sr-checkgrid\">\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_wc\" data-points=\"-1\">\n            <span>Servizi igienici disponibili (\u22121)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_h2o\" data-points=\"-1\">\n            <span>Disponibilit\u00e0 acqua (\u22121)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_ristoro\" data-points=\"-1\">\n            <span>Punto di ristoro (\u22121)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_vvf_diffic\" data-points=\"1\">\n            <span>Difficoltosa accessibilit\u00e0 mezzi soccorso\/VVF (+1)<\/span>\n          <\/label>\n\n          <label class=\"sr-checkitem\">\n            <input class=\"form-check-input sr_chk\" type=\"checkbox\" id=\"sr_vvf_buona\" data-points=\"-1\">\n            <span>Buona accessibilit\u00e0 mezzi soccorso\/VVF (\u22121)<\/span>\n          <\/label>\n        <\/div>\n      <\/div>\n\n      <hr class=\"my-2\">\n\n      <!-- ===================== B) VARIABILI LEGATE AL PUBBLICO ===================== -->\n      <div class=\"col-12\">\n        <h4 class=\"mb-2\">B) Variabili legate al pubblico<\/h4>\n      <\/div>\n\n      <!-- Stima partecipanti -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Stima dei partecipanti<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_partecipanti\">\n          <option value=\"1\" data-n=\"200\">0 \u2013 200 (1)<\/option>\n          <option value=\"3\" data-n=\"1000\">201 \u2013 1000 (3)<\/option>\n          <option value=\"7\" data-n=\"5000\">1001 \u2013 5000 (7)<\/option>\n          <option value=\"10\" data-n=\"10000\">5001 \u2013 10000 (10)<\/option>\n          <option value=\"0\" data-n=\"10001\">&gt; 10000 (sempre rischio elevato)<\/option>\n        <\/select>\n        <div class=\"form-text\">Selezionando \u201c&gt; 10.000\u201d il sistema forzer\u00e0 <strong>Rischio Elevato<\/strong>.<\/div>\n      <\/div>\n\n      <!-- Et\u00e0 media -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Et\u00e0 media dei partecipanti<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_eta\">\n          <option value=\"1\">25 \u2013 65 (1)<\/option>\n          <option value=\"2\">&lt; 25 oppure &gt; 65 (2)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- Densit\u00e0 -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Densit\u00e0 partecipanti (persone\/mq)<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_densita\">\n          <option value=\"-1\">Bassa (&lt; 0,7) (\u22121)<\/option>\n          <option value=\"2\">Medio-bassa (0,7 \u2013 1,2) (+2)<\/option>\n          <option value=\"2\">Medio-alta (1,2 \u2013 2) (+2)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- Condizione -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Condizione dei partecipanti<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_condizione\">\n          <option value=\"1\">Rilassato (1)<\/option>\n          <option value=\"2\">Eccitato (2)<\/option>\n          <option value=\"3\">Aggressivo (3)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- Posizione -->\n      <div class=\"col-12 col-lg-6\">\n        <label class=\"form-label fw-semibold\">Posizione dei partecipanti<\/label>\n        <select class=\"form-select sr_sel\" id=\"sr_posizione\">\n          <option value=\"1\">Seduti (1)<\/option>\n          <option value=\"2\">In parte seduti (2)<\/option>\n          <option value=\"3\">In piedi (3)<\/option>\n        <\/select>\n      <\/div>\n\n      <!-- AZIONI -->\n      <div class=\"col-12\">\n        <div class=\"d-flex flex-wrap gap-2\">\n          <button type=\"button\" class=\"btn btn-primary\" id=\"sr_calcBtn\">Calcola<\/button>\n          <button type=\"button\" class=\"btn btn-outline-secondary\" id=\"sr_resetBtn\">Reset<\/button>\n        <\/div>\n\n        <!-- RISULTATO SOTTO AL CALCOLA -->\n        <div class=\"mt-3\">\n          <div class=\"p-3 border rounded-4 bg-white\">\n            <div class=\"d-flex flex-wrap align-items-center justify-content-between gap-3\">\n              <div>\n                <div class=\"fw-semibold\">Punteggio totale<\/div>\n                <div class=\"display-6 m-0\" id=\"sr_total\">0<\/div>\n                <div class=\"small text-muted\" id=\"sr_breakdown\">Subtotale A: 0 \u2014 Subtotale B: 0<\/div>\n              <\/div>\n              <div>\n                <div class=\"fw-semibold\">Livello di rischio<\/div>\n                <div class=\"fs-3 fw-bold\" id=\"sr_level\">\u2014<\/div>\n                <div class=\"small\" id=\"sr_note\"><\/div>\n              <\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n        <!-- \/RISULTATO -->\n      <\/div>\n    <\/form>\n\n    <!-- ===================== TABELLA RIEPILOGATIVA ===================== -->\n    <div class=\"mt-5\">\n      <h3 class=\"mb-2\">Tabella riepilogativa risorse, obblighi e documentazione<\/h3>\n      <p class=\"text-muted mb-3\">\n        Quadro sintetico \u201cminimo\u201d in funzione del rischio individuato (da rimodulare secondo prescrizioni delle Autorit\u00e0 competenti).\n      <\/p>\n\n      <div class=\"table-responsive\">\n        <table class=\"table table-bordered align-middle bg-white\">\n          <thead class=\"table-dark\">\n            <tr>\n              <th style=\"width: 28%;\">Voce<\/th>\n              <th>Prescrizioni minime (in base al rischio)<\/th>\n            <\/tr>\n          <\/thead>\n          <tbody id=\"sr_summary\">\n            <tr>\n              <td colspan=\"2\" class=\"text-muted text-center\">Calcola il punteggio per visualizzare la tabella riepilogativa.<\/td>\n            <\/tr>\n          <\/tbody>\n        <\/table>\n      <\/div>\n\n      <div class=\"small text-muted\">\n        Nota: per eventi complessi, \u201cSecurity\u201d (ordine pubblico) e assetto sanitario sono sempre soggetti a valutazione\/integrazione da parte di Prefettura\/Questura\/118.\n      <\/div>\n    <\/div>\n\n  <\/div>\n<\/section>\n\n<style>\n  #safety-risk-tool .rounded-4 { border-radius: 1rem; }\n  #safety-risk-tool .display-6 { line-height: 1; }\n\n  \/* Migliora impaginazione checkbox: niente sovrapposizioni, niente overflow *\/\n  #safety-risk-tool .sr-checkgrid{\n    display: grid;\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    gap: .5rem .75rem;\n  }\n  @media (min-width: 992px){\n    #safety-risk-tool .sr-checkgrid{\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n    }\n  }\n  #safety-risk-tool .sr-checkitem{\n    display: flex;\n    align-items: flex-start;\n    gap: .5rem;\n    padding: .5rem .6rem;\n    border: 1px solid rgba(0,0,0,.1);\n    border-radius: .75rem;\n    background: #fff;\n    cursor: pointer;\n    margin: 0;\n    line-height: 1.25;\n  }\n  #safety-risk-tool .sr-checkitem input{\n    margin-top: .15rem;\n    flex: 0 0 auto;\n  }\n  #safety-risk-tool .sr-checkitem span{\n    display: block;\n    min-width: 0;\n    word-break: break-word;\n  }\n<\/style>\n\n<script>\n(function(){\n  const $ = (id) => document.getElementById(id);\n\n  const sumChecks = () => {\n    let s = 0;\n    document.querySelectorAll('#safety-risk-tool .sr_chk:checked').forEach(chk => {\n      s += parseInt(chk.getAttribute('data-points') || '0', 10);\n    });\n    return s;\n  };\n\n  const getInt = (id) => parseInt($(id).value, 10) || 0;\n\n  function badge(text, cls){\n    return '<span class=\"badge ' + cls + '\">' + text + '<\/span>';\n  }\n\n  function li(t){ return '<li>' + t + '<\/li>'; }\n  function ul(items){ return '<ul class=\"mb-0\">' + items.join('') + '<\/ul>'; }\n\n  function buildSummary(level, nPresenze, total, A, B, forcedHigh){\n    let sanitari = '';\n    let mezzi = '';\n    let steward = '';\n    let obblighi = [];\n    let docs = [];\n\n    const commonObblighi = [\n      \"Nomina del referente dell\u2019organizzazione (Responsabile Evento) e del Coordinatore Safety con recapiti disponibili.\",\n      \"Definizione capienza\/affollamento massimo e modalit\u00e0 di controllo dei flussi.\",\n      \"Mantenimento costante di vie di fuga e accessi ai mezzi di soccorso liberi; gestione ostacoli e barriere.\",\n      \"Procedure di comunicazione per emergenza (messaggi, catena di comando, numeri utili).\"\n    ];\n\n    const commonDocs = [\n      \"Scheda evento (dati organizzatore, luogo, data\/ora, tipologia, affollamento stimato).\",\n      \"Valutazione rischio (punteggio, motivazioni, misure di mitigazione).\",\n      \"Planimetria (layout area, varchi, vie di fuga, aree sensibili, accesso soccorsi).\"\n    ];\n\n    if (level === 'BASSO'){\n      sanitari = \"Almeno n. 1 addetto formato al primo soccorso (D.M. 388\/03) e presidio cassetta di primo soccorso.\";\n      mezzi = \"Ambulanza dedicata non obbligatoria. Garantire accessibilit\u00e0 ai mezzi di emergenza esterni.\";\n      steward = \"Presenza di un referente Safety dell\u2019organizzazione; eventuali addetti di supporto per varchi\/affollamento.\";\n\n      obblighi = commonObblighi.concat([\n        \"Segnaletica minima di sicurezza (uscite, divieti, aree interdette) ove pertinente.\",\n        \"Briefing iniziale agli operatori coinvolti (organizzazione, volontari, steward).\"\n      ]);\n\n      docs = commonDocs.concat([\n        \"Elenco nominativi\/ruoli del personale impiegato (anche volontari) e recapiti.\",\n        \"Dichiarazione di rispetto delle condizioni di sicurezza (vie di fuga, accessi soccorsi).\"\n      ]);\n    }\n\n    if (level === 'MEDIO'){\n      sanitari = \"Almeno n. 2 operatori sanitari\/soccorritori con presidio continuativo per tutta la durata dell\u2019evento (secondo indicazioni 118).\";\n      mezzi = \"n. 1 Ambulanza di base (MSB) con equipaggio dedicato (posizionata in area accessibile).\";\n      steward = \"Addetti al controllo flussi e presidio varchi\/aree sensibili con Coordinatore Safety nominato.\";\n\n      obblighi = commonObblighi.concat([\n        \"Gestione accessi e deflussi con percorsi preferibilmente separati e presidiati.\",\n        \"Individuazione aree di ammassamento e punti informazione\/assistenza (incluso supporto a categorie fragili).\",\n        \"Verifica preventiva logistica (illuminazione, ostacoli, caditoie, eventuali strutture temporanee).\"\n      ]);\n\n      docs = commonDocs.concat([\n        \"Piano Safety (relazione sintetica + misure di mitigazione).\",\n        \"Piano emergenza\/evacuazione (scenari essenziali, ruoli, comunicazioni).\",\n        \"Elenco risorse sanitarie (operatori, mezzi, orari, punto di stazionamento).\",\n        \"Dichiarazioni di conformit\u00e0 per eventuali strutture temporanee\/impianti (se presenti).\"\n      ]);\n    }\n\n    if (level === 'ELEVATO'){\n      sanitari = \"Minimo n. 4 operatori sanitari (incrementabili in funzione dell\u2019affollamento e della complessit\u00e0). Possibile presenza di medico se richiesto dal 118\/Autorit\u00e0.\";\n      mezzi = \"Almeno n. 1 Ambulanza MSB + ulteriori mezzi in funzione delle presenze\/criticit\u00e0 (es. 1 ambulanza aggiuntiva ogni 5.000 partecipanti, secondo prescrizioni 118).\";\n      steward = \"Squadre di steward\/addetti safety suddivise per settori con coordinatore e vice; presidio continuo di varchi, transenne, corridoi e aree sensibili.\";\n\n      obblighi = commonObblighi.concat([\n        \"Suddivisione dell\u2019area in settori con varchi controllati; corridoi di penetrazione e vie di fuga dimensionate e presidiate.\",\n        \"Centro di coordinamento (punto comando) e comunicazioni dedicate (radio\/telefonia) per safety.\",\n        \"Integrazione Safety & Security con misure di ordine pubblico (secondo prescrizioni Prefettura\/Questura).\",\n        \"Piano sanitario dedicato e gestione triage\/assistenza, se richiesto.\"\n      ]);\n\n      docs = commonDocs.concat([\n        \"Piano Safety & Security integrato (relazione + allegati tecnici).\",\n        \"Piano sanitario (risorse, mezzi, postazioni, triage, procedure) secondo 118.\",\n        \"Piano emergenza\/evacuazione strutturato (scenari, tempi, aree raccolta, assistenza disabili).\",\n        \"Planimetrie tecniche complete (settori, varchi, transennamenti, corridoi, mezzi soccorso, presidi).\",\n        \"Dichiarazioni\/conformit\u00e0 e asseverazioni per strutture temporanee, palchi, impianti elettrici, carichi sospesi (se presenti).\",\n        \"Elenco nominativo operatori con turnazioni e mansioni (steward\/safety\/sanitari).\"\n      ]);\n    }\n\n    const notePresenze = forcedHigh ? (\"<div class='mt-2'>\" + badge(\"Affollamento > 10.000: rischio ELEVATO\", \"text-bg-danger\") + \"<\/div>\") : \"\";\n\n    const header =\n      \"<div class='d-flex flex-wrap gap-2 align-items-center mb-2'>\" +\n      badge(\"Totale: \" + total, \"text-bg-secondary\") +\n      badge(\"A: \" + A, \"text-bg-light text-dark\") +\n      badge(\"B: \" + B, \"text-bg-light text-dark\") +\n      badge(\"Presenze (classe): \" + (nPresenze >= 10001 ? \"> 10.000\" : (nPresenze || \"\u2014\")), \"text-bg-light text-dark\") +\n      \"<\/div>\" + notePresenze;\n\n    const rows = [\n      \"<tr><td><strong>Operatori sanitari<\/strong><\/td><td>\" + sanitari + \"<\/td><\/tr>\",\n      \"<tr><td><strong>Mezzi di soccorso<\/strong><\/td><td>\" + mezzi + \"<\/td><\/tr>\",\n      \"<tr><td><strong>Operatori Safety \/ Steward<\/strong><\/td><td>\" + steward + \"<\/td><\/tr>\",\n      \"<tr><td><strong>Obblighi organizzativi<\/strong><\/td><td>\" + ul(obblighi.map(li)) + \"<\/td><\/tr>\",\n      \"<tr><td><strong>Documentazione da produrre<\/strong><\/td><td>\" + ul(docs.map(li)) + \"<\/td><\/tr>\"\n    ];\n\n    return \"<tr><td colspan='2'>\" + header + \"<\/td><\/tr>\" + rows.join(\"\");\n  }\n\n  const compute = () => {\n    const A = getInt('sr_periodicita') +\n              getInt('sr_tipologia') +\n              getInt('sr_durata') +\n              sumChecks();\n\n    const B = getInt('sr_partecipanti') +\n              getInt('sr_eta') +\n              getInt('sr_densita') +\n              getInt('sr_condizione') +\n              getInt('sr_posizione');\n\n    const total = A + B;\n\n    const sel = $('sr_partecipanti').selectedOptions[0];\n    const nPresenze = parseInt(sel.getAttribute('data-n') || '0', 10);\n    const forcedHigh = (nPresenze >= 10001);\n\n    let level = 'BASSO';\n    if (total >= 15 && total <= 30) level = 'MEDIO';\n    if (total > 30) level = 'ELEVATO';\n    if (forcedHigh) level = 'ELEVATO';\n\n    $('sr_total').textContent = String(total);\n    $('sr_breakdown').textContent = `Subtotale A: ${A} \u2014 Subtotale B: ${B}`;\n\n    $('sr_level').textContent = level;\n    $('sr_level').className = 'fs-3 fw-bold ' + (\n      level === 'BASSO' ? 'text-success' :\n      level === 'MEDIO' ? 'text-warning' : 'text-danger'\n    );\n\n    $('sr_note').textContent = forcedHigh ? 'Affollamento > 10.000 presenze: rischio automaticamente ELEVATO.' : '';\n\n    $('sr_summary').innerHTML = buildSummary(level, nPresenze, total, A, B, forcedHigh);\n  };\n\n  const resetAll = () => {\n    ['sr_periodicita','sr_tipologia','sr_durata','sr_partecipanti','sr_eta','sr_densita','sr_condizione','sr_posizione']\n      .forEach(id => { if ($(id)) $(id).selectedIndex = 0; });\n\n    document.querySelectorAll('#safety-risk-tool .sr_chk').forEach(chk => chk.checked = false);\n\n    $('sr_total').textContent = '0';\n    $('sr_breakdown').textContent = 'Subtotale A: 0 \u2014 Subtotale B: 0';\n    $('sr_level').textContent = '\u2014';\n    $('sr_level').className = 'fs-3 fw-bold';\n    $('sr_note').textContent = '';\n    $('sr_summary').innerHTML = \"<tr><td colspan='2' class='text-muted text-center'>Calcola il punteggio per visualizzare la tabella riepilogativa.<\/td><\/tr>\";\n  };\n\n  $('sr_calcBtn').addEventListener('click', compute);\n  $('sr_resetBtn').addEventListener('click', resetAll);\n\n  document.querySelectorAll('#safety-risk-tool select, #safety-risk-tool input[type=\"checkbox\"]').forEach(el => {\n    el.addEventListener('change', compute);\n  });\n\n})();\n<\/script>\n\n","protected":false},"excerpt":{"rendered":"<p>Compila i campi per ottenere il punteggio e il livello di rischio (Basso \/ Medio \/ Elevato) e la tabella riepilogativa con risorse minime e &#8230; <\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-269","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/pages\/269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/comments?post=269"}],"version-history":[{"count":6,"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/pages\/269\/revisions"}],"predecessor-version":[{"id":277,"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/pages\/269\/revisions\/277"}],"wp:attachment":[{"href":"https:\/\/www.comunedicaivano.it\/servizidigitali\/wp-json\/wp\/v2\/media?parent=269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}