Manual de uso

Sistema Biométrico de control de entradas y salidas — Guía para administradores de empresa

Este manual cubre las tareas del administrador de empresa: sectores, horarios, empleados, biometría, fichaje, reportes y los módulos adicionales. El orden recomendado para empezar es: 1) crear sectores → 2) crear horarios → 3) crear empleados, asignarles sector + horario y registrar su rostro → 4) repartir el QR / link para que fichen.

Las secciones 10 a 13 corresponden a módulos: aparecen en el menú solo si están contratados.

1. Primeros pasos

Ingresar al sistema

  1. Abrí la dirección del sistema en el navegador e ingresá con tu usuario y contraseña.
  2. Vas a entrar al Dashboard de tu empresa.

El panel y el menú

A la izquierda está el menú con las secciones de tu empresa:

  • Dashboard: QR de la empresa y resumen.
  • Registros y Reportes.
  • Empleados, Sectores, Horarios y Configuración Biometría.
  • Manual (esta guía) y Salir.
En el celular, tocá el botón arriba a la izquierda para abrir el menú. También hay un botón para ocultar el menú y ganar espacio en la PC.

Editar perfil y contraseña

  1. En la parte superior del menú, tocá el lápiz al lado del nombre.
  2. Podés cambiar el nombre para mostrar y la contraseña (dejá los campos de contraseña vacíos si no querés cambiarla).
  3. Guardá los cambios.

2. Inicio (Dashboard) y código QR

Código QR de la empresa

En el Dashboard, con tu empresa seleccionada, vas a ver el QR que usan los empleados para fichar desde su celular.

  1. Podés descargarlo en PNG o PDF e imprimirlo o enviarlo.
  2. También aparece el enlace del QR por si querés compartirlo directo.

En el Dashboard hay un bloque “Dispositivo Fijo de Registro” con un enlace para abrir en una PC o tablet fija dentro de la empresa: la cámara queda escaneando rostros y registra automáticamente. Ver Dispositivo fijo.

3. Sectores

Un sector es un lugar de trabajo: una ubicación geográfica y un radio. Sirve para validar que el empleado esté en el lugar al fichar (geocerca). Los horarios ya no viven dentro del sector — ahora son un módulo aparte (ver Horarios) y se combinan con el sector al asignárselos a cada empleado.

Crear un sector

  1. Entrá a SectoresNuevo Sector.
  2. Completá Nombre y (opcional) Descripción.
  3. Marcá el punto en el mapa haciendo clic, o arrastrando el marcador. La latitud y longitud se completan solas.
  4. Definí el Radio (metros) y la Zona horaria.
  5. Guardá.

Buscar una dirección

Arriba del mapa hay un buscador: escribí una dirección (por ej. “Av. Corrientes 1234, Buenos Aires”), tocá Buscar y elegí un resultado. El mapa se centra ahí. Después podés ajustar el punto exacto haciendo clic o arrastrando el marcador.

Radio y zona horaria

  • Radio: distancia máxima (en metros) desde el punto central dentro de la cual se considera “en rango”. El círculo rojo en el mapa lo muestra.
  • Zona horaria: se usa para calcular la hora del fichaje. Por defecto Buenos Aires.

Para fijar la ubicación de un sector desde el lugar real (por ejemplo, que un encargado la declare parado en el sitio), podés generar un link para que la marque desde su propio celular:

  1. En Sectores, en la fila del sector, tocá el botón verde (link de ubicación).
  2. Se genera un link de un solo uso. Copialo y envialo (WhatsApp, mail, etc.).
  3. La persona lo abre, toca “Obtener mi ubicación”, revisa el mapa y confirma. Esa posición queda como ubicación del sector.
El link funciona una sola vez. Si hace falta, podés volver a generarlo (el anterior deja de servir).

Editar o desactivar

Con los botones de cada fila podés editar o eliminar/desactivar un sector.

4. Horarios

Novedad. Los horarios ahora son un módulo independiente (menú Horarios). Se crean una vez y se reutilizan en todos los empleados que quieras. Ya no se cargan dentro del sector.

Qué es un horario

Un horario es una plantilla de jornada con un nombre descriptivo (ej. “Turno mañana”, “Cocina partido”), un margen de gracia y, por cada día de la semana, uno o más tramos. Cada tramo se define con la hora de entrada y la cantidad de horas del turno; la hora de salida se calcula sola (entrada + duración).

Crear un horario

  1. Entrá a HorariosNuevo Horario.
  2. Poné un Nombre descriptivo y el Margen de gracia (en minutos; por defecto 15).
  3. En cada día que corresponda, tocá Agregar tramo y cargá Entrada y Horas del turno. La salida aparece calculada al instante.
  4. Guardá.
Ejemplo: entrada 08:00 y 8 hs → salida 16:00. Cargás solo los días que trabaja; los demás quedan vacíos.

