Solo los roles
PSICOLOGO y ADMIN pueden iniciar una aplicación asistida del cuestionario desde /cuestionario. Los estudiantes pueden autoaplicarlo mediante su tokenEncuesta en /tamizaje/[token].Flujo del tamizaje
Seleccionar al estudiante
En
/cuestionario, la tabla muestra todos los estudiantes con su semáforo actual y fecha del último tamizaje. Hacer clic en un estudiante o usar el botón de acción abre la aplicación del cuestionario en /cuestionario/[estudianteId].Responder los 188 reactivos del SENA
El cuestionario SENA consta de 188 reactivos con escala Likert de 5 puntos:
Todos los reactivos deben responderse antes de enviar. El sistema valida que no quede ninguno sin contestar y que los valores estén en el rango 1–5.
| Valor | Etiqueta |
|---|---|
| 1 | Nunca o casi nunca |
| 2 | Pocas veces |
| 3 | Algunas veces |
| 4 | Muchas veces |
| 5 | Siempre o casi siempre |
Cálculo local de puntuaciones T
Al enviar, el servidor calcula las 31 escalas a partir de las respuestas brutas usando el módulo
lib/sena/scoring. El resultado incluye puntuaciones directas (pd) y T (pt) para cada escala, así como la detección de ítems críticos.Clasificación ML
El servidor envía las puntuaciones T al endpoint
POST /api/v1/clasificar del servicio ML. Si la API responde en menos de 5 segundos, el resultado ML reemplaza al del scoring local. Si la API no está disponible, se usa el resultado del scoring local como respaldo transparente (sin error visible al usuario).Las 31 escalas del SENA
Las escalas se organizan en siete grupos. Todas las puntuaciones son de tipo T (media 50, desviación estándar 10).- Control
- Índices globales
- Problemas interiorizados
- Problemas exteriorizados
- Otros / Contextual / Vulnerab.
| Código | Nombre completo | Descripción |
|---|---|---|
inc | Inconsistencia | Detecta patrones de respuesta contradictorios |
neg | Impresión negativa | Tendencia a exagerar problemas |
pos | Impresión positiva | Tendencia a minimizar problemas |
inc sugiere que el cuestionario debe repetirse. Un neg alto no invalida el resultado pero se clasifica como IMPRESION_NEGATIVA. Un pos alto genera IMPRESION_POSITIVA.Los 5 tipos de caso
El modelo ML clasifica cada tamizaje en uno de cinco tipos de caso:| Tipo de caso | Semáforo | Descripción | Acción recomendada |
|---|---|---|---|
SIN_RIESGO | VERDE | Instrumento fiable, sin indicadores de riesgo | Seguimiento periódico normal |
INCONSISTENCIA | AMARILLO | Patrón de respuesta incoherente (inc elevado) | Solicitar repetición del cuestionario |
IMPRESION_POSITIVA | AMARILLO | Sesgo de minimización (pos elevado) | Revisión en entrevista con psicólogo/a |
IMPRESION_NEGATIVA | ROJO | Sesgo de exageración (neg elevado) con índices altos | Atención prioritaria independientemente del sesgo |
CON_RIESGO | ROJO_URGENTE | Instrumento fiable con riesgo confirmado | Atención inmediata en persona |
Ítems críticos
El SENA incluye 25 ítems críticos que evalúan conductas de alto riesgo (ideación suicida, autolesión, experiencias traumáticas, psicosis, etc.). Un ítem se considera crítico cuando la respuesta del estudiante es ≥ 3 (Algunas veces, Muchas veces o Siempre o casi siempre).
Cada ítem crítico activado se almacena en el campo itemsCriticos del tamizaje con la siguiente estructura:
Categorías de ítems críticos
| Categoría | Ejemplo de ítem |
|---|---|
| Riesgo de autolesión | ”Quiero morirme” (ítem 124), “Pienso que mi vida no tiene sentido” (ítem 141) |
| Pérdida de control | ”Siento que voy a perder el control” (ítem 76) |
| Alteraciones del pensamiento | ”Creo que otras personas pueden leer mis pensamientos” (ítem 119) |
| Estresores traumáticos | ”Me han pasado cosas horribles” (ítem 86) |
| Petición de ayuda | ”Hay cosas que van mal y necesitaría ayuda” (ítem 118) |
| Riesgos familiares | ”Mis padres me pegan” (ítem 19) |
| Acoso escolar | ”Me amenazan en el instituto” (ítem 163) |
| Falta de apoyo social | ”Me siento solo” (ítem 137) |
| Imagen corporal | ”Creo que mi cuerpo es horrible” (ítem 53) |
| Culpa | ”Me siento culpable” (ítem 75) |
Integración con el modelo ML
El servidor envía la siguiente carga útil al endpointPOST /api/v1/clasificar:
AbortSignal.timeout(5000)), el sistema usa el resultado del scoring local sin interrumpir el flujo.