Introducción
El Portal Autogestión (app.acme.soporta.eu) es la consola de trabajo del equipo de reclutamiento. Desde acá administrás candidatos, publicás vacantes, ejecutás el matching automático contra Bedrock y revisás reportes. Está pensado para uso interno y requiere autenticación con MFA.
La plataforma de ACME IDP está compuesta por tres portales que comparten la misma base de candidatos y vacantes:
cv.acme.soporta.eu— público. Los candidatos suben su CV desde un formulario simple (sin login). Se accede vía QR / link directo en redes sociales o avisos.app.acme.soporta.eu— autogestión (este portal). Reclutadores y administradores trabajan acá.admin.acme.soporta.eu— admin / carga masiva. Permite subir múltiples CVs de una carpeta (ej. lotes históricos).
Acceso y permisos
Cada usuario pertenece a un único nivel. El nivel determina a qué portales accede y qué puede hacer:
| Nivel | Nombre | Acceso | Permisos clave |
|---|---|---|---|
| Nivel 1 | Carga inicial | admin |
Solo carga masiva. No ve candidatos ni vacantes. |
| Nivel 2 | Reclutador | admin + app |
Operación día a día. Sin acceso a Configuración. |
| Nivel 3 | Administrador | Los tres portales | Todo lo anterior + Configuración (alta de usuarios, umbral, aviso legal). |
Primer ingreso
- Cuando un admin te da de alta, recibís un correo con contraseña temporal.
- Al entrar te pide cambiarla por una definitiva (mínimo 12 caracteres, mayúsculas, números y símbolo).
- Inmediatamente después configurás MFA TOTP escaneando un QR con Google Authenticator, Authy o Microsoft Authenticator. Es obligatorio.
- De ahí en más, cada login pide email + contraseña + código TOTP de 6 dígitos.
Olvido de contraseña
Hacé clic en "¿Olvidaste tu contraseña?" en la pantalla de login. Cognito te envía un código a tu email (válido 1 hora). Lo ingresás y definís una nueva contraseña.
Pérdida del segundo factor
Si perdés el celular o reseteás la app TOTP, no podés entrar solo. Pedile a un admin que dispare Reset MFA sobre tu usuario; en el próximo login te volverá a aparecer el QR para reconfigurar.
Cómo llegan los CVs al sistema
Hay tres canales de ingesta:
1. Postulación pública (cv)
El candidato escanea un QR o entra al link, completa un formulario corto (nombre, email, teléfono, ubicación, acepta Ley N.° 25.326) y adjunta su CV (PDF, DOCX, JPG, PNG, HTML — hasta 60 páginas).
2. Carga masiva (admin)
Un usuario nivel 1 o superior puede subir varias decenas de CVs a la vez desde una carpeta. Cada archivo se procesa de forma independiente.
3. Procesamiento automático
En ambos casos el flujo es el mismo:
- Subida a S3 en bucket privado (cifrado KMS).
- Textract extrae texto / OCR si es imagen o PDF escaneado.
- Bedrock Claude Sonnet 4.6 analiza el texto y devuelve un JSON estructurado con: datos personales, ubicación, experiencia, formación, habilidades, idiomas.
- Deduplicación en cascada:
- ¿Hay DNI en el CV? Si existe candidato con ese DNI → actualizar.
- Si no, ¿coincide el email? → actualizar.
- Si no, ¿coincide el teléfono normalizado a E.164? → actualizar.
- Si no, se crea un candidato nuevo.
- Cuando se actualiza, la versión anterior del perfil se guarda en
profile_history(últimas 20). Esto permite ver la evolución del CV de la persona en el tiempo. - Status del candidato:
- ACTIVO — datos mínimos extraídos correctamente.
- INCOMPLETO_REVISION — falta info clave (DNI, email o experiencia). Requiere revisión manual del reclutador.
⏱ Desde que el candidato envía el CV hasta que aparece en el dashboard pasan típicamente 30-90 segundos.
Dashboard
Es la primera pantalla al ingresar. Concentra el estado actual del pipeline:
KPIs
- Total candidatos — todos los registros activos en la base.
- Activos — perfil completo, listos para matching.
- Incompletos — requieren revisión manual.
- Matches sobre umbral — coincidencias con score ≥ umbral configurado (default 70/100).
- Vacantes activas — ofertas abiertas a matching automático.
Gráficos
- Top skills — habilidades más frecuentes en tu base de candidatos. Útil para planificar campañas.
- Distribución geográfica — candidatos por provincia / ciudad.
Tablas
- Candidatos recientes — últimos 10 ingresos. Clic en una fila abre el detalle.
- Top matches — mejores coincidencias detectadas en la última corrida.
Candidatos
Pantalla principal de trabajo. Tiene tres columnas:
Columna izquierda — Lista
- Tabs: Activos / Incompletos.
- Buscador: nombre, DNI, email, ubicación o habilidad — búsqueda en vivo.
- Clic en una persona la carga en la columna central.
Columna central — Detalle
- Identidad: nombre, DNI, contacto, fecha de ingreso.
- Perfil estructurado: ubicación, modalidad preferida, experiencia, formación, habilidades, idiomas.
- Historial de versiones: si la persona postuló más de una vez, vas a ver una línea de tiempo con cada CV recibido. Útil para ver crecimiento profesional o detectar inconsistencias.
- Acciones:
- ✏️ Editar — corregir datos extraídos por la IA (típico en perfiles incompletos).
- 🔄 Re-procesar — vuelve a pasar el CV por Textract + Bedrock (útil si la primera pasada falló parcialmente).
- 📥 Descargar CV original.
- 🗑 Eliminar — solo nivel 3.
Columna derecha — Matching
Muestra las vacantes activas para las que esta persona tiene mejor score. Te ahorra ir a la sección Matching cuando estás revisando un candidato puntual.
Vacantes
Catálogo de ofertas en formato grid de tarjetas. Cada tarjeta muestra: título, empresa, localidad, modalidad, status y fecha.
Crear / Editar una vacante
Botón "+ Nueva oferta" arriba a la derecha. Campos:
- Título, empresa, localidad, provincia, modalidad, horario, recruiter asignado.
- Objetivo — descripción libre del rol.
- Requisitos — uno por línea. Si marcás "(excluyente)" al final de un requisito (ej.
5 años de experiencia en SAP (excluyente)), se resalta en rojo y el matching le da peso máximo. - Responsabilidades — uno por línea.
- Beneficios — uno por línea.
Activar / Desactivar
El toggle de la tarjeta cambia el status entre Activa e Inactiva. Solo las activas entran al matching automático horario.
Eliminar
Disponible desde el modal de edición. Pide confirmación. La eliminación es permanente.
Matching
Tabla con todas las coincidencias detectadas, ordenadas por score descendente.
Cómo funciona el matching
- Cada hora (cron
rate(1 hour)) EventBridge dispara la Lambdaacme-prod-matching. - Para cada combinación candidato activo × vacante activa, Bedrock evalúa skills, experiencia, ubicación, modalidad y disponibilidad. Devuelve un score 0–100 + una justificación breve.
- Si el score supera el umbral (configurable, default 70), se dispara una notificación SNS al email del reclutador asignado a la vacante.
- Todos los matches (no solo los notificados) se guardan en DynamoDB para consulta posterior.
Acciones en la tabla
- Clic en un match abre el detalle: ver justificación de la IA, score por dimensión, descargar CV.
- Filtros: por vacante, score mínimo, fecha.
Chat IA
Asistente conversacional que consulta tu base real de candidatos, vacantes y matches. No inventa datos: cuando le preguntás algo concreto, busca en DynamoDB y responde con nombres, DNIs y números reales.
Qué podés preguntarle
- "¿Cuántos candidatos tengo activos?"
- "¿Quiénes tienen más experiencia como operarios?"
- "Mostrame candidatos de Madrid con experiencia en soldadura."
- "¿Cuál es el mejor match para la vacante de logística?"
- "Dame el detalle del DNI 30111222."
Conversaciones
- + Nueva conversación — empieza un chat limpio. El panel izquierdo lista tus conversaciones anteriores.
- Clic en una conversación para retomarla; el título se arma solo con tu primer mensaje.
- 🗑 sobre una conversación la elimina.
- Las conversaciones se guardan en tu navegador (no se comparten entre equipos ni con otros usuarios).
Las respuestas se muestran con formato (negritas, listas, tablas) para que los datos sean fáciles de leer.
Reportes
Tableros analíticos para la dirección. Filtros, 5 KPIs, 6 gráficos, listado detallado y exportación.
- Filtros: búsqueda libre, estado (Activos / Incompletos), provincia, sector, nivel educativo.
- KPIs: total filtrado, activos, incompletos, con matches, confianza promedio.
- Gráficos: distribución por estado, top skills técnicas, distribución geográfica, sectores, nivel educativo, ingresos por fecha.
- 📋 Listado de candidatos: tabla detallada (nombre, DNI, contacto, ubicación, años de experiencia, skills, estado, fecha de ingreso) — refleja exactamente los filtros aplicados.
- ⬇ Exportar CSV: descarga los candidatos filtrados en formato compatible con Excel (con acentos). Útil para compartir listados o trabajarlos fuera del sistema.
- 🖨 Imprimir / PDF: genera una versión imprimible del reporte.
📌 Reportes nunca cuenta candidatos archivados — siempre trabaja sobre los vigentes (Ley 25.326: los archivados siguen en la base pero no son candidatos activos).
Configuración — solo nivel 3
Cuatro pestañas:
Sistema
- Umbral de matching (0–100) — score mínimo para que una coincidencia dispare email al reclutador.
- Schedule del matching automático — expresión cron / rate. Default
rate(1 hour). - Retención de candidatos (días) — TTL en DynamoDB. Cliente requiere 365.
- Email del recruiter por defecto — receptor de notificaciones sin recruiter explícito.
Usuarios
ABM completo del User Pool Cognito:
- + Nuevo usuario — email + nombre + apellido + departamento + nivel. Cognito le envía la contraseña temporal por mail.
- Editar — cambiar datos personales o nivel.
- Reset contraseña — fuerza al usuario a definir una nueva en el próximo login.
- Reset MFA — borra el TOTP actual; el usuario reconfigura en el próximo login.
- 🚫 Deshabilitar / Habilitar — suspende el acceso sin borrar la cuenta (reversible).
- 🗑 Eliminar — borra la cuenta de Cognito de forma permanente e irreversible. Pide doble confirmación (escribir "ELIMINAR"). No podés borrar tu propia cuenta. Usalo solo cuando estés seguro; para suspensiones temporales usá Deshabilitar.
⚠ Los cambios de nivel solo tienen efecto en el próximo login del usuario (el claim cognito:groups se refresca al emitir un token nuevo). La columna MFA muestra "✓ Activo" cuando el usuario ya pasó por el setup obligatorio de TOTP, y "Pendiente" si todavía no completó el primer login.
Aviso de privacidad
Editor del texto Ley N.° 25.326 que ven los candidatos en cv.acme.soporta.eu. Cada vez que guardás, queda asentado en el historial (fecha, hora, usuario). Podés abrir versiones anteriores para auditoría.
🔑 Credenciales API
Para que un sistema externo (ej. el ERP o sistema de RRHH del cliente) consuma los datos de candidatos vía API:
- + Generar credencial — nombrás al integrador y el sistema crea las credenciales. El client_secret se muestra una sola vez en un modal: copialo y entregalo al integrador por un canal seguro (no se vuelve a mostrar).
- 📖 Ver doc / ⬇ Descargar doc — la documentación técnica de integración (privada, requiere login). Descargala para enviársela al integrador junto con la credencial.
- 🗑 Revocar — desactiva una credencial al instante: el integrador pierde acceso.
- La tabla lista las credenciales activas (nombre, client_id, fecha) — nunca el secret.
🔒 La API es de solo lectura y soporta sincronización incremental: el integrador puede mantener un espejo de la base detectando solo los candidatos que cambiaron. Todo el detalle está en la documentación de integración.
Flujos comunes
📨 Revisar las postulaciones del día
- Dashboard → mirar KPI "Candidatos activos" vs ayer.
- Tabla "Candidatos recientes" → abrir uno por uno los nuevos.
- En cada uno: revisar perfil, ver matching sugerido en la columna derecha.
📩 Procesar la notificación de un match alto
- Llega email SNS con score, candidato y vacante.
- Entrar al portal → Matching → buscar la fila correspondiente.
- Leer la justificación de la IA → si convalida, contactar al candidato directamente por email/teléfono.
🆕 Publicar una vacante nueva
- Vacantes → "+ Nueva oferta".
- Completar campos. Marcar "(excluyente)" en los requisitos no negociables.
- Guardar como Activa.
- En la siguiente corrida del matching (≤ 1 hora), aparecerán los primeros candidatos.
🔍 Buscar un candidato por DNI
- Candidatos → buscador → pegar DNI.
- La búsqueda matchea contra el campo DNI normalizado.
👥 Dar de alta a un reclutador nuevo
- Configuración → Usuarios → "+ Nuevo usuario" (solo admin).
- Email corporativo + nombre + apellido + departamento + nivel 2 (reclutador).
- El usuario recibe email automático → primer login lo guía por cambio de password + setup MFA.
Problemas frecuentes
"Sesión expirada. Iniciá sesión nuevamente."
El token venció (duran 30 minutos). Es normal después de un rato de inactividad. Hacé clic en aceptar y volvés a la pantalla de login.
"Tu sesión está desactualizada. Cerrando sesión para refrescar permisos…"
Te asignaron o cambiaron tu nivel mientras tenías el portal abierto. El sistema te desloguea automáticamente para que el próximo token traiga el grupo correcto.
"No se pudo cargar la lista" en Candidatos / Vacantes / Matches
Error de red intermitente o backend en mantenimiento. Hacé refresh (F5). Si persiste, contactá al equipo técnico.
Un candidato aparece como INCOMPLETO_REVISION
La IA no pudo extraer DNI, email o experiencia. Abrir el detalle, hacer clic en Editar, completar manualmente y guardar. El status pasa a ACTIVO.
El matching no encuentra coincidencias para una vacante
- Confirmar que la vacante está Activa.
- Revisar que el umbral en Configuración no esté demasiado alto.
- Esperar a la próxima corrida horaria (o pedirle a un admin que la dispare manualmente).
Perdí el segundo factor (TOTP)
Avisale a un admin. Va a Configuración → Usuarios → tu usuario → Reset MFA. En el próximo login, Cognito te muestra de nuevo el QR.
Recibo el mismo candidato dos veces
No debería pasar — el sistema deduplica por DNI, email y teléfono. Si ves duplicados reales, es probable que los datos del candidato sean distintos en cada postulación (ej. DNI vacío + email distinto). Reportalo al equipo técnico para revisar reglas de dedup.