# Diagrama ER — SGETECBA
**Fecha:** 20-06-2026  
**Migraciones aplicadas:** 001 → 006  
**Tablas:** 50 (operacionales + catálogos + staging/importación)

---

## Flujo principal

```
[facultades] → [carreras] → [ofertas_asignaturas] ← [asignaturas]
                                    ↑
                         [periodos_academicos]
                                    ↓
              [matriculaciones] ← [estudiantes]
                    ↓
              [inscripciones]
```

---

## Diagrama ER — entidades principales

```mermaid
erDiagram

    %% ── ESTRUCTURA INSTITUCIONAL ──────────────────────────────────
    facultades {
        bigint id PK
        varchar codigo UK
        varchar nombre
    }
    modalidades_academicas {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    carreras {
        bigint id PK
        varchar codigo UK
        varchar nombre
        bigint facultad_id FK
        smallint modalidad_academica_id FK
    }

    %% ── CATÁLOGO ACADÉMICO ────────────────────────────────────────
    asignaturas {
        bigint id PK
        varchar codigo UK
        varchar nombre
        smallint horas_semanales
        smallint creditos
    }
    niveles_academicos {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    pensum {
        bigint id PK
        bigint asignatura_id FK
        bigint carrera_id FK
        smallint nivel_academico_id FK
        smallint anio
        boolean es_obligatoria
        varchar codigo_en_carrera
    }
    pensum_prerequisitos {
        bigint id PK
        bigint pensum_id FK
        bigint prerequisito_pensum_id FK
    }

    %% ── OFERTA ACADÉMICA ──────────────────────────────────────────
    turnos {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    grupos {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    periodos_academicos {
        bigint id PK
        varchar codigo UK
        varchar nombre
        smallint modalidad_academica_id FK
        date fecha_inicio
        date fecha_fin
        boolean actual
    }
    ofertas_asignaturas {
        bigint id PK
        bigint asignatura_id FK
        bigint carrera_id FK
        smallint modalidad_academica_id FK
        bigint periodo_academico_id FK
        smallint nivel_academico_id FK
        smallint turno_id FK
        smallint grupo_id FK
        varchar tipo_oferta
        smallint horas_planificadas_total
        smallint cupo_maximo
    }
    horario_clases {
        bigint id PK
        bigint oferta_asignatura_id FK
        bigint asignacion_docente_id FK
        varchar dia_semana
        time hora_inicio
        time hora_fin
    }

    %% ── ESTUDIANTES ───────────────────────────────────────────────
    generos {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    estados_estudiante {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    estudiantes {
        bigint id PK
        varchar cedula_identidad
        varchar nombres
        varchar apellido_paterno
        varchar apellido_materno
        varchar codigo_estudiante
        bigint carrera_id FK
        smallint genero_id FK
        smallint estado_estudiante_id FK
        smallint turno_id FK
        smallint grupo_id FK
        bigint periodo_ingreso_id FK
        boolean trabaja
        varchar lugar_trabajo
    }
    estudiante_carreras {
        bigint id PK
        bigint estudiante_id FK
        bigint carrera_id FK
        smallint turno_id FK
        smallint grupo_id FK
        bigint periodo_ingreso_id FK
    }

    %% ── MATRÍCULA E INSCRIPCIÓN ───────────────────────────────────
    planes_pago {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    estados_pago {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    estados_inscripcion {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    matriculaciones {
        bigint id PK
        bigint estudiante_id FK
        bigint carrera_id FK
        bigint periodo_academico_id FK
        smallint plan_pago_id FK
        smallint estado_pago_id FK
        smallint turno_id FK
        smallint grupo_id FK
        varchar tipo_inscripcion
        date fecha_matricula
    }
    inscripciones {
        bigint id PK
        bigint estudiante_id FK
        bigint oferta_asignatura_id FK
        smallint estado_inscripcion_id FK
        bigint matriculacion_id FK
        bigint convalidacion_id FK
        date fecha_inscripcion
    }

    %% ── DOCENTES ──────────────────────────────────────────────────
    usuarios {
        bigint id PK
        varchar username UK
        varchar nombre_completo
        boolean activo
    }
    roles {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    docentes {
        bigint id PK
        varchar codigo_docente
        varchar nombres
        varchar apellidos
        bigint usuario_id FK
    }
    asignaciones_docente {
        bigint id PK
        bigint docente_id FK
        bigint oferta_asignatura_id FK
        varchar tipo
    }

    %% ── ASISTENCIA ────────────────────────────────────────────────
    estados_asistencia {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    clases_planificadas {
        bigint id PK
        bigint oferta_asignatura_id FK
        bigint asignacion_docente_id FK
        date fecha_planificada
    }
    sesiones_asistencia {
        bigint id PK
        bigint oferta_asignatura_id FK
        bigint asignacion_docente_id FK
        bigint clase_planificada_id FK
        date fecha_clase
        varchar tipo_sesion
        varchar estado_sesion
    }
    detalle_asistencia {
        bigint id PK
        bigint sesion_asistencia_id FK
        bigint inscripcion_id FK
        bigint estudiante_id FK
        smallint estado_asistencia_id FK
    }

    %% ── OTROS MÓDULOS ─────────────────────────────────────────────
    tipos_beca {
        smallint id PK
        varchar codigo UK
        varchar nombre
        numeric porcentaje_descuento
    }
    becas_estudiante {
        bigint id PK
        bigint estudiante_id FK
        smallint tipo_beca_id FK
        bigint periodo_academico_id FK
    }
    convalidaciones {
        bigint id PK
        bigint estudiante_id FK
        varchar institucion_origen
        date fecha_aprobacion
    }
    detalle_convalidaciones {
        bigint id PK
        bigint convalidacion_id FK
        bigint asignatura_id FK
        varchar asignatura_origen
    }
    motivos_abandono {
        smallint id PK
        varchar codigo UK
        varchar nombre
    }
    abandonos_estudiantes {
        bigint id PK
        bigint estudiante_id FK
        bigint inscripcion_id FK
        smallint motivo_abandono_id FK
    }
    historial_carreras {
        bigint id PK
        bigint estudiante_id FK
        bigint carrera_id_anterior FK
        bigint carrera_id_nueva FK
        date fecha_cambio
        text motivo
    }
    documentos_estudiante {
        bigint id PK
        bigint estudiante_id FK
        varchar tipo_documento
        varchar ruta_archivo
    }

    %% ── RELACIONES ────────────────────────────────────────────────

    %% Estructura institucional
    facultades           ||--o{ carreras               : "agrupa"
    modalidades_academicas ||--o{ carreras             : "modalidad"
    modalidades_academicas ||--o{ periodos_academicos  : "modalidad"
    modalidades_academicas ||--o{ ofertas_asignaturas  : "modalidad"

    %% Catálogo
    carreras             ||--o{ pensum                 : "define"
    asignaturas          ||--o{ pensum                 : "incluida en"
    niveles_academicos   ||--o{ pensum                 : "nivel"
    pensum               ||--o{ pensum_prerequisitos   : "id"
    pensum               ||--o{ pensum_prerequisitos   : "prerequisito"

    %% Oferta
    carreras             ||--o{ ofertas_asignaturas    : "oferta de"
    asignaturas          ||--o{ ofertas_asignaturas    : "oferta de"
    periodos_academicos  ||--o{ ofertas_asignaturas    : "en período"
    niveles_academicos   ||--o{ ofertas_asignaturas    : "nivel"
    turnos               ||--o{ ofertas_asignaturas    : "turno"
    grupos               ||--o{ ofertas_asignaturas    : "grupo"
    ofertas_asignaturas  ||--o{ horario_clases         : "horario"

    %% Estudiante
    generos              ||--o{ estudiantes            : "género"
    estados_estudiante   ||--o{ estudiantes            : "estado"
    carreras             ||--o{ estudiantes            : "carrera principal"
    turnos               ||--o{ estudiantes            : "turno"
    grupos               ||--o{ estudiantes            : "grupo"
    periodos_academicos  ||--o{ estudiantes            : "período ingreso"
    estudiantes          ||--o{ estudiante_carreras    : "multi-carrera"
    carreras             ||--o{ estudiante_carreras    : "carrera"

    %% Matrícula → Inscripción
    estudiantes          ||--o{ matriculaciones        : "se matricula"
    carreras             ||--o{ matriculaciones        : "en carrera"
    periodos_academicos  ||--o{ matriculaciones        : "en período"
    planes_pago          ||--o{ matriculaciones        : "plan de pago"
    estados_pago         ||--o{ matriculaciones        : "estado pago"
    turnos               ||--o{ matriculaciones        : "turno"
    grupos               ||--o{ matriculaciones        : "grupo"
    matriculaciones      ||--o{ inscripciones          : "inscripciones"
    estudiantes          ||--o{ inscripciones          : "inscripto en"
    ofertas_asignaturas  ||--o{ inscripciones          : "en oferta"
    estados_inscripcion  ||--o{ inscripciones          : "estado"
    convalidaciones      ||--o{ inscripciones          : "origen"

    %% Docentes
    usuarios             ||--o| docentes               : "cuenta"
    docentes             ||--o{ asignaciones_docente   : "asignado a"
    ofertas_asignaturas  ||--o{ asignaciones_docente   : "asignación"
    asignaciones_docente ||--o{ horario_clases         : "horario"

    %% Asistencia
    ofertas_asignaturas  ||--o{ clases_planificadas    : "planificada"
    asignaciones_docente ||--o{ clases_planificadas    : "planificada"
    ofertas_asignaturas  ||--o{ sesiones_asistencia    : "sesión"
    asignaciones_docente ||--o{ sesiones_asistencia    : "sesión"
    clases_planificadas  ||--o{ sesiones_asistencia    : "referencia"
    sesiones_asistencia  ||--o{ detalle_asistencia     : "detalle"
    inscripciones        ||--o{ detalle_asistencia     : "asistencia"
    estados_asistencia   ||--o{ detalle_asistencia     : "estado"

    %% Otros
    estudiantes          ||--o{ becas_estudiante       : "beca"
    tipos_beca           ||--o{ becas_estudiante       : "tipo"
    periodos_academicos  ||--o{ becas_estudiante       : "período"
    estudiantes          ||--o{ convalidaciones        : "convalida"
    convalidaciones      ||--o{ detalle_convalidaciones : "materias"
    asignaturas          ||--o{ detalle_convalidaciones : "asignatura"
    estudiantes          ||--o{ abandonos_estudiantes  : "abandono"
    inscripciones        ||--o{ abandonos_estudiantes  : "abandono"
    motivos_abandono     ||--o{ abandonos_estudiantes  : "motivo"
    estudiantes          ||--o{ historial_carreras     : "historial"
    carreras             ||--o{ historial_carreras     : "anterior"
    carreras             ||--o{ historial_carreras     : "nueva"
    estudiantes          ||--o{ documentos_estudiante  : "documentos"
```

