# Informe Técnico de Estabilización — SGETECBA

## 1. Objetivo de esta fase

Esta fase no abordó todavía correcciones funcionales de prioridad `P0`.

El objetivo fue dejar una **base técnica estable y verificable** para poder entrar después a:

- seguridad de autenticación
- secretos y variables de entorno
- autorización por roles
- protección de rutas
- flujo de importación
- alineación backend/base de datos

La meta concreta de esta pasada fue:

1. habilitar pruebas mínimas en backend
2. corregir el fallo que impedía ejecutar Alembic
3. estabilizar el build del frontend

## 2. Cambios realizados

### Backend

Se agregó `pytest` a las dependencias del backend en:

- [backend/requirements.txt](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/backend/requirements.txt:1)

Se corrigió el paquete de modelos para que exporte únicamente entidades reales y actuales, eliminando imports obsoletos que rompían Alembic:

- [backend/app/models/__init__.py](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/backend/app/models/__init__.py:1)

Se creó una estructura mínima de pruebas backend:

- [backend/tests/conftest.py](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/backend/tests/conftest.py:1)
- [backend/tests/test_security_helpers.py](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/backend/tests/test_security_helpers.py:1)
- [backend/tests/test_models_package.py](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/backend/tests/test_models_package.py:1)

También se dejó creada la carpeta base de versiones de Alembic para formalizar la trazabilidad futura:

- [backend/alembic/versions/.gitkeep](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/backend/alembic/versions/.gitkeep:1)

### Frontend

Se corrigió el error de compilación en `AsignaturasPage`.

La UI estaba intentando enviar `nombre_normalizado` desde un formulario cuyo estado sólo contenía:

- `codigo`
- `nombre`

Se ajustó el componente para no duplicar una regla que el backend ya resuelve, dejando documentado en el código que la normalización del nombre pertenece al backend:

- [frontend/src/pages/Asignaturas.tsx](/abs/path/C:/Users/Usuario/Documents/ZIS%20TECBA/PROYECTOS/sgetecba/frontend/src/pages/Asignaturas.tsx:75)

## 3. Justificación técnica

### 3.1 Habilitación de pruebas mínimas

No era seguro entrar a cambios de negocio o seguridad sin una suite mínima ejecutable.

Por eso se agregó una base de pruebas que valida:

- generación y validación de hash bcrypt
- roundtrip de tokens JWT
- consistencia del paquete `app.models`, que Alembic necesita para resolver `metadata`

### 3.2 Corrección de Alembic

Alembic fallaba por un `ImportError` debido a referencias obsoletas en `backend/app/models/__init__.py`.

Esto impedía:

- verificar estado de migraciones
- usar `Base.metadata`
- construir una base reproducible para cambios de esquema

Se corrigió el paquete para exportar las entidades reales presentes en `entities.py`.

### 3.3 Estabilización del frontend

El build fallaba por un error de TypeScript en `AsignaturasPage`.

En lugar de agregar un parche rápido al estado local del formulario, se mantuvo una sola fuente de verdad:

- la UI captura datos editables
- el backend calcula y persiste `nombre_normalizado`

Esto reduce duplicación y evita desalineación entre frontend y backend.

## 4. Pruebas ejecutadas

### Backend

```bash
cd backend
.\.venv\Scripts\python.exe -m pytest
```

Resultado:

```text
4 passed
```

### Alembic

```bash
cd backend
.\.venv\Scripts\python.exe -m alembic current
.\.venv\Scripts\python.exe -m alembic history
```

Resultado:

- `alembic current`: ya no falla por `ImportError`
- `alembic history`: ejecuta, pero todavía no muestra revisiones reales porque aún no existe historial de migraciones implementado

### Frontend

```bash
cd frontend
npm run build
```

Resultado:

```text
vite build completado correctamente
```

## 5. Estado actual después de esta fase

Después de esta estabilización:

- el backend ya puede ejecutar pruebas mínimas
- Alembic ya no está roto por imports inválidos
- el frontend vuelve a compilar

Esto deja el proyecto en condiciones razonables para iniciar la siguiente fase:

1. autenticación segura
2. secretos y JWT
3. protección de rutas y roles
4. importación UI
5. correcciones de encoding

## 6. Limitaciones que siguen vigentes

Esta fase **no corrige todavía**:

- aceptación de contraseñas temporales o texto plano en login
- secretos comprometidos en archivos versionados
- protección de rutas sensibles
- validación completa de roles
- flujo de importación desde UI
- problemas de encoding/IUX
- historial real de migraciones Alembic

Además, el repositorio sigue teniendo cambios previos no relacionados y artefactos generados en el workspace, por lo que antes de una entrega final conviene limpiar o separar ese estado.

## 7. Conclusión

La fase de estabilización cumplió su objetivo.

Se dejó un entorno seguro de cambio suficientemente estable para continuar con la corrección de hallazgos críticos sin trabajar a ciegas.

### Resultado de esta fase

**Cambio aprobado técnicamente con evidencia de pruebas.**
