Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/KevinhosUTP/Automatizacion-Lurwis/llms.txt

Use this file to discover all available pages before exploring further.

La Picantería Lurwis utiliza dos bases de datos para gestionar diferentes aspectos del sistema:
  • PostgreSQL: Para datos transaccionales y del menú
  • MongoDB: Para memoria conversacional de los agentes IA

PostgreSQL - Base de Datos Relacional

Tabla: pedidos_picanteria

Tabla principal que almacena todos los pedidos realizados por los clientes.
id
uuid
required
Identificador único del pedido (Primary Key). Generado automáticamente.
telefono
varchar
required
Número de teléfono del cliente en formato internacional (ej: 51900769907). Utilizado como identificador principal del cliente.
cliente_nombre
varchar
required
Nombre completo del cliente extraído durante la conversación.
detalle_pedido
jsonb
required
Objeto JSON que contiene la descripción detallada del pedido.Estructura:
{
  "descripcion": "2x Ceviche Personal (S/ 35.00 c/u), 1x Parihuela Familiar (S/ 65.00)"
}
total_estimado
numeric(10,2)
Cálculo preliminar del total antes de la confirmación final (campo may not be actively used - verify in actual database schema).
total_final
numeric(10,2)
required
Total confirmado que el cliente debe pagar.
metodo_pago
varchar
required
Método de pago elegido por el cliente.Valores posibles: Yape, Plin, Efectivo, Tarjeta
tipo_servicio
varchar
required
Tipo de servicio solicitado.Valores posibles: Delivery, Recojo
estado_pedido
varchar
required
Estado actual del pedido en el ciclo de vida.Valores posibles:
  • confirmado - Pedido recibido y confirmado
  • en_preparacion - Pedido en cocina
  • en_camino - Pedido enviado (solo Delivery)
  • entregado - Pedido completado
  • cancelado - Pedido cancelado
direccion
text
Dirección de entrega (solo para Delivery). Puede ser null si es Recojo.
fecha_creacion
timestamp
Fecha y hora de creación del registro. Generado automáticamente.
fecha_actualizacion
timestamp
Fecha y hora de última modificación. Se actualiza automáticamente.

Tabla: logs_auditoria

Tabla de auditoría que registra el historial completo de cada conversación asociada a un pedido.
id
uuid
required
Identificador único del log (Primary Key). Generado automáticamente.
pedido_id
uuid
required
Referencia al ID del pedido en pedidos_picanteria (Foreign Key).
telefono
varchar
required
Número de teléfono del cliente. Duplicado para facilitar búsquedas.
nombre_cliente
varchar
Nombre del cliente al momento del registro.
historial_chat
jsonb
required
Array completo de mensajes intercambiados entre el cliente y Wilson (el agente IA).Estructura:
{
  "messages": [
    {
      "role": "user",
      "content": "Quiero hacer un pedido",
      "timestamp": "2026-03-05T10:30:00Z"
    },
    {
      "role": "assistant",
      "content": "¡Perfecto! Te muestro nuestras categorías...",
      "timestamp": "2026-03-05T10:30:02Z"
    }
  ]
}
fecha_registro
timestamp
Fecha y hora en que se guardó el log. Generado automáticamente.
Los logs de auditoría son críticos para:
  • Análisis de calidad de servicio
  • Resolución de disputas
  • Entrenamiento y mejora de los modelos IA

Tabla: categorias

Catálogo de categorías del menú.
id
integer
required
ID numérico de la categoría (Primary Key).
nombre
varchar
required
Nombre de la categoría (ej: “Ceviches”, “Chicharrones”, “Sudados”).
activo
boolean
default:"true"
Indica si la categoría está disponible en el menú actual.

Tabla: platos

Catálogo de platos disponibles en el menú.
id
integer
required
ID numérico del plato (Primary Key).
categoria_id
integer
required
Referencia a la categoría (Foreign Key a categorias.id).
nombre
varchar
required
Nombre del plato (ej: “Ceviche Mixto”, “Chicharrón de Pescado”).
descripcion
text
Descripción detallada del plato con ingredientes y preparación.
activo
boolean
default:"true"
Indica si el plato está disponible actualmente.

Tabla: plato_precios

Precios diferenciados por tamaño para cada plato.
id
integer
required
ID del registro de precio (Primary Key).
plato_id
integer
required
Referencia al plato (Foreign Key a platos.id).
tamanio
varchar
required
Tamaño de la porción.Valores posibles: Personal, Familiar, Único
precio
numeric(10,2)
required
Precio en soles (PEN) para este tamaño.
activo
boolean
default:"true"
Indica si este precio está vigente.

MongoDB - Base de Datos NoSQL

Colección: historial_clasificador

Almacena la memoria conversacional del Agente Clasificador que determina la intención del cliente.
sessionId
string
ID de sesión correspondiente al número de teléfono del cliente.
messages
array
Array de mensajes intercambiados con el agente clasificador.
contextWindowLength
number
Cantidad de mensajes mantenidos en memoria (configurable).

Colección: historial_pedidos

Memoria conversacional del Agente Pedidos que gestiona la toma de órdenes.
sessionId
string
Número de teléfono del cliente.
messages
array
Historial completo de la conversación sobre el pedido.
contextWindowLength
number
Configurado para 25 mensajes para mantener contexto extenso.
Este historial es crítico para que el agente recuerde platos mencionados, precios cotizados y preferencias del cliente durante la conversación.

Colección: historial_detector

Memoria del Detector de Pedidos que identifica si el cliente quiere modificar o consultar un pedido existente.
sessionId
string
Número de teléfono del cliente.
messages
array
Conversación utilizada para determinar intención (modificar vs. consultar).

Colecciones adicionales

  • historial_reservas: Memoria del agente de reservas de mesas (15 mensajes)
  • historial_eventos: Memoria del agente de reservas de local (15 mensajes)
  • historial_general: Memoria del agente de consultas generales (10 mensajes)

Relaciones Clave

Consultas Comunes

SELECT id, detalle_pedido, total_final, estado_pedido 
FROM pedidos_picanteria 
WHERE TRIM(telefono) = TRIM('51900769907')
AND estado_pedido NOT IN ('entregado', 'cancelado')
ORDER BY fecha_creacion DESC
LIMIT 1;
SELECT 
  p.id,
  p.nombre,
  p.descripcion,
  json_agg(
    json_build_object('tamanio', pp.tamanio, 'precio', pp.precio)
    ORDER BY pp.precio
  ) AS precios
FROM platos p
JOIN plato_precios pp ON pp.plato_id = p.id
WHERE p.categoria_id = 1
AND p.activo = true
AND pp.activo = true
GROUP BY p.id, p.nombre, p.descripcion;
SELECT 
  p.id AS pedido_id,
  p.cliente_nombre,
  p.total_final,
  p.estado_pedido,
  l.historial_chat
FROM pedidos_picanteria p
LEFT JOIN logs_auditoria l ON l.pedido_id = p.id
WHERE p.id = 'uuid-del-pedido';

Configuración de Conexión

La conexión a PostgreSQL utiliza Session Pooler para optimizar el manejo de conexiones concurrentes desde n8n.Todas las tablas implementan Row Level Security (RLS) para proteger datos sensibles de clientes.

Build docs developers (and LLMs) love