Turno partido y turno nocturno

  • Turno partido: cargá varios tramos en el mismo día. Ej. Lunes 10:00 × 3 hs (sale 13:00) y 16:00 × 4 hs (sale 20:00).
  • Turno nocturno: si la salida cae al día siguiente, el sistema lo contempla. Ej. entrada 22:00 × 6 hs → salida 04:00 (+1 día). Se muestra el aviso “+1 día”.

Margen de gracia

El margen de gracia (por defecto 15 min, editable por horario) es la tolerancia en la entrada y en la salida: si el empleado llega o se va dentro de ese margen, no se cuenta como llegada tarde ni como horas extra. Recién fuera del margen se registra tarde (entrada) u horas extra (salida). Ver cómo impacta en Reportes.

5. Empleados

Crear un empleado

  1. Entrá a EmpleadosNuevo Empleado.
  2. Completá Nombre, Apellido y DNI (obligatorios), y teléfono/email si querés.
  3. Guardá. El empleado queda Sin registrar biometría hasta que cargues su rostro.

Asignar Sector/Horario

Desde Editar empleado, en “Sectores / Horarios asignados”, combinás dónde y cuándo trabaja:

  1. Tocá Agregar Sector/Horario.
  2. Elegí el Sector (buscador) y, si corresponde, el Horario por nombre (buscador). Al elegir el horario se muestra la entrada/salida por cada día de la semana para que verifiques.
  3. Agregá. Podés cargar varias combinaciones (por ejemplo el mismo empleado en dos sectores, o con dos horarios).
Esta combinación sector + horario es la que usa el sistema para validar el fichaje y para calcular los reportes.

Fichar sin sector

Si tildás “Puede registrar biometría sin estar en ningún sector”, el empleado (ej. un vendedor en lo del cliente) puede fichar aunque no esté dentro de ningún sector; se guarda igual la ubicación del fichaje. Si además asignás un sector sin horario, ese sector solo valida ubicación y alterna entrada/salida.

Registrar el rostro desde el panel

  1. En la fila del empleado, tocá el botón (Registrar Biometría).
  2. Tocá Iniciar Cámara y seguí las indicaciones: se toman 3 capturas (frente, izquierda, derecha).
  3. Cuando estén las 3, tocá Guardar Rostro.
Buena iluminación, fondo neutro y rostro centrado. Sin anteojos de sol ni barbijo.

Si el empleado no está presente, mandale un link para que registre su rostro él mismo desde su celular:

  1. En Empleados, en la fila del empleado, tocá el botón verde .
  2. Se genera un link de un solo uso. Copialo y envialo (WhatsApp, mail, etc.).
  3. El empleado lo abre, toca Iniciar cámara, captura las 3 tomas y guarda.
El link sirve una sola vez. Podés volver a generarlo cuando quieras; el anterior se invalida.

Reempadronar

Si un empleado dejó de ser reconocido (cambió mucho su aspecto, mala carga inicial, etc.), volvé a registrar su rostro desde el panel, o generale un nuevo link de empadronamiento. La nueva carga reemplaza la anterior.

Ver horarios de empleados (imprimible / PDF)

Arriba en Empleados tenés el botón Ver horarios de empleados: abre una vista gráfica con, por cada empleado, sus sectores y horarios y la entrada/salida por día de la semana.

  1. Revisá la grilla.
  2. Tocá Imprimir / Guardar PDF para imprimirla o guardarla como PDF.

6. Configuración de biometría

En Configuración Biometría ajustás la sensibilidad del reconocimiento. Si no estás seguro, dejá los valores recomendados.

  • Umbral de reconocimiento (recom. 0.35): más bajo = más exigente (más seguro, pero puede rechazar válidos).
  • Intervalo de detección (recom. 200 ms): cada cuánto se analiza el video.
  • Tamaño de entrada (recom. 416 px): más alto = más preciso pero más lento.
  • Confianza mínima (recom. 0.50): qué tan seguro debe estar de que hay un rostro.
Tenés un botón Reset a valores recomendados por si querés volver al estándar.

7. Fichaje (uso diario)

Por QR en el celular

  1. El empleado escanea el QR de la empresa (del Dashboard) o abre el enlace.
  2. Toca Iniciar Cámara, permite el acceso a la cámara y la ubicación.
  3. Centra su rostro; el sistema lo reconoce y registra entrada o salida.

Dispositivo fijo (cámara constante)

Para un punto de fichaje fijo (PC/tablet en la entrada): abrí el enlace de dispositivo fijo del Dashboard. La cámara queda activa y va registrando a cada persona que se reconoce. No necesita que nadie apriete botones.

¿Entrada o salida?

Al fichar dentro de un sector, el sistema mira el horario asignado a ese sector para ese empleado y elige el evento más cercano: si estás cerca de una entrada marca entrada; si estás cerca de una salida marca salida (contemplando turnos partidos y nocturnos). Si el sector no tiene horario asignado, alterna entrada/salida. Si ya existe un registro en ese tramo, te pide confirmar.

Geolocalización y rango

