Download Sistema basado en Web para el seguimiento y evaluación de
Document related concepts
no text concepts found
Transcript
ESCUELA TÉCNICA SUPERIOR EN INGENIERÍA INFORMÁTICA INGENIERÍA TÉCNICA DE INFORMÁTICA DE GESTIÓN Sistema basado en Web para el seguimiento y evaluación de pacientes con Hemofilia en la provincia de Málaga Realizado por: DOLORES JIMÉNEZ COBOS Dirigido por: DR. OSWALDO TRELLES SALAZAR ING. MAXIMILIANO GARCÍA OLIVER UNIVERSIDAD DE MÁLAGA ARQUITECTURA DE COMPUTADORES MÁLAGA, FEBRERO 2008 UNIVERSIDAD DE MÁLAGA ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA INFORMÁTICA INGENIERÍA TÉCNICA DE INFORMÁTICA DE GESTIÓN Reunido el tribunal examinador en el día de la fecha, constituido por: Presidente Dº/Dª.________________________________________________________ Secretario Dº/Dª._________________________________________________________ Vocal Dº/Dª.____________________________________________________________ para juzgar el proyecto Fin de Carrera titulado: SISTEMA BASADO EN WEB PARA EL SEGUIMIENTO Y EVALUACIÓN DE PACIENTES CON HEMOFILIA EN LA PROVINCIA DE MÁLAGA del alumno Dº/Dª. Dolores Jiménez Cobos dirigido por Dº/Dª. Dr. Oswaldo Trelles Salazar, Ing. Maximiliano García Oliver ACORDÓ POR __________________ OTORGAR LA CALIFICACIÓN DE: ______________________ Y PARA QUE CONSTE, SE EXTIENDE FIRMADA POR LOS COMPARECIENTES DEL TRIBUNAL, LA PRESENTE DILIGENCIA. Málaga, a El Presidente El Secretario de del 200__ El Vocal A mi familia, porque a ellos se lo debo todo. A Juanma por su ayuda, por apoyarme en todo momento y por ser tan especial en mi vida. A mis amigos, en especial a Belén, Godino, Almudena, Gabriel, Víctor, Rita, Carlos y Alex por compartir conmigo tantos buenos momentos. A Mª Eva por pensar en mi para este proyecto. A Oswaldo y a Max por su ayuda y por confiar en mí. ÍNDICE Capítulo 1: Introducción…………………………………………………...………... 1 1.1 Motivación………………………………………………………………………… 2 1.2 Objetivos…………………………………………………………………………... 4 1.3 Métodos y fases de trabajo……………………………………………………….... 5 1.4 Base de datos………………………………………………………………………. 6 1.5 Aplicación HemoGest……………………………………………………………... 7 1.6 Descripción de la memoria………………………………………………................10 Capítulo 2: Fundamentos Tecnológicos………………………………………….… 11 2.1 Introducción……………………………………………………………………..… 12 2.2 Base de datos……………………………………………………………………… 12 2.3 Programación en PHP………………………………………………………….…. 17 2.3.1 Introducción…………………………………………………………............. 17 2.3.2 Tareas principales…………………………………………………………… 17 2.3.3 Sintaxis PHP………………………………………………………………... 18 2.4 Programación en Javascript………………………………………………………. 23 2.4.1 Introducción………………………………………………………………… 23 2.4.2 Sintaxis Javascript…………………………………………………………... 24 2.5 Hojas de estilos……………………………………………………………………. 29 2.5.1 Introducción…………………………………………………………………. 29 2.5.2 Sintaxis……………………………………………………………………… 30 2.6 Ejemplos de ejecución…………………………………………………………….. 35 2.6.1 PHP………………………………………………………………………….. 35 2.6.2 Javascript……………………………………………………………………. 39 2.6.3 CSS…………………………………………………………......................... 42 Capítulo 3: Análisis. Lenguaje de Modelamiento Unificado……………………... 45 3.1 Introducción……………………………………………………………………….. 46 3.2 Casos de uso………………………………………………………………………. 46 3.2.1 Descripción de la técnica…………………………………………………… 46 3.2.2 Diagramas de casos de uso del proyecto……………………………………. 48 3.3 Diagramas de clases…………………………………………………………….… 53 3.3.1 Descripción de la técnica……………………………………………………. 53 3.3.2 Diagramas de clases del proyecto……………………………………………54 3.4 Diagramas de interacción…………………………………………………………. 69 3.4.1 Descripción de la técnica……………………………………………………. 69 3.4.2 Diagramas de secuencia del proyecto………………………………………..71 3.5 Diagramas de transición de estados……………………………………………….. 77 3.5.1 Descripción de la técnica……………………………………………………. 77 3.5.2 Diagramas de transición de estados del proyecto…………………………… 80 Capítulo 4: Diseño. Modelo E/R en MySQL ……..................................................... 83 4.1 Introducción……………………………………………………………………….. 84 4.2 Modelo Entidad-Relación…………………………………………………………. 84 4.2.1 Conceptos modelo entidad-relación………………………………………… 84 4.2.2 Modelo Entidad-Relación……………………………………………………85 4.3 Acceso a la Base de Datos………………………………………………………… 90 4.3.1 Modelo de acceso………………………………………….………………... 90 4.3.2 Clase CMySQL……………………………………………………………... 91 4.3.3 Transacciones e integridad referencial……………..……………………….. 92 Capítulo 5: Implementación Aplicación Web…………………………………….. 95 5.1 Introducción……………………………………………………………………… 96 5.2 Sistema de autenticación…………………………………………………………. 96 5.3 Nociones básicas…………………………………………………………………. 97 5.4 Zona administración…………………………………………………………….... 99 5.4.1 Usuarios……………………………………………………………………. 99 5.4.2 Sistema……………………………………………………………………... 102 5.4.3 Tratamientos……………………………………………………………….. 103 5.5 Zona usuarios…………………………………………………………………….. 105 5.5.1 Nuevo paciente…………………………………………………………….. 107 5.5.2 Modificar paciente…………………………………………………………. 108 5.5.3 Buscar pacientes…………………………………………………………… 109 5.5.4 Estadísticas………………………………………………………………….110 5.5.5 General……………………………………………………………………... 112 5.5.6 Tratamientos……………………………………………………………….. 113 5.5.7 Análisis…………………………………………………………………….. 116 5.5.8 Articulaciones……………………………………………………………… 119 5.5.9 Inhibidores…………………………………………………………………. 122 5.5.10 Inmunotolerancias………………………………………………………… 125 5.5.11 Cuestionarios……………………………………………………………... 128 5.5.12 Informes…………………………………………………………………... 131 Capítulo 6: Conclusiones…........................................................................................ 133 6.1 Resultados y conclusiones……………………………………………………….. 134 6.2 Trabajos futuros………………………………………………………………….. 137 ANEXOS….................................................................................................................. 138 Anexo I. Instalación de la Aplicación………………………………………………... 139 Anexo II. Terminología básica de la hemofilia……………………………………… 142 Anexo III. Desarrollo con UML……………………………………………………... 145 Anexo IV. Tablas de la Base de Datos………………………………………………. 153 Bibliografía…………………………………………………………………………. 166 Introducción CAPÍTULO 1: INTRODUCCIÓN 1.1 Motivación 1.2 Objetivos 1.3 Métodos y fases de trabajo 1.4 Base de Datos 1.5 Aplicación Hemogest 1.6 Descripción de la memoria 1 Introducción 1.1 MOTIVACIÓN La Hemofilia es una coagulopatía -enfermedad relacionada con la coagulación- por déficit de FVIIII o FVIX, con un patrón de herencia recesivo ligado al cromosoma X. Su frecuencia es de 1 por cada 5000-10000 varones, lo que la encuadrada entre las enfermedades llamadas raras. Su abordaje resulta complicado por la dificultad de agrupar y homogeneizar las evaluaciones y tratamientos entre pacientes de distintos centros, único sistema para la consecución del número suficiente de casos a estudiar que permita inferir relaciones entre datos. Pese a ello, el impacto socio-sanitario de enfermedades como el SIDA que ha diezmado a esta población y la repercusión económica del tratamiento de la Hemofilia en los Sistemas de Salud, hacen que los estudios sobre esta patología sean de crucial importancia. Aunque se han realizado numerosos estudios, aún quedan múltiples interrogantes por resolver en el manejo diario de estos pacientes. Entre ellos: Existen discrepancias entre los métodos de estudio fármaco-cinéticos de los concentrados, dependiendo de la tecnología utilizada; siendo necesario abrir nuevas líneas de investigación en este ámbito que permiten optimizar estrategias de tratamiento. Es necesario disponer y perfeccionar un patrón estandarizado internacional para los concentrados de los factores usados que permita normalizar los datos a estudiar. Existe una gran variedad y continua evolución de los distintos tipos de concentrado de factor. Para elegir y manejar unos u otros preparados hay que realizar diversos estudios sobre farmacocinética, eficacia, seguridad, desarrollo de inhibidores, etc., siendo aún amplio el camino por recorrer. No existen datos sobre la eficacia de las terapias sustitutivas (a demanda o en profilaxis) con indicación de las dosis, horarios, etc, lo que precisa de nuevas investigaciones para mejorar los tratamientos reduciendo los efectos secundarios y optimizando los recursos económicos. No se conocen los mecanismos de aparición de inhibidores y factores pronósticos que interfieren con la función proteica, por lo que es necesaria la valoración de factores endógenos (tipo de mutación, raza, agrupación familiar, HLA) y medioambientales (tipo de factor, cambio de producto, dosis, vía de administración, edad de la primera 2 Introducción exposición, lactancia materna, enfermedad inflamatoria-infecciosa concomitante a la infusión de factor, etc) que determinen o influencien la aparición de inhibidores. No se dispone de información sobre las pautas de tolerancia inmunológica a pesar que existen muy diversas posibilidades. Es necesario disponer de información que permita la valoración global del resultado obtenido con los tratamientos aplicados de una forma clínica objetiva. Se trata pues de una vieja patología en la que aún quedan por definir un gran número de aspectos y en la que apremia el diseño y desarrollo de estudios que permitan analizar los resultados clínicos obtenidos e incluyan aspectos fármaco-económicos, permitiendo definir Políticas de Salud sostenibles cumpliendo las expectativas y necesidades de los pacientes con costes adecuados para el Sistema de Salud implicado. Las respuestas a estos problemas de tratamiento e interpretación de grandes cantidades de información con métodos específicos pero a su vez relacionados, nos las proporcionan entre otras, la organización en bases de datos, los motores de búsqueda bases de datos que proporcionan acceso a los datos, y el software específico del campo de trabajo con sus diversos algoritmos y en particular con el tratamiento estadístico poblacional de los datos mediante su disponibilidad en medios electrónicos y la posibilidad de integrarlos con conjuntos externos para dar mayor solidez a las conclusiones. Las bases de datos son una herramienta necesaria para el almacenamiento y la organización de datos de diverso tipo, permitiendo manipularlos de distintas formas y relacionarlos entre sí. Hoy en día, ocupan un lugar determinante en cualquier área del quehacer humano, comercial, y tecnológico. No sólo las personas que trabajan en el área de Informática, sino todas las personas administrativas, técnicas y con mayor razón los profesionales de cualquier carrera, deben de tener los conocimientos necesarios para poder usar las bases de datos. 3 Introducción 1.2 OBJETIVOS El objetivo de este proyecto es el diseño, desarrollo e implantación de un sistema de gestión de bases de datos que permita el almacenamiento, tratamiento y gestión de datos para dar soporte a la evaluación de pacientes con hemofilia en el área sanitaria de la provincia de Málaga. El sistema será implantado en el Hospital Carlos Haya (SAS). Los principales objetivos de este proyecto son: Creación de un registro actualizado de los pacientes con hemofilia en el área sanitaria de Málaga (pero igualmente utilizable en otras zonas geográficas). Diseño de una evaluación sistemática de resultados clínicos de estos pacientes que permita el seguimiento homogeno de los mismos y la comparación de sus evoluciones, facilitando la optimización de tratamientos, estudios de efectos adversos y complicaciones, etc. Aplicar un cuestionario estadarizado de estudio de calidad de vida a dichos pacientes para conocer su situación y plantear un abordaje de sus espectativas de forma global. Crear un soporte en formato electrónico de esta información, de fácil manejo para los profesionales, que permita una intervención estadistica avanzada de los mismos. Familiarizarse con la terminología propia en la evaluación de pacientes con hemofilia. (Ver anexo). Ello permitirá, entre otro tipo de aplicaciones, las siguientes: Valoración farmacoeconomica de las pautas de tratamiento utilizadas para optimizar el consumo de recursos. Desarrollo de una guía básica de tratamiento y manejo (cirugia, rehabilitación, odontología, etc) de estos pacientes en nuestro medio, conforme a lo establecido en la actualidad por las principales referencias científicas. Farmacovigilancia: Control sistemático sobre seroconversión, desarrollo de inhibidores y reacciones anafilácticas. El soporte en formato electrónico de esta información deberá facilitar el manejo y la gestión del colectivo de hemofilia por parte de los profesionales de la salud y aplicar sobre estos datos las herramientas de procesamiento estadístico que se decida. 4 Introducción El diseño de los procedimientos para la evaluación sistemática de los resultados clínicos de estos pacientes que permita el seguimiento homogéneo de los mismos y su comparación, facilitando la optimización de tratamientos, estudios de efectos adversos y complicaciones. Llevar adelante una fármaco-vigilancia (sero-conversiones, inhibidores y reacciones adversas). 1.3 MÉTODOS Y FASES DE TRABAJO Se han identificado las siguientes etapas en la realización de este trabajo y que gobernarán la organización y desarrollo del mismo: 1. Instalación del Sistema Operativo Linux (Distribución Fedora Core 4). 2. Instalación de un Servidor de Base de Datos (MySQL). 3. Instalación de Servidor Web con soporte para PHP (Apache 2.0.48). 4. Instalación de PHP versión 4.3.4. 5. Diseño del modelo de datos. 6. Desarrollo de los casos de uso que guiarán el diseño de la aplicación. 7. Diseño y utilización de una Base de Datos para la gestión de datos específicos del proyecto. 8. Aprendizaje de PHP, JavaScript, CSS y creación de formularios para actualizar la base de datos. 9. Realización de la memoria del proyecto. Serán resultados finales del proyecto: 1. Estudio de la estructura de datos necesaria para describir los pacientes, tratamientos, análisis, revisiones de las articulaciones, inhibidores, inmunotolerancias y cuestionarios. 2. Estudio de MySQL (Gestor de base de datos de dominio público, basado en SQL). 3. Diseño de la estructura de la base de datos utilizando un modelo Entidad-Relación. Implementación utilizando el modelo relacional de MySQL. 4. Desarrollo de la aplicación de control y estadística de acceso. 5. Desarrollo de informes. 5 Introducción 1.4 BASE DE DATOS Una Base de Datos es un conjunto de tablas que contienen información ordenada en alguna estructura que facilita el acceso a esas tablas, permitiendo además ordenar y seleccionar filas de las tablas según criterios específicos. Los principales objetivos de los Sistemas Gestores de Bases de Datos (SGBD) son: 1. Independencia lógica y física de los datos. Capacidad de modificar una definición de esquema en un nivel de la arquitectura sin que esta modificación afecte al nivel inmediatamente superior. Para ello un registro externo en un esquema externo no tiene por qué ser igual a su registro correspondiente en el esquema conceptual. 2. Redundancia mínima. Se trata de usar la base de datos como repositorio común de datos para distintas aplicaciones. 3. Acceso concurrente por parte de múltiples usuarios. Control de concurrencia mediante técnicas de bloqueo o cerrado de datos accedidos. 4. Distribución espacial de los datos. La independencia lógica y física facilita la posibilidad de sistemas de bases de datos distribuidas. Los datos pueden encontrarse en otra habitación, otro edificio e incluso otro país. El usuario no tiene por qué preocuparse de la localización espacial de los datos a los que accede. 5. Integridad de los datos. Se refiere a las medidas de seguridad que impiden que se introduzcan datos erróneos. Esto puede suceder tanto por motivos físicos (defectos de hardware, actualización incompleta debido a causas externas), como de operación (introducción de datos incoherentes). Para permitir el uso de transacciones completas, evitando perdida de información, hemos utilizado las transacciones de MySql. COMMIT se utiliza cuando se ha realizado una inserción o eliminación en la base de datos y queremos que estos cambios sean permanentes. ROLLBACK se utiliza para cancelar los cambios que han sido realizados por las consultas hechas hasta el momento. 6. Consultas complejas optimizadas. La optimización de consultas permite la rápida ejecución de las mismas. 7. Seguridad de acceso y auditoría. Derecho de acceso a los datos contenidos en la base de datos por parte de personas y organismos. El sistema de auditoría mantiene el control de acceso a la base de datos, con el objeto de saber qué o quién realizó una determinada modificación y en qué momento. 6 Introducción 8. Respaldo y recuperación. Capacidad de un sistema de base de datos de recuperar su estado en un momento previo a la pérdida de datos. 9. Acceso a través de lenguajes de programación estándar. Posibilidad de acceder a los datos de una base de datos mediante lenguajes de programación ajenos al sistema de base de datos propiamente dicho. Nuestro primer cometido será el diseño e implementación de una Base de Datos de tipo Relacional generada a partir del SGBD MySQL. En dicha Base de datos almacenaremos información referente a pacientes con hemofilia. Dentro del modelo controlaremos los datos de cada uno de los pacientes además de los relacionados a los usuarios que acceden al mismo. 1.5 APLICACIÓN HEMOGEST El objetivo de este proyecto es el diseño y desarrollo de una Aplicación Web para la gestión de pacientes con Hemofilia. El sistema gestionará los datos médicos referentes a sus tratamientos, análisis, revisiones de las articulaciones, inhibidores, inmunotolerancias y cuestionarios. La aplicación también permitirá realizar informes y estadísticas. Para la implementación de nuestra aplicación usaremos código HTML (HyperText Markup Language, Lenguaje de hipertexto estándar usado para el desarrollo de páginas web) con partes escritas en PHP (Acrónimo recursivo de Hypertext Preprocessor) y en Javascript. PHP es un lenguaje script, su interpretación y ejecución se da en el servidor, en el cual se encuentra almacenado el script, y el cliente sólo recibe el resultado de la ejecución. Cuando el cliente hace una petición al servidor para que le envíe una página web, generada por un script PHP, el servidor ejecuta el intérprete de PHP, el cual procesa el script solicitado que generará el contenido de manera dinámica, pudiendo modificar el contenido a enviar, y regresa el resultado al servidor, el cual se encarga de regresárselo al cliente. 7 Introducción Figura 1.1 Javascript se inserta en documentos HTML, de forma que su código queda reflejado en la propia página y no es llamado o cargado de ninguna fuente externa. Se trata de un lenguaje interpretado puro (ni compilación, ni generación de intermedios codificados de ningún tipo). Sirve principalmente para mejorar la gestión de la interfaz cliente/servidor. Un script JavaScript insertado en un documento HTML permite reconocer y tratar localmente, es decir, en el cliente, los eventos generados por el usuario. Para definir la presentación de los documentos escritos en HTML hemos utilizado CSS (Cascading Style Sheets, Hojas de estilos en cascada). Una hoja de estilos es un conjunto de especificaciones de formato que se aplican a los elementos HTML. La idea que se encuentra detrás del desarrollo de CSS, es separar la estructura de un documento de su presentación. La interacción de todos los componentes es sencilla, tenemos toda nuestra información en la Base de Datos MySQL y el código de nuestra aplicación en el servidor Apache, con el motor de PHP integrado como módulo del mismo para ejecutar sus partes de código. Cuando ejecutamos alguna consulta en lenguaje SQL usando las instrucciones pertinentes en PHP, este código accede a través del servidor Web a la Base de Datos, para después mostrar la información en las páginas HTML. JavaScript es utilizado para controlar las ventanas del navegador, capturar los eventos generados por el usuario y responder a ellos sin salir a Internet y comprobar los datos que el usuario introduce en un formulario antes de enviarlos. 8 Introducción Nuestra aplicación constará de 3 módulos principales: Una página principal, donde se encuentra el sistema de autenticación. La zona de Administrador, restringida a uso único del mismo, donde se encuentra la gestión de los usuarios, el mantenimiento de algunas de las tablas de la base de datos y la importación de datos del diario de tratamientos de la AMH (Asociación Malagueña de Hemofilia). La zona de Usuarios, donde se encuentran la información de los pacientes, su acceso también es restringido. Se ha diseñado un sistema con autenticación de usuarios, para los cuáles se definen los siguientes permisos: Permiso de lectura. Podrán acceder a la información de los pacientes, así como podrán realizar estadísticas e informes, pero no podrán insertar, ni modificar, ni eliminar datos de la base de datos. Permiso de escritura. Además de los privilegios del usuario con permiso de lectura, tiene la capacidad de insertar, modificar y eliminar en la base de datos. Permiso de Administración. Accederá a la zona de gestión de los usuarios y de mantenimiento de las base de datos, teniendo permiso de lectura y escritura de la misma. 9 Introducción 1.6 DESCRIPCIÓN DE LA MEMORIA La memoria se ha organizado en seis capítulos. A continuación veremos cuáles son y una breve descripción de cada uno para tener una idea general de los contenidos de este proyecto Capítulo 1: Introducción. En este capítulo se describen los motivos y objetivos del desarrollo del proyecto. Capítulo 2: Fundamentos Tecnológicos. En este capítulo, se realizará una breve introducción a las Bases de Datos, a continuación trataremos los aspectos más destacados de los lenguajes de programación utilizados y por último mostraremos algunos ejemplos de ejecución. Capítulo 3: Análisis: Lenguaje de Modelamiento Unificado (UML - Unified Modeling Language). A través de UML se lleva a cabo el análisis del sistema. Capítulo 4: Diseño: Modelo E/R en MySQL. Detallaremos paso a paso la elaboración de la base de datos. Capítulo 5: Implementación Aplicación. Describiremos como ha sido desarrollada la aplicación web, comentando su funcionamiento. Capítulo 6: Conclusiones. En este capítulo comentaremos las conclusiones que hemos obtenidos durante el desarrollo del Proyecto, objetivos cumplidos y futuros trabajos para ampliar el mismo. Anexos. Indicaremos los pasos necesarios para instalación de la aplicación en un servidor Web, definimos la terminología básica de la hemofilia y explicamos con detalle algunos diagramas UML. Bibliografía: Referencias a toda la documentación usada durante la elaboración del proyecto. 10 Fundamentos tecnológicos CAPÍTULO 2: FUNDAMENTOS TECNOLÓGICOS 2.1 Introducción 2.2 Base de Datos 2.3 Programación en PHP 2.4 Programación en Javascript 2.5 Hoja de estilos 2.6 Ejemplos de ejecución 11 Fundamentos tecnológicos 2.1 INTRODUCCIÓN En este capítulo, se realizará una breve introducción a las Bases de Datos, a continuación trataremos los aspectos más destacados de los lenguajes de programación utilizados y por último mostraremos algunos ejemplos de ejecución. 2.2 BASE DE DATOS Para la elaboración de la Base de datos el gestor que utilizaremos es MySQL. MySQL es un sistema de administración relacional de bases de datos. Una base de datos relacional archiva datos en tablas separadas en vez de colocar todos los datos en un gran archivo. Esto permite velocidad y flexibilidad. Las tablas están conectadas por relaciones definidas que hacen posible combinar datos de diferentes tablas. Es necesario la utilización de claves o indentificadores de cada entidad que permita distinguir sin ningún tipo de ambigüedad cada uno de los elementos del conjunto de entidades. Dos o más entidades se pueden relacionar entre sí, y a este hecho y su implicación conceptual se le conoce on el nombre de relación. La sintaxis de SQL de las operaciones más básicas: Crear una tabla CREATE TABLE nombre_tabla ( nombre_columna tipo_columna [ cláusula_defecto ] [ vínculos_de_columna ] [ , nombre_columna tipo_columna [ cláusula_defecto ] [vínculos_de_columna ] ... ] [ , [ vínculo_de tabla] ... ] ) - nombre_columna: es el nombre de la columan que compone la tabla. - tipo_columna: es la indicación del tipo de dato que la columna podrá contener. - cláusula_defecto: indica el valor por defecto que tomará la columna si no se le asigna uno explícitamente en el momento en que se crea la línea. La sintaxis que hay que usar es la siguiente: DEFAULT {valor | NULL}, donde valor es un valor válido para el tipo con el que la columna se ha definido. 12 Fundamentos tecnológicos - vínculos_de_columna: son vínculos de integridad que se aplican a cada atributo concreto. Son: o NOT NULL, que indica que la columna no puede tomar el valor NULL. o PRIMARY KEY, que indica que la columna es la llave primaria de la tabla. o Una definición de referencia con la que se indica que la columna es una llave externa hacia la tabla y los campos indicados en la definición. La sintaxis es la siguiente: REFERENCES nombre_tabla [ ( columna1 [ , columna2 ... ] ) ] [ ON DELETE { CASCADE | SET DEFAULT | SET NULL } ] [ ON UPDATE { CASCADE | SET DEFAULT | SET NULL } ] Las cláusulas ON DELETE y ON UPDATE indican qué acción hay que ejecutar en el caso en que una tupla en la tabla referenciada sea eliminada o actualizada. De hecho, en dichos casos en la columna referenciante (que es la que se está definiendo) podría haber valores inconsistentes. Las acciones pueden ser: CASCADE: eliminar la tupla que contiene la columna referenciante (en el caso de ON DELETE) o también actualizar la columna referenciante (en el caso de ON UPDATE). SET DEFAULT: asignar a la columna referenziante su valor de defecto. SET NULL: asignar a la columna referenciante el valor NULL. o Un control de valor, con el que se permite o no asignar un valor a la columna en función del resultado de una expresión. La sintaxis que se usa es: CHECK(expresión_condicional) donde expresión_condicional es una expresión que ofrece verdadero o falso. - vínculos_de_tabla: son vínculos de integridad que se pueden referir a más columnas de la tabla. Son: o La definición de la llave primaria: PRIMARY KEY ( columna1 [ , columna2 ... ] ) o Las definiciones de las llaves externas: FOREIGN KEY ( columna1 [ , columna2 ... ] ) 13 Fundamentos tecnológicos Insertar una nueva línea en la tabla: INSERT INTO nombre_tabla [ ( lista_campos ) ] VALUES ( lista_valores ) - nombre_tabla es el nombre de la tabla en la que se tiene que incluir la nueva línea. - lista_campos es la lista de los nombres de los campos a los que hay que asignar un valor, separados entre sí por una coma. Los campos no incluidos en la lista tomarán su valor por defecto o NULL si no lo tienen por defecto. Es un error no incluir en la lista un campo que no tenga un valor por defecto y que no pueda tomar el valor NULL. En el caso en que no se especifique la lista, habrá que especificar los valores de todos los campos de la tabla. - lista_valores es la lista de los valores que se les darán a los campos de la tabla en el orden y número especificados por la lista_campos o en la de la definición de la tabla (si no se especifica lista_campos). Los valores pueden ser una expresión escalar del tipo apropiado para el campo o las keywords DEFAULT o NULL, si el campo prevé un valor por defecto o admite el valor NULL. Modificar líneas de la tabla: UPDATE nombre_tabla SET lista_asignaciones [ WHERE expresión_condicional ] La instrucción UPDATE actualiza las columnas de la tabla que se han especificado en la cláusula SET, utilizando los valores que son calculados por las correspondientes expresiones escalares. Si se expresa también la cláusula WHERE, se actualizan sólo las líneas que satisfacen la expresión condicional. Eliminar líneas de la tabla: DELETE FROM nombre_tabla [ WHERE expresión_condicional ] La instrucción delete elimina de una tabla todas las líneas que satisfacen la expresión condicional de la cláusula WHERE. Si WHERE no se especifica, se cancelan todas las líneas de la tabla. 14 Fundamentos tecnológicos Consultar la base de datos: SELECT [ ALL | DISTINCT ] lista_elementos_selección FROM lista_referencias_tabla [ WHERE expresión_condicional ] [ GROUP BY lista_columnas ] [ HAVING expresión_condicional ] [ ORDER BY lista_columnas ] La instrucción SELECT produce una tabla que se obtiene aplicando el siguiente procedimiento (por lo menos desde el punto de vista lógico, cada DBMS optimiza la ejecución de las interrogaciones según las propias estrategias): 1. Produce una tabla que se obtiene como producto cartesiano de las tablas especificadas en la cláusula FROM. Cada elemento de la lista_referencias_tabla sigue la siguiente sintaxis: referencia tabla[ [ AS ] alias tabla] La referencia puede ser el nombre de una tabla o una expresión (puesta entre paréntesis) cuyo resultado es una tabla, y por lo tanto incluso otra SELECT. El alias es un nombre que sirve para indicar brevemente una referencia de tabla. En el caso en que la referencia de tabla sea una expresión, es obligatorio especificar un alias. 2. De la tabla anterior elimina todas las líneas que no satisfacen la expresión condicional (es decir las líneas por las cuales la expresión condicional devuelve falso como resultado) de la cláusula WHERE. 3. (Si está presente la cláusula GROUP BY) las líneas de la tabla resultante del paso 2 se reagrupan según los valores presentes en las columnas especificadas en la cláusula GROUP BY. Líneas con valores iguales se unen en una única línea. Las columnas no comprendidas en la cláusula tienen que comprender expresiones con funciones de agregación (como por ejemplo AVG, que calcula la media) que, por tanto, se calculan produciendo un único valor para cada grupo. 4. (Si está presente la cláusula HAVING) del resultado del punto 3 se eliminan las líneas que no satisfacen la expresión condicional de la cláusula HAVING. 15 Fundamentos tecnológicos 5. Se calculan las columnas presentes en la cláusula SELECT (las de la lista_elementos_selección). En concreto, se calculan las columnas con las funciones de agregación que derivan del reagrupamiento que se ha producido en el punto 3. Cada elemento de la lista_elementos_selección sigue la siguiente sintaxis: expresión_escalar [ [ AS ] alias_columna ] Una expresión escalar es una expresión que produce como resultado un valor escalar. Los tipos de datos escalares del lenguaje SQL son principalmente los descritos en la lección 6 (Crear la base de datos), excepto INTERVAL, DATE, TIME y TIMESTAMP. Toda la lista de las columnas de una tabla puede especificarse usando el carácter '*'. 6. (Si está presente la opción DISTINCT) se eliminan las líneas que resultan duplicadas. En el caso en que no estén presentes ni ALL ni DISTINCT, se asume ALL. 7. (Si está presente la cláusula ORDER BY) las líneas de la tabla se ordenan según los valores presentes en las columnas especificadas en la cláusula. La sintaxis que hay que usar es la siguiente: ORDER BY nombre_columna [ ASC | DESC ] [ , nombre_columna [ ASC | DESC ] ... ] Las principales características de este gestor de bases de datos son las siguientes: 1. Aprovecha la potencia de sistemas multiprocesador, gracias a su implementación multihilo. 2. Soporta gran cantidad de tipos de datos para las columnas. 3. Dispone de API's en gran cantidad de lenguajes (C, C++, Java, PHP, etc). 4. Gran portabilidad entre sistemas. 5. Soporta hasta 32 índices por tabla. 6. Gestión de usuarios y passwords, manteniendo un muy buen nivel de seguridad en los datos. 7. Software de código abierto. El código fuente se puede descargar y está accesible a cualquiera, por otra parte, usa la licencia GPL para aplicaciones no comerciales. 16 Fundamentos tecnológicos 2.3 PROGRAMACION EN PHP 2.3.1 Introducción PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue desarrollado originalmente en el año 1994 por Rasmus Lerdorf como un CGI (Common Gateway Interface, norma para establecer comunicación entre un servidor web y un programa) escrito en C que permitía la interpretación de un número limitado de comandos. El sistema fue denominado Personal Home Page Tools y adquirió relativo éxito gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias páginas. Dada la aceptación del primer PHP y de manera adicional, su creador diseñó un sistema para procesar formularios al que le atribuyó el nombre de FI (Form Interpreter) y el conjunto de estas dos herramientas, sería la primera versión compacta del lenguaje: PHP/FI. La siguiente gran contribución al lenguaje se realizó a mediados del 97 cuando se volvió a programar el analizador sintáctico, se incluyeron nuevas funcionalidades como el soporte a nuevos protocolos de Internet y el soporte a la gran mayoría de las bases de datos comerciales. En el último año, el número de servidores que utilizan PHP se ha disparado, lo que le ha convertido en una tecnología popular. 2.3.2 Tareas principales Poco a poco el PHP se va convirtiendo en una herramienta que proporciona la funcionalidad completa de un lenguaje de programación. En un principio diseñado para realizar poco más que un contador y un libro de visitas, PHP ha experimentado en poco tiempo una verdadera revolución y, a partir de sus funciones, en estos momentos se pueden realizar una multitud de tareas útiles para el desarrollo del web: Gestión de bases de datos: Resulta difícil concebir un sitio actual, potente y rico en contenido que no es gestionado por una base de datos. El lenguaje PHP ofrece interfaces para el acceso a la mayoría de las bases de datos comerciales y por ODBC a 17 Fundamentos tecnológicos todas las bases de datos posibles en sistemas Microsoft, a partir de las cuales podremos editar el contenido de nuestro sitio con absoluta sencillez. Funciones de correo electrónico: Podemos enviar un e-mail a una persona o lista parametrizando toda una serie de aspectos tales como el e-mail de procedencia, asunto, persona a responder… Gestión de archivos: Crear, borrar, mover, modificar...cualquier tipo de operación más o menos razonable que se nos pueda ocurrir puede ser realizada a partir de una amplia librería de funciones para la gestión de archivos por PHP. También podemos transferir archivos por FTP a partir de sentencias en nuestro código, protocolo para el cual PHP ha previsto también gran cantidad de funciones. Tratamiento de imágenes: Puede parecer útil el crear botones dinámicos, es decir, botones en los que utilizamos el mismo diseño y solo cambiamos el texto. Podremos por ejemplo crear un botón haciendo una única llamada a una función en la que introducimos el estilo del botón y el texto a introducir obteniendo automáticamente el botón deseado. A partir de la librería de funciones graficas podemos hacer esto y mucho más. Muchas otras funciones pensadas para Internet (tratamiento de cookies, accesos restringidos, comercio electrónico...) o para propósito general (funciones matemáticas, explotación de cadenas, de fechas, corrección ortográfica, compresión de archivos...) son realizadas por este lenguaje. 2.3.3 Sintaxis PHP PHP se escribe dentro de la propia página web, junto con el código HTML y, como para cualquier otro tipo de lenguaje incluido en un código HTML, en PHP necesitamos especificar cuáles son las partes constitutivas del código escritas en este lenguaje. Esto se hace, como en otros casos, delimitando nuestro código por etiquetas. Podemos utilizar distintos modelos de etiquetas en función de nuestras preferencias y costumbres. Hay que tener sin embargo en cuenta que no necesariamente todas están configuradas inicialmente y que otras, como es el caso de que sólo están disponibles a partir de una determinada versión (3.0.4.). 18 Fundamentos tecnológicos Estos modos de abrir y cerrar las etiquetas son: 1. <?código?> 2. <?php código ?> 3. <?script language=”php”> código </script> 4. <% código %> El modo de funcionamiento de una página PHP, a grandes rasgos, no difiere del clásico para una página dinámica de lado servidor: El servidor va a reconocer la extensión correspondiente a la página PHP (phtml, php, php4,...) y antes de enviarla al navegador va a encargarse de interpretar y ejecutar todo aquello que se encuentre entre las etiquetas correspondientes al lenguaje PHP. El resto, lo enviara sin más ya que, asumirá que se trata de código HTML absolutamente compresible por el navegador. ▪ Separación de instrucciones Cada instrucción acaba con un punto y coma ";". Para la última expresión, la que va antes del cierre de etiqueta, este formalismo no es necesario. ▪ Comentarios PHP soporta comentarios tipo ‘C’, ‘C++’ y shell de Unix. La forma de incluir estos comentarios es variable dependiendo si queremos escribir una línea o más. Si usamos doble barra (//) o el símbolo # podemos introducir comentarios de una línea. Mediante /* y */ creamos comentarios multilínea. Por supuesto, nada nos impide de usar estos últimos en una sola línea. ▪ Tipos El tipo de una variable normalmente no lo indica el programador; en su lugar, lo decide PHP en tiempo de ejecución dependiendo del contexto en el que se utilice esa variable. PHP soporta los siguientes tipos de datos: - Enteros, del tipo $a=1234, $a=-1234, $a=o123(octal, $a=ox123(hexadecimal). 19 Fundamentos tecnológicos - Punto flotante, $a=1.234, $a=1.2e3. - Cadenas de caracteres, se de limitan por dobles comillas “” o simples ‘ (con más restricciones). - Arrays, los crearemos usando las funciones list o array, o asignando los valores de manera explícita ($a[0]=”abc”). También dispondremos de arrays multidimensionales. - Objetos. Podremos instanciar objetos de una clase con la función new. ▪ Variables Las variables son definidas anteponiendo el símbolo dólar ($) al nombre de la variable que estábamos definiendo. El nombre de la variable es sensible a minúsculas y mayúsculas. Las variables siempre se asignan por valor, lo cual significa que cuando se asigna una expresión a una variable, el valor íntegro de la expresión original se copia en la variable destino. A partir de PHP4 ofrece otra forma de asignar valores a las variables, asignar por referencia, simplemente anteponiendo un ampersand (&) al comienzo de la variable. Además de las variables que crean los usuarios, se crean por defecto otras variables, como son las del servidor (Apache en nuestro caso, tales como SERVER, NAME_DOCUMENT_ROOT, HTTP_HOST, etc…) variables de entorno que se importan desde el entorno donde se este ejecutando el interprete de PHP, variables del propio PHP, como HTTP_GET_VARS, HTTP_POST_VARS, PHP_SELF, etc…Mención aparte merecen las variables externas a PHP, como son las de los formularios HTML (GET Y POST), que pasan a estar disponibles en el Script de PHP cuando son enviadas. ▪ Constantes Se puede definir una constante usando la función define(). Una vez definida, no puede ser modificada ni eliminada. Solo se puede definir como constantes valores escalares (boolean, integer, float y string ). ▪ Expresiones En PHP, casi cualquier cosa que se escribe es una expresión. La forma más simple y ajustada de definir una expresión es “cualquier cosa que tiene valor”. Sus formas más básicas son las constantes y las variables. Se pueden escribir todas las expresiones típicas de un lenguaje de programación, con sus operadores lógicos, aritméticos, funciones, etc… 20 Fundamentos tecnológicos ▪ Operadores PHP pone a disposición del usuario todos los operadores típicos que se usan en la construcción de expresiones: - Aritméticos: +, - , * , / , %. - Asignación: El operador básico de asignación es “=”, aunque se puede combinar con otros operadores, como los aritméticos + y -, para realizar incrementos o decrementos. - Operadores bit a bit, permiten activar o desactivar bits individuales de entero (&, |, ^, <<, >>). - Operadores de comparación: Permiten comparar dos valores (= =, !=, <, >, <=, >=). - Operador de ejecución: Permiten ejecutar la instrucción contenida dentro de los apóstrofes invertidos como si fuera un comando del shell. - Operadores lógicos: and (o $$), oer (o ||), xor (o ¡). - Operador de cadenas, es el operador de concatenación (‘.’), que devuelve el resultado de concatenar su operando izquierdo y derecho. ▪ Sentencias de control Las sentencias se pueden agrupar en grupos de sentencias encapsulándolas con llaves. Se pueden usar todas las estructuras típicas de un lenguaje de programación: - Aritméticos: +, - , * , / , %. - IF (<expresión>) {<sentencias>) ELSE {<sentencias>} (la segunda parte del else es opcional también podríamos usar ELSEIF(<expresión>)). - WHILE (<expresión>){<sentencias>}. - DO {<sentencias>} WHILE (<expresión>); - FOR {<expresion1>,<expresion2>,<expresion3>){<sentencias>}. - DO {<sentencias>} WHILE (<expresión>); - FOR {<expresion1>, <expresion2>, <expresion3>) {<sentencias>}. - SWITCH {<expresión>) {case <valor1>:<sentencias> break; case <valor2>: <sentencias> break;…default:<sentencias> - Require(), actúa igual que el #include de C, se sustituye por el archivo especificado entre los paréntesis. - Include() incluye y evalúa el archivo especificado. 21 Fundamentos tecnológicos ▪ Funciones Las funciones son segmentos de código que pueden ser invocados varias veces y que tras su ejecución continua el flujo del programa desde el que fue llamado. Para definir una función en PHP, hay que hacerlo antes de que se referencie en el código del programa. Una función se define con las siguientes sintaxis: function ejemplo($arg_1, $arg_2, . . . ,$arg_n){ echo “función ejemplo.\n” return $retval; } ▪ Clases Una clase es una colección de variables y de funciones que acceden a esas variables. Una clase se define con la siguiente sintaxis: <? class Caja{ var $alto; var $ancho; var $largo; var $contenido; var $color; function introduce($valor){ $this->contenido = $valor; } function muestra_contenido(){ echo $this->contenido; } } ?> Las clases solamente son definiciones. Si queremos utilizar la clase tenemos que crear un ejemplar de dicha clase, lo que corrientemente se le llama instanciar un objeto de una clase. $micaja = new Caja; Con esto hemos creado, o mejor dicho, instanciado, un objeto de la clase Caja llamado 22 Fundamentos tecnológicos $micaja. $micaja->introduce($valor); $micaja->muestra_contenido(); Con estas dos sentencias estamos introduciendo "algo" en la caja y luego estamos mostrando ese contendido en el texto de la página. Nos fijamos que los métodos de un objeto se llaman utilizando el código "->". nombre_del_objeto->nombre_de_metodo() Para acceder a los atributos de una clase también se accede con el código "->". De esta forma: nombre_del_objeto->nombre_del_atributo 2.4 PROGRAMACION EN JAVASCRIPT 2.4.1 Introducción HTML no es suficiente para realizar todas las acciones que se pueden llegar a necesitar en una página web. Esto es debido a que conforme fue creciendo el web y sus distintos usos se fueron complicando las páginas y las acciones que se querían realizar a través de ellas. El HTLM se había quedado corto para definir todas estas nuevas funcionalidades, ya que sólo sirve para presentar el texto en una página, definir su estilo y poco más. El primer ayudante para cubrir las necesidades que estaban surgiendo fue Java, a través de la tecnología de los Applets, que son pequeños programas que se incrustan en las páginas web y que pueden realizar las acciones asociadas a los programas de propósito general. La programación de Applets fue un gran avance y Netscape, por aquel entonces el navegador más popular, había roto la primera barrera del HTML al hacer posible la programación dentro de las páginas web. No cabe duda que la aparición de los Applets supuso un gran avance en la historia del web, pero no ha sido una tecnología definitiva y muchas otras han seguido implementando el camino que comenzó con ellos. Netscape, después de hacer sus navegadores compatibles con los applets, comenzó a desarrollar un lenguaje de programación al que llamó LiveScript que permitiese crear pequeños programas en las páginas y que fuese mucho más sencillo de utilizar que Java. De modo que el primer Javascript se llamo LiveScript, pero no duró mucho ese nombre, pues 23 Fundamentos tecnológicos antes de lanzar la primera versión del producto se forjó una alianza con Sun Microsystems, creador de Java, para desarrollar en conjunto ese nuevo lenguaje. La alianza hizo que Javascript se diseñara como un hermano pequeño de Java, solamente útil dentro de las páginas web y mucho más fácil de utilizar. Además, para programar Javascript no es necesario un kit de desarrollo, ni compilar los scripts, ni realizarlos en ficheros externos al código HTML, como ocurría con los applets. Netscape 2.0 fue el primer navegador que entendía Javascript y su estela fue seguida por los navegadores de la compañía Microsoft a partir de la versión 3.0. 2.4.2 Sintaxis Javascript La programación de Javascript se realiza dentro del propio documento HTML. Hay dos formas de colocar scripts en páginas web: - Dentro del lenguaje que estamos utilizando: La etiqueta <SCRIPT> tiene un atributo que sirve para indicar el lenguaje que estamos utilizando, así como la versión de este. Por ejemplo, podemos indicar que estamos programando en Javascript 1.2 o Visual Basic Script, que es otro lenguaje para programar scripts en el navegador cliente que sólo es compatible con Internet Explorer. El atributo en cuestión es language y lo más habitual es indicar simplemente el lenguaje con el que se han programado los scripts. El lenguaje por defecto es Javascript, por lo que si no utilizamos este atributo, el navegador entenderá que el lenguaje con el que se está programando es Javascript. <SCRIPT LANGUAGE=javascript> - Ficheros externos de Javascript: Otra manera de incluir scripts en páginas web, implementada a partir de Javascript 1.1, es incluir archivos externos donde se pueden colocar muchas funciones que se utilicen en la página. Los ficheros suelen tener extensión .js y se incluyen de esta manera. <SCRIPT language=javascript src="archivo_externo.js"> //estoy incluyendo el fichero "archivo_externo.js" </SCRIPT> 24 Fundamentos tecnológicos ▪ Separación de instrucciones Javascript tiene dos maneras de separar instrucciones. La primera es a través del carácter punto y coma (;) y la segunda es a través de un salto de línea. ▪ Comentarios Existen dos tipos de comentarios en el lenguaje. Uno de ellos, la doble barra, sirve para comentar una línea de código. El otro comentario lo podemos utilizar para comentar varias líneas y se indica con los signos /* para empezar el comentario y */ para terminarlo. ▪ Tipos En Javascript, al igual que ocurre en otros lenguajes como PHP, la definición de los tipos de los datos se hace de forma dinámica, es decir, una variable no está limitada a contener el tipo de dato que se indicó al declarar la variable, sino que puede contener primero un número y mas tarde pasar a contener una cadena de texto. Además de los tipos de datos básicos tenemos matrices, funciones y los objetos. ▪ Variables Los nombres de las variables han de construirse con caracteres alfanuméricos y el carácter subrayado (_). Aparte de esta, hay una serie de reglas adicionales para construir nombres para variables. La más importante es que tienen que comenzar por un carácter alfabético o el subrayado. No podemos utilizar caracteres raros como el signo +, un espacio o un $. También hay que evitar utilizar nombres reservados como variables, por ejemplo no podremos llamar a nuestra variable palabras como return o for, que ya veremos que son utilizadas para estructuras del propio lenguaje. Javascript se salta muchas reglas por ser un lenguaje un tanto libre a la hora de programar y uno de los casos en los que otorga un poco de libertad es a la hora de declarar las variables, ya que no estamos obligados a hacerlo, al contrario de lo que pasa en la mayoría de los lenguajes de programación. De todos modos, es aconsejable declarar las variables, para ello Javascript cuenta con la palabra var. 25 Fundamentos tecnológicos ▪ Constantes Se trata de bloques de datos (cadenas, números) que JavaScript interpreta literalmente. Las cadenas numéricas se escriben tal cual, mientras que las de cadenas se escriben entre comillas dobles o sencillas. Por ejemplo: x = 25 a = "Hola, qué tal" . ▪ Operadores Los operadores más comunes son: - + adición( o concatenación en el caso de cadenas) - -substracción - * multiplicación - / división - = igual - ++ incremento - -- decremento - > mayor que - < menor que - >= Mayor o igual que - <= Menor o igual que - = = igual a (comparar dos valores) - ¡= distinto de (comparar dos valores) - && y (une dos comparaciones) - || o (una u otra comparación) ▪ Sentencias de control Se pueden usar todas las estructuras típicas de un lenguaje de programación: - If (<expresión>) {<sentencias>) else {<sentencias>}. Otra forma más esquemática Variable = (condición) ? valor1 : valor2, . Lo que hace es evaluar la condición (colocada entre paréntesis) y si es positiva asigna el valor1 a la variable y en caso contrario le asigna el valor2. - While (<expresión>){<sentencias>}. 26 Fundamentos tecnológicos - Do {<sentencias>} while (<expresión>); - For {<expresion1>,<expresion2>,<expresion3>){<sentencias>}. - Do {<sentencias>} while (<expresión>); - For {<expresion1>, <expresion2>, <expresion3>) {<sentencias>}. - Switch {<expresión>) {case <valor1>:<sentencias> break; case <valor2>: <sentencias> break;…default:<sentencias>. ▪ Función Una función se define con la siguiente sintaxis: function ejemplo($arg_1, $arg_2, . . . ,$arg_n){ document.write("<H1>Función ejemplo</H1>") } ▪ Objetos Javascript es un lenguaje orientado a objetos, es decir, podrá manejar diferentes objetos, tales como: la pantalla, la ventana, el documento, las etiquetas, los formularios. Cada uno de estos objetos tiene una serie de características, a las que llamaremos propiedades. Además cada objeto podrá realizar toda una serie de cosas, a las que llamaremos métodos. Para hacer referencia a una propiedad se utiliza la sintaxis: nombredeobjeto.propiedad y para hacer referencia un método se utiliza la misma sintaxis aunque suele acabar con una apertura y cierre de paréntesis: nombredeobjeto.metodo(). - Objeto documento(document): Hace referencia a la página que esté visualizando en ese momento. Algunas de sus propiedades son: bicolor (color del fondo), fgColor (color del texto), linkColor, alinkColor y vlinkColor (color de los vínculos), location (la URL del documento), lasModified (última modificación), title(título de la página), links (enlaces del documento). Algunos de sus métodos son: clear, close, open, write. - Objeto cadena (string): La clase String sólo tiene una propiedad: length, que guarda el número de caracteres del String. Algunos de sus métodos: Para formatear: bold, blink, big, small, fontcolor, fontsize, italics, strike, sub, sup, toLowerCase, toUpperCase. Otros: indexOf (contenido en la cadena), charAt(x) (representa el carácter número x de la cadena). 27 Fundamentos tecnológicos - Objeto fecha (date): No tiene propiedades y algunos de sus métodos son: getDate (sólo la fecha), getDay (el día), getMonth, getHours, getMinutes, getSeconds. - Objeto pantalla: Contiene la información sobre la pantalla que usa el navegador. Algunas de sus propiedades son: colorDepth (número de bits de colores en uso), height (altura de la pantalla en pixels), pixelDepth (número de bits por pixel), width (anchura de la pantalla en pixels). - Otros objetos: o Ancla (anchor): contiene una lista de todas las señales (A NAME) de ese documento. Objetos para formularios: botón (button), casilla de verificación (checkbox), borrar(reset), enviar (submit), seleccionar (select), password. o Formularios (forms): contiene una lista de todos los formularios de ese documento. o Ventana (window): es el de más alto nivel y tiene numerosas propiedades y métodos para trabajar con él. Algunos de sus métodos son: open('nombre_página','nombre_ventana','propiedades:width, height, top, left, ...'), close (para cerrar la ventana), print (para imprimir la ventana), ... Entre sus propiedades tenemos: defaultStatus (para configurar el mensaje por defecto de la barra de estado), status (mensajes en la barre de estado), ... o Localización (location): contiene información sobre la URL de la página en uso en ese momento. o Historia (history): contiene una lista de todos los elementos del historial del navegador. A través de los métodos Back, Forward y Go podremos desplazarnos por ellos. o Navegador (navigator): contiene información sobre el navegador que usamos para ver la página, a través de propiedades como: appName, appVersion, ... o Matemáticas (math): se trata de un objeto predifinido de JavaScript con numerosas propiedades y métodos para manejar datos y funciones numéricas. o Marco (frame): contiene una lista de todos los marcos que se muestran en ese momento en la pantalla. Permite desplazarse por ellos, abrir nuevos, ... 28 Fundamentos tecnológicos ▪ Eventos Es la forma de decirle a JavaScript cuándo tiene que llevar a cabo una acción: - onClick: Se ejecuta cuando se pulsa con el botón izquierdo del ratón. - onChange: Se ejecuta cuando se modifica el contenido de un input en un formulario. - onFocus: Se ejecuta cuando se sitúa el cursor de inserción dentro de un elemento de un formulario. - onBlur: Se ejecuta cuando se sitúa el cursor de inserción fuera de un elemento de un formulario. - onMouseOver: Se ejecuta cuando se pone el puntero del ratón sobre él (sin apretar). - onMouseOut: Se ejecuta cuando el puntero del ratón nos lo llevamos de una zona sensible (por ejemplo, un enlace). - onSelect: Se ejecuta cuando se selecciona un elemento de una lista en un formulario. - onSubmit: Se ejecuta cuando se hace clic sobre el botón de enviar en un formulario. - onLoad: Se ejecuta cuando se abre por primera vez una página. - onUnLoad: Se ejecuta cuando se sale de la página activa. - HREF:javascript: Se ejecuta cuando se hace clic sobre un enlace, pudiendo poner una referencia a una función o expresión de javascript . 2.5 HOJAS DE ESTILOS 2.5.1 Introducción Hojas de Estilo en Cascada (Cascading Style Sheets), es un mecanismo simple que describe cómo se va a mostrar un documento en la pantalla, o cómo se va a imprimir. Esta forma de descripción de estilos ofrece a los desarrolladores el control total sobre estilo y formato de sus documentos. CSS se utiliza para dar estilo a documentos HTML y XML, separando el contenido de la presentación. Cualquier cambio en el estilo marcado para un elemento en la CSS afectará a todas las páginas vinculadas a esa CSS en las que aparezca ese elemento. CSS funciona a base de reglas, es decir, declaraciones sobre el estilo de uno o más elementos. Las hojas de estilos están compuestas por una o más de esas reglas aplicadas a un 29 Fundamentos tecnológicos documento HTML o XML. La regla tiene dos partes: un selector y la declaración. A su vez la declaración está compuesta por una propiedad y el valor que se le asigne h1 {color: red;} - h1 es el selector - {color: red;} es la declaración El selector funciona como enlace entre el documento y el estilo, especificando los elementos que se van a ver afectados por esa declaración. La declaración es la parte de la regla que establece cuál será el efecto. En el ejemplo anterior, el selector h1 indica que todos los elementos h1 se verán afectados por la declaración donde se establece que la propiedad color va a tener el valor red (rojo) para todos los elementos h1 del documento o documentos que estén vinculados a esa hoja de estilos. 2.5.2 Sintaxis ▪ Inclusión en HTML Las tres formas más conocidas de dar estilo a un documento son las siguientes: 1. Utilizando una hoja de estilo externa que estará vinculada a un documento a través del elemento <link>, el cual debe ir situado en la sección <head>. <LINK REL=”stylesheet” TYPE=”text/css” HREF=”URL_Hoja.css> 2.- Utilizando el elemento <style>, en el interior del documento al que se le quiere dar estilo, y que generalmente se situaría en la sección <head>. De esta forma los estilos serán reconocidos antes de que la página se cargue por completo. <STYLE TYPE=”text/css”> Etiqueta1, Etiqueta2: {propiedad1:valor} Etiqueta3: {propiedad1: valor;…; propiedadS: valor} 30 Fundamentos tecnológicos ……… .Clase1: {propiedad1_valor;…;propiedadT:valor} </STYLE> 3.- Utilizando estilos directamente sobre aquellos elementos que lo permiten a través del atributo <style> dentro de <body>. Pero este tipo de estilo pierde las ventajas que ofrecen las hojas de estilo al mezclarse el contenido con la presentación. <etiqueta style=”propiedad1:valor; … ; propiedadn: valor”>…</etiqueta> ▪ Clases Una clase es una definición de un estilo que en principio no está asociado a alguna etiqueta HTML, pero que podemos asociar, en el documento, a etiquetas concretas. Para ello, en primer lugar definimos la clase (en el bloque de estilos o en la hoja externa) como un estilo más, de esta forma: .Nombre_de_la_clase {propiedad1:valor; propiedad2:valor…..;propiedadN:valorN} Para aplicar el estilo de una clase a una etiqueta concreta, utilizaremos el parámetro CLASS como sigue: <etiqueta CLASS=”Nombre_de_la_Clase”> … </etiqueta> ▪ Pseudoclases Hay ocasiones en las que HTML da a algunas etiquetas un estilo propio: por ejemplo, los enlaces aparecen por defecto de otro color y subrayados. Estos elementos son las pseudoclases. Por ahora, sólo están definidas para la etiqueta <A>. La forma de definir un estilo para una pseudoclase es la siguiente: 31 Fundamentos tecnológicos etiqueta: pseudoclase {propiedad1:valor;…;propiedadN:valorN} pseudoclases: - link: Estilo de un enlace que no ha sido visitado. - visited: Estilo de un enlace que ha sido visitado. - active: Estilo de un enlace que está siendo pulsado. - hover: Estilo de un enlace sobre el que está pasando el ratón. ▪ Atributos - Aributo "font-family": Es uno de los principales atributos de texto para una página. Por ejemplo, queremos aplicar una fuente tipo "Verdana" a todo el documento. Pondríamos: <STYLE> BODY{font-family:verdana} </STYLE> - Aributos de márgenes y alineación: Se trata de cuatro atributos que intervienen en la distancia entre la caja y los componentes internos que tiene esa caja, respecto a los cuatro márgenes: margin-left, margin-right, margin-top, margin-bottom. <STYLE> BODY {margin-top: 15px; margin-right; 15px; margin-bottom: 15px; margin-left:15px} </STYLE> padding-top, padding-bottom, padding-right, padding-left: Estos atributos indican la distancia entre los lados de la caja de texto y los elementos que están en su interior. Es posible usar las medidas estándar (pulgadas, centímetros, puntos, pixel, etc.) o valores porcentuales: - Atributos para los bordes: Se trata de cuatro atributos: border-top, border-bottom, border-right, border-left; estos atributos definen el estilo y el color de cada elemento 32 Fundamentos tecnológicos <STYLE> BODY { border-top: green; border-left: none; border-right: blue; border-bottom: red } </STYLE> Se pueden definir los colores de los cuatro bordes a la vez, como por ejemplo: <STYLE> BODY { border-color: red } </STYLE> border-style: Define el estilo de los bordes a la vez, <STYLE> BODY { border-style: groove } </STYLE> - Aributo font-size: Este atributo establece el tamaño del texto. Mientras el HTML es estándar prevé tan sólo 7 niveles predefinidos para el tamaño del texto (de font size=1 a font size=7), las hojas de estilo permiten un control mucho más preciso y elástico, sin limitaciones. Este atributo indica el estilo para la fuente. Es posible aplicar distintos valores: <STYLE> BODY { font-style:normal } </STYLE> - Atributo font-variant: Asigna un estilo todo en mayúsculas. Si no está disponible en el ordenador del usuario, el estilo usará las mayúsculas adaptándose a las medidas. Los valores que hay que asignar son "normal" y "small-caps" <STYLE> BODY { font-variant: small-caps } </STYLE> 33 Fundamentos tecnológicos - Atributo font-weight: El atributo font-weight establece el grosor de las fuentes como “BOLD". Es posible asignar a este atributo valores diferentes: bold, extra-light, demilight, medium, extra-bold, etc <STYLE> BODY { font-weight: bold } </STYLE> - Atributo text-decoration: Permite decorar el texto con subrayados y otros efectos. Puede tener varios valores: none, underline, italic y line-height, etc <STYLE> BODY { text-decoration: none } </STYLE> - Atributo color: El atributo color define el color del texto del documento (no se debe confundir con el color de background) tanto mediante los nombres de los colores en inglés: black, silver, gray, white, red, blue, etc) y con los códigos hexadecimales. - Atributo background-color , background-imagen: Este atributo de background-color determina el color de fondo, el atributo background-image, tiene una función similar al background="imagen.gif" de HTML clásico, invocando una imágen en formato GIF o JPG cargada en la css. 34 Fundamentos tecnológicos 2.6 EJEMPLOS DE EJECUCIÓN 2.6.1 PHP Lo que se muestra a continuación es parte del código de la clase CMySQL, clase que utilizamos para el acceso a la base de datos. <? class CMySQL { //variables de conexión var $BaseDatos; var $Servidor; var $Usuario; var $Clave; //identificador de conexión y consulta var $Conexion_ID = 0; var $Consulta_ID = 0; //número de error y texto error var $Errno = 0; var $Error = ""; /*Método Constructor: Cada vez que creemos una variable de esta clase, se ejecutará esta función*/ function CMySQL($bd = "", $host = "localhost", $user = "nobody", $pass = "") { $this->BaseDatos = $bd; $this->Servidor = $host; $this->Usuario = $user; $this->Clave = $pass; 35 Fundamentos tecnológicos } /*Conexión a la base de datos*/ function Conectar($bd, $host, $user, $pass){ if ($bd != "") $this->BaseDatos = $bd; if ($host != "") $this->Servidor = $host; if ($user != "") $this->Usuario = $user; if ($pass != "") $this->Clave = $pass; //Conectamos al servidor $this->Conexion_ID = mysql_connect ($this->Servidor, $this->Usuario, $this->Clave); if (!$this->Conexion_ID) { $this->Error = "Ha fallado la conexión."; return 0; } //seleccionamos la base de datos if (!@mysql_select_db($this->BaseDatos, $this->Conexion_ID)) { $this->Error = "Imposible abrir ".$this->BaseDatos ; return 0; } //Si hemos tenido éxito en la consulta devuelve //el identificador de la conexión, sino devuelve 0 return $this->Conexion_ID; } /* Ejecuta un consulta */ function Consulta($sql = ""){ 36 Fundamentos tecnológicos if ($sql == "") { $this->Error = "No ha especificado una consulta SQL"; return 0; } //ejecutamos la consulta $this->Consulta_ID = @mysql_query($sql, $this->Conexion_ID); if (!$this->Consulta_ID) { $this->Errno = mysql_errno(); $this->Error = mysql_error(); } //Si hemos tenido éxito en la consulta devuelve //el identificador de la conexión, sino devuelve 0 return $this->Consulta_ID; } /*Devuelve el número de campos de una consulta*/ function NumCampos() { return mysql_num_fields($this->Consulta_ID); } /* Devuelve el número de registros de una consulta*/ function NumRegistros(){ return mysql_num_rows($this->Consulta_ID); } /*Libera resultados a consultas anteriores*/ function LiberaResultado() { 37 Fundamentos tecnológicos mysql_free_result($this->Consulta_ID); } /*Cierra sesiones de conexión*/ function Cerrar() { mysql_free_result($this->Consulta_ID); mysql_close($this->Conexion_ID); } /*Devuelve el primer registro del objeto consulta*/ function PrimerRegistro() { $registro = mysql_fetch_object($this->Consulta_ID); return $registro; } /*Devuelve el ultimo registro del objeto consulta*/ function UltimoRegistro() { while ($registro = mysql_fetch_object($this->Consulta_ID) ) { } return $registro; } /*Recorre resultados de una consulta*/ function Mover() { return mysql_fetch_object($this->Consulta_ID); } /*Esta función comienza una transaccion en MySQL*/ function Iniciar_Transaccion() { mysql_query("BEGIN", $this->Conexion_ID); 38 Fundamentos tecnológicos } /*Esta función termina la transaccion con éxito*/ function Commitar() { mysql_query("COMMIT", $this->Conexion_ID); } /*Esta función acaba la transacción como si no hubiera cambios*/ function RollBack() { mysql_query("ROLLBACK", $this->Conexion_ID); } } ?> 2.6.2 JAVASCRIPT ▪ Función que comprueba si una cadena es un dni válido: function tipoDNI(nif){ letras = new Array(); letras[0] = "T", letras[1] = "R", letras[2] = "W", letras[3] = "A", letras[4] = "G", letras[5] = "M", letras[6] = "Y", letras[7] = "F", letras[8] = "P", letras[9] = "D", letras[10] = "X", letras[11] = "B", letras[12] = "N", letras[13] = "J", letras[14] = "Z", letras[15] = "S", letras[16] = "Q", letras[17] = "V", letras[18] = "H", letras[19] = "L", letras[20] = "C", letras[21] = "K", letras[22] = "E"; txtError = ""; ok = true; dni=nif.substring(0,nif.length-1); 39 Fundamentos tecnológicos dni=parseInt(dni); letra=nif.charAt(9); letraCorrecta = letras[ dni % 23]; if (dni > 99999999){ //si tienes mas de 8 cifras ok = false; } else if(letra!=letraCorrecta) {//si la letra es correcta ok = false; } return !ok; } ▪ Función que comprueba si una cadena es un número entero. function tipoInteger(oTxt){ var checkOK = "0123456789"; var checkStr = oTxt; var allValid = true; var decPoints = 0; var allNum = ""; for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (j = 0; j < checkOK.length; j++) if (ch == checkOK.charAt(j)) break; if (j == checkOK.length) { allValid = false; 40 Fundamentos tecnológicos break; } allNum += ch; } if (!allValid) { allValid=false; } return !allValid; } ▪ Función que carga la pantalla principal. function cargarPrincipal(){ if (top.location != self.location)top.location = self.location; parent.location.href="index.php"; } ▪ Función que comprueba si los datos usuario y password son correctos. function comprobarValores(error,usuario,password,obligatorio){ error1=false; error2=false; mensaje=”Error en:”+"\n"; if(document.form_presentacion.login.value.length==0){ mensaje=mensaje+"- Usuario obligatorio \n"; document.form_presentacion.login.focus() error1=true; 41 Fundamentos tecnológicos } if(document.form_presentacion.pass.value.length==0){ mensaje=mensaje+- Password obligatorio \n”; error2=true; if (!error1){ document.form_presentacion.pass.focus() } } if ((!error1)&&(!error2)){ //Datos correctos document.form_presentacion.submit(); return true; }else{ //Error->Mostrar error alert(mensaje); return false; } } 2.6.3 CSS ▪ Estilo para el texto: .texto_oscuro { font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #005075; } .texto_claro { font-family: Arial, Helvetica, sans-serif; 42 Fundamentos tecnológicos font-size: 11px; font-weight: bold; color: #E6ECEB; } ▪ Estilo para los input: input { font-family: Arial, Helvetica, sans-serif; font-size: 12px; } ▪ Estilo para los hipervínculos visitados y no visitados: A:link, A:visited { font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold; color: #E6ECEB; text-decoration: none; } ▪ Estilo para los hipervínculos cuando se pasa el ratón por encima: A:hover{ font-family: Arial, Helvetica, sans-serif; font-size: 13px; font-weight: bold; 43 Fundamentos tecnológicos color: #E6ECEB; text-decoration: none; } ▪ Estilos para el color de las capas: .capa_oscura{ background-color:#006d95; } .capa_clara{ background-color:#4892b5; } ▪ Estilos para las tablas: TABLE { border-style: hidden } td{ padding:0px 0px 0px 2px;} 44 Análisis CAPÍTULO 3: ANÁLISIS: LENGUAJE DE MODELAMIENTO UNIFICADO (UML) 3.1 Introducción 3.2 Casos de usos 3.3 Diagramas de clases 3.4 Diagramas de interacción 3.5 Diagramas de transición de estados 45 Análisis 3.1 INTRODUCCIÓN En este capítulo se detallará la fase de análisis de la aplicación por medio de UML (Lenguaje unificado de modelado). UML es un lenguaje que permite modelar, construir y documentar los elementos que forman un sistema software, para lo que cuenta con varios tipos de diagramas, los cuales muestran diferentes aspectos de las entidades representadas. Sus objetivos principales son los siguientes: Expresan de una forma gráfica un sistema de manera que otro lo puede entender. Especifica cuáles son las características de un sistema antes de su construcción. Construir a partir de los modelos especificados los sistemas diseñados. Los propios elementos gráficos forman parte de la documentación del sistema para su mantenimiento. 3.2 CASOS DE USO 3.2.1 Descripción de la técnica A continuación se realiza una breve explicación de los casos de uso, para mayor información ver anexo al final de la memoria. Un diagrama de casos de uso es un grafo constituido por actores, casos de uso y relaciones que se establecen entre ellos. Cada diagrama constituye un escenario, donde se describen los distintos requisitos funcionales del sistema. Los elementos que constituyen un diagrama de casos de uso son los siguientes: Actores: Usuarios del sistema u otros sistemas externos. Casos de uso: Representa un requisito funcional del sistema. Escenarios: Diferentes caminos que pueden darse en un caso de uso. Paquetes: Los paquetes se emplean en los diagramas de casos de uso para la organización de éstos. Relaciones: Existen distintos tipos de relaciones entre los elementos anteriores: - Actor-Actor: La relación que pueden mantener dos actores es la relación de generalización. En esta relación el actor hijo hereda el comportamiento de un 46 Análisis actor padre, además de poder definir los atributos propios que los diferencia de los demás. - Actor-Caso de uso: La relación que puede tener un actor con un caso de uso es una relación de comunicación, está puede tener una o dos direcciones. - Casos de uso-Caso de uso: Las relaciones que se pueden dar entre los casos de uso son tres, generalización/especificación, inclusión y extensión. 1. Generalización / Especificación: Un caso de uso hijo hereda el comportamiento y el significado de otro caso de uso padre. El caso de uso hijo puede añadir información el comportamiento o bien redefinirlo. 2. Inclusión: La inclusión se presenta cuando existe un comportamiento común entre varios casos de uso. <<include>> 3. Extensión: Representa un comportamiento opcional de un caso de uso. <<extend>> 47 Análisis 3.2.2 Diagramas de casos de uso del proyecto A continuación se muestran los diferentes diagramas de casos de uso generados durante el proceso de análisis del proyecto. Figura 3.1 Diagrama Principal de los Casos de Uso Como se puede observar en el diagrama principal de los casos de uso, intervienen dos actores: administrador y usuario. Cada actor podrá acceder a un conjunto de acciones distintas, dichas acciones se han agrupado en paquetes para su mejor compresión. De esta forma las acciones que puede realizar el actor Administrador se encuentran en el paquete Administración y las acciones que puede realizar el actor Usuario se encuentran en el paquete Gestión de Pacientes. El actor usuario puede tener dos tipos de permisos: Permiso de lectura. Podrán acceder al paquete Gestión de pacientes pero no podrán acceder a los casos de usos que realicen inserción, modificación o eliminación en la base de datos. Permiso de escritura. Los usuarios con este tipo de permiso podrán acceder a todos los casos de usos del paquete Gestión de pacientes. A continuación se desarrollarán los distintos paquetes. 48 Análisis Figura 3.2 Diagrama de Casos de Uso del paquete Administración Este diagrama representa las acciones que puede realizar el administrador. Las operaciones principales son: Gestión de usuarios: En esta zona el administrador podrá dar de alta, editar o dar de baja a los usuarios de la aplicación. Gestión de la base de datos: En esta zona el administrador podrá dar de alta, editar o dar de baja registros en determinadas tablas de la base de datos. Carga de tratamientos por medio de un archivo XML: En esta zona el administrador podrá añadir mediante la carga de un archivo de formato XML tratamientos recogidos desde el diario de episodio/tratamientos de AMH. 49 Análisis Figura 3.3 Diagrama de Casos de Uso del paquete Gestión de pacientes En este diagrama se muestran las distintas operaciones que se pueden realizar desde la pantalla principal del usuario, desde aquí se podrá acceder a cualquier información del paciente, así como realizar informes y estadísticas. A continuación se desarrollarán cada uno de los paquetes en los que se divide este diagrama. 50 Análisis Figura 3.4 Diagrama de Casos de Uso del paquete General Cuando se selecciona un paciente determinado se mostrará la información general de dicho paciente, esta información es un resumen de todos los datos que se encuentran almacenados, de esta forma el usuario podrá obtener una visión global de la situación del paciente. Dentro de esta información se encuentran el listado de la profilaxis y de los porta-acath. Figura 3.5 Diagrama de Casos de Uso del paquete Tratamientos 51 Análisis La acción principal de este paquete es mostrar todos los tratamientos de un determinado paciente, que se encuentran almacenados en la base de datos. A partir de ahí se podrán realizar las operaciones que muestra el diagrama. Los paquetes análisis, articulaciones, cuestionarios e inmunotolerancias no se han desarrollado. Son muy similares al paquete tratamientos, con la única diferencia que en estos paquetes no se encuentra el caso de uso Añadir Concentrado/Dosis. Figura 3.6 Diagrama de Casos de Uso del paquete Inhibidores Figura 3.7 Diagrama de Casos de Uso del paquete Informes Existen dos casos de uso más: Ayuda y Salir. A estos casos de uso se puede acceder desde cualquier otro. 52 Análisis 3.3 DIAGRAMAS DE CLASES 3.3.1 Descripción de la técnica Igual que en el apartado anterior, se realiza una explicación breve de los diagramas de clases, para mayor información ver anexo al final de la memoria. El objetivo principal de los diagramas de clases es la representación de los aspectos estáticos del sistema, utilizando para ello diversos mecanismos de abstracción como son la clasificación, generalización y agregación. Los diagramas de clases identifican las clases, relaciones, atributos y operaciones que se utilizarán en el sistema de información. Debido a su carácter estático es mucho más fácil de entender que los modelos dinámicos. El diagrama de clases está compuesto por varios tipos de componentes que se describen a continuación. Clases: Las clases agrupan o abstraen objetos con atributos, relaciones y operaciones comunes y con la misma semántica y comportamiento. Objetos: Un objeto de una clase es la instancia de esa clase. Atributos: Propiedad de una clase compartida por todos sus objetos. Operaciones: Representan el comportamiento de los objetos de una clase. La visibilidad tanto de los atributos como de las operaciones se descompone en tres tipos: + público - privado # protegido Relaciones: Las relaciones son las conexiones que pueden tener los distintos elementos. Existen varios tipos de relaciones: - Asociación: La asociación es una relación estructural que especifica que los objetos de un elemento están conectados con los objetos de otro. Multiplicidad: Cero a 1. 0..1 Muchos. 0..n ó 0..n Uno o más. 1..n ó 1..* Número exacto. 7 Combinaciones. 0..1, 3..4, 6..* 53 Análisis - Agregación: La agregación es un caso particular de la asociación, parte de la relación jerárquica entre un objeto que representa la totalidad de ese objeto y las partes que lo componen. - Dependencia: La relación de dependencia representa que una clase requiere de otra para proporcionar alguno de sus servicios. - Generalización o herencia: Es el mecanismo que permite a una clase de objetos añadir atributos y métodos de otra clase, incorporándolos a los que ya tiene. - Paquete: Los paquetes se usan para dividir el modelo de clases del sistema de información agrupando clases u otros paquetes. 3.3.2 Diagramas de clases del proyecto La implementación de la aplicación Web no ha seguido una estructura de programación orientada a objetos. Se establece una clase de acceso a la BD MySQL para gestionar los datos, siendo esta la única clase propiamente dicha de la aplicación. PHP dispone de funcionalidad para trabajar con clases desde su versión 3, pero ya que la Programación Orientada a Objetos, a parte de las clases, se basa en otros conceptos como la herencia, interfaces, polimorfismo, etc., las cuales no se implementan en la versión que hemos utilizado durante el desarrollo de la aplicación, proponemos este diseño en diagrama de clases como trabajo futuro de refactoriación de código. Figura 3.8 Diagramas de clases principal 54 Análisis Los diagramas de clases están distribuidos en tres carpetas principales: Dominio del problema: Reconoce el problema y determina las necesidades y objetivos. Interfaz de usuario: Comprende todos los puntos de contacto entre el usuario y la aplicación. Gestión de datos: Desarrollo y ejecución de arquitecturas, políticas, prácticas y procedimientos que gestionan apropiadamente las necesidades del ciclo de vida completo de los datos. 55 Análisis Figura 3.9 Dominio del problema 56 Análisis Figura 3.10 Dominio del problema (continuación) 57 Análisis Las clases del dominio del problema no contienen todos sus atributos, se han omitido por una mayor claridad en el diagrama. La gestión de datos no se muestra en este apartado, ya que el capítulo siguiente esta dedicado exclusivamente a ello. Interfaz de usuario Figura 3.11 Diagrama principal de clases del Interfaz de Usuario. La ventana de control de usuario aparece cuando se inicia la aplicación, a partir de ella podremos acceder a la aplicación dependiendo si nos encontramos registrados o no en el sistema. Los usuarios registrados se encuentran en la tabla Usuarios de la base de datos, cada usuario contiene una password para entrar en el sistema, dicha password está encriptada para mayor seguridad. El diagrama principal del interfaz de usuario está dividido en dos paquetes: Administración si accedemos como administrador y Gestión de pacientes si accedemos como usuario. A continuación se desarrollarán cada uno de ellos. Todas las clases utilizan la tabla Etiquetas, pero se ha omitido para una mayor claridad en los diagramas. 58 Análisis - Paquete administración Figura 3.12 Diagrama de clases del paquete Administración Este diagrama contiene las distintas operaciones que puede realizar un usuario de tipo administrador. Esta parte de la aplicación se divide en tres pestañas: Usuarios, Sistema y Tratamientos. 59 Análisis Figura 3.13 Diagrama de clases del paquete Pestaña Sistema 60 Análisis En este paquete se controlan todos los registros el sistema. Los registros de análisis y cuestionario pueden activar o desactivarse, de esta forma en la interfaz se mostrará solo los registros que están activos en ese momento. - Paquete listado tratamientos de la AMH Figura 3.14 Diagrama de clases del paquete Tratamientos de la AMH El objetivo de este paquete es automatizar la carga de tratamientos de pacientes obtenidos del diario episodios/tratamientos proporcionado por la Asociación Malagueña de Hemofilia (AMH). Estos tratamientos se proporcionan en un archivo con formato XML para facilitar su carga, y que permanece encriptado para salvaguardar la privacidad de los datos. 61 Análisis - Paquete gestión de pacientes Figura 3.15 Diagrama de clases del paquete Gestión de Pacientes 62 Análisis Cuando entramos como usuario al sistema, se muestra la ventana principal de la Gestión de Pacientes. A partir de aquí el usuario controla todos los datos de los pacientes. La información de los pacientes está dividida en pestañas. La ventana que se muestra inicialmente es la pestaña General. Figura 3.16 Diagrama de clases del paquete Buscar Paciente La búsqueda de pacientes se realiza por los datos principales del paciente. Una vez introducido los datos de búsqueda y pulsado el botón buscar, aparecerá un listado de los pacientes que cumple el criterio de búsqueda. Cada paciente aparecerá acompañado de un botón que al pulsarlo cargará los datos de dicho paciente. 63 Análisis Figura 3.17 Diagrama de clases del paquete Estadísticas Mediante está opción, el usuario obtiene distintos listados de pacientes, filtrando los resultados mediante unos criterios determinados. 64 Análisis Figura 3.18 Diagrama de clase del paquete Profilaxis Este paquete gestiona las profilaxis de los pacientes, llevando a cabo las operaciones básicas: alta, baja y modificación. 65 Análisis Figura 3.19 Diagrama de clases del paquete Tratamientos El paquete tratamiento además de gestionar las operaciones básicas de alta, eliminación y modificación, gestiona el seguimiento de cada tratamiento. Este seguimiento se realiza a través de la clase “Añadir Concentrado/Dosis“, de esta forma queda por un lado la gestión del tratamiento y por el otro la gestión del conjunto de “Concentrados/Dosis” aconsejado para cada tratamiento. Los paquetes análisis, articulaciones, cuestionarios e inmunotolerancias no se han desarrollado. Presentan el mismo diagrama que el paquete tratamientos. 66 Análisis Figura 3.20 Diagrama de clases del paquete Inhibidores Su funcionalidad es parecida a la del paquete de tratamientos, interviniendo otras entidades. El seguimiento de cada inhibidor, se realiza a través de la clase “Historial Inhibidor”. 67 Análisis Figura 3.21 Diagrama de clases del paquete Informes Hay tres tipos de informes: informe de actividades, informes de viaje e informe de minusvalía. Estos informes tienen un formato fijo, es decir, la estructura y el texto están predeterminados. 68 Análisis 3.4 DIAGRAMAS DE INTERACCION 3.4.1 Descripción de la técnica El objetivo de esta técnica es la descripción del comportamiento dinámico del sistema mediante el intercambio de mensajes entre objetos del mismo. Representa un medio para verificar la corrección del sistema mediante la validación con el modelo de clases. Cada diagrama de interacción describe en detalle un determinado escenario de un caso de uso, mostrando la interacción entre el conjunto de objetos que cooperan en la realización de dicho escenario. Los elementos que componen los diagramas de interacción son los siguientes: - Objetos: Instancias de una determinada clase o de un actor. - Mensajes: Es una comunicación entre dos objetos. El envío de un mensaje por parte de un objeto (emisor) a otro (receptor) puede provocar que se ejecute una operación, salte un evento o se cree o destruya un objeto. Existen dos tipos de diagramas de interacción: diagramas de secuencia y diagramas de colaboración, ambos tratan la misma información, pero cado uno enfatiza en aspectos particulares de la forma de mostrarla. A continuación hacemos una pequeña descripción de los diagramas de secuencia. ▪ Diagramas de Secuencia: Muestran el comportamiento del sistema en términos de la secuencia de mensajes intercambiados. Pone un mayor énfasis en la ordenación de los mensajes intercambiados por los objetos. Lo que realmente interesa es el orden de producción de los mensajes. Tiene dos dimensiones, el eje vertical representa el tiempo y el eje horizontal los diferentes objetos. El tiempo avanza desde la parte superior del diagrama hacia la arte inferior. Cada objeto tiene asociado una línea de vida y varios focos de control. Los elementos que componen los diagramas de secuencia son los siguientes: - Evento: Es un estímulo individual que llega a un objeto procedente de otro. Estos eventos pueden tener parámetros, se trasladan en un solo sentido y la respuesta ha de hacerse con otro evento. 69 Análisis - Escenario: Secuencia de eventos que se produce durante una ejecución concreta de un sistema. - Objeto: Un objeto se representa por una línea vertical discontinua, llamada línea de la vida. - Línea de vida de un objeto: Período de tiempo en que existe el objeto. Si el objeto es destruido durante la interacción que muestra el diagrama, la línea de vida termina en ese punto, si no es eliminado en el tiempo que dura la interacción, su línea de vida se prolonga hasta la parte inferior del diagrama. - Foco de control: Muestra el período de tiempo en el cual el objeto se encuentra ejecutando alguna operación, ya sea directamente o mediante un procedimiento concurrente. Se representa como un rectángulo delgado superpuesto a la línea de vida del objeto, la longitud de éste dependerá de la duración de la acción. La parte superior del rectángulo indica el inicio de una acción ejecutada por el objeto y la parte inferior su finalización. - Mensaje: Se representa como una flecha horizontal entre las líneas de vida de los objetos que intercambian los mensajes. La flecha tiene asociada una etiqueta con el nombre del mensaje y los argumentos entre paréntesis. Los mensajes pueden ser etiquetados con un número de secuencia. Un objeto puede mandarse un mensaje a sí mismo. Hay que destacar que los mensajes pueden presentar condiciones e iteraciones. Una condición se representa mediante una expresión booleana encerrada entre corchetes junto a un mensaje, este mensaje solo será enviado en el caso que se cumpla la condición booleana. Las iteraciones se representan con un asterisco y una expresión entre corchetes, que indican el número de veces que se produce. 70 Análisis 3.4.2 Diagramas de secuencia del proyecto A continuación se mostrarán algunos de los diagramas de secuencia del proyecto. El caso normal es cuando todo es correcto y el caso excepción es cuando se ha producido un error, en este caso se muestra un mensaje. Figura 3.22 Diagrama de secuencia de Nuevo Análisis (caso normal) En este diagrama, se puede observar como interactúa el usuario con en la interfaz de la aplicación, para insertar un nuevo análisis en la base de datos. El funcionamiento es similar para todas las operaciones de inserción. Primero se obtienen los datos de las entidades, para mostrar el formulario que crea un nuevo registro. Una vez introducidos los datos en dicho formulario, pulsar el botón guardar. Antes de insertar el nuevo registro en la base de datos, se comprueba si todo es correcto. 71 Análisis Figura 3.23 Diagrama de secuencia de Nuevo Análisis (caso excepción) Este diagrama representa la secuencia cuando la comprobación de los datos no es correcta. Mostrará un mensaje con los datos incorrectos. 72 Análisis Figura 3.24 Diagrama de secuencia de Modificar Análisis (caso normal) Este diagrama muestra la secuencia de operaciones que se realiza al modificar un análisis. El funcionamiento es similar para todas las operaciones de modificación. Una vez modificados los datos deseados, pulsar el botón guardar, a continuación se realizará la comprobación de los datos. 73 Análisis Figura 3.25 Diagrama de secuencia de Modificar Análisis (caso excepción) Este diagrama muestra la secuencia cuando la comprobación de los datos no es correcta. 74 Análisis Figura 3.26 Diagrama de secuencia de Eliminar Análisis (caso normal) Cuando se pulsa el botón eliminar análisis, se mostrará un mensaje de confirmación. Este diagrama, representa el comportamiento de la aplicación en el caso de que se confirme la eliminación. 75 Análisis Figura 3.27 Diagrama de secuencia de Eliminar Análisis (caso excepción) Secuencia de operaciones que se lleva a cabo al cancelar la eliminación de análisis. 76 Análisis 3.5 DIAGRAMAS DE TRANSICION DE ESTADOS 3.5.1 Descripción de la técnica El objetivo de estos diagramas es representar cambios de estado, es decir, mostrar los diferentes estados que atraviesa un objeto debido su flujo de ejecución, indicando los eventos que implican la transición de un estado a otro. Gráficamente los diagramas de estados se representan con un grafo dirigido en el que sus nodos representan estados del elemento descrito y sus arcos son transiciones, etiquetadas con nombres de eventos, entre dichos estados. Los elementos que componen los diagramas de transición de estados son los siguientes: Estados: Es una situación en la vida de un objeto en la que este satisface alguna condición, realiza alguna acción y/o espera algún evento. Las condiciones que puede cumplir un estado suele establecerse en valores de atributos y enlaces. Se caracteriza por el valor de uno o varios atributos que lo definen en un momento dado. Existen dos tipos de estados especiales que son: - Estado Inicial: Marca el inicio de la vida del sistema u objeto especificado en el diagrama. A lo sumo puede haber uno en cada diagrama de estados. A un estado inicial no puede llegar ninguna transición. - Estado Final: No hay estados posteriores a él, no hay ninguna transición que parta de él y marca el fin de la vida del objeto especificado. Operación: Se define como la especificación de una sentencia ejecutable que constituye una abstracción de un procedimiento. Las operaciones tienen acceso a los parámetros del evento que dispara la acción, a las variables de estado y a otros atributos del objeto. Las operaciones se expresan de la siguiente forma: Etiqueta de operación/Expresión de operación La expresión de la operación puede contener argumentos. La etiqueta de operación s emplea para caracterizar el tipo de operación y el momento en que se ejecuta. Tipos de operaciones: 77 Análisis - Actividad: Es una operación con duración, que se ejecuta mientras que el elemento permanece en el estado o hasta que termina el cómputo de la operación. Una actividad puede ser interrumpida por una transición de salida del evento. La etiqueta de operación correspondiente a las actividades es do. - Acción: Se considera como una operación que constituye un bloque que no puede ser interrumpido. Dentro de las acciones, se consideran varios subtipos. Acciones de entrada: Se ejecutan al entrar al estado al que están asociadas. Se representan anteponiéndoles la etiqueta de operación entry. Acciones de salida: Se ejecutan al salir del estado al que están asociadas. La etiqueta de la operación correspondiente es exit. Acciones internas: Están asociadas a las llamadas transiciones internas y no producen un cambio de estado por el evento dado. Opcionalmente pueden estar controladas por una condición de guarda. Cuando se produce una transición interna no se ejecutan las acciones de entradas y de salida del estado, ya que ni se sale ni se entra en él. Su representación es la siguiente: eventoInterno (argumento) [guarda/acciónInterna(argumentos) Un mismo evento puede disparar varias acciones internas en el mismo estado siempre que las condiciones de guarda sean excluyentes. Envío de eventos: Consiste en el envío de un evento a otro objeto. Los envíos de eventos pueden realizarse a la entrada de un estado, a la salida, o asociados a una transición de cualquier tipo. Se representan mediante la siguiente expresión de operación. send objetoDestino.evento (argumentos) ^objetoDestino.evento (argumentos) Observaciones: Según la semántica de los diagramas de estados de UML, un estado puede tener varias acciones internas y, a lo sumo, una actividad, una acción de entrada y una acción de salida. Evento: Es un acontecimiento significativo y que puede constituir un estímulo que dispare una transición de estados. Los eventos son sucesos atómicos que no pueden ser interrumpidos. Los eventos sólo tienen un sentido, la respuesta es otro evento. 78 Análisis Transición: Es una relación entre dos estados que indica que si el elemento descrito en el diagrama se encuentra en el primero de ellos y se produce un evento dado, el elemento pasará al segundo estado. Las transiciones pueden tener acciones asociadas, que se ejecutan durante el cambio de estado. Se representa gráficamente con una flecha que parte del estado origen y finaliza en el de destino. Transiciones con características especiales: - Transición reflexiva: Transición que nos lleva al mismo estado. - Transición automática: Transición que no tiene ningún evento asociado. Se dispara al finalizar la actividad del estado que la origina. Si el estado no tiene actividad, se dispara tras ejecutar las acciones de entrada y de salida. Puede tener asociada una guarda, en cuyo caso la transición se dispara al finalizar la actividad del estado si se verifica la condición de guarda. Acción: Es una operación atómica ejecutable por el elemento descrito en el diagrama. 79 Análisis 3.5.2 Diagramas de transición de estados del proyecto A continuación se mostrarán algunos de los diagramas de estados del proyecto. Figura 3.28 Diagrama de estado de Ficha Tratamiento En la opción Ficha Tratamiento se muestra los datos del tratamiento seleccionado. A partir de aquí, se podrá realizar las distintas operaciones que indica el diagrama. Figura 3.29 Diagrama de estado de Nuevo Tratamiento 80 Análisis Cuando se está realizando la operación de Nuevo Tratamiento, cualquier evento que no sea el de btnGuardarClick o btnListadoTratamientoClick, produce un error. Esto ocurre cuando se inserta cualquier registro a la base de datos. Antes de añadir un nuevo registro a la base de datos, se comprueba si los datos son correctos, en el caso de que no lo sean, se muestra un mensaje informando los campos incorrectos. Figura 3.30 Diagrama de estado de Modificar Tratamiento Al pulsar la opción de Modificar Tratamiento, la primera acción que se realiza, es la de editar los datos del tratamiento seleccionado. Una vez modificados los datos, al pulsar el botón guardar, se comprobará si los datos son correctos, en el caso de que no lo sea se mostrará un mensaje informando los campos incorrectos. 81 Análisis Figura 3.31 Diagrama de estado de Eliminar Tratamiento Antes de eliminar un tratamiento o cualquier registro de la base de datos, se muestra un mensaje de confirmación. Si se confirma la acción, se comprueba si el registro puede ser eliminado (consistencia de datos). En el caso de que el registro sea referenciado por otra tabla, se muestra un mensaje de error. 82 Modelo Entidad-Relación en MySQL CAPÍTULO 4: DISEÑO: MODELO E/R EN MYSQL 4.1 Introducción 4.2 Modelo entidad relación 4.3 Acceso a la Base de Datos 83 Modelo Entidad-Relación en MySQL 4.1 INTRODUCCIÓN En este capítulo exponemos la estructura de los datos o Modelo de Datos desarrollado, así como la implementación del Modelo Relacional en el Sistema Gestor de Base de Datos MySQL. También veremos la forma como PHP interactúa con la base de datos, junto a otras características, como la integridad referencial o el uso de transacciones. 4.2 MODELO ENTIDAD-RELACION En este punto vamos a desarrollar el modelo entidad-relación de la información que vamos a almacenar en la base de datos. A partir del mismo implementaremos la base de datos relacional en el SGBD MySQL. A continuación definimos formalmente los elementos que comprenden el modelo. 4.2.1 Conceptos modelo entidad-relación Entidades. Se puede definir como entidad a cualquier objeto, real o abstracto, que existe en un contexto determinado o puede llegar a existir y del cual deseamos guardar información. Las entidades las podemos clasificar en entidades fuertes, son aquellas que no necesitan de atributos de otras entidades para que existan ejemplares de ella, mientras que las entidades débiles están definidas con atributos de otras tablas y sí los necesitan. Atributos. Las entidades se componen de atributos que son cada una de las propiedades que lo caracterizan. Cada ejemplar de una misma entidad posee los mismos atributos, tanto en nombre como en número, diferenciándose cada uno de los ejemplares por los valores que toman dichos atributos. Existen distintos tipos, obligatorios, opcionales, monoevaluados y multievaluados. Ejemplar. Si estuviéramos hablando de Clases, la entidad sería una clase y cada ejemplar sería una instancia de esa clase. En nuestra base de datos, cada ejemplar se identificará con una entrada de una tabla de la base de datos. 84 Modelo Entidad-Relación en MySQL Dominio. Se define dominio como un conjunto de valores que puede tomar un determinado atributo dentro de una entidad. De forma casi inherente al término dominio aparece el concepto restricción para un atributo. Clave. El modelo entidad-relación exige que cada entidad tenga un identificador, se trata de un atributo o conjunto de atributos que identifican de forma única a cada uno de los ejemplares de la entidad. De tal forma que ningún par de ejemplares de la entidad puedan tener el mismo valor en ese identificador. A estos atributos se les llama indentificadores principales o claves primarias, pudiendo darse el caso de que halla más de uno, quedando los otros como identificadores candidatos. Relaciones. Se entiende por relación a la asociación, vinculación o correspondencia entre entidades. En cada relación se debe establecer el número máximo y mínimo de ejemplares de un tipo de entidad que pueden estar asociadas, mediante una determinada relación, con un ejemplar de otra entidad. Los tres tipos de relaciones son: - Uno a uno (1:1), donde para un ejemplar de una entidad existe una relación única con otro ejemplar de otra entidad. - Muchos a uno (m:1), varios ejemplares de una entidad se relacionan con el mismo ejemplar de otra. - Muchos a muchos (m:m), varios ejemplares se relacionan con varios de otra entidad. 4.2.2 Modelo Entidad-Relación Ahora construiremos el modelo para nuestra base de datos Las entidades que conseguimos al aplicar el modelo a nuestros datos son las siguientes: Pacientes, guarda la información principal de todos pacientes. General, guarda datos médicos generales. Porta, aquí guardaremos la información correspondiente a los porta-a-cath del paciente. 85 Modelo Entidad-Relación en MySQL Profilaxis, guarda la información de todas las profilaxis (tratamientos preventivo) del paciente. Tratamientos, contiene información de todos los tratamientos. Hay dos tipos de tratamientos: los tratamientos que recomienda el médico y las inyecciones que se pone el paciente. Estos dos tipos de tratamientos lo diferencia el campo Operación que valdrá “1” si el tratamiento ha sido recomendado por el médico y “2” en el otro caso. Historial_Tratamiento, contiene información del seguimiento de cada tratamiento. Cada tratamiento tiene asociado un conjunto de concentrado/dosis. Analisis, contiene información de todos los análisis del paciente. El valor de cada uno de los parámetros del análisis se encuentra en Datos_Analisis. Los parámetros que pueden ser evaluados son los que están activo en ese momento, esto lo controla el campo Activo de la entidad Etiquetas_Analisis. Etiquetas_Analisis, contiene las etiquetas de los parámetros del análisis. El campo Activo de esta entidad indicará en cada momento si ese parámetro puede ser evaluado en el análisis o no. Datos_Analisis, aquí guardaremos el valor correspondiente a cada parámetro evaluado en el análisis. Revisiones_Articulaciones, guarda información de las revisiones de las articulaciones del paciente. Inhibidores, contiene información de los inhibidores del paciente. Historial_Inhibidor, contiene información de los tratamientos la evolución de los inhibidores del paciente. Inmunotolerancias, contiene información de los tratamientos de inmunotolerancias asociadas a la eliminación de los inhibidores del paciente. 86 Modelo Entidad-Relación en MySQL Cuestionarios, guarda información de los cuestionarios realizados a los pacientes. Dichos cuestionarios se evalúan por un conjunto de ítems, el valor de estos ítems se encuentran en la entidad Datos_Cuestionarios. El campo Activo de la entidad Etiquetas_Cuestionarios controla los ítems que pueden ser evaluados. Etiquetas_Cuestionarios, contiene los ítems del cuestionario. El campo Activo de esta entidad indicará en cada momento si ese ítem puede ser evaluado en el cuestionario o no. Datos_Cuestionarios, aquí guardaremos el valor correspondiente a cada ítem evaluado en el cuestionario. Usuarios, contiene información de todos los usuarios que pueden acceder a la aplicación. Etiquetas, aquí guardaremos todas las etiquetas de la aplicación. Cada registro de esta entidad contiene las etiquetas en un idioma distinto, con el fin de mostrar la aplicación en el idioma que se desee. Para añadir un nuevo idioma, solo hay que insertar un nuevo registro en esta entidad. Articulaciones, Causas_Extraccion, Causas_Fallecimiento, Causas_Investigacion, Cirugías, Concentrados, Localizaciones, Defectos, Otras_Reacciones, Diagnosticos, Protocolos, Genotipovhc, Intervalos, Unidades_Titulos, Sangrados, Tipo_Profilaxis son entidades fuertes que no guardan información de los pacientes, si no que sirven para definir valores de campos de otras entidades. Estas son las entidades que forman nuestro modelo. En la siguiente figura se muestra la estructura del modelo entidad-relación, donde se ven las relaciones entre entidades. Las relaciones se establecerán mediante líneas, donde el tipo de relación vendrá marcada de la siguiente manera: Representa una relación del tipo muchos a uno. Representa una relación del tipo uno a uno. Representa una relación del tipo muchos a muchos. 87 Modelo Entidad-Relación en MySQL Figura 4.1 Modelo Entidad-Relación 88 Modelo Entidad-Relación en MySQL Figura 4.2 Modelo Entidad-Relación (continuación) 89 Modelo Entidad-Relación en MySQL 4.3 ACCESO A LA BASE DE DATOS 4.3.1 Modelo de Acceso Para acceder a la base de datos usaremos distintas funciones disponibles en PHP. Para activar el acceso para esta base de datos, durante la instalación de PHP como módulo del servidor Web Apache, debemos hacerla compilándolo con soporte para MySQL, usando la opción de la configuración –with-mysql[DIR=]. A partir de PHP 4 esta opción está activada por defecto. En la mayoría de distribuciones de Sistemas Operativos tenemos la opción de instalar el modulo con un gestor de paquetes propio del sistema (yum, apt-get, aptitude, synaptic,etc.), instalando el módulo PHP del servidor Web correspondiente, en nuestro caso Apache, así como el modulo de PHP necesario para la comunicación con el SGBD MySQL. En el caso de instalar una versión fuente (source), se especifica donde está instalado MySQL y el servidor Web, para que PHP pueda compilar los módulos que le son necesario. Para esto hace falta tener las fuentes de MySQL instaladas también en el servidor. En nuestro modelo de acceso, el software necesario para que nuestra aplicación acceda a la base de datos recae totalmente sobre la máquina servidor. Para la máquina cliente, lo único que se necesita es un navegador Web y un acceso a la red, para acceder a través del servidor Web Apache al conjunto de páginas que forman la aplicación. Figura 4.3 Modelo acceso Cliente-Servidor. 90 Modelo Entidad-Relación en MySQL 4.3.2 Clase CMySQL Como interfaz de acceso al SGBD, hemos creado una Clase CMySQL, en la cual creamos una serie de métodos para acceder a la base de datos, iniciar transacciones, realizar consultas, etc… y así disminuir el número de llamadas a funciones para realizar una sola consulta. Pongamos por ejemplo que queremos hacer una conexión desde una de las páginas de nuestra aplicación Web para insertar datos en la base de datos, todo ello desde dentro de una transacción, para dar fiabilidad a la consulta. En primer lugar creamos una nueva instancia de nuestra clase con $conexion=new CMySQL(); y empezamos a usar los métodos para conectarnos a la base de datos. Conectamos a la base de datos con $conexion->Conectar(“DATABASE”, “HOSTNAME”, “USER”, “PASSWORD”); donde el primer parámetro del método es el nombre de la base de datos, el segundo el Host, el tercero el nombre del usuario de la base de datos y el último la contraseña de acceso. Iniciamos la transacción segura con $conexion->Iniciar_Transaccion(); Realizamos la consulta, para ello en la variable de PHP $consulta introducimos una cadena de texto con la consulta en el lenguaje SQL, y luego llamamos al método que realiza la consulta, $errorconsulta=$conexion->Consulta($consulta); donde $errorconsulta es una variable donde se devuelve si la consulta se realizó con éxito o no. Según el valor de la variable $errorconsulta admitiremos la consulta con $conexion>Commitar(); o con $conexion->RollBack(); volveremos sobre nuestros pasos anulando la consulta. Más adelante profundizaremos sobre la utilidad de las transacciones. Una vez terminemos las consultas, cerramos la conexión con el método $conexion>Cerrar();. 91 Modelo Entidad-Relación en MySQL 4.3.3 Transacciones e integridad referencial El servidor de bases de datos MySQL soporta distintos tipos de tablas, tales como ISAM, MyISAM, InnoDB, y DBD (Berkeley Database). De éstos, InnoDB es el tipo de tabla más importante (después del tipo predeterminado, MyISAM), y será el que usaremos en nuestra base de datos. Las tablas del tipo InnoDB tienen soporte para la definición de claves foráneas, por lo que se nos permite definir reglas o restricciones que garanticen la integridad referencial de los registros, además de permitir trabajar con transacciones. Para asegurarnos que tenemos soporte para el tipo de tablas INNODB podemos ejecutar la siguiente sentencia en el intérprete de comandos de MySQL: mysql> SHOW VARIABLES LIKE ‘%innodb%’; donde nos fijaremos que la variable have_innodb se encuentre con el valor YES. Transacciones Las transacciones aportan una fiabilidad superior a las bases de datos. Si disponemos de una serie de consultas SQL que deben ejecutarse en conjunto, con el uso de transacciones podemos tener la certeza de que nunca nos quedaremos a medio camino de ejecución. De hecho, podríamos decir que las transacciones aportan a las aplicaciones de base de datos la característica de “deshacer” un grupo de consultas. Los pasos para usar transacciones en MySQL son: Iniciar una transacción con el uso de la sentencia BEGIN. Actualizar, insertar o eliminar registro en la base de datos. Si se quieren los cambios a la base de datos, completar la transacción con el uso de la sentencia COMMIT. Únicamente cuando se procesa un COMMIT los cambios hechos por las consultas serán permanentes. Si sucede algún problema, podemos hacer uso de la sentencia ROLLBACK para cancelar los cambios que han sido realizados por las consultas que han sido ejecutadas hasta el momento. 92 Modelo Entidad-Relación en MySQL Las transacciones también son útiles en el caso de desconexiones con el servidor, ya que si por ejemplo estamos haciendo una inserción de muchos datos, hasta que no procesemos un COMMIT, ninguna de las inserciones tendrá efecto, evitando así inconsistencias en la base de datos. Integridad Referencial Hay dos reglas de integridad muy importantes que son restricciones que se deben cumplir en todas las bases de datos relacionales y en todos sus estados o instancias (las reglas se deben cumplir todo el tiempo). Estas reglas son la regla de integridad de entidades y la regla de integridad referencial. ▪ Regla de integridad de entidades La primera regla de integridad se aplica a las claves primarias de las relaciones base: ninguno de los atributos que componen la clave primaria puede ser nulo. Por definición, una clave primaria es un identificador irreducible que se utiliza para identificar de modo único las tuplas. Irreducible significa que ningún subconjunto de la clave primaria sirve para identificar las tuplas de modo único. Si se permite que parte de la clave primaria sea nula, se está diciendo que no todos sus atributos son necesarios para distinguir las tuplas, con lo que se contradice la irreducibilidad. ▪ Regla de integridad referencial La segunda regla de integridad se aplica a las claves foráneas: si en una relación hay alguna clave foránea, sus valores deben coincidir con valores de la clave primaria a la que hace referencia, o bien, deben ser completamente nulos. La regla de integridad referencial se enmarca en términos de estados de la base de datos: indica lo que es un estado ilegal, pero no dice cómo puede evitarse. La cuestión es ¿qué hacer si estando en un estado legal, llega una petición para realizar una operación que conduce a un estado ilegal? Existen dos opciones: rechazar la operación, o bien aceptar la operación y realizar operaciones adicionales compensatorias (en cascada, valores por defecto, etc) que conduzcan a un estado legal. 93 Modelo Entidad-Relación en MySQL Por lo tanto, para cada clave foránea de la base de datos habrá que plantearse tres cuestiones: 1. Regla de los nulos: ¿Tiene sentido que la clave foránea acepte nulos? 2. Regla de borrado: ¿Qué ocurre si se intenta borrar la tupla referenciada por la clave ajena? o Restringir: no se permite borrar la tupla referenciada. o Propagar: se borra la tupla referenciada y se propaga el borrado a las tuplas que la referencian mediante la clave ajena. o Anular: se borra la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (sólo si acepta nulos). 3. Regla de modificación: ¿Qué ocurre si se intenta modificar el valor de la clave primaria de la tupla referenciada por la clave ajena? o Restringir: no se permite modificar el valor de la clave primaria de la tupla referenciada. o Propagar: se modifica el valor de la clave primaria de la tupla referenciada y se propaga la modificación a las tuplas que la referencian mediante la clave ajena. o Anular: se modifica la tupla referenciada y las tuplas que la referenciaban ponen a nulo la clave ajena (sólo si acepta nulos). En nuestra aplicación hay claves foráneas que si aceptan valores nulos, ya que hay parámetros que no son obligatorios evaluar (por ejemplo la causa de fallecimiento). En cuanto a la regla del borrado y de modificación se ha llevado a cabo la opción de restringir, ya que controlamos en la aplicación este tipo de inconsistencias. 94 Implementación Aplicación Web CAPÍTULO 5: IMPLEMENTACIÓN APLICACIÓN WEB 5.1 Introducción 5.2 Sistema de autenticación 5.3 Nociones básicas 5.4 Zona de administración 5.5 Zona de usuarios 95 Implementación Aplicación Web 5.1 INTRODUCCIÓN En este capítulo realizaremos una descripción detallada de la interfaz de usuario de nuestra aplicación Web. Para ello recorreremos las distintas páginas y formularios de la aplicación describiendo detalladamente cada uno de ellos. Durante el capítulo se mostrarán capturas de pantalla para facilitar la compresión del uso de la aplicación. 5.2 SISTEMA DE AUTENTICACIÓN Una vez iniciada la aplicación aparecerá por pantalla la ventana de entrada al sistema. Ésta nos permitirá el acceso o no, dependiendo de sí nos encontramos registrados en el sistema. Figura 5.1 Sistema de autenticación La aplicación consta de dos módulos principales: Zona de administración. Zona de usuario. 96 Implementación Aplicación Web 5.3 NOCIONES BÁSICAS El programa presenta una serie de comportamientos comunes para casi la totalidad de los diálogos que interactúan con el usuario. Dichos comportamientos se especifican a continuación: ► Botones Botón Nuevo: Nos permite añadir un nuevo registro en la base de datos. Botón Modificar: Nos permite modificar los datos de un registro en la base de datos. Botón Eliminar: Nos permite eliminar el registro que en ese momento está seleccionado, mostrando una ventana de confirmación previa a la eliminación. Botón Ficha: En todos los listados cada registro va acompañado de este botón, al pulsarlo se mostrará los datos del mismo en forma de ficha. Botones Anterior y Siguiente: Estos botones permiten navegar por los distintos registros de nuestra base de datos, pudiendo avanzar o retroceder en ellos. ► Diálogo de aviso: Este tipo de diálogo aparecen cuando se produce un error porque faltan datos o por datos incorrectos. Figura 5.2 Situación de error 97 Implementación Aplicación Web Los usuarios con permisos de solo lectura no podrán añadir, modificar ni tampoco eliminar datos. Si en algún momento pulsa una de estas opciones aparecerá un mensaje como el siguiente: Figura 5.3 Situación de error Este mensaje también aparece cuando se realiza una opción no válida en cualquier momento, como la de pulsar el botón modificar paciente sin haber ningún paciente cargado en ese momento. ► La opción salir y ver la ayuda está disponible en cualquier parte de la aplicación. ► Los campos de los formularios que contienen un * son campos obligatorios. ► Todos los listados están ordenados por fecha en orden descendente, menos el de pacientes que está ordenado por los apellidos en orden alfabético. 98 Implementación Aplicación Web 5.4 ZONA DE ADMINISTRACIÓN Una vez que se ha accedido al sistema como administrador, se podrá visualizar la pantalla principal de administración que consta de las siguientes partes: Usuarios. En esta zona el administrador podrá dar de alta, editar o dar de baja a los usuarios de la aplicación. Sistema. En esta zona el administrador podrá dar de alta, editar o dar de baja registros en determinadas tablas de la base de datos. Tratamientos: En esta zona el administrador tiene la posibilidad de añadir nuevos tratamientos a los pacientes registrados, mediante la carga de un archivo XML con un formato determinado. 5.4.1 Usuarios En esta pantalla se muestra un listado de todos los usuarios dados de alta en el sistema. Para añadir un nuevo usuario pulsar el botón Nuevo Usuario, si lo que se desea es visualizar los datos de un determinado usuario pulsar el botón Ficha Usuario que lo acompaña. Figura 5.4 Usuarios 99 Implementación Aplicación Web Nuevo Usuario Para añadir un nuevo usuario insertar los datos del usuario y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de usuarios incluyendo el usuario añadido. Figura 5.5 Nuevo Usuario Para salir sin insertar un nuevo usuario, pulsar el botón Listado Usuarios. Las opciones de Modificar Usuario y Eliminar Usuario son opciones no válidas en esta pantalla. 100 Implementación Aplicación Web Ficha Usuario Al pulsar el botón de la ficha del usuario que se desea mostrar, aparecerá una pantalla como la siguiente pantalla: Figura 5.6 Ficha Usuario A continuación podrá realizar una de las siguientes acciones: Insertar un nuevo usuario. Modificar usuario. Modificar los datos de usuario y pulsar el botón Guardar, a continuación se mostrará el listado de todos los usuarios. Eliminar usuario. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación, aparecerá el listado sin el usuario que se ha eliminado. Listado de usuario. Aparecerá el listado de todos los usuarios. Anterior y siguiente. Permite navegar pos los distintos usuarios registrados. 101 Implementación Aplicación Web 5.4.2 Sistema En esta zona se le da flexibilidad al sistema pudiendo crear nuevos registros en determinadas tablas de la base de datos. En esta pantalla se muestra un listado con el nombre de las tablas, pulsar el botón que acompaña a la tabla que se desea que se muestren sus datos, a continuación aparecerá en la parte derecha el listado de todos los registros de la tabla seleccionada. Las tablas Análisis y Cuestionarios contienen un campo Activo, para poder activar o desactivar el registro. Solo los registros activados aparecerán en la interfaz de la zona de usuario. Figura 5.7 Sistema ► Nuevo Para añadir una nueva entrada en la tabla pulsar el botón Nuevo, insertar el valor y pulsar el botón guardar. ► Modificar Para modificar una entrada en la tabla pulsar el botón Modificar, que acompaña al registro que queremos modificar, a continuación modificar los valores y pulsar el botón guardar. 102 Implementación Aplicación Web Figura 5.8 Modificar registro ► Eliminar Para eliminar una entrada en la tabla pulsar el botón Eliminar, que acompaña al registro que queremos eliminar, a continuación aparecerá un mensaje de confirmación. 5.4.3 Tratamientos Al pulsar la pestaña Tratamientos aparecerá la siguiente pantalla: Figura 5.9 Tratamientos de la AMH 103 Implementación Aplicación Web Para cargar los tratamientos de los pacientes por medio de un archivo Xml, seleccionar por medio del botón Examinar el archivo deseado, a continuación pulsar el botón Cargar tratamientos, se mostrará un listado con los tratamientos que contiene dicho archivo. Figura 5.10 Tratamientos de la AMH Cada tratamiento que se muestra tiene asociado una o varias dosis, para mostrar las dosis pulsar el botón que acompaña al tratamiento que se desee, a continuación se mostrará un listado con las dosis de ese tratamiento. Figura 5.11 Dosis de un tratamiento 104 Implementación Aplicación Web Para cargar los datos a la base de datos, pulsar el botón Añadir tratamientos, de esta forma los tratamientos que se encuentran en el archivo Xml se almacenarán en las tablas de la base de datos. 5.5 ZONA DE USUARIOS Una vez que se ha accedido al sistema como usuario, se visualizará la siguiente pantalla: Figura 5.12 Ventana principal de Usuario 105 Implementación Aplicación Web Esta dividida en variar partes: Menú principal. - Nuevo paciente. - Modificar paciente. - Buscar paciente. - Estadísticas. - Anterior. - Siguiente. - Ayuda. - Salir. Datos principales del paciente. Datos médicos del paciente. - General. - Tratamientos. - Análisis. - Articulaciones. - Inhibidores. - Cuestionarios. - Informes. 106 Implementación Aplicación Web 5.5.1 Nuevo Paciente Para añadir un nuevo paciente introducir los datos personales y los datos generales el paciente a continuación pulsar el botón guardar, de esta forma el paciente quedará registrado. Figura 5.13 Nuevo paciente 107 Implementación Aplicación Web 5.5.2 Modificar Paciente La ventana que aparece es similar que la ventana de nuevo paciente, con la única diferencia que se editan los datos para que puedan ser modificados. Una vez modificado los datos que se deseen, pulsar el botón Guardar, de esta forma los cambios quedarán registrados. Figura 5.14 Modificar paciente 108 Implementación Aplicación Web 5.5.3 Buscar Pacientes La búsqueda de pacientes se realiza por los datos principales del paciente. Figura 5.15 Buscar paciente Introducir los datos de búsqueda y pulsar el botón buscar. A continuación aparecerá un listado de los pacientes que cumple el criterio de búsqueda. 109 Implementación Aplicación Web Figura 5.16 Listado de pacientes Para cargar los datos de un paciente pulsar el botón ficha que acompaña al paciente que se desea mostrar. 5.5.4 Estadísticas Al pulsar la opción de Estadísticas aparecerá una pantalla con los criterios con los que se puede realizar la estadística. 110 Implementación Aplicación Web Figura 5.17 Estadísticas Introducir los campos por los que se desea realizar la estadística y pulsar el botón aceptar. A continuación se mostrará un diálogo como el siguiente dependiendo del navegador: Figura 5.18 Abrir Listado Estadística Para abrir el listado de los pacientes que cumplen los criterios elegidos seleccionar la aplicación con la que se desea mostrar, para guardarlo seleccionar “Guardar en disco” y pulsar el botón aceptar. 111 Implementación Aplicación Web 5.5.5 General En la pestaña General se encuentra los datos generales del paciente. Figura 5.19 Datos Generales Listado de profilaxis y porta-a-cath: Para añadir una nueva profilaxis o nuevo porta-acath al paciente, pulsar el botón de añadir. Para modificar o eliminar una profilaxis o un porta-a-cath pulsar los botones correspondientes que acompaña al registro que se desea eliminar o modificar. La información de recuperación, tratamiento recomendado y próxima visita son datos del último análisis que se le realizó a paciente. El campo inhibidor indica si el paciente tiene registrado algún inhibidor, así como también si lo tuvo previamente. 112 Implementación Aplicación Web 5.5.6 Tratamientos Cuando se pulsa la pestaña Tratamientos se muestra un listado con todos los tratamientos del paciente que esta activo en ese momento. Para añadir un nuevo tratamiento pulsar el botón Nuevo Tratamiento, si lo que se desea es visualizar un determinado tratamiento pulsar el botón Ficha Tratamiento que lo acompaña. Figura 5.20 Listado tratamientos 113 Implementación Aplicación Web Nuevo Tratamiento Para añadir un nuevo tratamiento insertar los datos del tratamiento y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de tratamiento incluyendo el tratamiento añadido. Figura 5.21 Nuevo Tratamiento 114 Implementación Aplicación Web Ficha Tratamiento Al pulsar el botón de la ficha de un determinado tratamiento, aparecerá la siguiente pantalla. Aquí se muestra los datos del tratamiento. Figura 5.22 Ficha Tratamiento A continuación podrá realizar una de las siguientes acciones: Insertar un nuevo tratamiento. Añadir Concentrado/Dosis. Al pulsar en esta opción se muestra el listado de las dosis de ese tratamiento. Para insertar una nueva dosis pulsar el botón Nuevo, para modificar o eliminar pulsar el botón que acompaña al registro que queremos modificar o eliminar respectivamente. Modificar tratamiento. Modificar los datos del tratamiento y pulsar el botón Guardar, a continuación se mostrará el listado de los tratamientos con la modificación realizada. Eliminar tratamiento. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación, aparecerá el listado sin el tratamiento que se ha eliminado. 115 Implementación Aplicación Web Listado de tratamientos. Aparecerá el listado de todos los tratamientos del paciente que esta activo en ese momento. Anterior y Siguiente. Permite navegar por los distintos tratamientos registrados del paciente actual. 5.5.7 Análisis Cuando se pulsa la pestaña Análisis se muestra un listado con todos los análisis del paciente que esta activo en ese momento. Para añadir un nuevo análisis pulsar el botón Nuevo Análisis, si lo que se desea es visualizar un determinado análisis pulsar el botón Ficha Análisis que lo acompaña. Figura 5.23 Listado análisis 116 Implementación Aplicación Web Nuevo Análisis Para añadir un nuevo análisis insertar los datos del análisis y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de análisis incluyendo el análisis añadido. Figura 5.24 Nuevo Análisis 117 Implementación Aplicación Web Ficha Análisis Al pulsar el botón de la ficha de un determinado análisis, aparecerá la siguiente pantalla: Figura 5.25 Ficha Análisis A continuación podrá realizar una de las siguientes acciones: Insertar un nuevo análisis. Modificar análisis. Modificar los datos del análisis y pulsar el botón Guardar, a continuación se mostrará el listado de los análisis con la modificación realizada. Eliminar análisis. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación aparecerá el listado sin el análisis que se ha eliminado. Listado de análisis. Aparecerá el listado de todos los análisis del paciente que esta activo en ese momento. Anterior y Siguiente. Permite navegar por los distintos análisis registrados del paciente actual. 118 Implementación Aplicación Web 5.5.8 Articulaciones En la pestaña Articulaciones, se muestra un listado con todas las revisiones realizas al paciente que esta activo en ese momento. Para añadir una nueva revisión pulsar el botón Nueva Articulación, si lo que se desea es visualizar una determinada revisión pulsar el botón Ficha Articulación que lo acompaña. Figura 5.26 Listado Articulaciones 119 Implementación Aplicación Web Nueva Articulación Para añadir una revisión de articulación insertar los datos de la revisión y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de las revisiones incluyendo la añadida Figura 5.27 Nueva Revisión de Articulación 120 Implementación Aplicación Web Ficha Articulación Al pulsar el botón de la ficha de una determinada revisión de articulación, aparecerá la siguiente pantalla: Figura 5.28 Ficha Revisión Articulación A continuación podrá realizar una de las siguientes acciones: Insertar una nueva revisión de articulación. Modificar articulación. Modificar los datos de la revisión de la articulación y pulsar el botón Guardar, a continuación se mostrará el listado de las revisiones con la modificación realizada. Eliminar articulación. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación aparecerá el listado sin la revisión de la articulación que se ha eliminado. Listado de articulaciones. Aparecerá el listado de todas las revisiones de articulaciones del paciente que esta activo en ese momento. 121 Implementación Aplicación Web Anterior y Siguiente. Permite navegar por las distintas revisiones de articulaciones registrados del paciente actual. 5.5.9 Inhibidores En la pestaña Inhibidores, se muestra un listado con todos los inhibidores del paciente que esta activo en ese momento. Para añadir un nuevo inhibidor pulsar el botón Nuevo Inhibidor, si lo que se desea es visualizar un determinado inhibidor pulsar el botón Ficha Inhibidor que lo acompaña. Figura 5.29 Listado Inhibidores 122 Implementación Aplicación Web Nuevo Inhibidor Para añadir un inhibidor insertar los datos del inhibidor y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de los inhibidores incluyendo el añadido. Figura 5.30 Nuevo Inhibidor 123 Implementación Aplicación Web Ficha Inhibidor Al pulsar el botón de la ficha de un determinado inhibidor, aparecerá la siguiente pantalla: Figura 5.31 Ficha Inhibidor A continuación podrá realizar una de las siguientes acciones: Insertar un nuevo inhibidor. Modificar inhibidor. Modificar los datos del inhibidor y pulsar el botón Guardar, a continuación se mostrará el listado de los inhibidores con la modificación realizada. Eliminar inhibidor. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación, aparecerá el listado sin el inhibidor que se ha eliminado. Listado de inhibidores. Aparecerá el listado de todos los inhibidores del paciente que esta activo en ese momento. Anterior y Siguiente. Permite navegar por los distintos inhibidores registrados del paciente actual. 124 Implementación Aplicación Web Inmunotolerancias. Muestra un listado con las inmunotolerancias asociadas al inhibidor. Seguimiento inhibidor. Al seleccionar esta opción se muestra un listado con información del seguimiento del inhibidor. Para insertar un nuevo registro pulsar el botón Nuevo, para modificar o eliminar pulsar el botón que acompaña al registro que queremos modificar o eliminar respectivamente. 5.5.10 Inmunotolerancias En la pestaña Inmunotolerancias, se muestra un listado con todas las inmunotolerancias, asociadas a un determinado inhibidor. Para añadir una nueva inmunotolerancia pulsar el botón Nueva IT, si lo que se desea es visualizar una determinada inmunotolerancia pulsar el botón Ficha IT que lo acompaña. Para volver al inhibidor pulsar el botón Inhibidor. Figura 5.32 Listado Inmunotolerancias 125 Implementación Aplicación Web Nueva Inmunotolerancia Para añadir una inmunotolerancia insertar los datos de la inmunotolerancia y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de las inmunotolerancias incluyendo la añadida. Figura 5.33 Nueva Inmunotolerancia 126 Implementación Aplicación Web Ficha Inmunotolerancia Al pulsar el botón de la ficha de una determinada inmunotolerancia, aparecerá la siguiente pantalla: Figura 5.34 Ficha Inmuntolerancia A continuación podrá realizar una de las siguientes acciones: Insertar una nueva inmunotolerancia. Modificar inmunotolerancia. Modificar los datos de la inmunotolerancia y pulsar el botón Guardar, a continuación se mostrará el listado de las inmunotolerancias con la modificación realizada. Eliminar inmunotolerancia. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación, aparecerá el listado sin la inmunotolerancia que se ha eliminado. Listado de inmunotolerancias. Aparecerá el listado de todos las inmunotolerancias del inhibidor seleccionado previamente. 127 Implementación Aplicación Web Anterior y Siguiente. Permite navegar por los distintas inmunotolerancias del inhibidor seleccionado. Inhibidor. Vuelve a la ficha del inhibidor. 5.5.11 Cuestionarios Listado con todos los cuestionarios del paciente que esta activo en ese momento. Para añadir un nuevo cuestionario pulsar el botón Nuevo Cuestionario, si lo que se desea es visualizar un determinado cuestionario pulsar el botón Ficha Cuestionario que lo acompaña. Figura 5.35 Listado Cuestionarios 128 Implementación Aplicación Web Nuevo Cuestionario Para añadir un nuevo cuestionario insertar los datos del cuestionario y pulsar el botón Guardar, si todo es correcto se mostrará de nuevo el listado de los cuestionarios incluyendo el añadido. Figura 5.36 Nuevo Cuestionario 129 Implementación Aplicación Web Ficha Cuestionario Al pulsar el botón de la ficha de un determinado cuestionario aparecerá la siguiente pantalla: Figura 5.37 Ficha Cuestionario A continuación podrá realizar una de las siguientes acciones: Insertar un nuevo cuestionario. Modificar cuestionario. Modificar los datos del cuestionario y pulsar el botón Guardar, a continuación se mostrará el listado de los cuestionarios con la modificación realizada. Eliminar cuestionario. Aparecerá una ventana de confirmación de la eliminación. Si se acepta la eliminación, aparecerá el listado sin el cuestionario que se ha eliminado. Listado de cuestionarios. Aparecerá el listado de todos los cuestionarios del paciente que esta activo en ese momento. 130 Implementación Aplicación Web Anterior y Siguiente. Permite navegar por los distintos cuestionarios registrados del paciente actual. 5.5.12 Informes Se pueden realizar tres tipos de informes: ► Informe de actividades. ► Informe de viaje. ► Informe de minusvalía. Figura 5.38 Informes 131 Implementación Aplicación Web Pulsar en la ficha que acompaña al informe que se desea realizar, a continuación se mostrará un diálogo como el siguiente dependiendo del navegador: Figura 5.39 Abrir Informe Para abrir el informe seleccionar la aplicación con la que se desea mostrar, para guardarlo seleccionar “Guardar en disco” y pulsar el botón aceptar. 132 Conclusiones CAPÍTULO 6: CONCLUSIONES 6.1 Resultados y conclusiones 6.2 Trabajos futuros 133 Conclusiones En este proyecto final de carrera se planteó como objetivo diseñar e implementar una aplicación Web que automatizará los procesos de almacenamiento, organización y gestión de la información sobre la evaluación de pacientes con hemofilia en el área sanitaria. En el inicio de nuestro proyecto marcamos unas fases o etapas de trabajo que gobernaban el desarrollo del mismo. Ahora es el momento de ver si esos objetivos se han alcanzado: Creación de un registro actualizado de los pacientes con hemofilia en el área sanitaria de Málaga (pero igualmente utilizable en otras zonas geográficas). Diseño de una evaluación sistemática de resultados clínicos de estos pacientes que permita el seguimiento homogeno de los mismos y la comparación de sus evoluciones, facilitando la optimización de tratamientos, estudios de efectos adversos y complicaciones, etc. Aplicar un cuestionario estadarizado de estudio de calidad de vida a dichos pacientes para conocer su situación y plantear un abordaje de sus espectativas de forma global. Crear un soporte en formato electrónico de esta información, de fácil manejo para los profesionales, que permita una intervención estadistica avanzada de los mismos. 6.1 RESULTADOS Y CONCLUSIONES A fin de validar el grado de cumplimiento de estos objetivos por parte de la aplicación propuesta, vamos a describir la funcionalidad general de la aplicación. La aplicación ha supuesto la realización de los siguientes pasos: - Se ha realizado un estudio previo, acerca de cómo organizar la estructura de la aplicación mediante diagramas UML. Se han utilizado diagramas de casos de usos, en principio para determinar cada una de las acciones que puede realizar un actor dentro de la aplicación, con los diagramas de secuencia se consigue esquematizar cada uno de los pasos que debe dar un actor para conseguir realizar una tarea y por último los diagramas de estado muestran los diferentes estados que atraviesa un objeto. 134 Conclusiones - Se ha creado una base de datos, bajo MySQL, para almacenar y consultar toda la información necesaria para la evaluación de pacientes con hemofilia, también se a hecho un estudio de cómo interrelacionar los datos dentro del sistema gestor de base de datos para organizarlo en tablas. - Se ha creado un interfaz gráfico en HTML para la aplicación acorde a los requisitos iniciales. - Se ha proporcionado acceso al sistema de gestión de bases de datos mediante el lenguaje de programación PHP. En cuánto a las ventajas de la aplicación podemos destacar: - Es una aplicación Web, accesible desde cualquier punto simplemente por disponer de una conexión a Internet y un explorador Web. Este diseño hace la aplicación independiente de la plataforma de acceso del usuario, quien podría tener instalado el sistema operativo de su elección y tan solo necesitará su explorador Web. En todo caso, dada la cobertura del mercado por los productos MS™, se ha elegido iExplorer como software de referencia para optimizar el acceso y los diseños. - La aplicación es fácil de usar e intuitiva, proveyendo interfaces construidas sobre formularios Web. El acceso a la base de datos se hace de forma fiable, oculta al usuario, eficiente y protegida para la sincronización de acceso simultáneos (transacciones). - Desde el punto de vista tecnológico, se hace uso de herramientas de libre distribución (Open Source) muy extendidas como es el caso de MySQL y PHP. Algunas de las ventajas de usar PHP son: Dispone de una amplia gama de librerías, y agregarle extensiones es muy fácil. Esto le permite al PHP ser utilizado en muchas áreas diferentes, tales como encriptado, gráficos, XML, PDF y otras. 135 Conclusiones Dispone de muchas interfaces alternativas para cada tipo de Servidor Web. PHP actualmente se puede ejecutar bajo Apache, IIS, AOLServer, Roxen y THTTPD. Puede interactuar con muchos motores de bases de datos tales como MySQL, MS SQL, Oracle, Informix, PostgreSQL, y otros muchos. Siempre podrás disponer de ODBC para situaciones que lo requieran. El paradigma de orientación a objetos de PHP mejora con cada nueva versión. - La aplicación permite su portabilidad. Puede ser montada en distintos sistemas operativos (Windows, Linux y Mac OS) y en distintos servidores Web (apache, cherokee…). - Se ha realizado un diseño modular que facilita la extensión de la funcionalidad mediante la incorporación de nuevas herramientas con relativa facilidad. Un ejemplo es el módulo de importación de tratamientos de la AMH. Para la incorporación de esta herramienta se ha insertado una nueva pestaña en la zona de administración y se ha creado un archivo php (cargarXml.php) donde se lleva a cabo las operaciones necesarias para su funcionamiento. - Se dispone de un procedimiento sencillo de instalación. - Extensibilidad. Las tablas sujetas a mayores cambios potenciales –debido a la aparición de nuevas técnicas, nuevos análisis clínicos, etc.- se han preparado para que su mantenimiento sea sencillo. De esta forma las tablas pueden incorporar nuevos parámetros de los pacientes, como diagnósticos, causas de investigación, defectos genéticos, etc. así como también los parámetros de los análisis y de los cuestionarios. Estos cambios en las tablas se reflejan automáticamente en los formularios de la aplicación, para el ingreso de datos, su consulta y la emisión de informes. - Visibilidad de la aplicación en cualquier idioma. Al darse de alta cada usuario elegirá el idioma deseado, de esta forma cuando se valide en el sistema la aplicación aparecerá en ese idioma. Los idiomas se encuentran en la tabla Etiquetas, para añadir un nuevo idioma solo habrá que insertar un nuevo registro en dicha tabla. 136 Conclusiones - Importación de tratamientos. Se pueden importar datos del diario de tratamientos de la AMH (Asociación Malagueña de Hemofilia), para pacientes registrados en ambas plataformas, mediante el módulo de carga de tratamientos. 6.2 TRABAJOS FUTUROS La versatilidad de las herramientas que hemos usado en la elaboración de nuestro proyecto permite una gran flexibilidad en cuanto a expansiones futuras en la aplicación. Mejoras que se podrían realizar: Informes. Actualmente los informes están realizados de una manera fija, es decir la estructura y el texto están predeterminados. Una mejora sería la opción de que los usuarios pudieran definir el contenido de los informes mediante un archivo XML, de esta forma no se necesitaría conocimientos de programación para cambiar su contenido, solo bastaría con modificar el formato de dicho archivo. También se podrían realizar mediante formularios, dado una interfaz con la que seleccionar los campos que se mostrarán en el informe. Cuestionarios. En la aplicación se almacenan los resultados que se obtienen de analizar las respuestas de los cuestionarios, dicho análisis se realiza de forma manual. La mejora consiste en que la aplicación evaluara ella misma las respuestas, obteniendo así los resultados de forma automática. Conexión con AMH. Actualmente usamos una transferencia asíncrona entre ambas plataformas, de manera que realizamos el trasvase de información de manera descentralizada. Almacenamos los datos encriptados desde AMH en un fichero XML en el ordenador cliente para después subirlo a HemoGest y actualizar la base de datos. La mejora consistiría en tener un Servicio Web en la AMH, de manera que desde Hemogest pudiera llamarse para actualizar su información con estos nuevos datos. Exportación de datos. La base de datos puede portarse simplemente creando un script de carga .sql realizando el volcado con la herramienta que proporciona MySQL (mysqldump). Junto a este método podría mejorarse la portabilidad de los datos proporcionándolos en otros formatos, como XML, Excel, etc. 137 Anexos ANEXOS 138 Anexos ANEXO I INSTALACIÓN DE LA APLICACIÓN Introducción A continuación indicaremos los pasos necesarios para inicializar nuestro proyecto en cualquier servidor que deseemos instalarlo: prerrequisitos, inicialización de la base de datos e instalación de la aplicación Web. Prerrequisitos La aplicación puede ser montada en distintos sistemas operativos (Windows, Linux y Mac). Para ello necesitamos instalar las siguientes aplicaciones: - Instalación de Servidor Web con soporte para PHP (Apache 2.0.48, www.apache.org). - Instalación de PHP (versión 4 o superior, www.php.net). - Instalación de la librería DOMXML. - Instalación de un Servidor de Base de Datos (MySQL, www.mysql.com). El acceso a la base de datos se ha realizado con una clase que se puede cambiar para acceder a otras BD visibles desde PHP (Oracle, Informix, PostgreSQL…) Inicialización de la Base de Datos Para inicializar la base de datos, usaremos el archivo de texto llamado BaseDatos.sql que contiene las instrucciones necesarias para crear la base de datos y las tablas. Ejecutaremos la siguiente sentencia en nuestro intérprete de comandos: mysql –u <usuario> –p < BaseDatos.sql 139 Anexos Una vez ejecutada dicha sentencia nos pedirá la contraseña de root en MySQL, tras unos segundos quedará instalada la base de datos en el sistema. Hay que realizar una carga mínima en la base de datos en la tabla Etiquetas. Esta tabla contiene la información de los idiomas, por lo tanto para poder visualizar la aplicación hay que añadir un registro, esto se lleva a cabo cargando el archivo de texto llamado Idiomas.sql. El lenguaje cargado será el español. mysql –u <usuario> –p < Idiomas.sql Para añadir un nuevo idioma solo habrá que traducir las etiquetas contenidas en el archivo Idiomas.sql y lanzar de nuevo la sentencia anterior. Es necesario añadir a la base de datos un usuario administrador para poder acceder por primera vez al sistema, para ello cargamos el archivo de texto llamado Usuarios.sql. mysql –u <usuario> –p < Usuarios.sql El login y la password por defecto para este usuario es admin. Una vez iniciada la aplicación cambiar los datos de este usuario. Instalación de la Aplicación Web Los datos de conexión de la base de datos se encuentran en un archivo llamado hemogest.config, Para instalar nuestra aplicación Web solo habría que descomprimir la carpeta HemoGest.tar en el directorio de nuestro servidor Web donde colgaremos la aplicación, de esta forma obtendremos una carpeta hemogest donde se encuentran todas las páginas php, las hojas de estilos y las imágenes de la aplicación. 140 Anexos Para iniciar nuestra aplicación Web, abrimos nuestro navegador y accedemos a ella: http://<Nombre del servidor>\hemogest Una vez iniciada la aplicación aparecerá por pantalla la ventana de entrada al sistema. Introducir el login y la password (admin) insertado anteriormente en la base de datos. 141 Anexos ANEXO II TERMINOLOGÍA BÁSICA DE LA HEMOFILIA Hemofilia: Alteración genética de la coagulación de la sangre que provoca la ausencia o disminución de algunos de los factores de coagulación. Es una anomalía hereditaria ligada al sexo, al cromosoma “X”. La transmite el sexo femenino y la padece el sexo masculino, salvo en raras excepciones que también la puede padecer la mujer. Existen diferentes tipos de hemofilia en función de la cual sea el factor de coagulación deficitario: - HEMOFILIA A: Ausencia o disminución del factor VIII; aproximadamente el 85 por ciento de los hemofílicos padece el tipo A. - HEMOFILIA B: Ausencia o disminución del factor IX. También llamada enfermedad del christmas. - VON WILLBRAND: Ausencia del factor Von Willeband pero cursa como un déficit del factor VII y disminución del funcionamientos las plaquetas. En hemofilia, dependiendo de la cantidad de factor que sintetiza cada persona, existen tres grados de severidad: - Severa: menos del 1%. - Moderada: entre un 1 y un 5% . - Leve: entre un 5 y 25%. DDAVP: Medicamento para la hemofilia A leve. Inhibidor: Anticuerpo (proteínas) que neutraliza la actividad de un factor de coagulación. Port-a-cath: Accesos venosos artificiales que facilita la administración del tratamiento en los pacientes más jóvenes. 142 Anexos Profilaxis: Infusión regular del factor de coagulante dos o tres veces por semana. Se aplica de esta manera para prevenir sangrados en las coyunturas (articulaciones). Se cree que la profilaxis prevendrá el daño de las coyunturas o de su empeoramiento. Inmunotolerancia: Eliminación del inhibidor, normalización de la vida media del factor VIII y ausencia de respuesta anamnésica. Tratamiento antirretrovial: Se aplican a los adultos y a los niños infectados por el VIH. Elisa, PCR-VHC: Métodos de escrutinio para la hepatitis C capaces de detectar el 99.9% de las donaciones contaminadas con el virus de la hepatitis C. Ribavirina: Medicamento para tratar las hepatitis C. Genotipo VHC: El genotipo se refiere a la formación genética de un organismo o virus. Hay por lo menos 6 genotipos del VHC identificados claramente. ALT: Alanina aminotransferasa. Esta es una enzima que las células hepáticas descargan en el torrente sanguíneo cuando el hígado se lesiona. Un nivel de ALT superior a lo normal puede indicar daño hepático. Los niveles de ALT se incluyen en los estudios rutinarios que se le hacen a los pacientes con hepatitis B crónica. GGT: Gamma-glutamil transferasa. Es otra enzima producida en las vías biliares que puede aparecer elevada en las personas con enfermedades de las vías biliares. La hepatitis y el consumo excesivo de alcohol también aumentan la GGT. HBsAg: Antígeno de superficie de la hepatitis B. El “antígeno de superficie” forma parte del virus de la hepatitis B que se encuentra en la sangre de una persona infectada. Si el resultado es positivo, significa que el virus de la hepatitis B está presente. Anti-HBs: Anticuerpo de superficie de la hepatitis B. El “anticuerpo de superficie” se forma en respuesta al virus de la hepatitis B. El organismo puede producir este anticuerpo si usted es vacunado, o si se ha recuperado de una infección de hepatitis B. 143 Anexos Si el resultado es positivo, su sistema inmunológico ha desarrollado con éxito un anticuerpo protector contra el virus de la hepatitis B, que le brindará protección a largo plazo contra infecciones futuras del mismo. Las personas que obtienen un resultado positivo en el anticuerpo de superficie no están infectadas y no le pueden contagiar el virus a los demás. Anti-HC: Anticuerpo de superficie de la hepatitis C. HCV-PCR: Prueba cuantitativa que mide la cantidad de virus circulando en la corriente sanguínea de la persona. AntiHAV: Anticuerpo de superficie de la hepatitis A. NºCD4: Nº de células de este tipo. El VIH causa en la mayoría de las personas una lenta disminución en estas células. Carga viral: Valor dentro del pronóstico muy importante en cuanto se refiere a la progresión de la infección por el VIH, así como para valorar la respuesta al tratamiento antiretroviral y a su eficacia. 144 Anexos ANEXO III DESARROLLO CON UML Casos de Uso Un diagrama de casos de uso es un grafo constituido por actores, casos de uso y las relaciones que se establecen entre ellos. Cada diagrama constituye un escenario, donde se describen los distintos requisitos funcionales del sistema. Los elementos que constituyen un diagrama de casos de uso son los siguientes: Actores: Un actor es algo o alguien que se encuentra fuera del sistema y que interactúa con él. En general, los actores son los usuarios del sistema u otros sistemas externos. Un único actor puede representar a varios usuarios distintos, y un usuario puede actuar como diferente actores. Actor Casos de uso: Los casos de uso especifican el comportamiento del sistema de información o de una parte de él, según una manera específica de dar respuesta a los usuarios. Un caso de uso representa un requisito funcional del sistema, describiendo el conjunto de secuencias de acciones, incluyendo variantes, que ejecuta el sistema para producir un resultado observable de interés para un actor. Caso de uso 145 Anexos Escenarios: Los escenarios son cada uno de los diferentes caminos que pueden darse en un caso de uso, dependiendo de las condiciones que se den en su realización. A cada uno de estos caminos se les llama diagramas de secuencia, los cuales veremos más adelante. Normalmente un caso de uso tiene varios tipos de caminos o flujo de eventos, siendo uno de ellos el flujo principal, compuesto por una serie de acciones que realiza el actor que interviene en ese caso de uso junto a la correspondiente respuesta del sistema. El resto de flujos se corresponden a ejecuciones erróneas o excepcionales, en las que se incumplen los requisitos el sistema y donde el actor obtiene una respuesta errónea. Paquetes: Los paquetes se emplean en los diagramas de casos de uso para la organización de éstos. Se determina una partición del sistema y a cada una de estas divisiones se le asocia un paquete en el que se incluyen los casos de usos correspondientes. Paquete Relaciones: Las relaciones pueden tener lugar entre actores y casos de uso entre los mismos casos de uso. La relación entre un actor y un caso de uso es una relación de comunicación, e indica que un actor interviene en ese caso de uso. Normalmente, el actor aporta información para la realización de un caso de uso o recibe información como resultado de la realización del mismo, por tanto, esta relación puede ser tanto unidireccional como bidireccional, predominando esta última. En cambio la relación entre casos de uso suele ser unidireccional. A continuación pasamos a detallar las diferentes relaciones existentes: - Actor-Actor: La relación que pueden mantener dos actores es la relación de generalización. En esta relación el actor hijo hereda el comportamiento de un actor padre, además de poder definir los atributos propios que lo diferencian de los demás. 146 Anexos Padre - Hijo Actor-Caso de uso: La relación que puede tener un actor con un caso de uso es una relación de comunicación. Caso de uso Actor Padre - Casos de uso-Caso de uso: Mediante estas relaciones mejoramos el modelado e interacción de comportamientos. A su vez distinguiremos tres tipos: 1. Generalización / Especificación: Un caso de uso hijo hereda el comportamiento y el significado de otro caso de uso padre. El caso de uso hijo puede añadir información el comportamiento o bien redefinirlo. Padre Hijo 2. Inclusión: La inclusión se presenta cuando existe un comportamiento común entre varios casos de uso. Si un caso de uso A incorpora explícitamente el comportamiento de otro caso de uso B, este comportamiento común se recoge en un tercer caso de uso C, que se relaciona con A y B mediante una relación de inclusión. 147 Anexos C <<include>> <<include>> B A 3. Extensión: Representa un comportamiento opcional de un caso de uso. Por lo tanto un caso de uso A que este relacionado con otro B puede escoger o no el comportamiento del caso de uso B dentro del escenario. La elección de escoger dicho comportamiento viene determinada por una serie de factores, los cuales influyen directamente en la extensión. Este tipo de relación es denominado <<extend>>. En estas relaciones la flecha parte del caso de uso con el comportamiento adicional hacia aquel que recoge el comportamiento básico. <<extend>> Básico Opcional 148 Anexos DIAGRAMAS DE CLASES El objetivo principal de los diagramas de clases es la representación de los aspectos estáticos del sistema, utilizando para ello diversos mecanismos de abstracción como son la clasificación, generalización y agregación. Los diagramas de clases identifican las clases, relaciones, atributos y operaciones que se utilizarán en el sistema de información. Debido a su carácter estático es mucho más fácil de entender que los modelos dinámicos. El diagrama de clases está compuesto por varios tipos de componentes que se describirán a continuación. Clases: Las clases agrupan o abstraen objetos con atributos, relaciones y operaciones comunes y con la misma semántica y comportamiento. Una clase se representa como una caja dividida en tres zonas por líneas horizontales. En la zona superior se identifica el nombre e la clase. La zona central contiene una lista de atributos y la zona inferior incluye una lista con las operaciones que proporciona la clase. Objetos: Un objeto de una clase es la instancia de esa clase. Atributos: Propiedad de una clase compartida por todos sus objetos. Los atributos son de dos tipos: base o derivados. Los atributos base son atributos básicos (int, String, etc.) y los atributos derivados se calculan a partir de los atributos base. Los atributos de una clase representan los datos asociados a los objetos instanciados por esa clase, cada atributo tiene un nombre único de su clase y el conjunto de valores de los atributos determina el estado de un objeto. El formato que siguen los atributos es el siguiente: {visibilidad} atributo: tipo = valor-inicial Operaciones: Representan el comportamiento de los objetos de una clase y lo caracterizan. Las operaciones pueden modificar los datos de un objeto. El formato que siguen las operaciones es el siguiente: 149 Anexos {visibilidad} operación (lista-de-argumentos): tipo-devuelto La visibilidad tanto de los atributos como de las operaciones se descompone en tres tipos: + público - privado # protegido Relaciones: Las relaciones son las conexiones que pueden tener los distintos elementos. Existen varios tipos de relaciones: - Asociación: La asociación es una relación estructural que especifica que los objetos de un elemento están conectados con los objetos de otro. Cada enlace es una instancia de una asociación. Las asociaciones se plantean bidireccionales, pero el nombre establece el sentido en que se recorre. Éstas pueden ser unarias, binarias, ternarias, n-arias. Una clase también puede tener asociaciones reflexivas. Cada relación tiene una multiplicidad que especifica cuántas instancias de una clase están asociadas a una instancia de la otra clase. La asociación se representa gráficamente como una línea continua entre las clases asociadas, junto a la línea puede tener un nombre que define la semántica o naturaleza de la asociación. Multiplicidad: Cero a 1. 0..1 Muchos. 0..n ó 0..* Uno o más. 1..n ó 1..* Número exacto. 7 Combinaciones. 0..1, 3..4, 6..* 150 Anexos - Agregación: La agregación es un caso particular de la asociación, parte de la relación jerárquica entre un objeto que representa la totalidad de ese objeto y las partes que lo componen. Su representa gráficamente mediante un rombo hueco en la clase cuya instancia es una agregación de las instancias de la otra. - Dependencia: La relación de dependencia representa que una clase requiere de otra para proporcionar alguno de sus servicios. Su representación gráfica consiste en una flecha con línea discontinua apuntando a la clase cliente. - Generalización o herencia: Es el mecanismo que permite a una clase de objetos reutilizar atributos y métodos de otra clase, incorporándolos a los que ya tiene. Es una relación Padre-Hijo, donde la clase hijo hereda la estructura y el comportamiento de la clase padre pudiendo redefinirlos para sus instancias. 151 Anexos - Paquete: Los paquetes se usan para dividir el modelo de clases del sistema de información agrupando clases u otros paquetes. Las dependencias entre los paquetes se definen a partir de las relaciones establecidas entre los distintos elementos que se agrupan en éstos. Las dependencias se representan con flechas discontinuas entre los paquetes dependientes. La representación gráfica de un paquete es un icono con forma de carpeta. 152 Anexos ANEXO IV TABLAS DE LA BASE DE DATOS Pacientes. Datos personales de los pacientes. IdPaciente Identificador del paciente. NUHSA Número Único de Historia de Salud de Andalucía. SeguridadS Número de la seguridad social. NumeroH Número del historial. CodigoF Código familia. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya dado de alta al paciente. DNI Documento nacional de identidad. Nombre Nombre del paciente. Apellido1 Primer apellido del paciente. Apellido2 Segundo apellido del paciente. Sexo Sexo del paciente EstadoC Estado civil. FechaN Fecha de nacimiento. Direccion Dirección del paciente. CP Código postal. Email Dirección de correo. TelefonoF Número de teléfono fijo. TelefonoM Número de teléfono móvil. TelefonoT Número de teléfono del trabajo. NombreP Nombre de un pariente. TelefonoP Teléfono del pariente. FechaF Fecha de fallecimiento. 153 Anexos CausaF Clave foránea a la tabla Causas_ Fallecimiento. Este campo almacenará el identificador de la causa de fallecimiento o “0” en caso de que este parámetro no sea evaluado. General. Información general de los pacientes. IdPaciente Identificador del paciente. FechaA Fecha de alta. Causa Clave foránea a la tabla Causas_ Investigación. Este campo almacenará el identificador de la causa de investigación. Diagnóstico Clave foránea a la tabla Diagnosticos. Este campo almacenará el identificador del diagnóstico. Defecto Clave foránea a la tabla Defectos. Este campo almacenará el identificador del defecto genético. Herencia Valor “1” si la hemofilia ha sido adquirida por herencia o “0” en caso contrario. HijoB Valor “1” si es hijo biológico o “1” en caso contrario. ADiagnostico Año del diagnóstico. Inhibidor Valor “1” si el paciente tiene inhibidor o “0” en caso contrario. InhibidorP Valor “1” si el paciente ha tenido inhibidor previamente o “0” en caso contrario. Especificacion Defecto específico. VHA Valor “1” si el paciente tiene el virus de la hepatitis A o “0” en caso contrario. VacunaA Valor “1” si el paciente esta vacunado del virus de la hepatitis A o “0” en caso contrario. DDAVP Valor “1” si al paciente se le ha realizado la prueba de DDAVP o “0” en caso contrario. PDDAVP Valores de la prueba DDAVP. Tasa Valor “1” si tiene tasa al factor o “0” en caso contrario. VHB Valor “1” si el paciente tiene el virus de la hepatitis B o “0” en caso contrario. 154 Anexos VacunaB Valor “1” si el paciente tiene la vacuna para el virus de la hepatitis B o “0” en caso contrario. PortadorB Valor “1” si el paciente es portador del virus de la hepatitis B o “0” en caso contrario. VHC Valor “1” si el paciente tiene el virus de la hepatitis C o “0” en caso contrario. GenotipoC Clave foránea a la tabla Genotipovhc. Este campo almacenará el identificador del genotipoC o el valor “0” en caso de que no se evalúe este término. PortadorC Valor “1” si el paciente es portador del virus de la hepatitis C o “0” en caso contrario. VHI Valor “1” si el paciente tiene el virus de inmunodeficiencia humana o “0” en caso contrario. TratamientoI Valor “1” si tiene carga viral o “0” en caso contrario. Comentarios Campo donde se almacenará comentarios del doctor. FechaP Fecha próxima visita. Rayox Valor “1” si la próxima visita es para rayos X o “0” en caso contrario. Rehabilitador Valor “1” si la próxima visita es para el rehabilitador o “0” en caso contrario. Concentrado Clave foránea a la tabla Concentrados. Este campo almacenará el identificador del concentrado alternativo o el valor “0” si no se ha seleccionado ningún concentrado alternativo. FvWRCo Factor von Willebrand cofactor ristocetina. FvWAg Factor von Willebrand antigénico. TasaFvWRCo Tasa factor von Willebrand cofactor ristocetina. TasaFvWAg Tasa Factor von Willebrand antigénico. 155 Anexos Porta. Información de los porta-a-cath. IdPorta Identificador del Porta-a-cath. IdPaciente Clave foránea a la tabla Pacientes. Este campo almacenará el identificador del paciente. Implantado Fecha de implantación del Porta-a-cath Extraido Fecha de extracción del Porta-a-cath CausaExtraccion Clave foránea a la tabla Causa_Extraccion. Este campo almacenará el identificador de la causa de extracción del porta-a-cath o el valor “0” si no se ha seleccionado ninguna causa de extracción. Profilaxis. Información de las profilaxis. IdProfilaxis Identificador de la profilaxis. IdPaciente Identificador del paciente. Empieza Fecha de inicio de la profilaxis. Termina Fecha de fin de la profilaxis. Tipo Clave foránea a la tabla Tipo_Profilaxis. Este campo almacenará el identificador del tipo de profilaxis. Tratamientos. Información de los tratamientos. IdTratamiento Identificador del Tratamiento. IdPaciente Clave foránea a la tabla Pacientes. Este campo almacenará el identificador del paciente. Fecha Fecha del tratamiento. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya dado de alta al tratamiento. Px Valor “1” si el tratamiento es a profilaxis o “0” en caso contrario. Dm Valor “1” si el tratamiento es a demanda o “0” en caso contrario. Q Valor “1” si en la visita se ha valorado una cirugía o “0” en caso contrario 156 Anexos VArticulacion Valor “1” si en la visita se ha valorado una articulación o “0 en caso contrario. Articulacion Clave foránea a la tabla Articulaciones. Este campo almacenará el identificador de la articulación valorada o el valor “0” si no se ha valorado ninguna articulación. IDArti Valor “1” si la articulación valorada es la izquierda, “2” si es la derecha o “0” si no se ha evaluado una articulación. VSangrado Valor “1” si en la visita se ha valorado un sangrado o “0 en caso contrario. Sangrado Clave foránea a la tabla Sangrados. Este campo almacenará el identificador del sangrado valorado o el valor “0” si no se ha valorado un sangrado. IDSangrado Valor “1” si el sangrado valorado se encuentra en la articulación izquierda, “2” si es en la derecha o “0” si no se ha valorado un sangrado. Cirugia Clave foránea a la tabla Cirugias. Este campo almacenará el identificador de la cirugía valorada o el valor “0” si no se ha valorado una cirugía. Recogida Valor “1” si se ha recogido factor o “0” en caso contrario. It Valor “1” si en la visita se ha valorado una inmunotolerancia o “0” en caso contrario. Operacion Valor “1” si el tratamiento ha sido recomendado por el médico o “2” si el tratamiento ha sido importado de diario de tratamientos de la AMH. Historial_Tratamiento. Información del seguimiento de cada tratamiento. IdHistorial Identificación del historial. IdTratamiento Identificación del tratamiento. FechaT Fecha del tratamiento. Concentrado Clave foránea a la tabla Concentrados. Este campo almacenará el identificador del concentrado. Dosis Dosis del tratamiento. 157 Anexos Análisis. Información de los análisis de cada paciente. IdAnalisis Identificador del análisis. IdPaciente Clave foránea a la tabla Pacientes. Este campo almacenará el identificador del paciente. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya realizado el análisis. FechaA Fecha del análisis. Peso Peso del paciente. DosisP Dosis del tratamiento de recuperación ConcentradoR Clave foránea a la tabla Concentrados. Este campo almacenará el identificador del concentrado de recuperación o el valor “0” si no se ha seleccionado ningún concentrado de recuperación. HorasR Horas recomendadas de la recuperación. FAntes FVIII/IX:C antes de la recuperación. FDespues FVIII/IX:C después de la recuperación. Trombosis Contendrá el valor “1” si el paciente tiene una trombosis y “0” en caso contrario. Localizacion Clave foránea a la tabla Localizaciones. Este campo almacenará el identificador de la localización de la trombosis o el valor “0” si no se ha seleccionado ninguna localización. Otras Clave foránea a la tabla Otras_Reacciones. Este campo almacenará el identificador de otras reacciones adversas o el valor “0” si no se ha seleccionado ninguna reacción adversa. TTratamiento Contendrá el valor “1” si el tipo de tratamiento es a demanda, “2” si es a profilaxis. DosisT Dosis del tratamiento. Concentrado Clave foránea a la tabla Concentrados. Este campo almacenará el identificador del concentrado del tratamiento recomendado. Intervalo Clave foránea a la tabla Intervalos. Este campo almacenará el identificador del intervalo del tratamiento recomendado. Comentarios Campo donde se almacenará comentarios del doctor. 158 Anexos Datos_Análisis. Valores correspondiente a cada parámetro evaluado en el análisis. IdAnalisis Clave foránea a la tabla Análisis. IdEtiqueta Clave foránea a la tabla Etiquetas_Analisis. Junto con el IdAnalisis forman la clave primaria de esta tabla. Valor Valor de una etiqueta (IdEtiqueta) para un análisis determinado (IdAnalisis). Etiquetas_Analisis. Etiquetas de los parámetros del análisis. IdEtiqueta Identificador de la etiqueta del análisis. Etiqueta Nombre de la etiqueta. Tipo Valor “0” si la etiqueta es de tipo cadena, “1” si es de tipo +/- o “2” si es de tipo numérico. Activo Valor “1” si la etiqueta está activa o “0” en caso contrario. Revisiones_Articulaciones. Información de las revisiones de las articulaciones IdRevision Identificador de la revisión. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya realizado la revisión. IdPaciente Clave foránea a la tabla Pacientes. Este campo almacenará el identificador del paciente. Fecha Fecha de la revisión. Articulación Clave foránea a la tabla Articulaciones. Este campo almacenará el identificador de la articulación valorada. DI Valor “1” si la articulación valorada es la izquierda o “2” si es la derecha. Posición Valor “1” si la posición de la articulación valorada es -, “2” si es + o “0” no se ha seleccionado ninguna posición. Valor Valoración de la articulación. Comentarios Campo para comentarios. 159 Anexos Inhibidores. Información de los inhibidores. IdInhibidor Identificador del inhibidor. IdPaciente Clave foránea a la tabla Pacientes. Este campo almacenará el identificador del paciente. Fecha Fecha del inhibidor. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya dado de alta al inhibidor. Concentrado Clave foránea a la tabla Concentrados. Este campo almacenará el identificador del concentrado. DemPro Contendrá el valor “2” si el tipo de tratamiento es a demanda y el valor “1” si es a profilaxis. TituloD Título al diagnóstico. UnidadD Clave foránea a la tabla Unidades_Titulos. Este campo almacenará el identificador de la unidad del título. PicoM Pico máximo. UnidadM Clave foránea a la tabla Unidades_Titulos. Este campo almacenará el identificador de la unidad del pico máximo. FechaP Fecha pico máximo. Activo Valor “1” si el inhibidor está activo o “0” en caso contrario. Historial_Inhibidor. Información del historial de cada inhibidor. IdHistorial Identificador del historial. IdInhibidor Clave foránea a la tabla Inhibidores. Este campo almacenará el identificador del inhibidor. FechaT Fecha del título. Titulo Título. Unidad Clave foránea a la tabla Unidades_titulos. Este campo almacenará el identificador de la unidad del título. 160 Anexos Inmunotolerancias. Información de las inmunotolerancias de cada inhibidor. IdInmuno Identificador de la Inmunotolerancia. IdInhibidor Clave foránea a la tabla Inhibidores. Este campo almacenará el identificador del inhibidor. FechaF Fecha del inhibidor. FechaIT Fecha de la inmunotolerancia. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya dado de alta a la inmunotolerancia. Protocolo Clave foránea a la tabla Protocolos. Este campo almacenará el identificador del protocolo. Éxito Valor “1” si la inmunotolerancia ha tenido éxito, “2” si no ha tendido éxito o “3” si está pendiente. UnidadIT Clave foránea a la tabla Unidades_Titulos. Este campo almacenará el identificador de la unidad del TituloIT. Comentarios Comentarios sobre la inmunotolerancia. Cuestionarios. Información de los cuestionarios de calidad de vida. IdCuestionario Identificador del cuestionario. IdPaciente Clave foránea a la tabla Pacientes. Este campo almacenará el identificador del paciente. Fecha Fecha del cuestionario. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya realizado el cuestionario. Total Resultado final del cuestionario. 161 Anexos Datos_Cuestionarios. Información de los ítems de los cuestionarios. IdCuestionario Clave foránea a la tabla Cuestionario. IdEtiqueta Clave foránea a la tabla Etiquetas_Cuestionarios. Junto con el IdCuestionario forman la clave primaria de esta tabla. Valor Valor del item (IdEtiqueta) para un cuestionario determinado (IdCuestionario). Etiquetas_Cuestionarios. Ítems de los cuestionarios. IdEtiqueta Identificador del ítem. Etiqueta Nombre del ítem. Activo Valor “1” si el ítem está activo o “0” en caso contrario. Articulaciones. Id Identificador de la articulación. Descripcion Descripción de la articulación. Causas_Fallecimiento. Id Identificador de la causa de fallecimiento. Descripción Descripción de la causa de fallecimiento. Causas_Investigación. Id Identificador de la causa de investigación. Descripción Descripción de la causa de investigación. Causas_Extraccion. Id Identificador de la causa de extracción. Descripción Descripción de la causa de extracción. 162 Anexos Cirugías. Id Identificador de la cirugía. Descripción Descripción de la cirugía. Concentrados. Id Identificador del concentrado. Descripcion Descripción del concentrado. Defectos Id Identificador del defecto genético. Descripcion Descripción de defecto genético. Diagnosticos. Id Identificador del diagnóstico. Descripcion Descripción del diagnóstico. Genotipovhc. Id Identificador del valor genotipoVHC. Descripcion Descripción del valor genotipoVHC. Intervalos. Id Identificador del intervalo. Descripcion Descripción del intervalo. 163 Anexos Localizaciones. Id Identificador de la localización. Descripcion Descripción de la localización. Otras_Reacciones. Id Identificador de la reacción. Descripcion Descripción de la reacción. Protocolos. Id Identificador del protocolo. Descripción Descripción del protocolo. Sangrados. Id Identificador del sangrado. Descripcion Descripción del sangrado. Tipo_Profilaxis. Id Identificador del tipo de profilaxis. Descripcion Descripción del tipo de profilaxis. Unidades_Títulos. Id Identificador de la unidad. Descripcion Descripción de la unidad. 164 Anexos Usuarios. Información de los usuarios del sistema. IdUsu Identificador del usuario. Nombre Nombre del usuario. Apellido1 Primer apellido del usuario. Apellido2 Segundo apellido del usuario. Institución Institución a la que pertenece el usuario. Login Nombre del usuario para acceder al sistema. Password Palabra clave de acceso. Email Correo electrónico del usuario. Permisos Carácter que determina la clase de privilegios del usuario, 1=administrador de la aplicación Web, 2=usuario de lectura y escritura, 3=usuario de lectura. Pais País del usuario. Departamento Departamento al que pertenece el usuario. Telefono Teléfono del usuario. Idioma Clave foránea a la tabla Etiquetas. Este campo almacenará el identificador del idioma elegido por el usuario. Cada vez que entre este usuario al sistema, la aplicación aparecerá del idioma indicado en este campo. Doctor Clave foránea a la tabla Usuarios. Este campo almacenará el identificador del usuario que haya dado de alta al usuario. 165 Bibliografía BIBLIOGRAFÍA Setrag Khoshafian y A. Brad Baker (1996) Multimedia and Imaging Databases. Morgan Kaufman Publishers. Toby Teorey (1994) Database Modeling and Desing: The Fundamental Principles. Morgan Kaufman Publishers. R.G.G. Cattell (1995) The Object Database Standard: ODMG-93, Release 1.2. Morgan Kaufman Publishers Gupta Amarnath (1997), Visual Information Retrieval Technology: A Virage perspective. Rev.4, Virage Image Engine API Specification (http://www.virage.com) Guptha Amarnath and Ramesh Jain, (1997), Visual Information Retrieval, Communications of the ACM, vol.40.n5 Chang, S.K. and Hsu A. (1992), Image Information Systems: Where do we go from here?, IEEE Trans Knowl Data Eng, 5-4., 644-658 Phil Gross, Macromedia Director 7. Manuales y Guias de usuario, Ed.Anaya Ray Kristov y Amy Satran, Diseño Interactivo. Ed.Anaya www.apache.org. Documentación Apache. www.php.net. Documentación sobre programación en PHP. www.mysql.com. Documentación sobre MySQL. Turecek PL, Váradi K, Schwarz HP. Thrombin generation assay (TGA): test for monitoring the pharmacological properties of inhibitor treatment in hemophilia. Haematologica 2004;89 (supple):33-40. Guidelines on the selection and use of therapeutic products to treat haemophilia and other hereditary bleeding disorders. Haemophilia 2003; 9(1):1-23. Remor E y The Hemophilia-QoL Group. Desarrollo en España de un nuevo cuestionario de calidad de vida específico para adultos con hemofilia: el Hemofjilia-QoL. Haematologica 2004;89 (supple):21-5 166