From 08d4ac0cc4dbfefcf1cc9468e8755896969a890a Mon Sep 17 00:00:00 2001 From: DevEnv nis2-agile Date: Wed, 24 Jun 2026 00:09:24 +0200 Subject: [PATCH] [FIX] ARIA: inietta griglia esatta combo Rilevanza NIS2 nel prompt (ticket #429) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ARIA (askWithRag) conosceva solo il nome pagina + KB/fonti, non la griglia reale delle tendine della finestra «Valuta Rilevanza NIS2» (AssetScoringService::GRID): dava risposte generiche non corrispondenti alla finestra. Aggiunto relevanceGridBlock() (6 criteri, opzioni, punteggi, desc dalla fonte di verita') iniettato nel system prompt quando l'utente e nell'Inventario o chiede della rilevanza. Additivo, nessun impatto su altri flussi. Co-Authored-By: Claude Opus 4.8 --- application/services/AIService.php | 35 ++++++++++++++++++++++++++++++ public/version.json | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/application/services/AIService.php b/application/services/AIService.php index 8b6da4e..552f76e 100644 --- a/application/services/AIService.php +++ b/application/services/AIService.php @@ -80,6 +80,32 @@ class AIService . "4. Se l'utente cerca una funzione che non corrisponde ad alcuna voce, dillo chiaramente e suggerisci la voce piu' vicina, senza inventarne una.\n"; } + /** + * Griglia ESATTA delle combo della finestra «Valuta Rilevanza NIS2» + * (Inventario asset), generata dalla fonte di verita' AssetScoringService::GRID. + * Iniettata nel system prompt di ARIA cosi' che, quando l'utente chiede del + * significato di una combo/criterio o dei punteggi, ARIA usi i valori REALI + * della finestra invece di inventarne (ticket #429, 2026-06-24: ARIA dava una + * risposta sulle combo "non corrispondente alla finestra"). + */ + private function relevanceGridBlock(): string + { + require_once __DIR__ . '/AssetScoringService.php'; + if (!class_exists('AssetScoringService')) return ''; + + $lines = []; + $lines[] = "\n## RILEVANZA NIS2 — combo della finestra «Valuta Rilevanza NIS2» (Inventario asset)"; + $lines[] = "Questa e' la griglia ESATTA della finestra di valutazione: 6 criteri pesati, punteggio totale 0-100, asset RILEVANTE NIS2 se il totale e' >= " + . AssetScoringService::RELEVANCE_THRESHOLD . " (requisito GV.OC-04). Quando l'utente chiede il significato di una combo, di un'opzione o dei punteggi, usa SOLO queste voci e questi valori, NON inventarne altri."; + foreach (AssetScoringService::GRID as $crit) { + $lines[] = sprintf("\n%s (max %d punti) — %s", $crit['label'], $crit['max'], $crit['help']); + foreach ($crit['options'] as $opt) { + $lines[] = sprintf(" - %s (%d pt): %s", $opt['label'], $opt['points'], $opt['desc']); + } + } + return implode("\n", $lines) . "\n"; + } + /** * Analizza risultati gap analysis e genera raccomandazioni */ @@ -740,6 +766,15 @@ PROMPT; . "Tieni conto di dove si trova quando dai indicazioni di navigazione.\n"; } + // Se l'utente e' nell'Inventario o la domanda riguarda la valutazione di + // rilevanza NIS2, inietta la griglia ESATTA delle combo (fonte di verita' + // AssetScoringService::GRID) per evitare risposte non corrispondenti alla + // finestra reale (ticket #429). + $onInventory = stripos($page, 'asset') !== false || stripos($page, 'inventario') !== false; + if ($onInventory || preg_match('/rilevanz|combo|criticit|punteggio|scoring|valutazione|gv\.?oc/iu', $question)) { + $systemPrompt .= $this->relevanceGridBlock(); + } + if (!empty($contextBlock)) { $systemPrompt .= "\n## Contesto documentale (knowledge base)\n" . $contextBlock . "\n\nQuando rispondi, cita esplicitamente i numeri tra parentesi quadre [1], [2], ... che corrispondono ai documenti del contesto."; diff --git a/public/version.json b/public/version.json index d49682d..174a864 100644 --- a/public/version.json +++ b/public/version.json @@ -1 +1 @@ -{"version": "1.24.10", "build": "2026-06-23-v1.24.10", "date": "2026-06-23", "changelog": "Valuta Rilevanza NIS2 (Inventario) — Ogni voce delle tendine ora mostra anche il suo SIGNIFICATO: scegliendo un'opzione compare sotto la combo una breve spiegazione di cosa indica (es. cosa vuol dire «Critico» per la Criticita Operativa). In piu' la finestra mostra il «Dettaglio punteggio per criterio»: vedi quanti punti hai ottenuto da ciascuna voce e come si compone il totale, anche riaprendo una valutazione gia' salvata. Risolti ticket #431 e #432."} +{"version": "1.24.11", "build": "2026-06-24-v1.24.11", "date": "2026-06-24", "changelog": "Assistente ARIA — Quando chiedi spiegazioni sulle tendine della «Valuta Rilevanza NIS2» (Inventario), ARIA ora conosce la griglia ESATTA della finestra (i 6 criteri, le opzioni e i relativi punteggi) e risponde in modo corrispondente a cio' che vedi, senza piu' descrizioni generiche o non pertinenti. Risolto ticket #429."}