diff --git a/application/controllers/AiController.php b/application/controllers/AiController.php
index d00f734..d54ba95 100644
--- a/application/controllers/AiController.php
+++ b/application/controllers/AiController.php
@@ -42,11 +42,16 @@ class AiController extends BaseController
// Pagina corrente (facoltativa) inviata dal frontend, per dare ad ARIA
// contesto sulla schermata da cui l'utente sta scrivendo (ticket #424).
$page = mb_substr(trim((string) $this->getParam('page', '')), 0, 120);
+ // pageId canonico + testo dell'help "?" della pagina (allineamento ARIA↔Help).
+ $pageId = mb_substr(trim((string) $this->getParam('page_id', '')), 0, 40);
+ $pageHelp = mb_substr(trim((string) $this->getParam('page_help', '')), 0, 2500);
$userContext = [
'user_id' => $userId,
'organization_id' => $this->getCurrentOrgId(), // può essere null
'consulting_firm_id' => $user['consulting_firm_id'] ?? null,
'page' => $page,
+ 'page_id' => $pageId,
+ 'page_help' => $pageHelp,
];
try {
diff --git a/application/services/AIService.php b/application/services/AIService.php
index 552f76e..caca338 100644
--- a/application/services/AIService.php
+++ b/application/services/AIService.php
@@ -759,18 +759,30 @@ PROMPT;
// Pagina corrente dell'utente (se inviata dal frontend): aiuta ARIA a
// dare indicazioni contestuali invece di rimandare a moduli a caso.
- $page = trim((string) ($userContext['page'] ?? ''));
- if ($page !== '') {
+ $page = trim((string) ($userContext['page'] ?? ''));
+ $pageId = trim((string) ($userContext['page_id'] ?? ''));
+ if ($page !== '' || $pageId !== '') {
$systemPrompt .= "\n## CONTESTO UTENTE\n"
- . "L'utente si trova attualmente nella pagina: \"" . $page . "\". "
+ . "L'utente si trova attualmente nella pagina: \"" . ($page !== '' ? $page : $pageId) . "\""
+ . ($pageId !== '' ? " (id: {$pageId})" : '') . ". "
. "Tieni conto di dove si trova quando dai indicazioni di navigazione.\n";
}
+ // ALLINEAMENTO ARIA ↔ HELP: inietta il testo dell'help contestuale "?" della
+ // pagina corrente (stessa fonte help.js che l'utente vede) così le risposte
+ // sono coerenti con la guida e non divergono. Fonte autorevole per la pagina.
+ $pageHelp = trim((string) ($userContext['page_help'] ?? ''));
+ if ($pageHelp !== '') {
+ $systemPrompt .= "\n## GUIDA CONTESTUALE DELLA PAGINA (stesso testo dell'help «?» che l'utente vede ora)\n"
+ . "Allinea le tue risposte a questa guida: è la fonte ufficiale per la pagina corrente; non contraddirla.\n"
+ . $pageHelp . "\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;
+ $onInventory = $pageId === 'assets' || 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();
}
diff --git a/public/_app-bi-demo.html b/public/_app-bi-demo.html
index 6ee92c0..6c67608 100644
--- a/public/_app-bi-demo.html
+++ b/public/_app-bi-demo.html
@@ -71,7 +71,7 @@
-
+
-
+
diff --git a/public/admin/organizations.html b/public/admin/organizations.html
index 20e34c1..18dd929 100644
--- a/public/admin/organizations.html
+++ b/public/admin/organizations.html
@@ -148,7 +148,7 @@
-
+
diff --git a/public/admin/users.html b/public/admin/users.html
index 77f78dd..4168f72 100644
--- a/public/admin/users.html
+++ b/public/admin/users.html
@@ -170,7 +170,7 @@
-
+
diff --git a/public/architecture.html b/public/architecture.html
index 650a3ee..ace279b 100644
--- a/public/architecture.html
+++ b/public/architecture.html
@@ -1091,11 +1091,11 @@
-
+
-
+
-
+
@@ -167,7 +167,7 @@
-
+
-
+
@@ -374,7 +374,7 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+