# Reporte de Proyecto — SGETECBA
**Sistema de Gestión Educativa — Tecnológico Boliviano Alemán (TECBa)**

---

## Datos del Proyecto

| Campo | Detalle |
|---|---|
| **Proyecto** | SGETECBA — Sistema de Gestión Educativa |
| **Institución** | Tecnológico Boliviano Alemán (TECBa) |
| **Desarrollador** | Mirko Lazarte |
| **Project Manager / QA** | Santiago |
| **Repositorio** | https://github.com/ZIS-TECBA/sgetecba |
| **Branch de trabajo** | `features/MirkoALS` |
| **Período** | Mayo — Junio 2026 |
| **Stack** | FastAPI · PostgreSQL · React · TypeScript · Vite · TailwindCSS |

---

## Contexto

El proyecto SGETECBA comenzó como un desarrollo grupal. En una segunda etapa, Mirko Lazarte asumió el desarrollo de forma individual, con Santiago como Project Manager y encargado de QA. Esta etapa implicó retomar el código base existente, corregir bugs críticos heredados, ampliar funcionalidades y rediseñar el sistema de interfaces.

---

## Trabajo Realizado

### 1. Backend — Corrección de Bugs y Seguridad

#### Autenticación
- **Bug crítico corregido:** `auth_service.py` utilizaba un inspector de columnas dinámico (`_resolve_auth_mapping` + `@lru_cache`) que generaba referencias incorrectas al schema de la base de datos. Se reemplazó por SQL explícito con referencias directas al schema `sgetecba`, apuntando correctamente a las columnas `hash_contrasena` y `nombre_completo` de la tabla `sgetecba.usuarios`.
- **Mejora de seguridad:** Migración de la librería `jose` a `PyJWT` en `auditoria.py` para el manejo de tokens JWT, eliminando una dependencia desactualizada con vulnerabilidades conocidas.

#### Endpoints de Reportes (`reportes.py`)
- Corrección de 4 bugs en la generación de reportes.
- Nuevo endpoint para impresión de **planilla PDF** de asistencia.
- Mejora en el control y generación de reportes institucionales.

#### Importación de Datos (`importacion_service.py`)
- Corregido el constraint de conflicto a `ux_asignaturas_codigo` en el proceso de importación desde Excel.
- Añadidos campos `NOT NULL` faltantes en el `INSERT` de `ofertas_asignaturas` que causaban fallos silenciosos.

#### Rendimiento
- Revisión y optimización de consultas en los servicios principales.
- Eliminación de llamadas redundantes y uso de caché innecesario en rutas críticas.

---

### 2. Base de Datos

- Corregido el valor `'Manana'` → `'Mañana'` en la tabla de turnos mediante `UPDATE` directo.
- Verificación y corrección de constraints en tablas de `ofertas_asignaturas` e `inscripciones`.
- Cadena de datos validada end-to-end: **Carrera → Oferta → Inscripción → Sesión → Detalle de Asistencia**, funcionando con datos reales en 5 carreras activas.

---

### 3. Frontend — Rediseño de Interfaces

#### Nuevas interfaces y roles
Se rediseñaron completamente las interfaces existentes y se crearon nuevas vistas para los roles:

| Rol | Interfaces |
|---|---|
| **Administrador** | Dashboard, Estudiantes, Carreras, Asignaturas, Matriculaciones, Asistencias |
| **Secretaría Académica** | Dashboard, Estudiantes, Matriculaciones, Asistencias |
| **Docente** | Dashboard, Mi Horario |

#### Design System aplicado
Se estableció un sistema de diseño consistente en todas las interfaces:
- **Fuente:** Inter (Google Fonts)
- **Color de acento:** `#dc661f` (naranja TECBa)
- **Fondos oscuros:** `#0f172a` / `#1e293b`
- **Fondos claros:** `#f8fafc` / `#ffffff`
- Botones con `box-shadow` naranja, inputs con focus ring, badges de rol por color

#### Componentes desarrollados

**`Sidebar.tsx`**
- Rediseño completo: fondo profundo `#07111f`, glows decorativos radiales
- Item activo con borde izquierdo `3px solid #dc661f` + ícono naranja sólido con glow
- Tarjeta de usuario en el footer con avatar, nombre, rol e indicador de sesión activa
- Fix crítico: sidebar ahora llega al fondo en páginas con contenido largo (`height: 100%` + `align-self: stretch`)
- Logo institucional a 120px con `drop-shadow` naranja

