Arquitectura del Sistema & Plataforma de RRHH
Plataforma web de selección de personal especializada en el sector de la hostelería y restauración (CHR), desarrollada en Symfony. Integra un modelo de seguridad RBAC con doble validación por consultores, motor de búsqueda asíncrono en AJAX con KnpPaginator y endpoints de API REST documentados.
┌─────────────────────────────────────────────────────────────────────────────┐
│ TRT Conseil — Architecture RH & Recrutement │
└──────────────────────────────────────┬──────────────────────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
🛡️ Sécurité & Modération RBAC 🔍 Moteur de Recherche AJAX 📡 API REST Headless
• Double validation (TOVALID)• Filter.js sans rechargement• JMS Serializer Groups
• 4 Rôles isolés (Admin/RH) • KnpPaginator (6/page) • Endpoints paginés (/api)
• Upload sécurisé de CV PDF • Synchronisation URL HTML5 • Support mobile & tiers
• Envoi CV par Symfony Mailer• Requête optimisée Doctrine • Documentation JSON
Reclutamiento en Hostelería con Valor Humano
Cada cuenta, oferta de empleo y candidatura es revisada y validada por un consultor experto antes de establecer contacto.
Seguridad & Jerarquía de Roles
Esquema estricto de 4 roles con estado transitorio TOVALID para impedir publicaciones no autorizadas.
Envío Automatizado de CVs
Generación y envío automático vía Symfony Mailer del expediente de candidatura con CV en formato PDF adjunto al ser validado.
1. Modelo de Seguridad & Gestión de Roles (RBAC)
Jerarquía de permisos gestionada por el componente Security de Symfony con validación humana obligatoria:
| Rol del Sistema |
Estado |
Permisos & Capacidades |
ROLE_ADMIN |
Supervisor |
Creación, edición, bloqueo y eliminación de cuentas de administradores y consultores. |
ROLE_CONSULTANT |
Moderador de RRHH |
Validación de candidatos y empresas, publicación de ofertas y envío de currículums a empleadores. |
ROLE_RECRUTEUR |
Empleador |
Ficha de empresa, publicación de ofertas (indefinido, temporal, extras) y recepción de candidatos precalificados. |
ROLE_CANDIDAT |
Candidato |
Subida segura de CV en PDF, búsqueda avanzada y postulación a ofertas de trabajo aprobadas. |
2. Flujos de Trabajo & Gestión de Candidaturas
Procesos organizados para garantizar la verificación rigurosa de cada fase de selección:
Flujo del Candidato & Gestión del CV en PDF
Carga segura de archivos PDF saneados con transliterator_transliterate() y seguimiento del estado en tiempo real.
PDF Uploadtransliteratortovalid
Flujo del Consultor & Notificación Automática
Revisión de candidaturas pendientes y envío automático por correo del CV adjunto a la empresa al aprobarse.
Symfony MailerDataPartPièce jointe CV
3. Motor de Búsqueda Asíncrono (AJAX)
Módulo en JavaScript Filter.js combinado con KnpPaginator y Doctrine QueryBuilder para búsquedas instantáneas sin recargas:
// Requête QueryBuilder optimisée dans AnnonceRepository.php
private function getSearchQuery(SearchData $search): QueryBuilder
{
$query = $this->createQueryBuilder('p')
->select('c', 'p')
->join('p.poste', 'c')
->orderBy('p.id', 'DESC');
if (!empty($search->q)) {
$query->andWhere('p.titre LIKE :q')
->setParameter('q', "%{$search->q}%");
}
if (!empty($search->poste)) {
$query->andWhere('c.id IN (:poste)')
->setParameter('poste', $search->poste);
}
return $query;
}
- Escucha de Eventos en Tiempo Real: Detección inmediata de texto y filtros de puesto con inserción parcial en el DOM.
- Paginación Optimizada con KnpPaginator: Límite de 6 elementos por página para optimizar el rendimiento y el consumo de memoria.
- Historial HTML5 (replaceState): Sincronización dinámica de la URL del navegador para compartir búsquedas filtradas directamente.
4. Especificaciones de la API REST Headless
Endpoints JSON documentados serializados con JMS Serializer:
| Method |
Endpoint URL |
Grupo JMS |
Descripción del Endpoint |
| GET |
/api/annonces |
getAnnonces |
Lista completa de ofertas de trabajo aprobadas en formato JSON |
| GET |
/api/annoncesby?page={n} |
getAnnonces |
Colección paginada de anuncios con metadatos de paginación |
| GET |
/api/annonce/{id} |
getAnnonces |
Detalle completo de una oferta de empleo específica por su ID |
| GET |
/api/annoncesby/{poste} |
getAnnonces |
Filtrado y paginación de ofertas según el puesto de trabajo |
5. Modelo de Datos & Relaciones ORM
Esquema relacional normalizado en MySQL con integridad referencial de Doctrine:
Entidades de Usuarios & Perfiles
User con correo único, Candidat con ruta de CV en PDF y Recruteur con datos de la empresa.
Entidades de Ofertas & Taxonomía
Poste con 28 profesiones de hostelería y Annonce con tipo de contrato, sueldo y descripción.
Entidad Candidature
Tabla relacional que une Annonce, Candidat y el Consultant que aprueba la solicitud con su estado.