Gestión de estacionamientos
versión 10.0
1. Introducción
OpeniPark es un sistema de gestión de estacionamientos que permite controlar la entrada y salida de vehículos, calcular tarifas de forma automática mediante perfiles de cobro configurables, gestionar turnos de operadores y generar reportes detallados. Además, permite la integración de dispositivos como sensores de vehículos, expendedoras de boletos y barreras de estacionamiento.
2. Inicio de sesión
Para acceder al sistema, ingresa tu usuario o correo electrónico y tu contraseña en la pantalla de inicio. Presiona el botón "Ingresar" o la tecla Enter.
Importante:
- Administradores — Pueden iniciar sesión con su usuario o correo electrónico.
- Operadores — Deben iniciar sesión únicamente con su correo electrónico, ya que los nombres de usuario pueden repetirse entre distintos estacionamientos.
Si no tienes cuenta, puedes crear una desde el enlace "Crear una cuenta". Si olvidaste tu contraseña, usa el enlace "Olvidé mi contraseña" para recibir un enlace de recuperación por correo electrónico.
Al iniciar sesión llegarás al panel principal (Dashboard).
Iniciar sesión con Google
Si tu estacionamiento tiene configurado el acceso con Google, en la pantalla de inicio verás la opción "o continúa con" junto al botón de Google. Presiónalo y selecciona tu cuenta de Google para entrar sin escribir usuario ni contraseña.
- Si tu cuenta ya existe — El sistema buscará tu estacionamiento por el correo de Google. Si lo encuentra, vinculará tu cuenta y abrirá la sesión directamente.
- Si es tu primera vez — Se creará una cuenta nueva vinculada a Google (sin contraseña). Luego deberás completar los datos de tu estacionamiento desde Ajustes → Información del perfil.
Nota: El correo de Google queda verificado automáticamente, por lo que no necesitas confirmarlo por correo electrónico.
3. Panel principal (Dashboard)
Al ingresar verás el resumen del turno en curso, organizado en tres bloques.
Acciones
- Leer boleto — Abre el lector QR para registrar la salida de un vehículo (también lee los códigos de los socios OpeniPark Socio).
- Imprimir boleto — Genera e imprime un boleto de entrada con código QR.
Turno actual
- Inicio — fecha y hora en que comenzó el turno.
- Operador — quién está a cargo del turno.
- Boletos impresos — boletos de entrada generados en el turno.
- Boletos cobrados — servicios cerrados y cobrados en el turno.
Adicional
Bloque visible solo para administradores y supervisores:
- Ingresos del turno — total recaudado en el turno.
- Vehículos — vehículos ingresados respecto de las operaciones del turno.
- Apps online — socios con la app abierta en ese momento.
- Monedero — recargas y pagos con monedero del turno.
En la barra superior (o menú hamburguesa en celular) puedes navegar a las demás secciones.
4. Impresión de boletos de entrada
Desde el panel principal, presiona "Imprimir boleto".
Se mostrará una pantalla con:
- Código QR único para el folio.
- Folio numérico del boleto.
- Hora y fecha actual.
Presiona el botón "Imprimir boleto" para enviar la impresión a la impresora térmica. El sistema registrará automáticamente la entrada del vehículo.
La impresión se realiza en impresoras térmicas de tickets compatibles con el estándar ESC/POS, conectadas a través del "Módulo de Impresión" (dispositivo externo que recibe las órdenes de impresión de forma inalámbrica). No requiere configuración de IP ni cables adicionales.
5. Leer boleto (Salida)
Para registrar la salida de un vehículo, existen dos métodos:
Escáner QR por cámara
Desde "Leer boleto", el sistema solicitará acceso a la cámara del dispositivo. Es necesario permitir el acceso la primera vez que se usa; de lo contrario el lector no podrá escanear los códigos QR. Si accidentalmente bloqueaste el permiso, puedes otorgarlo desde la configuración del navegador (icono del candado junto a la URL).
En dispositivos con varias cámaras (celulares, tabletas), puedes elegir cuál usar. Normalmente se selecciona la cámara trasera para apuntar al boleto. Si escoges una incorrecta, solo vuelve a "Leer boleto" y selecciona la correcta.
Apunta la cámara al código QR del boleto. El sistema detectará el folio automáticamente y mostrará la pantalla de cobro.
Al leer un boleto correctamente escucharás un tono agudo de confirmación. Si el boleto ya fue leído antes o hay algún error, escucharás un tono grave de error.
Escáner láser / lector físico
Conecta un escáner de código de barras/QR al puerto USB. Al leer el código, el sistema detectará la entrada automáticamente.
Pantalla de cobro
En la pantalla de cobro se muestra:
- Datos del estacionamiento y folio.
- Fecha/hora de entrada.
- Fecha/hora de salida (momento actual).
- Tiempo total de servicio.
- Total a pagar calculado según el perfil de cobro activo.
Opciones:
- Aceptar — Finalizar la operación y registrar el cobro.
- Imprimir ticket — Imprimir un comprobante de salida.
- Descuentos — Si eres administrador, puedes aplicar uno o varios descuentos antes de aceptar el cobro (ver sección 19).
- Flecha de regreso (barra superior) — Regresar sin registrar la salida.
6. Boleto extraviado
Usa esta opción cuando el cliente no tenga el boleto que se le entregó en la entrada. Presiona "Boleto extraviado" en el panel principal y el sistema aplicará una tarifa fija configurable en el perfil de cobro.
Precaución: Configura esta tarifa con cuidado. Un monto demasiado bajo puede incentivar a algunos clientes a "perder" su boleto cuando su estancia habitual costaría más que la tarifa por extravío.
El resto del proceso de cobro es idéntico a la lectura normal.
Navegación: Reportes y Ajustes
Las distintas secciones del sistema se abren desde la barra de navegación superior (en celular, desde el menú hamburguesa ☰).
- Reportes — Consulta el historial de turnos y exporta la información (ver sección 8).
- Ajustes — Agrupa toda la configuración del estacionamiento: Perfiles de cobro, Programación de horarios, Gestionar Operadores, Opciones de Impresora, Configuración de descuentos, Voz / Anuncios, OpeniPark Socio, Auditoría, Información del perfil y Paleta de color.
7. Corte de turno
El corte de turno cierra el turno actual y comienza uno nuevo. Los cortes se registran en el historial de operaciones y son la base para los reportes.
Pasos:
- Ve a "Corte" en el menú de navegación.
- Revisa el resumen del turno actual (ingresos, autos ingresados/salidos, operador).
- Presiona "Hacer corte".
- Selecciona el operador que continuará el siguiente turno.
- Confirma la operación.
El sistema asignará automáticamente el perfil de cobro según la Programación de horarios configurada. No se puede realizar un corte si ya existe un corte activo sin cerrar.
8. Reportes
En la sección "Reportes" puedes consultar el historial de todos los turnos registrados.
Se muestran los últimos 10 turnos con un botón "Ver turno" para ver los detalles. Puedes buscar cualquier turno por su número en el campo inferior.
Ventana de detalle
Al abrir un turno verás:
- Número de turno, fecha/hora de inicio y fin.
- Total de ingresos, autos ingresados y salidos.
- Operador del turno.
- Tabla detallada de todas las operaciones del turno.
Puedes ordenar la tabla por: Folio, Fecha y hora, Servicio (duración real), Cobro, Estado o Perfil.
Exportar reporte
Desde la ventana de detalle puedes exportar el reporte de tres formas:
- CSV — Descarga un archivo compatible con Excel con todos los datos del turno.
- PDF — Abre una vista optimizada para impresión. Puedes guardar como PDF desde el navegador.
- Email — Envía el reporte por correo electrónico como archivo PDF adjunto. Ingresa el correo del destinatario y presiona Enviar.
9. Perfiles de cobro
Los perfiles de cobro definen las tarifas del estacionamiento. Cada estacionamiento puede tener múltiples perfiles, pero solo uno puede estar activo a la vez como perfil por defecto.
Esta sección es solo para administradores. Se accede desde Ajustes → Perfiles de cobro.
Nota: Si usas Programación de horarios (sección 10), el perfil activo aquí funciona como respaldo: solo se usa cuando ningún horario programado coincide con la fecha y hora actuales.
Campos del perfil
- Nombre — Identificador del perfil (ej. "Clásico", "VIP").
- Tolerancia inicial — Minutos gratis al inicio del estacionamiento. Si el tiempo total no supera este valor, solo se cobra la tarifa mínima (si está configurada).
- Tarifa mínima — Cobro mínimo en pesos (0 = no se aplica).
- Tarifa máxima por día — Cobro máximo por cada 24 horas (0 = no se aplica).
- BEX (Boleto extraviado) — Tarifa fija para boletos perdidos. En la tabla de perfiles se muestra con la abreviatura BEX.
Periodos de cobro
Cada perfil tiene uno o más periodos. Cada periodo define:
- Minutos — Duración base del periodo.
- Tarifa — Precio que se cobra por este periodo.
- Tolerancia extra — Minutos de gracia al final de este periodo. Si el tiempo restante al terminar el periodo no supera esta tolerancia, no se cobra el siguiente periodo.
- Aplica sucesivo — Solo en el último periodo. Si está marcado, este periodo se repite cíclicamente para todo el tiempo restante.
Nota: La casilla "Aplica sucesivo" se mueve automáticamente al último periodo al añadir o eliminar.
¿Cómo funcionan las tolerancias?
Hay dos tipos de tolerancia y funcionan de manera distinta:
1. Tolerancia inicial (del perfil): minutos completamente gratis al entrar. Si el vehículo sale dentro de este tiempo, solo paga la tarifa mínima. Si se excede, el tiempo completo (incluida la tolerancia) se contabiliza para el cobro.
2. Tolerancia extra (de cada periodo): minutos de gracia al finalizar un periodo. Sirve para evitar que unos pocos minutos extra disparen el cobro del siguiente periodo. La tolerancia NO se acumula ni se descuenta del tiempo total.
Ejemplo de cálculo paso a paso
Perfil configurado con tolerancia inicial: 0 y los siguientes periodos:
- Periodo 1: 30 minutos, $15.00, tolerancia 5 min
- Periodo 2: 30 minutos, $20.00, tolerancia 5 min
- Periodo 3: 60 minutos, $30.00, tolerancia 0 min, ✓ Aplica sucesivo
Auto estacionado 66 minutos:
- Minutos disponibles: 66 (no hay tolerancia inicial).
- Periodo 1 (30 min): Quedan 66 - 30 = 36 min. ¿36 > tolerancia de 5? Sí, se cobra periodo 1: $15.00.
- Periodo 2 (30 min): Quedan 36 - 30 = 6 min. ¿6 > tolerancia de 5? Sí, se cobra periodo 2: $20.00.
- Periodo 3 (60 min, sucesivo): Quedan 6 min. Se divide: 0 periodos completos de 60 min + 6 min extra. ¿6 > tolerancia de 0? Sí, se cobra 1 periodo: $30.00.
- Total: $15.00 + $20.00 + $30.00 = $65.00 (3 periodos).
Mismo auto, pero con 35 minutos (justo en el límite de tolerancia del periodo 1):
- Minutos disponibles: 35.
- Periodo 1 (30 min): Quedan 35 - 30 = 5 min. ¿5 > tolerancia de 5? No. El tiempo está dentro de la gracia. Solo se cobra periodo 1: $15.00.
- Total: $15.00 (1 periodo).
Ejemplo con tolerancia inicial
Mismo perfil pero con tolerancia inicial: 5 min y tarifa mínima: $10.00:
- Auto estacionado 4 minutos: no supera la tolerancia inicial. Cobro = tarifa mínima: $10.00.
- Auto estacionado 6 minutos: supera la tolerancia inicial. Entra directo al periodo 1: $15.00.
Ejemplo con estancia larga
Auto estacionado 2 días, 3 horas y 39 minutos (3,099 minutos) con el mismo perfil:
- Periodo 1: 3,099 - 30 = 3,069 min restantes. Cobro: $15.00.
- Periodo 2: 3,069 - 30 = 3,039 min restantes. Cobro: $20.00.
- Periodo 3 (sucesivo): 3,039 ÷ 60 = 50 periodos completos, sobran 39 min. ¿39 > tolerancia 0? Sí, un periodo más. Total: 51 periodos × $30.00 = $1,530.00.
- Total: $15.00 + $20.00 + $1,530.00 = $1,565.00 (53 periodos).
Importante: Las tolerancias extra NO se restan del tiempo total. Solo deciden si se dispara o no el cobro del siguiente periodo. Si el tiempo supera la tolerancia, los minutos de tolerancia "se pierden" y no reducen el tiempo restante.
Tarifa mínima y máxima (topes de cobro)
Después de calcular el total por periodos, el sistema aplica dos topes opcionales. Ambos usan el valor 0 para indicar "desactivado".
- Tarifa mínima — Si el total calculado es menor a este valor, se cobra la tarifa mínima. ¿Por qué usarla? Para garantizar un ingreso mínimo por vehículo sin importar qué tan corta sea la estancia. Ejemplo: cobrar al menos $10 incluso al auto que solo entra 2 minutos a dejar un pasajero.
- Tarifa máxima por día — Cada 24 horas se cobra como máximo este valor; si el auto queda más días, se suma este tope por cada día. ¿Por qué usarla? Para fijar el precio de "un día completo" y que estancias de varios días se acumulen por día (sin exceder ese límite diario).
Ejemplo con tarifa máxima por día: con tarifa máxima por día: $180.00, un auto de 8 horas que acumula $245 se cobra a $180.00; si queda 2 días, se cobra $360.00 (2 × $180).
Ejemplo con tarifa mínima: perfil con tarifa mínima: $10.00 y periodos desde $15.00. Un auto que entra y sale en 1 minuto (dentro de la tolerancia inicial) tendría un cálculo de $0, pero el tope mínimo lo sube a $10.00.
Consejo: El sistema aplica primero la tarifa mínima y después la máxima. Por eso configura siempre mínimo < máximo: si pones un mínimo mayor que el máximo (p. ej. mínimo $20 y máximo $15), el máximo se aplica al final y deja sin efecto el mínimo.
10. Programación de horarios
Los horarios de cobro permiten programar qué perfil de cobro se aplica automáticamente según el día, la hora y la fecha. Esto elimina la necesidad de cambiar manualmente el perfil activo durante el día.
Se accede desde Ajustes → Programación de horarios (solo administradores).
¿Cómo funciona?
Cada vez que se lee un boleto o se hace un corte de turno, el sistema evalúa todos los horarios configurados en orden de prioridad (de mayor a menor). El primer horario cuyas condiciones coincidan con la fecha y hora actuales determina el perfil de cobro a usar.
Si ningún horario coincide, se usa el perfil activo por defecto (configurado en Ajustes → Perfiles de cobro).
Campos del horario
- Nombre — Identificador descriptivo (ej. "Diurno L-V", "Nocturno", "Fin de semana").
- Perfil de cobro a aplicar — El perfil que se usará cuando este horario esté activo.
- Días de la semana — Selecciona los días en que aplica. Si no seleccionas ninguno, aplica todos los días.
- Fecha inicio / Fecha fin — Rango de fechas (opcional). Déjalo vacío para que aplique sin límite de calendario.
- Hora inicio / Hora fin — Franja horaria (opcional). Déjalo vacío para que aplique todo el día. Si la hora inicio es mayor que la hora fin, el horario cruza la medianoche.
- Prioridad — Número del 0 al 99. Mayor número = mayor prioridad. Si dos horarios se solapan, gana el de mayor prioridad.
- Activo — Permite desactivar un horario sin eliminarlo.
Importante: El orden de evaluación es por prioridad descendente, no por fecha de creación. Asigna prioridades más altas a horarios más específicos (como días feriados) y prioridades más bajas a horarios generales (como días entre semana).
Ejemplo 1 — Diurno y nocturno entre semana
Escenario: Lunes a viernes, de 8:00 AM a 8:00 PM cobrar con perfil "Diurno" ($25/hora). De 8:00 PM a 8:00 AM cobrar con perfil "Nocturno" ($15/hora).
Configuración:
| Campo | Horario 1 (Diurno) | Horario 2 (Nocturno) |
| Nombre | Diurno L-V | Nocturno L-V |
| Perfil | Diurno | Nocturno |
| Días | Lun, Mar, Mié, Jue, Vie | Lun, Mar, Mié, Jue, Vie |
| Hora inicio | 08:00 | 20:00 |
| Hora fin | 20:00 | 08:00 |
| Prioridad | 10 | 10 |
El horario nocturno usa hora inicio 20:00 y hora fin 08:00 (inicio > fin), lo que indica que cruza la medianoche. El sistema lo interpreta correctamente como "de 8 PM a 8 AM del día siguiente".
Ejemplo 2 — Fin de semana con tarifa especial
Escenario: Sábado y domingo todo el día cobrar con perfil "Fin de Semana" ($30 tarifa plana por día).
Configuración:
| Campo | Valor |
| Nombre | Fin de semana |
| Perfil | Fin de Semana |
| Días | Sáb, Dom |
| Horas | (vacío — todo el día) |
| Prioridad | 20 |
Al dejar los campos de hora vacíos, este horario aplica las 24 horas del sábado y domingo. La prioridad 20 es mayor que la de los horarios entre semana (10), asegurando que el fin de semana tenga preferencia si llegaran a solaparse.
Ejemplo 3 — Temporada navideña (fechas específicas)
Escenario: Del 24 al 25 de diciembre aplicar perfil "Navideño" ($50 tarifa plana), sin importar el día de la semana ni la hora.
Configuración:
| Campo | Valor |
| Nombre | Navidad 2026 |
| Perfil | Navideño |
| Fecha inicio | 2026-12-24 |
| Fecha fin | 2026-12-25 |
| Días / Horas | (vacío — todo el día, ambos días) |
| Prioridad | 50 |
Al usar solo fechas (sin días ni horas), el horario navideño cubre todo el 24 y 25 de diciembre completos. La prioridad 50 es más alta que la del fin de semana (20) y los horarios entre semana (10), garantizando que Navidad tenga preferencia absoluta sobre cualquier otra regla. Al terminar el 25 de diciembre, el sistema vuelve automáticamente a los horarios normales.
Ejemplo 4 — Sistema completo con prioridades
Escenario: Un estacionamiento que opera con las siguientes reglas:
- Lunes a viernes 8 AM - 8 PM: Perfil "Diurno" ($18/hora)
- Lunes a viernes 8 PM - 8 AM: Perfil "Nocturno" ($12/hora)
- Sábado y domingo todo el día: Perfil "Fin de Semana" ($25/hora)
- 1 de enero (Año Nuevo): Perfil "Día Feriado" ($40 tarifa plana)
- Si nada coincide: Perfil "Clásico" ($20/hora) como respaldo
Configuración de horarios (ordenados por prioridad):
| # | Nombre | Perfil | Días | Fechas | Horas | Prioridad |
| 1 | Año Nuevo | Día Feriado | — | 1 Ene → 1 Ene | — | 90 |
| 2 | Fin de Semana | Fin de Semana | Sáb, Dom | — | — | 20 |
| 3 | Diurno L-V | Diurno | Lun-Vie | — | 08:00-20:00 | 10 |
| 4 | Nocturno L-V | Nocturno | Lun-Vie | — | 20:00-08:00 | 10 |
Además, en Ajustes → Perfiles de cobro se marca "Clásico" como perfil activo por defecto (el respaldo cuando ningún horario coincide).
¿Qué perfil se aplica?
- Martes 3:00 PM: Diurno L-V (prioridad 10, es entre semana de 8AM-8PM).
- Miércoles 11:00 PM: Nocturno L-V (prioridad 10, es entre semana después de las 8PM).
- Sábado 2:00 PM: Fin de Semana (prioridad 20, es sábado; gana sobre cualquier horario entre semana).
- Domingo 1:00 AM: Fin de Semana (prioridad 20, es domingo).
- 1 de enero 10:00 AM: Año Nuevo (prioridad 90, es la más alta; ignora todo lo demás).
- Jueves 5:00 AM (sin horarios): Perfil Clásico (respaldo, ningún horario nocturno configurado para jueves de madrugada — se necesitaría añadir el Nocturno L-V).
Consejo: Para evitar huecos donde no haya cobertura de horarios, asegúrate siempre de que el perfil activo por defecto sea un perfil razonable que funcione como respaldo. También puedes crear un horario "comodín" sin días, fechas ni horas específicas, con prioridad 0, que cubra cualquier momento no contemplado por otras reglas.
Consideraciones importantes
- Los horarios inactivos se ignoran completamente durante la evaluación.
- Si dos horarios tienen la misma prioridad y ambos coinciden, el sistema elige el que tenga el ID más bajo (el más antiguo).
- Los cambios en los horarios aplican de inmediato. No es necesario hacer un corte de turno.
- Puedes editar un horario para cambiar su perfil, días, horas o prioridad en cualquier momento.
- Al eliminar un perfil de cobro que está siendo usado por un horario, el horario también se elimina automáticamente (por la restricción de llave foránea).
- Para horarios estacionales (como Navidad o verano), simplemente configura las fechas de inicio y fin. Cuando termine la temporada, el horario dejará de coincidir automáticamente — no necesitas desactivarlo manualmente, aunque puedes dejarlo inactivo para reutilizarlo el próximo año.
11. Gestión de operadores
Desde Ajustes → Gestionar Operadores (solo administradores) puedes administrar las cuentas de usuario (operadores) del sistema.
- Añadir operador — Crea un nuevo operador con nombre, usuario, correo electrónico, contraseña, estado activo/inactivo y permisos de administrador.
- Editar — Modifica los datos de un operador existente.
- Eliminar — Elimina un operador del sistema.
El correo electrónico del operador debe ser único en todo el sistema, ya que se utiliza para iniciar sesión y evita ambigüedades entre distintos estacionamientos.
Estos operadores pueden ser seleccionados al hacer un corte de turno como responsables del siguiente turno.
12. Registro de sensores
El sistema recibe datos en tiempo real desde el Módulo de Sensores instalado en los carriles del estacionamiento. Este módulo detecta la entrada y salida de vehículos y envía los eventos directamente a la app, donde se almacenan en la base de datos y se visualizan en tiempo real.
Panel de control de sensores
Al ingresar a Sensores en la barra de navegación, verás:
Indicador de conexión
En la parte superior, una barra muestra el estado del Módulo de Sensores:
- ● ONLINE — Último evento: HH:MM:SS (LED verde): El módulo está enviando datos y está operativo. Muestra la hora del último evento recibido. Si el evento es de hoy, solo muestra la hora; si es de días anteriores, muestra fecha y hora.
- ● OFFLINE — Esperando datos... (LED rojo): No se ha recibido ningún dato en los últimos 3 minutos. Verifica que el Módulo de Sensores esté encendido y conectado a internet.
- ● Conectando... (LED gris): Estado inicial mientras se obtienen los primeros datos.
Los datos se actualizan automáticamente cada 5 segundos sin necesidad de recargar la página.
Tarjetas de contadores
Debajo del indicador de conexión se muestran tres tarjetas con los contadores principales:
- Estacionados: Diferencia entre entradas y salidas desde el último reinicio. Representa cuántos vehículos hay actualmente dentro.
- Total entradas: Número acumulado de vehículos que han ingresado desde el último reinicio.
- Total salidas: Número acumulado de vehículos que han egresado desde el último reinicio.
Nota: Los contadores se calculan a partir de la base de datos. Si realizaste un reinicio, solo cuentan los eventos posteriores al reinicio. El reinicio no borra la base de datos ni el historial; solo reinicia el punto de partida de los contadores visuales.
Reiniciar contadores
El botón "Reiniciar Contadores" pone a cero los contadores visuales (Estacionados, Entradas y Salidas). Esto no borra ningún dato de la base de datos, solo establece un nuevo punto de partida para el conteo. Útil al inicio del día o al cambiar de turno.
Historial de eventos
Debajo de los contadores se encuentra la tabla de eventos con los siguientes controles:
Orden de vista
- Descendente: Muestra los eventos más recientes primero (por defecto).
- Ascendente: Muestra los eventos más antiguos primero.
Ordenar por
Puedes ordenar la tabla por cualquiera de estos criterios:
- Fecha y hora — Momento del evento.
- Id — Identificador único del registro.
- Evento — Tipo de evento (ENTRADA / SALIDA).
- Vehículo — Tipo de vehículo detectado.
- T. traslape — Tiempo de traslape del sensor en segundos.
- T. total — Tiempo total de detección en segundos.
Filtros
- Rango de fecha y hora: Dos campos de fecha/hora (desde y hasta). Por defecto muestran el mes actual completo. Al modificar cualquiera, la tabla se actualiza automáticamente.
- Tipo de vehículo: Filtra por Auto, Auto-Moto o Todos los vehículos.
- Limpiar filtro: Restaura los filtros a sus valores por defecto (mes actual, todos los vehículos).
Token del dispositivo
Arriba de la tabla se muestra el token del Módulo de Sensores en un recuadro informativo. Este identificador único confirma qué módulo está reportando los eventos.
Columnas de la tabla
- Id: Identificador único del evento en la base de datos.
- Evento: ENTRADA (vehículo ingresa) o SALIDA (vehículo egresa). Se muestra en un distintivo de color — amarillo para entrada, verde para salida.
- Vehículo: Auto o Auto-Moto (categoría que agrupa motocicletas y vehículos muy pequeños que el sensor no puede diferenciar).
- T. traslape: Tiempo en segundos que los sensores tardaron en detectar el vehículo de forma simultánea (overlap).
- T. total: Tiempo total en segundos que el vehículo tardó en cruzar completamente los sensores.
- Fecha y hora: Momento exacto en que se registró el evento.
Paginación
La tabla muestra 50 eventos por página. Usa los números de paginación al final de la tabla para navegar entre páginas.
Tipos de evento del sensor
- ENTRADA: El sensor detectó un vehículo ingresando al estacionamiento. Se registra en la base de datos y se contabiliza en los contadores visuales.
- SALIDA: El sensor detectó un vehículo saliendo del estacionamiento. Se registra y contabiliza igual que la entrada.
- HEARTBEAT: El Módulo de Sensores envía una señal periódica para confirmar que está encendido y conectado. Este evento NO se muestra en la tabla ni se contabiliza; solo actualiza el indicador de conexión ONLINE.
Importante: La columna "Auto-Moto" agrupa motocicletas y autos muy pequeños o compactos. El sensor actual no puede diferenciar físicamente entre una moto grande y un auto muy pequeño. Esta categoría combinada refleja esa limitación técnica. No es posible separar estos tipos de vehículo sin hardware adicional.
13. Auditar Sensores
Esta herramienta de auditoría permite cruzar los eventos detectados por los sensores con los tickets impresos en el sistema. Su objetivo es identificar discrepancias: eventos del sensor sin un ticket correspondiente, lo que podría indicar un vehículo que entró pero no recibió boleto.
Se accede desde Reportes → Auditar Sensores.
¿Cómo funciona el matching?
Para cada evento de sensor (ENTRADA o SALIDA), el sistema busca el ticket de operación más cercano en el tiempo dentro de una ventana de tolerancia:
- Entradas: Busca un ticket de operación cuya fecha/hora de entrada esté dentro de 3 minutos (antes o después) del evento del sensor.
- Salidas: Busca un ticket de operación cuya fecha/hora de salida esté dentro de 5 minutos (antes o después) del evento del sensor. La ventana es mayor porque el proceso de cobro en caja toma más tiempo.
Si encuentra un match, muestra el folio del ticket, la fecha de la operación y la diferencia exacta en segundos. Si no encuentra ninguno, marca el evento como "Sin ticket".
Controles de la vista
- Orden de vista: Ascendente o descendente por fecha del sensor.
- Ordenar por: Fecha y hora, Id, Evento o Vehículo.
- Rango de fecha: Filtra eventos del sensor en un período específico (por defecto: mes actual).
- Tipo de vehículo: Filtra por Auto, Auto-Moto o todos.
- Limpiar filtro: Restaura los valores por defecto.
Columnas de la tabla
- Fecha sensor: Fecha y hora en que el sensor detectó el evento.
- Evento: Entrada o Salida, con distintivo de color (amarillo/verde).
- Vehículo: Auto o Auto-Moto.
- Folio ticket: Número de folio del boleto asociado. Si aparece un guión (-), no se encontró ticket.
- Fecha operación: Fecha y hora de la operación de entrada/salida del ticket.
- Diferencia: Diferencia en segundos entre el evento del sensor y la operación del ticket. Un valor pequeño (ej. 5s) indica una coincidencia muy precisa.
- Estado: Match (verde) o Sin ticket (amarillo).
Interpretación de resultados
- Match con 0-10 segundos de diferencia: El boleto se imprimió/procesó casi al mismo tiempo que el sensor detectó el vehículo. Coincidencia perfecta.
- Match con 30-180 segundos: Hay un desfase entre el sensor y la operación. Puede ser normal si el conductor tarda en llegar al cajón de estacionamiento o si hay fila en caja.
- Sin ticket: El sensor detectó un vehículo pero no se encontró ningún boleto correspondiente en la base de datos. Posibles causas: el vehículo entró y se fue sin estacionarse, el operador no imprimió boleto, o el boleto se emitió con un retraso mayor a 3-5 minutos.
Nota: Esta herramienta es informativa y de auditoría. No bloquea ni modifica ninguna operación. Un evento "Sin ticket" no necesariamente indica un error — puede ser un vehículo que simplemente pasó de largo sin estacionarse. Evalúa los resultados con criterio.
Limitación: En horas de alto tráfico, cuando varios vehículos entran o salen con pocos segundos de diferencia, es posible que el matching asocie un ticket al evento de sensor equivocado. La ventana de 3-5 minutos y el criterio de "más cercano" minimizan este riesgo, pero no lo eliminan por completo. Para máxima precisión, considera instalar sensores adicionales por carril.
14. Configuración del perfil
Desde Ajustes → Información del perfil puedes completar y actualizar los datos de tu estacionamiento:
- Usuario — Nombre de usuario para iniciar sesión.
- Estacionamiento — Nombre del estacionamiento y número de cajones.
- Administrador — Nombre, RFC y CURP del administrador.
- Dirección — Tres líneas para la dirección del estacionamiento.
- Red — IP local e IP pública del controlador.
Nota: Las opciones de impresión (ancho de papel, personalización del ticket, corte de papel y logo) se configuran en una sección aparte:
Ajustes → Opciones de Impresora.
Ver sección 15.
15. Opciones de Impresora y personalización de tickets
Desde Ajustes → Opciones de Impresora puedes configurar el papel, la apariencia de los boletos (entrada y salida), el corte de papel y el logo impresos en la impresora térmica.
Todos los cambios se aplican al guardar y afectan inmediatamente a los siguientes boletos que se impriman.
Ancho del papel
- 58 mm — Papel térmico angosto estándar (~32 caracteres por línea).
- 80 mm — Papel térmico ancho (~48 caracteres por línea). Aprovecha el espacio extra: separador más largo, QR más grande, más información visible por línea.
Importante: Asegúrate de seleccionar el ancho correcto según el rollo de papel instalado en tu impresora. Si seleccionas 80 mm con papel de 58 mm, el texto se cortará.
Tamaño del título
- Normal (1x) — Tamaño estándar de la fuente térmica.
- Doble (2x) — Recomendado para la mayoría de estacionamientos. Texto destacado sin ocupar demasiado espacio.
- Triple (3x) — Título grande e impactante. Ideal para nombres cortos.
Mostrar RFC / titular
Actívalo para incluir el nombre o razón social del titular en el ticket (útil para facturación). Desactívalo si prefieres tickets más limpios o si el nombre es muy largo.
Mostrar dirección
Controla si aparecen las tres líneas de dirección del estacionamiento en el ticket. Desactivarlo ahorra espacio en el papel.
Tamaño del QR (1 a 16)
El código QR en el boleto de entrada puede ajustarse en tamaño del 1 al 16:
- 3 a 5 — Tamaño estándar. Funciona bien en la mayoría de escáneres y cámaras.
- 8 — QR grande. Recomendado si usas lectores antiguos o el ambiente tiene poca luz.
- 10 a 16 — QR muy grande. Ideal para papel de 80 mm cuando se quiere un código fácil de escanear.
El QR codifica el número de folio del boleto y es lo que escanea el lector o la cámara para registrar la salida.
Espaciado entre elementos
- Compacto — Mínimo espacio entre secciones. El ticket sale más corto, ahorrando papel.
- Normal — Espaciado equilibrado.
- Espaciado — Mayor separación visual. El ticket es más largo pero más fácil de leer.
Mensaje de agradecimiento
Texto personalizado que aparece al final del ticket (antes del separador). Por defecto: "gracias por su preferencia". Puedes cambiarlo por cualquier frase, por ejemplo: "¡Vuelva pronto!", "Estacionamiento seguro las 24 h", etc. Déjalo vacío para no mostrar ningún mensaje.
En el ticket de salida, el mensaje se muestra entre signos de admiración (¡Mensaje!).
Texto extra
Línea de texto libre que aparece antes del mensaje de agradecimiento. Ideal para promociones, avisos o información adicional. Ejemplos:
- "10% de descuento en su próxima visita"
- "Lun-Vie 6AM-10PM | Sab 8AM-8PM"
- "No nos hacemos responsables por objetos de valor"
Déjalo vacío para no mostrar texto extra.
Corte de papel
Actívalo para que la impresora corte el papel automáticamente al final de cada boleto (comando ESC/POS de corte completo). Si tu impresora no tiene cuchilla o prefieres cortar manualmente, desactívalo.
Avances de línea antes del corte
Número de saltos de línea (0 a 20) que la impresora avanza antes de ejecutar el corte. Sirve para que el texto no quede pegado al corte. Aumenta el valor si el corte queda muy junto al último texto.
Logo del ticket
Puedes imprimir un logo en la parte superior de los boletos (entrada y salida). Se sube desde esta misma pantalla y se convierte automáticamente a blanco y negro para la impresora térmica.
- Imagen: PNG, JPG, BMP, WebP o GIF (máximo 10 MB; se redimensiona automáticamente). Recomendado: logo en negro sólido sobre fondo blanco o transparente.
- Subir / Quitar: Usa los botones "Subir logo" y "Quitar". El logo se guarda de inmediato, sin necesidad de presionar "Guardar".
- Tamaño del logo: Pequeño, Mediano, Grande, Extra grande o Máximo. En 80 mm: Pequeño 12 mm, Mediano 16 mm, Grande 32 mm, Extra grande 40 mm y Máximo 48 mm. Los niveles grandes usan un escalado interno 2x para no sobrecargar el envío a la impresora.
- Altura del logo (% del ancho): Ajusta la proporción (20 a 100). Si el logo se ve estirado o aplastado, cambia este valor hasta que se vea correcto. 100 = tan alto como ancho (cuadrado); 60 es un valor común.
Nota: El logo se centra automáticamente en el boleto. La proporción correcta depende de cada impresora; si el logo se ve estirado verticalmente, reduce "Altura del logo".
16. Voz y anuncios (Text-to-Speech)
OpeniPark puede hablar en voz alta usando un servicio de texto a voz (Text-to-Speech) basado en las voces naturales de Microsoft Edge, alojado en tu propio VPS. Esto permite anunciar la bienvenida, el total a pagar o el cobro de un boleto extraviado de forma automática y audible para el cliente.
Esta sección es solo para administradores. Se accede desde Ajustes → Voz / Anuncios.
Seguridad: La API Key del servicio de voz se guarda en el servidor y nunca se expone en el navegador. Las peticiones se hacen a través de un proxy interno de OpeniPark.
Activar voz
Interruptor general del complemento. Si está en "No", no se reproducirá ningún anuncio. Úsalo para desactivar la voz temporalmente sin perder la configuración.
API Key
Clave de acceso de tu servicio TTS. Se define en el archivo docker-compose.yml de tu VPS (variable TTS_API_KEY). Pégala aquí tal cual. Sin una clave válida, los anuncios no podrán generarse.
URL del servicio
Dirección base del servicio TTS (por defecto https://iot.buyubampo.com). Solo cámbiala si alojas el servicio en otro dominio.
Voz
El selector de voz incluye más de 40 voces en español, agrupadas por país. Las voces de México son:
- Jorge (es-MX-JorgeNeural) — Hombre, México (predeterminada).
- Dalia (es-MX-DaliaNeural) — Mujer, México.
Microsoft solo ofrece estas dos voces para México; por eso el selector incluye también voces de España (Álvaro, Elvira, Ximena), Estados Unidos (Alonso, Paloma) y el resto de países de habla hispana (Argentina, Colombia, Chile, Perú, Venezuela, etc.).
Si necesitas ver la lista completa de voces (incluidos otros idiomas), consulta el endpoint público GET /api/tts/voices de tu VPS.
Velocidad, volumen y tono
- Velocidad — Ajusta la rapidez del habla. Ejemplos:
+10% (más rápido) o -5% (más lento).
- Volumen — Ajusta el nivel de salida. Ejemplo:
+20%.
- Tono — Ajusta la altura de la voz. Ejemplo:
-2Hz.
El valor por defecto de los tres es +0% (o +0Hz para el tono), es decir, sin cambios.
Momentos de uso
Puedes activar o desactivar cada anuncio de forma independiente y personalizar su mensaje:
- Anunciar al imprimir boleto de entrada — Reproduce una bienvenida al generar el boleto de entrada. Mensaje por defecto: "Bienvenido a {nombre}. {hora}. Tu folio es el {folio}.".
- Anunciar al cobrar un boleto — Reproduce el total a pagar al leer un boleto de salida. Mensaje por defecto: "Total a pagar {total} pesos".
- Anunciar boleto extraviado — Reproduce el cobro cuando se procesa un boleto extraviado. Mensaje por defecto: "Cobro de boleto extraviado {total} pesos".
- Anunciar al aplicar un descuento — Al seleccionar un descuento en la pantalla de cobro, menciona el descuento y el nuevo total. Mensaje por defecto: "Descuento del {descuento}. Ahora solo deberá pagar {total} pesos.".
Variables en los mensajes
En los mensajes puedes usar las siguientes variables, que se reemplazan automáticamente por el valor real:
- {nombre} — Nombre del estacionamiento.
- {total} — Total a pagar.
- {folio} — Número de folio del boleto.
- {tiempo} — Tiempo de servicio en horas y minutos (ej. "2 horas y 15 minutos").
- {hora} — Hora actual dicha en voz (ej. "Son las cuatro treinta de la tarde").
Ejemplo: "Bienvenido a {nombre}. {hora}. Tu folio es el {folio}." → "Bienvenido a Estacionamiento JJR. Son las cuatro treinta de la tarde. Tu folio es el 565636526."
Pausas y entonación
Puedes controlar las pausas y la entonación de dos formas:
- Signos de puntuación — Las comas (,) generan una pausa corta y los puntos (.) una pausa larga. Los signos de interrogación (?) y exclamación (!) cambian la entonación de forma natural.
- Variables de pausa — {pausa} inserta una pausa corta (equivale a una coma) y {pausa_larga} una pausa larga (equivale a puntos suspensivos).
Ejemplos de pausas
Pausa corta con coma:
Bienvenido a {nombre}, tu folio es el {folio}.
Pausa larga con {pausa_larga}:
Bienvenido a {nombre}.{pausa_larga}Son las {hora}.{pausa}Tu folio es el {folio}.
Énfasis por puntuación (exclamación):
¡Gracias por su visita! Favor de pagar {total} pesos.
Importante: Este servicio no interpreta SSML. Si escribes etiquetas como <speak> o <break/>, la voz las leerá literalmente ("speak", "barra diagonal", etc.). Usa solo texto plano y signos de puntuación.
Probar
El botón "Probar voz" reproduce un texto de prueba usando los valores actuales del formulario (API Key, voz, velocidad, etc.), aunque aún no hayas presionado "Guardar". Es la forma más rápida de verificar que la clave y la voz funcionan correctamente.
Importante: Recuerda presionar "Guardar" para que los cambios queden registrados. Algunos navegadores bloquean la reproducción automática de audio al cargar la página; si no escuchas el anuncio, usa el botón "Repetir anuncio" que aparece en la pantalla de cobro y en la de impresión de entrada.
17. Modos de prueba y depuración
El sistema incluye tres modos de operación para la impresión, configurables desde Ajustes → Opciones de Impresora → Modo de prueba.
Normal (MQTT)
Modo de producción. Los boletos se envían al Módulo de Impresión a través del broker MQTT y se imprimen normalmente en la impresora térmica. Usa este modo durante la operación diaria.
Guardar en archivo
Los boletos se envían a la impresora normalmente y además se guarda una copia de los datos en el servidor, dentro de la carpeta debug/{id_estacionamiento}/.
Por cada boleto se generan tres archivos:
| Archivo | Contenido | Uso |
entrada_4380_20260805_175557.hex | Payload ESC/POS en hexadecimal | Copiar y pegar en MQTTX para probar manualmente |
entrada_4380_20260805_175557.bin | Payload ESC/POS en binario crudo | Enviar directamente a la impresora por TCP |
entrada_4380_20260805_175557.txt | Configuración usada (ancho, tamaño, etc.) | Registro de qué parámetros generaron ese ticket |
El nombre del archivo incluye: tipo de ticket (entrada/salida), número de folio y fecha/hora de generación.
¿Para qué sirve este modo?
- Probar diferentes configuraciones de ancho, tamaño, espaciado sin necesidad de tener la impresora conectada todo el tiempo.
- Enviar los archivos
.hex manualmente desde MQTTX para verificar el resultado en la impresora física.
- Comparar el contenido de dos configuraciones distintas lado a lado.
- Depurar problemas: si un ticket no sale como esperas, revisa el archivo
.txt para ver qué configuración se usó.
Vista previa en pantalla
En lugar de enviar el boleto a la impresora, muestra una simulación visual en el navegador con:
- Render del papel térmico: Una representación visual del ticket con el ancho exacto en caracteres (32 para 58 mm, 48 para 80 mm), fuente monoespaciada proporcional a la impresora real, y un código QR escaneable generado con el folio real.
- Datos hexadecimales (HEX): El payload ESC/POS completo listo para copiar y pegar en MQTTX o cualquier cliente MQTT.
- Metadatos: Ancho, caracteres por línea, tamaño del título, tamaño del QR, bytes totales del payload.
Importante: La vista previa en pantalla NO imprime el boleto ni lo envía por MQTT. Es exclusivamente para previsualizar y depurar. El boleto de entrada SÍ se registra en la base de datos (se genera el folio), pero no se envía a la impresora. Para el ticket de salida, la vista previa tampoco modifica la base de datos.
Flujo de trabajo recomendado para configurar tickets
- Cambia el modo a "Vista previa en pantalla" y guarda.
- Genera un boleto de entrada. Revisa el render visual y los datos HEX.
- Ajusta los parámetros (ancho, tamaño, espaciado, mensajes) desde Ajustes.
- Genera otro boleto y compara. Repite hasta que el diseño te convenza.
- Cambia el modo a "Guardar en archivo", genera un boleto, copia el
.hex a MQTTX y verifica en la impresora real.
- Una vez confirmado, cambia a "Normal (MQTT)" para operación diaria.
18. Modo oscuro
El sistema incluye un modo oscuro para reducir la fatiga visual. Puedes activarlo o desactivarlo desde:
- El icono en la barra de navegación superior (escritorio).
- El menú de hamburguesa en dispositivos móviles.
La preferencia se guarda automáticamente y se recuerda en futuras visitas.
19. Configuración de descuentos
Los descuentos permiten reducir el total a pagar por un boleto usando motivos predefinidos (convenios, empleados, cortesías, promociones). Solo los usuarios con permisos de administrador pueden configurar los motivos y aplicarlos en la pantalla de cobro.
¿Por qué definir motivos en vez de descontar a mano? Porque cada descuento queda registrado con nombre y valor en la operación y en los reportes. Así sabes exactamente cuánto se descontó, por qué concepto y quién lo aplicó, en lugar de un monto arbitrario sin justificación.
Se accede desde Ajustes → Configuración de descuentos (solo administradores).
Motivos de descuento
Cada motivo define un tipo de descuento que los administradores podrán aplicar en el cobro:
- Nombre — Identificador visible en la pantalla de cobro y en reportes (Ej: "Convenio", "Empleado", "Cliente frecuente", "Gratuidad").
- Tipo — Monto fijo ($) o porcentaje (%).
- Valor — El monto a descontar. Para porcentaje, un número entre 1 y 100. Para monto fijo, la cantidad en pesos.
- Activo — "Sí" = disponible para aplicar; "No" = queda oculto sin eliminarlo.
¿Monto fijo o porcentaje? ¿Cuál elegir?
La elección depende de qué quieres expresar con el descuento:
- Monto fijo ($) — Descuenta siempre la misma cantidad, sin importar el total. ¿Por qué elegirlo? Ideal cuando el beneficio es un importe concreto, como "descuento de $20 a empleados" o "cortesía de $10". Es predecible para quien lo aplica.
- Porcentaje (%) — Descuenta una fracción del total. ¿Por qué elegirlo? Ideal cuando quieres que el beneficio sea proporcional al consumo, como "10% a clientes frecuentes" o "50% a convenios corporativos". A mayor estancia (mayor total), mayor descuento.
Ejemplos de cálculo
Supongamos un boleto con total original de $100.00:
- Descuento fijo de $20.00 → $100 - $20 = $80.00.
- Descuento de 15% → $100 - ($100 × 0.15) = $85.00.
- Descuento de 100% → $100 - $100 = $0.00 (el total nunca queda negativo).
Regla importante: el porcentaje se calcula sobre el total original
Cuando aplicas varios descuentos, los porcentajes se calculan siempre sobre el total original (sin descontar), no sobre el total que va quedando. Esto significa que los descuentos se suman de forma simple.
Ejemplo: total original $100 con dos descuentos de 10% → $100 - $10 - $10 = $80.00 (equivale a un 20% total). No se calcula 10% sobre $100 y luego 10% sobre $90.
Ejemplo combinado: total original $100 con 10% + $15 fijo → $100 - $10 - $15 = $75.00.
¿Cómo se aplican en la pantalla de cobro?
Al leer un boleto, los usuarios administradores verán una sección de "Descuentos" con un botón por cada motivo activo. Al presionarlo, el descuento se agrega al ticket y el total se recalcula al instante.
- Se pueden aplicar múltiples descuentos al mismo boleto. Cada uno aparece como un chip con su nombre y valor.
- Para quitar un descuento, presiona la "×" del chip o vuelve a tocar el botón del motivo.
- El total mostrado en pantalla y en el ticket impreso refleja todos los descuentos aplicados.
- Los operadores sin permisos de administrador no ven la sección de descuentos.
¿Cuándo desactivar un motivo (Activo = No)?
Desactívalo cuando un descuento deje de aplicar temporalmente, sin perder su configuración:
- Una promoción que ya terminó y quieres reutilizar el próximo año.
- Un convenio en revisión o suspendido.
- Evitar que los operadores lo apliquen por error mientras tanto.
Al estar "No", el motivo no aparece en la pantalla de cobro, pero conserva su configuración y sus registros históricos en reportes.
En reportes
En la tabla de detalle de cada turno, la columna "Descuentos" muestra qué motivos se aplicaron a cada operación y su valor. Si una operación no tuvo descuentos, la celda aparece vacía. Los descuentos también quedan registrados en la Auditoría (sección siguiente) con el folio, el cobro y el detalle de descuentos.
Nota: Un descuento del 100% deja el ticket en $0.00. Úsalo con precaución y combínalo con un motivo claro como "Gratuidad" o "Cortesía", para que quede justificado en los reportes y en la auditoría.
20. Auditoría
La Auditoría es un registro cronológico de las acciones importantes que realizan los usuarios del sistema. Te permite saber quién hizo qué y cuándo: inicios de sesión, cortes de turno, cobros y cambios en las cuentas de operadores.
¿Para qué sirve?
- Detectar accesos no autorizados o fuera de horario.
- Revisar quién aplicó descuentos y cuánto descontó en cada cobro.
- Dar seguimiento a los cortes de turno y a los cambios en las cuentas de operadores.
- Tener evidencia ante una discrepancia de caja o un reclamo.
Se accede desde Ajustes → Auditoría (solo administradores).
¿Qué acciones se registran?
- Inicio de sesión — Cada vez que alguien ingresa al sistema.
- Corte de turno — Cuándo se cerró un turno y qué operador entrante quedó a cargo.
- Cobro realizado — Cada operación cobrada, con su folio, monto y descuentos aplicados.
- Operador creado / editado / eliminado — Cambios en las cuentas de operadores.
Columnas de la tabla
- Fecha — Fecha y hora exactas de la acción.
- Usuario — Nombre de quien realizó la acción.
- Tipo — Rol del usuario: Admin o Operador.
- Acción — Tipo de acción (inicio de sesión, corte, cobro, operador creado, etc.).
- Detalle — Información extra según la acción: en un cobro muestra folio, monto y descuentos; en un corte muestra el operador entrante y los tickets activos; en cambios de operador muestra el usuario afectado.
Filtros
- Acción — Muestra solo un tipo de acción (ej. "Cobro realizado").
- Usuario — Busca por nombre de usuario.
Los resultados se muestran en orden del más reciente al más antiguo y se dividen en páginas de 30 registros. Usa los botones al final de la tabla para navegar.
Ejemplo de lectura
Un registro de cobro se vería así:
25/08/2026 14:32 | Juan Pérez | Operador | Cobro realizado | folio: 4380 | cobro: 85.00 | tipo: salida | descuentos: Cliente frecuente (15%)
Esto indica que el operador "Juan Pérez" cobró $85.00 por el folio 4380 y aplicó el descuento "Cliente frecuente" del 15% sobre un total mayor.
Nota: La auditoría es solo de lectura: no se puede editar ni borrar. Esto garantiza que el historial sea confiable como evidencia. Revisa también la sección 13. Auditar Sensores, que cruza eventos de sensores con tickets y es una herramienta distinta pero complementaria.
21. Recuperación de contraseña
Si olvidaste tu contraseña, en la pantalla de inicio presiona "Olvidé mi contraseña". Ingresa tu correo electrónico y recibirás un enlace para restablecerla. El enlace expira después de 1 hora.
Nota: Por seguridad, el sistema siempre muestra un mensaje de éxito incluso si el correo no está registrado (para evitar que se descubran cuentas existentes).
22. Solución de problemas
Esta sección reúne los problemas más comunes y su solución, organizados por área. Antes de contactar a soporte, revisa aquí el apartado que corresponda a tu situación.
22.1 Acceso y cuentas
No puedo iniciar sesión (aparece "Credenciales inválidas").
- Verifica que escribiste correctamente el usuario o correo y la contraseña (revisa mayúsculas y espacios).
- Recuerda que los administradores pueden entrar con su usuario o correo, mientras que los operadores deben usar únicamente su correo electrónico.
- Si olvidaste tu contraseña, usa "Olvidé mi contraseña" en la pantalla de inicio.
No recibí el correo de confirmación al crear mi cuenta.
- Revisa la carpeta de spam o correo no deseado de tu bandeja.
- Verifica que escribiste bien tu correo al registrarte.
- Espera unos minutos: algunos proveedores de correo tardan en entregar.
- Si no aparece, intenta registrarte de nuevo con el mismo correo o contacta a soporte.
No recibí el enlace para restablecer mi contraseña.
- Revisa spam o correo no deseado.
- Asegúrate de escribir el mismo correo con el que te registraste.
- El enlace expira después de 1 hora: si ya pasó, solicita uno nuevo.
No aparece el botón "Continuar con Google".
El acceso con Google solo se muestra cuando el administrador del sistema lo tiene configurado. Si no aparece, inicia sesión de la forma normal (usuario/correo y contraseña).
Al entrar con Google me pide completar mi perfil.
La primera vez que entras con una cuenta de Google nueva, el sistema crea tu cuenta y debes completar los datos de tu estacionamiento en Ajustes → Información del perfil. Es un paso único.
Me aparece "sesión expirada" o el sistema me cierra de repente.
Es normal por seguridad tras un tiempo de inactividad. Simplemente vuelve a iniciar sesión desde la pantalla de inicio.
No veo las opciones de administración (Ajustes, Operadores, Perfiles, etc.).
Las opciones de Ajustes, Gestionar Operadores, Perfiles de cobro, Programación de horarios, Configuración de descuentos y Auditoría solo están disponibles para cuentas de administrador. Si eres operador, pide al administrador que revise tu rol.
22.2 Impresión de boletos
La impresora no imprime.
- Verifica que el "Módulo de Impresión" esté encendido y conectado a la corriente.
- Revisa que el Módulo de Impresión tenga conexión a internet.
- La impresora debe tener papel térmico y estar conectada al Módulo de Impresión por cable USB.
- Comprueba que el modo de impresión esté en "Normal (MQTT)" en Ajustes → Opciones de Impresora → Modo de prueba. Si quedó en "Vista previa en pantalla", no imprimirá.
El boleto sale en blanco o a medias.
- Puede faltar papel o estar mal colocado en la impresora térmica.
- Revisa que el ancho de papel configurado (58 mm u 80 mm) coincida con el rollo instalado. Si seleccionaste 80 mm con papel de 58 mm, el texto se cortará.
- Si el problema empezó al subir un logo, reduce el "Tamaño del logo" en Ajustes → Opciones de Impresora.
El logo no imprime o hace que el boleto falle.
El tamaño del logo probablemente excede lo que el Módulo de Impresión puede recibir. Reduce el "Tamaño del logo" a un nivel menor (Mediano o Pequeño) en Ajustes → Opciones de Impresora y prueba de nuevo.
El logo se ve estirado o aplastado.
Ajusta el campo "Altura del logo (% del ancho)" en Ajustes → Opciones de Impresora. Si se ve estirado (más alto de lo normal), reduce el valor; si se ve aplastado, auméntalo. Este valor puede variar entre impresoras.
La impresora no corta el papel.
- Activa la opción "Corte de papel" en Ajustes → Opciones de Impresora.
- Verifica que tu impresora tenga cuchilla; de lo contrario corta manualmente.
El ticket muestra el nombre antiguo del estacionamiento.
El nombre se carga al iniciar sesión. Cierra sesión y vuelve a entrar para que se actualice con el nuevo nombre.
22.3 Lectura de boletos y QR
El lector QR por cámara no funciona o no enciende la cámara.
- Concede el permiso de cámara al navegador (icono del candado junto a la URL). Si lo bloqueaste, vuelve a activarlo desde ahí.
- Verifica que la cámara no esté siendo usada por otra aplicación.
- En dispositivos con varias cámaras, elige la cámara trasera desde el selector inferior.
- El lector requiere una conexión HTTPS segura; si entras por HTTP es posible que la cámara no funcione.
El escáner láser no lee los códigos.
- Verifica que esté conectado por USB y que el campo de texto del lector tenga el foco (haz clic sobre él).
- Configura el escáner para que envíe Enter automáticamente después de cada lectura.
Aparece "Boleto no existe" al leer un folio.
El folio escaneado no pertenece a este estacionamiento o no fue generado por el sistema. Verifica que escaneaste el código correcto (el del boleto de entrada, no otro documento).
Aparece "Boleto ya leído".
Ese boleto ya fue procesado anteriormente y su servicio está cerrado. No puede cobrarse dos veces.
Aparece "Estacionamiento equivocado".
El boleto pertenece a otro estacionamiento. No es posible leer boletos de otro lote desde esta cuenta.
22.4 Cobros y tarifas
El cobro no es el que esperaba.
Revisa la configuración de tu perfil de cobro y la Programación de horarios. Verifica especialmente:
- Que el perfil correcto se esté aplicando según el horario actual en Ajustes → Programación de horarios.
- Que el perfil de respaldo en Ajustes → Perfiles de cobro tenga los valores correctos.
- Que la tolerancia inicial tenga el valor deseado (0 = sin minutos gratis).
- Que las tolerancias extra de cada periodo estén correctas. Recuerda que la tolerancia NO se acumula: solo evita que el siguiente periodo se cobre si el tiempo extra no la supera.
- Que la tarifa mínima y tarifa máxima no estén limitando el cobro.
- Que el último periodo tenga marcado "Aplica sucesivo" si deseas que se repita para estancias largas.
Aparece "No hay un perfil de cobro asignado".
No hay ningún perfil disponible para el cobro. Verifica que tengas al menos un perfil de cobro creado y que la Programación de horarios tenga una regla activa para este momento, o que exista un perfil activo por defecto en Ajustes → Perfiles de cobro.
El perfil de cobro no cambia según el horario configurado.
Verifica en Ajustes → Programación de horarios que:
- El horario esté activo.
- Los días de la semana seleccionados incluyan el día actual. Si dejaste todos sin marcar, aplica todos los días.
- La hora inicio/fin cubra el momento actual. Recuerda que si hora inicio > hora fin, el horario cruza la medianoche.
- Las fechas (si configuraste) incluyan la fecha de hoy.
- No haya otro horario con mayor prioridad que esté ganando. El sistema evalúa de mayor a menor prioridad.
Dos horarios se solapan y no se aplica el esperado.
Revisa las prioridades de ambos horarios. El de mayor número gana. Si tienen la misma prioridad, gana el de menor ID (más antiguo). Ajusta la prioridad del horario que quieres que tenga preferencia.
No aparecen los botones de descuento en la pantalla de cobro.
Los descuentos solo son visibles para usuarios administradores. Si eres administrador y no los ves, verifica que haya al menos un motivo de descuento activo en Ajustes → Configuración de descuentos.
El ticket impreso no refleja el descuento aplicado.
Aplica los descuentos antes de presionar "Imprimir ticket". Si los aplicas después de imprimir, el ticket no los incluirá, aunque el cobro final sí se registrará correctamente al presionar "Aceptar".
22.5 Corte de turno
No puedo hacer un corte de turno.
- El corte solo está disponible para administradores.
- Recuerda seleccionar el operador que continuará el siguiente turno.
- No se puede realizar un corte si ya existe un corte activo sin cerrar. Revisa el resumen del turno antes de continuar.
22.6 Reportes
No encuentro un turno en Reportes.
La vista muestra los últimos turnos; usa el campo de búsqueda por número de turno para localizar uno específico.
No llega el reporte por correo.
- Verifica que escribiste bien el correo del destinatario.
- Revisa la carpeta de spam del destinatario.
No se descarga el CSV o no se abre el PDF.
- Verifica tu conexión a internet.
- Para el CSV, abre el archivo con Excel o Google Sheets.
- Para el PDF, usa el diálogo de impresión del navegador y elige "Guardar como PDF".
22.7 Sensores
El indicador de sensores siempre muestra OFFLINE.
- Verifica que el Módulo de Sensores esté encendido y conectado a la red WiFi.
- Comprueba que el módulo esté vinculado a tu cuenta (el token del dispositivo debe coincidir con el registrado en el sistema).
- Si el problema persiste, contacta a soporte técnico para revisar la configuración de conexión del módulo.
Los contadores de sensores no coinciden con los tickets.
Usa Reportes → Auditar Sensores para identificar eventos sin ticket. Recuerda que los sensores detectan todo vehículo que cruza, mientras que los tickets solo se generan para vehículos que efectivamente se estacionan.
Auditar Sensores no encuentra tickets para mis eventos.
La diferencia de tiempo entre el sensor y la impresión del boleto debe estar dentro de los límites de tolerancia (3 minutos para entradas, 5 minutos para salidas). Si el operador tarda más en imprimir, el match no se producirá. Verifica también que la zona horaria del servidor esté configurada como America/Mazatlan.
22.8 OpeniPark Socio (app del cliente)
Aparece "QR no válido".
El código escaneado no es un QR de socio. Verifica que estás escaneando el código de la app OpeniPark Socio (que comienza con PARKIT|) y no un boleto normal.
Aparece "QR expirado".
El código del socio caduca a los pocos minutos por seguridad. Pide al cliente que actualice su app (cierre y vuelva a abrir la pantalla del QR) y escanéalo de nuevo.
Aparece "Socio no encontrado" o "Cuenta inactiva".
No existe un socio con ese folio, o su cuenta está bloqueada. Verifica con el cliente sus datos, o revisa el estado del socio en Ajustes → Socios registrados.
Aparece "Módulo deshabilitado".
OpeniPark Socio no está habilitado en tu estacionamiento. Actívalo en Ajustes → OpeniPark Socio → Habilitar módulo de socios.
Aparece "Socio no vinculado".
El socio no está asociado a tu estacionamiento. Pide al cliente que vincule tu lote desde su app: "Mis estacionamientos → Agregar".
Aparece "Servicio recién cerrado".
El socio cerró su servicio hace pocos minutos. Por seguridad el sistema no registra una entrada automática. Verifica si realmente va a ingresar de nuevo y espera el tiempo configurado antes de volver a leer su QR.
Aparece "QR de salida".
El QR del socio es de salida, pero no tiene servicio activo en tu estacionamiento (su servicio está en otro lote). Un QR de salida nunca crea una entrada.
No aparece el botón "Recarga socio" o no puedo recargar.
El botón "Recarga socio" solo aparece si el módulo OpeniPark Socio está habilitado. Verifica en Ajustes → OpeniPark Socio. Para recargar, escanea el QR del cliente y escribe el monto a abonar.
22.9 Voz y anuncios
No se escuchan los anuncios de voz.
- Verifica que la opción "Activar voz" esté en "Sí" en Ajustes → Voz / Anuncios.
- Confirma que la API Key y la URL del servicio sean correctas. Usa el botón "Probar voz" para verificar.
- Algunos navegadores bloquean el audio automático: si no escuchas el anuncio, usa el botón "Repetir anuncio".
- Revisa el volumen del dispositivo.
22.10 Recomendaciones generales
La página se ve mal o no carga bien.
- Recarga la página (F5).
- Borra la caché del navegador o abre en una ventana de incógnito.
- Verifica tu conexión a internet.
- Usa un navegador actualizado (Chrome o Edge recomendados).
Los botones no responden o aparece "Error de conexión".
- Comprueba tu conexión a internet.
- Espera unos segundos y vuelve a intentarlo; evita presionar el botón varias veces seguidas.
- Si el problema persiste, cierra sesión y vuelve a entrar.
Soporte: Si después de revisar esta sección el problema continúa, contacta a soporte técnico indicando la pantalla donde ocurre, el mensaje de error exacto y los pasos que realizaste. Esta información ayuda a resolverlo más rápido.
23. OpeniPark Socio (app del cliente)
OpeniPark Socio es la aplicación (PWA) para los clientes del estacionamiento. Le da a cada cliente un pase digital que sustituye al boleto de papel: entra y sale mostrando un código QR desde su celular, y además lleva su historial de visitas y un monedero electrónico con beneficios.
Es una app independiente de la app del operador. El cliente la instala desde su navegador (se guarda como aplicación en la pantalla de inicio).
¿Cómo se registra un cliente?
Cada estacionamiento publica un código QR (o enlace) de registro. Al escanearlo, el cliente abre el formulario de registro de OpeniPark Socio y queda asociado a ese estacionamiento.
Pasos para el cliente:
- Escanea el código QR de registro del estacionamiento.
- Llena el formulario (nombre, apellidos, correo, teléfono opcional y contraseña).
- Recibe un correo de confirmación y activa su cuenta.
- Inicia sesión: la app le muestra su folio de socio (ej. S000123) y su código QR.
Nota: La app del cliente queda ligada al estacionamiento cuyo QR usó para registrarse, pero el cliente puede vincularse a varios estacionamientos después (ver "Varios estacionamientos" más abajo). El subtítulo de la app muestra el estacionamiento actual.
Pantallas del cliente
- QR dinámico — Al abrir la app, el cliente ve su código QR en grande. Si no tiene un servicio activo, el QR es de entrada; si tiene un auto adentro, cambia automáticamente a QR de salida con el resumen del servicio.
- Servicio en curso — Cronómetro del tiempo estacionado, fecha/hora de entrada y saldo del monedero.
- Historial — Lista de sus servicios anteriores con fecha, monto y estacionamiento.
- Monedero — Saldo disponible y movimientos (recargas, cashback y pagos).
El QR del cliente expira a los pocos minutos y se renueva automáticamente. Por eso, si el cliente abrió la app en su casa, no pasa nada: el servicio solo se registra cuando el operador escanea el código en la pluma.
Operación del lado del operador
Cuando un cliente muestra su QR de OpeniPark Socio en la pluma, el operador usa el lector QR igual que con un boleto. El sistema reconoce el código de socio y actúa según el caso:
Entrada de un socio
Si el socio no tiene un servicio activo, al leer su QR el sistema:
- Registra la entrada sin imprimir boleto de papel.
- Muestra la confirmación "Entrada registrada".
- Envía la orden de abrir la barrera de entrada.
La app del cliente muestra de inmediato el inicio del servicio y el cronómetro comienza a correr.
Salida de un socio
Si el socio ya tiene un servicio activo, al leer su QR el sistema muestra la pantalla de cobro:
- Total a pagar según el perfil de cobro activo.
- Saldo del monedero y botón "Usar monedero" para pagar (total o parcialmente) con ese saldo.
- Botón Cobrar para cerrar el servicio y abrir la barrera de salida.
Al cerrar el servicio, la app del cliente genera el fin del servicio y lo guarda en su historial.
Recarga de monedero (en caseta)
El cliente puede abonar saldo en efectivo en la caseta. El operador presiona "Recarga socio" en el panel principal, escanea el QR del cliente y escribe el monto a abonar. El saldo queda disponible de inmediato en la app del cliente.
Monedero y cashback
El monedero es por estacionamiento: cada socio tiene un saldo independiente por cada lote donde se registra. Los movimientos quedan registrados como recarga, pago o cashback.
- Recarga — Saldo abonado en caseta (efectivo).
- Pago — Uso del saldo para cubrir un servicio.
- Cashback — Porcentaje del cobro que se acumula automáticamente al monedero del cliente (configurable por estacionamiento).
Varios estacionamientos (vinculación)
Un mismo socio puede estar vinculado a varios estacionamientos OpeniPark con la misma cuenta. Su monedero, cashback y servicios se manejan por separado en cada lote.
- El cliente se vincula a otro estacionamiento desde su app: "Mis estacionamientos → Agregar", escaneando el QR de ese estacionamiento o seleccionándolo de la lista (solo aparecen los estacionamientos de su misma ciudad).
- Al entrar, salir o recargar en un lote, ese lote se convierte automáticamente en el estacionamiento actual del cliente.
- El operador solo puede operar con socios vinculados a su estacionamiento. Si escanea el QR de un socio no vinculado, verá "Socio no vinculado" y no se registrará nada.
Aislamiento de datos: Cada estacionamiento solo ve los datos del socio correspondientes a su lote (identidad, saldo y servicios de ese lote). Nunca se muestran el saldo ni los servicios del socio en otros estacionamientos.
Protección contra doble lectura
Si un socio cerró su servicio y su QR se vuelve a leer en los siguientes 5 minutos, el sistema muestra "Servicio recién cerrado" y no registra una entrada automática. Esto evita entradas accidentales por escanear dos veces. Pasado ese margen, una nueva lectura sí se considera una visita nueva.
QR de salida (no genera entrada)
Si el QR del socio es de salida (tiene un servicio activo) pero en este estacionamiento no hay ningún servicio abierto, el sistema no registra entrada: muestra "QR de salida" indicando que el socio tiene su servicio en otro estacionamiento. Así un QR de salida nunca crea una entrada, en ningún estacionamiento.
Configuración del módulo (administrador)
Para activar y personalizar OpeniPark Socio en tu estacionamiento:
Habilitar el módulo y definir el cashback
Ve a Ajustes → OpeniPark Socio:
- Habilitar módulo de socios (Sí/No) — Activa la lectura del QR de socio, el botón "Recarga socio" del panel y el registro de clientes.
- Porcentaje de cashback (%) — Porcentaje del cobro que se acumula automáticamente al monedero del cliente (0 = sin cashback).
- Minutos de espera para reingresar — Tiempo (minutos) que debe pasar tras cerrar un servicio antes de permitir una nueva entrada del mismo socio (0 = sin espera).
Importante: Si el módulo está deshabilitado, el botón "Recarga socio" desaparece del panel principal y al leer un QR de socio se muestra "Módulo deshabilitado". El sistema tradicional de boleto de papel sigue operando con normalidad.
QR de registro (para publicar)
En Ajustes → OpeniPark Socio → Registro de socios (QR) se muestra el código QR de registro de tu estacionamiento (y su enlace con botón "Copiar enlace").
- Imprímelo o publícalo en tu estacionamiento para que los clientes se registren en OpeniPark Socio.
- Quien escanee ese QR y ya tenga cuenta, podrá vincular tu estacionamiento a su cuenta existente.
Socios registrados
En Ajustes → Socios registrados puedes ver la lista de clientes vinculados a tu estacionamiento: folio, nombre, correo, teléfono, saldo (de tu lote) y estado.
- Bloquear — Impide que el socio inicie sesión o registre servicios; conserva su saldo.
- Activar — Restablece el acceso de un socio bloqueado.
Aislamiento: Esta lista solo muestra socios vinculados a tu estacionamiento y su saldo en tu lote. No verás datos de otros estacionamientos.
Ciudad (filtro de estacionamientos locales)
En Ajustes → Información del perfil → Ciudad define la ciudad de tu estacionamiento. La app OpeniPark Socio usa este dato para mostrar al cliente, al agregar un estacionamiento, solo los de su misma ciudad.
Ubicación del estacionamiento (mapa)
Ve a Ajustes → Información del perfil → Ubicación (mapa):
- Haz clic sobre el mapa para colocar el marcador en la ubicación exacta (o arrástralo para ajustarlo).
- Las coordenadas (Latitud/Longitud) se llenan automáticamente; también puedes escribirlas a mano.
- Al guardar, la app OpeniPark Socio muestra ese marcador exacto en su sección "Ubicación", junto con la opción de compartir la ubicación.
Tarifas que se publican al cliente
La app del cliente muestra en su sección "Tarifas" todos los perfiles de cobro activos con sus horarios de aplicación. Revisa en Ajustes → Perfiles de cobro y Ajustes → Programación de horarios que las tarifas y horarios sean los correctos, ya que es lo que el cliente consulta para saber cuánto pagará y en qué horario aplica cada esquema.
Importante: El sistema tradicional con boleto de papel sigue funcionando igual. OpeniPark Socio es un complemento: si la app del cliente falla o el cliente no la usa, la operación normal con impresora no se ve afectada.
24. Paleta de color
En Ajustes → Paleta de color eliges el esquema de color de tu estacionamiento. El color elegido se aplica en toda la app (botones, resaltados y gráficos) y también en el icono de la pestaña del navegador.
- Selecciona el esquema en la lista y pulsa Guardar.
- La preferencia queda guardada por estacionamiento y se mantiene al iniciar sesión.
25. Aviso de privacidad
En OpeniPark, de conformidad con lo dispuesto en la Ley Federal de Protección de Datos Personales en Posesión de los Particulares, ponemos a tu disposición el presente Aviso de Privacidad.
Responsable
OpeniPark, con domicilio en Culiacán, Sinaloa, México, es el responsable del tratamiento de tus datos personales.
Datos que recabamos
- Datos de identificación y contacto: nombre, correo electrónico y teléfono.
- Datos de tu estacionamiento: nombre, dirección, RFC, CURP y configuración de operación.
- Datos de uso y operación: boletos, cobros y reportes generados en la plataforma.
Finalidades
- Crear y administrar tu cuenta.
- Operar y dar mantenimiento al servicio.
- Generar reportes, facturación y cobros del servicio.
- Enviarte comunicaciones relacionadas con el servicio y su administración.
Derechos ARCO
Puedes ejercer tus derechos de Acceso, Rectificación, Cancelación u Oposición (ARCO) en cualquier momento, así como revocar tu consentimiento, enviando tu solicitud a contacto@openipark.com.
26. Responsabilidad
Configuración correcta: El administrador es responsable de configurar correctamente las tarifas (perfiles de cobro), la programación de horarios, los descuentos, la impresora y los demás parámetros de operación. Un cobro mal calculado por una configuración incorrecta es responsabilidad del estacionamiento.
Seguridad de las credenciales: Eres responsable de mantener la confidencialidad de tu usuario y contraseña, así como de las operaciones realizadas por tus operadores. Notifica de inmediato cualquier acceso no autorizado.
Herramienta de apoyo: OpeniPark es una plataforma de apoyo a la operación y no sustituye la supervisión del personal. El personal del estacionamiento debe verificar las operaciones y los cobros.
Disponibilidad del servicio: Hacemos nuestro mejor esfuerzo por mantener el servicio disponible, pero no garantizamos un funcionamiento ininterrumpido. No somos responsables por interrupciones derivadas de fallas de internet, de energía o de los dispositivos (impresora, Módulo de Impresión, Módulo de Sensores), ni por el uso indebido de la plataforma.