Ir al contenido

Invitar Empleado

Envía una invitación por email a un empleado para que acceda al sistema con permisos específicos.

  1. En RRHH → Empleados, selecciona un empleado sin acceso — clic en “Invitar”.
  2. Se abre el modal de invitación.
  3. Selecciona el Tipo de Empleado — los permisos se muestran automáticamente.
  4. (Opcional) Activa “Personalizar permisos” para ajustar acceso individual.
  5. Revisa el resumen de permisos.
  6. Clic en “Enviar Invitación” — email enviado con link de aceptación.

Datos del empleado:

  • Nombre completo
  • Email de contacto
  • Avatar con iniciales

Configuración de permisos:

CampoDescripción
Tipo de EmpleadoSelecciona rol predefinido
Personalizar permisosActiva para ajustes individuales
Resumen de permisosBadges con módulos y nivel de acceso
┌─────────────────┐
│ Seleccionar │
│ Empleado │
└────────┬────────┘
┌────▼────┐
│ Elegir │
│ Tipo │
└────┬────┘
┌────────▼────────┐
│ Personalizar │ (opcional)
│ Permisos │
└────────┬────────┘
┌────▼────┐
│ Enviar │
│ Email │
└────┬────┘
┌────────▼────────┐
│ Empleado │
│ Recibe Link │
└────────┬────────┘
┌────▼────┐
│ Acepta │
│Invitación│
└────┬────┘
┌────────▼────────┐
│ Acceso │
│ Activado │
└─────────────────┘

Asunto: Invitación como Empleado en [Nombre Negocio]

Elementos:

  • Nombre del remitente (propietario)
  • Rol asignado
  • Nombre del negocio
  • Botón de aceptación con link único
  • Aviso de expiración (7 días)
  • Toast de confirmación: “Invitación enviada a [email]”.
  • Badge “Pendiente” en el empleado.
  • El empleado recibe email en su bandeja.
MensajeCausaSolución
”Selecciona un tipo para continuar”No elegiste tipoSelecciona un tipo de empleado
”El empleado ya tiene acceso”Usuario ya invitado/activoRevisa estado del empleado
”Email no válido”Email incorrecto en fichaActualiza email del empleado
Detalles técnicos

Edge Function: send-employee-invitation

Proceso:

  1. Genera token UUID único
  2. Cancela invitaciones pendientes previas
  3. Crea registro en employee_invitations con permisos
  4. Envía email vía SendGrid con template dinámico
  5. Link de aceptación: /accept-employee-invitation/{token}

Request body:

interface InvitationRequest {
employeeId: string;
businessId: string;
email: string;
permissions?: Permission[];
employeeTypeId?: string;
}
interface Permission {
section: string;
access: 'none' | 'read' | 'edit';
}

Tabla: employee_invitations

Campos:

{
id: uuid,
employee_id: uuid,
business_id: uuid,
email: string,
token: string, // UUID único
status: 'pending', // pending, accepted, expired, cancelled
permissions: jsonb, // Array de Permission
employee_type_id: uuid,
sent_at: timestamp,
expires_at: timestamp, // +7 días
accepted_at: timestamp,
created_at: timestamp,
updated_at: timestamp
}

Template SendGrid: d-0501e71f03a44ebb82b3b2ecfed3654c

Queries de diagnóstico:

-- Ver invitaciones pendientes
SELECT i.*, e.first_name, e.last_name, e.email,
EXTRACT(DAY FROM (i.expires_at - NOW())) as dias_restantes
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;
-- Reenviar invitación (cancelar anterior y crear nueva)
UPDATE employee_invitations
SET status = 'cancelled', updated_at = NOW()
WHERE employee_id = '<employee_id>'
AND status = 'pending';