fix: el NLU respeta los modulos del perfil

Los menus se filtraban por modulo pero el texto libre no: un perfil limitado a
pluviometria podia escribir "registrar ausentismo" y el NLU lo llevaba igual.
El mismo agujero que ya cerramos con las fincas.

moduloDeFlow() decide por convencion de nombre a que modulo pertenece cada
flow —'modulo' explicito manda— y se aplica en dos puntos: el catalogo que ve
el modelo llega filtrado, y el ruteo verifica igual la clave devuelta por si
el modelo alucina una que no le ofrecieron.

Lo permitido sigue directo: "subir pluviometria" cae en la fecha con un solo
mensaje, "subir labores diarias" arranca el flujo. Cinco casos nuevos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-19 22:39:45 -05:00
co-authored by Claude Sonnet 4.6
parent 9ae4b0dee3
commit 6c524a39ed
4 changed files with 95 additions and 6 deletions
+4 -1
View File
@@ -153,8 +153,11 @@ class AiBot
/** Cola de respuestas para routeOrChat; vacía = chat vacío (cae al fallback). */
public static array $respuestas = [];
public static function routeOrChat(array $company, array $context, string $input): array
public static array $modulosRecibidos = [];
public static function routeOrChat(array $company, array $context, string $input, array $modulosPermitidos = []): array
{
self::$modulosRecibidos = $modulosPermitidos;
return array_shift(self::$respuestas) ?? ['action' => 'chat', 'text' => ''];
}
}