Universidad Austral de Chile Facultad de Ciencias de la Ingeniería Escuela de Ingeniería Civil en Informática "DISEÑO E IMPLEMENTACIÓN DE UN PROTOTIPO DE SOFTWARE, FUNDAMENTADO EN UN SISTEMA BASADO EN CONOCIMIENTO, PARA APOYO AL DIAGNÓSTICO MÉDICO EN PACIENTES QUE PRESENTAN DEPRESIÓN". Tesis para optar al Título de: Ingeniero Civil en Informática. Profesor Patrocinante: Sr. Martín Solar. Ingeniero Civil Industrial. Magíster en Administración de Empresas. Profesor Co-Patrocinante: Sra. Gladys Masilla Gómez. Ingeniero Matemático. Analista de Sistemas. Magíster en Estadística. Profesor Informante: Sra. Melina Miranda Psicóloga. MARÍA ANGÉLICA AGUILAR CAMPOS VALDIVIA - CHILE 2007 AGRADECIMIENTOS Agradezco a Dios por haberme ayudado a realizar y dar término dichosamente mi Tesis de grado, y por estar conmigo siempre en los momentos de estudios. Agradezco a mis padres por su gran amor, por inculcarme principios cristianos, para valorar mi vida como persona y estudiante. A mi madre Angélica, quien me apoyó en momentos difíciles dándome consejos, enseñándome a tener fe en Dios en todo lo que realice. A mi padre Alberto, dedicando su vida con esfuerzo al trabajo para darme una formación profesional, y así lograr esta meta. A mi hermano Alberto, quien me enseñó a confrontar con firmeza los obstáculos que se presentaban en mi camino, dándome ánimo para no decaer, y seguir adelante para poder lograr visiones emprendedoras. A mis tíos, Haydeé y Marcos, quienes fueron primordiales en el proceso de desarrollo de mi tesis, siempre estuvieron apoyándome para tomar buenas decisiones en situaciones que debía enfrentar. A mi abuelita Haydeé, por sus oraciones, que a través de ellas encomendaba a Dios las peticiones de mi corazón. A mis profesores, Martín Solar y Gladys Mansilla que a pesar de la distancia me apoyaron y se comprometieron con el desarrollo de este proyecto, al igual que la psicóloga Melina Miranda del Policlínico de Psiquiatría. Finalmente, agradezco a todas las personas que me entregaron palabras de aliento y tendieron su mano cuando lo necesité, entre ellos, Sergio, Richard, Luis, Carlos, Manuel y mis amigas incondicionales. 2 TABLA DE CONTENIDOS TABLA DE CONTENIDOS…………………………………………………………....3 INDICE DE FIGURAS………………………………………………………………....8 INDICE DE TABLAS……………………………………………………………….….9 RESUMEN……………………………………………………………………………..10 SUMMARY…………………………………………………………………………….11 ORGANIZACIÓN DE LA TESIS…………………………………………………....12 CAPITULO I. INTRODUCCIÓN……………………………………………….…..13 1.1 Antecedentes generales…………………………………………………………...13 1.2 Objetivos a lograr………………………………………………………………....15 1.2.1 Objetivo general…………………………………………………………....15 1.2.2 Objetivos específicos………………………………………………….........15 1.3 Metodología……………………………………………………………………....16 CAPITULO II. FUNDAMENTOS SOBRE DEPRESIÓN Y DEL ENTORNO DE SERVICIOS DE PSIQUIATRÍA Y SALUD LLANCHIPAL DE PUERTO MONTT…………………………………………………...19 2.1 Antecedentes generales…………………………………………………………...19 2.2 Entorno de la aplicación en el Servicio de Psiquiatría……………...………….....24 2.2.1 Consideraciones para detectar un episodio depresivo………………………..24 2.2.2 Profesional médico, otorga servicio al Policlínico de Psiquiatría………....25 2.2.3 Fundamentos en atención a pacientes……………………………………...26 2.2.4 Sistema Actual del Servicio de Salud Público en atención primaria……….27 2.2.5 Sistema Actual del Servicio de Salud Público en atención secundaria……..27 2.2.6 Sistema Actual del Servicio de Salud Público en atención terciaria……….28 2.3 Entorno de la aplicación Servicio de Salud Llanchipal…………………….........30 2.3.1 Servicio Salud Llanchipal…………………………………………………..30 3 2.3.2 Objetivos del Servicio de Salud ……………………………………….…....32 2.3.3 Funciones del Servicio de Salud………………………………………….....32 2.3.4 Función del Hospital Base de Puerto Montt………………………………...33 2.3.5 Área Geográfica y Clasificación…………………………………….…………...33 2.3.6 Plataforma Hardware y Software del Servicio de Salud y Hospital Base de Puerto Montt …………………………………………………………….34 CAPITULO III. ANÁLISIS DE LA TECNOLOGÍA COMPUTACIONAL -SBC…………………………………………………………………………35 3.1 Antecedentes generales..………………………………………………………… 35 3.1.1 Definición de SBC……………………………………..………………………...36 3.1.2 Historia sobre SBC………………………………….....................................39 3.1.3 La función de un SBC……………………………………………………….41 3.1.4 SBC y otras áreas de IA..…………………………………………………....41 3.1.5 Diferencias entre un Programa Convencional y SBC o SE…........................44 3.1.6 SBC o SE Pioneros……………………………………………….........................45 3.1.7 Ventajas y desventajas de los SE o BC………………………………….........46 3.1.8 SBC en tiempo real.……………………………………..…………………….…...47 3.2 Arquitectura de los SBC.………………………………………………...............48 CAPITULO IV. DESARROLLO DE LA HERRAMIENTA JESS -THE EXPERTS SYSTEM SHELL FOR THE JAVA PLATAFORM………………………………………………………………..…..………....50 4.1 Antecedentes generales………………...…………………………………………50 4.2 JESS “Herramienta Poderosa”…………………………………………………. 51 4.3 JESS, Motor de Inferencia………………………………………………………..52 4.4 Interacción con JESS………… ………………………………………………….55 4.4.1 Aplicación JESS en el prototipo……………………………………............55 4 CAPITULO V. DISEÑO E IMPLEMENTACIÓN DEL PROTOTIPO PARA APOYO AL DIAGNÓSTICO MÉDICO…………………………...58 5.1 Modelo……………………………………………………………………….........58 5.2 Arquitectura del prototipo………………………………………………………....60 5.3 Arquitectura de datos……………………………………………………………...65 5.4 Estructura de la base de datos relacional...…………………………………...........65 5.5 Modelo de Entidad/Relación……………………………………………………....67 5.6 Descripción de las tablas del prototipo…………………………………………....69 5.7 Implementación del prototipo……………………………………………………..72 5.7.1 Arquitectura del prototipo……………………………………………………....72 5.7.2 Control de acceso al prototipo……………………………………………………73 5.7.3 Pantallas gráficas de análisis y consulta..………………………………….75 5.7.4 Pantallas gráficas de servicios………………………………………...........75 CAPITULO VI. IMPLEMENTACIÓN DEL PROTOTIPO BASADOS EN CONOCIMIENTOS………………………………………………….76 6.1 Antecedentes generales………...………………………………………………….76 6.2 Entorno del proyecto………………………………………………………...........77 6.2.1 Descripción de la solución para el desarrollo del prototipo………………..77 6.2.2 Funcionalidades primordiales del prototipo basados en SBC……………..79 6.2.3 Descripción de la funcionalidad del prototipo………………………………...79 6.2.3.1 Acceso al Sistema Prototipo……………………………………..........80 CAPITULO VII. CONCLUSIONES...........................................................................91 7.1 Conclusiones……………...…………………………………………..……….......91 7.2 Mejoras……………...…………………………………………..……...................94 CAPITULO VIII. BIBLIOGRAFIA...………………………………………………96 CAPITULO IX. ANEXOS…………………………………………………………..102 5 9.1 Anexo I. Plataforma Hardware / Software del Servicio de Salud y Hospital Base de Puerto Montt………………………………………………………….102 9.1.1 Características de la plataforma hardware y software…………………..102 9.1.2 Topología de Red, Estrella…………………………………………………..103 9.2 Anexo II. Herramientas utilizadas para el desarrollo del prototipo………………104 9.2.1 Eclipse - Entorno Integrado de Desarrollo (IDE)………………………..104 9.2.1.1 Entrono de trabajo Eclipse, aplicación de reglas en JESS……...104 9.2.1.1.1 Procedimientos en aplicación de reglas en JESS…………….105 9.2.1.2 Entorno de trabajo Eclipse, proyecto Web………………………....109 9.2.1.2.1 Object Web Lomboz-Editor basado en la plataforma J2EE...109 9.2.2 Servidor Apache Tomcat- Servlet/ JSP……………………………………….112 9.2.3 Base de Datos desarrollada en MySQL…………………………………….112 9.2.4 Microsoft Office Visio 2003- Diagrama de modelo de base de datos…..113 9.3 Anexo III: Interfaces gráficas del sistema médico………………………………..115 9.3.1 Exámenes del paciente……………….………………………………………...115 9.3.1.1 Solicitud de exámenes………………………………………………115 9.3.1.2 Emisión de exámenes……………………………………………….116 9.3.1.3 Consulta de exámenes……………………………………………….117 9.3.2 Diagnósticos del paciente………………………………………………………118 9.3.2.1 Consulta de diagnósticos………………………………………...….118 9.3.3 Seguimientos del paciente…………………………………………………119 9.3.3.1 Consulta del seguimiento del paciente…………………………..119 9.3.4 Información del profesional médico…………………………………………....120 9.3.4.1 Consulta del Profesional médico……………………………………..120 9.4 Anexo IV: Código Fuente……………………….………………………………..122 9.4.1 Código fuente, aplicación JESS………………………………...………………..122 6 9.4.1.1 Código fuente de la clase RulesEnfermedades.java……………..……...122 9.4.1.2 Código fuente de la clase RulesHamilton.java…………….…………….126 9.4.1.3 Código fuente de la clase Enfermedades.java.…………….………….…127 9.4.1.4 Código fuente de la clase TestHamilton.java..…………….………….…128 9.4.1.5 Código fuente de la clase ProcessEnfermedades.java………………….129 9.4.1.6 Código fuente de la clase ProcessTestHamilton.java.………………….130 9.4.2 Código fuente, aplicación WEB……………………………...…………….……..131 9.4.2.1 Código fuente, válida usuario (Login Controler)….…………………….131 9.4.2.2 Código fuente, controlador paciente (Paciente Controler)…………...132 9.4.2.3 Código fuente,controlador diagnósticos (Diagnostico Controler)........135 9.4.2.4 Código fuente ,controlador JESS (JESS Controler)……………………. 141 9.4.2.5 Código fuente ,controlador prof.médico (Pmedico Controler)………...142 9.4.2.6 Código fuente ,DBCConection.java……………………………..………...144 9.4.2.7 Código fuente ,PmedicoBean.java……………………...………………145 9.5 Anexo V Evaluación y validación del proyecto de tesis.………..………………...147 9.5.1 Motivación para proyecto de tesis…………………………...…………….……..147 9.5.2 Restricciones a considerar…………………………...……………….…….…..…148 9.5.3 Comentarios………………..…………………………...……………….…….….….149 9.5.4 Certificado de validación y evaluación del proyecto de tesis………………….150 7 INDICE DE FIGURAS Figura 1.3-1.- Modelo Espiral, definido para el prototipo del proyecto de tesis. Figura 2.2.4-1.- Sistema Actual en atención primaria, Consultorios. Figura 2.2.5-1.- Sistema Actual en atención secundaria, Policlínico de Psiquiatría. Figura 2.2.6-1.- Sistema actual en atención terciaria, Hospital Base de Puerto Montt. Figura 2.3.5-1.- Red Asistencial del Servicio de Salud Llanchipal. Figura 3.1.1-1.- Campos de aplicación de estos sistemas. Figura 3.1.2-1.- Integración de programación de SBC o SE. Figura 3.1.4-1.- Áreas involucradas en IA. Figura 3.1.4-2.- Esquema jerárquico de conceptos vitales. Figura 3.2-1.- Arquitectura de los SBC. Figura 4.2-1.- Referencia a hechos y reglas, en JESS. Figura 4.3-1.- Mecanismo de Inferencia, encadenamiento hacia adelante. Figura 4.3-2.- Mecanismo de Inferencia, encadenamiento hacia atrás. Figura 4.4-1.- Aplicación de JESS en uso del Prototipo. Figura 5.2.1.- Sistema Actual en el Servicio de Psiquiatría. Figura 5.2.2.- Arquitectura global del prototipo propuesto. Figura 5.2.3.- Arquitectura de tecnología de SBC, prototipo propuesto. Figura 5.5-1.- Diagrama de Entidad / Relación. Figura 5.7.2-1.- Diagrama de Flujo del control de acceso al prototipo. Figura 6.2.3.1-1.- Página de bienvenida al ingresar al Sistema Médico. Figura 6.2.3.1-2.- Página de validación de usuario. Figura 6.2.3.1-3.- Página de validación de usuario incorrecto. Figura 6.2.3.1-4.- Página principal del Software Médico. Figura 6.2.3.1-5.- Interfaz del Software Médico y sus opciones. 8 Figura 6.2.3.1-6.- Página de validación de paciente. Figura 6.2.3.1-7.- Página de validación de paciente incorrecto. Figura 6.2.3.1-8.- Página de Ficha Clínica del paciente. Figura 6.2.3.1-9.- Interfaz del Software Médico visualizando menú Diagnósticos. Figura 6.2.3.1-10.- Página de ingreso de Diagnósticos, Tratamientos y Observaciones. Figura 6.2.3.1-11.- Página de rendición del Test de Hamilton. Figura 6.2.3.1-12.- Página de detección de un Episodio Depresivo. INDICE DE TABLAS Tabla 3.1.2-1.- Breve historia de las etapas en aplicaciones con SBC o SE. Tabla 3.1.5-1.- Diferencias Principales de los SBC. [GAL06] Tabla 3.1.6-1.- Referencia a los principales Sistemas Expertos. Tabla 3.1.7-1.- Descripción de las ventajas y desventajas de los SBC. Tabla 5.7.1-1.- Páginas de acceso y validación de ingreso al sistema. Tabla 5.7.1-2.- Páginas de desplazamiento dentro del prototipo. Tabla 5.7.1-3.- Página de ayuda del prototipo. 9 RESUMEN El proyecto de tesis está enfocado al Servicio de Salud Pública. Debido al progresivo interés que surge en la actualidad, es necesario vincular la inteligencia humana con el crecimiento tecnológico. Por ende, se ha determinado como objetivo de trabajo de titulación, diseñar e implementar un prototipo de software médico en el Servicio de Psiquiatría del Hospital Base de Puerto Montt, para apoyar al profesional médico en el diagnóstico en pacientes que presentan Depresión. Actualmente, no existe una herramienta de software médico para apoyar el pensamiento clínico del profesional. Otorgar un diagnóstico con exactitud, es un gran desafío, debido a los parámetros que hay que considerar. En el Servicio de Psiquiatría, en atención secundaria, para detectar un paciente con depresión, se apoya en consideraciones clínicas: anamnesis (antecedentes personales, familiares), exploración física y psicológica, además, instrumentos de medición (test), para la determinación de los comportamientos corporales y mentales. Incorporar la herramienta, beneficia al médico en la toma de decisiones, evitando incertidumbre al momento de entregar el diagnóstico al paciente. Los “Episodios Depresivos”, se encuentran bajo el código F32 de la CIE-10 (Décima Revisión de la Clasificación Internacional de Enfermedades). Orientado al área de Inteligencia Artificial, y bajo un paradigma de Sistema Basado en Conocimiento, se representa el conocimiento mediante la construcción de reglas adecuadas en relación a síntomas _ enfermedad. 10 SUMMARY This project of thesis is focused on the Service of Public Health. Due to the progressive interest that arises at present, is necessary link to the human intelligence with the technological growth. Therefore, it has decided as aim of work of qualifications, designed and to implement a prototype of medical software in the Service of Psychiatry in the Hospital Base of Puerto Montt, to lean the medical professional in the diagnosis in patients who present Depression. Nowadays, a tool of medical software doesn’t exist to support the clinical thought of the professional. To grant a medical diagnosis with accuracy to patients is a great challenge, due to the parameters that it is necessary to consider. In the Service of Psychiatry, in secondary attention, to detect a patient, it rests on clinical considerations: anamnesis (antecedent’s personals, family), physical and psychological exploration, besides, instruments of measurement (test), for the determination of the corporal and mental behaviors. To include the tool benefits the doctor in the capture of decisions, avoiding uncertainty the moment to deliver a diagnosis the patients. The “Depressive Episodes” analysed, does encountered under a codes F32, of the CIE-10 (Tenth Review of the International Classification of Diseases). Focused inside the field of Artificial Intelligence, and under a paradigm of System Based on Knowledge, does represent the knowledge by means of the construction of rules adapted in relation symptom-disease. 11 ORGANIZACIÓN DE LA TESIS Los capítulos iniciales acercarán al lector a un mayor conocimiento de la tecnología utilizada para construir el sistema. Pasarán por investigaciones, métodos y desarrollos, explicando el funcionamiento y módulos que conforman el prototipo. Los capítulos son: Capítulo I, Introducción: Se da a conocer los antecedentes generales, los objetivos a lograr y la metodología utilizada. Capítulo II, Fundamentos sobre Depresión y el Entorno del Servicio de Psiquiatría y Servicio de Salud Llanchipal de Puerto Montt: Definiciones de episodios depresivos, bajo código F32 de la CIE-10. Formas de proceder en atenciones al paciente, por parte de los especialistas en salud mental. Referencias de la organización del hospital; estadísticas, objetivos y funcionalidad. Capítulo III, Análisis de la Tecnología Computacional “SBC”: Descripción de esta tecnología desde sus inicios en 1960, hasta las últimas técnicas. Capítulo IV, Desarrollo de la herramienta JESS “The Experts System Shell for The Java Plataform”: Nociones de la herramienta, la importancia en aplicaciones de SBC. Capítulo V, Diseño e implementación del prototipo: Herramientas, módulos, flujos de información. Capítulo VI, Implementación del prototipo basado en conocimiento: Se enfoca a la herramienta utilizada JESS como motor de inferencia para extraer la información consistente almacenada en la base de conocimiento. Capítulo VII, Conclusiones: Mejoras y conclusiones del Sistema médico. Capítulo VIII, Bibliografía: Referencias electrónicas y textos utilizados. Capítulo IX, Anexos: Detalles sobre tecnologías empleadas, figuras y fragmentos de código fuente. 12 CAPÍTULO I INTRODUCCIÓN 1.1 Antecedentes generales Hoy en día, relacionar la inteligencia humana con el crecimiento tecnológico ha generado bastante interés, lo que constituye una de las mayores líneas de investigación en diferentes áreas: industrial, financiera, educacional, medicina, etc. El hecho de incorporar avances tecnológicos en el área de la IA 1 como son los SBC 2 o SE 3 en aplicaciones que tienen lugar en el campo médico, es de gran apoyo al profesional, ya que son capaces de simular los atributos de un experto humano en un área de conocimiento especializado, logrando eficiencia y rapidez en los procesos. Estos SBC permiten responder a preguntas y resolver problemas mucho más rápido que el experto humano. Por ello, los sistemas son muy valiosos, en casos en los que el tiempo de respuesta es crítico, además el conocimiento de varios expertos humanos pueden combinarse, siendo más fiables al obtener un SBC o SE que concierta la sabiduría colectiva de varios expertos en lugar de la de uno sólo. Actualmente, en el Hospital Base de Puerto Montt, Servicio de Psiquiatría, carecen de herramientas informáticas, debido a esto, la forma de gestionar es totalmente manual, lo que constituye demoras y deficiencias en los procesos de control de información, por ejemplo, la capacidad de atención secundaria, que es excedida por la gran demanda existente de consultas médicas de pacientes que presentan depresión. Por otra parte, gestionar manualmente puede generar pérdidas de información sobre los datos que conciernen al paciente, provocando inseguridad al profesional médico en la toma de decisiones al momento de diagnosticar un cuadro depresivo, sólo por no tener la sólida _______________________ 1 Inteligencia Artificial. Sistemas Basados en Conocimientos. 3 Sistemas Expertos. 2 13 información. De este modo, se produciría inconsistencia en los datos y generaría resultados incorrectos. En consecuencia, este es el punto sobre el cual se enfoca la solución propuesta en la tesis, solución que aborda el problema incorporando un SBC dentro del área de IA, estableciendo reglas adecuadas en relación a los síntomas y enfermedad a través de la herramienta JESS 4, actuando como motor de inferencia e ingresando las reglas apropiadas. Estas aplicaciones en el campo de medicina tienen gran valor, por ende, apoyar el pensamiento clínico del profesional en la toma de decisiones al momento de diagnosticar “Episodios Depresivos”, bajo un código F32 5 de la CIE-10 6, contribuye en la orientación, logrando eficiencia y rapidez en los procesos de diagnósticos y tratamientos en atención secundaria7. Además respalda a pacientes en el momento de emitir un diagnóstico clínico, otorgando una mayor confianza, ya que el sistema reúne casos clínicos similares al del paciente. En consecuencia, el prototipo establecido debe examinar todos los aspectos que incluyen un ciclo de vida de un proyecto de desarrollo. Por lo mismo, este proyecto de tesis constituye un conjunto de actividades que certifica la integridad del modelo de producto de software en las diversas etapas del ciclo de vida. Sin embargo, se decidió planificar las etapas que compensan la necesidad y que ayudan a concretar el objetivo general. Parte primordial de este permanente mejoramiento en la gestión, es establecer el uso más habitual de las tecnologías de información, tanto en la utilización de software y sistemas de información como en el hardware que la respalda. _________________________ 4 The Experts System Shell for the Java Plataform, herramienta de desarrollo. Código de Enfermedades de Salud Mental basadas en “Episodios Depresivos”. 6 Décima Revisión de la Clasificación Internacional de Enfermedades. 7 Consultas realizadas en policlínico, mientras que las primarias son realizadas en consultorios 5 14 1.2 Objetivos a lograr Los objetivos a lograr se desglosan en dos puntos. El objetivo general, donde se señala el propósito final de la tesis y los objetivos específicos que detallan los ítems necesarios para conseguir el objetivo general. 1.2.1 Objetivo general Diseñar e implementar un prototipo de software, fundamentado en un Sistema Basado en Conocimiento, para apoyo al diagnóstico médico en pacientes que presentan Depresión. 1.2.2 Objetivos específicos 1. Investigar el estado actual de operación referente al proceso de diagnóstico en el Policlínico de Psiquiatría del Hospital Base de Puerto Montt, e indagar sobre software existentes. 2. Crear una base de datos, o base de conocimientos, precisa para el diagnóstico médico en atención secundaria. 3. Construir reglas a partir de una base de conocimiento para realizar las inferencias de acuerdo con los parámetros definidos en el sistema, diagnosticando la patología bajo la relación síntoma – enfermedad. 4. Diseñar e implementar un prototipo de software médico que asista al profesional de atención secundaria. 5. Validar los resultados obtenidos con el prototipo, contrastándolos con los diagnósticos emitidos por expertos en el área. 15 1.3 Metodología La metodología a utilizar para el desarrollo de este proyecto esta basada en el modelo espiral, que considera las siguientes etapas: Planificación: determina los objetivos, alternativas y restricciones de la planificación del proyecto inicial, además de la recopilación de requisitos a partir de una exploración general de las personas involucradas en el medio. Verificar completamente el problema actual que atraviesa el Policlínico de Psiquiatría del Hospital Base de Puerto Montt. Adjunto a esto, planificar los comentarios del cliente 8. Análisis de Riesgo: en esta fase se realiza un análisis de alternativas e identificación de riesgos, los análisis están basados en el levantamiento de los requerimientos del sistema a desarrollar. Se recopiló información para establecer los antecedentes requeridos por los médicos, mediante entrevistas, literaturas, en el Servicio de Psiquiatría del Hospital Base de Puerto Montt, con el objetivo de concretar el esquema que lo representa. Además, se realizó una investigación de las tecnologías disponibles relacionadas con la solución propuesta. Por último, incluye análisis de riesgo basado en la reacción del cliente, lo que genera un gran desafío. Ingeniería: en esta fase se desarrolla y valida el producto, es decir, se verifica el prototipo inicial del software, prototipo del siguiente nivel hasta llegar al sistema operacional. Se da asistencia tanto al encargado de desarrollo como al cliente, si el análisis de riesgo indica que hay una incertidumbre en los requisitos, se usa la creación de prototipos. Es necesario establecer que en esta fase de evaluación del producto, el diseño, implementación, prueba y aceptación del sistema, cumplen un rol primordial para el desarrollo y validación del prototipo de software médico, apoyando al diagnóstico clínico. En este ciclo se define: __________________________ 8 Se refiere al Profesional Médico 16 - Diseño: se determina los elementos que se establecen en el prototipo de software médico. Las especificaciones de diseño lógico y físico del sistema informático, cumpliendo de esta forma los requerimientos de la etapa anterior. En el diseño lógico se describen las entradas y salidas, procesos, modelo de datos y controles, y en el diseño físico se establecen las especificaciones para el hardware, software y bases de datos físicas, medios de entrada y salida, y procedimientos. - Implementación: dentro de la etapa de Ingeniería, en la implementación, se verifica los resultados obtenidos mediante la evaluación por parte del cuerpo médico. - Prueba y aceptación del sistema: en esta fase se evalúa la eficacia de la herramienta en relación a los resultados de diagnósticos emitidos por el médico. Estas pruebas se realizan con los médicos en donde se chequearán tiempos de respuesta, como también la confiabilidad del sistema y de la información entregada, obteniendo las conclusiones mediante la retroalimentación necesaria que se obtuvo para optimizar la solución. Evaluación del cliente: en esta etapa el cliente evalúa los resultados del sistema, y tiene el derecho de sugerir modificaciones. Lo que implica que sobre la base de los comentarios del cliente se producen las fases de planificación y de análisis de riesgo, además, en cada ciclo alrededor del espiral, la culminación del análisis de riesgo resulta en una decisión de “seguir o no seguir”. 17 Se eligió para este prototipo de software médico el modelo en espiral, porque al analizarlo se aproxima a una orientación más realista para el desarrollo de sistemas a gran escala. Lo principal es que utiliza un enfoque evolutivo, permitiendo al desarrollador y al cliente entender y reaccionar a los riesgos en cada nivel de progreso, asimismo, usa la creación de prototipos como un mecanismo de reducción de riesgos. Por último, este modelo espiral genera en cada iteración, sucesivas versiones del software, cada vez más íntegras, que finalmente concluyen en el. (Ver figura 1.3-1). Figura 1.3-1: Modelo Espiral, definido para el prototipo del proyecto de tesis. 18 CAPÍTULO II FUNDAMENTOS SOBRE DEPRESIÓN Y DEL ENTORNO DE SERVICIOS DE PSIQUIATRÍA Y SALUD LLANCHIPAL (LLANQUIHUE-CHILOÉ-PALENA) DE PUERTO MONTT. 2.1 Antecedentes generales Este proyecto de tesis está enfocado al Servicio de Salud Pública. Se decidió elegir esta patología, “Depresión”, debido a que existe un alto porcentaje de personas que padecen esta enfermedad del estado de ánimo. Muchas veces se vive con ella sin darnos cuenta, y en consecuencia, provoca deterioros en la persona siendo a veces incurables. Para tener una noción de su origen y significado, “Depresión” proviene del Latín “Deprimiere” que significa hundimiento, bajo estado de ánimo. Esta enfermedad abarca muchas definiciones, entre las cuales, se mencionan algunas: La depresión es un desorden mental que afecta a las personas integralmente. Afecta sus sentimientos, pensamientos y acciones. Se define como una enfermedad orgánica, donde muchos son síntomas psíquicos afectando también la parte física. Desde el punto de vista clínico, se señala la diferencia entre síndrome depresivo (Trastorno Depresivo) y síntomas depresivos. El síndrome depresivo se define como un conjunto covariante de síntomas relacionados (estado de ánimo bajo, insomnio, pérdida de peso, etc.). Este conjunto de síntomas requiere estabilidad y permanencia en la vida del sujeto y, al mismo tiempo, interfiere en la vida del paciente. Sin embargo, el síntoma depresivo (sentirse triste, bajos de ánimo), es frecuente en nuestra sociedad y lo hemos experimentado la mayor parte de nosotros en algún momento de nuestra vida sin que suponga la existencia de un cuadro clínico. 19 Depresión, psicopatología de los tiempos modernos, en la actualidad se ve que la gente se deprime más, es una especie de patología construida. Debido a que el mundo de hoy, presenta exigencias, cambios, donde las personas están obligadas adaptarse rápidamente a las situaciones que van deviniendo. Las manifestaciones de síntomas depresivos se incrementan notablemente, e inciden en la cadena productiva de nuestra sociedad. Es necesario que la gente esté y se sienta bien, que produzca, que trabaje, es ideal no presentar síntomas, ni desgano, menos en las condiciones laborales. Cabe destacar que todas estas definiciones son válidas, pero se hará hincapié a una definición de depresión que dice lo siguiente: Es un estado en el cual el alma del hombre es sacudida en todo su ser, llevándole a la impotencia, a la desesperación y a la ansiedad. Una situación en donde solamente el poder divino y la voluntad personal puede ayudarle a salir. Existen diversos tipos de depresión. Sin embargo, para este proyecto de tesis, son analizados algunos tipos de episodios depresivos, bajo el código F32 de la CIE-10, tales como: Episodio Depresivo Leve (F32.0). Episodio Depresivo Moderado (F32.1). Episodio Depresivo Grave sin Síntomas Psicóticos (F32.2). Episodio Depresivo Grave con Síntomas Psicóticos (F32.3). En los episodios depresivos típicos, el enfermo que las padece sufre un humor depresivo, una pérdida de la capacidad de interesarse y disfrutar de las cosas, una disminución de su vitalidad que lleva a una reducción de su nivel de actividad y a un 20 cansancio exagerado, que aparece incluso tras un esfuerzo mínimo. También son manifestaciones de los episodios depresivos: a) La disminución de la atención y concentración. b) La pérdida de la confianza en sí mismo y sentimientos de inferioridad. c) Las ideas de culpa y de ser inútil. d) Una perspectiva sombría del futuro. e) Los pensamientos y actos suicidas o de auto-agresiones. f) Los trastornos del sueño. g) La pérdida del apetito. La depresión del estado de ánimo varía escasamente de un día para otro, y no suele responder a cambios ambientales. La presentación clínica puede ser distinta en cada episodio y en cada individuo. Las formas atípicas son particularmente frecuentes en la adolescencia; en algunos casos, la ansiedad, el malestar y la agitación psicomotriz, pueden predominar sobre la depresión. La alteración del estado de ánimo puede estar enmascarada por otros síntomas, tales como irritabilidad, consumo excesivo de alcohol, comportamiento histriónico, exacerbación de fobias o síntomas obsesivos preexistentes o por preocupaciones hipocondríacas. Para el diagnóstico de episodio depresivo de cualquiera de los tres niveles de gravedad, leve, moderado y severo, habitualmente se requiere de una duración de al menos dos semanas, aunque períodos más cortos pueden ser aceptados si los síntomas son excepcionalmente graves o de comienzo brusco. Incluye: Episodios aislados de reacción depresiva. Depresión psicógena (F32.0, F32.1 ó F32.2). Depresión reactiva (F32.0, F32.1 ó F32.2). Depresión mayor (sin síntomas psicóticos). 21 Episodio Depresivo Leve (F32.0), ánimo depresivo, la pérdida de interés y de la capacidad de disfrutar, y el aumento de la fatiga suelen considerarse como los síntomas más típicos de la depresión, y al menos dos de estos tres deben estar presentes para hacer un diagnóstico definitivo, ninguno de los síntomas debe estar presente en un grado intenso, el episodio depresivo debe durar al menos dos semanas. Un enfermo con un episodio depresivo leve, suele encontrarse afectado por los síntomas y tiene alguna dificultad para llevar a cabo su actividad laboral y social, aunque es probable que no las deje por completo. Episodio Depresivo Moderado (F32.1), deben estar presentes al menos dos de los tres síntomas más típicos descritos para episodio depresivo leve (F32.0). Es probable que varios de los síntomas se presenten en grado intenso, aunque esto no es esencial si son muchos los síntomas presentes. El episodio depresivo debe durar al menos dos semanas. Un enfermo con un episodio depresivo moderado suele tener grandes dificultades para poder continuar desarrollando su actividad social, laboral o doméstica. Episodio Depresivo Grave sin Síntomas Psicóticos (F32.2), durante un episodio depresivo grave, el enfermo suele presentar una considerable angustia o agitación, a menos que la inhibición sea una característica marcada. Es probable que la pérdida de estimación suicidio sea importante en los casos particularmente graves. Se presupone que los síntomas somáticos están presentes casi siempre durante un episodio depresivo grave. Deben estar presentes los tres síntomas típicos del episodio depresivo leve y moderado, los cuales deben ser de intensidad grave. Sin embargo, si están presentes síntomas importantes como la agitación o la inhibición psicomotrices, el enfermo puede estar poco dispuesto o ser incapaz de describir muchos síntomas con detalle. En estos casos está justificada una evaluación global de la gravedad del episodio. El episodio depresivo debe durar normalmente al menos dos semanas, pero si los síntomas son particularmente graves, y de inicio muy rápido, puede estar justificado hacer el 22 diagnóstico con una duración menor de dos semanas. Durante un episodio depresivo grave no es probable que el enfermo sea capaz de continuar con su actividad laboral, social o doméstica más allá de un grado muy limitado. Incluye: Episodios depresivos aislados de depresión agitada. Melancolía. Depresión vital sin síntomas psicóticos. Episodio Depresivo Grave con Síntomas Psicóticos (F32.3), episodio depresivo grave que satisface las pautas establecidas en F32.2, y en el cual están presentes además ideas delirantes, alucinaciones o estupor depresivo. Las ideas delirantes suelen incluir temas de ruina o de catástrofes inminentes de los que el enfermo se siente responsable, las alucinaciones auditivas u olfatorias suelen ser en forma de voces difamatorias o acusatorias, de olores a podrido o carne en descomposición. La inhibición psicomotriz grave puede progresar hasta el estupor. Las alucinaciones o ideas delirantes pueden especificarse como congruentes o no congruentes con el estado de ánimo. Incluye episodios depresivos de: Depresión mayor con síntomas psicóticos. Depresión psicótica. Psicosis depresiva psicógena. Psicosis depresiva reactiva. 23 2.2 Entorno de la aplicación en el Servicio de Psiquiatría 2.2.1 Consideraciones para detectar un episodio depresivo El diagnóstico de la Depresión se apoya en consideraciones clínicas. Incluyen: La historia clínica: realización de una anamnesis completa que contenga los antecedentes familiares, personales, rasgos de personalidad y curva vital. Una exploración, realizando, un examen físico y psíquico. Pruebas complementarias para descartar otros procesos. Es por ello que se debe realizar un fehaciente análisis, solicitando los respectivos exámenes y antecedentes del paciente, esenciales para determinar dicha patología. Actualmente, en el Hospital Base de Puerto Montt, Servicio de Psiquiatría, lo que se realiza para detectar depresión a un paciente, es asesorarse en un test que consta de 21 preguntas, basado en el Test de Hamilton 9, efectuándose en el Consultorio, no así en el Policlínico de Psiquiatría, aquí mas bien se confirma el test, mediante la entrevista clínica. El examen físico evalúa los aspectos y actitudes del paciente. Por lo tanto, ambos procesos sirven para analizar los comportamientos corporales y mentales. Muchas veces es necesaria la solicitud de un examen de sangre, como tipo de muestra. Estos exámenes son muy valiosos, ya que pueden descartar otras posibles enfermedades. Realizar y evaluar exámenes implica un control verdadero y seguro. De lo contrario, dificultaría promover un juicio clínico en el profesional médico, entregando diagnósticos y tratamientos inadecuados, repercutiendo negativamente en el paciente para el mejoramiento de su salud. _________________________ 9 Test adaptado por los Drs. Raúl Riquelme y Mario Quijada de la Sociedad Chilena de Salud Mental. 24 2.2.2 Profesional médico, otorga servicio al Policlínico de Psiquiatría. El detalle que entrega el departamento de Estadística del Hospital Base de Puerto Montt es el siguiente: 20 son los especialistas que tratan enfermedades mentales, los cuales lo conforman 7 psiquiatras (3 infantil/juvenil, 4 adultos), 6 psicólogos, 2 enfermeras y un médico general, además de un terapeuta y 3 asistentes sociales. Sin embargo, se debe marcar la diferencia, que los médicos psiquiatras diagnostican un cuadro depresivo y recetan medicamentos, mientras que psicólogos se enfocan más en el tratamiento, a través de psicoterapia, término aplicado más en el ámbito de la orientación dinámica (psicoanálisis, terapia humanista), mientras que "psicología clínica" lo han aplicado los psicólogos cognitivo conductuales a su labor terapéutica. Sin embargo, desde algunos puntos de vista se ha considerado a la psicoterapia como una parte de la psicología clínica [COP99]. Dependiendo del estado del paciente, es importante la adecuada indicación de medicamentos, una incorrecta dosis o fármaco inadecuado, podría producir alteraciones o un desequilibrio en el organismo. Por otra parte, la demanda de consultas para su atención fluctúa bastante. El departamento de estadística confirma que se atienden aproximadamente una cantidad de 90 pacientes por semana en el Policlínico de Psiquiatría. Se detalla a continuación que: Psicólogos atienden aproximadamente a 40 pacientes/semana. Psiquiatras atienden aproximadamente a 50 pacientes/semana. 25 2.2.3 Fundamentos en atención a pacientes Reconocer a pacientes que acuden a la consulta por un cuadro depresivo, constituye a menudo un verdadero desafío. El diagnóstico en atención secundaria es complicado, debido a distintos factores que se dan a continuación, según estudios emitidos por la Sociedad Española de Medicina Rural y Generalista (Semergen), Sociedad Española de Psiquiatría Biológica (SEPB) y la Sociedad Española de Psiquiatría (SEP), señalan: Falta de tiempo: en el Libro Blanco de la Depresión de 1997, se ha constatado que un 65% de los médicos de atención primaria como secundaria dedican a esto, menos de 16 minutos en la primera visita de estos pacientes. Esto contrasta con los 45 minutos que suele emplear el 42,07% de los psiquiatras. El enmascaramiento de la Depresión con otra enfermedad o sintomatología: en el Libro Blanco de la Depresión, el 77% de los médicos de atención primaria como secundaria señalan que este es el mayor problema para el diagnóstico. La inexistencia de pruebas complementarias o test de detección de laboratorio que sean lo suficientemente específicos o con una buena relación costo _ eficacia, para realizar el diagnóstico. Hoy en día, el Sistema de Salud Pública presenta falencias, por ejemplo, es muy común la falta de horas de atención para poder satisfacer la excesiva demanda de manera rápida. El Módulo Computacional de Atención Abierta verifica la disponibilidad de horas, quedando en manos del UCAE10 la determinación de solicitudes para que se les registre la cita respectiva, lo anterior es poco flexible puesto que los establecimientos del área no tienen capacidad de administrar los cupos que implícitamente el Hospital Base de Puerto Montt define para ellos. Lo bueno es que el Policlínico de Psiquiatría trabaja de forma independiente, la misma administración asigna la atención de horas, lo que reduce la espera de una consulta médica. _______________________ 10 Unidad Consultorio Adosado a Especialidades 26 2.2.4 Sistema Actual del Servicio de Salud Público en atención primaria. Atención Primaria: pacientes que ingresan a consultorios, donde son atendidos por un médico general. Se les realiza algunas preguntas, aplicando el Test de Hamilton para ver su condición general. Dependiendo de la gravedad del paciente, se deriva al Policlínico de Psiquiatría del Hospital Base de Puerto Montt. (Ver figura. 2.2.4-1) Médico general analiza al paciente Paciente depresivo Figura 2.2.4-1: Sistema Actual en atención primaria, Consultorios. 2.2.5 Sistema Actual del Servicio de Salud Público en atención secundaria. Atención Secundaria: pacientes que ingresan al Policlínico de Psiquiatría del Hospital Base de Puerto Montt, donde son atendidos por psiquiatras, psicólogos, enfermeras, paramédicos, asistentes sociales. En este punto, es donde se enfoca la investigación del proyecto de tesis, en “atención secundaria”. Los pacientes tratados tienen mayor severidad, por ende, se solicitan exámenes físicos y psicológicos para confirmar el tipo de episodio depresivo que presentan. Estos procesos, como se señaló anteriormente, sirven para analizar los comportamientos 27 corporales y mentales. (Ver figura.2.2.5-1). Psiquiatra analiza examen Paciente depresivo severo Psicóloga aplica test psicológico11 Figura 2.2.5-1: Sistema Actual en atención secundaria, Policlínico de Psiquiatría. 2.2.6 Sistema Actual del Servicio de Salud Público en atención terciaria. Tercera Atención: pacientes que ingresan al Hospital Base de Puerto Montt, de manera urgente, debido al extremo deterioro mental y físico de su persona. _______________________ 11 Se aplica test psicológico en atención secundaria, cuando el Psiquiatra lo solicita, y se realiza psicoterapia a pacientes ya diagnosticados por el Psiquiatra. 28 Por lo tanto, es necesario hospitalizarlos rápidamente. Son muchos los especialistas encargados de un seguimiento en sus comportamientos mentales y corporales. Si los síntomas son de gran intensidad, implica mayor duración en su recuperación, para lo cual se requiere un tratamiento muy riguroso y eficaz. (Ver figura. 2.2.6-1) Paciente depresivo en extremo deterioro (alucinaciones) Establecimiento Hospitalario Profesional Médico analiza ficha clínica del paciente Figura 2.2.6-1: Sistema actual en atención terciaria, Hospital Base de Puerto Montt. 29 2.3 Entorno de la aplicación Servicio de Salud Llanchipal 2.3.1 Servicio de Salud Llanchipal El Servicio de Salud Llanquihue, Chiloé y Palena, fue creado por decreto ley Nº 2.763 del 03 de Agosto de 1979, comprende geográficamente, las provincias de Llanquihue, Chiloé y Palena totalizando 41.329 Km2. El Servicio de Salud Llanchipal, es una empresa estatal dependiente del Ministerio de Salud, para los efectos de someterse a la supervigilancia de esta secretaría de Estado, y así cumplir las normas políticas y de planes generales que ella aprueba. Este organismo estatal trabaja funcionalmente descentralizado y dota de personalidad jurídica, además de patrimonio propio para la realización de las referidas actividades. Esta superficie se extiende en un sector llano que es Llanquihue; otro insular que es Chiloé y otro cordillerano que es Palena. Considerando las tres provincias mencionadas anteriormente, la población rural es de un 48,3%. Los límites del Servicio de Salud Llanquihue-Chiloé-Palena, son: - Al Norte con la provincia de Osorno. - Al Este con la frontera Argentina. - Al Oeste con el Océano Pacífico. - Al Sur con la región de Aysén, del General Carlos Ibáñez del Campo. Las ciudades a las que sirve este Servicio de Salud dentro de la provincia de Llanquihue son: Puerto Montt, Puerto Varas, Llanquihue, Fresia, Frutillar, Calbuco, Maullín, Muermos, Río Negro-Hualaihué, Cochamó. Dentro de la provincia de Palena serían: Palena, Chaitén, Futaleufú, y de la provincia de Chiloé se encontraría: Ancud, Castro, Quellón, Queilen, Achao y Río Negro-Hualaihué. 30 La actual estructura organizacional del Servicio de Salud Llanquihue-Chiloé-Palena, corresponde a la organización interna de los Servicios Públicos descentralizados, que considera solamente niveles de Dirección, Departamentos, Secciones, Oficinas, como lo establece el artículo 29º de la Ley 18.575. La Dirección del Servicio de Salud está a cargo de un Director, secundado por una Subdirección Médica y una Subdirección Administrativa, dependiendo de la línea técnica el Departamento de Programas sobre el Ambiente. De la línea administrativa dependen los Departamentos de Finanzas, Recursos Físicos, Recursos Humanos, Informática y Abastecimiento, a quienes le corresponde la supervisión, asesoría, control y coordinación de los establecimientos dependientes para el cumplimiento de las políticas, normas, planes, programas y directivas emanadas del Nivel Central. Hoy el Servicio cuenta con 2.241 funcionarios, 13 hospitales más el Hospital Base Puerto Montt, habiéndose entregado en 1987 y 1988, las postas y consultorios a las municipalidades respectivas para su administración. El servicio tiene además convenio para atención de beneficiarios con la Armada de Chile y con el Hospital de Puerto Varas, además de tener a la Municipalidad de Calbuco la lancha Ana María Juricic, y convenio con casi todas las ISAPRES, todas las mutuales de seguridad y con otras instituciones públicas y privadas dan prestaciones de salud a sus afiliados, en el ámbito del territorio de las tres provincias de su jurisdicción. Las siguientes ciudades son abastecidas por el Servicio de Salud en la parte médica y distribución de fármacos: Puerto Montt, Puerto Varas, Llanquihue, Fresia, Frutillar, Calbuco, Maullín, Palena, Chaitén, Futaleufú, Ancud, Castro, Achao, Quellón. Actualmente, la dirección de este Servicio de Salud Llanchipal se encuentra ubicado en calle Copiapó Nº 180 de la ciudad de Puerto Montt. La red pública de salud de Chile cuenta con 19 hospitales de tipo 1, 34 hospitales de tipo 2, 23 hospitales de tipo 3 y 100 de tipo 4. Todos los hospitales, incluidos los institutos, se clasifican en cuatro tipos (1-2-3-4), sobre la base de los siguientes factores: 31 - Grado de complejidad técnica y nivel de desarrollo de especialidades. - Grado de desarrollo de organización administrativa. - Ámbito geográfico de acción, acorde con el sistema de complementación asistencial. - Número de prestaciones tales como consultas, egresos y otros. El Hospital Base Puerto Montt se encuentra clasificado como tipo 1, por su alto grado de complejidad técnica en el desarrollo de organización administrativa. Esta documentación es dada por el jefe del departamento de estadísticas del Hospital Base de Puerto Montt, Sr. Eleacer González. 2.3.2. Objetivos del Servicio de Salud. La organización del Sistema Nacional de Servicios de Salud ha sido concebida para que los establecimientos que lo conforman otorguen al paciente una atención integral, mediante la complementación entre niveles asistenciales de complejidad creciente. En consecuencia, la coordinación entre esos distintos niveles y la uniformidad de criterios en el desarrollo de las actividades, son fundamentales para contribuir con eficiencia la tarea. 2.3.3 Funciones del Servicio de Salud. - Fomento de la Salud: son las acciones y medidas que tienden a mantener o aumentar la salud del individuo, promoviendo su mayor desarrollo físico y mental. - Protección de la Salud: su objetivo es la creación, prevención y mantención de la salud, suprimiendo los riesgos. 32 - Recuperación de la Salud: su finalidad es devolver la salud de los individuos que la han perdido, en el plazo más corto, de manera de integrarlos a la colectividad lo antes posible, considerando que forman parte del proceso productivo del país. - Rehabilitación de las personas enfermas: estas acciones tienen por finalidad encarar el proceso educativo y de aprendizaje, tanto de las normas de conductas, como también a facilitar la participación consciente de la comunidad en las acciones y programas de las actividades de la salud. 2.3.4. Función del Hospital Base de Puerto Montt. El Hospital Base de Puerto Montt constituye la principal unidad ejecutiva y funcional del Servicio de Salud Llanquihue-Chiloé-Palena, y es el encargado de realizar todas o algunas actividades de recuperación, fomento y protección de la salud y de rehabilitación de personas enfermas mediante atención cerrada, abierta de especialista a pacientes referidos y de emergencia. Pero para tal efecto, debe existir una coordinación de este hospital y los demás, que permita especialmente la atención oportuna de todos los pacientes que no puedan ser atendidos en aquellos hospitales que no cuentan con la infraestructura adecuada, ni con la especialización requerida del caso. 2.3.5 Área Geográfica y Clasificación. Le corresponde al Hospital Base de Puerto Montt abarcar la misma área geográfica que tiene el Servicio de Salud, esto es: todas las ciudades y poblados de las provincias de Llanquihue, Chiloé y Palena, debido a que es el único establecimiento clasificado en Tipo 1 o de alta complejidad. El Servicio de Salud de Puerto Montt, hospital de mayor complejidad (Tipo 1), 7 hospitales de menor complejidad (Tipo 4), 6 consultorios periféricos urbanos, 6 33 consultorios periféricos rurales, 57 postas rurales y 73 estaciones de salud rural. Cabe destacar que sólo los consultorios y las postas de salud rural dependen administrativamente de la Municipalidad, técnicamente de la Dirección del Servicio de Salud. (Ver figura. 2.3.5-1) Servicio de Salud Llanchipal Hospitales Tipo 1, Mayor Complejidad Hospital Base de Puerto Montt Consultorios Urbanos y Rurales Postas Rurales Estaciones de Salud Rurales Tipo 4, Menor Complejidad Otros Hospitales Figura 2.3.5-1: Red Asistencial del Servicio de Salud Llanchipal. La misión del Hospital Base de Puerto Montt, es solventar las necesidades de salud de la población beneficiaria de la provincia de Llanquihue, Chiloé y Palena, con una orientación exhaustiva y humanizada, utilizando los recursos disponibles en forma eficaz y eficiente, realizando sus funciones orientadoras, reguladoras y asistenciales en áreas de educación, prevención, recuperación y rehabilitación de las personas, y de protección del medio ambiente, apoyando además en la formación de profesionales y técnicos del área de la salud. 2.3.6 Plataforma Hardware / Software del Servicio de Salud y Hospital Base de Puerto Montt. El Servicio de Salud_Hospital Base de Puerto Montt están conectados a través de una línea dedicada ADSL de 1 Mbps. Ambas entidades cuentan con una red computacional con topología de estrella. [Ver Anexo I]. 34 CAPÍTULO III ANÁLISIS DE LA TECNOLOGÍA COMPUTACIONAL -SBC-. 3.1 Antecedentes generales Existen muchas formas de definir el campo de la IA, una de ellas, es el estudio de las computaciones que permiten percibir, razonar y actuar, siendo una de las áreas encargadas de la creación de hardware y software que tenga comportamientos inteligentes; dentro de lo que se entiende por IA, es de gran importancia como rama de la Ingeniería y como un tipo de Ciencia. A. Barr y E. A. Feigenbaum, pioneros de la investigación en IA, expresan la siguiente definición: La Inteligencia Artificial es la parte de la Ciencia que se ocupa del diseño de sistemas de computación inteligentes, es decir, sistemas que exhiben las características que asociamos a la inteligencia en el comportamiento humano que se refiere a la comprensión del lenguaje, el aprendizaje, el razonamiento, la resolución de problemas, etc. Hoy en día, el campo de la IA engloba varias áreas tales como los sistemas expertos, la demostración automática de teoremas, el juego automático, el reconocimiento de la voz y de patrones, el procesamiento del lenguaje natural, la visión artificial, la robótica, las redes neuronales. El poder construir, diseñar y adquirir máquinas capaces de ejecutar procesos con cierto grado de inteligencia, ha sido para los científicos uno de los propósitos más primordiales y preocupante a lo largo de la historia. Primeramente, el esfuerzo se enfocó a la creación de autómatas, máquinas que realizan funciones propias del ser humano con mayor o menor éxito. 35 Sin embargo, la disponibilidad de herramientas y lenguajes de programación diseñados exclusivamente para el desarrollo de máquinas inteligentes, contrasta el problema de que estas máquinas que se implementan sobre computadoras establecidas bajo la filosofía funcional expuesta por Von Neuman, apoya una representación secuencial del proceso de tratamiento de la información. Es conveniente aclarar que la construcción de máquinas no se trata de reemplazar al ser humano o experto, estas máquinas realizan funciones de tipo intelectual permitiendo otorgar el apoyo al trabajo del mismo. 3.1.1 Definición de Sistemas Basados en Conocimientos. Una de las ramas más importantes de la Inteligencia Artificial es aquella orientada a desarrollar sistemas que repliquen las capacidades humanas de resolución de problemas en dominios específicos, como la diagnosis de enfermedades, o la planificación de procesos empresariales. Estos sistemas se han llamado tradicionalmente Sistemas Expertos, aunque actualmente se los conoce como SBC, Sistema Basado en Conocimiento, y han dado lugar a la Ingeniería del Conocimiento. Lo importante, es que proporcionan una tecnología adecuada para automatizar procesos de razonamiento para resolver problemas, en los cuales no es adecuada una metodología de computación tradicional, porque estos poseen un tipo de implementación mezclando los conocimientos con el procedimiento lógico, caso contrario sucede en los sistemas basados en conocimientos, el aporte metodológico fundamental, es el concepto de separación del conocimiento, organizada en una estructura denominada base de conocimientos y el procedimiento lógico implementado en un motor de inferencia. Existen distintas y numerosas definiciones de los SBC, desde las más simples hasta las que tratan de explicar su complejidad. Algunas de estas definiciones se presentan a continuación: 36 Son sistemas informáticos capaces de simular los atributos de un experto humano en un área de conocimiento especializado. Es un programa que soluciona problemas de alto nivel de complejidad y da consejos en campo especializado. Por ejemplo, diagnóstico médico, diseño de automóviles, investigaciones geológicas. Utiliza un “modelo computacional” del proceso de razonamiento del experto, y es capaz de explicarlo. Un SE o SBC está basado en conocimiento, almacenados en una base de conocimientos en forma separada al mecanismo de razonamiento, y utilizando un método de representación, por medio de reglas, esquemas, átomos de conocimiento, concepto asociado a una regla. Métodos cualitativos, generalmente se basan en el conocimiento heurístico de “expertos” en el proceso o sistema. Este conocimiento se formula mediante modelos cualitativos, estructurados mediante reglas. Un SE o SBC es adecuado para enfrentar un determinado problema si: - Los expertos son capaces de explicar los métodos mediante los cuales resuelven los problemas en su dominio. - La naturaleza de los problemas requiere de manipulación simbólica. - La formulación de soluciones requiere de habilidades cognitivas y soluciones heurísticas. Existen otras definiciones, según otros autores: Los SE son máquinas que piensan y razonan como un experto lo haría en una cierta especialidad o campo, no sólo realiza funciones tradicionales de manejar 37 grandes cantidades de datos, sino que también manipula esos datos de forma tal que, el resultado sea inteligible y tenga significado para responder a preguntas incluso no completamente especificadas. [STE84] A partir de ésta definición surgieron otras que se señalan a continuación: Un SE o SBC, es un sistema informático (software y hardware) que simula a los expertos humanos en un área de especialización dada. [CAS91] [ALV91]. Un sistema experto debería ser capaz de procesar y memorizar información, aprender y razonar en situaciones deterministas e inciertas, comunicar con el ser humano y/u otros sistemas expertos, tomar decisiones apropiadas y explicar porque se han tomado tales decisiones. Además, se puede pensar en un sistema experto como un consultor que puede suministrar ayuda a los expertos humanos con un grado razonable de fiabilidad. [DUR94] En la figura. 3.1.1-1 se observa los campos dominantes en los que se utilizan SE o SBC. . Figura 3.1.1-1: Campos de aplicación de SE. o SBC. Adaptado de Durkin (1994) - Castillo y Álvarez (1991) 38 3.1.2 Historia, sobre los Sistemas Basados en Conocimientos Los primeros estudios y explicaciones teóricas sobre el cerebro y el pensamiento fueron expuestos por antiguos filósofos griegos, Platón (427-347 a.C.) y Aristóteles (384-422 a.C.), siguiendo la misma línea de ideas mantuvo Descartes (1596-1650) sobre el proceso mental. Allan Turing en 1936, fue el primero en estudiar el cerebro humano como una forma de ver y relacionar el mundo de la computación. A continuación, se presenta las etapas por las que ha pasado la ciencia I.A: 1.- El inicio (1956-1965) poniéndose principal énfasis en la implementación de juegos en el computador (ajedrez, damas, etc.), así como en la demostración de teoremas. 2.- Etapa obscura (1965-1970), aquí se apoya el entusiasmo por la I.A. 3.- Etapa del renacimiento de la I.A (1970-1975), iniciado en la Universidad de Stanford con el sistema experto medico MYCIN (experto en enfermedades infecciosas de la sangre como la meningitis). 4.- Etapa de las sociedades (1975-1980), se identifica la necesidad de trabajar en sociedad con profesionales en otras áreas del conocimiento (Dendral = Mycin). 5.- Etapa de la comercialización de la I.A. El estudio y desarrollo de los SE comenzó a mediados de la década del 60. Entre 1965 y 1972 fueron desarrollados varios de estos sistemas, muchos de ellos tuvieron un alcance muy limitado, otros como MYCIN, DENDRAL y PROSPECTOR, constituyeron la base histórica de los sistemas expertos; y aún en la actualidad son de gran interés para los investigadores que se dedican al estudio y construcción de los mismos. 39 A continuación en esta tabla se muestra los periodos con sus respectivos proyectos. Tabla 3.1.2-1 Breve historia de las etapas en aplicaciones con SBC o SE. Periodos Proyectos 1960-1965 Primeras ideas General Problem Solver 1965-1970 1970-1975 1975-1980 1980-1985 1985-1990 1990-1995 Razonamiento v/s Conocimiento Conocimiento heurístico, específico Primera generación, se combinan las ideas Segunda generación Entornos, inicio sistematización. Madurez, sociedad del conocimiento, metodologías Dendral Mycin Mycin/Emycin Prospector KADS CommonKADS En teoría, estos sistemas son capaces de razonar siguiendo pasos comparables a los que sigue un especialista (médico, biólogo, geólogo, matemático, etc.), cuando resuelve un problema propio de su disciplina. El creador debe comenzar por identificar y recoger, del experto humano, los conocimientos que éste utiliza: conocimientos teóricos, pero por sobre todo, los conocimientos empíricos adquiridos en la práctica. Por ser los sistemas expertos programas basados en conocimiento, la programación de estos incluye como aspecto fundamental la programación del conocimiento (Ver figura. 3.1.2-1), la cual hace uso de la representación explícita del conocimiento a utilizar por el sistema y de su interpretación y manipulación lógica por medio de mecanismos de inferencia, que permitan deducir nuevo conocimiento a partir del que ya se conoce. Figura 3.1.2-1: Integración de programación de SBC o SE. 40 Los SBC o SE son uno de los puntos que componen las investigaciones en el campo de la IA. Un sistema de computación que trabaje con técnicas de IA deberá estar en situación de combinar información de forma "inteligente", alcanzar conclusiones y justificarlas al igual que el resultado final. Estos sistemas son una expresión de los sistemas basados en el conocimiento. Con la aplicación de técnicas de I.A, finaliza la transición del procesamiento de datos al procesamiento de conocimientos. 3.1.3 La función de un Sistema Basado en Conocimiento o Sistema Experto. La función primordial es aportar soluciones a problemas, como si de humanos se tratara, es decir capaz de mostrar soluciones inteligentes. Es viable gracias que al sistema lo crean con expertos, que intentan estructurar y formalizar conocimientos poniéndolos a disposición del sistema, para que este pueda resolver una función dentro del ámbito del problema. Acceder a los conocimientos adquiridos por experiencia es lo más difícil, ya que los expertos, al igual que otras personas, apenas los reconocen como tales. Son buscados con mucho esfuerzo y cuidado, siendo descubiertos poco a poco. 3.1.4 Sistemas Basados en Conocimientos y otras áreas de Inteligencia Artificial IA Razonamiento Conocimiento . Percepción Movimiento Restricción General de Problemas Sistemas Basados en Conocimiento Planificación Aprendizaje Automático Robótica Visión Artificial Procesamiento del lenguaje natural Figura 3.1.4-1: Áreas involucradas en IA. 41 Los SBC son una de las áreas básicas en IA, relacionados con las capacidades humanas de razonamiento y conocimiento. Por lo tanto, existe relaciones con: • Representación de la información y conocimiento. • Métodos de planificación que analizan diferentes estrategias para descomponer un problema dado, resolver cada una de sus partes, y llegar a una solución final. La interacción entre las partes dependerá del grado de desintegración del problema. • Aprendizaje automático, razonamiento basado en reglas. • Procesamiento del lenguaje natural, consiste en extraer tanta información como sea posible de un texto escrito. • Con aplicaciones financieras, industriales, corporativas crecientes, diagnósticos médicos. • La sociedad del conocimiento. Definición de tres conceptos fundamentales (Ver figura. 3.1.4-2) DATOS INFORMACIÓN CONOCIMIENTO Figura 3.1.4-2: Esquema jerárquico de conceptos vitales. • Datos: están formado por la evidencia o los hechos conocidos en una situación particular. Este elemento es dinámico, es decir, puede cambiar de una aplicación a otra, por lo tanto no es de naturaleza permanente y se almacena en la memoria de trabajo. En situaciones deterministas, las relaciones entre un conjunto de objetos pueden ser representadas mediante un conjunto de reglas. 42 • Información: son asociaciones funcionales implícitas entre datos en una aplicación, la información almacenada en la base de conocimiento es permanente y estática, es decir, no cambia de una aplicación a otra, a menos que se incorporen al sistema experto elementos de aprendizaje. • Conocimiento: se almacena en la base de conocimiento y consiste en un conjunto de objetos y un conjunto de reglas que gobierna las relaciones entre esos objetos. Las asociaciones funcionales explícitas entre elementos de información o de datos en una aplicación, tiene como propósito la capacidad generativa de nueva información. Hay que diferenciar los conceptos entre dato y conocimiento, el conocimiento se refiere a afirmaciones de validez general, tales como reglas, distribuciones de probabilidad, y los datos se refieren a la información relacionada con una aplicación particular, por ejemplo, en el caso de diagnóstico médico, los síntomas, enfermedades y las relaciones entre ellos forman parte del conocimiento, los síntomas particulares de un paciente dado, forman parte de los datos. Mientras que el conocimiento es permanente, los datos son efímeros, es decir, no forman parte del componente permanente de un sistema, y son destruidos después de usarlos. El conocimiento se almacena en la base de conocimiento y los datos en la memoria de trabajo. 43 3.1.5 Diferencias entre un Programa Convencional y SBC o SE. Tabla 3.1.5-1: Diferencias principales de los SBC. [GAL06] Sistema Convencional Sistema Experto Conocimiento y lógica de proceso, mezclados en un programa. Base de conocimientos y mecanismos de inferencia separados. No se da explicación de la necesidad de los datos, y tampoco del resultado en el que se llegó. Lo explican Es difícil efectuar cambios en los conocimientos programados. Es más fácil modificar la base de conocimientos. Necesitan información completa para operar. Deben ser más tolerantes para operar, aún con alguna información desconocida. Generalmente manejan datos cuantitativos. Manejan datos cualitativos. Captura, amplifica y distribuye el acceso a datos numéricos o textuales. Captura, amplifica y distribuye el acceso a juicios basados en conocimientos. El usuario define el conocimiento y además debe definir cómo interacciona con el conocimiento previo. Debe reestablecer la secuencia de instrucciones de procesamiento, conocimiento procedimental. El usuario (experto) define el conocimiento y el SBC lo integra en la aplicación existente, conocimiento declarativo. . 44 3.1.6 Sistemas Basados en Conocimientos o Sistemas Expertos, Pioneros Entre los SE, inicialmente desarrollados, se destacan los siguientes: Tabla 3.1.6-1: Referencia a los principales Sistemas Expertos. DENDRAL Determinación de la estructura de moléculas de química orgánica, a partir de espectrografía de masas y otros datos Lindsay, Buchanan, Feigenbaum, Lederberg (Universidad de Stanford, 1965) INTERNIST Para medicina interna (Pople y otros, 1975). CASNET Ayuda para el diagnóstico y tratamiento de glaucoma. Posee un modelo de desarrollo de la enfermedad. (Weiss y otros, 1976). MYCIN Diagnóstico médico, que ayuda a determinar la identidad exacta de una infección de la sangre, y a prescribir los antibióticos apropiados. PUFF Diagnóstico de infecciones pulmonares. (Edward Feigenbaum, 1977). PROSPECTOR Prospección minera: establece hipótesis sobre la existencia de yacimientos Minerales. (Konolige, SRI Internacional, 1979). MACSYMA Cálculo Integral y Diferencial. Desde 1965 se trabajó en antecesores de este Sistema Experto como SAINT, SIN y MATHLAB. (Martín y Fateman, Massachusetts Institute of Technology, 1976). R1 rebautizado XCON Configuración de Computadores Digital (Ejemplo: VAX 11), cumpliendo con las necesidades del cliente y sometido a determinadas restricciones. (John McDermott, Carnegie Mellon University for Digital Equipment Corp., 1979). 45 3.1.7 Ventajas y Desventajas de los SE o SBC. Tabla 3.1.7-1: Descripción de las ventajas y desventajas de los SBC. Ventajas Desventajas - Conocimiento dependiente del dominio. a) Siempre intentan resolver problemas, aún fuera de su competencia - Distribución de conocimiento escaso. a) Conocimiento concentrado en pocos expertos. b) Deseable facilitar el acceso al conocimiento. - Facilidad de modificación del conocimiento. a) Imprescindible en dominios cambiantes - Carecen de conocimiento de sentido común. a) A no ser que se incluya, lo que es difícil y costoso. - Consistencia de respuestas. a) Distintos expertos, distintas respuestas. - Los algoritmos de inferencia para el caso general son complejos y hay ciertos tipos de problemas en los que bastaría un lenguaje con algoritmos más sencillos. - Preservación del conocimiento y experiencia. -Separación conocimiento (reglas)/razonamiento (inferencia) -Problemas para razonar con conocimiento incierto, impreciso y subjetivo. - Capacidad de solución de problemas incompletos. a) Proponen soluciones (parciales) a problemas con datos inexactos. - Explicación de solución. a) Proporcionan explicaciones sobre razonamiento y conocimiento. b) Los usuarios comprenden y aprenden. 46 3.1.8 Sistemas Basados en Conocimientos en Tiempo Real. Al evolucionar la metodología de los SE, de un arte hacia una ciencia, presentarán problemas más exigentes y desafiantes. Por ende, algunos de los ambientes interesantes son las tareas en operar en tiempo real. Cabe destacar, que un sistema se considera de tiempo real, cuando garantiza procesar y responder dentro de un lapso de tiempo que ha sido prefijado como parte de la definición del problema. Los campos de aplicación son muy variados, por ejemplo en un sistema de diagnóstico médico, o en un sistema integrado de ayuda a la toma de decisiones empresariales. En cualquier caso, un SI12 partirá de unos datos y los convertirá en información (conocimiento), de modo que ayude a tomar una decisión. Para convertir los datos en información útil, empleará algoritmos de razonamiento, aprendizaje, evolución, etc. Además, el SI actuará siempre en tiempo real, lo que representa un aumento de la productividad. La complejidad de estos sistemas va incrementándose, y se puede medir sobre tres dimensiones: Número de factores a considerar antes de tomar la decisión. Número de funciones a controlar. Velocidad a la cual debe ejercerse las funciones de entrada, decisión y control. Una razón importante para aplicar SE a tareas de monitoreo y control en tiempo real, es para reducir la excesiva carga de señales sobre operarios, los cuales por este motivo pueden cometer costosos errores. _________________________ 12 Sistema de Información 47 3.2 Arquitectura de los Sistemas Basados en Conocimientos. Figura 3.2-1: Arquitectura de los SBC. A continuación se define en términos generales, la arquitectura de los SBC. Base de Conocimiento: los expertos deben brindar conocimientos aplicables al dominio concreto, una base de conocimiento ordenada y estructurada, y un conjunto de relaciones bien definidas y explicadas. Existen, reglas, marcos, redes semánticas, redes bayesianas. Es un elemento estático. Motor de Inferencia: algoritmo para manipular los conocimientos y solucionar problemas propuestos. El objetivo principal es obtener conclusiones aplicando el conocimiento a los datos. Estas conclusiones pueden estar basadas en conocimientos deterministas o probabilísticas. El tratamiento de situaciones de incertidumbre (probabilísticas) puede ser considerablemente más difícil que el tratamiento de situaciones ciertas (deterministas). Memoria de Trabajo: almacena datos proporcionados, objetivo propuesto y resultados intermedios. Es un elemento dinámico. Interfaz de Usuario: es el enlace entre el sistema experto y el usuario. Como 48 entrada lo forman los datos, consultas y objetivos, y con respecto a la salida, lo constituyen la representación y justificación de respuestas. Para que un sistema experto sea una herramienta efectiva, debe incorporar mecanismos eficientes para mostrar y obtener información fácil y agradable, por ejemplo, luego del trabajo del motor de inferencia la información que se tiene que visualizar es el de las conclusiones, razones de las mismas, y una explicación de las acciones iniciadas. Cuando el motor de inferencia no puede concluir debido a la ausencia de información, la interfaz de usuario es el vehículo para obtener la información necesaria. Una implementación inadecuada de la interfaz de usuario disminuirá la calidad de un sistema experto. Adquisición de Conocimiento: controla el flujo del nuevo conocimiento que fluye del experto humano a la base de datos. El sistema determina que nuevo conocimiento se necesita o si el conocimiento recibido es en realidad distinto. Además es utilizado por el motor de inferencia cuando el conocimiento inicial es muy limitado y no se pueden sacar conclusiones, este obtiene el conocimiento necesario y continúa con el proceso de inferencia hasta que se hayan sacado conclusiones. El usuario puede suministrar la información requerida para éste y otros objetivos, para esto es necesario una interfaz de usuario y una comprobación de consistencia de información suministrada por el usuario antes de introducirla en la memoria de trabajo. Señalado anteriormente, los primeros esfuerzos en IA estaban enfocados a encontrar modelos de razonamiento sencillos y generales. Sin embargo, eran pocos los avances, por ende, se inicia una parte importante dentro de la IA, los SBC, sistema informático, con capacidad de razonamiento y resolución, limitado a un dominio concreto, además establece una representación explícita del conocimiento para poder resolver problemas entregando lo máximo de optimización en la solución. 49 CAPÍTULO IV DESARROLLO DE LA HERRAMIENTA JESS “THE EXPERTS SYSTEM SHELL FOR THE JAVA PLATAFORM” 4.1 Antecedentes generales JESS13 es un motor de reglas en un ambiente de script, escritos netamente en la lenguaje de Java TM de SUN MICROSYSTEM por Ernest Friedman-Friedman-Hill en los laboratorios nacionales de Sandia en Livermore, CA. JESS fue inspirado originalmente de los CLIPS14, pero ha crecido en un ambiente completo, distinto, dinámico. Es pequeño, ligero, y uno de los motores más rápidos de la regla disponibles. Usando JESS, se puede construir el software de Java que tiene la capacidad "de razonar" con conocimiento que uno provee en la forma de reglas declarativas, además el lenguaje JESS sigue siendo compatible con los CLIPS, en que muchas escrituras de JESS son escrituras válidas de los CLIPS y viceversa. Como los CLIPS, JESS también utiliza el Algoritmo de Rete15 para procesar las reglas, un mecanismo muy eficiente para solucionar el problema que empareja múltiple dificultades. JESS agrega muchas características a los CLIPS, incluyendo el encadenamiento hacia atrás, las preguntas de la memoria de trabajo, que contiene los hechos representando conclusiones, hipótesis y metas, la base de conocimiento, para almacenar el conocimiento embebido, construido o diseñado dentro de un sistema experto, la agenda que reúne las reglas aplicables en un estado dado de ejecución del sistema y la máquina de inferencia. Además la capacidad de manipular y razonar directamente sobre los objetos de Java, es decir crear los objetos de Java y llamar los métodos de Java sin la compilación de _________________________ 13 The Experts System Shell for the Java Plataform, herramienta de desarrollo. Sistema shell o vacío, programado en lenguaje C. 15 Proceso de Unificación o Sustitución, infieren valores de las variables lógicas. 14 50 ningún código de Java. JESS permite representar el conocimiento como reglas, objetos, y como hechos. Esta herramienta de desarrollo se define como sistemas vacíos, representan y razonan modelando el comportamiento de los expertos humanos. Son programas declarativos, describen lo que el computador debería hacer, más que la instrucción sobre como hacerlo, y definen lenguajes procesales-orientados por objetoque proporcionan un flujo lineal de ejecución. La aplicación de shell, aumentan en gran medida la eficiencia en la creación de SE o SBC. Estos sistemas vacíos definen: Un lenguaje de representación de conocimiento. Proporcionan motor de inferencia. Definen e implementan primitivas de interfaz. Incorporan editor de base de conocimiento. La importancia de los shell, es que ofrecen una considerable ayuda para la construcción de prototipo, en este caso, representar el conocimiento mediante la construcción de reglas adecuadas, en relación a los síntomas y enfermedades. Además, es el procedimiento adecuado, pues posibilita una reacción rápida a los cambios, tanto por parte de los expertos como del usuario. En consecuencia, se decidió utilizar esta herramienta de desarrollo para aplicación del prototipo de proyecto de tesis. 4.2 JESS “Herramienta Poderosa”. JESS, tiene la capacidad de crear funciones que se definen según la que se desee, esto hace que la herramienta de desarrollo se destaque como un lenguaje de programación completo. Por ejemplo, se puede escribir un programa, en el cual se pueda llamar XXXX desde una función Java con JESS. Además, existen muchas posibilidades que JESS corra en un servidor y que un interfaz gráfico en el lado cliente lo llame. 51 Es necesario enfatizar que como JESS utiliza este algoritmo especial llamado “Rete”, que relaciona los hechos con las reglas, hace que JESS sea mucho más rápido que una simple concatenación de sentencias if..then en un bucle. Aquí se puede visualizar los hechos y reglas, en la memoria de trabajo. (Ver figura 4.2-1) Figura 4.2-1: Referencia a hechos y reglas, en JESS. 4.3 JESS, Motor de Inferencia. El motor de inferencia integra una colección de algoritmos de resolución de problemas, codificado y probado. Señalado anteriormente, JESS como motor de inferencia utiliza el algoritmo de Rete [FRIHI05], dando mayor eficiencia al procedimiento de reglas. El funcionamiento del proceso de inferencia es el siguiente: Detectar las reglas aplicables Elegir las reglas Aplicación de la regla Actualizar la base de conocimientos Repetir el ciclo hasta que no haya reglas aplicables 52 Al aplicar reglas al sistema se debe considerar que la base de conocimientos es la que contiene el conjunto de reglas que definen el problema, y el motor de inferencia obtiene las conclusiones de la base de conocimientos aplicando la lógica a estas reglas. Como estrategia de inferencia existe el encadenamiento de reglas que se utiliza para obtener conclusiones compuestas. Se usa cuando las premisas de ciertas reglas coinciden con las conclusiones de otras. Cuando se encadenan las reglas, los hechos pueden utilizarse para dar lugar a nuevos hechos. Esto se repite sucesivamente hasta que no puedan obtenerse más conclusiones. La representación de conocimiento basados en reglas, incluyen mecanismos de inferencia. A continuación se presentan dos tipos de encadenamiento de reglas: Encadenamiento hacia adelante (Forward Chaining), guiado por los datos, deductivo. Estado Inicial Conclusiones Intermedias Soluciones Reglas y Hechos Figura 4.3-1: Mecanismo de Inferencia, encadenamiento hacia adelante. Encadenamiento hacia atrás (Backward Chaining),guiado por los objetivos, inductivo. Estado Final Conclusiones Intermedias Soluciones Reglas y Hechos Figura 4.3-2: Mecanismo de Inferencia, encadenamiento hacia atrás. 53 Por lo tanto, la representación del conocimiento, hace referencia a estos mecanismos para representar y manipular la información. Los esquemas de representación resultantes deben permitir una búsqueda o una operación eficiente de los mecanismos de inferencia. Cabe destacar, que es importante controlar la coherencia del conocimiento, tanto en la construcción de la base de conocimientos como durante los procesos de adquisición de datos y razonamientos. Si la base de conocimientos contiene información inconsistente (reglas y/o hechos), el SBC se comportará de manera insatisfactoria, obteniendo conclusiones absurdas. También existen tipos de reglas, tales como: Reglas de implicación: si antecedentes Reglas de activación: si condición Reglas causales: si causa consecuente acción efecto - deductivas - puede emitirse incertidumbre. Reglas de diagnóstico: si efecto posible causa - no deductivas (razonamiento basado en hipótesis) - existe incertidumbre. Finalmente, el prototipo del proyecto de tesis, aplica en su motor de inferencia para interpretar y evaluar los hechos de la base de conocimientos, la estrategia de búsqueda de solución, un tipo de encadenamiento hacia atrás, siendo estas, reglas de activación. (Ver Anexo II, Programa de ejecución) y (Ver Anexo III, Código fuente) 54 4.4 Interacción con JESS 4.4.1 Aplicación JESS en el prototipo A continuación se muestra en la figura 4.4.1, la aplicación de JESS en el prototipo. Apache_Tomcat Servlets Páginas JSP B.D MySQL Usuario Motor de Inferencia Base de Conocimientos Jess (reglas) Java Figura 4.4-1: Aplicación de JESS en uso del Prototipo. El prototipo propuesto para su aplicación debe realizar varios procedimientos, para lograr la interacción de componentes con el sistema. Lo primero, es llegar a reunir la información requerida. Se tuvo que localizar al experto, al profesional médico, que trata enfermedades mentales, quien traspasará su conocimiento y experiencia al sistema. Para retroalimentar esta base de conocimientos, el paciente otorga información mediante los síntomas que presenta, otro influyente es cuando se realiza un test de 21 preguntas, 55 denominado Test de Hamilton, definido por la Sociedad Chilena de Salud Mental. A partir de este test se examina psicológicamente al paciente, lo cual el médico infiere el estado de los parámetros del habla, mental y memoria. Para una exploración física, se observa el aspecto y la actitud del paciente. Además de pruebas adicionales, como es la solicitud de exámenes requeridas por el médico en el policlínico de Psiquiatría, generalmente solicitan el examen de sangre para verificar si la causa de presentar algún cuadro depresivo fue provocada de una posible enfermedad. Toda esta recopilación de información acerca del paciente es almacenada añadiéndose a la base de conocimiento, teniendo una base irrefutable de los datos, donde el motor de inferencia como shell extrae esta información y la representa mediante reglas, obteniendo conclusiones para apoyar el criterio del profesional médico en la toma de decisiones, lo cual servirá para el prototipo propuesto. Cabe señalar que el diagnóstico médico combina dos formas de razonamiento: Utilizar síntomas conocidos para eliminar grupos de enfermedades, quedando cierto números de clases de enfermedades posibles. Considerar las clases de enfermedades posibles, y tratar de confirmarlas realizando preguntas por las demás manifestaciones no conocidas, y repetir en forma iterativa el proceso hasta llegar a un candidato con mayor probabilidad. La idea es considerar la primera forma de razonamiento, ya que el prototipo del proyecto de tesis, relaciona los síntomas del paciente con sus respectivas intensidades y duraciones, generando de este modo la clase de enfermedad posible que puede presentar el paciente. Por lo tanto, se analizaron cuatro episodios depresivos bajo el código F32, de la CIE-10, establecido por la psicóloga Melina Miranda, policlínico de Psiquiatría, del hospital base de Puerto Montt, siendo estas las clases de enfermedades posibles. 56 La gracia es que al considerar esta forma de razonamiento, el profesional médico pueda inferir mediante datos consistentes, concernientes al paciente, el diagnóstico médico entregando compatibilidad de los síntomas con respecto a la enfermedad, y validarlo con el resultado emitido por el sistema. 57 CAPÍTULO V DISEÑO E IMPLEMENTACION DEL PROTOTIPO PARA APOYO AL DIAGNÓSTICO MÉDICO 5.1 Modelo Para poder interactuar con el modelo de solución propuesto en el Servicio de Salud, Policlínico de Psiquiatría del Hospital Base de Puerto Montt, se determinó trabajar con pantallas gráficas, desarrolladas en Macromedia Dreamweaver MX 2004, usando páginas dinámicas Java Server Pages (JSP), simplificando el proceso de desarrollo con la incorporación rápida de elementos dinámicos en páginas Web. Se utiliza el servidor Apache Tomcat Versión 5.5.20, siendo el contenedor servlet, usado para la implementación de páginas JSP. Es un open source, liberado bajo la licencia de software de Apache. Referente al entorno de trabajo se usa el programa Eclipse, manejando los recursos del usuario, organizados en uno o más proyectos. Cada proyecto corresponde a un directorio de trabajo de Eclipse, conteniendo archivos y carpetas. Eclipse es un Entorno Integrado de Desarrollo (IDE) abierto y extensible. El editor utilizado es Object Web Lomboz, versión 3.1.2, es un open source, IDE para aplicaciones desarrolladas establecidas sobre tecnologías basadas en la plataforma J2EE (Java Enterprise Edition). El sistema debe ser amigable y claro para el usuario. A nivel técnico, debe incorporar una conexión a una base de datos desarrollada en MySQL, enlazada a un servidor de base de datos de MySQL, utilizando como editor SQLyog, libre MySQL GUI versión 5.15, la cual será instalada en una estación de trabajo personal en el Servicio de Psiquiatría, para luego poder validar el prototipo de software médico propuesto como proyecto de tesis. La implementación de este prototipo de software médico, señalado anteriormente se realiza sobre una estación de trabajo particular, no de forma simultánea, por ende, no se comparte en red. 58 Los requisitos de hardware y software, para el adecuado funcionamiento del proyecto en el policlínico de Psiquiatría del Hospital Base de Puerto Montt, deben ser como mínimo: Cliente: a) Software: Internet Explorer versión 5.5 o superior. Netscape 6.0 o superior. Sistema Operativo, Windows 98 o superior. b) Hardware: 64 MB RAM. Pentium III o superior. Conexión a Internet. Servidor: a) Software: Apache Tomcat Versión 5.5.20. Base de datos de MySQL. Plataforma J2EE (Java Enterprise Edition). Sistema Operativo, Windows XP. b) Hardware: 256 MB RAM. Pentium III o superior, 1 GHz. 59 5.2 Arquitectura del Prototipo Es de gran responsabilidad lo que se desea obtener, dentro del contexto, se trabaja mediante etapas o niveles de abstracción hasta los niveles expertos o técnicos. Lo primordial, es que un nivel alto de abstracción tenga capacidad de cambiar herramientas propias del sistema de información, sin afectar la arquitectura establecida. A medida que se avanza en lo propuesto, es posible que se generen en el camino problemáticas, lo que implica modificar la planificación sin que existan cambios en el nivel mayor de abstracción, sólo en los niveles de referencias requeridas. A continuación, se presenta la arquitectura de sistemas que involucra tres componentes relacionados entre si: arquitectura de tecnología, arquitectura de datos y arquitectura de aplicaciones. La figura.5.2-1, representa el sistema actual de gestión de manera manual en el Policlínico de Psiquiatría. El diagrama muestra el flujo enviado de un usuario A (profesional médico) hacia un usuario B (paciente) y viceversa. Paciente Profesional Médico Figura 5.2-1: Sistema Actual en el Servicio de Psiquiatría. 60 La figura.5.2-2 representa el prototipo de sistema basado en conocimientos propuesto como solución. El diagrama muestra el flujo, en que el profesional médico accede a la aplicación, no así el paciente, el paciente espera los resultados de diagnósticos emitidos por el sistema, informándose mediante el médico. Paciente Aplicación o Prototipo SBC Profesional Médico Figura 5.2-2: Arquitectura global del prototipo propuesto. El objetivo es que el modelo solución se circunscriba dentro de los lineamientos estratégicos del Servicio de Psiquiatría de Puerto Montt. A continuación en la figura 5.2-3, se detalla la arquitectura del SBC, prototipo propuesto como solución, mostrando la interacción entre los componentes. 61 Servidor Apache Tomcat Experto (Profesional Médico) Núcleo del sistema Base de Conocimientos Java Basados en reglas. Motor de Inferencia Adquisición del conocimiento JESS Paciente Memoria de Trabajo (hechos) Base de Datos MySQL Interfaz de Usuario (Aplicación Web JSP) Figura 5.2-3: Arquitectura de tecnología de SBC, prototipo propuesto. Posteriormente, se define la arquitectura de tecnología SBC del prototipo propuesto: Interfaz de Usuario: relación entre usuario y ordenador. Se puede acceder al sistema a través de pantallas gráficas, aplicado en un entorno Web, utilizando Java Server Pages (JSP). Recordar que el usuario es el profesional médico, ya que sólo ellos pueden acceder al sistema, no así el paciente, este puede consultar y/o 62 contribuir con la información añadiendo datos. En el caso de que el motor de inferencia no pudiese concluir por falta de información, la interfaz de usuario sería el vehículo para entregar la información necesaria. Por lo tanto, una implementación inadecuada de la interfaz de usuario disminuiría la calidad del sistema. Motor de Inferencia: se aplica como motor de inferencia la herramienta de desarrollo JESS, asociado a reglas. Estas reglas como representación del conocimiento son obtenidas de la base de conocimientos. El objetivo del motor de inferencia es el de obtener conclusiones en relación a los síntomas/enfermedad, aplicando el razonamiento a los datos, en este caso la lógica a estas reglas. Base de Conocimientos: al aplicar reglas al sistema se debe considerar que la base de conocimientos contiene el conjunto de reglas que definen el problema. La base de conocimientos se retroalimenta cada vez que se adquiera información del experto, quien contiene el conocimiento sobre el dominio. Experto: su función es la de poner sus conocimientos especializados a disposición del sistema. En este caso, el profesional médico. Memoria de Trabajo: es un elemento dinámico que almacena todos los hechos, datos proporcionados. El usuario accede al sistema e introduce la información en la base de hechos o memoria de trabajo. El sistema empareja esta información con el conocimiento disponible en la base de conocimientos para deducir nuevos hechos. En el prototipo propuesto se elige MySQL como estructura de la base de datos. Esta base de datos almacena registros de datos referentes al paciente (Ficha clínica, exámenes, diagnósticos, tratamientos, etc.), datos del profesional médico, clasificación de enfermedades, etc. Debe permitir la conexión con el servidor Apache Tomcat 5.5.20. a la base de datos local MySQL. 63 Adquisición del Conocimiento: controla el flujo del nuevo conocimiento que fluye del profesional médico a la base de conocimiento. El sistema determina si el conocimiento recibido es realmente nuevo. Servidor: se desarrolla bajo plataforma J2EE, utilizando la herramienta de software Apache Tomcat 5.5.20. Los parámetros considerados para creación del modelo propuesto son: Seguridad: La solución debe proveer un adecuado control de seguridad de acceso a las aplicaciones. Conectividad con motor de bases de datos: La solución debe permitir conectividad con el servidor de bases de datos MySQL, proporcionando consistencia en los datos al realizar consultas. Rendimiento: La solución propuesta debe entregar tiempos de respuesta aceptables. 64 5.3 Arquitectura de datos Existen distintas maneras de crear las bases de datos. Dentro de las cuales están las bases de datos fundamentadas en el modelo de red, base de datos jerárquicos, sistemas de archivos con ISAM16 y base de datos relacionales. Los tipos de bases de datos señalados no solo difieren en la manera de restaurar los datos y gestionar físicamente el almacenamiento, sino además difieren en los modelos conceptuales que muestran al programador y al usuario. En el transcurso del tiempo, el modelo relacional se ha transformado en el estándar para el diseño de bases de datos. Debido a la gran capacidad del propio modelo relacional, entrega una interfaz estándar, como es el SQL17 , que permite trabajar de manera clara, unida y entendible con infinidades de productos y distintas herramientas de bases de datos, en este caso se aplica MySQL18. Es por ello que las bases de datos relacionales son el tipo de bases de datos actualmente. Esto se debe fundamentalmente a lo siguiente: Ofrecen sistemas simples y eficaces para representar y manipular los datos. Se basan en un modelo, relacional, con sólidas bases teóricas. 5.4 Estructura de una base de datos relacional Las bases de datos están presentes en muchas aplicaciones, sobre todo en aquellas que manejan grandes cantidades de información que deben ser almacenadas y manipuladas de forma rápida y eficiente. Además, existen numerosas bases de datos relacionales para distintas plataformas, algunas de ellas son: Access, Interbase, Paradox, Oracle, Sybase, siendo ampliamente utilizables. _________________________ 16 17 18 Métodos de acceso secuencial indexado. Structured Query Languaje Open Source, más popular SQL sistema de gestión de base de datos 65 El modelo de base de datos relacional muestra los datos como una serie de tablas, la estructura se especifica mediante el establecimiento de relaciones entre las tablas, en lugar de organizar las relaciones de los datos acorde a la forma en que están físicamente almacenados. El almacenamiento físico de un archivo de la base de datos es independiente. Sin embargo, las tablas se consideran como un conjunto de filas y columnas. Con respecto a las relaciones, la base de datos puede estar formada por más de una tabla y éstas pueden estar relacionadas entre sí de distintas maneras. También existen las claves candidatas de una relación. Son conjuntos no vacío de campos (atributos) que identifican unívoca y mínima cada registro. Por la propia definición de relación, siempre hay al menos una clave candidata, ya que al ser la relación un conjunto no existen registros repetidos, el conjunto de todos los campos identificará unívocamente a los registros. Una base de datos relacional es un conjunto de relaciones normalizadas. Para representar el esquema de una base de datos relacional, se debe dar el nombre de sus relaciones, los atributos de éstas, los dominios sobre los que se definen estos atributos, las claves primarias (clave candidata que el usuario escoge) y las claves alternativas (claves que no han sido elegidas). El proceso de normalización es un estándar que consiste en la conversión de las relaciones entre las entidades, evitando: La redundancia de los datos: repetición de datos en un sistema. Anomalías de actualización: inconsistencias resultantes de datos redundantes y actualizaciones parciales. Anomalías de borrado: pérdidas no intencionadas de datos debido a que se han borrado otros datos. 66 Anomalías de inserción: imposibilidad de adicionar datos en la base de datos, debido a la ausencia de otros datos. El proceso de normalización se conduce hasta el modelo físico de datos y consta de varias fases denominadas formas normales, es decir divide la información repetida en diferentes tablas con el propósito de excluir la duplicidad, y así llegar al objetivo deseado. 5.5 Modelo de Entidad-Relación (ER) La base del sistema de software médico es la creación, mantención y el ingreso de información. El modelo ER fue pensado como una alternativa al modelamiento de datos tradicional, aplicando los modelos de datos basados en grafos (jerárquico y redes) y los basados en tablas (relaciones) para la representación de los datos de un sistema. Además es aplicable poderosamente en los modernos DBMS19. El objetivo de este modelo es manejar toda la información desde la base de datos, mediante la división de los datos dentro de muchas entidades discretas, a través de un pequeño número de tablas. Toda la información referida a los pacientes, diagnósticos, observaciones y tratamientos médicos, serán almacenadas en este modelo y operadas por el sistema de software. El modelo resultante se visualiza a continuación en la figura 5.5-1 ________________________ 19 Sistemas de Administración de Bases de Datos 67 Fec.Tratamiento o Descripción Nombre * Recibe Código Tratamiento * Nombre Tiene Previsión Fonos Nombre Dirección NºFC RUT Fec.Nac 1 1 Paciente 1 Posee Código 1 Ficha Clínica 1 1 * Enfermedad Registra * 1..* Descripción Atendido por Fec.Ingreso Escribe Fonos Clave Nombre RUT 1..* 1..* Especialidad Médico 1..* Dpto. Realiza Fecha 1..* Recibe * Diagnóstico Código Nombre Figura 5.5-1: Diagrama de Entidad / Relación. 68 5.6 Descripción de tablas del Modelo o Prototipo. TABLA PACIENTE Esta tabla almacena toda la información referente a los pacientes que ingresan al Policlínico de Psiquiatría, atendidos en forma ambulatoria, de urgencia o por hospitalización. Los campos que se visualizan: RUT, nombres, apellidos, edad, sexo, estado civil, dirección actual, fecha de nacimiento, teléfono, etc. TABLA PMEDICO En esta tabla se almacena toda la información de los profesionales médicos que otorgan servicios en el Hospital Base de Puerto Montt, tales como: código profesional médico, RUT, nombres, apellidos, teléfono, departamento, especialidad, etc. Esta tabla además valida el ingreso al sistema, ya que los campos que conforman el control de acceso se encuentran incluidos en la tabla pmedico de la base de datos. Los campos son: el RUT del usuario, en este caso el RUT profesional médico y su contraseña. TABLA FICHA Esta tabla almacena toda la información referente a la ficha clínica del paciente. Los campos que se visualizan: código de ficha clínica, RUT, fecha de apertura, antecedentes personales, familiares, etc. TABLA EXAMEN En esta tabla se almacena toda la información relacionada al paciente y los exámenes que se le emplearon. Los datos son: código del examen, nombre, tipo de examen, procedencia, RUT y nombre del profesional médico, RUT del paciente, fecha de solicitud y descripción del examen. 69 TABLA DIAGNÓSTICOS En esta tabla se almacena toda la información concerniente a los diagnósticos del paciente, tales como: código del diagnóstico, nombre del diagnóstico, fecha inicio del diagnóstico, y descripción breve del diagnóstico. Además, de los RUT profesional médico y paciente. TABLA TRATAMIENTOS En esta tabla se almacena toda la información referida al tratamiento del paciente. Los datos son: código del tratamiento, código del diagnóstico, descripción del tratamiento y observaciones del paciente. TABLA DETALLE_TRATAMIENTO En esta tabla se almacena toda la información detallada del tratamiento del paciente. Los datos son: código del detalle_tratamiento, código del tratamiento nombre del fármaco, dosis, cantidad de comprimidos diarios, fecha de inicio/término. TABLA SEGUIMIENTOPAC En esta tabla se almacena toda la información de seguimiento al paciente para un mayor control. Los datos son: código del diagnóstico, código del profesional médico, fecha de control, asistencia, evaluación global y próxima cita del paciente. TABLA SÍNTOMAS_EVALUACIÓN En esta tabla se almacena toda la información referente a los síntomas con sus respectivas intensidades y duraciones del paciente, evaluado por el profesional. Los datos son: código de evaluación, pregunta identificador del síntoma, estado (presente/ausente), intensidad y duración. TABLA EVALUACIÓN En esta tabla se almacena la información que relaciona la tabla síntomas_evaluación del paciente. Los datos son: código de evaluación y los RUT del profesional médico y paciente. 70 TABLA PATOLOG (CIE-10) En esta tabla se almacena las patologías asociadas a la depresión. Los datos son: código, nombre y descripción breve de la patología. TABLA TESTHAMILTON En esta tabla se almacena la información asociada al Test de Hamilton para detección de depresión que realiza el médico hacia el paciente. Los datos son: los RUT del profesional médico y paciente, añadiendo las 21 preguntas del test, cantidad del rango definida por el cuestionario y el estado (ausente/presente). TABLA TURNOS Esta tabla almacena toda la información concerniente a la sistematización de los turnos que otorga el médico hacia los pacientes. Los datos que se manipulan son: código del turno, los RUT del profesional médico y paciente, días y horas de atención, duración de cada turno, fecha de control y fecha de próxima citación. Para mayor conocimiento de la base de datos, en anexos se visualiza mediante el programa Microsoft Visio 2003 el modelo de datos orientado a objetos, representando, datos, relaciones y la interacción de aquellos. (Ver anexo II) 71 5.7 Implementación del Prototipo El prototipo fue desarrollado con tecnologías Java compatibles para la instalación en el Servicio de Psiquiatría del Hospital Base de Puerto Montt. El modelo propuesto esta compuesto por páginas que permiten: registrar un paciente, antecedentes, diagnósticos, exámenes, observaciones y tratamientos. De igual modo, para conceder las horas de interconsultas médicas se componen de páginas que permiten: asignar citas al paciente, consultar e imprimir pacientes citados. La página para el control de acceso, es decir el cuadro de diálogo usuario, genera conexión a las tablas PMEDICO, la función trascendental es controlar el acceso de los usuarios al prototipo mediante la petición de consulta del RUT de usuario y contraseña. 5.7.1 Arquitectura del Prototipo Las páginas que componen este prototipo, están organizadas en tres categorías. La primera categoría corresponde a páginas de acceso y control de ingreso a la información, ya sea de consulta como de análisis. Tabla 5.7.1-1: Páginas de acceso y validación de ingreso al prototipo. ct_validarusuario.jsp ct_acceso1.jsp La segunda categoría corresponde a las páginas que permite al usuario trasladarse dentro del prototipo, siendo estas algunas páginas principales del sistema. Mediante estas páginas se obtienen: consultas e ingresos de pacientes almacenados en la base de datos, y en el caso del otorgamiento de interconsultas médicas, se maneja la página de turnos, incluyendo días y horas de atención, registro de hora para interconsulta, consulta 72 de horas y fecha de control. Tabla 5.7.1-2: Páginas de desplazamiento dentro del prototipo. Portada21.jsp IngresarPac.jsp rg_tpacte_existente.jsp rg_tpacte_nuevo.jsp rg_tdiagxpatología.jsp rg_turnos.jsp El tercer grupo corresponde a la página que ofrece servicios al usuario. Tabla 5.7.1-3: Página de ayuda del prototipo. ayuda.jsp 5.7.2 Control de acceso al prototipo. Para ingresar a la página del prototipo se utiliza la página Web ct_acceso1.jsp, desde el cual el usuario ingresa su RUT y contraseña, acreditando la validación del usuario mediante la página ct_validarusuario.jsp, se verifica la autenticidad de este. El formulario es un control visual de Dreamweaver MX, para exportar la información a la base de datos concerniente al usuario. Primeramente, la función de la página es aplicar la conexión a la base de datos MySQL y consultar en la tabla PMEDICO, si es válido al ser ingresado el RUT de usuario y la contraseña, de lo contrario se mostrará un mensaje de acceso incorrecto, certificando que los datos ingresados son erróneos. 73 Una vez verificada la autenticidad del RUT de usuario y contraseña, se visualizan pantallas que permiten al usuario trasladarse dentro del prototipo, que son las páginas principales del sistema. Posteriormente, en los anexos se puede visualizar con más detalle y claridad de los controladores definidos en Java. (Ver Anexo IV, código fuente) A continuación se muestra la descripción de la interfaz en lenguaje de diseño, asociada al usuario, siendo este un diagrama de flujo de datos nivel 1. RUT y Contraseña del Usuario Ingreso del RUT y contraseña de usuario ct_ acceso1.jsp Existe error Valida RUT y contraseña de usuario ct_ validarusuario.jsp Página principal del prototipo Visualiza mensaje incorrecto RUT de Usuario y Contraseña válida Portada21.jsp Figura 5.7.2-1: Diagrama de Flujo del control de acceso al prototipo. Cabe destacar que el usuario se asocia al profesional médico, alumnos en práctica, asistentes, es decir todas aquellas personas que tratan la salud mental, usarán la aplicación, sólo con introducir los datos correspondientes a un formulario. 74 Con respecto a la validación de los datos, es un modulo que tiene la responsabilidad de validar los datos ingresados por el usuario. Verificar que los datos obligatorios han sido ingresados correctamente, por ejemplo, fechas, campos numéricos, etc. quedando registrados en la base de datos del prototipo. De esta manera, se podrá acceder a la página principal del prototipo y hacer uso de la aplicación. En caso contrario, solicitar ser registrado como usuario al administrador del sistema computacional del hospital. 5.7.3 Pantallas Gráficas de Análisis y Consulta. Después de haber ingresado los parámetros correctos al prototipo, se visualizan distintas pantallas que son principales del sistema, presentadas en el siguiente capítulo, son dependientes entre sí. Primeramente, para verificar si el paciente está registrado, se requiere ingresar el RUT del paciente, analizando su ficha clínica (antecedentes, exámenes, diagnósticos y tratamientos), y a través de esta pantalla el usuario podrá acceder a las opciones de consultas. De lo contrario, se tendrán que llenar los datos del paciente que es ingresado por primera vez al Policlínico de Psiquiatría, quedando almacenada en la base de datos la información necesaria, para luego acceder a estas opciones de consultas. 5.7.4 Pantallas Gráficas de Servicios. Estas pantallas de servicios son básicas para el profesional médico. Dentro de este grupo de pantallas distinguimos las siguientes: Consultas de pacientes registrados. Consultas de exámenes a cada paciente. Consulta de diagnósticos. Consulta del profesional médico. 75 CAPÍTULO VI IMPLEMENTACIÓN DEL PROTOTIPO BASADO EN SISTEMAS DE CONOCIMIENTOS 6.1 Antecedentes generales El prototipo que se desea implementar está cimentado en una técnica de IA, conocida como SBC, bajo este paradigma la base de conocimiento y el motor de inferencia trabajan independientemente, el motor es utilizado para representar el conocimiento especializado de un experto humano, mediante la construcción de reglas adecuadas en relación a los síntomas y enfermedades. Se debe considerar la detección de reglas aplicables, elección de reglas, aplicación de la regla, actualización de la base de hechos; y por supuesto de las estrategias de inferencia que aplica un encadenamiento hacia atrás (backward chaining), lo que implica construir e implementar estas reglas, y con la interpretación de aquellas, obtener a través del sistema, resultados o respuestas con exactitud en el diagnóstico médico en pacientes con cuadro depresivo. Lo complicado en el prototipo para apoyo al diagnóstico médico, es el hecho de diagnosticar patologías depresivas, específicamente, enfermedades orgánicas, donde muchos son síntomas psíquicos, afectando también la parte física, acreditando un trastorno psicofísico. La necesidad de emplear tecnología inteligente es importante para evaluar la factibilidad del prototipo, y pretendiendo establecer si realmente el apoyo informático contribuye al profesional médico, inclusive en situaciones que puedan presentar cierta ambigüedad para el especialista. 76 6.2 Entorno del Proyecto 6.2.1 Descripción de la solución para el desarrollo del prototipo Como punto primordial, compensar necesidades del Servicio de Salud en el Policlínico de Psiquiatría de Puerto Montt, logra una óptima atención al paciente o público en general, implementando un prototipo de software médico, es decir, un sistema informático fundamentado en técnicas de I.A, que soporte el funcionamiento del servicio, reduciendo tiempos de respuesta. La metodología empleada permite obtener un prototipo flexible basados en modificaciones, como E/S, estructuras. También utilizar ocultamiento de información (caja negra) y desarrollar un plan de cambios (modelo dinámico). Para llevar a cabo la implementación de este prototipo, se dividió en varias etapas. Primeramente, fue vital conocer la necesidad actual, objetivos, entorno y los involucrados en el tema, y así tener recopilación de toda la información para poder evaluar la situación que enfrenta actualmente el Servicio de Psiquiatría de Puerto Montt, lo cual debe ser suficiente para que el prototipo de software médico a implementar, satisfaga los propósitos definidos presentados al comienzo de este informe de tesis. Luego se analizó un estudio más a fondo de la situación vigente en el Policlínico de Psiquiatría y los requerimientos, con el objetivo de tratar los alcances del problema, y así apreciar la factibilidad que el prototipo emita un diagnóstico médico sólido y verdadero para posteriormente implementar la solución propuesta. Para llevar a cabo este proyecto, se tuvo que realizar varias reuniones con el equipo médico para poder concretar un prototipo solución como plataforma a la abstracción definida y estable de los datos. Al establecer estas reuniones con el equipo encargado, no cabe la menor duda que forman un 77 modelo representativo y seguro en los requerimientos que actualmente se presentan en el Hospital Base de Puerto Montt, Servicio de Psiquiatría, para implementar el prototipo de software médico. Adjunto a esto, se especificó escenarios de uso del prototipo, no limitando el modelo solución, sino para evaluar situaciones de riesgo incorporados al proyecto y a las funciones contenidas en el prototipo. Se procede a implementar el prototipo o modelo de solución ya establecido. Se debe además verificar las pruebas para evaluar la calidad del software, y certificar íntegramente los propósitos definidos que se llevó acuerdo con el equipo médico. Una de las etapas finales radica en la puesta en marcha del prototipo, donde se realiza un plan de monitoreo para medir óptimamente su funcionamiento y almacenamiento de los datos. Este plan consiste en observar la funcionalidad del software de forma casual en la estación de trabajo del médico donde es instalado el programa, y en presencia de pacientes que consultan por esta patología, denominada Depresión. Y por último, se realizará un continuo mantenimiento del modelo de software médico. El objetivo del prototipo desarrollado sobre IA basados en sistemas de conocimientos, es el de validar los resultados obtenidos del sistema con los diagnósticos emitidos por el experto en el área. Por lo tanto, se debe adquirir la validación y certificación de la precisión de los resultados obtenidos con el prototipo desarrollado. Para ello, se aplica asistencia del profesional médico, quienes son los encargados de realizar las pruebas necesarias para evaluar el razonamiento obtenido de estas reglas, que son interpretadas y extraídas de la base de conocimiento del sistema. Logrando la validez del prototipo, el cuerpo médico acredita mediante un certificado autorizado por 78 el Policlínico de Psiquiatría del Hospital Base de Puerto Montt, la aprobación del sistema, estableciendo que evidentemente el apoyo informático asiste al profesional médico. (Ver Anexo V) 6.2.2 Funcionalidades primordiales del prototipo basados en SBC Para generar el prototipo de solución y lograr los objetivos planteados se integraron los conceptos y las tecnologías. Las funcionalidades que implementa el prototipo son: Análisis y diagnóstico médico de los datos ingresados de un paciente que presenta un cuadro depresivo. Extracción de datos de la base de datos. Visualización del diagnóstico médico de un paciente, sólo sí, es registrado en el prototipo del sistema. Almacenamiento de los antecedentes, diagnósticos, tratamientos y observaciones, sólo para pacientes del Policlínico de Psiquiatría. Emisión e impresión de la ficha clínica del paciente, lo cual constituye antecedentes, resultados de exámenes, tratamientos, observaciones referidas al diagnóstico. Además se podrán realizar consultar datos referentes al paciente, al profesional médico, etc. 6.2.3 Descripción de la funcionalidad del prototipo A continuación se define la funcionalidad del prototipo de solución, mediante un ejemplo, que visualiza como opera el software al ser accedido por el profesional médico, a través de los campos de interfaces usuario y contraseña, para hacer uso del sistema. Se mostrarán algunas páginas principales en los anexos, ya que se visualizan otras importantes. (Ver Anexo III) 79 Cabe destacar, que la información generada no corresponde a datos reales de un paciente. Por ende, para el desarrollo de este prototipo se utilizaron una cantidad de 20 fichas clínicas ficticias, siendo supervisadas por el médico especialista de los pacientes con patologías depresivas. Las funcionalidades se muestran de manera secuencial de acuerdo a los datos presentados en las pantallas gráficas desplegadas. 6.2.3.1 Acceso al Sistema Prototipo Primeramente, se visualiza en la figura la página principal de bienvenida del software médico. Figura 6.2.3.1-1: Página de bienvenida al ingresar al Sistema Médico. Al presionar botón Aceptar, automáticamente hace referencia a la página de ct_acceso1. El usuario ingresa al software médico, mediante la página de identificación, donde se válida al usuario para que tenga los privilegios en el uso del sistema. 80 A continuación se muestra en la siguiente figura, la página de ct_acceso1: Figura 6.2.3.1-2: Página de validación de usuario. Luego de introducir los datos solicitados, validarusuario.jsp abre una consulta a la base de datos, y si estos son incorrectos, automáticamente al presionar Aceptar, se desplegará esta página de acceso incorrecto. Figura 6.2.3.1-3: Página de validación de usuario incorrecto. Presionando Aceptar, retorna a la página de ct_acceso1, ingresando nuevamente los datos necesarios. Posteriormente, si los datos solicitados son los correctos, hará referencia a la página principal, donde el usuario, profesional médico, puede hacer uso 81 de la aplicación. A continuación se muestra la página principal: Figura 6.2.3.1-4: Página principal del Software Médico. Luego, en la selección de la barra de menú de la página principal se presentan las siguientes opciones. Figura 6.2.3.1-5: Interfaz del Software Médico y sus opciones. En la barra de menú, al consultar por el paciente, existe la opción de Ingresar Paciente, con esta opción se verifica si el paciente está registrado en el sistema, sólo con ingresar el RUT. 82 Se puede observar en la siguiente figura 6.2.3.1-6. Figura 6.2.3.1-6: Página de validación de paciente. De lo contrario, arrojará un mensaje de error, como se ve en la figura 6.2.3.1-7. Figura 6.2.3.1-7: Página de validación de paciente incorrecto. Al ingresar el RUT, y validándolo como paciente existente, se visualiza la Ficha Clínica que se da a continuación en la siguiente página: 83 84 Figura 6.2.3.1-8.- Página de Ficha Clínica del paciente. 85 En la barra de menú de la página principal se presentan las siguientes opciones. Figura 6.2.3.1-9: Interfaz del Software Médico visualizando menú Diagnósticos. La opción Ingresar Diagnósticos, consiste en el ingreso de aquellos, y posteriormente incorporar los tratamientos adecuados con sus respectivas observaciones. Se visualiza a continuación en la siguiente figura 6.2.3.1-10. 86 Figura 6.2.3.1-10: Página de ingreso de Diagnósticos, Tratamientos y Observaciones. Al presionar Aceptar, la información ingresada es enviada a la base de datos, quedando almacenada, para luego realizar consultas con respecto al diagnóstico. Se visualiza en la segunda opción de la barra de menú de diagnósticos, Consultar Diagnósticos. Dentro de todas las interfaces fundamentales que presenta el software médico, es necesario visualizar la página, en el que se solicita obligatoriamente rendir el Test de Hamilton para detección de depresión. Aquí no se define que tipo de episodio depresivo presenta el paciente. Sólo verifica la escala de puntuación como instrumento para validar 87 si el paciente es depresivo. En la figura se observa la ficha clínica del paciente: Figura 6.2.3.1-11: Página de rendición, Test de Hamilton. 88 También dentro de la Ficha Clínica, se observa la siguiente opción, Realizar Diagnósticos. Aquí si se detecta que tipo de episodio depresivo presenta el paciente. A continuación se visualiza la página. Ver figura 6.2.3.1-12. Figura 6.2.3.1-12: Página de detección de un Episodio Depresivo. 89 Con respecto, a las demás interfaces del sistema médico, se visualizarán en los Anexos, como se señaló anteriormente, ya que son bastantes, pero sólo se presentarán algunas, las más importantes. Por ejemplo, petición de exámenes, necesarios para ir descartando posibles enfermedades, tratamiento y seguimiento del paciente. Se darán a conocer algunas selecciones de consultas, entre ellas: Consulta de información por pacientes, visualiza información que ya ha sido registrada en la base de datos. Consulta del profesional médico, mostrando información del especialista del Policlínico de Psiquiatría. Consultas de diagnósticos referidos al Policlínico de Psiquiatría Consulta de exámenes por paciente, vale decir, que exámenes se ha realizado el paciente. 90 CAPÍTULO VII CONCLUSIONES 7.1 Conclusiones En este capítulo se abordan las conclusiones y las posibles mejoras a efectuar sobre el prototipo desarrollado en esta Tesis de Grado. A continuación se explica como se llevó a cabo, cada uno de estos objetivos específicos para lograr el objetivo general. Diseñar e implementar un prototipo de software, fundamentado en un sistema basado en conocimiento, para apoyo al diagnóstico médico en pacientes que presentan depresión, establecido en el Policlínico de Psiquiatría del Hospital Base de Puerto Montt. Los aportes serían los siguientes: 1.- Conforme a los requerimientos establecidos en el primer objetivo. Investigar el estado actual de operación, referente al proceso de diagnóstico en el Policlínico de Psiquiatría, Hospital Base de Puerto Montt, e indagar sobre software’s exitentes. Se concluye haber realizado la investigación correspondiente, a partir de una exploración general de las personas involucradas en el medio; mediante entrevistas, reuniones y literaturas. Se logra recopilar la información fundamental; y con estos aspectos se genera un documento, para así tener un mayor conocimiento del funcionamiento de gestión en el proceso de diagnóstico en el Policlínico de Psiquiatría. 2.- Referente al segundo objetivo, se determina haber creado una base de datos, o base de conocimientos, precisa para el diagnóstico médico en atención 91 secundaria. Para crear esta base de datos, se utilizó el gestor base de datos MySQL. Se debió analizar y diseñar el flujo real de operación en el servicio de salud pública. En consecuencia, se hizo un seguimiento al profesional de salud mental, para tener las nociones de como se realiza un proceso de diagnóstico, y así poder establecer las relaciones entre las tablas que conforman la base de datos. Esta base de datos permite predecir de manera confiable y consistente un diagnóstico médico, incluso en situaciones confusas para el especialista. Cabe destacar que la conexión a la base de datos debe ser absolutamente segura y amigable al momento de ingresar o realizar consultas. Además, se generó un documento detallando cada una de las tablas correspondientes, el cual está incluido en esta Tesis. 3.- Con respecto al tercer objetivo. Construir reglas a partir de una base de conocimiento para realizar las inferencias de acuerdo con los parámetros definidos en el sistema, diagnosticando la patología bajo la relación síntoma – enfermedad. Se concluye haber logrado el objetivo. Para ello se tuvo que definir 27 síntomas, cada síntoma tiene cierto grado de intensidad (definida como: alta, moderada,baja) y de duración (especificados en días), lo que genera una serie de 81 parámetros. A partir de estos parámetros definidos en un sistema basados en conocimientos, se pudo construir una serie de reglas, lo cual JESS como motor de inferencia, interpreta estas reglas extraídas de la base de conocimientos, para otorgar la conclusión más acertada con respecto a la enfermedad que posee el paciente, es decir que episodio depresivo se presenta de acuerdo a sus intensidades y 92 duraciones que poseen los síntomas, consideraciones fundamentales a la hora de diagnosticar un cuadro depresivo. 4.-Referente al cuarto objetivo. Diseñar e implementar un prototipo de software médico que asista al profesional de atención secundaria. Se concluye haber logrado el propósito del objetivo. Se trabajó con páginas Web, desarrolladas en Dreamweaver MX, usando páginas dinámicas Java Server Pages (JSP), desarrollado para ser usado conjuntamente con el servidor Apache Tomcat 5.5.20. más el gestor de base de datos MySQL, estas herramientas son una solución para hacer sitios Web dinámicos de alta calidad, como lo es este Software Médico. Referente al entorno de trabajo se usa el programa Eclipse, donde el editor utilizado es Object Web Lomboz, IDE para aplicaciones desarrolladas sobre tecnologías basadas en la plataforma J2EE. Se aplicó como motor de inferencia la herramienta de desarrollo JESS, asociado a reglas. El objetivo del motor de inferencia es el de obtener conclusiones aplicando la lógica a estas reglas. Por lo tanto, al utilizar la integración de estas herramientas se concluye haber optimizado la atención secundaria a pacientes en el Policlínico de Psiquiatría, debido a la rapidez del sistema en términos de tiempo de respuesta, específicamente, al ingresar una ficha clínica, y realizar todo lo que se amerita. En consecuencia, este software es de gran utilidad en lugares donde se requiere que la atención a pacientes sea de manera confiable, rápida y segura. 5.- Y por último, con respecto al quinto objetivo. Validar los resultados obtenidos con el prototipo, contrastándolos con los 93 diagnósticos emitidos por expertos en el área. El profesional médico, tuvo la misión de validar y evaluar los resultados que se obtuvieron del sistema, realizando una cierta cantidad de pruebas para su aceptación. Se reflejó exitosamente las funcionalidades del sistema. Por lo tanto, mediante un documento de acreditación certificado por el profesional de salud mental del policlínico de Psiquiatría del Hospital Base de Puerto Montt, se aprueba de manera satisfactoria, el haber logrado el quinto objetivo propuesto en este proyecto de tesis. (Ver Anexo.V) Por lo tanto, lo anterior confirma la factibilidad de implementar una herramienta como esta a gran escala, para el apoyo al diagnóstico médico en pacientes que presentan un cuadro depresivo. Señalando además, que el tiempo de respuesta es un gran factor por la gran cantidad de demanda de consultas de pacientes que padecen la enfermedad. 7.2 Mejoras Se definen cinco mejoras a realizar en un futuro próximo, estas son: 1.- El método utilizado para el desarrollo de esta interfaz fue pensado en una topología tipo estrella. Debido a los escasos recursos de hardware y software con que cuenta el Hospital Base de Puerto Montt, no se pudo realizar lo planificado, y se tuvo que trabajar con estaciones de trabajo, lo cual genera restricciones de interactividad con otras unidades de estaciones de trabajo. Se debe considerar la posibilidad de implementar el sistema en un tipo computacional de red topología tipo estrella. 2.- El Servicio de Salud del Hospital Base de Puerto Montt requiere poseer conocimiento y experiencia de tecnologías informáticas más actuales. 94 Aplicando un ambiente de trabajo bien organizado, se podría lograr la utilización de tecnologías basadas en la plataforma J2EE, usando un Entorno Integrado de Desarrollo (IDE). Este aspecto puede ser analizado con la finalidad de poder suplir de mejor manera los sistemas vigentes en el Policlínico de Psiquiatría, y por otra parte, para poder expandir el prototipo a las restantes unidades del Hospital Base de Puerto Montt. 3.- Que el sistema de software médico realizado en el proyecto de tesis otorgue la completa y eficiente información que involucra tener un Servicio de Salud. Para esto, se sugiere la integración o mejora de los sistemas administrativos, ya que este prototipo tiene la capacidad de ser un software flexible. 4.- Para lograr con mayor exactitud la confiabilidad de un diagnóstico médico, se podrían utilizar métodos tales como: test de Kappa, Alfa de Crombach, que consisten en validar matematicamnte los resultados generados por el sistema. Entregando el grado o porcentaje de exactitud, y así compararlo con el criterio o pensamiento clínico del profesional. 5.- Como propuesta para mejora, se debe considerar que los instrumentos de medición para detección de la depresión (test Hamilton), no sólo se realice en Consultorios, sino además, volver a realizarlo en el Policlínico de Psiquiatría, para constrastar el resultado del test que se emitió en el Consultorio. El test puede fluctuar de gran manera, y no siempre se puede quedar con una sola evidencia, es necesario realizarlo nuevamente para verificar si hay aumento o disminución de síntomas depresivos. Trabajo Futuro Capacitar al profesional médico para manejar estos tipos de sistemas informáticos, para luego traspasar sus conocimientos tanto teóricos como empíricos a los alumnos practicantes de pre y post grado, para su uso. 95 CAPÍTULO VIII BIBLIOGRAFIA Referencias [RUS97] Rusty Harold, Elliotte (1997). Los Secretos de Java. Impreso en España. Ediciones Anaya Multimedia. ISBN 84-415-0342-7. [AND96] Andreu Rafael, Ricart Joan E., Valor Josep. Segunda Edición (1996). Estrategias y Sistemas de Información. Impreso en España. McGraw – Hill / Interamericana de España S.A. ISBN 84-481-0508-7. [KUL80] Kulikowski CA (1980). Artificial intelligence methods and systems for medical consultation. En: IEEE Transactions on Pattern Analysis and Machine lntelligence; 1980: 464-476. [MIL82] Miller RA (1982).INTERNIST-1, an experimental computer based diagnostic consultant for general internal medicine. N Engl J Med 1982; 307: 468. [HAD92] Hadzikadic M (1992). Automated design of diagnostic systems. Artificial Intelligence in Medicine 1992; 4: 329-342. [BAB92] Babic A (1992). Extraction of diagnostic rules using recursive partirioning systems. Artificial lntelligence in Medicine 1992, 4: 373387. [SAN88] Sánchez, J. (1988), Sistemas expertos, una metodología de programación, Ra-Ma, Madrid. [TUR92] Turban, E. (1992), Expert systems an applied Artificial Intelligence. Edit. Macmillan Publishing Co. 1992. 96 [SHO76] Shortlife EH (1976), Computer-based medical consultations: MYCIN. New York: Elsevier, 1976. [BAR88] Barros Oscar. (1988). Enfoques de Modelamiento y Especificación de Requerimientos en Sistemas de Información. Impreso en Chile. Depto. de Ingeniería Industrial – Universidad de Chile. Serie Nº 88/06/C. [GIA01] Giarritano, J. (2001), Sistemas expertos, principios y programación, Internacional Thomson. [ARO98] Aroca, F. (1998), “Diseño de un sistema experto de diagnóstico con incertidumbre SEDEIC”, Universidad de Alcalá. [HAR86] Hartnell, T. (1986), Sistemas expertos. Introducción al diseño y aplicaciones, Anaya. [SAN88] Sánchez, J. (1988), Sistemas expertos, una metodología de programación, Ra-Ma, Madrid. [BEL90] Belmonte MA (1990). Un sistema experto para la ayuda en el diagnóstico de colagenosis y artropatías inflamatorias. [Tesis Doctoral U.A.B.], 1990. [HUM90] Humphrey SM (1990. MedindEx system: medical indexing expert system in expert system in libraries. Norwood, NJ: Ablex, 1990; 192-221. [KUL80] Kulikowski CA (1980). Artificial intelligence methods and systems for medical consultation. En: IEEE Transactions on Pattern Analysis and Machine lntelligence; 1980: 464-476. [CHA86] B. Chandrasekaran (1986). Generic tasks in knowledge-based reasoning: High-level building blocks for system desing. IEEE Expert, 1(3):23-30, 1986. 97 [PAL99] José Palma Méndez. (1999). Ingeniero del Conocimiento para Sistemas en Tiempo Real Basados en Conocimiento. PhD thesis, Facultad de Informática, Universidad de Murcia, 1999. [BUC84] Buchanan BG and Shortliffe EH (1984). Rule-Based Expert Systems: The MYCIN Exeriments of the Stanford Heuristic Progamming. Project Addison-Wesley. Reading. Massachusetts. [MOR01] Moreno Rodríguez (2001). El arte y la ciencia del diagnóstico médico. La Habana. Edit. Científico-Técnica; 2001:47-166. [FIE87] Fiesch, M. (1987). Inteligencia Artificial en Medicina. Sistemas Expertos. Barcelona, Masson, 1987. [VIV97] E. Vivancos, L. Hernandez, and V. Botti (1997). Construcción y análisis temporal de sistemas basados en reglas para entornos de tiempo real. In Proc. of 7th Conference of the Spanish Association for Artificial Intelligence, pages 675-684, Malaga (Spain), Nov. 1997. [WAN93] C.-K. Wang and A. K. Mok (1993). Timing analysis of MRL: A real-time rule-based system. Real-Time Systems, 5:89-128, 1993. [KUN78] Kunz, J.C., Fallat, R.J., McClung, D.H., Osborn, J.J., Votteri, B.A, Nii, H.P., Aikins, J.S., Fagan, L.M. & Fcigenbaum, E.A (1978). “A Physiological Rule-Based System for Intcrprcting Pulmonary hnction Test Results.” Tech Report HPP- 78-19, Computer Science Dept., Stanford Univ. (1978). [CAS98] Enrique Castillo, José Manuel Gutiérrez y Ali S. Hadi. (1998) Sistemas Expertos y Modelos de Redes Probabilísticas. Editorial Academia de Ingeniería (España). Madrid, España. 1998. ISBN 84-600-9395-6. 98 [DUA00] Duane K. Fields, Mark A. Kolb (2000).Web Development with Java Server Pages. Manning 2000. [BRE01] Brena R (2001). La inteligencia artificial: enfoques, herramientas y aplicaciones. Soluciones Avanzadas Ao2-13:15.2001 [EVA95] Evans CD (1995). A case-based assistant for diagnosis and analysis of dysmorphic syndrome. Med Inf Lond 1995; 20(2) 121-31. [GAL06] Galvez Lio, Daniel (2006). Sistemas Basados en el Conocimiento. UCLV 2006:4-37. [URL 1] E. F. Hill. Jess : The Java Expert System Shell, Sandia National Laboratories [Online] http://herzberg.ca.sandia.gov/jess [URL 2] Comparativa CLIPS vs. JESS. http://www.comp.lancs.ac.uk/~kristof/research/notes/clipsvsjess/ [URL 3] Jess-in-action. http://www.manning.com/friedman-hill/ [URL 4] Tutorial WARS ("Web-Archives") http://www.osmosislatina.com/java/wars.htm [URL 5] Set of documents for Lomboz. http://lomboz.objectweb.org/documentation.html [URL 6] Jess 7.0p1 Manual, Adobe PDF format. http://www.jessrules.com 99 [URL 7] Documentation JavaBeans http://java.sun.com/products/javabeans/docs/index.html [URL 8] MySQL Connector/JDBC http://mysql.vision.cl/usingmysql/java/index.html [URL 9] Documentation Java Servlet http://tomcat.apache.org [URL 10] Ingeniería de los Sistemas Basados en el Conocimiento. http://iaaa.cps.unizar.es/docencia/ISBC.html [URL 11] Completo Material sobre JAVA. http://www.apogeonline.com/libri/00895/allegati/risorse [URL 12] Aplicaciones de la inteligencia artificial en la medicina. http://www.monografias.com/trabajos16/inteligencia-artificialhistoria/inteligencia-artificial-historia.shtml [URL 13] El entorno de desarrollo Eclipse. http://www.lsi.us.es/docencia/get.php?id=1164 [URL 14] Servlets http://www.lsi.us.es/docencia/get.php?id=2041 [URL 15] Eclipse y Java http://www.uv.es/~jgutierr/MySQL_Java/TutorialEclipse.pdf [URL 16] Sistemas Expertos e Inteligencia Artificial http://pisuerga.inf.ubu.es/~cgosorio/SExInArt/trabajos/CLIPS.pdf 100 [URL 17] Eclipse Tutorial http://eclipsetutorial.forge.os4os.org/cjava.htm [URL 18] CIE 10- Décima Revisión de la Clasificación de las enfermedades. Trastornos Mentales y del Comportamiento http://personal.telefonica.terra.es/web/psico/cie_10/cie10_F32.html [URL 19] F32 – Episodios Depresivos http://www.psicoactiva.com/cie10/cie10_20.htm [URL 20] Trastornos Mentales – Depresión y Manía. http://www.msd.es/publicaciones/mmerck_hogar/seccion_07/ seccion_07_084.html 101 CAPITULO IX ANEXOS 9.1 Anexo I: Plataforma Hardware/Software del Servicio de Salud y Hospital Base de Puerto Montt. 9.1.1 Características de la plataforma hardware y software. El Hospital Base de Puerto Montt forma parte de una red computacional con topología estrella, la cual se visualiza en el siguiente punto; y referente al hardware y software, los recursos tecnológicos informáticos disponibles son los siguientes: LAN del Hospital Base Puerto Montt. Conexión de Redes LAN por medio de Fibra Óptica. Base de Datos Relacional SYBASE 11. Servidores del Hospital Base de Puerto Montt. Sistemas Operativos: UNIX, Windows XP, 2000, Windows 98, Windows 95. 1 Router, 2 Switch, 13 Hubs. 131 PCs en todo el establecimiento hospitalario. Todas las estaciones clientes son equipos Pentium con S.O. Windows XP 2000, 98 y 95. 102 9.1.2 Topología de Red, Estrella. En la figura 9.1.2-1, se visualiza la plataforma hardware del Servicio de Salud y Hospital Base de Puerto Montt. Se define una topología de red de tipo estrella. Servicio LAN INTERNET ISDN SERVICIO Proxi SALUD Fibra Optica Server 1 Hub Zona Hub Administrativa Hub ZAB Hub Server 2 Hub Trauma- Puntos tología UTP UTP UTP UTP Estación de trabajos grupo de usuarios usanso aplicaiones de Abastecimiento Switch UTP Puntos Fibra Terminal Puntos Pc y Fibra Optica Optica Hub UTP Puntos Fibra Optica Estación de trabajos grupo de usuarios usanso aplicaiones Area Comercialización, Gestión,Informática Varios Usuario Con Servicios de Internet Terminal Puntos Pc y Fibra Optica UTP Fibra Optica Fibra Fibra Estación de trabajos grupo de usuarios usanso aplicaiones de Abastecimiento Optica Optica Hub Hub Puntos Hub Hub Terminal Puntos Pc y Fibra Optica Puntos UTP Terminal Puntos Pc y Fibra Optica Estación de trabajos grupo de usuarios usanso aplicaiones de Abastecimiento, Mantención Zona Rayos Laboratorio Hub Rack Transaiver Zona Abastecimiento Zona Terminal Puntos Pc y Fibra Optica Router Hub UTP Hub Puntos Zona Hospitalizados Terminal Puntos Pc y Fibra Optica UTP UTP Estación de trabajos grupo de usuarios usanso aplicaiones de Atención Cerrada Usuario Con Servicios de Internet Estación de trabajos grupo Usuario Con de usuarios usanso Servicios de aplicaiones de Pabellon, Internet Urgencia Figura 9.1.2-1: Topología de Red Computacional, Estrella. 103 Zona Pabellones Urgencia 9.2 Anexo II. Herramientas utilizadas para el desarrollo del prototipo. 9.2.1 Eclipse - Entorno Integrado de Desarrollo (IDE). Referente al entorno de trabajo se usa el programa Eclipse. Obteniendo así, una mayor organización del directorio de trabajo, en cuanto, a la claridad y orden en la definición de las carpetas y archivos. Al desarrollar el prototipo propuesto, se optó por trabajar con dos espacios de trabajo por separado. Finalmente, el desarrollo quedó sólo en un espacio de trabajo, definido como Proyecto Tesis. Para ello, se debió incorporar las librerías necesarias de la creación de reglas en JESS, a la carpeta de las librerías del proyecto Web de la Tesis. 9.2.1.1 Entorno de trabajo Eclipse, aplicación de reglas en JESS. En la siguiente figura 9.2.1.1-1, se visualiza el directorio de trabajo, que define el contenido de las carpetas con sus respectivos archivos. 104 Figura 9.2.1.1-1: Directorio de trabajo en aplicación JESS. 9.2.1.1.1 Procedimientos en la aplicación de reglas en JESS. 1.- Dentro de la carpeta rules_test/cl.aaguilar.rules.defs, se encuentra RulesEnfermedades.java, la cual consiste en definir las funciones y las reglas, para ser aplicadas en la ejecución de los test. 2.- Una vez definidas las reglas de las enfermedades, se procesan los síntomas con sus respectivas intensidades y duraciones, utilizando 81 parámetros. Esto se encuentra dentro de la carpeta rules_test/cl.aaguilar.rules.process, con el nombre ProcessEnfermedades.java. Los códigos se detallan en el Anexo IV. 105 3.- Teniendo estas consideraciones, se procede ejecutar en el programa los test, para validar y evaluar la creación de reglas aplicadas, generando el resultado esperado, en este caso, el tipo de Episodio Depresivo que presenta el paciente. (Ver figura 9.2.1.1.1-1) Figura 9.2.1.1.1-1: Interfaz de ejecución de test. 4.- Para acreditar lo señalado en el punto Nº 3. Se validará y evaluará a un paciente registrado de manera ficticia, en el policlínico de Psiquiatría del Hospital Base de Puerto Montt. Datos empleados: - Profesional médico: RUT: 7.234.876-5 - Paciente: RUT: 14243555-2. A continuación, ver tabla 9.2.1.1.1-1. Tabla 9.2.1.1.1-1: RUT paciente, para ser evaluado. 106 Antes de proseguir con la evaluación. Se dará a conocer la tabla de los 27 síntomas, extraídos de la definición del código F32 de la CIE-10, descritas en planilla Excel. (Ver tabla 9.2.1.1.1-2.) Tabla 9.2.1.1.1-2: Tabla de Síntomas. 107 A partir de la tabla anterior, se realiza la evaluación del diagnóstico, recopilando toda la información concerniente a los síntomas, intensidades y duraciones del paciente. (Ver tabla 9.2.1.1.1-3) Tabla 9.2.1.1.1-3: Síntomas, intensidades y duraciones del paciente. A continuación se observa en la figura 9.2.1.1.1-2, la opción Argumentos, en donde son ingresados los síntomas del paciente con sus respectivas intensidades y duraciones, al presionar botón Run, se ejecutan las reglas. Figura 9.2.1.1.1-2: Interfaz, ingreso de los argumentos. 108 5.- Lo cual generó la activación de una regla, al ingresar los síntomas, intensidades y duraciones del paciente. Es decir, emitió la enfermedad del paciente como Episodio Depresivo Grave con Síntomas Psicóticos (Cód. F32.2, de la CIE-10). A continuación, se observa en la figura 9.2.1.1.1-3, el resultado esperado. Figura 9.2.1.1.1-3: Emisión de la regla ejecutada. 9.2.1.2 Entorno de trabajo Eclipse, proyecto Web. 9.2.1.2.1 Object Web Lomboz – Editor basado en la plataforma J2EE. El editor utilizado es ObjectWeb Lomboz 3.1.2, IDE para aplicaciones desarrolladas establecidas sobre tecnologías basadas en la plataforma J2EE. Con este editor se organiza los recursos del usuario de forma clara en uno o más proyectos, conteniendo archivos y carpetas, como se ve en la figura 9.2.1.2.1-1. 109 110 Figura 9.2.1.2.1-1: Detalle de archivo y carpetas del proyecto tesis. En el proyecto tesis, la carpeta WebContent almacena las páginas Web, páginas dinámicas Java Server Pages, desarrolladas en Macromedia Dreamweaver MX. En la figura 9.2.1.2.1-2, se observa como se creó mediante el programa Dreamweaver MX las páginas dinámicas JSP. Figura 9.2.1.2.1-2: Creación de JSP, en Dreamweaver MX. 111 A través del frontal ObjectWeb Lomboz, se visualizan las interfaces JSP, con sólo presionar el System Editor, como se observa en la figura 9.2.1.2.1-3. Figura 9.2.1.2.1-3: Acceso a interfaces JSP, mediante al System Editor. 9.2.2 Servidor Apache Tomcat- Servlet/ JSP Para la implementación de páginas JSP, se utiliza el servidor Apache Tomcat Versión 5.5.20. 9.2.3 Base de Datos desarrollada en MySQL A nivel técnico, incorpora conexión a una base de datos desarrollada en MySQL, enlazada a un servidor de base de datos de MySQL, utilizando como editor SQLyog, libre MySQL GUI versión 5.15. 112 En la siguiente figura 9.2.3-1, se define la base de datos denominada Clínica, con sus respectivas tablas Figura 9.2.3-1: Tablas definidas en la base de datos Clínica. 9.2.4 Microsoft Office Visio 2003, Diagrama de modelo de base de datos. En la figura 9.2.4-1, se visualiza como se accede a la plantilla de diagrama de modelo de base de datos Figura 9.2.4-1: Interfaz, de acceso al diagrama de modelo de base de datos 113 A continuación, en la figura 9.2.4-2, se observa las tablas relacionadas de la base de datos Clínica. sintomas_evaluacion PK,FK1 SINT_EVALUACION_ID PK SINT_ID_PREGUNTA SINT_ESTADO SINT_INTENSIDAD SINT_DURACION evaluacion PK EVALUACION_ID FK1 EVALUACION_PAC_RUT FK2 EVALUACION_PMED_RUT examen PK FK1 EXA_PAC_RUT EXA_PMED_RUT EXA_NOMBRE EXA_TIPO EXA_PROCEDENCIA EXA_FECHA _SOLICITUD EXA_NOMMED EXA_DESCRIPCION ficha PK FIC_COD PK,FK1,U1 FIC_PACIENTE FIC_APERTURA FIC_MOTIVO FIC_HABITOS FIC_FAMILIARES FIC_DEPRESION FIC_ENFNEUROLOGICAS FIC_HEPATITIS FIC_HIPERARTERIAL FIC_ALERGIA FIC_ASMABRONQUIAL FIC_ULCERA FIC_HEMOPATIAS FIC_PSICOPATIA FIC_CORONARIOPATIA FIC_DIABETES FIC_FIEBRESPROLONGADAS FIC_UROPATIAS FIC_ENDOCRINOPATIAS FIC_CAUSAPORENFERMEDAD FIC_MOTIVOSOCIAL FIC_MOTIVOLABORAL FIC_PERDIDAFAMILIAR FIC_BAJAAUTOESTIMA FIC_OTROS turnos PK ID_TURNO PK,FK1 TURNO_PMED_RUT FK2 paciente DETA_TRATAM_ID DETA_TRATAM_NOMBRE_FARMACO DETA_TRATAM_COD DETA_TRATAM_DOSIS DETA_TRATAM_COMPRIMIDOS_DIARIO DETA_TRATAM_FECHA_INICIO DETA_TRATAM_FECHA_TERMINO FK1 DETA_TRATAM_TRATAM_ID PAC_DV PAC_NOMBRES PAC_APELLIDOS PAC_NACIMIENTO PAC_EDAD PAC_SEXO PAC_CIVIL PAC_FONOS PAC_OCUPACION PAC_PREVISION PAC_DIRECCION PAC_COMUNA PAC_PROVINCIA PAC_REGION pmedico PK PMED_RUT diagnosticos PK DIAGNOS_ID DIAGNOS_NOMBRE DIAGNOS_FECHA_INICIO DIAGNOS_COD DIAGNOS_DESCRIPCION FK1 DIAGNOS_PAC_RUT FK2 DIAGNOS_PMED_RUT DIAGNOS_PATOLOGIA seguimientopac PK SEGPAC_DIAGNOS_ID tratamientos SEGPAC_CODPMED SEGPAC_FECHACONTROL SEGPAC_ASISTENCIA SEGPAC_EVALGLOBAL SEGPAC_PROXCITA TURNO_PAC_RUT TURNO_FECHACONTROL TURNO_DIASATENCION TURNO_HRSATENCION TURNO_DURACION TURNO_FECHACITACION PK PAC_RUT detalle_tratamiento PK EXA_ID PK testhamilton TRATAM_ID PK,FK1 TEST_PAC_RUT FK1 TRATAM_DIAGNOS_ID TRATAM_DESCRIPCION TRATAM_OBSERVACIONES TEST_PMED_RUT TEST_PREG_UNO TEST_PREG_DOS TEST_PREG_TRES TEST_PREG_CUATRO TEST_PREG_CINCO TEST_PREG_SEIS TEST_PREG_SIETE TEST_PREG_OCHO TEST_PREG_NUEVE TEST_PREG_DIEZ TEST_PREG_ONCE TEST_PREG_DOCE TEST_PREG_TRECE TEST_PREG_CATORCE TEST_PREG_QUINCE TEST_PREG_DIECISEIS TEST_PREG_DIECISIETE TEST_PREG_DIECIOCHO TEST_PREG_DIECINUEVE TEST_PREG_VEINTE TEST_PREG_VEINTIUNO TEST_CANT_SIEMPRE TEST_CANT_NO TEST_CANT_CASISIEMPRE TEST_CANT_ALGUNASVECES TEST_ESTADO cie_10 PK ENF_ID ENF_NOMBRE ENF_DESCRIPCION Figura 9.2.4-2: Diagrama del modelo de base de datos. 114 PMED_ID PMED_NOMBRE PMED_PATERNO PMED_MATERNO PMED_PASS PMED_DV PMED_TELEFONO PMED_DPTO PMED_ESPECIALIDAD 9.3 Anexo III: Interfaces gráficas del sistema médico. 9.3.1 Exámenes del paciente 9.3.1.1 Solicitud de exámenes. En la figura 9.3.1.1-1 se ve en el menú de la barra, la opción Solicitud Exámenes. Figura 9.3.1.1-1: Interfaz, opción Solicitud Exámenes. Al hacer link en Solicitud Exámenes, hace referencia inmediatamente a la página rg_texamenes.jsp. Se ingresan los datos correspondientes por el profesional, y se envía a la B.D. (Ver figura 9.3.1.1-2) Figura 9.3.1.1-2: Página de ingreso de exámenes solicitados. 115 9.3.1.2 Emisión de exámenes. Después de haber ingresado la información y ser almacenados en la B.D., se debe verificar la emisión de los exámenes solicitados por el médico. En la barra de menú, existe la opción Emisión Exámenes. Al hacer link en esta opción, se visualiza la página IngresarPacEmiExam.jsp, donde se valida el RUT del paciente (Ver figura 9.3.1.2-1) Figura 9.3.1.2-1: Página de ingreso, RUT paciente. Una vez ingresado el RUT, se abrirá la página emisionexam.jsp, donde se registran todos los exámenes del paciente, con sus respectivos códigos. (Ver figura 9.3.1.2-2) Figura 9.3.1.2-2: Página de emisión de exámenes. 116 Es necesario que el profesional médico ingrese la descripción de los exámenes emitidos y los envíe a la base de datos, quedando totalmente registrados para realizar consecutivamente la consulta. 9.3.1.3 Consulta de exámenes. En el caso, de consultar por los exámenes del paciente, se debe ir a la opción Consulta Exámenes, de la barra de menú, y al hacer link en esta opción, se desplegará la página IngresarPacConsultaExam.jsp, visualizándose la misma interfaz anterior, donde se valida el RUT del paciente. Para luego, verificar el detalle de todos los exámenes realizados del paciente. (Ver figura 9.3.1.3-1) Figura 9.3.1.3-1: Página de consulta en la emisión de exámenes. 117 9.3.2 Diagnósticos del paciente 9.3.2.1 Consulta de diagnósticos Una vez que se tiene toda la información referente a los exámenes del paciente, es necesario que el profesional médico ingrese los diagnósticos correspondientes. En la barra de menú, está la opción Ingresar Diagnóstico, al hacer link se generará esta página rg_tdiagxpatologia.jsp, (se observó anteriormente, en el capítulo VI de la tesis) donde se debe completar los campos necesarios tales como: descripción del diagnóstico, tratamientos, observaciones, etc., y ser enviados a la B.D. Al consultar por esta información, esta la opción Consultar Diagnóstico. Al hacer link desplegará la página IngresarPacConsultaDiagnos.jsp, donde nuevamente se visualiza el RUT del paciente. Una vez ingresado el RUT correcto, arrojará la página que se ve en la siguiente figura 9.3.2.1-1 Figura 9.3.2.1-1: Página de resultado del diagnóstico del paciente. Para tener mayores antecedentes, se debe presionar en Detalle botón Ver, y generará toda la información de diagnósticos, tratamientos y observaciones del paciente. Esta información es la que fue ingresada al diagnóstico. 118 9.3.3 Seguimientos del paciente 9.3.3.1 Consulta del seguimiento del paciente Esta opción es Consultar Seguimiento, y se refiere a tener un mayor control sobre el paciente, registrando su asistencia a las sesiones requeridas por el profesional de salud mental, evaluando la evolución de su mejoramiento o empeoramiento, en fin. A continuación se observa en la figura 9.3.3.1-1 esta página. Figura 9.3.3.1-1: Página del seguimiento de un paciente 119 9.3.4 Información del profesional médico 9.3.4.1 Consulta del Profesional médico Existen dos opciones para consultar por el profesional médico. En la barra de menú, se tiene la opción Búsqueda Prof.Médico. Al hacer link en esta opción se generará la página Codmedxespec.jsp. (Ver figura 9.3.4.1-1) Figura 9.3.4.1-1: Página de búsqueda del profesional médico. Sólo se debe ingresar el código del profesional para acceder a la página que contiene información más detallada del profesional médico. (Ver figura 9.3.4.1-3) 120 La otra forma de consultar por la información es, hacer link en la opción Consulta Prof.Médico, hará referencia a la siguiente página IngresarProfMed.jsp, donde se valida el RUT del profesional, generando la siguiente figura 9.3.4.1-2. Figura 9.3.4.1-2: Página de ingreso, RUT del profesional médico. Una vez ingresado el RUT correcto, se accede a la información referente al profesional, tal como se presenta en la figura 9.3.4.1-3 Figura 9.3.4.1-3: Página del profesional médico. Por lo tanto, el ingreso del RUT como el código, deberían hacer referencia a la página del profesional médico. 121 9.4 Anexo IV: Código Fuente 9.4.1 Código fuente, aplicación JESS 9.4.1.1 Código fuente de la clase RulesEnfermedades.java package cl.aaguilar.rules.defs; import jess.JessException; import jess.Rete; import jess.Value; public class RulesEnfermedades { //public static final Logger logger = Logger.getLogger(RulesPerson.class); public String resultRules(String strSintomas,String strIntensidades, String strDuraciones){ Rete r = null; Value v = null; String result = null; try { //uso del algoritmo de rete; r = new Rete(); r.eval("( deftemplate sintomas (multislot sintoma) (multislot int) (multislot t) )"); //define un template con sus atributos síntomas, intensidades, tiempo; //multislot es un atributo que puede recibir una lista de atributos; r.eval("(watch all)"); r.eval("(reset)"); r.eval("( deffunction contar_categoria_m ($?SIN) " + " (bind ?cat_m (create$ SIN4 SIN5 SIN6 SIN7 SIN8 SIN11 SIN12 SIN14 SIN16 SIN15 SIN18 SIN21 SIN23 SIN24 SIN27 ) )" + " (bind ?c 0)" + " (foreach ?x (create$ ?SIN) ( if (member$ ?x ?cat_m) then (++ ?c) ) )" + " (return ?c))"); //esta funcion devuelve cuantos síntomas ingresados pertenecen a la; //categoría m; 122 r.eval("( deffunction "(bind ?cat_m "(bind ?c 0)" "(foreach ?x ?cat_m) then (++ ?c) ) )" + "(return ")"); contar_categoria_l ($?SIN)" + (create$ SIN1 SIN2 SIN3 ) )" + + (create$ ?SIN) ( if (member$ ?x ?c) " + //esta función devuelve cuantos síntomas ingresados pertenecen a la; //categoría l; r.eval("( deffunction contar_categoria_g1 ($?SIN)" + "(bind ?cat_m (create$ SIN9 SIN20 ) )" + "(bind ?c 0)" + "(foreach ?x (create$ ?SIN) ( if (member$ ?cat_m) then (++ ?c) ) )" + "(return ?c) " + ")"); ?x //esta función devuelve cuantos síntomas ingresados pertenecen a la; //categoría g1; r.eval("( deffunction contar_categoria_g2 ($?SIN)" + "(bind ?cat_m (create$ SIN10 SIN13 SIN17 SIN19 SIN22 SIN25 SIN26 ) )" + "(bind ?c 0)" + "(foreach ?x (create$ ?SIN) ( if (member$ ?x ?cat_m) then (++ ?c) ) )" + "(return ?c) " + ")"); //esta función devuelve cuantos síntomas ingresados pertenecen a la; //categoría g2; r.eval("( deffunction contar_intensidad (?int $?I)" + "(bind ?c 0)" + "(foreach ?x (create$ ?I) ( if then (++ ?c) ) ( eq ?x ?int ) )" + "(return ?c)" + "" + ")"); //recibe 2 parámetros, una intensidad llamada int y una lista de; //intensidades $?I, cuenta cuantas intensidades son = int en la lista; //de intensidades; r.eval("( deffunction tiempo_d (?d $?T)" + "(foreach ?x (create$ ?T) ( if ( < ?x ?d (return FALSE) ) )" + "(return TRUE) " + ")"); ) then //recibe un tiempo ?d que son días y una lista de días $?T,y lo que; //hace es, si uno de los días es < al dia ¿d devuelve falso sino; //verdadero; 123 r.eval("(defrule f32.0" + "(sintomas (sintoma $?list1&:( and (>= (contar_categoria_l ?list1) 2) ( = (length$ ?list1) (contar_categoria_l ?list1) ) ) ) ) " + //deben haber al menos 2 síntomas presentes de categoría l; //todos los parámetros pertenecen a la categoría l; baja ?list2)2) ) "(sintomas ) )" + (int $?list2&:(>=(contar_intensidad //deben haber al menos 2 intensidades que sean bajas; "(sintomas (t $?list3&:(tiempo_d 14 ?list3) ) )" + "=>" + //todos los tiempos deben ser >=14 días; "(printout t \"Episodio Depresivo Leve!\" crlf)" + ")"); r.eval("(defrule f32.1" + "(sintomas (sintoma $?list1&:( and ( >= (contar_categoria_l ?list1) 2) ( >= (+ (contar_categoria_l ?list1) (contar_categoria_m ?list1) ) 6 ) ( = (length$ ?list1) ( + (contar_categoria_l ?list1 ) (contar_categoria_m ?list1) (contar_categoria_g1 ?list1) ) ) ) ) )" + //deben haber al menos 2 síntomas de categoría l; //la suma de categoría l y m deben ser >=6; //todos los síntomas deben pertenecer a las categorías l,m o g1; "(sintomas moderada ?list2) 3) ) )" + (int $?list2&:( >= (contar_intensidad //deben haber al menos 3 intensidades moderadas; "(sintomas (t $?list3&:(tiempo_d 14 ?list3) ) )" + "=>" + //todos los tiempos deben ser >=14 días; "(printout t \" crlf)" + ")"); 124 Episodio Depresivo Moderado!\" r.eval("(defrule f32.2" + "(sintomas (sintoma $?list1&:( and ( >= (contar_categoria_l ?list1) 2) ( >= (contar_categoria_g1 ?list1) 1) ( >= (+ (contar_categoria_l ?list1) (contar_categoria_m ?list1) ) 8 ) ( = (length$ ?list1) ( + (contar_categoria_l ?list1 ) (contar_categoria_m ?list1) (contar_categoria_g1 ?list1) ) ) ) ) )" + //deben haber al menos 2 de categoría l, y una de categoría g1; //la suma de las categorías l y m >=8; //todos los síntomas deben pertenecer a la categoría l, m o g1; "(sintomas (int $?list2&:( >= (contar_intensidad grave ?list2) 8) ) )" + //deben haber al menos 8 intensidades graves; "(sintomas (t $?list3&:(tiempo_d 8 ?list3) ) )" + "=>" + //deben ser >=8 días; "(printout Síntomas Psicóticos!\" crlf)" + ")"); t \"Episodio Depresivo Grave sin r.eval("(defrule f32.3" + "(sintomas (sintoma $?list1&:( and ( >= (contar_categoria_l ?list1) 2) ( >= (contar_categoria_g2 ?list1) 1) ( >= (+ (contar_categoria_l ?list1) (contar_categoria_m ?list1) ) 8 ) ( = (length$ ?list1) ( + (contar_categoria_l ?list1 ) (contar_categoria_m ?list1) (contar_categoria_g1 ?list1) (contar_categoria_g2 ?list1)) ) ) ) )" + //deben haber al menos 2 de categoría l, al menos una de categoría g2; //la suma de las categorías l y m deber ser >=8; //todos los síntomas deben pertenecer a las categorías l,m,g1 y g2; "(sintomas (int $?list2&:( >= (contar_intensidad grave ?list2) 8) ) )" + //deben haber al menos >=8 síntomas de intensidad grave; "(sintomas (t $?list3&:(tiempo_d 8 ?list3) ) )" + "=>" + //deben durar al menos 8 días; "(printout Síntomas Psicóticos!\" crlf)" + ")"); t \"Episodio 125 Depresivo Grave con r.eval("(assert ( sintomas( sintoma " + strSintomas + ") (int " + strIntensidades + ") (t "+ strDuraciones +" )))"); v = r.eval("(run)"); result = v.stringValue(r.getGlobalContext()); return result; } catch (JessException ex) { ex.printStackTrace(); } return result; } } 9.4.1.2 Código fuente de la clase RulesHamilton.java package cl.aaguilar.rules.defs; import jess.JessException; import jess.Rete; import jess.Value; public class RulesHamilton { public String resultRules(int cant_siempre, int cant_casisiempre){ Rete r = null; Value v = null; String result = null; try { r = new Rete(); r.eval("(deftemplate test_hamilton (slot cant_siempre) (slot cant_casisiempre) )"); r.eval("(watch all)"); r.eval("(reset)"); r.eval("(defrule resultado_test" +"\"Da el resultado del test\"" +"(test_hamilton {cant_siempre cant_casisiempre > 5})" > 5 || //cant_siempre y cant_casisiempre deben ser >5 para ser depresivo; +"=>" +"(printout t \"Paciente es depresivo\" crlf))" 126 +"resultado_test: +1+1+1+t" ); cant_siempre+") r.eval("(assert (test_hamilton (cant_siempre "+ (cant_casisiempre "+ cant_casisiempre+") ))"); v = r.eval("(run)"); result = v.stringValue(r.getGlobalContext()); return result; } catch (JessException ex) { ex.printStackTrace(); } return result; } } 9.4.1.3 Código fuente de la clase Enfermedades.java package cl.aaguilar.rules.domain; public class Enfermedades { private String[] sintomas; private String[] intensidades; private int[] duraciones; public Enfermedades() { } public int[] getDuraciones() { return duraciones; } public void setDuraciones(int[] duraciones) { this.duraciones = duraciones; } public String[] getIntensidades() { return intensidades; } public void setIntensidades(String[] intensidades) { this.intensidades = intensidades; } 127 public String[] getSintomas() { return sintomas; } public void setSintomas(String[] sintomas) { this.sintomas = sintomas; } } 9.4.1.4 Código fuente de la clase TestHamilton.java package cl.aaguilar.rules.domain; public class TestHamilton { private private private private int int int int cant_siempre; cant_casisiempre; cant_no; cant_algunasveces; public int getCant_algunasveces() { return cant_algunasveces; } public void setCant_algunasveces(int cant_algunasveces) { this.cant_algunasveces = cant_algunasveces; } public int getCant_casisiempre() { return cant_casisiempre; } public void setCant_casisiempre(int cant_casisiempre) { this.cant_casisiempre = cant_casisiempre; } public int getCant_no() { return cant_no; } 128 public void setCant_no(int cant_no) { this.cant_no = cant_no; } public int getCant_siempre() { return cant_siempre; } public void setCant_siempre(int cant_siempre) { this.cant_siempre = cant_siempre; } } 9.4.1.5 Código fuente de la clase ProcessEnfermedades.java package cl.aaguilar.rules.process; import cl.aaguilar.rules.defs.RulesEnfermedades; import cl.aaguilar.rules.domain.Enfermedades; public class ProcessEnfermedades { ProcessEnfermedades(String [] sintomas, String[] intensidades, int[] duraciones) { Enfermedades enfermedad = new Enfermedades(); enfermedad.setSintomas(sintomas); enfermedad.setIntensidades(intensidades); enfermedad.setDuraciones(duraciones); RulesEnfermedades re = new RulesEnfermedades(); String strSintomas = "", strIntensidades = "", strDuraciones = ""; for ( int i = 0; i < enfermedad.getSintomas().length; i++ ) strSintomas += enfermedad.getSintomas()[i] + " "; for ( int i = 0; i < enfermedad.getIntensidades().length; i++ ) strIntensidades += enfermedad.getIntensidades()[i] + " "; for ( int i = 0; i < enfermedad.getDuraciones().length; i++ ) strDuraciones += enfermedad.getDuraciones()[i] + " "; 129 String res = re.resultRules( strSintomas, strIntensidades, strDuraciones); System.out.println("resultado test: " + res); } public static void main(String[] args) { //test String[] sintomas = args[0].split(" "); String[] intensidades = args[1].split(" "); String[] duraciones_str = args[2].split(" "); int[] duraciones = new int[duraciones_str.length]; for (int i = 0; i < duraciones.length; i++) { duraciones[i] = Integer.parseInt(duraciones_str[i]); } ProcessEnfermedades rules = new ProcessEnfermedades( sintomas, intensidades, duraciones); } } 9.4.1.6 Código fuente de la clase ProcessTestHamilton.java package cl.aaguilar.rules.process; import cl.aaguilar.rules.defs.RulesHamilton; import cl.aaguilar.rules.domain.TestHamilton; public class ProcessTestHamilton { private String resultado; public String getResultado() { return resultado; } public ProcessTestHamilton(int cant_siempre, int cant_casisiempre) { TestHamilton test = new TestHamilton(); test.setCant_siempre( cant_siempre); test.setCant_casisiempre( cant_casisiempre); RulesHamilton rh = new RulesHamilton(); resultado = rh.resultRules( test.getCant_siempre(), test.getCant_casisiempre()); } 130 public static void main(String[] args) { //test int cant_siempre = Integer.parseInt(args[0]); int cant_casisiempre = Integer.parseInt(args[1]); ProcessTestHamilton rules = new ProcessTestHamilton(cant_siempre, cant_casisiempre); } 9.4.2 Código fuente, aplicación WEB. 9.4.2.1 Código fuente, valida usuario. package controller; import home.PmedicoHome; import java.io.IOException; import import import import import javax.servlet.RequestDispatcher; javax.servlet.ServletContext; javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import model.Pmedico; /** * Servlet implementation class for Servlet: LoginControlle * */ public class LoginController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { private static final long serialVersionUID = 1L; public LoginController() { super(); } protected void doGet(HttpServletRequest request, response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } HttpServletResponse protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub String forward; 131 if(request.getParameter("action")!=null&& request.getParameter("action").compareTo("validausuario") == 0) { forward = "/ct_acceso1.jsp"; } else { int user = Integer.parseInt(request.getParameter("user")); String pass = request.getParameter("pass"); System.out.println(user + " " + pass); PmedicoHome ph = new PmedicoHome(); Pmedico pmedico = ph.getPmedico(user, pass); if(pmedico != null) forward = "/portada21.jsp"; else forward = "/ct_validarusuario.jsp"; } System.out.println("forward="+forward); ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } } 9.4.2.2 Código fuente, controlador paciente. package controller; import beans.*; import home.ExamenHome; import home.PacienteHome; import java.io.IOException; import java.math.*; import import import import import javax.servlet.RequestDispatcher; javax.servlet.ServletContext; javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import beans.PacienteBean; import model.FichaClinica; import model.Paciente; import model.Pmedico; /** * Servlet implementation class for Servlet: LoginControlle * */ public class PacienteController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { 132 private static final long serialVersionUID = 1L; public PacienteController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println(":: " + request.getParameter("action")); if(request.getParameter("action").compareTo("obtenerPaciente") == 0) getPaciente(request, response); if(request.getParameter("action").compareTo("fichaPaciente") == fichaPaciente(request, response); 0) if(request.getParameter("action").compareTo("ingresoPaciente") == 0) ingresoPaciente(request, response); if(request.getParameter("action").compareTo("validarPaciente") == 0) validarPaciente(request, response); } private void validarPaciente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forward = ""; if(request.getParameter("action") !=null && request.getParameter("action").compareTo("validarPaciente") == 0) { forward = "/IngresarPac.jsp"; } ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void ingresoPaciente(HttpServletRequest request, HttpServletResponse response) { // TODO Auto-generated method stub int rut = Integer.parseInt(request.getParameter("rut")); String dvc = request.getParameter("dv"); int dv; if(dvc.toUpperCase().compareTo("K") == 0) dv = -1; else dv = Integer.parseInt(request.getParameter("dv")); 133 String nombres = request.getParameter("nombres"); String apellidos = request.getParameter("apellidos"); String nacimiento = request.getParameter("nacimiento"); int edad = Integer.parseInt(request.getParameter("edad")); String sexo = request.getParameter("sexo"); String direccion = request.getParameter("direccion"); int telefono = Integer.parseInt(request.getParameter("fonos")); String estado = request.getParameter("civil"); String ocupacion = request.getParameter("ocupacion"); String prevision = request.getParameter("prevision"); String comuna = request.getParameter("comuna"); String provincia = request.getParameter("provincia"); String region = request.getParameter("region"); System.out.println(estado); Paciente paciente = new Paciente(rut,dv,nombres,apellidos,nacimiento,edad,sexo,estado,telefono, ocupacion,prevision,direccion,comuna,provincia,region); //USAR EL OTRO //CONSTRUCTOR PacienteHome ph = new PacienteHome(); String motivo = request.getParameter("textarea3"); String apertura = request.getParameter("apertura"); String familiares = request.getParameter("textarea2").trim(); String habitos = request.getParameter("textarea"); String depresion = request.getParameter("depresion"); String enfneurologicas = request.getParameter("enfneurologicas"); String hepatitis = request.getParameter("hepatitis"); String hiperarterial = request.getParameter("hiperarterial"); String alergia = request.getParameter("alergia"); String asmabronquial = request.getParameter("asmabronquial"); String ulcera = request.getParameter("ulcera"); String hemopatias = request.getParameter("hemopatias"); String psicopatia = request.getParameter("psicopatia"); String coronariopatia = request.getParameter("coronariopatia"); String diabetes = request.getParameter("diabetes"); String fiebresprolongadas = request.getParameter("fiebresprolongadas"); String uropatias = request.getParameter("uropatias"); String endocrinopatias = request.getParameter("endocrinopatias"); String causaporenfermedad = request.getParameter("causaporenfermedad"); String motivosocial = request.getParameter("motivosocial"); String motivolaboral = request.getParameter("motivolaboral"); String bajaautoestima = request.getParameter("bajaautoestima"); String perdidafamiliar=(String)request.getParameter("perdidafamiliar"); String otros = request.getParameter("otros"); System.out.println(alergia); FichaClinica ficha = new FichaClinica(rut,apertura, motivo, habitos, familiares,depresion, enfneurologicas, hepatitis, hiperarterial, alergia, asmabronquial, ulcera, hemopatias, psicopatia, coronariopatia, diabetes, fiebresprolongadas, uropatias, endocrinopatias, causaporenfermedad, motivosocial, motivolaboral, perdidafamiliar, bajaautoestima, otros); ph.createPaciente( paciente,ficha); } private void fichaPaciente(HttpServletRequest request, HttpServletResponse response) { } 134 private void getPaciente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forward; Paciente paciente = null; FichaClinica ficha = null; String strRut = request.getParameter("rut").trim(); if (strRut.matches("\\d+")) { int rut = Integer.parseInt(strRut); PacienteHome ph = new PacienteHome(); paciente = ph.getPaciente(rut); ficha = ph.getFicha(rut); System.out.println(ficha); } if(paciente != null) { forward = "/rg_tpacte_existente.jsp"; request.setAttribute("paciente", paciente); request.setAttribute("ficha", ficha); } else{ forward = "/ct_validarpaciente.jsp"; } ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } } 9.4.2.3 Código fuente, controlador diagnósticos. package controller; import import import import home.DiagnosticoHome; home.ExamenHome; home.PacienteHome; home.SeguimientoPacienteHome; import java.io.IOException; import java.util.ArrayList; import import import import import javax.servlet.RequestDispatcher; javax.servlet.ServletContext; javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import model.Diagnostico; import model.Examen; import model.FichaClinica; 135 import model.Paciente; import model.Tratamiento; import model.DetalleTratamiento; import model.SeguimientoPaciente; /** * Servlet implementation class for Servlet: LoginControlle * */ public class DiagnosticoController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { public DiagnosticoController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub if(request.getParameter("action").compareTo("ingresardiagnostico") == 0) ingresardiagnostico(request, response); if(request.getParameter("action").compareTo("ingresarpacdiagnos") == 0) ingresarpacdiagnos(request, response); if(request.getParameter("action").compareTo("ingresarpactratam") == 0) ingresarpactratam(request, response); if(request.getParameter("action").compareTo("consultardiagnostico") == 0) consultardiagnostico(request, response); if(request.getParameter("action").compareTo("detallediagnostico") == 0) detallediagnostico(request, response); if(request.getParameter("action").compareTo("ingresarpacseguimien to") == 0) ingresarpacseguimiento(request, response); if(request.getParameter("action").compareTo("crearseguimiento") == 0) crearseguimiento(request, response); if(request.getParameter("action").compareTo("consultarseguimiento") == 0) consultarseguimiento(request, response); if(request.getParameter("action").compareTo("realizarDiagnostico") == 0) realizarDiagnostico(request, response); 136 } private void realizarDiagnostico(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forward = ""; forward = "/Realizardiagnostico.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void ingresardiagnostico (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String patologia = request.getParameter("cod_patologia"); int rutpac = Integer.parseInt(request.getParameter("rutpac")); int rutprofmed= Integer.parseInt(request.getParameter("rutprofmed")); String cod = request.getParameter("cod_diagnostico"); String nombre_diagnostico = request.getParameter("nombre_diagnostico"); String fecha_diagnostico = request.getParameter("fecha_diagnostico"); String descripcion_diagnostico = request.getParameter("descripcion_diagnostico"); String descripcion_tratamiento = request.getParameter("descripcion_tratamiento"); String observaciones_tratamiento = request.getParameter("observaciones_tratamiento"); Diagnostico diagnostico = new Diagnostico(rutpac, rutprofmed, nombre_diagnostico, fecha_diagnostico, descripcion_diagnostico, patologia, cod); Tratamiento tratamiento = new Tratamiento(descripcion_tratamiento, observaciones_tratamiento); diagnostico.setTratamiento(tratamiento); ArrayList<DetalleTratamiento> detalletratamientos = new ArrayList<DetalleTratamiento>(); int num = Integer.parseInt(request.getParameter("num_tratamientos")); for (int i = 0; i < num; i++) { String nombre_farmaco = request.getParameter("farmaco" + (i+1)); String cod_det = request.getParameter("codtratam" + (i+1)); String dosis = request.getParameter("dosis" + (i+1)); int comprimidos_diario = 0; try { comprimidos_diario = Integer.parseInt( request.getParameter("comprimidos" + (i+1))); } catch (NumberFormatException ex) { } String fecha_inicio = request.getParameter("fechainicio" + (i+1)); String fecha_termino = request.getParameter("fechafinal" + (i+1)); 137 if ( nombre_farmaco.equals("") && dosis.equals("") && cod_det.equals("")) continue; DetalleTratamiento detalletratamiento = new DetalleTratamiento(cod_det, nombre_farmaco, dosis, comprimidos_diario, fecha_inicio, fecha_termino); detalletratamientos.add(detalletratamiento); } tratamiento.setDetalletratamientos(detalletratamientos); DiagnosticoHome dh = new DiagnosticoHome(); dh.createDiagnostico(diagnostico); } private void crearseguimiento (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int num_diagnosticos = Integer.parseInt(request.getParameter("num_diagnosticos")); for (int i = 0; i < num_diagnosticos; i++) { String String String String String String diagnos_id = request.getParameter("diagnos_id"+(i+1)); codpmed= request.getParameter("codpmed"+(i+1)); fechacontrol = request.getParameter("fechacontrol"+(i+1)); asistencia = request.getParameter("asistencia"+(i+1)); evalglobal = request.getParameter("evalglobal"+(i+1)); proxcita = request.getParameter("proxcita"+(i+1)); if (!( codpmed.equals("") || fechacontrol.equals("") || asistencia.equals("") || evalglobal.equals("") || proxcita.equals(""))) { SeguimientoPaciente seguimientopaciente = new SeguimientoPaciente (diagnos_id, codpmed, fechacontrol, asistencia, evalglobal, proxcita); SeguimientoPacienteHome sh = new SeguimientoPacienteHome(); sh.createSeguimientoPaciente(seguimientopaciente); } } } private void ingresarpacseguimiento (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException int rutpac = Integer.parseInt(request.getParameter("rutpac")); PacienteHome ph = new PacienteHome(); Paciente paciente = ph.getPaciente(rutpac); String forward; if(paciente != null) { SeguimientoPacienteHome sph = new SeguimientoPacienteHome(); ArrayList<Diagnostico> diagnosticos = sph.obtenerDiagnostico(rutpac); request.setAttribute("desde_ingresarpaciente", true); 138 { request.setAttribute("diagnosticos", diagnosticos); forward = "/seguimientopac.jsp"; } else forward = "/ct_validarpaciente.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void ingresarpacdiagnos (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int rutpac = Integer.parseInt(request.getParameter("rutpac")); PacienteHome ph = new PacienteHome(); Paciente paciente = ph.getPaciente(rutpac); String forward; if(paciente != null) { request.setAttribute("desde_ingresarpaciente", true); forward = "/rg_tdiagxpatologia.jsp"; } else forward = "/ct_validarpaciente.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void ingresarpactratam (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException int rutpac = Integer.parseInt(request.getParameter("rutpac")); PacienteHome ph = new PacienteHome(); Paciente paciente = ph.getPaciente(rutpac); String forward; if(paciente != null) { request.setAttribute("desde_ingresarpaciente", true); forward = "/rg_tdiagxpatologia.jsp"; } else forward = "/ct_validarpaciente.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } 139 { private void consultardiagnostico (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int rut_pac = Integer.parseInt(request.getParameter("pac_rut")); DiagnosticoHome dh = new DiagnosticoHome(); ArrayList<Diagnostico> diagnostico = dh.getDiagnosticos(rut_pac); request.setAttribute("diagnosticos", diagnostico); String forward="/emisiondiagnos.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void detallediagnostico (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int id = Integer.parseInt(request.getParameter("id")); DiagnosticoHome dh = new DiagnosticoHome(); Diagnostico diagnostico = dh.getDiagnostico(id); Tratamiento tratamiento = dh.getTratamiento( diagnostico.getId()); ArrayList<DetalleTratamiento> detalletratamiento = dh.getDetalleTratamiento(tratamiento.getId()); request.setAttribute("diagnostico", diagnostico); request.setAttribute("tratamiento", tratamiento); request.setAttribute("detalletratamiento", detalletratamiento); String forward="/rg_tdiagxpatologia1.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void consultarseguimiento (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException int pac_rut = Integer.parseInt(request.getParameter("pac_rut")); SeguimientoPacienteHome sph = new SeguimientoPacienteHome(); ArrayList<SeguimientoPaciente> seguimientos = sph.getSeguimientos(pac_rut); request.setAttribute("seguimientos", seguimientos); String forward="/seguimientopac1.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } } 140 { 9.4.2.4 Código fuente, controlador JESS. package controller; import java.io.IOException; import import import import import javax.servlet.RequestDispatcher; javax.servlet.ServletContext; javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import cl.aaguilar.rules.process.ProcessTestHamilton; /** * Servlet implementation class for Servlet: LoginControlle * */ public class JESSController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { private static final long serialVersionUID = 1L; public JESSController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(request.getParameter("action").compareTo("obtenerresultadohamil ton") == 0) obtenerresultadohamilton(request, response); if(request.getParameter("action").compareTo("detectardiagnostico") == 0) detectardiagnostico(request, response); } private void detectardiagnostico(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException final int NUM_SINTOMAS = 27; String[] estados = new String[NUM_SINTOMAS]; String[] intensidad = new String[NUM_SINTOMAS]; int[] duracion = new int[NUM_SINTOMAS]; 141 { for (int i = 1; i <= NUM_SINTOMAS; i++) { estados[i] = request.getParameter("select" + i); intensidad[i] = request.getParameter("int" + i); duracion[i] = Integer.parseInt(request.getParameter("t" + i)); } } private void obtenerresultadohamilton(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException int siempre = Integer.parseInt(request.getParameter("siempre")); int casisiempre = Integer.parseInt(request.getParameter("casisiempre")); int algunasveces = Integer.parseInt(request.getParameter("algunasveces")); int no = Integer.parseInt(request.getParameter("no")); ProcessTestHamilton test_hamilton = new ProcessTestHamilton(siempre, casisiempre); String resultado_test = test_hamilton.getResultado(); request.setAttribute("resultado_test", resultado_test); String forward = "/TestJESS.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } } 9.4.2.5 Código fuente, controlador profesional médico package controller; import home.PacienteHome; import home.PmedicoHome; import java.io.IOException; import import import import import javax.servlet.RequestDispatcher; javax.servlet.ServletContext; javax.servlet.ServletException; javax.servlet.http.HttpServletRequest; javax.servlet.http.HttpServletResponse; import model.FichaClinica; import model.Paciente; import model.Pmedico; /** * Servlet implementation class for Servlet: LoginControlle * */ 142 { public class PmedicoController extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { private static final long serialVersionUID = 1L; public PmedicoController() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(request.getParameter("action").compareTo("busquedaPmedico") == 0) getbusquedaPmedico(request, response); if(request.getParameter("action").compareTo("consultarPmedico")== 0) getconsultaPmedico(request, response); } private void getPmedico(HttpServletRequest request, HttpServletResponse response) { String codigoprof = request.getParameter("codigoprof"); PmedicoHome ph = new PmedicoHome(); Pmedico medico = ph.busqueda(codigoprof); } private void getbusquedaPmedico(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String forward = ""; String codigoprof = request.getParameter("codigoprof"); PmedicoHome ph = new PmedicoHome(); Pmedico medico = ph.busqueda(codigoprof); request.setAttribute("medico",medico); forward="/rg_tprofmed.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void getconsultaPmedico(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String forward = ""; int rut = Integer.parseInt(request.getParameter("rut").trim()); PmedicoHome ph = new PmedicoHome(); Pmedico medico = ph.getconsultaPmedico(rut); 143 request.setAttribute("medico",medico); forward="/rg_tprofmed.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } private void fichaPaciente(HttpServletRequest request, HttpServletResponse response) { } private void getPaciente(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { int rut = Integer.parseInt(request.getParameter("rut")); PacienteHome ph = new PacienteHome(); Paciente paciente = ph.getPaciente(rut); String forward; if(paciente != null) { forward = "/rg_tpacte_existente.jsp"; request.setAttribute("paciente", paciente); } else forward = "/rg_tpacte_nuevo.jsp"; ServletContext app = getServletContext(); RequestDispatcher disp; disp = app.getRequestDispatcher(forward); disp.forward(request, response); } 9.4.2.6 Código fuente, DBConection.java package DBConections; import import import import java.io.IOException; java.sql.Connection; java.sql.DriverManager; java.sql.SQLException; public class DBConection { private static DBConection instance ; static Connection con = null; private DBConection(){ con = getConn(); } 144 public static DBConection getInstance() { if(instance == null || con == null) instance = new DBConection(); return instance; } private Connection getConn(){ Connection conexion=null; String drivers = "com.mysql.jdbc.Driver"; if (drivers != null) System.setProperty("jdbc.drivers", drivers); String url = "jdbc:mysql://localhost/clinica"; String username = "root"; String password = "apache"; try { conexion = DriverManager.getConnection(url, username, password); } catch (SQLException e2) { e2.printStackTrace(); } return conexion; } public Connection getConnection() throws SQLException, IOException { return con; } } 9.4.2.7 Código fuente, PmedicoBean.java public class PmedicoBean { private DBConection con; public PmedicoBean() { super(); } public Pmedico getPmedico(int rut, String pass) { Connection conn = null; ResultSet rs = null; Pmedico soc = null; PreparedStatement stat = null; con = DBConection.getInstance(); String query = "SELECT PMED_RUT, PMED_NOMBRE " + "FROM pmedico WHERE PMED_RUT = " + rut + " AND PMED_PASS = '" + pass + "'"; 145 try { conn = con.getConnection(); stat = conn.prepareStatement(query); rs = stat.executeQuery(); rs.next(); soc = new Pmedico(rs.getInt(1),rs.getString(2)); rs.close(); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } System.out.println(query + "\n"); return soc; } Cabe señalar, que los códigos que se dieron ha conocer se encuentran en la carpeta src del proyecto Web, detallados los más primordiales . (clases java (*.java)) Obviamente, algunos no se dieron a conocer, ya que las clases java, de las que no se mostraron, se podían importar. En todo caso, en la parte superior del código se visualizan todos los import que se requerían. Se observa también el código de conexión a la base de datos, proceso fundamental. Y por último, presentamos uno de los códigos Bean.java, la del profesional médico, PmedicoBean.java, sólo para explicar que la clase PmedicoBean crea una nueva instancia en la base de datos y devuelve el objeto del tipo clase. (cualquiera de los profesionales médicos) 146 9.5 Anexo V: Evaluación y validación del proyecto de tesis Antes que dé a conocer la evaluación y validación del proyecto de tesis, quisiera señalar tres puntos importantes. Puntos fundamentales para la finalización de este proyecto. 9.5.1 Motivación para proyecto de tesis La motivación del presente proyecto de tesis se originó por las siguientes razones: En la actualidad se puede observar la existencia de un alto porcentaje de personas que padecen algún tipo de Depresión. Y de no ser detectada a tiempo, podría implicar en un deterioro físico y psicológico en estas personas, afectando sus vidas, ya sea familiar y laboral. Por la necesidad del Hospital Base de Puerto Montt, específicamente, en el Policlínico de Psiquiatría. Actualmente no existe una herramienta que contribuya al diagnóstico médico de esta patología. En consecuencia, la incorporación de este prototipo de software médico, consiste en apoyar la toma de decisiones del profesional médico, mediante estos SBC desarrollados en el seno de la IA. Atendiendo a la necesidad expuesta previamente, se pretende desarrollar herramientas que permitan apoyar procesos presentes en el Hospital Base de Puerto Montt. Las modificaciones del actual sistema de salud y los requerimientos de mejoría, son de vital importancia para una atención integral a pacientes que presentan Depresión. Enfatizando primordialmente, a los programas que el gobierno efectúa hoy en día, como es el Plan Auge, iniciado a partir desde junio del año 2006. Es favorable, ya que al considerar el Plan Auge, existe mayor cobertura en respaldar a todas las personas que 147 presentan distintas patologías. Específicamente, a personas de pocos recursos, y de avanzada edad. Por lo tanto, es de gran necesidad la contribución estatal. Además, se están realizando convenios con ISAPRES, lo que beneficia al público a una mayor atención integral en el sistema de salud. 9.5.2 Restricciones a considerar. Referente a las restricciones, se asocia al hardware del hospital base de Puerto Montt, Policlínico de Psiquiatría, varios PCs fueron dados de baja, no se tenían las herramientas necesarias, sólo recurrir a los recursos disponibles que se tenían en ese momento y que no eran de lo mejor, ya que las especificaciones de los PCs eran muy limitadas. Por lo tanto, el funcionamiento del sistema se realizó en un notebook HP con las siguientes especificaciones: a) Software: Internet Explorer S.O Windows XP Home Edition, Versión 2002 Service Pack 2 b) Hardware: CPU Intel Core ,Centrino 1.86 GHz 512 MB RAM Disco Duro 60GB Con respecto al diseño de solución del prototipo, como otra limitación, radica en acotar y definir la cantidad de enfermedades, ya que es muy complejo analizarlas todas. Es necesario señalar, que no existe documentación de software construido en el establecimiento hospitalario de Puerto Montt, Servicio de Psiquiatría que otorgue apoyo al prototipo, sólo con gran disposición del equipo médico involucrado, y por supuesto 148 del profesor patrocinante e informante de la Escuela de Ingeniería Civil en Informática, es posible diseñar e implementar el prototipo de solución sugerido. 9.5.3 Comentarios Con relación al prototipo de proyecto de tesis, resultó al inicio un poco complicado y confuso, debido a la falta de conocimiento en esta área de I.A. Actualmente, no es muy común encontrar sistemas de este índole, pero sí, existe inquietud por tener nociones acerca de cómo operan estos sistemas que son bastantes eficientes. Después de ver todo esto tan ambiguo, se tornó muy interesante el investigar no sólo de las herramientas informáticas para ser aplicadas al sistema, sino también estudiar acerca de una enfermedad, que en algún momento de nuestra vida la podríamos tener. Aplicar la medicina en estos sistemas es un gran desafío, debido a las consideraciones que se deben tomar en cuenta cuando se realiza un diagnóstico médico. Por lo tanto, fue grato el haber desarrollado este prototipo, gracias al apoyo del profesor Martín Solar y Gladys Mansilla, que de alguna manera se responsabilizaron de este proyecto de tesis, junto a la psicóloga Melina Miranda. Además, con respecto a los resultados obtenidos, se puede decir que se logró a cabalidad con las expectativas, en tanto que los resultados fueron claros y aceptados por el profesional médico del Policlínico de Psiquiatría de Hospital Base de Puerto Montt, ya que la patología era de gran interés. En consecuencia, a continuación se da a conocer un certificado de acreditación, que valida y evalúa el sistema médico. 149 9.5.4 Certificado de validación y evaluación del proyecto de tesis. 150