Al fichar por QR, el sistema verifica que el empleado esté dentro del radio de alguno de sus sectores asignados. Si está fuera y no tiene habilitado fichar sin sector, avisa y no registra. (El dispositivo fijo no usa geolocalización: se asume que está dentro de la empresa.)

Foto del fichaje

Cada fichaje guarda una foto pequeña del momento, optimizada para ocupar poco espacio. La ves en el listado de Registros.

8. Registros

Ver y filtrar

En Ver Registros tenés todos los fichajes. Filtrá por fecha desde/hasta, sector y empleado, y tocá Buscar.

Ver la foto

La columna Foto muestra la miniatura del fichaje. Hacé clic en la miniatura para verla en grande.

Editar o eliminar

Con los botones de cada fila podés editar la fecha/hora y el tipo (entrada/salida) , o eliminar el registro (pide doble confirmación).

Si la empresa tiene el módulo Historial de movimientos, el sistema te va a pedir un motivo y va a guardar el valor anterior. Sin motivo no se guarda el cambio.

Cargar un registro manual

  1. Tocá Cargar Registro Manual.
  2. Elegí empleado, fecha, tipo, hora y opcionalmente sector.
  3. Si el sistema lo pide, escribí el motivo del alta manual.
  4. Guardá. Útil cuando alguien no pudo fichar.

Exportar

Con los botones de exportación podés bajar los registros a Excel, PDF, CSV o imprimirlos.

9. Reportes

En Reportes generás el detalle de un empleado en un rango de fechas: horas trabajadas, llegadas tarde, horas extra, faltas/ausencias y días trabajados, comparado con los horarios asignados.

  1. Elegí empleado y rango de fechas.
  2. Generá el reporte y, si querés, exportalo.
Las llegadas tarde y las horas extra respetan el margen de gracia de cada horario: dentro del margen no cuentan. Los turnos que cruzan la medianoche se emparejan con la salida del día siguiente.

10. Cómputo de jornada y horas extra

Esta sección aparece en el menú solo si tenés contratado el módulo Cómputo de Jornada. Si no lo ves, consultá con el administrador del sistema.

Mientras Reportes te dice cuántas horas trabajó cada uno, Cómputo de Jornada te dice qué tipo de horas son: cuáles entran en la jornada normal, cuáles son extra y con qué recargo, y dónde se están pasando de los límites legales.

Ver el cómputo del período

  1. Elegí el rango de fechas (por defecto, el mes en curso) y, si querés, un empleado.
  2. Tocá Calcular.
  3. Vas a ver una fila por empleado con: días trabajados, horas totales, normales, extra 50%, extra 100%, nocturnas y justificadas.
  4. Tocá el botón + de la izquierda para desplegar el detalle de cada jornada (entrada, salida, tipo de día y desglose de horas) y el acumulado por semana.
Es un cálculo orientativo, para control interno. Los convenios colectivos tienen reglas propias que el sistema no conoce: la liquidación final siempre la valida quien liquida los sueldos.

Cómo se clasifican las horas

  • Día común: hasta el máximo diario (8 h por defecto) son normales; lo que pasa de ahí es extra al 50%.
  • Domingo, feriado y sábado desde las 13:00: todas las horas van con recargo del 100%.
  • Horas nocturnas (21:00 a 06:00): se informan aparte, no se suman a las extras.
  • Las jornadas que cruzan la medianoche se cuentan en el día de la entrada.

Alertas

La columna Alertas marca los problemas del período. Desplegá el detalle para ver cuáles son:

  • Sin salida / Sin entrada: falta una de las dos marcas. Esa jornada no computa horas hasta que se corrija (se arregla con carga manual o edición).
  • Jornada excedida: se pasó del máximo diario.
  • Semana excedida: se pasó del tope semanal (48 h por defecto).
  • Descanso insuficiente: pasaron menos de 12 h entre la salida y la entrada siguiente.

Reglas de cómputo

En Reglas ajustás los valores para tu empresa: horas diarias y semanales, porcentajes de recargo, hora de corte del sábado, franja nocturna y descanso mínimo entre jornadas. Vienen configurados según la normativa argentina; cambialos si tu convenio dice otra cosa.

Feriados

En Feriados cargás el calendario. Los días marcados como feriado se pagan con el recargo especial.

  1. El botón Cargar feriados fijos trae de una vez los feriados nacionales de fecha fija del año.
  2. Los feriados móviles (Carnaval, Viernes Santo, fines de semana largos) cambian todos los años: agregalos a mano con el formulario.
  3. También podés sumar los provinciales o las fiestas locales que apliquen a tu actividad.

11. Tablero de presentes

Aparece en el menú solo si tenés contratado el módulo Tablero de Presentes.

Responde una sola pregunta: ¿quién está adentro ahora mismo y en qué sector? Arriba vas a ver los contadores (dentro, fuera, sectores con gente) y abajo una tarjeta por sector con el nombre de cada persona, la hora en que entró y hace cuánto está.

  • Se considera adentro a quien tiene una entrada como último fichaje; afuera a quien fichó salida.
  • Los registros de presencia no cambian el estado.
  • La lista Fuera se despliega abajo y muestra el último movimiento de cada uno.
  • La pantalla se actualiza sola cada minuto.

