scieee AI-readable full text Open interactive document viewer

Aplicación web para la predicción y recomendación de tratamiento para el cáncer de vejiga

Fernández Ocaña, Guzmán; Burgos Galán, María Caridad

Abstract

El cáncer es una de las enfermedades más frecuentes y que más recursos sanitarios consume en el mundo occidental. El cáncer de vejiga en concreto es el quinto cáncer más común en España. Una temprana respuesta médica es indispensable para la recuperación del paciente, por lo que los sanitarios necesitan información que les permita manejar de forma adecuada a los pacientes, conociendo mejor el pronóstico de su enfermedad. Este trabajo consiste en una aplicación web cuya finalidad es ser un apoyo para el personal sanitario a la hora de tratar a pacientes de cáncer de vejiga. Permite gestionar los historiales clínicos de los pacientes y realizar una predicción de su evolución a través de algoritmos de Machine Learning. Actualmente los modelos de predicción han sido entrenados a partir de 75 registros de pacientes reales del Hospital Infanta Leonor de Madrid. Además, la aplicación permite aumentar dicha base de datos, de forma que las predicciones cada vez sean más precisas.

Full text

APLICACIÓN WEB PARA LA PREDICCIÓN Y RECOMENDACIÓN DE TRATAMIENTO PARA EL CÁNCER DE VEJIGA WEB APPLICATION FOR THE PREDICTION AND TREATMENT RECOMMENDATION FOR BLADDER CANCER TRABAJO FIN DE GRADO CURSO 2022-2023 GUZMÁN FERNÁNDEZ OCAÑA MARÍA CARIDAD BURGOS GALÁN DIRECTORES ANTONIO SARASA CABEZUELO VÍCTOR MANUEL CARRERO LÓPEZ GRADO EN INGENIERÍA INFORMÁTICA FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID APLICACIÓN WEB PARA LA PREDICCIÓN Y RECOMENDACIÓN DE TRATAMIENTO PARA EL CÁNCER DE VEJIGA WEB APPLICATION FOR THE PREDICTION AND TREATMENT RECOMMENDATION FOR BLADDER CANCER TRABAJO DE FIN DE GRADO EN INGENIERÍA INFORMÁTICA GUZMÁN FERNÁNDEZ OCAÑA MARÍA CARIDAD BURGOS GALÁN DIRECTORES ANTONIO SARASA CABEZUELO VÍCTOR MANUEL CARRERO LÓPEZ CONVOCATORIA: JUNIO 2023 GRADO EN INGENIERÍA INFORMÁTICA FACULTAD DE INFORMÁTICA UNIVERSIDAD COMPLUTENSE DE MADRID 29 DE MAYO DE 2023 2 A nuestra familia, por su constante respaldo y amor incondicional. 3 AGRADECIMIENTOS Tras haber llegado a este momento, nos gustaría expresar nuestro profundo agradecimiento a todas las personas que han sido fundamentales en este arduo y enriquecedor camino universitario. En primer lugar, queremos agradecer de manera especial a nuestro tutor, Antonio Sarasa Cabezuelo, cuya guía y consejos nos han ayudado a alcanzar nuestros objetivos del trabajo. Además, extendemos nuestro agradecimiento al Doctor Víctor Manuel Carrero López, jefe de servicio de urología del Hospital Infanta Leonor, por su colaboración y apoyo en la obtención de los datos necesarios para nuestro proyecto. Su experiencia y contribución han sido esenciales para nuestra investigación. También queremos expresar nuestro agradecimiento a nuestros amigos y familiares, cuyo amor, paciencia y comprensión nos han dado el soporte necesario para seguir en este camino. Agradecemos su apoyo y por estar a nuestro lado en los buenos y malos momentos. Estamos sinceramente agradecidos por su valiosa contribución y por ser parte de nuestro viaje académico. 4 RESUMEN Aplicación web para la predicción y recomendación de tratamiento para el cáncer de vejiga El cáncer es una de las enfermedades más frecuentes y que más recursos sanitarios consume en el mundo occidental. El cáncer de vejiga en concreto es el quinto cáncer más común en España. Una temprana respuesta médica es indispensable para la recuperación del paciente, por lo que los sanitarios necesitan información que les permita manejar de forma adecuada a los pacientes, conociendo mejor el pronóstico de su enfermedad. Este trabajo consiste en una aplicación web cuya finalidad es ser un apoyo para el personal sanitario a la hora de tratar a pacientes de cáncer de vejiga. Permite gestionar los historiales clínicos de los pacientes y realizar una predicción de su evolución a través de algoritmos de Machine Learning. Actualmente los modelos de predicción han sido entrenados a partir de 75 registros de pacientes reales del Hospital Infanta Leonor de Madrid. Además, la aplicación permite aumentar dicha base de datos, de forma que las predicciones cada vez sean más precisas. Palabras clave Machine learning, aplicación web, cáncer, predicción, variable, vejiga, paciente, modelo, API, consulta. 5 ABSTRACT Web application for the prediction and treatment recommendation for bladder cancer Cancer is one of the most common diseases and consumes a significant amount of healthcare resources in the Western world. Bladder cancer specifically is the fifth most common cancer in Spain. An early medical response is essential for the recovery of the patient, which is why healthcare professionals require information that enables them to properly manage patients and gain a better understanding of their disease prognosis. This work consists of a web application whose purpose is to be a support for health personnel when treating bladder cancer patients. It allows managing the clinical histories of patients and making a prediction of their evolution through Machine Learning algorithms. Currently, the prediction models have been trained from 75 real patient records from the Infanta Leonor Hospital in Madrid. In addition, the application allows you to increase said database, so that the predictions are increasingly accurate. Keywords Machine learning, web application, cancer, prediction, variable, bladder, patient, model, API, query. 6 ÍNDICE DE CONTENIDOS Capítulo 1 - Introducción....................................................................................................... 17 1.1 Motivación......................................................................................................................17 1.2 Objetivos.........................................................................................................................18 1.3 Plan de trabajo.............................................................................................................. 19 1.4 Estructura de la memoria............................................................................................. 20 Introduction...............................................................................................................................22 Capítulo 2 - Estado del arte....................................................................................................27 2.1 IBM Watson for Oncology.............................................................................................27 2.2 Google Health................................................................................................................27 2.3 Savana Manager...........................................................................................................28 2.4 EORTC risk tables............................................................................................................28 2.5 Bladder Cancer Nomogram........................................................................................ 28 2.6 Modelo de puntuación CUETO....................................................................................29 Capítulo 3 - Tecnologías empleadas....................................................................................30 3.1 Visual Studio Code........................................................................................................ 30 3.2 Git.................................................................................................................................... 30 3.3 HTML y CSS......................................................................................................................31 3.4 Bootstrap.........................................................................................................................31 3.5 PHP...................................................................................................................................31 3.6 JQuery.............................................................................................................................31 3.7 Python............................................................................................................................. 32 3.8 Chart.js............................................................................................................................ 32 3.9 DataTables......................................................................................................................33 3.10 Base de datos.............................................................................................................. 33 3.11 VPS.................................................................................................................................33 Capítulo 4 - Especificación de requisitos............................................................................. 34 4.1 Actores............................................................................................................................34 4.2 Casos de uso..................................................................................................................34 3.2.1 Gestión de cuenta............................................................................................... 36 3.2.1 Gestión del administrador................................................................................... 39 3.2.1 Gestión de pacientes...........................................................................................45 7 3.2.1 Gestión de consultas............................................................................................53 3.2.1 Gestión de predicciones..................................................................................... 55 Capítulo 5 - Arquitectura........................................................................................................61 Capítulo 6 - Modelo de datos................................................................................................63 6.1 Tabla usuarios.................................................................................................................63 6.2 Tabla pacientes............................................................................................................. 64 6.3 Tabla dataset.................................................................................................................66 Capítulo 7 - Diseño..................................................................................................................69 Capítulo 8 - Implementación.................................................................................................71 8. 1 Módulo usuarios............................................................................................................71 8.1.1 Login.......................................................................................................................71 8.1.2 Logout.................................................................................................................... 74 8.1.3 Editar perfil.............................................................................................................75 8.1.4 Añadir usuario....................................................................................................... 79 8.1.5 Editar usuario.........................................................................................................82 8.1.6 Eliminar usuario......................................................................................................85 8.1.7 Ver lista de usuarios.............................................................................................. 88 8.1.8 Buscar usuario....................................................................................................... 91 8.1.9 Exportar usuarios................................................................................................... 92 8. 2 Módulo pacientes........................................................................................................ 93 8.2.1 Añadir paciente....................................................................................................93 8.2.2 Importación de pacientes...................................................................................95 8.2.3 Editar paciente..................................................................................................... 99 8.2.4 Eliminar paciente................................................................................................101 8.2.5 Ver lista de pacientes.........................................................................................104 8.2.6 Buscar paciente..................................................................................................106 8.2.7 Exportar pacientes..............................................................................................107 8.2.8 Ver historial médico del paciente.................................................................... 108 8.3 Módulo consultas.........................................................................................................111 8.3.1 Ejecutar consulta................................................................................................ 111 8.3.2 Visualizar consulta...............................................................................................113 8.3.3 Exportar resultados de consulta........................................................................116 8.4 Módulo predicciones..................................................................................................117 8.4.1 Modelos de predicción......................................................................................117 8 8.4.1.1 Random Forest........................................................................................... 117 8.4.1.2 Regresión Logística....................................................................................118 8.4.1.3 K-Vecinos más Cercanos..........................................................................119 8.4.1.4 Naive Bayes................................................................................................119 8.4.1.5 SVM..............................................................................................................120 8.4.2 Entrenamiento de modelos...............................................................................120 8.4.3 Obtener predicción............................................................................................126 8.4.4 Exportar resultados de la predicción............................................................... 132 8.4.5 Importar dataset.................................................................................................135 8.4.6 Añadir predicción al dataset............................................................................139 8.4.7 Visualización........................................................................................................141 Capítulo 9 - Conclusiones y trabajo futuro.........................................................................150 9.1 Conclusiones................................................................................................................ 150 9.2 Trabajo futuro...............................................................................................................151 9.2.1 Recopilación de más datos.............................................................................. 151 9.2.2 Responsive...........................................................................................................151 9.2.3 Aplicación móvil................................................................................................. 151 9.2.4 Reconocimiento de lenguaje natural..............................................................152 9.2.5 Redes neuronales............................................................................................... 152 Conclusions.........................................................................................................................153 Future Work.........................................................................................................................154 Data Collection............................................................................................................154 Responsive Design....................................................................................................... 154 Mobile Application...................................................................................................... 154 Natural Language Processing....................................................................................155 Neural Networks...........................................................................................................155 Contribuciones Personales....................................................................................................156 Personal Contributions........................................................................................................... 162 Bibliografía.............................................................................................................................. 167 Apéndice A - Guía de uso................................................................................................... 170 9 ÍNDICE DE TABLAS Tabla 1. Planificación................................................................................................................19 Table 1.1. Planification.............................................................................................................. 24 Tabla 2. Iniciar Sesión................................................................................................................ 36 Tabla 3. Cerrar Sesión................................................................................................................37 Tabla 4. Editar perfil................................................................................................................... 38 Tabla 5. Añadir usuario..............................................................................................................39 Tabla 6. Editar usuario............................................................................................................... 40 Tabla 7. Eliminar usuario............................................................................................................41 Tabla 8. Ver lista de usuarios.................................................................................................... 42 Tabla 9. Buscar usuario..............................................................................................................43 Tabla 10. Exportar usuario.........................................................................................................44 Tabla 11. Añadir paciente........................................................................................................45 Tabla 12. Importación masiva de pacientes......................................................................... 46 Tabla 13. Editar paciente..........................................................................................................47 Tabla 14. Eliminar paciente...................................................................................................... 48 Tabla 15. Buscar paciente........................................................................................................49 Tabla 16. Ver historial de un paciente.................................................................................... 50 Tabla 17. Ver lista de pacientes...............................................................................................51 Tabla 18. Exportar pacientes....................................................................................................52 Tabla 19. Ejecutar consulta sobre la base de pacientes..................................................... 53 Tabla 20. Exportar resultados de consulta..............................................................................54 Tabla 21. Obtener predicción sobre un paciente.................................................................55 Tabla 22. Entrenar modelos de predicción............................................................................ 56 Tabla 23. Añadir predicción al dataset.................................................................................. 57 Tabla 24. Exportar resultados de predicción..........................................................................58 Tabla 25. Exportar resultados de predicción..........................................................................59 Tabla 26. Importar dataset.......................................................................................................60 Tabla 27. Tabla usuarios en la base de datos........................................................................64 Tabla 28. Tabla pacientes en la base de datos.................................................................... 66 Tabla 29. Tabla dataset en la base de datos........................................................................ 68 16 Capítulo 1 - Introducción 1.1 Motivación El cáncer de vejiga es uno de los cánceres que con más frecuencia se diagnostica en la especialidad de Urología, tras el cáncer de próstata, ocupando en frecuencia el noveno lugar en términos de cantidad de diagnósticos. Sin embargo, en España, esta enfermedad es más frecuente y se encuentra en el quinto lugar en cuanto a los tipos de cáncer más diagnosticados en la población. Se produce cuando las células de la vejiga comienzan a crecer de manera anormal y sin control, formando tumores que pueden extenderse a otras partes del cuerpo si no se tratan a tiempo. Aunque puede presentarse en cualquier edad, afecta principalmente a personas mayores, siendo la edad media en el momento del diagnóstico de en torno a 70 años. Es la cuarta forma de cáncer más común en los hombres y la octava entre las mujeres. Fumar es el factor de riesgo más importante, ya que los químicos presentes en el tabaco pueden ser absorbidos en el torrente sanguíneo y excretados en la orina, lo que puede dañar la pared de la vejiga y aumentar el riesgo de desarrollar la enfermedad. La recuperación del paciente depende en gran parte de tomar las medidas correctas a tiempo, evitando que la enfermedad evolucione. Según la fase de desarrollo del tumor en el momento de su diagnóstico, se podrá curar con cirugías más o menos extensas. Es primordial la labor diagnóstica del médico, ya que cuanto más avanzado esté el cáncer, más difícil será la curación del paciente. 17 1.2 Objetivos El objetivo principal del proyecto es el desarrollo una aplicación web de escritorio que dé apoyo al personal médico en cuanto al seguimiento de sus pacientes de cáncer de vejiga, a la vez que dar un pronóstico que les permita llevar a cabo el tratamiento más conveniente. Para lograr el objetivo principal, se proponen los siguientes objetivos específicos: - Desarrollar una aplicación intuitiva que pueda ser utilizada fácilmente por un usuario de perfil médico. - Permitir el acceso a la página web únicamente a los usuarios que estén registrados en la base de datos. - Implementar una API REST para facilitar el acceso a los servicios que ofrece la aplicación. - Crear funcionalidades para la gestión de usuarios. - Facilitar al usuario el tratamiento y visualización de historiales médicos de pacientes. - Permitir tanto importar como exportar pacientes de forma masiva. - Implementar una funcionalidad para la realización y visualización de consultas según las variables del paciente. - Obtención de un pronóstico del paciente mediante algoritmos de Machine Learning. - Permitir ampliar el dataset para el aprendizaje de los modelos de predicción. - Facilitar la visualización de los pronósticos a través de gráficas. 18 1.3 Plan de trabajo Para llevar a cabo la consecución de los objetivos propuestos en el apartado anterior, se establecieron unos plazos para realizar cada tarea. La planificación fue la siguiente: Iteracción Objetivo Horas Fecha inicio Fecha fin 1 Especificación de requisitos 15 19/9/22 30/9/22 2 Planificación del proyecto 5 1/10/22 3/10/22 3 Diseño y creación de la base de datos 5 4/10/22 5/10/22 4 Estudio de las tecnologías 40 6/10/22 11/10/22 5 Estructura funcional básica 45 12/10/22 21/10/22 6 Gestión del administrador 30 22/10/22 31/10/22 7 Gestión de la cuenta 25 1/11/22 7/11/22 8 Gestión de pacientes 50 8/11/22 5/12/22 9 Gestión de consultas 50 6/12/22 4/02/23 10 Estudio de Machine Learning 40 7/02/23 27/02/23 11 Gestión de predicciones 70 28/02/23 31/03/23 12 Visualización de datos 40 1/04/23 19/04/23 13 Memoria 60 20/04/23 15/05/23 14 Preparación de la defensa 25 16/05/23 Tabla 1. Planificación. 19 1.4 Estructura de la memoria Capítulo 1 - Introducción: se explica la motivación para realizar este proyecto, los objetivos del mismo, el plan de trabajo seguido y la estructura de la memoria. Este capítulo se encuentra en español y en inglés. Capítulo 2 - Estado del arte: en este capítulo se habla sobre tecnologías que actualmente realizan funciones similares o relacionadas con las de este proyecto. Capítulo 3 - Tecnologías empleadas: se nombran y explican las tecnologías que se han usado en la elaboración de la aplicación. Capítulo 4 - Especificación de requisitos: se describen tanto los actores como los casos de uso a partir de los cuales se creó la aplicación. Capítulo 5 - Arquitectura: se describe la arquitectura de la aplicación web. Capítulo 6 - Modelo de datos: en este punto se describe la base de datos del proyecto. Capítulo 7 - Diseño: se describe el diseño de la aplicación, por qué es de esta forma y cómo se ha llevado a cabo. Capítulo 8 - Implementación: en este apartado se explican las distintas funcionalidades de la aplicación. Se hace una descripción tanto de la interfaz como del código. Capítulo 9 - Conclusiones y trabajo futuro: se describen las conclusiones a las que se han llegado tras realizar el trabajo, junto al posible trabajo futuro para mejorarlo. Este punto está en español e inglés. Contribuciones Personales: se muestran las tareas realizadas por cada persona. En español e inglés. Bibliografía: enlaces a los recursos utilizados. 20 Apéndice A - Guía de uso: se ha desarrollado una guía para que cualquier persona con acceso a la plataforma pueda navegar y realizar todas las funcionalidades. 21 Introduction Motivation Bladder cancer is one of the most frequently diagnosed cancers in the field of Urology, following prostate cancer, ranking ninth in terms of the number of diagnoses. However, in Spain, this disease is more frequent and ranks fifth among the most diagnosed types of cancer in the population. It occurs when bladder cells start to grow abnormally and without control, forming tumors that can spread to other parts of the body if not treated in time. Although it can occur at any age, it mainly affects older people, with the average age at the time of diagnosis being around 70 years. It is the fourth most common form of cancer in men and the eighth among women. Smoking is the most important risk factor, as the chemicals present in tobacco can be absorbed into the bloodstream and excreted in urine, which can damage the bladder wall and increase the risk of developing the disease. The patient's recovery largely depends on taking the right measures in a timely manner, preventing the disease from progressing. Depending on the stage of tumor development at the time of its diagnosis, it can be cured with more or less extensive surgeries. The diagnostic work of the doctor is essential, as the more advanced the cancer, the more difficult it will be to cure the patient. 22 Goals The main objective of the project is to develop a desktop web application that supports medical personnel in monitoring their bladder cancer patients, while providing a prognosis that allows them to carry out the most suitable treatment. To achieve the main objective, the following specific objectives are proposed: - Develop an intuitive application that can be easily used by a user with a medical profile. - Restrict access to the website only to users registered in the database. - Implement a REST API to facilitate access to the application’s services. - Create functionalities for user management. - Facilitate the user in the treatment and visualization of patients’ medical records. - Enable both bulk importing and exporting of patients. - Implement functionality for conducting and visualizing consultations based on patient variables. - Obtain a patient prognosis using machine learning algorithms. - Allow for expanding the dataset for the learning of prediction models. - Facilitate the visualization of prognoses through graphs. 23 Work plan To carry out the achievement of the objectives proposed in the previous section, deadlines were established for each task. The planning was as follows: Iteration Goal Hours Start date Deadline 1 Requirements specification 15 19/9/22 30/9/22 2 Project planning 5 1/10/22 3/10/22 3 Database design and creation 5 4/10/22 5/10/22 4 Study of technologies 40 6/10/22 11/10/22 5 Basic functional structure 45 12/10/22 21/10/22 6 Administrator management 30 22/10/22 31/10/22 7 Account management 25 1/11/22 7/11/22 8 Patient management 50 8/11/22 5/12/22 9 Query management 50 6/12/22 4/02/23 10 Machine Learning study 40 7/02/23 27/02/23 11 Prediction management 70 28/02/23 31/03/23 12 Data visualization 40 1/04/23 19/04/23 13 Report 60 20/04/23 15/05/23 14 Preparation for the defense 25 16/05/23 Table 1.1. Planification. 24 Report Structure Chapter 1 - Introduction: This chapter explains the motivation behind this project, its objectives, the work plan followed, and the structure of the memory. This chapter is available in both Spanish and English. Chapter 2 - State of the Art: This chapter discusses technologies that currently perform similar or related functions to those of this project. Chapter 3 - Employed Technologies: The technologies used in the development of the application are named and explained in this chapter. Chapter 4 - Requirements Specification: Actors and use cases, which formed the basis for creating the application, are described in this chapter. Chapter 5 - Architecture: The architecture of the web application is described in this chapter. Chapter 6 - Data Model: This section describes the project's database. Chapter 7 - Design: The design of the application, why it is the way it is, and how it has been carried out are described in this chapter. Chapter 8 - Implementation: This section explains the different functionalities of the application, providing descriptions of both the interface and the code. Chapter 9 - Conclusions and Future Work: The conclusions drawn from the work and possible future improvements are described in this chapter. This section is available in both Spanish and English. Personal Contributions: The tasks performed by each individual are presented. Available in both Spanish and English. 25 3.7 Python Python [9] es un lenguaje de programación versátil y de alto nivel que se utiliza ampliamente en diferentes áreas. Su sintaxis legible, su gran gama de bibliotecas y su comunidad activa de desarrolladores lo convierten en una opción popular para el desarrollo de aplicaciones, análisis de datos y proyectos de inteligencia artificial. Para el desarrollo de la API se ha usado Flask [10], un framework web que se utiliza para construir APIs de manera rápida y sencilla. Proporciona las herramientas necesarias para crear aplicaciones web y servicios RESTful. Para la realización de predicciones se ha usado Scikit-learn [11], una biblioteca de aprendizaje automático que ofrece una amplia gama de algoritmos y herramientas para tareas de clasificación, regresión y selección de características. Además, para el tratamiento de datos se ha utilizado Pandas [12], una biblioteca para el análisis de datos. Proporciona estructuras de datos flexibles para manipular y analizar datos de manera sencilla. 3.8 Chart.js Charts.js [13] se trata de una biblioteca JavaScript que permite crear gráficos interactivos y visualmente atractivos en páginas web. Proporciona una gran gama de tipos de gráficos como barras, líneas, áreas... Con Charts.js, se puede personalizar el aspecto de los gráficos, agregar etiquetas, leyendas y animaciones. Es una herramienta flexible y fácil de usar para visualizar datos y comunicar información de manera efectiva en tu sitio web. 32 3.9 DataTables DataTables [14] es una biblioteca de JavaScript que facilita la manipulación y visualización de grandes conjuntos de datos en tablas interactivas en páginas web. Proporciona funcionalidades como búsqueda, paginación y ordenamiento de datos de manera fácil y eficiente. Con DataTables, se pueden agregar características avanzadas a tus tablas, como exportar datos, opciones de personalización e integración con otros complementos. 3.10 Base de datos Para almacenar, organizar y administrar datos se ha usado MySQL [15] , un sistema de gestión de bases de datos relacional que ofrece una sólida capacidad para almacenar datos de manera eficiente y estructurada. MySQL es conocido por ser confiable, escalable y compatible con múltiples plataformas. 3.11 VPS Un VPS es un tipo de servidor virtualizado que funciona en un entorno compartido con su propio sistema operativo y recursos dedicados, como CPU, RAM y almacenamiento asignados de manera exclusiva para cada usuario. Proporciona un mayor control y flexibilidad en comparación con el alojamiento compartido, ya que permite personalizar la configuración y ejecutar aplicaciones y servicios específicos según las necesidades del usuario. En el entorno se han instalado Apache [16], MySQL y Python. Apache para alojar y servir páginas web, mientras que MySQL para almacenar y administrar los datos. Python es un lenguaje de programación que se utiliza para desarrollar aplicaciones web y realizar diversas tareas en el servidor. 33 Capítulo 4 - Especificación de requisitos En este capítulo se explicará la especificación de requisitos del proyecto. 4.1 Actores La aplicación cuenta con dos usuarios distintos: ●Usuario: Personal médico registrado. Podrá realizar todas las funcionalidades (excepto la gestión de usuarios), tales como gestionar sus pacientes, realizar consultas y realizar predicciones. ●Administrador: Actor destinado a la gestión de cuentas de usuario. Además tiene todas las funcionalidades del usuario. 4.2 Casos de uso Figura 1. Diagrama actor usuario. 34 Figura 2. Diagrama actor administrador. A continuación se detallan los casos de uso para cada parte del proyecto. 35 3.2.1 Gestión de cuenta Requisito Iniciar sesión Identificador A1 Prioridad Alta Precondición El usuario debe estar previamente registrado en el sistema. Descripción El usuario se autentica mediante el correo electrónico y una contraseña para poder acceder a la aplicación. Entrada Correo electrónico, Contraseña Salida Página principal. Secuencia normal Paso Acción 1 El usuario introduce su correo electrónico y contraseña. 2 El usuario pulsa el botón “Iniciar Sesión”. 3 El sistema comprueba si la información introducida es correcta. 4 Se muestra la página principal. Postcondición Éxito: El usuario inicia sesión y accede a la funcionalidad de la aplicación. Fallo: Se muestra un mensaje de error y aparece de nuevo el formulario de inicio de sesión. Excepciones Paso Acción 2.a El sistema no encuentra un usuario con los datos introducidos Se muestra un mensaje de error y se vuelve al paso 1. Actores Usuario o Administrador. Tabla 2. Iniciar Sesión. 36 Requisito Cerrar sesión Identificador A2 Prioridad Alta Precondición El usuario debe haber iniciado sesión previamente. Descripción El usuario cierra la sesión de la aplicación. Entrada NA Salida Página de inicio de sesión. Secuencia normal Paso Acción 1 El usuario pulsa el botón de “Cerrar Sesión”. 2 El sistema cierra la sesión y muestra la pantalla de inicio de sesión. Postcondición Éxito: El sistema cierra la sesión y se muestra la pantalla de inicio de sesión. Fallo: Se muestra un mensaje de error y aparece de nuevo el formulario de inicio de sesión. Excepciones Paso Acción 2.a No se ha podido cerrar la sesión. Se muestra un mensaje de error. Actores Usuario o Administrador. Tabla 3. Cerrar Sesión. 37 Requisito Editar perfil Identificador A3 Prioridad Media Precondición El usuario debe estar registrado y debe haber iniciado sesión. Descripción Se edita la información de tu perfil. Entrada Datos del perfil a modificar. Salida NA Secuencia normal Paso Acción 1 Accede a editar perfil a través del desplegable. 2 Aparece un formulario con los datos del usuario. 3 Edita la información necesaria. 4 Pulsa el botón “Guardar”. 5 Se validan los datos introducidos. Postcondición Éxito: Los datos del perfil quedan actualizados. Se vuelve a la pantalla de inicio. Fallo: Muestra mensaje de error. Vuelve al formulario de editar usuario. Excepciones Paso Acción 5.a El sistema no valida los datos introducidos. Muestra mensaje de error y vuelve al paso 3. Actores Usuario o Administrador. Tabla 4. Editar perfil. 38 3.2.1 Gestión del administrador Requisito Añadir usuario Identificador B3 Prioridad Alta Precondición Un usuario con rol de administrador debe haber iniciado sesión. Descripción Se registra un nuevo sanitario como usuario. Entrada Datos del usuario a introducir. Salida NA Secuencia normal Paso Acción 1 Pulsa en el botón “+”. 2 Aparece una pantalla para introducir los datos del usuario. 3 Rellena los datos. 4 Pulsa el botón “Crear”. 5 Se validan los datos introducidos. 6 Se añade el usuario al sistema. Postcondición Éxito: El usuario queda registrado. Fallo: Aparece un mensaje de error y vuelve al formulario de crear usuario. Excepciones Paso Acción 5.a El sistema no valida los datos introducidos. Muestra mensaje de error y vuelve al paso 2. Actores Administrador. Tabla 5. Añadir usuario. 39 Requisito Editar usuario Identificador B4 Prioridad Media Precondición El usuario debe estar registrado y un usuario con rol de administrador debe haber iniciado sesión. Descripción Se edita la información de un usuario. Entrada Datos del usuario a modificar. Salida NA Secuencia normal Paso Acción 1 Accede a la lista de usuarios o encuentra el usuario buscándolo. 2 Pulsa el botón de editar. 3 Aparece un formulario con los datos del usuario. 4 Edita la información necesaria. 5 Pulsa el botón “Guardar”. 6 Se validan los datos introducidos. Postcondición Éxito: Los datos del usuario quedan actualizados. Se vuelve a la pantalla de usuarios. Fallo: Muestra mensaje de error. Vuelve al formulario de editar usuario. Excepciones Paso Acción 5.a El sistema no valida los datos introducidos. Muestra mensaje de error y vuelve al paso 3. Actores Administrador. Tabla 6. Editar usuario. 40 Requisito Eliminar usuario Identificador B5 Prioridad Media Precondición El usuario debe estar registrado y un usuario con rol de administrador debe haber iniciado sesión. Descripción Se elimina la cuenta de un usuario. Entrada NA Salida Mensaje: “Eliminado!”. Secuencia normal Paso Acción 1 Accede a la lista de usuarios o encuentra el usuario buscándolo. 2 Pulsa el botón “Eliminar”. 3 El usuario queda eliminado de la base de datos. Postcondición Éxito: El usuario queda eliminado. Aparece un mensaje informando. Fallo: El usuario no se ha eliminado. Muestra mensaje de error. Excepciones Paso Acción 3.a Hay un error y el usuario no se elimina. Muestra mensaje de error. Actores Administrador. Tabla 7. Eliminar usuario. 41 Requisito Eliminar paciente Identificador C4 Prioridad Media Precondición Un usuario ha iniciado sesión. El paciente a eliminar debe existir en la base de datos. Descripción Se elimina el historial de un paciente. Entrada NA Salida Mensaje: “Eliminado!”. Secuencia normal Paso Acción 1 Accede a la lista de pacientes o encuentra el paciente buscándolo. 2 Pulsa el botón “Eliminar”. 3 El historial del paciente queda eliminado de la base de datos. Postcondición Éxito: El historial del paciente queda eliminado. Se vuelve a la pantalla de pacientes. Fallo: El historial del paciente no se ha eliminado. Muestra mensaje de error. Excepciones Paso Acción 3.a Hay un error y el historial del paciente no se elimina. Muestra mensaje de error. Actores Usuario o Administrador. Tabla 14. Eliminar paciente. 48 Requisito Buscar paciente Identificador C5 Prioridad Media Precondición Un usuario ha iniciado sesión. El paciente debe existir en la base de datos. Descripción Se busca a un paciente a través de un texto o número a buscar. Entrada Texto o número a buscar. Salida Lista de pacientes que coincidan con la búsqueda. Secuencia normal Paso Acción 1 Pulsa en el campo de entrada. 2 Introduce el texto o número a buscar del paciente que desea buscar. 3 Aparece una lista con todos los pacientes que coincidan con la búsqueda. Postcondición Éxito: Aparece una lista con todos los pacientes que coincidan con la búsqueda. Fallo: Muestra un mensaje de error. Excepciones Paso Acción 2.a Hay un error en el sistema. Se muestra un mensaje de error y vuelve a la pantalla en la que se encontraba previamente. 3.a Si no hay pacientes que coincidan con la búsqueda aparecerá un mensaje donde se informe. Actores Usuario o Administrador. Tabla 15. Buscar paciente. 49 Requisito Ver historial médico del paciente Identificador C6 Prioridad Alta Precondición Un usuario ha iniciado sesión. El paciente debe existir en la base de datos. Descripción Se muestra la información del historial médico del paciente seleccionado. Entrada NA Salida Datos del historial del paciente. Secuencia normal Paso Acción 1 Pulsa en el NHIS correspondiente al paciente. 2 Se muestra la información del historial médico del paciente. Postcondición Éxito: Se muestra la información del historial médico del paciente Fallo: Aparece un mensaje de error. Excepciones Paso Acción 2.a Hay un error en el sistema. Se muestra un mensaje de error y vuelve a la pantalla en la que se encontraba previamente. Actores Usuario o Administrador. Tabla 16. Ver historial de un paciente. 50 Requisito Ver lista de pacientes Identificador C7 Prioridad Alta Precondición Un usuario ha iniciado sesión. Descripción Aparece una lista con todos los pacientes registrados en el sistema. Entrada NA Salida Lista de pacientes. Secuencia normal Paso Acción 1 Pulsa en el botón “Pacientes”. 2 Se accede a la base de datos y se muestra una lista con todos los pacientes. Postcondición Éxito: Se muestra una lista con todos los pacientes. Fallo: Aparece un mensaje de error. Excepciones Paso Acción 2.a Hay un error en el sistema. Se muestra un mensaje de error y vuelve a la pantalla en la que se encontraba previamente. 2.b Si no hay pacientes aparecerá un mensaje donde se informe. Actores Usuario o Administrador. Tabla 17. Ver lista de pacientes. 51 Requisito Exportar pacientes Identificador C8 Prioridad Media Precondición El usuario debe estar registrado. Descripción Se exporta la lista de pacientes. Entrada NA Salida Archivo con la lista de pacientes. Secuencia normal Paso Acción 1 Pulsa el botón de exportar. 2 Se exportan los datos de los pacientes. Postcondición Éxito: Se exportan los pacientes. Fallo: Muestra un mensaje de error. Excepciones Paso Acción 2.a Se produce un error al exportar. Muestra un mensaje de error. Actores Usuario o Administrador. Tabla 18. Exportar pacientes. 52 3.2.1 Gestión de consultas Requisito Ejecutar consulta sobre la base de pacientes Identificador D1 Prioridad Alta Precondición El usuario debe haber iniciado sesión en el sistema. Descripción Se realiza una consulta escogiendo una serie de variables a filtrar. Entrada Variables escogidas. Salida Lista de pacientes que cumplan con el filtro aplicado. Secuencia normal Paso Acción 1 Pulsa en el botón “Consultas”. 2 Selecciona las variables que se quieran consultar. 3 Pulsa el botón “Buscar”. 4 Se muestran los datos obtenidos. Postcondición Éxito: Se muestra la lista de pacientes que cumplen las variables de la consulta. Fallo: Se muestra un mensaje de error. Excepciones Paso Acción 4.a Si ningún paciente cumple con la consulta aparece un mensaje donde se informa. Actores Usuario o Administrador. Tabla 19. Ejecutar consulta sobre la base de pacientes. 53 Requisito Exportar resultados de consulta Identificador D2 Prioridad Media Precondición Un usuario ha iniciado sesión y se ha creado una consulta. Descripción La consulta realizada junto a su resultado se exporta en formato .xls (excel) Entrada NA Salida Archivo con la consulta. Secuencia normal Paso Acción 1 Pulsa el botón de exportar. 2 Se exportan los datos de la consulta en formato .xlsx Postcondición Éxito: Se exportan los datos de la consulta. Fallo: No se exporta. Se muestra un mensaje de error. Excepciones Paso Acción 2.a Se produce un error al exportar. Muestra un mensaje de error. Actores Usuario o Administrador. Tabla 20. Exportar resultados de consulta. 54 3.2.1 Gestión de predicciones Requisito Obtener predicción sobre un paciente Identificador E1 Prioridad Alta Precondición Un usuario debe haber iniciado sesión. Descripción Se obtiene la predicción de un paciente. Entrada Historial médico del paciente. Salida Predicción. Secuencia normal Paso Acción 1 Pulsa en el botón “Predicción”. 2 Introduce manualmente el NHIS de un paciente existente. 3 Pulsa el botón “Predecir”. 4 Se muestra la predicción. Postcondición Éxito: Se muestra la predicción. Fallo: No se muestra la predicción. Aparece un mensaje de error. Excepciones Paso Acción 2.a No existe ese NHIS. Muestra mensaje de error. 3.a No se han entrenado los modelos. Muestra mensaje de error. 3.b No se puede realizar la predicción. Muestra mensaje de error. Actores Usuario o Administrador. Tabla 21. Obtener predicción sobre un paciente. 55 Requisito Entrenar modelos de predicción Identificador E2 Prioridad Alta Precondición Un usuario debe haber iniciado sesión. Descripción Se entrenan todos los modelos disponibles. Entrada NA. Salida Entrenamiento de los modelos. Secuencia normal Paso Acción 1 Pulsa en el botón “Entrenar”. 2 Se muestra la puntuación de cada modelo. Postcondición Éxito: Se muestra la puntuación de los modelos. Fallo: Aparece un mensaje de error. Excepciones Paso Acción 2.a Se produce un error y no se realiza el entrenamiento. Actores Usuario o Administrador. Tabla 22. Entrenar modelos de predicción. 56 Requisito Añadir predicción al dataset Identificador E3 Prioridad Alta Precondición Un usuario debe haber iniciado sesión. Descripción Se añade una predicción al conjunto de datos del dataset. Entrada Datos de la predicción a modificar Salida NA Secuencia normal Paso Acción 1 Pulsa en el botón “Sí” o “No” según si la predicción es correcta o no. 2 Se introducen los datos de la predicción correcta en caso de haberse proporcionado una incorrecta. 3 Se añade la predicción al dataset Postcondición Éxito: Se añade la predicción al dataset. Fallo: Aparece un mensaje de error. Excepciones Paso Acción 2.a Ya existe una predicción con ese NHIS y se muestra un mensaje de error. Actores Usuario o Administrador. Tabla 23. Añadir predicción al dataset. 57 Atributo Formato Descripción dni varchar(9) DNI del usuario. Clave foránea única nombre varchar(20) Nombre apellidos varchar(25) Apellidos password varchar(170) Contraseña de la cuenta de usuario rol enum(‘Usuario’,’Administrador’) Rol del usuario email varchar(30) Email de la cuenta para iniciar sesión. Clave foránea única foto varchar(150) Foto de perfil del usuario puesto enum(‘Enfermero’,’Medico’) Puesto del usuario Tabla 27. Tabla usuarios en la base de datos. 6.2 Tabla pacientes Debido a que la aplicación está orientada al seguimiento de los pacientes, es necesario que el usuario pueda acceder a los historiales médicos. Para ello se creó una tabla que almacenara las variables clínicas de cada paciente, utilizadas para llevar un seguimiento, realizar consultas y realizar una predicción de evolución. Se puede añadir un nuevo paciente de varias formas. Del mismo modo que un usuario, se puede añadir a través de un formulario de forma manual. Si se desea añadir varios pacientes, se puede ejecutar importando un Excel donde se alojen todos ellos. La plantilla de Excel puede ser descargada en la web. También es posible editar y eliminar los pacientes. La tabla está conformada por las siguientes variables: 64 Atributo Formato Descripción nhis int(11) Nº historia clínica. Clave primaria única fechacir date Fecha primer diagnóstico clínico (pruebas de imagen) y patológico (RTU) edad int(11) Edad sexo enum(‘Varon’,’Mujer’) Sexo obesidad enum('NC', 'IMC menor 25', 'IMC 25-30', 'IMC mayor 30’) Obesidad hta enum('Sí','No','NC') HTA dm enum('Sí','No','NC') Diabetes Mellitus tabaco enum('NC','No','Exfumador','menos 10 cigarrillos/día','10-20 cigarrillos/día','mas 20 cigarrillos/día') Tabaco hereda enum('Sí','No') Antecedentes familiares expoprofesional enum('Sí','No') Exposición profesional pandemia enum('Sí', 'No') Pandemia clinica enum('Asintomático','Hematuria','Síndro me miccional') Clínica citologias enum('Negativa','Sospechosa','Atipias','P ositiva','Carcinoma urotelial') Citologías numtumores enum('1','2','3','4','5','+5') Número de tumores tamtumoral enum('menos 2 cm','2-5 cm','mas 5 cm') Tamaño tumoral aspectotumoral enum('Papilar','Mixto','Sólido') Aspecto tumoral estadio enum('Ta','T1','T2','T3','T4') Estadio tumoral clínico 65 carcinomainsitu enum('Sí','No') Asociación a carcinoma “in situ” grado enum('G1','G2','G3') Grado tumoral permeacion enum('Sí','No') Permeación vascular carcinomauro enum('Sí','No') Carcinoma urotelial formasapiticas enum('Sí','No') Formas histológicas atípicas primario enum('Sí','No') Primario recidivante enum('Sí','No') Recidivante instilacion enum('No','Sí, inmediata MMC','Sí, inmediata y diferida con MMC','Sí, diferida: BCG, MMC') Instilación previa tac enum('No infiltrante','Dudoso','Infiltrante') Estudio extensión: TAC rtu enum('No','Sí, no infiltrante','Sí, dudoso','Sí, infiltrante') Re-RTU vesical Tabla 28. Tabla pacientes en la base de datos. 6.3 Tabla dataset El dataset está conformado por registros de pacientes y se utiliza para entrenar los modelos de predicción. Los datos deben estar disponibles para realizar el entrenamiento en cualquier momento, por lo que es necesario almacenarlos en una base de datos. Actualmente el dataset está formado por los datos de 75 pacientes. Sin embargo, se puede ampliar importando un Excel formado por los pacientes que se quieran incluir y su predicción, cuya plantilla se encuentra disponible en la web. También es posible añadir un nuevo paciente al dataset a partir de la predicción 66 realizada por el sistema. La tabla está formada por las mismas variables que la tabla de pacientes añadiendo los campos correspondientes a la predicción. Es la siguiente: Atributo Formato Descripción nhis int(11) Nº historia clínica. Clave primaria única fechacir date Fecha primer diagnóstico clínico (pruebas de imagen) y patológico (RTU) edad int(11) Edad sexo enum(‘Varon’,’Mujer’) Sexo obesidad enum('NC', 'IMC menor 25', 'IMC 25-30', 'IMC mayor 30’) Obesidad hta enum('Sí','No','NC') HTA dm enum('Sí','No','NC') Diabetes Mellitus tabaco enum('NC','No','Exfumador','menos 10 cigarrillos/día','10-20 cigarrillos/día','mas 20 cigarrillos/día') Tabaco hereda enum('Sí','No') Antecedentes familiares expoprofesional enum('Sí','No') Exposición profesional pandemia enum('Sí', 'No') Pandemia clinica enum('Asintomático','Hematuria','Síndro me miccional') Clínica citologias enum('Negativa','Sospechosa','Atipias',' Positiva','Carcinoma urotelial') Citologías numtumores enum('1','2','3','4','5','+5') Número de tumores tamtumoral enum('menos 2 cm','2-5 cm','mas 5 cm') Tamaño tumoral 67 aspectotumoral enum('Papilar','Mixto','Sólido') Aspecto tumoral estadio enum('Ta','T1','T2','T3','T4') Estadio tumoral clínico carcinomainsitu enum('Sí','No') Asociación a carcinoma “in situ” grado enum('G1','G2','G3') Grado tumoral permeacion enum('Sí','No') Permeación vascular carcinomauro enum('Sí','No') Carcinoma urotelial formasapiticas enum('Sí','No') Formas histológicas atípicas primario enum('Sí','No') Primario recidivante enum('Sí','No') Recidivante instilacion enum('No','Sí, inmediata MMC','Sí, inmediata y diferida con MMC','Sí, diferida: BCG, MMC') Instilación previa tac enum('No infiltrante','Dudoso','Infiltrante') Estudio extensión: TAC rtu enum('No','Sí, no infiltrante','Sí, dudoso','Sí, infiltrante') Re-RTU vesical recidiva enum('Menores características', 'Mayores características', 'Iguales características', 'No') Recidiva progresiva enum('T', 'N', 'M', 'No') Progresiva exitus enum('Sí', 'No') Éxitus numrecidivas enum('1','2','3','4','5','+5','0') Numero de recidivas evoldesfavorable enum('Sí', 'No') Evolución desfavorable Tabla 29. Tabla dataset en la base de datos. 68 Capítulo 7 - Diseño La aplicación web está orientada a ser usada por personal médico, por lo que su diseño giró en torno a este aspecto. La paleta de colores gira en torno a verde, azul y blanco, tonos característicos de un hospital que transmiten la sensación de pertenecer al mundo sanitario. El verde evoca esperanza y vitalidad, el azul transmite calma y confianza, y el blanco representa higiene y limpieza. Esta combinación crea un ambiente acogedor y reconfortante, mientras refuerza la identidad y profesionalidad del personal médico. Verde: #5FB8B9 Azul: #125872 Blanco: #FFFFFF El diseño de la aplicación se basó en comprender que los usuarios podrían tener poca experiencia en informática. Para ello, se trabajó en diseñar una interfaz que fuera fácil de entender y utilizar. Se evitó la inclusión de elementos complejos o confusos, y se priorizó la simplicidad y la claridad en la disposición de los elementos de la interfaz. La información de los pacientes se muestra en tablas, de forma que los datos son muy visuales y fáciles de entender. A la hora de insertar o modificar un paciente, los distintos valores de cada variable están predefinidos, lo que simplifica la tarea del usuario y evita errores. Se optó por hacer un menú lateral que estuviera presente en todo momento para facilitar la navegación. Esto permite a los usuarios acceder rápidamente a las 69 diferentes secciones de la aplicación sin importar en qué parte se encuentren, lo que simplifica en gran medida la experiencia de usuario. También se crearon botones destacados en la página de inicio. Estos botones proporcionan un acceso directo a las funcionalidades principales de la aplicación, lo que permite a los usuarios iniciar rápidamente las acciones más relevantes. En cuanto a la retroalimentación de errores, se implementó un sistema de notificación que informaba a los usuarios sobre cualquier fallo que pudieran encontrar durante su interacción con la aplicación. Estos mensajes de error se muestran de manera visible y clara, proporcionando detalles sobre el error específico y sugerencias para corregirlo. De esta manera, los usuarios tienen la oportunidad de comprender rápidamente qué salió mal y cómo solucionarlo, sin tener que adivinar o buscar ayuda adicional. 70 Capítulo 8 - Implementación En el presente capítulo se describe la implementación del proyecto, organizado por las distintas funcionalidades de la aplicación. 8. 1 Módulo usuarios 8.1.1 Login Un usuario registrado previamente puede iniciar sesión para así acceder a la aplicación y disfrutar de todas las funcionalidades y características disponibles. Cuando se inicia sesión como se muestra en la figura 5, la API devuelve un JSON Web Token [17] que se enviará en cada petición para asegurar que el usuario está registrado y dispone de privilegios suficientes para realizar dicha acción. Este token expira en 120 minutos. Figura 5. Inicio de sesión en ProgBladder. 71 En el caso de introducir un email o contraseña incorrecta la aplicación mostrará, al igual que en la figura 6, un mensaje de error indicando que no ha podido iniciar sesión por un usuario o contraseña incorrectos. Figura 6. Inicio de sesión con usuario o credenciales incorrectas. 72 En las figuras 7 y 8 se muestra la implementación de la funcionalidad de login. Figura 7. Implementación de inicio de sesión en PHP. Figura 8. Implementación de inicio de sesión en la API. Tal y como se ha descrito anteriormente, se comprueba que el hash almacenado en la base de datos corresponde con la contraseña hasheada. Si 73 En la página Añadir usuario, es necesario rellenar los datos del usuario a añadir, como en la figura 18. Estos son su DNI, Nombre, Apellidos, Contraseña, Rol, Email y Puesto. Los datos anteriores son obligatorios, mientras que la imagen de perfil es opcional. En caso de no introducir ninguna se creará el usuario con una imagen por defecto. Figura 18. Formulario de añadir usuario. Para poder añadir un nuevo usuario, es necesario que se cumplan una serie de restricciones. En caso contrario no se podrá enviar el formulario y se mostrará el error correspondiente. Algunas de estas restricciones son DNI correcto, nombre y apellidos mayores a dos caracteres y sin caracteres especiales, email con formato de correo electrónico, 80 contraseña de al menos ocho caracteres, las contraseñas deben coincidir y el archivo subido debe ser una imagen. En la figura 19 se observa cómo se muestran los errores. Figura 19. Formulario de añadir usuario con errores. Una vez rellenados los datos necesarios, al pulsar en el botón “Guardar” situado al final del formulario, se realizará una petición POST a la API en /usuarios y si los datos son correctos, el usuario será añadido a la base de datos y se redirigirá a la página de principal de usuarios. En cuanto a la implementación, como se muestra en la figura 20, en primer lugar se comprueba si se ha subido una imagen. En caso afirmativo, se comprueba el tipo de fichero subido, si es una imagen se guarda. En el caso de no insertar imagen, se establece a la imagen por defecto. En segundo lugar se realiza una segunda verificación de los datos introducidos y en caso de ser correctos se añade a la base de datos. 81 Figura 20. Implementación añadir usuario. 8.1.5 Editar usuario Para editar un usuario es necesario acceder a través del botón verde de la columna “Acciones” en la sección de usuarios. Para poder realizar esta acción es necesario disponer de privilegios de administrador. Se observa en la figura 21. Figura 21. Vista usuarios (Editar Usuario). 82 En la página Editar perfil, como aparece en la figura 22, se permite cambiar su imagen de perfil, nombre, apellidos, email, la contraseña, rol y puesto. Figura 22. Editar usuario. Para poder editar un usuario es necesario que se cumplan una serie de restricciones. En caso contrario, no se podrá enviar el formulario y se mostrará el error correspondiente. Algunas de estas restricciones son nombre y apellidos mayores a dos caracteres sin caracteres especiales, email con formato de correo electrónico, contraseña de al menos ocho caracteres, las contraseñas deben coincidir y el archivo subido debe ser una imagen. 83 En la figura 23 se muestra el formulario con errores. Figura 23. Editar usuario con errores. Una vez rellenados los datos necesarios, al pulsar en el botón “Guardar” situado al final del formulario, se realizará una petición PUT a la API en /usuario y si los datos son correctos, el usuario será actualizado en la base de datos y se redirigirá a la página de principal de usuarios. En cuanto a la implementación, como vemos en la figura 24, en primer lugar se comprueba si se ha subido una imagen. En caso afirmativo se comprueba el tipo de fichero subido, si es una imagen se guarda. En el caso de no insertar imagen, se establece a la imagen por defecto. En segundo lugar se realiza una segunda verificación de los datos introducidos y en caso de ser correctos se actualiza el perfil en la base de datos. 84 Figura 24. Implementación de Editar usuario. 8.1.6 Eliminar usuario Para eliminar un usuario es necesario acceder a través del botón rojo de la columna “Acciones” en la sección de usuarios, como se muestra en la figura 25. Para poder realizar esta acción es necesario disponer de privilegios de administrador. Figura 25. Vista usuarios (Eliminar Usuario). 85 Tras pulsar el botón de eliminar usuario se abre una ventana emergente que nos pregunta si estamos seguros de si queremos eliminar ese usuario, como se puede observar en la figura 26 . Figura 26. PopUp Eliminar usuario. Al pulsar en el botón “Eliminar”, se realizará una petición DELETE a la API en /usuario en la que el usuario será eliminado de la base de datos, se mostrará un pop-up con el mensaje “Eliminado!”, como en la figura 27, y se redirigirá a la página de usuarios. Figura 27. PopUp usuario eliminado. 86 En cuanto a la implementación, que observamos en las figuras 28 y 29, en primer lugar se muestra el código en jQuery en el que se usa la biblioteca Sweet Alert [18] para creación de pop-ups. Se muestra el primer pop-up, si se pulsa en “Eliminar” se realiza la petición GET a procesarEliminarUsuario.php con el parámetro dni, dicho script es el que realiza la petición a la API, tras esto el usuario se elimina y se muestra el mensaje de “Eliminado!” y se redirige a la página principal de usuarios. Figura 28. Implementación Eliminar usuario(jQuery). 87 Figura 29. Implementación Eliminar usuario(API). 8.1.7 Ver lista de usuarios Para ver la lista de usuarios es necesario acceder a la sección de usuarios como se muestra en la figura 30. Para poder realizar esta acción es necesario disponer de privilegios de administrador. Figura 30. Vista de usuarios. En la página Usuarios se permite al usuario administrador ver la informacion de todos los usuarios (imagen de perfil, nombre, apellidos, email, rol y puesto) a excepción de la contraseña por motivos de privacidad. Esta página permite ordenar por orden alfabético el DNI, Nombre, Apellidos, Email y puesto, además de ajustar la cantidad de usuarios a mostrar por página. 88 También tiene la posibilidad de elegir una vista en tarjetas pulsando en el botón superior derecho como se puede ver en la figura 31. Figura 31. Vista de usuarios en tarjetas. En cuanto a la implementación, tal y como se muestra el código en jQuery en la figura 32, se usa la biblioteca DataTables para creación de tablas dinámicas. Este código incluye la funcionalidad de cambiar la tabla en tarjetas. Cada vez que se accede a la página usuarios se realizará una petición GET a la API en /usuarios cuya implementación se observa en la figura 33. 89 Se facilita la importación de nuevos pacientes a través de una plantilla de Excel, la cual se puede descargar en la aplicación. Cuando la plantilla se haya rellenado, se deberá dar al botón “Seleccionar archivo” y acto seguido al botón “Importar”. Para que la importación se realice de forma satisfactoria, se deben completar todos los campos del Excel. En caso de que haya algún dato incorrecto, vacío o el archivo importado sea erróneo, saltará el error correspondiente como se muestra en las figuras 43, 44 y 45. Figura 43. Importar pacientes con error de formato. Figura 44. Importar pacientes con error de columnas. 96 Figura 45. Importar pacientes con error de datos. La plantilla en Excel está alojada en el servidor de Python y es la siguiente: Plantilla importar pacientes Al pulsar el botón “Importar” se envía el formulario al script auxiliar “importarPacientes.php” como se observa en la figura 46, el cual hace una petición POST a la API para importar los nuevos registros. Figura 46. Implementación de importar pacientes. En la API se crea un dataframe leyendo los datos del Excel importado, como se puede observar en la figura 47. A continuación, se realiza una validación de los datos para asegurar que son correctos, cuya implementación se muestra en la figura 48. Se 97 comprueba la existencia de todas las columnas exigidas y se validan los datos de cada variable a través de su función correspondiente alojada en api/validar.py. Figura 47. Implementación de importar pacientes. Figura 48. Implementación de importar pacientes. Una vez que los datos han sido validados, se hacen las transformaciones necesarias para incluirlos en la base de datos. Si ya existe un paciente en la base de datos con el mismo número de historial, se realiza una consulta UPDATE para actualizar 98 los valores, y si es un nuevo número de historial, se realiza un INSERT para crear un nuevo registro. Para esta funcionalidad se ha usado Pangres [19]. 8.2.3 Editar paciente Para editar un paciente es necesario acceder a través del botón verde de la columna “Acciones” en la sección de pacientes como se muestra en la figura 49. Figura 49. Vista pacientes (Editar paciente). En la página Editar paciente se permite al usuario cambiar todos los datos del paciente, tal y como se observa en la figura 50. Figura 50. Editar paciente. 99 Para poder editar un paciente es necesario que se cumplan una serie de restricciones. En caso contrario, no se podrá enviar el formulario y se mostrará el error correspondiente. En la figura 51 se muestra el formulario con errores. Figura 51. Editar paciente con errores. Una vez rellenados los datos necesarios, al pulsar en el botón “Guardar” situado al final del formulario, se realizará una petición PUT a la API en /paciente y si los datos son correctos, el paciente será actualizado en la base de datos y se redirigirá a la página de principal de pacientes. En cuanto a la implementación, que se puede observar en la figura 52, en primer lugar se comprueba si los datos introducidos son correctos o si existe un paciente con ese número de historial. En caso de ser incorrectos se devuelve el error correspondiente y en caso de ser correctos se actualiza de la base de datos. Figura 52. Implementación de Editar paciente. 100 8.2.4 Eliminar paciente Para eliminar un paciente es necesario acceder a través del botón rojo de la columna “Acciones” en la sección de pacientes, como se muestra en la figura 53. Figura 53. Vista pacientes (Eliminar paciente). Tras pulsar el botón de eliminar paciente, se abre una ventana emergente que nos pregunta si estamos seguros de si queremos eliminar ese paciente, como se puede observar en la figura 54 . Figura 54. PopUp Eliminar paciente. 101 Al pulsar en el botón “Eliminar” se realizará una petición DELETE a la API en /paciente en la que el paciente será eliminado de la base de datos, se mostrará un pop-up con el mensaje “Eliminado!” como se muestra en la figura 55, y finalmente se redirigirá a la página de pacientes. Figura 55. PopUp paciente eliminado. En cuanto a la implementación observada en la figura 56, en primer lugar se muestra el código en jQuery en el que se usa la biblioteca Sweet Alert para creación de pop-ups. Se muestra el primer pop-up, si se pulsa en “Eliminar” se realiza la petición GET a procesarEliminarPaciente.php con el parámetro nhis. Dicho script es el que realiza la petición a la API, cuya implementación se muestra en la figura 57. Tras esto, el paciente se elimina, se muestra el mensaje de “Eliminado!” y se redirige a la página principal de pacientes. 102 Figura 56. Implementación Eliminar paciente(jQuery). Figura 57. Implementación Eliminar paciente(API). 103 8.2.5 Ver lista de pacientes Para ver la lista de pacientes es necesario acceder a la página de pacientes como se muestra en la figura 58. Figura 58. Vista de pacientes. En la página Pacientes se permite al usuario ver la informacion de todos los pacientes. Esta página permite ordenar por orden alfabético cada una de las variables de los pacientes, además de ajustar la cantidad de usuarios a mostrar por página. En cuanto a la implementación se muestra el código en jQuery en la figura 59, en el que se usa la biblioteca DataTables para creación de tablas dinámicas. Cada vez que se accede a la página pacientes se realizará una petición GET a la API en /pacientes cuya implementación se muestra en la figura 60. 104 Figura 59. Implementación de ver pacientes. 105 Figura 68. Realizar consulta. Para implementar el formulario de la consulta, se ha utilizado bootstrap para crear los desplegables y los input de cada variable. Observamos una parte en la figura 69. Figura 69. Fragmento de código - Formulario consultas. 112 El formulario es enviado a consultas.php. En este script se recogen las variables seleccionadas y se llama a la función “procesar” de consultas.php. En esta última función se hace una petición POST a la API para obtener los datos de los pacientes requeridos en formato JSON, como se muestra en la figura 70. Figura 70. Fragmento de código - Petición consulta a la API. En la API se crea una query a partir de las variables escogidas, y se realiza la petición a la base de datos. La función devuelve el resultado en formato JSON. 8.3.2 Visualizar consulta A continuación, tras pulsar el botón “Consultar” aparecerá una tabla como en la figura 71 con la respuesta de la consulta, es decir, todos los pacientes que cumplen con los requisitos exigidos. El usuario podrá elegir qué campos desea que aparezcan en la tabla, seleccionando y deseleccionando las variables que aparecen encima de la tabla. También podrá hacer una búsqueda dentro de dicha tabla, de forma que se mostrarán las coincidencias en cualquiera de las variables. 113 Figura 71. Resultado consulta. Por defecto aparecen 10 pacientes en cada página de la tabla. En la parte inferior, como se muestra en la figura 72, el usuario podrá avanzar y retroceder en las páginas, además de elegir cuántos pacientes desea que se muestren en cada una. Figura 72. Visualización tabla consulta. 114 Para implementar la tabla se ha utilizado Datatables. Tras recibir el resultado de la petición a la API, en la función este se procesa y se crea la tabla. A continuación, se añaden los campos y los valores para cada paciente, como en la figura 73. Figura 73. Fragmento de código - Tabla consultas. El filtro situado encima de la tabla se ha realizado en main.js, como la figura 74. Figura 74. Fragmento de código - Filtro tabla consultas. 115 8.3.3 Exportar resultados de consulta Una vez se ha obtenido el resultado de la consulta, se puede exportar la tabla en formato Excel (.xlsx) pulsando el botón verde situado en la parte superior, lo que se muestra en la figura 75. Figura 75. Botón exportar consulta. Se ha implementado en main.js, como en la figura 76. Figura 76. Fragmento de código - Exportar consulta. 116 8.4 Módulo predicciones El objetivo principal de este módulo es, a partir de las variables médicas de un paciente, predecir su pronóstico. El pronóstico está formado por cinco campos: recidiva, progresiva, éxitus, número de recidivas y evolución desfavorable. 8.4.1 Modelos de predicción Para realizar la predicción, se han utilizado cinco algoritmos distintos: Random Forest, Regresión Logística, K-Vecinos más Cercanos, Naive Bayes y SVM. La eficacia de cada modelo dependerá del tipo de dato que prediga y el tamaño y calidad del dataset. Por lo tanto, es conveniente escoger el algoritmo que ofrezca una mayor precisión en cada momento. A continuación se explicará cada algoritmo utilizado. 8.4.1.1 Random Forest Random Forest [32], cuyo esquema observamos en la figura 77, es un algoritmo de aprendizaje automático basado en la combinación de múltiples árboles de decisión para realizar clasificación. Es un método de ensamble, lo que significa que construye un conjunto de modelos individuales y combina sus predicciones para obtener al final una predicción más precisa. 117 Figura 77. Algoritmo Random Forest [27]. 8.4.1.2 Regresión Logística La Regresión Logística Multinomial [33], mostrada en la figura 78, utiliza un enfoque “uno contra el resto”, es decir, para cada categoría se entrena un modelo separado que compara esa con todas las demás. El algoritmo estima los coeficientes de cada variable independiente para cada modelo. Al realizar predicciones con este modelo, se calculan las probabilidades de pertenecer a cada una de las categorías y luego se clasifica la instancia en la categoría con probabilidad más alta. Figura 78. Algoritmo Regresión Logística [28]. 118 8.4.1.3 K-Vecinos más Cercanos [34] Su funcionamiento se basa en la idea de que las instancias similares tienden a tener valores similares. Dado un conjunto de datos de entrenamiento con etiquetas conocidas, KNN clasifica nuevos puntos de datos según la cercanía de los vecinos más cercanos. Se observa de forma más visual en la figura 79. Figura 79. Algoritmo K-Vecinos [29]. 8.4.1.4 Naive Bayes Este algoritmo [35], mostrado en la figura 80, se basa en el teorema de Bayes y asume que las características son independientes entre sí dadas las etiquetas de clase. Aunque es simplista, el algoritmo es rápido y funciona bien para conjuntos de datos pequeños. Figura 80. Algoritmo Naive Bayes [30]. 119 8.4.1.5 SVM SVM [36], o Máquinas de Vectores de Soporte, es un algoritmo de aprendizaje automático que en este caso utilizamos para clasificación. Su objetivo es encontrar un hiperplano óptimo que separe los puntos de datos en diferentes clases de manera más efectiva, maximizando el margen entre las clases. Lo vemos en la figura 81. Figura 81. Algoritmo SVM [31]. 8.4.2 Entrenamiento de modelos Para poder realizar una predicción, primero los modelos han de estar entrenados a partir de los datos del dataset. En la página de predicciones se puede observar la fecha del último entrenamiento, que aparecerá como “Nunca ha sido entrenado” si no se han entrenado previamente. A continuación, aparece cada algoritmo junto a la puntuación de la precisión obtenida al entrenar cada variable, donde 0 es la menor precisión y 1 exactitud. Para entrenar los modelos, el usuario deberá pulsar el botón “Entrenar” y automáticamente se actualizarán los valores. Lo vemos en la figura 82. 120 Figura 82. Entrenamiento modelos de predicción. Al pulsar el botón “Entrenar”, con jquery se hace una llamada al script auxiliar entrenarAuxiliar.php, como se muestra en la figura 83, encargado de ejecutar una petición a la API para entrenar los modelos y recoger sus precisiones, como en la figura 84. Figura 83. Fragmento de código - Botón entrenar. 121 Figura 94. Página Predicciones - Error introducir NHIS. Figura 95. Página Predicciones - Error introducir NHIS válido. 128 Figura 96. Página Predicciones - Error entrenar antes de predecir. En cuanto a la implementación de la funcionalidad, al pulsar el botón “Predecir”, con jquery se comprueban los valores de las variables que el usuario tiene que introducir para ejecutar los errores si es necesario. Se ve en la figura 97. Figura 97. Fragmento de código - Botón predecir. 129 Acto seguido se hace una llamada al script auxiliar predecirAuxiliar.php, mostrado en la figura 98, el cual se encarga de realizar una petición a la API para ejecutar la predicción, como vemos en la figura 99. Figura 98. Fragmento de código - Llamada a predecirAuxiliar.php. Figura 99. Fragmento de código - Petición predecir a la API. En la función “predecir_df” de la API, mostrada en la figura 100, se realiza una consulta a la base de datos para obtener un dataframe con todas las variables del paciente con el número de historial introducido. A continuación se hace una llamada a la función “predecir_nhis(df, modelo)” del script en python dedicado a las predicciones. 130 Figura 100. Fragmento de código - Función predecir de la API. En la última función mencionada, se debe transformar el dataframe para poder ser utilizado. Para ello realizamos un procedimiento similar al de la limpieza de datos de entrenamiento. Eliminamos las columnas “nhis” y “fechacir”. Después, usamos los codificadores creados en el entrenamiento para convertir los nuevos datos a números, lo que se muestra en la figura 101. Cabe destacar que los argumentos utilizados en la creación de los codificadores estaban orientados a asegurar el correcto funcionamiento de las predicciones. El argumento "handle_unknown" indica cómo manejar las categorías desconocidas que no se encuentran en los datos de entrenamiento. Si se establece en "use_encoded_value", se asignará un valor codificado a las categorías desconocidas. El argumento "unknown_value" especifica el valor que se utilizará para representar las categorías desconocidas. De este modo, si se introduce un valor en alguno de los campos que no ha aparecido en el entrenamiento, se codificará con valor -1. Figura 101. Fragmento de código - Codificadores. 131 El siguiente paso es realizar la predicción de cada variable con el algoritmo escogido. En el caso de elegir “Todos”, como muestra la figura 102, se comprueba cuál es el modelo con mayor puntuación en cada caso, y se predice cada variable utilizando el idóneo. Tras obtener la predicción, se realiza una decodificación para obtener datos legibles. Figura 102. Fragmento de código - Predecir con todos los modelos. 8.4.4 Exportar resultados de la predicción Tras realizar una predicción, se observa un botón rojo con el logo de PDF, lo que vemos en la figura 103. Pulsando en él, el usuario podrá exportar los datos del paciente junto a la predicción realizada en formato pdf. 132 Figura 103. Exportar predicción. El formato del PDF es el siguiente: Plantilla exportar PDF Para realizar la exportación, desde jQuery se realiza una llamada, como se muestra en la figura 104, al script auxiliar “exportar.php”, encargado de hacer una petición a la API para obtener los datos del paciente del cual se ha realizado la predicción, como vemos en la figura 105. En la API, según se observa en las figuras 106 y 107, se realiza una transformación de los datos para adaptar los provenientes de la consulta a la base de datos y que sean más visuales en el PDF. Una vez obtenidos los datos correspondientes, se rellenan los datos en una plantilla con marcadores mediante DocxTemplate [20], y mediante la API de ConvertAPI [21] se exporta el .doc a un .pdf devuelto por JSON codificado en Base64. 133 Figura 104. Fragmento de código - Botón exportar predicción. Figura 105. Fragmento de código - Petición exportar a la API. Figura 106. Fragmento de código - Función exportar de la API. Figura 107. Fragmento de código - Función exportar de la API 2. 134 8.4.5 Importar dataset El dataset actual está formado por 75 registros. A pesar de que realiza correctamente las predicciones, es relativamente pequeño para asegurar su completa efectividad. Por ello, es un punto importante la ampliación del dataset en el futuro por parte del usuario. Se facilita la importación de nuevos datos para el dataset a través de una plantilla de Excel, la cual se puede descargar en la aplicación. Cuando la plantilla se haya rellenado, se deberá dar al botón “Seleccionar archivo” y acto seguido al botón “Importar”. Se observa en la figura 108. Figura 108. Exportar dataset. Para que la importación se realice de forma satisfactoria, se deben completar todos los campos del Excel. En caso de que haya algún dato incorrecto, vacío o el archivo importado sea erróneo, saltará el error correspondiente, los cuales se muestran en las figuras 109, 110, 111 y 112. 135 Figura 109. Error exportar dataset - Formato. Figura 110. Error exportar dataset - Columnas esperadas. Figura 111. Error exportar dataset - Datos incorrectos. 136 Figura 112. Error exportar dataset - Introducir todos los datos. La plantilla en Excel está alojada en la API y es la siguiente: Plantilla importar dataset Como se muestra en la figura 113, al pulsar el botón “Importar” se envía el formulario al script auxiliar “importarDataset.php”, el cual hace una petición POST a la API para importar los nuevos registros. Figura 113. Fragmento de código - Petición importardataset a la API. En la API, como aparece en la figura 114, se crea un dataframe leyendo los datos del Excel importado. A continuación se realiza una validación de los datos para asegurar que son correctos, lo cual se ve en la figura 115. Se comprueba la existencia de todas las columnas exigidas y se validan los datos de cada variable a través de su función correspondiente alojada en validar.py. 137 Figura 127. Fragmento de código - Función visualizar de la API 2. Figura 128. Fragmento de código - Función visualizar_inicio de la API. Una vez se han obtenido todos los resultados, para que los valores iguales adquieran el mismo orden y color en las dos gráficas de cada variable, es necesario que ambos conjuntos de datos tengan los mismos valores y el mismo orden. Para conseguir lo primero, se comprueba que ambos conjuntos de datos tienen los mismos 144 valores, y si no es así se añaden con conteo a 0. Tras ello, se ordenan alfabéticamente para asegurar que el orden es exactamente igual y por tanto las gráficas se puedan comparar fácilmente de forma visual. Tras esto, se crean las gráficas más adecuadas para cada variable, como se muestra en las figuras 129 y 130. Se han utilizado gráficas de barras y de doughnut. Charts.js permite cambiar el tamaño, color, posición de la leyenda, y múltiples ajustes más. Pulsando sobre un valor en la leyenda este se oculta, de forma que se pueden observar los valores que el usuario desee en las gráficas. Figura 129. Fragmento de código - Creación gráfica de barras. 145 Figura 130. Fragmento de código - Creación gráfica doughnut. Las gráficas de la página de predicciones son las mostradas en las figuras 131, 132, 133, 134, 135, 136, 137 y 138. Figura 131. Gráfica edad. 146 Figura 132. Gráfica sexo. Figura 133. Gráfica tabaco. 147 Figura 134. Gráfica obesidad. Figura 135. Gráfica tamaño tumoral. Figura 136. Gráfica número de tumores. 148 Figura 137. Gráfica estadio tumoral clínico. Figura 138. Gráfica grado tumoral. 149 Capítulo 9 - Conclusiones y trabajo futuro 9.1 Conclusiones En este trabajo se ha diseñado y desarrollado una aplicación web funcional que permite la gestión y seguimiento de historiales médicos de pacientes relacionados con el cáncer de vejiga para así realizar predicciones sobre su evolución futura. Además, se ha desarrollado un módulo de gestión de usuarios que permite a los profesionales del ámbito sanitario crear y administrar cuentas de usuario, otorgando acceso a la herramienta. Las distintas funcionalidades de la aplicación pueden ayudar enormemente al personal médico en su diagnóstico. Además, a través de las gráficas se pueden observar tendencias de forma muy visual y sencilla. A pesar de contar con un dataset relativamente pequeño, las predicciones se realizan correctamente. Ofrece resultados lógicos acordes con los historiales clínicos de los pacientes. Por lo tanto, la aplicación está disponible para su uso en la actualidad, y mejorará a medida que se inserten más datos en el sistema. Se puede descargar el código fuente de la aplicación a través de GitHub: https://github.com/gfoydp/TFG Se puede acceder a la aplicación en línea a traves del siguiente enlace: https://progbladder.ga 150 9.2 Trabajo futuro 9.2.1 Recopilación de más datos El dataset está formado por los datos de 75 pacientes, por lo que se trata de una muestra insuficiente para un modelo de aprendizaje efectivo. Es recomendable la recopilación de más datos para enriquecer y mejorar la precisión de las predicciones proporcionadas por la aplicación. Cuantos más datos se disponga, se podrán obtener mejores insights y patrones, lo que puede conducir a una mayor efectividad en la detección temprana y el tratamiento de esta enfermedad. 9.2.2 Responsive Sería recomendable hacer que la aplicación sea completamente responsive, es decir, que se adapte de manera óptima a diferentes dispositivos y tamaños de pantalla. Esto permitirá a los usuarios acceder y utilizar la aplicación de manera conveniente desde cualquier dispositivo, ya sea un ordenador de escritorio, una tablet o un teléfono móvil. La implementación de un diseño responsive asegurará una experiencia de usuario consistente y de calidad, sin importar el dispositivo utilizado, lo que contribuirá a una mayor usabilidad y satisfacción de los usuarios 9.2.3 Aplicación móvil Sería interesante considerar la creación de una aplicación móvil y tablet complementaria a la aplicación web existente. Dado que ya se ha desarrollado una API sólida como parte de este trabajo, gran parte del trabajo inicial ya estaría completado. Esto facilitaría la adaptación de la funcionalidad existente a una experiencia móvil y tablet, permitiendo a los usuarios acceder y utilizar la aplicación de forma conveniente desde sus dispositivos móviles. 151 9.2.4 Reconocimiento de lenguaje natural Actualmente se inserta un paciente a partir de las variables establecidas. Es necesario que el usuario rellene un formulario o complete un Excel, cosa que puede llevar bastante tiempo. Mediante la implementación de un sistema de reconocimiento de lenguaje natural similar a Savana, sería posible que el usuario adjuntase un historial médico y la propia aplicación reconociera las variables que necesita para realizar la predicción. De este modo se ahorraría tiempo y su uso sería mucho más sencillo. 9.2.5 Redes neuronales Se podría considerar la implementación de redes neuronales para mejorar la precisión de las predicciones en el ámbito del cáncer de vejiga. Estas redes pueden identificar patrones complejos en los datos médicos y proporcionar una atención más precisa y personalizada. 152 Conclusions and future work Conclusions In this work, a functional web application has been designed and developed that allows the management and tracking of medical records of patients related to bladder cancer in order to make predictions about their future progression. Furthermore, a user management module has been developed that enables healthcare professionals to create and manage user accounts, granting access to the tool. The various functionalities of the application can greatly assist medical personnel in their diagnosis. Additionally, trends can be observed through the graphical representations in a very visual and straightforward manner. Despite having a relatively small dataset, the predictions are made accurately. The application provides logical results consistent with the patients' clinical histories. Therefore, the application is currently available for use and will improve as more data is entered into the system. The source code of the application can be downloaded from GitHub: https://github.com/gfoydp/TFG The application can be accessed online through the following link: https://progbladder.ga 153