🛟 Supervisor de marcas

Este val existe solo por un tope de la plataforma. Toda la lógica vive en elgmg/marcador_ECP; aquí solo hay cuatro crons que lo despiertan.

¿Por qué está separado?

El plan gratuito permite 10 crons por val, y marcador_ECP ya tiene 20 (creados antes de que se aplicara el tope: siguen corriendo, pero el val no admite ni uno más). Los supervisores necesitaban cupo, y un val nuevo estrena el suyo.

este val                        marcador_ECP
  4 crons  ──── HTTP + token ────►  Supervisor/endpoint.ts
                                      └─► lib/supervisor.ts  ← la lógica

Este val no sabe nada del marcador: ni credenciales, ni descriptor facial, ni horarios, ni cómo se marca. Solo hace fetch. Todo lo demás se ejecuta del otro lado, donde ya están las env vars y la tabla ausencias (que es privada de cada val y por eso no se puede consultar desde aquí).

Si cambia el backend del marcador, este val no se toca.

Horarios

ArchivoCron (UTC)LocalVerifica que exista
start_shift.ts0 14 * * 1-58:00 amInicio de jornada
start_lunch.ts5 19 * * 1-51:05 pmInicio de almuerzo
end_lunch.ts0 20 * * 1-52:00 pmFin de almuerzo
end_shift.ts10 23 * * 1-55:10 pmFin de jornada

Cada uno corre unos minutos después del último horario posible de esa marca en la semana: el momento en que ya se puede afirmar que debería estar hecha.

Configuración

VariableDescripción
SUPERVISOR_URLEndpoint Supervisor/endpoint.ts del val marcador_ECP
SUPERVISOR_TOKENDebe ser idéntico al del val marcador_ECP

Si el token deja de coincidir, el endpoint responde 401 y estos crons fallan: lo verás como corridas en rojo y te llegará el correo de fallo.

Qué esperar en los logs

Verás…Significa
🔎 … supervisadaEl otro val respondió; ahí está el detalle
❌ Supervisor … inalcanzablemarcador_ECP no respondió — este es el único aviso posible, porque si allá no se ejecuta nada, allá tampoco sale ningún correo

El resto de mensajes (marca verificada, recuperada, fuera de ventana) queda en los logs del val marcador_ECP, no aquí.