Cumplimiento (`compliance/`)
Exportar contenido
Semáforo de Cumplimiento
Sección titulada «Semáforo de Cumplimiento»Ruta: /owner/hr/compliance
Sistema visual de monitorización del cumplimiento normativo.
Indicadores de Cumplimiento
Sección titulada «Indicadores de Cumplimiento»🟢 Verde - Cumplimiento Total:
- 90-100% de horas contractuales cumplidas
- Todos los fichajes completos
- Descansos obligatorios respetados
- Documentación al día
🟡 Amarillo - Atención Necesaria:
- 80-90% de horas contractuales
- 100-110% de horas (posible exceso)
- Algún fichaje incompleto
- Documentación pendiente
🔴 Rojo - Incumplimiento:
- menos de 80% de horas contractuales
- más de 110% de horas (exceso)
- Múltiples fichajes sin corregir
- Documentación faltante
Vista por Empleado
Sección titulada «Vista por Empleado»Directorio con semáforo por empleado:┌─────────────────┬────────┬─────────┐│ Empleado │ Estado │ Horas │├─────────────────┼────────┼─────────┤│ Juan Pérez │ 🟢 │ 160/160 ││ María García │ 🟡 │ 145/160 ││ Pedro López │ 🔴 │ 120/160 ││ Ana Martínez │ 🟢 │ 158/160 │└─────────────────┴────────┴─────────┘Detalles Técnicos
Componente: ComplianceSemaphore.tsx
type ComplianceLevel = 'green' | 'yellow' | 'red';
export function ComplianceSemaphore({ level, size = 'md', showLabel = true,}: ComplianceSemaphoreProps) { const config = { green: { bg: 'bg-green-100', text: 'text-green-600', icon: CheckCircle2, label: 'Correcto', }, yellow: { bg: 'bg-amber-100', text: 'text-amber-600', icon: AlertTriangle, label: 'Atención', }, red: { bg: 'bg-red-100', text: 'text-red-600', icon: AlertCircle, label: 'Riesgo', }, }; // ...}
// Cálculo del nivel de cumplimientofunction calculateComplianceLevel( workedHours: number, contractualHours: number): ComplianceLevel { const percentage = (workedHours / contractualHours) * 100;
if (percentage < 80) return 'red'; if (percentage < 90) return 'yellow'; if (percentage > 110) return 'red'; if (percentage > 100) return 'yellow'; return 'green';}Hook: useComplianceData.ts
Calcula métricas de cumplimiento por empleado:
export function useComplianceData(businessId: string) { return useQuery({ queryKey: ['compliance-data', businessId], queryFn: async () => { // 1. Obtener empleados activos const employees = await fetchActiveEmployees(businessId);
// 2. Calcular horas trabajadas del mes const monthStart = startOfMonth(new Date()); const monthEnd = endOfMonth(new Date()); const timeEntries = await fetchTimeEntries(businessId, monthStart, monthEnd);
// 3. Calcular horas contractuales esperadas const workingDays = calculateWorkingDays(monthStart, monthEnd);
// 4. Por cada empleado, calcular nivel de cumplimiento return employees.map(employee => { const worked = sumHours(timeEntries, employee.id); const expected = employee.daily_hours * workingDays; const level = calculateComplianceLevel(worked, expected);
return { employeeId: employee.id, employeeName: `${employee.first_name} ${employee.last_name}`, workedHours: worked, expectedHours: expected, complianceLevel: level, }; }); }, });}Checklist Normativo
Sección titulada «Checklist Normativo»Lista de verificación de cumplimiento legal.
Checklist ITSS
Sección titulada «Checklist ITSS»- Registro diario de jornada implementado
- Firma digital mensual de empleados
- Audit logs inmutables
- Correcciones de fichajes trazables
- Documentación lista para inspección
Checklist LOPD
Sección titulada «Checklist LOPD»- Consentimientos firmados por empleados
- Cifrado de datos sensibles
- Logs de acceso a datos personales
- Política de privacidad actualizada
- DPO designado (si procede)
Checklist Estatuto de los Trabajadores
Sección titulada «Checklist Estatuto de los Trabajadores»- Descansos obligatorios validados
- Jornada máxima controlada
- Horas extras registradas
- Vacaciones según convenio
- Contratos temporales controlados