Ir al contenido

Asistencia (`attendance/`)

Ruta: /owner/hr/attendance

Sistema de fichaje digital con cumplimiento ITSS y firmas digitales.

Entrada:

1. Empleado accede desde su portal o app móvil
2. Click en "Fichar Entrada"
3. Sistema captura:
- Hora exacta (timestamp UTC)
- Geolocalización (opcional)
- Dispositivo utilizado
- IP de origen
4. Generación de firma digital
5. Registro en audit log inmutable

Salida:

1. Click en "Fichar Salida"
2. Sistema calcula:
- Horas trabajadas totales
- Descansos obligatorios cumplidos
- Diferencia vs. horario contractual
3. Validación automática de normativa
4. Firma digital del registro completo
5. Actualización de resumen diario

El sistema valida automáticamente:

  • Descanso obligatorio: Mínimo 12 horas entre jornadas
  • Jornada máxima: No más de 9 horas diarias (salvo excepciones)
  • Pausas: Mínimo 15 min cada 6 horas trabajadas
  • Jornada semanal: Máximo 40 horas (según convenio)

Alertas Generadas:

  • 🔴 Jornada excesiva (>9h sin autorización)
  • 🟡 Descanso insuficiente entre jornadas
  • 🟡 Falta de pausa obligatoria
  • 🟢 Fichaje conforme a normativa
Detalles Técnicos - Firmas Digitales ITSS

Edge Function: create-attendance-signature

Esta función genera documentos de resumen mensual con firma digital obligatoria según ITSS:

interface TimeSummary {
employeeId: string;
employeeName: string;
periodMonth: number;
periodYear: number;
totalHours: number;
totalDays: number;
totalBreakMinutes: number;
averageHoursPerDay: number;
dailyBreakdown: Array<{
date: string;
checkIn: string;
checkOut: string | null;
breakMinutes: number;
totalHours: number;
}>;
}

Integración con DocuSeal:

  1. Generación de HTML con resumen de jornada
  2. Creación de documento en DocuSeal
  3. Envío de solicitud de firma al empleado
  4. Almacenamiento de documento firmado

Tabla: attendance_period_signatures

Cumplimiento:

  • RD-Ley 8/2019 (Registro de jornada)
  • Estatuto de los Trabajadores Art. 34.9
  • Documentación lista para inspecciones ITSS

Los empleados pueden solicitar correcciones de fichajes incorrectos.

1. Empleado detecta error en fichaje
2. Solicita corrección desde portal
3. Indica motivo detallado
4. Propone nuevo horario (entrada/salida)
5. Manager recibe notificación
6. Manager revisa:
- Horario original
- Horario propuesto
- Motivo declarado
7. Aprueba o rechaza con comentarios
8. Sistema registra en audit log
9. Si se aprueba, genera nueva firma digital

Trazabilidad Obligatoria:

  • Registro del fichaje original (inmutable)
  • Solicitud de corrección con motivo
  • Aprobación/Rechazo con responsable
  • Nuevo fichaje corregido
  • Firma digital del cambio

Todos estos datos quedan registrados en logs de auditoría inmutables, disponibles para inspecciones.

Detalles Técnicos

Componentes:

CorrectionRequestsSection.tsx // Lista de solicitudes
EmployeeAttendanceTab.tsx // Vista del empleado
EditReasonModal.tsx // Modal de solicitud

Tablas:

  • time_entries - Fichajes originales (con flag is_corrected)
  • attendance_correction_requests - Solicitudes de corrección
  • hr_audit_logs - Logs inmutables de cambios

Campos de Auditoría:

CREATE TABLE attendance_correction_requests (
id UUID PRIMARY KEY,
employee_id UUID REFERENCES employees(id),
original_entry_id UUID REFERENCES time_entries(id),
request_date DATE NOT NULL,
reason TEXT NOT NULL,
requested_changes JSONB NOT NULL, -- Horario propuesto
status TEXT DEFAULT 'pending',
reviewed_by UUID REFERENCES auth.users(id),
reviewed_at TIMESTAMP,
rejection_reason TEXT,
created_at TIMESTAMP DEFAULT NOW()
);

Audit Log Automático: Cada operación genera entrada en hr_audit_logs:

{
"action": "correction_approved",
"employee_id": "uuid",
"original_entry": {...},
"corrected_entry": {...},
"approved_by": "uuid",
"reason": "Olvido de fichar salida",
"timestamp": "2024-01-15T10:30:00Z",
"ip_address": "192.168.1.1",
"user_agent": "Mozilla/5.0..."
}

Vista consolidada de todos los fichajes con filtros avanzados.

  • Filtros Disponibles:

    • Por empleado
    • Rango de fechas
    • Estado (completo, incompleto, corregido)
    • Departamento
  • Vistas:

    • Lista detallada (día a día)
    • Resumen semanal
    • Resumen mensual
    • Vista de calendario
  • Exportación:

    • CSV para Excel
    • PDF con firma digital
    • Formato ITSS para inspecciones