# SGETECBA — Estado del proyecto 12/06/2026

**Stack:** FastAPI + PostgreSQL 18 (schema: `sgetecba`) + React + TypeScript + Vite + TailwindCSS  
**Branch:** `features/MirkoALS`  
**Repo:** https://github.com/ZIS-TECBA/sgetecba

---

## Lo que se hizo en esta sesión

### 1. Identidad visual en todos los reportes PDF

**Problema:** Los PDFs generados por el sistema (planillas, historial, malla, padrón, matriculaciones) no tenían logo institucional, usaban colores inconsistentes (distintos azules y naranjas según el archivo) y no mostraban un resumen con los datos clave del reporte al inicio.

**Solución implementada:**

Se creó un módulo utilitario compartido `backend/app/services/pdf_utils.py` con:

- **Color principal unificado:** `#f25a23` (naranja institucional) en todos los encabezados y tablas.
- **Encabezado institucional de dos niveles** (`encabezado_institucional`):
  - Fila superior: fondo crema (`#fff5f0`) con borde naranja — logo `LogoNegro.png` a la izquierda, nombre "SGETECBA / Sistema de Gestión Estudiantil TECBA" al centro, fecha de generación a la derecha.
  - Banda naranja inferior con el título del reporte en blanco centrado.
  - El logo se escala respetando su proporción real (logo horizontal 4:1).
- **Caja de resumen** (`caja_resumen`): grilla de 4 columnas con los campos clave del reporte (materia, docente, período, totales, filtros aplicados, etc.), fondo `#fde8e0`, borde naranja.

**Archivos nuevos:**
- `backend/app/services/pdf_utils.py` — módulo reutilizable con constantes de color, logo y funciones de layout.

**Archivos modificados:**

| Archivo | Reporte afectado | Resumen muestra |
|---------|-----------------|-----------------|
| `backend/app/services/planilla_pdf.py` | Planilla de asistencia (sesión) | Materia, Carrera, Docente, Período, Fecha, Horario, Turno, Estado |
| `backend/app/services/asistencias_pdf.py` | Informe de asistencias | Desde, Hasta, Filtro estudiante, Total registros |
| `backend/app/services/planilla_libro.py` | Lista de asistencia / Historial | Asignatura, Código, Carrera, Período, Docente, Turno, Nivel, Total inscritos |
| `backend/app/api/v1/routes/reportes.py` | Malla curricular | Carrera, Código, Modalidad, Duración, Período activo, Total materias |
| `backend/app/api/v1/routes/reportes.py` | Reporte de matriculaciones | Total inscripciones, Búsqueda, Desde, Hasta |
| `backend/app/api/v1/routes/reportes.py` | Padrón de estudiantes | Total estudiantes, Búsqueda, Estado (activos/inactivos), Fecha |

**Imagen:**  
- Logo: `frontend/src/img/LogoNegro.png` (907 × 228 px, proporción 4:1)  
- Se referencia desde el backend con ruta relativa al repositorio (`../frontend/src/img/LogoNegro.png`).  
- Si el archivo no existe en un entorno, el encabezado se adapta sin logo sin romper la generación del PDF.

---

### 2. Búsqueda con combobox en Historial (Secretaría Académica)

**Problema:** El tab **Historial** de `AsistenciasSecretaria.tsx` usaba dos `<select>` nativos para filtrar por Carrera y Materia — sin posibilidad de escribir para buscar, sin chip de selección visible y con UX inconsistente respecto al tab **Registro** que ya contaba con combobox buscables.

**Solución implementada:**

Se reemplazaron los dos `<select>` por el mismo patrón de combobox con búsqueda que usa el tab Registro:

- **Carrera:** input de texto con dropdown filtrable en tiempo real. Al seleccionar muestra un chip naranja con el nombre y un ✕ para limpiar. Incluye opción "Todas las carreras".
- **Materia:** input de texto filtrable (deshabilitado hasta elegir carrera, con mensaje indicativo). Muestra nivel y turno en cada opción. Al seleccionar muestra chip + ✕. Incluye opción "Todas las materias". Muestra spinner mientras cargan las ofertas.
- Limpiar Carrera también limpia Materia automáticamente.
- Los filtros de fecha (Desde / Hasta) y el buscador de estudiante por nombre/CI se mantienen sin cambios.

**Archivo modificado:**
- `frontend/src/pages/secretaria/AsistenciasSecretaria.tsx` — función `TabHistorial`

**Estado local añadido:** `carreraQuery`, `carreraOpen`, `materiaQuery`, `materiaOpen`, `loadingOfertas`.

---

## Archivos del commit

```
backend/app/services/pdf_utils.py          (nuevo)
backend/app/services/planilla_pdf.py       (modificado)
backend/app/services/asistencias_pdf.py    (modificado)
backend/app/services/planilla_libro.py     (modificado)
backend/app/api/v1/routes/reportes.py      (modificado)
frontend/src/img/LogoNegro.png             (nuevo — asset)
frontend/src/pages/secretaria/AsistenciasSecretaria.tsx  (modificado)
docs/MD Desarrollo/SGETECBA_Estado_12062026.md           (este archivo)
```
