Modernización, desacoplamiento de cargas analíticas en 4 capas y modelos predictivos sobre el ecosistema SOFI para la empresa APM Inversiones S.A.C.
Replicación R=3 en 3 DataNodes con tolerancia a fallas de disco.
Staging desacoplado de eventos Discord sin saturar PostgreSQL.
Inferencia de deserción en tiempo real y dashboards ejecutivos.
Modelo formativo 100% remoto que audita asistencia, telemetría Git y evaluaciones modulares.
Consultas analíticas pesadas sobre 7,111 filas degradan inserciones de marcación en PostgreSQL.
Auditar a un practicante exige cruzar 5 tablas relacionales con latencias críticas en producción.
Picos sincrónicos de eventos desde Discord (salas a las 9:00 AM) saturan la base sin colas.
Maestro de practicantes, convenios, sedes, asistencias y solicitudes de recuperación.
Eventos de check-in/out, horas en salas de voz (9:00 AM) y alertas de inactividad.
Horas efectivas de estudio por módulo, estados de avance (planned/finished) y notas.
Volumen de commits, diffs de líneas agregadas/eliminadas, ramas activas y PRs.
Validación de DNI único, verificación de nombres oficiales y saneamiento de duplicados.
Calendario oficial de días no laborables para evitar penalizaciones erróneas en horas.
hdfs:///data/sofi/Clasificación binaria supervisada (Random Forest) para predecir si el practicante finalizará con deuda crítica de horas.
| Nombre del Campo | Tipo | Descripción Corta | Origen de Datos |
|---|---|---|---|
| riesgo_incumplimiento | Booleano | Target (Y): 1 = Deuda crítica, 0 = Cumple | Calculada (Y) |
| total_horas_adeudadas | Float | Saldo neto acumulado por inasistencias o tardanzas (hrs) | PostgreSQL (asistencias) |
| cantidad_faltas_injustificadas | Integer | Inasistencias no justificadas en el periodo analizado | Bot Discord / PostgreSQL |
| tipo_convenio | Varchar | Modalidad (Preprofesional 30h / Profesional 48h) | PostgreSQL (convenios) |
| dias_restantes_convenio | Integer | Días restantes de vigencia contractual del practicante | PostgreSQL (convenios) |
Clasificación binaria supervisada (Regresión Logística) para alertar parálisis formativa antes de la deserción.
| Nombre del Campo | Tipo | Descripción Corta | Origen de Datos |
|---|---|---|---|
| estado_bloqueado | Booleano | Target (Y): 1 = Atascado en ruta, 0 = Ritmo normal | Calculada (Y) |
| tiempo_modulo_horas | Float | Horas dedicadas en el módulo formativo actual | Telemetría LMS |
| dias_sin_commits | Integer | Días consecutivos transcurridos sin commits en Git | API GitHub (commits) |
| curso_tecnologico | Varchar | Tecnología formativa (SpringBoot, JS, React, Git) | PostgreSQL (cursos) |
| intentos_fallidos | Integer | Evaluaciones técnicas desaprobadas en rúbricas | Rúbricas Mentor SOFI |
Consolidado mensual de asistencia, horas requeridas, tardanzas y pasivo formativo acumulado.
| Nombre del Campo | Tipo | Descripción Corta | Origen de Datos |
|---|---|---|---|
| practicante_id | Integer | Identificador único del practicante en SOFI | PostgreSQL (usuarios) |
| periodo_mes | Varchar | Mes y año del balance analizado (ej. "2026-08") | PostgreSQL (asistencias) |
| horas_requeridas | Float | Total horas a cumplir según convenio mensual | PostgreSQL (convenios) |
| horas_asistidas_reales | Float | Horas netas registradas en conexión y formación | Bot Discord / Asistencias |
| total_tardanzas | Integer | Registros con ingreso posterior a la tolerancia | PostgreSQL (asistencias) |
| total_inasistencias | Integer | Días laborables sin registro ni justificación | PostgreSQL (asistencias) |
| horas_recuperadas | Float | Horas compensadas en turnos extraordinarios | PostgreSQL (recuperaciones) |
| balance_horas | Float | Saldo neto (reales + recuperadas - requeridas) | Cálculo OLAP |
| estado_laboral | Varchar | Cumplimiento formativo (Regular / Alerta / Observado) | Regla Negocio |
Cruce multidimensional de avance curricular, calificaciones de mentores y telemetría de commits en Git.
| Nombre del Campo | Tipo | Descripción Corta | Origen de Datos |
|---|---|---|---|
| practicante_id | Integer | Identificador único del practicante evaluado | PostgreSQL (usuarios) |
| curso_nombre | Varchar | Denominación de la ruta técnica (SpringBoot, Git) | LMS / PostgreSQL (cursos) |
| modulo_tema_actual | Varchar | Módulo formativo en desarrollo actualmente | LMS / PostgreSQL (modulos) |
| estado_progreso | Varchar | Situación curricular (finished, in_progress, planned) | Telemetría LMS |
| nota_evaluacion_mentor | Float | Calificación otorgada en rúbrica técnica (0 - 20) | Evaluaciones Mentor SOFI |
| tuvo_reevaluacion | Booleano | Indica si requirió segundo intento tras reprobación | Rúbricas Mentor SOFI |
| commits_totales | Integer | Cantidad de commits registrados en el módulo | API GitHub (telemetría) |
| lineas_codigo_agregadas | Integer | Volumen neto de líneas añadidas en repositorios | API GitHub (telemetría) |
| pull_requests_aprobados | Integer | PRs revisados, aprobados y fusionados | API GitHub (telemetría) |
| tiempo_estudio_horas | Float | Horas invertidas en plataforma formativa | Telemetría LMS |
| nivel_dominio_tecnico | Varchar | Segmentación de competencia (Básico, Intermedio, Avanzado) | Clasificación OLAP |
Filtra perfiles de software activos (Backend y Frontend).
Descompone el arreglo embebido de cursos y módulos.
Agrupa por tecnología y computa medias, atascados y notas.
Calcula la métrica porcentual de tasa de atascamiento.
Ordena descendentemente por mayor fricción y menor nota.
JPA/Hibernate y Security JWT, motivando una reestructuración de la ruta formativa.
Al identificar que SpringBoot genera 47.5% de atascamiento, APM Inversiones dividió el curso en 3 micro-retos asistidos con Pair Programming, reduciendo la fricción al 18% en 4 semanas.
postgres_db (:5432)mongodb_sofi (:27017)namenode + 3 datanodessofi-presentation (:80 / :3000)APM Inversiones S.A.C. — Plataforma Web de Operaciones y Formación SOFI