Los marcados en amarillo

Si alguien figura adentro desde hace más de 16 horas, casi seguro se olvidó de fichar la salida. El sistema lo muestra igual pero lo resalta en amarillo y avisa arriba. Conviene corregir esos casos (cargando la salida que falta) para que el tablero sea confiable.

Usarlo en una evacuación

El botón Imprimir genera una hoja limpia, solo con las listas por sector, para llevar al punto de encuentro y controlar quién falta.

El tablero es tan confiable como los fichajes: si la gente se olvida de marcar la salida, va a figurar adentro. Revisá los casos en amarillo antes de darlo por bueno.

12. Historial de movimientos

Aparece en Configuración empresa solo si tenés contratado el módulo Historial de Movimientos.

Es la línea de tiempo completa de la empresa: los fichajes de los empleados y toda modificación hecha desde el panel (altas manuales, ediciones y eliminaciones), con quién la hizo, cuándo y por qué.

Sirve para responder preguntas del tipo "¿quién cambió este fichaje y con qué justificación?", tanto ante un reclamo de un empleado como ante una inspección.

El motivo obligatorio

Con este módulo activo, cada vez que edites, elimines o cargues un registro a mano, el sistema te va a pedir un motivo. No es opcional: sin motivo no se guarda el cambio.

Escribí algo que se entienda dentro de seis meses: "el empleado olvidó fichar la salida", "el lector estaba fuera de servicio", "fichaje duplicado por error".

Marcas en el listado de registros

En Ver Registros, los fichajes tocados a mano quedan identificados:

  • Manual — lo cargó un administrador, no viene de la cámara.
  • Editado — fue modificado. Al tocarlo vas al historial de ese empleado.

Filtrar y exportar

  1. Filtrá por fechas, empleado, quién hizo el cambio, tipo de acción o texto libre dentro del motivo.
  2. El botón Solo cambios deja únicamente las modificaciones del panel, escondiendo los fichajes normales.
  3. Cada modificación muestra el antes y después campo por campo (por ejemplo: Fecha y hora: 08:15 → 08:05).
  4. Exportá con Descargar Excel o con los botones de Excel / PDF / Imprimir.
El historial no se puede modificar ni borrar desde ningún lugar del sistema, ni siquiera por un administrador. Esa es justamente la razón por la que sirve como respaldo.

13. API y avisos a otros sistemas

Aparece en el menú solo si tenés contratado el módulo API y Avisos.

Permite que otro sistema (el de sueldos, un ERP, una planilla automatizada) consulte los datos de asistencia por su cuenta, sin que nadie exporte archivos a mano. Además puede avisar en el momento a un sistema externo cada vez que alguien ficha.

La API es de solo lectura: sirve para consultar, nunca para cargar fichajes. Y devuelve únicamente los datos de tu empresa.

Paso 1 — Conseguir la clave de acceso

La clave se la tenés que pedir al administrador del sistema. No se genera desde tu cuenta ni se descarga de ningún lado: la crea quien administra la plataforma y te la entrega. Si no la tenés, pedila antes de seguir.

Es un texto largo con esta forma:

bio_k1a2b3c4d_e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0
  • Tratala como una contraseña. Quien la tenga puede consultar los datos de asistencia de tu empresa.
  • Podés pedir una clave por cada sistema que se conecte (una para el sistema de sueldos, otra para el ERP). Así, si hay que dar de baja una, las demás siguen funcionando.
  • Si se pierde o se filtra, avisá al administrador: se desactiva y te da una nueva.
  • La clave no caduca: sirve hasta que alguien la desactive.

Paso 2 — Probar que funciona (antes de programar nada)

Lo primero es confirmar que la clave anda. Abrí una terminal y pegá esto, reemplazando TU_CLAVE:

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://relojbiometrico.sirobe.site/api/v1.php?recurso=sectores"

