Sistema integral para la gestión del proceso de trabajos de grado en la Facultad de Ingeniería Electrónica y Telecomunicaciones (FIET) de la Universidad del Cauca
Características • Arquitectura • Tecnologías • Instalación • Equipo
El Sistema de Gestión de Trabajos de Grado es una plataforma completa diseñada para digitalizar y optimizar el flujo de trabajo de proyectos de grado en la FIET. El sistema permite a docentes, estudiantes, coordinadores y jefes de departamento gestionar eficientemente todo el ciclo de vida de un proyecto de grado, desde la presentación inicial del Formato A hasta la evaluación del anteproyecto.
- Digitalizar el proceso de gestión de trabajos de grado
- Automatizar las notificaciones y el flujo de aprobaciones
- Centralizar la información de proyectos en una plataforma única
- Facilitar la comunicación entre todos los actores del proceso
- Garantizar la trazabilidad y el seguimiento de cada proyecto
- Registro en el sistema con validación de credenciales institucionales
- Presentación del Formato A con información completa del proyecto
- Reenvío de Formato A rechazado (hasta 3 intentos)
- Carga de anteproyectos una vez aprobado el Formato A
- Visualización del estado de sus proyectos
- Consulta del estado de su proyecto de grado en tiempo real
- Recepción de notificaciones sobre evaluaciones
- Seguimiento del progreso del proyecto
- Evaluación de Formatos A presentados
- Aprobación o rechazo con observaciones detalladas
- Listado completo de proyectos y sus estados
- Notificaciones automáticas de nuevos envíos
- Visualización de anteproyectos enviados
- Asignación de evaluadores del departamento
- Notificación automática a evaluadores designados
El sistema está construido siguiendo una arquitectura de microservicios, lo que garantiza escalabilidad, mantenibilidad y desacoplamiento de responsabilidades.
graph TB
subgraph "Capa de Presentación"
UI[JavaFX Desktop Application]
end
subgraph "API Gateway Layer"
GW[Gateway Service<br/>Port: 8080<br/>JWT Authentication]
end
subgraph "Service Discovery"
EUREKA[Eureka Server<br/>Port: 8761<br/>Service Registry]
end
subgraph "Microservicios de Negocio"
AUTH[Auth Service<br/>Port: 8081<br/>Authentication & JWT]
USER[User Service<br/>Port: 8082<br/>User Management]
FORMATA[Format-A Service<br/>Port: 8083<br/>Format A Workflow]
COORD[Coordination Service<br/>Port: 8084<br/>Evaluation & Coordination]
ANTE[Anteproject Service<br/>Port: 8085<br/>Anteproject Management]
EVAL[Evaluation Service<br/>Port: 8086<br/>Evaluator Assignment]
NOTIF[Notification Service<br/>Port: 8087<br/>Email Notifications]
end
subgraph "Message Broker"
RABBIT[RabbitMQ<br/>Asynchronous Events]
end
subgraph "Bases de Datos"
DB1[(PostgreSQL<br/>Auth DB)]
DB2[(PostgreSQL<br/>Users DB)]
DB3[(PostgreSQL<br/>Format-A DB)]
DB4[(PostgreSQL<br/>Coordination DB)]
DB5[(PostgreSQL<br/>Anteproject DB)]
DB6[(PostgreSQL<br/>Evaluation DB)]
DB7[(PostgreSQL<br/>Notification DB)]
end
UI -->|HTTP/REST| GW
GW --> EUREKA
GW --> AUTH
GW --> USER
GW --> FORMATA
GW --> COORD
GW --> ANTE
GW --> EVAL
AUTH --> EUREKA
USER --> EUREKA
FORMATA --> EUREKA
COORD --> EUREKA
ANTE --> EUREKA
EVAL --> EUREKA
NOTIF --> EUREKA
FORMATA -.->|Events| RABBIT
COORD -.->|Events| RABBIT
ANTE -.->|Events| RABBIT
EVAL -.->|Events| RABBIT
RABBIT -.->|Consume| NOTIF
AUTH --> DB1
USER --> DB2
FORMATA --> DB3
COORD --> DB4
ANTE --> DB5
EVAL --> DB6
NOTIF --> DB7
FORMATA -->|Feign Client| USER
COORD -->|Feign Client| USER
ANTE -->|Feign Client| FORMATA
EVAL -->|Feign Client| USER
style UI fill:#e1f5ff
style GW fill:#fff4e1
style EUREKA fill:#ffe1f5
style RABBIT fill:#f5e1ff
style AUTH fill:#e1ffe1
style USER fill:#e1ffe1
style FORMATA fill:#e1ffe1
style COORD fill:#e1ffe1
style ANTE fill:#e1ffe1
style EVAL fill:#e1ffe1
style NOTIF fill:#e1ffe1
- Aplicación de escritorio desarrollada con JavaFX 21
- Interfaz gráfica intuitiva para todos los roles de usuario
- Comunicación con microservicios a través del API Gateway
- Punto de entrada único para todas las peticiones
- Autenticación y autorización con JWT
- Enrutamiento dinámico a microservicios
- Circuit breaker con Resilience4j
- Registro y descubrimiento de servicios
- Balanceo de carga automático
- Alta disponibilidad de servicios
| Servicio | Puerto | Responsabilidad |
|---|---|---|
| auth-service | 8081 | Autenticación de usuarios, generación de tokens JWT |
| user-service | 8082 | Gestión de usuarios (docentes, estudiantes, coordinadores) |
| format-a-service | 8083 | Gestión del Formato A, validaciones, control de intentos |
| coordination-service | 8084 | Evaluación de Formatos A, aprobaciones/rechazos |
| anteproject-service | 8085 | Gestión de anteproyectos, carga de documentos |
| evaluation-service | 8086 | Asignación de evaluadores, gestión de evaluaciones |
| notification-service | 8087 | Envío de notificaciones por email (asíncrono) |
- Comunicación asíncrona entre microservicios
- Patrón de eventos para notificaciones
- Desacoplamiento de servicios
- Base de datos independiente por microservicio
- Aislamiento de datos y autonomía de servicios
- Java 17 - Lenguaje de programación
- Spring Boot 3.2.0 - Framework principal
- Spring Cloud 2023.0.0 - Microservicios y patrones cloud-native
- Spring Cloud Gateway - API Gateway
- Spring Cloud Netflix Eureka - Service Discovery
- Spring Cloud OpenFeign - Client HTTP declarativo
- Resilience4j - Circuit Breaker
- Spring Data JPA - Persistencia de datos
- Spring AMQP - Integración con RabbitMQ
- Spring Security - Seguridad (en desarrollo)
- Arquitectura Hexagonal - Ports & Adapters en anteproject-service
- JavaFX 21 - Framework para aplicaciones de escritorio
- Jackson - Serialización/deserialización JSON
- PostgreSQL - Base de datos relacional
- RabbitMQ - Message broker para comunicación asíncrona
- JWT (JSON Web Tokens) - Autenticación stateless
- JJWT 0.11.5 - Librería para manejo de JWT
- Docker - Containerización de servicios
- Docker Compose - Orquestación de contenedores para desarrollo
- Maven - Gestión de dependencias y build
- Git - Control de versiones
- Lombok - Reducción de código boilerplate
El sistema implementa los siguientes requisitos funcionales de alto valor:
Como docente necesito registrarme en el sistema para iniciar el flujo de un proyecto de grado.
Datos requeridos:
- Nombres y apellidos
- Celular (opcional)
- Programa académico (Ingeniería de Sistemas, Ingeniería Electrónica y Telecomunicaciones, Automática Industrial, Tecnología en Telemática)
- Email institucional
- Contraseña (mínimo 6 caracteres, al menos un dígito, un carácter especial y una mayúscula)
Como docente necesito subir el Formato A para comenzar el proceso de proyecto de grado.
Datos del formulario:
- Título del proyecto
- Modalidad (Investigación, Práctica Profesional)
- Fecha actual
- Director del proyecto
- Codirector del proyecto
- Objetivo general
- Objetivos específicos
- Archivo PDF adjunto
- Carta de aceptación de empresa (si es Práctica Profesional)
Nota: El sistema envía una notificación asíncrona al coordinador al enviar el Formato A.
Como coordinador necesito evaluar un Formato A para aprobar, rechazar o dejar observaciones.
Funcionalidades:
- Listado de proyectos con su estado
- Evaluación con opciones: Aprobado, Rechazado
- Campo de observaciones
- Notificación automática a docentes y estudiantes implicados
Como docente necesito subir una nueva versión del Formato A para continuar con el proceso tras un rechazo.
Reglas de negocio:
- Control de intentos (máximo 3)
- Rechazo definitivo después del tercer intento
- Notificación asíncrona al coordinador en cada reenvío
Como estudiante necesito ver el estado de mi proyecto para hacer seguimiento del proceso.
Estados posibles:
- En primera evaluación Formato A
- En segunda evaluación Formato A
- En tercera evaluación Formato A
- Formato A aceptado
- Formato A rechazado
Como docente necesito subir el anteproyecto para continuar con el proceso tras la aprobación del Formato A.
Funcionalidades:
- Carga de documento de anteproyecto
- Registro de fecha de envío
- Notificación asíncrona al jefe de departamento
Como jefe de departamento necesito ver los anteproyectos enviados para proceder con la asignación de evaluadores.
Funcionalidades:
- Visualización de anteproyectos pendientes
- Información del proyecto y docente director
Como jefe de departamento necesito delegar dos docentes evaluadores para que evalúen un anteproyecto.
Funcionalidades:
- Selección de dos evaluadores del departamento
- Notificación automática a los evaluadores designados
- Java 17 o superior
- Maven 3.8+
- PostgreSQL 14+
- RabbitMQ 3.11+
- Git
git clone https://github.com/Julianste15/ProcessManagement.git
cd ProcessManagement/ProccesManagementMicroservicesCrear las siguientes bases de datos en PostgreSQL:
CREATE DATABASE auth_db;
CREATE DATABASE users_db;
CREATE DATABASE formata_db;
CREATE DATABASE coordination_db;
CREATE DATABASE anteproject_db;
CREATE DATABASE evaluation_db;
CREATE DATABASE notification_db;Instalar y ejecutar RabbitMQ:
# En Windows (con Chocolatey)
choco install rabbitmq
# Iniciar el servicio
rabbitmq-serverAcceder a la consola de administración: http://localhost:15672 (usuario: guest, password: guest)
Cada microservicio requiere configuración de base de datos. Editar los archivos application.yml en cada servicio:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/[nombre_db]
username: [tu_usuario]
password: [tu_password]# Compilar todos los microservicios
mvn clean install -DskipTestsOrden de inicio recomendado:
# 1. Service Discovery
cd discovery-service
mvn spring-boot:run
# 2. Gateway (en otra terminal)
cd gateway-service
mvn spring-boot:run
# 3. Microservicios de negocio (en terminales separadas)
cd auth-service && mvn spring-boot:run
cd user-service && mvn spring-boot:run
cd format-a-service && mvn spring-boot:run
cd coordination-service && mvn spring-boot:run
cd anteproject-service && mvn spring-boot:run
cd evaluation-service && mvn spring-boot:run
cd notification-service && mvn spring-boot:run
# 4. Aplicación de escritorio
cd presentation
mvn javafx:run- Eureka Dashboard:
http://localhost:8761 - API Gateway:
http://localhost:8080 - RabbitMQ Management:
http://localhost:15672
El proyecto incluye soporte para Docker, facilitando el despliegue y la gestión de dependencias.
Actualmente dockerizados:
- PostgreSQL - Base de datos principal (puerto 5432)
- User Service - Servicio de gestión de usuarios (puerto 8081)
# Iniciar todos los servicios
docker-compose up -d
# Ver logs
docker-compose logs -f
# Ver logs de un servicio específico
docker-compose logs -f user-service
# Detener servicios
docker-compose down
# Reconstruir imágenes
docker-compose up --build
# Detener y eliminar volúmenes
docker-compose down -vEl archivo docker-compose.yml configura:
- Red de microservicios (
microservices-network) para comunicación entre contenedores - Volúmenes persistentes para PostgreSQL (
postgres-data) - Variables de entorno para conexiones de base de datos
- Mapeo de puertos para acceso desde el host
El Dockerfile utiliza:
- Imagen base:
eclipse-temurin:17-jdk-alpine(Java 17 optimizado) - Build multi-stage para optimización de tamaño
- Puerto expuesto: 8082
- format-a-service
- anteproject-service
- evaluation-service
- notification-service
- gateway-service
- discovery-service
- RabbitMQ (integración en docker-compose)
ProccesManagementMicroservices/
├── discovery-service/ # Eureka Server
├── gateway-service/ # API Gateway
├── auth-service/ # Autenticación
├── user-service/ # Gestión de usuarios
├── format-a-service/ # Gestión de Formato A
├── coordination-service/ # Coordinación y evaluación
├── anteproject-service/ # Gestión de anteproyectos
├── evaluation-service/ # Asignación de evaluadores
├── notification-service/ # Notificaciones
├── presentation/ # Aplicación JavaFX
└── storage/ # Almacenamiento de archivos
El sistema implementa las siguientes medidas de seguridad:
- Autenticación JWT: Tokens seguros para autenticación stateless
- Validación de contraseñas: Requisitos de complejidad (mínimo 6 caracteres, mayúsculas, dígitos, caracteres especiales)
- API Gateway: Punto único de entrada con validación de tokens
- Roles y permisos: Control de acceso basado en roles (TEACHER, COORDINATOR, DEPARTMENT_HEAD, STUDENT)
- API Gateway Pattern: Punto de entrada único
- Service Discovery Pattern: Registro dinámico de servicios
- Event-Driven Architecture: Comunicación asíncrona con eventos
- Circuit Breaker Pattern: Resiliencia ante fallos
- Database per Service: Autonomía de datos por microservicio
- Hexagonal Architecture (Ports & Adapters): Implementado en anteproject-service
El proyecto implementa 6 patrones de diseño clásicos. Para documentación detallada, ver DESIGN_PATTERNS.md.
| Patrón | Microservicio | Propósito |
|---|---|---|
| State | format-a-service | Gestión del ciclo de vida de FormatoA |
| Builder | user-service | Construcción de objetos User con validación |
| Adapter | anteproject-service | Arquitectura hexagonal - adaptadores de entrada/salida |
| Decorator | notification-service | Logging decorado en servicio de email |
| Factory | notification-service | Creación centralizada de mensajes de email |
| Facade | presentation | Simplificación de interacciones con backend |
Distribución por categoría:
- Patrones de Comportamiento: State (1)
- Patrones Creacionales: Builder, Factory (2)
- Patrones Estructurales: Adapter, Decorator, Facade (3)
El anteproject-service implementa arquitectura hexagonal completa:
domain/
├── model/ # Entidades del dominio
└── ports/
├── in/ # Casos de uso (puertos de entrada)
└── out/ # Interfaces de salida
application/
└── service/ # Implementación de casos de uso
infrastructure/
├── input/ # Adaptadores de entrada (REST, Events)
└── output/ # Adaptadores de salida (DB, Clients, Events)
Beneficios:
- ✅ Dominio independiente de frameworks
- ✅ Testabilidad mejorada con mocks de puertos
- ✅ Flexibilidad para cambiar tecnologías de infraestructura
- Single Responsibility: Cada microservicio tiene una responsabilidad única
- Open/Closed: Extensible mediante nuevos microservicios y patrones
- Dependency Inversion: Uso de interfaces, puertos y abstracciones
# Ejecutar tests unitarios
mvn test
# Ejecutar tests de un servicio específico
cd [nombre-servicio]
mvn testEl proyecto cuenta con documentación interactiva generada con Swagger/OpenAPI.
Una vez iniciados los microservicios, puedes acceder a la interfaz de Swagger UI para explorar y probar los endpoints:
| Servicio | URL de Swagger UI |
|---|---|
| format-a-service | http://localhost:8083/swagger-ui/index.html |
| Otros servicios | Próximamente |
- Documentación de API con Swagger/OpenAPI (Implementado en format-a-service)
- Containerización con Docker (PostgreSQL y user-service)
- Implementación de patrones de diseño (6 patrones implementados)
- Arquitectura hexagonal (anteproject-service)
- Dockerización de servicios restantes (5 servicios pendientes)
- Implementación de tests de integración
- Dashboard web con React/Angular
- Notificaciones en tiempo real con WebSockets
- Almacenamiento de archivos en la nube (AWS S3, Google Cloud Storage)
- Métricas y monitoreo con Prometheus y Grafana
- Orquestación con Kubernetes
- CI/CD con GitHub Actions
Este proyecto fue desarrollado por estudiantes de Ingeniería de Sistemas de la Universidad del Cauca como parte del curso de Software II:
| Nombre | Rol | GitHub |
|---|---|---|
| Julian Camacho | Full Stack Developer | @Julianste15 |
| Oscar Cabezas | Backend Developer | @Oscar-cm14 |
| Santiago Hurtado | Backend Developer | - |
Universidad: Universidad del Cauca
Facultad: Ingeniería Electrónica y Telecomunicaciones (FIET)
Programa: Ingeniería de Sistemas
Curso: Software II
Año: 2025
Este proyecto es de código abierto y está disponible bajo la licencia MIT.
Para preguntas, sugerencias o reportar problemas:
- Issues: GitHub Issues
- Email: [Contactar al equipo]
⭐ Si este proyecto te fue útil, considera darle una estrella en GitHub ⭐
Desarrollado por estudiantes de la Universidad del Cauca