Asistencia (`attendance/`)
Fichar Entrada/Salida
Sección titulada «Fichar Entrada/Salida»Ruta: /owner/hr/attendance
Sistema de fichaje digital con cumplimiento ITSS y firmas digitales.
Proceso de Fichaje
Sección titulada «Proceso de Fichaje»Entrada:
1. Empleado accede desde su portal o app móvil2. Click en "Fichar Entrada"3. Sistema captura: - Hora exacta (timestamp UTC) - Geolocalización (opcional) - Dispositivo utilizado - IP de origen4. Generación de firma digital5. Registro en audit log inmutableSalida:
1. Click en "Fichar Salida"2. Sistema calcula: - Horas trabajadas totales - Descansos obligatorios cumplidos - Diferencia vs. horario contractual3. Validación automática de normativa4. Firma digital del registro completo5. Actualización de resumen diarioValidaciones ITSS
Sección titulada «Validaciones ITSS»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:
- Generación de HTML con resumen de jornada
- Creación de documento en DocuSeal
- Envío de solicitud de firma al empleado
- 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
Corrección de Fichajes
Sección titulada «Corrección de Fichajes»Los empleados pueden solicitar correcciones de fichajes incorrectos.
Flujo de Corrección
Sección titulada «Flujo de Corrección»1. Empleado detecta error en fichaje2. Solicita corrección desde portal3. Indica motivo detallado4. Propone nuevo horario (entrada/salida)5. Manager recibe notificación6. Manager revisa: - Horario original - Horario propuesto - Motivo declarado7. Aprueba o rechaza con comentarios8. Sistema registra en audit log9. Si se aprueba, genera nueva firma digitalValidación ITSS en Correcciones
Sección titulada «Validación ITSS en Correcciones»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 solicitudesEmployeeAttendanceTab.tsx // Vista del empleadoEditReasonModal.tsx // Modal de solicitudTablas:
time_entries- Fichajes originales (con flagis_corrected)attendance_correction_requests- Solicitudes de correcciónhr_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..."}Ver Registros de Asistencia
Sección titulada «Ver Registros de Asistencia»Vista consolidada de todos los fichajes con filtros avanzados.
Funcionalidades
Sección titulada «Funcionalidades»-
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