Si la clave es correcta, vas a ver un texto que empieza con {"recurso":"sectores".... Si ves {"error":"clave_invalida"...}, revisá que la hayas copiado completa, sin espacios de más.

¿No tenés terminal? Podés probar con cualquier herramienta que permita enviar encabezados (Postman, Insomnia, o la extensión de tu lenguaje). No sirve pegar la dirección en el navegador: el navegador no envía la clave y vas a recibir un error 401.

Paso 3 — Entender cómo se pide

  1. La dirección base es siempre la misma:
    https://relojbiometrico.sirobe.site/api/v1.php
  2. Se usa el método GET.
  3. Qué querés traer se elige con el parámetro recurso.
  4. La clave viaja en un encabezado, nunca dentro de la dirección (si va en la dirección queda registrada en los logs de todos lados):
    Authorization: Bearer TU_CLAVE
    También se acepta X-API-Key: TU_CLAVE, si a tu sistema le resulta más cómodo.
  5. La respuesta viene siempre en JSON.
RecursoDevuelveFiltros que acepta
registrosLos fichajes desde, hasta, empleado_id, dni, limit, offset
empleadosLa nóminalimit, offset
sectoresSectores y su geocerca
presentesQuién está adentro ahora

Paso 4 — Traer los fichajes de un período

Es la consulta que más se usa. Por ejemplo, todo el mes:

curl -H "Authorization: Bearer TU_CLAVE" \
  "https://relojbiometrico.sirobe.site/api/v1.php?recurso=registros&desde=2026-08-01&hasta=2026-08-31"

Y esto es exactamente lo que devuelve:

{
    "recurso": "registros",
    "total": 245,
    "limit": 100,
    "offset": 0,
    "datos": [
        {
            "id": 167867,
            "empleado_id": 11,
            "dni": "25317962",
            "nombre": "Simon",
            "apellido": "Rodriguez beccar",
            "tipo_registro": "salida",
            "fecha_hora": "2026-08-15 10:24:54",
            "sector_id": null,
            "sector": null,
            "dentro_rango": 0,
            "latitud": "-40.21060500",
            "longitud": "-71.30448440",
            "observacion": null
        }
    ]
}

Qué significa cada campo:

CampoQué es
totalCuántos fichajes cumplen el filtro en total (no cuántos vinieron en esta respuesta)
limit / offsetCuántos trajo y desde cuál — se usan para paginar
idIdentificador único del fichaje. Sirve para no procesar dos veces el mismo
dniLa forma más práctica de cruzar con tu sistema de sueldos
tipo_registroentrada, salida o presencia
fecha_horaFecha y hora del fichaje, en la hora local del sector
sectorNombre del sector. En null = fichó fuera de todo sector
dentro_rango1 si estaba dentro del radio del sector

Paso 5 — Traer todo cuando hay muchos registros

Cada consulta devuelve como máximo 100 fichajes (podés pedir hasta 500 con limit). Si total es mayor que lo que recibiste, hay más: se piden de a tandas subiendo offset.

Por ejemplo, con 245 registros y tandas de 100:

...&limit=100&offset=0     → los primeros 100
...&limit=100&offset=100   → los siguientes 100
...&limit=100&offset=200   → los últimos 45

Paso 6 — Ejemplos listos para copiar

PHP — trae el mes completo, paginando solo:

<?php
$clave = 'TU_CLAVE';
$base  = 'https://relojbiometrico.sirobe.site/api/v1.php';

$todos = [];
$offset = 0;
do {
    $url = $base . '?recurso=registros&desde=2026-08-01&hasta=2026-08-31'
         . '&limit=500&offset=' . $offset;

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $clave]);
    $respuesta = curl_exec($ch);
    $codigo = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if ($codigo !== 200) {
        echo "Error HTTP $codigo: $respuesta\n";
        break;
    }

    $data = json_decode($respuesta, true);
    $todos = array_merge($todos, $data['datos']);
    $offset += 500;
} while ($offset < $data['total']);

echo "Trajimos " . count($todos) . " fichajes\n";

Python:

import requests

CLAVE = "TU_CLAVE"
BASE  = "https://relojbiometrico.sirobe.site/api/v1.php"
cabeceras = {"Authorization": f"Bearer {CLAVE}"}

todos, offset = [], 0
while True:
    r = requests.get(BASE, headers=cabeceras, params={
        "recurso": "registros",
        "desde": "2026-08-01",
        "hasta": "2026-08-31",
        "limit": 500,
        "offset": offset,
    }, timeout=30)
    r.raise_for_status()
    data = r.json()
    todos += data["datos"]
    offset += 500
    if offset >= data["total"]:
        break

print(f"Trajimos {len(todos)} fichajes")

Excel / Power Query — para llevarlo a una planilla sin programar:

  1. En Excel: DatosObtener datosDesde otras fuentesDesde la Web.
  2. Elegí la opción Avanzadas.
  3. En la dirección pegá: https://relojbiometrico.sirobe.site/api/v1.php?recurso=registros&desde=2026-08-01&hasta=2026-08-31&limit=500
  4. En Parámetros de encabezado HTTP agregá: nombre Authorization, valor Bearer TU_CLAVE.
  5. Aceptá, y en el editor expandí la columna datos para ver los fichajes en filas.

Paso 7 — Los otros recursos

Empleados (?recurso=empleados) — para cruzar por DNI con tu sistema:

{
    "recurso": "empleados",
    "datos": [
        {
            "id": 26,
            "dni": "2536",
            "nombre": "Augusto",
            "apellido": "Lacosta",
            "email": "",
            "telefono": "",
            "activo": 1,
            "sector_id": null,
            "permite_sin_sector": 1,
            "permite_presencia": 0,
            "tiene_biometria": 1
        }
    ]
}

Sectores (?recurso=sectores) — ubicación y radio de cada uno:

