[FEAT] Rischi: suggerimento probabilità/impatto dallo stato di conformità
Nella modale "Valuta" di un rischio-requisito non ancora valutato, Probabilità e Impatto vengono pre-compilati in base allo stato (conforme→basso 1/2, parziale→ medio 3/3, non conforme→alto 4/4) con nota esplicita "Valori suggeriti … è solo un suggerimento, modificabili". Se già valutato, usa i valori salvati. Idea pre-avallata dal nis2-expert (precompilare l'asse dallo stato = rischio residuo). Solo frontend (risks.html); nessun valore imposto (art.24 non prescrive metodo). version 1.25.8. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
03796978c5
commit
924963444e
+19
-2
@@ -716,15 +716,31 @@
|
||||
return o;
|
||||
}
|
||||
|
||||
// Suggerimento (NON obbligo) di probabilità/impatto dallo stato di conformità:
|
||||
// un requisito conforme ha rischio residuo basso, uno non conforme più alto.
|
||||
// È solo un valore pre-compilato che l'utente può modificare (avallato nis2-expert).
|
||||
function suggestScores(stato) {
|
||||
switch (stato) {
|
||||
case 'conforme': return { l: 1, i: 2 };
|
||||
case 'parziale': return { l: 3, i: 3 };
|
||||
case 'non_conforme': return { l: 4, i: 4 };
|
||||
case 'non_applicabile': return { l: 1, i: 1 };
|
||||
default: return { l: 3, i: 3 }; // da_valutare
|
||||
}
|
||||
}
|
||||
|
||||
function openEvaluateModal(requisitoId) {
|
||||
if (!canEvaluate) return;
|
||||
const r = (derivedData || []).find(x => String(x.requisito_id) === String(requisitoId));
|
||||
if (!r) { showNotification('Rischio non trovato', 'error'); return; }
|
||||
|
||||
const curL = (r.likelihood >= 1 && r.likelihood <= 5) ? parseInt(r.likelihood) : 3;
|
||||
const curI = (r.impact >= 1 && r.impact <= 5) ? parseInt(r.impact) : 3;
|
||||
const curStato = r.stato || 'da_valutare';
|
||||
const curNote = r.valutazione_rischio || '';
|
||||
// Già valutato? uso i valori salvati; altrimenti pre-compilo un SUGGERIMENTO dallo stato.
|
||||
const evaluated = (r.likelihood >= 1 && r.likelihood <= 5) && (r.impact >= 1 && r.impact <= 5);
|
||||
const sug = suggestScores(curStato);
|
||||
const curL = evaluated ? parseInt(r.likelihood) : sug.l;
|
||||
const curI = evaluated ? parseInt(r.impact) : sug.i;
|
||||
const statoOpts = DERIVED_STATUS_OPTIONS.map(([v, l]) =>
|
||||
`<option value="${v}" ${v === curStato ? 'selected' : ''}>${escapeHtml(l)}</option>`).join('');
|
||||
|
||||
@@ -750,6 +766,7 @@
|
||||
<div style="font-size:0.72rem;color:var(--gray-500);margin-top:4px;">Impatto della non conformità o del conseguente incidente.</div>
|
||||
</div>
|
||||
</div>
|
||||
${!evaluated ? `<p style="font-size:0.78rem;color:#0e7a4a;background:#eefbf3;border:1px solid #bfe8cf;border-radius:8px;padding:9px 11px;margin:0 0 14px;line-height:1.5;">💡 <b>Valori suggeriti</b> in base allo stato di conformità (conforme → basso, parziale → medio, non conforme → alto). È solo un <b>suggerimento</b>: modificali pure liberamente.</p>` : ''}
|
||||
<div class="form-group">
|
||||
<label for="eval-note" class="form-label">Valutazione del rischio <span style="color:var(--gray-400);font-size:0.75rem;font-weight:400;">(opzionale)</span></label>
|
||||
<textarea class="form-textarea" id="eval-note" rows="3" placeholder="Note sulla valutazione del rischio">${escapeHtml(curNote)}</textarea>
|
||||
|
||||
Reference in New Issue
Block a user