**Layouts (`AdminLayout`, `DocenteLayout`, `SecretariaLayout`)**
- Header oscuro unificado con avatar, dot verde "Sesión activa", badge de rol por color
- Hamburger responsivo para móvil con overlay y sidebar deslizable
- **Refactor:** CSS extraído de los 3 layouts a un archivo compartido `assets/css/layouts.css` con prefijo de clases `lyt-`, eliminando duplicación de ~200 líneas por archivo

**`LoginPage`**
- Diseño de dos paneles: panel izquierdo oscuro con branding + panel derecho blanco con formulario
- Inputs con estado `filled` (borde naranja al tener contenido)
- **Refactor:** CSS extraído a `assets/css/login.css`

**`DataTable.tsx`** *(componente reutilizable)*
- Búsqueda con debounce (350ms)
- Ordenamiento por columnas con íconos direccionales
- Paginación con navegación y elipsis
- Aplicado en: Carreras, Asignaturas, Asistencias, Matriculaciones, Períodos Académicos

#### Correcciones de bugs frontend

- **`AsistenciasSecretaria.tsx`:** validación de estado de sesión, aislamiento de errores en loop `PUT`, corrección de `colorEstado()` para valores reales de DB (`FALTA`, `RETRASO`, `LICENCIA`, `ABANDONO`)
- **`Matriculaciones`:** columna `nivel_texto` renombrada a "Semestre / Módulo", añadidas columnas turno y estado con badges de color; schema `MatriculacionRead` actualizado con `turno_nombre` y `estado_inscripcion`
- **`RealtimeProvider.tsx`:** fix de bucle infinito SSE — `subscribe` envuelta en `useCallback([], [])` para referencia estable entre renders
- **`useRealtimeSubscription.ts`:** `subscribe` removido del array de dependencias del `useEffect`
- **`client.ts`:** 4 bugs corregidos en el cliente HTTP
- **`AppRouter.tsx`:** 3 bugs corregidos en el enrutador

---

## Estructura del Repositorio

```
sgetecba/
├── backend/
│   ├── app/
│   │   ├── api/v1/routes/      # Endpoints FastAPI
│   │   ├── core/               # Configuración, seguridad
│   │   ├── crud/               # Operaciones DB
│   │   ├── models/             # Modelos SQLAlchemy
│   │   ├── schemas/            # Schemas Pydantic
│   │   └── services/           # Lógica de negocio
│   └── alembic/                # Migraciones
└── frontend/
    └── src/
        ├── api/                # Cliente HTTP
        ├── assets/css/         # Estilos compartidos (layouts.css, login.css)
        ├── auth/               # Roles y permisos
        ├── components/         # Componentes reutilizables (Sidebar, DataTable)
        ├── hooks/              # AuthProvider, hooks custom
        ├── layouts/            # AdminLayout, DocenteLayout, SecretariaLayout
        ├── pages/              # Vistas por módulo
        ├── realtime/           # SSE provider
        └── routes/             # AppRouter
```

---

## Estado Actual

| Módulo | Rol | Estado |
|---|---|---|
| Autenticación y roles | Todos | ✅ Desarrollado — en QA |
| Layouts y navegación | Todos | ✅ Desarrollado — en QA |
| Importación desde Excel | Administrador | ✅ Desarrollado — en QA |
| Carreras / Asignaturas | Administrador | ✅ Desarrollado — en QA |
| Matriculaciones | Administrador / Secretaría | ✅ Desarrollado — en QA |
| Asistencias | Administrador / Secretaría | ✅ Desarrollado — en QA |
| Reportes y planillas PDF | Administrador / Secretaría | ✅ Desarrollado — en QA |
| Dashboard con stats | Administrador / Secretaría | ✅ Desarrollado — en QA |
| Panel Docente | Docente | ✅ Desarrollado — en QA |
| Panel Decanos | Dirección / Gerencia | 🔄 En desarrollo |

> **Nota:** Los módulos marcados como "en QA" se encuentran desarrollados y funcionales. Están siendo revisados por Santiago (QA) antes de su aprobación final.

---

## Próximos pasos

- Panel Decanos (Dirección / Gerencia): vistas de indicadores institucionales, seguimiento de carreras y reportes ejecutivos
- Aprobación QA de módulos existentes
- `StatCard.tsx` — tarjetas de estadísticas para el Dashboard
- `PageHeader.tsx` — componente de encabezado reutilizable

---

*Reporte generado: Junio 2026*