{
  "recurso": "sectores",
  "datos": [
    {
      "id": 13,
      "nombre": "Casa Los Robles",
      "descripcion": "",
      "latitud": "-40.12386270",
      "longitud": "-71.31864980",
      "radio_metros": 50,
      "timezone": "America/Argentina/Buenos_Aires",
      "activo": 1
    }
  ]
}

Presentes (?recurso=presentes) — quién está adentro en este momento.

Por privacidad, la API nunca devuelve los datos biométricos del rostro. De cada empleado solo informa, con tiene_biometria, si ya está empadronado o no.

Paso 8 — Qué hacer si algo falla

CódigoQué significaQué hacer
200Todo bien
401Falta la clave o no es válidaRevisá el encabezado Authorization. Ojo con copiarla cortada
403La clave fue desactivada, o la empresa no tiene el móduloConsultá con el administrador
404Ese recurso no existeRevisá el nombre: son los cuatro de la tabla
405Usaste POST u otro métodoLa API es de solo lectura: usá GET
429Demasiadas consultasEsperá un minuto (ver el límite abajo)
500Error del servidorReintentá; si sigue, avisá al administrador

Los errores también vienen en JSON, con una explicación en castellano:

{ "error": "limite_excedido", "mensaje": "Superaste el límite de 120 consultas por minuto." }

Buenas prácticas

  • Límite: 120 consultas por minuto por clave. Es de sobra para un uso normal, pero se alcanza rápido si consultás dentro de un bucle sin filtros.
  • Filtrá por fechas siempre. Pedir todo el historial en cada corrida es lento para vos y pesado para el servidor.
  • No pongas la clave dentro del código que compartís o subís a un repositorio. Guardala en un archivo de configuración o una variable de entorno.
  • Guardá el id del último fichaje procesado: así en la corrida siguiente sabés desde dónde seguir y no repetís trabajo.
  • Si solo necesitás datos una vez por día, una consulta diaria alcanza. No hace falta consultar cada minuto.

Avisos automáticos en cada fichaje (webhooks)

