Saltar a contenido

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