Ir al contenido

Ausencias (`absences/`)

Ruta: /owner/hr/absences

Sistema completo de gestión de ausencias con aprobación multinivel.

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
1. Empleado accede a su portal
2. Click en "Solicitar Ausencia"
3. Selecciona tipo de ausencia
4. Indica fechas (inicio y fin)
5. Sistema calcula:
- Días laborables afectados
- Días disponibles (si aplica)
- Afectación a nómina
6. Añade motivo y documentación
7. Envía solicitud
8. Manager recibe notificación
9. Revisión y aprobación/rechazo
10. Empleado recibe respuesta
  • 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 principal
AbsenceRequestDetailSheet.tsx // Detalle de solicitud

Tabla: 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
);

Los managers pueden revisar y gestionar solicitudes desde el dashboard.

1. Manager ve notificación de solicitud pendiente
2. 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 Rechazar
4. Si rechaza, indica motivo obligatorio
5. Sistema notifica al empleado
6. Actualización de saldos (si aplica)

Vista visual del equipo con todas las ausencias.

  • 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