Apariencia
Favoritos y notas
Dos herramientas complementarias para que el recruiter recuerde candidatos y deje rastro de sus evaluaciones.
Favoritos del directorio
Permite marcar candidatos prometedores para revisarlos después, sin asignarlos formalmente a una vacante todavía.
Cómo funciona
- Modelo:
DirectoryFavoritecon columnas(recruiter_id, candidate_profile_id). - Unique constraint:
(recruiter_id, candidate_profile_id)— no duplicados. - Cada recruiter tiene su propia lista de favoritos. No se comparte entre recruiters.
Endpoints
| Acción | Método / Ruta |
|---|---|
| Agregar a favoritos | POST /api/v1/recruiter/favorites con candidate_profile_id |
| Quitar de favoritos | DELETE /api/v1/recruiter/favorites/{candidateId} |
| Listar mis favoritos | GET /api/v1/recruiter/favorites |
UI
- Botón de estrella en cada
DirectoryCandidateCarddel directorio. - Estado local optimista: cambia el ícono apenas click, revierte si falla.
- Página dedicada
/recruiter/favoritoscon todos los candidatos marcados.
Estadísticas cruzadas
Desde /admin/reportes/candidatos-mas-buscados:
- Se cuenta cuántos recruiters han marcado a cada candidato como favorito.
- Útil para saber quiénes están recibiendo más atención.
Notas por asignación
Cada VacancyAssignment tiene dos espacios de notas:
recruiter_notes— notas privadas del equipo HUMAE.company_notes— notas de la empresa cliente. Visibles también al recruiter.
Modelo de historial
Además del campo único en el VacancyAssignment (última nota), hay una tabla VacancyAssignmentNote que guarda el timeline completo:
VacancyAssignmentNote
├─ vacancy_assignment_id FK
├─ author_id FK User (quien escribió)
├─ body text (markdown permitido)
├─ visibility 'recruiter' | 'company' | 'all'
├─ created_atEndpoints
| Acción | Ruta |
|---|---|
| Listar notas de asignación | GET /vacancies/{vid}/assignments/{aid}/notes |
| Crear nota | POST /vacancies/{vid}/assignments/{aid}/notes |
| Editar nota propia (≤ 30 min) | PATCH /notes/{id} |
| Borrar nota propia (≤ 5 min) | DELETE /notes/{id} |
Reglas de visibilidad
Implementadas en VacancyAssignmentNotePolicy:
| Quién | Ve notas recruiter | Ve notas company | Ve notas all |
|---|---|---|---|
| Recruiter HUMAE | ✅ | ✅ | ✅ |
| Admin | ✅ | ✅ | ✅ |
| Company user | ⬜ | ✅ (si es de SU empresa) | ✅ |
| Candidato | ⬜ | ⬜ | ⬜ |
UI
Dentro de la tarjeta de asignación, clic en "Notas (N)" abre un panel lateral con:
- Timeline cronológico (más reciente arriba).
- Avatar + nombre + fecha relativa del autor.
- Texto con markdown renderizado.
- Form al final para agregar nueva nota.
- Checkbox "Visible para la empresa" si el autor es recruiter (por default las notas de recruiter son privadas).
Notas globales del candidato (opcional)
Fase 2: agregar CandidateProfileNote con notas cross-asignación. Ej: "Este candidato rechaza remoto" → se aplica a todas sus asignaciones futuras.
Menciones @
Fase 2: soporte para @usuario en notas con notificación in-app al mencionado.
Tiempo de edición / borrado
Para prevenir reescritura del histórico:
- Editar: permitido dentro de los primeros 30 minutos tras crear.
- Borrar: permitido dentro de los primeros 5 minutos.
Después, una nota queda inmutable. Para "corregir", crear otra nota aclaratoria.
Exportación
(Fase 2): exportar el timeline de notas de una asignación a PDF o Word para compartir con el cliente.
Notificaciones
- Nueva nota del company_user → in-app al recruiter asignado.
- Nueva nota del recruiter (si marcada visible para empresa) → in-app al company_user.
- Nota de
@mención→ in-app al mencionado (fase 2).
Errores comunes
| Error | HTTP |
|---|---|
| "Esta nota ya no puede editarse" (pasó el tiempo) | 403 |
| "No puedes ver notas privadas de otra empresa" | 403 |
| "Markdown inválido" | 422 |
Siguiente
Con todo el kit del recruiter documentado, pasa a la sección de empresas: Dashboard de empresa →

