11. Asistente IA
Cubre las 7 tools del chatbot (internal/ai/usecase/tools.go): search_products, create_sale, get_inventory, create_expense, create_customer, get_sales_summary, search_manual. El aislamiento entre empresas de estas tools ya se cubre en 2. Aislamiento multi-tenant (MT-24) — aquí se prueba la calidad de la interpretación del lenguaje natural y el manejo de instrucciones ambiguas o incompletas.
Historial de ejecución
| Ciclo | Fecha | Ejecutado por | Casos ejecutados | Resultado |
|---|---|---|---|---|
| 1 | — | — | — | Pendiente |
CP IA-01:
search_products— búsqueda exacta por nombre
- Pasos: “¿tienes hamburguesa clásica?”
- Resultado esperado: encuentra el producto y responde con precio/SKU.
- Resultado obtenido: Pendiente.
CP IA-02:
search_products— búsqueda con error de tipeo (ej. “hamburgesa”)
- Objetivo: la búsqueda usa
ILIKE '%query%'literal — no hay corrección de errores ni búsqueda fonética.- Resultado esperado a verificar: confirmar que efectivamente no encuentra nada con el typo, y ver cómo responde el asistente ante un resultado vacío (¿sugiere revisar el nombre, o dice genéricamente “no encontré productos”?).
- Resultado obtenido: Pendiente.
CP IA-03:
create_sale— pedir una venta sin antes buscar el producto
- Pasos: “vende 2 hamburguesas a $15.000 cada una en la tienda 1” (sin haber llamado
search_productsen la conversación).- Resultado esperado a verificar: el asistente debería llamar
search_productsprimero para obtener el ID real; confirmar si efectivamente lo hace solo o si acepta ciegamente el precio que el usuario dictó (que podría no coincidir con el precio real del producto).- Resultado obtenido: Pendiente.
CP IA-04:
create_sale— instrucción ambigua sobre la tienda
- Pasos: en una empresa con 2+ tiendas, pedir “registra una venta de una pizza” sin mencionar cuál tienda.
- Resultado esperado a verificar:
store_ides obligatorio para la tool — confirmar si el asistente pregunta cuál tienda, o falla con un error técnico poco claro, o asume una tienda por defecto sin avisar (los tres comportamientos son posibles y tienen implicaciones de usabilidad muy distintas).- Resultado obtenido: Pendiente.
CP IA-05:
create_sale— producto que no existe
- Pasos: “vende un producto llamado ‘xyz123’ que no existe”.
- Resultado esperado: debe fallar con un mensaje entendible para el usuario del chat, no un stacktrace ni un JSON crudo de error.
- Resultado obtenido: Pendiente.
CP IA-06:
get_inventory— pedir solo productos bajo mínimo
- Pasos: “¿qué productos están por agotarse?” (
low_stock_only).- Resultado esperado: solo lista productos donde
quantity <= min_stockymin_stock > 0.- Resultado obtenido: Pendiente.
CP IA-07:
get_inventory— pedir el stock de un producto que no existe
- Resultado esperado: respuesta clara de que no se encontró, no una lista vacía sin explicación.
- Resultado obtenido: Pendiente.
CP IA-08:
create_expense— monto en formato de texto ambiguo (ej. “cincuenta mil pesos” en vez de un número)
- Resultado esperado a verificar: confirmar si el modelo de lenguaje interpreta correctamente montos escritos en palabras, o solo funciona bien si el usuario escribe el número directamente.
- Resultado obtenido: Pendiente.
CP IA-09:
create_expense— tienda inexistente o de otra empresa
- Resultado esperado: debe fallar con
"tienda inválida para esta empresa"(ya validado en el código) — confirmar que el mensaje que llega al chat es comprensible para un usuario no técnico, no el string crudo del error.- Resultado obtenido: Pendiente.
CP IA-10:
create_customer— nombre con apellido junto (sin separar first/last en el chat)
- Pasos: “crea un cliente llamado María Fernanda Gómez”.
- Resultado esperado a verificar: la tool solo tiene un campo
name(no separa en first/last como el módulo de usuarios internos) — confirmar que el contacto queda bien formado y es editable después desde Ajustes → Clientes sin inconsistencias.- Resultado obtenido: Pendiente.
CP IA-11:
get_sales_summary— pedir el resumen de un rango de fechas en lenguaje natural (“la semana pasada”, “este mes”, “ayer”)
- Resultado esperado a verificar: la tool solo acepta
date_from/date_toen formatoYYYY-MM-DD— confirmar qué tan bien el modelo traduce expresiones relativas de tiempo a ese formato exacto, especialmente “la semana pasada” (rango de 7 días) vs. un solo día.- Resultado obtenido: Pendiente.
CP IA-12:
search_manual— preguntar “cómo hacer X” para un flujo real del manual (ej. “¿cómo creo un descuento?”)
- Resultado esperado: debe encontrar y resumir el contenido de
crear-descuento.mdx, con un link o referencia clara, sin intentar ejecutar la acción él mismo (esta tool es solo informativa).- Resultado obtenido: Pendiente.
CP IA-13:
search_manual— pregunta sobre un flujo que no existe en el manual (ej. facturación DIAN, que este plan excluye por no estar terminada)
- Resultado esperado: debe responder honestamente que no encontró información, no inventar una respuesta (verificar que no haya alucinación sobre una feature incompleta).
- Resultado obtenido: Pendiente.
CP IA-14: Mensaje fuera de alcance (ej. “cuéntame un chiste”, o una pregunta de otro negocio no relacionado con el POS)
- Resultado esperado a verificar: confirmar cómo reacciona el asistente — ¿se mantiene en su rol de “owner bot” del negocio, o responde cualquier cosa como un chatbot genérico? Evaluar si el prompt del sistema lo mantiene enfocado.
- Resultado obtenido: Pendiente.
CP IA-15: Conversación larga que mezcla varias tools en secuencia (buscar → vender → consultar resumen)
- Pasos: en un solo hilo: “busca gaseosas” → “vende 3 de la primera que encontraste” → “¿cómo van las ventas de hoy?”
- Resultado esperado: el asistente debe mantener contexto entre tools dentro de la misma conversación (ej. saber a cuál producto se refiere “la primera que encontraste”).
- Resultado obtenido: Pendiente.
Notas de usabilidad y sugerencias
Se completa durante la ejecución. Prestar atención especial a IA-04 (tienda ambigua) y IA-11 (fechas relativas) — son los puntos de fricción más probables entre lenguaje natural y los parámetros estrictos que espera cada tool.