Diagrama de clases
El diagrama de clases muestra las clases principales del sistema, sus atributos, métodos y relaciones. Refleja el comportamiento esperado y las asociaciones bien formadas (cardinalidades corregidas, herencia reemplazada por composición) para que el modelo relacional derivado sea normalizable hasta 3FN.
Convenciones aplicadas
- Una solicitud aprobada genera un estudiante y un expediente. Se modela por composición: Solicitud → Estudiante (0..1) y Estudiante → Expediente (0.., uno por edición, RN-44).
- La herencia Usuario <|-- Aspirante/Estudiante se reemplaza por composición con Usuario como entidad base (evita nulos masivos y replicación de columnas en BD).
- Un expediente se asocia a una edición específica* del programa, no al estudiante a secas. Un estudiante con dos ediciones tiene dos expedientes.
classDiagram
class Usuario {
-int idUsuario
-String nombre
-String apellido1
-String apellido2
-String correo
-String contrasenaHash
-String estado
-DateTime fechaCreacion
-DateTime ultimoAcceso
+iniciarSesion()
+cerrarSesion()
+modificarDatos()
+consultarDatos()
}
class Persona {
-int idPersona
-String documentoIdentidad
-String tipoDocumento
-Date fechaNacimiento
-String sexo
-String telefono
+consultarDatos()
}
class Rol {
-int idRol
-String nombre
-String descripcion
-bool activo
+crearRol()
+modificarRol()
+asignarPermiso()
}
class UsuarioRol {
-int idUsuario
-int idRol
-DateTime fechaAsignacion
-int asignadoPor
+asignar()
+revocar()
}
class Aspirante {
-int idAspirante
-int idUsuario
-String tipo
+registrarse()
+crearSolicitud()
+cargarDocumento()
+consultarEstadoSolicitud()
}
class Estudiante {
-int idEstudiante
-int idUsuario
-int idPersona
-String codigo
-String estadoAcademico
+consultarExpediente()
+consultarCalificaciones()
+consultarAsistencia()
+solicitarEvaluacionFinal()
+descargarCertificado()
}
class Facultad {
-int idFacultad
-String nombre
-String codigo
+registrarFacultad()
}
class CUM {
-int idCUM
-String nombre
-String municipio
-String provincia
+registrarNecesidad()
}
class ProgramaPosgrado {
-int idPrograma
-String titulo
-int idFacultad
-int idTipoPrograma
-int idModalidadEstudio
-int idModalidadDedicacion
-int idCoordinador
-int idEstadoPrograma
-Date fechaAprobacionInst
-Date fechaResolucionMES
+registrarPrograma()
+calcularCreditos()
+enviarRevision()
+aprobarPrograma()
}
class ProgramaVersion {
-int idProgramaVersion
-int idPrograma
-int numeroVersion
-Date fechaVigencia
-int horasTotales
+publicar()
}
class ProgramaAsignatura {
-int idProgramaAsignatura
-int idProgramaVersion
-String nombre
-int horas
-int creditos
}
class EdicionPrograma {
-int idEdicion
-int idPrograma
-int numeroEdicion
-Date fechaInicio
-Date fechaFin
-int capacidad
-String lugar
-int idEstadoEdicion
+crearEdicion()
+cerrarEdicion()
+consultarMatricula()
}
class Convocatoria {
-int idConvocatoria
-int idEdicion
-Date fechaPublicacion
-Date fechaCierre
-int idEstadoConvocatoria
+publicar()
+cerrar()
+consultarRequisitos()
}
class ConvocatoriaRequisito {
-int idConvocatoriaRequisito
-int idConvocatoria
-String descripcion
-int idTipoDocumento
-bool obligatorio
}
class NecesidadSuperacion {
-int idNecesidad
-String descripcion
-int idOrigenNecesidad
-int idPrioridad
-int idFacultad
-int idCUM
-int idEstadoNecesidad
-Date fechaRegistro
+priorizar()
+aprobar()
}
class ComiteAcademico {
-int idComite
-int idPrograma
-Date fechaConstitucion
+asignarTutor()
+asignarOponente()
}
class ComiteMiembro {
-int idComite
-int idUsuario
-Date fechaIngreso
-String rol
}
class SolicitudMatricula {
-int idSolicitud
-int idConvocatoria
-int idUsuario
-int idAspirante
-DateTime fechaSolicitud
-int idEstadoSolicitud
+guardarBorrador()
+enviarSolicitud()
+validarDocumentos()
+aprobar()
+rechazar()
}
class SolicitudHistorialEstado {
-int idHistorial
-int idSolicitud
-int idEstadoSolicitud
-DateTime fechaCambio
-int idUsuarioCambio
-String motivo
}
class Documento {
-int idDocumento
-int idSolicitud
-int idTipoDocumento
-String nombreArchivo
-String rutaArchivo
-int tamanoBytes
-String formato
-int idEstadoValidacion
-String motivoRechazo
-DateTime fechaCarga
+cargar()
+validar()
+rechazar()
+descargar()
}
class DocumentoValidacion {
-int idDocumentoValidacion
-int idDocumento
-int idUsuarioValidador
-DateTime fechaValidacion
-int idEstadoValidacion
-String observacion
}
class ExpedienteDigital {
-int idExpediente
-int idEstudiante
-int idEdicion
-Date fechaApertura
-int idEstadoExpediente
+abrir()
+agregarDocumento()
+registrarNovedad()
+exportar()
}
class Matricula {
-int idMatricula
-int idEstudiante
-int idEdicion
-Date fechaMatricula
-int idEstadoMatricula
+registrar()
+cancelar()
+consultar()
}
class ActividadAcademica {
-int idActividad
-int idEdicion
-String nombre
-String tipo
-int horas
-Date fecha
+planificar()
}
class Calificacion {
-int idCalificacion
-int idExpediente
-int idActividad
-int idCalificacionValor
-Date fecha
-String observaciones
-int registradoPor
+registrar()
+modificar()
+consultar()
}
class Asistencia {
-int idAsistencia
-int idExpediente
-int idActividad
-Date fecha
-bool presente
-int registradoPor
+registrar()
+modificar()
+consultar()
}
class EvaluacionFinal {
-int idEvaluacion
-int idEstudiante
-int idExpediente
-int idTribunal
-int idTutor
-int idOponente
-int idMemoria
-DateTime fechaDefensa
-int idResultadoDefensa
-int convocatoria
-String actaUrl
+programarDefensa()
+registrarResultado()
+generarActa()
}
class MemoriaEscrita {
-int idMemoria
-int idEstudiante
-int version
-DateTime fechaEntrega
-String rutaArchivo
-int paginas
-int idEstadoMemoria
+entregar()
+validar()
}
class Tribunal {
-int idTribunal
-int idPrograma
-Date fechaConstitucion
}
class TribunalMiembro {
-int idTribunal
-int idUsuario
-String rol
}
class Tutoria {
-int idTutoria
-int idUsuario
-int idEstudiante
-int idEdicion
-int idMemoria
-Date fechaAsignacion
}
class DocumentoEmitido {
-int idDocumentoEmitido
-String codigoValidacion
-int idEstudiante
-int idPrograma
-int idTipoDocumentoEmitido
-DateTime fechaEmision
-int emitidoPor
-String rutaArchivo
-String firmaDigital
}
class Certificado {
-int idDocumentoEmitido
-int idExpediente
-int horas
-int creditos
}
class TituloAcademico {
-int idDocumentoEmitido
-int idExpediente
-String tesisTitulo
-String mencion
}
class Reporte {
-int idReporte
-int idUsuarioGenerador
-String tipo
-String filtros
-DateTime fechaGeneracion
-String formato
+generar()
}
class Auditoria {
-int idAuditoria
-int idUsuario
-int idAccion
-String entidad
-int idEntidad
-DateTime fechaHora
-String ip
-int idResultado
-String detalle
}
Usuario "1" --> "0..*" UsuarioRol
Rol "1" --> "0..*" UsuarioRol
Usuario "1" --> "0..1" Persona
Usuario "1" --> "0..1" Aspirante
Usuario "1" --> "0..1" Estudiante
Aspirante "1" --> "0..*" SolicitudMatricula
Estudiante "1" --> "0..*" ExpedienteDigital
Estudiante "1" --> "0..*" Matricula
Estudiante "1" --> "0..1" Persona
ProgramaPosgrado "1" --> "0..*" EdicionPrograma
ProgramaPosgrado "1" --> "0..*" ProgramaVersion
ProgramaVersion "1" --> "0..*" ProgramaAsignatura
ProgramaPosgrado "1" --> "0..1" Facultad
ProgramaPosgrado "1" --> "0..*" ComiteAcademico
ComiteAcademico "1" --> "1..*" ComiteMiembro
ComiteMiembro "*" --> "1" Usuario
EdicionPrograma "1" --> "0..*" Convocatoria
Convocatoria "1" --> "0..*" ConvocatoriaRequisito
Convocatoria "1" --> "0..*" SolicitudMatricula
SolicitudMatricula "1" --> "0..*" Documento
SolicitudMatricula "1" --> "0..*" SolicitudHistorialEstado
Documento "1" --> "0..*" DocumentoValidacion
EdicionPrograma "1" --> "0..*" Matricula
ExpedienteDigital "*" --> "1" Estudiante
ExpedienteDigital "*" --> "1" EdicionPrograma
ExpedienteDigital "1" --> "0..*" Calificacion
ExpedienteDigital "1" --> "0..*" Asistencia
ActividadAcademica "1" --> "0..*" Calificacion
ActividadAcademica "1" --> "0..*" Asistencia
ActividadAcademica "*" --> "1" EdicionPrograma
Estudiante "1" --> "0..*" EvaluacionFinal
EvaluacionFinal "1" --> "1" Tribunal
EvaluacionFinal "1" --> "1" MemoriaEscrita
Tribunal "1" --> "1..*" TribunalMiembro
TribunalMiembro "*" --> "1" Usuario
Tutoria "*" --> "1" Estudiante
Tutoria "*" --> "1" Usuario
NecesidadSuperacion "*" --> "0..1" Facultad
NecesidadSuperacion "*" --> "0..1" CUM
Estudiante "1" --> "0..*" DocumentoEmitido
DocumentoEmitido "1" --> "0..1" Certificado
DocumentoEmitido "1" --> "0..1" TituloAcademico
Usuario "1" --> "0..*" Auditoria