Files
AnchorOS/docs/KIOSK_IMPLEMENTATION.md

5.4 KiB

Sistema de Kiosko - Guía Rápida de Implementación

Qué se Implementó

1. Base de Datos (SQL)

  • Nuevo rol kiosk en el enum user_role
  • Tabla kiosks con API key authentication
  • Función generate_kiosk_api_key() para generar claves únicas
  • Función is_kiosk() para verificar permisos
  • Función get_available_resources_with_priority() para asignación inteligente
  • Políticas RLS específicas para kiosk
  • Triggers de audit logging para kiosks

2. Types (TypeScript)

  • Agregado kiosk al tipo UserRole
  • Nueva interfaz Kiosk
  • Actualizado tipo CustomerTier con black y VIP
  • Agregada tabla kiosks al tipo Database

3. API Routes (Next.js)

  • POST /api/kiosk/authenticate - Autenticación de kiosko
  • GET /api/kiosk/bookings - Listar bookings de la location
  • POST /api/kiosk/bookings - Crear nuevo booking
  • POST /api/kiosk/bookings/[shortId]/confirm - Confirmar booking
  • GET /api/kiosk/resources/available - Ver recursos disponibles
  • POST /api/kiosk/walkin - Crear reserva walk-in

4. Componentes UI

  • BookingConfirmation - Flujo para confirmar citas
  • WalkInFlow - Flujo para crear reservas walk-in
  • ResourceAssignment - Muestra recursos con prioridad
  • Página kiosk/[locationId]/page.tsx - Pantalla principal

5. Documentación

  • Documentación completa en docs/KIOSK_SYSTEM.md

Pasos para Poner en Producción

1. Ejecutar la Migración

# Opción 1: Via Supabase Dashboard
# 1. Ve a https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
# 2. Copia el contenido de supabase/migrations/20260116000000_add_kiosk_system.sql
# 3. Ejecuta el script

# Opción 2: Via CLI (si tienes configurado supabase db push)
supabase db push

2. Crear Kioskos

-- En Supabase SQL Editor
SELECT create_kiosk(
    '<location-uuid>',
    'kiosk-entrada-1',
    'Kiosko Entrada Principal',
    '192.168.1.100'::INET
);

-- Guarda el API key generado en un lugar seguro

3. Configurar Variables de Entorno

# .env.local o .env.production
NEXT_PUBLIC_KIOSK_API_KEY=la-api-key-que-generaste-en-el-paso-anterior

4. Acceder al Kiosko

https://tu-dominio.com/kiosk/{location-id}

Ejemplo:

https://kiosk.anchor23.mx/550e8400-e29b-41d4-a716-446655440000

Estructura de Archivos

AnchorOS/
├── supabase/
│   └── migrations/
│       └── 20260116000000_add_kiosk_system.sql
├── lib/
│   └── db/
│       └── types.ts
├── app/
│   ├── api/
│   │   └── kiosk/
│   │       ├── authenticate/
│   │       │   └── route.ts
│   │       ├── bookings/
│   │       │   ├── route.ts
│   │       │   └── [shortId]/
│   │       │       └── confirm/
│   │       │           └── route.ts
│   │       ├── resources/
│   │       │   └── available/
│   │       │       └── route.ts
│   │       └── walkin/
│   │           └── route.ts
│   └── kiosk/
│       └── [locationId]/
│           └── page.tsx
├── components/
│   └── kiosk/
│       ├── BookingConfirmation.tsx
│       ├── WalkInFlow.tsx
│       └── ResourceAssignment.tsx
└── docs/
    └── KIOSK_SYSTEM.md

Testing

1. Test de Autenticación

curl -X POST https://tu-dominio.com/api/kiosk/authenticate \
  -H "Content-Type: application/json" \
  -d '{"api_key": "tu-api-key"}'

2. Test de Confirmación de Cita

# Buscar booking
curl "https://tu-dominio.com/api/kiosk/bookings?short_id=ABC123" \
  -H "x-kiosk-api-key: tu-api-key"

# Confirmar booking
curl -X POST https://tu-dominio.com/api/kiosk/bookings/ABC123/confirm \
  -H "x-kiosk-api-key: tu-api-key"

3. Test de Walk-in

curl -X POST https://tu-dominio.com/api/kiosk/walkin \
  -H "x-kiosk-api-key: tu-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "customer_email": "cliente@email.com",
    "customer_name": "Cliente Prueba",
    "customer_phone": "8112345678",
    "service_id": "service-uuid"
  }'

Características Clave

Prioridad de Asignación de Recursos

El sistema asigna recursos automáticamente con este orden:

  1. Estaciones (stations) - Prioridad alta
  2. Salas (rooms) - Prioridad media
  3. Equipo (equipment) - Prioridad baja

Seguridad

  • API key de 64 caracteres aleatorios
  • Restricción opcional por IP
  • Políticas RLS granulares
  • Sin acceso a PII de clientes
  • Audit logging completo

UX para Cliente

  • Interfaz simple y táctil-friendly
  • Confirmación visual de acciones
  • Validaciones en tiempo real
  • Códigos de 6 caracteres fáciles de recordar
  • Soporte para walk-ins inmediatos

Próximos Pasos (Opcionales)

  1. Personalización del Diseño

    • Ajustar colores según branding del salón
    • Agregar logo del salón
    • Modificar textos según preferencia
  2. Integraciones

    • Google Calendar para sincronización
    • Notificaciones por SMS/email al confirmar
    • Pagos en el kiosko
  3. Funcionalidades Adicionales

    • Soporte multi-idioma
    • Modo mantenimiento
    • Reportes de uso
    • Soporte para QR codes

Soporte

Para más detalles, consulta docs/KIOSK_SYSTEM.md o revisa el código en los archivos mencionados.