# 3. Modelo de datos en tercera forma normal

La migración propuesta está en `database/069_sirgila_analitica_3fn.sql`. No modifica ni elimina las tablas legadas.

## Grano de los datos

- **Corte de evaluación:** institución + año + nivel + grado + sección opcional + tipo de evaluación + periodo.
- **Resultado de competencia:** un corte + área + competencia.
- **Resultado por nivel de logro:** un resultado + uno de AD/A/B/C.
- **Meta:** una versión de escenario para institución + año objetivo + nivel + grado + área + competencia.
- **Meta por nivel:** una meta + AD/A/B/C.

## Diagrama conceptual

```mermaid
erDiagram
    INSTITUCION_EDUCATIVA ||--o{ SIRGILA_CONFIGURACION_META : configura
    INSTITUCION_EDUCATIVA ||--o{ SIRGILA_IMPORTACION_LOTE : recibe
    SIRGILA_IMPORTACION_LOTE ||--o{ SIRGILA_CORTE_EVALUACION : origina
    SIRGILA_TIPO_EVALUACION ||--o{ SIRGILA_CORTE_EVALUACION : clasifica
    SIRGILA_CORTE_EVALUACION ||--o{ SIRGILA_RESULTADO_COMPETENCIA : contiene
    AREA_CURRICULAR ||--o{ SIRGILA_RESULTADO_COMPETENCIA : agrupa
    COMPETENCIA ||--o{ SIRGILA_RESULTADO_COMPETENCIA : mide
    SIRGILA_RESULTADO_COMPETENCIA ||--|{ SIRGILA_RESULTADO_NIVEL_LOGRO : distribuye
    SIRGILA_NIVEL_LOGRO ||--o{ SIRGILA_RESULTADO_NIVEL_LOGRO : define
    COMPETENCIA ||--o{ SIRGILA_META : proyecta
    SIRGILA_META ||--|{ SIRGILA_META_NIVEL_LOGRO : distribuye
    SIRGILA_META ||--o{ SIRGILA_META_AUDITORIA : registra
    SIRGILA_META ||--o| SIRGILA_PLAN_MEJORA : activa
    SIRGILA_PLAN_MEJORA ||--o{ SIRGILA_PLAN_ACCION : contiene
```

## Tablas

### Catálogos

- `sirgila_nivel_logro`: AD, A, B y C con orden y clasificación.
- `sirgila_tipo_evaluacion`: anual, bimestre, diagnóstica, proceso y salida.

### Configuración

- `sirgila_configuracion_meta`: pesos, límites, reparto del incremento y tolerancia por institución.
- Solo puede existir una configuración activa por institución.

### Histórico

- `sirgila_importacion_lote`: archivo, hash, estado, conteos, usuario y revisión.
- `sirgila_corte_evaluacion`: contexto académico del resultado.
- `sirgila_resultado_competencia`: evaluados y cobertura de una competencia.
- `sirgila_resultado_nivel_logro`: cantidad y porcentaje por AD/A/B/C.

### Metas

- `sirgila_meta`: escenario, versión, estado, vigencia, base, tendencia, brecha, variabilidad, confianza y prioridad.
- `sirgila_meta_nivel_logro`: porcentaje por AD/A/B/C.
- `sirgila_meta_auditoria`: evento, valor anterior/nuevo, justificación, usuario e IP.

### Mejora

- `sirgila_plan_mejora`: encabezado y estado del plan asociado a una meta aprobada.
- `sirgila_plan_accion`: acción, responsable, inicio, fin, indicador, evidencia, avance y estado.

## Integridad

- `CHECK` de porcentajes entre 0 y 100 (en servidores compatibles).
- Suma 100 validada en servicio y dentro de la misma transacción.
- Claves únicas por hash de contexto para resolver secciones nulas y evitar duplicados.
- Un solo indicador `es_actual = 1` por contexto, garantizado por el repositorio en transacción.
- Lotes confirmados son inmutables; una corrección crea una revisión nueva.

## Compatibilidad

Durante la transición, un adaptador leerá `ie_sirgila_historico_matriz`, mapeará columnas a competencias y escribirá un lote normalizado. La comparación previa al corte verificará:

- número de filas,
- número de competencias,
- conteos AD/A/B/C,
- estudiantes evaluados,
- totales por nivel y grado.

