ControlTiempo 1.4: control horario de empleados para FacturaScripts

Versión 1.4 · Compatible con FacturaScripts 2025+

ControlTiempo añade a FacturaScripts el registro de jornada laboral. Los empleados fichan desde el móvil con un cronómetro en tiempo real, pueden pausar el fichaje, ven su horario del día y sus totales, y reciben avisos por email si olvidan fichar. El administrador gestiona empleados, grupos, horarios y festivos, y consulta y exporta los registros desde el panel.

Está pensado para pymes que hoy llevan el control horario en hojas de cálculo o en aplicaciones externas de pago mensual. No necesita usuarios adicionales de FacturaScripts y no envía datos a servidores externos: todo queda en tu propia instalación.

Captura: pantalla de fichaje del empleado en el móvil

Qué problema resuelve

Desde 2019, las empresas en España están obligadas a registrar diariamente la jornada de cada trabajador, con la hora de inicio y de fin. Las alternativas habituales tienen inconvenientes:

  • Aplicaciones especializadas: funcionan, pero suponen un coste mensual por empleado y los datos quedan fuera de tu ERP.
  • Hojas de cálculo: gratis, pero propensas a errores, sin control de quién modifica qué y difíciles de mantener al día.
  • Otros plugins: más completos, pero también más complejos de configurar.

ControlTiempo busca el equilibrio: lo necesario para cumplir y trabajar cómodo, dentro de FacturaScripts y sin complicaciones.

Características principales

Para el empleado

  • Acceso por una URL desde el navegador del móvil, sin instalar ninguna app.
  • Inicio de sesión con código y contraseña propios.
  • Botones grandes de Fichar ENTRADA y Fichar SALIDA, con nota opcional.
  • Cronómetro en tiempo real, anclado al reloj del servidor.
  • Pausas con motivo (descanso, almuerzo, médica, otros) sin cerrar el fichaje.
  • Su horario de hoy en pantalla (por ejemplo, "Hoy: 09:00–14:00 · 16:00–19:00") y aviso si es festivo.
  • Totales de hoy, semana y mes que incluyen el fichaje en curso y avanzan con el cronómetro.
  • Historial de los últimos 30 días.
  • Cierre de fichajes olvidados: si quedó abierto el fichaje de otro día, la pantalla pide a qué hora salió.
  • Modo vacaciones, cambio de contraseña y recuperación por email.
  • Sesión de 30 días en el dispositivo.

Para el administrador

  • Gestión de empleados con cuentas propias, independientes de los usuarios del ERP.
  • Grupos de empleados y horarios por día de la semana, por grupo o por empleado.
  • Alta rápida "Añadir horario semanal", también para horario partido.
  • Festivos generales o por grupo (festivos locales).
  • Avisos automáticos por email de entrada y salida, que entienden el horario partido y la pausa de comida.
  • Textos de los avisos editables desde las notificaciones de FacturaScripts.
  • Listados con filtros, búsqueda y exportación a PDF, XLSX y CSV.
  • Corrección manual de fichajes y pausas, con la duración recalculada sola.
  • Validaciones que evitan errores: horarios solapados, salidas anteriores a la entrada o pausas fuera del fichaje.

Para la empresa

  • Contraseñas cifradas con bcrypt, bloqueo tras intentos fallidos y límite de intentos por IP.
  • Sesiones firmadas con HMAC.
  • Registro de la IP de cada fichaje.
  • Pausas trazadas con inicio, fin y motivo.
  • Los fichajes cerrados por el propio empleado a posteriori quedan marcados en la nota.
  • Los empleados con fichajes no se pueden borrar: el registro de jornada se conserva siempre.
  • Sin dependencias externas.

Modelo de datos

