# TAREAS DE REMEDIACIÓN PARA KIMI 🛠️ *(Math2 Platform)* Este documento contiene la lista detallada de tareas que resultan del análisis profundo del código fuente (TypeScript type check y Unit/Integration tests). --- ## 🛑 BUGS CRÍTICOS (Prioridad Máxima - Resolver errores de Tests y Build) ### 1. Corregir Prisma Schema (`@updatedAt` faltante) - **El Problema:** El 80% de los errores de compilación de TypeScript (TS) y los 9 tests que fallan en el backend se deben a un problema crítico en `/backend/prisma/schema.prisma`. Múltiples modelos (`Progress`, `Notification`, `Achievement`, `UserAchievement`, `Exercise`, `modules`, `processed_pdfs`, `topics`) tienen un campo `updatedAt DateTime` pero carecen de la directiva `@updatedAt`. Esto fuerza a pasar este timestamp manualmente en cada `.create()` y `.upsert()`, lo que el código actual no hace, causando decenas de errores de type check y tests fallidos en `exercise.service.ts` y otros. - **La Solución (Backend):** - Agregar `@updatedAt` a todos los `updatedAt DateTime` en el schema. - Opcionalmente correr una migración y `npx prisma generate`. ### 2. Arreglar Nombres Inconsistentes en Consultas Prisma - **El Problema:** Muchas consultas `.include`, `.where` y lógicas usan nombres en singular para relaciones que Prisma cambió a plural o *snake_case*. - **La Solución (Backend):** - **`notification.service.ts`**: En `Notification.create()`, usar `user_id` en vez de `userId`. - **`exercise.repository.ts`, `progress.service.ts`, `badge.awarder.ts`, `position.calculator.ts`**: Cambiar objetos `include: { exercise: true }` a `include: { exercises: true }`. Igual para `module` -> `modules` y `topic` -> `topics`. Y en queries buscar los de plural. - **`pdf-processor.worker.ts`**: Variables como `fileName` deben ser `file_name` en el payload de Prisma. ### 3. Rutas y Tipos Rotos del Repositorio - **El Problema:** `/backend/src/repositories/exercise.repository.ts` está buscando importar desde `../interfaces/exercise.repository.interface` y `../../core/types` que ya no existen. - **La Solución:** Limpiar y actualizar la ruta de estas importaciones hacia `shared/types/` o `core/` dependiendo de la nueva estructura tras las limpiezas previas. --- ## ✨ MEJORAS DE CÓDIGO (Nice to Have & Optimizaciones) ### 1. Limpieza de Restricciones Estrictas de TypeScript (`exactOptionalPropertyTypes: true`) - **Problema:** En `notification.service.ts` y en el cliente de Telegram, TypeScript se queja (`Types of property 'errorMessage' are incompatible`) de que estamos pasando un tipo estricto `= undefined` mientras el tipado de Prisma no lo permite. - **Solución:** Omitir la llave completamente (destructuring, `omit` o validaciones condicionales sin pasar `undefined`). ### 2. Correcciones de Tipado JSON vs Array - **Problema:** En `system-config.service.ts`, existen warnings donde se trata un `JsonValue` genérico devuelto por Prisma (`changeHistory`) asumiendo que es un `ChangeRecord[]`. - **Solución:** Agregar Type Guards o una aserción `as unknown as ChangeRecord[]` para suprimir el error, o parsear / limpiar de forma segura el dato de la DB. ### 3. Eliminar "Dead Code" (Código Muerto) - **Problema:** El Linter muestra código obsoleto. Cerca de 15 variables "is declared but never used". - **Solución:** Limpiar en `notification.service.ts` (ej: `generateExerciseCompletionMessage`), en `progress.service.ts` (ej: `ProgressMetrics`), en `telegram/templates/` y variables en los calculadores de ranking. ### 4. Corrección de Parámetros de Fechas - **Problema:** En `streak.calculator.ts`, enviar `undefined` como parámetro a `new Date()` y operaciones que devuelven `Date | undefined` rompe firmas que esperan `Date | null`. - **Solución:** Cambiar el return de estas funciones de uniones con `undefined` a `null`, o normalizar siempre a una instancia `Date()`. --- ## 🚀 PENDIENTES FUNCIONALES & PRODUCCIÓN ### 1. Poblar Base de Datos - `seed.ts` (Para Evitar Dashboard Vacío) - Como se documenta en el antiguo `glm8-empty-dashboard.md`, si no existen Módulos en el sistema, el usuario se topa con la pantalla "Felicidades has completado todo". - **Acción:** Asegúrate que `backend/prisma/seed.ts` inserta por defecto 3 módulos (`FUNDAMENTOS`, `SISTEMAS`, etc.), múltiples temas y al menos cinco ejercicios por módulo con `isPublished: true`. ### 2. Sincronización Real de Racha en el Dashboard - En el frontend (`/frontend/src/app/(dashboard)/dashboard/page.tsx`), las estadísticas de "Racha Actual" se inicializan en estado inicial, ignorando la response verdadera de `/api/progress`. - Mapear correctamente el atributo `currentStreak` y demás stats raiz sacando provecho a la response global. --- *¡Hecho! Éxitos Kimi. Lee esto de arriba a abajo y el proyecto volará validando 100%.*