Files
AnchorOS/docs/KIOSK_IMPLEMENTATION.md
Marco Gallegos fed5cb6850 feat: Implementar sistema de kiosko, enrollment e integración Telegram
## Sistema de Kiosko 
- Nuevo rol 'kiosk' en enum user_role
- Tabla kiosks con autenticación por API key (64 caracteres)
- Funciones SQL: generate_kiosk_api_key(), is_kiosk(), get_available_resources_with_priority()
- API Routes: authenticate, bookings (GET/POST), confirm, resources/available, walkin
- Componentes UI: BookingConfirmation, WalkInFlow, ResourceAssignment
- Página kiosko: /kiosk/[locationId]/page.tsx

## Sistema de Enrollment 
- API routes para administración: /api/admin/users, /api/admin/kiosks, /api/admin/locations
- Frontend enrollment: /admin/enrollment con autenticación por ADMIN_KEY
- Creación de staff (admin, manager, staff, artist) con Supabase Auth
- Creación de kiosks con generación automática de API key
- Componentes UI: card, button, input, label, select, tabs

## Actualización de Recursos 
- Reemplazo de recursos con códigos estándarizados
- Estructura por location: 3 mkup, 1 lshs, 4 pedi, 4 mani
- Migración de limpieza: elimina duplicados
- Total: 12 recursos por location

## Integración Telegram y Scoring 
- Campos agregados a staff: telegram_id, email, gmail, google_account, telegram_chat_id
- Sistema de scoring: performance_score, total_bookings_completed, total_guarantees_count
- Tablas: telegram_notifications, telegram_groups, telegram_bots
- Funciones: update_staff_performance_score(), get_top_performers(), get_performance_summary()
- Triggers automáticos: notificaciones al crear/confirmar/completar booking
- Cálculo de score: base 50 +10 por booking +5 por garantía +1 por $100

## Actualización de Tipos 
- UserRole: agregado 'kiosk'
- CustomerTier: agregado 'black', 'VIP'
- Nuevas interfaces: Kiosk

## Documentación 
- KIOSK_SYSTEM.md: Documentación completa del sistema
- KIOSK_IMPLEMENTATION.md: Guía rápida
- ENROLLMENT_SYSTEM.md: Sistema de enrollment
- RESOURCES_UPDATE.md: Actualización de recursos
- PROJECT_UPDATE_JAN_2026.md: Resumen de proyecto

## Componentes UI (7)
- button.tsx, card.tsx, input.tsx, label.tsx, select.tsx, tabs.tsx

## Migraciones SQL (4)
- 20260116000000_add_kiosk_system.sql
- 20260116010000_update_resources.sql
- 20260116020000_cleanup_and_fix_resources.sql
- 20260116030000_telegram_integration.sql

## Métricas
- ~7,500 líneas de código
- 32 archivos creados/modificados
- 7 componentes UI
- 10 API routes
- 4 migraciones SQL
2026-01-16 10:51:12 -06:00

203 lines
5.4 KiB
Markdown

# 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
```bash
# 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
```sql
-- 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
# .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://salonos.example.com/kiosk/550e8400-e29b-41d4-a716-446655440000
```
## Estructura de Archivos
```
salonOS/
├── 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
```bash
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
```bash
# 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
```bash
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.