# REVISION FASE 1.1

- Estado: **OBSERVADO**
- Decision: **No habilitar FASE 2 ni INSERT productivo**

## Resumen ejecutivo

La FASE 1.1 atacó exclusivamente corrección, depuración y revalidación previa a una futura carga final. Se generó una matriz formal de conflictos altos, se separaron reglas automáticas de reglas con revisión obligatoria, se recalcularon los 394 huérfanos de matriculación y las 38 asistencias huérfanas originales, y se dejó un nuevo script SQL de corrección/validación sin inserciones productivas.

El resultado sigue en `OBSERVADO` por una razón simple: los conflictos de identidad y relación no son resolubles con evidencia suficientemente fuerte desde los Excel actuales. Solo 4 de los 54 campos obligatorios vacíos tienen propuesta de completado automática y trazable. Todo lo demás requiere decisión humana o corrección en fuente.

## Clasificación de bloqueos

### 1. Bloqueos de identidad

- `MISMO_CI_DISTINTO_NOMBRE`: 5 casos, 10 filas implicadas
- `MISMO_CODIGO_DISTINTO_NOMBRE`: 2 casos, 4 filas implicadas
- `MISMO_CODIGO_DISTINTO_CI`: incluido dentro de los mismos 2 códigos conflictivos, sin evidencia segura para automatizar

### 2. Bloqueos de datos obligatorios

- 54 conflictos de campo obligatorio vacío
- 53 filas de estudiantes afectadas
- 4 conflictos auto-resolubles con propuesta única y trazable
- 50 conflictos de campo siguen pendientes

### 3. Bloqueos de relación

- 394 matriculaciones huérfanas originales
- 38 asistencias huérfanas originales
- 0 matriculaciones resueltas automáticamente con confianza alta
- 0 asistencias resueltas automáticamente con confianza alta

### 4. Bloqueos de catálogo

- 13 códigos de asignatura con variantes de nombre
- períodos irregulares detectados principalmente como `1.0`, `2.0` y seriales de Excel usados donde debería existir período académico
- turnos ya quedan normalizables a `MANANA`, `TARDE`, `NOCHE`
- multi-carrera y multi-modalidad no se tratan como error; se conservan como información gerencial

### 5. Bloqueos técnicos

- El backend sigue desacoplado del schema consolidado en español
- La app actual continúa consultando `matriculaciones`, `ofertas_asignatura` y `asistencias`
- El schema correcto usa `inscripciones`, `ofertas_asignaturas`, `detalle_asistencia` y `sesiones_asistencia`

## Reglas de resolución

### A. Resolución automática permitida

- Trim de espacios, colapso de doble espacio y mayúsculas para comparación
- Remoción de tildes solo para matching
- Conversión de CI en notación científica a texto
- Eliminación de sufijo `.0` en CI y períodos como `1.0`, `2.0`
- Normalización de género a `M`, `F`, `OTRO`, `SIN_DATO`
- Normalización de turnos a `MANANA`, `TARDE`, `NOCHE`
- Normalización de estados evidentes a catálogo
- Completado de dato obligatorio vacío solo si existe un único valor candidato consistente para la misma identidad

### B. Revisión manual obligatoria

- Mismo CI con distinto nombre
- Mismo código con distinto nombre
- Mismo código con distinto CI
- Matriculación sin estudiante maestro
- Asistencia sin estudiante maestro
- Asistencia sin inscripción confiable
- Asignatura con mismo código y nombre diferente
- Período irregular sin patrón confiable
- Hoja `Usuarios` con contraseñas en texto plano o numéricas

## Matriz de corrección

- Archivo generado: `docs/sgetecba_matriz_correccion_conflictos_altos.csv`
- Total conflictos en matriz: **500**
- Total resolubles automáticamente: **4**
- Total con revisión manual: **496**

### Distribución por tipo

- `CAMPO_OBLIGATORIO_VACIO`: 54
- `MISMO_CI_DISTINTO_NOMBRE`: 10
- `MISMO_CODIGO_DISTINTO_NOMBRE`: 4
- `MATRICULACION_SIN_ESTUDIANTE`: 394
- `ASISTENCIA_SIN_ESTUDIANTE`: 38

### Casos auto-resolubles detectados

1. `MODULAR / Estudiantes / fila 284`
   - `ENF-26225`, CI `12998047`
   - campo: `ESTADO`
   - propuesta: `INSCRITO`
2. `MODULAR / Estudiantes / fila 304`
   - nombre: `AGUAYO PUENTE JESUS ENRIQUE`
   - campo: `COD_ESTUDIANTE`
   - propuesta: `ENF-26257`
3. `MODULAR / Estudiantes / fila 304`
   - campo: `ESTADO`
   - propuesta: `INSCRITO`
4. `MODULAR / Estudiantes / fila 348`
   - `ENF-25072`, CI `7863822`
   - campo: `ESTADO`
   - propuesta: `INSCRITO`

