Ir al contenido

Empleados

Ruta: /owner/settings/users Configura tipos de empleados, define permisos por módulo y gestiona el acceso al sistema.


La pantalla de Empleados en Configuración se divide en dos secciones principales:

Secciones:

SecciónDescripción
Tipos de EmpleadoDefine roles con permisos personalizados por módulo
Registros de AccesoHistorial de inicios de sesión de usuarios

Cada tipo de empleado incluye:

CampoDescripción
NombreIdentificador del tipo (ej: “Administrativo”, “Comercial”)
DescripciónExplicación del rol y responsabilidades
IconoRepresentación visual del tipo
Permisos por móduloNivel de acceso: Ninguno, Ver o Editar
EstadoActivo o Inactivo

Módulos configurables:

  • Facturas
  • Gastos
  • Presupuestos
  • Clientes
  • Productos
  • RRHH
  • Fichaje
  • Informes
  • Configuración

Niveles de acceso:

NivelDescripción
NingunoSin acceso al módulo
VerSolo lectura, sin modificaciones
EditarLectura y escritura completa

FunciónDescripciónDocumentación
Crear TipoDefine nuevo tipo con permisos específicosVer
Editar TipoModifica permisos de tipo existenteVer
Eliminar TipoBorra tipo no utilizadoVer
Invitar EmpleadoEnvía invitación con permisos asignadosVer
Gestionar AccesoActiva/desactiva tipos de empleadoVer
Ver RegistrosConsulta historial de accesosVer

┌─────────────────┐
│ Crear Tipo │
│ Empleado │
└────────┬────────┘
┌────▼────┐
│ Definir │
│ Permisos│
└────┬────┘
┌────────▼────────┐
│ Asignar a │
│ Empleado │
└────────┬────────┘
┌────▼────┐
│ Enviar │
│Invitación│
└────┬────┘
┌────────▼────────┐
│ Empleado │
│ Acepta │
└────────┬────────┘
┌────▼────┐
│ Acceso │
│ Activo │
└─────────┘

El sistema incluye roles base que puedes personalizar:

RolMódulos incluidosPermisos típicos
AdministrativoFacturas, Gastos, ClientesVer/Editar documentación
ComercialPresupuestos, ClientesVer/Editar comerciales
RRHHRRHH, FichajeVer/Editar personal
ContableFacturas, Gastos, InformesVer finanzas

Detalles técnicos
TablaColumnas principalesFK
employee_typesid, business_id, name, description, module_permissions, hr_role, icon, is_system, is_activebusinesses
employee_invitationsid, employee_id, business_id, email, token, status, permissions, expires_atemployees, businesses
employee_rolesid, user_id, business_id, role, assigned_byusers, businesses
employeesid, business_id, user_id, employee_id, first_name, last_name, email, position, statusbusinesses, users

Tipo hr_role:

type HRRole =
| 'hr_admin' // Administrador RRHH
| 'hr_manager' // Gestor RRHH
| 'hr_viewer' // Visualizador RRHH
| 'department_manager'; // Gestor departamento

Estado de invitación:

type InvitationStatus =
| 'pending' // Pendiente de aceptar
| 'accepted' // Aceptada
| 'expired' // Caducada
| 'cancelled'; // Cancelada

Niveles de acceso:

type AccessLevel =
| 'none' // Sin acceso
| 'read' // Solo lectura
| 'edit'; // Lectura y escritura

El campo module_permissions es un objeto JSON con la estructura:

interface ModulePermissions {
invoices?: AccessLevel;
expenses?: AccessLevel;
quotes?: AccessLevel;
customers?: AccessLevel;
products?: AccessLevel;
hr?: AccessLevel;
time_clock?: AccessLevel;
reports?: AccessLevel;
settings?: AccessLevel;
}
PolíticaRegla
employee_types_business_isolationbusiness_id = usuario autenticado
employee_invitations_businessAcceso vía negocio del usuario
employee_roles_businessSolo HR admins del negocio
employees_business_isolationbusiness_id = usuario autenticado
FunciónTriggerDescripción
send-employee-invitationInvitaciónGenera token, guarda permisos y envía email
accept-employee-invitationAceptaciónValida token, crea usuario y asigna permisos
validate-employee-invitationValidaciónVerifica token no expirado ni usado

Tipos de empleado con permisos:

SELECT id, name, description, module_permissions, is_active
FROM employee_types
WHERE business_id = '<business_id>'
ORDER BY name;

Invitaciones pendientes:

SELECT i.*, e.first_name, e.last_name, e.email
FROM employee_invitations i
JOIN employees e ON i.employee_id = e.id
WHERE i.business_id = '<business_id>'
AND i.status = 'pending'
AND i.expires_at > NOW()
ORDER BY i.sent_at DESC;

Empleados con acceso activo:

SELECT e.*, er.role, u.email as user_email
FROM employees e
LEFT JOIN employee_roles er ON er.user_id = e.user_id
AND er.business_id = e.business_id
LEFT JOIN auth.users u ON e.user_id = u.id
WHERE e.business_id = '<business_id>'
AND e.status = 'active'
AND e.user_id IS NOT NULL
ORDER BY e.first_name, e.last_name;

Permisos efectivos de un empleado:

SELECT
e.first_name,
e.last_name,
et.name as tipo_empleado,
et.module_permissions,
ei.permissions as permisos_personalizados
FROM employees e
LEFT JOIN employee_types et ON e.employee_type_id = et.id
LEFT JOIN employee_invitations ei ON ei.employee_id = e.id
AND ei.status = 'accepted'
WHERE e.id = '<employee_id>';