---

## Catálogos (tablas de valores fijos)

| Tabla | Descripción |
|-------|-------------|
| `generos` | Masculino, Femenino, Otro |
| `turnos` | Mañana, Tarde, Noche, Vespertino, etc. |
| `grupos` | A, B, C, … |
| `modalidades_academicas` | Semestral, Modular, Anual |
| `niveles_academicos` | 1er año, 2do año … o semestre/módulo |
| `estados_estudiante` | ACTIVO, INACTIVO, EGRESADO, ABANDONO, etc. |
| `estados_inscripcion` | ACTIVO, BAJA, APROBADO, REPROBADO, CONVALIDADA, etc. |
| `estados_asistencia` | PRESENTE, AUSENTE, TARDANZA, JUSTIFICADO, etc. |
| `estados_pago` | PENDIENTE, AL_DIA, MORA, PAGADO |
| `planes_pago` | AL_CONTADO, MENSUAL, SEMESTRAL, ANUAL, BECADO |
| `tipos_beca` | EXCELENCIA, DEPORTIVA, SOCIAL, etc. |
| `motivos_abandono` | Motivos de deserción estudiantil |

---

## Tablas de staging e importación (no en diagrama)

| Tabla | Descripción |
|-------|-------------|
| `lotes_importacion` | Cabecera de cada carga masiva |
| `staging_excel_1/2/3` | Datos raw del Excel importado |
| `staging_estudiantes_unificados` | Vista intermedia de merge |
| `archivos_importacion` | Archivos adjuntos al lote |
| `errores_importacion` | Filas rechazadas con detalle de error |
| `conflictos_datos` | Duplicados detectados durante importación |
| `mapa_fuentes_estudiante` | Rastrea qué importación originó cada alumno |

---

## Tablas de soporte

| Tabla | Descripción |
|-------|-------------|
| `usuarios` | Cuentas del sistema (admin, secretaria, docente, dirección) |
| `roles` | ADMIN, SECRETARIA, DOCENTE, DIRECCION, MKT |
| `usuario_roles` | N:M usuarios ↔ roles |
| `periodos_clase` | Franjas horarias institucionales (definición de turnos) |
| `auditoria_logs` | Log de auditoría de todas las escrituras |
| `facultades` | Agrupador institucional de carreras |

---

## Estado de datos (20-06-2026)

| Tabla | Registros |
|-------|-----------|
| `usuarios` | 5 |
| `roles` | 5 |
| `facultades` | 4 |
| `carreras` | 8 |
| `asignaturas` | 46 |
| `periodos_academicos` | 9 |
| `niveles_academicos` | 13 |
| `turnos` | 5 |
| `grupos` | 3 |
| `ofertas_asignaturas` | 55 |
| `estudiantes` | 20 |
| `inscripciones` | 75 |
| `matriculaciones` | 0 *(nuevo — por completar)* |