Nota: incluso estos 4 casos siguen dentro de una importación global `OBSERVADA`; no deben aplicarse en productivo sin registrar la aprobación humana correspondiente.

## Matriculaciones huérfanas

- Iniciales: **394**
- Resueltas automáticamente: **0**
- Pendientes: **394**

### Resultado técnico

No apareció ningún huérfano original que pudiera vincularse con confianza alta usando:

- código de estudiante único no conflictivo
- CI único no conflictivo
- nombre fuerte único con misma modalidad y carrera compatible

La conclusión es que las 394 matriculaciones requieren corrección de fuente o decisión manual de vinculación/exclusión.

## Asistencias huérfanas

- Iniciales: **38**
- Resueltas automáticamente: **0**
- Pendientes: **38**

### Resultado técnico

Ninguna de las 38 asistencias huérfanas originales pudo vincularse con un estudiante maestro confiable bajo reglas conservadoras. Por eso no se avanzó a evaluación de inscripción productiva para esas 38 filas.

## Catálogos normalizados y auxiliares

### Archivos auxiliares generados

- `docs/sgetecba_catalogo_variantes_asignaturas.csv`
- `docs/sgetecba_catalogo_periodos_irregulares.csv`

### Catálogo maestro propuesto

- `modalidades_academicas`
  - `ANUAL`
  - `SEMESTRAL`
  - `MODULAR`
- `turnos`
  - `MANANA`
  - `TARDE`
  - `NOCHE`
- `niveles_academicos`
  - `ANO 1`
  - `ANO 2`
  - `ANO 3`
  - `SEM 1`
  - `SEM 2`
  - `SEM 3`
  - `SEM 4`
  - `SEM 5`
  - `SEM 6`
- `estados_estudiante`
  - `INSCRITO`
  - `ACTIVO`
  - `INACTIVO`
  - `ABANDONO`
  - `PROGRAMADO`
- `estados_asistencia`
  - `PRESENTE`
  - `FALTA`
  - `RETRASO`
  - `LICENCIA`
  - `ABANDONO`
  - `INACTIVO`
  - `ACTIVO`

### Variantes de asignaturas

Se detectaron 13 códigos con nombres distintos. No se sobrescribieron automáticamente. La propuesta es:

- mantener una tabla de variantes para aprobación humana
- elegir `nombre_oficial_propuesto` por catálogo institucional
- poblar `asignaturas` y `ofertas_asignaturas` solo después de esa aprobación

### Períodos irregulares

Se detectaron dos tipos:

- auto-normalizables: `1.0 -> 1`, `2.0 -> 2`
- no confiables: seriales de Excel usados como período, por ejemplo `46023.0`, `46055.0`

Los seriales no deben mapearse automáticamente a `periodos_academicos`.

## Antes / después

### Conflictos altos iniciales

- campos obligatorios vacíos: 54
- mismo CI distinto nombre: 5 casos
- mismo código distinto nombre/CI: 2 casos
- matriculaciones huérfanas: 394
- asistencias huérfanas: 38

### Conflictos altos resueltos

- resueltos automáticamente con propuesta segura: 4
- resueltos manualmente: 0

### Conflictos altos pendientes

- pendientes totales en matriz: 496

Desglose:

- campos obligatorios pendientes: 50
- identidad pendiente: 14 filas implicadas
- matriculaciones huérfanas pendientes: 394
- asistencias huérfanas pendientes: 38

## Tabla de conflictos pendientes

La tabla operativa completa está en:

- `docs/sgetecba_matriz_correccion_conflictos_altos.csv`

Los pendientes críticos siguen concentrados en:

- `MISMO_CI_DISTINTO_NOMBRE`
- `MISMO_CODIGO_DISTINTO_NOMBRE`
- `MATRICULACION_SIN_ESTUDIANTE`
- `ASISTENCIA_SIN_ESTUDIANTE`

## Tabla de conflictos resueltos

No hay conflictos de identidad ni de relación resueltos automáticamente.

Solo se dejan 4 propuestas automáticas de completado de campos obligatorios, todas con trazabilidad en la matriz CSV.

## Recomendación final

No se debe solicitar FASE 2 todavía.

Primero hace falta:

1. Resolver manualmente los 5 casos de CI con nombres distintos.
2. Resolver manualmente los 2 códigos de estudiante conflictivos.
3. Aprobar o corregir los 4 completados automáticos propuestos.
4. Completar o excluir los 50 vacíos obligatorios restantes.
5. Corregir o excluir las 394 matriculaciones huérfanas.
6. Corregir o excluir las 38 asistencias huérfanas.
7. Aprobar el catálogo de variantes de asignaturas.
8. Corregir períodos no confiables antes de crear `periodos_academicos`.

## Decisión

**OBSERVADO.**

Persisten conflictos `ALTA` pendientes, por lo tanto no se debe generar FASE 2 ni `INSERT` productivo.