Es el camino inverso: en vez de que consultes cada tanto, el sistema le avisa a tu servidor en el momento en que alguien ficha.

  1. Preparás en tu sistema una dirección que reciba datos por POST (tiene que ser https://).
  2. Se la pasás al administrador para que la cargue en API y Avisos.
  3. Desde ahí se puede enviar una prueba con un botón, para confirmar que tu sistema la recibe antes de ponerlo en marcha.

Cada aviso llega con este contenido:

{
  "evento": "fichaje",
  "enviado_at": "2026-08-15T10:24:54-03:00",
  "datos": {
    "registro_id": 167867,
    "empleado_id": 11,
    "dni": "25317962",
    "nombre": "Simon",
    "apellido": "Rodriguez beccar",
    "tipo_registro": "salida",
    "fecha_hora": "2026-08-15 10:24:54",
    "sector_id": null,
    "sector": null,
    "dentro_rango": false,
    "origen": "qr"
  }
}

Cómo verificar que el aviso es auténtico. Cada envío viene firmado en el encabezado X-Biometria-Firma. Con el secreto que te da el administrador podés comprobar que salió del sistema y no de un tercero:

<?php
$secreto = 'EL_SECRETO_DEL_AVISO';          // te lo da el administrador
$cuerpo  = file_get_contents('php://input');
$firmaRecibida = $_SERVER['HTTP_X_BIOMETRIA_FIRMA'] ?? '';

$firmaEsperada = hash_hmac('sha256', $cuerpo, $secreto);

if (!hash_equals($firmaEsperada, $firmaRecibida)) {
    http_response_code(401);
    exit('Firma inválida');
}

$datos = json_decode($cuerpo, true);
// ... acá procesás el fichaje ...

http_response_code(200);   // importante: responder 200 para que quede como entregado
echo 'OK';
Los avisos no se reintentan. Si tu sistema está caído justo cuando alguien ficha, ese aviso se pierde. Los envíos quedan registrados con su código de respuesta para poder revisarlos, pero si necesitás la garantía de no perder nada, usá los avisos para reaccionar rápido y consultá igual el recurso registros una vez por día para cerrar los números.

14. Cuándo se puede fichar y cuándo no

Esta sección explica todas las combinaciones posibles de configuración y qué pasa en cada una. Si alguna vez alguien te dice “no me deja fichar” o “fichó cuando no debía”, acá está la respuesta.

Los 3 factores que deciden todo

El sistema decide con tres cosas, y siempre en este orden:

  1. ¿Dónde está? — si el empleado tiene sectores y si está parado dentro del radio de alguno.
  2. ¿A qué hora? — si ese sector tiene un horario asignado y si el momento cae dentro del turno.
  3. ¿Qué permisos tiene? — los dos checkboxes de la ficha del empleado.
El horario no se cuelga del empleado, se cuelga de la combinación empleado + sector. En Empleados → Editar → Sectores/Horarios cada línea es “este empleado, en este sector, con este horario”. El mismo empleado puede tener un horario en un sector y ninguno en otro.

El orden de los controles

Cuando alguien apoya la cara frente a la cámara, el sistema va pasando estos filtros. Si uno falla, ahí se corta:

#ControlSi falla
1¿El empleado está activo?No lo reconoce (queda como “sin coincidencia”)
2¿Se reconoce el rostro?“No se encontró coincidencia biométrica”
3¿Es un rostro real? (si está activo el control de vida)“Parece una foto o pantalla”
4¿Está dentro de un sector?Rechaza, salvo que tenga el permiso “sin sector”
5¿Está dentro del horario?Rechaza, salvo que tenga el permiso “presencia”
6¿Ya fichó lo mismo en ese turno?Pregunta si querés registrarlo igual

Tabla de todos los casos

“Sin permisos” significa los dos checkboxes desactivados.

Configuración del empleado Dónde está Cuándo Sin permisos Con permisos
A · Sin ningún sector asignado
Sin sectorCualquier lugarCualquier hora ✗ No puede fichar nunca ✓ Ficha (queda “Fuera de sectores”)
necesita “sin sector”
B · Con sector, SIN horario
Sector sin horarioDentro del radioCualquier hora ✓ Ficha siempre, a cualquier hora ✓ Igual
Sector sin horarioFuera del radioCualquier hora ✗ “Está fuera del rango” ✓ Ficha sin sector
necesita “sin sector”
Sector sin horarioSin GPS
(permiso denegado)
Cualquier hora ✗ Rechaza ✓ Ficha sin sector
necesita “sin sector”
C · Con sector Y horario
Sector + horarioDentro del radioDentro del turno (± gracia) ✓ Ficha. Entrada o salida según la mitad del turno ✓ Igual
Sector + horarioDentro del radioFuera del turno ✗ “Fuera del horario asignado” ⚠ Le pregunta: Entrada/Salida o Presencia
necesita “presencia”
Sector + horarioFuera del radioCualquier hora ✗ “Está fuera del rango” ✓ Ficha sin sector, sin control de horario
necesita “sin sector”
D · Varios sectores
Varios sectores
(con o sin horario)
Dentro de unoSegún ese sector Se toma el sector más cercano de los que lo contienen, y se aplica su horario
Varios sectoresFuera de todosCualquier hora ✗ “Fuera del rango de todos los sectores” ✓ Ficha sin sector
necesita “sin sector”

Caso por caso, en detalle

A · El empleado no tiene ningún sector. Sin el permiso “sin sector” no puede fichar nunca: el sistema lo reconoce, pero lo rechaza con “no está habilitado para registrar sin estar en un sector”. Es la causa más común de “me reconoce pero no me deja”. Con el permiso activado ficha desde cualquier lado, y el registro queda marcado como Fuera de sectores.

B · Sector sin horario. El único control es el geográfico: si está dentro del radio, ficha a cualquier hora, de día o de madrugada. Entrada y salida se alternan: si el último movimiento fue entrada, el siguiente es salida, y así. Es la configuración para gente sin horario fijo.

C · Sector con horario. Acá se aplican los dos controles. Dentro del sector y dentro del turno, el sistema decide solo si es entrada o salida: si estás en la primera mitad del turno es entrada, y en la segunda mitad es salida. El turno tiene un margen de gracia a cada lado: con un turno de 8 a 16 y gracia de 15 minutos, la ventana válida va de 7:45 a 16:15.

D · Varios sectores. Si el empleado está parado dentro de más de un sector a la vez (por ejemplo dos sectores que se superponen), se queda con el más cercano al centro. Y aplica el horario asignado a ese sector, no el de los otros.

Los dos permisos del empleado

Están en Empleados → Editar y cambian por completo el comportamiento:

PermisoQué habilitaCuándo conviene
Puede registrar biometría sin estar en ningún sector Fichar desde cualquier lugar. Si está fuera de todo sector, el fichaje se guarda igual con la ubicación real y la leyenda Fuera de sectores. Vendedores, personal de campo, gente que trabaja en lo del cliente.
Habilitar registro de presencia Cuando está fuera de horario o fuera de sector, en vez de rechazarlo le pregunta si quiere marcar Entrada, Salida o Presencia (con una observación escrita). Quien va fuera de su turno a hacer algo puntual y hay que dejar constancia.
Ojo con “sin sector”: cuando el empleado ficha fuera de todo sector, el horario deja de controlarse. El control de horario está atado al sector, así que sin sector no hay turno contra el cual comparar: ficha a cualquier hora. Es lo esperado para un vendedor, pero conviene saberlo antes de activarlo en alguien con horario fijo.

Fichar fuera de horario: cuándo sí y cuándo no

Situación¿Puede fichar fuera de horario?
Sector sin horario asignado Sí. No hay horario que controlar: ficha a cualquier hora
Sector con horario, sin permiso de presencia No. Rechaza con “fuera del horario asignado”
Sector con horario y con permiso de presencia Sí, pero le pregunta primero: puede marcar Entrada, Salida o Presencia
Fuera del sector, con permiso “sin sector” Sí. Al no haber sector, no se controla horario
El horario existe pero está desactivado Sí. Un horario desactivado es como no tener horario

Si ficha dos veces lo mismo

Si en el mismo turno ya hay una entrada y vuelve a fichar entrada, el sistema no lo bloquea: muestra el registro anterior y pregunta si querés guardarlo igual. Sirve para el caso real de alguien que sale y vuelve a entrar. Si confirma, quedan los dos registros.

QR en el celular contra dispositivo fijo

No se comportan igual, porque el dispositivo fijo no tiene GPS:

QR en el celularDispositivo fijo
UbicaciónLa del celular del empleadoNo tiene. Se asume que está en el sector donde está la tablet
Empleado con varios sectoresDetecta en cuál está No puede saberlo: lo rechaza y pide usar el QR
Control de horario
Repetir fichajePregunta y deja confirmarEspera 5 minutos antes de volver a tomar a la misma persona

Cómo impacta cada caso en los reportes

Es la parte que más confusión genera. Los tres tipos de registro no valen lo mismo:

TipoEn Reportes y en Cómputo de jornada
EntradaAbre la jornada. Cuenta para las horas trabajadas
SalidaCierra la jornada. Recién ahí se computan las horas
Presencia No suma horas ni abre ni cierra jornada. Queda como constancia de que la persona estuvo, con su observación, pero no entra en el cálculo
Lo más importante de toda esta sección: una jornada sin salida fichada no computa horas. Aparece en el cómputo marcada como “sin salida” y con 0 horas, hasta que alguien cargue la salida que falta. Por eso conviene tener activada la alerta “Salida sin fichar”: para enterarte el mismo día y no a fin de mes.

Y sobre los fichajes sin sector:

  • Se muestran como Fuera de sectores en el listado de registros, y hay un filtro para verlos.
  • Cuentan igual para las horas trabajadas: al cómputo le importa la secuencia entrada→salida, no dónde se hizo.
  • Guardan la ubicación real desde donde se fichó, así que se puede verificar después en el mapa.
  • En el reporte por sector no aparecen bajo ningún sector, porque no tienen uno.

Situaciones a tener en cuenta

  • Si desactivás un horario, los empleados que lo tenían pasan a fichar sin control de horario: van a poder marcar a cualquier hora dentro de su sector. No hay aviso: revisalo antes de desactivar uno.
  • Si desactivás un sector, los empleados asignados siguen pudiendo fichar ahí. Para que deje de valer hay que quitar la asignación en la ficha del empleado.
  • Si el empleado no da permiso de ubicación en el celular y tiene sectores asignados, no puede fichar (salvo que tenga el permiso “sin sector”). Es el segundo motivo más común de rechazo.
  • Empleado inactivo: el sistema directamente no lo reconoce. El mensaje que ve es “no se encontró coincidencia”, igual que si no estuviera empadronado.
  • Turnos que cruzan la medianoche: están contemplados. La jornada se cuenta en el día en que empezó, aunque la salida caiga al día siguiente.

15. Problemas frecuentes

No se abre la cámara

El navegador debe tener permiso de cámara. En el celular, usá el navegador por defecto (Chrome/Safari) y aceptá el permiso. El enlace debe abrirse con https.

“Está fuera del rango del sector”

El empleado no está dentro del radio del sector. Verificá la ubicación del sector y el radio (Sectores → Editar), o usá el link de ubicación para fijar la posición correcta.

No reconoce al empleado

Probá con mejor iluminación. Si sigue sin reconocer, reempadroná el rostro. También podés ajustar la sensibilidad.

Marca mal entrada/salida o cuenta tarde/extra de más

Revisá el horario asignado al empleado en ese sector (Empleados → Editar → Sectores/Horarios) y el margen de gracia. La entrada/salida y los cálculos salen de esa combinación.

El link de un solo uso “ya fue utilizado”

Cada link (de ubicación o de empadronamiento) sirve una vez. Generá uno nuevo desde el listado correspondiente.

“Debe indicar el motivo” al editar o borrar un registro

No es un error: la empresa tiene activo el Historial de movimientos y todo cambio manual tiene que quedar justificado. Escribí el motivo y guardá con normalidad.

En el cómputo, un empleado aparece con menos horas de las esperadas

Casi siempre son fichajes sin la salida correspondiente: esas jornadas no computan horas. Desplegá el detalle del empleado con el botón +, buscá las filas marcadas como sin salida y corregilas con una carga manual.

En el tablero de presentes figura gente que ya se fue

Se olvidaron de fichar la salida. Los casos de más de 16 horas aparecen resaltados en amarillo. Cargá la salida que falta para que el tablero vuelva a reflejar la realidad.

No veo Cómputo, Presentes o Historial en el menú

Son módulos: aparecen solo si están contratados. Pedíselo al administrador del sistema.

¿Algo no figura acá o necesitás ayuda? Contactá al administrador del sistema.