1/** 2 * tec-dvr-indice-pacchetto.js â v20.373.116 3 * 4 * ââ PERCHà âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 5 * Il committente: «il TecDVR genera il DVR ed i suoi allegati: verifica che quegli allegati 6 * (sono nel file zippato generato assieme al dvr) lo contengano». 7 * 8 * Verificato: il pacchetto contiene undici documenti â DVR, VRI, PEE, Fascicolo delle Valutazioni 9 * Specifiche, DUVRI, Allegati 5-10, Istruzioni di Sicurezza, Modulo Ricevimento, Schede di 10 * Sorveglianza Sanitaria, Informativa Visitatori, Organigramma della Sicurezza. 11 * 12 * MA IL DVR NON LO DICE. Il suo Quadro Sinottico, sotto «VALUTAZIONI ALLEGATE AL DVR», elenca 13 * soltanto i documenti che il tecnico ha registrato a mano nella Tab 10B â per GMR tre voci, con 14 * date del 2024 e del 2025 â e non nomina nessuno dei dieci documenti prodotti nello stesso 15 * istante. Chi legge il DVR non può sapere che cosa contiene il pacchetto che ha in mano. 16 * 17 * ââ LA REGOLA ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 18 * L'INDICE DEGLI ALLEGATI LO DICHIARA IL PACCHETTO, NON UNA LISTA COMPILATA A MANO. 19 * E le valutazioni obbligatorie per legge che risultano prive di dati devono EMERGERE â nel tool 20 * prima della generazione, e nel documento se il tecnico genera lo stesso. 21 * 22 * ââ UN SOLO PROPRIETARIO âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 23 * Questo modulo è l'unico posto che sa che cosa contiene un pacchetto DVR. Lo consultano il 24 * generatore del pacchetto (che cosa costruire) e il DVR (che cosa dichiarare): se divergessero, 25 * il documento tornerebbe a mentire sul proprio contenuto. 26 */ 27(function (win) { 28 'use strict'; 29 if (typeof win === 'undefined') return; 30 31 var VERSION = '20.373.198'; 32 33 /** 34 * I documenti che il pacchetto produce sempre, nell'ordine in cui li numera. 35 * `id` coincide con il prefisso numerico usato dal generatore del pacchetto. 36 */ 37 var DOCUMENTI = [ 38 { n: 'â', id: 'dvr', label: 'Relazione di valutazione dei rischi (documento presente)', norma: 'art. 28 D.Lgs. 81/08' }, 39 { n: '01', id: 'vri', label: 'Valutazione del Rischio Incendio (VRI)', norma: 'art. 46 D.Lgs. 81/08 · D.M. 03/09/2021' }, 40 { n: '02', id: 'pee', label: 'Piano di Emergenza ed Evacuazione (PEE)', norma: 'art. 43 c.1 lett. e-bis · D.M. 02/09/2021' }, 41 { n: '03', id: 'fascicolo', label: 'Fascicolo delle Valutazioni Specifiche', norma: 'art. 28 c.2 lett. a D.Lgs. 81/08' }, 42 { n: '04', id: 'duvri', label: 'DUVRI â rischi da interferenze', norma: 'art. 26 c.3 D.Lgs. 81/08' }, 43 { n: '05', id: 'raccolta', label: 'Allegati 5-10 (DPI, schede rischi, informativa, verbali)', norma: 'artt. 36-37 · 77 D.Lgs. 81/08' }, 44 { n: '06', id: 'istruzioni', label: 'Istruzioni di Sicurezza ai Lavoratori', norma: 'art. 36 D.Lgs. 81/08' }, 45 { n: '07', id: 'ricevimento', label: 'Modulo Ricevimento Istruzioni e DPI', norma: 'art. 78 D.Lgs. 81/08' }, 46 { n: '08', id: 'schedess', label: 'Schede Sorveglianza Sanitaria', norma: 'artt. 41-42 D.Lgs. 81/08' }, 47 { n: '09', id: 'visitatori', label: 'Informativa Visitatori', norma: 'art. 26 c.1 lett. b D.Lgs. 81/08' }, 48 { n: '10', id: 'organigramma', label: 'Organigramma della Sicurezza', norma: 'artt. 17-18 · 31 D.Lgs. 81/08' }, 49 // v20.373.136 â l'allegato 11 usciva nel pacchetto e l'indice non lo nominava: un documento 50 // consegnato che l'indice non elenca fa dubitare che l'indice sia completo, ed e' esattamente 51 // l'affermazione indifendibile che questo file esiste per evitare. 52 // E' un ALLEGATO AGGIUNTIVO: non e' parte del DVR ex art. 28, e la sua riga lo dichiara. 53 // v20.373.142 â «Cui prodest?». L'allegato 11 era una PAGELLA DEL CONSULENTE: nove indicatori 54 // che misurano quanto bene il programma e' stato formalizzato. Al datore di lavoro non serviva, 55 // e al consulente faceva danno. Adesso e' il PIANO OPERATIVO: le stesse misure ordinate per 56 // scadenza, con chi vi deve provvedere e che cosa serve per considerarle chiuse. 57 { n: '11', id: 'executive', label: 'Piano Operativo delle Azioni di Miglioramento (allegato operativo, non parte del DVR)', 58 norma: 'art. 28 c.2 lett. c e d · art. 15 c.1 · ISO 45001 §8.1.2 e §10.2' }, 59 // v20.373.146 â IL PROFILO DI RISCHIO, FOGLIO AUTOPORTANTE E OPZIONALE. 60 // Richiesta del committente: «l'allegato 12 deve poter uscire anche da solo, staccato dal 61 // pacchetto, come una pagina da lasciare al datore dopo il sopralluogo» â e un interruttore 62 // ON/OFF nel Dashboard per deciderlo. Percio' e' l'unica riga dell'indice CONDIZIONATA: se 63 // il tecnico non lo attiva, il documento non nasce e l'indice non lo nomina. Un indice che 64 // elenca un documento assente e' lo stesso difetto, rovesciato, del documento consegnato che 65 // l'indice non elenca (v20.373.136). 66 { n: '12', id: 'profilo', opzionale: true, 67 label: 'Profilo di Rischio della Sede (foglio autoportante, non parte del DVR)', 68 norma: 'art. 28 c.2 lett. a e d · art. 15 c.1 D.Lgs. 81/08' } 69 ]; 70 71 /** L'interruttore. Il default e' SPENTO: un allegato che nasce sempre finisce per essere 72 * ignorato sempre, e questo foglio ha senso quando il tecnico decide di lasciarlo. */ 73 function profiloAttivo(d) { 74 return !!(d && d.allegatoProfiloRischio === true); 75 } 76 77 78 /** Righe pronte per il Quadro Sinottico del DVR. */ 79 function righeIndice(d) { 80 return DOCUMENTI.filter(function (x) {
81 // un documento opzionale entra nell'indice solo se esce davvero nel pacchetto 82 if (!x.opzionale) return true; 83 if (x.id === 'profilo') return profiloAttivo(d); 84 return false; 85 }).map(function (x) { 86 return [(x.n === 'â' ? '' : x.n + ' â ') + x.label, x.norma]; 87 }); 88 } 89 90 /** 91 * Le valutazioni obbligatorie per legge e il loro stato reale. 92 * @returns {{obbligatorie:Array, mancanti:Array, presenti:Array}} 93 * mancanti = obbligatorie per norma su cui il progetto non porta alcun dato. 94 */ 95 function statoValutazioniObbligatorie(d) { 96 var VS = win._tecValutazioniSpecifiche; 97 if (!VS || typeof VS.report !== 'function') return { obbligatorie: [], mancanti: [], presenti: [] }; 98 var rep = []; 99 try { rep = VS.report(d) || []; } catch (_e) { rep = []; } 100 var obb = rep.filter(function (r) { return r.obbligo; }); 101 return { 102 obbligatorie: obb, 103 mancanti: obb.filter(function (r) { return r.stato === 'da_completare'; }), 104 presenti: obb.filter(function (r) { return r.stato !== 'da_completare'; }) 105 }; 106 } 107 108 /** 109 * La clausola che il DVR deve portare quando viene emesso con valutazioni obbligatorie 110 * incomplete. Non serve a scusare l'omissione: serve a DICHIARARLA, che è l'unica cosa che 111 * riduce davvero il rischio. Un documento che tace su ciò che manca afferma implicitamente 112 * che non manca nulla â ed è quella, davanti a un organo di vigilanza, l'affermazione 113 * indifendibile (art. 28 c.2 lett. a; art. 29 c.1 D.Lgs. 81/08). 114 */ 115 /** 116 * v20.373.118 â LA CLAUSOLA CHE INQUADRA LE MISURE PROGRAMMATE. 117 * 118 * Il committente: «nel pacchetto DVR occorre trovare una formula, in legalese, che protegga il 119 * DL». La formula protettiva non è una excusatio: è la qualificazione giuridica corretta di ciò 120 * che il documento contiene. Un intervento inserito nel programma di miglioramento NON è 121 * un'ammissione di inadempimento â è l'adempimento stesso dell'art. 28 c.2 lett. c), che quel 122 * programma lo pretende. Dirlo esplicitamente toglie ogni appiglio a una lettura diversa. 123 */ 124 /** 125 * v20.373.154 (audit) â LA CLAUSOLA DICE DI QUALE DOCUMENTO PARLA. 126 * La stessa formula usciva in DUE documenti dello stesso pacchetto con numeri diversi: il DVR 127 * contava le misure esportate (4), il Piano Operativo i propri interventi assegnati (0). Non e' 128 * un errore che uno dei due sia diverso â sono due documenti e contano cose diverse â ma 129 * scrivere «Il presente documento» in entrambi lascia al lettore due numeri e nessun modo di 130 * capire perche'. Ora ciascuno si nomina. 131 */ 132 function clausolaMisureProgrammate(n, opts) { 133 n = parseInt(n, 10) || 0; 134 if (!n) return null; 135 var chi = (opts && opts.documento) ? String(opts.documento) : 'Il presente documento'; 136 return 'QUALIFICAZIONE DELLE MISURE DI MIGLIORAMENTO PROGRAMMATE â ' 137 + chi + ' riporta ' + n + ' intervent' + (n === 1 ? 'o' : 'i') 138 + ' di miglioramento programmat' + (n === 1 ? 'o' : 'i') + '. ' 139 + 'Tali interventi costituiscono attuazione dell\'obbligo di cui all\'art. 28 c.2 lett. c) del ' 140 + 'D.Lgs. 81/08, che impone al documento di valutazione dei rischi di contenere il programma ' 141 + 'delle misure ritenute opportune per garantire il miglioramento nel tempo dei livelli di ' 142 + 'sicurezza. La loro indicazione non integra, né può essere interpretata come, il ' 143 + 'riconoscimento di un inadempimento agli obblighi di legge da parte del Datore di Lavoro: ' 144 + 'essa attesta, al contrario, che la valutazione dei rischi è stata condotta in modo ' 145 + 'analitico e che le azioni di miglioramento sono state individuate, pianificate e assegnate. ' 146 + 'La valutazione dei rischi è per sua natura dinamica e soggetta ad aggiornamento (art. 29 ' 147 + 'c.3 D.Lgs. 81/08): gli interventi programmati sono monitorati e chiusi con evidenza ' 148 + 'documentale a cura del Datore di Lavoro, con il supporto del Servizio di Prevenzione e ' 149 + 'Protezione. Le risultanze del presente documento sono riferite alla data di emissione e ' 150 + 'allo stato dei luoghi e dell\'organizzazione rilevato in tale data.'; 151 } 152 153 function clausolaValutazioniIncomplete(mancanti) { 154 if (!mancanti || !mancanti.length) return ''; 155 var elenco = mancanti.map(function (r) { return r.titolo + ' (' + r.norma + ')'; }).join('; '); 156 return 'AVVERTENZA SULLA COMPLETEZZA DELLA VALUTAZIONE (art. 28 c. 2 lett. a e art. 29 c. 1 ' 157 + 'D.Lgs. 81/08). Alla data di emissione le seguenti valutazioni, dovute per norma, non ' 158 + 'risultano completate con dati propri della realtà valutata: ' + elenco + '. ' 159 + 'Il presente documento NON attesta lâesito di tali valutazioni e non può essere letto ' 160 + 'come dichiarazione della loro assenza di rilievo: le stesse sono da completare a cura del ' 161 + 'Datore di Lavoro, con il supporto del Servizio di Prevenzione e Protezione e, ove previsto, ' 162 + 'del Medico Competente. Fino al loro completamento la valutazione dei rischi è da ' 163 + 'considerarsi parziale limitatamente ai fattori indicati, e il documento è soggetto a ' 164 + 'rielaborazione ai sensi dellâart. 29 c. 3. Le misure di prevenzione e protezione già ' 165 + 'individuate restano applicabili e cogenti.'; 166 } 167 168 function selfTest() { 169 var e = []; 170 if (DOCUMENTI.length !== 13) e.push('documenti del pacchetto: ' + DOCUMENTI.length + ' invece di 13'); 171 var _a11 = DOCUMENTI.filter(function (x) { return x.id === 'executive'; })[0]; 172 if (!_a11) e.push('l allegato 11 non e nell elenco dei documenti'); 173 // ââ v20.373.146 â L INDICE SEGUE L INTERRUTTORE ââââââââââââââââââââââââââââââââââââââââ 174 // Il profilo di rischio e' opzionale: l'indice deve nominarlo quando esce e TACERLO quando 175 // non esce. Un indice che elenca un documento assente e' il difetto della .136 rovesciato. 176 var fissi = DOCUMENTI.filter(function (x) { return !x.opzionale; }).length; 177 if (righeIndice({}).length !== fissi) e.push('l indice nomina un allegato opzionale che non esce'); 178 if (righeIndice({ allegatoProfiloRischio: true }).length !== fissi + 1) { 179 e.push('l indice non nomina il profilo di rischio quando il tecnico lo attiva'); 180 } 181 if (profiloAttivo({})) e.push('il profilo di rischio nasce anche senza che il tecnico lo chieda'); 182 if (!profiloAttivo({ allegatoProfiloRischio: true })) e.push('l interruttore del profilo di rischio non accende nulla'); 183 if (DOCUMENTI.some(function (x) { return !x.label || !x.norma; })) e.push('documento senza etichetta o senza norma'); 184 if (clausolaValutazioniIncomplete([]) !== '') e.push('clausola emessa senza valutazioni mancanti'); 185 var c = clausolaValutazioniIncomplete([{ titolo: 'X', norma: 'Y' }]); 186 if (!/art\. 28 c\. 2 lett\. a/.test(c) || !/art\. 29 c\. 3/.test(c)) e.push('clausola senza riferimenti normativi'); 187 return { ok: !e.length, errors: e }; 188 } 189 190 win._tecDvrIndicePacchetto = { 191 VERSION: VERSION, profiloAttivo: profiloAttivo, 192 DOCUMENTI: DOCUMENTI, 193 righeIndice: righeIndice, 194 statoValutazioniObbligatorie: statoValutazioniObbligatorie, 195 clausolaValutazioniIncomplete: clausolaValutazioniIncomplete, 196 clausolaMisureProgrammate: clausolaMisureProgrammate, 197 selfTest: selfTest 198 }; 199})(typeof window !== 'undefined' ? window : this);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.