El plugin crea nueve tablas propias al activarse:

  • empleadosct: empleados (código, nombre, email, contraseña cifrada, activo, grupo, control de intentos fallidos).
  • fichajesct: fichajes (empleado, entrada, salida, segundos efectivos, segundos de pausa, nota, IP).
  • pausasct: pausas de cada fichaje (inicio, fin, motivo).
  • gruposct: grupos de empleados.
  • horariosct: horarios (grupo o empleado, día de la semana, entrada, salida opcional, margen de aviso, activo).
  • festivosct: días festivos (fecha, descripción y grupo opcional; sin grupo aplica a todos).
  • avisosct: registro de los avisos enviados, para no duplicarlos. Se purga a los 180 días.
  • vacacionesct: periodos de vacaciones.
  • intentosloginct: control de intentos de acceso por IP.

La duración de cada fichaje (segundos) es tiempo efectivo: salida − entrada − pausas. Se recalcula sola al guardar el fichaje o cualquiera de sus pausas.

Flujo de autenticación del empleado

  1. El empleado abre /EmpleadoFichaje en el navegador.
  2. Introduce su código y su contraseña. Se comprueban el límite de intentos por IP y el bloqueo de la cuenta.
  3. La contraseña se verifica con password_verify.
  4. Si es correcta, se emite una cookie firmada con HMAC-SHA256 que dura 30 días, y la página se recarga en su dirección normal.
  5. En cada visita, la firma se valida con hash_equals. Cambiar la contraseña invalida todas las sesiones anteriores.
  6. En las "apps" de pantalla de inicio del iPhone, la sesión se reanuda sola aunque iOS pierda la cookie.
  7. La recuperación de contraseña usa un enlace de un solo uso que caduca a los 30 minutos y se construye con la URL del sitio configurada en FacturaScripts.

Todas las acciones del empleado (fichar, pausar, vacaciones, cerrar sesión) solo se aceptan desde los botones de su pantalla, y después la página vuelve a su dirección normal: recargar no repite nada.

Cronómetro en tiempo real

El servidor incluye en la página la hora de entrada y la hora actual del servidor. El navegador calcula la diferencia con el reloj del móvil y la compensa, así que el tiempo mostrado es correcto aunque el móvil tenga la hora mal. El cronómetro muestra tiempo efectivo: descuenta las pausas y se congela mientras hay una pausa en curso. Los totales de hoy, semana y mes avanzan a la vez.

Horarios y avisos automáticos

En tres pasos:

  1. Crea los grupos (opcional) y asigna a cada empleado el suyo.
  2. Crea los horarios con el alta rápida "Añadir horario semanal". Marca también los festivos.
  3. Comprueba los requisitos: email en la ficha de cada empleado, email saliente configurado en FacturaScripts y cron activo (php index.php -cron).

Reglas:

  • Aviso de entrada: si no has fichado pasado el margen tras la hora de entrada. Un fichaje solo cubre una entrada si estaba en marcha a esa hora o empezó después, así que en horario partido el fichaje de la mañana nunca tapa el turno de tarde, dure lo que dure la comida.
  • Aviso de salida: si sigue abierto el fichaje de ese turno pasado el margen tras la hora de salida. El fichaje de la tarde no provoca el aviso de la salida de la mañana.
  • Pausa de comida: en horario partido, quien no cierra el fichaje a mediodía sino que usa Pausa → Almuerzo no recibe el aviso de salida de la mañana. En la salida del último turno del día, la pausa no evita el aviso.
  • No se avisa a empleados inactivos, de vacaciones ni en días festivos.
  • Como máximo un aviso por día, horario y tipo.
  • Los avisos con más de 4 horas de retraso se descartan.

Instalación

Requisitos: FacturaScripts 2025 o superior y PHP 8.1 o superior.

  1. Descarga el zip desde la ficha del plugin.
  2. En Administrador → Plugins, sube el zip.
  3. Activa ControlTiempo y pulsa Reconstruir.

Las tablas se crean al activar. Al actualizar desde una versión anterior se amplían sin perder datos.

Guía de uso

Dar de alta empleados

En Administrador → Empleados (control tiempo) → pestaña Empleados, pulsa Nuevo. Indica el código de acceso, el nombre, el email (necesario para avisos y recuperación de contraseña), una contraseña inicial de al menos 8 caracteres y, si quieres, su grupo.

Acceso del empleado

