Manual del Sistema de Operaciones v6
Guía técnica completa — rondas de inspección, ventanas horarias A&B, dashboard gerencial, notificaciones push, arquitectura del sistema y flujos operacionales.
Descripción General
Plataforma web integral que digitaliza las rondas de control operacional de Rosa Agustina Conference, conectando operadores en terreno con gerencia en tiempo real vía push, correo y dashboard BI.
App de Operadores
Interfaz móvil optimizada para celular. Sin descarga. Funciona en cualquier navegador. Rondas por turno con checklist zona a zona.
PWA · Sin instalaciónIntelligence Center
Dashboard gerencial con KPIs en tiempo real, tabla con colores por área, 5 gráficos BI y resumen ejecutivo con IA Gemini 2.5 Flash.
Solo SupervisoresNotificaciones Push
Alertas automáticas vía OneSignal. Warning inmediato, aviso de turno, cierre de ronda. Diferenciadas por severidad.
OneSignal · AutomáticoInforme PDF + Correo
Al cerrar turno se genera PDF en Drive y correo HTML vía Postmark. Zonas excluidas por ventana horaria quedan documentadas explícitamente.
Postmark · Google DriveIA Gemini 2.5 Flash
Analista Copilot en el dashboard. Lee las observaciones del período y genera resumen ejecutivo con las 3 urgencias mayores y patrones operacionales.
Backend seguroModo Colaborativo
Múltiples operadores en la misma ronda. Polling 30s detecta zonas de otros operadores y muestra toast con nombre y zona específica.
Tiempo realApp: https://marketing.rosaagustina.cl/webapp/operaciones/ Dashboard: https://marketing.rosaagustina.cl/webapp/operaciones/dashboard/ Manual: https://marketing.rosaagustina.cl/webapp/operaciones/manual/
Acceso y Login
Autenticación por nombre y PIN de 4 dígitos. Sesión válida 8 horas, persiste aunque se cierre el navegador. Recuperación automática de PIN por correo sin intervención del supervisor.
Seleccionar operador
Lista cargada desde Google Sheets al iniciar. Si aparece "Error — recarga la página", el servidor Apps Script está saturado (503). El sistema reintenta automáticamente hasta 3 veces con backoff de 2s-4s-6s antes de mostrar el error.
Ingresar PIN de 4 dígitos
Usar el teclado numérico en pantalla. Personal e intransferible — cada zona registrada queda vinculada al nombre del operador que ingresó con ese PIN.
Sesión activa por 8 horas
No es necesario re-autenticar entre turnos del mismo día. El token UUID se almacena en localStorage y se valida en cada llamada al servidor.
Recuperación automática de PIN
Clic en "🔑 Olvidé mi PIN" → seleccionar nombre de la lista (sin tipeo, evita errores) → ingresar correo registrado → Postmark envía link de uso único válido 30 minutos. Redirige a pantalla de nuevo PIN. No requiere al supervisor.
Módulo de Operaciones
Flujo completo de una ronda. La app persiste el progreso en localStorage — si el operador cierra la pantalla y vuelve durante el mismo turno, el sistema detecta las zonas guardadas y ofrece continuar.
Seleccionar turno del día
Pantalla de estado muestra AM-1, AM-2, PM-1, PM-2. Los ya realizados muestran operador y hora de cierre. Los vencidos sin realizar aparecen como "No Realizada" en rojo.
Recorrer zonas del checklist
Cada zona despliega sus campos. Los ítems A&B bloqueados por ventana horaria no se muestran — el contador de progreso los excluye y el aviso debajo de la barra los explica con hora de habilitación.
Anti-mafia: mínimo 30 segundos entre zonas
El botón "Guardar zona" permanece bloqueado hasta que transcurran 30s desde la zona anterior. Impide registros masivos sin inspección física real. Tiempo mínimo de ronda ≈18 minutos.
Cerrar ronda
Se habilita cuando todas las zonas disponibles están guardadas. Al cerrarlo: genera PDF, envía correo Postmark, envía push de cierre. Las zonas A&B excluidas por ventana horaria quedan documentadas en la pantalla de éxito, el PDF y el correo.
Bloques de Turno y Zonas
4 bloques diarios cubren el hotel las 24 horas. Selecciona un turno para ver exactamente qué zonas cubre y su recuento.
Campos de Control
6 campos por zona. Todos obligatorios excepto las observaciones de texto. Clic en cada campo para ver el criterio de uso.
Estado
Dotación
Provisión
Operación
Equipos
Incidencia
Ventanas Horarias A&B
Las zonas de Alimentos & Bebidas solo son registrables dentro de su ventana. Fuera de ella, el ítem se bloquea automáticamente y no aparece en el checklist.
| Servicio | Ítem | Turno | Disponible desde | Bloqueo definitivo |
|---|---|---|---|---|
| 🍳 Desayuno | Apertura | AM-1 | 07:45 | 08:30 |
| 🍳 Desayuno | Cierre | AM-1 | 10:15 | 11:00 |
| 🍽 Almuerzo | Apertura | AM-2 | 12:45 | 13:30 |
| 🍽 Almuerzo | Cierre | AM-2 | 14:45 | 15:30 |
| ☕ Once | Apertura | PM-1 | 17:45 | 18:30 |
| ☕ Once | Cierre | PM-1 | 18:45 | 19:30 |
| 🍷 Cena | Apertura | PM-2 | 20:15 | 21:00 |
| 🍷 Cena | Cierre | PM-2 | 21:45 | 22:30 |
| ☕ Cafetería Lobby | Apertura AM | AM-1 | 10:15 | 11:15 |
| ☕ Cafetería Lobby | Cierre AM | AM-2 | 13:15 | 14:00 |
| ☕ Cafetería Lobby | Apertura PM | AM-2 | 14:15 | 15:15 |
| ☕ Cafetería Lobby | Cierre PM | PM-2 | 22:15 | 23:00 |
desde → hasta de cada ítem. Si la hora está fuera del rango, la zona no aparece en el checklist y el contador de progreso la excluye. El aviso debajo de la barra muestra: ⏰ 1 zona fuera de horario · habilita HH:MM.VENTANAS_AB en Apps Script). No existe forma de saltar la restricción sin modificar el código fuente. El dato de bloqueo queda en logs del servidor.⏰ 1 zona fuera de horario · habilita HH:MM en el KPI del dashboard explica esto.Si se cierra un turno con zonas bloqueadas, el sistema las documenta explícitamente en 3 lugares:
Pantalla de Éxito (App)
Caja ámbar con lista de zonas excluidas, nombre, área y ventana de servicio. Texto: "✓ Incluidas en el PDF y correo como Excluidas por horario".
PDF de la Ronda
Tabla separada al final del PDF con fondo crema/ámbar. Columnas: Zona / Área / Ventana Horaria / Motivo. Nota: "No representan un error del operador".
Correo HTML
Sección oscura con borde ámbar antes del footer del correo. Tabla con las mismas columnas. Misma nota al pie.
Incidencias y Fotos
El campo de incidencia es el más crítico del sistema. Un Warning activa el protocolo completo de alerta en tiempo real.
Out of service
Estado normal. Sin incidencias. La zona funciona según protocolo. Es el estado esperado en condiciones normales de operación.
No dispara push · Fila normal en dashboard
Warning — Crítico
Incidencia que requiere atención inmediata. Descripción obligatoria — botón bloqueado hasta completarla. Máximo 80 caracteres.
Push inmediato → gerencia · Fila roja · KPI warnings +1
Adjuntar fotos (hasta 4)
Botón de cámara abre selector de archivos. Compatible con cámara directa del celular. Las fotos se suben a Google Drive como archivos compartidos con permiso de solo lectura. Los links aparecen en el correo como iconos clicables y en el PDF como URLs. Máximo 4 fotos por zona.
Regla de observaciones: 80 caracteres
Breve y precisa. Qué, dónde, cuánto. "Falta café y endulzante en estación" ✓ — un párrafo extenso ✗. El campo tiene maxlength="80" en el HTML y el servidor valida el contenido antes de guardar.
Dashboard Gerencial
Intelligence Center disponible solo para Supervisores. El botón "📊 Dashboard" en la app solo aparece si el operador tiene rol Supervisor.
Control de Turnos Diario
4 cards AM-1/AM-2/PM-1/PM-2 con estado, progreso "X/Y zonas", operadores activos y hora de cierre. Polling 30s actualiza los cards sin recargar la página completa.
Tabla de Inspecciones
Todas las zonas con fondo de color por área (8 colores distintos), borde izquierdo para alertas (rojo=Warning, ámbar=OBS), ordenadas por área canónica con separador visual entre grupos.
⏰ 1 zona fuera de horario · habilita HH:MM bajo el número de Zonas Revisadas.Panel con 5 gráficos Chart.js, activados al hacer clic en la pestaña "📊 Panel BI & Inteligencia Artificial". Filtrable por rango de fechas y turno.
Evolución histórica
Line chart — tendencia de warnings y observaciones en el tiempo.
Radar por Área Operativa
Radar chart — score de alertas por AO (SOPORTE, HOTEL, A&B, etc.).
Riesgo por Turno
Doughnut chart — distribución de incidencias por bloque de turno.
Comparativa Operadores
Bar chart — volumen de zonas registradas por operador.
Tipos de Incidencia
Polar chart — proporción OK vs OBS vs Warning.
Botón "🤖 Generar Resumen con IA" envía las observaciones del período filtrado al servidor. El servidor (no el browser) llama a Gemini 2.5 Flash vía UrlFetchApp con la API key en PropertiesService.
Sistema: Gerente de Inteligencia Operativa · Rosa Agustina Resorts Instrucciones: Párrafo resumen con áreas críticas + lista de 3 urgencias/patrones Tono: Profesional, corporativo, orientado a acción Input: JSON con observaciones del período filtrado
El polling liviano cada 30s solo llama a getRondaProgress (sin autenticación, solo lectura) para actualizar los cards de turno. No toca la tabla. Un flag cargandoData previene llamadas simultáneas al forzar actualización manual.
Notificaciones Push
OneSignal con el app ID configurado. Los dispositivos deben aceptar permisos de notificación al ingresar por primera vez a la app. Botón "🔔 Activar Notificaciones" visible en la pantalla de login.
Warning registrado — inmediato
Disparado cuando un operador guarda una zona con Warning. Título: "🚨 WARNING — [Área]: [Zona]". Cuerpo: hora, operador, descripción. Link: dashboard filtrado por turno y fecha.
Observación registrada — solo si hay obs.
Solo cuando hay texto real en dotación, provisión, operación o equipos. No se envía si todo es OK. Evita spam de notificaciones en turnos sin novedades.
Turno cerrado
Ícono varía: 🚨 si hay warnings, 📝 si hay observaciones, ✅ si todo OK. Incluye total zonas, responsable de cierre y link al dashboard.
Turno no realizado
Disparado en los primeros 20 min del siguiente bloque si el turno anterior no tiene estado "Realizada" en Control Rondas v6. Verificado con flag en PropertiesService para no enviar duplicados.
Turno por comenzar
Aviso 20 minutos antes de AM-1, AM-2, PM-1, PM-2. Ejecutado por verificarAlertasAutomaticas() — función de Apps Script configurada como trigger por tiempo cada 10 minutos.
Buenos días equipo
Enviado una vez al día entre 08:00 y 08:20. Flag de fecha en PropertiesService evita envíos duplicados si el trigger se ejecuta varias veces en ese rango.
verificarAlertasAutomaticas debe estar configurado como trigger "Basado en tiempo → Cada 10 minutos". Sin ese trigger, los avisos automáticos no funcionan.Reglas de Uso y Disciplina Operativa
El sistema tiene controles técnicos que hacen imposible el registro falso. Las reglas complementan los controles automáticos.
maxlength="80" en el input). Fuerza redacción precisa: qué, dónde, cuánto. "Sin endulzante en estación desayuno" es correcto. "El día de hoy al revisar la zona me percaté de que..." no es aceptable y no cabe. Si se necesita más detalle, adjuntar fotos.Hoja de Ruta
Funcionalidades confirmadas para las próximas versiones. La migración a Supabase elimina la dependencia de Google Sheets y el techo de invocaciones simultáneas.
📱 Verificación por QR físico
- QR adherido en cada área del hotel
- Sin escaneo = zona bloqueada aunque esté en el checklist
- Elimina registros sin presencia física comprobada
- Registro de dispositivo y timestamp del escaneo
🔔 Push preventivo A&B (15 min antes)
- Alerta 15 min antes de la apertura de cada servicio
- Recuerda al operador A&B que la ventana se abre pronto
- Integrado con el sistema de ventanas horarias existente
🗄️ Migración a Supabase + Next.js + Vercel
- Elimina Google Sheets y Apps Script completamente
- API Next.js en Vercel — sin límite de invocaciones simultáneas
- Carga de dashboard en milisegundos (vs 8-15s actual)
- Historial ilimitado sin degradación de rendimiento
- Websockets para modo colaborativo real sin polling
🤖 IA Predictiva Avanzada
- Patrones recurrentes por zona, turno y operador
- Predicción de fallas basada en historial (ML)
- Comparativa de desempeño por operador con métricas
- Integración con sistema de reservas para ajustar dotación
Flujos Operacionales y Arquitectura
Diagramas técnicos del sistema. Flujo completo de ronda, árbol de decisión por campo, protocolo de respuesta ante incidencias y arquitectura de capas con stack completo.
PropertiesService.getScriptProperties() en el servidor. El frontend solo llama al endpoint de Apps Script. Las keys nunca aparecen en el HTML ni en los logs del navegador.