Ir al contenido

Panel Empleado

Rol: Empleados del negocio Ruta: /employee Acceso: Asignado por el propietario

Solo ves los módulos que tu jefe te ha asignado. Además tienes Mi Portal personal para fichaje, nóminas y más.


Aparecen únicamente si el propietario te ha dado permisos (Lectura o Edición).

MóduloPermisos posiblesDescripción
FacturasLectura / EdiciónVer y crear facturas del negocio
GastosLectura / EdiciónRegistrar gastos del negocio
ClientesLectura / EdiciónGestionar clientes
ProductosLectura / EdiciónCatálogo de productos
PresupuestosLectura / EdiciónCrear presupuestos
ProyectosLectura / EdiciónGestionar proyectos
TareasLectura / EdiciónGestionar tareas
InformesSolo LecturaVer informes del negocio

Tu espacio personal dentro del sistema. Siempre disponible con permiso my_portal.

MóduloRutaDescripción
Inicio (Fichaje)/employee/my-portalFichar entrada, pausas y salida con cronómetro en vivo
Nóminas/employee/my-portal/payrollsConsultar, descargar PDF y ver resumen de fichajes
Contratos/employee/my-portal/contractsVer historial y descargar documentos de contrato
Ausencias/employee/my-portal/absencesSolicitar vacaciones y ausencias. Ver calendario y saldo
Control Horario/employee/my-portal/time-controlRevisar registro diario y solicitar correcciones
Horas Extra/employee/my-portal/overtimeVer horas pendientes y elegir compensación (pago o descanso)
Documentos/employee/my-portal/documentsNavegar carpetas: Contratos, Nóminas, Ausencias

Estos módulos están disponibles para todos los empleados independientemente de permisos:

MóduloRutaDescripción
Mi Perfil/employee/profileEditar datos personales, contacto y datos fiscales
Mis Tickets/employee/my-ticketsCrear y ver tickets de soporte

Detalles de implementación
// Ruta base: /employee
{
path: '/employee',
element: (
<RoleGuard allowedRoles={['employee']}>
<EmployeeLayout />
</RoleGuard>
)
}

RoleGuard:

  • Verifica que el usuario tenga rol employee
  • Detecta empleados activos con status = 'active'
  • Soporta modo asesor (advisors en modo cliente)

EmployeePermissionRoute:

  • Control granular por sección
  • Consulta tabla employee_section_permissions
  • Cache con React Query (5 min staleTime)
  • Actualizaciones en tiempo real vía Supabase Realtime

Todas las páginas del portal usan lazy loading con Suspense:

const PortalHome = lazy(() => import('./pages/portal/Home'));
const PortalPayrolls = lazy(() => import('./pages/portal/Payrolls'));
// ... resto de módulos

Skeleton de carga:

  • RRHHPageSkeleton durante carga
  • Previene flash de contenido vacío
  • Coherente en todo el portal
interface EmployeePermission {
employee_id: string;
section: string; // 'my_portal', 'invoices', 'expenses', etc.
access_level: 'none' | 'read' | 'edit';
}

Hook principal:

const { canAccess, canEdit, isEmployee, isOwner } = useClientPanelPermissions();
// Verificar acceso
if (canAccess('my_portal')) {
// Empleado puede acceder a Mi Portal
}

Características:

  • Cache con gcTime: 10 min
  • Broadcast para actualizaciones instantáneas (~50-200ms)
  • Fallback con postgres_changes (~3-8s)
  • Previene recargas en navegación
TablaDescripción
employeesDatos del empleado (nombre, email, contrato)
employee_section_permissionsPermisos por sección
time_entriesFichajes (entrada, salida, pausas)
payrollsNóminas del empleado
employee_contractsHistorial de contratos
absence_requestsSolicitudes de ausencias
overtime_compensationsHoras extra pendientes/aprobadas

El portal utiliza la paleta de colores corporativa:

  • Verde principal: hsl(68 100% 50%) — Botones de acción primaria
  • Verde oscuro (hover): hsl(68 100% 45%) — Estados hover
  • Negro Factux: hsl(0 0% 10%) — Texto sobre verde

Ejemplo de uso:

<Button className="bg-[hsl(var(--brand-green))] hover:bg-[hsl(var(--brand-green-dark))] text-[hsl(var(--brand-black))]">
Fichar entrada
</Button>