[FIX] ARIA: inietta griglia esatta combo Rilevanza NIS2 nel prompt (ticket #429)

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 <noreply@anthropic.com>
This commit is contained in:
DevEnv nis2-agile
2026-06-24 00:09:24 +02:00
co-authored by Claude Opus 4.8
parent cf23be9c77
commit 08d4ac0cc4
2 changed files with 36 additions and 1 deletions
+35
View File
@@ -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.";
+1 -1
View File
@@ -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."}