# 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%.*
