Ausencias (`absences/`)
Exportar contenido
Solicitar Ausencia
Sección titulada «Solicitar Ausencia»Ruta: /owner/hr/absences
Sistema completo de gestión de ausencias con aprobación multinivel.
Tipos de Ausencia
Sección titulada «Tipos de Ausencia»Vacaciones (vacation):
- Descontables del saldo anual
- Requieren aprobación previa
- Calculan días laborables automáticamente
Baja por Enfermedad (sick_leave):
- No descontables
- Requieren justificante médico
- Notificación inmediata al manager
Permisos Retribuidos (permission):
- Según convenio colectivo
- Tipos: matrimonio, fallecimiento, mudanza, cita médica
- Justificación obligatoria
Sin Sueldo (unpaid):
- Acuerdo entre partes
- Afecta a nómina
- Requiere aprobación gerencia
Flujo de Solicitud
Sección titulada «Flujo de Solicitud»1. Empleado accede a su portal2. Click en "Solicitar Ausencia"3. Selecciona tipo de ausencia4. Indica fechas (inicio y fin)5. Sistema calcula: - Días laborables afectados - Días disponibles (si aplica) - Afectación a nómina6. Añade motivo y documentación7. Envía solicitud8. Manager recibe notificación9. Revisión y aprobación/rechazo10. Empleado recibe respuestaValidaciones
Sección titulada «Validaciones»- Saldo suficiente (para vacaciones)
- No solapamiento con ausencias previas
- Documentación requerida (bajas médicas)
- Plazo de preaviso (vacaciones: 15 días)
Detalles Técnicos
Componentes:
AbsencesContent.tsx // Vista principalAbsenceRequestDetailSheet.tsx // Detalle de solicitudTabla: absence_requests
Campos Principales:
CREATE TABLE absence_requests ( id UUID PRIMARY KEY, employee_id UUID NOT NULL, business_id UUID NOT NULL, absence_type TEXT NOT NULL, start_date DATE NOT NULL, end_date DATE NOT NULL, total_days INTEGER NOT NULL, status TEXT DEFAULT 'pending', reason TEXT, document_url TEXT, -- Justificante (PDF) rejection_reason TEXT, created_at TIMESTAMP DEFAULT NOW(), reviewed_by UUID, reviewed_at TIMESTAMP);Cálculo de Días Laborables:
function calculateWorkingDays(startDate: Date, endDate: Date): number { let count = 0; let currentDate = new Date(startDate);
while (currentDate <= endDate) { const dayOfWeek = currentDate.getDay(); // Excluir sábados (6) y domingos (0) if (dayOfWeek !== 0 && dayOfWeek !== 6) { count++; } currentDate.setDate(currentDate.getDate() + 1); }
return count;}Saldo de Vacaciones:
Tabla absence_balances:
CREATE TABLE absence_balances ( id UUID PRIMARY KEY, employee_id UUID UNIQUE, year INTEGER NOT NULL, total_days INTEGER DEFAULT 22, -- Según convenio used_days INTEGER DEFAULT 0, pending_days INTEGER DEFAULT 0, available_days INTEGER GENERATED ALWAYS AS (total_days - used_days - pending_days) STORED);Aprobar/Rechazar Ausencia
Sección titulada «Aprobar/Rechazar Ausencia»Los managers pueden revisar y gestionar solicitudes desde el dashboard.
Proceso de Aprobación
Sección titulada «Proceso de Aprobación»1. Manager ve notificación de solicitud pendiente2. Accede a detalle completo: - Datos del empleado - Tipo y fechas de ausencia - Días solicitados - Motivo declarado - Documentación adjunta - Saldo disponible (si aplica)3. Opción: Aprobar o Rechazar4. Si rechaza, indica motivo obligatorio5. Sistema notifica al empleado6. Actualización de saldos (si aplica)Calendario de Ausencias
Sección titulada «Calendario de Ausencias»Vista visual del equipo con todas las ausencias.
Funcionalidades
Sección titulada «Funcionalidades»- Vista Mensual: Todas las ausencias del mes
- Vista Semanal: Detalle semana a semana
- Filtros: Por departamento, tipo, empleado
- Leyenda de Colores:
- 🔵 Vacaciones
- 🔴 Baja médica
- 🟢 Permiso retribuido
- ⚪ Sin sueldo