Este proyecto nació de una iniciativa del Centro de Estudiantes de Ingeniería (CEI) con el objetivo de desarrollar un sistema informático que pudiera automatizar el proceso de gestión de impresiones en la Facultad Técnica de Mar del Plata. De esta manera, el producto informático pasó de ser el propósito principal del proyecto a ser un medio para responder y apoyar una transformación cultural y digital que creara un impacto no solo en el CEI, sino en toda la comunidad de estudiantes de la Facultad Técnica. de Mar del Plata.
Introducción
Proyecto
- Motivación y objetivos
- Alcance del sistema
- Antecedentes del equipo
- Análisis FODA
- Viabilidad
Lograr un comportamiento dinámico y flexible de la plataforma a través de la parametrización en la configuración. Dada la complejidad de la solución observada, se decide estimar el coste del proyecto en un total de 1500 horas, que cubrirán todas las fases de obra.
Proceso
- Metodología de trabajo 1. Marco de trabajo de referencia
- Gestión de código
- Comunicación 1. Comunicación escrita
- Integración continua
El uso de esta herramienta aumentó drásticamente durante el contexto de pandemia. La especificación para el uso de este estándar se puede encontrar en la sección "Documentación API" del anexo "Prácticas aplicadas en desarrollo".
Producto
Análisis
- Contexto y objetivos
- Identificación de stakeholders
- Técnicas
- Resultados
- Requerimientos funcionales
- Requerimientos no funcionales
- Restricciones
- Cliente
- Servidor
- Base de datos
- APIs
- Servicios externos
A partir de la investigación y análisis de los frameworks identificados en el apartado anterior, se decidió utilizar Angular como herramienta de desarrollo Frontend. El uso de Swagger (especificación OpenAPI 3.0), junto con el servicio web, resuelve el problema de la documentación.
Diseño
- Innovación del proceso
- Parametrización del sistema
- Arquitectura
El proceso diseñado final se muestra desde dos perspectivas diferentes: la del estudiante y la del oficinista. Espere a que parte del equipo se entregue en la sede antes de poder realizar el pedido. El resto de componentes están ligados al tiempo de ejecución de la aplicación (Docker, Docker Compose), DNS (Cloudflare) o conectividad a impresoras (OpenVPN y CUPS, cuya implementación no se trata en este escrito).
Retrospectiva del proyecto
Resultados a nivel metodología, planificación, estimación y plazos
Como consecuencia de todas las circunstancias antes mencionadas, se tuvo que tomar una decisión sobre la realización del Trabajo Final para evitar un exceso de horas invertidas en el mismo. Con base en todas las circunstancias antes mencionadas, se puede afirmar que el total de horas invertidas en la implementación del producto realizado y la posterior redacción del proyecto final es de aproximadamente 1800 horas, lo que supone una desviación aproximada del 20%. Se puede constatar que el ritmo de trabajo del equipo no fue constante y que el compromiso inicial previsto de 3 horas diarias no siempre se pudo cumplir debido a periodos de fuerte, media y baja o nula actividad.
Cumplimiento de objetivos planteados
Simplifica el proceso reduciendo los pasos en cada uno de los flujos que sigue el empleado. A través de la plataforma tecnológica implementada, se ha logrado lograr un producto que cumple con los requisitos funcionales y no funcionales y las limitaciones identificadas. Transferencia de conocimiento con CEI incluyendo manual de usuario, capacitación, diagramas y documentación de la plataforma.
Conclusiones
Planificación, estimación y gestión del proyecto
Desarrollo profesional del equipo
Esto, sumado al conocimiento que cada miembro aportó a partir de su experiencia laboral, fue extremadamente valioso para todo el equipo y para el sistema en sí, dando como resultado un producto robusto, utilizable, mantenible y ampliable en el futuro. Sistemas distribuidos, bases de datos, comunicación entre sistemas, redes, análisis y diseño y muchos otros conceptos son algunos de los pilares en los que se basó el equipo para construir la solución resultante. El equipo se siente honrado de tener la oportunidad de devolver a la facultad todo el conocimiento transmitido a lo largo de los años a través de una solución que beneficia a toda la comunidad.
Trabajos futuros
Los indicadores clave de rendimiento (o KPI en inglés) son un conjunto de valores medibles que muestran con qué eficacia se están logrando los objetivos comerciales de la organización a la que sirve el sistema. Esto puede ayudar a asignar personal según el flujo de pedidos, ya sea por día de la semana o incluso por diferentes turnos a lo largo del día. Esto es resultado del mantenimiento con el que se diseñó toda la plataforma y de que CEI cuenta con su propio código fuente.
Glosario
PWA: un tipo de software de aplicación web creado utilizando tecnologías web comunes, incluidas HTML, CSS y JavaScript. SaaS: modelo de distribución de software en el que un proveedor de nube aloja aplicaciones y las pone a disposición de los usuarios finales a través de Internet. Un inquilino es un grupo de usuarios que comparten acceso común con ciertos privilegios a una instancia del software.
Bibliografía
Obtenido de https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps/Introduction#advantages_of_web_applications.
Listado de casos de uso
Flujo de registración, login y recupero de contraseña
Caso de uso n.° 2.1 El usuario administrador desea cambiar los datos del estudiante para actualizar su información. Caso de uso #2.3 El usuario administrador desea cambiar los datos del becario para actualizar su información. Caso de uso n.º 2.6 El usuario administrador desea cambiar los datos de un usuario de silla para actualizar su información.
Emisión y gestión de pedidos
Caso de uso n.º 4.8 Un estudiante/académico desea acceder a información sobre un pedido activo para cancelarlo. Caso de uso n.° 5.3 Un usuario administrador desea ver una lista de becarios para degradar a uno de ellos a estudiante. Caso de uso n.° 5.4 Un usuario de tipo administrador desea administrar la configuración de aprobación para asignar copias disponibles.
Gestión de Código
Formato de commits
Modelo de ramas
Uno de los aspectos más notables de GitFlow es que facilita mucho el desarrollo paralelo al aislar el nuevo desarrollo del trabajo completado. Cuando se completa el nuevo desarrollo, se vuelve a fusionar con la rama de desarrollo, un repositorio para todas las funciones completadas que aún no se han publicado. No hay riesgo de quedar atrapado accidentalmente en un nuevo desarrollo al mismo tiempo.
Pull Requests
La especificación declarativa de recursos de OpenAPI permite a los clientes comprender y utilizar los servicios sin conocimiento de la implementación del servidor ni acceso al código del servidor. Swagger fue la herramienta que permitió implementar el estándar y proporcionar una interfaz gráfica a través de la cual se podía acceder a cada uno de los componentes de la API. Descargue todo el código de la rama que desencadenó el trabajo en el entorno aprovisionado para ejecutar el CI.
Cliente
Diseño de la Arquitectura
Las directivas de plantilla proporcionan lógica de programación, así como un mecanismo de sincronización y representación llamado enlace de datos, que conecta la lógica que contiene los datos de la aplicación con las vistas asociadas. Servicios e inyección de dependencia: toda la lógica transversal que no está asociada directamente a una vista y que debe usarse en diferentes partes de la aplicación y entre diferentes componentes se declara e implementa en un servicio. El mecanismo DI implementado por Angular permite aumentar la flexibilidad y modularidad de la aplicación.
Organización de directorios y funcionalidades
AuthNGuard: el guardia encargado de autenticar al usuario decodificando el token de portador adjunto en la solicitud. LoggerInterceptor: interceptor responsable de registrar datos de solicitud simples, como el punto final de la consulta (ruta y verbo) y la marca de tiempo de la consulta. SerializerInterceptor: Se encarga de preservar y (así ocultar) aquellos atributos de la entidad a los que tiene acceso el usuario del rol X.
Manejo de entidades con herencia
Se encuentra en el componente GenericSubUserService cuya responsabilidad es fusionar la lectura del subusuario de la BD con el usuario del servicio UsersService. Aunque podemos verlo como una pequeña sobrecarga en el lado de la base de datos al realizar algunas consultas adicionales, la simplicidad de la solución supera con creces los pequeños problemas de rendimiento que pueden ocurrir cuando la cantidad de datos o la concurrencia de usuarios crece a niveles significativos. Ante esta decisión, fue necesario identificar todas las entidades que conformarían el sistema y traducirlas en una o más tablas de la base de datos.
Modelo Entidad Relación (MER)
A partir del MER fue posible proceder en el diseño de un modelo relacional, que representa una estructura mucho más similar a la versión final implementada en la base de datos. Pero en caso de un posible cambio del ID en la BD, será necesaria la visualización del código con la actualización. Para evitar este impacto, se decide designar un atributo específico que el cliente seguramente encontrará siempre en la base de datos, evitando así vincular la tupla a buscar con el código implementado.
API RESTful
Funciones: Determina la operación realizada en el campo especificado y el valor o valores con los que comparar. Este parámetro tiene el propósito de devolver los objetos en orden ascendente o descendente, según el campo especificado. Paginación: Para limitar la cantidad de objetos devueltos desde el servidor y así lograr mejores tiempos de respuesta, se utilizó un conjunto de parámetros para la paginación.
Web Sockets
Como parte de la implementación específica de la biblioteca Socket.IO, existe la posibilidad de implementar el concepto orooms, que permite dividir mensajes para cada cliente individual que lo solicite. En este caso, el pedido se actualizará automáticamente en caso de cambio en sus datos, siempre que el cliente esté visualizando una configuración específica del pedido. El Sistema de Impresión Online (SIO) es una plataforma sobre la cual se puede realizar toda la gestión de pedidos que realiza CEI, con la posibilidad de gestionar expedientes, materiales, carreras, usuarios y muchas otras entidades que componen su funcionamiento.
Inicio de sesión
Este manual describe todas las funcionalidades implementadas en el sistema, para que cualquier usuario nuevo pueda leer las instrucciones actuales y comenzar a utilizar la plataforma sin una gran curva de aprendizaje inicial.
Registro de nuevo estudiante
El correo electrónico recibido en el buzón contendrá un hipervínculo que permitirá autenticarse y continuar con el proceso de registro.
Olvidé mi contraseña
Tan pronto como se haya ingresado una prueba de identidad válida que no esté registrada en el sistema, el estudiante eventualmente terminará en la pantalla de inicio donde podrá comenzar a usar la plataforma. Una vez que el usuario acceda al sistema, se le presentará la pantalla principal o "Inicio".
Menú
Submenú superior
Todos los usuarios pueden cambiar su contraseña a través del botón "Cambiar contraseña", especificando una nueva contraseña y confirmándola.
Datos específicos del rol
Solicitud de pedido
Selección de archivos
Al realizar esta acción, el sistema mostrará los años asociados al plan de estudios de dicha carrera, además de un ítem para aquellas materias optativas. Al hacer clic en él, el sistema abrirá la vista previa de PDF integrada en el navegador en una nueva pestaña para ver el archivo. Al hacer clic en él (o en el paso 2 perteneciente al encabezado del asistente), el sistema mostrará el siguiente paso: "Configuración de Archivo".
Configuración de archivos
El sistema tiene la capacidad de seleccionar el número deseado de grupos de bandas, así como la capacidad de asociar archivos con cada grupo de bandas en el orden que crea conveniente. El tipo de vinculación se calcula automáticamente a partir del número total de hojas asociadas con archivos que pertenecen al grupo de vinculación seleccionado. Para agregar un nuevo grupo de bandas, debe seleccionar el botón con el ícono "+" en la parte superior de la lista.
Confirmar pedido
Para confirmar el pedido, luego de que el usuario haya revisado la información proporcionada por el sistema y seleccionado la oficina a la que desea retirar, deberá hacer clic en el botón "Finalizar" en la esquina inferior derecha del display. Al realizar esta acción, el sistema confirma que el usuario tiene saldo disponible para realizar el pedido. El sistema siempre intentará utilizar la mayor cantidad de copias posible, dependiendo del monto disponible para el beneficiario.
Seguimiento de pedidos
Si el usuario quiere ver el detalle de un pedido, deberá hacer clic en el botón "+" adjunto a la fila correspondiente. Si el usuario quiere ver la configuración del pedido seleccionado deberá hacer clic en el botón. Para ello, el usuario debe hacer clic en el icono de la esquina superior derecha y seleccionar "Ver historial de pedidos".
Gestión de pedidos
Para volver al listado de pedidos activos, el usuario deberá seguir el mismo procedimiento mencionado anteriormente, haciendo clic en el icono de la esquina superior derecha y seleccionando la opción "Mostrar sólo pedidos activos". En la parte superior, aparece un campo para que el usuario filtre los pedidos activos por número de identificación, fecha de solicitud o estado de la solicitud, así como por identificación o nombre/apellido del estudiante solicitante. Total: precio final del pedido pagado por el usuario tras realizar los descuentos correspondientes.