Comparte la URL de la pestaña Acceso (https://tu-dominio/EmpleadoFichaje) por WhatsApp, por email o en un código QR. Desde el móvil, el empleado puede añadirla a la pantalla de inicio para usarla como una app.

Consultar y exportar

En la pestaña Fichajes puedes filtrar por empleado y periodo, buscar por nota, ordenar y exportar a PDF, XLSX o CSV. La duración aparece en HH:MM.

Corregir errores

Abre el fichaje y corrige la entrada, la salida o sus pausas: la duración se recalcula sola. Conviene anotar en la nota el motivo del ajuste. Los fichajes que el propio empleado cerró a posteriori llevan la marca [salida indicada por el empleado…].

Seguridad y privacidad

  • Contraseñas cifradas con bcrypt.
  • Protección contra fuerza bruta: bloqueo de la cuenta tras 5 fallos durante 15 minutos y límite de 20 intentos cada 5 minutos por IP.
  • Cookies HttpOnly, SameSite=Lax y Secure cuando se usa HTTPS.
  • Acciones del empleado protegidas: solo se aceptan desde los botones de su pantalla.
  • Registro de la IP de cada fichaje.
  • Todos los datos se quedan en tu servidor, de acuerdo con el RGPD.

El motivo de pausa "Médica" puede considerarse un dato de salud. Su uso es opcional: valora si tu empresa lo necesita.

Limitaciones conocidas

  • No incluye geolocalización.
  • No distingue horas facturables por cliente o proyecto.
  • Sin gráficos en el panel (previstos para la 1.5).
  • Sin API REST.
  • Los avisos no contemplan turnos que cruzan la medianoche.
  • Los festivos se dan de alta por fecha concreta (no hay festivos recurrentes ni importación de calendarios).

Resolución de problemas

Al abrir la URL aparece el login del ERP en vez del de fichaje. Comprueba que la dirección termina en /EmpleadoFichaje y que el plugin está activado.

"Credenciales no válidas". Revisa el código del empleado (distingue mayúsculas) y que esté marcado como Activo. Si se bloqueó por intentos fallidos, espera 15 minutos o usa la recuperación de contraseña.

Los avisos no llegan. Comprueba, por este orden: que el empleado tiene email, que el email saliente de FacturaScripts funciona, que el cron se está ejecutando, que el horario está activo y tiene ese día, que no es festivo ni está de vacaciones, y que la notificación está activada en Administrador → Email → Notificaciones.

El enlace de recuperación ha caducado. Dura 30 minutos y deja de valer al cambiar la contraseña. Solicita uno nuevo.

El enlace del email de recuperación apunta a otra dirección. Se construye con la URL del sitio de FacturaScripts (Administrador → Panel de control, campo URL del sitio). Comprueba que es la dirección pública correcta, con https://.

Un empleado no puede fichar la entrada porque "ya tiene un fichaje en curso". Tiene abierto un fichaje de otro día. Al entrar en su pantalla verá Tienes un fichaje sin cerrar: que indique a qué hora salió y después podrá fichar con normalidad.

La duración no coincide con salida menos entrada. Es correcto si hubo pausas: la duración es tiempo efectivo. Revisa la pestaña Pausas del fichaje.

Un fichaje no se guarda. Lee el mensaje de la parte superior: desde la 1.4 se rechazan salidas anteriores a la entrada y pausas que no caben en el fichaje. Si no hay mensaje, revisa el log de FacturaScripts y los permisos de escritura.

Roadmap

Sin fechas comprometidas:

  • 1.5: panel de gráficos y resumen de incidencias para el responsable.
  • Después: API REST, geolocalización opcional e integración con el plugin Proyectos.

Licencia

Licencia de uso por instalación, con 12 meses de actualizaciones, según las condiciones de la ficha oficial del plugin. FacturaScripts es un ERP de código abierto desarrollado en España desde 2013.

Cookies
Usamos cookies necesarias para el funcionamiento del sitio y cookies opcionales para recordar tus preferencias y mejorar tu experiencia. Puedes aceptarlas todas, rechazarlas o configurar tus preferencias

Soporte